diff --git a/plugins/hyperframes/.codex-plugin/plugin.json b/plugins/hyperframes/.codex-plugin/plugin.json index 86bc19cfa..fd3b90874 100644 --- a/plugins/hyperframes/.codex-plugin/plugin.json +++ b/plugins/hyperframes/.codex-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "hyperframes", - "version": "0.1.2", - "description": "Write HTML, render video. Compositions, GSAP animations, captions, voiceovers, audio-reactive visuals, and website-to-video capture for HyperFrames.", + "version": "0.7.25", + "description": "Write HTML, render video. Compositions, Tailwind v4 styles, GSAP and runtime adapter animations, captions, voiceovers, audio-reactive visuals, and website-to-video capture for HyperFrames.", "author": { "name": "HeyGen", "email": "hyperframes@heygen.com", @@ -14,7 +14,12 @@ "hyperframes", "video", "html", + "tailwind", "gsap", + "lottie", + "three", + "waapi", + "animejs", "animation", "composition", "rendering", @@ -26,7 +31,7 @@ "interface": { "displayName": "HyperFrames by HeyGen", "shortDescription": "Write HTML, render video", - "longDescription": "Build videos from HTML with HyperFrames. Author compositions with HTML + CSS + GSAP, use the CLI for init/preview/render/transcribe/tts, install reusable registry blocks and components, follow the GSAP animation reference, and turn any website into a video with the 7-step capture-to-video pipeline.", + "longDescription": "Build videos from HTML with HyperFrames. Author compositions with HTML, CSS, Tailwind v4 browser-runtime styles, GSAP, Anime.js, Lottie, Three.js, and WAAPI adapter patterns, use the CLI for the dev loop (init/preview/render), preprocess assets (tts/transcribe/remove-background) for compositions, install reusable registry blocks and components, and turn any website into a video with the 7-step capture-to-video pipeline.", "developerName": "HeyGen", "category": "Creativity", "capabilities": ["Read", "Write"], diff --git a/plugins/hyperframes/README.md b/plugins/hyperframes/README.md index a210b7462..931b0289d 100644 --- a/plugins/hyperframes/README.md +++ b/plugins/hyperframes/README.md @@ -4,19 +4,18 @@ OpenAI Codex plugin for [HyperFrames](https://hyperframes.heygen.com) — an ope ## What's included -Five skills for authoring and rendering video: +Imported from `heygen-com/hyperframes` `0.7.25`: -- **hyperframes** — composition authoring (HTML + CSS + GSAP), visual styles, palettes, house style, motion principles, transitions, captions, audio-reactive visuals -- **hyperframes-cli** — `hyperframes init / lint / preview / render / transcribe / tts / doctor / browser` -- **hyperframes-registry** — `hyperframes add` to install reusable blocks and components (social overlays, shader transitions, data viz, effects) -- **gsap** — tweens, timelines, easing, stagger, performance -- **website-to-hyperframes** — 7-step pipeline that captures a URL and produces a finished video +- **hyperframes** - router and capability map for video, animation, and motion-graphics requests +- **product-launch-video**, **website-to-video**, **faceless-explainer**, **pr-to-video**, **general-video** - end-to-end video creation workflows +- **embedded-captions**, **talking-head-recut**, **motion-graphics**, **music-to-video**, **slideshow**, **remotion-to-hyperframes** - specialized production workflows +- **hyperframes-core**, **hyperframes-animation**, **hyperframes-keyframes**, **hyperframes-creative**, **hyperframes-media**, **media-use**, **hyperframes-cli**, **hyperframes-registry** - domain skills for composition, animation, media, CLI usage, and registry components ## Requirements The skills invoke the `hyperframes` CLI via `npx hyperframes`, which needs: -- Node.js ≥ 22 +- Node.js >= 22 - FFmpeg on `PATH` See [hyperframes.heygen.com/quickstart](https://hyperframes.heygen.com/quickstart) for full setup. diff --git a/plugins/hyperframes/skills/embedded-captions/.gitignore b/plugins/hyperframes/skills/embedded-captions/.gitignore new file mode 100644 index 000000000..88eba0f44 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/.gitignore @@ -0,0 +1,24 @@ +# Matting weights: the PP-MattingV2 ONNX SHIPS with the skill (committed — the +# upstream exports have no stable public download URL). Ignore any other stray +# .onnx (e.g. experimental variants) so they don't get committed by accident. +assets/*.onnx +!assets/ppmattingv2_stdc1_human_544x960.onnx + +# Stray render/test artifacts — a project's outputs must never live inside the skill. +*.mp4 +*.webm +*.log +_*.png +frames_bg/ +frames_fg/ +history/ +*_shadow/ +transcript.json +plan.json +matte.fps +safe-zones.json + +.DS_Store +# CDPR fan-kit source SVG (528KB) — only its extracted metrics +# (assets/brand/cyberpunk-widths.json) are consumed at runtime. +assets/brand/Cyberpunk2077.svg diff --git a/plugins/hyperframes/skills/embedded-captions/CATALOG.md b/plugins/hyperframes/skills/embedded-captions/CATALOG.md new file mode 100644 index 000000000..6b0079ca4 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/CATALOG.md @@ -0,0 +1,91 @@ +# THE CATALOG — one front-end, three engines behind + +This is the skill's single selection surface. **The user picks an IDENTITY from +this table; everything else (engine, compiler, authoring file) is derived by +lookup — never ask the user (or yourself) "Standard or Cinematic or Theme?"** +Those are backend names; a product has one UX even when it has several engines. + +Routing procedure (replaces any mode decision): + +1. Probe the clip (decision gate + pre-flight probes as in SKILL.md). +2. Shortlist 2–3 identities from this table by **content register + the user's + own words + scene constraints**. +3. Recommend ONE with a one-line why; the user picks. +4. Author the identity's file (last column), then render with its engine's + pipeline. Done — no category question ever surfaced. + +## Identities + +| Identity | Reading surface | Voice (one line) | Recommend for | Scene needs | Author → engine | +| ------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------- | +| `cream` | scene-embedded column flow | warm poetic light, emergence + glow | introspective, narrative, emotional monologues | dark/mid-tone warm scenes (luma < 150) | cinematic.json → make-cinematic | +| `ink` | scene-embedded column flow | letterpress pressed into bright surfaces | the bright scenes everything else washes out on | BRIGHT scenes (luma > 150) | cinematic.json → make-cinematic | +| `editorial` | scene-embedded column flow | lowercase italic serif, pen-stroke glides | fashion / beauty / lyrical / premium brand films | mid/dark scenes | cinematic.json → make-cinematic | +| `keynote` | scene-embedded column flow | confident centered slides-in-the-scene | launches, founder updates, tech explainers (mood over verbatim reading) | any mid/dark | cinematic.json → make-cinematic | +| `documentary` | scene-embedded column flow | burn-in stillness, bone on charcoal | interviews, journalism, testimony — gravitas IS the style | any | cinematic.json → make-cinematic | +| `loud` | scene-embedded, body in front | percussion type that competes with the face | hype, social reels, sport, music, motivational | any (counter-accent handles warm) | cinematic.json → make-cinematic | +| `neon` | scene-embedded column flow | captions as neon signage in the dark | cyberpunk / nightlife / tech-noir / music | dark scenes | cinematic.json → make-cinematic | +| `glitch` | scene-embedded column flow | corrupted-feed RGB-split type | hacker / AI / dystopia content | mid/dark | cinematic.json → make-cinematic | +| `chrome` | scene-embedded column flow | liquid-metal hero with sheen sweeps | fashion-tech, Y2K, product-flex | mid/dark | cinematic.json → make-cinematic | +| `velocity` | scene-embedded column flow | every word arrives along its motion vector | sport, automotive, fitness, kinetic content | any mid/dark | cinematic.json → make-cinematic | +| `anchor` | verbatim lower-third rail + 1 settled climax | the quiet professional — fade-up rail that simply reads; the apex settles behind the subject with a drawn accent underline. Discipline IS the style. | explainers, tutorials, corporate, news-adjacent — **where every word must be read**; the conservative default | any (opaque rail; settle carries a soft veil) | theme.json → make-theme | +| `ordnance` | stamped verbatim rail + detonation apex | military marking system; everything has mass; the room reacts | punchy announcements, drops, "炸一点 / 像 AE 做的" asks | any (charge-dim makes its own contrast) | theme.json → make-theme | +| `terminal` | typed console panel + glyph-decode apex | the transcript is a signal log; apex decodes from noise | tech / data / AI / investigative, "终端/控制台/解码" asks | cool/dusk preferred | theme.json → make-theme | +| `neonsign` | warm tube rail + hand-written neon apex | a sign district at dusk; the apex is WRITTEN stroke by stroke | lifestyle / music / mood, "霓虹/手写" asks | dusk/dark backdrop; needs `python3` (stroke-path gen) | theme.json → make-theme | +| `stardust` | accumulating poem, condensing letters | words condense from dust and return to it | poetic / memory / science-wonder monologues | one clear column side (probe fails → fall back to `cream`) | theme.json → make-theme | +| `stomp` | full-frame takeover cards | hard-cut typographic takeover with a void before the drop | hooks, manifestos, ad openers — the words ARE the show | any (plate runs dimmed) | theme.json → make-theme | +| `lastpage` | manuscript rail + a blurred future-field | the future hangs unreadable in the room; one rack-focus reveals every faint line was the apex word | visionary thesis, prophecy-toned talks, trailers, literary content | mid/dark (the field needs air) | theme.json → make-theme | +| `scoreboard` | split-flap chyron rail + departures-board apex | stadium split-flap mechanics — body words flip-cycle wrong words on tiles before clacking onto the real one; ROW counter + odometer chip furniture; the apex is a giant departures board behind the subject that locks the word letter-by-letter under floodlights and a crowd-flash, status ticker types on | sports, transit/travel, scores, countdowns, reveals, "翻牌/记分牌/机场大屏" asks | any (board + chyron bring their own dark metal contrast) | theme.json → make-theme | +| `transit` | LED departure-strip rail + illumination-wipe apex | amber dot-matrix station PA — body words light column-by-column (L→R LED wipe + arrival flicker) on a docked departure strip whose lines page by scroll-snap; platform tag, ticking clock, ⚠ DELAYED → ● ON TIME gag; the apex panel expands behind the subject inside a chasing LED-marquee border, the word illuminates column-by-column under a PA flash + ding pulses, then pages up and collapses | travel/transit, announcements, schedules, countdowns, retro-terminal, "LED屏/车站到站/点阵屏" asks | any (LED strip + panel bring their own dark contrast) | theme.json → make-theme | +| `vhs` | camcorder OSD rail + REC-FREEZE tracking-slam apex | tape playback — permanent lens vignette + OSD furniture (▶ PLAY, ● REC, blinking green timestamp); body words carry a permanent red/cyan misregistration fringe, arrive by tracking glitch and REWIND off with flat-white echoes + scrub lines (the deck flips PLAY→REW in dead air); the apex is REC FREEZE: 1-frame white tear + head-switching noise bar, the word slams in behind the subject as three sheared tracking bands that SNAP into register, misregistration breathes through the hold under tape weave + auto-iris, then rewinds off | retro / nostalgia / found-footage / home-video, '90s tech, music & lifestyle edits, "录像带/VHS/复古/DV" asks | any (backlight-comp scrim makes its own contrast on bright skies) | theme.json → make-theme | +| `arcade` | arcade HUD rail + pixel-block boss-intro apex | 8-bit cabinet attract mode — the frame plays through CRT scanlines + a corner vignette; body words coin-pop onto a bordered HUD bar (blinking 1UP, CREDIT 01) with a 1-frame white blip each, emphasis words run a cyan→magenta palette swap, lines dissolve checkerboard; the apex is a BOSS INTRO behind the subject: the room dims, WARNING blinks twice, ~64 seeded pixel blocks fall quantized into a matrix grid over the word rect, the word flashes ON in Press Start 2P with chromatic ghost layers + a 3-frame palette strobe while letterbox bars slam in and a HI-SCORE odometer rolls top-right; everything dissolves checkerboard and the blocks drop away | gaming, retro-tech, playful hype, launches, achievement/level-up beats, "像素/街机/8-bit/打游戏" asks | any (boss dim + dark HUD bar bring their own contrast) | theme.json → make-theme | +| `dossier` | manila case-file strip + rubber-stamp apex | cold-war case file — carbon Special Elite HAMMERS onto a manila transcript strip char by char (seeded baselines + ribbon ink, every strike kicks the paper; typed case header, CONFIDENTIAL watermark, red ink circles around the evidence; pages are X-row over-struck and carriage-fed away); the apex is a RUBBER STAMP behind the subject: the footage goes sepia-archival, the stamp crushes in at −8° with a double-strike ghost + thin-ink patches, then holds DEAD STILL — sold only by a breathing paper indent — until the page is filed away with a mechanical yank | investigations, exposés, true-crime, document-driven storytelling, declassified/archival framing, "档案/卷宗/解密/盖章" asks | any (the manila strip is self-lit; the stamp brings its own sepia charge) | theme.json → make-theme | +| `laser` | beam-ignited rail + 6-beam laser-cage apex | concert laser rig in a blackout — every body word is IGNITED where a green and a magenta beam converge on it two frames early (flare pop, snap-on, single strobe on emphasis; a sweeper beam carries each line away); the apex is the drop: a 6-beam array sweeps to one hot point, the word ignites behind the subject in an additive glow stack with two controlled strobe pops, a criss-cross beam cage draws around it, the array fans out wide through the hold, then the beams sweep everything off L→R | music, nightlife, festivals, drops, hype reveals, keynote 'one more thing' beats, "激光/灯光秀/蹦迪字幕" asks | any (the concert blackout makes its own contrast, bright skies included) | theme.json → make-theme | +| `thunder` | rain-washed rail + branched-bolt strike apex | the storm is the editor — slate storm mood on the room, ambient slanted rain falling in front of the subject, and the sky "kisses" (1-frame brighten) on every body word; rail words arrive with a lit-bright lightning pop (emphasis = sheet-lightning double flash mirrored by a double sky-kiss); the apex is THE STRIKE: a hand-authored branched bolt flashes two frames before the word, the word slams in lit HARD with its shadow flipped toward the bolt, ozone under-glow breathes through the hold while the rain doubles, then everything washes downward with the rain | dramatic reveals, storm/weather content, epic hype beats, trailer-toned monologues, "雷电/闪电/暴风雨字幕" asks | any (charge-dim + radial word scrim make their own contrast, bright skies included) | theme.json → make-theme | +| `hologram` | volumetric projection plate + hologram-boot apex | every caption is LIGHT cast from an emitter — body words boot onto a scanlined projection plate with a rising sweep, a 1-frame interference glitch and a permanent cyan/magenta fringe (emphasis words drop out for 2 frames and restore brighter; lines drift in rotationY and exit by projector cut); the apex is the full volumetric boot: a desk emitter dot pops, the cone snaps wide, a seed beam fires, and the word materializes behind the subject as a 7-layer hologram with climbing interference bands — a hand passes through it before the projector cuts it back to the dot | tech / sci-fi / AI / space / imaging explainers, futuristic product reveals, "全息/投影/科幻字幕" asks | any (the apex scrim + dim make their own contrast; wants a lower frame edge for the emitter dots) | theme.json → make-theme | +| `biolume` | jellyfish glow-on rail + bioluminescent-bloom apex | deep-sea bioluminescence — the clip sinks into an abyss grade with a breathing vignette and every caption is a living light: body words GLOW ON like jellyfish (radial bloom from center while a cyan glow breathes in; emphasis words pulse a slow propulsion double-beat) across two coexisting floating rows and SINK away dimming; seeded plankton motes drift the open water and the ones ringing the apex are pulled into the bloom; the apex is the BLOOM behind the subject: a creature pre-glow double-beats and crushes to a point, the word condenses in, six luminous tendrils draw outward like filaments while caustics shimmer, cyan light spills onto the scene and spores burst past — then all the light sinks back into the deep | ocean / nature / science-wonder docs, dreamy or meditative monologues, slow night-time reveals, "深海/发光水母/水下字幕" asks | any (the abyss grade + pocket scrim make their own contrast on bright scenes) | theme.json → make-theme | +| `aurora` | iridescent sheen rail + silk-ribbon draw-on apex | polar-night elegance — two huge aurora blobs drift the sky all clip; body words are silk serif ink whose rose→teal→violet sheen drifts continuously through the letters (entrance = 2-frame flow-on + y8 settle; emphasis = one bright highlight sweep marching through the word), lines share two coexisting rows like a woven couplet and dissolve UPWARD into drifting light streaks; the apex is a SILK RIBBON: the hero word is hand-WRITTEN into the sky behind the subject stroke by stroke (script single-line font, blurred halo + bright core, a light mote riding the pen) and the aurora gradient keeps FLOWING through the drawn ribbon during the hold while a soft spill tints the sky and light motes rise past the subject — gentle, no shake | dreamy / romantic / wonder content, night-sky and travel pieces, poetry, weddings, elegant brand films, "极光/丝带/优雅手写字幕" asks | any (apex scrim + dark understroke carry contrast on bright skies; loves dusk/night) | theme.json → make-theme | +| `spectrum` | oscilloscope scope-band rail + phosphor trace-write apex | an oscilloscope is listening — a dark scope band hosts an ALWAYS-ALIVE waveform (seeded pseudo-RMS envelope: speech grows it, silence flattens it, every word arrival kicks a local burst) under VT323 phosphor lines that wipe in L→R over reserved slots with a 2-frame just-traced flash (emphasis words get a ticking frequency-readout chip, the trig LED blinks on every word); the apex is the trace itself LEAPING off the scope (surge column) to hand-WRITE the hero word in a thin phosphor script stroke, fill flicker-on, hum + breathe, then COLLAPSE to a flatline before the next spoken word — and on the FINAL word the trace explodes to max-amp chaos, flatlines to a single dot and stamps SIGNAL LOST | science / signal / audio / measurement / astronomy explainers, data-nerd content, retro-lab or synth aesthetics, "示波器/波形/信号字幕" asks | any (the scope band brings its own dark glass; the apex scrim handles bright skies); needs `python3` (stroke-path gen) | theme.json → make-theme | +| `papercut` | paper-chip craft rail + stop-motion papermat apex | stop-motion paper craft — the frame becomes an animator's table: body words are cream paper chips PLACED one by one (steps(2) drop, seeded crooked, ~5fps wobble) on a kraft strip with torn top edge, washi-taped corners and a handwritten cut&paste tag; emphasis words get a washi-tape slap, the final word is an accent-red sign-off chip, and a red paper star stands in for the hero word; the apex is a torn kraft mat slapped down behind the subject where torn-edge letter chips DROP with stepped gravity + anticipation shadows, land crooked, settle in 12fps poses, wobble at 8fps while a warm vignette charges — then the FINAL word bumps the table and everything scatters off down-right | craft/DIY, kids & family, indie product demos, behind-the-scenes, maker channels, "手工/剪纸/定格动画字幕" asks | any (kraft strip + cream chips bring their own warm contrast) | theme.json → make-theme | +| `popup` | pop-up book page rail + centerfold starburst apex | a pop-up book opens inside the frame — body words POP UP on a baseline hinge (rotationX back.out, paper overshoot, a growing back-shadow) along a cream page strip that unfolds from the bottom edge (center foldline, two alternating reading rows); emphasis words land bigger with a contact squash the page FEELS (1px strip dip), then flick-wobble with a blue paper strut leaning in behind; line exits fold flat in an L→R wave (the page closing), the whole page TILTS on the final word and the strip folds shut on the last frame; the apex is THE CENTERFOLD: blue + cream 12-point paper starbursts unfold behind the subject, the hero word pops up in three hinged clip-path segments, kraft struts lean in, backdrop + word wobble-settle TOGETHER and breathe through the hold — then the whole spread folds flat before the next sentence; a blue paper star holds the hero slot on the rail and paper confetti flicks past the subject at the pop | kids and family content, storytelling, education, greeting-card / wholesome brand spots, picture-book and craft channels, "立体书/弹出书/纸艺字幕" asks | any (the cream page strip is self-lit; the apex dusk scrim guards bright skies) | theme.json → make-theme | +| `chalkboard` | chalk-band rail + hand-written chalkwrite apex | night lecture — a worn deep-green chalk band where every word is SCRIBBLED in fast chalk (2-frame pop + steps(4) scribble reveal + dust puff at the base, seeded crooked); emphasis gets double underline dashes, the final word lands in yellow chalk, and between sentences an ERASER SWIPE smears the old words off (blurred light band, ghost smudges stay — chalk never fully erases); the apex: the band GROWS into a full blackboard behind the subject and the hero word is HAND-WRITTEN 130px tall stroke by stroke (jittered chalk nib, dust falling from the pen, blurred halo under a tight core), finished with a hand-slap dust CLAP in front of the subject + a 1-frame board shake and two violent accelerating underlines, then the halo breathes through the hold | education / explainers, science and lecture content, teacher channels, documentary asides, "黑板/粉笔/板书/老师讲课字幕" asks | any (the deep-green board brings its own contrast); needs `python3` (stroke-path gen) | theme.json → make-theme | +| `graffiti` | marker rail + spray-tagged handstyle apex | street bombing run — marker words FLICK onto the rail crooked (1-frame squeak skew, seeded rotation, back.out settle); emphasis takes alternating yellow/magenta paint + a spray-underline swoosh with overspray dots; spent lines are ROLLER-BUFFED away (gray roller sweep, wet smear lingers) and the final word lands BIG in yellow with the punch; the apex: the dusk wall dims, the can RATTLES, and the hero word is spray-TAGGED stroke by stroke behind the subject in fat yellow paint (dark under-stroke armor + blurred overspray halo + glowing nib + seeded overspray dots), paint DRIPS grow from the low points through the hold, a magenta paint splat pops at the pen-finish and the plate punches on it | street culture, hip-hop / rap, sneaker & fashion drops, urban sports, skate/BMX, rebellious brand spots, "涂鸦/喷漆/街头字幕" asks | any (the dark under-stroke armors the tag against bright skies); needs `python3` (stroke-path gen) | theme.json → make-theme | +| `brush` | washi paper-band rail + sumi-e brush-gesture apex | sumi-e study — a deckle-edged washi paper band swipes in behind a traveling brush-head shadow; body words are brush-WIPED on in a Mincho serif (clip reveal behind a per-word brush head, seeded ±1° tilt), emphasis gets a double curved ink underline, and spent lines are wiped OFF right-to-left like a wet cloth (erase brush head riding the wipe); the apex: a warm paper wash charges behind the subject and the hero word is written in ONE violent calligraphic gesture — pressure-tapered wet brush (four stacked stroke widths, blurred bleed underneath), start-SPLAT at the first pen contact with ink flecks kicking past the subject, spatter droplets ejected at the sharpest curves — then the ink BLEEDS into the paper through the hold (the work breathes) and a vermilion SEAL chop (観) stamps beside the ink with the plate punch | calm-authority explainers, craft / design / philosophy / Japan-adjacent content, tea / meditation / writing channels, elegant brand films, "水墨/毛笔/书法字幕" asks | mid/bright scene band (dark ink + its paper wash carry the contrast); needs `python3` (stroke-path gen) | theme.json → make-theme | +| `inkwater` | three-row ink rail + ink-drop bloom apex | sumi ink dropped in still water — paper-white radial washes back the text zones, Mincho-serif ink words BLEED into three fixed reading rows (blur+scale bleed over a paper-glow halo, dark blurred halo overshoots then tightens, an ink-settling hairline under each line, emphasis sheds a curling ink wisp) and spent lines re-dissolve upward like dispersing ink; the apex: a dark drop falls behind the subject, hits an invisible water surface at the word point and BLOOMS (three stacked blurred ink ellipses at counter-rotating rates + two thin ripple rings) while the world stills under a gentle vignette — the hero words resolve out of the blob on their own spoken times, breathe at the glyph edges through the hold, then re-dissolve before the next thought needs the reader | contemplative / literary / scientific-wonder narration, astronomy / nature / memory / essay films, poetry and slow-craft channels — one liquid meditative event instead of an impact, "水墨滴落/墨水字幕" asks | mid/bright scene band (dark ink + its paper washes carry the contrast) | theme.json → make-theme | +| `ransom` | cutout-chip collage rail + ransom-note slam apex | kidnapper's collage — every word is a chip clipped from a different page (cream Anton / black Inter / newsprint typewriter / accent-yellow marker, torn edges, hard offset shadows) PASTED crooked on the rail with misaligned baselines (the apex slam at low amplitude); emphasis words get a 1-frame RE-PASTE lift (shadow grows, rotation flips sign for good) and spent chips are RIPPED off one by one under 1-frame paper-tear flashes; the apex: a collage scrim darkens the sky and the hero word slams in letter by letter as a ransom note BEHIND the subject — each letter a different cutout chip, flight shadow popping tight on contact — the whole word JOLTS as the last letter lands (the plate punches with it), looms crooked through the hold, then is torn off chip by chip while the closing line speaks | true crime, mystery / thriller, heist energy, punk / DIY zine aesthetics, edgy drops, unhinged-comedy hooks, "勒索信/剪贴/拼贴字幕" asks | any (solid chip backgrounds carry their own contrast; the apex scrim guards bright skies) | theme.json → make-theme | + +## Shortlisting heuristics (identity-level, not category-level) + +- **"每个词都要被读到 / accessibility / 教程·新闻"** → rail or panel surfaces: + `anchor`, `ordnance`, `terminal` (all verbatim by construction). +- **"嵌进场景 / 电影感 / 高级"** → the column-flow ten; pick by register + scene luma + (bright → `ink`; warm dark → `cream`; fashion → `editorial`; …). Bright + must-read → `anchor`. +- **"炸 / 特效 / 酷炫 / 像 AE"** → `ordnance`, `stomp`, `terminal`, `loud` — pick by + what should explode: a word (`ordnance`), the frame (`stomp`), a decode (`terminal`), + every beat (`loud`). +- **Named worlds** → direct hits: 控制台/终端 → `terminal`; 霓虹/招牌 → `neonsign`; + 诗/星尘/记忆 → `stardust`; 军事/重击 → `ordnance`; 预言/未来/悬念揭示 → `lastpage`. +- **Scene constraints veto last**: luma > 180 kills cream/screen column looks + (→ `ink` or a rail/panel surface); dusk/dark unlocks `neon`/`neonsign`. +- **Unsure** → `anchor` (the conservative default: words read, scene safe, zero spectacle). + EXCEPTION: if the ask literally says "嵌进场景 / embed into the scene / 电影感", that signal + OUTRANKS the conservative default — go column-flow (pick by register + luma), not a rail. + +Adjacencies worth knowing (these pairs are why the old mode question was hard — +recommend by the difference, don't agonize over category): `loud` vs `ordnance` +(percussive type vs a themed world with plate reaction) · `neon` vs `neonsign` +(neon-styled captions vs a sign being written) · `cream` vs `stardust` (warm +embedded flow vs an accumulating poem with semantic dispersal) · `terminal` vs +`glitch` (a console WORLD with typed log + decode vs corrupted-feed styling on +normal captions) · `stomp` vs `loud` (every beat takes over the dead-center +frame vs energetic type that still shares the frame with the subject). + +## Rules + +- Identities are **engine-locked** — no cross combos. Opening a new combo (e.g. + another DNA under rail) is a validation event: render → user review → flip the + DNA's `deliveries.rail` flag (see dna/README.md). +- New identities join via their family's registry rules (dna/README.md for + classic, themes/README.md for themed — "any input, zero hand-fixing" bar). +- The engines' internals (Standard/Cinematic/Theme compilers, gates, layers) + are documented in their own files; this catalog is the only routing surface. diff --git a/plugins/hyperframes/skills/embedded-captions/SKILL.md b/plugins/hyperframes/skills/embedded-captions/SKILL.md new file mode 100644 index 000000000..e53942129 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/SKILL.md @@ -0,0 +1,286 @@ +--- +name: embedded-captions +description: 'Add captions to a talking-head video. ONE catalog (CATALOG.md) of 31 visual identities behind two engines: column-flow (captions composited INTO the scene — matte occlusion + mix-blend; cream/ink/editorial/keynote/documentary/loud/neon/glitch/chrome/velocity) and themed constitutions (anchor/ordnance/terminal/neonsign/stardust/stomp/scoreboard/transit/vhs/arcade/dossier/laser/thunder/hologram/biolume/aurora/spectrum/papercut/popup/chalkboard/graffiti/brush/inkwater/ransom/lastpage — e.g. a glyph-decode climax, a neon sign WRITTEN stroke by stroke, or the quiet `anchor` rail default). Route by identity, never by mode. Trigger on "captions/subtitles", "embed/cinematic captions", "VFX captions", "炸/特效/酷炫字幕", a named identity, or top-tier motion-graphics asks. Embedding every word is wrong for most talking-head content — `anchor` is the verbatim default. Pipeline: transcription → hyperframes remove-background matting → HTML render → ffmpeg overlay. Requires hyperframes and a single-subject clip.' +metadata: + tags: captions, embedded-captions, occlusion, matting, talking-head, rembg-matting, whisper, ffmpeg, cinematic +--- + +# Embedded Captions + +**One catalog, picked up front** ([CATALOG.md](CATALOG.md) — 17 identities; the three engines behind it are backend detail). **Standard** (default) builds a clean verbatim **rail** (lower-third subtitle carrying most text) + an **embed** climax composited _into_ the scene behind the subject at the peak. **Cinematic** is pure embed — no rail, every caption composited behind the subject (hero typography, accumulation, occlusion as the effect). **Theme** is a complete themed constitution — body paradigm × hero setpiece × front fx × plate reaction, composed from registries ([themes/README.md](themes/README.md)): `ordnance` `terminal` `neonsign` `stardust` `stomp`. Most explainer / voiceover is **Standard**; **embed is the scarce, earned peak** — embedding every word is the common mistake; Theme is for VFX-grade asks ("炸", "特效", "像 AE 做的"). + +--- + +## Operational flow (TL;DR) + +The craft prose below is long; the **pipeline itself is short** — and everything +deterministic is computed or compiled, never hand-written: + +1. **Decision gate** (refuse bad clips) → **pick ONE identity from [CATALOG.md](CATALOG.md)** (17 identities; engine/compiler derived by lookup — never surface a mode/category question) +2. `hyperframes init` (skip it if the project dir already exists with the video inside — `matte.cjs`/`transcribe.cjs` adopt any video in the dir as source.mp4) → **`bash scripts/prepare.sh `** (matte ∥ transcribe ∥ audio-envelope in parallel, then safe-zones v2 with scene palette/optics/lighting — one command, nothing forgotten) +3. **author a small JSON of creative choices** (read `safe-zones.json` first): + Cinematic → `plan.json` → `fill-timings.cjs` → `fit-fonts.cjs` → `make-composition.cjs`; + Theme → `theme.json` → `make-theme.cjs` (rail/panel/poem/takeover paradigms; `anchor` is the quiet rail default) +4. **Visual QA**: `node scripts/preview-frames.cjs ` → faithful composite previews in ~2s/frame (no render). Check § Visual QA before paying for a render. +5. `render-and-composite.sh` → gates (timing / occlusion+hero / overflow / hand-off) → `final.mp4` + +Load-bearing rules people miss: + +- **rail (default) + embed (promotion).** `drop` (filler, not shown) / `rail` (verbatim lower-third subtitle, in front, carries most text) / `embed` (a peak word composited behind the subject). **Standard mode does both**, embedding only the peak(s). See **§ Caption model**. +- **The video is delivered UNTOUCHED (Standard/Cinematic; **Theme mode's PLATE budget is the one sanctioned exception** — register-gated reaction beats (charge-dim, punch, shake, grain) defined per theme DNA and applied AFTER the matte composite so subject+text+plate move as one frame)** — captions are the only thing added; the matte just lets the subject occlude the embed track. Never grade/recolor/scanline the footage. +- Two rulebooks: **rail → [references/rail.md](references/rail.md)** (thin), **embed craft → [references/composition-craft.md](references/composition-craft.md)** (rich, embed-only). Skim by need. + +--- + +## Caption model — rail + embed + +Every spoken phrase is one of three things: + +| | What | How it's shown | +| --------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **drop** | filler — um/uh, stutters, self-corrections | not shown | +| **rail** | the default — ordinary spoken content (verbatim) | clean lower-third subtitle, **in front**, readable. A punch word can get an inline `emphasis` highlight (accent colour / active-word pop) — it stays on the rail. | +| **embed** | a promoted peak — the headline beat | one big word composited **behind the subject** (matte occlusion), designed entrance + exit | + +**The rail carries most of the text; embed is the scarce, earned peak.** Scarcity is **per beat/block, not per clip**: ≤1 hero per block (thought), never two co-visible, ≥ a beat of air between hero windows (the compiler warns under 0.6s). A short clip → usually 1–2; a long explainer → ~one per section. Among multiple heroes, the **largest authored one is the APEX** (it alone gets the full lockup embed + width-fit raise); smaller ones are **MINOR peaks** that ride their column as oversized emphasis lines (fg, damped motion) — not every beat needs the matte showcase, which is exactly what keeps the apex an event. Embedding every word is still the common mistake. + +Rail-surface identities build exactly this (rail = `rail.html`, embed = the climax in `index.html`). Column-flow identities drop the rail and make everything embed-style — recommend them only for mood-over-verbatim asks, never for explainer / voiceover where the words must read (CATALOG.md encodes this per identity). + +--- + +## Step 0 — pick ONE identity from the CATALOG + +**One front-end, three engines behind.** The user picks an IDENTITY from +[CATALOG.md](CATALOG.md) (17 entries: 12 classic + 5 themed); the engine, +compiler and authoring file are derived by lookup from the catalog row. +**Never surface "Standard vs Cinematic vs Theme" as a question** — those are +backend names (a product has one UX even with several engines). The catalog +encodes everything routing needs: reading surface, voice, recommend-for, scene +needs, adjacency notes for the genuinely-close pairs (loud↔ordnance, +neon↔neonsign, cream↔stardust). + +Procedure: probe the clip → shortlist 2–3 identities from the catalog → +recommend ONE with a one-line why → **the user picks** → author that identity's +file. Identities are engine-locked (no cross combos; opening one is a +validation event — see dna/README.md). + +**Always present your recommendation and let the user pick before you author.** Don't silently default. + +(The full identity table lives in [CATALOG.md](CATALOG.md) — single source of truth for routing. The engine docs below describe each backend's authoring contract.) + +**Recommendation heuristic**: use the "Shortlisting heuristics" in [CATALOG.md](CATALOG.md) — they are identity-level (e.g. "炸" shortlists ordnance/stomp/terminal/loud and picks by WHAT should explode), never category-level. Unsure → `anchor`. + +- **Cinematic** → write `plan.json` for a locked template, compiled by `make-composition.cjs`. +- **Theme** → read [themes/README.md](themes/README.md), author `theme.json`, run `scripts/render-theme.sh` (compiles + renders + plate reaction → **final_fx.mp4**). + +--- + +## Decision gate — RUN FIRST + +Probe the video and classify the scene before either mode. + +```bash +ffprobe # specs +ffmpeg -ss -i -vframes 1 sample.png # at 20/50/80% +``` + +Read the samples. Refuse if: + +- Multiple speakers / hard cuts (split & render each shot, or refuse) +- No human subject (this skill is for talking-head) +- Under 3 seconds, **no speech**, or face never clearly visible — `transcribe.cjs` warns when audio is near-silent (Whisper hallucinates words like "Thank you." over silence); **heed it and refuse** rather than caption fabricated words +- **Source already has burned-in captions / subtitles / heavy text graphics** — adding a second caption system conflicts and the footage ships untouched (no covering/inpainting). Burned text often appears only mid-clip: sample a **1fps contact sheet** (`ffmpeg -i in.mp4 -vf "fps=1,scale=160:-1,tile=10x5" sheet.png`), don't trust 3 spot frames. +- **Transcript is garbage** — non-native/heavy-accent speech can transcribe into confident gibberish. Sanity-read `transcript.json` before authoring; if it doesn't parse as language, try `WHISPER_MODEL=medium` once, else refuse (a verbatim rail of fabricated words is worse than no captions). +- Busy handheld with fast motion (matte flickers) + +### Pre-flight probes (cost nothing, prevent the worst failures) + +1. **Shot-cut probe.** Sample frames at 20%, 50%, 80%. If a different subject/scene appears, **trim the clip** before the cut. +2. **Letterbox / pillarbox probe.** Black bars on the first frame? Compute safe content rect and constrain caption placement inside it. +3. **Luminance probe.** Sample the caption region's average luminance — `under 60` → light text reads as-is, `60-180` → add the glyph scrim, `180+` → opaque text + scrim (never bare light text). **Cinematic templates are cream+`screen` and LOCKED** — use this probe to _pick a fitting identity_ (bright scenes → `ink`, or the opaque-rail `anchor` theme), never to recolour one. +4. **Identity recommendation by tone (you recommend; the user picks — see Step 0 + CATALOG.md).** explainer / interview / must-read words → rail/panel-surface identities; poetic / social / "cinematic" → column-flow identities by register; "炸 / 特效 / VFX" / named worlds → themed identities. When unsure → `anchor` (words read, scene safe) — but present a shortlist and let the user choose. + +--- + +## Pipeline — 5 steps + +``` +1. hyperframes init --non-interactive --video +2. bash scripts/prepare.sh # matte ∥ transcribe (parallel) → safe-zones. One command. + # → frames_fg/ transcript.json safe-zones.json +3. [AGENT STEP — the only creative step] author a small JSON; see below by mode + Cinematic: author plan.json → node scripts/fill-timings.cjs → fit-fonts.cjs → make-composition.cjs + Theme: author theme.json → bash scripts/render-theme.sh (compiles + renders + plate fx) +4. node scripts/preview-frames.cjs # ~2s/frame composite previews → § Visual QA (BEFORE the render) +5. bash scripts/render-and-composite.sh # gates → final.mp4 + history/ snapshot + (Theme mode: SKIP steps 3b/5 — render-theme.sh already runs compile + render-and-composite + + _postfx.sh; the deliverable is final_fx.mp4, final.mp4 is pre-plate-reaction) +``` + +Step 1's `init` checks the installed skills against the latest on GitHub and updates the global set if any are out of date. + +Step 3 differs by mode: + +### Step 3 — Cinematic mode (pure embed) + +1. **Read `safe-zones.json` first.** Narration planes go in **`zones.hugLeft`/`hugRight`** — clean strips ABUTTING the silhouette (text far from the body reads as floating, not embedded; far corners are the fallback, not the default). The hero defaults to `heroAnchor`/`heroBands.best` (centered ON the subject, ~30–55% occluded). `recommendation:"fg"` moves NARRATION in front for legibility; **the hero stays embedded whenever `heroBands.feasible`** — hero-fg is the last resort. +2. **The DNA is the identity you picked in Step 0** (CATALOG.md) — do not re-open the choice here. Sanity-check it against the scene (bright hero band luma > 150 wants `ink`; full pick guidance lives in the catalog, covering all ten incl. neon / glitch / chrome / velocity). State your pick + why; the user decides. The DNA locks type/palette/blend/motion + hero three-act; safe-zones v2 (`palette`/`optics`/`lighting`) parameterizes it to THIS scene automatically. +3. **Author `/cinematic.json`** — `"dna": ""` + thought-BLOCKS, not raw groups: each block = lines of words (grouped 2–5 at clause boundaries) + the plane it stacks in + per-line `css` (size/weight/style only — no positions) + at most ONE line marked `"hero": true` (the promoted word; `"text"` for display form). Schema: `scripts/make-cinematic.cjs` header. +4. **Compile**: `node scripts/make-cinematic.cjs ` — lowers blocks → plan.json → index.html. Generated for you: transcript-sequenced timings, accumulate-within-block, page-flip-between-blocks, **the hero LOCKUP** (a hero block's pre-context, HERO and post-context stack as ONE bonded composition centered on the subject — reading order top→bottom = spoken order by construction; context floats in FRONT while the hero embeds BEHIND = the depth sandwich; a mass rule keeps the hero dominating its context), apex/minor hero split, **reading order by construction**, fg fallback per safe-zones. Then the gates run as usual. _(Hand-authoring plan.json directly remains possible for designs blocks can't express — then run `fill-timings.cjs` + `fit-fonts.cjs` + `make-composition.cjs` yourself.)_ + +### Step 3 — Theme mode (themed constitution) + +**Read [themes/README.md](themes/README.md) FIRST** — paradigm/setpiece registries, linkages, hard rules, and the exact `theme.json` schema. + +1. **Pick a theme DNA** by content register (each `themes/.json` has `voice` + `when`). State your pick + why; the user decides. +2. **Author `/theme.json`** — `dna`, `lines` (verbatim, transcript order; 1–5 words each — for `takeover` each line is one CARD), `minors` (emphasis words), `hero:{match}` (the climax word/phrase; leave it OUT of `lines` for embed setpieces, keep it IN for inline setpieces and panel+redact). +3. **Render**: `bash scripts/render-theme.sh ` — compiles (verbatim-completeness gate at compile time), renders both layers, composites, applies the plate reaction → `final_fx.mp4`. Use `preview-frames.cjs` between compile and render for Visual QA. + +--- + +## Visual QA — preview BEFORE you render + +`node scripts/preview-frames.cjs [t…]` composites **faithful preview frames in ~2s each** +(caption layers screenshotted at seek-time + real video frame + matte occlusion + rail overlay = what +the final composite will look like at that moment). Default samples = each group/climax window. +A full render costs minutes — never use it to _discover_ layout problems. + +Check the previews (`/preview/sheet.png`) against this list — these are the failures the +geometric gates **cannot** catch: + +1. **Washout** — light text over a bright region (window/sign/sky): unreadable → move the plane or change DNA/mode (bright scene → `ink`). +2. **Text-on-text** — captions over the scene's own text/graphics, or two caption groups colliding. +3. **Reading order** — on-screen vertical order must match spoken order; the hero must not sit below later words. +4. **Hero presence** — the climax should be BIG and visibly behind the subject (~30–55% occluded), not a floating label in a margin. +5. **Balance** — one coherent column/band, not scattered fragments; margins breathing; nothing clipped. + +Then the **5 positive checks** in [references/reference-bar.md](references/reference-bar.md) +(poster test · timid test · one-glance hierarchy · scene handshake · dead-air audit) — the +failure list keeps a render from being broken; the positive list is what makes it _designed_. +Ship when both pass. + +**Fresh-eyes review (recommended for anything user-facing):** you have confirmation bias about your +own layout. If you can spawn a subagent, give it ONLY the preview sheet + this checklist and ask for +PASS/FIX verdicts per frame ("review these caption previews against the 5-point checklist; answer +PASS or the specific fix per frame"). Apply fixes in plan.json / theme.json, recompile, re-preview — +each loop costs seconds. Render once, when the previews pass. + +--- + +## The DNA registry — ten visual languages (replaces the template catalog) + +Both modes draw from **[dna/](dna/README.md)** — six art-directed visual languages that +**parameterize per scene** (accent sampled from the footage, contact shadow along the +measured light direction, depth-match blur, RMS-coupled hero amplitude): + +| DNA | Register | Scene fit | Voice | +| --------------- | -------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| **cream** | premium-warm | dark/mid warm scenes | Inter + warm cream + screen; glowing emergence hero (successor of cinematic-cream) | +| **ink** | premium | **bright scenes (luma > 150)** | near-black multiply — type printed ON the wall; the bright-scene answer | +| **editorial** | editorial-luxe | introspective / fashion / poetic | Bodoni Moda, lowercase-italic hero — magazine elegance | +| **keynote** | tech-premium | product / launch | opaque white Inter 800, dead-center stillness | +| **documentary** | formal | interview / serious | burn-in reveals, no hero — gravitas IS the style | +| **loud** | loud | hype / sport / social | Anton + scene-sampled accent, single-unit slam + ripple; body ANNOUNCES in front (`bodyLayer: fg`) | +| **neon** | loud-cyber | cyberpunk / nightlife / tech-noir (dark scenes) | electric-cyan signage, ignition flicker, the hero powers ON like a sign | +| **glitch** | loud-cyber | digital / hacker / AI | RGB-split echoes snap together on landing; machine-percussive timing | +| **chrome** | loud-luxe | Y2K / fashion-tech / music | liquid-metal gradient hero + one sheen sweep during the hold | +| **velocity** | loud-sport | sport / auto / fitness | every word arrives along its motion vector (streak+skew), hero passes with speed trails | + +Pick by `safe-zones.json` (`heroAnchor.bandLuma`, `palette.temperature`) × content +register — [dna/README.md](dna/README.md) has the decision rule. Authoring: +`cinematic.json` takes `"dna": ""`. + +The engine generates the **hero three-act** from the DNA (no authoring needed): +co-visible captions dim (setup) → per-letter entrance with amplitude ∝ spoken loudness +(impact) → breathe + glow until exit (afterglow). + +(Legacy: `plan.template:"cinematic-cream"` maps to `dna:"cream"` automatically. +The retired 54-template library lives outside the skill at +`~/Downloads/embedded-captions-archive/standard-templates-54/`; `_motion.md` remains +in-skill as the motion-verb reference catalog.) + +--- + +## Aesthetic decision — tone × shot × platform (input to the catalog shortlist, NOT a second router) + +Classify the clip on 3 axes and feed the result into CATALOG.md's shortlisting — this section never picks a mode/engine by itself: + +**Tone** (what feel does the content have?) + +- documentary | conversational | energetic | poetic | keynote | investigative | music-video + +**Shot** (what's the framing?) + +- close-up (head + shoulders) | mid-shot (torso+) | wide (full body+) | cut-montage (mixed shots) + +**Platform** (where will it play?) + +- 9:16 portrait (TikTok/IG/Shorts) | 16:9 landscape (YouTube/web) | 1:1 square | broadcast export + +Cross-reference in [references/direction-catalog.md § Classification matrix](references/direction-catalog.md) for direction language — then return to [CATALOG.md](CATALOG.md) to shortlist identities (this matrix informs the shortlist; the catalog is the only routing surface). + +## Composition craft (embed track) — read before embedding + +The full **embed-track** playbook lives in **[references/composition-craft.md](references/composition-craft.md)**: +transcript role-annotation, phrase grouping, planes & clean-zone anchoring, zone coherence, +climax pop & readability, edge-breathing, the occlusion 3-step judgement, and +accumulation/persistence. It governs how a _promoted_ phrase sits INTO the scene — read it +before authoring any embed (Cinematic `plan.json` or Standard `index.html`). The default **rail** +track has its own, much simpler spec → **[references/rail.md](references/rail.md)**. + +--- + +## Shared knowledge + +| Doc | What | +| ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| [references/rail.md](references/rail.md) | **The rail track** — standard lower-third subtitle spec (the default; carries most text). | +| [references/composition-craft.md](references/composition-craft.md) | **The embed-track playbook** — grouping, planes, climax pop, occlusion judgement, accumulation/persistence. Read before embedding. | +| [dna/README.md](dna/README.md) | **The DNA registry** — six scene-parameterized visual languages; how to pick. | +| [references/reference-bar.md](references/reference-bar.md) | **The taste bar** — per-register world-class references + the 5 positive checks. | +| [references/aesthetic-principles.md](references/aesthetic-principles.md) | **The 18 rules.** Beat Veed AI on taste. Read first. | +| [references/motion-vocabulary.md](references/motion-vocabulary.md) | 10 named motion primitives + tone→timing lookup | +| [references/direction-catalog.md](references/direction-catalog.md) | 10 ship-ready aesthetics + tone×shot×platform matrix | +| [references/anti-patterns.md](references/anti-patterns.md) | Bugs already locked out (CoreML, letter-spacing reflow, etc.) | +| [references/scene-types.md](references/scene-types.md) | When a wall surface is usable (4 conditions) | +| [references/layout-heuristics.md](references/layout-heuristics.md) | Plane positioning, clean-zone selection, crown 3 conditions, pillarbox math | +| [references/typography-presets.md](references/typography-presets.md) | Font-size × column-width matrix (starting points) | +| [references/caption-grouping.md](references/caption-grouping.md) | Word → group rules (pauses, sentence boundaries) | +| [references/failure-modes.md](references/failure-modes.md) | Long tail of dev gotchas | +| [references/bespoke-vs-presets.md](references/bespoke-vs-presets.md) | Why presets fail sometimes; clone-and-tweak pattern | + +**Read the aesthetic principles and direction catalog FIRST.** Everything else is implementation detail. + +--- + +## Non-negotiables + +- **Face must never be 100%-covered continuously** — every 0.3s window, face bbox ≥30% uncovered. +- **WCAG contrast** — final render lints; fix palette if it fails. +- **Deterministic** — no `Math.random()`, no `Date.now()`, no `repeat:-1`. +- **Never grade/recolor the video.** The footage ships untouched — captions are the only addition. No full-frame scanlines / duotone / darken / vignette over the a-roll. CRT/glitch texture belongs _inside_ a caption element, not over the whole frame. +- **Rail-first for talking-head / explainer.** Don't embed the whole transcript — most text is the rail; embed only peaks. Embedding everything is the default mistake. +- **Embed is scarce + spaced.** ≤1 embed per sentence/beat, never two adjacent or co-visible, ≥ a beat apart, at most one `apex`. climax = per-beat peak, **not** "the single payoff of the entire clip." +- **Matte = the PERSON (hyperframes `remove-background`, u2net_human_seg, Apache-2.0).** Human segmentation by intent, but not surgically: thin offset furniture (mic boom arms) is usually excluded — captions render over it, behind the person — while large salient objects NEAR the subject (a telescope, a desk rig) can still leak into the matte and occlude captions. Objects HELD by the subject (products, phones) may drop out intermittently, letting captions pass in front. NEVER assume: sample `frames_fg/` at 2-3 timestamps before placing the hero, and prefer hero positions clear of any leaked furniture (`heroAnchor` can be skewed by leaks — cross-check against frames_bg). +- **safe-zones is PROP-BLIND — eyeball every band you use.** Zones/heroBands score _subject_ occlusion + luma only: a mic, telescope, or screen sitting inside a "clean" zone is invisible to them (and a prop leaking INTO the matte skews `heroAnchor.centerXPct` off the person). Before authoring, extract ONE frame of each band you intend to use; if a prop lives there, measure its bbox and move/shrink the plane. Two real cases shipped clean only because the agent did exactly this. (Auto prop-saliency is a known gap; zones' `peakLuma` only catches _moving_ bright objects.) +- **Captions stay on-frame.** Cinematic mode hard-gates frame-overflow; Standard mode runs `check-overflow.cjs` as a WARNING (intentional bleed is the only exception — read the warning). +- **Each caption ≥ 0.5s on screen** — shorter = unreadable. +- **Word timings must match transcript.json within 80ms** — a caption firing 500ms off-beat destroys the scene illusion. Cinematic runs `check-timing.cjs --strict` before rendering (via render-and-composite.sh); THEME mode enforces the same timings at compile time instead (make-theme's sequential transcript matcher + verbatim completeness gate — drift is a compile error). Never pack multiple transcript words into one entry (e.g. `"FUTURE OF"` or an `IT` + line-break + `ALL` stack with one start/end) — the second word inherits the first's timestamp and fires early. Split them into separate word entries with their own timings, even if you want them on the same visual line (use CSS `white-space` / natural wrap instead of `
`). Creative substitutions where caption text ≠ transcript (e.g. `"15%"` replacing `"fifteen percent"`) are supported — register them in `CREATIVE_SUBS` inside `check-timing.cjs`. +- **Group windows must envelop their words** — `group.in ≤ min(word.start)` and `group.out ≥ max(word.end)` for every group. If `group.in` is later than a word's start, the word is silently delayed until the container mounts (we've shipped 800ms lag bugs from this). The validator enforces this. +- **No two caption groups may overlap in both time AND screen region** — overlapping-in-time captions create text-on-text pileups. Options: (a) **spatial separation** — place each group in a non-overlapping vertical band so they can coexist (memory-wall cascade style); (b) **handoff** — set the earlier group's `out` ≤ the next group's `in` so only one is on screen; (c) **deliberate layered typography** — add `"allow_overlap": true` on one of the groups to silence the validator. The validator estimates each group's vertical bbox from its CSS and flags collisions. Pick (a) by default — it's what makes cinematic-cream feel like a poem accumulating, not a subtitle track replacing itself. +- **Screen-blend fails on bright backgrounds (>180 luminance).** **Cinematic** templates are cream + `screen` and that DNA is **locked** (the plan can't recolour them) → on a bright backdrop they wash out, so pick `ink` (letterpress built FOR bright surfaces) or the `anchor` theme (opaque rail surface) rather than overriding a look. +- **Don't animate `letter-spacing` or `filter:blur` on word entrance** — inline-block reflow causes line-jumps. +- **CoreML banned for matting** — the onnxruntime CoreML EP's mixed-precision partitioning corrupted face alpha (observed with the previous RVM engine; don't re-try it). Matting is CPU-only (~2 fps @1080p ≈ 2-3 min per 10s clip; budget for it on long clips). + +--- + +## Dependencies + +- **hyperframes**, built (`packages/cli/dist/cli.js`). Scripts auto-resolve the checkout: `HYPERFRAMES_ROOT` env → repo root if this skill ships _inside_ hyperframes → `~/Downloads/hyperframes`. Build with `bun install && bun run build`. +- **Node-first; two Python touchpoints via `uvx` (no manual installs):** transcription runs WhisperX through `uvx` (word-level timings; falls back per SKILL §transcription), and Theme's `drawon` setpiece shells `python3 scripts/gen-stroke-path.py` at compile time. Everything else runs on the toolchain hyperframes already ships: matting via the hyperframes CLI's **`remove-background`** (u2net_human_seg; weights auto-download once, ~168 MB, to `~/.cache/hyperframes/`), image/alpha math via **`sharp`**, layout/occlusion/overflow via **`puppeteer`**, plus **`ffmpeg`**. The scripts auto-resolve these from the hyperframes checkout — nothing extra to install. +- **Transcription = WhisperX via `uvx`** (word-level timings + alignment; no manual install — `transcribe.cjs` drives `uvx whisperx`). Falls back to an existing word-level `transcript.json` if present. +- **Source video** — `matte.cjs` / `transcribe.cjs` auto-resolve `source.mp4` (or glob the clip / read `hyperframes.json`), so `hyperframes init --video X.mp4` needs no manual rename. +- **fps** — `matte.cjs` extracts at the source's native rate and records `matte.fps`; `render-and-composite.sh` uses that so the matte stays frame-aligned. +- Matting weights are NOT bundled: `matte.cjs` shells the hyperframes CLI's `remove-background`, which downloads u2net_human_seg (~168 MB, Apache-2.0) once to `~/.cache/hyperframes/background-removal/models/`. First prepare on a fresh machine needs network for that one download. + +If a hard dependency is missing, STOP and ask the user — don't silently skip steps. diff --git a/plugins/hyperframes/skills/embedded-captions/assets/fonts/char-widths.json b/plugins/hyperframes/skills/embedded-captions/assets/fonts/char-widths.json new file mode 100644 index 000000000..55b375101 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/assets/fonts/char-widths.json @@ -0,0 +1,2211 @@ +{ + "_meta": "Measured per-char advance widths (em @100px) + fontBoundingBox ascent/descent for the bundled families in modes/standard/fonts/fonts.css. Generated once via headless-Chrome canvas measureText over the SAME woff2 faces the renderer embeds (kerning ignored, ~<=3px/word). Used by make-theme.cjs to BAKE pixel-exact word geometry at compile time so font-load timing in the render browser can never skew aim. Regenerate if fonts.css changes.", + "Anton": { + "ascent": 1.18, + "descent": 0.33, + "widths": { + "0": 0.4941, + "1": 0.3306, + "2": 0.4941, + "3": 0.4941, + "4": 0.4941, + "5": 0.4941, + "6": 0.4941, + "7": 0.4941, + "8": 0.4941, + "9": 0.4941, + "A": 0.4854, + "B": 0.4785, + "C": 0.4741, + "D": 0.4932, + "E": 0.4116, + "F": 0.3989, + "G": 0.4849, + "H": 0.499, + "I": 0.2266, + "J": 0.4663, + "K": 0.4722, + "L": 0.3975, + "M": 0.7461, + "N": 0.498, + "O": 0.4863, + "P": 0.4722, + "Q": 0.4937, + "R": 0.4766, + "S": 0.4614, + "T": 0.3955, + "U": 0.4736, + "V": 0.4692, + "W": 0.7119, + "X": 0.4839, + "Y": 0.4463, + "Z": 0.4102, + "a": 0.4834, + "b": 0.5015, + "c": 0.4912, + "d": 0.498, + "e": 0.4883, + "f": 0.2803, + "g": 0.5039, + "h": 0.5054, + "i": 0.2432, + "j": 0.2627, + "k": 0.4907, + "l": 0.248, + "m": 0.7583, + "n": 0.4985, + "o": 0.4966, + "p": 0.5015, + "q": 0.498, + "r": 0.3467, + "s": 0.4746, + "t": 0.3052, + "u": 0.499, + "v": 0.4609, + "w": 0.6963, + "x": 0.459, + "y": 0.4609, + "z": 0.3857, + ".": 0.2285, + ",": 0.2363, + "!": 0.229, + "?": 0.4922, + "'": 0.2139, + "\u2019": 0.2319, + "\"": 0.4287, + ":": 0.2417, + ";": 0.2451, + "-": 0.311, + "\u2013": 0.311, + "\u2014": 0.563, + "(": 0.291, + ")": 0.291, + "[": 0.3179, + "]": 0.3179, + "/": 0.4053, + "&": 0.52, + "%": 1.0566, + "+": 0.3555, + "#": 0.5464, + "@": 0.8643, + "*": 0.4521, + " ": 0.2344 + } + }, + "Audiowide": { + "ascent": 0.99, + "descent": 0.29, + "widths": { + "0": 0.9253, + "1": 0.3545, + "2": 0.7524, + "3": 0.7192, + "4": 0.7734, + "5": 0.7505, + "6": 0.7441, + "7": 0.6411, + "8": 0.7461, + "9": 0.7441, + "A": 0.8345, + "B": 0.8091, + "C": 0.7471, + "D": 0.8232, + "E": 0.7554, + "F": 0.7383, + "G": 0.8232, + "H": 0.8491, + "I": 0.2764, + "J": 0.7344, + "K": 0.8135, + "L": 0.7363, + "M": 0.9624, + "N": 0.8472, + "O": 0.8604, + "P": 0.8062, + "Q": 0.8604, + "R": 0.8271, + "S": 0.7783, + "T": 0.7261, + "U": 0.8335, + "V": 0.7725, + "W": 1.0024, + "X": 0.7871, + "Y": 0.7813, + "Z": 0.7134, + "a": 0.6533, + "b": 0.6904, + "c": 0.6162, + "d": 0.7002, + "e": 0.6533, + "f": 0.5503, + "g": 0.6904, + "h": 0.7031, + "i": 0.2505, + "j": 0.2505, + "k": 0.6914, + "l": 0.3135, + "m": 0.8735, + "n": 0.6963, + "o": 0.6821, + "p": 0.6904, + "q": 0.6904, + "r": 0.5454, + "s": 0.5991, + "t": 0.5635, + "u": 0.6963, + "v": 0.6753, + "w": 0.9131, + "x": 0.6953, + "y": 0.7031, + "z": 0.6011, + ".": 0.2051, + ",": 0.2251, + "!": 0.2603, + "?": 0.6655, + "'": 0.2124, + "\u2019": 0.2305, + "\"": 0.3823, + ":": 0.2432, + ";": 0.2515, + "-": 0.5713, + "\u2013": 0.5132, + "\u2014": 0.9131, + "(": 0.4272, + ")": 0.4272, + "[": 0.3652, + "]": 0.3652, + "/": 0.6592, + "&": 0.6714, + "%": 0.8662, + "+": 0.5391, + "#": 0.7295, + "@": 0.6611, + "*": 0.5425, + " ": 0.3252 + } + }, + "Baloo 2": { + "ascent": 1.08, + "descent": 0.52, + "widths": { + "0": 0.583, + "1": 0.357, + "2": 0.508, + "3": 0.506, + "4": 0.548, + "5": 0.538, + "6": 0.55, + "7": 0.458, + "8": 0.569, + "9": 0.552, + "A": 0.592, + "B": 0.599, + "C": 0.588, + "D": 0.652, + "E": 0.531, + "F": 0.517, + "G": 0.639, + "H": 0.654, + "I": 0.262, + "J": 0.385, + "K": 0.566, + "L": 0.501, + "M": 0.78, + "N": 0.66, + "O": 0.689, + "P": 0.567, + "Q": 0.69, + "R": 0.589, + "S": 0.523, + "T": 0.523, + "U": 0.649, + "V": 0.583, + "W": 0.803, + "X": 0.591, + "Y": 0.55, + "Z": 0.557, + "a": 0.499, + "b": 0.549, + "c": 0.478, + "d": 0.547, + "e": 0.519, + "f": 0.399, + "g": 0.537, + "h": 0.551, + "i": 0.241, + "j": 0.243, + "k": 0.487, + "l": 0.246, + "m": 0.816, + "n": 0.55, + "o": 0.553, + "p": 0.546, + "q": 0.546, + "r": 0.382, + "s": 0.447, + "t": 0.372, + "u": 0.55, + "v": 0.495, + "w": 0.729, + "x": 0.482, + "y": 0.489, + "z": 0.469, + ".": 0.141, + ",": 0.145, + "!": 0.25, + "?": 0.459, + "'": 0.139, + "\u2019": 0.127, + "\"": 0.27, + ":": 0.189, + ";": 0.202, + "-": 0.389, + "\u2013": 0.534, + "\u2014": 0.767, + "(": 0.254, + ")": 0.254, + "[": 0.268, + "]": 0.269, + "/": 0.305, + "&": 0.637, + "%": 0.772, + "+": 0.548, + "#": 0.667, + "@": 1, + "*": 0.299, + " ": 0.2 + } + }, + "Bangers": { + "ascent": 0.88, + "descent": 0.18, + "widths": { + "0": 0.474, + "1": 0.32, + "2": 0.467, + "3": 0.458, + "4": 0.459, + "5": 0.45, + "6": 0.478, + "7": 0.339, + "8": 0.518, + "9": 0.489, + "A": 0.433, + "B": 0.428, + "C": 0.414, + "D": 0.441, + "E": 0.341, + "F": 0.341, + "G": 0.499, + "H": 0.442, + "I": 0.2, + "J": 0.279, + "K": 0.462, + "L": 0.302, + "M": 0.619, + "N": 0.453, + "O": 0.493, + "P": 0.379, + "Q": 0.525, + "R": 0.444, + "S": 0.43, + "T": 0.362, + "U": 0.419, + "V": 0.379, + "W": 0.601, + "X": 0.411, + "Y": 0.384, + "Z": 0.431, + "a": 0.433, + "b": 0.428, + "c": 0.414, + "d": 0.441, + "e": 0.341, + "f": 0.341, + "g": 0.499, + "h": 0.441, + "i": 0.202, + "j": 0.279, + "k": 0.462, + "l": 0.302, + "m": 0.619, + "n": 0.452, + "o": 0.493, + "p": 0.379, + "q": 0.525, + "r": 0.444, + "s": 0.43, + "t": 0.362, + "u": 0.419, + "v": 0.379, + "w": 0.601, + "x": 0.411, + "y": 0.384, + "z": 0.431, + ".": 0.209, + ",": 0.197, + "!": 0.263, + "?": 0.438, + "'": 0.202, + "\u2019": 0.202, + "\"": 0.421, + ":": 0.195, + ";": 0.262, + "-": 0.36, + "\u2013": 0.36, + "\u2014": 0.52, + "(": 0.334, + ")": 0.331, + "[": 0.319, + "]": 0.313, + "/": 0.551, + "&": 0.535, + "%": 0.799, + "+": 0.33, + "#": 0.626, + "@": 0.987, + "*": 0.423, + " ": 0.195 + } + }, + "Bodoni Moda": { + "ascent": 1.13, + "descent": 0.4, + "widths": { + "0": 0.6195, + "1": 0.4345, + "2": 0.5495, + "3": 0.5205, + "4": 0.5945, + "5": 0.5, + "6": 0.5595, + "7": 0.5045, + "8": 0.5495, + "9": 0.5595, + "A": 0.772, + "B": 0.656, + "C": 0.7155, + "D": 0.726, + "E": 0.6185, + "F": 0.5985, + "G": 0.739, + "H": 0.762, + "I": 0.387, + "J": 0.45, + "K": 0.705, + "L": 0.6035, + "M": 0.8725, + "N": 0.7735, + "O": 0.75, + "P": 0.6385, + "Q": 0.75, + "R": 0.7215, + "S": 0.576, + "T": 0.6735, + "U": 0.726, + "V": 0.774, + "W": 1.0045, + "X": 0.7665, + "Y": 0.7335, + "Z": 0.577, + "a": 0.523, + "b": 0.6085, + "c": 0.5095, + "d": 0.6085, + "e": 0.5235, + "f": 0.398, + "g": 0.5955, + "h": 0.5955, + "i": 0.303, + "j": 0.305, + "k": 0.604, + "l": 0.333, + "m": 0.8605, + "n": 0.5955, + "o": 0.561, + "p": 0.6085, + "q": 0.6085, + "r": 0.442, + "s": 0.439, + "t": 0.3355, + "u": 0.598, + "v": 0.542, + "w": 0.7615, + "x": 0.577, + "y": 0.5465, + "z": 0.467, + ".": 0.1995, + ",": 0.2145, + "!": 0.3175, + "?": 0.5495, + "'": 0.1995, + "\u2019": 0.2145, + "\"": 0.3695, + ":": 0.1975, + ";": 0.2145, + "-": 0.3595, + "\u2013": 0.5405, + "\u2014": 0.7845, + "(": 0.3615, + ")": 0.3615, + "[": 0.3245, + "]": 0.3245, + "/": 0.528, + "&": 0.8035, + "%": 1, + "+": 0.5295, + "#": 0.638, + "@": 1.0095, + "*": 0.632, + " ": 0.25 + } + }, + "Caveat": { + "ascent": 0.96, + "descent": 0.3, + "widths": { + "0": 0.45, + "1": 0.45, + "2": 0.45, + "3": 0.45, + "4": 0.45, + "5": 0.45, + "6": 0.45, + "7": 0.45, + "8": 0.45, + "9": 0.45, + "A": 0.502, + "B": 0.52, + "C": 0.472, + "D": 0.578, + "E": 0.529, + "F": 0.454, + "G": 0.487, + "H": 0.563, + "I": 0.4, + "J": 0.306, + "K": 0.498, + "L": 0.426, + "M": 0.72, + "N": 0.599, + "O": 0.496, + "P": 0.464, + "Q": 0.502, + "R": 0.537, + "S": 0.486, + "T": 0.458, + "U": 0.482, + "V": 0.49, + "W": 0.72, + "X": 0.524, + "Y": 0.504, + "Z": 0.522, + "a": 0.437, + "b": 0.435, + "c": 0.355, + "d": 0.393, + "e": 0.325, + "f": 0.291, + "g": 0.355, + "h": 0.464, + "i": 0.187, + "j": 0.204, + "k": 0.365, + "l": 0.169, + "m": 0.56, + "n": 0.45, + "o": 0.353, + "p": 0.378, + "q": 0.377, + "r": 0.36, + "s": 0.341, + "t": 0.331, + "u": 0.37, + "v": 0.331, + "w": 0.517, + "x": 0.343, + "y": 0.341, + "z": 0.315, + ".": 0.198, + ",": 0.198, + "!": 0.21, + "?": 0.374, + "'": 0.117, + "\u2019": 0.117, + "\"": 0.237, + ":": 0.198, + ";": 0.198, + "-": 0.326, + "\u2013": 0.446, + "\u2014": 0.566, + "(": 0.33, + ")": 0.33, + "[": 0.33, + "]": 0.33, + "/": 0.33, + "&": 0.564, + "%": 0.6, + "+": 0.446, + "#": 0.559, + "@": 0.643, + "*": 0.363, + " ": 0.242 + } + }, + "Chakra Petch": { + "ascent": 0.99, + "descent": 0.31, + "widths": { + "0": 0.636, + "1": 0.366, + "2": 0.558, + "3": 0.587, + "4": 0.563, + "5": 0.59, + "6": 0.606, + "7": 0.506, + "8": 0.622, + "9": 0.611, + "A": 0.629, + "B": 0.654, + "C": 0.639, + "D": 0.672, + "E": 0.59, + "F": 0.56, + "G": 0.66, + "H": 0.682, + "I": 0.256, + "J": 0.564, + "K": 0.628, + "L": 0.545, + "M": 0.785, + "N": 0.681, + "O": 0.684, + "P": 0.63, + "Q": 0.684, + "R": 0.659, + "S": 0.621, + "T": 0.568, + "U": 0.684, + "V": 0.634, + "W": 0.868, + "X": 0.62, + "Y": 0.606, + "Z": 0.576, + "a": 0.559, + "b": 0.585, + "c": 0.542, + "d": 0.587, + "e": 0.568, + "f": 0.384, + "g": 0.587, + "h": 0.578, + "i": 0.253, + "j": 0.268, + "k": 0.538, + "l": 0.243, + "m": 0.845, + "n": 0.576, + "o": 0.577, + "p": 0.587, + "q": 0.58, + "r": 0.393, + "s": 0.52, + "t": 0.398, + "u": 0.575, + "v": 0.491, + "w": 0.714, + "x": 0.501, + "y": 0.577, + "z": 0.482, + ".": 0.217, + ",": 0.217, + "!": 0.254, + "?": 0.542, + "'": 0.216, + "\u2019": 0.215, + "\"": 0.38, + ":": 0.215, + ";": 0.215, + "-": 0.412, + "\u2013": 0.628, + "\u2014": 0.735, + "(": 0.322, + ")": 0.322, + "[": 0.321, + "]": 0.321, + "/": 0.484, + "&": 0.646, + "%": 0.842, + "+": 0.548, + "#": 0.697, + "@": 0.819, + "*": 0.343, + " ": 0.253 + } + }, + "Cinzel": { + "ascent": 0.98, + "descent": 0.37, + "widths": { + "0": 0.596, + "1": 0.344, + "2": 0.553, + "3": 0.503, + "4": 0.583, + "5": 0.498, + "6": 0.56, + "7": 0.502, + "8": 0.552, + "9": 0.56, + "A": 0.712, + "B": 0.586, + "C": 0.76, + "D": 0.807, + "E": 0.577, + "F": 0.541, + "G": 0.798, + "H": 0.813, + "I": 0.338, + "J": 0.324, + "K": 0.657, + "L": 0.562, + "M": 0.931, + "N": 0.841, + "O": 0.838, + "P": 0.577, + "Q": 0.837, + "R": 0.677, + "S": 0.475, + "T": 0.618, + "U": 0.785, + "V": 0.74, + "W": 0.982, + "X": 0.662, + "Y": 0.661, + "Z": 0.651, + "a": 0.663, + "b": 0.57, + "c": 0.705, + "d": 0.76, + "e": 0.546, + "f": 0.523, + "g": 0.742, + "h": 0.746, + "i": 0.336, + "j": 0.309, + "k": 0.624, + "l": 0.536, + "m": 0.878, + "n": 0.779, + "o": 0.774, + "p": 0.553, + "q": 0.777, + "r": 0.627, + "s": 0.462, + "t": 0.578, + "u": 0.7, + "v": 0.663, + "w": 0.899, + "x": 0.626, + "y": 0.64, + "z": 0.608, + ".": 0.179, + ",": 0.185, + "!": 0.23, + "?": 0.413, + "'": 0.17, + "\u2019": 0.193, + "\"": 0.315, + ":": 0.179, + ";": 0.185, + "-": 0.38, + "\u2013": 0.5, + "\u2014": 0.8, + "(": 0.338, + ")": 0.338, + "[": 0.332, + "]": 0.332, + "/": 0.406, + "&": 0.646, + "%": 0.684, + "+": 0.481, + "#": 0.536, + "@": 0.977, + "*": 0.386, + " ": 0.25 + } + }, + "Cormorant Garamond": { + "ascent": 0.92, + "descent": 0.29, + "widths": { + "0": 0.477, + "1": 0.332, + "2": 0.402, + "3": 0.389, + "4": 0.451, + "5": 0.409, + "6": 0.465, + "7": 0.429, + "8": 0.489, + "9": 0.465, + "A": 0.702, + "B": 0.558, + "C": 0.686, + "D": 0.691, + "E": 0.537, + "F": 0.509, + "G": 0.713, + "H": 0.759, + "I": 0.332, + "J": 0.322, + "K": 0.65, + "L": 0.533, + "M": 0.835, + "N": 0.727, + "O": 0.766, + "P": 0.543, + "Q": 0.766, + "R": 0.673, + "S": 0.491, + "T": 0.634, + "U": 0.698, + "V": 0.666, + "W": 0.931, + "X": 0.652, + "Y": 0.609, + "Z": 0.595, + "a": 0.419, + "b": 0.51, + "c": 0.411, + "d": 0.512, + "e": 0.408, + "f": 0.305, + "g": 0.445, + "h": 0.499, + "i": 0.273, + "j": 0.257, + "k": 0.491, + "l": 0.258, + "m": 0.763, + "n": 0.517, + "o": 0.479, + "p": 0.511, + "q": 0.488, + "r": 0.364, + "s": 0.338, + "t": 0.338, + "u": 0.493, + "v": 0.434, + "w": 0.671, + "x": 0.439, + "y": 0.435, + "z": 0.405, + ".": 0.197, + ",": 0.222, + "!": 0.247, + "?": 0.329, + "'": 0.14, + "\u2019": 0.192, + "\"": 0.283, + ":": 0.197, + ";": 0.224, + "-": 0.323, + "\u2013": 0.515, + "\u2014": 0.83, + "(": 0.309, + ")": 0.309, + "[": 0.274, + "]": 0.274, + "/": 0.341, + "&": 0.697, + "%": 0.574, + "+": 0.398, + "#": 0.526, + "@": 0.719, + "*": 0.448, + " ": 0.234 + } + }, + "Creepster": { + "ascent": 0.95, + "descent": 0.22, + "widths": { + "0": 0.457, + "1": 0.3105, + "2": 0.4355, + "3": 0.4277, + "4": 0.4219, + "5": 0.4277, + "6": 0.4141, + "7": 0.3975, + "8": 0.4287, + "9": 0.4355, + "A": 0.4453, + "B": 0.4678, + "C": 0.4307, + "D": 0.4541, + "E": 0.4199, + "F": 0.4238, + "G": 0.46, + "H": 0.457, + "I": 0.3076, + "J": 0.374, + "K": 0.4922, + "L": 0.3574, + "M": 0.6563, + "N": 0.5166, + "O": 0.4561, + "P": 0.4434, + "Q": 0.4775, + "R": 0.4629, + "S": 0.4111, + "T": 0.4082, + "U": 0.4854, + "V": 0.4297, + "W": 0.582, + "X": 0.4521, + "Y": 0.4023, + "Z": 0.3818, + "a": 0.4316, + "b": 0.4492, + "c": 0.4336, + "d": 0.4297, + "e": 0.4033, + "f": 0.3975, + "g": 0.4336, + "h": 0.4854, + "i": 0.3281, + "j": 0.3672, + "k": 0.4541, + "l": 0.3174, + "m": 0.6553, + "n": 0.5088, + "o": 0.4697, + "p": 0.4629, + "q": 0.4805, + "r": 0.459, + "s": 0.3984, + "t": 0.4502, + "u": 0.4893, + "v": 0.4531, + "w": 0.6348, + "x": 0.4619, + "y": 0.4316, + "z": 0.3916, + ".": 0.165, + ",": 0.1484, + "!": 0.2021, + "?": 0.3848, + "'": 0.1416, + "\u2019": 0.1387, + "\"": 0.2764, + ":": 0.165, + ";": 0.1514, + "-": 0.3896, + "\u2013": 0.3896, + "\u2014": 0.5732, + "(": 0.2246, + ")": 0.2266, + "[": 0.2256, + "]": 0.2217, + "/": 0.3369, + "&": 0.4648, + "%": 0.5498, + "+": 0.4014, + "#": 0.5859, + "@": 0.6865, + "*": 0.4121, + " ": 0.2354 + } + }, + "Fredoka": { + "ascent": 0.97, + "descent": 0.24, + "widths": { + "0": 0.587, + "1": 0.392, + "2": 0.598, + "3": 0.587, + "4": 0.544, + "5": 0.516, + "6": 0.536, + "7": 0.554, + "8": 0.559, + "9": 0.536, + "A": 0.704, + "B": 0.638, + "C": 0.667, + "D": 0.692, + "E": 0.623, + "F": 0.631, + "G": 0.708, + "H": 0.687, + "I": 0.217, + "J": 0.545, + "K": 0.591, + "L": 0.558, + "M": 0.825, + "N": 0.708, + "O": 0.732, + "P": 0.601, + "Q": 0.811, + "R": 0.624, + "S": 0.554, + "T": 0.664, + "U": 0.713, + "V": 0.724, + "W": 0.965, + "X": 0.694, + "Y": 0.638, + "Z": 0.575, + "a": 0.574, + "b": 0.582, + "c": 0.508, + "d": 0.586, + "e": 0.54, + "f": 0.378, + "g": 0.565, + "h": 0.535, + "i": 0.224, + "j": 0.24, + "k": 0.489, + "l": 0.281, + "m": 0.826, + "n": 0.557, + "o": 0.56, + "p": 0.574, + "q": 0.568, + "r": 0.406, + "s": 0.459, + "t": 0.376, + "u": 0.543, + "v": 0.537, + "w": 0.763, + "x": 0.494, + "y": 0.526, + "z": 0.531, + ".": 0.211, + ",": 0.225, + "!": 0.231, + "?": 0.491, + "'": 0.181, + "\u2019": 0.157, + "\"": 0.335, + ":": 0.234, + ";": 0.213, + "-": 0.426, + "\u2013": 0.556, + "\u2014": 0.686, + "(": 0.377, + ")": 0.377, + "[": 0.342, + "]": 0.342, + "/": 0.517, + "&": 0.713, + "%": 0.823, + "+": 0.537, + "#": 0.796, + "@": 0.829, + "*": 0.494, + " ": 0.254 + } + }, + "Inter": { + "ascent": 0.97, + "descent": 0.24, + "widths": { + "0": 0.6309, + "1": 0.4067, + "2": 0.6099, + "3": 0.6177, + "4": 0.646, + "5": 0.5933, + "6": 0.6201, + "7": 0.5659, + "8": 0.6187, + "9": 0.6201, + "A": 0.6899, + "B": 0.6543, + "C": 0.7305, + "D": 0.7217, + "E": 0.6011, + "F": 0.5903, + "G": 0.7461, + "H": 0.7432, + "I": 0.2686, + "J": 0.5708, + "K": 0.6719, + "L": 0.5654, + "M": 0.9033, + "N": 0.7534, + "O": 0.7646, + "P": 0.6387, + "Q": 0.7646, + "R": 0.6436, + "S": 0.6416, + "T": 0.6455, + "U": 0.7441, + "V": 0.6899, + "W": 0.9854, + "X": 0.6821, + "Y": 0.6787, + "Z": 0.6289, + "a": 0.5615, + "b": 0.6123, + "c": 0.5713, + "d": 0.6123, + "e": 0.583, + "f": 0.3701, + "g": 0.6133, + "h": 0.5913, + "i": 0.2422, + "j": 0.2422, + "k": 0.5488, + "l": 0.2422, + "m": 0.876, + "n": 0.5908, + "o": 0.5996, + "p": 0.6123, + "q": 0.6123, + "r": 0.3765, + "s": 0.5278, + "t": 0.3271, + "u": 0.5913, + "v": 0.562, + "w": 0.8184, + "x": 0.5459, + "y": 0.562, + "z": 0.5522, + ".": 0.2881, + ",": 0.2881, + "!": 0.2876, + "?": 0.5112, + "'": 0.2998, + "\u2019": 0.2607, + "\"": 0.4658, + ":": 0.2881, + ";": 0.3018, + "-": 0.46, + "\u2013": 0.5, + "\u2014": 1, + "(": 0.3647, + ")": 0.3647, + "[": 0.3647, + "]": 0.3647, + "/": 0.3604, + "&": 0.644, + "%": 0.9819, + "+": 0.6616, + "#": 0.6333, + "@": 0.9658, + "*": 0.501, + " ": 0.2813 + } + }, + "Monoton": { + "ascent": 1.16, + "descent": 0.4, + "widths": { + "0": 0.8433, + "1": 0.4263, + "2": 0.583, + "3": 0.6123, + "4": 0.6221, + "5": 0.6919, + "6": 0.7817, + "7": 0.6318, + "8": 0.8086, + "9": 0.7822, + "A": 0.9365, + "B": 0.8623, + "C": 0.8521, + "D": 0.8862, + "E": 0.7065, + "F": 0.6831, + "G": 0.9082, + "H": 0.9014, + "I": 0.3389, + "J": 0.4346, + "K": 0.8159, + "L": 0.605, + "M": 0.9209, + "N": 0.8779, + "O": 0.9336, + "P": 0.8506, + "Q": 0.938, + "R": 0.8438, + "S": 0.6821, + "T": 0.5913, + "U": 0.9053, + "V": 0.9409, + "W": 1.1616, + "X": 0.8765, + "Y": 0.7891, + "Z": 0.854, + "a": 0.832, + "b": 0.7207, + "c": 0.7368, + "d": 0.833, + "e": 0.667, + "f": 0.6255, + "g": 0.8271, + "h": 0.8306, + "i": 0.3379, + "j": 0.3936, + "k": 0.8018, + "l": 0.583, + "m": 1.168, + "n": 0.7871, + "o": 0.8335, + "p": 0.7817, + "q": 0.7881, + "r": 0.8315, + "s": 0.6831, + "t": 0.5884, + "u": 0.7959, + "v": 0.8555, + "w": 1.1299, + "x": 0.79, + "y": 0.7334, + "z": 0.7148, + ".": 0.2554, + ",": 0.2529, + "!": 0.3364, + "?": 0.6938, + "'": 0.2578, + "\u2019": 0.2515, + "\"": 0.5386, + ":": 0.2627, + ";": 0.2617, + "-": 0.4736, + "\u2013": 0.4736, + "\u2014": 0.6152, + "(": 0.4106, + ")": 0.4087, + "[": 0.3208, + "]": 0.3198, + "/": 0.4478, + "&": 1.0298, + "%": 1.5049, + "+": 0.6011, + "#": 1.0146, + "@": 1.0762, + "*": 0.6646, + " ": 0.1084 + } + }, + "Orbitron": { + "ascent": 1.01, + "descent": 0.24, + "widths": { + "0": 0.834, + "1": 0.391, + "2": 0.83, + "3": 0.826, + "4": 0.73, + "5": 0.83, + "6": 0.82, + "7": 0.66, + "8": 0.834, + "9": 0.828, + "A": 0.836, + "B": 0.832, + "C": 0.822, + "D": 0.834, + "E": 0.766, + "F": 0.723, + "G": 0.83, + "H": 0.851, + "I": 0.214, + "J": 0.78, + "K": 0.797, + "L": 0.779, + "M": 0.928, + "N": 0.832, + "O": 0.828, + "P": 0.791, + "Q": 0.884, + "R": 0.825, + "S": 0.822, + "T": 0.759, + "U": 0.828, + "V": 1.003, + "W": 1.179, + "X": 0.812, + "Y": 0.806, + "Z": 0.821, + "a": 0.694, + "b": 0.667, + "c": 0.695, + "d": 0.667, + "e": 0.692, + "f": 0.407, + "g": 0.683, + "h": 0.668, + "i": 0.208, + "j": 0.239, + "k": 0.646, + "l": 0.302, + "m": 0.978, + "n": 0.696, + "o": 0.692, + "p": 0.664, + "q": 0.664, + "r": 0.512, + "s": 0.686, + "t": 0.41, + "u": 0.695, + "v": 0.79, + "w": 1.071, + "x": 0.692, + "y": 0.685, + "z": 0.698, + ".": 0.214, + ",": 0.193, + "!": 0.22, + "?": 0.678, + "'": 0.224, + "\u2019": 0.166, + "\"": 0.372, + ":": 0.214, + ";": 0.193, + "-": 0.517, + "\u2013": 0.708, + "\u2014": 0.822, + "(": 0.277, + ")": 0.278, + "[": 0.275, + "]": 0.276, + "/": 0.521, + "&": 0.938, + "%": 0.966, + "+": 0.433, + "#": 0.797, + "@": 0.832, + "*": 0.491, + " ": 0.272 + } + }, + "Permanent Marker": { + "ascent": 1.11, + "descent": 0.32, + "widths": { + "0": 0.6865, + "1": 0.3223, + "2": 0.6504, + "3": 0.5615, + "4": 0.582, + "5": 0.5801, + "6": 0.501, + "7": 0.5762, + "8": 0.5371, + "9": 0.5293, + "A": 0.7021, + "B": 0.6865, + "C": 0.6113, + "D": 0.5889, + "E": 0.627, + "F": 0.5752, + "G": 0.7891, + "H": 0.6953, + "I": 0.5156, + "J": 0.6689, + "K": 0.7764, + "L": 0.6328, + "M": 0.9736, + "N": 0.6846, + "O": 0.7441, + "P": 0.6396, + "Q": 0.7441, + "R": 0.6465, + "S": 0.5762, + "T": 0.6074, + "U": 0.6953, + "V": 0.584, + "W": 0.9941, + "X": 0.623, + "Y": 0.4932, + "Z": 0.6641, + "a": 0.5811, + "b": 0.5732, + "c": 0.5137, + "d": 0.4971, + "e": 0.5215, + "f": 0.4551, + "g": 0.6523, + "h": 0.582, + "i": 0.3203, + "j": 0.5342, + "k": 0.6455, + "l": 0.5332, + "m": 0.8145, + "n": 0.5645, + "o": 0.6289, + "p": 0.5244, + "q": 0.625, + "r": 0.541, + "s": 0.4639, + "t": 0.4795, + "u": 0.585, + "v": 0.4854, + "w": 0.8252, + "x": 0.5068, + "y": 0.4004, + "z": 0.5479, + ".": 0.2285, + ",": 0.2041, + "!": 0.2607, + "?": 0.5566, + "'": 0.2656, + "\u2019": 0.1992, + "\"": 0.4922, + ":": 0.2412, + ";": 0.2451, + "-": 0.6094, + "\u2013": 0.5889, + "\u2014": 0.8789, + "(": 0.3613, + ")": 0.3613, + "[": 0.3877, + "]": 0.4033, + "/": 0.4014, + "&": 0.5996, + "%": 0.6436, + "+": 0.5791, + "#": 0.7031, + "@": 0.7324, + "*": 0.6738, + " ": 0.3701 + } + }, + "Press Start 2P": { + "ascent": 1, + "descent": 0, + "widths": { + "0": 1, + "1": 1, + "2": 1, + "3": 1, + "4": 1, + "5": 1, + "6": 1, + "7": 1, + "8": 1, + "9": 1, + "A": 1, + "B": 1, + "C": 1, + "D": 1, + "E": 1, + "F": 1, + "G": 1, + "H": 1, + "I": 1, + "J": 1, + "K": 1, + "L": 1, + "M": 1, + "N": 1, + "O": 1, + "P": 1, + "Q": 1, + "R": 1, + "S": 1, + "T": 1, + "U": 1, + "V": 1, + "W": 1, + "X": 1, + "Y": 1, + "Z": 1, + "a": 1, + "b": 1, + "c": 1, + "d": 1, + "e": 1, + "f": 1, + "g": 1, + "h": 1, + "i": 1, + "j": 1, + "k": 1, + "l": 1, + "m": 1, + "n": 1, + "o": 1, + "p": 1, + "q": 1, + "r": 1, + "s": 1, + "t": 1, + "u": 1, + "v": 1, + "w": 1, + "x": 1, + "y": 1, + "z": 1, + ".": 1, + ",": 1, + "!": 1, + "?": 1, + "'": 1, + "\u2019": 1, + "\"": 1, + ":": 1, + ";": 1, + "-": 1, + "\u2013": 1, + "\u2014": 1, + "(": 1, + ")": 1, + "[": 1, + "]": 1, + "/": 1, + "&": 1, + "%": 1, + "+": 1, + "#": 1, + "@": 1, + "*": 1, + " ": 1 + } + }, + "Rajdhani": { + "ascent": 0.93, + "descent": 0.35, + "widths": { + "0": 0.52, + "1": 0.322, + "2": 0.482, + "3": 0.5, + "4": 0.526, + "5": 0.489, + "6": 0.505, + "7": 0.395, + "8": 0.526, + "9": 0.505, + "A": 0.54, + "B": 0.549, + "C": 0.541, + "D": 0.556, + "E": 0.48, + "F": 0.457, + "G": 0.541, + "H": 0.572, + "I": 0.241, + "J": 0.505, + "K": 0.538, + "L": 0.451, + "M": 0.705, + "N": 0.581, + "O": 0.553, + "P": 0.526, + "Q": 0.56, + "R": 0.537, + "S": 0.555, + "T": 0.427, + "U": 0.554, + "V": 0.506, + "W": 0.797, + "X": 0.514, + "Y": 0.5, + "Z": 0.493, + "a": 0.507, + "b": 0.51, + "c": 0.399, + "d": 0.51, + "e": 0.492, + "f": 0.318, + "g": 0.51, + "h": 0.512, + "i": 0.221, + "j": 0.221, + "k": 0.443, + "l": 0.221, + "m": 0.777, + "n": 0.512, + "o": 0.5, + "p": 0.51, + "q": 0.507, + "r": 0.323, + "s": 0.433, + "t": 0.349, + "u": 0.512, + "v": 0.431, + "w": 0.686, + "x": 0.427, + "y": 0.463, + "z": 0.418, + ".": 0.194, + ",": 0.194, + "!": 0.237, + "?": 0.471, + "'": 0.186, + "\u2019": 0.181, + "\"": 0.337, + ":": 0.194, + ";": 0.194, + "-": 0.312, + "\u2013": 0.405, + "\u2014": 0.565, + "(": 0.29, + ")": 0.29, + "[": 0.297, + "]": 0.297, + "/": 0.4, + "&": 0.603, + "%": 0.724, + "+": 0.535, + "#": 0.675, + "@": 0.751, + "*": 0.404, + " ": 0.254 + } + }, + "Saira Stencil One": { + "ascent": 1.13, + "descent": 0.44, + "widths": { + "0": 0.66, + "1": 0.402, + "2": 0.614, + "3": 0.61, + "4": 0.654, + "5": 0.628, + "6": 0.662, + "7": 0.576, + "8": 0.676, + "9": 0.662, + "A": 0.687, + "B": 0.67, + "C": 0.568, + "D": 0.68, + "E": 0.616, + "F": 0.576, + "G": 0.66, + "H": 0.716, + "I": 0.33, + "J": 0.425, + "K": 0.683, + "L": 0.541, + "M": 0.885, + "N": 0.716, + "O": 0.698, + "P": 0.645, + "Q": 0.698, + "R": 0.674, + "S": 0.612, + "T": 0.581, + "U": 0.69, + "V": 0.663, + "W": 0.996, + "X": 0.678, + "Y": 0.633, + "Z": 0.618, + "a": 0.558, + "b": 0.578, + "c": 0.465, + "d": 0.578, + "e": 0.557, + "f": 0.437, + "g": 0.578, + "h": 0.588, + "i": 0.299, + "j": 0.299, + "k": 0.576, + "l": 0.299, + "m": 0.857, + "n": 0.588, + "o": 0.572, + "p": 0.578, + "q": 0.578, + "r": 0.425, + "s": 0.498, + "t": 0.427, + "u": 0.586, + "v": 0.551, + "w": 0.846, + "x": 0.566, + "y": 0.588, + "z": 0.534, + ".": 0.33, + ",": 0.33, + "!": 0.363, + "?": 0.521, + "'": 0.3, + "\u2019": 0.32, + "\"": 0.525, + ":": 0.33, + ";": 0.33, + "-": 0.379, + "\u2013": 0.48, + "\u2014": 0.88, + "(": 0.374, + ")": 0.374, + "[": 0.399, + "]": 0.399, + "/": 0.429, + "&": 0.739, + "%": 0.898, + "+": 0.54, + "#": 0.7, + "@": 0.944, + "*": 0.454, + " ": 0.26 + } + }, + "Shippori Mincho": { + "ascent": 1.16, + "descent": 0.29, + "widths": { + "0": 0.52, + "1": 0.487, + "2": 0.511, + "3": 0.523, + "4": 0.503, + "5": 0.502, + "6": 0.532, + "7": 0.545, + "8": 0.539, + "9": 0.532, + "A": 0.762, + "B": 0.716, + "C": 0.716, + "D": 0.782, + "E": 0.72, + "F": 0.686, + "G": 0.744, + "H": 0.889, + "I": 0.408, + "J": 0.437, + "K": 0.812, + "L": 0.712, + "M": 1.013, + "N": 0.825, + "O": 0.771, + "P": 0.655, + "Q": 0.8, + "R": 0.758, + "S": 0.651, + "T": 0.743, + "U": 0.815, + "V": 0.769, + "W": 1.022, + "X": 0.745, + "Y": 0.754, + "Z": 0.593, + "a": 0.55, + "b": 0.579, + "c": 0.509, + "d": 0.577, + "e": 0.543, + "f": 0.355, + "g": 0.592, + "h": 0.628, + "i": 0.317, + "j": 0.239, + "k": 0.586, + "l": 0.318, + "m": 0.956, + "n": 0.633, + "o": 0.576, + "p": 0.606, + "q": 0.57, + "r": 0.437, + "s": 0.499, + "t": 0.327, + "u": 0.604, + "v": 0.558, + "w": 0.783, + "x": 0.576, + "y": 0.557, + "z": 0.48, + ".": 0.249, + ",": 0.25, + "!": 0.288, + "?": 0.444, + "'": 0.198, + "\u2019": 0.203, + "\"": 0.389, + ":": 0.209, + ";": 0.21, + "-": 0.271, + "\u2013": 0.536, + "\u2014": 1, + "(": 0.363, + ")": 0.363, + "[": 0.438, + "]": 0.437, + "/": 0.443, + "&": 0.82, + "%": 0.938, + "+": 0.605, + "#": 0.676, + "@": 0.906, + "*": 0.441, + " ": 0.258 + } + }, + "Sora": { + "ascent": 0.97, + "descent": 0.29, + "widths": { + "0": 0.743, + "1": 0.42, + "2": 0.618, + "3": 0.614, + "4": 0.642, + "5": 0.623, + "6": 0.659, + "7": 0.574, + "8": 0.637, + "9": 0.659, + "A": 0.756, + "B": 0.68, + "C": 0.795, + "D": 0.791, + "E": 0.6, + "F": 0.56, + "G": 0.831, + "H": 0.804, + "I": 0.314, + "J": 0.64, + "K": 0.678, + "L": 0.544, + "M": 0.92, + "N": 0.849, + "O": 0.865, + "P": 0.64, + "Q": 0.865, + "R": 0.7, + "S": 0.689, + "T": 0.594, + "U": 0.789, + "V": 0.708, + "W": 1.043, + "X": 0.696, + "Y": 0.652, + "Z": 0.654, + "a": 0.575, + "b": 0.689, + "c": 0.606, + "d": 0.689, + "e": 0.612, + "f": 0.379, + "g": 0.675, + "h": 0.64, + "i": 0.308, + "j": 0.317, + "k": 0.573, + "l": 0.286, + "m": 0.968, + "n": 0.64, + "o": 0.676, + "p": 0.689, + "q": 0.689, + "r": 0.41, + "s": 0.536, + "t": 0.426, + "u": 0.628, + "v": 0.559, + "w": 0.848, + "x": 0.56, + "y": 0.547, + "z": 0.488, + ".": 0.262, + ",": 0.262, + "!": 0.296, + "?": 0.552, + "'": 0.262, + "\u2019": 0.244, + "\"": 0.43, + ":": 0.262, + ";": 0.262, + "-": 0.504, + "\u2013": 0.512, + "\u2014": 0.9, + "(": 0.376, + ")": 0.376, + "[": 0.376, + "]": 0.376, + "/": 0.344, + "&": 0.688, + "%": 0.85, + "+": 0.59, + "#": 0.692, + "@": 1.122, + "*": 0.567, + " ": 0.228 + } + }, + "Space Grotesk": { + "ascent": 0.98, + "descent": 0.29, + "widths": { + "0": 0.641, + "1": 0.418, + "2": 0.603, + "3": 0.604, + "4": 0.625, + "5": 0.599, + "6": 0.612, + "7": 0.564, + "8": 0.623, + "9": 0.612, + "A": 0.63, + "B": 0.661, + "C": 0.642, + "D": 0.663, + "E": 0.563, + "F": 0.54, + "G": 0.66, + "H": 0.656, + "I": 0.244, + "J": 0.594, + "K": 0.61, + "L": 0.546, + "M": 0.865, + "N": 0.664, + "O": 0.669, + "P": 0.601, + "Q": 0.669, + "R": 0.631, + "S": 0.613, + "T": 0.588, + "U": 0.666, + "V": 0.619, + "W": 0.875, + "X": 0.638, + "Y": 0.61, + "Z": 0.577, + "a": 0.575, + "b": 0.644, + "c": 0.598, + "d": 0.644, + "e": 0.592, + "f": 0.442, + "g": 0.642, + "h": 0.613, + "i": 0.245, + "j": 0.247, + "k": 0.538, + "l": 0.245, + "m": 0.86, + "n": 0.613, + "o": 0.618, + "p": 0.644, + "q": 0.644, + "r": 0.377, + "s": 0.527, + "t": 0.46, + "u": 0.612, + "v": 0.539, + "w": 0.801, + "x": 0.593, + "y": 0.612, + "z": 0.521, + ".": 0.253, + ",": 0.251, + "!": 0.253, + "?": 0.58, + "'": 0.251, + "\u2019": 0.251, + "\"": 0.425, + ":": 0.253, + ";": 0.253, + "-": 0.455, + "\u2013": 0.607, + "\u2014": 0.911, + "(": 0.379, + ")": 0.377, + "[": 0.335, + "]": 0.335, + "/": 0.37, + "&": 0.604, + "%": 0.772, + "+": 0.62, + "#": 0.628, + "@": 1.026, + "*": 0.52, + " ": 0.257 + } + }, + "Special Elite": { + "ascent": 0.7, + "descent": 0.3, + "widths": { + "0": 0.6108, + "1": 0.5698, + "2": 0.5737, + "3": 0.5571, + "4": 0.6123, + "5": 0.5376, + "6": 0.5884, + "7": 0.5552, + "8": 0.5986, + "9": 0.5845, + "A": 0.5498, + "B": 0.604, + "C": 0.5791, + "D": 0.6226, + "E": 0.6387, + "F": 0.6055, + "G": 0.6152, + "H": 0.6528, + "I": 0.4951, + "J": 0.541, + "K": 0.5825, + "L": 0.6025, + "M": 0.6978, + "N": 0.6279, + "O": 0.6167, + "P": 0.5532, + "Q": 0.6021, + "R": 0.6367, + "S": 0.5889, + "T": 0.5942, + "U": 0.6216, + "V": 0.6113, + "W": 0.6436, + "X": 0.582, + "Y": 0.561, + "Z": 0.5923, + "a": 0.5654, + "b": 0.5654, + "c": 0.5474, + "d": 0.603, + "e": 0.5439, + "f": 0.4731, + "g": 0.583, + "h": 0.6167, + "i": 0.5684, + "j": 0.4155, + "k": 0.6206, + "l": 0.5405, + "m": 0.6636, + "n": 0.6323, + "o": 0.5835, + "p": 0.5874, + "q": 0.5679, + "r": 0.5791, + "s": 0.5195, + "t": 0.5103, + "u": 0.6387, + "v": 0.605, + "w": 0.6787, + "x": 0.6606, + "y": 0.5928, + "z": 0.5288, + ".": 0.3496, + ",": 0.3364, + "!": 0.2764, + "?": 0.4702, + "'": 0.1963, + "\u2019": 0.2642, + "\"": 0.3521, + ":": 0.3433, + ";": 0.3286, + "-": 0.6362, + "\u2013": 0.6118, + "\u2014": 1.1138, + "(": 0.2793, + ")": 0.2817, + "[": 0.312, + "]": 0.3125, + "/": 0.5571, + "&": 0.6763, + "%": 0.667, + "+": 0.4961, + "#": 0.5547, + "@": 0.665, + "*": 0.5229, + " ": 0.293 + } + }, + "Teko": { + "ascent": 0.96, + "descent": 0.48, + "widths": { + "0": 0.39, + "1": 0.235, + "2": 0.328, + "3": 0.355, + "4": 0.363, + "5": 0.358, + "6": 0.382, + "7": 0.291, + "8": 0.389, + "9": 0.378, + "A": 0.385, + "B": 0.409, + "C": 0.377, + "D": 0.412, + "E": 0.343, + "F": 0.332, + "G": 0.382, + "H": 0.417, + "I": 0.21, + "J": 0.334, + "K": 0.384, + "L": 0.301, + "M": 0.516, + "N": 0.41, + "O": 0.393, + "P": 0.379, + "Q": 0.393, + "R": 0.396, + "S": 0.362, + "T": 0.31, + "U": 0.397, + "V": 0.364, + "W": 0.609, + "X": 0.373, + "Y": 0.361, + "Z": 0.313, + "a": 0.36, + "b": 0.36, + "c": 0.352, + "d": 0.36, + "e": 0.36, + "f": 0.222, + "g": 0.36, + "h": 0.365, + "i": 0.178, + "j": 0.178, + "k": 0.357, + "l": 0.178, + "m": 0.549, + "n": 0.365, + "o": 0.37, + "p": 0.36, + "q": 0.36, + "r": 0.238, + "s": 0.328, + "t": 0.219, + "u": 0.365, + "v": 0.317, + "w": 0.543, + "x": 0.342, + "y": 0.342, + "z": 0.292, + ".": 0.165, + ",": 0.165, + "!": 0.209, + "?": 0.342, + "'": 0.161, + "\u2019": 0.166, + "\"": 0.292, + ":": 0.165, + ";": 0.165, + "-": 0.315, + "\u2013": 0.42, + "\u2014": 0.536, + "(": 0.264, + ")": 0.264, + "[": 0.311, + "]": 0.311, + "/": 0.39, + "&": 0.462, + "%": 0.641, + "+": 0.408, + "#": 0.496, + "@": 0.696, + "*": 0.321, + " ": 0.145 + } + }, + "VT323": { + "ascent": 0.8, + "descent": 0.2, + "widths": { + "0": 0.4, + "1": 0.4, + "2": 0.4, + "3": 0.4, + "4": 0.4, + "5": 0.4, + "6": 0.4, + "7": 0.4, + "8": 0.4, + "9": 0.4, + "A": 0.4, + "B": 0.4, + "C": 0.4, + "D": 0.4, + "E": 0.4, + "F": 0.4, + "G": 0.4, + "H": 0.4, + "I": 0.4, + "J": 0.4, + "K": 0.4, + "L": 0.4, + "M": 0.4, + "N": 0.4, + "O": 0.4, + "P": 0.4, + "Q": 0.4, + "R": 0.4, + "S": 0.4, + "T": 0.4, + "U": 0.4, + "V": 0.4, + "W": 0.4, + "X": 0.4, + "Y": 0.4, + "Z": 0.4, + "a": 0.4, + "b": 0.4, + "c": 0.4, + "d": 0.4, + "e": 0.4, + "f": 0.4, + "g": 0.4, + "h": 0.4, + "i": 0.4, + "j": 0.4, + "k": 0.4, + "l": 0.4, + "m": 0.4, + "n": 0.4, + "o": 0.4, + "p": 0.4, + "q": 0.4, + "r": 0.4, + "s": 0.4, + "t": 0.4, + "u": 0.4, + "v": 0.4, + "w": 0.4, + "x": 0.4, + "y": 0.4, + "z": 0.4, + ".": 0.4, + ",": 0.4, + "!": 0.4, + "?": 0.4, + "'": 0.4, + "\u2019": 0.4, + "\"": 0.4, + ":": 0.4, + ";": 0.4, + "-": 0.4, + "\u2013": 0.4, + "\u2014": 0.4, + "(": 0.4, + ")": 0.4, + "[": 0.4, + "]": 0.4, + "/": 0.4, + "&": 0.4, + "%": 0.4, + "+": 0.4, + "#": 0.4, + "@": 0.4, + "*": 0.4, + " ": 0.4 + } + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg b/plugins/hyperframes/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg new file mode 100644 index 000000000..fe470218d --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg @@ -0,0 +1,242 @@ + + + + + + +Font name: Hershey Script 1-stroke + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/hyperframes/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg b/plugins/hyperframes/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg new file mode 100644 index 000000000..d6beb67ae --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg @@ -0,0 +1,242 @@ + + + + + + +Font name: Hershey Script medium + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/hyperframes/skills/embedded-captions/dna/README.md b/plugins/hyperframes/skills/embedded-captions/dna/README.md new file mode 100644 index 000000000..2a5575157 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/README.md @@ -0,0 +1,148 @@ +# DNA registry — pick a visual language, not a preset + +A **DNA** is a complete, art-directed visual language: typeface, palette logic, motion +grammar, and hero orchestration. It **parameterizes per scene** instead of shipping a +fixed look: the accent color is sampled from THIS scene, the contact shadow falls along +THIS scene's light, embed text blur matches THIS scene's depth-of-field, and the hero's +entrance amplitude follows how hard the word was actually spoken (RMS). + +This replaces the template grab-bag. Six deep languages × scene adaptation beats 54 +shallow presets — every render is already fitted to its footage. + +## Category lock (deliveries field, enforced by the compilers) + +Every classic DNA's **home is Cinematic (column)** — that is where all ten were +built and validated. (Standard/rail mode was retired 2026-06-12; the verbatim-rail +need is served by the `anchor` theme. The old rail combos live in +`~/Downloads/embedded-captions-archive/`.) + +## The ten + +| DNA | Register | Scene fit | Voice | +| --------------- | -------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **cream** | premium-warm | dark / mid warm scenes (band luma < 150) | Inter, warm cream, screen blend, glowing emergence hero. The poetic default. | +| **ink** | premium | **bright scenes (band luma > 150)** | Inter, near-black, multiply blend — type reads as _printed on_ the wall. Fixes the bright-scene hole. | +| **editorial** | editorial-luxe | introspective / fashion / poetic, mid-dark | Bodoni Moda, bone, _lowercase italic hero_ — magazine elegance over shout. | +| **keynote** | tech-premium | product / launch / founder updates | Inter 800, opaque white, line-wipe reveals, hero wipes UP. Stillness = confidence. | +| **documentary** | formal | interviews, serious subject matter | Inter, bone, **burn-in reveals**, no hero. Gravitas IS the style. | +| **loud** | loud | hype / sport / music / social | Anton, scene-sampled accent hero, single-unit slam + caption-layer ripple; **body announces in front** (`bodyLayer: "fg"` — k-pop depth, deliberate). | +| **neon** | loud-cyber | cyberpunk / nightlife / tech-noir (dark scenes) | Orbitron + electric cyan; words flicker-ignite like tubes; the hero **powers ON** with a strobe and hums (glow 0.5). | +| **glitch** | loud-cyber | digital / hacker / AI / dystopia | Space Grotesk; **RGB-split echo layers converge** as each beat lands; 0.10–0.12s machine percussion; landing bumps co-visible captions 2px. | +| **chrome** | loud-luxe | Y2K / fashion-tech / music | Audiowide cast in a **liquid-metal gradient** (background-clip:text on the word spans); one sheen sweep crosses the hero during the hold. | +| **velocity** | loud-sport | sport / automotive / fitness | Teko italic; every word arrives **along its motion vector** (streak + skew settling upright); the hero passes through with blurred speed-trail echoes and looms while held. | + +### fx fields (hero block) the engine understands + +`entrance: emergence | settle | slam | rise | wipe-up | flicker-on | streak` · +`glow` (0–0.5) · `echoes: [{dx,dy,color,opacity,blur}]` (converge-on-land duplicates) · +`sheen: true` (gradient sweep — pair with `wordCss` background-clip) · `wordCss` +(per-word treatment; required for background-clip:text, which can't clip through +composited children) · `ripple` (px — landing bump, captions only) · `loom` / `breathe` +(hold-life) · `letterBlur` · `bodyLayer` (top-level: default layer for narration lines). + +## How to pick (agent) + +1. Read `safe-zones.json` → `heroAnchor.bandLuma` + `palette.temperature`. +2. Bright band (>150) → **ink** (never fight a bright scene with cream/screen). +3. Else pick by content register: poetic/warm → **cream** · introspective/luxe → + **editorial** · product/tech → **keynote** · serious/interview → **documentary** · + hype/social → **loud**. +4. State the pick + why in one line; the user decides (SKILL.md Step 0 still applies). + +## Authoring + +- Cinematic mode: `cinematic.json` → `"dna": ""` (drop the `template` field). +- Locked per DNA: family, palette scheme, blend, motion curves, hero orchestration. +- Open per group (unchanged): size / weight / style / case / spacing + planes. +- `var(--accent)` is available in per-group CSS — it resolves to the scene-sampled accent. + +## What the engine generates from the DNA (no authoring needed) + +- **Hero three-act**: co-visible captions dim 0.35s before the hero lands (setup) → + entrance with per-letter stagger, amplitude ∝ spoken loudness (impact) → slow breathe + - glow until exit (afterglow). +- **Scene optics**: depth-match blur on embed captions, light-direction contact shadow. +- All deterministic — measured from files, no randomness. + +## Climax selection — what earns the promotion + +Pick the **payoff, not the topic**: the words you would quote when paraphrasing the +beat. "The stars were only limited by the pixel size" — the payoff is **pixel size** +(the surprising claim), not "stars" (the subject). Test: would the word alone, big on +screen, make the listener nod? A topic word makes them wait. + +- **Phrases are legal** (`match: "pixel size"` / `"skin food"`): a peak is a semantic + unit, not necessarily one token. 2–4 words max — beyond that it's a sentence, not a + peak. +- **Prefer clause-final** — nothing left dangling to place after the lift. +- **Never strand a determiner**: lifting "stars" out of "The stars…" leaves an orphan + "The" that vanishes mid-air. The compiler auto-absorbs a line-leading article into + the promoted phrase; mid-line, match the phrase including its article. +- Sizes are TARGETED by the compiler, not just floored — author sizes are hints: + - **apex = frame event**: under 88% of usable width → raised toward a 93% fill. + Std height cap = `sizeRange[1] × 1.25` (≤46cqh; formal register ×1.0) — a std apex + bursts a rail, not a body composition. Cinematic cap = `sizeRange[1]`. + - **short words fill with TRACKING**: when the height cap binds before the width + target (SHINE — 5 glyphs), the compiler letterspaces up to +0.32em until the word + owns ~88% of the width (film-title craft: HER / DUNE). Long words fill by scale, + short words by air — impact is WIDTH-led either way. + - **minor = damped beat in the apex family**: `max(3× rail, 0.55× apex-final)`, + width-capped. A peak that reads as a label is a bug. + - **lockup context is RATIO-LOCKED**: kicker/tail = `0.26× hero` (clamped + 0.05–0.085·h), recomputed after any width-fit raise. Don't hand-tune context + sizes — size the hero; the context follows like a poster system. + +## Climax placement — the lockup is the default, NOT the only composition + +A hero line takes `"placement": "subject" | "column"`: + +- **subject** (default) — the **ORBIT lockup** centered ON the subject. NOT a centered + sandwich: context anchors to the hero's EDGES like a poster kicker/tagline — + pre-context flush-left off the hero's top-left corner, post-context flush-right off + its bottom-right — so the small lines land BESIDE the head/shoulder (on the scene), + never on the face, and therefore EMBED (bg) like everything else. The eye reads a + diagonal: kicker ↘ HERO ↘ tail. Only the hero crosses the silhouette (the + matte-occlusion showcase). The context's job is reading continuity — it gets the + margins; the hero's job is the cinematic event — it gets the subject. Right when the + peak is THE dramatic moment: cream / loud / glitch / neon / velocity lean here. +- **column** — the apex stays IN its column's reading flow and BURSTS it (oversized, + full hero motion + dim/glow privileges, but composed within the sentence's home + zone; spills toward the subject naturally when oversized). Right when the content + is a continuous read and the column is the narrative's home: keynotes, tutorials, + explainers, documentary. Registers: keynote / documentary / editorial lean here. + +Applying ONE composition to every peak is monoculture — the same failure the motion +review caught. Pick per beat: a 15s explainer might run column peaks throughout and +save the subject lockup for the single apex. (A third pattern — the editorial split, +bg context upper + fg hero lower-third — lives in references/composition-craft.md and +is the next placement candidate.) + +## The motion language (five layers, each DNA answers all five) + +A DNA's animation is not a parameter tweak on a shared fade — it's a distinct physics: + +| Layer | What it governs | Where it lives | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------- | +| **word entrance** | how each word materializes on its beat ({y,x,blur,scale,rot,dur,ease} or burn) | `motion.soft/present/impact` | +| **line exit** | direction + speed of leaving, optional top-to-bottom cascade | `motion.exit` ({dur,y,x,scale,ease,stagger}) | +| **hold-life** | what text does while on screen — stillness is a deliberate choice | `hero.breathe` / `hero.loom` (0 = print-still) | +| **hero orchestration** | the three-act entrance signature (emergence / settle / slam / rise / **wipe-up**) + glow / letterBlur / **ripple** | `hero.*` | +| **timing physics** | the duration & easing register everything obeys (percussive 0.15s ↔ atmospheric 0.6s) | implied by the values above — keep one family per DNA | + +Shipped signatures: cream = _light condenses_ (blur-settle, drift-up exits) · ink = +_letterpress_ (scale-press, no float, dead-still) · editorial = _the pen glides_ +(x-glide with the italic, cascade-out page turns) · keynote = _surgical reveal_ +(burn words + line wipe + hero wipe-up, exits never move) · documentary = _burn and +hold_ (motion's absence IS the language) · loud = _percussion_ (back-eased punches, +alternating tilt, hero ripple that bumps every caption — never the footage). + +Rules inherited from hyperframes motion-principles: exits faster than entrances; vary +ease families BETWEEN DNAs (not within one); `.out` enters, `.in` leaves; never two +transform tweens on one element in the same window (wipe-up is clip-path so the +afterglow scale channel stays free; loom subsumes breathe). + +## Adding a DNA + +Copy an existing `dna/.json`, change the voice, keep the schema. The engine +(`modes/cinematic/engine.html`) and both compilers consume it as-is. A DNA earns its +place by being a _distinct voice with a reason to exist_ — not a recolor. diff --git a/plugins/hyperframes/skills/embedded-captions/dna/chrome.json b/plugins/hyperframes/skills/embedded-captions/dna/chrome.json new file mode 100644 index 000000000..559db06b4 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/chrome.json @@ -0,0 +1,68 @@ +{ + "name": "chrome", + "title": "Chrome — Y2K liquid metal", + "register": "loud-luxe", + "when": "fashion-tech, music, Y2K-revival, product-flex content. The hero is cast in liquid metal — a gradient sheen sweeps across it once during the hold. Supporting lines stay cool steel.", + "font": { + "family": "Audiowide", + "weights": [400] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#e8edf2", + "blend": "normal", + "accent": "#9fb6cc", + "accent_fallback": "#9fb6cc" + }, + "optics": { + "depthMatch": true, + "contactShadow": true, + "warmBloom": false + }, + "filter": "none", + "motion": { + "soft": { + "y": 6, + "scale": 1.04, + "dur": 0.3, + "ease": "power3.out" + }, + "present": { + "y": 6, + "scale": 1.06, + "dur": 0.26, + "ease": "power3.out" + }, + "impact": { + "y": 8, + "scale": 1.1, + "dur": 0.22, + "ease": "power4.out" + }, + "exit": { + "dur": 0.25, + "ease": "power2.in", + "stagger": 0 + } + }, + "hero": { + "entrance": "settle", + "perLetter": false, + "letterStagger": 0, + "glow": 0.15, + "dimOthers": 0.4, + "breathe": 0.008, + "sheen": true, + "case": "uppercase", + "tracking": "0.02em", + "sizeRange": [0.18, 0.3], + "css": "", + "wordCss": "background: linear-gradient(105deg,#3a4350 0%,#f6fbff 20%,#8fa0b2 38%,#ffffff 50%,#2e3742 64%,#eef6fd 82%,#6b7888 100%); background-size: 220% 100%; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; text-shadow: none;" + }, + "css": "", + "deliveries": { + "home": "column", + "rail": "unvalidated", + "note": "signature = liquid-metal wordCss + sheen sweep (engine fx) — std ignores wordCss/fx" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/cream.json b/plugins/hyperframes/skills/embedded-captions/dna/cream.json new file mode 100644 index 000000000..cb6a92443 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/cream.json @@ -0,0 +1,69 @@ +{ + "name": "cream", + "title": "Warm cream — the poetic default", + "register": "premium-warm", + "when": "dark / mid-tone warm scenes (band luma < 150): studios, evening interiors, moody interviews. Introspective, narrative, emotional content. The successor of cinematic-cream.", + "font": { + "family": "Inter", + "weights": [500, 600, 700, 900] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#fff5df", + "blend": "screen", + "accent": "scene", + "accent_fallback": "#e3c06a" + }, + "optics": { + "depthMatch": true, + "contactShadow": true, + "warmBloom": true + }, + "filter": "contrast(1.08)", + "motion": { + "soft": { + "y": 8, + "blur": 2.5, + "dur": 0.5, + "ease": "power2.out" + }, + "present": { + "y": 6, + "blur": 1.5, + "scale": 1.03, + "dur": 0.3, + "ease": "power3.out" + }, + "impact": { + "y": 12, + "blur": 1.5, + "scale": 1.08, + "dur": 0.24, + "ease": "power4.out" + }, + "exit": { + "dur": 0.45, + "y": -8, + "ease": "sine.in", + "stagger": 0 + } + }, + "hero": { + "entrance": "emergence", + "perLetter": true, + "letterStagger": 0.016, + "glow": 0.3, + "dimOthers": 0.45, + "breathe": 0.012, + "case": "uppercase", + "tracking": "-0.03em", + "sizeRange": [0.2, 0.34], + "letterBlur": 2.5 + }, + "css": "", + "deliveries": { + "home": "column", + "rail": "validated", + "note": "standard-mode lineage IS cinematic-cream; validated std renders (jimeng)" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/documentary.json b/plugins/hyperframes/skills/embedded-captions/dna/documentary.json new file mode 100644 index 000000000..4f3b6a872 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/documentary.json @@ -0,0 +1,62 @@ +{ + "name": "documentary", + "title": "Documentary — Errol Morris dignity", + "register": "formal", + "when": "interviews, serious subject matter, journalism, testimonial. Burn-in reveals (no animation), bone on charcoal, a deliberately modest hero. Gravitas IS the style — stillness, no accent color, no glow.", + "font": { + "family": "Inter", + "weights": [500, 700] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#F5EFE6", + "blend": "normal", + "accent": "#F5EFE6", + "accent_fallback": "#F5EFE6" + }, + "optics": { + "depthMatch": true, + "contactShadow": true, + "warmBloom": false + }, + "filter": "none", + "motion": { + "soft": { + "reveal": "burn" + }, + "present": { + "y": 0, + "dur": 0.18, + "ease": "power1.out" + }, + "impact": { + "y": 6, + "scale": 1.03, + "dur": 0.2, + "ease": "power2.out" + }, + "exit": { + "dur": 0.15, + "ease": "power1.in", + "stagger": 0 + } + }, + "hero": { + "entrance": "rise", + "perLetter": false, + "letterStagger": 0, + "glow": 0, + "dimOthers": 0.3, + "breathe": 0, + "case": "none", + "tracking": "-0.015em", + "sizeRange": [0.09, 0.15], + "css": "font-weight: 700;" + }, + "css": "", + "deliveries": { + "home": "column", + "rail": "unvalidated", + "note": "the lower-third IS documentary's home register (Errol Morris); column stays deliberately modest" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/editorial.json b/plugins/hyperframes/skills/embedded-captions/dna/editorial.json new file mode 100644 index 000000000..1d2fa97ff --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/editorial.json @@ -0,0 +1,70 @@ +{ + "name": "editorial", + "title": "Editorial — serif voice, magazine cadence", + "register": "editorial-luxe", + "when": "introspective monologue, fashion / beauty, poetic or lyrical content, premium brand films on mid/dark scenes. The serif italic carries intimacy that a grotesque can't. The hero stays lowercase italic — elegance over shout.", + "font": { + "family": "Bodoni Moda", + "weights": [400, 700] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#f2ead8", + "blend": "screen", + "accent": "scene", + "accent_fallback": "#c9a36a" + }, + "optics": { + "depthMatch": true, + "contactShadow": true, + "warmBloom": true + }, + "filter": "contrast(1.06)", + "motion": { + "soft": { + "x": -10, + "y": 0, + "dur": 0.55, + "ease": "power2.out" + }, + "present": { + "x": -8, + "y": 0, + "scale": 1.02, + "dur": 0.34, + "ease": "power2.out" + }, + "impact": { + "x": -10, + "y": 0, + "scale": 1.06, + "dur": 0.28, + "ease": "power3.out" + }, + "exit": { + "dur": 0.4, + "x": 8, + "ease": "sine.in", + "stagger": 0.07 + } + }, + "hero": { + "entrance": "emergence", + "perLetter": true, + "letterStagger": 0.022, + "glow": 0.18, + "dimOthers": 0.5, + "breathe": 0.01, + "case": "none", + "tracking": "-0.01em", + "sizeRange": [0.18, 0.3], + "css": "font-style: italic; font-weight: 700;", + "letterBlur": 1.5 + }, + "css": "", + "deliveries": { + "home": "column", + "rail": "unvalidated", + "note": "italic serif rail reads fine; the signature x-glide + line cascade-out exits don't exist in the std enum" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/glitch.json b/plugins/hyperframes/skills/embedded-captions/dna/glitch.json new file mode 100644 index 000000000..851e605b0 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/glitch.json @@ -0,0 +1,82 @@ +{ + "name": "glitch", + "title": "Glitch — signal corruption", + "register": "loud-cyber", + "when": "digital / hacker / AI / dystopia content; anything that wants the captions to feel like a corrupted feed. RGB-split echoes snap together as each beat lands; timing is machine-percussive; nothing eases politely.", + "font": { + "family": "Space Grotesk", + "weights": [400, 700] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#eaffff", + "blend": "screen", + "accent": "#ff3df0", + "accent_fallback": "#ff3df0" + }, + "optics": { + "depthMatch": false, + "contactShadow": false, + "warmBloom": false + }, + "filter": "none", + "motion": { + "soft": { + "x": -6, + "stretchX": 1.12, + "dur": 0.12, + "ease": "power4.out" + }, + "present": { + "x": -8, + "stretchX": 1.18, + "dur": 0.11, + "ease": "power4.out" + }, + "impact": { + "x": -10, + "stretchX": 1.25, + "dur": 0.1, + "ease": "power4.out" + }, + "exit": { + "dur": 0.1, + "scale": 1.02, + "ease": "power4.in", + "stagger": 0 + } + }, + "hero": { + "entrance": "settle", + "perLetter": false, + "letterStagger": 0, + "glow": 0.18, + "dimOthers": 0.45, + "breathe": 0, + "ripple": 2, + "case": "uppercase", + "tracking": "0.01em", + "sizeRange": [0.2, 0.32], + "css": "font-weight: 700;", + "echoes": [ + { + "dx": -5, + "dy": 0, + "color": "#22e6ff", + "opacity": 0.75 + }, + { + "dx": 5, + "dy": 1, + "color": "#ff3df0", + "opacity": 0.75 + } + ] + }, + "css": "", + "deliveries": { + "home": "column", + "rail": "unvalidated", + "note": "signature = RGB-split echoes converge (engine fx) — rail keeps only a tinted skin" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/ink.json b/plugins/hyperframes/skills/embedded-captions/dna/ink.json new file mode 100644 index 000000000..b6e75f517 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/ink.json @@ -0,0 +1,65 @@ +{ + "name": "ink", + "title": "Ink — printed on the scene", + "register": "premium", + "when": "BRIGHT scenes (band luma > 150): white offices, daylight, pale walls — the scenes where cream/screen washes out. Multiply blend makes the type read as printed ON the wall, picking up its texture. Confident, editorial-tech tone.", + "font": { + "family": "Inter", + "weights": [500, 700, 900] + }, + "palette": { + "scheme": "dark-on-light", + "cap_color": "#1b1714", + "blend": "multiply", + "accent": "scene", + "accent_fallback": "#9a3b2e" + }, + "optics": { + "depthMatch": true, + "contactShadow": true, + "warmBloom": false + }, + "filter": "contrast(1.05)", + "motion": { + "soft": { + "y": 0, + "scale": 1.06, + "dur": 0.22, + "ease": "power3.out" + }, + "present": { + "y": 0, + "scale": 1.08, + "dur": 0.2, + "ease": "power3.out" + }, + "impact": { + "y": 0, + "scale": 1.12, + "dur": 0.18, + "ease": "power4.out" + }, + "exit": { + "dur": 0.22, + "ease": "power2.in", + "stagger": 0 + } + }, + "hero": { + "entrance": "settle", + "perLetter": false, + "letterStagger": 0.014, + "glow": 0, + "dimOthers": 0.4, + "breathe": 0, + "case": "uppercase", + "tracking": "-0.035em", + "sizeRange": [0.2, 0.34] + }, + "css": "", + "deliveries": { + "home": "column", + "rail": "unvalidated", + "note": "rail works (scale-press→settle) but the letterpress identity wants a scene surface to press INTO" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/keynote.json b/plugins/hyperframes/skills/embedded-captions/dna/keynote.json new file mode 100644 index 000000000..759587432 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/keynote.json @@ -0,0 +1,62 @@ +{ + "name": "keynote", + "title": "Keynote — Apple-grade confidence", + "register": "tech-premium", + "when": "product walkthroughs, launches, founder updates, tech explainers. Opaque white type, dead-center planes, few words held long. Confidence comes from mass and stillness, not motion.", + "font": { + "family": "Inter", + "weights": [400, 600, 800] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#ffffff", + "blend": "normal", + "accent": "scene", + "accent_fallback": "#8ab4ff" + }, + "optics": { + "depthMatch": true, + "contactShadow": true, + "warmBloom": false + }, + "filter": "none", + "motion": { + "soft": { + "reveal": "burn" + }, + "present": { + "reveal": "burn" + }, + "impact": { + "reveal": "burn" + }, + "lineReveal": { + "type": "wipe-x", + "dur": 0.4, + "ease": "expo.out" + }, + "exit": { + "dur": 0.3, + "ease": "power2.in", + "stagger": 0 + } + }, + "hero": { + "entrance": "wipe-up", + "perLetter": false, + "letterStagger": 0, + "glow": 0, + "dimOthers": 0.35, + "breathe": 0, + "case": "uppercase", + "tracking": "-0.045em", + "sizeRange": [0.16, 0.3], + "css": "font-weight: 800;" + }, + "css": "", + "deliveries": { + "home": "column", + "rail": "validated", + "note": "wipe-up maps to the std entrance enum; keynote_std validated (Shine)" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/loud.json b/plugins/hyperframes/skills/embedded-captions/dna/loud.json new file mode 100644 index 000000000..21f572d24 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/loud.json @@ -0,0 +1,75 @@ +{ + "name": "loud", + "title": "Loud — the sanctioned blast", + "register": "loud", + "when": "hype, social reels, sport, music, motivational shorts — content that WANTS the type to compete with the face (k-pop-lyric lineage; deliberately breaks 'subject wins' at the hero). Machine-gun letter staggers, slam entrances, scene-sampled saturated accent on the hero. Body lines ANNOUNCE in front of the subject (bodyLayer:fg — k-pop lyric depth); only the hero embeds behind.", + "font": { + "family": "Anton", + "weights": [400] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#ffffff", + "blend": "normal", + "accent": "scene", + "accent_fallback": "#ffd600", + "heroColor": "accent", + "accentMode": "counter" + }, + "optics": { + "depthMatch": false, + "contactShadow": true, + "warmBloom": false + }, + "filter": "none", + "motion": { + "soft": { + "y": 0, + "scale": 1.3, + "rot": 1.2, + "dur": 0.18, + "ease": "back.out(1.7)" + }, + "present": { + "y": 0, + "scale": 1.35, + "rot": 1.2, + "dur": 0.18, + "ease": "back.out(1.7)" + }, + "impact": { + "y": 0, + "scale": 1.45, + "rot": 1.5, + "dur": 0.16, + "ease": "back.out(1.9)" + }, + "exit": { + "dur": 0.14, + "scale": 0.96, + "ease": "power3.in", + "stagger": 0 + } + }, + "hero": { + "entrance": "slam", + "perLetter": false, + "letterStagger": 0.01, + "glow": 0.25, + "dimOthers": 0.55, + "breathe": 0.016, + "case": "uppercase", + "tracking": "-0.005em", + "sizeRange": [0.26, 0.4], + "css": "-webkit-text-stroke: 2px rgba(0,0,0,0.35); paint-order: stroke fill;", + "ripple": 3, + "loom": 0.03 + }, + "css": "", + "bodyLayer": "fg", + "deliveries": { + "home": "column", + "rail": "unvalidated", + "note": "slam maps; bodyLayer:fg already a std-shaped hybrid; validated both" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/neon.json b/plugins/hyperframes/skills/embedded-captions/dna/neon.json new file mode 100644 index 000000000..bc4ac367a --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/neon.json @@ -0,0 +1,58 @@ +{ + "name": "neon", + "title": "Neon — the sign in the scene", + "register": "loud-cyber", + "when": "cyberpunk / nightlife / tech-noir / music content on dark scenes. The captions ARE neon signage hanging in the room: electric cyan tubes, ignition flicker, a hum of glow. The hero powers ON like a sign being lit.", + "font": { + "family": "Orbitron", + "weights": [400, 700] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#d9f7ff", + "blend": "screen", + "accent": "#22e6ff", + "accent_fallback": "#22e6ff", + "heroColor": "accent" + }, + "optics": { + "depthMatch": false, + "contactShadow": false, + "warmBloom": false + }, + "filter": "none", + "motion": { + "soft": { + "reveal": "flicker" + }, + "present": { + "reveal": "flicker" + }, + "impact": { + "reveal": "flicker" + }, + "exit": { + "dur": 0.18, + "ease": "power2.in", + "stagger": 0 + } + }, + "hero": { + "entrance": "flicker-on", + "perLetter": false, + "letterStagger": 0, + "glow": 0.5, + "dimOthers": 0.4, + "breathe": 0.01, + "case": "uppercase", + "tracking": "0.04em", + "sizeRange": [0.18, 0.3], + "css": "text-shadow: 0 0 14px rgba(34,230,255,0.65), 0 0 40px rgba(34,230,255,0.35), 0 0 80px rgba(34,230,255,0.18);" + }, + "css": ".cap { text-shadow: 0 0 10px rgba(34,230,255,0.4), 0 0 26px rgba(34,230,255,0.2); }", + "deliveries": { + "home": "column", + "rail": "unvalidated", + "note": "signature = flicker-on + glow layer (engine hero fx) — rail keeps only the cyan skin" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/dna/velocity.json b/plugins/hyperframes/skills/embedded-captions/dna/velocity.json new file mode 100644 index 000000000..8650e1de6 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/dna/velocity.json @@ -0,0 +1,89 @@ +{ + "name": "velocity", + "title": "Velocity — speed lines", + "register": "loud-sport", + "when": "sport, automotive, fitness, anything kinetic. Every word arrives ALONG its own motion vector (streak + skew settles upright); the hero passes through with speed trails behind it. Condensed italic forward lean.", + "font": { + "family": "Teko", + "weights": [400, 700] + }, + "palette": { + "scheme": "light-on-dark", + "cap_color": "#ffffff", + "blend": "normal", + "accent": "scene", + "accent_fallback": "#ffd600", + "heroColor": "accent", + "accentMode": "counter" + }, + "optics": { + "depthMatch": false, + "contactShadow": true, + "warmBloom": false + }, + "filter": "none", + "motion": { + "soft": { + "x": -22, + "skewX": -8, + "stretchX": 1.3, + "dur": 0.22, + "ease": "expo.out" + }, + "present": { + "x": -26, + "skewX": -10, + "stretchX": 1.35, + "dur": 0.2, + "ease": "expo.out" + }, + "impact": { + "x": -32, + "skewX": -12, + "stretchX": 1.45, + "dur": 0.18, + "ease": "expo.out" + }, + "exit": { + "dur": 0.16, + "x": 14, + "ease": "power3.in", + "stagger": 0.04 + } + }, + "hero": { + "entrance": "streak", + "perLetter": false, + "letterStagger": 0, + "glow": 0, + "dimOthers": 0.5, + "breathe": 0, + "loom": 0.025, + "case": "uppercase", + "tracking": "0.015em", + "sizeRange": [0.24, 0.38], + "css": "font-weight: 700; font-style: italic;", + "echoes": [ + { + "dx": -10, + "dy": 0, + "color": "#ffffff", + "opacity": 0.22, + "blur": 1 + }, + { + "dx": -20, + "dy": 0, + "color": "#ffffff", + "opacity": 0.1, + "blur": 2 + } + ] + }, + "css": "", + "deliveries": { + "home": "column", + "rail": "unvalidated", + "note": "signature = streak + trail echoes along the speed vector (engine fx) — rail loses all of it" + } +} diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/README.md b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/README.md new file mode 100644 index 000000000..f78ae5b93 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/README.md @@ -0,0 +1,48 @@ +# Cinematic mode (pure embed) — one engine, six DNAs + +> Cinematic mode compiles **[../../dna/](../../dna/README.md)** through +> **[engine.html](engine.html)** (`make-composition.cjs`). The old per-template HTML +> shells are retired — `cinematic-cream` maps to `dna: "cream"` automatically; the other +> archived templates (memory-wall / champion / portrait-header, in [\_archive/](_archive/)) +> remain as design references only. + +Use this mode for pure-embed asks (no rail): brand film, hype, social reel, showcase. +The **DNA** locks the visual language (type, palette scheme, blend, motion grammar, hero +three-act); **safe-zones v2** parameterizes it to the scene (sampled accent, light- +direction contact shadow, depth-match blur); **the agent decides layout only** (planes, +blocks, per-line typography within the DNA). + +## Workflow + +1. `bash scripts/prepare.sh ` → matte ∥ transcript ∥ envelope → safe-zones v2 +2. Pick a DNA ([../../dna/README.md](../../dna/README.md)): bright hero band → `ink`, + else by register (cream / editorial / keynote / documentary / loud). Recommend, let + the user pick. +3. Author `/cinematic.json` — `"dna": ""` + thought-blocks (schema: + `scripts/make-cinematic.cjs` header) +4. `node scripts/make-cinematic.cjs ` → plan.json → engine-compiled index.html +5. `node scripts/preview-frames.cjs ` → § Visual QA (failure checks + the 5 + positive checks in [../../references/reference-bar.md](../../references/reference-bar.md)) +6. `bash scripts/render-and-composite.sh ` → gates → final.mp4 + +## What the engine generates (never author these) + +- word timings from the transcript; accumulate-within-block / page-flip-between-blocks +- the hero hand-off + **three-act orchestration** (dim → RMS-coupled per-letter entrance + → breathe + glow), per the DNA's `hero` block +- scene tokens: `--accent` (sampled), contact shadow, depth blur +- reading order, re-slot from measured heights, hero size/collision post-pass + +## What you DON'T do + +- Override `.cap` color / blend / shadow / filter / motion curves — that's the DNA. + Scene fights the look → pick a different DNA (bright → `ink`), never recolor. +- Hand-position the hero into a clean margin (it belongs ON the subject, ~30–55% + occluded — safe-zones `heroBands.best`). +- Add full-frame grades/textures over the footage (hard rule: the video ships untouched). + +## Adding a DNA + +`dna/.json` — copy one, change the voice (see [../../dna/README.md](../../dna/README.md) +§ Adding). The engine consumes it with no code change. A DNA must be a distinct voice +with a reason to exist, not a recolor. diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md new file mode 100644 index 000000000..a200654f4 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md @@ -0,0 +1,98 @@ +# Template: champion + +**Look:** podcast / interview, upper-side column with intro→phrase→emph +beats building toward a center-stage CROWN that crosses the subject's body. +"Wimbledon Champion" energy. + +**Visual identity (LOCKED):** + +- 5 typography slots: intro / phrase / emph / dream / crown +- `mix-blend-mode: screen` over warm bone color (#fff5df) +- Deep text-shadow + brightness boost +- Single-caption-swap layout (caps stack at one point in the column) +- Center-stage crown crosses the subject for cinematic occlusion + +## When to apply + +✅ **Good fit:** + +- Podcast / interview style with a single seated subject +- Cluttered backdrop (bookshelf, props, dark) — screen blend reads through +- Subject roughly centered with clear clean zones on one or both sides +- Speech has a clear payoff line that can become a "crown" (1-3 short words) +- 16:9 landscape, 1920×1080 ideal + +❌ **Wrong fit:** + +- Bright/sky/window backdrop (screen blend washes out) +- Subject heavily off-center such that there's no clean column zone +- Speech has no clear climax line +- Portrait 9:16 → use `portrait-header` template instead + +## Layout decisions agent makes + +| Field | What | Example (1920×1080) | +| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | +| `plane.top/left/width/height` | Where the side column sits. Pick the side opposite the subject's gaze (looking room) and hug the cleanest backdrop zone. | `{top: 40, left: 40, width: 720, height: 420}` | +| `plane.rotateY` | Slight perspective into the wall. Positive for left column (recedes right), negative for right column. Keep small (3-7°). | `4` | +| `crown_top` | Y position of the crown. Should fall on the subject's chest/neck so the body occludes the middle letters. | `420` | +| `font_scale` | Multiplier on locked sizes. | `1.0` for 1920×1080 | +| `crown_enabled` | Whether to render a crown. Skip if the speech has no clean payoff line, or if the subject is too far off-center for a center crown to land. | `true` | + +### Crown placement rules + +Before enabling the crown, verify all 3 conditions: + +1. Subject body center within ±10% of frame horizontal center +2. Clean zones ≥15% of frame width on each side of subject +3. Crown text width (uppercase 140px × ~chars) > subject body width + 400px + +If any fails: disable the crown OR use a smaller font + place it in the +larger clean zone instead of center. See `references/layout-heuristics.md`. + +## Slot assignment + +| Slot | Use for | +| ------ | ---------------------------------------------------------- | +| intro | Filler / discourse markers ("you know,", "for me,", "so…") | +| phrase | Main statement clauses | +| emph | Key achievement / superlative line | +| dream | Aspirational lines, past-tense reflection | +| crown | The single climax line — center-stage payoff | + +Aim for ≤3 slots per video (excluding crown). Don't use all 4 in a 12s clip. + +## Plan.json shape + +```json +{ + "mode": "template", + "template": "champion", + "duration": 12.08, "fps": 24, "width": 1920, "height": 1080, + "plane": { + "top": 40, "left": 40, "width": 720, "height": 420, + "rotateY": 4 + }, + "crown_top": 420, + "font_scale": 1.0, + "groups": [ + { "id": "cg-0", "slot": "intro", "tone": "soft", + "in": 0.10, "out": 1.45, "words": [...] }, + { "id": "cg-1", "slot": "phrase", "tone": "soft", + "in": 1.55, "out": 4.20, "words": [...] }, + { "id": "cg-2", "slot": "emph", "tone": "present", + "in": 6.50, "out": 8.30, "words": [...] } + ], + "crown_group": { + "id": "cg-crown", "tone": "present", + "in": 10.85, "out": 12.08, + "words": [ + {"text": "Wimbledon", "start": 10.94, "end": 11.28}, + {"text": "Champion", "start": 11.38, "end": 11.84} + ] + } +} +``` + +`crown_group` always uses the crown slot — no need to specify `slot`. +Set `crown_group: null` to disable. diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/champion/template.html b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/champion/template.html new file mode 100644 index 000000000..624f89f87 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/champion/template.html @@ -0,0 +1,188 @@ + + + + + + + + + + +
+ + +
+
{{GROUPS_HTML}}
+
{{CROWN_HTML}}
+
+ + +
+ + + + diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md new file mode 100644 index 000000000..997286b6b --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md @@ -0,0 +1,134 @@ +# Template: memory-wall + +**Look:** introspective monologue, italic poem stacking on a back wall, +right-aligned cascade for the climax. Sam Harris / Pico Iyer territory. + +**Visual identity (LOCKED — do not change):** + +- 4-slot typography arc: italic 600 → italic 500 hanging-indent → upright + 700 pivot → uppercase 900 climax +- `mix-blend-mode: screen` over warm-bone color (#fff4dc) +- soft text-shadow + brightness boost +- Per-word fade with subtle Y-drift (soft tone) or pop+scale (present tone) + +## When to apply + +✅ **Good fit:** + +- Talking-head with a flat back wall (acoustic foam, plain plaster, soft + bookshelf) on one side +- Single subject, fixed or near-fixed camera +- Voice-over feel: introspective, narrative, "I was thinking…" +- Mid-tone or dark backdrop (luminance < 180) + +❌ **Wrong fit:** + +- Bright window/sky backdrop → screen blend blows out +- Cluttered backdrop with text/graphics → conflicts with caption text +- Energetic / vlog / TikTok style → wrong vibe +- Multiple speakers / hard cuts → caption arc breaks + +## What agent decides per scene + +| Field | What | Example | +| ------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `plane.top/right/width/height` | Where the wall plane sits in frame. Plane should HUG the side of the wall, not float over the subject. | `{top: 90, right: 30, width: 720, height: 520}` for 1280×720 | +| `plane.rotateY` | Match the wall's perspective angle. Negative for right-side wall (text recedes left), positive for left-side wall. | `-13` for a right-side wall at slight angle | +| `plane.rotateX` | Tiny vertical tilt if wall is angled up/down. Usually 0-2 deg. | `1` | +| `font_scale` | Multiplier on the locked cap-N base sizes. Tune for frame height. | `1.0` for 1280×720, `~1.5` for 1920×1080, `~0.7` for 720p portrait | +| `groups[].slot` | Which of the 4 typography slots this group uses (1/2/3/4). Drives the arc. | See below | +| `groups[].tone` | "soft" or "present" — drives motion curve | `"soft"` for opening lines, `"present"` for pivot+climax | + +## Slot assignment rules + +Aim for ONE arc across the video: `1 → 2 → 3 → 4`. Don't repeat slots if you +can avoid it; don't skip slots without reason. + +| Slot | Use for | +| ---- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | The opener. The "I was thinking" line. Italic, soft entry. | +| 2 | The dreamy continuation / modifier. Smaller italic, hanging-indent — feels like the second half of a sentence with some staggered drift. | +| 3 | The pivot. Upright (no italic), the syntactic turn. ("but suddenly", "and then…") | +| 4 | The climax. Big uppercase 900. The payoff line. Aim for ≤4 short words so the right-aligned cascade naturally wraps to 2-3 lines. | + +If the script is longer than 4 groups, repeat slot 1 or 2 for additional +soft lines, but reserve slot 4 for the SINGLE climax. + +## Plan.json shape + +```json +{ + "mode": "template", + "template": "memory-wall", + "duration": 8.04, + "fps": 24, + "width": 1280, + "height": 720, + "plane": { + "top": 90, + "right": 30, + "width": 720, + "height": 520, + "rotateY": -13, + "rotateX": 1 + }, + "font_scale": 1.0, + "groups": [ + { + "id": "cg-0", + "slot": 1, + "tone": "soft", + "in": 0.2, + "out": 4.85, + "words": [ + { "text": "Some", "start": 0.24, "end": 0.44 }, + { "text": "memories", "start": 0.48, "end": 0.82 }, + { "text": "feel", "start": 0.92, "end": 1.14 }, + { "text": "soft", "start": 1.2, "end": 1.64 } + ] + }, + { + "id": "cg-1", + "slot": 2, + "tone": "soft", + "in": 2.55, + "out": 4.85, + "words": [ + { "text": "like", "start": 2.66, "end": 2.78 }, + { "text": "old", "start": 2.86, "end": 3.02 }, + { "text": "film", "start": 3.16, "end": 3.46 } + ] + }, + { + "id": "cg-2", + "slot": 3, + "tone": "present", + "in": 4.9, + "out": 8.04, + "words": [ + { "text": "but", "start": 5.04, "end": 5.18 }, + { "text": "suddenly", "start": 5.24, "end": 5.76 } + ] + }, + { + "id": "cg-3", + "slot": 4, + "tone": "present", + "in": 6.7, + "out": 8.04, + "words": [ + { "text": "everything", "start": 6.82, "end": 7.14 }, + { "text": "is", "start": 7.18, "end": 7.28 }, + { "text": "sharp", "start": 7.32, "end": 7.52 }, + { "text": "again", "start": 7.58, "end": 7.92 } + ] + } + ] +} +``` + +## Don't fight the template + +If the user wants different typography, different blend, or different motion: +**use Standard mode** (`../../standard/`). Don't try to override the locked CSS — the +template's visual consistency is the whole point. diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html new file mode 100644 index 000000000..da9cec4c4 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html @@ -0,0 +1,179 @@ + + + + + + + + + + +
+ + +
+
{{GROUPS_HTML}}
+
+ + +
+ + + + diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md new file mode 100644 index 000000000..efaaf0aba --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md @@ -0,0 +1,81 @@ +# Template: portrait-header + +**Look:** 9:16 portrait talking-head with captions on a horizontal strip +across the top of the frame, above the subject's head. Optional crown at +the bottom for shots that include the subject's waist or below. + +**Visual identity (LOCKED):** + +- 5 typography slots: intro / phrase / emph / dream / crown (centered) +- `mix-blend-mode: screen` over warm bone color (#fff5df) +- Single-caption swap (caps stack at one position in the header strip) +- Per-word fade with subtle Y-drift (soft) or pop+scale (present) + +## When to apply + +✅ **Good fit:** + +- 9:16 portrait video (1080×1920 typical) +- Single subject filling the center of the frame +- Clean band visible above the head +- Speech is relatively dense (many short phrases) — crown only for the + one true climax + +❌ **Wrong fit:** + +- Subject's head crops to the very top of frame (no header band exists) +- 16:9 landscape → use `champion` or `memory-wall` instead +- Multiple speakers / cuts + +## Layout decisions + +| Field | What | Example (1080×1920) | +| --------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | +| `header.top` | Y of the header strip. Should sit above the subject's head with ~30px breathing room. | `30` if hair top is around y=200 | +| `header.height` | Height of the strip. Bigger for longer captions / 2-line wraps. | `280` | +| `crown_top` | Y of the crown line (bottom of frame). Skip if no waist visible. | `1620` for a near-full-body shot | +| `crown_enabled` | Whether to render a bottom crown. Skip if subject body fills the lower half completely (matte will block crown anyway). | `false` for tight head-and-shoulders | +| `font_scale` | Scale multiplier on locked sizes. | `1.0` for 1080×1920 | + +## Slot assignment + +Same arc as champion: intro / phrase / emph / dream / crown. + +For portrait-header specifically, header band is narrow (one strip), so: + +- Most groups fit on 1-2 lines +- Don't use crown if it'd be hidden by the body matte (Pausch-style portraits + often need to skip crown entirely and promote the climax to `emph` in the + header instead) + +## Plan.json shape + +```json +{ + "mode": "template", + "template": "portrait-header", + "duration": 25.3, "fps": 24, "width": 1080, "height": 1920, + "header": { "top": 30, "height": 280 }, + "crown_top": 1620, + "font_scale": 1.0, + "groups": [ + { "id": "cg-0", "slot": "intro", "tone": "soft", + "in": 0.10, "out": 3.20, "words": [...] }, + { "id": "cg-1", "slot": "phrase", "tone": "soft", + "in": 3.55, "out": 5.80, "words": [...] }, + { "id": "cg-2", "slot": "emph", "tone": "present", + "in": 17.85, "out": 22.10, + "words": [ + {"text": "Time", "start": 17.94, "end": 18.26}, + {"text": "is", "start": 18.38, "end": 18.54}, + {"text": "all", "start": 18.66, "end": 18.80}, + {"text": "we", "start": 18.92, "end": 19.02}, + {"text": "have", "start": 19.12, "end": 19.38} + ]} + ], + "crown_group": null +} +``` + +Set `crown_group: null` if you've checked that a crown would be blocked by +the subject body or the shot composition. diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html new file mode 100644 index 000000000..4cf287350 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html @@ -0,0 +1,170 @@ + + + + + + + + + + +
+ + +
+
{{GROUPS_HTML}}
+
{{CROWN_HTML}}
+
+ + +
+ + + + diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md new file mode 100644 index 000000000..a49020653 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md @@ -0,0 +1,16 @@ +# cinematic-cream — spec + +The authoritative spec lives in [template.html](template.html)'s header comment (DNA-only: +what's LOCKED vs OPEN, the LAYOUT/planes contract, READING ORDER + hand-off, hero sizing). +Read that header before authoring plan.json. Quick contract: + +- LOCKED: Inter, soft/present motion, warm-cream palette, screen blend, shadow logic. +- OPEN per group (css field): size/weight/style/transform/spacing + position WITHIN a plane. +- LAYOUT: run scripts/safe-zones.cjs first. Narration planes HUG the silhouette — use + zones.hugLeft/hugRight (2-6% gap from the subject's edge); a plane parked in the far + corner reads as disconnected floating text, not an embed. The ONE hero stays BIG + (~0.22-0.34·h) centered ON the subject (heroAnchor / heroBands.best), target ~30-55% + occlusion. fg is the LAST resort: only when heroBands.feasible=false (no band ≤62%). + hero BIG (~0.22-0.34·h) centered ON the subject (heroAnchor), target ~30-55% occlusion. +- plan.json: groups[] with per-word transcript timings (use scripts/fill-timings.cjs), + fit via scripts/fit-fonts.cjs, compile via scripts/make-composition.cjs. diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html new file mode 100644 index 000000000..7833cce4a --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html @@ -0,0 +1,226 @@ + + + + + + + + + + +
+ + +
{{GROUPS_HTML}}
+ + +
+ + + + diff --git a/plugins/hyperframes/skills/embedded-captions/modes/cinematic/engine.html b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/engine.html new file mode 100644 index 000000000..2773bed11 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/cinematic/engine.html @@ -0,0 +1,355 @@ + + + + + + + + + + +
+ + +
{{GROUPS_HTML}}
+ + +
+ + + + diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/_anatomy.md b/plugins/hyperframes/skills/embedded-captions/modes/standard/_anatomy.md new file mode 100644 index 000000000..234f71c84 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/standard/_anatomy.md @@ -0,0 +1,233 @@ +--- +name: caption-template-anatomy +description: The shared, reproducible scene engine every caption template is built on — a matted talking-head with a flowing verbatim foreground caption and a single climax word, driven by one paused GSAP timeline. Read it ONCE per session (it is identical for all 54 templates); each per-template file in templates/ only overrides the style tokens + the named climax entrance/exit. +metadata: + tags: caption, talking-head, matte, occlusion, verbatim, climax, gsap, hyperframes +--- + +# Caption Template — Anatomy (the shared engine) + +A **caption template** = one complete, reproducible HyperFrames scene: + +> **the person (always in frame)** + a **flowing foreground caption** (verbatim, word-by-word, with appear **and** disappear) + a **climax word** (big, behind the speaker, with a designed entrance **and** exit) + a coherent **font / colour / motion** design. + +Every file in `templates/` is the SAME engine described here with three things swapped: (1) the **style tokens** (font, fills, accent, optional gradient/stroke), (2) the named **climax entrance** + **exit** (see `_motion.md`), (3) the **copy** (flow lines + climax word) and **scene/person**. So read this once; each template file is short. + +HyperFrames-native, so anyone can reproduce it: + +- **One paused GSAP timeline per composition**, registered to `window.__timelines[data-composition-id]`. +- All timing in **seconds**; `data-start` / `data-duration` carry the scene window. +- **Deterministic + seek-safe** only — no `Math.random()`, no `Date.now()`, no infinite repeats, no un-seekable CSS animations. Every state is reachable by seeking the timeline to a time `t`. +- GSAP transform aliases (`x`, `y`, `scale`, `rotation`); animate `opacity`, `filter`, `clipPath`, `textShadow`, `backgroundPosition`, `letterSpacing` — never layout props (width/top/left/margin). + +For the composition contract see `hyperframes-core`; eases + the animated-property allowlist see `hyperframes-gsap`; caption grouping/positioning/exit guarantees see `hyperframes-captions`. + +## 1 · Asset prep (two CLI calls) + +```bash +# 1) The person — transparent talking-head cutout over the scene (VP9 + alpha) +bash scripts/prepare.sh # matte ∥ transcribe ∥ safe-zones (THIS skill — not remove-background) +# (a still works too: remove-background portrait.jpg -o person.png) + +# 2) The verbatim word timings that drive the flowing caption +npx hyperframes transcribe subject.mp4 --model small # → transcript.json +# shape: [{ "id":"w0","text":"Hello","start":0.0,"end":0.5 }, …] +``` + +The flow caption consumes that `transcript.json` directly (word `start`/`end` → reveal + active-word emphasis). The climax word is authored by hand (it is the headline beat, not part of the spoken transcript). In production the avatar/matte pipeline yields a pixel-perfect alpha for free — `remove-background` is the fallback for arbitrary footage. + +## 2 · The matte sandwich (HTML) + +Six layers, back-to-front. The person is layered ON TOP of the climax so they physically **occlude** it — this is what sells "behind the speaker" (blur/opacity alone reads as a flat overlay). + +```html +
+ + + + +
{CLIMAX_WORD}
+ + + + + + +
+ + +
+ +
+``` + +## 3 · Base CSS (layout · z-order · sizing) + +Caption size is in **`cqh`** (% of frame height) via a size container, so it honours broadcast spec at any resolution (~8% cap-height for a 16:9 word). The per-template file only sets the `--ff` / `--cfill` / `--cacc` tokens and any `.climax span` fill (gradient/stroke). + +```css +.stage { + position: relative; + aspect-ratio: 16/9; + overflow: hidden; + container-type: size; + background-size: cover; + background-position: center 12%; + background-color: #0a0a0e; + font-family: var(--ff); +} +.stage > * { + position: absolute; +} +.cut { + z-index: 4; + inset: 0; + width: 100%; + height: 100%; + object-fit: cover; + object-position: center 12%; + pointer-events: none; +} +.grade { + z-index: 5; + inset: 0; + pointer-events: none; + background: radial-gradient(130% 100% at 50% 26%, transparent 40%, rgba(0, 0, 0, 0.6)); +} + +/* CLIMAX — big, behind person (z1), occluded. line-height ≥1.15 so clip-reveal + entrances (inset(0)) never slice glyph tops; pad clips negative for script faces. */ +.climax { + z-index: 1; + left: 50%; + top: 37%; + transform: translate(-50%, -50%); + white-space: nowrap; + text-align: center; + line-height: 1.18; + font-family: var(--ff); + color: var(--cfill); + font-weight: 900; + font-size: 44cqh; + text-transform: uppercase; + text-shadow: + 0 2px 13px rgba(0, 0, 0, 0.6), + 0 0 48px rgba(0, 0, 0, 0.42); +} +.climax span { + display: inline-block; + opacity: 0; +} /* GSAP reveals it */ + +/* FLOW — verbatim caption, in front (z6), lower third */ +.flow { + z-index: 6; + left: 50%; + bottom: 9%; + transform: translateX(-50%); + width: 90%; + text-align: center; + line-height: 1.15; + font-family: var(--ff); + font-weight: 700; + font-size: 7.5cqh; + color: var(--cfill); +} +.flow .w { + display: inline-block; + opacity: 0; + margin: 0 0.1em; + color: var(--cfill); +} +.flow .w.act { + color: var(--cacc); +} /* the currently-spoken word */ + +/* tokens every template overrides: */ +.stage { + --ff: "Inter"; + --cfill: #fff; + --cacc: #10a37f; +} +``` + +**Legibility on busy/bright scenes:** a behind-the-person climax needs separation from the footage, not just a fill colour. For dark or gradient fills on lit scenes give the climax an outline — `-webkit-text-stroke:1px rgba(0,0,0,.5);paint-order:stroke fill` — a dark drop-shadow alone fails against highlights (e.g. a lamp). Gradient/clip fills must live on `.climax span` (the text node), never on the transformed `.climax` container, or the clip detaches and only the shadow shows. + +## 4 · One paused GSAP timeline (the loop, made seek-safe) + +The gallery used a `setInterval` loop; HyperFrames needs the same beats as **absolute-time tweens on one paused timeline**. The cycle is **FLOW line → (FLOW line) → CLIMAX in → hold → out**. Restraint is the rule: flow stays clean; the one big mood move happens only at the climax. + +```html + + +``` + +`FLOW_IN` / `FLOW_OUT` / `CLIMAX_IN` / `CLIMAX_OUT` are the named recipes in **`_motion.md`** — each returns a GSAP tween/timeline so the per-template file just picks four names. A simpler equivalent for the flow active-word _glow_ (rather than discrete reveal) is the single-driver envelope in `hyperframes-animation/rules/asr-keyword-glow.md`. + +## 5 · How to choose values + +- **SCENE_DUR** — must equal `data-duration`. Typical 6–10 s for a looping demo card. +- **WORDS grouping** — 2–4 words / line, ~380–520 ms per word (premium pacing is slower than Hormozi). Group from `transcript.json`; keep `end < next.start` (monotonic). +- **CLIMAX_AT** — place the climax _after_ the flow lines clear, on the narration's emphasis beat. +- **CLIMAX_HOLD** — **≥1 s** of settled dwell _after_ the entrance finishes (the climax is the headline beat). Entrances run 0.6–1.6 s, so e.g. hold = entranceDur + 1.0–1.6. +- **FOUT** — flow exit ≈ 0.5 s. **Exit ≈ 75 % of entry** for every element (arrival deliberate, departure swift; see `_motion.md`). +- **Climax size** — base 44 cqh; long words bleed off-frame (intended cinematic); 3-char words behind a centred subject need size + an outline so they peek. + +## Critical constraints (HyperFrames) + +- Timeline **paused**; registry key = `data-composition-id`. +- **No CSS keyframe animation** on caption elements — all motion is GSAP tweens at absolute times (seek-safe). +- No `Math.random` / `Date.now` / infinite repeats. +- `display:inline-block` on every `.w` and the climax `span`. +- **Hard-hide** each flow group at its end time; **CLIMAX_OUT ends at `opacity:0`** (or fully-clipped) so nothing lingers. +- Gradient / `background-clip:text` / stroke fills go on `.climax span`, not the transformed `.climax`. +- `.climax` `line-height ≥ 1.15`; pad clip-reveal entrances with negative insets for script/decorative fonts. + +## Pairs with HF skills + +- `hyperframes-media` — `remove-background` (the matte) + `transcribe` (word timings). +- `hyperframes-captions` — transcript consumption, grouping, positioning, exit guarantees, `fitTextFontSize`. +- `hyperframes-animation/rules/asr-keyword-glow.md` — the verbatim active-word envelope. +- `hyperframes-gsap` — single paused timeline, transform aliases, ease palette. +- `_motion.md` (this folder) — the named flow/climax entrance + exit recipes. diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/_motion.md b/plugins/hyperframes/skills/embedded-captions/modes/standard/_motion.md new file mode 100644 index 000000000..cc9eeab10 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/standard/_motion.md @@ -0,0 +1,192 @@ +--- +name: caption-template-motion +description: The named flow + climax entrance/exit recipes (GSAP, seek-safe) that the per-template files reference, plus the motion numerics (ease palette, exit=75% entry, climax dwell, restraint, mood→motion). Every template picks a FLOW_IN/OUT and a CLIMAX_IN/OUT from here — look up only the 2-3 recipes a template names (grep the `### name`), this is a catalog, not a read-through. +metadata: + tags: gsap, easing, entrance, exit, timing, restraint, mood-matching, captions +--- + +# Caption Template — Motion Language + +`_anatomy.md` wires four hooks onto one paused timeline: `FLOW_IN`, `FLOW_OUT`, `CLIMAX_IN`, `CLIMAX_OUT`. This file is the catalog each template picks from. Each recipe is a GSAP tween on the climax `span` (or a flow `.w`); placed at an absolute time it is fully **seek-safe**. Multi-stage looks use GSAP `keyframes:{}` (still seek-safe) — never CSS keyframes. + +## Numerics (shared) + +**Ease palette** (sanctioned — reads clean on video, stays distinct): + +| Curve | GSAP | Use | +| --------------- | --------------------------------------- | --------------------------------------------------- | +| overshoot entry | `back.out(1.4–1.7)` | confident arrivals (premium/epic/creator) | +| heavy/refined | `power3.out` | hero/secondary entrances, slides | +| general | `power2.out` | fades, scales | +| exit accel | `power2.in` | the _exit_ side of any move (departure accelerates) | +| snappy | `expo.out` | warp/fly/sonic confident snaps | +| breathing | `sine.inOut` | gentle wellness drift | +| impact thud | `back.out(1.5–2)` or a quick `expo.out` | slam/stomp/stamp landings | +| linear driver | `none` | the asr active-word envelope driver only | +| digital stutter | `steps(n)` | glitch/vhs/blink/possess/cut | + +**Forbidden:** `bounce.out`, `elastic.out` everywhere **except** the Playful cluster (explicit playfulness — KIDS drop-bounce, CANDY jelly). Elsewhere real objects decelerate; they don't bounce. Use low `back.out` for sanctioned overshoot. + +**Durations** — flow word enter 0.30–0.50 s · climax entrance 0.6–1.6 s · **exit ≈ 75 % of entry** (arrival deliberate, departure swift) · stagger 50–150 ms / word. + +**Restraint (the rule that makes it premium):** the FLOW stays clean — a tasteful reveal + the active-word accent, no effects. The big mood move + any scene effect (flash, shockwave, shake) happens **only at the CLIMAX**, then clears. Never sprinkle effects across the flow. + +**Climax dwell ≥ 1 s** after the entrance finishes — the climax is the headline beat. + +**Mood → motion** (pick an entrance whose physics match the theme): + +| Mood | Entrances | +| ------------------------------- | ---------------------------------------------------- | +| premium | deblur · rise · expose · breathe · flip | +| epic | slam · monument · fly · grandrise | +| cyber | glitch · type · scan · boot | +| horror | loom · possess · glimpse · seep (never bouncy/clean) | +| luxury | tracking-expand · hairrise | +| retro | vhs · stamp · blink · type | +| neon | ignite · buzz | +| hype | stomp · punch · slap | +| playful | jelly · dropb · scrawl · popr | +| creator | boxpop · slideup · flip · shimmer | +| ultra (flash in the type) | volt · hyper · liquid · prism · shatter · extrude | +| atelier (design) | editwipe · rise · block · vert · ink · weight | +| impact (scene effect at climax) | nuke · meteor · sonic · seismic · judge | + +--- + +## FLOW entrances / exits (per word `.w`) + +The flow caption reveals word-by-word from the transcript. The active word gets `.act` (→ `--cacc`). Exit hard-hides the group. + +- **fade-up** (premium/atelier default) — `fromTo(w,{opacity:0,y:14},{opacity:1,y:0,duration:.42,ease:'power3.out'})` +- **pop** (epic/hype) — `fromTo(w,{opacity:0,scale:.5},{opacity:1,scale:1,duration:.34,ease:'back.out(1.6)'})` +- **whip** (kinetic) — `fromTo(w,{opacity:0,x:-30,filter:'blur(10px)'},{opacity:1,x:0,filter:'blur(0)',duration:.32,ease:'expo.out'})` +- **glitch** (cyber) — `fromTo(w,{opacity:0,clipPath:'inset(45% 0 45% 0)'},{opacity:1,clipPath:'inset(0)',duration:.4,ease:'steps(6)'})` +- **type** (terminal/retro) — `fromTo(w,{opacity:0},{opacity:1,duration:.2,ease:'steps(3)'})` staggered as the cadence +- **blur-in** (horror) — `fromTo(w,{opacity:0,filter:'blur(10px)',y:'.1em'},{opacity:1,filter:'blur(0)',y:0,duration:.6,ease:'power2.out'})` +- **karaoke** (creator) — words start visible-dim; on `w.start` `set(w,{className:'w act'})` (active → `--cacc`), prior word back to spoken. The signature verbatim mechanic. +- **flow exits** — fade-up-out `to{opacity:0,y:-10}` · horror smear `to{opacity:0,x:6,skewX:10,filter:'blur(5px)'}` · all ≈0.4–0.55 s. + +--- + +## CLIMAX entrances + +Each is a `gsap.fromTo(span, {from}, {to, duration, ease})`. Where a `keyframes:{}` is shown, pass it as the 2nd arg's `keyframes`. + +### premium + +- **deblur** — `{opacity:0,scale:.96,filter:'blur(8px)'}→{opacity:1,scale:1,filter:'blur(0)',duration:.8,ease:'power3.out'}` +- **rise** — `{opacity:0,yPercent:48}→{opacity:1,yPercent:0,duration:.9,ease:'power3.out'}` +- **expose** — `{opacity:0,filter:'brightness(3.2) blur(5px)',scale:1.05}→{opacity:1,filter:'brightness(1) blur(0)',scale:1,duration:1,ease:'power2.out'}` +- **breathe** — `{opacity:0,scale:1.09,filter:'blur(8px)'}→{opacity:1,scale:1,filter:'blur(0)',duration:1.2,ease:'sine.out'}` +- **flip** — `{opacity:0,rotationX:93,transformPerspective:720}→{opacity:1,rotationX:0,duration:.9,ease:'power3.out'}` + +### epic + +- **slam** — `{opacity:0,scale:1.6,filter:'blur(12px)'}→{opacity:1,scale:1,filter:'blur(0)',duration:.7,ease:'back.out(1.6)'}` (lands with a thud; overshoot ~1.03 mid) +- **monument** — `{opacity:0,scale:1.42,letterSpacing:'.12em'}→{opacity:1,scale:1,letterSpacing:'0',duration:1.3,ease:'power3.out'}` +- **fly** — `{opacity:0,scale:.3,filter:'blur(14px)'}→{opacity:1,scale:1,filter:'blur(0)',duration:.8,ease:'expo.out'}` +- **grandrise** — `{opacity:0,yPercent:66,scale:1.05}→{opacity:1,yPercent:0,scale:1,duration:1.15,ease:'power3.out'}` + +### cyber + +- **glitch** — `{opacity:0}→{opacity:1,duration:.6,ease:'steps(8)',keyframes:{clipPath:['inset(40% 0 40% 0)','inset(0)','inset(60% 0 10% 0)','inset(0)'],x:[-8,5,-2,0],textShadow:['4px 0 #ff003c,-4px 0 #00ffd1','none']}}` +- **type** — `{opacity:1,clipPath:'inset(0 100% 0 0)'}→{clipPath:'inset(0 0 0 0)',duration:.85,ease:'steps(13)'}` (typewriter L→R) +- **scan** — `{opacity:0,scaleY:.02,filter:'brightness(2.4)'}→{opacity:1,scaleY:1,filter:'brightness(1)',duration:.75,ease:'power3.out'}` +- **boot** — `{opacity:0,scaleY:.1}→{opacity:1,scaleY:1,duration:1,ease:'steps(1)',keyframes:{opacity:[0,.6,.1,.85,.2,1]}}` (hologram power-up flicker) + +### horror (never bouncy, never clean) + +- **loom** — `{opacity:0,scale:.6,filter:'blur(17px)'}→{opacity:1,scale:1,filter:'blur(0)',duration:1.6,ease:'power2.in',keyframes:{scale:[.6,.93,1.07,1]}}` (slowly approaches out of the dark, then a lurch closer) +- **possess** — `{opacity:0}→{opacity:1,duration:1.15,ease:'steps(1)',keyframes:{x:[0,-5,6,-4,5,-2,0],skewX:[0,9,-10,7,-5,3,0],textShadow:['none','4px 0 #c00,-4px 0 #0aa','-6px 0 #c00,6px 0 #0aa','none']}}` (materialise then violent demonic shudder) +- **glimpse** — `{opacity:0}→{opacity:1,duration:1.35,ease:'steps(1)',keyframes:{opacity:[0,1,0,0,1,0,0,1,.05,1,.15,1],x:[0,0,0,3,0,-2,0]}}` (subliminal failing-light flicker) +- **seep** — `{opacity:0,clipPath:'inset(-15% -8% 100% -8%)',filter:'blur(4px)'}→{opacity:1,clipPath:'inset(-15% -8% -15% -8%)',filter:'blur(0)',duration:1.35,ease:'power1.inOut'}` (blood seeps down into the word; negative insets so script tops aren't clipped) + +### luxury + +- **tracking** — `{opacity:0,letterSpacing:'-.05em'}→{opacity:1,letterSpacing:'.28em',duration:1.4,ease:'power3.out'}` (the most "expensive" move) +- **hairrise** — `{opacity:0,yPercent:32,letterSpacing:'.07em'}→{opacity:1,yPercent:0,letterSpacing:'0',duration:1.1,ease:'power3.out'}` + +### retro + +- **vhs** — `{opacity:0}→{opacity:1,duration:.8,ease:'steps(1)',keyframes:{x:[0,-7,6,-3,2,0],textShadow:['none','3px 0 #ff3b5c,-3px 0 #3aa0ff','none']}}` (tracking-lock jitter + chroma) +- **stamp** — `{opacity:0,scale:1.7,rotation:-5}→{opacity:1,scale:1,rotation:0,duration:.7,ease:'back.out(2)'}` (printing-stamp thud) +- **blink** — `{opacity:0}→{opacity:1,duration:.75,ease:'steps(1)',keyframes:{opacity:[0,0,1,0,1,0,1,1]}}` (8-bit blink-in) + +### neon + +- **ignite** — `{opacity:0}→{opacity:1,duration:1.3,ease:'steps(1)',keyframes:{opacity:[.2,1,.2,1,.3,1,1]}}` (tube strikes + buzzes alight; glow is a style `text-shadow`) +- **buzz** — `{opacity:0}→{opacity:1,duration:1.2,ease:'steps(1)',keyframes:{opacity:[0,.7,.1,.85,.2,1,.5,1]}}` (slower warm-up rhythm) + +### hype + +- **stomp** — `{opacity:0,scale:1.5,filter:'blur(8px)'}→{opacity:1,scale:1,filter:'blur(0)',duration:.9,ease:'back.out(1.6)'}` +- **punch** — `{opacity:0,xPercent:-55,scale:1.1,filter:'blur(9px)'}→{opacity:1,xPercent:0,scale:1,filter:'blur(0)',duration:.6,ease:'expo.out'}` (whip from the side) +- **slap** — `{opacity:0,rotation:12,scale:1.5,filter:'blur(7px)'}→{opacity:1,rotation:0,scale:1,filter:'blur(0)',duration:.7,ease:'back.out(2)'}` (sticker/tag slap) + +### playful (bounce allowed here) + +- **jelly** — `{opacity:0,scale:.5}→{opacity:1,scale:1,duration:.8,ease:'back.out(2.2)',keyframes:{scale:[.5,1.12,.92,1.04,1],skewX:[0,0,6,-4,0]}}` +- **dropb** — `{opacity:0,yPercent:-85}→{opacity:1,yPercent:0,duration:.95,ease:'power2.out',keyframes:{yPercent:[-85,0,-22,0,-8,0]}}` (drop + multi-bounce). **❗opacity must reach 1 and stay** — declare it at the end of the keyframes. +- **scrawl** — `{opacity:0,clipPath:'inset(-12% 100% -12% 0)',rotation:-3}→{opacity:1,clipPath:'inset(-12% 0 -12% 0)',rotation:0,duration:.8,ease:'power2.out'}` (handwritten write-on, for script faces) +- **popr** — `{opacity:0,scale:.4,rotation:8}→{opacity:1,scale:1,rotation:0,duration:.6,ease:'back.out(2)'}` + +### creator + +- **boxpop** — `{opacity:0,scale:.5}→{opacity:1,scale:1,duration:.5,ease:'back.out(1.8)'}` (the active flow word's highlight box is a style) +- **slideup** — `{opacity:0,yPercent:44}→{opacity:1,yPercent:0,duration:.55,ease:'power3.out'}` +- **flip** — see premium +- **shimmer** — `{opacity:0,scale:.7,filter:'brightness(2.2)'}→{opacity:1,scale:1,filter:'brightness(1)',duration:.75,ease:'power2.out'}` + +### ultra (the flash lives in the type) + +- **volt** — `{opacity:0}→{opacity:1,duration:1.1,ease:'steps(1)',keyframes:{opacity:[0,1,.12,1,.35,1],x:[0,0,0,2,-2,0]}}` then settle to glow `text-shadow:0 0 8px #fff,0 0 22px #43f4ff,0 0 48px #1e90ff` (electric strike) +- **hyper** — `{opacity:0,scale:.05,filter:'blur(3px) brightness(3)'}→{opacity:1,scale:1,filter:'blur(0) brightness(1)',duration:.9,ease:'expo.out'}` (warp from depth) +- **liquid** — `{opacity:0,scale:.9,yPercent:6,filter:'blur(10px)'}→{opacity:1,scale:1,yPercent:0,filter:'blur(0)',duration:1,ease:'power2.out'}` + the `.climax` _container_ carries SVG `filter:url(#liquid)`; in HF drive `feDisplacementMap@scale` from the timeline (don't use SMIL — not seek-safe) +- **prism** — `{opacity:0,textShadow:'-38px 0 #ff003c,38px 0 #00ffd1',filter:'blur(5px)',scale:1.08}→{opacity:1,textShadow:'-3px 0 #ff003c,3px 0 #00ffd1',filter:'blur(0)',scale:1,duration:1,ease:'power3.out'}` (chromatic dispersion converge) +- **shatter** — `{opacity:0,scale:1.9,rotation:-3,filter:'blur(14px)'}→{opacity:1,scale:1,rotation:0,filter:'blur(0)',duration:1,ease:'back.out(1.4)',keyframes:{scale:[1.9,.9,1.06,.98,1]}}` (+ a 1-frame white `text-shadow` flash on landing) +- **extrude** — `{opacity:0,rotationY:42,scale:.9,transformPerspective:700}→{opacity:1,rotationY:-9,scale:1,duration:.9,ease:'power3.out'}` (3D turn; depth via stacked `text-shadow` in the style) + +### atelier (design-forward) + +- **editwipe** — `{opacity:1,clipPath:'inset(-15% 100% -15% 0)'}→{clipPath:'inset(-15% -4% -15% 0)',duration:.7,ease:'power4.inOut'}` (Swiss precise wipe; negative top/bottom so glyph tops aren't clipped) +- **rise** — see premium (slower, `duration:.9`) +- **block** — `{opacity:0,scaleY:0,transformOrigin:'bottom center'}→{opacity:1,scaleY:1,duration:.7,ease:'power3.out'}` (constructed/Bauhaus) +- **vert** — `{opacity:0,clipPath:'inset(0 0 100% 0)'}→{opacity:1,clipPath:'inset(0 0 0 0)',duration:.9,ease:'power2.out'}` (vertical ink-drop; `writing-mode:vertical-rl` is a style, climax sits at `left:81%`) +- **ink** — `{opacity:0,clipPath:'inset(-28% 100% -28% -4%)',filter:'blur(3px)'}→{opacity:1,clipPath:'inset(-28% -8% -28% -4%)',filter:'blur(0)',duration:.9,ease:'power2.out'}` (brush write-on; generous negative insets for the script face) +- **weight** — `{opacity:0,fontVariationSettings:"'wght' 100",letterSpacing:'.18em'}→{opacity:1,fontVariationSettings:"'wght' 900",letterSpacing:'0',duration:1,ease:'power2.out'}` (variable-font morph; needs a variable face, e.g. Inter `wght@100..900`) + +### impact (the ONE sanctioned scene effect, at the climax only) + +Each pairs the type move with a scene element (`
` / `
`) and/or a stage shake. Keep it to the climax beat. + +- **nuke** — type: `{opacity:0,scale:.3,filter:'brightness(8) blur(10px)'}→{opacity:1,scale:1,filter:'brightness(1) blur(0)',duration:1,ease:'expo.out'}` + white `.flash` `to{opacity:0}` over 0.3 s + brief stage `x` shake +- **meteor** — `{opacity:0,yPercent:-45,scale:1.12,filter:'blur(12px) brightness(2.2)'}→{opacity:1,yPercent:0,scale:1,filter:'blur(0)',duration:1,ease:'power4.in'}` (accelerate DOWN) + on-land stage shake +- **sonic** — `{opacity:0,scale:1.4,filter:'blur(8px)'}→{opacity:1,scale:1,filter:'blur(0)',duration:.9,ease:'expo.out'}` + a `.ring` scaling `0→3` opacity `1→0` +- **seismic** — `{opacity:0,scale:1.1}→{opacity:1,scale:1,duration:.9,ease:'power3.out'}` + stage `x`/`y` quake `keyframes:[3,-3,2,-2,0]` decaying +- **judge** — `{opacity:0,yPercent:-45,scale:1.12,filter:'blur(12px) brightness(2.2)'}→{opacity:1,yPercent:0,scale:1,filter:'blur(0)',duration:1,ease:'power3.out'}` (descends from above) + light-shaft `.flash` + +--- + +## CLIMAX exits + +Default is **fade** unless a template names another. **Every exit ends at `opacity:0`** (or fully-clipped) so nothing lingers — declare opacity:0 at the end even on transform/clip exits. + +- **fade** — `to{opacity:0,scale:1.03,duration:.6,ease:'power2.in'}` (premium/epic/most defaults) +- **rise-off** — `to{opacity:0,yPercent:-42,duration:.6}` · **sink** — `to{opacity:0,yPercent:16,scale:.97}` · **lift** — `to{opacity:0,yPercent:-26,letterSpacing:'.1em'}` +- **expose-off** — `to{opacity:0,filter:'brightness(3.6) blur(4px)'}` · **breathe-off** — `to{opacity:0,scale:1.08,filter:'blur(7px)'}` +- **flip-off** — `to{opacity:0,rotationX:-90}` · **fly-off** — `to{opacity:0,scale:2.5,filter:'blur(13px)'}` +- **untype** — `to{clipPath:'inset(-15% 100% -15% 0)',opacity:0,ease:'steps(11)'}` (backspace) · **scan-collapse** — `to{opacity:0,scaleY:.02}` · **power-off** — `keyframes:{opacity:[1,.3,1,.1,.5,0]}` + scaleY collapse +- **drag** (horror) — `to{opacity:0,xPercent:-40,skewX:-20,filter:'blur(11px)',duration:.55,ease:'power2.in'}` (dragged away) +- **snap** (horror) — `keyframes:{x:[0,7,-6,0],skewX:[0,-13,0],scale:[1,1.1,1.16,1.32],opacity:[1,1,1,0],textShadow:['none','8px 0 #c00,-8px 0 #0aa','none','none']}` (violent jerk then gone) +- **cut** (horror) — `keyframes:{opacity:[1,0,1,0,.8,0]},ease:'steps(1)'` (frame-drop) · **bleed** — `to{opacity:0,yPercent:50,scale:.97,filter:'blur(6px)'}` (drips down) +- **knock** — `to{opacity:0,xPercent:55,filter:'blur(9px)'}` · **peel** — `to{opacity:0,rotation:14,xPercent:42,scale:.9}` · **spin-out** — `to{opacity:0,rotation:180,scale:.3}` +- **hop** — `keyframes:{yPercent:[0,-26,120],opacity:[1,1,0]},scaleY:.7` · **popout** — `to{opacity:0,scale:.3,rotation:-10}` · **slidedown** — `to{opacity:0,yPercent:42}` · **scrawl-off** — `to{opacity:0,yPercent:-14,rotation:2}` +- **vhs-out** — `keyframes:{x:[0,-9,8,0],opacity:[1,1,0]},scaleY:.2` (tracking-lost roll) · **blink-out** — `keyframes:{opacity:[1,0,1,0,1,0,0]},ease:'steps(1)'` · **power-down** — `keyframes:{opacity:[1,.2,.7,.1,0]},ease:'steps(2)'` · **lift2** — `to{opacity:0,scale:1.12,filter:'blur(3px)'}` (stamp lift) · **shim-out** — `to{opacity:0,scale:.8,filter:'brightness(1.9)'}` +- **iris-close** — `to{opacity:0,clipPath:'circle(0% at 50% 46%)'}` (Bond) · **un-shine** — `to{opacity:0,clipPath:'inset(0 0 0 100%)',filter:'brightness(1.7)'}` · **sweep-off** — `to{opacity:1,clipPath:'inset(0 100% 0 0)'}` +- ultra family exits: **glitch-out**, **neon-out**, **hyper-out** `to{opacity:0,scale:2.6,filter:'blur(13px)'}`, **liquid-out** `to{opacity:0,yPercent:40,scale:.96,filter:'blur(9px)'}`, **prism-out** (channels split apart), **shatter-out** `to{opacity:0,scale:1.45,filter:'blur(9px)',textShadow:'7px 0 #ff003c,-7px 0 #00ffd1'}` + +## Pairs with HF skills + +- `hyperframes-gsap` — single paused timeline, transform aliases, ease list, the animated-property allowlist. +- `_anatomy.md` — where these four hooks attach. +- `hyperframes-animation/rules/asr-keyword-glow.md` — the verbatim active-word envelope for the flow. diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs new file mode 100644 index 000000000..5d5db2486 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs @@ -0,0 +1,97 @@ +#!/usr/bin/env node +/* + * build-fonts-css.cjs — bundle the template fonts into ONE self-contained + * fonts.css with base64 data-URI @font-face (no sub-resources, no CDN, no + * system-font dependency). This is what makes Standard/Cinematic renders + * deterministic on ANY machine: hyperframes' renderer only auto-supplies its + * ~18 CANONICAL_FONTS; every other family falls back to a generic font unless + * the HTML ships a local @font-face. (hyperframes' own font linter says exactly + * this: "Use local @font-face declarations with captured .woff2 files.") + * + * Source woff2 live in ./files/-latin--normal.woff2 (latin subset + * from @fontsource via jsdelivr). Re-run after adding/removing a font: + * node build-fonts-css.cjs + */ +const fs = require("fs"); +const path = require("path"); + +const FILES = path.join(__dirname, "files"); +const OUT = path.join(__dirname, "fonts.css"); + +// slug → exact CSS family name (must match what templates declare in font-family). +const FAMILY = { + anton: "Anton", + audiowide: "Audiowide", + inter: "Inter", + "baloo-2": "Baloo 2", + bangers: "Bangers", + "bodoni-moda": "Bodoni Moda", + caveat: "Caveat", + cinzel: "Cinzel", + "cormorant-garamond": "Cormorant Garamond", + creepster: "Creepster", + fredoka: "Fredoka", + monoton: "Monoton", + orbitron: "Orbitron", + "permanent-marker": "Permanent Marker", + "press-start-2p": "Press Start 2P", + "saira-stencil-one": "Saira Stencil One", + "shippori-mincho": "Shippori Mincho", + rajdhani: "Rajdhani", + "chakra-petch": "Chakra Petch", + sora: "Sora", + "space-grotesk": "Space Grotesk", + "special-elite": "Special Elite", + teko: "Teko", + vt323: "VT323", +}; + +const files = fs + .readdirSync(FILES) + .filter((f) => f.endsWith(".woff2")) + .sort(); +const faces = []; +let raw = 0; +const seenFamilies = new Set(); +for (const f of files) { + const m = f.match(/^(.*)-latin-(\d+)-(normal|italic)\.woff2$/); + if (!m) { + console.error(`[fonts] skip unrecognized filename: ${f}`); + continue; + } + const slug = m[1], + weight = m[2], + style = m[3]; + const family = FAMILY[slug]; + if (!family) { + console.error(`[fonts] no family mapping for slug "${slug}" (${f}) — add it to FAMILY`); + process.exit(1); + } + const buf = fs.readFileSync(path.join(FILES, f)); + raw += buf.length; + seenFamilies.add(family); + faces.push( + `@font-face {\n` + + ` font-family: '${family}';\n` + + ` font-style: ${style};\n` + + ` font-weight: ${weight};\n` + + ` font-display: block;\n` + // block (not swap): render text only once the real face is ready — measure-layout + capture see the true glyphs, never a fallback flash + ` src: url(data:font/woff2;base64,${buf.toString("base64")}) format('woff2');\n` + + `}`, + ); +} + +const header = + `/* AUTO-GENERATED by build-fonts-css.cjs — do not edit by hand.\n` + + ` ${faces.length} faces / ${seenFamilies.size} families, ${Math.round(raw / 1024)}KB raw woff2 (latin subset, base64-inlined).\n` + + ` Families: ${[...seenFamilies].sort().join(", ")}.\n` + + ` These are the template fonts NOT in hyperframes' auto-resolved set; inlining\n` + + ` them makes every render deterministic regardless of installed system fonts. */\n`; + +fs.writeFileSync(OUT, header + "\n" + faces.join("\n\n") + "\n"); +const outKb = Math.round(fs.statSync(OUT).size / 1024); +console.log(`[fonts] wrote ${OUT}`); +console.log( + `[fonts] ${faces.length} faces, ${seenFamilies.size} families, ${outKb}KB css (${Math.round(raw / 1024)}KB raw)`, +); +console.log(`[fonts] families: ${[...seenFamilies].sort().join(", ")}`); diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/anton-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/anton-latin-400-normal.woff2 new file mode 100644 index 000000000..69d48b9af Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/anton-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/audiowide-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/audiowide-latin-400-normal.woff2 new file mode 100644 index 000000000..adde2d444 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/audiowide-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-400-normal.woff2 new file mode 100644 index 000000000..f18bf709c Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-700-normal.woff2 new file mode 100644 index 000000000..ceb751aec Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/baloo-2-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bangers-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bangers-latin-400-normal.woff2 new file mode 100644 index 000000000..76d707cad Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bangers-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-400-normal.woff2 new file mode 100644 index 000000000..9750b0e12 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-700-normal.woff2 new file mode 100644 index 000000000..dbbfde5cb Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/bodoni-moda-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-400-normal.woff2 new file mode 100644 index 000000000..fb050a64b Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-700-normal.woff2 new file mode 100644 index 000000000..e8b6ac711 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/caveat-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-500-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-500-normal.woff2 new file mode 100644 index 000000000..ff498549e Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-500-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-700-normal.woff2 new file mode 100644 index 000000000..de88f23d8 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/chakra-petch-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-400-normal.woff2 new file mode 100644 index 000000000..94cbeacff Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-700-normal.woff2 new file mode 100644 index 000000000..a13fb080f Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cinzel-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-400-normal.woff2 new file mode 100644 index 000000000..096df0a93 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-700-normal.woff2 new file mode 100644 index 000000000..a0fd9f62b Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/cormorant-garamond-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/creepster-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/creepster-latin-400-normal.woff2 new file mode 100644 index 000000000..e3df072b6 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/creepster-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-400-normal.woff2 new file mode 100644 index 000000000..8d91972d5 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-700-normal.woff2 new file mode 100644 index 000000000..47139ea52 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/fredoka-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-400-normal.woff2 new file mode 100644 index 000000000..f15b025d6 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-italic.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-italic.woff2 new file mode 100644 index 000000000..f4f25da53 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-italic.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-normal.woff2 new file mode 100644 index 000000000..54f0a595d Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-500-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-italic.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-italic.woff2 new file mode 100644 index 000000000..e882c7825 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-italic.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-normal.woff2 new file mode 100644 index 000000000..d1897949f Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-600-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-700-normal.woff2 new file mode 100644 index 000000000..a68fb101c Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-800-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-800-normal.woff2 new file mode 100644 index 000000000..74a16d459 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-800-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-900-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-900-normal.woff2 new file mode 100644 index 000000000..4db8333ca Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/inter-latin-900-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/monoton-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/monoton-latin-400-normal.woff2 new file mode 100644 index 000000000..74508012d Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/monoton-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-400-normal.woff2 new file mode 100644 index 000000000..1e9f626b9 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-700-normal.woff2 new file mode 100644 index 000000000..46db8ddaa Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/orbitron-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/permanent-marker-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/permanent-marker-latin-400-normal.woff2 new file mode 100644 index 000000000..203ccaeb9 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/permanent-marker-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/press-start-2p-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/press-start-2p-latin-400-normal.woff2 new file mode 100644 index 000000000..947a9792d Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/press-start-2p-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-500-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-500-normal.woff2 new file mode 100644 index 000000000..50dd0c06f Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-500-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-700-normal.woff2 new file mode 100644 index 000000000..057c632a6 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/rajdhani-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/saira-stencil-one-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/saira-stencil-one-latin-400-normal.woff2 new file mode 100644 index 000000000..e5b159c1a Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/saira-stencil-one-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-400-normal.woff2 new file mode 100644 index 000000000..8d4a5c552 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-700-normal.woff2 new file mode 100644 index 000000000..b13131323 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/shippori-mincho-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/sora-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/sora-latin-400-normal.woff2 new file mode 100644 index 000000000..99ede34a1 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/sora-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/sora-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/sora-latin-700-normal.woff2 new file mode 100644 index 000000000..930c60fde Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/sora-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-400-normal.woff2 new file mode 100644 index 000000000..0e6347113 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-700-normal.woff2 new file mode 100644 index 000000000..44604a0bd Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/space-grotesk-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/special-elite-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/special-elite-latin-400-normal.woff2 new file mode 100644 index 000000000..569a27e17 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/special-elite-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/teko-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/teko-latin-400-normal.woff2 new file mode 100644 index 000000000..a4317fd08 Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/teko-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/teko-latin-700-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/teko-latin-700-normal.woff2 new file mode 100644 index 000000000..2f4e44cea Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/teko-latin-700-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/vt323-latin-400-normal.woff2 b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/vt323-latin-400-normal.woff2 new file mode 100644 index 000000000..fd760b5ba Binary files /dev/null and b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/files/vt323-latin-400-normal.woff2 differ diff --git a/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/fonts.css b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/fonts.css new file mode 100644 index 000000000..1afb126b5 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/modes/standard/fonts/fonts.css @@ -0,0 +1,401 @@ +/* AUTO-GENERATED by build-fonts-css.cjs — do not edit by hand. + 44 faces / 24 families, 875KB raw woff2 (latin subset, base64-inlined). + Families: Anton, Audiowide, Baloo 2, Bangers, Bodoni Moda, Caveat, Chakra Petch, Cinzel, Cormorant Garamond, Creepster, Fredoka, Inter, Monoton, Orbitron, Permanent Marker, Press Start 2P, Rajdhani, Saira Stencil One, Shippori Mincho, Sora, Space Grotesk, Special Elite, Teko, VT323. + These are the template fonts NOT in hyperframes' auto-resolved set; inlining + them makes every render deterministic regardless of installed system fonts. */ + +@font-face { + font-family: "Anton"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Audiowide"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Baloo 2"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Baloo 2"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,d09GMgABAAAAAEvsABAAAAAAr+gAAEuKAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGl4b+0gcjQoGYD9TVEFUKgCCMBEICoGzLIGMXAuEPgABNgIkA4h4BCAFg2IHixYMBxs+mSXsmIWA8wCg7PR+jyhq4WRVdzbCgo0DgIh+A9n/n5GgxhgCtnvIaVprMVISyFDp7KelJfYdlfMyVtmucfaJy1VWJZfGLA+Ow+cBGWtth6HT3eky7o+NQGESQggjUg6iSasQQUcEGxMOA/zPrt681A6f8lrtmS6bJm23V4Rx1Ny55N76L8NlC8ETK/63LwIblzGSldO9PjzN6fsnuVzcuMTxEMSCaFKKjbE2rdM63joVEybqlFXcJqJd/H/XejfJe0nmTmYzu/sWKAX6wKpAdDygMFVEthLweJKt8dWMPP3/GP/bM/eLNdS6uyYWleqhQhSPRJNIaETeGeDn1j8lavm2t4hisA3YYGORxDY2YAyplgwTTCKHYhSnWPdFr427byR2XVp3XniR3k3fb5pj+pAvoSmhxuxfIYJHDCKGRSCzogJ+xytEDKvgET3caw4VhxwuO99+tb18FUtUS0S883idECn1tnJ11b/afJ0vtuIjJQIpTamxEid7Tml7peIn7AmGwsjzmtjg9wlVcOLcswU8FhGplPdSy11F1VOUqakKqBr6NAVv0aVjxjyfE34lP+IxpywOOnObO+/deiN5ZanBv7QxU0zuYw7bEtS7tJm786mkVsf/rLsHpC4osL2ZyFBcwmW6ItwSgW0T3GypBY5gYt1f4L+d+hmG8XBxoqRb1neoS6V3UQpMBcAJkA4+cajIw2Kt0mp4KhtKAFPaAsR1g7G9jUauTM3SaSz3hIMcV5Z6S/wJsia3jm9caIMcOzPAYnd2QHAXpIhdgiJwFgTp5XByWOzqfgHinJH3bw1IOXfmrXGZsv+v/OvTDxIF4X2mLLz6VNHbOH4evl/6Je1TvaqVnDLcB+2sMiCRACPYaUa+er83aRy0PdqI3g81/pvluCljZxaZAdWGiBwywQbUKENmTgwNILeZb/NZydhAm147GTVVTXCN4r7r+jp2+/r3G6VjFw/1MHefykGmwaYSBpFgg3jXry5v0T+Svm/3+g/3PY2qUTWeeCIiosYeY/O/3OtapIoORx5ytP9DlG7NInqp0XdtKiy2ASCAKEAGUGBlLR+OjwmFuOAKgCIhQvoTSLojuFtoRTBWuhSFdsCRLJ12Rh4i2esGSIQ1Ys49v7YZvnvHzwwBFkEtox5tmd4J320SP3/KtwsT1D9T4AGgeOS+qZ1QAAgUmoonRu/3b/QQZIgPGyBG7X4lGDDeqdchRxAAACCLjmF2FB27voaNeyBI0FeMUWdK+RtYU+LUvWVAL94sfwuvCOX2yTgPwqGvuJ0xoSCUuOnFW9EmA4j+OitGQN+MX+FlKejK/5vY1osAbzbwljKMA3UAuDcGWxpWqpRVoyHBAQDUPLmy2mHTWR0byVDaWzVVBtdFs4f3guGxNhM17fBtjaPuxJ6anFIHTo+fQk5SmtR/gnhIw2VNl7A5sStaZmHZHvmuij6Y48Z0TzhtPJpRmqpBeiIdTjSpSL/9S+3r/d7apBrXfGfRNiXmmlhbH1CLU7yn2ASifKFFZN8PCuFvXcgz0nM9WHbNmpbRArHZ+ISr9dtSiJNgYKrDVAu4Jxxb22nt/4FuB3a2XkpkPxWGbZixph6Q1FjYQluQYKQn4VRSJK0tna2mfciYTFIZm4K0WYCxwoT6CKZyYrm6yA2GSu1b2nDP8N6tS753NQdzAbUHFHr90D3FddG2jRx1ts5YeeP7y7eSZwd7a4V50KhJFbc9fLeXLMMVGihKfakCwOtn/7ugfFh10P3Km0VJ016ZjaYqHH9DRgsInHE1Z9QtDCN6/HpfpCN1PXw4NLYlBsuqAIJNkTLOqdrTzbs0qZBriQVqJ4WHzYWDtCIJgvaqDLWmSFiEhLzA4eQMSgX9Gtm+yJluXqVPwK1+7TKt7/1zmXcVmvwo8U3fXQBMUGAtwf4MhrDAD/TCkWsyveJD9+dvAogEXGZI5HG4+Wik6lZrHs1+XW8HpQjAXksNZ4km22RLF67GXvbTehT/VeLUrmlzP8slJVkvnK1HErCwaVsPYVASC962OCtKtDGUWSCCGj4So9Qei+bxaO1dpweNefxBFSDLxkKr7q4Uj01Y9SGxBWNpJJOaOP95B23A0FlJ6eNFP/NgSScWIB5gzbkXM8lgWimSfuCNs5MEGdeJZbr/pWsqmGitL8dLWu+ocrpmOSfUbFdP+Dw3rFZ2zxE8CEb8X++/SWoYGxwlbtiy4LjqVLlqG18RWXzKyvd2UtqsMQ6MeEqplNLXozcnhtdzI5wLRzx/8nWpyF1bzMqGuenwtY8mq9bGjPNutEe1p/yVn55nu35g8cIxXDjDhGc+zWKeO0z1Lmfz6vAUwJ8toRWvixbG00rjoV5+T++c/HbExDV+zMzmi4JeGhCTdzCZ16o5LpcmuzYeQ71z5Oxrl2VBVZ0zpU8s2lBU3otJH3BYkl5L+KvnaNbCi1o9LbZV03Jbl56UUYjzgjQS6oZ/PVCJYJHUywYLSjp/Z6bQI0WDvxJP+CAhRSio0ewcOAIBz8NDwieJVJoglZAQrSx5dAoUMAsrZlGpml1UlKDGUE7DjRLSpl2O6WbIM888BRZao9BGG0Vs9pioJ72h2Vv6jbPTHlOcddYM510002VX9Ljlrrk+87mFvvSVxb7znaV+8BOWuYd7WClOGKyaiHDYMJ4osGmqoPVOG4yHEGwUcAGAdIAL4AHIeVcPhgUGgygvMNwoKZsABR/4OQUFGRURQLOtlFb0AM2Ip08MJTGBKfuXk3UynhpLwgEF7Cwt18W+aKIkaGtj5aY9H3P2Nrm2UxCRo4i4lLEDNiOieFcCIBE5gmUS/otE/ATbC0qV62CyFLguaxTIVZc8J6lgJzBV5OdtoGdhpmO8tJ2c4uDKZgK4byqwlRJXD5alFhaVQIFukJZMb2/op5FyEFvBbMF6YRnb7BFmEAZgMyo89q+VxCgd/+glVNQkLDhSHoCUSUD2QkRzWBkXdnPFdM9PnSM0HfrwEVECRLVl4qJzDjWieFeARyJKBIeNJCVeeFYcqraAkV4rbOQyGJIJpqxRoIz4+GS5APdW5OftYOckABIuIdgefBtGIopHApYdhB2hDG1/1pe/nIOcJwezCWTPSEh73d18WIHeigOkPtGUJ2CmvhDJ/GCvutq1rmubu8cPK1ZyPXgVb/JxZVzsGjbf/Ueb0GbxEREHQ6QReYGSo/KiRnqZ+nM0tAbLSDkdGMIEVjZ2Dk6u5QiyEFm0ZNmKVWspmhMTl5CUkpGVk1ew8fU4IMJBrAPBJK9jelLtlXCq2zXKvG3/dwGSZhNeT3UiUA1YXz+C8z+c8tGMcUTj0nnWGVVtRl0K6GlxeFmwjBCTY2bMbc+TxLNGPG+1ABholnEpvBp8HqxvBVAC+uoRjfaDt1zuY8dD4mUMk4RaDkt1rRKpAGiPxhiMmxAwaX1s1pWQriKHNzJrmUYmivFAOC+M21c30mvoaXSc/h9F+9p+1o6lzJBPW5tJEqKVUIb7CCeBNkKLoEX0NKgeG8DmYmEYJ0YAvgGPa7rBTDAFZKCvqDeDb1A65HfI95SjyjikBN4uT4i6EtUotUqxkVslayT1EmUkIjI44lU4IewNdy9sLuwTbpqb4pZw9yKVkcqwNI4XFhz6Zei90BlRJ7tVNMMG2Bo2k9WFCEIiQ4C6X5jtzDhTy+iCBUFXgghY2HIreFwrwAX4lDcfMf8v6hOl5POiGiX1t/KvIhEY4BvC5uYPU5J5ZzkMcBs9LVI5DVDNNP3rweOh/wmB+cYzoHEAnhRLzkFMkMQiVZBXSIlE5crlqjRKnrHGazbRRIO1aRPTrdsQU0011HQzDNOjxwhzzTXSAmuMstFG7TZ7TIcnvaHHW/qtttMevcwYbqwQiRCZai4h+cOUqlbLoY5DA4fBzEar9iqH1zi8zuENDrs4nOVwnsMdZnfl+ozZ53L9IORHISY5pxCAnQQnBRILjRQwx/Pb6IPaExfiIl1y4LKr+8VISp302TyJv/Dvg6EegF0gIJ2SIxwhFoWACSjfVq1Yf/FAASfCTcAJYUjehrJAFTPb+CT2N+CGItihHh5gcFM8ohdCU/KAMoVZGhAH3QUqaG+zjDpZiuC80U9oSLs80tYOEoaY7pUZnsXCI7x8/AKCwuk0dMZZ55YjjCgRE5eQlJKRlZNXsJF2gf1Trnak0G0VxxFiXcbqSJCWZanICtjYOTi5kifi5eMXEBT+XeuxaaAOTw6iwbXIpfqZYF/Ud1jAamFTdg5OrmuJrHrEI2KQazX4m9sZsCbB/u0ZyoSqQJ3opbkR6acFajGWaNmKVWvbWqCs4aF14Qnf1sEW+ByL7VrkSOKOIZIM7gjCKImsYFRhK2WkEQ+8w7HdlDCypgfnY24Jr+xtqhDP0rGQ1Ad1zZl77a1pLJE51iakyPVTedvomZYGhoDpeIl4GQOSkpZoi95TGpNHvPit0dmKfqWhpWMopsg0WNJs7IPwaHiFj19AUHg5wotSMXEJSSkZWTl5BRt27adSBE/OP68eGXFaUw90R4Rdr9H18E0BOjQ3aRc22HqU4Iz4mYfvFNA7UVQicwbFqiEPdblfIMQXAAX4OArJkydTQNARYOKBKM4LI02oC+7JiIjZ0tnm5SadENZiN3teuuxcUMcmOlzBCYR6FAKE0JK8RkfpTPuAGbebuVJ8ssA317hY7lLdrNyU5js2r6TUoSNh8aqYjVZejLLlECD8ANL61xOJ7D43m3+pUfhyV2KABFLjqGqiV2ME04IVDKCXm6mKdkQb0oipARNqTELJojcSdQKrMlMgBXN7DkVSgY6O9Ic3W+pTbLWgIe3hAWSQN2wywjTOmwhdO/TGwBimyC8/KZrCpomZKj4jCzGryx+UXHLCxs7ByVXc3gmhM6OyYGlRLFm2YtVailqIiUtILp8vuGBy0aWUspCRlZNXyOusPr+wiW3Btp20S+ynA5PLrqZryHU33HQrPSAe7hcDPtbks/my/I14rva6lIP8w/L/6neR3dXTw0AyzntZ2QqjL5swO2vLsAJqoNbOQAckb6IV3SWLhvhc/I2IjYDgt19hJonWQucjvaHb8HUCJHwSodapZRHe2eCoa62zraOhsJlfhZb+mEYua2PRtmAopmAaMTMQFiuzRdEpYhSXkJSSkZWTV7ARu4h9PDWF0uShwKTi7/HdkTytt4BDYhGNDFlIpRvMiFDaG/8guAvx2AAVnSJtcFDKPFkkR6efcJ6/AyC7EUdIgol0vn/73yft6VOYCHHL1nddo8/eF8ZFSOpREdDUsaVgKOaatdQ3o9IgEjA3XlM4CsXttrbEcoIRM+Zj22Bqq+iqu8u+GvRjGqFNg9S4idDV9GEwxpiS/WmDGYEF8Ymmr4kfijWwCTsHZ3ali20DPn4BwRKiwlqiWAziEpJSMrJy8gp5XUHvZJu2Yht5R0mGPEwSD+r8UE9IW5JnKM+jeG2lXL0K02GEXdXdsfNSOmE/H3TsQ0/kyT414axiOvs2xpgIA6lq59nWMHesAIoVVVenRmN/JyQ03b90vEhc1NqExKOFL9SGSRXkAmG7yagmdeki0WuNclyDw4Maw9g4MMGi4+jBwHhigqZs+hD5lLC6ZBN2Dk6uZbfKTZGXj19AsIS0wjIQVpIkSZIkjuO4yi0wxpjjOI7jtJ/ZxQFcdnWYW6sFgap2wWoxZgyyE3q6grjs/J1UYMFZfLXf/Wq1ulDRDV9aH8QAP+f9XVrufI3eVLLKmSFEqs0FZOIHPXMjNM7UMUBzhF4MoQxOEjRQq/jc4+9Ivnu9k+CkggY/L1E3mU2DAZi7gjDIp5PORux5/89vfNCCjMqTlw1cIJM4MyYzmCWWRSSzSh5gBdLIdn/zkXfd9etoiopVpl9xx/y5viVtx5n1cGi1ksahidC1Qm8MjGuTy7aavgn+eUShcNjNCEkWiEVYsmzFqrUU1YuJS0im88QFF11KKb2MrJy8QlmXbFg5IC7D1fRA8jCVEvgS33wQt4RQEe6gKKJsp06WvQCh3TTDwLpPNn4hfhUChGs7YMF0XhkwxM8aXzsEt43P2/s/qP2icpbXnUPxRrvjI+mknYJkNljoGA+vEck2XLIa2NyZ+kRE1fgIwu5dugcyzLHb/4Y7KzMRHrbzxMA5MuB8Beahb6zCQvUbwcxze+3bD1xC1pY2HKQzyI/00I8doVaDhy4Gmbj0Ib6yJ2//CRZIzPLB8jtfIyH19+gzzGB1ckNZzsTSb6IhrXETdPQMjIMu622YR8LiXVZGVMTEJSSlZGQjJ/IKNh5Gd7YNU5F6rKwyHppc53R3rdR1NSztnRY0wAPCSvVjA7Pnz6ffNn5plV/V/mZPsRfIo+EweN4mZQ3s8i6trb5FGubpEPVgqyJ2vk1sV43rNj4vKFmccTwlPmFbk2huocTYzYcxVs8nS4vJg3RAiCBynlgZNrJzcHIlD+Xl4xcQFP7RRpIuU0oxfcGV73YZy3siXBuEXYAY9oDo1hDhfDV6HSYbwcJdGRaRLnCoIdGNBzrxyofv+hP1Z/rvY+rBnc/HFy5/13mDHL6WECcIZUREJJ8opaAodHWYEqzSQ/8BCr/b/or0/WVXRWILOuVidbjpA4kJtwuF8R9YC1BQtnXKOSosh7yv60w4s/1P+oGBStC5FIB4VPvM7krjsM//OR7EgNX0EZR3JNQYOUoMI1cCURa6wa2eKOBdF33qnR3kzqWNar1TtKShNdgIIZBA0gVpLulx+KcWOpe4xLIpOwcn1+BUDw9mCzRTCCGEEEIIYaNSMrJy8gon68iGI6EXIsUEPob5rCwY4g+RN575m8A/Wf4ffZf5u1/40bEchwgpzEHyARe1zMgUFo+mJ6ZNY4OZECr4BmxGJEWtuSMEEWpIx3ARp7v+5MqfAaltBChCCCGEEELoOsJvv4iUiMfmyfM9r1YZqkAML63xwNPmHU797UauQA+64TU1DTyn3wqp6CK47mYlT25aCqr8Jl0FQ0Pa5cEMXZqhrxwtHlA4ss6q9JPOn32vm6dbFZeQlJKRlZNXsNHXiNVN8cQmJnwxHDpCgAjM2DLRAKV6X9k6oV5P64JMDGpq5zuIAK0PH5HMJxaLjpOYRMtAtER6E0Ia2Omgw7sTJbKdz1mLbGDn4OTi4eXjFxC8Zyhxu/jUSAghhBBCCCGEEEIaeOGl195575vf3/knPCrdPxM31pMgWaGrwWSwdOJSzWCH8PUMRlTISSigz4Hl+8+rUTaq8FQmq9DuLQgXi2fvQjlsKSAP2O6LNEEroPW0u9BaKaI7R28/+luhIS0dQ4QQC7BoybIVq9ZSFImJS0hKycjKySsMZPlUUoOm5iramyOcIBjpN1NsNLrlVOHAw+kHYRB15GjRMjXwBLsmzOUKraf3iz7wdZTEk2vKkVQWu6p7460F71ML6DEmbgGJfAebmXHGlYZKqXsJPyyPNvkuc09L3k9EyM+x/JnnW66UuMFiHjUV9miwuEUQGXp9Wj1QX0+06ppGLC+w0laskg9eLVkDGgAAYFnAAnbnmbnzSBLrkRtVOR2cobPOLUdKHmssWrJsxaq1FAVi4hKSUjKycvIKNiYK9nzVci57s6zwaZAEYhlNk792llJgzqG+PI2EAyO+5D89PiYeddl0/3B0nW0E30tU5RafSu8UK4ZuU/uH94qV3c6wxvU0bC2TVeWyK6665vojmeM/yiF6fyi7sX19akJXDbM/qKN+cwHU4ojyCIV3riAZzSHYGEue7bXwnqgO4MTKrPUZlxTPKt2xVWP4QRtqRDPlS45fD1ikxeI1B2vqF6E/T1V+xVHmAH0kmEwizMrGzsHJFc97Fe62DBIUPVZWGf6H+72RseqL9cX64qv0nMk908JwcA2ZuKZ3rF9PcvAMue/4NPONU2+qyU1u5d9YJVonLICgsEQ4/5mZmp4YsDPu7C8W3/t4Vwem/w8AvAEGPTp5YgsaH+0a246a67pyr/jxGR1TkffsfoNQXraY2lo76oTaxb6TA4ss1vSkoKKZDEz2sI1nWVfeQtCg/qAvvO9l1zuy2rYg//h0/53MSSw1Cfuv+7K/cNQGi0wVU4MACDGn3QrsaUsjIPNVzH3vr8Ws6THeRgzGEdEVFIxoOJbIIJGOXEuAc/sGZBgQMHm7d6DoSMYzzqPU3cM5SL0hZZ3XkCzHrwvLx8FEQ+YiSoMLWap1KTzAFbTd4DKEaxFE4T2cb9wWvQIul4iOrkV2qs6g1wLMmcdEX+g132CDNGaeODF02E9O+da3gHtEBIJSkW96OknCZ1afV0uPu6koPirDjP6wtDdyEPsCzJj8YahfoT/A2QnsJ39YyuHTRB4CdtQflnzwNazpwF7whyVla8Y8NmzZ3mHxhVa0ENg4f1gcq5UDVEsA+4pJOKKChl2Uz2943dSGThCw9m3OC9GyPb1proykKhTVcP7FogAqxjxIf57KsrSmMXlhJBK/4bbj+rzkIavM0W60ZjVKBZGFA4oEBW6YALABJVIAQJLGUu9MAxN3wFR0wJY5YF0ciBwORK4OuAoOOA8OxBUdiD054F0c8B4dSFwdSDw7kLo7b0lOgGtilVpsDUowQHAyz+Rux/Q5Qb3bGGDg7SsmtwsFKxx8EUwEtPqkVV3SXI2nyA/dg4n7/7cZmH0LE5D3ACA/dihAIEMqKgG6uwdsqBcemDSdAGC3P7KJ6gfABmgUp9Hf7ExsgFKlWIDcAjvsFCcZ8ba/B3u11xehGZqn3QfzjJ2M3QWL4BBcgk/IFAqESuFdp9C52el3sVz6eFGBnOAp/XYtI57uyI6AXrR4xm6CSbA9y5CQ/9env//6JA/Ma8Pqw73/pu7e4t4+ANx7wV3dkfvqPrmPbt+9cy+oGJ9u/Zzfu9XN/7EzImwZ8jIjRZov5iknHXLGaYcRZIoIADkQAOpUIG+D5SRAuAdgngb6UQBAwe0AhUErDrbl90DaKStSBCpHWRaTR6lUQqAYnZJNsXSjsZ8QAc0ZND75aWolV8nCDgA0F5UEimDNKR5R6jxQZTGmrBRDEqaZ8KzZaYsGM3Gkl0a5KrORc+VdZy4zZDaHZicQZ39SjAuzV6gCgMHGjkJikeaKjGtYfWaCIgMf3aBvlVHPhwlFZTYMohlgoIhUxxFBBGaNYbDCVN/Jo6dEcmM/lQBoDrMTIbvWx2Mp2SCjLgzSI6OT+IzeU/xu8BSIMsnXGYnmS8iYV/9rXrqWYxmAOS9nVUzOcklG9VgmNZWCoLKSJeWrCJKZUtCNSp9Bo+YlFlH1k3h9LDzx5JuZhPst8pkaIMEPDcsGUJRYTCxLt1GBwDIYqrTtrl0dsKwI9vrwH4WaDU0zH8oPbL2pERP5mOCkOr29QP0ygMIcCQKlBKrS0gFCP4UCzf5W/P07DJ0kAFKWVfXbYxTKFJMY5Wq9aAzhbFr7AFQ3bSP0DOTNLgQFAdurPdUdIN1va2gy68U10o0vHzvq4SvkJKdouJvC1VzCx3Tz0blwJddxZ+K8/23PtMQDNAJvjfoAayOjWkYmPCkuEz95/rK8kb7ssVq87+9WMmGgUTiIxpvZ9IM0LEFv32/8A4giJ8wCgEs39mKAmCV/0Si913H+FUWdVQUSdwoaXuaxxWPZth85tfbE4SfeigzP3FhndrzaiGfvc3MWU3AduHJHB/kixYLhTgKQsj8Pzn6p747eaMfuzNim5FWU+g80AhJIv7angQfEMpM3z+cJL40AWIeg1eL5/6lFTCJko/8+C2PXrgUOKRbZSNf2EMLWAfFnGwbLFzJW2E6n4ogDVhImKBKO/GrW6HytidNCs2lKMjTRoyClb/nwx4u02UFPuqZqCrrbmqyFkjPFzKYnOuShdr8zOe/LDfmZtAPN0ds0VYLBXNPr3fR5EPPF+M1a0um6395uA3en98Mx7oU15TIaJeC/GZpTTiE5knBaAtTnMgvvhDDftZcyLM0wd2c0EfssMePRqh0eHp3ysEk+G7OtGyCyaSX6NKTq/g6mFVbQDVA4/VOigZ9wHe7ROmPKJ+UczYAvQo5SZAY7BipUJtA2oKSirJLZzBcFlzWcvw6HBVfXHEmK7y6H//an2aFREl8BNm3+SvlPaQNAepLiY9zJeA2fLuDI3ExiFn3cQI+0H2uUICu4m9MegvsHl59Ajtw+GYguN4zBkaTmL8wd22oXJT+K9kRPwClvZ3RDHJl9j6V6aXlIf6rVQy7fG3euG8OdleL1a6vnidwswxAbEsyn8GQNJJfj1PqV5eiuBaHm4SBeYyB2vnb9zxs8CQA/3jB70XXlGY/WwOMh0bghYyRRn4yqt39D/CyIMjnER/xZc1VB/1uhMnrgQm9zw+QiRSZJqkhHdP9odYUA0bqJLuzvqsAaDwlIZNf+HsqP2Y8Hzwi9T9XNCWqWKUqyUM+vTnM2EMWNHU1yQnsiMJ7KlEKDWJ4e2/e0TtcszD+VsqDg12OsUp2Moz9CVh5vei2vrHnJnp9pB132K5uTPUamnqucA1CwURFerxNIY+90XO8Bj8Khdlu7Gm+SzXWiiGkgHo1Gtr4u2z6Ce/FycNiPiQYIDrn+eR99VVHrjhLUiqklaaP2DjqLHf8j7eoSemCdRyVyNpo9yDhy23Ye19t0JU0mTjCqyg8sOsRo/9ck10DEdxwwIHUKLqRREma6a7QboZp8MwZZ38s5tsNYlW5E51hRDExToyqGcTrJ/JUyuxJtChjJqlC69/HzuJaOJHS47Mlev6P5DV+/vnkTVQKxKWQXITu8LiJhchyzikS1PYMxpfZh9h2l+pIlkfs+91HOdj7faHQLO+W2JdBdTWs18Iue8x7dZ13bfS+rbBjWrZfqbiwpXRFladosCzS5VIfn+X5cWGR5pjdAC7wcxv3UID9gr6OF+tP/CtXUHdWS5q3DVe3OHXSXj1KExKzSgl/GIb1mhfsV/mQVzfzYsguGtvbVfchXzLEyds/lYNp12gfW1cuw66P6orn0ShDzvCC6R/NDVfcY8MXdqqI+8FBfkbH0vQpuhhwhmFtHWAkbG2uMU8AjALjkMIzdOCIOWZZmZ0Ov8K2gOeqffSCX0dOlyLKOcuquJb2ZVNLrSotJwYxz3IwGrMh3tTEjEHtRtp69SEXsMVvfbpR1CMjMG8S1qLXTpRMvG7Q31FAiorgnGgTSlxpupwj0g3oJW7oCBTzgONKPyySQ8q4IEM/oB5jW2xJRrOzFg+cDbJxRnoQyJ9+2g6VL7vtRUMN//Evtor2awgrhEkpdCpBdctZLEuhzxI+P6+IcMDY0sWsvkhCp9lrTkl3Ncw6GUObHXjJ3uqjtRePKZhsI2rLs+smBKz/ZcwKBCCURuOnCaK1TqMLMDdWCRGWOO8vxfakI0t74ZHc0YIpdJrKtUYLrAdgpwVNp4/urEGnOVKOEbj7/lEhwiza9ucIhxQJnJigqar18Ns9G6S9CYf7xHs3tJH1k+TeFYGQXstYomiuvLCE8QH5WAJqs7UreC5ZIQyrRjONCaxtWtQvRdHW2+HtpJ8GelguerhuTBSFswUhddvOuaYZy9W06PU15RVeTZwQ6x7VL34J3aM2iU0oYbDeyC9/g9UbA8mjgbuTI9A9k4yIso7n+29heIP/MK9YT3d2xJ2G0IRWOiNpvwnfJtjxX8UTfzUM6jMgKEpiRbPONOT/T4HtI3AsEAyhNOhMN208zFDYJn86RslCorp9sWH9O5SnXUS7Y8qj+CYGhTZMs9MQjFf4wyInkukEhXFMwcicEf7EJXBJfOZYV9oQGesk5X7ShoSPxuQY0I2JADI1JSdem+QtllkhvSmjoKS5ZNrvYyHqoh604KUj2ZQ34OGNfv8yIV8UpmhnuCWwZBrk/pcHVyRCNl2HM+AHQpoKVEcedkOylFWEPcNNDcIc0RhxJFTqRY45uL4u1I61kzZ2ZVfWeJWoW2s8ZXFf9/eYzlLeQsmrMYy/GbMeiQpDNLHpC3pqN8KOp1NZ1HBz263kNygeWaOTsEjtgKxuYksUE181NEby+NWOVLp5erklXAOd7TPGsmn7eRR7KCbzsorJ9WrxPK/lpwI/H9vL7cIvmFxLiKRjlVkUq2y2FVEqmVqApbFCad987EjKaElcNn1AlsVkuoiWOpSHx+FPLyFpvjBVodMGcrJC9HLpQXZKR4XhUW2wf8HN4SBouR42X3pebcUg7H7wSVNXvilIyGMfPNeCiKPaaqqrBdAQ3ksHJklEjVVpchPTlRwKeDGT5g7TFYEaIWayER20ZTT7iN36rG2NOXAv6cs9K6YsjLC2IUVb9AGRJc1V5pqoZqAcGc9aTaP9b2XbdJ7x3S2B66z7HMF2IIO+DVKrK9r19SdIRS2bmWAkgYC0z9cBpwEOGLWLoD3g7Z3CLrmIs2oemmvM+Vu2nTV5jcNNKgM0+sPZSDJUse8bOdu3NwY9D1vq8IITWsPf8eAc8Ho6/iOGmftyk/744xaRopcQ7de2LnTLGdIpS1eyJAU+QKMoTsSaZ7BGlaLntdmq421Nx1bWgz3KvZ/lNHyQgutXyYoXMExty/2jSF2umJQDSYyUwabiI4+E5/066EPP+RS3zj2fCy1Hbe20PYqKoULryl2M0f8s8n+9i50z+UF/sB7u5iuY1IzFiYNRzSPdVp68Tca6JxJtVcOTCtJorbfVYHM3KGxPBe07Wa8EwnLDzHMHVpeHiuKmnW1rMWRUKTW4tIfaQlnMFSFnAPXQwyodenaZYnc+O73BWtGJHYrhTDlOW2WR4iIe5iFW0JFXqn+kobv7qHyAYs6tIgueNrsr4FGBdCg7VO3q/WCIP1hWWKk2DOs9ZWbSwLyvcBC2RWRLKOzVeN68wpW25OgMA1iiU0xJF+h75K8cU24S36ywK024ive4nPvprk3v1mLkHvz0xO5YKrObsscyNzQsP5178RpUrFKdXzF3P5nEf+Gj6PRP9ROiScfg33ovm9foVb/PY+AKhHfaU18uZ2HGjAQaVHlzyKsa+3Xisfyeyk08X/U5vkJLJ1DIpNJL72jHJ0c1Gzm9QBDTuDOtk+7WcE/O2Wh6xOdCANcu93nhuSdZPY5w03wQkWwFb3UcZE3bo5jIReI8oM1ernsIK+tPWy/ojuiKnfwdKmmYCKLW4tawauUm/2hziQsCN9Yr1IN8NuM7j2Q3YWr5lgJADtD474QAmKkd51YyqrGR8b/5V0MUm0o7RrBHh9ea8Hn/5LGVtvyQeHVUI2vnJ5xgXm3xLZuQ0B61jgvph577Ur0p2JetXViW7/PsrRNT607afgAcK4jwPU8oVDSqPgxMYqoTQHGYhqfRbotnF02jODwH+Dx7uD37BDxjpm+xF4a8Zoo5/IGZGUMEQK5fyLnEN6Pkjj18Q4ZhEGnq2AXCtYeQMougXDAz7JjRtX9DXi8Ej+A9xM5p6VFlWfnOHPpJRzYKm5WW3DuEjGJVsaPYbbMVj83uM8ibcVzBwXd031vQLyBOxe+V9M82/gHwSOwuKe2YlOjX6jAyx1BLnXVzcqM6BRHS8/u+GVJxM/i8R+8efPbnk4jxn5vKqHm0hcTmT9HVgl5sF5F62+zxms89jN8h4/zPmbIztWOx2Bn0Wi52NWVkw7+swCPl6tgBgzekQj5MTD4UcIQcuNkGbKmgWoDU2dzZwEtJqlAm5aoXAoY/JM/m54Sy8sFwJmcAfUkzHw7ze0DtIwTGulFIWtt+NprFm4h0kodDk5qu1Dgby8pEPw9DUFCJm2WpDEmojsH7VirNo4i9Q1JHDBQRmKh0dbBLbcL+XFYn8LTBdUyOc/gYRySI4tsXYlHuamxUzsalbU4CUXkLKcGxq7Exzc2N+uW3EQWD/Rfvm/h8CbzqU/hewjkEv3SJ1ofFT+LCvmhcbCvr1O4Jp93RR78xJt6gsxau8F7BQ1WhMx1Dys2EYqIFvpCzwiYHtZQMoaAUuBIsHzr1Y5x8AGY/M6+zb0IwHa15tGeOiOXb+ljEemu0HlqefkfJmTuM8oNt9tx+irGESsRaaHkDue+Tf2qT5UXS2wWtgbdwv/YIvvfN9B/hfIpZ3aPSEO5KzlI2/Vvay9o0RrCEW4TI2RhvJOWQWk0LyGcvUpco4Nqp/kN5qNQzV1JgGrUFqSpvVPFRdYxyyf3cCiqlJdTX3xZsU1S/tYib3KDcAn+TGsyHRYgGggdMfNECq1AqZ0qNSJZZ93d/yr20rSD+Kz5c4SLQ1ryd6C3rIzFCZUE9Kf1kIfF1f35HnZgVaqj/5Zk6s1npqRXZDLuEfMqE0vKCSHh+3gc36NW5B9SAGO1Tll40x6MpYkR5yvnJBtLvNEBCN/dnyy0do0tubTlqmfRZkPDJGL1lWgeZNCux/qi840G0CFPAgaOIq8LKQ4I8a9R6mm/2xshx1giJ/YUJmUi5ByiDe5N6pYCqULC7nbTR1a80hsSQMEQXb5N3Ei+qYTcjZgmF8SgQeksH55we2kPUpKRH2YitZuKCuqkSjKixPSEttMCWtKs0WLknNKOMnya1o75Fr/GmR6LKPEvcltGmAo7DwZRMJkd95/+uDuEgejY0RPXouI9T+Jpr5COc8b0g2NuNkgPcBnTj6xalsBknPFegVam1GnSjVUSdOylAro60O0StTNu3eh1xOgkRSwRM5FZagY7fsKZo4dXqF0FzbnedONJkBmxEDfjLwGVVmYvJMyMNND6mJeWKVz5ikKqhMcKTXm5NWlTRbJxbbvSm5wotJpLATYTq5Uc47nihOA7hruW80BX1h/RREgYv5hruaBX/tEvppzhcT3/tQ846pf/4RPkjALIcQofTLPpC25e/ledEcqyh2Y/8zPO3NFbzjbfIvQjMem5rsIyDjgfHKzZN6QMYjhH5AxLLQS4NpobTXXrAh5c9l7QTpx/Tny3j2dSn25YNk8sWDqaCaSSMdVgpSoIaHGTh5rSwzrVIel63Ori///iMudjZ5/wV07oz0nJN5IoXRUemkq/wNlQV2bW19YooqlbCjkxsaFUL9z4MEYHIXVrh09gvIt4bssUbGxuU5MlzdQ6b8hTt8/o1lRa7BwdRc8XqvfxOcMP4m0bCU0WjIrojp99ek7F7d/qFuYcVuVWe5YShnxdLxdpoVDWieirZZ0smZF9B+z96PJ1zTH2FEn1Jh1aXLGKW8VkETq3DfvSs0sYnQz5H0S9eLhv/YP0oVUofoDajMY0QvlHIoUdP2CtMGrFhY+7R2YmGU5/46fpxNUTySv5Jw6uupWPkTbRZELopQLFqV5ZPHm2rYaaHG4G0306TCjN9YGRSEiz0b4CkAUhS+6eWyl2JVulTgSy4qLM0U333iFQuPNQwILejYnFGzd7C+yjM84MhKzCI9wnVZUUGxC+35smfefFDpFEmyNicvzBqYMlfyFoQtMmRinwRj6wrDmWUBq2cIsO4OTC+3QNyj3ImKgI93hAtZlhvzOmX+LSDjsin8rx5Xzrbf3Qifz06pGhr7GRF4/Md67EFjysdsLd1ShBp1xRw8r7sOsn5ddcxOKXpbIamLD+SKrtnSFh0oxymKpow5gw01/uEpe74ulwin4Ur+GEklK+KzZdE5WqPM5xGpiGt3trX5t4L0S6Y95NewzkzNdPGAgvW7prrGVmIk+aJHszfMjK//rqd2beja0YYV14sMotVdq2sGseK1Bz5hTrUnSr2ZIq3KwhZjjvo4tzQCn3D9pcTSbjNGXPeJ22DYi/Hm9A2s5ZGYnJsR44MT4epCdRINX7X+A8LU7t42SKrnr9891XnsdxGw7pzaZg3jHuW63Ys01VsxjP8Tr3w1sE0xcHfdnlQCfZuHWSBbfDlEFlRJSujy8LQN5O1l4IKzRY2ixeLuzJ4/RNLag18xCxhFd0LIPs1u2909BLHdHhuewdfwreJ61se/CCcyzqmD09lBqtUcMifrBawH187TBHmRzj2xuAwrkfKxTf1AaJT0hfeMZUFiHc90+eL3DNYubuc3u1KT1o0xzrzFpDF3cbqe7cxLXAVMRFe5hwcdfv+AwzVcVZUxPGD35Qza7d42VxZ5Sm1mb0lxiafEauUnBnisSVLMSqWLVeCJMxbx4wmYLChqAc9d3d9cqk8qbFJKjFMhfH6/gbTgzXaThWKA7rMRwXKKSFSqKHi7sMo9Mmjz+wfsRxGHAkNQcoji+zMYYi+liDcnoQ+ddDKfjTj7YHN4+erVjcVJ+oJGZRl7Nb0BfkG+fegalVsUaT4zFdxr1981Qczz0COWDMx9BXSp9LRjWdfLnVSNgMzLpq6CDf+C6n0EHChPq0ZXbTNu0MVfCsov5eo2GG3a6jbNZ8gNLXA7bZ2ombWhdAd4/mUyhTqcTGdn9X7HK5C0S5Zwe24cvUVm9vTRqrUnXRUhWL1oUrQVTHumhpiXnFish1UraBZWc1zAggs7+yFuSJaEXEzKPREM9+jXYybC0wmb+dCJC3cqy3V1+Cp85t65UYZgnXczIZ2Yd3yWWILP2jqnZ/B+711HyqN0EvugRRlz75CYmz3IBbo+RL7UPCxkSm3F2KFM4C/Yb59ErPmOR6rWLT3eeRIs/IZHdDhpj3bM/F50LVT+3EEsF4wcNirG7zaXwvkfkQmrHDr7AqD65JpJbWFihbLw19mFNNZm7rlndk5/FFLnTme5Xc99aPo2Bowqdtu7zzHX/TlehpXq+EDqTPlhWYECr/659HDct4kkXB593LrI75/FMK9YwKL4RWn+AxjmUwsQn7c2bw3hSWwRirof38H+nWK8sCmnB0Xbjz8iIf8ObK47tPrY+1gCp+bgqk/fw+I5wBtdUX/RWuqTKLj0ML6d8zvZNLfxVYp2JBwUUz7m071T/SQt/YTTwsmkeZZuNELkZ7sM+0JKNfFE/zkckhRPQWDJBqb5L+Do/gP2wXBK/5+X+lfTIl7RgiBYMMNEBv/9IlYvdeLATcC/Bfjz24u8YegOAiGPPVLVk73gK+JWzfUYVl3R6XKZvXZP2Ao5jJUew7OjL34IgKIbx9IiAen3ZdUJ2kZvpr6pTePS5VBv1psI2onYjxYQFEkWq02jj2HgaUEd7UacriIQ1JsNiesEQFJnXJrVbHKYEpgAMYoCcV1Sm6sjwdDk8dka2xOsFmcMF4TtSwSAxnZpQE+Q5+3IJqm9nfH6xswcY2NTvIWzlNT98CaNnf9YbtUZ4nCkLdAEELIkG5LkC4Ale0NK/+SR/y+WHsMHm1ekypQiB772RTRIe96EUaV3qy0tPr0g35yUTY22VMSp83V0+k0cSmk+ZdsC0vcRVm9YMzRkjMso4iVazRwh+O1K7sfk6J8GxwNd40pIVMcH/tOUZZKkqiyXrqYpLjUujzJKdhM1I8JdL/Hyi6XWFWLmR2+D2moPXc4fLLbqffVCi9KNTocEEPDxrAMnTDAIgNBjk37ZMw+DL5iEaX2Owrqi4jlOIKxzS3Vh+y8Sz96xKHCNZxugrGa99nAfu5hPvZwfxPptYb170UQzvdfyjZMnBIK65373nPb3ZFQyP/0Um/dZwlvWYy/ntYv5g4f79KnRwHz6uAoS1woB5K5W0xdfHa+kkRJcvznbFI8uxC/ikuc2IO9MzA/pPzXR/cKvHrVfFxaggjf1LeYHuiR9bfz8C/Y6pXmykLWUhpN8NBTYTNQnhRZalXIv9fsZ38Vvu0tjlQYKWYV0fO936VkRXo9W6Wer0m+0BUKJW7Tz23+ROEU/v6Zs3DEQnFMw6edOs4mbwwfInffXUkpSbVvB3JomoKJ0NARoP9Trmpu06WnNSfY17HIlNzbrUtOadMnNb5Oi42xGk8oql6tsRoPKDvAR1g5NclNWjqG+XZmuXkC4USsn2iZiz9XgWeR9cmuSJZ4eBl887D1FdeCaoE4EqcaBkOg25uSfOI6GIe0XnTL2oIdYy7TVxSc3ZmaZmjrU7rgC0ig5gzhBD6B7LZCoTgBcLlgcGKHMLAnKMygqzKgB/9hJNO3TPSUT84Nh84P+2YCjzlPtqY6Ohmj3dqWQ5A4RGLi1wYVyWnXWRk+R3AnesWPfXnjhqgPPacbCSw505WDSUwBN2EQbRc1E8j7ovIBm9Rgz81Kz8682H7dtAWn78ZUtE5XjcVhxvgBQH7EHbLLnyWT1iuHJ7QRm2s95OLWtRqjJmSueDJd+MW5uW3jv7xMb4NBLej8DxKQySvmV/Ny3u/+hsuaNP0dPZRexK6mFfZd6CfSuPsnWnrCn+mC8W/4J6HsKrGbuoFdTFgwc3kxlmXr7cA58Aa4SU5R9tJdIr42JMCnLZLZ1kuBsYwGzGxGhJtDf91JoTfhsSwjcZZ2N9N3h0msYyC1qN+THeTGG5r0UasqpfkoWuQy4KZzWmfzR8vAg4RsKzjN7oP7AaZSlGBV8kBF/bcVGD4ZZGjvJaI+rwiufof/YoulTOPqWjbqKlhVtoFH/Fk7HOYC17T9y8vlLcV7KvyYmcHbpCN4eDGM1UTt33/kDTZ8TKKgMcgG3RLDArMrPzZNyvi3LeBL4MzgGWJL48GcsOP8zZ47yISBw3lXayhajY2spYgzySYvVN8zpzy3wQdSnR6StrH9aIUQodzlLaTSZa2UAX6RGINQi/jxplcVsVLIL+aFwXOs/7AbpBczV4JcHo9k+PuFrg3OA4ahPr0gb2N9ND4WF8l1spcVoqZL+1PrrV6jh/yirNZtMSuZybig8pPU7Vqv0PgwxxA1LufmcaFN0NPPzPXTS5h5OGpdBVJA5Px4CjEXE+R66RFxc1R4HI6FUCSF+ZiFV6c+UsZum0dynAcFT790D4rRmxbrerzFcDbvvoxX7e8skPbChXGuM1E0R21rd7WDdxmZ2fQ6PmAGg/lcQd4SB3qz2q99FM45EgPhQI2e2piTllYu1JrOEj3ozI1xIlWtVxFAzq9czcdjvY0PJ83uYTlCyIkJ61wGDnenR908dQaN/Wy85LL/u4VwPRt/QtbuhzrQmPzz1HQLKCWhfl8T78qWahBydUsl6FAqkanWe35uVkCa/f3IfGnzWi1dZ9dd+Xb6FQ9UTwAbODdmT5EpVSej/B1CY/dz8g6G5dgPV6nxmQ9MaqJGn/4r1ffHe5MHeVqxExxefVhf8aO9AENvBAwWwAnH8GgSpDT300764tXByG3r/5lnAXI1CWYKyOmrpOxP4Ksfa7m5JyMES6TjavdNpJEXMLgx6e7BB6pQ5q3SGMr13fphDr0Mj+9/3oNIQzuJeam9ze1YcggiCh39Ngb+0MBNElpa0AoUHhKjYt4fPIbos7HEMcnibPsIj9w4AtjfQ97GYG+n0TUzW/ks0+saE9qH9a7cJ4Mf4nIODnsLCYY9r0Odz9Q9n+NoMZjj7NYnm4kRlhdGoLCtWmy1MKcqQUlSsvwuZ6+gfcLnrmdCRnRlkKEMmtXNEdmWc3JLC5ImSifCZlZMXgF21yA/GJikztiCRTXrA5InTBRCYj1enGp0KhbRwpTcsBI9mEKMIbbtgqOtf4K3A1OMlvcRwNvaXH8ZV2ocQlC8eHh8hYCDs26lttubWBFbw+suhcPZ7CmTP+ugs2uFeM8hNEaQr/YNo+hyErQ5ja4fF7dIWc6vD3tJhdrmj0ijDFi/xeqLV6oxoS8R7c1aGPOWR4+v9YA4ivRQFQ0WCR+EhNzGgaiGfOCZQmBLT4SjaoLwSw6YjpWDIMgFgKOepN6MYe3FA1WIkcwPgeSwV6q1MqcWfZpJtszGlUitz25ZI6C8a9R8I+s5Oe4UPNIl+6yNzo33rMl4ZF3tm/mkpZDVZ3kdnc2mt9I4JIhsK3LxWCDYBtWDlvJfFEb6gOMD3ae9TFtp5zSb7XUR2rBgObCcwk3akERKMqTK6q7UchW2cOA+PYRzlfc2+KRvk75WUNZVj+PtEP5r/hB9nCp3C2CyTTbegUgr0uSnKS27FD7m8U05UYhTjijFqC8rOu/xZjhS/z5mem+1w+H3TETSYUEShUmFCIRUYeL1kOUlO8PlpFiEp118ak8aa67fZt6LBzb6wgD++n7JYSwp57lAqWsOgk85nCh3Yhm/deFmtfBeuilH54uF1yC8IBvj/T9B+0fy2ZXsBASMqcX7FxruVbi8dSQHvDGI/nFT4iPz0pKMnjJsx+84qjKCADK/pfiwrTGhUN8YWIz5JoGP/aCnJ3x9Cz98H3YpA6PIqiLef697bKa0eAhmfEsP+6nHmbPs9e/pzz/FMAidnS2b/Z+dwbccQ8VMGuCVnQ3vHAPEYAzNUdS2hqKDYjSq50fMTWE7YgVVX9A2XrBzbtXgFNfLo2sqeuxu31RwlwnNnd68MsBtau/vHoVemyDNHW7sYk5un9pCiPsJnFq/veSEBRTYi/pzw2uix2O/qIVRhbSUvNroETb/Ul7XuxTeY5h4pa5A9mOodniorzC7boZzmYl8pyv4Be3DvfWNMj1TWE3M/edfrro6WwsKO5q7M/KlKvksKtfau3zG1WJQvwawcA66RJ2dTdEXVMoO1WqkpMksYMX/Mg8PAPwKp6/jplW6XxsZlY+H3XiThyPcM2Jr/aZJjBZGjrOBnPhcZExieTBorkk69cW9w6Z888axEeiwsKL4GVXPei+Tg7xn31ti7OLhOJAnNLq6tUCWad4Jm6atdCcYkReX+nG+I7rvXrLsj2F5UQwHc8mgzP7E78EuQOLdW0Lc2gdkScd39oGLT7dJaybgU8ifuq/EnTN54dzAuh7WUAApZawEvkVC8yOEnnnCgpw9dsbLrdvkbvUOgfM94QY+hfTtPhhqIP9+IwWKeJRxBNUY5BYVKr4xXGmLk0UY1rSlHxsPl8g+kt0+sXLbyL/xqmtDHGWub69hjrhUstbqVXfWmrNY1S+vTDeVVMZpYBxM49GLZdDpbnsU1kNQmdDGZ1XRG1Wx11jPmzQx69SeuC3i/15Xoh100IiJqEt51LIRfUsAiu7PS84Jl1u0/WBnLW5y65katM2aWnMlNofTG/Wijky0Wk87ep7NazLxL4MMAQVAnhlS9rzcEz78bfX2t0ijSYxNCupbK8AzxkcB5m/P8eswzHYrnZfA/cogxj3dPTi+/PeE2ZkkgflLSfR24HZA2f0oEwCYvCSZ006ic+q8PC+NHG92+nH67a6R8g/ofJLlAos+ktxbYizNLUk3XzZZU7x9T8I8OZUuFIT29Pimp2eXUNtXr0tIqzKrmr4zZwAoPXtXee2hd1bc8O7GuQqnT3IfF/fi76+LsrBECqGZ1oUzwCNrBRoieVKNWozVppVJGn6O+ifVL0CYkygiiTSikERVHKbJZFJSTEkKZZAgSBHT6MBqy5wZTdjLJ7xwCEDutugNIXJWDPsPg2wV0xBI1VJnCWEcnT+wA1v7EMeC3ceWXWkiGVWhabRSbUIhGcMmIRgs2dee623Cqngzg+pnHuOxLTtZFN/co0PZOriUIHsRQkJn/GV2rxYHvAqnf1i3gBkggbGSUlu2ColoB/1FiTNRozYkSiaS0GpTmipAxSJQBhTw9TAxw9IvMt6UHnQQMqVlnw9F/N/OsGtCGZZ1danh1Pl76TRb/wL3UPLOz+7Zj5BnGl/43amVLsWHtcOrIvrgOOMmL3merQBDM6MF98e0ZZW6AvQJOsKx1r4v4wW+2SnZtfeks/SLDJ8KzMjGzdfhGYB48o6mhOyElKZP40IoverHsd7HISLuP86e2/A8psHneY+w73VEH0UzUIV/6aMDoHz2ARX98hhOWwTrVZ4ZhqOedBLhpFLBydOs2CP3RWQXe8gyX6qMacENhphHAW/+yYSxq5UfsMC/rVt0xg/Qq9BSz6NElWHTbWXb4p4GzZgytkwQtQQ27bTujDPOwGWkBaMfUzWK2LsWag4V6RBk4S8CcBeASo5MMCgUT0Qb6K+qBC7a3LzquclJQ8CW+XvIK5y0xrzPYJQO2vx7sPTteNP4sCTXmNAK/sDj0JB8Dn9tu38GnIRDxAOjEZqlaIiET8k1OWxTkQib/rh+HE5dRvnhFsCIrCwVuSOR3h950e2GEWQiBsh4nk37ySHoU60onkeR5Moot1MbaC5ErPUjsLJYx34vdI9doDA4KE9yyet3HaMLWTYHTKzZD2M+/f72x+GckHcsCeF90++QcmjAFV51H22acWrkJC7UEI+ghn9lNdZNlS2LvPkUh/fy3TWDwjnLfhYBudtUIyLhqcnQD3XL/Vgzzshm45YneiicMR0sbiYRluRKPM0urZcKjkP1PqWwgS3js6ocJaFTQaTsZievHYd2ZMPwyYNGfGkO8nO4j3ZrG80RiANR7q84gUO3lqaZzZDiqCQP9s7vtAwRRBKR1ykEqAjFixJLO9r4PJ66VJuoVIlyfwH6WJrMr1MrteMTtnS90ROIYEimHYpQZUXjgjzMbJNyMKAwD9mrXb2iYd1L7zrEyBM7r3i2JpAPJ5YklpswKtwkGLQUe76/WLvfA4zZLZYZkk/x7Gyr4g6+LCPheEFliQCiniWRSeFhoiInpMm7ZisWigPlHonY+N/MbjNogeRBAyn6Ll+pMOvH7DFtckiDNwhUz/yrfErVpUuRiPVoFgl5gYG+XyhSJRSMO9H6FQBfV/+Y+HoE7oY9avxCgbRJZVUqVRSUmX/m96huG1KpI0pkVUsqZKH7EWYuaBjF9SJQXU7Quox1RpEQVIWEscF4JOqNow7SOB1CMXqFSWpMTEh1ul46XbuSIhfl42Pvj7hDFTYiF0ahuDaoUg3Kxbga1BSqgthIDkO8MjOjbUVAD9tWgD/9QH8+ZOUctgaXtMQd33W+RJbu2mq8nfNxbIPia5/gLIRRYbY9avOMx/cMiJx7G0tL64CwqlGLHo7/MjnFs/y1P/IqxgZ94Bi9hMw8dQHhdDPl/jdqe8BzsL8sJt3raLJ5HIKwV84RrYh7faqgR1vEwSngOKueIVFy/3ZAz09rkEntvgWPsv3TH1qvi0r5Xwasryvoz9Sgl3LalqPB4U9T3qG1pvTY+M+8rPdxvakLzihbzplyht6nJ98x2jP0PSq33xYXYdhV3gnjhraYYewooOnAXH44QlunDk8blcQbpjetp+gaxt+DutX5nlwCbcgG1tOFFv9Twb6VjeRWJtAPSMOAVcGrznKhtQ57fcUAeAj9bnXh2tSvFbljpdoZ65nwh3Q7Ubu7C/1Iq8DmC/f34uIHEFmE3QduiPxIIGU4IGbeETPtL5gNJyHKOZN0THbb9B3JEp3qW9GolgzrJqEoyGcjMhllAsooy2z7YVW4sC/JsF/Onulx4nqbCJkzmgRnfcgtwK4i2gH1P/IEm/6SEaDQQ+f44+La4lGbxgGtqWPoRhG8Wsuu+z/M/Ud1/4y36z4MarTFe+gGP/YkkzJA2caqfMh0B9SW9d+3NGHymeON2MI9o8Cq3YlSsELPuKyYwO6K1Uc3k+DtKQYyKkdGh6R251WuNTAxPxwwI5y7bNIlyyK3JgoavCoFZa1uEWjEqRuJWCqlUG4UaMSpGRofwE5XYOr0wfdzodRBvi1fEPWLf/j/nnp04lR8jFPeo6+Jt8cr8fcITxVF7wFAChhjxc/F+fE86okBlhRrxtnjl4H0Mc8f/1O2RfRvfUsr4QXR3gxI83p5em2YfXA+8/3Pw9aW+O2iqiqcvyJ7ItfaJzEbvrSg3vpCj1dPnzRZDKD1yqeBIr/f8wkVPb/noAoh/G2/Szv0+sAyCWlNVRKYMZytZ0uPV64HpGT55YEgZrdcM1C5Tm+pSdRt4JqgiqtYj2pJGqwJfITZRWpSGZy1/G5VBdY4g024iGCO+gzes1ACIkyiltIKcRTIq0pLMXNtyko/V7WYUP5MwUy/siINeNWPdTKFH3kZ8HN64SQwRitcFZYQAKCiSlBiEzREErpoA1IIkHj9HcS7QVD2A2M1NbJhtu4UWUKqPyxePAMhnx9QefyN+d8L/iWn6KwCufzINADc+zsyThTaG0TGECAUACPw6oMRVnWAevzCI8ISFHNh3PAAAbgEOAzlQXjpZ+n/OiqUtInen+B1mCVdquNjcT1cWt2vze7TyuEQfJ3FjAllGWg6eBsHadI4iEKpEII/oG8tXKa+f4fIvRPmCJ//NluRrjrxk3kQR6kLmVoi0RKDrRSqIVCXSLQLdLBK/SHoZukAk/yOyzAo6LdJ+gRpF+olA83K+3pLLoWtAZTvpVgZbfexNwDedL3xZKaVKDFHuCuQNQA5nKUSoWTjPuGvgLo07u4UriycLByU72EmyeilGybIraDJVY0/Vixy/jwQU5AvJWa2wOvlkQAwrHNbOg70EhjzhjZk1oEgq2fKKru77L8gLrvyBQCavDs1wRXT9stOO7xGBlNCXy1EMt/kgulBSSmlSzVCWnOAZQqZMEicLBlVrJrFv3nANn1Vju+dy5SXbhOZ15iqTUPsLsdVAPv7pQTZ1kOFGH9HUvRLk8hs8yny1dxgM48tUdLxwnd1McGmIqUGDlqBmmVZ8O2vOVdQOUveKlsOs/KN3Ghn5moQtppl0fcy/FnMnj1ImV2YmCfz/LRBXCWxXJQxHKWFRc+Prp0gnh0O0jtACeIBGEuvYYyL1Ku4Hwv1EeOmEN2kFZbxPHgEAoK6nsL1fQLxYZLYVCg8FoUIncllMI5I2yyaT8nWQPhoO3rHLqir8B3ceUPYi7tHRz5hyjVk0U+/JiEZp1sSjXpWY8HFZokwyWMnkcDZJbMyRMfnTKaQMptp6zLPNpxjVBlxn8zJ5npLWRKT+qsVwJuE1iTHxQ0ksQCObeACPOLpFCIX+CEXsvQgtxaoIw6Q7wrIYFBExKN1ZIYtsbwSQAWPophpsvMkmmmT6KudwtwLphWnGmtrOdJvuUpppart9/LpMNVG6BtVqlWvRrkuXkFTlurQbZ5DxpqJ/0y6dBBnS5AoKLqqAaUL57i9KoSoDNatWSKzcOmnUCgx36zH1KDhRGpQhn6B5BeMrls40mlqKrcYbi7bLzKgC6+J+qiBQET7N2RNN3s3MMEbUsaHfvkO6Km2a9eg2XjrwxPH0aiH+WCHhbsiBQEpo0DP0+PofETGehJSMnIKSipqGlo6egZGJmYWVjZ1DAoGTi5uHl49fQKIkyVKkSpMuKENIpizZcuTKk69AobAixUqUKlOuQqUq1SKiBqgxUK069Ro0uk+T+zV7wCCDxQwx1DDDjTDSKKO1hMGzllnuE72+ssIGaz3uZc+NxRpXLbV1IsJh/cRYZZ+b4fGEVzzjdUcc8oYxxtpknGPGO+yoU4474aSvTXDOaWe8aaKfsNlF510wybe+t1qrydp0aNfpKV2m6DbVNDNMN9Ms35htjh5zzTfPR5620AKLLPadH/S55C1vu+yG+18h2I7rmVmpN5mwIDh4BMSOt4eHjIKKho6B2XsMNkfeeyxFKwkiUOC/DBunwZV4+ASERMQkpGSiycWIpaCkEideAjWNREm0dJLpCWW8AZOEVNpYBx4XP1DZsLbOajl0c7WlQR5b7TTGIiiyCqOJpdURLn6pLvc3y0BE8di2VvXk1sm1ZUV4VVfDQu21sMyElXW1LloLRzPDS1saL8M1KdQwwPp9qfBbp2nacRcAkrtkY40mBOP2CnlCXhlRnTa0bzHTk4pyXMMsTFnb2ZlmRlVPqykEVYyqCFnNwupUq70cLxgtVhnGYD3vdZzeXbx0uWXksmtgMmSSt2F3u5BL7dgYVbi9XBF7B4qw4qnNDR1tjREV1rJrRFRrS0lbrWLLhWNdb0N9efTU1o4GGNEMLH4sXjSYEpxS3V7u0FLdSRZKJsKI5mPxGOujpkXcTZONkKyGe1rLnsAihSgtQmiBhZ4iewoR2hKhR8meQm+PR1gmkFoGAoUoAikIBAI5hYKhkJJAYHCilVbxJ4xm2COUnlxGgSEepSgGf5yyQh6pXIIfq0AfrfTJ4xUY/BXiK2M/mfef+3bwEAA=) + format("woff2"); +} + +@font-face { + font-family: "Bangers"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Bodoni Moda"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,d09GMgABAAAAADjAABAAAAAAeQwAADheAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoI4G6Z4HIVmBmA/U1RBVF4AhRQRCAqBoHyBiGELg3YAATYCJAOHWgQgBYVeB4ZVDAcb3mlFB2LYOAAYoWyikYGQeSAC0x2LojZKThmz/y8HnMoYeWFXFS6JS0gZu9txRZu5avs8UZfMfTM+xvvr4mp7npgoB6o7Mb9BqQmA/Y/QE13FgOH8VoxNXEUYcAkWDDhG4yBiHqGxT3J5iN8ffGfmzn3vCws5wUiAEqS0eUtgc7XSOn3d4/k5vff/T4hjQfwnmASCWDAJtE3AVygE0UKCBJM61q7CKO3oRk2QmuioKHhhY1QM6nXwa2a3rw1BIACPxhgcRmDJ+RPenLv8Dg9z659BeWKN2OixsTdkbCyKsUjWxMZG9ALYBiNKQGIjWjgREAwUbEzA069i1hfjiqvyyqsugP95694yr7efyjitPFi5RpbnXr9cUUkq+5/LdgcvdZOtP1uu9G5RGIPGM1gUh7r0zpjoLKuEWwjGwjIHGCTdIq9yu32+CBPi2o0o8djroaLbSLLp8nGBP8dxQhj82PfLmt0/fe/CDGHe5VXk7A+bv5AY+SdcGN7+ywmVk0LtLjEIh0OYEKJCkctjHEYhNEI4CiMM/7c0RXlv9+pe+l06q+4o5fGOSqnMOGU0f/a+Z2bnpNNaPq3alSrJTTqXHu2e5bcry60jh5WOSlVaKTyAhQXQMBIYAPPCcAcYBpDA8//7fav3zWCmoRHyEAol7hl/6MHfQ0csmkfEGh7VIon70YdfRJOIp5E2i9XJVNEQknps+MNXLQ9s1G4n1KWJQlUiybq5vm4dlp6hSvpFyi06oY4hhqiPc6mbeimN2J+96X+MzRb4EWVSJaBn/765gMkEloHYATVUc/gTssGnD4PUaAQCAWW+odQ7uYJhoEJ1xRVlqv12blwd6zOBtv9+BiaETRXCpQMxZAwh8SCmTCG2bCH2nCBuPCHeRJBgIZAwYRAxMWSOaEiiJMg8KRAZGSRXLiRfAUROAVGqgFSrhiywEHLTbch99yFPPIG89x4yaBBu2AjchEk4BAELIBSDQSPy0f9Ri4SqhR/7PSsWHK4uyZoP/BvSlHLgIgDjlwDNuVyYdtBu1/8pkYPDDlbhb242gD6I7Q4SBjRh90aIVZ/Es5ULA6E/lgZVaJeCFQ1Y/Jqy8uY2vcmNr7QRAwfXN/Eo/87C2tWiZPXLLQen4Rj2PTOZzEje5UWe5F5u5FKeAPlejuVAerMjm9KVjqxMSxanPpWVpyQFyY4scxObOQlPYERxi2NsYhbjXIpuNMLCqAAJrXEaiD8d8o0DPvKO17zgKY+4zz1us9v1trvCJhdaa7lF1TffTFNMNNpZhuqPxKv2di46aCVfQ7WBWCEDEfAzb8glxO8ECq/eXn3PGU23Fq04Ye3xC1Z/Ol17znebkXS49ALbzhjfA3z7ByudugCntLN0Gogs+IhFpsMfCe7KR2nf/Rx5bAvIgEpdCemiBHyRXQqOcILEyXBblts2u5E4EtEzACkMwZCdHkVRWqsCvm4I3HD2QshJAKdPm+iMKVQGrJynsIWOs9KLSTa738TDcgqAV8KJ41dMLVxGGEtwNiuM/I9AW1lEMCO2yhnx8ie2YTPL7xDxKOB0eBHtWErSGY4Ajx1Ltwm85utIvYjN7Jc4ooCOUJRUxlGL7/IdnG+ZEIvlgLSATZMvzMP8+w26ToSXmHPTbdod/Oobs3Fm5dKiTafMiLGRg23ZcyDgKHO6cefBM2yMHCw2h4RUlMyZ6DdzJRnZPVe++QpqmZFJZcpVhA3fdMvIwU+8RwUOVHWA2kvtMnE7iP5oTANtJIFMguwA8bfO/6ejVrfNkzC0yvLLMGYI4GKOMBR9x/jzS8PMLdq060hbTGMAqF8MIj8/wfaqhZH2LJTNBRXZjT//DLm0nZ7L1zrVtSLPXzbzjV0HFENoFUGXk7Wa3pBPj9f6j8Gt35w5hXKmPkFwLAuotaO/cPZXvzXjbbamj7E7uXBsdLt5rGxKMFShXoy9vHX/cf2xT5aiiuOaPgIpuzjAYU92ytRoWAkb3vpVXmK/B7sHuAq67OI5u2NY6XlNjOVORI4xnQgeOShStrulkwYFHRgjJkqqVIMNvAES4QUAWhXeyGjj60GfKrpGT3oxP85+WuYsQA12HflZ3YzF7mQUTZGgbqVRX7YRz7vYfpSrgOPxAqDwaOuqQSxwSIi6ZWkOPa3Kj+8vTpx1WZmso0BHKhnf6crD71+t7kKUUx1X05my9QOzEmnZRPrS68ezEPXnjBIl8DfNsI2f11+Xkdc7v+5zEbqNO3mbeXNOuAqTWpyGYHXgVi0iwCqtUg5WfjHRBFIp4ddlV1Kl5q6Pi3D1+SybmmIEgIjcA1fsIE84v5D5VK1tYdt6+IX1s+PYbxXXJSrOT187ZBjcpoNvHdJX9+eRT70gJ6SWM+ZILgLs37YmlGGlY5VFzlSEjv4KQp09ATz8cu+enYvHbbvOAiiioYmUaExZ6czGnE1dEanxPb6A/bxu81ENFJ/hrSbUfiAp+flB4vr3qqk2WCOzvseAsgGztHSKXGXDH/I3H9s2qRRjszU0R409AZ4QsuZqGf6nTtoQGrAICw2XASYjJjTx8GmzZUuXA3d6PAUzFSaMgFgCR3Pl8TNfAQm5OlEaNErTokWGNm0ytWuXpUOHbFvskKNHnwL7HaRw0jklMPYQOoIhQ7oEBFgcOeJw4orCjRt97tzRefBgwJMXVd68cYkEoQoWDBciDCI2GzLHHAwSEuqkpHBzJcPNkwojkwPJkweXLx8y33yYAgXYChXCyclpUCilQknJRJkyTOXKkSpU0VStmpYajRiWWUbPKqvo6dLF2AYbGNliB5oevWj69DG030FqTjqF5rSzdJxzDs1992nDuENoaBgYeJhYWLi4+LRoUafNAGLEiBFjJth4+BBbtkw5cKBBQIDDkSNNCWEmDPHAZV1BIBgTBjoIGE/REyVh41wGkpDQkWRD5TAhVzCAtqjJVlO1pgUsoaP0N9YwVrtnXB3TNTCukelamNTGJtqZ1CEmcoIKKsyhBSoMs6k/vGFWz5uUcsmo+r5EZSXARxATwcoaKmAottDCglgCgQIMCES8CJfgd0KhBS44HkSMtNiS25R232FSvtj2GI5EtKN+QkgQekxA7Moux0SnQ08JmOufJpmVLjhbMrv13IAQnxsdeU8wftlAwgXJVfGKiNKBomaAAH4R7E67/LewCGS77PhXovUMkN6Ql5MGETcoMgogeLOY7y3yskLwuGNOIRDooIEADoZSqV/6qx3enhndNikzWjUm3dGuViZdRBeB+Jo3o3JggaSPi6MRJkm9cKIGjlIzaY46uAmlVpmAETSAAE0fFUPqaxZpAyFvzPByHUUldhVVGCNJ1su99loGw0HV6QwssS6QILp8saVpVsP0EkzKKOJxbONYUXJVEmrIUiwQCTYiSSiC0LkSdB/G2dOIuAVF1GgskJFuWNcFk8liTT0mShckaJKYRW2ZRLEGGuCcsomUQjYxpEjSOOqS8sFIFKJSXIkjoW+0+gGvmuvnWwjTin7Z+8HVwMkee+0dNhFwBnuHd9q1/68A7j6g5AfAS4D2+gwAtlvOFhoP2Ui9y16wm/+WViMC4O6rc5UIB7RmVBvSlLRPG3Ve3gsLLoAA6ZuxoKCVjGJ/s1gCzCgyJhZkmMjGn/FwJIIxNgFP9fb4hYKcjMmlPMtAEU7gNNz0AyOfyGfyjdQnjUk+aUF6kcHkLI/P1+Br/foFS5EceenWm0rROuBtyiupSxou5xmVrDrnU2GgywMb9v1p+NPgx/CP0R8vf9x89der8Vdjr/YB8MPTr1yq/zPXXUxe9ry4++ICIOBQ4EKvfAbEq/TXEQ+6lG/2DTtd1u+hD6654rAj+jyz1X5b7LXNdq+88NJuVxcSV13zYxy3zwnvHPLfkiKR8ppaR911zFt/24X/bB974Il7bvjXTQuc98Ytn93xWpcNpr13XY8v/rTQBet0Wm8PKgyBhkIFHYsmNeo0GNClRx8HnyUz5qxZGGDFlZAzF17sFPLnw1cgPwGChJotQqRZEsSIFSdcqkxp0mXL8FyWUkWKlaiUp4qNHGedc9JpZ5yCoPHLC8AaQPwPxNHApvcB7PAJQPsfyA8ANNjo+x14aiDh6TKj0VUioCnteLV1wTTcG6+wNmhGIDDPwWAgQHjIoSosq5kMeBorbaQpCrPADbY+Ao0DTatH3npPy0S5TnGMjAiz7JyAtgLLiiiFLupRWEY4coYxuYap4+/ADVIKiodbtJ78JSaHAL6gACj4yoHGocXBI/X9aFUzQ2lkLLREekSAlCmKSGL6mDgLfE6sHvJ6YNR10tGy8mFFFq4PRhv0O8CDwrquGK0HZqB9lkoF1ULCoCI8OpK23rUxTZDLwBkjUzdtcXRakwYGxFYz3gIwy8KQiGM9XdmdXHVniVeeSCZclY3s2yHPkf1hWOkh9cd8se/6I45mOretVN5bFagXi2WvJOm3YaPe7X5EmHigCgoNRtZohZ+4pxNwa0AdhsShJIXK8YbY4nME08zyB+p5IjZhBSbxfqOfb8W++S8Xme7vzSbDJ05Yidu565teydps6PBlzuilswep9ua2i9Of7EnsWiYmkrRGrbuUKWAJnK1arXcdm5oKkckctsKeP67Y9vfPJ75fGIiT2G1EPntaldq3Tk4mawwaNwlwmajAGoIcyWqCDImJSQuUMIgK+lCV+/sMBfsYmsWCUpFAysEvsiW1P6B6VrG4LAkB7kI00WuNNGM4pC4uy3qMvzri+PE15AKulwLx78KSHuMD4A4JaSr2S3p6/mB0W3AI3AG+GMsSCzQXgBEVIUY1XulKSX8TBwMhOJUZqW5wQfkK/KsdbzoBr7lZgYBHeLFE6pIOvB4jm8chFAyCLhPnEX1o6olULDI7h9pQj11zm6VBaaRvbXrSlRngppf9q63Oih1WWaY2w8FmTa6v+8iyhLTQa3ikRkFWbCwZJh1EK9M8BuI7yHkumhauFbjsKTVIEh/GMV+6acdl4Miwu+ILk57E60VzxX490eEvfjuXsHNki2l2K0C6RDAu0GnulkzPovxF9+RGXMSsYbqGCjImY00YMXMxn2vvObJsDTijrMzlialpKsC3SJ+g7iHJFEcAD4WwXAo4vQW/nee7REh/GTkciYE434uoJkLrGVdu9lVRwQMYiNAZZDajIZI46b1ATdIfKP3RzlKm4dI0a+leFrh8amPIpCwleKbRbs3n38VZIbIpotn9uTnL5sUmkTnp7XihQs3nRBRBSc68Iun9oENCfZhiwsJBvdtAFF8K1Zuci127wJc9IHAdVrwV0b4Hm3tzHUjQCmay1gzdzvjiXSHJMbRy4fXAa1MBtTusAMW86jgO5pV/wGhboJ4R5xsxiZfcFPKO5Uo+4H0rSOiYTKgtF2Aqq10Xmd+/2uuKtkV+dZaxJ7MDBJcOLBGy0sY5LhUo+02VIU/IgI8bhRp5zxxKKSwvo2/3GtwPmuw0RykeUBdMddVx/WTXyoSABKjJgC+katu/NEPXt+tIFsJmBT82kBgHLnL50juFjCy+GkrMV3pqoiwNEZmoeYBstgUXkAU9z6AoHJsfrnNJX0TA8s30sd8kQ5Ce4icfvjGNY6amOxmygUTU9yJRycWhfGwPveyZ2XQ3puYVD+wu+baJPsfSvrr80vIpQUt3WkLmCrfkoLVMHOuNLeHgBvrG7hHBaLCw0alLtGIZV2CsHxZKEJV2DirTFoQA6vd5OoAoZld1C4d+kN2DISJEdWn1d+X0HrWy07tiHTKWr4SWiyTR1XjrazvR7uUOsYEzPJBZIS0DnQiThr0hiZu5GIk595r2EyiaEwuUEZFobCqFeJlBALGWhEf4GRuZy40ML9Lw6FGqwbVe6gfgm+sxe77rjK869ay/0jHdGelwqkcJAZ+ilAItFSc76J7zzq357bU4dTo7BxKyhHV8f7pPqe8qf242XbmbRRPhtwKUWuREY2DdiLiuQQOuNeld6SeDiiKR3hheyu1cgeXii6u/j8l+Fsx2Jz3R5AE57hcVI3h5gx1GSKkXPLTOZ3gQMo5Vkn2IBfOFCPceon5zotNn+fqkTWkT2rg22bGHNMVUjbk4da6bkgmQRCaWMfmUvQyR34YqZwxVErM1DA1zophaHN6DyG9S939yCnHqlhVDwe81do26doRD76uKNV3LZF3fAROjezR4dgsk1gfBAYaGQIZFuqA92HqNt4zf9o7ilnatNbEayKNl74HkNQRzK3XRgBooFbowHITwLPLlSWeBF4sFw86ZnrrMR0HB9ZJ99fT/RlEJpjaHV8HeApy51IsYR7a+WBUBhKG82KIEg5PisP0wqmLudAp7vOnpwCkzJLCpIF9C80CUzinIFykpZhGGHNRoaCkCBMiDTqG9NK5596yNaSP1wyWhkYj9XTOGEljb8hVZC29lSy7eInNbU3SjJ6Lkm9SM83Tldxi7uNzAEpntlOGL/9EXlYNU2BjoIxY/KBwV839haelw7t/WRI3fbELjnO53up4ZdoG6roYeRRFDG2UDAaq4v9+CEFKw4LOo81m9coCUyg35cN8eZlQJlUNdUr+OL3h6O7Uitl2m4U/2H12SOawF8Wff6PJ6Hlal9qs04un+gz2J3cTODHnybzfKu6pkir1envhnq+8Mue/7c3sZRDkS9hjfZxMK4o+/koUecysk9BE+FkzuztKnf+nFvPb+Abedz2eqSvAg6JQjpvfT9WPPKEpQff/cDH14ENZZHKX8wLHQjNNbO0z1t+zfkjnHtxJy2BXSBwg6GrgLerDZoxR4ivo6EY9v39gflfvuihrAj8XpxGEejsKrAlbV94bJTLPcKp/OTdnKRU11pqUp5Dd7uIDwt3HiqiCoOtPjrwfJWAZt4Gbz9x9Lb8fbbMn82VoMtLVZ0DC4SS4CnwfGX9HQpK6v4SZDYega8RiFQ5W6bZiISgpR2pV2ARlb6xzWjC8+esH9atLnnjvY2FmApWuA4NjdbM5I0Gx22A843iFgS8UPimGEEibKWQqySK/eOamP54Q7e9wwtXR0LztjI3ZqBd8vInH8o1i7GLQ3zEILUqgyjlFZ4EMgej61uGanG4KYbUvkSTixZLo3v39dXV7HPPMioK7L6powxF4dj9Of6Sk93dERzJSjstxLVv9le2DZ5ODUPv8TQklHJ48kTWixQ/2DJyv6GR1aySc9BsvOUBctHGv+ASBO72hfedT2p5TYmKKVcCFbSzWDLcKGmUJPK7f3v0ZnM7sxx3Y38dve24yX45tinK+ULPlcJ0hcS72G2eYZ1+kS9Tk1gmb09ZG5CgypvgntwdW4hzU31xrt/peECDvlMMChhj4IzhyYwtKO4p7WCPWM+5tQsaX5RZqLMlSwgfvBPpO8uEQJsyklM14ffYDNndbyvJbKoM0s/xz7pw4KqUtMN4JhOJLYTFmoKbZxDvMkgpBX2F02+XZmMKNRSyacbvq6SbXCASEeHbjL3Xce9oqB+A/Wboh46Bwm/U/BOzsZfmuQapwM8ruwtf626XcAGf36JqqdWgfV2EAQh1qEtqERJ4m63femH3Y3fY3wAC3QkAwWe4Yz3+U5Y9+iceJU+vSlxvZCp1DEEB0pSqnoqEEw+96LNUbmhJV9DjyWPfX/JXsPdwh4DB7yv/4nS+rrlfZ8LsSoX/kmdbFo+MqV0/p53lfE0mriS+4B/ekrj4eF7dQXq3SJoWfeS/P0lXqwpb6e0vEzscW6VS/E1eSpR6f2jbpiXxKVVcSviAtH9506dZpSLX5zpT6HMPet1MtXCiefwSa44VMsKV3aBSXwIbL9atDiq8/gEfhGxM0lcI2+ZBm60pefwGPQ7zkMhLefw/09EybBGy3wWh/wWF4EHstcOzHVmBHDroN17AxI1YnhcYKfnXuoN69mE6ybADyYbhjONB6tqzMODwsNr1AeA6PSgUnXR37nfjy3DlAWTwOPRcY3QQPqHo6hr67OMNmjVkug5JMNvdevrTj2L1jn+90nXz6S9f4HRzLJt++b5yViblEZZgK/urr62GJOqWt+i+MRGXU3kVc4bs1vcZmm4muKhb2rkqwmMLk1Yv41BcB9tvyB8MYJ3fOpog2X73uVd8fBeeAxeAAG0hcu9V6oqbhL/tndzfy3+u75GvclkPYOrgDnIUb4ileTi5mA9gTDuf485dcz6ai+QYKY4qDWQ/BQHeUjgLhNSDFZ54BGN85tdKDJWjF+56brNyag4+bnA8rgZejF8tsH7vuTQwlb3slNq2svO5/Y8H/05bGs9w/lI+ce/1ExbpqXiBOKSzET+FXpYf11ph20VI+8Peyq7LvTjS05TWxlMlQ6Nz8FWZblq4J4eOfI9iMfAX/XuH1p+6U7EHzh8pwdgC3wFcm+70kIXGqW4ZWCT8nLtC11OoPGLmSZKJv/4IahmNRoPNn80ZNbwhOeMn6sXJ6KPNXHXg3hV49gZtVb8BW8bev92UMOY3rWSnhv5mXjBNrdOQdlc3Bwjj8319oBltwWOJaHvwbI5X6RN19dMZz+xID7yWby+SvsjleALbRDFRxsK+yElnwA+++zbfBruDHsBYR0+SE7Bt/Amw8uP8E34W8AwKfA4y7D67NXn9tnHmr9AsIEovPb2pmn+oCpqcyAQ0+/rh0efll7+GmGp5Tpp7HJGMY91WRYCqN0N2E9Mu7tbWpsVDdzCcu+wz3S7u1vAsLb9O1SiFnbMUdjSvZYeHKrm/Cv7e7Zml7cfdrJ2eQP3p9NMec+rqUgIJy517MK65DwN5cXPrWVXnW5Si9+all4t2AO4u685tTYd+VlYrUTdorFsEddVSaTvwus1mgPbiZSl8EOmArVg5B7QMr6Py7PX//jQ1VtNoSwcr67ga4L7tEXBKN/njoXb6xHXXAdrBjt3nCaaM2MVqaeE+MEHvghkJDfqZWOlZZKd3Ym54/AkbEPUxuPuFxVe9+X79v+A6yDE36AMntKPwRvwxLyeTG2Ne1ogN0usBXzsiP9ldsOa9LaQneu3EltM9NQItayHzTlbQTzQ9ouJPGk2f2Rk3B9SkhPmWWcZbZNJOq6Telp9YPpR5RHUgYdaRNOp/PAxexK0wHe4+xm9CQO0VS6f1pr2fZ6pzNJX9qXekhxSN9XpZ+pdTmvPCwBRTMl5ZV0B4tt8y/ZyDvXYOqLxNteDU6/M4e2D/Edy/DkV7+9P/Ut/uoW/2rufuf93BRyWNnULXU0Hck0Xtv91bmWcsmfJelBW5aIpO7XTiiBj5EPHgQHP/gFgiOIkJt3F+/KiV8GXJhE3WS/ALvgVETa3Zg3b4XMgE8nHwr9xJswBCTiZtiOvyZAH5yn/jK4DZLgOVrH4BjMuALgzfD/gi++/OdjS7VVtEWt78F+eHBkCrwFDxy9/clVHePrI30jS7ATju8/++ZdCAJItgyWdb+ewGi3Q/1559/P0Z4hAWOkBd8EaKf8SNoIklp4Sx7oVuuSY/MRqXjuZhJVFI+PkTGoCXJ6NPELhiBBaaW1hkh6u/Nid6R8gy6MCnoJMOO5LIRror2y87Px559Evk23K8ilTEpYtiiexipOlAyXBlbKj/cVgAMITjUyj8nOk+lNHdfUg01GyhoLTy+jJEDtRln4wNoXEfTopwRREh1H7GLwLFn7yFm5pVS6sTOOmDdr3TJ8slJ7obRxfaS6IWAXq8Es03ae7MRaY3H1t/fODF7fhnetXJcZ29jD28I0qMlDloYmdZGIbuc5c/I/WT8jfK3K3KoU8pPzs0hj4DJiy8HDEQMYBnQDj8FFkFEcMXjw4JaSCxU1z0dHa15cqOyna+1m5mJnJ/OS3aRVtRUmXerqSlpsMwEiwv2wsvbFqMv29iP3mHW7NKmMx3iXqCeLw9PFDGLMp3QLElGhpeUFxxnsqfFu//FEQ+Aku94s1aRWcbQlQeLNuPrDe8HKTbBqrdpjKmmYORQ+KHRDFqAsLITMyPCBmYMGuqrVlHQxJzZapbVxKfA2E0Agxp50lr4cbdUstFbuZKjdk07xpRq0k7OvIT1PXMSS26N2WQz+R1h9RbrU1PIsyWTYFbP3mRz2ku3yyOhZQzF2Btv74a8t0otLNSHvDIU8eweG44EdouVhZf2L0dGK57crW4dnK9UXShfhSwqjim9VCPnyrERKk99uw21f6ujb7/pe8PI/d+LHJ3pdKQ4OM5PElfCIKCwJT1ewo4IZQWG4aIo8m8BLzsmFZ1pYuVACseIK6IAA98rsDmsQSi2JkoTsTGZOYGSoCM1xKvmCijZZnqoNmy9lWIQcXootRuiflxfQtU+RSU9ILmK4ghODIzTrZSYPQ10cfqmYofwQVjWigMupt+aqu1z6/XivaQl3K7pELqjS6RQmJ+dyG9AWOdfDMJzlFmdWIrZeqSSoH0eddb96eWIZEfcJWSjYjI0SbY7GRfMTE7BZkUmZCN0cwphRaMXjycqYzRKcQBILxHed4E/YK+IodMXr1zU7y5gp1UZFN2ZM2C6KPJy8q8dqrapRR3cZ090QaK7+M0qWSKbIpGSKVEohSxNxBRVueB66lC4IdLePf3CNCr1SCrhME4sn5hJRWCIex5VRQqO+DLOII6YYyQkSXsbG0VXnUxXHYO7JQuQZce+WZM8vvIgtyUyXJBIkBwp4DHgMFscAPBbaYCvs2fP5lcK7cBc8lh34AbkQAv2az8v4ft6X2gugMzde0QbnoFvphoyrqERXPk5tQv3aRoGInliSLulGjyToRREHNRMuU6HZod7cxTKku+E8dDVU29hIa0dhTed3h5awXRR6UD7RZjKby9WkLspybCHrRAsCt6oxqrqxRim7+qy26io17AJkxMBDt/Ntl0uTP3QNDDxwlWXg9cDdj0sxpdI6Nu2UJW4aN6hPigskUVYGqeTA+Qv9QBPUWTPxUfog+U95RFi8yWKHkz4lgLNCr1xwwh9YIliDun7g5WqDguLwwQO7HmzNbFsOHA4PoA8OlW5VrWpxkPv7QWPyDbBSD8uELsWbrtQAQDn1ptl07BnlaEWWmqWOhmJITZDR6S9jPeTMmHD4TrBluGA5SmROlnfjDxi+rhiEVwLywwaSEVj8GnF8RYtYyTJhuMp4vlpRR+wi1PHVNqOAXVuvzpVUxMwoUzCBeKXa3iLVkZIivo1xT5I0kwfimiVJNl2GoWO7IlfaSPo9OR0svXApb/d335Q12E/GbzWLW2Rm89TL3LvItNYEVW64I44RXMstKuFrzd0pKUOYC/ZrNhgKVQj7yHgvL1FCI77NIH/ghAWI631xceyyXAaDo2DhMtYVOyaG7E8ZmsxuQS58mdzWSz1dqEpoKsnoJoNa39RoeYiD2RZbFPX8GxU5hmTQzayG0gZTUFULXA/hJUJZq8V3GY1uyCjQr292kTH693UfOS4wi8KOqHf1WT9EFPdDYYULggDEOKwO+KkjJhDTUQ4/gDtXTWtMz0GQ7B6HA5s+6YDfLkYubt64vaMCzsHRhyP4R4SnJ5dqTkOwATqxYmULfBsuwlKVDoiy7mIQyilYBEdvy0sQcHUVSefz3wsuHc+G12AcDlag5/+Z5UnZKDoPh74aTKJmPmXxZv7YA4E/jJxW/q+yRozvssD0G5B/Xfm5tRktUgY25+DKgfrmq5RSDgOodxaliEvAkhWtPzwPRGYLlCCtnUJCpPIVPAhXKjHtUwTuaz9symoTSPMItB/diBt4mhXOyazIZcweV+a73NaPr/eCdAGo0HNzmNcKxqvBoqliyQFgspB9prx3f3IJk/BxIg2M1zipyfclfDbzn7vw4/u9/VmDnJRMPK/oREosDqeUbyWpMrfkcndjWMBfyXXnfDzX60qq4PCabxb3w01/lpmXmFyYSzAs1bcwdci/U9XJ9KuyKYY6XvjR9ThxtTRDjWK9/CXw2Ls/CXh8D2rA1GKVkyI7IcWmGMg8da7OReh8eGNecA6c+c+d8fHV3v6sFo5oevQBE+RlRGWmM5e6Kw4w8l8h70xN76HkErsbYdDRqLoqeZOPXEiAgopvYPf4phDb56dzcOjuSoGPS8wiCu0PJolWQcncJPygeGOKgcf8/iTguRqYYM7FPIpXI/hqX8eZqf2VkaHhLmTQUBh2ChWSEoH73BTK0KWwgzPIEHE/UDVjzcLvbXxtdpIkuTerpduvmy6ICRGiY6NVJEp6vsm3SNYKMKaz+katyKXVU7HR+rQGqxo0gUKB3r+BxfbfgnpCgVAvbJYHRsCOaLhVO/BUHTA1lRIw/PRGbVWVAjuFKYmI93oLxrKlSbDkT+luCvYQ36tvysmpa5IsBTH8fuDfa2gC1jWAcvQ17AYeT66ugX9BIHXdPtpY1RI6YNfMdOYY7PvydKd9GsxR8RPosEw0Bu89aIpJDRPG+LjT7z2o2jFw3WaeNauwDTyLJq2DFxgyCpXgIWLFgs7olvPEQhrxDoP8NzosFPcbCifSOkfExXUjRdJZCzekK6VuUllj/lqI2qqoO3QFqskuxwJ77bQXsq5LyCtZ3+ApjLDxk7I2c+Lt6DQeRUfFhbElqDD4LwYfR0eFqTyj3diFRarOGLV+dHO1TrxVp8J1lpU844AXXAQeXItP9nvD6FizcAp4LHRA0IewHtKam+U8EZeIU1ETMK/YYYitv9MCYAxJb5BU4aUF9VpBG3JCvVV8qcWeobDhxZy/sD9np41wLe7rlfbnowXy453t51WoOc+X50sh+jwDRCLG3hmqCVk6u1XywR/YwUNY17Jr/wcZqDGPzsywq5IJZ3ZqapGO1e9/xNApXNxqychpyOTOlEXWSC5NOt3qnYy2Su1C62jZy6VO8BThpVAWcPBdopGU3dEpOKXpnuUJPv7dMagfBOSi1KOF9033o6Njs5k1gXoCM1w++juOyU0GUYgfPv1nfubC45sbd246eXbEmT9/2T4woJH5884RhomIDWbmP3n3B5yp1kKdyc2lHq61mXI1G+2w0GbYyJNKZGTkwFE937+ZajPyxeJ0vkGRfD1+NMoAniDM3O/epJ5mhV0JqDEzoeLZlknHbh0jIEE452rbnkoCpqYUAe1Pz9QWFytmKzwlEbFJGSbL2cReQlC6m5Ae3HulTXq9YjbSUxIRv3EC2W1O1jL0TlteTV2JfB258frr2o3/iaXqo2n5lkatIJ9Ntq2Wawd8FKZ/LcLscET4tkDv2rbRzpaunsxYf0X2x53pwvczA29J5nZaupF/bqU6oGDxKLISWx1rR46dGch3ZCJ57t2XUpf9454Mq9yNaQ4yLSkmqis8hBIR4gpG7QkIhERxBp5nz+vKIqMdZrVl/fA6KbtcrE0q70yAps4DXjJJVO26vBixX0EsLTJJSIiLFCDoS2E6wQ8C9fdGYB8GGo5EERIUlliuuDJWmi5OIFi6eUD/kzEW64GvJ3I1ErDcN3pRAlRV53WfyQPfX9OslxG8PE80zzNZy+X/et5/dQIVER+fTefloGp9hOyIozysgCsho6Me4Sz/wqbxk/k7GvMA3FsRuIR+FP7By83cSJcKsmSJcVlSnw1ML+TnEfFcKzbMUUaJ3pWR65U3MiLvl8Pyp5ADlGNsSumQtXqHKlq6h8rzc74Z5oO394WWhgxulR3OSfRrjTc747MUrdSCNEYJAxf2FyMkjPUKg4+ToohiLpcnqKvIH4nXDyyZqubqq5ouv1vf7+2zfoHDGmI/GHhiqo4WG97IEbytWXY4R+bXRt7mTxgaKm+RwOMK6kevitKkCb+Ox7nuNKEl3meFT7WODCnclL5Cul+ccMt7qPyLakLyBksaKolQ/cV2hHydjJ5m8OSJYuRExJovqwihpFmqx06o+rJ2yPuWOGFuhUzDiBQGyqrXADqnnkBo5vhs1DcjCWsbV8i6+d1ESNmQZgnq1fT79lUKOHHV9k9mAjuWtBSqYv6tmlQjfVtImRm1ySe+ASy+trZjskCzHf4OhkPavu9PNkT+dXWf8Qo8kMQsISYF8UICPVEKjVEK6jbhPsRBefJXdquLABaAwbOofmx6dFto9xdHVia7n/xqoP5PX2NISDZn8GrBz2T/oSFyRMHqwZvZHGChC1hodWPS0CTztcBYhorm6TjRVr4aXRfRbdbGG4piJZv2MMfIJHNEV/AMo+ZHF+m4PDi8XyhqyrBih4g2bAaJp+S9D18ohVwSNoNYgh2yZoia9gvAmTIFojJWYNSZ0V0R+3lzlfz3A0vPRvN0CdEWvjqivk3MunapJNAyUO8rBTyyFI4YoCI9OGwWfgSNA0OiP4qGHIJPJkF2WDiDcPceNG0fRmNA1KfeTrUU/sjEmdjuNuzUYoQJYspCzMKvo9RiB6GYf5iU820ftzzJkgoiR+5TDrLnyeSIN21/gZzIXU+oHXAYTTn2JNAnUGYJH9jZ4SL6EoNr0MaORJGAqbur22gKkqEUdTMhos5TEn3r6wCtYLZnVcadWw3Sry/a0q+haW9yy08tBvQsfJK+qade8nXHlRtVrWIjjahbY+rZZp8fshO/9BJ2dcYU7i+qOSV4r6Y9dfWxx95thw7HVf37+DjSql74qIp+49IvaW37/uE+aE7LH986XLzzBUvSLdcNFFdonrUfO2TOEKTxqSUBTbxK3r2yif70PFZ5cnY/a94UsaaYtIsVbGaRKXmadCVHHNjISQLEaNOzYloPLbPIvSCrth8VFtYmp/AqS9MGFFp85j9F+bJha1xosVau0mTE43LptMRRfh7up+OvQd9Wv45HhprpKmNyb1NJh9JBtH2jj62r4E46E2LL9MZqiqzifuHsMfd7qb+9hqzWdSSvGRm/ee6HEtR0B/wQgrn4tf77upqpqqqaqaf6/lUw4+jaT5mWZLgFeHlDVfXB5gEDHKkOz6DvEU5we1SGYg2Pm1kg1z3/VCAhilJT3ZztLLcqtTqr2No5JlCJGiNMUrYzmSvS0YlvMRylPIJ/ZZOPMj7btVnFt5A5yYhVwgRNL2WC2CsylmUVF06c1FeJ2kJtYn61kSdK+Z82cEBxrwdn80BCagbZ5sfMKGVQDCSeQdfN3cnqlhjyExWCMkMSKrJ3L0YEmG0JSTVccREJ+as/S9ZZHSNpeKPO8v+OTstjOoIGjgPfzhX6/4pcKQ23VrKEWrtc2Bg6kZqqgKxddWN+KqD26dO6gKkpgqA+U65V61/rscbjvXGviiu3y33GOsu9CXI7x7wJwJQAnhcw8v32mNzUAWdkLy7d7O46mbfA11K6wSIQKIem25ENyHb9ep/1d0+X19iaLbVeRkpWILbQwwa5ykjE7RvVb0588OaoIaeksDDHbhgF9Kd3rvj+Gedbx6YiJse97drkNdc6CqKwT7HZ6Bz3oKdvEpL7YZIk6/cf3b9OYpbEl69IYgPu6vxAB1/gEIkEpQ7BTkoFCeCzlPKFqsTsbJk2yEmU5XaXDd75CUhf+F8B7vwkgIKVNRafww8/IfY6suM/fEj3vdC1u6r5wgU4u3c9OCUe3MMtKICzY9dkVG5X5YbOV7RNTj6Y3LVjD2+jPRgvbz1bWXDJ6Sy4aElaW85VFl7MUngJDyhghxz8uLhqRCiV54rCd9kIeNsHkeRcFgbHKW5/lD1+aM/BkXRdbbd+Wjaj6S7WjTsz5duaLfvpWY5LWTWvp3AV2aKw2UxCQrKMin6cH4JTFLceSS509gmFdalJqfZu9Yx4WtvtSN1T3ee8+9C+yQW8Qiy13+9wQ4NbhF/FO6WnH5QEze7J9T/57Jf6seyheEsWvQBGe3FMUEwyHvOKFRok3ozB4Uj6dOUWkrLlRLPtWRwsep25uuTqWFVB/o5M6yjSuBmVV3nsjC1+lS+uCMdcESsmYCVck2rbq61OLWCn4QxxvfxW+sIY+t3nv8vZ1zDLLM2hVvOicZnhKEYcHvOKHRpqJIRh40nFBak7SNbiNpnMidrKUqKbY8rRDlZmfEt2gUVvzKA4PTTb/azbsDZSOpYUnYSc3eP/BSFOyMkK46mciNygHASbZF5rsKAruXA4b/+kiD3Hj+6IBm1PwvDXlo9emH6D+L+3/62EHHhTyPM4KTAyKIHNcByCH7lUSJ3twlFxoOI73GEcOLskEl0QicWo/2FLxwAG8T45XEamyH+iK7J/O+bVibv3IpAAvNxLD50IVNpXbz7JhJvmnLSlPekDdb/GgC0og85DrrD8MatLFX2/nhggfDKatQCXXYDx8Ql1bpSAeUgTxaNno9nJCliVur1LliQyBpu4rY6K51vQ8SnyzVMG+P5MswID21CBFvEjwMOMV7ggk7YhSTXakW9z2NVaWyLTnM02xuaGUxQqMkWuZscnpRhlrfzkxkzTUlr2iX4Ibgo6lomqwzSmDbMcZQnTdruKw5mdtLQhX97JMZFNV5f1s6RRLKkoqmLdtlmadYMGtcNiykSwQmarSwhypa9faB9utzv39+1lQ/WHG0mcrnFC4QiSJUUp88NBtGwCX4fH1787va7YXhWE6xfyXw/AF8OeXZ8jvLat1F2Puvo2CDg73PD8WPp+U+vewA3egHN2E+3dd138mjT6KIQzhjJzNOharj+ZLsyIoDMy9W2E5ABuZG2eBoTLhtRWq1pjLRrWa+yfIIz6LBcH8z6PMn+RB3G5z0E0boidTlJxlaQYspqjxafxy/OZZI6BJOUKSTi2lKOFubFOPQmoyWbghxCm113X3yn9a/ibjUciDZs3Ck+8JJdOyFdW8SQSFkWcOhK3iANsFxAwGwk5jj4WfH00TPXB4OnDHuaOp5RNhAWYk6bC5n6Bqj/iTT3oo9ZWDfpjdDJ8UgOd8SOfakaf8AYfi9l4QwTjSVtyJieIB3drOt7sMK2P+q4P+qoP6y2b8AtO+kgk6KPB1AeDXjbslPVMQVJGBBMkrD+hj2Lpgxj68Ditj2OWTVCVEEF4aq8vVkwNBYlhRmLwSYzHmWh9+mjV+ujw1weH75Sh4QciguIN/6VkkibAiw8FKW1KwcpYoYVk8CUZRCTDlJVBKqDQJHFeB6yCDjWkgIAUsCcF3tiKFHvIiVGpvMD6FlstZeuSbc7dpYe6y/51m850mzdyW06V1ri0eXffC+xqC2gnQjV1TioFW9sbCcWxsjbuzP35VqDtLnDGhbuWvheVXYlYuQLYi0EMYwSjGMcEPn7LKXDE45NTS38RfCMyodcw+R7gA/ooxPbAkeCI98AX9I9Ot6HVtCZfUow+L74JxQY2RWMm3bonAlqTkxTqyg+A1uQkQXXdPgOjY2xuUQaUyCkGWpMvCUzPJI/xdnJjRWuaktRGW9AfwbzJo0WhJJMknw7QgQNTyNnAxtd2Dwyae7xWq0jSpKM2xoDcAUonOYsnCUEeEKrNSyijhKjFkxGDtssMNNcl7ztKVd9iRZJ8OqEIM9Ne2t2Im1cmajVJmnRgO2/9FDzB4PEzoL08A8hB7TiTyHvu0J8zgRDUwzBNLKc+dIupDPU6k3RB2EAIXB9cAq5mE0s3PMDvbj1CNfRf5szacBelg0sRl/Eck+QO/btOT7diYhGewGg/ejYBmYPrp5Hi+aen9Zk+SUbvVfnjdBtD2trXwONpU9XPGgP2yuw4n+m0H1ilZ5MEdUve7ev6PLjYblQgICP8q9L8/VQL0T8arnIH4Ov31VYA8ONrPlm//JgSu89nwAQDCLBaT2T+uWJ8798JSP9w/1f9PJxo4Ds86fwao07i29eiGNr24Hta9ZD3xPxSXZveVKOq7GIEfWGPdRhaprsNzMvVB1AUzO1I60d/8ihGim/O+UaKexCPih7DS0ws8J2fIug/sO3Hh+upFiIobZKNSXSsOou4fSOHcAhTm4pP6ZBzjGaIf20n/OriTCFG11FCyIVk+gWTEEcQ53qtx5iO0hSA85VOjjG9oVz6aieePF5DUyJucub1KIzyb1xrj/fWh4vg9f86a2EtEwIPJmrb8O/Klpmt2bVUnn5ae/AZ5HwEla7peoy0ZZFZkUhLHWFtxb8N4VOppdGmIERy1ruaSGJ9plGuC/XleqXqUrUk5Yi0e2PXEd5IFVZlqkZ3c6UtojumgeFJ2x9AnAaAv+xzSKOHWdFqjOqrmTVcyjquViSVJOaGKaZGTdJW3/EpMnMS/HZtxJOKiafHqNR7cJ+FR2ilCYWOKJtNb15oK7OaM7B39BzWCxEekdVECCfOyLdkxu/TZrxw4RSGtHqob3WIputkwovWXZKzAWkM8E8c5m65HK4ktOKW6q141xuMSo47jmVNqWzbOHGeeilDaK6kYe36XD2VKxUAOoXF8x1CATH4PaSfrZ1j+LwlNteOms/rICo2cliHmO4ICX8cxzuDKH4iELDGYiqyELNeNjexwqWL5YoO4K1ItuMQMkTjMJxwGIfzNzGO4OjUOAp9W8ZR2akcx+Em0K9GdwJ1DaVZ3GAcAbqM/ZT4OBbQaHPN3kYG5x4/ODibQqE0cmJKaQrkyeDESRElyY56EHRIpTlbLUuCTpknRy4lkUmLlPIiIJbPUCIviWTpgOcFzBXBm80hIBFqlkAKmRTk8szW4bSMi9uLliVHmRAuLhEvSwkFYPMkIYc1JIOuBGFSh8n2JMjSpEeftzxKNrxZuJ3yMjtBFJapUiIT8JaOg0OKLbSslSPg0pHRCvmyZLTJAGVCS4UMhCtbiS5zxnPMXGXSOciYtJBAHvnSWUoplSgjImVrugLd3qlSdAwKOHRbw9a83aRQb6zxde/kamBwWboeGXqtZM5CJkvDrGS54prrrNmwZefGIyLA2mh24C3Pprd3x1057lulTz9n41y4rptW+4GHcj3iyYu3jB7lI1ie5vnpxQt1CxFKIcyIcEWypIuJVyV7oceUylUEAWVmB2W1NTuo7ddXKVqVGrWqbVRnrxgTYsWJ1yxBonqNFmh4tId3n2zMMfNCBdEQHTHgjLM2+IvmCnBs/bR/hwYMg4lYiI04SBWpqa6GmnI5Ydr/ZkJLbXXAQ1c99TXQEHWqjBjbjbAZ3ybnLcNGpcGPmn32C8TEkkLGl78LLjrgoEMO22mXU06jYDBF12SpVi3aLJJqyGInqYQRS3SEMRwfTTqCxGNijS3SBIQJtCDlyddUM8210FIrrbVhhSDLPfHcU8+8mBoQpldaai2r1ZnOap8SB4fT5NCnqrxq5CVxFCpztSPTWb3Kmmr1UDuvpDUc3lEbcdVN4fXS0IuqrZ5OueWstbrCKb1fbjlJwutxmMDYebWxtqq8eni8KargqaPomV2WtzdkTMeJ2KaR0kDdUxhHH4Nsj0Z2TrRSHL36xQOBm6aQ6SlMHUSNY23I9HmtrEHL2zbN+xRk1FS3ZlhRVCPjXoQ+1XkOczRPW2tWVD8eVMlHlqQwz634r6N/9QA=) + format("woff2"); +} + +@font-face { + font-family: "Bodoni Moda"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Caveat"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Caveat"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Chakra Petch"; + font-style: normal; + font-weight: 500; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Chakra Petch"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Cinzel"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Cinzel"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Cormorant Garamond"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Cormorant Garamond"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Creepster"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Fredoka"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,d09GMgABAAAAAD7MABAAAAAAjFgAAD5oAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoEwG7w+HIJgBmA/U1RBVEQAhFwRCAqBuiSBkDILg04AATYCJAOHGAQgBYRmB4R7DAcbgXRFB2LYOACY7XZJZ4NpGDsG9QxZUZRu0k6S/48JVGRsq5h2P+jR2KHPVAJ4cBoOacZmZVNpu+5VGbn9ZIs8bfffBX/1WKLJBUdNoRdf4veUFUa8UO7YBc0dRZ1r7ts0xh8nlqAOyg3BqgyVdgaO81Fzf57f5p/73gN5D8QYQwdIGUUoFmLlHGusBhF0uCEsKl2V/6+ijVp0yvMPh/zOve+P3aYsgyyQMSZKAWYWUdrjIX+Ie3e/dduY6go5t6vqdnuiCXo7A54g3NqSIElueH5uPYNY/L/t/79IVn8J21jCqAVjjBzbyJRQRAyME8E740zAQhtU9LBO+w4rzqjz9PDKi7IS7YG15SnwmuaI2aFuJclfKVC3FLYlY44Dy8zExAjDwp34o54RraZiX7GvWBBLxVKxVOwrlooFHbZMY8xq6yuM/tjEwk427F9jAGefe1cCPY8iJM7A+JZPKc0yKJ7dtfRrTbkT6uYawYXmagH88/R6Xi4/BS5UcctMn+BgMpVsGgLnotezA0AlgK3D0qE2y+Ha19D6DEOg9WhNfuK/PoFhYVXf7bP7Tb5oyDkQCGRZjbFnwm5N/l5VXf/Dxz+BpOQj3DpUkS5chkVSah+mjMntnwBp4/MLOolyA2indEoaCDHNpdc5p8ne02DGlSmk0tRSep0yzN6SMcPSpjXbVPs4ZRiGTKGn/ua31tGfwDDrYdbRXJVNBu4ZFLBx7FDoN6q7Kj3V6ZoMZBYzsw/Zw9ljSnohk9k9RvUEqN+pU2dfuhdGPQ9fy5p+R0jCIGnHSoS7rBRGzGz+dE2tntsLuolBXQya7DFyJcI6gHIq5ZE4f5MUYRFCmMVN9b7bv/j3aOcSEQkSQrBBRER886vbhqkW6Ty2MpAsMCbN49UxjzHN+sGfs7whOJCxj6HSPiOAYKwA2ACW4WAo0EuqWOEUfAhhkMFGAUAIKJJCkZHvfkH0IOpbioah0KGMhMIjA8mhfQtSIGl0kCx2ES9Mmw642+6U/SIIAIPRTj3adej+saNEq4CP3dfqwOt9dZkVvD6X2yzAQQCAzk4DAMFSvGfN8Z03VgtIX6XzgPel4RsJnMocAIxihFEQbUfn2RlpFRUWOmcIBQC1HNwn6IVl1B8/mMO0xu+gecYwhNALG4A7zT3UcCONahNrKAhQMN7xUTzJF0h9GZbEM4WJgVg07y8CvgvLagi5vnmxQz2zDos1K1rSvAw/Krr2arqS2OiauQ6U8VWVVlBWESgNZIyOgVCIxLu8yKMMI5c7paO2NORyzuZ4DmZ3tkL54OuzJstSl9mZmvGHMjKDM7Ci+ZD6FCUn/farTWrio8kzMg22ImJ7Z4IwQg0REfDPHSo5fvjkjf0MMtiXFFh+3wdvjM4padt4rVduxAWxBs66Ec6qNdPv9J4jjw447Jjg23HgH3EP/3HTGDzx0XWfx1XhLh/bWB5fOrjwN3zCvlQjSyELi7KZv5ZQJcNrKrmYlklWdlc0Y9FQWzKaEBQrLVShQjQUxjHEEAOwXrWxD52eo8z7jQJTCPxACoIod1gMC4W2vqbGd7/Lfv9PP+SAOZixrj6m9nvQyseFCTp/Svh4tX27j/Y5qPWwgQSGWyMOLuFL4JIk407XA42WBF1vutedrwzGiEwy3T6KlY2DYYajwwCgcBX+CjgxlqEe1kQ3CcCJa2Wc0DriEmATyl35abkCyLhRaHlCheNL3LNQilQiWjoSBhUuq0QrU2MQuWHaIKPNE2xBIsVCW67G326fQge1/rHb0b4JmFD9pAAQSmg54998AA8AHp2gw7698EP9cwYRO/L2kv+gQ3P4e9b84o5krvmROxUuCSth/QLvqJ5BOjCXJ+7erlp2k32v+j8VSBYEHjlZbswBJBZNmQV5u+Zl5aG6mHTqmFwiFetoAV4XfJNBymRrn+s9ezr+k3aqLWmteG1l140CJmnpQ46jKR0syqILzllb+yAFYSUm482ns4qZVwISWhPy8gscwVuSvUewMWNa/XEG6iTMFuyaze+cqylV9zVYdWGnoJuWFrR2oyvqTlWxKAdwraefKK6X8ajbOAxUVBR+SeoHvnZuEJKiaNhV+yvZE0q69MlDSg/hLRm6Z3V1QSCeLbQ2Obh+Vizjp6RVuOBclyWOADw+C1qCiC8af5lNnt6JUghnERJ0XWayWFqqVDY93wUGYbJFuGIXbbgdry5uOcFW2yTa74BkGP56nJzCxMbFE6vIBXpCjRQZC3ZepNgFMwjzmjnysNYp5ihuzCz6UrUd2ZN3Xa2cOdu5q0absji5q1JM4S66S2ViccQyBhw3LMbWi4k8eo94iGCQlorJlo3hgWwshStDy+X0XFVjGqFgOGeAO3ji8P6RRwgA1f31Lm2PQyfR4mkKifoi1CPwpNy6dvLa5quhV5Yr/arUixo7hdWXqouoC87Z32fXoTkdezL++OTx5FOOPDYrJcds+hd2r0WQ9ijnKPyIddh4WHKYeFRyp85tHHw6uHpwfH7Ms7kzl5ES3VUN6kktenHvyvWcTYVojkuOYptycwDwedR0Iv7cBEoh3fa0MbIYpTDxbKtkvQXc0FZsxJXeZjRdcPDXTJgPMmR6kIXCuF+PMPcnlHIYN0tHFRFoFsWqKXsEhWAqIbNDN0sYgI30A2xFeC6dZlDLrJinZazS2sGxQDpurN1D4B9xdcsHpb2sXabScY6ZJ/dGS344NNE339Nd5OiPer6Q/0tzFp78oWlMYmZhZWPn4OLm4eMXEBQSUVJWUVVT19DUeSGgOKqJvHmd/jkY/4WKp71uNkR1LdfJLeEenp1sERdhyTgzMbOwsrFzcHHz8PELCAqJKCmrqKqpa2jqdFV9uWmu0Q24h+cLRKHJ+XqDAxp8aD7k28Ffp9lqPlNCuwskMASKgPghaUeR9/dN86Qrqkj612FhmP+Bule6urwPE7gvXmRcvJgAp0TXyGerZvMQxEI/xitxcV/8NcLsQv2PvEdG1Gi02UWq0sFxCvu40UoPi0QcgR2Fgcuzqwp3TgzC0MjYJE+VeXBWnivyWbmyog+wHFYYpNHhKrYyGtPky+U1qyvWXCVzUDnn/Iav+PPBhvQkqo/z7PNwUt7ereg1nP2t8UW/C6YU7gYDE0Zd0O3OOJzyUQVjjG0ZqKhBZpqpeHLIv/P47+KTLUVexrNLRJHJ2flRa9IJurW6kNpzFmz/ehq+nGK5xDcwsbBxcPHwCYiPdYL+pnCZoj3jiLk3Fy2zlawryJvChrH9iRBCCCF7EEIIIZRpXUakRizEJSSlpGVKvihIMZWSsoqqmrqGZmllnYiur9etJIZpZGxiamYei5tYZqyINePN3WhFl2twU9zDV+A9HuHZmQJuOQgMgSIgfkva4hb/DvLWNkMIIYQQQgghhPAGvoliP4mHhKSUtEzKVwXFVIrKKqpq6hqa0fJ0olt3GEoppTeULiaEEGF+EISK7Sj7GLkOdXccLxOxWQHGWDnGVeLg4uETEH8pbYyBSczF8hgrYYOdg4ubh49/IzB2LpDafvkehVBUUu7bScANAAAAAAGABAi6BEFAgjQ/CQtCbwkQ+VSefT1bWzPq8RbfhImFjYOLh09ATLolq6xF32Ac80xaRaurYYzC2MR0x7KQ5Sd5tYyW+cS16cc3YWJh4+Di4RP0b5fTb4u99lUkY2diZmFlY+fg4ubZd1lGGBElZRVVNXUNTZ3BVD7ITtDoAJ7+vRf0jBisufh7H//UHbanJWQf74e9ZQkPdMy8tze6MbTI0MJr5pGugsLAOSCBIVAERKT0uuTNN0wsbBxcPHwC4iTvFJRU1MlYmZhZWNnYObi4efj4BQSFSvgDEXbPwtv0tzXuISspq0Q11NQ1NHPL/MdV3SaZ5c455xzzID8wPec+iFuNhzynBNtNfaqwtLLu9AI3gcAQKALibNIWMd7M9CjzYmFlY0+OkYubh4+/P8FEEb8ZxZo4EhtJXoMa2h7TskIofl26a1EsRiIWsUSxOXPmzCGMEUIIY+VN+a7U1nj0eOaf/8/57NQtz9/jf2KxKY66Hu4RT2VkmjWeqRNz1j400+qHbjjXThh+XzjYZniNkRQqz/29KJJzHIBag6TjCg8Azw3/B/kMaFiMsxocRmEqsfVqwEBQBPP6fOtADxB/rjOWAg84HAGAY48WsDQso8BIDf9LXCPGnSvBHmZ46aGVfW5vBJHldFtGagObE/8d56YIRuJsGMEyiXsRsjosQ4nGrZxtGA0+mN0ZApcwCpl2r5vNJJdIhVNszGKzhnRrTIRho5txrD/ezAxuaRyrFREqYyH4HRtnAiLd0oEGsMfNAdDj2DpapUq4B3MsYKzJSD2CtSd6A5wkvoeMuLIcgP/0B4AEAKB/PQpAjIAgSzknQF7bv3hXaUMAMGTbVokoljNViwUb9ABw2htxNBdwhd5IhnOarYcykek8SOaJdaYUabStOpEy/p7vrd4ZhBM4Q3xbyBEKhGKhTGgVJgq3SsRi5FMnIBZEY43tV8QnA96KbglZQl7laKvPX4WRKMd/dz+S/h3//ftX/8qDuQDgwc2DQQr511MfcO/jhxYkCIBWizcAPfHwrOhRJvq/a54l9lvtnBaHHLDeBqtcVKfeAmsstMh1V12zzEEIicLC1gVHV1x8Ah6ERCT8BZKRU1AKFSZchEibrbVFk3Xu00iUJEUarZ566S1Tlmw5cuUrZ1DByMSsxkCDWNltdNImDeZb6ozzzrrglCPuOWq03Rod88QJN8wx1wPNDlvhqdnG2GOmGWZZjgaDc0CgY2By5cSZCx437rpxJOZNypMvL5f5CBEkmIpagEqxokSLFyNOgmQ9pOsug05f/fSXKk+xAoVKFbmihEWVagPU0rPxU2anXbbabodtEFSdrgEAeAYA0FuAugA8TgBIHwLAbwG2Mi2yBUghgzxcI5wBS/EOUuSKN5NQj4xTkkWKPS+iPJA1oUexuBgl7bLuAR/wqJt9w4RzsTpCB0TSW0IYMR4kOI8AAC4qozPrIwolbaSCLDbbe7EkakwNifWYNA7CefVAyvlWM2FimShXDtx8v3lMJjjoBIu2s9pphnnN1/JVR3Nywe8GM6DcbOFe4MBaVza76EqZLRsjgmXpVC7nvTaXhdk/JqodCw7hPE6j06sy597Eosk2f3+JL0UJlfJnowgJbGO2r9tXHbT7QAekrrOt3KfExpmpGzACFuMJ+ncJFAl1t3t6Wq3Wg6qOx6u7Z6F1R2e846pnS2OIzWuNPH/F+50Sk92nCJJqghNfNynUcXl9AgFjPEiL3cdkIfEHJeXfWDtRB/lKmJ12RNVinrhla5bQxCp92q+bqs1EZ0cRcrJAktKULmC/BKaMfB/tzIC5dwaMjym/4AGPrWL3Ky3Hk1b4QkMLFQh3exgtTgYD6OAY9aywNcwYvVKuj5RkpBmN2cVD2LTYBMgQEIizumcUAgVBpAZndYQwa8oNUdMMy7T/mRv8mFZgN5aUsvba1NZGSBbH8zE7pCzEjLUayMyGfMk7wKRQcWH3YbXu+oILvgycUGfMGGeq/Nwv++uzA9jVf2l5EP+p25Y1m674B0oNy8MTzhp3DLFxs1NbMe0Jy152nQmTtlChoeXyvWQN6wDHpL68EufqJvXPrPKUtgRxnRh6wcQr8BUymA0UaiRcOyZRvByyOO3CaEfijSdWjYrJ2VRcnWkiP6vFPtNm3mkh/UNdyMQtT1cCyq87YuGfcg5ZE0cbiY4EaCfWRdOMjc8DOzWO8ELpwt0ZpNUzyikzldih7unS6XW9tRhevQ3lVE/nZN+yeWRlQiRO7r5u6VMJCpVN6qzqmI/WA0ESXT4uhONKtoxxP8qN7Aw2LZ61hYfbwzcPnyrxTxaHxjimdUdUe90BRH2UAoVxEXYSry1SH6IYMmk96qqog4RFmbhQb7uNXdvSUtrlZtu8ZlvRzJyti5EcP71IrWr1E9LEU7rr4A/jnWdgz2DR1TlNNYi/I7Ngc6p4wyXbZoWf8CB1/0c+pAJGB2yDGEYXzMgxpI3Jlv94gOPb48No3di6bzqG8CbQyDqbY41XmOdG2AIlRlScYjNjK16TJ6f2a2fX3+vD1KFyo2Cy1e0SW2ITAvsp4yZFdP46inRm140k9L9/LV2nUD/2UVQXevztZHehlKVmdAhdv3yypLU6cku0lucprDcCB1nnezp6kqEcnY/u/Rr/CK91i3/bAeT/t1wY0gkxbOXggOConWaf64sh1e9fzMnsFaBm1a0TNFB947lMdyVp0z/nf5gyvjKAxVnIJu+j/KBJe4GwKQP8Psbm9PS0hp3U2n68tCLqjuz/k6cuDIwVYa3d+j+Ex1H3Ha09p3mK/6ag0mSM+gUsDzsDQmIjHrcv2Z04YhoozmqmJja4uUeJC5RPhX3etUDnRGJ1sD9Bl1V/q4uB0w2TI5lZbAXZicoS6Cgvi9fVEbkQHHjILMWROghOIg8eGDdSIthr79pEx6NxsPzqFhzs86Hln/PlbHQuVJiOSwCxz6xaKDEWhrA2F5ejBFPVcu79SQjA2236x40K9XTFhA5aD5lIZcn5OKl19Ck6WfkA9YytswTgXg0tAfeOS0+axNfnsl1Yip/fBUvvNk3e24u5lGjTnWjJxj4ZFmaaLjABk3onCSHqUQpaFgiXue1RY2xw0qNTEuuFg2oo1uyB1MQxDigyBGflBTsCzIlKsLm0a9SRWhDZ1KewWTlNgU5x7fs3nT6msPSxmGhzP4eEBIpc5fJxRktZ3MYNINZbOyDN73380DXLgdV7WVYOhY6gVuXXfErYap1tM8tickczOs47ribQLU3pnkeOWpCXaBa3iZbssDxg9bGIRDJrsFhbrmnjtUTPh5VZGQDkr1KvXFrU9Fkx48hzvbC7BaBlT5Kc5+9YbMHGsE/mgHRbLF8rv5J0Fn3PfS5UWRq6GHhZdP5Xx5/DsxFt6gw4q+EGe1kmpj7DoCfk35TakIVowu+XKme01D70UYWRN2IV9Z9we6/OEOc39NWF+PjojT4QOgnxAoskKHH0vmitmD+LrhyibHt8fm1vEd5rg9Zwgkja94kx2DZvjEvCs1fZq+92nEAEUCnyzwliqjK37dEEzuACJthjr3rTkM7Ocab9Pyby+G7BvKKn0dr6bUKbv027suSSujNHXu33qcTkT08+vz66D+wqU0qMlG83DMPqH6wcIbAh3O1Xg27JHRT1J45BemjtdlSqEdYHC1CoDDr+Vp52AUy65WDQv8o2l2YQTtG2MPFWx+7v6fBmx0EORiDHrrortyMIv/zRxtQNEdO8lK5U1+rKGSqpYTmSG5nLD+kMAeIjRePGFNk3O2MRwIp34R7tvBITpzDhdT4A/ugf9pklCbHc3iXNfdNbJ4qQaeP+RVB/kKzWDCfBpDV/uULR3eoWSobw0hERUrPSlLgo53PvVpHJuIi00JZcNIxTqjZSvoxt6Ghixh6FoqTOtEQaATXqKcC8oj6WZzdAfLSdArEIKRXEp/+oy+0A/N0yS3Gp6kpxL72/4CKJraDJ2J1vVquM5PtTrtrUsD3N2zWhxp1Aj7BKFwIxGrVn2pWRMNBKI0e8kmbVzTYgj4L4msYXDU3FUMunYPbcsV3uSprJoPIM3FTxRClS9DrSr59O7ieeNUEFw8JZllLs2nF65GNISAVFMMN8y0i563LhP6+Un4dXXA8KffN6AYnMgOOzOv02rHrRQpxlHeZ+ybfMIac80il2iUr/KKAPLVOTJBk9CauzPfCrGh7ZTyG5zhNnIBW3I94oMbZBbeKVsvyRqG8zPR2Vyd0cxUiEyIxGqjYX+VVFdxh1keNTULlaLbuV1xBtiVbhRFlaNosSCp1LS7npuERzNKdEoRjuorIkN2dEHyuS8bJVaVDlTouPaGG5BBH5KhQCid6SlXvzcDqC8lIHn9iBFxlKCL7AJHjl05mLxYPxSmenKbH0qHrCZgmxcMMl9ESQOlnsvOwj++RBmXcaMiD0c+MpmWBrtxZY5YqyB0TI0ebetXGUhaEFUMNm6cN012Oq+psNQTMSDgiAKCoHsc2/Pjsts0knQmJYCxGMvNO8E43+VXBXhMqDfPg2jiMv+kqP5TqaguvYLiJKyEibggruNuxqjBLUMHwW4AkYAfAuPhOvlkOSAp7SFLywIUPvAsjwNtZNSWbm0yoypEoHTyxPJWTpWUkHu3TpWme4lX4iF/jqdByIt5LucwHtL8gIK3vanBjmmKLt8UPmwsu1GDjeibEQwjvwqmNZ9u41mBAp8P4mX6NOLovM7kdv4xB2+IZQIC91RlS7eg3iGuU/sEU/NvrnNdFuk4yjTogu/NkGf3d5OSBaZ8zFvuHw5t1SpG9wgEKRn59OJHAHHt1+v7gQN8zfIp3fW+cG27nZBN+9w6xN2+ztxDbiTgHnxKXD/6LB8XSZOVSbZEF9zRJSvqQY6A7Spj/4ZwJSlGib4wvrXm3J6+4y2R2Ts/D751e08fhk6Rhxp+KL44NjA9rKlaQKju+TGTcD3ePPWlmzRAtNpqE/orG1Siu0QL9C0pFs2Vx91A0qMK1GFhPObKKB/dZYWTEJzVTTC4dJAHFaZ94hs2ETmorQY1ime0PumJIGbCWpGEXHlqrRSz26T/VBcCHCHWp67M9TsWiei7h+uk14KbWjl+zMjXZmI/ViMD+YpnwntHq43/3xg8FoAMVLsYuiW7DGcz1gf1nmtIgDrK2ZoDPGJjzOch70ALwvxFQnZUESUfu4HO/M9zmmO7pV603Hmt97cOWBrFi+HbubVqYwu8K3OdnExc45uZBM96Rf0LmREzb3lWAxzur+x8/H2+sjgyBH0B25Kd/5cii04qr521kfVLNfA+xevtvRCg/DUfYZX2HGTw7+ZgvHe4zqkbOXbngHA+/K9c1S4t/jQ4Aywdq/YnY0aS61bRegSAj/69gDovjw9h6B6yhVWBqjal+8h16XfEGidpw2ILa4/KHO56okp6Gh3yaHivQlDf4IHC3U2Uq2zmo/83XiPr21ePPdbpOlRdfjhTjto10gFyLb+hdRzweGTNpWAVjaxMFDvkQWN9kYV52RThIggJlMvvkRNnuRMxRRGafDFnY17TxfGjVx9IwTL5gjxLJ6mDVk4/biFFodZQSx3gSMaqm6jXboLAFundgdzsYwNMOTzKa0yyvee+dB3KVzgRZxaUX2eYRH5auqMENp4RA8qqcYz2EbUsF5rIwfq1ol9GUwQGGOnZglwDxYJOpRa7rDeKiFhqnNQWlGYk6ny+0eh9MWAoBTWmGXqCpG3b4QOR/VpoGmWcas4CzQH9Y68tq/U7f1vUGHkL5t8/45oWwS5BQ2QoSXA9H/3BKlmYVpoIUkpZ0h836LW+P2DBz1t2/7WFSLQYdgUy+GLqGT62+8gM15+Y0myvMfq8jBXb+y9ppgfdvpqNTENFBBIuF5FB+lJhxhRgUitdnDCdf74zZko3YpkZ/S4hGonmXflU+/rZLGMOpslDgMZdBFWBx13JjZ0qh9rstgEdNcHZYb48jDG502fLTdn2etEZj1bvTWxB+XwZwx7mlEIvHduf6RTQpDkdTllJfGxsnLkpyFEoNssaNqM4lIJE5LKmPDSwc//86NgGqSpp4AlUGVMchpkDJUl50fMSMjK6I9p3BKZOrSgm5PXXx0c6Y3enx9vGcFmExiqgBcynFwu2DTEgzrNcGjrr6F8U4U6TRSXv9ZCZu6BqYnFvGeNVffIOmLlwL7VWA6M2OaPq9EO8uXoZtemD9DnwnCbKT9rcRJpKAs9zQVYWT0XcKJaF76uLjY8SADsmJamuxpbIum4MQuCG9HkE46dBuL+4Lyiir+2ND+BkQQ0JmvBvutKKbyU7JgpeqWPwDHMBQbkqeGYwK9wA8NJKIx6uyeRBX4wuKPuRk90P9HKGFPTf+/IfAwyvLn61iiofu/xIupuWkYygnA60y83Bk+CRhEYio/XA5VKbGubc9k1AGLZUBMpCrhCKqIJ7pokR9WIS9hfzSoOX5AayVcSvGrMkRnQvQehNZFh8A4EtHB3ptjUAralzNySljIZzn7RRA6IJHHZ4+oq6BXNzXS7n9I5DPdrh+ihsiValBF0rpMcDk0LgVlML9sQd9D5dbTbkugL1JRqnveFMpLaEIMsOa7/cxUUmaa7kkxzCwqn2JxJddQUVbtKR5ja2HFZHNKgbFA7kyWlUSZb6rE5HylwaBKdMtKLWbKm+UpgN05eRxshEIpyW0WxxDJhtYi0QM4wUnB0yUvdbrzFa21BS3LrEs3zy2sr90ctWTpHFBJJoJxKl9R+PS0tPAZvpImg6seNm3EsN0muObGkH111QW//MkIG3vo6F4jXJ/bH9pvK3eYx6emmyeW20GTvnXX3fPPOi/vgshvMYv8g16+bvv57SOwvTsUR3nhqndXA7aDxivdNnJI2aHOFL7HfXo97nvnDVNvz0KX2IM7pCeK5bL0k7LtYKh3esrf6ziu78Z4Lk0wOtR4rK3JKQZO8Rxh+q0htWkVMA9+9e09hEStiXAZVKFGf4308g4KA1ESekq43aVGfrgEV6q6iennT67/1IS//Hm968SimLPMpus0ifr+0fCdAEZlDlrjsj27Ap///K7JvrPdLZBEuJhtcuG7EjuDs9X8ixyXWoz+Uk0C/usr1jwkevjT60J8zndcziUCxuKeebuPYHUJPhM59XpZqlOfwwYZO6CgDhTpwaCrMVClCsVUiZD1ewjrRNA2nAwqWM5aTXIAn+DyqQxZM2c51dXZVltstiWi2p1LLov2p3/e/El4c3KgPgKYSKS+6H3dilMFt2zkkkHZj/zSP5vZh8Oa35WmfgZYQZTQVsbFgpatc17YHmVuerX8mWIxi0JjLwhe+WbjkPdaedDIXxm2i4WMhaEUmN0mW/N6zWtGBwFU0W6bOdsHq5+TEi6alDsGRz0jySgJpGeDxh1s18UE0vNBw3aVGWRszfCcuFd1HwqoMExVDd+7X767IONuImf6xYRLCQsJPuChsEmMkDjJWH4SXLUbofe64FX0eirJ66pj5MGmTgTrNVHAT6EMERK5vtspiNT58HinOFcfKc5JsPtwbfit08HsIAcTJWVTZ8LZnBs+hUMpS9JoFUkOhUKbqJK7NRHypCQFwG5L7Ng0Sekv6czwyAx+8x2h4a1EKNzz10y+ePBBQ1d7kMedHkoRBph6XSb7Dzs0Lp+fmFGUFKv81i+yos05irv7g5mZ9TqaiXN1lYv2x/AixxeFH0Kuv0WUdB5vtUzpFg2MGOKP+WlkzmvtNzztuOmoMABMhMhMicUuyB1p5OdF2TIkkRqvJNYmzjWaxHmxdq/EGlA55atGsvPlapWj9Gs1bezORlUBqI7iV6Eo1w83I0IgJRkLRIkJsrzo6FutM4FeowaxHRP2rGmzWn6p5LP7e+/8T9O6ZbIkrVbmSpJr6PVI//LbxFDemsmSzq2fwtcBhRCRJYm1i/NMRnFurC1LEhGZIYmy8fOMIwW5FnuGRBpQOVjqpVI5PRLlDwKMBKSZ4gRS/cyohQMcUNLe16ipX0R2ezW19BkgFcdz7fYcqUGXLbXb8QKzCc+z2QMSjS5NMFXt8LEq6v77a9nBdfF1t/6Zu3wfWlwS9f3XNdlL30w9+8zYrXQqFG6dTuZxqsIjktRKj1ancrsVQArHFsttiaJ8oyuhoSneo88QjL8jNLyWiEhwikjGm3g7nzCuPdiTGxcKPw0wbzLeoUoGj7dNFp4sXg16KEQdgF8puCtsmA5K7EXRPSaYOYK/gP0OqlSNu10K5iHYKKGut8bcYVWA/heTgQLqsuTT6gAiFuWsPEgk6k5vEIoMuVHSYeuHZzJRogNeZxL5bvv5xis6r/iqMNtgEGYf84p14W6Rhp1tSo6oy442ZymGcJcmAk+04UrlS3GiRiNJHALlUae6NhN22EkZmpao1scUmc2Vrtuwn4Oh1gB8W3WkXBWdbMt+mPpiNaTMzfm5W4mhHD9lXuuJFDKKRlGpkwoY9ELEagqrl3qr88wCFHvggN8lyNyDIj1JEHNLiAbfC2WpUEQVgHcZw9LGeZghfiE/ic8P8NkTxssGe5I06mdHFOYLfxxcDldyMMSaCNfBfiuCcQJwxaa1/cmu7SiR2tMNbhGEqtxZm6UvKE5Da5R++CX22YgVCDmoE8W6RoI60mKfuQVwlhJlCOnWxiOjjjAltUf+0F3plkanRclqkq/DThWGqv3w9QjMtlEsreDbI25Q9k8e/vSdioxHVTH19zKQzIyOOeGFUJYSpQQ38IP5Hb9NfsgN9whSeFnG27BTWVDoclM3q5UnIdVPn1VQgm6UyDzc5ZDnm4x4ntOZJzO4Gm32sUkWeYHTniuNzFG5lWqPVqtwu+Wa8CSlyq3RqZOTFeD/Zem4qX7TpPp/r0qK6+ujV2401adE6MuXL19SPu7cWc9EZ7Jji2U2l9jx88ahd0EV5NkLd869BgaB+GO02xpKefKn31skmm4AkQMMQZEH2yCXiNuUbzSKc696xR++66KqhDNhvwplpNMKoYBqJ4dkhczdw+WQSS5Nk9uhAKrpzho/12QU5FpSzrmq/LAuOnhzK6FI2K/axVY7FPKpshw5x+BBGpd5xxvyT5gfZ/NKNJEZ4rUGjKYLJZIs5aOkkQ2Qq5WJII/d55QVaQq5a3EYUznhTPdA5H8bJMLzKH4WhijKSHGjlacXCiibvuTtJDKOUqADW8wMCumWhEWG/UpwH2ZFD/cs9lBntKzWPei79j6Uqmnm035s+jkF64tcs0aiXJ0qNDCyw5/c53OPLsjZ+i6yEGM3piHUETtSjGdPwn+qHKNSQb07yq6ET7t1JaU6d3SKPC1M2fxXE4PJlYuZOum82//KhDunv5opijge0rV3+j2U/fWyMD6q0rCFeMO1FiFNncCRoyd2cq5CFWwgJWhttGW8iG9hPwdFrT54gLNI+5xJNXUiaG/ig8EI1fwfFZ4SNkXgA3p6YGrSKI+2K1UnYKWOfT464YVkhxKFg6aEh1hXDyTfASQSzTP6UNeWQwXRB5YvrejM61tyZLto5sH5qYXg32BK6CLWqi8zRjz8e3L3xHHaOoV8ERumEnYwa9XjwufsmJx0e8URurQxFIaHOqLrDQ2GmMWvwJ6mn7om3Yn54ooVP39h5qyrRTnThGrKeZx7VHNn1syfvsGtV14Ik2aCr65MmdIX6uubVze1bhkxe3lLKunvslMFscV9N07oQB+SXk0nlU3C457Cxo0o1muE0xjZGLE0EbcjsLkLQ6MD1pMl/idxjg17wWIimDBNzp1jp2th024M3WOiCNwfRJlt1zg0XdMgetiKkuGwqRdFNuKwXdhUAFUqsWj4rzqHKKKSyLs5BZA/eomoAqLRPKRCXPjSQQvokbywpp7OSF3sVDZSbV4mrY3yuc00qSrgWSU2kmajFC4d9pfksSfMfjLvMUJxqUKxO/pP4jVeiM1sE7I1by5Dpl6E0syCsTsiwx7Ip0KXnHhXkjTfqRpxSshKUnUhg5FWw5tqUpgbhTnEZYbDSofpPTO8D5/9wBcwGKk1NEpNIfiGDAv3rNgrBF/YfjWKqXzwW2TK8BUIzfI5jdoV9V5Ajpq0SfTygM4BpWTmnWMohTkeNz0zFNAJce4wgdv6p1cBo3Sf+8W2vqBSEW/T72KfJmTcs5v41DCR2/rncFEbBaFS5f0dI4RRTD3PK6DfTL3rhIWQ4w0VpQalLomnCHSZOm222az1Z2p0/MfWr/UM5LPwsF+WiCRL7wv1cTaj6FQMeBhp8mm1fotFE/BrTWavJiJQBiMC3t/JHu16o36NNnKH3ngUKGCTT3QUz6M1xMfS6vFcq80nNhq94mgbnktriI2jNeC56zNElgLtoTA4SYsGB8STXHEmU1KceGJOQDwxKQ4EENlSVgVbz2ZJ2eUsyaVj2o6nTwW641soe548EdhBPkbbjsCkAdKo2sSCBGeCLFGpJNqFkdIJudE4xalkMCLkFGNYzp1ccbSn3hRTkyqOq010GNKN/f8UwaaNGLrXRAFSyJgrcJhxFy7R0oaadTsO/y/XJomm4tJRDr6aNrEXQ3smIoraQyzRn/NxIahh3Fw+/e2ssZ542gcbojb4BBP5iTLhnOUFW5de/oMRH18+NgqcImCqAPR1HBoTgIKJ2OiW6fVVfnNWVUlQxZ7kSYbL4Uol+MOW1J9w3eu+TAwZO29+aEjwy4sHTw2IFVe5SoV6jxQZ2rmypm/cTOQl8wOkiuQENMgIAOFLsGbCg/Yr9/Q394coIeo00TZJenhi9KiKGOBKTq6JN08tyBB/7qgtTpkkc0FNHdT7NWbMZifqdE5WFvx+znkbU55QZNQXxNgM5WXmJJ96110ZPjhDoXo0JFXc3gDOElBzMSlWOjG20V5tzRW7lQ7YtATF2umkmWhELiUcL4otTxwVU483WomjzYAHJ9UbY0sS2Hfyjp3et+/bZR84UeZAmS4hrlhnzI7Clj5JcS7Zt3997VG2Tpz+b4Afmam2CZVyhdIuDC/6Rivk0XdfnYGnXBeJ7uTj0vw7ItH1elDPIDO6UIwHtYPlgz7MOaRVxBcb9IVWm3ErjuSaBPMUvtuaNTb8SohUcbdDpd71vxwfXAxWnZ/hH1PVO/oK7ezZxoCqX1C/PQNLeZsXGlurNrY+oC7bPN3QWLNpzMMn2jGU15mkB1syth4Qrb4c+iGQPOkmCR2GWkkZr19kEd+2E8jYjf/nJao9v3ERQhiHi41gyR9DKnIfCY3AHQ5pRIRDkqbk6NbadAMFewhnZlDh6WeIoGvGgKRVfsOlZpvejw5HgjnBtsFatuH6A3Gs5eiUi8SMiTaT2EhFxNKhu1nrKley9SCy7UjowwGzz5CwzKHgMmfzIkNr9cbWX6ibly00jP5ioBIbpJdsfOK2FyHIekWs7DIm6OAwNGLKexqNCLNvosx7bErNx3r5ahK8PL58BC6Qjn4sYCTeL1rLFjHuXM2mhL74EETFSBiczJaAHk0uKAn+iZQZAs4eoRG85MA7BvGc4fBV1YOmvNnBRLqYvpVkY4HUU2TrRjKZOUik5ZgdRreI7docJvoqnQ9nsVHsA040qzMz1eaoTKUqzcx59P5Dgm515u+kVx0IrY1OAtcPRHpxvUNOXm+BGb2ZWbs6ecIzExkSdjiMtVMpizBI0sEJOyhhkmpaLb+SCf/M1th9N7c7hLpkXGVT8jc2xfxAZGq1Hp8SmChBC4++fComGCXAlteBpFyQlUOizhk+zEtv2p84iUGELCVcwUANTg4m0vlLZ4Ax/fmT+NiKKdg9EjTUYiWCUaMIaN/ZU4DD780NgKxydCItZzRTcHE3pBDiSP6yVsq2sFE8rBt7CcsVUGsbwPjDmMIH9+SMbDClD94A+dnombBcHq2liCF0x+aTisF4JcY+T9/XcBX5GCV6ml6bLTSeW8gobqHyc8CrQwjBDpViObqmmCJp1LcxvOufJpuOiF++uO0SHhl48t1qcUKBVpcdIwr6pev/LfXl5CwWclro4ZGjxnIkCj7Z7QWPZWiofpqf1JaBWP6JJxPTdkS++PuOMC7SOey7ReKEQo0uJ0YY9ODz18vzyyCbgnZaFMUnW7xcsZIHWcaCgpfCPB4rXCJ089g8YG/l2FAuF7VzuCKUy0FF4OVCOuCU1gn/5pb7P5dVC5yl0wJv71t32XJseWuZ796G7kzIrxe8qPRXkl7WC8tRAIsQctpCn9kIr6PRepKgcv6BMfAOKrLbDJexlpn2T6bT+1LZKy4xOk0rChj0H6JYa4po7ZGR10aQfNwDhbRmnmNPEJSFTqEdnM+k/hCFtp9HW8SHprneXRIc+A5QC1Mv5CzvBIxb/21wz8xZdmEV2Km4ZRvW5Fl3ocFacOQb95pfGoDuBzLeg6I9dHIwmd6Jop04BHQ3yHgXgnXipG6oXhXWjU3+VeSfTcbaaUh7EHkuOagdoXViZMDZqHZrzAFZMzo/LR2dj0+wBNzacIjRRqU1vSQHyRMK8P5pudhCvMocBtHbEGobDvL/g+gdVKQNJwvNeBW6MHeatD+hQBFECmqiUdtk5PBkrTmAT0Dnp6eh8/FmS8CtAc7rRY///Bu/hq1KeEUnU/YwkPL9IUTGq8zVGGiR/PX7YyEs7aQhHTKYyp3C2s+eJjnvTrokb2WBPa4TlVQY66EhPRhIXE2W9iC0HilEU1Yj+1itzF/MltvoNPZ+1hQ1FZJtGH6FiB5f+0sCWrDVpa/opOD95QhjDwzR/81chV3D//7+E6irUasftkH+GHQL+WUTirSPJH/28jPyyHaE1jySDFJWk0bOpD1JJCwz2hZE6sPUfsgG+1UY+LzTP1Urhg2z423qGpwEuUs4vkn0y4I0SxuLLSi9qjnRi/4bJXSrBVomeQCAfvi3CvlX333X0hoSOr3l/Pl+unxgwNHZv3Xrli0DnQ4g3jEHWrqY/YGK95ccX3X+fMv00JDWlu++W2lRgFcDhL83NxpYcJSOyRRGwSxJ6+a/l9TlZa2SCsJ1Qf6RG4EKjf/PNn1m/aoCf1+TzzS7snyu0V+4UF9eqp8TsItqrZ40uTrabpNCavL8/dO4XHqOWxxCHG7+7eHcMEHP+RQy1YNRtEJ5TFAdl3u/hp5pckhrU1Ka5GkF89xpM/KKbLMnJwcoQ2NhynoGQYK+n/3MGEr/2nWRhpLmPsUJHLMUfGcmlqr0/hgh3xblmPFL/SGOIcLjl1v1yVK5XcP42uiMat0SlfTd3rG3CtVeDo1YFkLXpfa9mPOMzRSz+Cibt2XJ773vHJAoIL6eTulev0zt/I01lRL26yh6TmiyIY4k6paE/TCLS5vwAdBe0KAC7Kdk4BeKXRblPelx7U0a5MFuoh4+jcZPwc5av0M9EMDuSB3I+gOnbpK8406MDHosZIbbGHGSsBY7K4NenP5vkUbccujShCiHwWJMLZbHq5OwctEwxp9/fC/4bc5HrsT7j5BX9Sadnsa1yRoiTEbPsoljDVqJ+1OSBTe/CPlWSC/tPlMr79Ci5BcdH0F6TUqDMDFR2JCWEdboTKoTelIbhE6XcEx6unC0w1UntNWZfFpNwGzQeH1afdjaNsNA7pHaP26OF1M5Ys0NifgHjQhdyfHeGLnz5Pm7VWss4bF+VhIzJz6elZPkY8XG+FluZk5CHCvH5WOBpN1zLMjDgp0SFPOIw8H6Guk4YqlyZ95b0vs631rnKw7NOAeRB9ND9cSGl6RaWeFZOWfeto5Jucz1XP5DPrhynfK6jMQqI75aR6Eu/odIId5cTMUlpWyiN/QnmFBKTAgt58BwqGvc9nHbkmUkKrGCGEsc+4YCh5YRb+a0GoeCQ87W5Ey/SSwlgE1z5U653KFQyp0OuVx1i9lVPzslU7hEl0XiC2LhJZHoEhh9g8pxwjrYyaYhb29NQh359LMTbZBEIybFk+xs6gsYP0wO0bs6UrynE2ASqclg/nKVnSkYDhIhURLByXx4L40Z3gSvn8p7pHADP6L7bwoJBd3Bg4e9ujArQTgalm5Ekc4g0pa35JEzKLTWIOJU0ssZVMriF+SJa09tAP95KG8cUMbkdKuywBKlzE+PmZQDOV5TqcoDCvt794SsWV2qdF+sJN599NzKUG1+KJc9XKaiJ4N7y54srdgeZXEd+uialpVx7q0OWoaqiuZyro1qO8dJ08Tpm0Ye01+YaSFw3Lvzjuf99SI1WATjKSEbT7l3uze4mEq8+bdxlBJjo03GTFt/qmVXqL/ZyOZYegp76xY+TQ8x05VL69ZNubLJ0mN8uicuW63Jio6O8PrV1mi/OtwbFaX2ZYWD5ZdFud0rjamQj+0HBErdm9R+o4etvcdImDbkCcMNm7hh422s2K8sXeNwAc3E+ivph13o+OOfBSUF2mgfGdemKqRf9T+1YnR2xQUaRzvxzfnFI86BmSTTwhCI14TLCZmzU8hBHTSkg06KduInf3E740rEcdL4ZMzYMQL+pPh97UapUWr2KlQphoQl5KA2hNYRBM2ojoPoRyOOzaCY99KxPS4KKNya4dn9/w2h6gnIhu8+qNhdH1+6f+8l+0X7jSWzIsnYLgptHU5mQfR1NMoujMycQsY2UBhaOodBpVN3TaA/WIiyApoKlysRlOODJkN+9rUBCOtFsE4TeRqEz0TRTgwCGc0ZexTWk52hJ2vB+zFjvhlf0T8gl/U3jm0cs9oiG+hvHr+qoJUx/RXNWkxm+elq7JfJv91W6xhI7yBjPQjSQycbyfROBOmUQqv28LK5gmw+731Znu+ZOlBk804UacdJUYe7IXLIxrOjLIt2/v1+BNXQFy5ft9N0rC/+Svzlvg3SnRtksr7RT8ZvgEm9E8EqaHg/q4sEbxj/0tE+hnnDTumGA/GXE6707cJ37pTLQMIbMraBhnbQyePXlTttAwYdmIAqfdBdOCsaQTkO6D/Iyb7YbsxHEH8H+qYEp4pYJSPPHIVJahrSMqrr4IEOMnV2G87hjPln004qqUBIm514csQE4pTWMTvyvwbfjqaxs0hjnGSsC8O66KQxDISxhpxFAB+J0B+z9+6b0+S7NGB8PWfpsmXLWkKlA5d8TS379mX/COoaEG4V2U+piKLtZdMMqo40q1QnYeXtNjbiPlzzIR8bg17MjQm17hiQHeHigxMvkCu5oEm9eaF0evXG1l+pm5ct0u+DksmN3vLqQIAilddbUhXIyZSZrGs0Gut1kfMNpoVXOgjBsuqsgsrsApNhjrOOu9qRBQPB4iovahWnxg4kY3j5jHBj4HEkO85CJpvSWfUKZjLJErctlc9mtRXcEy7Xy74IVKfgKwymSZXV0cAifMb1Vc3C15v+5PHG2iQDVzcElUfWR5pXdrWl7q/SV0buT2vrWm6pi4wsB6tIAXRdwD8BCcJ418IE1/k3mU+ZzEds5mMG63fQvZoTfAAm3H9UlWvffLDHKrm+lI3K/qNS2grcrsHBUaMXvy8DZbEhp6aR4WmnQnb8nlMImr83FEzcxdjHI06ZujwoJJ0ET6TSqqkUTXDQV3kWxUhmyV2Ys/UbPndLcfUhwAYgAA46XHA8UXbTXBdP3ubQydvVld1y2l3ltln2Ykp11y9OJNZggq6+v+BosQXlvc4RNq4hbLyEsHEJ5sY7qlmpyA3UCpEbqHMiN1CzLJE2PL9awhTQIUoC1oqSgMuiJGA+keBVRImvESVeRJT4BFHiKVZEKd5kaTBuQf1NmHRGz0G2rM0QcLT25bJbxlRn39tjADhJuWsVsNL48RQxTRgiadgspgnjvE/cp+P93z43nzpa22t/+yuc6789ZeVL4nlivjBD8rFdzOeLCHPASAEzniqahWFixlWiWZiwrGV4omWlokoEXHu7bu8wJeTssDT5WuBi6IvZiB5tZ1LdF+TD/8RoC/km1ZP24hD5Siasx8XBx96/jPG9LvHzfYmx+1w0yghwO+7AN/EtfBvfQXcfsbg7f7w55sOvqR922niBexkABBwPAQD+HwCw6n33TnlITKSAWMjpXHRUW9iq7ue+37q5u2hXL83UkzpSFGzUReXvlG9jbTBH2k+SZ9Ie8qlnCW552+jw9n1PRxwxkQJioSjp9bnjwiAmUqDD/lqDc0Wf/VY6Vu/IWlJH1pMn46/ht71yM3dwPuZ7qeHIWlJHQQKUYP1ecfnTtfsW5WHW7QW2w7ml+Pqer11Duh/KxupB1pI6sp66SvB+zbMwyFpS516PvwF5nQZCJyS8sEzsCKAKIm5croTHrjeZntfyxSFZlBchsN1I+cozjZzqZR3RbTgA25dXH1GXkpUbuvYvLymIqpuFlZOarqUoEZHYU8GVpa5rpGRcVJ1Ctb10cIIAYBJ/2cL/1CjR/0g4/gIAtMzf6QAAuDcxKKNzyzKR+jkNgA4DAIAA/m45gHizW/5fiHrIw7X1LEVUPY71nLajEq+t1F1NdXzY+yTkY+4dS3vAEHbWd+/S3U1xoC6+aoRPezpUCf9mSkmFhBZZ0VkDp34Hz/mDB/b5Azl586VkX4ktEK9NtBnAr918el46MrUInTP4PSCmrXjH2ZVA2Hg+dTPBGT+JJu/5dQTjpwhuIll5zAh1mervycS/TGoPxLhIDRL46gq83d0FH3ZLXooLm2as9cJGiMfpCiKtmw3s6/EiaqVuFK8sFx9XKJosLpN5NEwwvNn4fUeQRzwL92Eoj/JuG8Fk+Noy1EvY7nZkYC+VBupO4p79uNkloKnkmZtODoVzVSiwI4OxAFV3LXmn85euw9CnEaAZg9SIJs0xgpzA8w+gtc1CPRTllUitQlslwnNxx/2Y+xT5iZ99vL3hnUdkw6NuELg1BATp55AyjNy+NE1GninCi0IySTc5h0zrYwOPyHjlKglOZD2+lTzK5ZROgEeJ09E0rskUZh/5xPHueZI8IKyMrAvJ0c7RkyaFq1apmqVmhsBsw+lKvrnh2yt063sKLJt3jbxzhleuVfd13h0G/LQFeeklFJQNuoMPV88UNxbCgxPRD4AcZBAPYaCAYEgZqkoGOXWkNEixVIpZSo+UFimYMWhAHaNMmAURo8vxlMOyKKrrIHuvjeFXgvACl2DYASW4WKdLCAGWlNDwjC6h85NVzBZKGkVyFhclCCiseXCJdiM2sAD0UsNqgFLVspno2VTKZoAZN7c9060MpKG0a5XfMNOk2NRSMNM1VzDdfSOl3lJppbIy0KtRpZSWz5brd1KM7Kptq6yBW3m8aliIqSgEfQsKvplX7KoQT1umRKlVu2UMolRMn5hVYZ70dncwbBotXOVYeGO6EQwz5LD7sHZmnnl5UTyB3VReU/m5Yn4GW7XncSMTybYrC1Zu2wMop3ipCptsG1NfkFIsIdebJS/0h3k4084VVJ6pZwC8XHJBmW3KbTeXNx96vl7yY3DRZVf4CxBI5qprrrvxloF6zXevgkqDRkbN5tlhpxBv30wwvVqLVpXaRNK8IR+87lwykyrVzCwGWCNFqhppXkk30I47M0h3GXrQamcz2BD2tx/sTB99DdXPMCOMNNxao+zS3zu6tybk08756DetzG2MXHnyFXjjsMLAEI4IdnYqaIiOHGClVW+LGHlTwZ8BPHwCR33x1bcwEIkowIMJLpx4ENqC8B+pemdM4YjOVRxnu+2RiImlSIlY8c46Z6999jtgk82OO4GG4ok01WQzTDfTBMVeBAsmOsbBJIuwvffBQWISIguU+l9COALD+WAjJ+QcWpCgwUI3W5JZOtx10y33WsWzCpqCxSb8xmy4+ZkZr35Wjdv6ZA72r6agIEd0SPSiwbHriC/DZlyPDXE4sb4uivBdr+c3/OzoRrL0ld0WRfKW3m3DTrB9qNbfiMYJ9ZZDqHPSH2IWAAA=) + format("woff2"); +} + +@font-face { + font-family: "Fredoka"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 500; + font-display: block; + src: url(data:font/woff2;base64,d09GMgABAAAAAGQkABAAAAABCcAAAGO+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoFQG4GvbhzVcAZgP1NUQVRWAIU2EQgKgcMggagVC4gOAAE2AiQDkBgEIAWFOgehBAwHGw33J3Bzh0StpTuBV3lZa/fJa9jGQPte5828Wxcp6pEIW05anUz2//8nJR1jONAPELR6VT+oEYSB8IgIDstBqzIPsGpmJrJWbLWqRi6rNFM893EIilU+j68Yp0p+zFzLpoHW7io77OKa5qAamaodCOSNWCpLZQO7ZXOx22TrjR0W57kJhykPHpR0uuYg9ecrnh5bmwl/+1/d5pEaQcUdtN87h8g86EFBvGbEWZcr5RvotVzxhjlbqPGT5v2TbJ5U/yGWSyPZydY9zHFfG+bAhVDZ/k/VqLu6CIxb+Kg59fIP/Vqf577unk+7HGDSyDYVC6iIZIQElATGRLEEFI5Vaufn+bn9Ofe9vSUD5ojPRxjhBERAHJVCm4BUGUlIjZyVX/nYWMjHLqwaw0xAP0YhI0pgQ7DNbrNJESswZ21GTmeCEioKKBgIBiYIKiBGgxG9dFasrIVu/T83Fm7+Mn7/229+1K5yWvG32zKEUFs6QuiZlj3aKMBeYI/cR/ldyd87DnjxdQSgSEvA/wP3ouf+jG0RCSZC9QKuga1YqUK1KhV8v4lrku+8wCc8wMfqWpX580/+pGf3TOlu/mtAIB0G5UCjUAgtSWeYTkkN4tV/x1WTc6KCbSEC0dp9DaraD96endl7HziJQ9QoFBgNliQLRcJFSS6figSm28O1JSopi9+77QWzIaItQ6h4SoTMvHWfvze++54Knvr+sZiCU3sKpnCK2xRO4SyYhbNbKOVCmA+Kf+gPP++WVtMKlT7euq+HArxiEfvjXywo7/yvzvcD98mOIkuKDFFimeDJkHAZp3abOkw80t6zd+w0dBjx7PABJ87lA/ymB4bRblQRH5nghqwPQK0A6xXYZikNeDohki6mE8QX5zxmPys3SIoy0Bp/VMBgyaIJY9tm9o3EIoz4C+BJAAE3JeVdJc1WQ9hG2SzT6cPdx9Xh/rMO995EKRAHofPdFe1oX37tmlbPknGfdWeQngUmjFwfOXSItNIZpEfpZAKdWR8ZOHx/ZE6dO6QUk8BhyhCEmUPD87GsZu/3q6m+7SVsM4RBrkReIcxULyikmevtCz2PqYFp0lyT0taQs2pCctGFpFJwMW+hyCrqrBAaoxASITx/7WfabP9k9u4XUyJJxh0AlYSpUIFN3ty92aNfIPDlvf2UHADboqtFUKq+zlaZNCoyV0AtykO/UxdYZx8Iy+YnCQaAlw333kDG8/9/b+rfa4AG8OBbEWvoU9pNrRQujRJrlAAVsyHMkc4yYels5fTPDkJ5TXcOUPXQNbszs1qt1mvL0uneZ/s4ZPsJ/PcoX0ByAKBC7hi6dCW2qcM/6EncNT8PkHdZNliaih+4nhCe/zVNqeS332XlvuNZJ0GlEehjgQ8awdzqyxvd6ruiOjwd4GMHAwVTGuEV/t0S7PsBvdiDSBeKBAkiZexymt+JH/97JlcDLV1P1aqqiBgjIi8iIqJWrdr73d9Pg+3CjpRGnpdThMDvzf9l2z/qhv91YS2aXdaI5xtTNc6Cl1KU31xqTQIZFiO3P4VCCAH4BGGEKIcqnIROewm91gA16YMGDMIIEsBoZAEmQAFgQtQGzDQJbFhSWBB82DjksHJtYZv1hlXqD9tuKOyQybAjZsIuWQ274myY0r2oWvwOU1NH1akzCiLAccAuiEmpjko9tc4Qdi8Etk1Ugb72z4sH4PyiKA2BzZscHgCbj2m5BEZowFpjAgZKoYXMFdjl4b9SCVwXr9X/60gg+TQnunQjICy2unL2AfnQcwWsTj4CMvfgPs+KJsTQgXgQrs7nAFfFCbCYMCQimGRw7L3/Dof83g5H9EcfZofzYcXKRwOGKNgMrpzcySb7iHisvamTxo9ZbGNkeejIBs8uC4xsndRri/FazcgppmID2adPnfQyVbxwOMyig/Sg/zPc8w+fvYWbBxjkoQszsmPNRDcF//0sgbN7o+UbO0qJPbZrPSCaNhvqDZ3JHBi7ipk3sh4Wpsm5JlXQR9PQs54q5talv7vjZaFdmY4pzanhhOrXV3ejXeB7dLOm6itTYLBsijhRBqH7lEydDalA5QplSxXfUpM6aKWJemqqLBoE+WDaUsXLp64GqSNKsUeklcuCaisvP32Qr+iWpEeUSOTmEAUa6ZPyPg3yZ/9J+WB+PgepBn5UCk/wMJDcmuHNlZGaFL9K9XgTGdYsjXJhx4IRHfJ2mCRTxMNEhgXY01OTEq3wvqGH6XvlbPOJ79U6aGUqEV+LQVivpuM6sN9ae76+L1cjX5M1Zq7mUfmECbphPyL/ksb8bWvk5T75u4TtOPi9kO3c8rYCHrTbgGTzzD2Wmbspc+eyj9gi4QGMaczMO8wMyQIM6v6KD+7Yne5DaZcyTNwUwXA5kRCqvYy5Es0so/F3y6DP37VN29NhyiHfdW97sAaTA7NqGE37PJuK0QxE/vGrsDIdkhDV8h83VnGs/UAVBC1jUYcURp8fu3XVdU3uzibHQzbbN7MFbFYas9HXJEGaSWjO4+VYHkEzjQwi3//lz6u/ZI0PBrc8TfHolszI5ubZ/IWxPO/woavPeL4k38j5erHcrhssOmBnHmm9kZMMb1Yc8oec3cquRbU07ZPDVMLPpvFuZPOKbPZqOq44YrpFEzVWi87qYszqR9Ofxd5scMK3HlhvcxD8ds9B7cUkn8ZYTHE13Y4haOeBg4lZtjKYrQSMY5f7aQ2yF5w8v3ha1LNydda+JcRdFoh1177vuIdeUvVanvKaDrropte+nkp/MpgByChkFDPKMyrd9Go4wABXjbgkzosz4qSyrM0qU28vpOGaaG31/y333F1daDBFz29bp7CH13I0PeNNPFv7QV85N7i01lXOMsdEun74auphsxe0R+NhreZZuiAKi0Rsr5UZ6SQFs5jejxhSMneEF27L4NtzxTE9vnZS2PelQ4IR4uJofFNhcApIhv2fYSr8rtV3zRrCIQCA8BUklVmvB2OkK4OeBtlknNWQjfblRiT1mb2DacKLM6nN5GCyxk7rivl//0H33/AmlEBbzabWQjD6ZKxkb6KZ9sKtwB+3ZGyz6CI5szwFyQdz2J4cbNRCM2CKQxSWp+acEHy5fXTx6XGkRSbSCNFWC7dOuYXVzWJquMJd7vu1iv1+2jXuwZ/wJEn2sRNtNamvR9BBAxOj52ceUc3GxQure79B6KAO+08sACEw9i6JBgee1Mkwgp0fJauGPrSMNo1tCU6zYRtItVyVFdTvCfYoY7Q8XC+3X5UV0p9L7KHJR/sr4nKH9hq1Ddt2a3nRtpk33Hz7cFFubfCsxB3D4MVT8AtdLSeMnLYPfQHRibCDKSqIX1wXnec/wHPRzu4YFz2AKlFvdEredyKRVG0Lt0tM5c1WL6uzIVlrtr+iSiqxHfJ9dx9z5L612d+q9KQVwNR4RchMGS8FuWl/B4k9eIzBwzGQ9O565Wk0dcPUAIw3pJhkwx+ANUuLMcXfR08ggPCXn5C1uuEZwZABq0MmjSb3s0SqPDCQ56RuMWcve62XU6q5TYXVzAQjD7pr2xkK8t2OmMid8CJPt6kd5rfHN+fTi6zPfBbq/jpSA98JrATThxSzUJvK3k26QKv5655UJV4Ur+nKeQXRiSXNZekQy76OEvK4aWIbWxZNCzzEHKXx7PSv9CywLE4KM0dQlqShtRawlITlzBAxcHYw09hr4KOZuooBKi7ygZMZ8LNA0DC0snokzClP2vkLyaBxl8yasGdelKgOxYjuzwTMhpciLetmy8qxLKKckyvJswWqG1OdlsLqpGhS3fqLaPBSTMOK7ZDiOlIU37iJEpq6lNTi55JbtlJKcs9L67nmpiEmRtGsBmFhsAsiQBQFjKKBbSxgGgPEcYAoLrCOl2AZXcPKCck5F5gr0LmBuUPyAPOEzl+6jZFhgRIWLGGhEhYmpiiNaLKoYmRerLAE0SUKSxFdqvilHeOWLjleU3GWmCblzXRpcZqNF7sMglhlI2ye9MuRQblzRh5RLSeJVKggrBjRlQgrFalM2IJJLFR5L0Z0S4QtnVksU7OvVJ9WqxFd6jUS1gSqGV5LsjJ4LQYE9dDVS1IfVf3YDeA3RNwwbgeTneWlO0wqUF8Y6rXL7tc37GFDI3yYX3ISKHPG1LguMksxWhbQXVAwL2kMDI1cV1l2lN8qs4zwLh2EayWOS84KjsfV9pkTWlPmmtkJpJDeMKoCQyP7w5WTvDvKOCMsMFOsYRxo4zxIgAB8FD6qyrWjLFf5rTLrKKdVNmGMiCE4MMZEaE7IlLXKKUtKJIKQNLe7l0Ms1hxZfgjZoYEDmh59N5x21MfVqHjSNTN6mVIFpopm6UgUIoVs5CAXJ2NcKXarVqc+k6YtyCuUWa7UsaAvNoDOBbui2f0725a2sqWwFDUkQoJUil2JYJMLRMfWGONr7PlusPtrQYrZtMSrh10NTM3eP3EH4YVhRwHcaBHBXPvKjbaKrLuPSASgTQDxRwPHtVOvdjKZbk3gdeU3tMo8jtNHTUYEEmh1UBViFHPNsfy97U3KKSBjjZHI0/PRJz8kDAkSi0UqnVNky1Ob1SwaNWnW4pAZ54hOXbHEhXGcpMjxs6u5b7vW13/rQ/JZs2oX0o1oSAqa6VjYlTUoFao6AAE0mrQ0xgolQDnY6xZWT5smWpTOfRg6rgZUAHABLgzRFKNxJD9M6sp6IqdlkdY2iokqBokiIBQFEOoLZRIH4Wg4AWKAL0nlyfnxNW5Xa5e2uAQTW2ONL8VHYVEXJd7qtW9J0OmLmuYLZOqa9cHNZJW6+Kb4LECrMVKr415S8xcOm/c89yXemE3k1DfR4MyXlv4QxA99nYA90xnDc0s/f6nrvK7xW99duPj1IK/B2qc2wOGzexzpmB6v0Jnk6yVk2qcBIO35X8mUYXuVsdcV3e9gvqCIu2mE0YdyaLk1xJfdblVDqDIn8o0nVZUva8JVxk4+JiAwapy+Xx5GdwyAgk7aXEYTwvyycc579kF3Aq4XvrDtCNDi6PmnFgYYmnjn48a2wirF9w+ztP0qpoOzrFi0KnTzY3Z6zJBrzezZ37mLt5dbr2tmt4lUCJAlI3Asn2PnX4+yNpAvv60lqPRDynX6np6/abBjsrco0Kn8Zhm6i8IDB2QvPAlkh7+9rDkvQGUmr0C3B5v57/jJb1x299YW9wj762c3WtbJLzt2NMXeD4uFLBHA1p+BJ9iowhcn7XN1BT7oLac140Sg7eKXZhQ8/QKQbmQx1fCOTXKE9RKHIVU2O0MOSK8AuoU302CPlpuDaN4ZiLhoqgonXm6BkNgHBoRjCwaxQQGhgMHSNDCEIu2RG9YmRxo+tPAWIJfha512qr2v0/4uaTq4JByrZwgcKz7OCYJRSGoYflLNgr/rvNfPrK1bNVvfqKLi3cfmrHTxhWbUyqlC00Vg90a0OeiqZtcmj4xMyCiTxorO/q3ikeJs5nVMqbEaG0w0ThgSIV3FzdVrw2Lx6rAs66JIva/crjFXm3h2E4Rg6/sdbXr73fpWYpZdalr/8UoUCnelvIyGz3ClWynkfCM1WIlW+8a6RelywAf2wRKHMsI774Yy5PtRCI+zrYZPB3HN4S62I/YzuzfqegKSvX/TXehhCj1NJDYXm9tr2Q2pTVUJ5JMuYBqvu9yobPakWo3beWPH5aOngPPpbV9TVlb+o1gj5Db570DeM1hb5UJi2zRyRlQ6eI/qm5CbR+qdrpak3GVCJsevSANA8SI0niUOTuqCkMneHybZTw53vGFoMhKYdBQXAnM88Qi5c3JCMXEyshwFW5ggxozheIGTmhK2KJ6BjgmMLfD55uD4IeGEAGZF4Xyb8A+Z1lzb7S8P/pJvO/NDtcyvj5TBE3k2PdwrEd+c9/ptAN82dEkbxkuD73TiK4HgpPjpq8GiQsHLJJEmqpkqNDN8QbcvO5S/jwQ3fOiB83Os3muGO3WIG0zTOJeo4fOg+yoxruYlm1pWLU9Z4X3vV80V+RHZf8YLE94z+k0EhUxNt6/tX9kBjT2UFPM8LXk6fEszEFKq/TwUyfNBrb/UBlha/pYVkMjDYDJ3VoXY1ltyKAPp2WX95xXGt8r3aOlsV63HfVVweJ3NZFB9ezxptr4Owhe/v74efzqxh3Cxr/Pm9D8GVSS/qPuD4MC8w2sMfuz/YPIts4mxjJq7A57QyL7ID7hOXedzkcn9Cp0/N9zLcjECf1qw72S2Nd4FHmVJmDFQJe6E309aklxXOqejHo56Utsd3WhgAZZ+svHwN6Lvw/83qDeCFPTHQgYG4yIfAU/uLgotXDQOc7HQqoq5y6rGViFVeip9lYHKSGWiMlXZqvapXON5n+0UqBsX2WJV+N1U1cSjovzC/63YiKUIbSw6dCERMZoec8jCMDQpa8jGCGK2RkJ2HIiN4giNNpoFGT/IXyRalMlQtGi0GHFQvES6kiTTkmIurgxZjGTLM1S+AiJyCgLzLaRvkUWIxdZirPMvVGEXokoVS7v9h6ixF9pnP20HHGTikCO0HXWUiWNO0HbSKYZOq4UuuoFy0wPEQ49QHnuMeOIZynMv8b3yCnrtLbZ3GnA0auStySccn33F880vxlr89pdW3Xh69DHwxx+oXz9iwAB3gwZZR5CAfRRS4BQLWeASgww4xEEO2MdFLvjEQx54ZJ45syyzZJY0KbObzc3SOglsfu8XiguFQ3Hp3d0MpaGloaWhPSEq1AaSyANJEY0EXMX23N1gKC4Ul5qCkpqClBgfyoYtG7ZwKC4UDoVDcaFwKBqXIxHdaLNo7Y3qPqn726NeuhPqxZu90DGvjiVn4+m1CWBhjBpBxOK1PGNzCUPa7erFoFKUSlkdYW7uyHXGOUvXPTL22GMGkTMudjApSYe9CONlvIoqXsc7hkQoRkwomEQxUkz6H9kxGokhCgxFgDjhBidMSYh707IuGHKNHefJOOuFiuCmZ29Hcx6NVtMwg+EPMxg+57jMgSMHjhw4ur41jUajuUVmCxg+DJ8tPSu29DSe3qCmtq4OGBe5xMXhSzD8YTbMYPgp6z/A2ONzlTVn2LMZZ/0jc2XJ9bbAbk2PtHjeCrs7XVXKdHwrdb+h9w/BrafPAv5Zbnw9sa4Aw5UmaUomD2EUYRa61Cl4c9k4OS2Ucl2nnRLNiOKt8xEM+Mg6To4DTfplMkHK7ua0r8k62qWJ0eXCz5D624yJbAoSK61kb6NNHGqodizXPkXmnFre9TH3p+ln2K9LBQTFUHDZCikvC83MCquWQ+Em0BGoc1DVw2jRpkOXHn0GDBkxZgLDlBkre1izYW8vJ85cuXHnwdN+Xrwd4MOXH38BIkVhiBajRas2Rx0zmuNgPxgzacq0WXPmcwIEgZNOOe2MJctWrFpz1jnnXbBu0y1yd9z1wD8tIkHk76uCVois9Sg0FgYbBxcPn4AWIe2WSJogueXIWJpMWcneU/PkyJXXUl4DP/ix3bRPoP0OOeyIY447sUtubR/QOgN98P7WQXcArsAnHACWgTXolcB2MWkwHHLYEcccd8JJp7ZoSUdnvI1t/qAcdB2nAPgPgLZ0KVburtW74vD+w8r2Jyx7GUpLvfi9p4Gw8v2wvp2+0Fe6rbLRKZqs1ym587Cft2hM2fIVKFKhkky1GvdtZUIezAFbkQB+7eBpKn3jTXr5wv3ZZLVhviHusur7fP2ojsmDWV2SHkPx0fyUJA1a2u5bcmltTKXNpMNqI2/SrwLUAX2bRbL9XkchWaY70paijkNnX/evqivzYr6Z1VDOlRvTK08eZ3ydO/52kYvo16fwZVlGc8PwF0FLlGgmkixkpkqVoJ6fBztiaJ+fhzmvfJyrmxnvltsmeKXBJE1+ie3bTj/TnpCZnwayCmjKbmrO61rmtDbyLehFc3k1WNg3LP7FPDfzawUO+ZjCoUixkrfFMv7SYtQySvTUkELMgqVh/I0RIFCQYCFChQk31jjjTTDRJBEiRSdpSHKlzEpFmnRTTDXNdDPMNMtsc8xNxgSZsnLSbafqM/UFX7VSa9OuQ6cu3XvE+55B8xkUAAAAYGBy5SV/SEHk4xUqUqxEqTKKzJ9ogYWtloxRmbKSP6Ig8mGFihQrUaqM4iuVk76WpEomn4d98VUrtTbtOnTq0j1igAOSMSZTVuSDChUpVqJUGcWeNCUDEQeSlexR8+TIlRf5gEJFipUoVUaRz2O++Oqb73746ZdWam3adejU1XU3tS6tTXvXcc0UqUWBxsJg4+Di4RPQIqRt9JuIYLiPzbdga+F3SzA0UFJX1v15aOXmdHPHdXHBUPMKJP4O6LeA+iqoMNzUIaV+TbUFiwu+w7CWTmTbMggdNAlxsjhVhEnnKqLnk6pdDdLoh8fPRVyqoW+gDspcijvwBhv4sVzxkmrmKbbDUKtzRS3IFtpdkXxsLwG+paNu52P1F2mZPFrgfEuM9RuO42fWnlGtHtky7JbbeTfmvQaNmnzw0f+afarvZ9R69IpZfZDw+SIX19a2+J7eu1DtItpeVENsN04ucnuZmjJSjB0udrF7ld2CklzOvztjVjZVP6yWOjrJk8NQxpWnRaE7UwxcwVYci/LhtgIpj1P6i377TxDtfrnvFxOyhNf88bADPLDW2AT6Fb3BqtkuGNONavieOGM64TAHO0qjGMyYVBEY/KaYAj1UNASiLKIU0IufPSCz+WGMqwanxITCYvxAdjNhBMUJDo+0pIRiOwzfGIszS2VKleZBDlM23WavzA6bVZolmSmbLpu0m8hMOCauJoiLNf6MW5hBPTg4QDRYozfK+un/CIwOGrXDIqDb0PPQYYhnVCRCXAUGsRAIBzHX6ASohULURp10EzUkcXr9nXGmSRqaSWaZNyxpFlk2PKv0M8iwvzLKOptGZNvI7LLPoVGNTpZTzrnkmlvueeSYZ155I3gR5AN0LWK8wkWkU6zo9EvEzKDZuBmWQZBR+aob2ioN2Xffg0aFK1819kHa9YXmWB7yubws/PsHJwgBUTC8EKHCRQhDFo2pm5sS+Qpq+iLFStQrVab8jVIqXWWqVGvwSMilJkBv4HnqeJYtFpR+zSFKKbri8VjY+CK/lp776H/NPvnsi6+++e6Hn35FsLVoAV2LFBYrLk4ZshKUryStVqlPvyd0zfQ7EoTeHd9pRx5ggoFBTFvHNQpXL1xcvZGK/J99klDZRvh/nz22Z8q1ZYPuGBmc2qQ6NJUlRLFI9WQqwu8M0YDQAfAAYgDNwc9UTupVjMU1kzjQ6o0b9itHIVvbfwZD55F5w8sKnIVCzaU/st4pVIVMCxuN9J9MSez21jK40rgryoMyD88L+6GyUJJJVrHaULblWTIW9DJfuGVJ4ZawY/VpXD1R22ibGG72DP8HQi0IEoV8gHajHi4Ke7n2PKZFcL4TSMwwSzXqTc3H72+zlmWoF9LGr2nSy1zUs2vjchjuElVPv43G9xA2LoSMKyHKz1eNgCirnJgHgShTRHMzEGVTw/keiPKxIxMeMB8Hoqxpcq4AovxGpQCI8r1BIhDla/wAEOV5dvjbIBEcAX87wRSOEnQvduwydUT8FKoTXIl2P/iVvmBYhw6YiHDYbNLbl/bKq3GGQwhklEb/Sj9oDGEdocvSOr+9ozjXu6ibtDSW1vhQvUFyLOWRNw6GLscedin81l8l9+yqya7plkYKesnRXqunr96oQNsiYhXxzBcae67oXJFPHTsSVBLyIeM78YDEQ8ehrsuyJtVjK8c2I5oTbJuwPHkunIWi0n2qRaulkvXOFrV8HBE19YoWNdxrifJqt7xxCB4i/XwFtHcfm+6bCUKIJRuJKNI+8XWI7I8OQYjYAgN232NzRC1sIZ1hlbbI8cUXGtj/qlUTr2xruck0XwA2fATotfpI828XgrfGN15gID0L82tMlRem7rpMvHRVq861++1Qy932oLCb+fS3uEpg3YRpvFZ8qMx0gJUz1fFvTk+kM4eSaLj0iNQvf0bD+kAY9mPBy4GgqM4Co+h1t2ejiJ0uQYRmL0RsToUK4hBKSDcPdSZpzTQedRTpqok/ak/SHG1RS0kTa0NqEWmIAbm9OEkd9K/yVj252h/bSi2vUnprcWMh0HTTfZFCk9ALGZ5KfM9uOCzi1selsWHqgDE5keyoqqd3RBgTmz8qUGiIW6wYseLOEW2BSrlOxi/T3kSKOHkmgGjjBXBnVYzXFmD6EWn+Mik48J0PFyK6dy/efhlKgxdURA6rtsVaSxTLNl2y9GcJ4s2ZHWkEumqOakGvViQT+T7k/myalBF5EzmFvP0UzZ2WvXYc9yXpSaZyl1SeyhP5pWKxIsl/K+hrlMnDY70PoVxDzvYH58XmyoEVc8b06STJz+nwJfw0nfTC81gmj0OePvG2gTjlv5csVU7u6XnuJlnZolyrpMcHE8durJVFC0T3xBjM15lN5EhCiAIGTzIg4PTDAROF9U5rDekUnlA2eSxmWRSV5RQJo0Z3FHb39YCxSyc/lKvsPwNw9uz8DdMHu5W/Zv8Pf86nH/DffbqfxqfyyX/4D+eJfSKe4OfAjuOO1Y7JjniHxwfef+fn+XhenQfn1qk9c2f0DJ72U3tKj+hknoRDP6En8Hhu221bbhttizf+I27/PW9/0yvOO+Wou1578ZnHH3qL6131vFOPvv3pi887wiWcnr3ueoebrLXCvnfecv1Vl15wJ4u3uPaKC7vectWKNdmD857jzKeaYLRh5j79pGOPOPisZjD1CUYfdlLTTjpyKJtm+nrvtuNmdSr123PrhtXLFu6snZaLKpfstnXDOsUMLH/knGX6iS5N/xrPjMnjRg6ZTUZpJh8zfDLpk2cZHkT3++m9py7sWTHlq1vHNs0b9cI9V+1ZNe29tWN7JjShenTVWkMlsiR8AvpeVcqXKlqgJsIqypYo0FZaqZYSwhQhfTw5sqy/bIaHBsebMy0pLiosKCtGYMp46PAAWzQpSxwo4RCCH7+hBfRaOAqrc0q1vpK7VjlZ59p1Xde11lprVVVVmZmZEREx+P6y1/N5ORNjH88555yZmZkkSSRJAgBiXYovcibe5JxzzpmZmUmSRJIkAOAmMzMzMzMzMzMzMzMzMzMzMzMzSZIkSZIkSZIkSZIkSSJJkiRJkiRJkiRJkiRJAAAAAAAAAAAAAAAAAAc/6ZSk7TWoXa1SIpkS0IUK5JldlhmlEwP92nzV4BmVa846rFqlCqssUizHbOniRRnfnUgctgyv01Pv3vN9mTIjBvtpAR5Pz20hgdiKkiRJAgAAHPy1TpWv8SOporWXVixPhCKkhytrhiRYCLyZKfFRoQGZgCliIwKsKVEITBx871e84BlPeN93fZuvqb+5s2VMhoPElzM1ITosMDM6lEHIkGypCXHABPrjnd/y9Q3LA7fUmjNqUDERHg6mSIRcj/5pm6/TMM9GNdfm7EzN4emd5pFN4WRP6jCHOoTxHbJhMyRDfwgIwR4tmr3xyB2XLBgzrFO9cnl4kkQjwzmQLNssM06cAGnoVyinN5Hm24pUkOuhGNFkTsLQJ3QCx3PYDcthNHQGg/3afNXgGZVrzppyWK9mMoWypWKiIvBNlk2S9BMggR4tmr3xyB1XnHXUXjttstYyCs/z9bueX9cH42+8PmvXKgfvt+n9QA7W/+l+fU7OxNjHc845Z2ZmJkkSSZIAgMn6CWh9ECcnj4UEcEwYgDLEWWdWZ9kLxUrDy5zzzVGY3ejNcfZfiGGL7Csnw3t1f9hKdMYsAUN+IpJvNXETevWgqT9enk/LGbd1vNtTPYqbDjl1LDq23vve6jM1ubsUHf0ERWxX0KQxFh15YWyMLfDnWHT4+TIseVA5Fh1ciNAi4N6xYP/Ro81rR7nMUrTXZ/dbnTm6O5H5ISu9Nsg4mu7q1B89/OfNmjNvwaITzliyYtlpJ50SPFKRowGwU2bnJtkeDCuBu4T3GNVzwfyvjAD76HVDjVo8VJ5J4kCbd5ROq1ZugWzpooTwZAufLdgSk0wBgaUJQVU6plvQ0JWO+RY1LE0BTRaJpgzTZCXVClvQyoZUUw5oOEonyhU03ZJqwpNqsq1bK3yppjtSzRtPqqi9rBsMgeMgw/YqubWwwOQK7NvtJgW4xKqtNPBnOL/csBEHHXLYEceNmTBu1FHHImhJQJ4Ygq5Q5oW1NaQKt0BHQde7a72vC2rYXbIQYCC66pfTqSh+mx3F7brY9oXzB51DecEDAlKHmnzxtBNQDrHr1jni0mnxr8n44tL/9od+1vf7hy5tXse2divSbXmWs9ejp5tFPbffN1vrVDNtZvW6XxdrueZqtHgVex65Pgz79E73deI88OGRCpQjv/OKdc5QCu+Sfgn68nv89XRKVEDGvo8DS3zNVfyR1/N728mOY3xr6/jykcnfWGU8/t5PFHktBLruJzc/GPzZwY+cyifv4m3xDV/74ZUv/fPExzI8H37mTya3XauDW5v3nSri7vROoNNbr9v/MW5/8M8NrnvRg5eC8Cpx5SbRsu4Fg+cR53o3WOuuhsNyd+nAKU6q/LHv2higDzQBAsyG4kwQTgg6Tk4Rk/Wu2p1LgKPW7rGDR7i3fzhaRwQd9uGQu4OO9hL9aR/d5Ss6udptnWhau9laeaqpo8oG70qJmkrGiun2y2Eh11KWJZIUW0QWYJof3G3llScihOQO5yCA/8kwwAFMEAlCAQ74Ak/gnBl5HuGaMsEhmUQSNjKBwq7ra53h9Y27Tqf+cpuGUSTV60F2WWmUuXXjSoQYokvHadQL6n3hgP8B877+wCthUkIlAqLYIMUFLJ4IJry9CsjrKEZYfeNoEhq6IdReByR0r6eUgPDvX0ucK3G5d4OL3QuxcK579sCRw9x0sZy/puX/EIBbi5soXIfvSlpNdkQbzfSLoLWtW6U1iv51+QNN3M5r60gkjb0YcVTO+sQCGWFcN1irCkm91BmeQe8Ii1AyMWXCGABxMsVF81+5M2LhBNeKwYAFKWsyLtx58RcoSox4SVJkyJZPbr5F1linwkab7VZjn/1OO+eiK26646Ennnvtnc++adGqpxe/cx7afiec7J8YwzxZvF3WCgs44rmj603CjjumZ6VU/+8sgOUg3bPn6HjPKadW6CqWIi3INj/u1PL+9NymIxZYLp3vr0Hl+vWSHz+24xgJBtYEYKBfDu4HHjL/YHc/v7wHC8GhqXzzigA2f54NQe8EzPfd8sBJBPBM7GHLZs5DHv8n22q+4Kk3Xq7tAvxbsv+m5okwIcKcXwO2RdDNvgVbYJt8CAFTEBTXoDZ6VE+4lu9Z4MV5ITcKh2nw8iJndS7Pm3l3IUVTXMripN2SLcmO5DCMPsYYY4axwrhgvDA4yeGTzUzbTu44ReN/zfeBkzhwV+VoTkXMikA7UBPFaT6I0cUY7r4zZj869HuzbS23xkP/4tb9lYyHvn+4r6pX1al4gN+ffcjarB9S63x9bOpzTprsJquxT76wcfVduc9ng6C3HQygNzcXHaheDRbbV3wlozbQVX6ln+GC6uVXJbrqIu/LSmXE3tsKlwORIuXPzbV9tC4mSvQ7CsaAV6fWhRZVA6/SCU8V89Djc4WI8gXgx73Jr8EA70mDWpd1/2glVKPRJesU69HrfI1tkO2KTdqIrFl1FvYu9qdP4dAyhKG/GPmbrZHs2NSStyDBQgQYU2GBUqVJN0WhP15ZbrElVltqlTXW26rSNlscctgRB/S76i6lOrfdqqQ7mnzw0Xtt/qUW6UE90lyryniqvZ1SY2Uanz1cJ+wFjBUA8y6A7g4O/gCnfAV77g62ZwBsA2M9M0OcaZdU53LiWWGRgVIA0Yv+WTOiGWBCuF2Vu+hB7gpR6YucjCYP3cYIRye5EZRJWvTtXxqI35Joj6IQVbIqoRCfnGhmNpIRL6u11jPh88WeTiRUKOLkmjEEqxEBJe7kKZknvyeCXg8UAbfAV9M2VmBiePJUCaEZiRqsWVpuYdvM/qTAqlDDpdF+uIBgAQH2VIh3xVAsfG2NAQjCgAgFDg7GtQcEawISG4A6JYRHpGkZ57AzPVrGHM/5upP8UuqqMOTQQFRzCZYBAO1czCTXPXT2HfB5SXPlE/DA57CDGpCmiLaKOTeTA0ZFNvPiLqpwR4DpODAY14AYpMrs3DXU73Mm1pl5No51G0EIY92yJBMUYQrpCPDil2pQGTxnYA3EteCa2KADi/j9MDu1GCWR5UNCZAUoQgIPV1D4s1QGwQQBKLXhQ/NwQJ849Ml9yYQT6gBM1Rtyx+2UBI6BxL8KnlCJuxSt63jAnHexSg6Tx3UHCD0MkXYRiyEy5dd1MoOltXeQRzrw3SBOBI0015ikZA2XD70OKvjFl6mSQGDYh1Jsco2Se5vaePOZMOE0zZlSyHPilsvP2xj3h3OLxZEz2CTxocC9iplhm48KGczWMVGVIr1k/ebuECXpyYYFQSlrlj9DApllbYjm+P48c+CB8fswKIZoIfS+xC+X8Vi5xeFLD1vxFkKfi12btLNsyG2zzo5uSw/2fQqKCxzhOaicc6Jl3s9fB+/bv5TMW5C9SXtm+xepsY09SjW2okFLaL0ZKTjKW5v5xntHEKUs3v1QmwdPavcfmFv0iCqW65yZCGk3pMTAtwQgBXsOAPuX2u2oVAW0Jg3L8QPaqTiK6zfGnIhRpRAbag3gGUYheDrrlVsK71aa+OeEO6gxBukBSFrjdz9OOg2M1jLVFRQD/COgYSH1AzAxY+duIwtCHLtSuhy+7zOO5ShffW9dfwV+M//YlBNeAReGq88GyFLijmW/Mo3HOmxp/xAyWmB4YzTaEQ9OXkNozk2kIzzrxODEM6Oranfr/lkzumWyYdjGtE8CA0ripltoJZKvHBB+3DAQCAb4NrlJQiAR0YwPIOYH2okkcW7xDoB6KVrRfxm08lKFcS3dHg2X0/j0ucXCDSmRbr9QqMA2Hp2V8ovHIiHJzavpAFmd7Lj3dKxU86vkDT7rjUMeTF3oO5eRZtioeF1z2cDGp1QJIYd800LdBGB5S2YNbnd2wFzaNBd4vnx5OfHP4XqwOocdMX0TAh1IOeA6DWd6YiT2/Z48TV0FpmpYbRQviiAEl2XSDaIJUBagm49n00uWBePALb4UIG9fmI2s/gptD/XiAAjchoMtwifRzPAYbhLqLOBzgJG+bA+CA8G7zaBNtsPC+Vz1gYUBK+xxiEGCAo6S0KCJfBlKHLeW9YexqDnzxDuwdM36rNO1P04la76YTqppwzuCfKjTAqrDezPu4HnQ2KImn/3jgbRA0vQ9yPWeApdpR2eRBJv2sg2vJ1v0dluWhKKLUanP290fyqM3eVzQ6upmHJY7XIAdiagRcQOuhvNU4ghCHlkmORSf0GLgg+Tx04nLzbWph26SwK49IaFnWPvKZpStbjQaGhvW9czGb3DzSk9ClnwsTPEkcj07KIstaOl96anOIlV7GUmSPJVqhD/PsKAPOzrLNPVdtQKOZ2o+pMMZK8G/GTHj0F7Pz0L2KKZbNE1AjJIAJByc0D0fklhaM3Dsw8K/ZF1xLYZ/YEQp/BdG8ER7ynp3ok5KHD+oQ94Q3oZcpgbQUcg1EE7inBL4AOsob7qcSXPcNFw/qe/uYqT6ITzX4GoFUWB5V5m9VqIpmW4hVuOuh5Ofuwlvb3parVdTESykYARj56LU0iq86SHYyQhaP64K9iLWVUeFWnKGF832UPLxbvYGnCDO+puo3jmUOggJb1KAtKHRQD8fZsWRYpgeXHbPDilIc3+wNcsPayzR/zaqiENgkXxGAXasD68taUdxXzDcBh0WJkcefEgI97sYGYNWJAOO2sTwaO3UsHWt+iVN0rHVLQraxvKDPqCg5MWCSE7EiFdTuk00K/tij0K5wqphMLDMdcPxBkbNm2m7/SUaPBtP80FSw0BCnJMjQVZN7udNzszi1DTPzuB0fv4O2tLT272VxPL2zoGubRyFBcX1tklBu63lhNLILVgt6me3+Vje6l6QRQBvMrL3V8CpzmHblhADM0+FXz6DTICm/uo284RiTLPsl2X+YSSYquF6qOJUzYzpSc3KoD+pxhRpf7O5/3OHJnicvHrAssTJI/O3+48gJ7zrpEaVD51i4rZmwbn3yOrKbPHr7TxdRWWaqnmNF0H2GcDWZZbJnymjWDE4lw8xcMAv7fN+lZ1/HPB5VYF64iFUrWXrYuaRHjT7x3najV4ADN9sGyP8wqLPyuRsLbDLNzPM19JvZHX37+ASxIflhP09SKNF66zkgygOnEikxRmh3ffqvxv0XyrHdBWNFGmAQp7793r1J9VutovPMNxfEXmrXJ0DSNyl5YfEQgjELDz7t78fGFnsQh/REhuz/MvBVjuyFI+snk/wky9mECEi5OeNtstxPETj1jwWvnqqrNz6r//v2z9ncM0rSWF85JU13t7Ne6u/JnMtGnnH4hhfGWrdL/Vw6YsKG+dpkw/yF37Ewy9Ty4MVKy9WyL5vqKjH1mATaz3/d+o5gZ0s49xPXYiMqzzTooYpDwwkI7+JJY5AL2dSBO8gPDuZH2M/qEaLx7N0MsRggou0fXnHUW0Bbeo9tClYSrVS0WwGLZaqeKAyGtDHukvwDfq1v7bBCZNOeuPSjCmYcemcRKfkaPOKjHFVrFQtkev/67P86M1URVz//BSba1PUYdEuUfRFa+C6Sz/OWpSpFCu9ZvhT3i/sYvWwe0KNKVPP0jPTn6Ed8zO6JYYJRZq/tsaNF33gjocSl5u867764q+U3qF552Fpjll1flrPPsPPzhD46wtRtTX2Ah3qzyJEbTQmlvkMVnCMkac+g0tnjFuJd3sospP0d0qvuH6ZyaAFWXU2cqOmdd1EYnex+tbi8htWlI0I2qWgD153d4Fb+Wx/+vzPZuSGQM8sVjpBSyvyROxUAX49KDCT7yY3VTA0N12dDQ4dJEovTL2X40Bm1x9VOWrerkUpcMxxyVjhSsDEh9V6MiXD40q2s7P5VJwkrKZa1ZWkkw4XZLnJ8J6bRlcopALPu8W9emsrMXi+faf/8bqeASP+I1sfSyH+/rMPespsvvvbfGefO69Zdv7EOdvv/rbfz2uVZak/JSZK2SaweOqvN/IheF5/pLwrVTmS7WDij2D7i/y0f7bcaxNlK2k9vnXWfzY7FB3YOnbJdTWi5J/UOnwQcZb6muf2hZ8p1XXk6GN92LUma8rGa8DW66S8H7NxkXihI/IdxI0fLObhuH+5Thb/DtcGenn8WiYgxXLjkfOZoSc1smGM2OKKEKIGlLS7LC7guIYIJaia/cCZ9lv3PnqsFpEAwblwRb50iuGsJUnmE8+HkhD0FGGVB1hFT4GWJvjavCB0U9mq73T+5cD2cvIyyHu9K8gxK4oktMJVywtbb4b+XymNmT8Yk0GssxKTYrP0gt6YZ0lPnajZIoCITpMrnImd0p4dw2nD2eAvF4sPF2KuZD+2WigOtXpr9WEzNGRefUeOFMtfgcPmJU1gNi4RVjowFzpDbvxgsrGrjODzbCX8ab7JhfxULthAL+5qbYQtL/JDN1Us+04XXAtur4g4kfVBzd8pPYIosMLLbhW03Qz9V3rp8o0jxdc4slPogsQx45VQw3mdxuInq0M/0ySGv0oTP08Xvw4Lvub3vMzqAWZuVpRQjl5+tDSFtFQLrHtdVWsAYacnxad3V2iWQxXNXkK+Ycwf6PwM7Bp0X/qQJNKSsmDsLzf3/XzmhU2HYefS35J/OkCDC5hO58se9M4YY2tVHQNPQRx2Jv8IqJAhRuYhamCVZo4pnlLvalehm+FXBlX17ktVrFmOjlS/xaB5CoUhEvpxLd7iYAOa2QYUbdZmMG50E5mq1aLZqtmiUV7GcwjLuFvvpUTJSeI+qBuvqxSJOnZlClU3It4uxVPQcdFbdavwn3EsM4GLtdfUG4pUXQzAWfTUrpZm+NqiIOS2klXf6anvhIOtncjtlrJl7/Rm9e3C1k3Sf1Jp9NxITEaN4Ns2Q/79ABMzdzAWjG/ATgrCLF9avH4aRji5/s547Z3siaz3T8Npw6ngPxZlVe/M1hhB/IREe/JWCfmhdp1WXfdP/5RNZ5mcp2d3htJkMAqcalNRRMrWgYuRQP7sWuENN/o67lbFlm3onXkzneru58wtSdgd7Rqt2s6bf+bOtJmsF/E7fCl5cIpmZWnTof4Vxf3z4L/f4wi6o58yhBeRNa+VI4gZNS509pBXKhdKgPh7U8TuYVrHHY7uPbWsN4wuP3ThT25Pz9OM7CV1yWPFlA5BeWyTByNxBhoUzBA5l9VaBqIavHMSPJqRKZolfZe+LwA8CoHZkJlsbDovIglWJjikfeqvxqwdvQEI+vorta9X1DkHelsiucLTzLwR9RS1l6dfQcwf6g2e/qQnA180guS/q3X4oLhmEM2VesBoOvWSi88fjiflIFPtnvyzYgddmaw0rjAN6GZGdJ9p/3FTsvYi/W/Fl7lRVceVpnfRLTnfccwrHEv/zfqeXEXpiBCSrvBrl4tDE+VXB4HOVyGw2nsn3GBCH7vve8c9c5xtiimb7DSETQhL8cL9ZQm3fWlucMxgI2r36eT/9kRjojxto32i8NFhjsngn8QIPYWKf65tY8IcWjQziO5cVqsHibOtYyesSIoAprpdB07ka2I29ur1bMj7xxbc0apdaQjdbbhofOro92811elCrEfcBsLw5GNoJ2vLYAbdGc2sC0Qvs1o5CXMoIVpoOZ3NZiV2pMZPo3govvlCThqoRS6cPqXXB6cmNqzQO90TdwkIyB5i/y4cSGsIg4XBIqJoTLYsKCz7nH+qBic6MS8gwyaYdOeeik5KXc8tWlnZBIM0guJRviha0JtkN0kLKm3XslPuKHUotLL+ObbyMKNMMBbCakhITJdtReDNn+p1Le9oNNp5k/Yf4OBp0V1RKV1Idj801F+jory2OKWfbkG4buHTAD8CuFrpBVif+Fco47n7SLH8EdMGcZQSJw3kSObTky43lRH/afrxVtHiMruJldDrsBiVl9UpZjXGsjodTsQWCdpAvBZHGLif+QqeGPEIfUX0KM4G3hEVV49Nr16pDgdGJ41OHlV4X9eznNCWxp5HCVA88xlBSiKrlc2aRgtRQos5AQdoazdeyeFuNsiofwxeeiFsj+ncy6cHFqmE3rXxMg6ikPRdElqZid2OC4wwh+LUYIo72yjc3TvE8KqnCTmtUEYf2gueai1s/SyXhvzTcn0zv4qbH+zFlsPiHB4jxfIt4xmNnsi4Kn+7ZVYTk9XrcDKmgN+UG98Uy+p0XIjOz+oFhjrN17lZ15vb4sHYxecCWfZYSLwn+ar7EQROv3vJ1mTn9bMoGR/J68iIOWZ9MjTUsTAbz+b0R1kSr9p61aofBM4ylsHkaYNJtd9NdOTdbs5nvr1G4CNC4TS469+aRVkTM9FCOyI02msejVXAhEQxkHFwt11oUfrwsQjw41L1qaDMHI2ANcJjV2yKQ7RspVyrzFzu0kmNrPBOFi0mpKzWl4XstF2+mSeNyLQN9LfA9Zobn96CvhLrtg+f/pnhU5HQGMVsspugS/iNubFN9IQWp2mGKKcWlHdldT1CiuXbmVVGTin5pe1e9NyD7KBlnXrxpUc5E+iCjOosYrl/dCHwhHayHsGjBJCKrMcwzigqh9s7SRbZG6+ah9LCoWHAP98eZqm0pUo1tPziHyuSvK1XbsiFgfZJgDkm33kOAg/oUdZti91KVmyxpM4jiJ5D3F+5m9FsEVtcOOQXmdYdjZvWLC368KjwJYy0J4Zq5UoS+xIyoAGiiw+LvyBi45Ko/vleUUI4JWcGlDXzmh/J+qy0QUnw7VdlFeKDSdizOvWisz/lzqMLU0ozwmTY2DKgrd10JSfzZkMV7c/hSy9yWxqvZWduNtbQ/jy48SKnZimxNT6h22EhMtyxKA1PTWhhJvQ6ztPFggEAP4T8Hdw3PqlWRY+rC0hJ+dWqJiMf781eV0+iZwcn/z3xvn34cTJZvTcyttI3STKXmXilMQVXmyKCT+IdCOb8li1tKfIcHv95cM9wEWYfN5mWpBWoYXb7ZYAKJqzSj54NIwpGwaZ2/jwutVwlTgmifNtQhZEewiaI7UgEPnuThDph02YmHVSXwDjSjh/DC6dPN2jz9zipXTacoFISfLP2EIJZwgCfKPTUnjbTyj6kSC00srQ2dtoREKCiCK3ilpNPk+qkl+LYM+gizaK+Ma6pcRO05ar+ALqg5fR2SvUs5vwwSbw/lAMJ1EgvqC4rMT7HwGYGBnEHkOx0aXbGcJF6KpTjB+y/sQwXnitnU+0R1NULgvvXH1WDVZ21pUCt+xuGtBvBAjxngOW/ol0vuvRIMIGWpNTySWV+MUWIGF5Xsr3K5XYobWLP7RoAO4R8Ax4JRhAJDvlpnsGEfC9KATKeP/KT6mJoLsHTzOhkYGNelVa5OscOxae0plMyMfZ7EzChFNNWFN9OFY0A+Yi7rFfCQo10lBySFmCfFnXbPQNX+LvlNxbYqyZivdt7Uy1N43+FEYxbX9r3jnfl5iP7A1BCU7f+lP/2Zfk/YJaft4/3P1PBwgchE0o0OwwVOxYwbBz04CmwMG83HHcXfWbesKI59xnhU9zwSX2BtMM3/oUU6h0l1HwRfLKkunQZBaW6BLG7Aqlrn4BuG3WB0xQPCw02CbagIL4lvxYVamTAb0PTcHvT6HL3dGLhjl3nXw7Rkvy2A3FO4Qhgott16z89P+NzsfqHTn3RIxufA+gU+Rtklfy1xrfJcnD8lpCxjspDFXRf/1MyXmm8VpncdIDGhxKhREdBgW9yBQhSkh53RUmOuVrQ0X3Xa2lfdAf0+gc/P68pCxc4E8OsEZpswY3z51pDKLWlbu/OTABikPGG4akxpX/qxacT2uKYw8hEJNN0XMBLTW7jxB5RT0KwzA5nJ4FHd9BbhfnwFYUuX36Y15FiuUS+bpDRhis53JuNMsofQ7OCLUTfuTppU1QhhpxaWEUfLJ7+jhz+0vQUG7VRoa2AMU7GfLMQVliuqbogX6likdrGOl2J2l0uphhtFMevS2DZyQ9Pi4IlUZtQLa13X+Q1Sk6yUieA8B4mIz0nmVrsH1YAjYyqVAsixqW5ZenHqzh3Gm8g97QxBn7M0Wk8Ut8w0q1/xMngCMAvXonrXCN3OuXsYfXsJ/eE714ULqOiPDPM/IRXi1r+MF4yXvLdGSnK9RdiUtyGPc/EBN8PEpz6+3RqlNUny5+3GJ5nTolWScAVPb21SIja82XPb8tR6BNTU/dPkCIJ83Xp/i82rqcfqxZ/V4tGCyb/59dkpIxK876HZwwXMP8VVAPXqlb8L+YLeJQCpHGX5SveR+BicJQMYVJLywgitQAYySE91ZMUXu0fJ4JFbGvX9N14m9PYfE0Qfx6dP+iWl1RxcDgvleFo0GeyDuzQ3U9S+WfUC94oBfiyC1zCGa1ebB4UDyPtz6nySyszWSqlVO9npEPx0CC7lBTPUGKVazwbjn2kU3Do1C+pdS3r/OgzGjx06fhUgbF+IqIwwaELyUQXjZ7/hw+CTI1OOy/+2W6HiA+QG+QaX9g09YxWj4R8s3iIFMvBbnTDtQzOElL8RCW+oCgrsissrR4ei2C61EvI9MCevUo3jDY/e2DW84UjqrY9HrTa82WMp7qtOq3HX/xdDgLRyavBtYfd0KY/YC4U7pu59YhXWXUpnXd6d95zZVZWdlrWQlnxLwZjUOeAvJj6vSHSSyUJj3WadFqGX+3Ies5F9lIyGxF0RJRjQy6V7p/vlBwVIBiCU50ahZEgzu2SgsErzPpjs+tul1TAPvTgKy5vFZ2PZKUP9WXSESqZ+mln0Hkaws6FF6l1dddTOQsaubDwyLoSdghKJRyRl+kxos7SzD+08ndm85nYjgMJAlgINMRdnI+lR3UGpIrgYTCik6DA79ZiSJl3VCYkCBJkn8LxDAkp9YhKgfk/08xUL2CgKbuezl/eLXmhHM8VZ/IWSos/G47DECWxzQ5k6YXSmMc6Tdr1g2/+qh3exQFL+OojLhqm100u5O+blG/zNG/5ih0TIgP4MwiKW2M+nUHrpKQ2wqNhVOcGMRVg0e0Xizm/TojtYAnKA1vPKrpbL5cmf57MtVFjKQ88eFbZtp7SmZN62v+BgZxyRDgh4nRkp532e2Akpx4RTwCx8epJo1XFnTh8RpIrUdkFAo6G0OwOSkDsyY09ZM01mC3lZqPz7JQlDglJhDFrrcX+jM499BjdPpTA7LZGblhqPkBlVw5YkwjIxBpbJQ0JIbsUUmt657rpHfCxUnZKiMKEGjtljTx8tMEst9M6Kla3pzHjHQ1hGKfA6S7UcKaEl42WmK/nGofERMKYtRSVXQD4qahc09vqAmK3MO6wtfXX/VcB5s41AH7V7L2RwzivkYeIS6juESf4IicUg9w8SAmN+FCCR5y9V0Retgk7gLsPa67gsnPtqBcjuddpEBmPTMztmY8S5A0wAweRLLWAgJyUhABbyqME31iBGq7Zns1xJsQsEPvqeKsa2Vd02llX+SUvpqNDnuLA2iO1jp2vKN2Z+egfHg/B9saSPLAhrBZJLBlYZubovdKzWfHVmi+BNj2cTPX1x1OHp5NogL+xT0dG6sykE/YQrPlCGGXWnhnn7OvB20tNUA95qidrXrzJLKxZT4pbQIvRhfWTPC+sJSPYlQOn7luU++FpQ0PJND//IJyaSAPn2yT14UYxWSJuxj5e4OPJ20dlWz3RrWw+sRlfWL2eLNarIdIsqp/geuMsXTgIyr4FuT+eOjQsnuP+vnja8FAyFdxm6x8u5kySWAW3U4aOUQQknVYtqRLc08H95G3mQ/cLwFWfPzNol6ipVa3bpRDiEu7Yf89V4kVQTDEYNX98dX3kLsBro/G4KcP5h8iuZw+N5oGW9g85Jr7pVLYrGKpEZRfnJFL3GoKQnrzYo9ZZhrPlWR2pWVIKYcpa26Wf27snJkavT6NLS04tAhrZVSPWoQT1zgotIWaX69Sa3bltLk7oSJXWHLQOwRo6T3VjOJvVax0dq9ejsbKTOUXOr/qV83XHRPlKtbQXA0GqxtcxShDSnRc3am3zcv8mMLtzEwDP+a7nYYWbn4KjLR6b3Z+hw39LLf9J7ihdfRVkoX8YxffbSpsZSROFZO7xDFFQtQg4mCiuPlZ+4Jl2s3Zj49ZmUWFyabANBBE9y++pso44EBwf77eu26Mltf9Qe+Jj2uQ0Ju2njRZ9w0WjRUftgXNKSUvhBw2k5t76hzTb9ozp45OZ5cTwDhQflWVWnuZJDy8l06rgNHisbnd8DJCrv5YvwCyut5sxs5km3Ge+GaUknzsUCYHuMJnjms6BFnTxNVbNhPsrLZmmrOLl+fF3rOKia/ENY/tfalU9nl7Zq/WJ9yz2RMxoUH0x6yiSpV1O3ZwtFIM8cL+w86ZmmVZJ+OZMoS1NIbXi5x+5FZqahaM/tpeN3yCUV6bI429klCk+NilbK8Z/BB7uuo6pf16C9QDbtwt6xParlmCq+0buzHUT5Q85E1sOE6DmKXT0z/PQ6j+Bq8Ydk7XuKQAC5BKgrEIvB9vc/kLFVsf4diNiEAxufT8lKrYq1r+L8HA6t2F2AN+oUyIcPENY82cIn5SEGug6POFF/qqGLE42W724YwVeIIpwMZMtgVtPtr5tbXlvAbWWW++3Qa7g8B8GxwIC7pm9+DeQ6RPbGWD5DJBQf1rl7lboXwGxe3ltgWYvPObvga/XTNaPm6z7mV74CAf/xENcti/B8fBazJWHJgKQnGdNr6yb6Cjvz0l2i0F9spDZtbyyqNX7q2tROyCZTRlf2FBFrhJhiaxS3E9YM0ufMIZqYCYzRHFD2T7ABoPnVTNDvXzC4iABkphQIPY3OXdVCNypVOO1q78aRLqFn68UfQbNkxplaYfaQ2lEwYGgoImTVt6RdBh9Sb0kbaQjlEYSBAQGrGzu8YgKh8cD1zYnO7Uuo6U44gZgGK+cMF4Bll3BrrAQ19s3OvIfXs5faXuHsn8H5A1YJ8NRjwaL+r/rU5vejpo7HfR30hv1arKq/6c+teHNqJUTQO7QV68d+sNv+NQNSFDuTckQ6S+cntfqmejVhyN/BQ6dugkNyr0hGib/gdPbvwpkMfkbsVUj7nK0BC0pli+PPI/NL9iIlY147NhK5EuFJLTGjWMbJPHDiBh0ftSleXFBbM8NIWJfe5GXFsSqE7R/ahj/bEbrwPcQLW1C+vpw1Ghr23OI6EGD6ZIsuW46cQWYv0WL287fzc1LHYqO7t7NXt2N5TLCcIUBkQIIFhLowOcE4MIK6Xq4VQO2tPckIzVvOpd63r2u5ZeE6Rn2+9rZDv///rm7baHjp9nv6soCetC2Xv2Ft7aS9au0tvjBdnFz1W99+S8FlgAv9HK9Tnps0f2ijAM63jE6PIYO+23yKOUtd8hpYxnBnIczgbnUkd0fx+xnsZmDSNl75rhBNituoD+WNeoUtm8f2dEJIsIcnBzD9zmEe78DWb8yQFFtVNl+72wYFRkvTju6L0qlAJqpGaswFIyL8KAZzcKmLKxJ5QmDeyO98vUT/PcJ4JFMhyW0UA3XFG7REpThEBjOV0/ejkBGQ+6EqmW491ZFeIL/68onefgLmuVaFTXrt7jlxOAS1p0Yeli3vslNGQjLJgYXw0KhoQbF0aSwMMGahKUyLGYQQdFbVXPdBchR4YjEDp6Xh/OwtrQkMrDeQOfEzYjX2RJidSc1y1X2lpOouaIOzTI6dIHyCYYPiMRhOXRAjNLKKfg56tC1QvJdrSrt6k75l4KDlwzc5Mgq+Q/y5ykY3Zs3EEppUUi+bKtCoyalMcQhUEKOGfa8+j9tF6hJZnlDsyFcIS54t3mAh3sxPEo9WdK6RBbntoaENqmmnrOFxwQzWTF8MgSXYxb02ezvdnlEomnOAMQ/jCvEYhXddrvSkGwpMrG4dT1ceGgkUjuEMCFGBUJGd5pnI3SCiRN56jjvMWA/Oq8qdLrAbVL7pcxg9GURgNwp16qtUnXGuUV4S8legTimZ+USWiSv7xo+Uo3KpBjhcKFFzKT9LUzlCb0+gBHmJfcfiOBB8Jfcoh2CSCn7uSUx+yPpmqV0fIonLxPvEhDIccpfhuH5vOMHErpHqpHJEGx+TKSqMheWlAALgQTn8OZ9wKdwsfyUyAicVAfq72OuYS5uPhoeqNtK/9ZqyXjLhxMimojsZi2pVq1TEx6f2KRdrVXj1AiMhU6qQqep7CNqV2W63UuFAKAloVp/Dr89INpydg/zajmCyhorLZF1VmpwSFPe5KwsRmgaU4+hXQusVMkyZ2KCWuCsPcHWzZ3i1dZO8MEGowvwnnSfBB7e2Y3mnHEUimOlNnhGlNRWqXMgAakxJIhKPIzCgpNRGetSoFSgJRt3Kja9GqoUq3ZHu1anQP+wWiJtSFXqBBzVIosOeKWfO86TOXtzyGpYNWwg6YARVkfa6CJofK5dx/L/oExJdvZJE3VoZKELzw0BD1V3gSk9yrJfs0CrknfxYBaHmhfgw1cInIbG2YZxO7Rkqv+XheCTRK0aPDiVWdaMp1V4JVFmB/dH+lkT9jgFejLdqUDzwhHlau0qH536i8eAm2ps4wFS2jCUWJZDhqk+IqTAcMiY2aICaqlXYEI/BJfJ8Yep4KFxQjhpip3a4RMl8WUG5wkDAw94xeNkOb6Ewkx3ahCfv+biQvFpbt4fBMyhlILAgGwF3LRBmW1oereWTOX/hlBCclojig+PSpZ2E+J2m6ZbUBim/Rp5WrLMS4M86xGrYCtHnFeMN9XHh0lvKvShAVDMdGyMd9x/X0vqqCUFbdvaTfu0m0DOLe16Q+16vOq/ZzVI6kDQ8VeSltwDh+nVeSZoESRQoQ5z3Dhr2E1suQOcyEE5jDHHmhG0SM/EpnrINMByWfkygqEhEu+wJeAw1NWPVFVC8LZ38yEJecG+wNq6/c7Z23cATOyieR7hwF4+RMjF88ElHfLc5cBcYV9yfpR9E5wKC4PT4pu6IhM5+ZF2tIxmEdfYGUXqIJKSh13ErHUyKTiMM5Mih22SPRefJBdE1TAwagBBY7Z0TOJIIu2bEDyMymwiRI6YPMOM7CF4DE+3Tg54lh/1XyoDtW//fWb4cscQGLn+2mH7MtoW7Nfa1hty0R8Cjik61lj9yg+axi4RDeg0QSHN9m/sRz0j/cladGauBDje0nU54hR4lC/978F9Pk1IyyT0Xx5jIxMg9ndN1u7aMyEx6pLfoVRCNI1C2zn5gNjgnwdeeiW4e8+dMEaeY07UI5Km72d29wGAWdOgAyCT782r1uaiYbLR4HJFKzBeLrnN3V4WP0uzAx9H3Szpfw8uqbl0LqHhfg1b3a5IZLryUWGaKGfRXbE+qesRwJ+j9FzHUPc7cmoe1GkAKWz8Mn5LGLmKzjZLrLuAj7+upLnWesOgOd9jLCFR03ARjoDzv8D1R/ZpjX++lKLa+oJBU77nWNtzwVbMsbkBb1zeQTCwDL4fZYejWWeW9MNVkC5JeQb2xtnBjF310LkM5wbu9xhsyF4Z15tiSFbszlTtL+kEqzn4t3Tzmqut18e0KP5v46HpKCkHD5fTUXwCBgyQIwuRbu8RKjv5jB3M6dNZbiCl+FIJjroc6ZeeeHg0tpoiO2+lA5gKrGII7e05SPJbnj7LhPl2VDOGlZyazL7870OQZNbgFMjO3Cc9+fBIbA1FesFKdTdTkcVlOlZl3LJ3gqRUDvvUf3l5V0HdfUOkMgbR3c2HKJIyQl640ZGiaKKbOyMTWgNdJbX92BBxNSvE0wuZanGRgN6r/35QtUWf3USrbgqmgYHmcVIW1lUICYIGxeXIcEQSD+eas4vqeRUrlGJdKlypeKHoQJCzCy1YWulNAIadv3axauYFqHbN8nZsuNm0Tth+gD6Eyipw+0gN3OtOD3qRWoqkswA1FEaGxxZRi4HnpXMZWro37SfU739UB7DkZyarUFxwS7r0SW6YO5bYjWRizoKXkniK0k958YBhHxuDf8WKjQGGWlGqyeaXwRJ4u3528yWJZNFEN5yVKJMxSM/dtU/mKBXJq7YucVF966M61cFrp6Ff76xXby1LbFG/H60OPO+d0x+qHzukUno0JGWQ3GulJLUXbnSkMJrk5s5IRY8HcLT41warL/2gaeSS0KCZxi+k2fobOH/UN9SfqNPMzJV8jfJAXiZ5yuG5eDcJFA/xp2aU+BAjcoKWkcGQQFrmiv3KXKjYyo79we6uFFxlpVewBwWf2lvVtxi6o6KO7RX+3c8IkssBvLsvoVIYjXdz98FLcxmEF26UzZWK6FidMiutTyjr1bvoe+B6/t8Mxg8+OeSM38L/ABupO5iIAzuuJ+Q66ayc1dQu4ZeB+E9yrOLCAx172tbpX/jQSQOtseraiKD85ZvpcDAXojddPmwQGhTump4TEswgfPDFADIxWKQVq4skVU2HBoEPm3V3CkmKcaf95uv6zgEWrJzrQSXDpAJ4ZdIw8HCwpudfG/e/bq7bPFb2gNt3mOt3C6v2VuzMf0rz+k0WMOabLETsMxdfuG8uZgQ79+aKd+6NReZVYvDVHSvncqyzISl8hv+Oui9H4HrhD3s7C1QAuxSsnDput4VV8mign4cHjRMngSmMIIL5m3V34R9Ux87xKmcGPBecRSkESMxKUBLCCos3I1zikW9JBIWlJAOLJQWHJWWxFKyunuvZs0osD/Rosn9i8NMBeJk60QhoiCvPU2ogOcloRnmXGweyQ92UK1h5XYhqr6Y0Plp+bKg2ORbnK1a3k1VGxDrRKQwcMHnNo93JG0TmWyjNNTEs+qDUESC2d/PlysrvY8c4GMF1qcadZipWtWvcwVHM1/+LNZ+oHA5BeaGt84TFqAhdfBRB6X/b6ASPYXOwFwObhofadsoMBbd3Kqpal8RWwlNciFFpX/+37SY02m4+VkkNgq2mdaKv7Md12/+yTY0fpcLE9e9gqNvtyojK/4Db975UNoxVM9tls/On/uY/0UYKDcaOdmXB0bf9ayfaKM7Iicq+Aqfvz9FCpbSkTi1UDEpbySGU3Uoj3nA2cUsPyVk8V0V1nMk43shn3mL9I5o+zed5ZSNPGZMbsgHiyoYB9Df/dpYR7sFme2MzKMtokNOG9mlCoLZ7Zhxy9xpUhoe0Mae0GHbMggyP4q7ptvX6h3Kq8sRKveB25klFUy5reQS6e1PuV50L7PF+pl7zjut0KCrreso1HPCLV789fB7xRRcqrqgxqp4Q6xhOQoi2z4HC231eesD+nDBtf4ZdIafbc3qoyzlLe/FMp2dbeY7Ic8cX3nbOF3Hup239v4rncz7KvOd+/Ps5JBnNHnEnwep+p8KbrVuLPn/3ShkDrgSPD7zog+67Cv5VZvJ3smbXwQ+9ABMf9OBqsG9VMLZOXsVyE2Fynn/gvOAt5eXf+sLvUOSLvy4lWym19GV6c+AqKgRe5WPKiIeCMQc5SqEQZSkKxShYyb4urTf8pgwl2Ioyrv47dFxYu5CIIASXkKUOfcGzYVjyBOXZZUOJozr+dyqYgB49WCkpqFfpEgECEkKq2pG4k6bG6paLmZPS6zSW1rTvQwdI35mpN/VRjU35ad3vc4sHeD0nDwGGQVlzlfew4vHOcX9ueS3q/rRessvvg8/hep4m+T6XkrNL6XT6G+iLvuiLfjDgiOiL7qUe3X6/EkEdkm2yXXbITtklVbJbquU/qZE9slf2Yf/eHg287isywOfX/BJgCjsdtzIk74c/+k/x9YU61LRTj4qOTlefOQTK+OTCYZ+CZzzPX5yP42X+6ny8rzffwLcH34H30fBaVmjdCSzCasYaD/n41ang/4FrIuVpfWVbfDjadyby5Fb80T9zn3th+3EP3PV9nmtS0PROYv7C5FVm8ugW/Q+Aa6ZtxoLnRgYApgK08VG67s1O7tVpdv4okt0TEndHPKjlLvGJv21AU80QsCB9VG56X+g3uGMVJnuwSwDk2355ckqL5PNObOHuLYO5OlfavkSkyT4KH3wASU16DAgTZcFNzCfHRtmKTCPj3VoTTpA1ZW7ex1B43Ab+vWdOWH2MYRDiRaSARtfynbt2Y6jMTKk6MpesaemdpbS/J80okm/shMTZqs1BAkOtvZFAHxRK0pLVmMdkm10RMIbWtgIY/Iu6hyrMrpCNqZ/dDjilTm6RvOaE5OpsWfPujjheeucfAWvIkQszBueKHwEnMgYgKLUxGO4MYQo5bveSkvsM2eTuCJRKuZRyMVU+pkx3tt+7w445a0t/tSAMxiMID0lv753Du/6PyRjXiwwVP1nw2CilvzNjC+GEJ3dMPLPp9l8+3RYTvSCkvJSC7YeIe9v1yV4R2foD+n/QW85ZaOUntkcjq+W4gPOPUjzH1LCFAMeWekH26s2XKzwBegBQF8w2qr5C3Nvw3VkY/Y7gAn2KfgxrFu16WQilW7uPZl+FQ21gTxVWZ+aOZnVBJtbFFDDFyeG05/b/4CbhbiRS0y5ZELCTIyY+3dlKg+ke6JPb2+7eIrkVfQ7avsx45EU07i1kMLa65+BrT8c4NHzcLBXm7kbn03OJPL82O71vXA44NEn51EvfggBW9//clofb2+7esiUsU6cBkLtfVAP2lX27AevOgqhx+kwMRspcwYwAsnxBNF82PddQoX/+3t6TCOk0jk34PyaABLKYkKBuoQDyut8QPVZFvTEvtpycSH8S8ujfMscBbSbQ8Cz/7LHkW7+fqt2kdO7jMi5lSAdXidvZbaAyXRD6k9Jql2W4tt87ae2d4f26YtZVWamMGlNrefBwVit3NYxlVpCxaogAPOqCIA6n3abYYPjxPii4tPxv3VFs1UbdeMaxyHaEMB1NvdEpNXqvmxiBld54Mqm3aalZSknKcuyZxOOkNxJIJCCT4VKo+py1gbDVmM6Wc5H1fGsUEnDcnNFYLnx59izxXxazxaWqzrjJ9ArQz3KDy9zPWL5DIfeyke/QWRbZ8glW+D3zecTarBZ9Nczw8MSseqIjPJWwGLY1hsEPNATZ04HMWTun1j1StY40HvV+cSw7kfmrxt0cG5m6zudaziPvH00gOqoNPm9v7lu9oFm2mPRkFDJmtKzqO9PGtZKkU8JpC0ZbU8DNcmoVm1YWMftCOeq96WTQmrfxB+KoXe8a6/nUKI7jgdWGxnIv9tzkP3tas8V2VWfNZOakRP/MJtvcz2q+Qwv38jDfYaww+eh5iqrXEf0T63Wo6C1HgGZtowUZTImYNdLsqh7biVYBa0ihSYUGu+JVV6f39HMu2NgqrAms+pN30aWcdIY18y9ni1qJi4KPWMnXmAhYq1oOLRRkP9A/MZL/ymfpyy+/FkBKPHLzDaWjPxB4Yuy15oGG3zrT23tQwH1g+vfe7tbpvvnyqU78P9mx7FtfOrhmp2+Cz2/f5dT36n2T/33N0sJcKzMQg89/v1ez14hUSIi8V1Xn12qMvOUQkbB9NbmsrO9dZJPvtfpSwd7R120Fli/vJ4Wy058E77KZ/89b/HDoHviXQ3EA8MeX5S1rocMbPSgRX0cvIygEIPCzdw04/POG/XPw4oD3NL+DjBXLt32nc8Hy0fb9t61N/pDFr5DGJy2quVTIznX6gJwecfZ3ixp2CtnJx76IdXCuzPNswXSj8bS6xouwdugcvmszi9QMnIpYb8bF1WadmQlxSPnPHOShRht+td6e7/0/WtIw1f0duGSGnG1Db2aItpM0GswwPcjZATv8CMNkSL7isc7fxp1hGLVfoW/FY5uw1mz2DuiGW3gMKyVwHe0ID043FIdqPqNGUeM1PIV4MKV4mI1WKef+Pwxc5JGPxa7uw7jAxPdxzezxbPzXcdOaoFsPz7WNNmTcNtYQCKkVIkfkNinjNsdDCdHQR8P+rsN0D4l4RvZ8/xgaCjAR9F78siiXX9YMI0ke7OwAZ6XjuHaXZhrT+RWXVqjn7MG5DbFVYWo6iGsV8JtmcjtQOyAGBdHwRg7yMA7ayOyymioWF7h6qfsoY7hmwxl2u78xo7JX2nRG6cMMFkTAhXbT1g4KNl+sJJi0E4xg0le6IpEUssLSi0CCGSzhEnpx2VfInbJSVgCsp5fiWgJoXqvzQ8o4jq2+Ml2fp9mzE+rbmF1Ls2vGdGwTtNK1HMOIRhjDCPVCZhvi0a9xrp0p5CLUisa7fuOmT9KQ3ZqBEyMYHNuRjDCgw4LO1K9VzyOMrJCpv/ljyKHRBqdGVgnwJ5OW88UbLQ/tCBpUWUSOKyjZ0WrBLmTYFQjd4EyeBlmxHBGaMI5FnEMXziMPLVjDcWzgJrZ9c0ALxrI984m5p1sUxpb19oGn0HisdzV/8thjPC8d189p0HGK3UR+bjGQevxKxu/uZtqHOaPujZY5MGIErf4CmAEe9RfKUCml1asVNK2JIsWAgY2gWoMwGxOsD4Tr47TpMw76PP02p6j0Wa+/EFgZiqyHGLqR6KW1gtSaCGf+y2zEBWuwamNO6gNn9REffaYfIX49InGJVvqhTsHxm/boHCM1J7/cUo8FyKOG4V4Srlq5WGloAngZIB+AAgAKL4Tmc5kBHoUGAE0BABzVPDy1zMMrICgxMgKMgBfNeCEr7uE54FbB9Zg/ods7vKfvvzmUBBBAAInP+Ix3h3yFEvcXrFMPEQCgzQBRALwN4E0AvwO4HCCfcudyTs83352YphDnitpza0hEeUn+ARh0VjbvTxQwIDAMsgQsuwCKgSQgkIYSIMyq92PPQ+1Lo7m1/iVltyIYKrqVgADHtlLgLo1WGqT83MoCZ061MmBJOxVmlcxWHSAQ0aKLPp4nQgQB2EJ19eNEqze6aLb6oAoCysKHlULBbaaZapZ8GUaRyZZnwpJqlinSzCURKbPYNDHtsmeZYaY8zlSJUHlusrsZKlNeU3MGkcKy5XJnz16WbNNkmi7L7nTFNORSu+SiOWZwIXMjPaQHHW1TuQYiWvL7RpRD74ziYUbSyzOSM1hacjFFpXOc6D2UhJ6W6USING7ca4+AUtvt86PHJGC2SE4SWxKOnpRzU1GLPS3FVBOfPbPMNs0Uxyk/+a5nJkrlxuFWKabod50pXzo762XJYK+Zq9zK2phZwm+SNQLWXa99HTwMO8x3a6wAxFK6o46oc9eUqQgCo0M5fVgwLA5ITTVgeFywUm8aJVU85Is5EwJrNqLO6EbQpbD1ILGH7rmfnmgzISPZiTejsxeDRufwd5RRpgtEU5gZRzMc86+nHnmceRZZikczfnhWSOO40dmScRKMRudMFWrVjuLqhWeem5mzoDQ8tzx07vRTKp9888gvTz9cLBAWTpDgvApGKMAsc8yN2OxIQsqUoapQYQVGrkWQLIOCCy9Ernmy5RSBgopWqLAiRRUeHaOxXpIXXb48BeJHGI0jp7Gwm7DnDb2J9AXUJIWlSJVWhFJlditWpKR0GTJxOyEyXlEml4VfdALZrRRTjtxiLUxI1HwKC0Sw0YujRxRPmRIupUS1fopQo5dE73G/fMe2xCZLq24IMT36DNaHmGDc8t14jGmg41q1rZU2tVOX7lUnzrpvHbapRx0zuhobHfcJV1b7sTjplNPOWIqL9h9z1fgEvPlKlsqiWitWrTnrnPMxLhNJ8ZUPHSedsrwLbrjpVmedw8Ny2hm33eq2O2nTdcjQ7mbipiuuOuAgU2YkhH5rdd56afss9N4TTedDpoceVcOfH60et8pqayy2w87knrbCsu567kW/0a9swKAhw0aMkigoRdJx7Arxm9nJxc3Dy8cvIFiHTl04/QNTg4aMkgoJi4iKRfklIBAlWVE13TAt23E9M4LN4fLMSQtLPiUIpjFJJJZIZXKFUqV2Smu0Or2VtY2tnaFxfOxGmKZKwkKK/mBFoVOXDAr3K0OvsCDHOmwXOUfSO9LW5jApSfaAUjGskbmzW9nPylSSYC85zgl/osBpLkLG4Wnaic5R3F1D/RMRLiqWUECx+O6qcCVyNsntiaG5rvk0IitGgzwUyxrfF3GN7h9yaF5nIc687EXwkxzcmTdkuE8CkrbCYx3zjwNgvOTEikhJTCjymjI2Uy+j6Cvw/JfiJTeY4yv1Zyb41SETTVIiNBA9JITXqHR3ql2RPHEObyV3csIDPGnU4IcqNMenieM3soYnsiDOnjnoGxE1wUFyfDuCaKm8mA7OItmzpKArapRolImTwAzkY2kWMpXXwqrJ4GJ9kSOQE8XJ7JZXRToHT31kqoHfyEO6kUDmkEi8mCMUtUJpRS+pXFirUMyMGMNMXa6GdKK2GurCSgysycRYNzyJYDPAzsSZbbSAbUSzk1oJ4LkANn7Xmg64HOUri0Z77eU+gAfwRSUWy6AzM7HGgwbDA/cNDI9YithVdAGbXFX0A/mSvRQqWbHRPB2ySL4VJyPhXrGu+hN21wtR0GTSTCOLHAHYIyh5GHGmA55T45o9nmmkKIqrNTOVdt3ILB0CHWmYVqYpbtrONO/p3ib2OkU7mmxoAI8vzNEYOz/GbrswKXAI+xS2u61IyEfVPB2hYJMZHa0Yu4fXeP5bbZxRMVcgNCNRzg+CDGGwEJGncfPyrNoujp4iM+lO6QrU6vkLW8WpgmwzWRKJ4yojU5BlEtDooMV81sYiiLhPdcAADXPZ0Hq7D2+wIU7/DXPZBMRK1hwM35Q+M8YzxkXetfSerKv7ha6Yh0Q+OWOM3prewTmLZQxW01nGYHmbZU02xGHDXJa3WbMmumKVxTUpB2jZdr7/OEMeVW1w5Fqf3SCWGYZBlUsEAbnWZzlqyDEKcARy0pFTKOAIrCc9CAhsB4TsX4qVAhBjvicwAX46EFhpWTtUAQgCcqw0aggEAqMQAAR8IBAIehAQCIQExUoBiAAaBMoQP7GcxkR/G4OGn+cF6t1yONGxiJjK9yVt4EwAxR9ag3DybbLEacqAEqBjIVa/M8E5xQS7nmbI4rQKhWUTjzjsLcc99Nb/SYyEt0rOHPZDLRyTcRPl+P9VDCeKOCzshFo7RM47Y1UNX0NaJUz5FlLNLWs6YSHottegR65Z8XSMQq45TUh5F2K1kWzgf4EblQuWE51trKdMUpzo4Cfx1lMqwET1q8YIFw1Mx10Usb7PoJF+G4Wp+MQi4jj8xFTbX3g5YW7p3k4dF/pJEB4yHI0pAfL33IWk7SmG6XFijFJH7f8FFQymaWHwoFiFZjpP3ThK+CLB6fdJOS79n/5N1dPPAwAAAA==) + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 500; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 600; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 600; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 800; + font-display: block; + src: url(data:font/woff2;base64,d09GMgABAAAAAF9QABAAAAABByQAAF7sAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoFQG4GvcBzVcAZgP1NUQVRaAIU2EQgKgb4cgaBMC4gOAAE2AiQDkBgEIAWFHgehBAwHGy7zZ7B22zlPJW4bAEV9pG/zyWvw1CLs13M7WmHPqMDZCBs2DngZ+LvL/v///6SkY8jG8gNU9ZZVQczdwyhr68NUeChi9tHQPJaJlMiSt9607gmH1PpogzX3/XwdzDGpLjMnE2S25GZF3PmEPAUPKBVQQCc9ZasvBURVO52391HNzd+ivXytRGe2RELD4daREWRFIHQwEplCYuasWzYhM0x/0CGaol08RAVJ5tjMzbcZn/K7/Pf6v+t2M98L4/9RtcGnqERV/q4Q0/X+1o0eGed9bJq/TLVBZFQqaXaHrPPvw7rCq9K48o+pwL7Ns8SPrgJjl82IWHXSFyrCA6pqFskJfhlM/zw/tz/nvrdgjB7I5yNSTqrF+AqzMGogjMHoHAwGDPsjoE5sLFTKKEIbEz+CiVHUV+SjXxFmFALksIhtJwlA6+nn5xBss7OxG52ijShYoFIhqJSggNGEomJEbXZsTudcpnNz4fJZ//8qfvtcf8/3XboVPvkV8KviFtzU3OBvCk/Bea++N4Un4ETbvmQu4MS8u4DYgIdy2F3HSzlRDGrOyrB1Wzgaz+AF/qlG/u/c6Z4krA4lQFk0alvcL4RFS4xHiReKcFHrmiRZ7o3ASYzE4RF4j1Ug7450lguSYWdHEMA+RZcuRZlSYgPrfIRazUPU+togkuxDnUlXR9ErkuKXHdMnsuMo5s878Igl2oYOE+IINIwd5k6Ae4elIyD//3Kw85ZL4rWoBRqw/fu/cxLd/bQ8NHYvTVhSq074AWbUAWt1//9+7ixVI4vfL+ZvYg97M02ZFP4WyaQlDokQScRNzS1VjuvUoIkjzuSxn9jP7LfhFhItcTWXMy9f6Jfl8WhklapTldXIQdjQ5bJHSZ5A3darIVermB6MMs+5/7jg1dqWedFQIRWGZtMJiWyS2UaKdChl5YfU7P4dJUwPRNvmb+Cy4Aoter5up3gcx82+KI4Dsv6VqVY6zSUeWFmueP+ETufw93LvbErijXX5Z181O7sLYHa4xGJBHne5wgkk5ZaQ6CSVAPkloSsQcpTe6e69O+MjQKYE8hx1zrjorY9c6H0QfhoaY9L40/jT6Hn+ZfnN7vsnm8n/1NkC2FVuKFWqD3320vo4XFXILocSTxAK2eMJtjSNAv797VlmK3waWgwpwl5i17SfPDbl+f+/N/XvNUCzAnTwrYg19CntJp0qBUunjM2KJUDF7BPm/9ZSm7nAJiX8BVYxrsxK3+1kbpKbzO1LtgSKSFfdLFAISJgyCFNZ66vMvVNXdymgFvW/liq91bvnsnK/8WxKxSLEYoFfE0bk3T3V/e6XVlEvKEE65rBzWGAmgITT8M/rPXLb3BzhgfCyyU/zxGBCOAhpqotlTNRAVEDLWKyT/K7fijvWAqgoH+QYsCJY+HdLsO8H9GIPIl0oEkpwIrscZ8636rekPa5AmiGYxphgjBDCCK8RJjTZd3+dfif2//+kNJD7li1vuyoqYkRVVIyIqFHRt/1tqVZiZuOoPsXGS4DMq788e8im0TYToz8TPCoXfD+f7TV5BhpLKv3LmPsW/x1q7q9ChKAJAPAGBCMEJaRMHaTBU8hzXZAePyG/jUAJEkBpZADKRS6gmqgF6DjQ0PFgobNRQhdihSr1hW43GlpuPHS3qdAjVkKP2RN60anQJmdCW9yOcsDH0CF9UX6hRoEQgIMBO4MwbXFLqzZD1BD0dgiwI0uUoS/2Y4EfePxoMpLA5tfj6ESw+WssTQEjNAAJARQUw1muXo5z3fZXRgp4HqrVj3UXMP17J3nvjQDCULMp1oA06OoCzCO+K9VX7H2aP02YaEM4IDjP5gSnPC4MTBjSxW1uYVFMg9C68yH0w7UKNUc/GKP6owEf0mQ3z4wc2bTbR+QwqoOTxHvgSc2b0OQwIFy2MBdIcGUnuRnGloJiavhABikSXU4QL6YxDgszaOvq+b+/KcG8qZi5xfsxf6p04M4bJ/YKMx70/bohfgNX7720bh3dArJO56qUzDhrT/0WXLC6bpmV2oeaXkw26wWXzqwKXZAj7VhUi9JsVJKweGo486tCqpUmAilQ5btGcqQJT/2KvWirWpkC2demVE0laK+lxu/oSxA/ZvUkimooWbFcHF2iaMNK/ehUPXtC2kmvzD01ZUkXuSs0CmLkp+62qvHHjkWkD2K1viHmAAGWYS/2x50jazCJ6FGzPEwgpYwAcGyZQ8Ax6b/XISfERoUHGFAQEfDnHqa4YI10DFjnhxocxxoBVJkvWbipirKWQqhqB+ZFPe338bo617B2DLWtDlrvhkimfBg/hNPq6iGpWORe+YGFYHw1CMsWVi0D24wvINORnSlRewnra1nCPwMWp6OPuKp5vAguH+clEaXgFriVkRuRZ2Hyu4qZkhPFXryRRqNpvuzGfE6YXUo3Oxa7kRv/adZDmvM0Xsox5lxOvZYHqf25OM0gsQ/xjRYfh/HVnsPDDnkt5afRTHpbHzzGB41BsIWLEcPFiBt5wfWoC69Gs4r/jbBiDi+33SI4p+Tk3qeKbbcYA13yUNWvrnp32pNy5G6oQeNBFXsVu8l3synbpnu0mB7DP4qj7f7+sRRzlkMNdE804908+zUDMvLX9nq0rUN+aaXo8nVYuaSMOGUEaPd0bbQbpDH5Ix254vBy2y0g0qGncD3bUkNw2o/FqI2OddMJKdYU5yrvdRgIvFsW1MaH7zjpnqda71oPPffZV9/8yM871fBkZBYzwIzWjPaM7kV6t2nFNWxgApxrONPJjnX444FQx2s23eAWaljd4ANzAc07l95C0EL4T2/CjnnP4pGc6ovvniwDAWt3X3dH6wbvXdJ7FhNgmXsKcM225rsi8O46lTvt+mrZRsXv/uvMpezMLRTNxu5PdXQmUGcE5q6/AEC7MVigD4Ujk5HfmI8+6NSnx4uwIoNn8uNw3rtTT9aw5DWt+26z1n2pwrKkyl7WusnCHe3r+/pFLelSa6Qyuy3/fUStq3jNyn2Lo+DEs10W1+llG3MrZ/S/l/pUhMf6cxgLjUdeNLPgKEWb0gySyetLWiAjCPfEMnJkOy9sPXKBp0FpFff/7U6HOvpcaODGly1/JebbSGmFMlussl2dtZfcARc1a0vfZU7/L3op9+h3EGCCega/sA2Ta/YAtNEADaPHZx6hTCAjD731fougjdr7v+ACTYDabXU0sOd3XjudEGxx4P3BpY7SGcls7HArLZaIwlVrJWwWv2eg/TCH2Y1nY1f35XCF+nODvFPji7pGWVdyj4ZOy/Ok/dlhWAz6PTkpi07xyBGcwkuzOvnUxLUWQMCwRIT4ml99BvxOmns+w1mpGppce7APX0SQVS4VSaVVnesczsa9wluxHw3tFjptWbna1hsnWUUthKay9xlX+hU7Et/eVQ8XcjUVWbmkF7Ik461ArWfC5uPSr50pjl5dcRrd03Nw6lXN806/QenW9gIQaf1ni8sx/Bnhdu1l3Ojgmkx5JxQcGyayPCUhkzCjAVjvGSVafJ95xF0QG1bDCkWR2sPbifw7Fs+Bfq+o7Ngw9qDKOf1LKHpzu9Akj4Yc+vO29Ib57bc/s39p5yEx+O0k7a8TZ8Qv6ewgzK8rYYNfUzvOmw3tp9xBvr5IdsjyWs6p16fDiSvNhXmIa5+XWtCn9SJHfnknNRTD8ZgWz4x0S/HCJnVJvXGx72+IsI1dO55JdAIjZuAKuivMdHcF/vLsbkygVEN1YGsGpK4FxHU8pKHVU9PUHSYtBRiNiXlBZsXdnnlcvDYhkaBPlUzUhFLkZJ2UIpcKqPKoTE1Tq9fajDpsa16DBlvasPGETQIFNA2JmoMCW7hL4pbtKqjdFyTp4AcX0gknC03tceE901s0wpIhkJWf2RZGZnElALppARilDWCXDsC4dAF4QQB00wewzkAFy+EQ3g0V0UNYqCcQ7SQInQwRp0DoVIhWAOlEgAwjQZrOgTSdC2k6D2LqB9nGgygDIPMEEBoE0QZDaChEGwapG37P1IyQEccomZ/Z0bLeJkZObBPIY5msIIZpQGg6ZFARNKbiwJytorp7mbKIOSpC5UC0eRCaDxELIHR5gNkrNGavAqJdDaFrAtnstdpuX6czDUuAaEshk3ogphsg7bapaQSY9IcfaGwjkH2jkFlj0ITGIb0moD+bUjON94R+s6jphXzCpnnUxgN3Woy/zO+eZ6HPvYiQBfGyZEbTGBQr+vkjWOPnn7uGqA5jVhobO+yoj4UcEu+xYBEGD46NiJg2HtSJjJw2z2dLRT0SNZ3rXOf3S7EvBXbY4XcnhBV7SOAIDRzqNHCoFfO2ItpUQsOfjP3J+FjUISEfjfd4sCGRHguTFsIUF48Wyjg2GCxieFVZM8JnSJcJ81avuy3a+3sI4oAG2FPPtxu4psFxHyqVPcxIS2fmWvmyRfHn8BHdNJBCFrJRDZdJ/CPFTWo3aMyKVUysA/YRygpG7wnAt6QcOp8kF3ciRQPEcyfjCd3JTCSCHvQXxT64oMuYhZY1OqrhaJ1eqfJO/BED4rKS/IBeBmgmJM3EgZK6wJICuMEABkxgXfrsRNtOIkQC4AqACNAAB7vXUfttVuqFqU4+5ze00ly2+ysaQRoSGOSwCnDEeaxI8255GyUFxJjukcE3ro7T9XaeAYYZvixi6R5tmtkWhTqA3fa41W3OucezZIYFLS1wUY6yyPh8Gk7avqguRIU4PXztgXQko3Rao+ZjENAdxdOjkAEGYJhJD1ti5IVBMwl0BK6Yrp+wLbJl3QWt2iioAEC0RBgyGSbd0cXgCCN495wWRNreKCYMuQQFMCgWRp1QLjxQZgw7ALKkRYjL2DZppdG5IWwHQzFljXaqrsh0dRk7eCVLo2hbCRrzYTm9gKZKo4LZYRgWclOyZ7G1GWo3qPUfIrX/1P/ZvCTcN/HBr5Cjngdo4LgbWAiE2byhHWo9B9w3rOlHirqei6/KvvtFtve4X6qACLFr3T9M0QN5XhmQ1jjLS4xrSfcIMV8zbaLS/lMOxLqbOodYt+slzkzyPv3VhtUTkqWw/9RGinS33nuUXtn1d+o16Mx4FKv7vnNqimVRI/ONuOJiSkPUUHdSQpLF7YYySRIfksBqciWbOCokA+2wnBfXfewWbKRZ6l5fQLsN/o87PCqjMm63pnNc6uE4p2cgI0fRWkRXKbBy54yzU2wYrYlgBo0RZSk5ceP3f36anqnXSqlo93CK/HILdsfug/vvHVKHJx12Rmq2KdAO5yIuHkb08DzUDr2q3eORD5pXDrPFfHjoS/ecDsmVlaqJED+t48zhTWEsK1QJCGrCojO0KASDSOSayQ14aGZHm0dXQJb7ZgROdMdoqoxIQsuu/wA5uM1LijQbD8eTPAvVs6znxC5cbDat7nqAelEAh/mlIdQ3iIdcvKz057znQHbUXhxJue3qQL3w1BJMyRoEyRlMZ4oAjhvominfq5C2gk9qQjFQMby9aLIvwfRqSrqaT8shiETkwnH2MZGQOsVNjUN+pFqpGCSInUnjFru+/YUqLi5+2FxD0R+S2C/z45G8SUOFShhmpqjQ1ycyG+om65wK4zn7OPECO9K67c0Tzd4QoE1kLLt5vdUmqzA6ka4mgrczWUc5uosRNWlNGI4oNpUhZaxUjXzHAfpE9KN2cKzsnu5PwcAare137PpIhPtBZHdEcexxbJl8cfsV2QSu+0BwYLMO9+E4O/Wy159kP21FUmKnwfZ3ACQUh1FyPdqV0Kptn6gJjF6TD4N5HrUwkr+JeSB35SXysLQQCTmwB6MjoebLr7kdW5HfULTNz+dWeF3of0WT2TUwalViCLK/4bup66cAfLl4yC1YqfyJxEtRUIuY3B8ukwymZww7qiu62uQ4IMTq9Se3esFeuqKTTeKgUReILI6e2bnoorJzvQ1QE5LA9fXwfReWdGJATGyT10brOjO+RS7/UIEsMeMr4GwCWuvP/Ly2KJ2XTATaev/jIqSHOkJlDoNckTj//GokTh4KzLjUatLKz/EcLob23sWy2w+iS53FRRqT91j3Vug9yn3mFckkfBylPf9QHFeuonvDGzb6PX9yZHcJH957aYwRfwRx6PAxLGKlgxnADmAhAADElbsZ18LvpxL3OUDKICKFM+8OjDMpF9TkdQcgKdQUX340nZl0n1FncSCRhWsl1fPOhOADrGCygBfn0+Xbun5PPfd3Y9r2/PZG6yVlCttzr4QAajBgv61Gq0tI7M+owe0rg/3HKyTcNkG5prI2sHhEFHi2afdkDDd8e+zKnf08iF7YJjXEzFMfGIU5tl92neB/ksS50xbq/qQIkOjkrd1Ip+5TgmK2bPEuJJrvqhDYq/uvECvIT5o5njtNScDFvW2R+oeZuRODjxaUS7a/JTNr4Ym1wt2kCWbikZDdQfeBUMEy9T0tRERldYvv2NfaX0/+5xd/QvgJ8D9G+IFQmokUDDcHmTDSAlRHwCO40UILW2jjeJ500Io3XXSHoYcCDKa4EJO9OHEccPE4SiTgLJmIqxQ53Egp+CqgEqhMDaR6rdA6DMIbNozloIPiqD22xDO9/PxqgCjCagQtGGjTgejiodFnDrEwHg2fNcSGLR479hAHTnicuUBcubLgxhsi4IvGzzKIP380AQIhYsF0SITQIFQSNZKl+kMaqbGyZNMlo8Cl0AoGVtqAxUabIGX2IVSoYGm/gwiVqiE1amlxyGEmjjhGi+OOM3HCKVrUqWeowXnIBddQXHcX4Z77KB54gNDuEYrHnlLnmWeQ515i0qELm27dpunxBps+/Ti89YGxAR8ZGfQNh+9+GuOXX5Bhwwi//TbZiBHWaSIBx7SQAvd0kAET00UmOAVBNjimj2owPQPkwKa5LBDkC4X5FJXf05xrhmG84xdloDjKUKTfEyqVSWVS2fWWY31HvhM78p26lA8bprPYFYwyUIZIhxLpCEguak5pTomjDBRHcZSB4qiEYaQlny/u3mpAt5M0g77RrHaDZqWnF13nvJhaqItF7tYwFXbQy+5NvtbIryIoKGdKZjgSa4g1FOpHm7fnW8xRnenP9lQ40u3sWkBCQbdRzb+7asI1N3S76Z5xDz0yzhQtnglVSrXUnKouv2LWxPDOODt4MNrVTdo2aYpPmso0L4zb1LekbSHLjLCThb5oS1JpUtVlGLfLMK5Fa4ZGhkaGRun1S0ulUrvaSYBxMa5SYVapkCXunRYlYgdmxaqV7irG7bIuw7gNW27FDLg29MwbmFtvV46Z9amtwWD90l7ESn3tP9Y1LTMlCv2oY8Y9fQmgx74PMntfPqeXXf8aOhbQr4gAEAT7YFsf+gGjnp2haGlVUiGKOGdsWch5ADNkqojQ5ftkwIjUNWZY0ZhpLZvbHMIAhyX/jokLKKkFCh10AIchhgniEA0uix4ECUc5QTQ/LDz/94pavQEAsokAFJUAVEtVoG3MCbrtlKwHGMRhBiTMK2s2bNmx58CRE2cuXEG5cQfjxZsPfwEQgiGhhAoTLkIkNIwo0WJg4XDxJBIQ2qZXG29SqUp1auhQ64ijjjnhpFNpMEuj084465zzLrjokiaXXXHVNffc1+6hR5751RKyUmS3mpD8QKExMLGwqeFQx6VBk1ZLkCQLadkk5yJFatLSSJchk7SleA74ju+2KzVmqXXEUceccNKpE9KvfU5jDwyBVx8e9gfgBnhDCAB9QAR8FMCOxdLRcMRRx5xw0il16g9pSscXYftbf1Ac9p2mwPX/u45mTb+sy1xJzxxNCy0Ih6aFoxgowMcCAnl7Z8TPKFfBMpC/nPitK96c98dD6BAmApqAiFK5ClUaNGrWqs0997sH3l4ktCg3eM4hXFSGy5n6oGfo/a29H/fH6rl0/7qtt/Xx8N1T4mPWXqujLNXY8+GkeM/Dbu9WLpeT2NxD/y5AFoRK3wPVbJBXE8Ppz97uYJ/v9u66tyqWdIk2B5vL03SgHmj/1/p42LevEHQZ0CM5pQxcTcJEQEgDP/5MSKxgpkKF2TVfmOMYm1vnrXnOSljo8jFZ5IZmiz3TZakeH4jqNotpac2UYuQvNVy8tKLG0qsWyyhtXBbLrkWWrDZYTt1g8u/kyVRgI3vzcgZ15ZLL28yW6RmLO9Ykuk/pGR4LlsYTmGGmWWabw8dc83C38y2w0CKLLbGUkC//SMJCKnRWGMJFiBQlWoxYceIlSJSU5GQpUlOnWX31Uf+h36AhKp989sVX305J9NMxxWdUAAAAAGBkpMkKy44sSY5ccnnyFVCkMGS5Fa0GyTEpUpMVlR1ZRI5ccnnyFVB8pbZkqIGkQkhfxH/6DRqi8slnX3z1bRIAjkhyXIrUyIJy5JLLk6+A4pSfkpEgaKSkxaTLkEkaWUCOXHJ58hVQpC/uP/3eeud/730waIjKJ5998bX71qw3bH36u4Fb4yC1KNAYmFjY1HCo49KgSYvrxooQZEgUWn644sQSAo+U7AjeMrfJ6iV2SVNeXHHUvAHLOgH0W0adByoMD2kQw85RHcLsQp4IdKASOd0HIYctRagr6oswq1xF9H7pitIAKfTj7X5EjdbwYoIm/ZRskI8WyOvVk4eubV5geYy0s1jUBz3EVzfE6XMfAXXWxDTn0+Evejg9VmD/EK31W7bn57MDoyoZ2RFxQ3M64jp16dbjX6+81utNvdsz5Lsf3U+mQBLePG5ItU8vJdJ+l1cUTCsK7YqJ7laTZBnIKKe8RkfEUrSmyqbWbGXz9uxotHOgbTF00pdO8jN9ccqxUIo5WIEWNaBisNMZQqZR9l2/le0Ic/h+3+OmiSV40Qv7mQIHyDQrgN/SCwzKcgZO7yKPZxH7pjdOkkL2KzI5DVLeKanJEPfJCI+Eed/UyCSY+ctKzoBpd/ppIgI8Pz0zl1BmA86aYwJ1SneBDQcummjTxWPAkBFjJkwBxtXKnDkdcxb4JjgRfj67fYbdX7rPuze6p7vrup1w7Xdtds10RbqaXLzL73AL9kAnZAIGWfDOryPru/9D4Dzr3G8Ub/i94ZrhNPfxpU00sZgRiCCAsCEkcc0INVATtVCbOQuWrFhz5MQVlDMXbtx5gtnCgxdvNmzZsefAhy8//gIEgguCEAIJJVSYcBEioQXDiBIdgSNBdQAvhhbH+eLTTkCQQSKixiQlyzCFgowq0drYOnXl2HV3c14uERmHIa2czWzioHqon0L+yUNEQkVDRsEQK048JhYBkWrulClXUTdepVqNTrXq1O8oxTJ3sxatuiIisrdycVoQObWIZU2EhIyQ0gTtdzGJFPkkfyw988prvd7o859+b73zv/c+RGAxYAB4MfRQkeTYJlPENUtNGhbrzCC1rsZgAlz8eeaZf9qf/If7RD66TNWtvDfu4dt9y2/6pd+ga2Fq/gch+Uknuv/b3Bv8Y2xowti+wYER9VlLkd4USdCLbF3yHcHjDp0xIYCEkaCNfVrVGVVNAskFBAa9cE0tJQqyw+7XZMhZpG95KwQcj4Lq+a/m3i2kArks7zQjXlKJ2GuhlU1XRApJ2aya92LjILgVQkV6RLcXRjBu9ht4wR0slb6DZpfYx9CGSMFoDg+u38dPB4IMIBApVAdwF9RPDQrWuHK/TCthvxlQ7M4cBxArKq9eO4Ux1iKWT6te2kSPJMRyaNUyML7hF8ugecUpBF24hBxPJaHm2TojSKhRXt9HIKGGwui9kFAjSu+3kVBzQdnifv0kJNTo2a2XQULNa7XZkFCzWg2GhJqlkZlIqCmF+XuD6MJacGkC0/kSAq8nJZYpWiJ1FVrjSqJtz3zIgFD3sxaY02HZfISj6T7TYuMRliaQt7Az0qSMcQr9HHo4t/xWj3bSjqhb1mGnUOpd3TUVNoKU2jwcetik0IvhKX8a0nNPuaCyLT/i7LewgQ0sxoYMBZnCGEMZ+1Y6Tc9oSapvqssxjdKUvlRjcoDc66CL2Vu+Qk3YAy1mL6LWuAC1UWs3LachqxJ+ApvmPKy98LGRVw4sqKRFDSq52zZByXamLBwMIkAEVZhWfQ3bNkwBS4DVTjAKfte8PCDtiH0QdNkBCvSOB27wS9lBtMcAzUoni79FF0c9fgo2bFQmxiy+HHAsTp3jcvq2AVL87RVg17jp5X63tBXFIFQumLJ9YuLcFZ1ytv27Q7WKQ/2Mu1dKHAUmNJguiideai2ktl4PFUvAlKlgNDRV0mo0/pRR3//MDPnBYLTROc/q7Kj9Gbh3o5FHcKOBi3AjTjXceFKUKePmcj65UtAUvJVRMTr8IMXQBKBT8WYwO1A+3mBqCNXF68Nmbm1X4lDg31XRO4If/zyz4qjKNaFCfl9eYeFmsQjXhohCc0Een+pRnNjjUH0eBEqGry1RJ6ikIVFYtfcuCMZ47iOaJTZETRGhJMlthF2hkS4n+fu0T7GK2E5lBP4WmWkyKwYIXJj+H7HwWcuecO+4dx0Ibccb9/KUUHR5opWuow7YYYPV5NLECKE+brNN48EBP034WmOUy9VbrkyTXYOM/ezS6hRXqskUyMxfoiXNKm/hqbdM8RmtzCvzyspkc8XAiun221z7V1n2sMFPSyAWZNz3h10aC09OrJgzZkA7SawvHewp2JtL4onHa9EeLTn6OJqDsM16u9eqp/awnVtuUxDEykmHf1mwyRXNaisHm7bdCczT0lnChSlNKIBiKjeAAMdMbrnEPM/RtiHtzGOQN4KIKIEqZgRTisQBbQqVBPVtVPSck7WUtD3+Q7vu/dvq/t/r3/Uf4e/zM42pv+gFT3/gUW/68EPPf+qjX/mi13ziYXXg/OPaXVx5yxtc7V7v+mYXXXiFu77k9m567Svex1vc8DqXX01teLnYyeLCOvuzx603WnOny+x8X7a14erL7mCTlWsuUSPs7+OzmnbIRGPMfbZTjDfqSEPMeAaTjzvywPRGjTf6INZIV2vPmnfeXv/1uZedtN3z5nrZb93puM3m+76zDtpqyqKZPytqV1+0krLqWfvCFZReoKiaFi5UfqlFV1lRNUsUZgLjH7EsIlOKpjePa9bJggIjZB2SXtLYEfOYImGc8Gj0sGl4YjTY8Y+Prh3Z9NSM535xy6F1sx44sbRpQhPqu1wrtSKKZBwBnaUq5EmVJEJjDZTLlSxQqUSBHOnCFCE/IcqiXrIUwEPjzp6aBIQKgGEJYQAixEQEKEkIcBBQwiYEX30T3hrvmcMNKrUpin3Npmv15PJNknRd13Vda621VmuttZZSSll5fbY374IzLSMMAOecc87MzExVVVVERMpIMQAAAAAAAAAAQB8AAAAA6AMAAAAAGyZJkiRJkiRJkiRJkiQJAAAAAAAAAADYfrILL2UQSPB5PS6nw1YIOThtnRFMIOD4cVRLICqAsUQMIDG338D9vHo3Tx9bx81VlSwzJcCY5jsjQSZSSZIkAIDtL9eqna4z0sVqoERSpghFyHecFS2ECIM7Wwo8VCQIxgzIcZEBeig8dBCOnDrz5Cc4xnme42l/6fwm2PRQEiye7MEE6AAopmAQPio0JRFNBJhE1oD/0OmVZ+664bx9Fk2qpiKXSYSLmuf5Z/qndbrm0bTOlTk9u2d+RmfrNE/lKCd7RMMe6kQPcnwHOjZjRAh+163XC/fddNEBS6YN6lSvlFw6ARYiDCR/HpxYMUIahuXI6HXEQvcjZud5akc10kkd/sQOfsIncDzGYcxGF4f1a9XlkVZXnLbbvFFbNauklE2EjSoaki8oG0ZI4LsBvV6476Ympx1Xba9tNlhLIUdGryIWuhcx2+soQ9TZJAUnLnCJnvuupxQFLtF909zfugsxkSTCBCMJIyEhISERLFiwYMGCiYmJiYmJBQoUKFCgQCIiIiKiI7oPFnRLFWGCCZwRKJCIaItI9IewpUC5le0oURuKOXPMUTCvZlNgF8h+vCsPCTgCgt6Z9aHb2k0DvKOHIaA77Qouhx6wDcdx6j3rDch3iN+bup+a2oplmmAH0eq3T5+KN9kn2AFvoIhFE+JZmGD7dYhisgPsvQm2zxy3GEjBWkywvVK60QjBqk2QPWKlcuoitnYm2G7sUX8rizNsl0QKR5z06JA6ns6X7f7dw0+9vfbZ74CDDjnmuJNOOOqwI4S1ii3yA+xENme5zfaXVbPCxF/JRr7pNRIB2J1+6yq1k2MLBwUBlQ4tGhygtFyaCH58TGUH721ghwsjFwAObQAXULKG1oPmaFlD71FzjJDmRo/ay5Q1zF41x3JpbulVe9guDWtW2qvm0rBDlho4vWrYMWvNqfeqYacsdUL9rhmjgwFQJTnEykjXQgqVqZgXbbkM5LGyx038EucpmzZj1px5C3ZassuyRdvtiEBTqjIIhwx3rEnzee3o1W8go3tS+5reAh8I0iK4NMfa4nSjWx+TtoqXTpzbwtntZzDvciDwPXpykjNe4MhY+Hyfmjga5P84vXK9/5z203OenNtHceQn6dgcbVq1a3eTPHrLfZvt7ve/bdesoVqqivOFAI0ra0agduRxgj8PDj9f7cC3hxIX8RgEX+plnWPUIhfpp/zVJvz5LkIPJAQeDkzhYyt8bZUvQ8EXQWF9usH88bQGVWic/FaeoXWDAb/I8q6S94K81xzr6W292bXmVR+9edHf4zyy8W/3aX6o1YszySn3c3+PRXLn3G2n5249X3597Fzrr81mLnSo5kG5DJeeGdZ6zlWyhjq7qE6PT/lxYnz85IjD0f3Lvoeh4ABWYMJeL3W8FXYtK8s5KstKv7c10GbfBLLYHFedsqB9+fywmTHMdI/skWdSmFFS3owZPvKsQTTu3fTsfmva7a3VoSUl3dNE2o7ZpGF7eT1SqU2tKjWW8lNFqcC5HHcvKl1PKsUyuoUK5P/ciExEcImFSDSEQ3AwkXeUmKxNpgzhUm9L0VK+fbyvqS3k9iZLDuZRdjZdjiVzjCiPk1eEkOCI8Bzvif26Mfl/gfk6lsiJJcGrJWghuKyZg0IBsrh5K1ZJMXvdOrPAexipbYVe5pmZwhV2mYmp6EWFGaNHETEOPwmFugEBU+4HgS94/J8AEtwIYohyGgS4dXZEguSKZJ2T+jphmKg17s61OssgfFPVXqyDyLeM7JKWJp44LrFZ1SzITDp2QRqzEd06+ipswJDNlKpJQHOI01GckTWpfhNqvZXf2Y0atVM5I2tuJprsLwKz+AkgJhEqWZosMoVWKrVRma22269SjVoNzrigyXU33dPusec69HlrwKDvtXjrUjS1Tqk7WsB0bDmE2DRWGAD73stVTxNKj+l0W7T9RwsckpHRNdtCTnaBor6CtoyP2IBz1kn1n8Onh9GCxgDGWft6wHPsZPX52s++Kx5GA6CgHxTcEnAbAABX+X6hL1wB2/u5fOsCrN+fLYEvDKDf4KgDDscFW2K2t7mhnYzc8XemHMODe/4aJ0UNwFv/CU9CbARzBphQEIjeASCAIOA5FjRAgHJSmgBQACnDQaDrQOJivNqB6+ZpJlE4atRCnDk1F+fFdCykaEqNsiipwydMdzDdyXRv6cimDKSSfbkkd0yOurn7t90G3C3+j04HgMNxYjIVjg+hsC4QTASqUexd95KW9B51KRfB0Pelosd3B9v/t99trSW3V//483XpdWl1kgA/ftZFWOe60LqKOlHbLxh5LauWWZMzcwgEuAjgBvqMAL7AWQDA531IeIp8FjCon9fLSIX89qwxRrRxzRZbXhcVmaifyaZ2JyyYrcB5EA5o5jrXVT8aP/7qzvThsuA62z3HSkZoFbp6PWYlD9Am1WWeArxi7+rNiACvyuiMa7jVddfba7F/2+2GG612u6Ou0b0tKv3Hbfap8pKnPCOhH/vmDygFGw30GPqDkT/ZsefApl+bZrY5fMw0o8pmCRMuQqQcvzzzt1VWK7FGsVKb7VRulx2OOOqYQ4Zd9o8WtzS7UV439fjXK51UNhni6+4BvLErzOS1MhXz773QHD7vYeIfADUBoO8M4JWDvf4FDv0f7HqDYMcOAOwIUNnlio/mrTrPZHRF/DTJoQ+JEkFMzez52NoQRIvfjLHYgUr128kYqVYao5eCH4Pf/Qhs0SexNzk0xrdl2KyXXx4MRxRDcPKG66YCkVUllR3BvbIeqYgoLyKabZgIw4ggi4X+TGY4pBNCuYOEFBHAV9rBcCb605+V4M3M0LS5XYlQO+xkKjQlU02lofvwz1Hw4NSDkSyO85FeFxsDEA2DRihwEBgrEwiOCOi4AlrhcW4SC9nTLOgjkyrJrUg/3+DGjxVR26hLRlBXUxrUKgCQNOqkLSmyDOKgioaeS8AEl0MfFPyr8AhEpCITySHWuu06ynjE3gEkBFhzE+IBgkS9jurGEU7FxGvoJJ0mEE3D2CBEMNIspFu6gCmFqETgxocskxg1WNfRTPEsgNwca+1WDck8xa9BqRMYfDollXktz6tqAK9ibBoMtA+pHiEpVeWECmXyAyY/sYCTm9opQ47ZBepzhNySIVcx1wwygTJQ/H1hxYADUzwaMFhUIf0xJqPUlDuVh2MOhEYP1q2E/yXvZdIXQCQc4T6neV1VZtxnZnPuJbOAaDhrPorSAi4F1tyR4hO5wJA0q8U3Y3X/mdKxQj/LS5HVXQdciQYnITno/+YQLRElSlJuff4VUP7ZNZqAblSLc7mfzxIY7Mk2DLV0mbE6DS3XRqPtEKFRp70eCzm2ECPvrIud+2bLcjOgKvD0LimhSELL3c7NGbUjq8ntPyPaUBstu0y7Rtv1ZCDo25IwoQeOWBKaFANbz5aY4l5FeXXbPTmgq2KVNuZmyNy6sKEECl0X5z7K7rCvc8lP7y2qc4FhmOooCoRnxToLt3G519fsJDYNUleSOhnJmJkILLahy0id68Mmzgv/0fJGoTu6Szcd29gKufSFK4OFVNhvlFCbTg2xxIoSQPxwf+eUOWYCCQ2EQiG9F4nlY8KNzr7lLo+9jqYhce0KUyZsUd5sAaeJha6YN7KSdR6tUwzFeGW2KHffiPfIa+/BuoyZ20lA6QS25uptrypdO/P7v25vU25rMwHdJ6bpzA82FitgSn6On/0/USo2yiGXJtBXVLLVeaUUQ/SuY2ZHn1lETBNa8J6oRKDH2Mg495WFNkmCaz3k0egBzp/t7LPXMW42rZAPRiGDoeTsKo9z2q8AnPtBbfM8WjjSdM/JVP5iVG0h4B+FoWn6SI3DkHdfUpjk2LkvBpti685pCrXa2q7bddZVMroxSUkcvMFCQoFb6pTQ4CJeTlqxHk9VWKX098Ts+ozsBImsp/7lbSWTI6h5pVFCFvZaikfeYZKep7YdzVce2lgXGfRND1MDXtSK7YWLNaiuHmGc50fPEkSQAegPpT0OOLtq4BnpIH+QT0Kh+tFxcuzcZx40hYufzWII5ISNFjTxtFBHZ/A/jlI91KStdgMEboLDfeDGOQ6tySohZepq6UTOzT+Tpc6eVW4siT2NpmAEdsT2xI0Lddm2JZc6Wvjw/Z3kQRrf3Sw+x8VxlBVtlPELrqXPtgDFhoMpfjlfWsgM5dlg4Q0Oo5NyHSgjly2qrz5u5n+j+DbeJDDRfMZCaFZ4ag2sl0G13MEybun2HvO4IT3m993lYB1Lmbsl+k3rXHtc/uXjmlMMqeI+I+4FGNoLSl5cs4z00YCEN7XV2VzO32FtdFeN5BT4yX+d0ThrSOCnMFcs7dwz7q05TOzdNHDmC11JV1SoLeaLXRl30Xy5Lg4Sk1EwtxrbCXzHKNEQHMl/fX2QcyLhbhuUbakLd+SNovyLUnobFU+zW598ssw3XZX1UxBT2SVHHIQEk5jZdT1crNCWOV3eKKoQ60MOtbg5REQJgbK0Gw4nIeP2k62g41yioC6vbCwl6y3YDK0lLtUbVdPX7GOsKa2SA7VvPGj0+b9+eAXTM/p83xRHTC6mbuMVlskKC6N4JxO8v6mq6jJ9Tr9VfRKiHfndrAPAyLSU6P+oX3KQHw3114bJchJG5LOm6+67qhaUXwDVV6HX7ehmMynW7TeJzX8lASVPyRXKgEglkJKu8aFtVgvYSZEkF4rO6yTRXE2QAdYyKZ3JhTEzmhv2b/3FVIuf16xIiJ+vrPIbReW7ZGijWv8KIEp6BOacrSgOy2cYtFCpaQszc7Ru2LfZ4wrNrI0JbngVlSxWSU7qIfQAIQxEzh0np/j8osDZPC4WOJ/lnYMf3gm3HAkq5clNePuxNMOJJJJz0MXOMUviu1exKSMKv/udrcW4ckRVQBdp9q6NVr6MmeKL4tEqJDbhM+WXJRgopupQfcsXniRgaraDS5VBspMHUTzQcDbjMICTE6UHeTiLpmyi5kGGSVSEIz4OFnF6ErqHHOv5VQShtjEQ0mK1lI21RUpcrJicUnIUWw/TVnOgzMtTfuSfseUXnOJWDyDNoadtsJAOnSdBLDgyikJSflTdoM97p+Z7xOFv6+S3JS9OCOoXIxFS6teW0JurHZiUQ751fj3PYntqQysFphZqJ+8diDAmXZyqtZXBs92S0Oy/1GcQMa2hTHq0Qdwa29AWtO8AXdsaNn/UTvXUC/FFvPPHp7boxeA0xuX9rVS3tK0CHhOfflbt24VNSCPxXNu9DBkpHIH3KZsIBgKJ5xFB+5VXDCQos5Y4LYkkpa1bSlYz8OIvAdFofitauKdsXAGPpKjiKGqQhfKgm0EV3wGmEoZshLENLUq/gicKWd1WkgyZu0wH8FQU2CwIw7nEPwkJiN4bChtaPD+IcGFsh2vusi29hPZUjj9GdPcW9kFkWWPJGxLAevxbvoUnYo3/txxGPvWTstOfXh3HU88Un7fBmnCXnYDDc6aHpOaEKsxU8v+YTOQza0vigz7j+f8Jh9jbqR2vYhfWVwGhhqkQ3ersDJXeJigpx4QyTIk5nLRzv3tHKyeGbvS3t1/Vn4Cdds4vwuBvtiqSfw9NX3iaWa4s6Z6l9dSK7kdFomqbXRfX5h/Np2eTxSutIGGi+CthPrnZCV9oyJP+JbOliRp3Q1F8dnqkSlL3q1FxTV5fYOgX5+NSpbxxVkl/XgFC5DbFLbbGabbmZ0devVIUhqyCZKVps9Pw4iyI/u2pyGt9ohC4ul0LH9/+MqbDqeF0eh6H/zCb2/Yk/8ONhWRMy2sCN6xXlObc4O8a+lBqXsCc6Wh+c0/IVhU/dDPJsGyZnEWO6KBrJLQACzyhSnGn8TeQlbxVHe+m633ZsSiQWpWDYwhqwRLYkiq3M+4RmBXLmhxToU6bTcqN1Iu3EeC8pPC5lVqq7Y+hZJgOud8cpj94Viuwf/Qm43bglZJP773aM5Z8dv+14GX6B9celJB4XoJ4jLP5oV2vMdmD9YiNX5mtZ9zIxMvOq3B6z2y9KP71zlLe6Nv4R1BaGDgeZnz4ajKn/XHnm8+NTsS8KD/wQpz/Bic/cO5SJwpj4mUC4LASNfcWgC6HqhxU+GXo3x9JLi8/ulM/8j4CFdBRSxefpSiXCnnk5mp+vJmZQHNUIJqSl5effCVbDHV6WaZMio9E8TIDye9fXUeLvJD0UIYsMfk2QARZXYnef4z36esJXsz+iy3PqKtd8k3ThqxWOJ8eleGKUUzLuJt9Q/zNySwZJsOVEYXgt2bpZ4jXFqffi8Fod2BN/T6e8PzcXPL6Pn5TXeDAC8qB/cy3b/exqPsdstRAR50GdNTmbcIAuowsdigmLkF/XlM+QwcrOQ4cF4C4ZXUHd+wQ7/2nM3zsoUsNP9J2t0mPGednXQ+iUoKT7MPls3n8zd4+7tUZmTKrE0ep5OAhCq26C5d2OnmPiHHSaBxaKi+YmsfJA848mWaM5ZfhbHqVlJaaIkyJixOkpJmIIK9Nv0K1P9I3kdOXO0BNZgwvFb77Z+Ij/uHk6/brrngS+qsfa3uGNAqtP1Cg63UFdprwyWqPzyX34wZ4ggHO/bj3Ze/VzycIXkBHndEYrDWpfVT7RIK1uSDwdOBB36Fntxu87jU89RuCH4SfthQ6AJbWce3j2pPlhdU8M+uFj93KWIUp3XQSjC7pn8JVSoGOuqU6N5jLHmHvDyvz0ZUabeothecBRL3VFez+k7xPX8mP3X/lsv8E78uXwth9l1DyiRzO5sAg5yon5YqJ3JwcHOBcgc8Z4Pk96eAB5us3B5nkQ48yAtnVq4ni9blZ0foufhk/8GIsvtSbvvSxofHN2HjLi691K5W2kZyCiLAcEjksWxnGOXIIrFi41M5MHPiGjNlzK32b6n9tFPFDKG98NDrW8uBrwUqLLYmT7xcu/BkbnlwQ+DP/O+lSZfESOGB5wrJg7IXmCkebQkwrD0qg5XmFU4L8GHkBCeZTHmt+P1xa6hy6qV20vPqvquuWRgdHN75EKCWneMCxvoGSDB+cSb2zzGaJpVJgtgl7ujd1ZUDb4wD0NfT8gdQD4I3uKYfWyS+L59K2s0gVlUQ2u5pIrGBtTzu3OPXFoRXAoTrqnhudQXNJGQEXmP4bvPTAuYud7a6eanDa7pW6rb/fOsP9rdtbsxy8Zc6Wt15vbTOm+nMm+20z5gyPtxY5BPMcqNetMppom/YP+97Vve7d/lTnuSS3GU+SR9/qXoDwCqk22vIifaznsT85ohyuuJB5J0gRWe5P7n28dYsW619+SMPCcadtcL4HfSKk0pMRlDi95gSETu4LR6Z/uuyGQ7U4CmLshcEtUOzjy5Nut484AcWmR4gLmt2/nZ5gW5itf0Mr9wF06OqWJtNo3ugKk2dbmK//vVb+WShYsZQtUsX9+WJsXXHckA9XV6JXbMFz1/ZCERyDguiOH/vR3tYp9b234rtzDwW1SRidSV99pvQfipiV3o6v0RJ4GCdM9uZ6kqAJRnHjwTzZf8GaXsleakp/fmpcR5fwiG/eWQJCixmoFGGIJDEmSE7rF4YVZocS4LH2xXdjDKzkrbMPE/vz9iKb032JejcC8A2SheD00gu0bb2s212CJWqS103P6Hh0DFos6VUqvEhEo77DtO9lJw3r5ujxC7P48cXIVgeAgJrxqsMThAlGh4VARy1GQvDx4mqMsHSzsvq/G2fK/mur/2A6Q0SHtyclw1uT6USCmIpoFScj2iR0yudASKIY6KnSK6z2/t3bqrl7lTBvw17Z/rCWbHa/URIOVQUl/PYG1nY1CupMTQ3qEtMJXg8AlCzHhRiJ2YMteQfCgJ5p9dX6sv+aLlT/11pZIqzBxIvxEKQI6KgFh40S2MLKcKgpXkJHtCWLEa0SKl79rNbkJHg7HhNQZbX3385WjYO7W7W+KpdKL9B6fbfZi1eh83BWYEEymkgM/GT88KKscOLNLONOaLBjSvvWW0wQdEii9ZVSvyAZr09ZXuEo6Y02D8L+QwocoyGIKVByvP8hrbXJkh8YNcVOdImWFaVkXnREsBLK4ZyqzaKK3y9eqPm3tbJUWItmS/AGa0LS+Nab/+ZOXSaICYjGJBGiRUQlmulrSbr6NIiI4GZBrRjoqPlbbbyb98wPlqzmpJyuvSxulqRI+eH8IHgyKJaIJUAPKRFv7cifu0ruoOj7MlrDwar3XHDMQM8djAgCjalIW0ryUb/6em8TOOuoG+LJSw5n6WZnL89uaY+KLe8f89rj5aAq7pvAcfNmk5KXyj4EL/AEiSQE1c+TFToTt8TkJZGDqH7e8ehRvd4SCVXX3hT1lFoxB1o0V3e3lNhjQEhmBnaJxYGdyQxCFhiBnZGu/aEHRXNAFwjXjDKorhpiz9fmHJTmoqfNixIhaV8JHxj7k9GawL1YAgcs/mbnXDNyzu+UiuxIvKD2eAgUmxUekUFIBzSrbT/Ed4xaSgnBVtQMmpDGCfb1wgeSjNc9d7hun21Qlk/9yB3uvkGv7bRICQl6I4qmxPCD/dzZFOO7Xjtc5wcqi1uX34uAitTYdOL3jIXRf5LGDnUUyOcy7M37IYu3plqrjzwS9d603SqWJzPjK8S5Sl06nOgPo8MZGSnCJHkW3wD4v5RondAa0Bdb+I/DLbB6t/3/nVUYIg4cXZwFXzSy9jzskirlRXINES4pSGeaT8veuXD+4SDaiocn8QLCwjiBcCF+azLEkwgLMdo+2Dvel4Uq8B+gcrkevn4CDxo3cKAAFQJW7LkS5aK7mwLxyr4Oa1cX9BKav+Aut1dJAM8qU6JIqLUpCoNYT3rYTURB7IsFtaG8WrviKD27SXeriRA9W1V8bbHVoCSzuPcvtwnX2f/hQmehk/rFvcBt94bZyM4i3kwAn3EAxqnyZjMPwvnCGfncksm+daXsHJwfd9iLXeXJjj0cwM87BwramP9d+E1i7BVg4mCVqlGnAtgzhwbqexbqhbviAPxfZM7cO25CRecuVi221AKUXIFU633TGX30PFfviw7QQ6nTgY463YB7tek4KG+61drWdBOUHm/Sb+KBnFB4IiIEnpQTwW8CaFLZObnB8JrMCuY5Bz6uaft9tk/5/lpHBzbHhY38zixEdurYmx6Vr9m+/W607Zr/bYu9cqTF9OuWeW1yOgXVLOQFNabTGPQ0SlA9XxDcmk4DJeeAHr8c6PEjV1dlJxroqMvpRYReWkBPqh1K7Xz/7Rn7hZHXt+xu5di/GDG/a55sXg5ZP7yOToA+bjwg8YNDgoikRYT6Gyw1vvu1aqT5TkbXUas6IsKIx+UzcWyER5oGxVxLM56d2hDUbV5o98HNzZpkHUpCTx9cWgmxqFdj1YC0cIcydxczhzJHxu+MwuykB280WNUw/LLd8ZK2ZOqlhXm8MNoEElyWG81f3GgZF3Mppuicz4El7ofPS3yfQ+dKL+LAeb0Nm8ND3D+Ghvg2hzc27I4M8HLFANe2BJSnUmBuj41j7qgKuDzAvPD4GPp2iQIgSIvc34tSZwxYr0MZL0DBv2Mf3+dLAsQR0aECCTw6RowISSHGj7T/8LlsYembsm2zhYffvufqXNexFYNUZzBpuaxdPHQNtKSboRnZPjhcekBYfGgoJkEZGNv3Tx8+KyCchQoJiuX7Rkal+UYwUBzQ1Lv5V+Hs9B8FLWsV1fPb6y0MC43GRMxeUf3wZUMlEH3jwQgbn8q3SqOMSmx1vi3UqzBkAB01aLBc+FvVe02zWaCDZqf7o4m56Eg5lYZW5GFI+OKIW+GR2pbQIy4DbmkQ0QIzN3OZXNNA3C8b2/peowWcsKx4xNq9O9Ph6vFEj+3XX8l6Jn8u37ZpVJ1sSlHQmaIKGeZCm74rXpkyFMxuvVaput850fezRvNuM2JudJScRMTIc6OJCK5HDM6dH0JAy/NiwJLnoRX9cy5Bbp4v94NFy1Wj/PEz5WLB2HCOyES/wm7ySJWq+9Dn3Mmpz7k9h4urpo6U2+mLTIZzBGPi8vEzxvmrfxGzgiOS0OhIYRaSgMsKiTSXbrgwOwTXHSmAh7BRocHxggB0hDAAER+KQrCFcNBuM/FLxdbrxtUiU4qcxRRVytGXWvWdcUUpA8Gc1us6n5pfNVuWQeWPcSurmQ7Xjid6Ltx4JYdwjIJ5HtGaF5TlxhDx0miMnEjCYMloMGi5oXO4gfvHUCNf+/BGrjjSwMNrEUpA2bmZweqFHcG3c7PYbMKs71gweD8/mHY0d7TYgA3HPPG6ZauqpEzFWG/sYhvroE22ZnmcJPNsqIc8V3AR6XZ7WzZgCctm72i+orNqde4iKjcRSoWdyYhLKT+tg7REAkRjuTAoMkfgKQ89m8mSlGtmH7BpJ/aNKQoV+93BaJazUjLOhNX0nMTOtLlVlTAzf7QXcB1rbnKexRBLpCXA2Uy+UFacKhbgmisK4pGojU83OQ7+v0V5TX3xCIRLeDl1/gNbstjtjILu2MWM/JwDp3JrK/emp2zPJAVWCaSPEA8/RsaGIeBUDiyCNUqtamIcUji2RrzI3x8fIQrhRV+PADceaSz8q6LCMz8lyjI4HFlmokCayY40AxxWHtEYtAwry2XEhQwhg8P9Gtl+3anauzeON0j0SxYT/X1wFA8//1gYnKZF0xhpO/dc3Db8RtR8qLmxdjkHk0rDb+HjnYafC98Tor+Xh+Dngx8dwJjkmbh96K0YmlDu9lTclkReIA1IMwWJMiQ7U4ckO3HZxVRGKZY0lsFCxo42+WunBcSdxdbebFwHoTbxa6mB/lqNo6jYdFY1gtVgHdbqO1/Kx6X2BliwAXpEY61TQCf6lBYQ2XxSE6Eb6CxbrUmP/0Y4i4Os8zYFmo28ooC3vFDwAOlxflvBHUsq54gVC9Ws7nuAKkz0Pvh5KY1/o4C7RvWX732ALBJ4d+NKmjSV68TkIIIOvwDDmri4phcldjbvXa1NQ0kR1vy89D4PCUAGAPyz4z8pav+vadqLh7U535ip2/54lFUL3hURNprD7ismdnDyyYUeFPoIxDFuR3J514Wq3KejY/mvLte3ZPSRHxnmP1/2t/dCU6jQYdUE54+aHX/xdhwySTl8NFl35y6x9rH9JkkHOYPW1e63xe98ZoIuuXScYGZHhZTy+cj8bCSDlo1GFjDjEeXZeLBsylNrmmapI/qy/DQm/DSwz7JMSbtdSGrLBdlNadxXAyDWrOqfSJZ3pbwEzaA55cXy8hNJfe1jya7l1BctLakvd+16LKnZKDlbWLReUVV07qyypGxNqTxXVaFcXysMf9Q3cP3m0JB+ZuX16319312hmQ33Dd28MtA38Ojm9b6h724CxGs7F91vNnQXsIVyAOj3xx0Z+PEA6iTKkv/uGOoY+Njdmx4y/9x4rzHAar4QgPpYPQiFzpoL+ni8PoGQ18t+gbCX5xcKeH0LA4Om+PWGN4kNB39iA/v8pCYD8W4NVOhAegebUcygSibItYqXS+OoLB7FzQKvNvbe9xXyjvtNgLLtrMprQwLz571xfacoR3RnvfYe0SEBZt8FW+Qk6ZjOXq/ZY7oU+cwGx865GLpg939wNXQFATRHqONEs4W9BYhtfOtm6QawT0PCQpR3H4RtUYVB796987RUdx7cSj4xsTSBPGEChSIuViFnMUmPjctdtG9HsBT5oZOCxZIrmHilzQf7QkztTXH9Gdr22hO/vYS+BKOt2ltpmwPSPEI1ikUuzIYhsExNvq52D3OzX5pNq42kYxctPBExsRoCgOoz+6fFfIcxeIpPNYDzZy8kGzm9iGyBWP8/6+eNCoGfSqxNno1Jj35WDbr0+IRX6bctTJ6O5R7/qEI99yhiLAHCHjpcSvWu1m9+tfNqwTvZ/Lra8Ia3zKBDMGx5jRbHvKrWLwgWhOXqpOmZJHV5OWGa46mXV8iamRFGjDqDElOla4WFayUlRWfPFpWWgJ3kC3utSD0r/7yt7PMjO+1wvm8QKzwimCXwidgnHoS2eXs3QxP2APs3StmRY4qCjB186YCB+EWvIDoihIsI4SJDNARucEgEN2r2ub4ob3CBl1FwTL5XqGfbjHXp7dul1jMzYMcz30xZaFon7wirs5N1JC/PsGHLl8fbAsKLT9ywra3gV/Jrrtuy7frtAmxIr94OvkXNlD8oB84D2lnb09K2Z2Zd2IysTMaNID3jcfynUJiX5FO7kr+UeMEkr0DSNn5LKCOfLUpWjCKFuixdkfGEvbYfITAayww88quLJTlXPo+Rsbq2yClROcSILyUQlzqi1WpIvPuvPglfd+EMFrAQMsLbl+wHvm3svCiXnmtokJ5zp7NzQy5TKdn6hqzjUiQrwiuXRPbKwR8ZGRfhJ5O8cocIKG/sfrPTa8oKYdBCQuh0JCqWhgyx38OBZebBq7/aPW8xtMUWMvjF3YMdmr89NInEhYaRKIDocW339sQdLyqK77S1FqtfVO7QMm1RAx21PtBRA5xf43le6bS5zC3wNIfEpDDCUe7mrx79z007OR9dSqThUpQBFKCRjcqYlu9/f/nqucdHnObdA42wxGgynhQZDiOTYC7/sqnWudxwJZ6CTVciKZpaDFd+tkcZurBoaTPZ4SW55hQP45MQ+D0jsfsHPnvq7CrwzD5F0FQY3qm+f7MK6GlVHJX+KbdTWQfQAsPD8V4+nxuu9O04vNlT4mHOiGLXi/OROEjrJnApLsg+SMyvAiyICxUWgSb5eHiS/SPLOsuQWH+PLXfDwyjuRl8WZ5au4PLk23HJRTS8kivQhVQZqMQMRm7xkRjQi9VRP7kKge2QXSd+vHb95ONlzCfXrtl/npcPRUVWVFZHVkVh0NVVlREVwOU8gfBjj8GBtrXFGhA36WfI8sTDgs77+yb7qct2tbWNLnfKYdBkZVtpbo4BZh/ogLCHQlKzAe25+V8+Afkwj2ehSRNJ/nc8t/zpE7BhogZUfv42DD+5DcdQknDJAipEP9MoLSmu4GwnIElX8P6zf6csuBk93IuQTkMYwssEsAAR9WHZ+RqEBzr3vIKx2LAwLBblMAo7gfVdMNufa3lH70EWhkTPw4aXxvHjm/rpYBaCrnLPE8bM13eJ1ueyM5PaKQkqPdLj+kRHAqFeCmHVxdKJmbiwQkbboR2D20NwJBQqhox0c7vnCo9hAhluK6Ryd8oBYi8YhqRNxAilOHggjxG501DOzIvGJmR2oQX8HgwnKzo6Lk9k2MaIDOLBcUnSiZjUUcSVAP/7QfA3/gEP4ak+Jd5emb4+Gd5e2aDZSNhOTSjTIz/qRTsHnHSSkfVY9SwaMQsfWkzjM1o7E1I09te75gtIO1q6xRszOemn3KFvgAWOhgzGk1EoLAlEqVj7WLW3dzJ3giN/7GPtA8qbexl76Q77GPtA2rDA6wLpuB9+Paot2rEUZ9OKWoIXr9NVrC8AYyJKUMtWLTGlUY7RbesBeOIxrw1BSeyXheUAaobj8WKwPB4Oy+dhY/g8IKKQNEwnNACUi+NxsVVsES7lnNJ/fs4fFsWOJ7PErLERkaxgCLbwjYlLMceGk+XXYvw4wSyETyLuU0AIZwX7c6icHxStd8EcE7FEcePDhA1E0sGDHYOP9p8TwCHNqNl3KDNLYPCydx1M6J0oYLvl3e0PztdOELBGNRw1+PC+sGPQFR17tzDXw6RU0ZeOZEBXtB1gOuZ1WLxiC6Dv53xQfVKdPajSf7i0J2uvJKfKtkUnNMY4xqNFp8o2R/Q5ilbIy+MT/xjExE17cbYcOjRnKYEx9YZtDoZPaSOqM2VDo84BABov/Rre1nZipqIxmIMftcjhJNB64KkhiizTgBbRS3KOHe3c/Mw8fiEvk/Y5OLHKttUYaP3wJkpmtkYPlWZ/GDp7+ERI/RKmcnBjoz8KlKoEnTOQ9+5jYOgcQqjBPP32c1IaYdqSvKNHp2AMfXSVLmlgar0apDf0KNA9CBR8Kf740alJRRPpGysy0dasZbojh3e+IExpvufYiWOnTx895pW+n450dxE34KbIGZ/vqKn5PoUNF7MT97IongVXEl7PD2439iLS4nMSum7DwLfJeOBiY+WUAtt3zztKiMu4ZX3bl0f+dIUfdR52HDy/r/xPpRpSnT4OpX/pUPbWn+6W2FaZt7oLjAXu5q1jqkruplIzeEX8POIfQ5Dwl8cIYsb2vHtVWt6CWlAp0Py8PO7vaR6PfiakJONwZBEIEsZQr0c8aMTqgMByy7/0vHQSOS+NzshLpcCZBKxv/OqlF+ryryj1vNbXgL3l6sI6Er2ESqGr6sixrFoyvZhGgbRaUmwPgkBA0CxicBCRiD8UIRKA3ep351ltoWGQpZpaSQ58C8OS/xm4Ly5oCpBBXWUBqbD71b56gmA9mS8rpSiuDgSsea5mqpsb1xDNCxtCH93WNYZqV93X57f2fPAqc/Vy/pD2OjbZs43Q1SJKAREWL0mCpPWJ9KpHA/jwHiFjobu17d1CzQ6T9YreecGzC5XYQbUl9jDGEOz5BtwCLElBJJHkNTFcbnWM6ySiFazGclqR74OC3iORf7fV+9uqMzdnhoSDxrRJCEQxB4POB+EVUxsT2VM4TyFPHepm6IB//ftZ/2+HO4lX4PjFx3IJpE87CThxaq44ujkkVwwclyX7vPH5Ut/e+GM5QQjZ82nPgeaxoAkAloa1SotHVLUfkbV8RPLjI2bCJn6tB7ChGFbfsKEIE1Mf/nuBXfgcN0oYN6UpUVAfp2YaiGDxrLQcNBFdYVCtRUhJtv7b9NB2VsQyQylNeoVwRZYNzorAwEc0C2Prt5UKYIskBwoxRGEGuKiwQJCZfOjKbZestz2SM0kS2jKLKDXjpUS6WWQ4+GinQ5GOcVWRHrGCsIIyqmF1eOSR7TqYR7arR6NWDFozUTMZkmMtPPCAeKxXvAEMAnVUC/oAEWqLaI4vETIzQIoxsmGD/LPqn6Lr93PZBrsVov+tT1zhT9MJjr9zp1xGChPn5d4INZpUxyomoaguFiGlYP6OLMmbMuO3NEik8kaKHrIhtLvufskP/e5dVMO8x/l9fjY4rsnxqh5HEX5MaWRrcUmypRm5IQ9sn7SbtmaNhsIkw3F7WA6RI1td6m6p733ghsoc4w5lQC001x0cNajVlfX7ngC5T6Q+ng598WOp2Gorb5Hc/KIfyVYONT9zy8y2XRulr1p9CaBoqUTd2AkZKFv/ypuA4BYBulUEctqOgx+SS3/Ij5tscY78RKFr5aw3m0f4sYCO1rbtVrqfEKL79bjLSiRo5asTT57W4rbqV+RYPfZMNtkWE3crG/oHriWC/JTNzdbclax8+evk2C7hRYpO1A6KaZ3Qqn5db3iNsiELysCZy4lWFjFQKQoIZmjVCxFic36hXTVoKtpYx6bZOBK32DOcnbmezet/JK+23asoMlpqURpZthggP7HRtdLiu8zjfNCGEWl87F8PbchZtj9M9V4PVKd2dtQZ3mB8vG4F8DGs03MsI4/rsP45Oalj7ANBLmeHYu0YFnvZgXh2YD878IIdSGEHxKlvstO7cylBFN4WQ7Dgv7g5do2PG0v4E5DpV++tr6ffM/5ceoU4blK46pht3srsDAgMZv576776zQyO+s155ri9PLAjyYFjDuteredb/2GDrg1vB9GDn0xG88cNwsL0yJRPGeut0SOnDa9PR46Xi7M6yALGTasnuvYH4LEDSzvk3R79hhpCFiSaB21A1gltSPp8iOpZiqgDn8brk5tZPwey2Z+ysm/anG8gF3LkTfMbpuDZYjFeBk+y0sQmL7KTcVmWEsqKnBQzl3LmjfN3TLEp+EyJacm3IG19JiGYhdmYAx8z900WzgP4lozIPJ6BFJugy8/EN2K08NCXQEBYEeYowtfD7feTNQV+m55NHuPlG4hbj6tgs2Q5PqRTAMelunaXEkcl0CcWHUB9tiZMf/DpFLRXE3QBY81VlOwdzAHSb6c74AgZk4xie/0kC+DJzmwjM08xOeYxmluqHMzT/JYpME+6XA7UE3UXuJt7uJf7WMH9PMCDrGQVq1nTqj3PBHfd3ln5I/1tdw8AasXetn9uz1LTOOrEuygcsbllyCdtWn0+8/X1VjAwsX1d8pA88tgTTz3z3Iv2JRId6TzZc6EuQvDRv8kd4Ge8AoZNnNc9lRvbItf/ipP7webv1kw3fmd6/D5bzT+csvlf/EvPlPM5/r30QDugMprp/ItxHwoZd0fS/gPgsORlPvDABAA4DRj/XsaTp/c+mfT8Vp7tW7f7Nvt1hlpiLD9tSWTtRgrodBae3ager/HVqdQgq00K+gPK3slTXh4zan1OtA+6K5jSGo7JxLJ7lBdh/Mt4vPh6DdDFX7s+TDXg17V63R4+9+C7EBJ49tILOJdbYgjagd/NSb2VPrPS3jmC50ztxUrsMkYs+2MUaeJ1Sy+8k0QLR4nXRMdSTqBE0Q1zTLkqu1Ee86DWSs/z6FuE4buVcgSKBYsmQtrfPXlOKGbNpyDyKTgpgZdVFmldQ8J7yQKeco+yPGbkWnmfPGfveuZKrJWVdK3YsPXS7qSWtzAiyLlh/GKV2dchWrj0xLDdVtxjl0RQkkRLNGkFZN9NTWf3nlYJ8TGY56MnoWGoSq0BYGx3zJGa6OJOW+at7O2zneTkruhJ2LCJgA9UkzJRPGF0H3jHxwepVqwN1/jpZEn9sKQk7kBm5wNDnb+Ak72Mkwz8xnSOK6hXTFgCQT1tOqUM8EvekqBuDZ+b8E0Ydy41VASs4FcLJ99KX0xn0pHRQ5K6yT6Nc2eC/v5lshe6RGC0zzCxwpmkqX2C+vnPGWCPdwUnXjKd4PWWPCujJY5MGIETKmzoPeUqeEOZjecId6SusBVbdmazM0/u7b34dh6UxrfJ4E39iXhHvvtHeKTV+xEXXXp9C4sTmfX3+QlLHqf7wDs0+8YuYccA6N84oQbAk/m1gPmtyU/VrLAwItRsV3jRhE317x1UbtV/qEpkL0qBgsmNyQL9DJq1Amcaq6aPjb6rHevdTm0VyJyvIKItgID2Z1AAr4fp9H9hoO3w32G5xXiXfgF1+MAw9nVbXiXrbdFey1x1p5qnPUGCPblnAXHCqmxQiQjsyWGBfxh6z2JQ3J0Z5eP2vl758rae9K2s1Iqo9f17KXVVur/l66lgXumsSru0987b0rnu8V19+d6J7f0rcBu4q4Ry9tkV2+eDN+qoM1TeeCI4qSxtV1oo1DGE/bXSI9zTq7J0zXvumESfTbGDX6Gmk3SsS+jrjl8/ts6Lrdjf2va+5HlwS5roUAGVsB8kIEMl/LSBBISlhW/j59vVVnLSV+QqCHzEBmXfSi9veQH6hP6ZJevdaa/WR+4EiLyLnI+YbgD9ipR7b+VN88YYlUbqknU/+v5ttwljP/zt59MSP/qsItl39Iqu6pZRXuzG5iNA3uVB5XvqRHQFHp7Yc6XtCzu9Oo+2bX+s8Qj35SVvl+Z9fTTx2XSmHEGnNO3m0W9LX3fb6sjrtC4Dxst8zzY/n/amoM9JSI2fJ2g2P//TSMhohOAncNX6CX7DQOO29ZQ6OuTi4RQ/6jmzG0sfIsVMIOLgnLnYJjg0364vmL867eqbLMaC5aKZh/fdJFzvqkDRJejS77cWk5/7/roq7Gxvw35ZD69TJRc6D44q+a7O8j3EeORnDWZjzUcA/vp5qfU9BF7nEcbG0edHWx1IAar1CKxQKQ9QLw/QYUJKDf4u7sZMUdnfYV+FykTA55vunAfGN097cr5fBuFxpiP4Abf8vSHD/EOz2ADAT/5p601LTp1yM+W9ur77N3MFgFr4Wzv1fT4t+P8O5QH7x5CaDC/UvS+Yx+f4VvWiNO4mJK36mHDM5aQPq32G9u700AHhTvffpMMOjf94AdWqS7iHQviABnHPqXssj/s2adW2VvXs7sE9oI9XeEJ4bX/DksYeuAmxIVRR86mUJnicf5fUHcNKyjHuYZvzY6wNjjvd/JKe6j3c1Konvp2uQ5k77fl8xCjhodwb9zKUeNc5n+2sy5zs83eIJaNM/uMKgVoZ4CYabyigDelqKu3kpjKJzJjnSaLxyU9ZmZJ9j3ia7Kd8fM/Hy42Op29ECk1I2+G87+5mJR0T4K07+pV+zJd6p5325wye5ONNWuP61cwe8w8Z3GqxLP2WytiH66fEVGwukxtSwO3oL5tcOO0FXYdtxSW6jUmuRYsvI+EeSnDjE06M4JsP7NViAbYgAgEUlE1vPrAsqR4QsBxoqyBIYyXubDa1addXFI2sSFMSlHLpMkHCmvgsaVt3YAHf1bhnPudxR8fufAsDIWMK22AiVAYk87KSt1jyoiesH6Mbnc4jtPUTEm8cenM+1pk/lBuVLABWgPbglpetZ7FaDtzrnz0VqKp2twYk5ZzSXcTl7TH/USf1d/RVhqWg9tm5ecZbRsDntrcs4HOrOwhX4BzUQaO2K8GpNbGlffN6ND1B+0teu1z9razu0gp9xld7wxLOvpLnTK7zR3/1JK+5ks9eSrDdCc/5pHO6oPkxSWffykbP66DyPf80ZVzymvBmj2+R453X2ch14HnlAcev1IEWP/6l97oIC0w4+IrXukQ/ydMn38fbos+qvF6YascUDnNiqq41Xepx7qsJGyajktmSfCIZA6x8YFDAYwFPOKrWtBbgWHYATw0AlpfU+vn5Wr+RJhx9gA/YjYNMajO+BvgMNzxz3/Zo3Sl4WMfb3ckBgBOAhwPODs5wM9il7bHXku5YJC1EReawAJ7QFlHvnwc9Ba27JmC6HxOemu7KPzkznwsEaoIYBzEGyM5a2bS7m88luhoAT4r6aTxiku94gqbG4ync9OfS7fEMPNSNZ2JiC9XMPCHjtXHwu40OXYJmRODeMud60HjPDJmMnxQbA+q16+FQ7/eUA1eRKlm4FHNJhUsSL5IzN2mkFh/kRKpnvylf8eSiBYgWL1YcqVlySGUIJ5AqSZS5UkhFy2iJNTNNpskcObJwmmgpYqRucifp5GSK5mAbZojVrszemPlX7Uzxemb6LxZQp+44myI2SUnZ8wBOhYkiaQQugSPka+G9OlO6gNCKlTU3DJchu3embMZYU3NlzMQ25dKLerzU7wPRLj1d8sydKkG0SKHlLctZ3Pg0M+a1mpwyGI3bSUVwEBkacxRip5k1Gm/cao2wP7vtP+2OV00AxFKE44655R+R74VPEAOU6umC8UGAL8pvE9IHK22itWiNg+pckLSANRtOSIxs1cPJzt143XPbnfQ5H2nJngP3I0aOXJIYOX205iyGX5Jj5paLWCds8tB9DzK3hQf3JFO8eGMjneSaf27c+SYx8lA/pE0MkacnHnksrmA+SmJNqmMwTf4JJQa2KeGa6n8XwiMgIiH3VxTUZoqXKClaCdExSpGsoljMZsVqwGypRswpLh+Z0qXJKF4CNk5zzYuL1/z4ElvgKVmCskhlcydgthDMlkhpsSwMRkvUa1FL5ZQlW05C+QrsJ5crr1x5pGSd4ps8P8tSyM+/AsrWCahQUSIrKqaqkMJyDk2MAtXdEqu+gvamYOe957DESKKe4D54h8Vq26ypNT08+gyM+eH4hHFtUjpEu1S7V98fKaUGDRn+OfqVj/1JU2q7HRb/qoku117/dum3xWFHHHXM8dSgOcjcAepwmcZLiDAWnXDSKaedcdZaTC7RFarfdNrq1Pu7c6657kanncGBQYNGzW7U7GZa6DhibJcycV2Tyw45bBwzpjT5aNBZm4XLYafe5lzlG0z33K+SgDcNH1SsRKlV9tib2sOKrO2Ox550sfueee6Flzp06tKth2MVSWq8a+egPv0GDFINGTbSZ198xWa9GTZ45rkXOnX1w5hxEyajHDFdQPy7AWFC0QzL5fGH308uX42pozONwMCkgYWNg4vHzNdGkxYSn4A2IR0UXSJiElIycgpm6TFHSZ9Bbx6m80t7RPAYLIQrXxs7VrXBtSTqwvdqosnqO/fbEhVmyl2HWosGYqpAcrFsFU1yVWmjVAQTMor/qKHzFvaLJeosu3IKuVmmuEnA7lhFBfJ6xEpwy5pVhTUF8np+lxBjqEsaIK+XOc7JsnPf1Gn/dT+9bqovk08wCN3SwHAliHLHgehjXSyAckKZLKmkQm6Wa6YiSh1O1qCuk3q0tKHGP2O1CMvLBY5qpZQSsnZgQgkUMaxqGKFoKkAtp7R1ZSqcoGiqjetYW24T8h6PlpXVCq36uSmzVqQi5HckhJGqh+1AXdmMTEacCJWDUrkJtFL+Sf/sF+0N9l0bJufNb4zCcaNQ91/1tkn6Xzdpu/A9HC49Fq6kvxMr/Kwl3HsFGWOb1DI/a4ZLxT3umvi5pCfwXOru0xbWteJ+Gv5QeC9wn/flHg2fI/rnTY6U6L3hXdxWYMqlfnR7emIki2tWSySiK8ZxeCTNruGFKLKiIVesaLNjOC6iK5rMqGKRXdW/s2+PVQ6RyjWzIhvPDiG8yi4DU6RvlSy4/FLpUTYTEjZXIDk6xe1ueVO9dOes0S3Rmqt7lQZ/7FaWpiCQwvuVJswHwZR9x5v3aTMpXlgWWiIBZzP3RDJcmRKEsZXo2Wl/f44O4Wgu0renU74rU+FrmZ7sN3n8Tz69zsNekdTz1dFtKSqupKERq9PLunJvzJvTL6sshGu5hrpTv/m86EI+ZqElAUudCSWENhliJIqtjAGH4MjgUlcsUFtJWzvj3t6lLcX8tZX0BE2NZroYRQrFwvrG2XXIL652O/6VJ7hKxcjdbiSrt44neC2jjYTWMW0kdD2nzZS2FLStpOs5vYIw4rrqGI56GR3bz+v9dI0qZkwYLMa7W7i2kjSYAqCAxXiXY8HIIgzA1IZpKmGAfmIB0xgHEOZXcyUQr6fnBAW4dQA6HXqHKQAKGJ3GAgCQBQAFGgAAC5gGQIDmSiBeA46BCrnFZvFoFp/GWNyenylm8XJK4DlatDe5hR3tBDFEdGcz+vrDxtPLRSEtIPAkG1645D2mlCbSCT1WSSraZtqRKD3LWszj/yxm+89KVy7yElvgTGZZlr+nBp3cT2lFUuK6aJceA+saaOm3MIntqrpsa1qwK+IgapW21ut4mqOr62IISXRXLrrFVn53zcWffwvJJtv9TLky+rJP/jP5pm1301k7rxV5xL55xwYP7LAG3kb7+TBE7/umhXS6RQwan4cbifmqobwseNKJ59F9PghdlbHbS5vRF4Qna7Px1Rnq86y5ei19P5bV01WVDGRfHMWusNHFrCmO36Th7/v8v7Rc7ccDAA==) + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Monoton"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Orbitron"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,d09GMgABAAAAABj8ABAAAAAAP9AAABibAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnwbkUIcKAZgP1NUQVQuAIRYEQgK0jy+JguCeAABNgIkA4VsBCAFhGIHg2MMBxsrMzODwcYBQHveJmT/l+SJiGQbpP0HSYYogtFg6dzlH2xcahU6Rdul7u6Gittmij30BhlEGkQaRBrWMG+8f5vy5Hx2+YSM1RAhKmkua5ZeGSHJLMT3OnPft2XfmQ6YDAkrUlA6Jo0VMMy4T7gpqMSSiy5Nh9Qi/jxt6/8Mpc1s6Qbswmh/tKENMF/pzh0rMEBBXPzKupWFAeZ2+NynWFuRPDzZ/depW909UiZmszDeHxjRipGJaB2NXH8/NyR7UkltCcmrlEI1DQlPNBYyibwjbcPs8+EN7mFqT3OfM4GDN7vZEunWV4EwdZxk734OmGr/1y0Lg66SbNm1KrUJbOmJpRPznwZAAfx3P3j396zTMJ9/ndr6v3/UuMfOEZZpb+7d2wvDdARvlz7UkX5+XCskiApoJ3lXyy66ZDkHlg4AJgCKS4DrwU7T0vmGZQIa1u1smmIPsrZTIbLxqN+938/sBrIxm9Z8bkcFRBhhRCwpn/5dfkcREAIASjHhJwKCRFgRUaaKqNdGdOokunUTvQaJqJ2Ebg9hOkCMmiTmrBIOh3AdI7JyxA1WdHc1oRMQ0E6njjvhtJEiC6etXCzCC/hfAgi1YNbyxUq7tOMiQAgQoNJmLF4g8kiambL3NwixfLuHb0qflb6BhG9dsyuwe9gXnSs9UXoItg5uvdBsO9roXg1LaRELRKLcSGrERDJDpWWd6crg9JSNjJENYUPL0ebQimrlgBbzgwC32zR4BBEgO+SAXNEANAxxEBcRSIACURiSoGik5PF0+3u+2RhAvjKGehZWTWjsYbC+Jgxg/6a7OdMca8zN5mZuM76JPhP+zeDGVf7z1B/qRX2lPlfX1+vriXVanVh715zqXnWhWl1NrOIrTn6Ue/PsbMr67Bu/YhS1sTaWRwMdiuF8kranQoqk2OSGPz554x4RI/IFhIQVK1GmWo1adeo16tClW49eQ4aNiIpL2E1nMB10iMU2ZdqMWXMWrNuwyZHkSknLyMo5Z65V6GZAEqSA6AEi9d9IFGJSvxaYCUmYU4OmSXVVTSo+DWYEzMV0689sHWwCB6SBYuZdEJEAOjDPDgEL2GAGzIGFsBmcWARckAU+CWBe2GDh0klSoMjugtHBEGDGxLc/wDSYDXM0C2A9mlSoXz3IROPerAKEJcBuGkMpi8ammfUih5wVZ0GO5jgI0sv2qC1F7NTUTtINKUdtwKFDi8xDvhowwUEQwN/2kIttAQ5TOFFDuImXoYqtwBRwBIQkyi0qSiQOhEZ4AxBOFddv6ll/nDHz7DZJBCkGJbkM8wji0SSAVtKpj+Y5xbVLBetqOilWaLnBoEUg6g8GeAMoQlh8L0N0aXTD+VJDA39LC2+cHZjy/7NKJMpYj6Sdvd9mmiA3yYZ4I1b7HQMgMNNCo54HYqyGCSFDTczGZlMRIt9TrqbvDDEjRhgIfFOx6wYkaekBJwaFCaYp4pFU3lhKbEaapErbC3FMd82sDN9VI3J2GsI3CClDXPAEVbgKmcPWwwmbrMKHM1afTjDtPg+I2J3yLPoblcpdpKQQwXZ2IFNGSTeVaA1j1idPdxknSitm8a/ygph5G6NZLrYsuvzKMIqCfFLWjYWmQ0yOLTC8UbzJLPAnwKEz7U5PZKcvnKI3i3oBM6rPhtkdyRev6XOGbeMKQ32RhwtBy5YjPnSmypwpAqoLs3QkU4QPcD3teqRIeiLAHFfoMU0qIwzN3cZFS9jMgBopi9KyFAtRikRUw5pYT7Ry0uOnXgcbYBOecI91EU2uH6Omuui7aHoEZMPxCZq6smwsc00dGCrLYRAvaxsIE3gMFT5a5hZQhss8Ws6/XqR2qRjCfsHQ/SpjfFqKCXVlsMDO31smG045ngc9C44CA/6L6626p3GwUf2+x/AX7T1AAOq4sIFGihB5BJQSUEutmTN3ZQJA8QCVMGwpUK8BQAEPKOUhoJQ3YoFBp1EGbLXmtGvMGrXa54BO9z313nc//U57k4pzcS1uZIxOp9vzzrnMLrvL4wq4OkTn/0ejQdtsuMysQX9hx3V56LmPvv6TEIJrn3WZXLYaHQsH3aKUM816/V/Syt+1ZoRjtbOJ5W/gWNHYH24twhhg3XX3wDsA8CrRMFfMjSKqAHICOLVdItwUq82y0W5ma8w1z0ybTbDYeLNNNMlO2+0wzZ7fG8EDs/vyzb75C82xyDKtvz7+189XZ4Fd1plqg00OqjUdEw2dHQYWe076ccWGG8KNu8FG8MRH8OJhq2ABAgURKiQnIRVBRiGSUoJYceKN9I8kydJky5ApR5ZtSmlolSjnLRcGK/8A8CogrQZeA532BZ1vBLkrQNoKEGjlmWDlWB7Dzjlf8h9TGY8eya6XDoM9Gu2cn6INToM0j2V/8uDlTNyyLbYP0aMG8bFE4zRGXqKVLYMXbKBgJnONjcYw7yE2GObxGB+tEyKgoR965CAy+ktsD4qIPMq1kSl7BcoD/HNDm9WHrpkYXzgsHPnOjH0AGczzbp8jDYWF+f/syK3DIvSNsY9fbF+WKa9VN41u8YqgrooxiXNEpA2Hi4Vz59w+AyzqOPZvH7YJCtGYrulrP+crXVLXo8/7g0uqaGDknmO5H2DuMuVPWn45+U5bEypLi8SakD6pNdc2I8SSYmdRwMMhoPCendLqlAedzXGy9txHC5w0fncsou/UkfBqTmqa4zS1/21m2iQIyhNGVTCihbo2diWlIBQ72np0H0tMUNxPZ5Qm9myjN5WpXElI5Zly8kzLoSCjvEbcL0TTwsQkbMq2uC1Tk9NZY/OJqayMb+bno21l7bbsMKv2Ehe0B/hO/6+JMvA7MAnSxxsYIRR2PvLQUj+Khjz+RoVqx7Ol4CHYDH6cwzN3DHAeK32ekGU7zznNzmsm1weHXxc9Y0MDIqenqP4mmGmtPs90isaNmkhEbhcM2AhQu+MU6VutIML/nRw/5umwwg4m5KcdkSfwtMFjr7Ru3Lva3IndguKzn5y4GBhsXrnHT3fmsVNc5F56a1SXowYx2uBwF2u1yaaFJVi4MgVLKpJWn9OzmlBFI2jKdK7DPhtrlrKhPiIFLGmQsU/avgirNCSKAa2pLXg0Hs2CifGnzQHzFAry2/I4yULXIgmwGbTQPmDwqKdSrfpx0iJTYbexR0Oz8S/SE9xFC7sYg4N5k5acRjF7GWOkVdI/uMZntR29jBPBR+AdJCuYIq+8rM4VRxZMci+0mOACK5PhftrktDaU3EqrDkDhcNMKVzHc119fl6mQ1wB5wJMDj6rREx7h9cTAqhk2E1a4XiTaVKVFZVoGPJhHM6ohRsJjBtAWSD10mi7gE982QffOoWN2Ihim6FP38hmpKdLZm55XtbWc25HHgCuLUZXMb7F83DPqvzSfbLn6ajPZa4H8Xgnm5tUOfb0Shog3pCD1yGJ/eNUpq/5zk/v6ztg09L5XxXFZgLGqxTYK2kl5FC72BKlLu0Z94nWNFzbGyaqK+et40/a36qQOOHG0hnVcu64oxKrMrMVoVBZR6c8VLNWiKyN9nSZy/uIyPJmaraY2W6BGJDRdUsiiUE+FhUi+hncop/QrlRW2L2OsuW287RY9HIYGWBYeIzcWIMY99pIQqkAzzZOGbzegXDQhzg2+VxQa1uyeFNw7Zxv1ljM/qGbMCDPhRsPR9KsRp7LSTEStlABSHv0yrJQsYMkveTjn5LUR9hGBfAlahjkpEitnkjHOJChRZ7xLURQVj4gpCoGgjLsY6wvLxMXnyuo8jGGMWELrHTRlAQvg7o6Oj3EU4xzjOEZGx9tp/63tyT1OndR/6ojxyfqU7YsbzVAPKTSLPaKeTCMdNACx2s27IZF3MQpyGj7N1U0BRRQNbCBTJ+SC/3WFjuHcgGirk2s86je27+nai1MqT/NM25glZJZaMuWfrOS5lZp3/OaQzLHcVLFbXamiuferhlirKosqjcpqibdrU9vVSZ0aw2z3enXNo91qs/ZKfdUwudXG67GCjf7tJAyTHr9Gd7Tr/GzAYTDftwdkY/mfjPw7fOMnfgZpF9iOPCs9EPDZ+B1ciwMcoKzYWjL6VSfqfBVNLvM/LMOVJf9KyrPWueonjMwfYq5pZYwZ+cDN5SR3s+PfxtPwdU4G1FpaaFTQ7kg6aWRaLVkng+yrjIv8toHcNyUQW4Yh50BENRTtwmguyVWgd+2bmxGdkQDpV2TUYiIb+jVA9VWrw8T650tJqZNBZtSS/dv0xClyLiaYHaDFdJ0i/40C6dfk1CkkSL4y+hetXRltpClxtmY6Gc+uWkl+PAysjtzVbgiL2BPWZ/1jKllnmZIvM/jqj/we/kc1387ZexKdp8F7FPmVa2D20Clp/nnkPntfy9r/3fXP3bB2c1qdusMhOadgmyy4tthm+i6WLBJSTDmKtJFRU8CaSgEZhK77HThj65f5FVONU/O3dIIf5peju5VdysLdsCkzLsaJt7VrIwTCRgTcVbrd96tv6QkCK3Qqj61CGfYpb+W65Q/Izx/cbAhjXMH+z8n9csEySM3if/NjKq7F+1AfcXF92kfO2FP7GAnWKvZJXNnFL5rpWtStIQJH1fqDLx9xPKdKBxFa642ZptJbfJZ6UDYp4KhCrZbR1VB/f34v6p3mEroEywaL3mvwjGOI1tfSITwX9BwCKfyJ7+q9/2x5DhCaN/iTkWi0WNx39P0dVvwJ1PzxEWUzdI1PfFHUq6mJbJGFXNedT1E74hW1Q7jYVizZAKiFQLUvDofWA7UJ1+JHqaPElEmruhdQG1Jt9cWt978YMBav5qUyrdn6ldjIFWheViEqBJHY3dbd7WQ7Xo2/LfR2qh3tXYErAn9o29ttFqDgnOBUWGzwKcz/5M/or0cikMJ9VQjhmvwX+P8ArzrzkY84m4L/BY8usvmqff694swK165ox6N497WaG6c9al+pZeb4VIxDr3jKUxLhHpwDUmmDsaCHHE6kbofvlUt+FgVzAprQQ4s+IaGA69WHXJmamO556Nh39H3c4w16US9YQ6cobTY1VdSxavb79aRNjY4BO/ePzWhoONRgOGfdYc28FpNw+dbFWxAIWzfs7TDM8Or1I9fLsLd93nlhhtceH34MK/+CFEIG52PU5rzVhqwPs4NIxcZpH1Hyhw7NLvGbXiixOvF7B5IPOSTQqm63hRaDz4fYsuA60+KZZUfuVNhAypWAUSFR49loDuJoo4eVD3UVxuUhaKDL6U7h9fieflb3NnANPGsNpYYOyoWfJdSfiDWu+lPm+A3do78p8MOhzTnPD+WcrUAVh245waLRrjpcxDUEa5N5cy5TeWKswEvezXwji3hEk9TTbmHS71BzU9XSKvS4hnShZRbn3u5acJTeKlHY/coxenPUDvzS3f114Io+vsQ5ad4eargOQdsst9iRMrBZ4JAGlt4PBo6ZGeEy7WEInMcJFkHoD30GtCxwFNUgGrPFhRdCX6tw2D9KEG6DByc/6iD0ku5uusI1rTZUtuP64zmknwCzVZOf6JP9+lwMVIuCtR+B/2CWcVB/XIufcuOYKRW0D98hF2x/8oKCtrDD2ilP1X6GE4yCd0SjmQ5kJW7sJNcdx+EM4nKGcLmDONwhsPwQUO2ROWlpoHvS8uD1aN3SoKFJywIzJyqDssZDMuEjGjQl/vpudEK8g5TsYH4YajTumbIFHQyvRaEKBo1J/gH0xyYygEW/Prek9G0u/PBpYRHr/UzQL0jpvxMs9SAu1evw5lxcxAUJ1PewiUNx+BWJO65iEBznr7n3hfrJTvlp6igVFVurBMK0flx+6ZQy+oofB6Pxvmv5N7YHJAEiXTd4LEEsqrcpxwpiqNVdINsN6FIEwl2Axn3Cr8HZ4KdigZugsE8SWd1XCAKUaSDcAX1t540bWdDX2ljA21wikZSl9x0LC1sLX75Xg2yvA2uQZC/SIV2JjtJpBsvy3lPvcS2uMVPmEjMyl5/Z79F7GL4cqi6JVihn1bPmoDk/qB+1P9CPqktnZtXOGvHvAcXLoPLTr/LR7a/av8SX3V6Fqtr4U1jgdHYfvARve3mprWBdNis5tDj6vb+hgihow57dfStezW7jA817q0O6k6hmCeKr3Qg21a1Xg9xWnlQj9VsbAvMM2HATWrsOrduINm4gbd0mQ/qNZzdc8DCULtEt0YevO7/mXJpe5Vsc+gXH/4IG/hzq6HWWbDKgGlXnP1JY5B95YG0tf9mjAljdDZb9U6DkLAG+Gz1UtIOEv0+Jl9nDN4FI8BjKC/ITjIB5DJ9mHSw7l8YeF0xtpKtqnpYRI/nzXoQrwGcg1yd/QGPbVL6WnzraqEGwlPwjcBn4HPCAJ5dK/YYNc1YsRcW56v8Zo5nfnPuSeZafjbtUnQcwmc736T+6ZQXMFxYn5iwbOJwknZgifOoGbOACe9aC1u5ZSYlz//7y/voD8qFj0ZKfQC243Ah3sfdq+5wO/udieTbEnt9t2tRgTjCDji+5HOb3nQ+7r+pqTc582wLPVwTC5XC0dRRCzgPUhhxvRgLvTCeuJPnzIfAGJqdU3w4jL0/eikZKS+WlMOw6t19uolJIctd5FSOuUoBB68ofEMYKVAKht1LmX8r1UQgRKhUw6krv9cle6yHtHEDHIaANhwHtWNN2C7dDNqRt/nqx3wLlG6Um6JhsNINKuJhGiyUXtEhy8XBh4WjQkFblQzYw+OtBWEAMR4FWCJ5ltFnioU0Sz8P9Fi41+QUGygvKC8oLRDhHy4UYIkYgicUoTsAr9ltY+UapqTKa5NCzUkxNNqAgsoCAVywsjP+tX29dcD+EhvmF9SJuAZFqHWWJdIuRzPJLShcZRwS8Yr+FSU2i2EAkF0jFhTngr+fCAsKgU0gCrCf56Z46FrXeEYPVrvNI40qD3eTf6sPTvPsEwJG9Tp+caDdzZ7Ld9K12OQAMuAtkIHekr8mllqA8kXSy3w6SIrNoNgvi0yrCpJZYHktEAk8hpVzB39xN2YL17fyA24DEldvTO4hwfkNfI7UE5PG7KwN5ajsC4ZfHRdmpxOfRopsJIfStElbE9IgNgzOzE/KRUdqdUABPIOX3GfwZ6qYM1rbzAW5pFIG4xBSRFQ5Q4vVoYRNFogkrLgbLS3xkRPmd/qUYyxQki2NqGgWg1V3FIgNDV1Acm1PqdxCRMTiXt+HFnmTKKkGFXXAYEFQfKmgLp7AVm+zV9CeAT7JLCOD3AdSK30xxQXzuABo0gARWgYyspwTCu4c9C8zzV/Vq+mBgjiXbylkLIcrR5FlEAtenIotfoCeeI0NuitQlKoDItuUKtkX5ZWdgZC5pdvrptJUkRw9XQeSq8wizO6CJS+2+eVh8NlA28ZxHtYEHyAKB2RvvjhIKi33CU6r1hLGBxsV+YaCcEfdozQerTWsIo45fbCRiE+4XVMAz3GyOj9eFidlEKVB47iaKA0D180M/1TrhsZbIHBhwZlkFZyVpwnMf+9ks2c2gKogHpgSGhT8kDxFlVU6/c2A5kjTL7GtY+37DSWMlelYlFMJc4rCTLI+ERWTyBpnu9JO824jYYUCqsjQ9NyRz8cIBWGEPzDRIeHIjSXzuiS8sDSBKA4UFE+RxhiiL0D82lQlybhEzvt33hIncHVyScLBReQCPmIifByLiFp/UpJ9+cYIw/dA/JpOn69iZq5hppcH5nOAcTZRrCbOSJO0XgNuEMgHwCOyC86AVpJ3y0pLUrTjJafVRpIOKPUWkFXjpg3R9gmDAqyhMCoxpsHkBAzqajA6rHABs9mrfCYO71YnGla0Tncj6Tgw84zsxDaXuxMIT3dFVOOdeMIDOgGPmFpZOQ6dEKROXq3YVZIKKVSlSSaeCiSOBqk6WQSCjSiWCJIv3t2SVCumYVDIaJQCiUWI0gwKV0mhU6uEKN0+oQMEcHKJ1NbxcKS5f02MmidO7Zct7lF/SHcOowjgwfzEaYj4pwZPygpoWUPGRRZOeRpG8rTSaKm70azSPL22iKrNL6CrN0Qops4hRuaCzTA0DjQKEqsaC2iDjw7R+BHjG6FNSeBWJ2dU0ivHEyxAcySQFyg0oCyZwZxAC0Txfb9ko1NF5FRiqzXmFLIpYLeXFWzEfvjQu+Ff7mrBpL/pPh87VWJi2k68VyqZLiR4NGoUJJyQiJtGrT6lLpGTkFJ6LEEunjIHeKOW2ivOkKUGiCirF/9eVLe5vl5lUG2P0uq7NGYk0FjLOBBONN0nTyrPdSzNPugyTTTXNFJmyZMvxwiG5q9zoqjIxZLXbH0w/bFzD1WHYgbDdHC5Y+ovixFketUjRcM1aqLTaa5/9mBzREw2jw0x2ZnH12hsH8PCNUMCeBwdzzZCfGBgTY2F2mD3mgDnCYjEWueKmq6651W70Yl1wsDKYEbeq0njwyrBgicN/Je3X/EHmJoeCGaNNBROL0Pv3VDqY5hmK77NDxQew39mnGIsAAAAA) + format("woff2"); +} + +@font-face { + font-family: "Orbitron"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Permanent Marker"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Press Start 2P"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Rajdhani"; + font-style: normal; + font-weight: 500; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Rajdhani"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Saira Stencil One"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Shippori Mincho"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Shippori Mincho"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Sora"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Sora"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Space Grotesk"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Space Grotesk"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Special Elite"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Teko"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "Teko"; + font-style: normal; + font-weight: 700; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} + +@font-face { + font-family: "VT323"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(data:font/woff2;base64,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) + format("woff2"); +} diff --git a/plugins/hyperframes/skills/embedded-captions/references/aesthetic-principles.md b/plugins/hyperframes/skills/embedded-captions/references/aesthetic-principles.md new file mode 100644 index 000000000..17a52307c --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/aesthetic-principles.md @@ -0,0 +1,168 @@ +# Aesthetic Principles for Cinematic Captions + +The 18 rules that separate "designed" caption work from "preset-generated" caption work. This is the single most important reference in the skill — every plan.json and every Standard-mode HTML should be checked against these before committing. + +The whole competitive thesis: every AI caption tool in 2026 (Veed, Submagic, Opus Clip, Captions.ai, CapCut) is a **preset picker**. They hand the user a box of crayons. This skill is a **director** — it exercises judgment. Beat them on taste, not feature count. + +--- + +## The 18 rules + +### 1. The subject always wins + +Captions exist to serve the face, not compete with it. If the caption draws the eye before the speaker, the caption has failed. **Before shipping any plan.json, ask: "does the caption or the subject read first?"** If caption wins, shrink, dim, or move it. + +### 2. Occlude, don't hover + +World-class caption design puts text _into_ the scene. Letters that pass behind a shoulder, mic, or head feel diegetic. Letters that float uniformly above the lower-third feel like PowerPoint. Use the matte pipeline — that's the moat over every competitor. + +### 3. Contrast is a hierarchy problem, not a brightness problem + +A white box behind text is a failure of taste. Priority order: + +1. `mix-blend-mode: overlay` or `screen` picking up scene luminance +2. 2–3px dark stroke + soft drop shadow +3. Narrow semi-opaque gradient bar (NOT a solid box) +4. Dim the background plate by 10–15% locally +5. (LAST RESORT) A hard white pill box — banned on cinematic directions + +### 4. Kill the constant lower-third + +Fixed-bottom captions are monotone. Caption zone shifts with shot: + +- Tight close-up → upper sidebar or crown +- Mid-shot → embedded on back wall / foam / whiteboard +- Wide → classic lower-third offset to non-subject side + +### 5. One family, two weights maximum + +Hierarchy lives in **weight** (e.g., 500 → 800), not in **font**. Mixing Montserrat + script + serif in one clip is the #1 amateur tell. Ship Inter, SF Pro, Söhne, GT America, Aktiv Grotesk, or Neue Haas Grotesk with ≥5 weights and compose with weight + size. + +### 6. Tracking tightens as size grows + +Display-size (>40pt) wants negative tracking (-10 to -30 units, or `-0.015em` to `-0.035em`). Body-size (14–20pt equivalent) wants positive tracking (+5 to +15, or `+0.005em` to `+0.015em`). Apple SF Pro's optical-size model is the reference. Submagic defaults do the opposite — they look cheap because of it. + +### 7. Cap height ≈ 3.5–5% of frame height for body captions + +- 1080p vertical (1920 tall): body 65–95px, emph/hook 130–170px +- 1080p landscape (1080 tall): body 40–55px, emph 70–100px +- Hormozi-size (~7–9% of frame) is **hook** size, not body size. Reserve for punchlines. + +### 8. Never italicize for emphasis in video text + +Italics are a **print** convention for flow inside a paragraph. On 24fps motion they read as "tilted" not "stressed". Emphasize with weight (extrabold), color (single accent), or size (1.3–1.6×). Italics allowed only for: + +- Literal quotation of written material +- Foreign word +- Thought vs spoken dichotomy + +### 9. Color discipline: one hue + neutrals + +Pick **one** saturated accent per video for keyword highlights. Hormozi's yellow+green+red works for him because his content is already loud. Cinematic = single accent + white/bone/charcoal. Default palette: + +- Warm white `#F5EFE6` on dark +- Graphite `#1A1A1A` on light +- Accent chosen from scene sampling + +### 10. Animate transform only, never the letter itself + +`letter-spacing`, `filter:blur`, `font-weight` animations cause inline-block reflow → line-jumps. Animate `translateY`, `scale`, `opacity`, `clip-path`. This is locked from the embedded-captions debugging. + +### 11. Minimum 0.4s per word visible + +BBC reading speed is 160–180 wpm (0.33–0.38s/word). Cinematic feel wants more breathing room — 200–220ms stagger per word, hold full phrase 0.4–0.6s before exit. Entries under 150ms read as frantic. + +### 12. Stagger is the primary expressive axis + +Same phrase, different stagger, totally different feel: + +| Stagger | Feel | +| ------- | -------------------------------- | +| 40ms | machine-gun, urgent, TikTok-hook | +| 80ms | conversational, default | +| 150ms | deliberate, documentary | +| 250ms+ | poetic, ceremonial | + +Pick from content tone, not default to one value. + +### 13. Emphasis escalates _within_ a phrase, not _between_ phrases + +Every word bolded = no emphasis. Structure: + +- 70% plain body +- 20% slight lift (color OR weight, not both) +- 8% full emphasis (bigger, brighter, held longer) +- 2% climax (biggest, held 1.5s, breath before + after) + +### 14. Break rhythm once per 30s + +Every-word-same-way = eye adapts, stops registering motion. Plant a rhythm-break every ~30s: + +- Phrase enters from opposite direction +- A single word at 2× size +- A beat of pure silence with no caption +- A color shift + +This is what separates Submagic-preset work from something designed. + +### 15. Caption what adds, cut what restates + +Transcribe everything. **Display** 70–85%. Remove: + +- Filler ("um", "like", "you know", "I mean") +- Self-corrections ("I think... I mean actually...") +- Obvious visual echoes ("as you can see here" while pointing) + +Editorial judgment — no existing AI caption tool does this. It's pure upside. + +### 16. Segment on breath, not on duration + +Chunk at natural pauses ≥ 250ms. A caption spanning a breath-break feels wrong. Whisper word-level timestamps make this trivial. + +### 17. Safe zones per platform, always + +- 9:16 TikTok/IG/Shorts: caption zone `y ∈ [12%, 78%]` (bottom 22% is UI) +- 16:9 broadcast: title-safe = center 80% +- TV export: 5% margin on all sides + +Bake into the layout solver. Never eyeball. + +### 18. Letterbox/pillarbox is caption real estate + +Black bars on 9:16 from 16:9 source? Those bars are the caption home. 2.35:1 cinematic frame on 16:9 export? Serif quotation in the letterbox reads as documentary. + +--- + +## Rhetorical judgment rules (editorial) + +These are the "what to caption" decisions. No existing tool exercises them. + +- **Filler suppression** — off/light/strong. Default: light for documentary, strong for vlog. +- **Self-correction folding** — display only the final version. +- **Breath-group segmentation** — split on silences >250ms, never mid-phrase. +- **Semantic emphasis** — LLM-pass per phrase: "which 1–2 words carry the meaning?" Highlight those. Don't default to stressed syllables or loudest words. +- **Silence honor** — if speaker pauses 1.5s+ for rhetorical effect, don't back-fill with lingering prior caption. Let silence breathe. +- **Quote-sensing** — "he said, quote…" or air quotes → italic (one of the allowed italic exceptions). +- **No `[laughs]` / `[sighs]`** — those are accessibility captions. For aesthetic captions, they pollute the frame. + +--- + +## Self-critique checklist (run before rendering) + +The agent's own pre-render pass. Flag violations: + +- [ ] Does the caption or subject read first? (Rule #1) +- [ ] Any hard white pill boxes? (Rule #3 — banned on cinematic) +- [ ] Still lower-third for a close-up? (Rule #4) +- [ ] More than 2 weights or more than 1 font family? (Rule #5) +- [ ] Italic used for emphasis? (Rule #8 — banned) +- [ ] More than 1 saturated accent color? (Rule #9) +- [ ] Letter-spacing or filter:blur animating? (Rule #10 — banned) +- [ ] Stagger same for documentary and vlog? (Rule #12) +- [ ] Every group emphasized? (Rule #13) +- [ ] 30s+ with no rhythm-break? (Rule #14) +- [ ] Displaying every filler word? (Rule #15) +- [ ] Caption crossing breath-break? (Rule #16) +- [ ] Caption in platform UI zone? (Rule #17) + +Any "yes" to a violation question → regenerate the affected segment. diff --git a/plugins/hyperframes/skills/embedded-captions/references/anti-patterns.md b/plugins/hyperframes/skills/embedded-captions/references/anti-patterns.md new file mode 100644 index 000000000..21e6a3408 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/anti-patterns.md @@ -0,0 +1,188 @@ +# Anti-Patterns + +You default to these. Stop. + +Each entry: the bad habit, what it produces, what to do instead. Written in the voice of someone who has watched an agent do this 10 times — because we have. + +--- + +## Layout + +### You default to center-aligned crown. + +`.crown-plane { left: 0; right: 0; text-align: center }` is the template default, and you'll leave it on every video because it worked once. On a subject that sits right-of-center (Jobs in a 16:9 frame), the body eats the middle 60% of the word and "THE BEATLES" becomes "THE \_\_\_ S". + +**Before using the default crown**, run the three conditions in [layout-heuristics.md § Crown placement](layout-heuristics.md): + +1. Subject centered within 10% of frame center +2. Clean zones ≥ 15% on each side +3. Crown width > subject width + 400px + +If any one fails, **move the crown to the larger clean zone** with a narrower container and smaller font. Don't keep centering a word that's about to be 60% occluded. + +### You compute text leftmost as `plane_left + padding`. + +That's correct for left-aligned. Wrong for the templates you're using, which are **right-aligned** on the main column and **center-aligned** on crowns. The real leftmost depends on the word width. + +| Alignment | leftmost_x | +| --------- | -------------------------------------------------- | +| Left | `plane_left + padding_left` | +| Right | `plane_right − padding_right − longest_line_width` | +| Center | `plane_center − longest_line_width / 2` | + +Compute it against the **longest wrapped line**, not the whole phrase. "four very talented guys" wraps to 3 lines — the widest is "talented" (~8 chars), not 23. + +### You treat `plane_left` as the text's leftmost edge. + +It isn't. With `left: 180px` and a right-aligned 468px word, the text starts 104px **before** `plane_left` relative to the plane, but actually lands somewhere inside the plane box. The plane box just sets the coordinate space — the text positions inside it based on alignment. Check the compiled output, not the plane attribute. + +### You center text on the frame when the subject is off-center. + +Look at the subject's body center, not the frame center. Jobs sits at x=1100 in a 1920 frame. The **scene's** center of gravity is 1100, not 960. Center-aligning text to 960 is center-aligning to the empty left third, not to anything meaningful. + +### You copy-paste position values from memory-wall to a new video. + +`top: 40, right: 30, width: 720, rotateY: -13` worked for a 1280×720 frame with an acoustic foam wall on the right. It will not work on a 1920×1080 frame with a bookshelf backdrop. Run the 6-item checklist in [scene-types.md](scene-types.md) for the new video before reusing any numbers. + +--- + +## Typography + +### You use template default font sizes regardless of column width. + +Template defaults (66/78/92/140) are tuned for a ~560px column. When you bump the plane to 700px+ and don't touch the fonts, the captions feel underweight — small text swimming in negative space. + +Use the [Font-size × column-width matrix](typography-presets.md). For a 700px column, that's 78/108/128/220 — a 30-40% bump across the board. Re-check pillarbox safety after bumping (bigger right-aligned text extends further left). + +### You pick `intro` style for every first caption. + +Intro = italic, smaller, contemplative. Fine for filler discourse markers ("You know,", "So,", "Well,"). **Not** for the first line when it's actually the thesis ("I've had this kind of upbringing"). Read the words semantically, not positionally. + +### You skip emphasis entirely because "every caption looks clean." + +A story without an emph or crown is typographically flat — viewers can't feel the crescendo. Reserve at least ONE emph per video for the line that lands. Skip it only for truly monotone content (policy statements, warnings). + +### You give every group its own style. + +Style is supposed to signal _hierarchy_. Using `intro`/`phrase`/`emph`/`dream`/`crown` all in one 15-second video means none of them signal anything. Pick 2-3 styles max for a short clip. + +### You only use the 5 preset class names. + +`intro / phrase / emph / dream / crown` are scaffolding, not a closed set. The canonical `memory-wall.html` uses `cap-1 / cap-2 / cap-3 / cap-4` — **position-indexed** with bespoke typography per position. That's how it achieves the 3-line right-aligned cascade on the climax. You can't express "this cap has a hanging indent at position 2" with `"style": "dream"`. + +The `"style"` field in plan.json accepts **any string** — it becomes `class="cap-"`. Define the class in `custom_css`: + +```json +"custom_css": ".cap-1 { font-size: 78px; ... } .cap-2 { padding-right: 44px; }", +"groups": [{"id": "cg-0", "style": "1", ...}] +``` + +When the scene needs per-position bespoke typography, do this. Don't force-fit into `intro / phrase / emph`. + +### You regenerate from plan.json when a canonical example already has the answer. + +When scene framing matches `references/example-renders/memory-wall.html` or `champion.html`, clone that HTML into `/index.html` and only swap the GROUPS array. Don't re-derive the design from presets — you'll lose the specific per-position typography that took many iterations to validate. See [bespoke-vs-presets.md § The clone-and-tweak workflow](bespoke-vs-presets.md). + +--- + +## Blending + +### You default to `mix-blend-mode: overlay`. + +Overlay works on **mid-tone** backgrounds. On dark bookshelves (<60 luminance), overlay makes white text render as black. On sunny backgrounds (>180 luminance), overlay blows out. Check the actual luminance of the caption region in a sampled frame. Pick: + +- mid-tone surface (60-180) → `overlay` +- dark surface (<60) → `screen` +- bright surface (>180) → `normal` with opaque text + +### You animate `letter-spacing` on the word entry. + +You saw a "typewriter breath" effect somewhere and added `letterSpacing: "0.04em"` to the `fromTo` "from" state. Result: inline-block reflow every frame → the whole `.cap` line box recomputes → captions visibly jump between rows. See the "Some → line 2" bug from memory-wall. + +**Animate only opacity + transform.** If you want a breath effect, use `scale` or `y`, not letter-spacing. + +--- + +## Animation + +### You fade both the group container AND each word. + +Default feels safer: fade the container in, then fade each word in. But container.opacity × word.opacity produces a non-linear curve — at progress 40% the combined opacity is 16%, not 40%. Visible result: captions seem to "pop" into view around halfway. + +Set container opacity to 1 at entrance via `tl.set`, then fade only the words. Single-layer opacity = linear perceived fade. + +### You stack captions in a flex column. + +Flex-direction: column with multiple `.cap` children looks tidy in source. At runtime, hidden captions (`visibility: hidden`) still reserve flex space. The newly-entering caption shows up at the _bottom_ of the column instead of the designed position — landing in the gesture zone, getting clipped. + +Use `position: absolute` for each `.cap` inside the plane so hidden ones don't occupy layout. Both shipped templates do this. + +### You start the timeline at t=0. + +Caption at exactly t=0 feels like it was there before the video started. Offset 0.1-0.3s (hyperframes motion-principles.md agrees). Same for the very last caption — let it exit before the video fades. + +--- + +## Scene admission + +### You trust that "looks like one speaker" = "is one speaker throughout." + +TV archive clips cut to B-roll mid-sentence. Interview clips insert cutaways to the interviewer. You didn't check frames beyond the first one, so you rendered captions across a shot transition. Result: captions designed for Subject A are placed relative to Subject B's position (or empty frame) for half the render. + +Sample frames at 20%, 50%, 80% BEFORE planning. If the scene changes, trim to the largest single-subject segment. + +### You ignore baked-in captions / pillarbox / watermarks. + +You saw black bars on the sides and didn't computing the safe-zone. Your captions cross the pillarbox. Or: the source already has burned-in subtitles and you added more — two caption systems fighting for attention. + +Run the **letterbox probe** first. If the source has existing captions, refuse with: "source already captioned, adding more would conflict." + +### You ship Whisper's transcript without checking timings against the beat. + +Transcription is Whisper (via `transcribe.cjs`, no API key) — good word timings, but not infallible: a word can land with a near-zero duration or a timestamp a beat off. This skill is verbatim + on-beat, so `check-timing.cjs --strict` (80ms tolerance) is the gate, not a suggestion — fix drift in `plan.json` before rendering, and never pack two transcript words into one timed entry (the second inherits the first's timestamp and fires early). + +--- + +## Matting + +### You enable CoreML for the matting ONNX. + +It's the Apple way, obviously faster. No. CoreML partitions the ONNX graph across providers. The mixed-precision boundary produced (observed with the previous RVM engine) alpha=30 inside the subject's face while background correctly reads 0. Captions shine through face. Pin the CPU execution provider only (`onnxruntime-node`). Our `matte.cjs` already does this; don't "optimize" it by re-adding CoreML. + +### You pick a matte model by "general vs human." + +DECISION FLIPPED 2026-06-12 after a 5-model × 6-scene A/B with caption renders: the matte's job here is CAPTION LAYERING, not prop fidelity. `u2net_human_seg` (via hyperframes `remove-background`) usually excludes thin offset furniture (mic boom arms) from the matte — words stop being sliced by booms, which beat PP-MattingV2's prop-preserving behavior on real caption videos. It is NOT surgical: large salient objects near the subject (telescope rigs) can still leak in — always sample frames_fg/. Known cost: HELD products can drop out intermittently (captions pass in front) — route product-demo climaxes away from held objects. `isnet-general-use` lost outright (backlit-hair collapse). birefnet-portrait (MIT) beat everything semantically (keeps held items AND drops furniture) but is 928 MB / ~7 s-per-frame CPU — a future quality tier, not the default. + +--- + +## Grouping + +### You caption every word. + +Transcripts are verbose — "you know, um, I, I mean, you know" is 5 words from a single beat. Captioning all of them clutters the screen and breaks reading rhythm. + +Editorially drop filler. Use the rules in [caption-grouping.md](caption-grouping.md): merge short fragments, cut repeated discourse markers, keep the meaning, trim the noise. You are writing typography to support speech, not a court transcript. + +### You group by fixed word-count. + +"3 words per caption, always" makes every caption look the same and fights the natural cadence of speech. Break on sentence boundaries, 250ms+ pauses, and semantic units instead. Caption sizes will naturally vary from 2 words to 5 — that's correct. + +--- + +## The meta anti-pattern + +### You read one reference doc and skip the rest. + +You'll read this file alone and feel covered. These anti-patterns reference concepts defined in `layout-heuristics.md`, `typography-presets.md`, `scene-types.md`. If you haven't read those, the fix advice here won't make sense. + +**Order of reading for a new video**: + +1. SKILL.md (decision gate + pipeline + pre-flight probes) +2. bespoke-vs-presets.md (**first check if a canonical example fits — clone if so**) +3. scene-types.md (template selection — all 4 wall conditions) +4. layout-heuristics.md (positions, sides, crown, font scale, pillarbox formula) +5. typography-presets.md (font-size × column-width table, starting points) +6. caption-grouping.md (word → group) +7. **This file last** (to catch yourself before committing to plan.json) + +If you're pressed for time, still read this one — it flags the failures you're about to make. diff --git a/plugins/hyperframes/skills/embedded-captions/references/bespoke-vs-presets.md b/plugins/hyperframes/skills/embedded-captions/references/bespoke-vs-presets.md new file mode 100644 index 000000000..d6f8fd440 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/bespoke-vs-presets.md @@ -0,0 +1,178 @@ +# Bespoke design vs. presets — when to override, when to clone + +The 5 preset styles (`intro / phrase / emph / dream / crown`) and the 3 templates (`wall-embed`, `corner-column-crown`, `portrait-header`) are **scaffolds**, not rules. The best renders we've shipped all override presets for specific groups because **typography is a per-scene decision**, not a general rule. + +If you only use presets, your render will look generic. If you only copy existing renders, your skill won't adapt. The right workflow is: + +1. **Decide the shape first** (template choice, plane position, blend mode). +2. **Check if a canonical example is close enough** → clone and tweak words + timings. +3. **Otherwise start from presets** → override per-group via `custom_css`. + +--- + +## Canonical example renders + +Full HTML for two validated renders is in `references/example-renders/`: + +| File | Scene | What makes it work | +| ------------------ | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `memory-wall.html` | Introspective monologue, right-side foam wall, mid-tone | Right-aligned cascade, per-group bespoke sizes (`cap-1` 78 italic / `cap-2` 66 italic + right hanging-indent / `cap-3` 72 upright / `cap-4` 90 uppercase). `mix-blend-mode: screen` for the dark-ish foam. | +| `champion.html` | Podcast interview, cluttered bookshelf, 1920×1080 | Upper-left column + center-stage crown. Tuned preset class sizes (`cap-intro` 52 / `cap-phrase` 60 / `cap-emph` 70 / `cap-crown` 140). `screen` blend reads the shelves through text. | + +**When a new scene matches one of these closely** (similar framing, similar subject-center, similar backdrop type): clone the HTML and only replace the GROUPS array + word timings. Don't re-derive the design from presets — you'll lose the specific choices that took many iterations to validate. + +--- + +## When presets are wrong + +You'll reach for presets like `"style": "emph"` when what the scene really needs is: + +### "This cap is at position N and deserves its own treatment" + +`memory-wall.html` uses `cap-1 / cap-2 / cap-3 / cap-4` — **position-indexed**, not role-indexed. Each one is a bespoke design for a specific phrase at a specific point in the arc: + +- cap-1 (soft opener, 4 words): 78px italic 600 — feels like a whisper +- cap-2 (dreamy modifier, 3 words): 66px italic 500 + `padding-right: 44px` — hanging indent creates ragged right-edge stagger +- cap-3 (turn, 2 words): 72px upright 700 — the syntactic pivot, no italic +- cap-4 (climax, 4 words): 90px uppercase 900 — three lines cascade right-aligned + +`phrase/emph/intro` can't express "this cap has a hanging indent" or "this cap is the syntactic pivot". When that matters, invent your own class names: + +```json +{ + "template": "wall-embed", + "custom_css": " + .cap-1 { font-size: 78px; font-weight: 600; font-style: italic; + letter-spacing: -0.01em; } + .cap-2 { font-size: 66px; font-weight: 500; font-style: italic; + padding-right: 44px; } + .cap-3 { font-size: 72px; font-weight: 700; letter-spacing: -0.015em; } + .cap-4 { font-size: 90px; font-weight: 900; letter-spacing: -0.03em; + text-transform: uppercase; line-height: 1.0; } + ", + "groups": [ + { "id": "cg-0", "style": "1", "words": [...] }, + { "id": "cg-1", "style": "2", "words": [...] }, + ... + ] +} +``` + +The `"style": "1"` field becomes `class="cap-1"` on the element — any string works, no validation. + +### "The template's blend doesn't suit this backdrop" → pick a different template, do NOT override + +**Cinematic mode does not override colour or blend.** A template's `mix-blend-mode` + fill are **locked DNA** — `make-composition.cjs` ignores `plan.cap_color` / `blend_mode` / `text_shadow` / `text_filter`. Selecting a template commits to its look; the only agent-authored things are layout (planes/positions) and per-group typography. + +So use the caption-region luminance to **choose** a template that already fits — never to recolour one: + +| Region luminance | What fits | Why | +| --------------------------------- | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| < 60 (dark / low-key) | a cream + `screen` template (`cinematic-cream`, `memory-wall`, `champion`, `portrait-header`) | light text glows, picks up the scene | +| 60–180 (mid-tone) | a cream + `screen` template still reads (add a scrim via Standard if marginal) | text picks up texture | +| > 180 (bright: window, pale wall) | **none of the cream/`screen` Cinematic templates — they wash out** | → use **Standard mode** (opaque rail, set per the chosen template) instead | + +If the scene is bright and the cream/`screen` look washes out, that's the signal to switch to **Standard mode** (which sets opaque colour in the HTML), not to recolour a Cinematic template into something it isn't. + +### "Hanging indent / outdent / letter-width tweak" + +These are per-group affordances you'll occasionally need. Express via `custom_css`: + +```css +#cg-2 { + padding-right: 44px; +} /* right-aligned: shrinks right edge, creating left outdent */ +#cg-2 { + padding-left: 44px; +} /* left-aligned: offset right start */ +.cap-emph .w:first-child { + font-size: 110%; +} /* oversize first word only */ +``` + +The `#cg-N` selector always works because `make-composition.cjs` writes `
` for every group. + +### "Caps should accumulate (flex stack) instead of swap" + +All three templates default to `position: absolute` on `.cap` inside their plane — caps stack at one spot and only the active one shows (single-caption swap). This is correct for `portrait-header` and `corner-column-crown`, where each caption replaces the last. + +`memory-wall` uses **flex column accumulation** — captions pile up like a poem. The template doesn't default to this, so override via custom_css: + +```css +.wall-plane { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-end; /* or flex-start for left-aligned */ + text-align: right; + gap: 14px; +} +.wall-plane .cap { + position: static; /* un-do template's absolute */ + top: auto; + right: auto; + max-width: 100%; +} +``` + +With this + staggered `in` / `out` times, cap-0 fades in at t=0.2, cap-1 at t=2.55 (below cap-0 in flex order), cap-2 at t=4.90 (replaces both as they fade out together at t=4.85) — this is how the memory-wall poem pages work. + +### "Font size doesn't match the scene" + +Template preset sizes are tuned for a specific column width + frame size. Don't fight them — override: + +```json +"custom_css": ".cap-intro { font-size: 52px; } .cap-phrase { font-size: 60px; }" +``` + +Then check [typography-presets.md § Font-size scales with column width](typography-presets.md) for what to aim at given your plane's actual dimensions. + +--- + +## The clone-and-tweak workflow + +For a new video that's clearly similar to an existing canonical example: + +```bash +# 1. Scaffold the project +hyperframes init --non-interactive --video + +# 2. Matte + transcribe +node scripts/matte.cjs +node scripts/transcribe.cjs + +# 3. Copy the canonical HTML instead of writing plan.json +cp references/example-renders/memory-wall.html /index.html + +# 4. Replace GROUPS array with the new transcript's grouping (hand-edit index.html) + +# 5. Render directly (skip make-composition.cjs since we're not using plan.json) +bash scripts/render-and-composite.sh +``` + +This skips the preset-based plan.json entirely. Use when: + +- Subject framing, shot composition, and backdrop type are similar to the example +- You just need to swap the words and timings +- The bespoke typography from the example is what you want + +**Don't clone when**: + +- Subject position differs significantly (e.g. centered vs off-center) +- Scene luminance / blend-mode needs are different +- You want to experiment with new typography + +In those cases, start with plan.json + custom_css and iterate. + +--- + +## Rendering history + +`render-and-composite.sh` now snapshots `index.html` + `plan.json` into `/history/` with a timestamp before every render. If the user says "the previous one was better", diff against the latest snapshot: + +```bash +ls /history/ +diff /history/index-20260422-203947.html /index.html +``` + +This lets you recover a design you iterated away from, without re-reading the agent transcript. diff --git a/plugins/hyperframes/skills/embedded-captions/references/caption-grouping.md b/plugins/hyperframes/skills/embedded-captions/references/caption-grouping.md new file mode 100644 index 000000000..06f04c1c9 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/caption-grouping.md @@ -0,0 +1,130 @@ +# Caption Grouping + +How to turn the Whisper word-level transcript into the `groups[]` array of plan.json. + +## Goal + +**Each group is one visual phrase**: enters, reveals word-by-word, exits. Rule of thumb: 1 group ≈ 1 comma-to-comma clause or 1 breath of speech. + +## Input + +`transcript.json` from `transcribe.cjs`: + +```json +{ + "words": [ + { "text": "Some", "start": 0.24, "end": 0.44, "type": "word" }, + { "text": " ", "start": 0.44, "end": 0.48, "type": "spacing" }, + { "text": "memories", "start": 0.48, "end": 0.82, "type": "word" } + ] +} +``` + +Drop `type: "spacing"` entries; you only need words. + +## Break boundaries + +Cut a new group at ANY of: + +1. **Pause ≥ 500ms** (gap between word.end[i] and word.start[i+1]) — speaker took a breath. +2. **Sentence terminator** — word ends with `.`, `?`, `!`, or an em-dash-like pause. +3. **Strong comma** — `,` followed by pause ≥ 250ms. +4. **Discourse reset** — words like "but", "so", "and then", "you know" starting a clause often merit their own or new group. +5. **Group reaches 6 words OR 2.5 seconds** — whichever first. Long groups feel like subtitles, not embedded typography. + +Hard constraints: + +- Minimum 2 words per group (1-word exceptions: interjections like "Wait." or the crown line). +- Minimum 0.5s on screen. If a group is less, merge into neighbor. +- No overlapping groups — at most one visible at a time. + +## Timing the group + +For a group with words `w[0]..w[n-1]`: + +- `in` = `w[0].start - 0.08` (enter slightly before first word) +- `out` = `min(next_group.in - 0.05, w[n-1].end + 0.6)` (linger ~0.6s after last word, but don't collide with next) + +The last group extends to the video end if needed. + +## Style & tone (cross-reference) + +See `typography-presets.md` for how to pick `style` and `tone` per group. Work left-to-right through the groups and: + +1. First group: default `intro` + `soft`. +2. Watch for emphasis signals (ALL CAPS in transcript is rare but possible; more often it's semantic — superlatives, proper nouns). +3. Escalate tone into `present` once the monologue shifts from setup to statement. +4. Reserve `crown` for at most ONE group, typically the final line. + +## Editorial surgery is allowed + +You do NOT have to caption every word. It's fine to: + +- **Drop filler** like extra "you know"s, "um"s, "I mean"s if they bloat the visual pace. +- **Condense** a 6-word run into 4 by cutting function words, as long as the meaning and timing remain truthful. +- **Skip the whole thing** during obvious silence or non-speech (laugh, music interlude). + +Editorial rule: you are writing typography to support the speech, not a court transcript. Keep meaning, trim noise. + +## Example (champion) + +Transcript: "You know, for me I've had this kind of upbringing, had the great foundation and, you know, I've achieved incredible things. I was dreaming of becoming number one in the world and becoming a Wimbledon champion" + +Groups after editorial pass: + +```json +[ + { + "id": "cg-0", + "style": "intro", + "tone": "soft", + "words": ["You", "know", "for", "me"], + "in": 0.1, + "out": 1.45 + }, + { + "id": "cg-1", + "style": "phrase", + "tone": "soft", + "words": ["I've", "had", "this", "kind", "of", "upbringing"], + "in": 1.4, + "out": 3.35 + }, + { + "id": "cg-2", + "style": "phrase", + "tone": "soft", + "words": ["the", "great", "foundation"], + "in": 3.5, + "out": 5.35 + }, + { + "id": "cg-3", + "style": "emph", + "tone": "present", + "words": ["I've", "achieved", "incredible", "things"], + "in": 6.05, + "out": 8.3 + }, + { + "id": "cg-4", + "style": "dream", + "tone": "present", + "words": ["dreaming", "of", "becoming", "number", "one"], + "in": 8.5, + "out": 10.4 + } +] +``` + +Plus the crown: + +```json +{ "id": "cg-crown", "style": "crown", "words": ["Wimbledon", "Champion"], "in": 10.8, "out": 12.08 } +``` + +Notice "had" was dropped from cg-2 ("had the great foundation" → "the great foundation"), "I was" was dropped from cg-4, and "a" was dropped from crown — all for visual cadence. + +## word.start/end inside groups + +Pass through the original timestamps from the transcript. Don't retime individual words — only the group `in`/`out`. The word-level karaoke reveal inside each group uses the original w.start. diff --git a/plugins/hyperframes/skills/embedded-captions/references/composition-craft.md b/plugins/hyperframes/skills/embedded-captions/references/composition-craft.md new file mode 100644 index 000000000..eee8a33ff --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/composition-craft.md @@ -0,0 +1,522 @@ +# Composition craft — EMBED track only + +This is the deep "how to lay a caption INTO the scene" manual — it governs the **embed** +track only (captions composited behind the subject). The default **rail** track (standard +lower-third subtitle, where most text lives) has its own, much simpler spec → [rail.md](rail.md). +Read this before authoring any **promoted** phrase, in either authoring mode (template +Cinematic `plan.json` or Standard `index.html`). + +Topics: phrase grouping, planes & clean-zone anchoring, zone coherence, climax pop, +readability, edge breathing, the occlusion 3-step judgement, accumulation, and persistence. + +> **Two-track model (SKILL.md § Caption model).** Render states are `drop` / `rail` / `embed`. +> The `bg / fg / hybrid` axis used throughout the text below is **superseded**: read **"bg" as +> embed** (behind subject / in-scene), **"fg" as rail or promote-out** (in front), and "hybrid" +> as simply rail + embed coexisting. Everything here applies to the **embed** track — don't +> apply this craft to the rail. + +(Granular sub-topics also have their own files — see SKILL.md § Shared knowledge.) + +--- + +### Caption layer: BG vs FG (aesthetic axis) + +Separately from template choice, decide whether captions are **embedded** (behind subject, matte occludes — default "embed" cinematic feel) or **announced** (in front of subject, no occlusion — poster / lower-third feel): + +- **bg** — classic embed. Captions sit behind the matte, subject's body partially occludes letters. **Default for any cap that fits the frame.** Partial occlusion is the cinematic feature — small narrator caps with face nibbling 20-30% of letters reads as embedded texture; climax words with face crossing 30-40% reads as Vogue masthead. The eating is what sells the embed. Don't shrink to avoid it. +- **fg** — captions float on top, subject can't occlude. **Fallback for when bg cannot work.** Two scenarios: + - **Climax fg**: the climax word is so big at impactful size that subject + frame width together leave no place for bg to render at all (subject fills frame AND climax phrase is long; bg would be eaten past readability into broken). + - **All-fg fallback**: rare, only when the entire scene has no usable bg zone for any caption. +- **hybrid** (per-group `layer:` field) — when one cap (usually the climax) hits the "no place to fit bg" wall but the others (smaller body caps) still work fine in bg. **Body bg + climax fg** is the canonical hybrid pattern. + +**Rule of thumb:** + +- Small narrator/emphasis captions: bg almost always. Subject eating a few letter-edges = embed feature. +- Climax: try bg first, sized to maximally cross subject. If that size won't fit frame width, AND no clean zone elsewhere, use fg. +- Don't invert the hybrid: body fg + climax bg is the WRONG direction (sacrifices the easy bg embed wins on body, while the climax that needed protection from over-occlusion gets sent into the fire). + +**Hybrid worked example — Startup_Host (subject fills frame).** + +Subject fills the frame top-to-bottom (head_top y=126 / 10% from top). For body captions there's no large clean zone, but small italic narrator caps in upper corners get eaten ~25% by subject — that's the embed showcase. For the climax "SUCCESSFUL STARTUP" at maximally cinematic size, bg would be eaten 40-50%+ → past cinematic into broken. Climax goes fg. + +```json +{ + "caption_layer": "bg", + "groups": [ + { + "id": "cg-0", + "plane": "body", + "layer": "bg", + "css": "font-size: calc(0.055 * var(--h)); font-style: italic; ..." + }, // narrator bg — face eats edges, embed texture + { + "id": "cg-1", + "plane": "body", + "layer": "bg", + "css": "font-size: calc(0.085 * var(--h)); font-weight: 800; text-transform: uppercase; ..." + }, // emphasis bg — Vogue masthead + { + "id": "cg-5", + "plane": "crown", + "layer": "fg", + "css": "font-size: calc(0.09 * var(--h)); font-weight: 900; text-transform: uppercase; ..." + } + // ↑ climax fg: subject too dense for bg to land readably; fg fallback. Sized to fit frame width fully (single line). + ] +} +``` + +Result: body bg captures embed cinematic across the subject (eaten edges = texture not bug), climax fg sits on top fully visible because there was nowhere else for it to go. make-composition.cjs emits both `index.html` (bg groups) and `index_fg.html` (fg groups); render-and-composite.sh runs two parallel Chromium passes and ffmpeg screen-blends fg over bg+matte. + +Set via `caption_layer: "bg" | "fg"` plan-level (default for groups without explicit `layer:`), and `layer: "bg" | "fg"` per-group to override for hybrid. + +**Decision rule — bg is default, fg is fallback, hybrid is for mixed semantic content.** + +For BODY captions (narrator + emphasis): + +1. **Find the actual clean zone.** Sample frames at 20/50/80% and mentally trace where the subject is (head, shoulders, gesturing hands). The clean zone is what's left. Top band above the head, bottom band below the shoulders, or off-center side column. +2. **Anchor the plane in that zone.** Body caps fit comfortably with NO subject overlap → `layer: "bg"`. +3. **If body cap stack inherently overlaps subject heavily (>40% per check-occlusion peak)** even at smallest reasonable fonts → body `layer: "fg"`. Subject fills frame too much for embed. + +For CLIMAX caption (the payoff): + +1. **Default: `layer: "bg"`, sized to maximally cross subject for embed effect.** The face/body eating part of the climax word IS the visual win. Don't shrink to avoid occlusion. Use the largest size that fits frame WIDTH (sub-pixel readable letters fully on-screen) — vertical position should land it across the subject's hair / forehead / face. +2. **`layer: "fg"` for climax** ONLY when frame width physically can't hold a font big enough to feel climactic AND there's no compositional way to break the word across multiple lines that bg embed could carry. +3. **Hybrid (body bg + climax fg)** is the canonical pattern for subject-fills-frame scenes. Body small caps stay bg — subject eats letter edges = embed texture (cinematic, not a bug). Climax goes fg ONLY because at impactful size + subject filling frame there's no place where bg climax could land readably (would be 50%+ eaten = past cinematic into broken). The opposite direction (body fg + climax bg) sacrifices the easy bg embed wins on small caps and forces the climax into a slot it can't survive — never do that. + +**Editorial split — the spatial form of body bg + climax fg.** When the hybrid above is laid out with **bg in the upper half and fg in the lower-third**, you get a magazine-cover composition for free — no separate template needed. The rule: + +- **Body caps (BG)** — placed in the upper half (top: 6-30%), at the head/hair zone. They get partially occluded by hair/forehead = vogue-masthead embed texture. +- **Climax cap (FG)** — placed in lower-third (top: 70-85%), in front of subject's chest/below. It's fully clear, fully readable, dominates the bottom band. + +The viewer's eye reads top-to-bottom: first the partially-veiled body line ("decorative, atmospheric"), then the clean climax statement ("the point"). Same Z-axis layering as Vogue / Apple Keynote (decorative top behind subject + clear bottom in front), but driven by cinematic-cream's existing per-cap `layer:` field — no new template, no separate masthead track. + +Two timing modes inside this layout: + +- **Sequential cross-fade (default)** — body fades out as climax fades in over 0.3-0.5s. The brief overlap window IS the editorial dual-layer moment. Standard cinematic-cream behavior. +- **Sustained overlap** — extend body's `out` to coincide with or extend past climax's `in` so both are visible together for 1-2s. Use sparingly: works when body line is short (≤3 words) and acts as a "kicker" above the climax. Long body phrases sustained alongside a fg climax = visual noise. + +**The plane-conflict rule for sustained overlap (debugged in Startup_Host).** If you extend a body bg cap's `out` into a window that contains another cap with `layer: "fg"` IN THE SAME PLANE, the two will visually overlap in the final composite — bg pass renders the extended bg cap, fg pass renders the fg cap, both at identical plane position, screen-blended on top of each other. Result: muddy double-text at the same spot. + +Before extending any body bg's `out`: + +1. Check what other caps occupy the body plane during the extended window +2. If ANY of them is `layer: "fg"`, the extension causes plane overlap → don't do it +3. Workaround: either (a) skip sustained overlap and use sequential cross-fade only, or (b) author the body kicker on a DIFFERENT plane / absolute position so the two don't share a plane + +Concrete example: Startup_Host has cg-3 "diving deep" (body bg, plane=body, 3.1–4.15s) and cg-4 "into what it really takes to build a" (body fg fallback, plane=body, 4.15–6.42s). Both occupy `plane=body`. Extending cg-3 to overlap with the climax cg-5 (6.42–8.06s) ALSO drags cg-3 across cg-4's window where cg-3 (bg) and cg-4 (fg) collide on the body plane. Sequential editorial-split (climax in lower-third, body bg already faded out) was the only safe option for this case. AI_Insights had no fg in body plane between kicker and climax, so sustained overlap worked there. + +When NOT to use editorial split: + +- Body and climax are both information-carrying full sentences → forces viewer to read both at once, fails. Editorial split needs the body line to be _atmospheric / setup_ (italic mood), climax to be _the payoff_ (bold uppercase). +- Subject takes the full vertical column (no top clean zone, no bottom clean zone) → there's no upper or lower band to anchor either layer. Fall back to all-fg with crown. +- Climax is a long phrase that wraps to 3+ lines in lower-third → eats too much vertical real estate, leaves no room for the body bg above. Either shrink climax or split into more groups. + +This pattern was historically what we called "hybrid" but the spatial framing — upper bg behind / lower fg in front — is what makes it read as editorial design rather than just two unrelated caption tracks. Keep this in mind when authoring per-cap `layer:` for hybrid scenes. + +Common mistakes (debugged in real cases): + +- Defaulting to "right column" because memory-wall did it → narrow 400px column forces long phrases to wrap 4-5 lines, pushing the stack DOWN into the subject's body. Fix: use top-band full-width instead, wider wrap fits fewer lines. +- **Flipping climax to fg because "viewer needs to read it" → kills cinematic embed.** Climax is supposed to feel half-eaten by subject; that's the magazine masthead energy. Don't fix what isn't broken. +- All-fg whole plan when subject fills frame → safe but sterile. Hybrid (body bg + climax fg) is almost always better — small body caps eaten = embed texture, climax fully visible since it had no readable bg slot. +- Sizing caps before choosing the plane → typography is a function of plane geometry, not the other way round. +- **Putting LONG multi-line phrases on bg in subject-fills-frame scenes.** "Subject eats letter edges = embed texture" only holds for short caps (1-3 words / 1 line). A 6-8 word italic phrase wraps 3-4 lines, and when subject's head is high in frame, **whole lines** of the phrase land deep in the body/face zone — entire words obliterated, not edge-textured. That's not embed, it's broken. **For long body phrases on subject-dense scenes: switch THAT specific cap to `layer: "fg"` even if other body caps stay bg.** Hybrid lets you mix per-cap. Sample the matte at the cap's time window: if head_top y is climbing and the cap's stack height extends into y > head_top, that cap needs fg. +- **Subject doesn't move uniformly across the clip — sample matte per BLOCK time window, not just once per case.** Startup_Host's head_top swings y=224→96 across 8 seconds (128px / 10% of frame). A block plan that worked at t=2 (head low, plenty of space) breaks at t=5 (head high, no space left). Per-block matte sampling > one-shot per case. + +### Step 0 for ANY plan — transcript role annotation (mandatory) + +Before writing a single caption group, do a **pre-plan agentic pass** over the transcript. Read every word and grade it. This is judgment, not a lookup — context decides (e.g. "like" is content in "like this", filler in "like, um, yeah"). No hardcoded word lists; agent decides per token. + +**The grade is the SELECTION INPUT — it picks the render state** (`drop` / `rail` / `embed`); it is not itself a typography class (see SKILL.md § Caption model): + +| Grade | What it is | → render state | +| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| **drop** | Interjections/hesitation (um, uh, er, ah), self-corrections ("I think— I mean actually…" keep only final), pure stutters ("the the the") collapse to one | **drop** (not shown) | +| **normal** | Ordinary spoken content — connective glue + the content words that carry the idea | **rail** (dense conversational glue may be trimmed for readability; content/structure words stay) | +| **emphasis** | The 1–2 punch words in a phrase | **rail** + `emphasis` highlight (inline — stays on the rail) | +| **peak** | The payoff of a beat/section — the line you'd say out loud paraphrasing it | **promote to embed** (apply the craft below); the single biggest of the whole piece = `apex` | + +A **peak** is per-beat, **not** per-clip: a short clip usually has one (its climax); a long/multi-section explainer has ~one per section. **Embed is scarce + spaced** — ≤1 per sentence/beat, never two adjacent or co-visible, ≥ a beat apart, at most one `apex`. (The old "1 climax / 2–4 emphasis / 4–10 body / 6–12 narrator / 2–8 drop per 10–20s clip" was calibrated for short single-beat clips; it generalises to "one peak per beat, spaced — everything else rides the rail.") + +**This step replaces any filler-word list.** If you find yourself reaching for a regex, you're doing it wrong — go back and judge per-token. + +Then build the plan from the annotated words: + +- drops → do not appear in any word entry +- narrator → either fold into adjacent body groups OR become tiny italic subordinate groups if rhythm demands +- body/emphasis/climax → shape the group structure, with typography matching role + +### The compositional unit is a PHRASE, not a chunk (read this twice) + +A **caption group** is a semantic phrase — typically 2–8 words bound by intonation and meaning. It is NOT a mechanical "2–4 word chunk". A group has ONE typography (one font-size, one weight, one case, one position) matching its role; the "every-word" feel comes from **per-word GSAP stagger INSIDE the group**, not from splitting the phrase into many tiny groups. + +Canonical reference — memory-wall, 12 spoken words, **4 groups**: + +- cg-0 `"Some memories feel soft"` (4 words, italic 600, right-top) +- cg-1 `"like old film"` (3 words, italic 500, right-mid, smaller) +- cg-2 `"but suddenly"` (2 words, upright 700 pivot, right-center) +- cg-3 `"EVERYTHING IS SHARP AGAIN"` (4 words, uppercase 900 climax, spanning width) + +Every word is shown. Groups **cascade and accumulate** — cg-0 stays on screen while cg-1 enters below; by the climax, all 4 are visible simultaneously as a poem. Per-word stagger (~80ms) animates each word into its group in sequence. + +If you find yourself producing 15+ groups for a 10s clip, stop — you're treating verbatim as mechanical chunking. Go back, re-read the transcript, identify 4–7 phrases, and make them groups. + +**Don't split idioms, collocations, or bound phrases across groups.** "Not even kidding", "at the end of the day", "as a matter of fact", "whole lot of", "more or less", "a little bit", "kind of", "sort of", proper nouns ("Blackmagic Pocket 4K"), brand phrases, and other fixed expressions are semantic units. The climax of "I'm not even kidding" is the whole idiom, not just "KIDDING". The climax of the memory-wall canonical is "EVERYTHING IS SHARP AGAIN" as one group, not just "AGAIN". Splitting these across group boundaries breaks meaning AND typography (you can't render "not even kidding" with "not even" italic-small and "kidding" uppercase-huge — it reads as two different statements). + +### Captions are always verbatim + +Every word the speaker says gets captioned. The skill no longer ships a "highlight" mode — curated/edited transcripts produced fewer beats but lost the rhythm of the spoken sentence and ended up feeling like generic subtitle tracks. Verbatim with strong typographic hierarchy (small italic narrator → emphasis upright → climax massive uppercase) gives the cinematic feel without dropping content. + +The only words you remove from the transcript: + +1. **Pure phonetic interjections** (um, uh, er, ah, hmm) — not words, not captioned. +2. **Exact immediate stutters** ("the the the" → keep one; "is is is is" → keep one, aligned with the phrase that follows). The viewer should see one "the", not three. +3. **Self-correction backtracks** ("I think— I mean actually…" → keep only "I mean actually"). + +**All content words AND structure words stay** (articles, conjunctions, prepositions, auxiliaries, pronouns). Dropping a structure word like "in some" or "and I've" or "out of it" is a bug, not a stylistic choice. + +### Planes — shared parent containers for spatial coherence (RECOMMENDED) + +The memory-wall and champion canonicals don't set `top:` on each caption. They have a **parent container** (`wall-plane` / `left-plane` / `crown-plane`) that owns the spatial anchor, and caps are children that stack automatically (flex column with gap) or replace (absolute at same anchor). + +Your plan.json can opt into this by declaring `planes` and assigning each group to one: + +```json +{ + "planes": { + "body": { + "css": "top: 4%; right: 4%; width: 720px; display: flex; flex-direction: column; align-items: flex-end; gap: 14px;" + }, + "crown": { + "css": "top: 32%; left: 0; right: 0; text-align: center;" + } + }, + "groups": [ + { "id": "cg-0", "plane": "body", "css": "font-size: calc(0.08*var(--h)); font-weight: 600; font-style: italic;", ... }, + { "id": "cg-1", "plane": "body", "css": "font-size: calc(0.10*var(--h)); font-weight: 800;", ... }, + { "id": "cg-2", "plane": "crown", "css": "font-size: calc(0.20*var(--h)); font-weight: 900; text-transform: uppercase;", ... } + ] +} +``` + +The plane CSS owns positioning (top/left/right + display:flex/grid/block). Per-group CSS owns **typography only** (font-size, weight, style, case, letter-spacing, line-height). **No top/left/right/position on a group when it's inside a plane** — the parent decides. + +**Typography is agent-authored per group, NOT looked up from a preset.** The `cinematic-cream` template locks only the DNA (Inter family, motion curves, `mix-blend-mode`, `cap_color` palette, text-shadow/filter derived from luminance). Everything else — `font-size`, `font-weight`, `font-style` (italic vs upright), `text-transform` (uppercase vs mixed), `letter-spacing`, `line-height` — is written by the agent, per group, in `plan.json`'s `css` field. No "cap-1 must be italic 600, cap-2 must be uppercase 900" rule. Read the scene + transcript, pick typography that matches the semantic role (narrator/body/emphasis/climax) and the visual weight the frame can carry. See [references/typographic-moves.md](typographic-moves.md) for _recommended_ combinations — treat as palette, not schema. + +When to use planes: + +- **Multi-phrase sentence in one home zone** — use a flex column plane. All body caps inside accumulate/stack automatically, no collision math. This is the memory-wall pattern. +- **Body zone + climax zone** — two planes: body (flex stack) + crown (center). Body caps live in body-plane; climax pops in crown-plane. Cross-plane transition = earned break. +- **Any clip with ≥3 body phrases** — single-plane flex stacking beats hand-placing each group's top% every time. + +### Picking the plane anchor — find the ACTUAL clean zone in THIS scene + +**Do not default to "right column" because memory-wall did.** Memory-wall worked because its subject sat left-center with a clean wall on the right. Different scenes have different clean zones: + +- **Subject centered (most selfies, vlogs)** → top band above the head is usually cleanest (clear sky / ceiling / wall). Right or left columns get eaten by shoulders or hands. +- **Subject left (interview with right-column backdrop)** → right column cascade (memory-wall classic). +- **Subject right (reverse interview)** → left column cascade. +- **Two-shot or busy background** → may need to use a corner, or sit the caption on the ONE surface that's consistently clean (a solid jacket, a whiteboard, a ceiling). + +Before writing plane CSS, look at a frame sample. Mentally trace the subject's bounding box and hand-gesture reach. The plane anchors into whatever's LEFT — negative space where the cascade won't be eaten by body or busy backdrop. + +Small-size italic narrator text is especially vulnerable — it disappears into mottled backgrounds or body occlusion. Keep smallest caps in the cleanest part of the zone, not at the edges where subject extends. + +When NOT to use planes (the remaining free-mode use cases): + +- **1–2 isolated groups** with deliberately different positions — free mode is simpler. +- **Specific clip-spanning motion** where a group needs to drift/move independently. + +Free mode (no `planes` declared) is still supported — each group's CSS owns its own top/left/right. Use when you genuinely need bespoke per-group placement. + +Wrong: "primary slot for 9:16 is top:12%". That's a lookup; it produces generic output. +Right: look at THIS scene, find where captions will read cleanly, respect the speaker's framing, and pick a composition pattern that serves the content's narrative arc. + +Example patterns an agent can pick (not exhaustive, not ranked): + +- **Right cascade accumulating** (memory-wall): all groups right-aligned, stepping down in top%, they stay — final frame shows a poem. Works when subject is centered-left and there's clean right-column space. +- **Center stack climax** (Sunset): italic openers at top, upright pivot mid, uppercase climax takes the full top as the final beat, earlier groups fade out before climax. Works when subject is centered and scene has clean sky + clean below-shoulders. +- **Left-right split** (memory-wall variant): narrator voice on one side italic, statement voice on the other side upright, climax takes center. Works when subject has off-center clean zones. +- **Single-line subtitle rail**: legit choice when scene is dense and no clean zones exist (busy background, subject fills frame). This is the "accessibility" fallback, not the default. + +Whichever pattern is picked, the agent's job is to **justify the choice**: "Subject is on the left, clean gradient sky on the right — I'll cascade right-aligned so captions have clean backdrop throughout." Write that reasoning as a `_notes` field in plan.json so the intent is inspectable. + +Anti-patterns to NEVER ship: + +- Alternating top↔bottom per chunk — reads as chaos (one sentence's words appearing in different vertical zones). +- Locking every group to the same `top` value — reads as subtitle track, kills cinematic feel. +- Placing body/narrator groups directly over the face when clean space exists — the Vogue-embed effect is for the CLIMAX word only, not default behavior. +- **Dropping transcript words to fit caps in fewer blocks.** NEVER. Verbatim is verbatim. If 4 caps don't fit in 1 block, split into 2 sub-blocks of 2 caps each — keep all words. The only legitimate drops are SKILL.md's filler list (um/uh/exact-stutters/self-corrections), not "we ran out of room." +- **Mechanically aligning all caps in a plane to share `out` time.** This makes everyone stay on screen longer, _increasing_ density. Wrong fix for the no-jump problem. Correct fix: split natural-handoff caps into separate blocks where each block's caps share `out` (same exit moment, no jump), and `next_block.in ≥ prev_block.out` (clean handoff between blocks, no overlap). + +**Block boundary three laws** (must hold for every plane in every plan): + +1. Within a block, all caps share `out` — they fade together, no per-cap exit jitter. +2. Between adjacent blocks in the same plane, `next_block.in == prev_block.out` (or `next.in > prev.out` with a small gap). Caps from prev_block must FULLY exit before next_block's caps mount; otherwise the prev cap's exit at its `out` time triggers a flex reflow that yanks next_block's already-mounted caps upward = jump. +3. `prev_block.out ≤ next_block.first_word.start` so next_block's first word still animates from its real spoken time (the in-time only constrains when the container mounts; word animations fire at their per-word `start`). + +A common mistake: setting `next_block.in` slightly EARLIER than `prev_block.out` to give the new block a head-start fade-in, while prev_block still has a different (later) `out`. The 50-300ms overlap looks invisible in the plan but produces a visible jump on screen because two caps with different `out` coexist in the same flex stack. + +- **Vertical gap between body bottom and crown top.** Looks disconnected ("The pace is" at top:3% with "UNPRECEDENTED" at top:20% creates 144px void). Bond the setup phrase + climax word in the SAME crown plane via flex-stack — the Street_Talk "and being / CONSISTENT" pattern. + +### Zone coherence — one sentence, one home zone + +**Never switch spatial zones mid-sentence.** A full semantic unit (sentence or clause) should live in ONE home zone (e.g. right column, or top band). The viewer's eye follows the phrase group. Ping-ponging between top/bottom/left/right for consecutive phrases of the SAME sentence reads as chaos — the reader has to re-find the caption every beat. + +Zone changes are earned at: + +- **Sentence boundaries** (period, long pause, topic shift) — allowed to move to a new home zone, often paired with a tonal shift (italic body → uppercase emphasis) +- **The single climax** — the one break from the home zone, always allowed, often takes center-full-width + +Heuristic: if you find cg-N and cg-N+1 are in different zones (top vs bottom, left vs right) AND they're parts of the same sentence (no period/long pause between them), you've violated zone coherence. Fix by picking one home zone for the whole sentence. + +### The climax has to POP — not just "be a bit bigger" + +A climax caption that's the same size as body emphasis is a failed climax. The viewer's eye needs a clear visual break: THIS is the payoff. + +**Size the embedded climax to the FRAME, not to the rail (two-track rule).** The climax is a hero — its size is anchored to frame height: **`font-size: calc(0.16–0.22 * var(--h))`** (default ~0.18–0.20h; go bigger for more impact — it should dominate the frame, only width/readability caps it). It is **NOT** a multiple of the rail: the rail is a small standard subtitle (~0.045h), so "≥1.8× the rail" would yield a tiny, weak climax. Express rail, embed-body and embed-climax all as `var(--h)` fractions so they scale across resolutions — **never hardcode px**. The ratios below are a **floor / hierarchy check** (the climax must clear body-emphasis by ≥1.8× and the smallest tier by ≥2.5×), not the climax's sizing basis. Width is the real ceiling: shrink only if the word can't fit the frame at a legible size (see "Readability is a hard constraint"). + +Contrast floor — the climax must at least clear these: + +| Ratio | Feels like | +| -------------------------- | ------------------------------------------------------------------------------------------- | +| **1.0-1.3× body emphasis** | Flat — the climax is just another beat. Fix it. | +| **1.5-1.8× body emphasis** | Noticeable but not explosive. OK for subtle payoffs, weak for punchlines. | +| **≥1.8× body emphasis** | Pops. Viewer's eye snaps to it. Target for "punchline" / "reveal" / "reaction" climaxes. | +| **≥2.5× body italic** | Compare against the SMALLEST body tier too — the multi-tier jump is what creates hierarchy. | + +A quick audit script — before shipping, dump every plan's max-body vs max-crown font-size ratio, and flag anything <1.8×: + +```js +const bodyMax = Math.max(...plan.groups.filter((g) => g.plane === "body").map(fsize)); +const crownMax = Math.max(...plan.groups.filter((g) => g.plane === "crown").map(fsize)); +const ratio = crownMax / bodyMax; // aim for ≥1.8 +``` + +**Split pattern — when one word alone should carry the climax.** If the climax phrase is 2+ words ("and being consistent", "not even kidding") and one of them is the actual payoff, split into setup + payoff BUT keep them spatially bonded: + +- Setup words → small italic narrator (soft, trailing off) on line 1 +- Payoff word → massive uppercase on line 2, same plane, flex-stacked directly below +- **Both groups live in the SAME (crown) plane**, flex-column, gap 4-8px. Not two different planes — otherwise "and being" sits in the top band and "CONSISTENT" sits mid-frame and they read as two unrelated captions. + +Crown plane CSS for split climax: + +``` +"crown": "top: 26%; left: 0; right: 0; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 6px;" +``` + +Street_Talk canonical example: original was `"AND BEING CONSISTENT"` all in crown at 0.085h (same as body emphasis, ratio 1.0×). Rewrite: crown plane becomes a flex-column; `"and being"` → 0.055h italic at top of column (line 1); `"CONSISTENT"` → 0.11h 900 uppercase stacked below (line 2). The payoff POPs because of size contrast within a bonded 2-line composition, AND it crosses the subject's head since the crown column is anchored at ~26-30% top. + +Timing: both groups share `out` (at clip end or block boundary) so neither fades alone — they hold together as one composition. Setup enters first (soft fade-in), payoff enters later when the word is spoken (snappier present scale-in). + +**Readability is a hard constraint — bleed can't eat the word.** Your first move when a climax word overflows is NOT "accept the bleed, it's cinematic" — it's "shrink to the largest size that fits." Compute the max font size that fits the frame: + +``` +max_font_px = frame_width / (chars × char_ratio × letter_spacing_mult) +``` + +For "CONSISTENT" (10 chars), uppercase 900 (char_ratio 0.62), letter-spacing -0.05em (mult 0.95), 720px frame: `max = 720/(10*0.62*0.95) = 122px ≈ 0.095h`. Use 0.09h for a small safety buffer. The word fully occupies the frame edge-to-edge — that's already maximum visual impact without losing any letter. + +Cinematic bleed is only OK when **a few pixels of 1-2 outer letters** get mild cropping from scale-in animation or sub-pixel rounding — that reads as "bigger than frame." Any bleed that forces the reader to mentally complete missing letters (>15-20px per side on a 10-char word) is a BUG, not style. "ONSISTE" with 80px each side clipped is NOT a valid climax — it's broken. + +Hard rules: + +- **Readable first.** Every letter should be fully on-screen, with at most a few-px crop on the first/last letter. +- **If max legible size doesn't meet ratio target**, raise impact via _other_ signals (weight 900, all-caps, bg head-cross, multi-line composition with setup word above), not via illegible bleed. +- **Never bleed body/narrator captions.** Only the crown/climax is allowed any edge crop at all. +- `OCCLUSION_SKIP=1` is an escape hatch for iterating; the shipped plan should pass `check-occlusion-v2.py --strict` (pixel-perfect via headless Chromium DOM). + +### Edge breathing + climax-crosses-head (bg showcase) + +Two placement tweaks that separate "looks like a caption sitting in the scene" from "looks like a pasted subtitle": + +- **Non-climax caps need edge breathing room.** Body-plane groups should NOT hug `left: 0; right: 0` flush to the frame. Add `left: 3-6%; right: 3-6%` (or `right: 30-40px` for pixel-anchored planes). The breathing sells the compositional choice — flush edges read as "default subtitle track", indented edges read as "considered composition". Top edge the same: `top: 2-6%` not `top: 0`. + +- **The climax SHOULD cross part of the subject's head — deliberately.** This is what makes bg-layer captions feel cinematic instead of just "text floating above the speaker". The effect is strongest when 20-40px of the word's last line dips behind the hair or forehead — viewer reads the word clearly AND sees it being occluded at the edge. Not "covered by the face" (unreadable), just "grazed by the hair" (legible + cinematic). + + How to place the crown with intent: + 1. Sample the matte PNG at climax time: `f_{frame_idx:04d}.png` where `frame_idx = round(climax_time * fps)`. + 2. Scan rows from top until `alpha > 128` — that y is the subject's topmost pixel (usually hair). + 3. Position crown so the _bottom of the last line_ lands 30-80px below that y. For a 2-line crown at 0.085h on 1290h frame, line heights ~104px each; total height ~200px. If subject top is at y=445, set `crown.top` such that `top + height = 445 + 50 ≈ 495` → `top = 295px ≈ 23%`. + 4. Verify with checker — the HERO/crown peak occlusion target is ~30–55% (the embed effect; the head crossing the middle). Below ~15% it reads as a floating label (the hero-weak advisory fires); above ~65% the word is eaten (the gate FAILs). Small narrator caps: ~20–30% texture. + + Practical rule of thumb: **crown peak occlusion 3-10%** is the sweet spot. The checker's number tells you directly — not a subjective "it looks good" judgment. + + **Crown defaults are scene-specific, not template-wide.** Don't set `crown.top: 6%` because "that's what the previous case used." If the subject's head_top is at y=380 (29% of frame) and your crown is at top:6% with 100px height, the crown bottom lands at y=200 — 180px ABOVE the head, completely floating in sky, zero embed effect. Always sample the matte once per case and compute `crown.top` from `head_top - crown_height + (30 to 80)` so the crown's bottom edge dips into hair. This was a real bug across 6 cases until enforced. + + FG-layer crowns skip this entirely (they render on top, no occlusion to showcase) — FG is announcement, not embed. + +### Pre-render occlusion + frame-overflow gate + +**`check-occlusion.cjs` (canonical, pixel-perfect)** is the only occlusion checker in `scripts/`. It auto-runs `measure-layout.cjs` (headless Chromium via Puppeteer) which loads the compiled `index.html`, seeks the GSAP timeline to 4 sample times per group (15/40/65/90% through window), and queries `getBoundingClientRect()` on every `.cap` and child `.w` span. Output is `_layout.json` with the actual rendered pixel coordinates of every word at every sample. Then it computes per-word, per-cap occlusion against the real subject-matte alpha (read via `sharp`): + +- **Per-word peak occlusion** — the load-bearing metric: a 5-word phrase where 3 words are fully eaten averages the same as 8 words half-eaten, but only one of those is shippable, so per-WORD peak is what gates. Per-word peak ≥65% = `obliterated`, ≥35% = `warn`. A `WARN` band hit on a single climax word is OK (cinematic edge crop); two adjacent words obliterated is not. +- **Per-cap aggregate** — avg + peak occlusion across all samples. Cap fails at peak ≥50%. +- **fg-layer caps are auto-skipped** (they render above the matte; no occlusion possible). + +**Why measure the real DOM, not estimate a bbox.** An earlier heuristic estimated each word's box from `char_ratio × font × text_length` and was wrong in both directions. Startup_Host case: it reported `cg-1 "podcast." OK at 9%/12%` because it guessed y=134 (above the subject's head), but the rendered DOM was at y=209 (mid-head) → actually `FAIL 54%/60%`. Same case, it reported `cg-3 "diving deep" FAIL at 76%/77%` while the real measurement was `WARN 36%/40%` (the box is wider than the head — most pixels clear, only descenders dip into the silhouette). Estimation is retired; `check-occlusion.cjs` measures the rendered pixels. + +**Frame-edge overflow** — the checker also flags when a measured word bbox extends past the canvas (text the ffmpeg crop would clip), reported as `cg-N [overflow] "word" off-frame: left Xpx, right Ypx (@Ts)`. Because cropped body text is always wrong, a clear glyph clip (>8px past an edge) **fails `--strict`**; a sub-glyph graze (≤8px — the first/last-letter crop the climax is allowed) is a non-blocking `[overflow-warn]`. + +**The checker reports facts, the agent applies judgment.** A FAIL is NOT an automatic "must re-layout" signal — it's evidence to interpret. Two competing goals coexist: + +1. **Readability** — every sentence must remain comprehensible to the viewer +2. **Cinematic embed** — partial occlusion is the desired vogue-masthead effect; zero occlusion looks like a pasted subtitle + +When the checker reports a per-word obliteration (≥65%), apply this **3-step decision rule** before changing anything: + +**Step 1 — POS check.** Is the obliterated word a function word (the / a / an / of / in / on / at / to / I / it / is / are / was / be / that / this / which / and / or / but)? Function words are grammatically optional in most contexts — a 100%-eaten "the" or "I" or "of" usually does NOT break the sentence. Content words (nouns, verbs, adjectives, climax words) carry meaning — they MUST stay legible. + +**Step 2 — sentence parse without the word.** Mentally delete the obliterated word from the sentence. Does the remainder still convey the meaning? + +- "like this are why I travel" minus "I" → "like this are why travel" — first-person obvious from context, **OK** +- "take it all in" minus "all" → "take it in" — complete English idiom on its own, **OK** +- "a whole lot of information" minus "of" → "a whole lot information" — slightly broken but recoverable, **OK** +- "diving deep into startups" minus "deep" → "diving into startups" — works fine, **OK** +- "diving deep into startups" minus "diving" → "deep into startups" — loses the verb, sentence breaks, **NOT OK** + +**Step 3 — cinematic check.** A single content word at 30-65% partial occlusion is the _intended_ embed look (vogue-masthead "subject grazes the text"). Don't "fix" it. Only escalate to re-layout when: + +- a content word is ≥80% gone (not just partially eaten — almost fully missing) +- two or more adjacent words are ≥50% obliterated (sequential damage compounds; "X X X really takes" with first three eaten is unrecoverable) +- the obliterated word IS the climax / key noun the viewer is supposed to read (e.g. the subject of a sentence, a brand name, a product feature) +- key letters of a climax word are eaten (e.g. "STARTUP" with the S gone reads as "TARTUP" — the partial-letter pattern matters more than the whole-word percentage) + +**Real examples from the 13-case batch** — all four caps below got a per-word obliteration FAIL, all four were correctly judged OK by this rule: + +| case | obliterated word @% | sentence | rule applied | +| ------------------ | ------------------- | ------------------------------------- | -------------------------------------- | +| Sunset_Stroll cg-1 | "I" 100% | "like this are why I travel" | function word + parses without it → OK | +| Sunset_Stroll cg-3 | "all" 75% | "take it all in" | "take it in" is a complete idiom → OK | +| yt_gtds cg-6 | "of" 69% | "a whole lot of information" | function word + recoverable → OK | +| AI_Insights cg-2 | "that" 66% | "that don't replace human creativity" | relative pronoun, optional → OK | + +**When the rule says re-layout** — what to change: + +- per-word obliterated AND content word AND breaks readability → switch THAT specific cap to `layer: "fg"` (per-cap override, not whole-plan), OR shrink/reposition, OR split the cap into a different block where the subject isn't crossing it. +- per-cap fail (peak ≥50%) when the whole stack is in the head zone → lift y or shrink the block. +- frame-edge overflow → shrink font OR tighten `letter-spacing` OR split the phrase. Cropped text is ALWAYS wrong, no aesthetic excuse. + +**Override** (for iterating before shipping): `OCCLUSION_SKIP=1 bash render-and-composite.sh ` — don't ship past this without applying the 3-step rule and either fixing or consciously accepting each FAIL. + +### Accumulation capacity — split into blocks when the plane can't hold more + +Each scene's clean zone has a finite capacity for simultaneously-readable caps. **The agent must judge this before writing the plan**, not rely on CSS `bounded height` / `overflow: hidden` — those cause visual bugs (caps overflow off-screen, are clipped, or content is centered outside the plane bounds). + +Rule of thumb (capacity = max caps visible SIMULTANEOUSLY in one block): + +- **9:16 portrait, narrow right-column plane** (width ~380-420px) → max **2 caps** per block. Long phrases wrap to 2-3 lines; a 3rd cap starts spilling into the subject. +- **16:9 landscape, subject centered** (e.g. selfie vlog) → max **2 caps** per block. Even if the frame is wider, a centered subject leaves narrow columns on both sides and hands reach far. +- **16:9 landscape, subject on one side** (e.g. interview with clean opposite side — the memory-wall canonical scenario) → max **3-4 caps** per block. This is where accumulation shines. +- **Top-band full-width plane** (either orientation) → max 1-2 caps before overflow into face zone. + +Capacity is about the specific scene — same orientation can have very different room depending on subject position and background complexity. + +When your phrase count exceeds the capacity, split into multiple accumulation blocks at **sentence or clause boundaries**. Example memory-wall canonical on a 12-word clip: + +- Block 1 (0–4.85s): `"Some memories feel soft"` + `"like old film"` — 2 caps accumulate, fade together at 4.85s +- Block 2 (4.90–8.04s): `"but suddenly"` + `"EVERYTHING IS SHARP AGAIN"` — 2 caps accumulate on a cleared plane + +All caps in one block share the same `out` time (sentence boundary). Next block's `in` > previous block's `out` so the plane clears before the new accumulation starts. This gives each cap ~3-5s of read time, avoids overcrowding, and matches memory-wall's cinematic rhythm. + +**Why the shared `out` is load-bearing.** The template's exit path is `tl.set(sel, { opacity: 0, display: "none" }, g.out)` — at `out`, each cap releases its flex space so the NEXT block's caps can take the top slot from the plane's origin (no permanent downward drift). If caps inside the same block had staggered `out` times, the plane would reflow mid-block (cap 1 vanishes, caps 2-3 jump up, cap 4 arrives… visible jitter). With block-synchronized `out`, the reflow happens ONCE at the boundary — invisible to the viewer because the block fades as a unit. **Never stagger `out` times within an accumulation block.** If you need individual fade-outs, you're not accumulating — switch to stagger-fade pattern (one group at a time, no flex plane needed). + +**Anti-pattern: bounded `height` + `justify-content: center` on planes.** Do NOT write `height: 70%; justify-content: center` on a flex-column plane hoping to vertically center the caps. When the block's total cap height exceeds the bounded height, flex centering pushes content OUTSIDE the plane bounds on BOTH top and bottom — the topmost cap ends up above the frame (off-screen, unreadable). Instead: + +- Let the plane grow with its content — set `top:` (origin anchor) and let caps stack down naturally. +- Use `gap:` between caps; don't try to "center the stack". +- Trust the block-capacity rule above to keep the stack within the clean zone — don't paper over overflow with `overflow: hidden` (it clips the very caps you wanted the viewer to read). + +### Accumulation — vertical spacing, not single-line + +Accumulation works with multi-line phrases too — memory-wall canonical's groups are multi-word, right-aligned cascade in 16:9 landscape, and several wrap to 2 lines. They don't collide because **each group's `top` is placed below the previous group's bottom extent with a margin**. + +Math you must do before shipping accumulate: + +For each group, estimate its rendered height: + +- `line_count ≈ ceil(chars × font_px × 0.72 / usable_width_px)` (0.72 = Inter 900 uppercase; use 0.60 for italic/regular) +- `group_height_pct ≈ line_count × font_size_pct × line_height × 100` + +Then for each pair (cg-N, cg-N+1) you want to coexist: + +- `cg-(N+1).top ≥ cg-N.top + cg-N_height_pct + 2%` (margin) + +If the math doesn't fit in the available clean zone (top-clear + bottom-clear zones minus face/body bbox), you have two options: + +- **Shrink fonts or merge phrases** so they fit. +- **Switch persistence to stagger-fade** (groups don't coexist, no spacing constraint). + +9:16 portrait specifically: clean zone is typically top 0–32% + bottom 72–90%, split by the subject. That's ~50% of frame height usable. At 15% per 2-line group + 2% margin, you can fit ~3 accumulating groups in top zone. A 4th must either (a) be smaller to fit, (b) go to the bottom zone (zone change allowed at sentence boundary), or (c) replace an earlier one as climax. + +Landscape 16:9 has ~70–80% usable vertical — more room for 4–5 accumulating groups, which is why memory-wall canonical works cleanly there. Don't give up accumulation on portrait; just do the arithmetic first. + +### Persistence — how long each group stays (agent decides per case) + +The group's `out` time is not a default, not a rule, not a formula. It's an aesthetic choice. The same 5-group plan renders very differently depending on whether groups accumulate, stagger, crossfade, or roll — and each is right for different content. + +Patterns to pick from: + +| Pattern | What happens | Good for | Bad for | +| ------------------------------------------- | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| **Accumulate-through-climax** (memory-wall) | All groups stay on screen until climax arrives, then all fade together | Poetic builds; emotional crescendo; ≤5 groups where each word matters | 8+ groups (screen crowds); punchy comedic beats (breaks the laugh) | +| **Stagger-fade** (Sunset-style) | Each group fades ~0.8–1.5s after its words end; next enters into clean space | Independent punchy beats; clip where each phrase is its own moment | Long poetic builds that want the stanzas to coexist | +| **Crossfade-handoff** | Current group fades during next's entrance (~200ms overlap) | Dense verbatim (6+ groups in short clip); conversational flow | Short sparse clips — feels like subtitle track | +| **Rolling window** | Keep N=2–3 visible; earliest fades when N+1 enters | Longer transcripts (15s+) where full accumulation would crowd, but some layering is still cinematic | Clips <8s (rolling isn't perceptible) | + +Decision axes: + +- **Narrative arc** — crescendo/revelation → accumulate; list of independent points → stagger; dense conversation → crossfade +- **Group count** — ≤4: any pattern works. 5–7: prefer stagger or rolling. 8+: crossfade is usually forced. +- **Scene density** — busy background eats stale captions; accumulate only works when backdrop is clean enough that older captions stay legible. +- **Clip length** — ≥12s erodes accumulation (viewer loses connection to earliest caption); prefer stagger or rolling for long clips. + +Write the reasoning in `_notes` in plan.json so the decision is inspectable and the agent's intent survives into review. e.g.: + +```json +"_notes": "Morning_Jog: 5 groups in 8s. Narrative is crescendo (Okay→honestly→changed my life→KIDDING), and background is clean (trees, sky). Accumulate-through-climax — all 4 earlier groups stay visible so KIDDING lands on top of a built-up poem. Cascading right with varied top%/alignment so the stack reads as composition, not a subtitle column." +``` + +This is where per-case judgment earns its keep. The skill gives you a palette of patterns; the pick is yours. + +### Spatial coherence — the main slot rule + +**Every plan has ONE primary slot.** Most groups land there. Secondary slots exist only for intentional rhythm-breaks (once every ~30s, never per-chunk alternation). The old autogen rotation that threw each chunk to a different corner violated this and read as chaos. + +Choose a primary slot based on scene: + +- **9:16 portrait, subject mid-frame** → primary slot is `top: 4–20%` (sky / clean zone above the head). Secondary: `top: 72–78%` (below shoulders, above UI). Never: bottom 22% (UI/hand zone per [rule 17](aesthetic-principles.md)). +- **16:9 landscape, subject left** → primary slot is the right column (`left: 50–55%`, right-aligned or centered in the column). Secondary: below subject. +- **16:9 landscape, subject centered** → primary slot is `top: 10–20%` OR `top: 70–80%`. Pick one and stick. + +Within the primary slot, vary **size and weight** to create hierarchy (narrator small, body mid, emphasis large, climax huge). That's the rhythm inside a coherent position. Secondary slots are for **break-rhythm moments**, not for adjacent chunks just to "avoid collision". + +Collision validator still runs — but now the agent should be hitting it only in exceptional cases (intentional layering), not because every chunk is in a different place. + +**Verbatim recipe** — every word is shown, but it is **not** a flat TikTok subtitle rail. Use the cinematic DNA: per-group typography variation, position variation, size modulation. Italic openers, upright pivots, uppercase climaxes, spatial cascade, per-word soft/present tones — all of it. + +Chunking: walk the transcript and split into groups of **1–4 words** at pause boundaries (>0.25s gap = hard cut; within a phrase, chunk by emotional beat — short 1–2 word chunks for emphasis words, longer 3–4 word chunks for connective tissue). + +Typography per chunk — treat each chunk as a mini-beat. The sizes below are a **starting palette, not rules.** The agent picks the actual `font-size` per group based on the scene's clean-zone width, the phrase's character count, and the desired visual weight relative to neighboring groups. Shift by ±30% whenever the scene demands (narrow portrait column → shrink; wide landscape hero → enlarge). Pick from [typographic-moves.md](typographic-moves.md): + +- **Filler / connective** ("you know", "like", "so I was", pronouns, conjunctions) → italic 500–600, small (~0.05–0.08h starting point), softer tone, subordinate position. These read as narrator voice, not statement. +- **Emphasis / content words** (verbs, nouns carrying meaning) → upright 600–800, mid (~0.08–0.12h starting point), centered or cascaded position, present tone. +- **Climax / hook words** (the payoff word of the sentence) → uppercase 800–900, large (~0.14–0.22h starting point), full-frame or near-frame-width, present tone with scale pop. + +**Size is always relative, never absolute.** What matters is the _contrast ratio_ between a group and its neighbors inside the same plane — climax should be ~2× the emphasis, emphasis ~1.3–1.5× the narrator. An agent that writes `0.08h / 0.08h / 0.08h` for three caps in a plane has failed regardless of which bucket it picked from. The hierarchy is the point. + +Spatial composition: use the full frame as a canvas. Filler chunks tuck to corners or sit small at subordinate positions; emphasis chunks claim the middle; climax chunks own the frame. **Don't lock everything to `bottom: 12%`** — that's the boring-subtitle trap. + +Time windows: either spatially-separate overlapping groups (cascade, poem-accumulation) or hand-off so only one chunk shows at a time. Handoff at the same slot reads jittery (too many cuts in a short window) — prefer spatial cascade where adjacent chunks coexist at different positions, or accumulation blocks bounded by sentences. + +Layer: default `"bg"` for any chunk whose position has clean scene around it (sky, wall, the area above/below the subject) — that's the embed effect. Use `"fg"` only when the chunk's position would be ≥80% occluded by the body (e.g. chyron-style chunks at bottom in 9:16 portrait where the torso fills that zone). + +**Climax chunks across the subject — readability first.** The Vogue-masthead effect (big uppercase crossing the body) is the most cinematic move, but only if the word is still readable. Use `bg` across the subject when **all** of: + +1. The caption is multi-line (≥2 lines), so even if one line is mostly eaten, the others stay clean and the viewer can read the phrase. Single-line captions should never sit directly over the face/body — either reposition above/below the subject, or use `fg`. +2. The subject's bounding box covers ≤40% of the caption's total pixel area. For 9:16 portrait with a typical head-and-shoulders subject (~30% vertical × ~50% horizontal at mid-frame), a caption at `top: 16%` spanning 4 lines × 0.14h meets this — the face eats one line, the other three read clean. A caption at `top: 40%` sitting directly on the face does not. +3. Each individual word has visible letter endpoints on at least one side — a word that's split mid-letter with only interior strokes showing is unreadable even if "25% of total pixels" are covered. + +If any of these fail, either **reposition** the BG caption to clean scene (above the head / below the shoulders / into an off-center corner), or **fall back to `fg`**. FG for climax is the right call when the scene has no clean zone big enough — don't force the embed aesthetic at the cost of legibility. + +Rule of thumb: if you flattened your plan to just the climax chunks, the result should still read as a satisfying tweet-length headline. If it doesn't — you've under-varied your typography and the climax doesn't pop hard enough. diff --git a/plugins/hyperframes/skills/embedded-captions/references/direction-catalog.md b/plugins/hyperframes/skills/embedded-captions/references/direction-catalog.md new file mode 100644 index 000000000..a19744140 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/direction-catalog.md @@ -0,0 +1,138 @@ +# Direction catalog + +10 distinct aesthetic directions the skill can express. Each is a complete look: font, motion, color, placement, rhetorical defaults. The agent picks by **content tone × shot type × platform**, not preset name. + +Current shipped templates (`modes/cinematic/*`) cover about 30% of this catalog. The rest are future ship-ready aesthetics. + +Classification matrix — pick direction by intersection: + +| Tone ↓ / Platform → | 9:16 portrait | 16:9 landscape | 1:1 square | +| ------------------- | ---------------------------------------- | ------------------------ | ------------------------ | +| **Documentary** | documentary-dignified (vertical variant) | documentary-dignified | broadcast-dignified | +| **Conversational** | portrait-header + default | memory-wall OR champion | broadcast-dignified | +| **Energetic** | high-energy-vlog | high-energy-vlog-wide | high-energy-vlog-sq | +| **Poetic** | lyrical-poem-on-wall (portrait) | lyrical-poem-on-wall | chapter-card | +| **Keynote/tech** | — (9:16 not ideal) | tech-keynote-confident | tech-keynote-confident | +| **Investigative** | — | investigative-typewriter | investigative-typewriter | +| **Music video** | k-pop-lyric | k-pop-lyric | k-pop-lyric | + +--- + +## Direction specs + +### 1. documentary-dignified _(Errol Morris / PBS Frontline)_ — Standard-mode direction (no prebuilt Cinematic template) + +- **Family**: Söhne Mono OR GT Sectra for name cards; Inter for body +- **Weights**: 500 body, 700 name card +- **Color**: bone `#F5EFE6` on charcoal, OR charcoal `#1A1A1A` on bone. No accent. +- **Motion**: burn-in (no animation). Held 0.5s past last word. +- **Placement**: bottom-left block, 10% margin, locked position for whole interview. +- **Rules**: 2-line max. Speaker name card once at first utterance + after each cut. No emphasis styling — gravitas IS the style. +- **Rhetorical**: aggressive filler suppression. Every word is chosen. + +### 2. cinematic-noir _(Kyle Cooper / Se7en)_ + +- **Family**: Distressed serif (Hoefler Text) + tight mono for detail +- **Weights**: 700 mostly; thin italic ONLY for whispers +- **Color**: off-white `#E8E0D0` with deep red `#8B0000` single-word accent for menace +- **Motion**: typewriter with 10% chance of 1px jitter on entry; scratched etch for chapter beats +- **Placement**: off-axis — avoid dead-center, slightly high-left or low-right +- **Rules**: no emoji, no rounded corners, everything hand-feeling + +### 3. tech-keynote-confident _(Apple / Jony Ive ad)_ + +- **Family**: SF Pro Display OR Inter, nothing else +- **Weights**: 800 headline keyword, 400 context +- **Color**: pure white on any bg; `mix-blend-mode: difference` fallback for bright scenes +- **Motion**: swipe-reveal from bottom via clip-path (400ms); exit fades 400ms +- **Placement**: dead center, large. NOT lower-third. +- **Rules**: one caption on screen at a time. 2–5 words per caption. Long held silences between. Feels like slides. + +### 4. lyrical-poem-on-wall _(extends current memory-wall template)_ + +- **Family**: Serif with personality — EB Garamond / GT Sectra / Caslon Italic +- **Weights**: 400–500 only. **This direction rejects bold.** +- **Color**: picks up wall via `mix-blend-mode: overlay`, opacity 0.85, no stroke +- **Motion**: etch in 600ms, hold 1.5–3s, etch out +- **Placement**: always on a surface in the scene (back wall, foam, whiteboard). Uses matte pipeline. +- **Rules**: captions are **fewer** than spoken text — 40–60%. Intentional silences. No other tool does this; strong differentiation. + +### 5. high-energy-vlog _(controlled Hormozi)_ + +- **Family**: Inter ExtraBold, uppercase +- **Weights**: 900 always +- **Color**: white body + ONE accent (`#FFD600` or `#00E676`) + narrow 2px dark stroke +- **Motion**: word-pop with elastic, 60ms stagger; active word scales 1.15× on speech onset +- **Placement**: center-frame, ~35% from top +- **Rules**: max 3 words per frame. Hard break at breath pauses. Accent color on ~15% of words. **One full silence every 10s** (what Hormozi imitators miss). + +### 6. chapter-card _(Wes Anderson / Grand Budapest)_ + +- **Family**: Futura Bold (modern) / Archer (warm) / Bodoni (formal) +- **Weights**: 700 chapter title, 400 attribution +- **Color**: pastel hue sampled from scene +- **Motion**: full-frame static card between interview segments +- **Placement**: centered card for chapters; lower-left name card during speech +- **Rules**: chapter cards get their own beat (0.8s silence before, 0.4s after). Feels authored. + +### 7. investigative-typewriter _(Frontline / 60 Minutes / Morris Interrotron)_ + +- **Family**: IBM Plex Mono OR JetBrains Mono +- **Weights**: 500 +- **Color**: white with 3px shadow, no stroke +- **Motion**: typewriter char-by-char 25ms/char; cursor blink 600ms after last char +- **Placement**: bottom band with 40% opacity gradient up — **NOT a hard box** +- **Rules**: one line only, two-line max. Every caption ends with 1-frame cursor-hold before next enters. + +### 8. k-pop-lyric _(music video typographic flex)_ + +- **Family**: oversized display serif (Playfair Display / GT Super) + tiny mono detail line +- **Weights**: display 900, mono 400 +- **Color**: deep saturated single hue per song/segment +- **Motion**: cascade entries alternating sides; words cross subject with mix-blend +- **Placement**: intentionally LARGE — sometimes bigger than the face +- **Rules**: emotional/musical moments only. Never informational content. **Breaks rule #1 (subject wins) on purpose** — that's the whole point. + +### 9. broadcast-dignified _(BBC / NYT documentary standard)_ + +- **Family**: Helvetica Now / Neue Haas Grotesk +- **Weights**: 500 body, 700 name +- **Color**: white on 40% black gradient pill (not hard box, not plain shadow — gradient is the signature) +- **Motion**: 200ms fade-up, 150ms fade-down +- **Placement**: bottom-center, 10% margin, title-safe locked +- **Rules**: strict BBC — 160–180wpm, 32–34 chars/line, 2 lines max, 1.5s min gap. "Export to broadcast" mode. Boring on purpose. Never wrong. + +### 10. conference-lower-third-killer _(B2B but not lame)_ + +- **Family**: GT America / Aktiv Grotesk +- **Weights**: dual-weight name card — role 400, name 700, same size +- **Color**: scene-sampled accent on name, white on role +- **Motion**: name card swipes in from left 400ms on first appearance only; subsequent static +- **Placement**: lower-left card + active-word highlight inline in dialogue above +- **Rules**: mode for podcast clips, founder interviews, keynote pulls. Sophisticated without being arty. + +--- + +## Which to ship next + +Current templates: `memory-wall` (roughly direction #4), `champion` (roughly a mix of #5 and #9), `portrait-header` (default vertical). + +Priority ship order based on competitive gap: + +1. **documentary-dignified** — no one else does this well; Errol Morris aesthetic is an unserved niche +2. **lyrical-poem-on-wall** (as distinct template) — the one that most uses our matte-embed moat +3. **high-energy-vlog** — matches but out-designs Hormozi/Submagic presets +4. **tech-keynote-confident** — big for product launch videos +5. **investigative-typewriter** — niche but highly distinctive + +--- + +## How the agent picks + +1. Classify the clip: `tone × shot × platform` (see matrix above) +2. Look up direction in matrix +3. Read that direction's spec in this file +4. Translate spec into plan.json parameters OR clone the canonical HTML from `examples/` +5. Tune layout per scene (agent judgment, see `aesthetic-principles.md §1–18`) + +If no direction fits cleanly → **Standard mode**. Don't fake-fit an ill-matched direction. diff --git a/plugins/hyperframes/skills/embedded-captions/references/example-renders/champion.html b/plugins/hyperframes/skills/embedded-captions/references/example-renders/champion.html new file mode 100644 index 000000000..3ec196efa --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/example-renders/champion.html @@ -0,0 +1,371 @@ + + + + + + + + + +
+ + +
+ +
+
+ You + know, + for + me +
+
+ I've + had + this + kind + of + upbringing +
+
+ the + great + foundation +
+
+ I've + achieved + incredible + things +
+
+ dreaming + of + becoming + number + one +
+
+ +
+
+ Wimbledon + Champion +
+
+
+ + +
+ + + + diff --git a/plugins/hyperframes/skills/embedded-captions/references/example-renders/memory-wall.html b/plugins/hyperframes/skills/embedded-captions/references/example-renders/memory-wall.html new file mode 100644 index 000000000..c34d5cc22 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/example-renders/memory-wall.html @@ -0,0 +1,334 @@ + + + + + + + + + +
+ + + + +
+
+
+ Some + memories + feel + soft +
+
+ like + old + film +
+
+ but + suddenly +
+
+ everything + is + sharp + again +
+
+
+ + + + + +
+ + + + diff --git a/plugins/hyperframes/skills/embedded-captions/references/failure-modes.md b/plugins/hyperframes/skills/embedded-captions/references/failure-modes.md new file mode 100644 index 000000000..1a971a781 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/failure-modes.md @@ -0,0 +1,145 @@ +# Failure Modes — learned the hard way + +Things that broke during skill development. Check against this list before you ship. + +## Matting + +### CoreML execution provider corrupts face alpha + +Running the matting ONNX through the CoreML EP partitions the graph across providers; the mixed-precision boundary produced alpha ≈ 30 (out of 255) inside the subject's face while the background correctly read 0 (observed with the previous RVM engine — don't re-try). Result: caption text visibly shines THROUGH the face. + +**Fix**: Only ever use `providers=["CPUExecutionProvider"]` for the matting ONNX. Our script does this; don't "optimize" it by adding CoreML. + +### Aspect distortion / sharp channel-stride make the alpha garbage + +(historical — the PP-MattingV2 engine was replaced 2026-06-12 by hyperframes `remove-background`; kept because the lessons generalize) Two earned scars from the ONNX era: (1) fixed-size model exports — squashing a portrait clip into a landscape canvas distorts humans; contain-pad (aspect preserved, centered, alpha cropped back) instead. (2) sharp returns a **3-channel** buffer from `.raw()` after resizing a 1-channel raw input — reading it with a 1-channel stride silently produces a smeared, striped, displaced matte that can _look_ plausible. Always `toBuffer({resolveWithObject:true})` and stride by `info.channels` (other scripts in this skill still use sharp). + +**Fix**: both handled inside `matte.cjs`; preserve them if you touch it. + +### isnet-general-use / u2net_human_seg miss props + +rembg's general/human models capture the person but drop handheld props (mic, notebook). If the caption crosses the mic, it will NOT be occluded by the mic — text floats in front of it unnaturally. + +**Fix**: For scenes where props matter, either (a) accept that the human-matting model captures what it captures, or (b) add a manual mask ROI for the prop region. We haven't productized (b) yet. + +## Layout + +### Flex-stacked captions push hidden ones into gesture zone + +First champion iteration put all cap elements inside a flex column with `display: block`. Hidden captions (visibility: hidden) STILL reserve flex space. Result: cg-4 "dreaming" got pushed to y=700, landing right on the hand gesture zone and getting clipped. + +**Fix**: Inside the caption plane, each `.cap` is `position: absolute` at the same coords. Hidden ones don't occupy layout. Both templates in this skill do it this way. + +### Header-overlay on close-crop shots + +First champion iteration used a full-width header band across the TOP of the frame (`top: 30, left: 40, right: 40, height: 360, rotateX: -3deg, justify-content: flex-start, align-items: center`). Subject's head crosses the center, eating the middle of every caption. "know, for me" became a faint "now, for" with the letters sliced apart. + +**Fix**: On close-crop podcast shots, don't use symmetric full-width bands. Use `corner-column-crown` with caption column in the corner opposite the head. + +### Text right-align + align-items: flex-end + no max-width → flows off-screen + +If you set `align-items: flex-end` on the plane and don't constrain width, each `.cap` shrinks to content width. Long words then extend left beyond the plane's "visible" box without wrapping, clipping into the subject. + +**Fix**: Set `max-width: calc(100% - padding*2)` on each `.cap`. Templates do this. + +## Animation + +### letterSpacing animation causes inline-block reflow jumps + +Had `letterSpacing: "0.04em"` as the "from" value in `tl.fromTo(word, {opacity:0, letterSpacing: ".04em"}, {letterSpacing:"0"}, w.start)`. GSAP snaps the "from" state at w.start. The width of the word then changes over the tween → inline-block reflow → the `.cap` line box recomputes → "Some" visibly jumped between rows as "memories" entered. + +**Fix**: Animate only **transform** properties (opacity, y, scale). NEVER animate letter-spacing, font-size, or filter:blur on `.w` spans. Templates follow this. + +### Double-fade (container × word) produces a non-linear pop + +Fading both the group container AND each word independently multiplies: effective_opacity = container.opacity × word.opacity. Even with matched eases, the combined curve is nonlinear and feels like a snap-in around the 40% mark. + +**Fix**: Keep container at fixed `opacity: 1` during the group's life (set via `tl.set` just before first word). Animate only per-word opacity. Templates do this. + +## Blending + +### mix-blend-mode: overlay vanishes into dark regions + +`overlay(white_text, black_bg) ≈ black`. If part of the caption falls on a dark shadow / dark prop, the letters disappear. The first champion render had `SHARP` become `ARP` because "S" and "H" landed in the dark mic's shadow. + +**Fix**: For scenes with significant dark regions under the caption, use `mix-blend-mode: screen` (which preserves white on dark). `wall-embed` defaults to overlay (for mid-tone walls); `corner-column-crown` defaults to screen (for dark bookshelves). + +### Bright backgrounds wash out screen blend + +Opposite problem: `screen(white, bright) ≈ white` regardless of the text — letters become invisible on bright backgrounds like sunlit windows or white walls. + +**Fix**: If average luminance of the caption region exceeds 180/255, switch CSS to `mix-blend-mode: normal` with an opaque color. Sample the background pixels in the caption bbox across the clip to check. + +## Render pipeline + +### Frame-rate mismatch between bg render and matte PNGs + +If hyperframes renders at 30fps default but the matte was extracted at 24fps source rate, ffmpeg overlay gets a temporal mismatch — alpha from frame N is overlaid on bg content of some fractional frame ≠ N. Result: person's current silhouette and matte silhouette are shifted by a few frames, so the occlusion lags or leads the body. + +**Fix**: Always pass `--fps` to hyperframes render matching the source's native FPS (usually 24). `render-and-composite.sh` reads fps from plan.json and passes it through. + +### WebM alpha (VP8/VP9) flaky in Chromium + +We tried making foreground an alpha-channel WebM. Chromium's support for VP9 alpha is inconsistent; VP8 alpha needs specific metadata the default ffmpeg encode doesn't produce. + +**Fix**: Don't try to put the matte inside hyperframes. Do the overlay in post with ffmpeg against a PNG sequence. `render-and-composite.sh` does this. + +## Crown / centered text + +### Centered crown eaten by body + +Default `.crown-plane` in `corner-column-crown` is `left: 0; right: 0; text-align: center`. That mechanically centers the word at `frame_width/2`. If the subject sits right of center (Jobs at x=1100 in a 1920 frame) OR the word isn't wide enough to poke both clean zones, the body eats 50-70% of the crown and it reads as "THE \_\_\_ S". + +**Fix**: Check subject center_x vs frame center before choosing crown strategy (see [layout-heuristics.md § Crown placement](layout-heuristics.md)). Either size the crown large enough to cross both clean zones, or shift it into the larger clean zone with a narrower width. Keep `text-align: center` within the (re-positioned) box, not the frame. + +### Crown font too small for frame → half-swallowed + +On landscape 1920×1080, a centered crown at 140px is only ~500px wide. If the subject is 700-900px wide, the crown vanishes behind them. Symptom: only "THE" and "S" visible for "THE BEATLES". + +**Fix**: For full-frame centered crown, font must be big enough that `crown_width > subject_width + 400`. See font-size table in [typography-presets.md](typography-presets.md). Prefer 180-260px for landscape centered crowns. + +### Wider caption column + default font size → underweight + +Template defaults (66/78/92/140) assume a ~560px column. Expanding the plane to 700+ px without bumping fonts makes the text feel too small relative to the column. + +**Fix**: Column width 600-760 → phrase ~108px, emph ~128px, crown ~220px centered. See table in [typography-presets.md](typography-presets.md). + +## Scene admission + +### Handheld / fast camera → matte alpha flickers + +The matte is temporally smoothed (EMA in matte.cjs) but moderate motion only. Fast camera pans (vlog selfie) still produce frame-to-frame alpha jitter that shows as flickering caption edges. + +**Fix**: SKILL.md decision gate lists handheld vlog as `⚠️` — degrade or refuse. Production version would add `vidstabdetect` compensation; v1 does not. + +### Multi-person scenes → matte is ambiguous + +The human-matting model segments "foreground" as a single alpha. With two people, it captures both but they're treated as one blob. Captions can't go "behind person A but in front of person B". If the scene has both speakers visible, the skill should split by shot boundaries first. + +**Fix**: Either pre-split with PySceneDetect + per-shot planning, or refuse for `⚠️` multi-subject scenes. + +### Undetected shot cut inside the clip + +Some sources (interviews, broadcast clips) cut to B-roll/archive footage mid-clip. The matte + caption layout assumes the subject is the same person throughout — a hard cut mid-render creates garbage (caption placement relative to old subject applied to a totally different shot). + +**Fix for v1**: Probe the clip at 3-5 timestamps before accepting it. If any frame doesn't contain the primary subject at the same position, trim the clip to end before the cut. `Steve Jobs 60 Minutes` cut to Beatles archival at t≈9s, was manually trimmed to 8.5s. + +**Fix for future**: Run PySceneDetect as part of the admission gate; split into shots automatically. + +### Pillarbox / letterbox content with baked-in graphics + +TV archive clips often have pillarbox (black bars at sides) plus baked lower-third logos ("60 Overtime") and date labels ("2003"). These are part of the video file, can't be matted out, and shrink the usable frame area. + +**Fix**: Detect black-bar margins in the first frame (scan rows/columns for all-black). Constrain caption safe-zone to `[left_margin+pad, right_margin-pad, top_margin+pad, bottom_margin-pad]`. For Jobs, safe content zone was x=280-1640 (not 0-1920). Layout positions must respect this. + +### transcribe.cjs sees an existing transcript and skips + +Transcription is Whisper now, via `transcribe.cjs` (it wraps `hyperframes transcribe` — no API key). `hyperframes init --video ` may itself auto-write a `transcript.json` in hyperframes' raw whisper shape (a flat word array, no top-level `language_code`). `transcribe.cjs` only treats a transcript as done when it's ALREADY in our normalized schema (`{ words: [...], language_code }`); otherwise it (re-)runs Whisper and normalizes the flat word list into `{ words:[{text,start,end,type:"word"}], language_code }`. + +**Fix / expectation**: If you init via hyperframes first, expect `transcribe.cjs` to normalize that transcript into our schema. Don't hand-leave a half-normalized file (e.g. our `words` shape but no `language_code`) — that's the one state the skip-guard can misread. + +### Transcript gaps > 3s with no speech + +If the original audio has a long silence, leaving the caption plane empty feels wrong mid-video. Either (a) let the prior caption linger, (b) show a title-card crown during the silence, or (c) cut the silence out of the clip. + +**Fix**: During caption-grouping, detect silences > 3s. The skill should prompt the user about this, not silently proceed. diff --git a/plugins/hyperframes/skills/embedded-captions/references/layout-heuristics.md b/plugins/hyperframes/skills/embedded-captions/references/layout-heuristics.md new file mode 100644 index 000000000..09919d597 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/layout-heuristics.md @@ -0,0 +1,238 @@ +# Layout Heuristics + +How to pick `wall_position` / `crown_position` in plan.json. + +## Step 1: Sample 3 frames + +```bash +ffmpeg -y -ss 0.5 -i source.mp4 -vframes 1 frame0.jpg +ffmpeg -y -ss -i source.mp4 -vframes 1 frame1.jpg +ffmpeg -y -ss -i source.mp4 -vframes 1 frame2.jpg +``` + +Read all three. Note: subject's head bbox, shoulder top line, and wherever hands move during gestures. Worst-case foreground envelope = union across all 3. + +## Step 2: Find the clean zone + +The caption plane should live in pixels that are **always background** across the clip. Never where the body lands. + +Annotate approximate ranges: + +- Head bbox: `head_x_min`, `head_x_max`, `head_y_min`, `head_y_max` +- Hand gesture envelope (if any): usually below `y = shoulder_top ≈ head_y_max + 40` +- Props (mic, cup): typically static, note bbox + +**Clean zones**, in priority order: + +1. **Corner farthest from head** (usually opposite the gaze direction) +2. **Upper strip above head_y_min minus 30px margin** +3. **Lower-third** if upper is occupied (last resort — breaks "embedded" aesthetic) + +## Step 2.5: Which side of the subject? + +Once you know where the subject and baked graphics are, decide which side (left or right of the subject) hosts the caption column. Order of precedence: + +### 1. Hard constraints first — baked graphics + +Logos, watermarks, date stamps, "60 Overtime"-style lower-thirds are already in the source. They occupy permanent zones you must avoid. Map them out from frame samples: + +- Jobs 60 Minutes: "2003" at upper-left (x=280-460, y=30-90); "60 Overtime" at bottom-left (x=280-770, y=960-1080). Left side partially constrained; still usable above/below these. +- TikTok re-uploads: username watermark that rotates corners every few seconds — hard to plan around, often a refusal reason. + +If one side has a hard constraint that eats > 60% of that side's clean zone, default to the other side. + +### 2. Subject body bias — pick the bigger clean zone + +Compute clean-zone widths on both sides: + +``` +left_clean_width = body_x_min − safe_left_margin +right_clean_width = safe_right_margin − body_x_max +``` + +Pick the side where clean zone is wider. If the difference is within 10% of frame width, the sides are ~equivalent → fall through to step 3. + +Worked examples: + +- **Champion** (Djokovic, 1920×1080): body x ≈ 550-1200. Left clean = 510, right clean = 720. Right is wider → but we put captions LEFT because of gaze (see step 3). The narrow difference made either workable. +- **Jobs**: body x ≈ 700-1480 (right-of-center). Left clean = 420, right clean = 160. Left wins decisively. Captions went LEFT. +- **Memory Wall**: surface location dictated the side (see note below about wall-embed). + +### 3. Gaze direction — the "looking room" rule (tiebreaker and aesthetic) + +Classic cinematic framing: leave more empty space on the side the subject is **looking toward**. This preserves their gaze path and feels uncluttered. **Captions go to the OPPOSITE side** (the side the subject is facing away from), so they don't steal looking room. + +Quick check: sample 3 frames. Estimate the eye-line vector. Does it point more left or right? + +- Looking screen-right → captions on LEFT +- Looking screen-left → captions on RIGHT +- Looking forward at camera → no preference from gaze, use step 2 only + +The champion / Djokovic shot has him addressing camera slightly from the left — captions on LEFT actually read like text he's looking toward, which can feel like he's acknowledging them. That's fine here but is a flavor choice; generally prefer gaze-opposite. + +### 4. Narrative emphasis (for optional crown) + +If you're using a **center-stage crown**, it sits across the subject — no left/right choice for it. But the other captions (the column) still follow steps 1-3. + +If you're using a **clean-zone crown** (shrunk, placed in one clean zone instead of crossing the body), put it in the **same side as the main column** for visual consistency. Don't split crown and column on opposite sides — it creates ping-pong. + +### Special case — wall-embed + +When the template is `wall-embed`, the side is **dictated by where the usable surface is**, not by body bias or gaze. Memory Wall's foam panel was on the right, so captions went right even though the subject was slightly left-of-center. Surface location wins because the whole effect depends on the text sitting ON that specific surface. + +### Decision summary + +``` +Side = f(baked graphics, body bias, gaze, surface) + +priority: +1. Hard constraints (baked logos) — never place here +2. Wall-embed surface location — wins if using wall-embed +3. Bigger clean zone — default for corner-column +4. Gaze direction (looking room) — tiebreaker when both sides similar +``` + +If the subject actively swings their gaze across the clip (turning head L→R), pick a side that works for both extremes, not just the most frequent. Or accept that looking room will briefly be violated — it's a 10-second video, nobody cares. + +## Step 3: Pick template + position + +### If scene has a flat back wall (acoustic foam, plaster, fabric backdrop) + +→ `wall-embed.html` + +``` +wall_position: { + top: max(40, head_y_min - 40), + right: 20-60 (hug outer edge), + width: video_width * 0.35 – 0.50, + height: shoulder_top - top, + rotateY: -10 to -16 deg if wall angles away on the left, + +10 to +16 deg if mirrored, 0 if wall is parallel, + rotateX: 0-3 deg subtle downtilt only +} +``` + +`mix-blend-mode: overlay` in this template — works on mid-tone walls. If wall is near-black (luminance < 60), switch CSS to `screen`. + +### If scene has a cluttered but dark backdrop (bookshelf, plants, set dressing) + +→ `corner-column-crown.html` + +``` +wall_position: { + top: 40, + left: 40, // anchor to clean corner opposite head + width: video_width * 0.40, + height: clamp(360, 520), // don't reach below shoulder top + rotateY: 3-6 deg (subtle, not flashy) +} +crown_position: { + top: video_height * 0.40 // center-ish; body will cut middle letters +} +``` + +`mix-blend-mode: screen` is correct here (bookshelf is dark). + +### If subject fills >70% of frame + +Template doesn't matter — there's nowhere clean. **Refuse**, suggest classic lower-third. + +## Step 3.5: Crown placement (when using `corner-column-crown`) + +**Default preference: center-stage crown.** A big, centered crown word (think "WIMBLEDON CHAMPION", "BEATLES", "SHARP AGAIN") that crosses the subject is the most powerful embed move — body occludes the middle letters, clean zones on both sides hold the outer letters, and the word reads as a title drop. **Use this whenever conditions allow.** + +### Conditions where a centered crown works + +Sample 3 frames, eyeball the subject's horizontal envelope across the clip. Let `body_x_min / body_x_max` = tightest horizontal bounds that contain the head+shoulders+arms in any frame. + +A centered crown at font size F (where `crown_width ≈ F × 0.55 × char_count`) reads as dramatic IF: + +1. **Subject is roughly centered**: `|body_center_x − frame_width/2| < frame_width × 0.10`. The body sits in the middle third. +2. **Clean zones on both sides are non-trivial**: `body_x_min > frame_width × 0.15` AND `body_x_max < frame_width × 0.85`. There's ≥15% of frame width clean on each side. +3. **The crown word is wide enough to poke out both sides**: `crown_width > body_width + 400px`. If the word ends before reaching the body's right edge, most letters just get swallowed — ugly. + +If all three hold, centered crown is right. Go big — font sized so the word spans `0.8 × frame_width` or more. "BEATLES" at 140px (~500px wide) fails condition 3 on an 1920 frame with Jobs-sized body (780px wide). "WIMBLEDON CHAMPION" at 140px (~1700px) on the same frame passes easily. + +### When center fails — move crown to the clean zone + +If any of the three conditions fails, center-stage eats too much and the word becomes illegible ("THE BEATLES" → "THE" and a sliver of "S"). Two strategies: + +**Option A — shrink crown to fit cleanly in the larger clean zone.** Pick the side opposite the subject's bias. Compute `clean_zone_width` on that side. Pick crown font such that the word wraps to 1-2 lines inside it. Tail letters can touch the subject edge for a hint of embed, but the body of the word lives on backdrop. + +``` +// Jobs: subject center ≈ x=1100 (right of frame center 960). Left clean zone is larger. +crown_plane: { left: 200, width: 560, text-align: center } +font-size: 118px → "THE / BEATLES" wraps to 2 lines, fits in x=230-770 + leaving "S" tail at x~760 lightly touching Jobs's shoulder +``` + +**Option B — drop the crown entirely, promote the word to `emph` in the main column.** Simpler when the phrase doesn't deserve dramatic center-stage treatment. Works fine for 2-word emph like "the Beatles" or "incredible things" — they become large bold text in the left column with body occluding their tails. + +### Rules of thumb for choosing + +| Subject occupies center X%+ of frame | Clean zones L/R | Crown approach | +| ------------------------------------ | ------------------------ | ----------------------------------------------- | +| < 50%, roughly centered | both ≥ 15% of width | Centered crown, go BIG (frame_w × 0.8+) | +| 50-70%, slightly offset | one side ≥ 25% | Crown shifted to larger clean zone | +| > 70%, fills most of frame | neither side wide enough | Drop crown, use `emph` in column | +| Close-crop face, fills > 80% | essentially none | No crown. All captions in a header/footer strip | + +## Step 4: Respect these invariants + +1. **Never cover the eyes.** Eye bbox is sacred. Add 20px margin around it when checking caption bbox intersection. +2. **Caption bbox must not exit frame.** Reserve 4% broadcast-safe margin on all edges. +3. **Large emphasis words should have horizontal slack.** At `cap-emph` (92px), an 8-char word ≈ 580px. Plane needs ≥ 620px width OR rely on wrapping at 2 lines. +4. **Crown lives at `top ≈ shoulder_top − crown_font_size/2`** so it sits across the upper body, not the face. +5. **If aspect ratio is portrait (9:16), rotate layout**: wall-plane becomes a **top band** (full width, height ≈ 20%), crown goes below it if used at all. + +## Step 5: Validate before render + +Before calling `render-and-composite.sh`, sanity check: + +- Did you place the plane in the opposite quadrant from the face? ✓ +- Does the plane exit the frame anywhere? If yes, shrink. +- Is the font too big for the plane width? Calculate: longest word in words[] × 0.55 × font_size < plane_width - padding\*2. +- For `corner-column-crown`, did you set `crown_position.top` so the crown actually crosses the body (not above the head, not below the torso)? +- **Pillarbox / letterbox hard check.** If the source has black bars (see pre-flight probe in SKILL.md), compute `leftmost_text_x` using the correct formula for the text alignment: + + | Alignment | Formula | + | --------------------------- | -------------------------------------------------- | + | Left-aligned | `plane_left + padding_left` | + | Right-aligned (main column) | `plane_right − padding_right − longest_word_width` | + | Center-aligned (crown) | `plane_center − longest_word_width / 2` | + + Where `longest_word_width ≈ font_size × char_count × 0.55` (adjust 0.55 down to ~0.50 for italic, up to ~0.62 for uppercase bold). **All** of these must be ≥ `pillarbox_left_edge + 10–20px` (safety margin). Mirror for the right bar. + + **Gotcha from past iteration**: setting `plane_left = 180` with a right-aligned column on a Jobs 60 Minutes clip (pillarbox at 280) looked "inside the plane" but the right-aligned text at font 108px produced `leftmost = plane_right − padding − 468 = 180 + 700 − 36 − 468 = 376` … wait, that IS past pillarbox. The actual bug was different: for a 3-line wrap ("four very / talented / guys") the widest line is "talented" at ~468px, not the whole phrase. Compute against the longest **single line** after wrap, not total phrase width. + + **Re-check after font-size changes** — bumping font 84→104 shifts right-aligned text leftward by ~30px. If the budget was already tight, the bump blows through the pillarbox. + + **Empirical target**: leftmost text at pillarbox + 10-20px looks "anchored" to the bar (visually grounded). Pushing it much deeper (50px+) makes captions feel floaty in the middle of the frame. + +## Worked examples + +### memory-wall (1280×720, acoustic foam wall) + +```json +{ + "template": "wall-embed", + "wall_position": { + "top": 40, + "right": 30, + "width": 720, + "height": 520, + "rotateY": -13, + "rotateX": 1 + } +} +``` + +### champion (1920×1080, bookshelf backdrop) + +```json +{ + "template": "corner-column-crown", + "wall_position": { "top": 40, "left": 40, "width": 720, "height": 420, "rotateY": 4 }, + "crown_position": { "top": 440 } +} +``` diff --git a/plugins/hyperframes/skills/embedded-captions/references/motion-vocabulary.md b/plugins/hyperframes/skills/embedded-captions/references/motion-vocabulary.md new file mode 100644 index 000000000..77cc1e026 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/motion-vocabulary.md @@ -0,0 +1,148 @@ +# Motion Vocabulary — named word-entry moves + +10 motion primitives the skill uses. Each has a specific timing + easing + situational fit. Agent picks by **content tone**, not default to one. + +**Easing philosophy:** `cubic-bezier(.2,.7,.2,1)` is the "considered confident" default. `linear` is almost always wrong. Back-easing (elastic) is for playful content only — never documentary. + +**Exit rules:** Default exit is the same tween reversed at 60% duration. Never exit with a different motion than entry unless doing a rhetorical pivot. Never fade out during speech — only during the gap between phrases. + +--- + +## The 10 moves + +### 1. typewriter + +Char-by-char reveal, 25–35ms/char, linear easing. Documentary / data-heavy / tense / interrogative. + +```js +// GSAP +words.forEach((w, i) => { + const chars = w.textContent.split(""); + w.textContent = ""; + chars.forEach((c, j) => { + const span = document.createElement("span"); + span.textContent = c; + span.style.opacity = 0; + w.appendChild(span); + tl.to(span, { opacity: 1, duration: 0 }, wordStart + j * 0.028); + }); +}); +``` + +### 2. word-fade-up (DEFAULT) + +Per-word, 80ms stagger, `opacity 0→1 + translateY 8→0`, `cubic-bezier(.2,.7,.2,1)` (ease-out). Default for conversational content. + +```js +tl.fromTo( + word, + { opacity: 0, y: 8 }, + { opacity: 1, y: 0, duration: 0.45, ease: "power2.out" }, + wordStart, +); +``` + +### 3. word-pop + +Per-word, 60ms stagger, `scale 0.85→1 + opacity 0→1`, elastic-light `cubic-bezier(.34,1.56,.64,1)`. Energetic / YouTube-vlog / high-tempo. **Never for documentary.** + +### 4. swipe-reveal + +Whole phrase at once, 400ms, `clip-path inset 0 100% 0 0 → 0 0 0 0`, expo `cubic-bezier(.77,0,.175,1)`. Keynote / tech product / announcement. + +```css +.cap { + clip-path: inset(0 100% 0 0); +} +/* animate to inset(0 0 0 0) */ +``` + +### 5. drop-and-settle + +Per-word, 120ms stagger, `y: -30→0` with back-bounce `cubic-bezier(.68,-.55,.27,1.55)`. Playful but controlled. **Not for documentary.** + +### 6. etch + +Whole word at once, 600ms, opacity ramp `0→1` with slight blur→sharp transition. Ease-in-out. Poetic / lyrical / "quote on wall" direction. + +### 7. crosshair + +Per-word, 200ms total: two 1px lines converge on word center (linear 150ms), then word snaps in (expo-out 50ms). Thriller / investigative doc. + +### 8. breathing-hold + +**Static but alive.** No entry animation. Once visible, micro-scale loop `1.00↔1.008` over 2s, sine ease. Used on climax lines held 1.5s+. + +### 9. cascade + +Each word from alternating direction: L, R, L, R. `translateX: ±40→0`, ease-out 300ms. **Rhythm-break move** — use sparingly, once per 30s max. + +### 10. burn-in + +**Zero animation.** Sudden 1-frame opacity 1. No fade, no transform. Interview-doc style. Use for every 6–8th phrase in a documentary direction for variety (Standard mode; see direction-catalog §1). + +--- + +## Tone → timing lookup table + +| Tone | Stagger | Hold | Entry move | +| -------------- | ------------------------- | ----------- | ---------------------------------- | +| documentary | 150ms | 600ms | burn-in (70%) + word-fade-up (30%) | +| conversational | 80ms | 400ms | word-fade-up | +| energetic | 50ms | 300ms | word-pop | +| poetic | 250ms | 1200ms | etch | +| broadcast | 0 (burn-in) | BBC timings | burn-in | +| investigative | 25ms/char | 500ms | typewriter | +| keynote | 0 per-word (phrase swipe) | 600ms | swipe-reveal | + +Agent picks tone → this table → GSAP parameters. Data, not guesswork. + +--- + +## Per-word vs per-phrase animation axis + +Orthogonal to the 10 moves above. + +- **Per-word animation** (default): each word enters at its `w.start` timestamp. Tight sync with speech. +- **Per-phrase animation**: whole group enters/exits at `g.in`/`g.out`. Words appear together. Used for: + - swipe-reveal moves + - burn-in (no animation, but the "reveal" is a group event) + - title cards / chapter breaks + +Rule: per-word for content that tracks speech; per-phrase for moments that step outside the speech flow. + +--- + +## Stagger breakdown by context + +Fine-tune stagger within a tone: + +- **Documentary dialog**: 150ms (measured) +- **Documentary punchline**: 250ms (weighted) +- **Vlog opener**: 50ms (fast hook) +- **Vlog narration**: 70ms (conversational but snappy) +- **Poem / lyric**: 250–400ms per word, with 500–1000ms gaps between phrases +- **Keynote hero**: per-phrase only (stagger = N/A) +- **Interview name card**: 0 stagger (static) + +--- + +## Anti-patterns (banned, from anti-patterns.md) + +- Animating `letter-spacing` → reflow +- Animating `filter:blur` → reflow + can wash out text +- `Math.random()` / `Date.now()` in timeline → non-deterministic render +- Entries under 100ms total → frantic, unreadable +- Same motion for every group for 30s+ → eye adapts, stops registering + +--- + +## When to break the vocabulary + +The 10 moves are a comfortable coverage, not a ceiling. For Standard mode, invent new moves when the scene demands it: + +- Kyle Cooper's scratched typewriter for noir +- K-pop lyric's directional word-from-side +- Film-title flash-cut burn-in with chromatic aberration + +When inventing: stay deterministic, stay transform+opacity only, state the motion in terms of the 4 axes (entry, hold, exit, stagger). diff --git a/plugins/hyperframes/skills/embedded-captions/references/rail.md b/plugins/hyperframes/skills/embedded-captions/references/rail.md new file mode 100644 index 000000000..1f676f724 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/rail.md @@ -0,0 +1,68 @@ +# Rail track — standard lower-third subtitle + +The **default** caption track and the workhorse: a clean, readable subtitle that sits **in +front** of everything (never occluded by the matte) in the lower third. It carries **most** +of the transcript. It is deliberately **plain** — the cinematic craft (planes, occlusion, +Vogue-masthead, accumulation) lives in the _embed_ track only ([composition-craft.md](composition-craft.md)). + +For talking-head / explainer / voiceover, the typical output is **the whole transcript on the rail** +with only the climax(es) promoted to embed. Rail is not a fallback — it's the baseline. + +> **Implementation note.** A dedicated rail renderer is the next build step. The rail is a +> plain `fg` caption track and maps cleanly onto hyperframes' native caption pipeline +> (`hyperframes-media` captions) — prefer reusing that over hand-rolling. Until wired, render +> the rail as a simple `data-caption-layer="fg"` composition (no matte overlay for these caps). + +## Position & safe area + +- **Lower third, horizontally centered.** Landscape (16:9): baseline ~80–120px above the + bottom edge. Portrait (9:16): lower-middle, ~ 600–700px from the bottom (clear of platform UI). +- **Title-safe margins:** keep text within ~90% width / inside any letterbox-pillarbox bars + (see the letterbox probe). Never flush to the frame edge. +- **One caption group on screen at a time.** No accumulation, no cascade — that's embed-track behaviour. +- It rides above the subject; the matte does **not** occlude it (rail = in front). + +## Lines, length, timing + +- **≤ 2 lines.** Broadcast target ~ 32–42 chars/line; break at a clause/phrase boundary, never + mid-word, never leave a dangling 1-word line. +- **Word-synced.** Each group's window envelops its words (`group.in ≤ first word.start`, + `group.out ≥ last word.end`); each group ≥ 0.5s on screen; ~1.5s min gap discipline so it + doesn't strobe. Word timings within 80ms of transcript (same gate as everywhere). +- **Grouping** = short readable phrases (see [caption-grouping.md](caption-grouping.md)) — not the + embed track's "phrase = composition" rule; here it's just legible subtitle chunking. + +## Look (restrained on purpose) + +- **Size: ~`calc(0.045 * var(--h))`** (≈48px @1080, ≈58px @1290) — readable, _not_ hero. The rail is a subtitle; it is deliberately much smaller than the embed body/climax. Express as a `var(--h)` fraction (never hardcode px) so it scales across resolutions. The embed climax is sized to the frame independently (see composition-craft § POP) — **never** size the climax as a multiple of this rail. +- One clean sans (Inter / Helvetica Now / Neue Haas), weight 500–600; white (or near-white). +- **Legibility without grading the video:** a tight text treatment local to the glyphs only — + a soft dark drop-shadow, or a subtle rounded gradient pill / 30–40% scrim **sized to the text + box** (not a full-frame bar, never a frame-wide grade). On luminance > 180 backgrounds, keep + the scrim; never rely on bare light text. +- Motion is minimal: 150–250ms fade-up in / fade-down out. No glitch, no scale-pop, no per-word + choreography on the rail — that energy is reserved for embed. + +## The `emphasis` flag (active-word highlight) + +The only intensity the rail carries. When a word is graded `emphasis` (the 1–2 punch words in a +phrase), give it an **inline** lift on the rail — accent colour and/or +weight, optionally a +karaoke-style active-word pop (≤1.1× scale) as it's spoken. Keep it inline; it does **not** +leave the rail. Anything that wants to leave the rail is an `embed`, not an emphasis. + +## What the rail never does + +- Never goes behind the subject (that's embed). +- Never accumulates into a multi-line poem (that's embed). +- Never crosses the face / uses occlusion as an effect. +- Never grades or textures the underlying video. +- Doesn't drop content to "fit fewer blocks" — split into more groups instead. The only drops + are filler (um/uh, exact stutters, self-corrections); dense conversational `narrator` glue + ("you know", "sort of") may be trimmed for readability, content/structure words stay. + +## Hand-off to embed + +Rail + embed coexist in one render: the rail runs the whole clip; an embedded peak appears over +it at its moment (the rail can briefly clear or dim under the embed if they'd collide). Decide +which phrases promote via the role read in SKILL.md § Caption model; author the promoted ones +with [composition-craft.md](composition-craft.md). diff --git a/plugins/hyperframes/skills/embedded-captions/references/reference-bar.md b/plugins/hyperframes/skills/embedded-captions/references/reference-bar.md new file mode 100644 index 000000000..57be3c858 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/reference-bar.md @@ -0,0 +1,47 @@ +# The reference bar — what world-class looks like + +Self-review without an external bar always passes. Before shipping, hold the render +against these references — not "is anything broken" (the gates did that) but "would a +designer at these houses sign it". + +## Per register + +**premium-warm / editorial (cream, editorial)** — the bar is a _Vogue cover_ and the +A24 title card: type interacts with the subject (masthead behind the head), one or two +sizes feel chosen not defaulted, the frame would work printed as a poster. Check: does +the climax frame, screenshotted alone, look like a designed cover — or like a subtitle +that grew? + +**tech-premium (keynote, ink)** — the bar is an _Apple keynote slide_ over footage: +opaque, weighty, dead-center confidence; negative space is doing the work; nothing +decorating. Check: would this frame look at home in a WWDC sizzle? + +**formal (documentary)** — the bar is _Errol Morris / PBS Frontline_: the type has the +restraint of a court document; stillness reads as authority. Check: does ANY motion call +attention to itself? If yes, cut it. + +**loud** — the bar is a _k-pop lyric video / Nike spot_: type fights the subject and +wins on purpose, color is saturated and scene-true, the beat hits WITH the word. Check: +does the hero frame make you want to replay it? + +## The five positive checks (run on the preview sheet, after the failure checks) + +1. **Poster test** — screenshot the climax frame alone. Would you post it as a still? + If it needs the motion to excuse the composition, the composition isn't done. +2. **Timid test** — is any body caption apologizing (tiny, corner-parked, far from the + silhouette)? Small is a choice; timid is a default. Hug the subject or commit to the + margin as a designed column. +3. **One-glance hierarchy** — at thumbnail size (shrink the sheet), can you still tell + opener / body / hero apart? If the tiers blur together, the contrast ratios are off. +4. **Scene handshake** — name three ways the type acknowledges THIS footage (accent + sampled from the scene, occlusion crossing, shadow direction, depth blur, palette + temperature). Fewer than two = it's a sticker, not an embed. +5. **Dead-air audit** — scrub the no-caption stretches. Are they _composed rests_ + (subject carries the frame) or _gaps_ (the design just stopped)? Rests are earned by + rhythm; gaps are bugs in pacing. + +## How to use with fresh-eyes review + +Give the sub-agent the preview sheet + the 5 failure checks (SKILL.md § Visual QA) + +these 5 positive checks, and ask for verdicts on both lists. A render ships when it +passes the failure checks AND at least 4/5 positive checks with specific evidence. diff --git a/plugins/hyperframes/skills/embedded-captions/references/scene-types.md b/plugins/hyperframes/skills/embedded-captions/references/scene-types.md new file mode 100644 index 000000000..aaef1853c --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/scene-types.md @@ -0,0 +1,94 @@ +# Scene Types — picking the right template + +The three templates differ in one thing: **what surface (if any) the text physically sits on**. Pick by reading the scene, not by the genre label. + +## wall-embed — "text is printed on a real surface" + +Original Memory Wall render used this. Text uses perspective transform + `mix-blend-mode: overlay` to look like it was silk-screened onto a wall behind the subject. The illusion is strong when it works and completely broken when forced. + +### Four conditions — ALL must hold + +1. **A flat or near-flat surface exists somewhere in the frame, larger than the caption block.** Good: acoustic foam panel, painted wall, door, stone facade, large backdrop cloth, blackboard. Bad: bookshelf (3D depth + decorative items), mic shield (too small), window (transparent, content behind it shifts), brick wall with mortar patterns (competes). +2. **The surface is at a non-zero angle to the camera.** Perspective is what sells "embedded". If the wall is perfectly parallel (0° rotation relative to camera), pasting rotateY:0 text onto it looks like a sticker, not embedded. Memory Wall's foam wall was tilted ~13° — perfect. A wall directly behind a centered frontal subject usually has no exploitable angle. +3. **The surface is mid-luminance.** Overlay blend neutralizes mid-tones — text keeps contrast against a mid-grey wall. On near-black surfaces (luminance < 60), overlay makes text vanish → switch to `mix-blend-mode: screen`. On near-white surfaces (> 180), overlay also fails → switch to `mix-blend-mode: normal` with opaque color. +4. **The surface has no competing graphical content.** Plain paint, uniform acoustic foam, blurred OOF background all work. Printed wallpaper, picture frames, text on signage, busy bookshelves all compete with the caption and ruin the embed illusion. + +If **any** condition fails, **do not use wall-embed**. Pick another template. + +### What memory-wall looked like + +The acoustic foam wall to the right of the subject took ~40% of frame width, tilted ~13° toward the viewer, mid-grey color, uniform dimpled texture. Perfect. Text with `rotateY(-13deg)` and overlay blend sat on it like printed letters. + +### Anti-examples (wall-embed would FAIL) + +- **champion / demo1_avatarv** — bookshelf background with books, white vases, picture frames. Cluttered + 3D depth. Fails condition 1 and 4. Used corner-column-crown instead. +- **Jobs 60 Minutes** — blurry potted plant background. No flat surface at all. Fails condition 1. +- **Randy Pausch "Time is all we have"** — completely black backdrop. No perspective to exploit, no mid-tone surface. Fails 2 and 3. Used portrait-header. +- **Any vlog / selfie with handheld camera** — surface moves frame-to-frame, can't lock perspective. Even if conditions 1-4 hold briefly, motion breaks the illusion. + +## corner-column-crown — "text sits in a clean region next to the subject" + +The default for most talking-head content. Works when wall-embed doesn't. + +### Conditions + +1. **Single subject, fixed camera.** Handheld is tolerable if drift is small. +2. **At least one clean zone (≥ 15% of frame width) to the left or right of the subject** where captions can sit without continuous body occlusion. +3. **Background can be cluttered or 3D** — we're not relying on a flat surface, just readable contrast. Screen blend mode picks up darker backgrounds (bookshelves, dark walls) naturally. +4. **Landscape aspect** (16:9 or similar). For portrait, use `portrait-header`. + +### When to add the crown vs when to skip it + +- Add crown if there's a natural "title drop" line — the one phrase that lands the story (e.g. "WIMBLEDON CHAMPION", "BEATLES", "SHARP AGAIN"). Check [layout-heuristics.md § Crown placement](layout-heuristics.md) for the three geometric conditions. +- Skip crown for factual / neutral monologues where no phrase carries the climax. Short videos (<10s) often don't need it. + +## portrait-header — "subject fills center, text lives in top banner" + +For 9:16 aspect where the subject inevitably fills the middle. + +### Conditions + +1. **Portrait aspect** (9:16, 1080×1920 etc.). +2. **Subject occupies the vertical middle of frame**, leaving ~15-25% of the frame height clear at the top. +3. **Optional crown at bottom** — only works if there's also clean space beneath the subject's waist, which is rare in close-crop portrait. + +### What to watch + +- Subject's head top often approaches y=40 — top banner captions at `top: 30px` will get partially occluded by hair. Accept the partial occlusion (it reads as embed) or bump the caption size down to clear the hair. +- If the subject already has **baked-in captions** (like the burned-in subtitles test case with yellow subtitles burned in), the skill should refuse — two caption systems compete. + +## Quick decision flow + +``` +START + │ + ├─ Aspect is 9:16 / portrait? + │ ├─ YES → portrait-header + │ └─ NO ──▼ + │ + ├─ Does the scene have a flat uniform surface that passes + │ ALL 4 wall-embed conditions? + │ ├─ YES → wall-embed + │ └─ NO ──▼ + │ + ├─ Single subject + fixed camera + ≥15% clean zone on one side? + │ ├─ YES → corner-column-crown + │ └─ NO ──▼ + │ + └─ Refuse with reason: + "No flat surface for embed, no clean caption zone for column. + Suggest a classic lower-third instead." +``` + +## Mode checklist (run this before committing to wall-embed) + +Read 3 frames (start, mid, end). For each, honestly answer: + +- [ ] Is there a single surface behind/beside the subject that occupies ≥ 30% of the frame? +- [ ] Is that surface relatively flat (not curved, not 3D-stacked shelving)? +- [ ] Does that surface angle at 5-20° to the camera (not perfectly parallel, not warped)? +- [ ] Is the surface mid-luminance (not near-black like dark bookshelves, not near-white like a sunny window)? +- [ ] Does the surface contain NO printed/decorative elements that compete with caption text? +- [ ] Does the surface remain visible across all 3 frames (subject doesn't step in front of it)? + +**Need all six YES to use wall-embed.** Even one NO → step down to corner-column-crown or portrait-header. diff --git a/plugins/hyperframes/skills/embedded-captions/references/test-set.md b/plugins/hyperframes/skills/embedded-captions/references/test-set.md new file mode 100644 index 000000000..35825a34f --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/test-set.md @@ -0,0 +1,66 @@ +# Test set — diverse scenes for template stability regression + +Canonical test corpus for verifying templates don't regress when we add +features. Pick cases that stress different parts of the pipeline — blend +mode, matte quality, baked-in graphics, luminance extremes, motion. + +## The test set + +All in `~/Downloads/heygen_relevant_videos/` (720×1290, ~8s, 9:16). Add +landscape + 1:1 as we grow. + +| Case | Scene | Stress test | +| --------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| `Sunset_Stroll` | Outdoor selfie at sunset, palm trees, boardwalk | **Bright backdrop** → default `screen` blend fails; needs dark text + `normal` blend | +| `Nature_Vibe` | Forest golden-hour + **baked timestamp** bottom-left + watermark top-right | Baked graphics avoidance; warm-mid luminance | +| `Gym_Grind` | Dark gym + dark tank top + phone-mirror selfie | **Low luminance** → matte difficulty; screen blend natural fit | +| `AI_Insights` | Podcast studio + neon "THE DIALOG" sign + window view | **Competing graphics in BG** (sign, city skyline); mid-tone | +| `Kitchen_Buzz` | Warm kitchen, apron, smiling | Baseline friendly case | +| `Tech_Trends` | Clean white studio + mic | **Max bright backdrop** — needs dark text or opaque BG | +| `Street_Talk` | Walking city street, handheld | Handheld motion + bright outdoor | +| `Outdoor_Hype` | Forest + **Instagram watermark** top + sun flare | Baked graphic + bright + motion | + +## Usage + +```bash +for case in Sunset_Stroll Nature_Vibe Gym_Grind AI_Insights; do + bash scripts/render-and-composite.sh /tmp/ts-${case} +done +``` + +## Regression checklist + +For every new template or significant change, re-run the test set and +verify: + +- [ ] Sunset_Stroll: captions legible on bright sunset (Cinematic cream/screen washes out → use **Standard mode**, opaque rail) +- [ ] Nature_Vibe: captions don't collide with baked timestamp (bottom-left) or watermark +- [ ] Gym_Grind: captions visible on dark gym despite dark subject +- [ ] AI_Insights: captions don't fight with "THE DIALOG" neon sign +- [ ] Tech_Trends: dark text + `normal` blend on pure white studio +- [ ] Each case: 0.5s+ per caption, no wrap-into-subject-head-zone +- [ ] Each case: FG layer for 9:16 portraits where subject fills frame + +## Bugs we've fixed via this test set + +- **2026-04-23**: Hardcoded `text-shadow: warm-glow + dark-drop` in all + templates ignored `cap_color` — dark text got overwhelmed by bright + halo on bright backgrounds. Fix: `TEXT_SHADOW` placeholder with + luminance-adaptive default. +- **2026-04-23**: Hardcoded `filter: brightness(1.12)` lightened dark + text, shifting it toward neutral. Fix: `TEXT_FILTER` placeholder that + drops brightness boost for dark colors. +- **2026-04-23**: `BLEND_MODE` and `CAP_COLOR` hardcoded in new + templates — plan.json overrides ignored. Fix: placeholders added to + all 4 templates. + +## Expansion plan + +Still need to add: + +- 1 × 16:9 landscape (from any heygen_relevant via letterboxing, or new source) +- 1 × 1:1 square (if available) +- 1 × multi-speaker (speaker diarization test) +- 1 × foreign language (CJK rendering test) +- 1 × shot-cut (PySceneDetect-required case) +- 1 × product/B-roll (no talking head — refuse gate) diff --git a/plugins/hyperframes/skills/embedded-captions/references/typographic-moves.md b/plugins/hyperframes/skills/embedded-captions/references/typographic-moves.md new file mode 100644 index 000000000..d03af299f --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/typographic-moves.md @@ -0,0 +1,266 @@ +# Typographic moves — a palette, not a cage + +`cinematic-cream` template locks DNA only (font-family, motion, color +palette defaults). It does NOT enforce slot structure. The agent writes +each caption group's typography from scratch via the plan.json `css` +field. + +This doc is a **palette** of tried combinations — pick what fits the +scene, invent new ones, skip these if the content demands. These are +recommendations, not rules. + +## Size vs text length — DO THIS BEFORE PICKING SIZE + +Bigger is NOT better if the word doesn't fit the frame width. Every time +you pick a font-size, sanity-check against word length: + +**Rough rule for Inter 900 uppercase at -0.03em tracking:** +`max_font_px ≈ frame_width / (longest_word_chars × 0.72)` + +The 0.72 multiplier is intentionally conservative — it targets the text +filling ~90% of the frame width so there's a small side margin. If you +want edge-to-edge, drop to 0.65, but you lose a bit of safety margin. + +720px portrait: + +- 3-char word (15%): max ~330px (a single big number like "15%") +- 5-char word (TAKE): max ~200px +- 7-char word (AUGMENT / QUANTUM / MATTERS): max ~143px +- 10-char word (CREATIVITY): max ~100px +- 13-char word (UNPRECEDENTED): max ~77px + +1920px landscape: + +- 7-char word: max ~380px +- 10-char word: max ~267px + +For italic/upright 500-700 it's slightly narrower — increase max by ~10%. + +**If you want the word bigger than it fits:** + +- Split into multiple words per group (natural wrap), OR +- Add explicit `
` between syllables, OR +- Drop letter-spacing to -0.05em, OR +- Accept that the matte will cut part of it (Vogue-cover embed effect — + only works when the cut area is exactly where the subject is) + +Never let the text OVERFLOW the frame edge — that's not cinematic, that's +just broken. Use the heuristic. + +## Sizing discipline (frame-height-relative) + +Portrait 9:16 (720×1290) and landscape 16:9 (1920×1080) have very +different comfort ranges. Use `calc( * var(--h))` for responsive: + +| Feel | % of frame height | Example calc | +| ---------------------- | ----------------- | ----------------------- | +| Whisper / label | 4-6% | `calc(0.05 * var(--h))` | +| Soft opener | 6-9% | `calc(0.07 * var(--h))` | +| Narrative body | 9-14% | `calc(0.11 * var(--h))` | +| Emphasis | 14-22% | `calc(0.18 * var(--h))` | +| Climax / monumental | 22-35% | `calc(0.28 * var(--h))` | +| Title-bigger-than-face | 40%+ | `calc(0.48 * var(--h))` | + +Use absolute px only when a specific scale needs to look identical +across frame sizes (rare). Prefer `calc` + `var(--h)`. + +## Named moves — pick per group + +**Italic contemplative opener** (memory-wall cap-1 lineage): + +```css +font-weight: 600; +font-style: italic; +letter-spacing: -0.01em; +font-size: calc(0.075 * var(--h)); +``` + +**Italic continuation / dreamier continuation** (cap-2 lineage): + +```css +font-weight: 500; +font-style: italic; +letter-spacing: -0.005em; +font-size: calc(0.065 * var(--h)); +``` + +**Upright pivot / statement** (cap-3 lineage — "but suddenly"): + +```css +font-weight: 700; +letter-spacing: -0.015em; +font-size: calc(0.07 * var(--h)); +``` + +**Uppercase climax / monumental** (cap-4 lineage — "EVERYTHING IS SHARP AGAIN"): + +```css +font-weight: 900; +text-transform: uppercase; +letter-spacing: -0.03em; +line-height: 0.95; +font-size: calc(0.18 * var(--h)); +``` + +**Chapter card / full-frame Adam Curtis manifesto**: + +```css +font-weight: 700; +text-transform: uppercase; +letter-spacing: -0.015em; +line-height: 0.9; +font-size: calc(0.14 * var(--h)); +``` + +**News chyron / broadcast label** (small, locked): + +```css +font-weight: 500; +letter-spacing: 0.02em; +font-size: calc(0.038 * var(--h)); +``` + +**Tiny side note / caption-on-surface**: + +```css +font-weight: 400; +font-style: italic; +font-size: calc(0.045 * var(--h)); +``` + +**Vogue-masthead monumental**: + +```css +font-weight: 900; +text-transform: uppercase; +letter-spacing: -0.04em; +line-height: 0.85; +font-size: calc(0.32 * var(--h)); +``` + +## Narrative arcs (suggestions, not required) + +**Poem arc** — memory-wall canonical: italic opener → italic continuation +→ upright pivot → uppercase climax. Four steps. + +**Question-answer arc**: italic question small → uppercase answer big. +Two steps. + +**List-of-three arc**: three equal-weight narration segments, one +climactic uppercase. Four steps. + +**Single-statement arc**: one monumental uppercase held long. One step. + +**Whisper-hook arc** (short-form): tiny italic hook → massive uppercase +reveal. Two steps. + +The **number** of groups comes from the **content**. A 25s Pausch talk +has ~8 beats. A 7s TikTok hook has 2-3 beats. Don't force 4 or 5 or 7 — +read the transcript and mark breath-groups. + +## Position + layer vocabulary + +**Position** is where the caption lives in frame. Use: + +- `top / left / right / bottom` (percentages or px) for anchor +- `transform: translateX/Y` for fine offsets +- `text-align: center / left / right` for alignment + +**Layer** per group: + +- `bg` (default) — behind subject. Matte occludes. Cinematic embed. Works + on clean zones (sky, walls) OR intentionally crosses subject for the + Vogue-masthead effect. +- `fg` — on top of subject. Announcement. Use for climax breakthroughs or + when bg would be 100% occluded by body. + +**Tone** per group: + +- `soft` — gentle per-word opacity+y drift (0.45s power2.out). Use for + introspective, dreamy, or narrative content. +- `present` — snappy per-word opacity+y+scale pop (0.22s power3.out). Use + for emphatic or declarative beats. + +## Anti-patterns the DNA protects against + +The DNA defaults prevent most ugly outcomes. But avoid in per-group CSS: + +- Multiple different `font-family` within one video (DNA is one family) +- Multiple saturated colors (one accent at most; DNA defaults cream or + deep warm) +- `letter-spacing` above ±0.05em unless there's a specific reason +- `font-weight` 300 or below — too light for screen +- `font-style: italic` on emphasis — italic is for lyricism, not stress + +## When cinematic-cream is wrong + +This DNA assumes mid-to-dark backgrounds (luminance 60-180). For: + +- Bright white studios → cinematic-cream's cream + `screen` washes out, and the DNA is + **locked** (you cannot recolour it) → use **Standard mode** (opaque rail) instead +- Documentary formal → Standard mode (documentary-dignified direction; see references/direction-catalog.md §1) +- Energetic vlog hooks → future `kinetic-vlog` DNA (not yet shipped) + +## Example: memory-wall original, expressed in freeform + +Same output as the canonical memory-wall.html, but using slot-free plan: + +```json +{ + "template": "cinematic-cream", + "caption_layer": "bg", + "groups": [ + { + "id": "cg-0", + "tone": "soft", + "in": 0.2, + "out": 4.85, + "css": "top: 14%; right: 6%; left: auto; text-align: right; font-size: calc(0.09 * var(--h)); font-weight: 600; font-style: italic; letter-spacing: -0.01em;", + "words": [ + { "text": "Some", "start": 0.24, "end": 0.44 }, + { "text": "memories", "start": 0.48, "end": 0.82 }, + { "text": "feel", "start": 0.92, "end": 1.14 }, + { "text": "soft", "start": 1.2, "end": 1.64 } + ] + }, + { + "id": "cg-1", + "tone": "soft", + "in": 2.55, + "out": 4.85, + "css": "top: 26%; right: 10%; left: auto; text-align: right; font-size: calc(0.075 * var(--h)); font-weight: 500; font-style: italic;", + "words": [ + { "text": "like", "start": 2.66, "end": 2.78 }, + { "text": "old", "start": 2.88, "end": 3.02 }, + { "text": "film", "start": 3.16, "end": 3.46 } + ] + }, + { + "id": "cg-2", + "tone": "present", + "in": 4.9, + "out": 8.04, + "css": "top: 18%; right: 6%; left: auto; text-align: right; font-size: calc(0.085 * var(--h)); font-weight: 700;", + "words": [ + { "text": "but", "start": 5.04, "end": 5.18 }, + { "text": "suddenly", "start": 5.24, "end": 5.76 } + ] + }, + { + "id": "cg-3", + "tone": "present", + "in": 6.7, + "out": 8.04, + "css": "top: 32%; right: 6%; left: auto; text-align: right; font-size: calc(0.11 * var(--h)); font-weight: 900; text-transform: uppercase; letter-spacing: -0.03em; line-height: 0.95;", + "words": [ + { "text": "everything", "start": 6.82, "end": 7.14 }, + { "text": "is", "start": 7.18, "end": 7.28 }, + { "text": "sharp", "start": 7.32, "end": 7.52 }, + { "text": "again", "start": 7.58, "end": 7.92 } + ] + } + ] +} +``` + +Same visual, no slot constraint. Each group owns its typography. diff --git a/plugins/hyperframes/skills/embedded-captions/references/typography-presets.md b/plugins/hyperframes/skills/embedded-captions/references/typography-presets.md new file mode 100644 index 000000000..b44f26c77 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/references/typography-presets.md @@ -0,0 +1,63 @@ +# Typography Presets + +Five named styles corresponding to the `cap-*` CSS classes. Pick one per caption group in `plan.json` based on the line's semantic role. + +| style | CSS | Use when | +| -------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| `intro` | 66px italic 500 | First line, filler ("You know…", "So…"), contemplative openings. Low visual weight. | +| `phrase` | 78px upright 600 | Main statement clauses. Default for most lines. | +| `emph` | 92px upright 800 | Lines with emotional peak or key achievement ("I've achieved incredible things"). | +| `dream` | 82px italic 700 | Aspirational / "was dreaming of…" style lines. Italic signals memory/imagination. | +| `crown` | 140px upright 900 uppercase | **Only for the climax line.** Used in center-stage `crown-plane`. Maximum one per composition — ideally the last caption. | + +## Tone field + +Independent of style, each group has `tone`: `soft` or `present`. + +- **soft** — gentle fade + 8px y-drift entrance, `power2.out` ease. Feels floaty, nostalgic. Use for memory, intro, dream. +- **present** — snappy 6px y + 1.04 scale pop, `power3.out`, transformOrigin center. Feels assertive, in-the-moment. Use for emphasis and crown. + +## Picking automatically + +Scan each group's words: + +1. Does it contain superlatives (incredible, best, only, never, always) or brand/proper nouns? → `emph` + `present` +2. Does it start with discourse markers (you know, so, well, look) or is it short (≤3 words)? → `intro` + `soft` +3. Does it reference dreams, hopes, memory, past tense verbs like "was dreaming"? → `dream` + `soft` +4. Is it the final sentence-clinching line and feels like a title/headline? → `crown` + `present` (only one per video) +5. Otherwise → `phrase` + (match the group's neighbors' tone; default `soft`) + +## Font-size scales with column width + +The `.cap-*` defaults in each template are tuned for a **~560px column** (the original champion composition). When the caption plane is wider than that, the fonts feel underweight — too much negative space around text. Scale up accordingly. + +| Plane width | intro | phrase | emph | dream | crown (centered, full-frame) | crown (clean-zone only) | +| ------------------- | ----- | ------ | ---- | ----- | ---------------------------- | ----------------------- | +| 460-580 px (tight) | 66 | 78 | 92 | 82 | 140 | n/a | +| 600-760 px (medium) | 78 | 108 | 128 | 100 | 220 | 118 | +| 780+ px (wide) | 90 | 128 | 150 | 116 | 260 | 140 | + +Notes: + +- Crown sizes assume landscape (1920×1080). For portrait 1080×1920, divide all crown sizes by 1.5. +- "full-frame crown" = centered, designed to span `0.8+ × frame_width` and cross the subject's body. Use only when [layout-heuristics.md § Crown placement](layout-heuristics.md) conditions pass. +- "clean-zone only crown" = crown positioned inside one clean zone, smaller font, tail letters lightly touch subject. Fallback when centered crown would eat too much. + +Also: if a plane's `rotateY` is non-trivial (say > 8°), effective visible width shrinks. Scale fonts up ~10% to compensate. + +## What NOT to do + +- Don't use more than **one crown** per render. The whole point is that it's a singular payoff. +- Don't use `emph` on more than ~30% of groups. Emphasis loses meaning when everything is emphasized. +- Don't pick `intro` for the main content just because the words are short. "I won" (2 words) is `emph` or `crown`, not `intro`. +- Don't mix `soft` and `present` alternately for no reason. Tone should follow the story arc: soft opening → present build → emph peak → (optional crown climax). + +## When scene luminance affects color choice + +The default color is warm bone-white (`#fff5df`). Adjust in the template CSS: + +- Wall is mostly warm wood / tan → keep default, or shift cooler `#e8f0ff` +- Wall is cool blue / tech-lab → push warmer `#fff0c0` +- Wall has strong primary color → desaturate default, luminance first + +These adjustments happen in the HTML template, not plan.json. If you repeatedly need different palettes, make new template variants. diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/audio-envelope.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/audio-envelope.cjs new file mode 100644 index 000000000..d8bb2f998 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/audio-envelope.cjs @@ -0,0 +1,95 @@ +#!/usr/bin/env node +/* + * audio-envelope.cjs — extract a per-50ms RMS loudness envelope from the source audio. + * + * node audio-envelope.cjs /envelope.json + * + * { hop: 0.05, rms: [linear 0..1 per hop] } + * + * Used by lib-dna.cjs to couple the hero's entrance amplitude to how hard the word was + * actually SPOKEN (percentile of the hero window's loudness within the clip). ffmpeg + * astats over fixed windows — deterministic, no network, no Python. + */ +const path = require("path"); +const fs = require("fs"); +const cp = require("child_process"); + +const HOP = 0.05; + +function findSource(project) { + for (const c of ["source.mp4"].concat( + fs + .readdirSync(project) + .filter( + (f) => + /\.(mp4|mov|webm|mkv|m4v|wav|m4a|mp3)$/i.test(f) && + !/^(final|bg_plus_caps|fg_caps|rail|index)/.test(f), + ), + )) { + const p = path.join(project, c); + if (fs.existsSync(p)) return p; + } + return null; +} + +function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) { + console.error("usage: audio-envelope.cjs "); + process.exit(1); + } + const src = findSource(project); + if (!src) { + console.error("[envelope] no source media found"); + process.exit(2); + } + + // asetnsamples groups audio into fixed windows; astats prints RMS per window + const sr = 16000, + n = Math.round(sr * HOP); + let out; + try { + // resample INSIDE the filter chain — an output-option -ar applies after the + // filtergraph, which would make each window n/ seconds instead of HOP + out = cp.execFileSync( + "ffmpeg", + [ + "-v", + "info", + "-i", + src, + "-map", + "a:0", + "-af", + `aresample=${sr},aformat=channel_layouts=mono,asetnsamples=n=${n}:p=0,astats=metadata=1:reset=1,ametadata=mode=print:key=lavfi.astats.Overall.RMS_level:file=-`, + "-f", + "null", + "-", + ], + { encoding: "utf8", maxBuffer: 64 * 1024 * 1024, stdio: ["ignore", "pipe", "pipe"] }, + ); + } catch (e) { + // ffmpeg writes the metadata to stdout before exiting; some containers still exit 0 — re-throw only if nothing parsed + out = (e.stdout || "") + ""; + if (!out.includes("RMS_level")) { + console.error(`[envelope] ffmpeg failed: ${e.message}`); + process.exit(2); + } + } + const rmsDb = []; + for (const line of String(out).split("\n")) { + const m = line.match(/lavfi\.astats\.Overall\.RMS_level=(-?[\d.]+|-inf)/); + if (m) rmsDb.push(m[1] === "-inf" ? -90 : Math.max(-90, parseFloat(m[1]))); + } + if (!rmsDb.length) { + console.error("[envelope] no RMS windows parsed"); + process.exit(2); + } + const rms = rmsDb.map((db) => +Math.pow(10, db / 20).toFixed(5)); // linear 0..1 + fs.writeFileSync(path.join(project, "envelope.json"), JSON.stringify({ hop: HOP, rms })); + const peakAt = rms.indexOf(Math.max(...rms)) * HOP; + console.log( + `[envelope] ${rms.length} windows @ ${HOP}s → envelope.json (loudest beat ~${peakAt.toFixed(2)}s)`, + ); +} +main(); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/check-occlusion.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/check-occlusion.cjs new file mode 100644 index 000000000..ae1c6eed7 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/check-occlusion.cjs @@ -0,0 +1,250 @@ +#!/usr/bin/env node +/* check-occlusion.cjs — pixel-perfect occlusion gate (Node port of check-occlusion-v2.py). + * Runs measure-layout.cjs (real Chromium DOM rects), reads the subject-matte alpha via sharp, + * computes per-word / per-cap occlusion. No Python. + * node check-occlusion.cjs [--strict] [--word-fail F] [--word-warn F] [--cap-fail F] [--remeasure] + */ +const path = require("path"); +const fs = require("fs"); +const os = require("os"); +const cp = require("child_process"); + +function hfResolve(pkg) { + const roots = [ + process.env.HYPERFRAMES_ROOT, + path.resolve(__dirname, "..", "..", ".."), + path.join(os.homedir(), "Downloads", "hyperframes"), + ].filter(Boolean); + for (const root of roots) { + const cands = [path.join(root, "node_modules", pkg)]; + const bun = path.join(root, "node_modules", ".bun"); + try { + if (fs.existsSync(bun)) + for (const d of fs.readdirSync(bun)) + if (d.startsWith(pkg + "@")) cands.push(path.join(bun, d, "node_modules", pkg)); + } catch {} + for (const c of cands) { + try { + if (fs.existsSync(c)) return require(c); + } catch {} + } + } + console.error(`[v2] cannot find ${pkg} — set HYPERFRAMES_ROOT`); + process.exit(3); +} +const sharp = hfResolve("sharp"); + +function ensureLayoutMeasured(project, force) { + const lp = path.join(project, "_layout.json"), + idx = path.join(project, "index.html"); + let stale = force || !fs.existsSync(lp); + if (!stale && fs.existsSync(idx) && fs.statSync(idx).mtimeMs > fs.statSync(lp).mtimeMs) + stale = true; + if (stale) + cp.execFileSync("node", [path.join(__dirname, "measure-layout.cjs"), project], { + stdio: "inherit", + }); + return JSON.parse(fs.readFileSync(lp, "utf8")); +} +async function loadAlphaMask(png) { + if (!fs.existsSync(png)) return null; + const { data, info } = await sharp(png) + .ensureAlpha() + .extractChannel(3) + .raw() + .toBuffer({ resolveWithObject: true }); + return { data, W: info.width, H: info.height }; +} +function occlusionForRect(m, x, y, w, h) { + if (!m) return 0; + const x0 = Math.max(0, Math.round(x)), + y0 = Math.max(0, Math.round(y)); + const x1 = Math.min(m.W, Math.round(x + w)), + y1 = Math.min(m.H, Math.round(y + h)); + if (x1 <= x0 || y1 <= y0) return 0; + let cnt = 0, + tot = 0; + for (let yy = y0; yy < y1; yy++) { + const row = yy * m.W; + for (let xx = x0; xx < x1; xx++) { + tot++; + if (m.data[row + xx] > 128) cnt++; + } + } + return tot ? cnt / tot : 0; +} +function argf(name, d) { + const i = process.argv.indexOf(name); + return i >= 0 ? parseFloat(process.argv[i + 1]) : d; +} + +async function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) { + console.error("usage: check-occlusion.cjs [--strict]"); + process.exit(1); + } + const strict = process.argv.includes("--strict"); + const wordFail = argf("--word-fail", 0.65), + wordWarn = argf("--word-warn", 0.35), + capFail = argf("--cap-fail", 0.5); + const layout = ensureLayoutMeasured(project, process.argv.includes("--remeasure")); + const framesDir = path.join(project, "frames_fg"); + if (!fs.existsSync(framesDir)) { + console.error(`[v2] missing ${framesDir}`); + process.exit(2); + } + const planPath = path.join(project, "plan.json"); + const plan = fs.existsSync(planPath) ? JSON.parse(fs.readFileSync(planPath, "utf8")) : {}; + const planLayer = plan.caption_layer || "bg"; + // Hero groups (the ONE big promoted word) are SUPPOSED to sit ON the subject — for them + // occlusion is a TARGET (~30–55%), not "minimize". Collect their ids for the advisory below. + const heroIds = new Set(); + const heroIn = {}; + for (const g of plan.groups || []) + if (g && (g.hero === true || /^(hero|crown)$/i.test(g.plane || ""))) { + heroIds.add(g.id); + heroIn[g.id] = g.in; + } + if (plan.crown_group && plan.crown_group.id) { + heroIds.add(plan.crown_group.id); + heroIn[plan.crown_group.id] = plan.crown_group.in; + } + const M = 2; // frame-edge tolerance (px) — matches check-overflow.cjs + const frameW = layout.width, + frameH = layout.height; + + const capStats = {}; + for (const sample of layout.samples) { + const png = path.join(framesDir, `f_${String(sample.frame_idx).padStart(4, "0")}.png`); + const mask = await loadAlphaMask(png); + if (!mask) continue; + for (const cap of sample.caps) { + const entry = (capStats[cap.id] ||= { layer: cap.layer || planLayer, samples: [] }); + const wordsData = []; + for (const w of cap.words || []) { + if ((w.opacity ?? 1) < 0.3) continue; + wordsData.push({ text: w.text, occlusion: occlusionForRect(mask, w.x, w.y, w.w, w.h) }); + // Frame-edge overflow — clipped SETTLED text is always wrong; a hero's first + // 0.5s is its entrance TRANSIENT (slam over-scale, streak fly-in pass through + // off-frame states by design) — judge overflow on the hold, not mid-flight. + if (heroIds.has(cap.id) && heroIn[cap.id] != null && sample.t < heroIn[cap.id] + 0.5) + continue; + const off = { + left: Math.max(0, Math.round(-w.x - M)), + right: Math.max(0, Math.round(w.x + w.w - frameW - M)), + top: Math.max(0, Math.round(-w.y - M)), + bottom: Math.max(0, Math.round(w.y + w.h - frameH - M)), + }; + const score = off.left + off.right + off.top + off.bottom; + if (score > 0 && (!entry.overflow || score > entry.overflow.score)) + entry.overflow = { text: w.text, off, score, t: sample.t }; + } + const capOccl = occlusionForRect( + mask, + cap.cap_bbox.x, + cap.cap_bbox.y, + cap.cap_bbox.w, + cap.cap_bbox.h, + ); + entry.samples.push({ + t: sample.t, + cap_occl: capOccl, + cap_bbox: cap.cap_bbox, + words: wordsData, + }); + } + } + + const failures = []; + console.log( + `[v2] ${path.basename(project)} word-fail≥${(wordFail * 100).toFixed(0)}% cap-fail≥${(capFail * 100).toFixed(0)}%`, + ); + for (const [gid, entry] of Object.entries(capStats)) { + // Frame-edge overflow applies to every layer (fg too). The skill allows the + // climax a few-px graze on the first/last letter, so only a clear glyph clip + // (>8px past an edge) is a hard FAIL; a sub-glyph graze is a WARN. + if (entry.overflow) { + const o = entry.overflow; + const maxOff = Math.max(o.off.left, o.off.right, o.off.top, o.off.bottom); + const sides = Object.entries(o.off) + .filter(([, v]) => v > 0) + .map(([s, v]) => `${s} ${v}px`) + .join(", "); + const hard = maxOff >= 8; + console.log( + ` ${gid} [overflow${hard ? "" : "-warn"}] "${o.text}" off-frame: ${sides} (@${o.t}s)` + + (hard ? " — cropped text is always wrong" : " (graze — within climax tolerance)"), + ); + if (hard && !failures.includes(gid)) failures.push(gid); + } + if (entry.layer === "fg") { + console.log(` ${gid} fg (occlusion skipped — fg renders above matte)`); + continue; + } + const capOccls = entry.samples.map((s) => s.cap_occl); + const avgCap = capOccls.length ? capOccls.reduce((a, b) => a + b, 0) / capOccls.length : 0; + const peakCap = capOccls.length ? Math.max(...capOccls) : 0; + const wordPeaks = {}; + for (const s of entry.samples) + for (const wd of s.words) + wordPeaks[wd.text] = Math.max(wordPeaks[wd.text] || 0, wd.occlusion); + const oblit = Object.entries(wordPeaks).filter(([, p]) => p >= wordFail); + const warn = Object.entries(wordPeaks).filter(([, p]) => p >= wordWarn && p < wordFail); + let status = "OK"; + // HERO caps WANT occlusion (~30–55% is the embed); the generic cap threshold would + // fail a working hero. Heroes fail only past the feasibility ceiling (68%). + const capLimit = heroIds.has(gid) ? Math.max(capFail, 0.68) : capFail; + if (oblit.length || peakCap >= capLimit) { + status = "FAIL"; + failures.push(gid); + } else if (warn.length) status = "WARN"; + let s = ""; + if (oblit.length) + s = + oblit + .slice(0, 5) + .map(([t, p]) => `${t}(${(p * 100).toFixed(0)}%)`) + .join(" ") + (oblit.length > 5 ? ` …+${oblit.length - 5}` : ""); + else if (warn.length) + s = + "[warn] " + + warn + .slice(0, 3) + .map(([t, p]) => `${t}(${(p * 100).toFixed(0)}%)`) + .join(" "); + console.log( + ` ${gid} ${entry.layer} avg ${(avgCap * 100).toFixed(0)}% peak ${(peakCap * 100).toFixed(0)}% ${status} ${s}`, + ); + // HERO target-occlusion advisory (not a failure): a hero should sit ON the subject + // (~30–55%). If it barely grazes, it reads as a small floating word, not an embed. + if (heroIds.has(gid) && peakCap < 0.15) { + // METRIC HONESTY: this advisory uses CAP-AREA occlusion, which saturates ~15% + // for a width-filled hero over a narrow subject (the 30–55% figure elsewhere is + // the safe-zones BAND metric — different denominator). If the hero already owns + // the width, "center it + make it BIG" is unactionable — stay quiet. + const widest = Math.max(...entry.samples.map((sm) => (sm.cap_bbox && sm.cap_bbox.w) || 0), 0); + if (widest >= frameW * 0.8) { + console.log( + ` ${gid} [hero-ok] peak ${(peakCap * 100).toFixed(0)}% cap-area — width-saturated hero over a narrow subject; cap-area can't reach the band target (this is the geometry, not a layout fault).`, + ); + } else { + console.log( + ` ${gid} [hero-weak] peak ${(peakCap * 100).toFixed(0)}% — hero barely crosses the subject; it should sit ON the subject (~30–55% by the safe-zones BAND metric = the embed effect). Center it (safe-zones heroAnchor) + make it BIG; don't park it in a clean margin.`, + ); + } + } + } + if (failures.length) { + const uniq = [...new Set(failures)]; + console.error(`\n[v2] ${uniq.length} cap(s) FAIL: ${uniq.join(", ")}`); + console.error( + " → occlusion: set that cap's layer to fg, OR shrink/reposition; overflow: shrink/reposition (fg won't help)", + ); + } + process.exit(strict && failures.length ? 2 : 0); +} +main().catch((e) => { + console.error("[v2]", e.message); + process.exit(1); +}); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/check-overflow.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/check-overflow.cjs new file mode 100644 index 000000000..d29fe0e76 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/check-overflow.cjs @@ -0,0 +1,194 @@ +#!/usr/bin/env node +/** + * check-overflow.cjs — mode-agnostic frame-overflow WARNING for custom mode. + * + * Template mode has check-occlusion.cjs (which also flags frame-edge overflow), + * but custom mode runs no gates. This is the cheap safety net: it loads the + * rendered index.html, seeks the GSAP timeline across the clip, and flags ANY + * visible text element (regardless of class) whose box leaves the canvas — i.e. + * captions that fall off-frame (the bug we otherwise only catch by eye). + * + * WARNING ONLY — never fails the build (custom designs may bleed intentionally). + * Exit 0 if it ran (with or without findings); exit 3 if it couldn't run. + * + * Usage: node check-overflow.cjs + */ +const path = require("path"); +const fs = require("fs"); +const os = require("os"); + +const HF_ROOTS = [ + process.env.HYPERFRAMES_ROOT, + path.resolve(__dirname, "../../.."), + path.join(os.homedir(), "Downloads", "hyperframes"), +].filter(Boolean); +let puppeteer = null; +for (const root of HF_ROOTS) { + const cands = [path.join(root, "node_modules", "puppeteer")]; + const bunDir = path.join(root, "node_modules", ".bun"); + try { + if (fs.existsSync(bunDir)) { + for (const d of fs.readdirSync(bunDir)) + if (d.startsWith("puppeteer@")) + cands.push(path.join(bunDir, d, "node_modules", "puppeteer")); + } + } catch { + /* ignore */ + } + for (const p of cands) { + try { + if (fs.existsSync(p)) { + puppeteer = require(p); + break; + } + } catch {} + } + if (puppeteer) break; +} +if (!puppeteer) { + console.error("[overflow] puppeteer not found"); + process.exit(3); +} + +async function main() { + const projectDir = process.argv[2]; + const htmlName = process.argv[3] || "index.html"; // Standard mode passes "rail.html" to gate the rail too + const indexPath = path.resolve(projectDir, htmlName); + if (!fs.existsSync(indexPath)) { + console.error(`[overflow] missing ${indexPath}`); + process.exit(2); + } + + const html = fs.readFileSync(indexPath, "utf8"); + const num = (re, d) => { + const m = html.match(re); + return m ? parseFloat(m[1]) : d; + }; + const W = num(/data-width="([0-9.]+)"/, 1920); + const H = num(/data-height="([0-9.]+)"/, 1080); + const DUR = num(/data-duration="([0-9.]+)"/, 8); + + const exe = + process.platform === "darwin" + ? "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" + : "/usr/bin/google-chrome"; + const browser = await puppeteer.launch({ + headless: "new", + executablePath: fs.existsSync(exe) ? exe : undefined, + args: [ + "--disable-web-security", + "--allow-file-access-from-files", + `--window-size=${W},${H}`, + "--disable-dev-shm-usage", + ], + }); + try { + const page = await browser.newPage(); + await page.setViewport({ width: Math.round(W), height: Math.round(H), deviceScaleFactor: 1 }); + const waitTL = async () => { + const t0 = Date.now(); + while (Date.now() - t0 < 12000) { + if (await page.evaluate(() => !!(window.__timelines && window.__timelines.main))) + return true; + await new Promise((r) => setTimeout(r, 200)); + } + return false; + }; + await page.goto(`file://${indexPath}`, { waitUntil: "load", timeout: 20000 }); + let hasTL = await waitTL(); + if (!hasTL) { + // GSAP loads from CDN — a blip leaves no timeline; retry once + await page.reload({ waitUntil: "load", timeout: 20000 }).catch(() => {}); + hasTL = await waitTL(); + } + if (!hasTL) { + // NEVER claim "ok" when we couldn't actually evaluate the animated layout. + console.error( + "[overflow] ⚠ timeline did not register (GSAP CDN blocked?) — overflow check " + + "INCONCLUSIVE; eyeball the render for off-frame captions.", + ); + await browser.close(); + process.exit(0); + } + await page.evaluate(async () => { + try { + await document.fonts.ready; + } catch {} + }); + + const times = Array.from({ length: 9 }, (_, i) => +((DUR * i) / 8).toFixed(2)); + const found = new Map(); // key text → worst offense + + for (const t of times) { + await page.evaluate((t) => { + window.__timelines.main.seek(t); + void document.body.offsetHeight; + }, t); + await new Promise((r) => setTimeout(r, 25)); + const offenders = await page.evaluate( + (W, H) => { + const M = 2; // tolerance px + const root = document.querySelector("#stage") || document.body; + const out = []; + for (const el of root.querySelectorAll("*")) { + if (el.tagName === "VIDEO" || el.tagName === "AUDIO") continue; + const own = [...el.childNodes] + .filter((n) => n.nodeType === 3) + .map((n) => n.textContent.trim()) + .join(" ") + .trim(); + if (!own) continue; + const cs = getComputedStyle(el); + if ( + cs.display === "none" || + cs.visibility === "hidden" || + parseFloat(cs.opacity) < 0.06 + ) + continue; + const b = el.getBoundingClientRect(); + if (b.width === 0 || b.height === 0) continue; + const off = { + left: Math.max(0, Math.round(-b.left - M)), + right: Math.max(0, Math.round(b.right - W - M)), + top: Math.max(0, Math.round(-b.top - M)), + bottom: Math.max(0, Math.round(b.bottom - H - M)), + }; + if (off.left || off.right || off.top || off.bottom) + out.push({ text: own.slice(0, 42), off }); + } + return out; + }, + W, + H, + ); + for (const o of offenders) { + const sides = Object.entries(o.off) + .filter(([, v]) => v > 0) + .map(([s, v]) => `${s} ${v}px`) + .join(", "); + const prev = found.get(o.text); + const score = Object.values(o.off).reduce((a, b) => a + b, 0); + if (!prev || score > prev.score) found.set(o.text, { sides, score, t }); + } + } + + if (found.size === 0) { + console.log(`[overflow] ok — no caption text leaves the ${W}x${H} frame`); + } else { + console.error( + `[overflow] ⚠ ${found.size} caption(s) leave the frame (custom mode — WARNING only, not blocking):`, + ); + for (const [text, info] of found) + console.error(` "${text}" → off-frame: ${info.sides} (@${info.t}s)`); + console.error( + `[overflow] if unintentional, reposition/resize; if it's deliberate bleed, ignore.`, + ); + } + } finally { + await browser.close(); + } +} +main().catch((e) => { + console.error("[overflow]", e.message); + process.exit(3); +}); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/check-rail-climax.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/check-rail-climax.cjs new file mode 100644 index 000000000..5cc473898 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/check-rail-climax.cjs @@ -0,0 +1,233 @@ +#!/usr/bin/env node +/* + * check-rail-climax.cjs — enforce the Rail ↔ climax hand-off (PIPELINE.md). + * + * node check-rail-climax.cjs + * + * The embed climax is a PROMOTED word — lifted out of the rail into the hero + * layer. It must NEVER also be revealed in the rail. This gate loads index.html + * (the climax) and rail.html (the verbatim rail) in headless Chromium, finds the + * climax's on-screen window + its word(s), then checks whether the rail reveals + * any of those same words DURING that window. If it does, the promoted word is + * duplicated on screen → exit 2 (the render aborts). Standard mode only. + * + * Conservative by design: only a CONFIRMED duplicate fails. Anything we can't + * determine (no rail.html, no puppeteer, timeline never registers, no climax) + * exits 0 — infra problems never block a render. + */ +const path = require("path"); +const fs = require("fs"); +const os = require("os"); + +const HF_ROOTS = [ + process.env.HYPERFRAMES_ROOT, + path.resolve(__dirname, "../../.."), + path.join(os.homedir(), "Downloads", "hyperframes"), +].filter(Boolean); + +function findInBun(root, pkg, sub) { + const cands = [path.join(root, "node_modules", pkg)]; + const bunDir = path.join(root, "node_modules", ".bun"); + try { + if (fs.existsSync(bunDir)) + for (const d of fs.readdirSync(bunDir)) + if (d.startsWith(pkg + "@")) cands.push(path.join(bunDir, d, "node_modules", pkg)); + } catch { + /* ignore */ + } + for (const c of cands) { + const p = sub ? path.join(c, sub) : c; + if (fs.existsSync(p)) return p; + } + return null; +} + +let puppeteer = null, + gsapSource = null; +for (const root of HF_ROOTS) { + if (!puppeteer) { + const p = findInBun(root, "puppeteer"); + if (p) { + try { + puppeteer = require(p); + } catch {} + } + } + if (!gsapSource) { + const g = findInBun(root, "gsap", path.join("dist", "gsap.min.js")); + if (g) gsapSource = fs.readFileSync(g, "utf8"); + } +} + +const norm = (s) => + String(s) + .toLowerCase() + .replace(/[^a-z0-9]/g, ""); +const toks = (s) => + String(s) + .split(/\s+/) + .map(norm) + .filter((t) => t.length >= 2); + +function ok(msg) { + if (msg) console.log(msg); + process.exit(0); +} // can't-determine / pass → never blocks +function fail(msg) { + console.error(msg); + process.exit(2); +} + +async function newPage(browser, W, H) { + const page = await browser.newPage(); + await page.setViewport({ width: W, height: H, deviceScaleFactor: 1 }); + if (gsapSource) { + await page.evaluateOnNewDocument(gsapSource); + await page.setRequestInterception(true); + page.on("request", (req) => { + const u = req.url(); + if (req.resourceType() === "script" && /gsap/i.test(u) && /^https?:/i.test(u)) req.abort(); + else req.continue(); + }); + } + return page; +} +async function load(page, file) { + await page.goto(`file://${file}`, { waitUntil: "load", timeout: 15000 }); + const start = Date.now(); + while (Date.now() - start < 12000) { + if (await page.evaluate(() => !!(window.__timelines && window.__timelines.main))) { + try { + await page.evaluate(async () => { + await document.fonts.ready; + }); + } catch {} + return true; + } + await new Promise((r) => setTimeout(r, 150)); + } + return false; +} +// visible text of a selector at time t, by seeking the page's main timeline. +// Visibility must be EFFECTIVE (own opacity × every ancestor's): a rail line that +// fades out as a CONTAINER leaves its word spans at opacity:1 — checking only the +// span's own style false-positives on text that is actually invisible. +async function visibleAt(page, t, selector, childSel) { + return page.evaluate( + (t, selector, childSel) => { + const tl = window.__timelines.main; + tl.seek(t); + void document.body.offsetHeight; + const eff = (el) => { + let o = 1, + n = el; + while (n && n.nodeType === 1) { + const cs = getComputedStyle(n); + if (cs.display === "none" || cs.visibility === "hidden") return 0; + o *= +cs.opacity; + n = n.parentElement; + } + return o; + }; + const out = []; + for (const el of document.querySelectorAll(selector)) { + if (eff(el) < 0.05) continue; + const kids = childSel ? [...el.querySelectorAll(childSel)] : []; + if (kids.length) { + for (const k of kids) { + if (eff(k) > 0.05) out.push(k.textContent); + } + } else if ((el.textContent || "").trim()) out.push(el.textContent); + } + return out.join(" ").trim(); + }, + t, + selector, + childSel, + ); +} + +async function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) ok("[rail-climax] usage: check-rail-climax.cjs "); + const indexPath = path.join(project, "index.html"); + const railPath = path.join(project, "rail.html"); + if (!fs.existsSync(railPath) || !fs.existsSync(indexPath)) + ok("[rail-climax] no rail.html+index.html — not Standard, skipping"); + if (!puppeteer) ok("[rail-climax] puppeteer unavailable — skipping (set HYPERFRAMES_ROOT)"); + + const exe = + process.platform === "darwin" + ? "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" + : "/usr/bin/google-chrome"; + let browser; + try { + browser = await puppeteer.launch({ + headless: "new", + executablePath: fs.existsSync(exe) ? exe : undefined, + args: ["--disable-web-security", "--allow-file-access-from-files", "--disable-dev-shm-usage"], + }); + } catch (e) { + ok(`[rail-climax] could not launch Chromium — skipping (${e.message})`); + } + + try { + // index.html → climax window + climax word tokens + const ip = await newPage(browser, 1920, 1080); + if (!(await load(ip, indexPath))) + ok("[rail-climax] index timeline never registered — skipping"); + const dur = + +(await ip.evaluate(() => { + const r = document.querySelector("#root") || document.querySelector("[data-duration]"); + return (r && r.dataset && r.dataset.duration) || 0; + })) || 30; + const STEP = 0.1; + const climaxTokens = new Set(); + let winIn = null, + winOut = null; + for (let t = 0; t <= dur + 0.001; t += STEP) { + const txt = await visibleAt(ip, +t.toFixed(2), ".climax", "span,.w"); + if (txt) { + toks(txt).forEach((w) => climaxTokens.add(w)); + if (winIn === null) winIn = t; + winOut = t; + } + } + if (!climaxTokens.size || winIn === null) + ok("[rail-climax] no visible climax found in index.html — skipping"); + + // rail.html → words visible during [winIn, winOut] + const rp = await newPage(browser, 1920, 1080); + if (!(await load(rp, railPath))) ok("[rail-climax] rail timeline never registered — skipping"); + const hits = new Map(); // token -> first t seen + for (let t = Math.max(0, winIn - STEP); t <= winOut + 0.001; t += STEP) { + const railToks = new Set(toks(await visibleAt(rp, +t.toFixed(2), ".w", null))); + for (const w of climaxTokens) if (railToks.has(w) && !hits.has(w)) hits.set(w, +t.toFixed(2)); + } + + if (hits.size) { + const list = [...hits.entries()] + .map(([w, t]) => `"${w}" (rail shows it at t=${t}s)`) + .join(", "); + fail( + `[rail-climax] ✗ DUPLICATE PROMOTED WORD: the climax word(s) ${[...climaxTokens].map((w) => `"${w}"`).join(", ")} ` + + `are on screen during the climax window [${winIn.toFixed(2)}–${winOut.toFixed(2)}s], ` + + `and the rail ALSO reveals: ${list}.\n` + + ` The promoted word must be handed off, never duplicated — see PIPELINE.md "Rail ↔ climax hand-off":\n` + + ` freeze the rail before the promoted word, let the climax carry it, hold the climax across the rail's\n` + + ` page-flip, and exit it at the end of the thought. The rail must never reveal the promoted word.`, + ); + } + console.log( + `[rail-climax] ✓ ok — promoted word(s) ${[...climaxTokens].map((w) => `"${w}"`).join(", ")} not duplicated in the rail (window ${winIn.toFixed(2)}–${winOut.toFixed(2)}s)`, + ); + } finally { + await Promise.race([browser.close().catch(() => {}), new Promise((r) => setTimeout(r, 8000))]); + } +} +main() + .then(() => process.exit(0)) + .catch((e) => { + console.error(`[rail-climax] (skipped — ${e.message})`); + process.exit(0); + }); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/check-timing.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/check-timing.cjs new file mode 100644 index 000000000..e4fad56f0 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/check-timing.cjs @@ -0,0 +1,173 @@ +#!/usr/bin/env node +/* check-timing.cjs — verify plan.json word timings vs transcript.json (1:1 port of check-timing.py). + * node check-timing.cjs [--strict] + */ +const path = require("path"); +const fs = require("fs"); + +const DRIFT_TOL = 0.08; +const CREATIVE_SUBS = { + "15%": ["fifteen", "percent"], + "1/3": ["one", "third"], + "2x": ["two", "times"], +}; +const norm = (s) => + String(s) + .replace(/^[ .,?!"']+|[ .,?!"']+$/g, "") + .toLowerCase(); +const splitPacked = (t) => + String(t) + .split(/
|\s+/) + .filter(Boolean); + +function estimateVerticalBand(css, words, fw, fh) { + const top = css.match(/top:\s*(-?[\d.]+)%/); + if (!top) return null; + const topPct = parseFloat(top[1]); + const sizeM = css.match(/font-size:\s*calc\(\s*([\d.]+)\s*\*\s*var\(--h\)\s*\)/); + const fontPx = sizeM ? parseFloat(sizeM[1]) * fh : 0.05 * fh; + const lhM = css.match(/line-height:\s*([\d.]+)/); + const lh = lhM ? parseFloat(lhM[1]) : 1.1; + const charW = /uppercase/i.test(css) ? 0.72 : 0.6; + let lineCount = 1, + cur = 0; + const spaceW = fontPx * 0.3; + for (const w of words) { + const parts = String(w.text).split(/
/); + parts.forEach((part, i) => { + const pw = part.length * fontPx * charW; + if (i > 0) { + lineCount++; + cur = pw; + } else { + const test = cur + (cur > 0 ? spaceW : 0) + pw; + if (test > fw && cur > 0) { + lineCount++; + cur = pw; + } else cur = test; + } + }); + } + return [topPct, topPct + (100 * (lineCount * fontPx * lh)) / fh]; +} + +function check(project, strict) { + const plan = JSON.parse(fs.readFileSync(path.join(project, "plan.json"), "utf8")); + const t = JSON.parse(fs.readFileSync(path.join(project, "transcript.json"), "utf8")); + const seq = (t.words || []) + .filter((w) => w.type === "word") + .map((w) => [norm(w.text), w.start, w.end]); + const issues = []; + const fw = plan.width || 720, + fh = plan.height || 1290; + const groups = plan.groups || []; + const bands = groups.map((g) => + g.plane + ? [g.id || "?", g.in, g.out, null, true] + : [ + g.id || "?", + g.in, + g.out, + estimateVerticalBand(g.css || "", g.words || [], fw, fh), + g.allow_overlap || false, + ], + ); + for (let i = 0; i < bands.length; i++) { + const [gi, ai, bi, bbi, oki] = bands[i]; + if (!bbi) continue; + for (let j = i + 1; j < bands.length; j++) { + const [gj, aj, bj, bbj, okj] = bands[j]; + if (!bbj || oki || okj) continue; + if (Math.min(bi, bj) - Math.max(ai, aj) <= 0.05) continue; + if (Math.min(bbi[1], bbj[1]) - Math.max(bbi[0], bbj[0]) > 2.0) + issues.push( + `[${gi}↔${gj}] groups overlap in time (${Math.max(ai, aj).toFixed(2)}–${Math.min(bi, bj).toFixed(2)}s) AND vertically (band ${Math.max(bbi[0], bbj[0]).toFixed(0)}%–${Math.min(bbi[1], bbj[1]).toFixed(0)}%) — reposition one or add "allow_overlap": true if deliberate.`, + ); + } + } + let ti = 0; + for (const g of groups) { + const gid = g.id || "?", + gin = g.in, + gout = g.out; + const ws = (g.words || []).map((w) => w.start), + we = (g.words || []).map((w) => w.end); + if (ws.length && gin != null) { + const e = Math.min(...ws); + if (e < gin - 0.01) + issues.push( + `[${gid}] group.in=${gin.toFixed(2)} but earliest word starts at ${e.toFixed(2)} — word delayed by ${(gin - e >= 0 ? "+" : "") + (gin - e).toFixed(2)}s. Lower group.in.`, + ); + } + if (we.length && gout != null) { + const l = Math.max(...we); + if (l > gout + 0.01) + issues.push( + `[${gid}] group.out=${gout.toFixed(2)} but latest word ends at ${l.toFixed(2)} — word clipped. Raise group.out.`, + ); + } + for (const w of g.words || []) { + // Exact pairing: a compiler that KNOWS the transcript index emits `ti` — + // duplicate words then pair by POSITION, not text-search (which grabs the + // first occurrence and reports a phantom drift). Sanity-check the text; on + // mismatch fall back to the text matcher below. + if ( + Number.isInteger(w.ti) && + seq[w.ti] && + seq[w.ti][0] === norm(splitPacked(w.text)[0] || "") + ) { + const drift = w.start - seq[w.ti][1]; + if (Math.abs(drift) > DRIFT_TOL) + issues.push( + `[${gid}] '${norm(w.text)}': plan=${w.start.toFixed(3)} transcript=${seq[w.ti][1].toFixed(3)} drift ${(drift >= 0 ? "+" : "") + drift.toFixed(3)}s`, + ); + ti = w.ti + 1; + continue; + } + const parts = splitPacked(w.text).map(norm); + parts.forEach((part, pi) => { + if (!part) return; + if (part in CREATIVE_SUBS) { + for (const sub of CREATIVE_SUBS[part]) { + const j = seq.findIndex((s, k) => k >= ti && s[0] === sub); + if (j >= 0) ti = j + 1; + } + return; + } + let found = seq.findIndex((s, k) => k >= ti && s[0] === part); + if (found < 0) found = seq.findIndex((s) => s[0] === part); + if (found < 0) { + issues.push(`[${gid}] '${part}': NOT IN TRANSCRIPT (plan start=${w.start.toFixed(3)})`); + return; + } + const ts = seq[found][1]; + ti = found + 1; + if (pi === 0) { + const drift = w.start - ts; + if (Math.abs(drift) > DRIFT_TOL) + issues.push( + `[${gid}] '${part}': plan=${w.start.toFixed(3)} transcript=${ts.toFixed(3)} drift ${(drift >= 0 ? "+" : "") + drift.toFixed(3)}s`, + ); + } else + issues.push( + `[${gid}] '${part}' packed with '${parts[0]}': transcript=${ts.toFixed(3)} but entry has no distinct timing — split into separate word entries`, + ); + }); + } + } + const name = path.basename(project); + if (!issues.length) { + console.log(`${name}: timing OK ✓ (${seq.length} transcript words)`); + return 0; + } + console.log(`${name}: ${issues.length} timing issue(s):`); + for (const i of issues) console.log(` ${i}`); + return strict ? 1 : 0; +} + +const args = process.argv.slice(2).filter((a) => a !== "--strict"); +if (!args.length) { + console.error("usage: check-timing.cjs [--strict]"); + process.exit(2); +} +process.exit(check(path.resolve(args[0]), process.argv.includes("--strict"))); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/fill-timings.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/fill-timings.cjs new file mode 100644 index 000000000..627a41bc8 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/fill-timings.cjs @@ -0,0 +1,124 @@ +#!/usr/bin/env node +/* + * fill-timings.cjs — fill plan.json group/word times DIRECTLY from transcript.json, + * by SEQUENCE (Cinematic mode). Kills the timing-drift + duplicate-word class of + * occlusion/timing-gate re-tries: the agent only decides the GROUPING (which words form + * each group, in spoken order); times come from the transcript by position, so the + * second "and"/"actions" matches the right occurrence (text-matching pairs the wrong one). + * + * node fill-timings.cjs + * + * Reads /plan.json (groups[].words[].text, in spoken order) + transcript.json. + * Writes /plan.json with each word's start/end and each group's in/out filled. + * A group word that can't be matched keeps whatever time it had + is reported (so a typo + * or an added word degrades gracefully instead of silently mis-timing). + */ +const path = require("path"); +const fs = require("fs"); + +const norm = (s) => + String(s == null ? "" : s) + .toLowerCase() + .replace(/[^a-z0-9]/g, ""); +const LOOKAHEAD = 40; // how far past the pointer to search for a group word (skips dropped fillers) + +function fillGroup(g, tw, state) { + const matched = []; + const unmatched = []; + for (const w of g.words || []) { + const target = norm(w.text); + if (!target) { + unmatched.push(w.text); + continue; + } + let found = -1; + for (let j = state.p; j < Math.min(tw.length, state.p + LOOKAHEAD); j++) { + if (norm(tw[j].text) === target) { + found = j; + break; + } + } + if (found >= 0) { + w.start = tw[found].start; + w.end = tw[found].end; + matched.push(w); + state.p = found + 1; + } else { + unmatched.push(w.text); + } + } + if (matched.length) { + const firstStart = +matched[0].start.toFixed(3); + const lastEnd = +matched[matched.length - 1].end.toFixed(3); + // WORD start/end are filled above (deterministic). For the group's DISPLAY window we + // only GUARANTEE it brackets the words (never clip a word) — we do NOT tighten it: + // a deliberately later `out` is the apex HOLD / sentence ACCUMULATION the author set, + // and an earlier `in` is a pre-entry. Preserve both; clamp only if they'd clip. + g.in = g.in == null ? firstStart : Math.min(g.in, firstStart); + g.out = g.out == null ? lastEnd : Math.max(g.out, lastEnd); + } + return { matched: matched.length, unmatched }; +} + +function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) { + console.error("usage: fill-timings.cjs "); + process.exit(1); + } + const planPath = path.join(project, "plan.json"); + const trPath = path.join(project, "transcript.json"); + let plan, trWordsRaw; + try { + plan = JSON.parse(fs.readFileSync(planPath, "utf8")); + } catch { + console.error(`[fill-timings] no plan.json (Cinematic only) — skipping`); + process.exit(0); + } + try { + trWordsRaw = JSON.parse(fs.readFileSync(trPath, "utf8")).words || []; + } catch { + console.error(`[fill-timings] no transcript.json — skipping`); + process.exit(0); + } + const tw = trWordsRaw.filter((w) => w && "start" in w && "end" in w); + if (!tw.length) { + console.error(`[fill-timings] transcript has no word timings — skipping`); + process.exit(0); + } + + const state = { p: 0 }; + let totalMatched = 0, + totalUnmatched = 0; + const groups = plan.groups || []; + // crown_group (if any) is spoken last in the standard templates; process groups in order, crown after. + const ordered = [...groups]; + for (const g of ordered) { + const r = fillGroup(g, tw, state); + totalMatched += r.matched; + totalUnmatched += r.unmatched.length; + if (r.unmatched.length) + console.error( + `[fill-timings] ⚠ ${g.id || "(group)"}: ${r.unmatched.length} word(s) not found in transcript from here: ${r.unmatched.join(" ")}`, + ); + } + if (plan.crown_group) { + const r = fillGroup(plan.crown_group, tw, state); + totalMatched += r.matched; + totalUnmatched += r.unmatched.length; + if (r.unmatched.length) + console.error(`[fill-timings] ⚠ crown_group: ${r.unmatched.join(" ")} not found`); + } + + fs.writeFileSync(planPath, JSON.stringify(plan, null, 2)); + console.log( + `[fill-timings] filled ${totalMatched} word time(s) from transcript by sequence` + + (totalUnmatched + ? `; ${totalUnmatched} unmatched (kept prior time — check those words)` + : `; all matched ✓`), + ); + console.log( + `[fill-timings] group windows now: ${ordered.map((g) => `${g.id || "?"}[${g.in}-${g.out}]`).join(" ")}`, + ); +} +main(); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/fit-fonts.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/fit-fonts.cjs new file mode 100644 index 000000000..483ede2ec --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/fit-fonts.cjs @@ -0,0 +1,158 @@ +#!/usr/bin/env node +/* + * fit-fonts.cjs — shrink any plan.json caption group whose single line would overflow + * its box, BEFORE render (Cinematic mode). Kills the "font too big → off-frame → shrink + * → re-render" overflow round. Estimates rendered width from character count × a + * per-family advance × the group's font-size, compares to the group's box width (its + * plane width, else the frame), and only ever SHRINKS to fit. Approximate by design — + * it prevents gross overflow; check-overflow.cjs remains the exact terminal check. + * + * node fit-fonts.cjs + */ +const path = require("path"); +const fs = require("fs"); + +// rough per-family advance (em per char, caps-ish). Condensed faces are narrow; pixel +// faces wide. Default is conservative. (Estimate only — gate confirms.) +const ADV = { + anton: 0.44, + oswald: 0.45, + teko: 0.4, + "saira stencil one": 0.46, + "bebas neue": 0.4, + "press start 2p": 1.05, + vt323: 0.52, + monoton: 0.62, + "special elite": 0.55, + "jetbrains mono": 0.6, + "space mono": 0.6, + "ibm plex mono": 0.6, + "source code pro": 0.6, + "archivo black": 0.62, + bangers: 0.5, + "bodoni moda": 0.5, + "playfair display": 0.52, + cinzel: 0.62, + "cormorant garamond": 0.45, + fredoka: 0.55, + "baloo 2": 0.55, + "permanent marker": 0.55, + caveat: 0.4, + orbitron: 0.66, + sora: 0.54, + "space grotesk": 0.54, +}; +const DEFAULT_ADV = 0.56; + +const cssVal = (css, prop) => { + const m = String(css || "").match(new RegExp(prop + "\\s*:\\s*([^;}]+)", "i")); + return m ? m[1].trim() : null; +}; +function familyOf(css) { + const v = cssVal(css, "font-family"); + if (!v) return "inter"; + return v + .split(",")[0] + .trim() + .replace(/^['"]|['"]$/g, "") + .toLowerCase(); +} +function sizePxOf(css, H) { + const v = cssVal(css, "font-size"); + if (!v) return null; + let m; + if ((m = v.match(/calc\(\s*([\d.]+)\s*\*\s*var\(--h\)\s*\)/i))) return parseFloat(m[1]) * H; + if ((m = v.match(/([\d.]+)\s*cqh/i))) return (parseFloat(m[1]) / 100) * H; + if ((m = v.match(/([\d.]+)\s*vh/i))) return (parseFloat(m[1]) / 100) * H; + if ((m = v.match(/([\d.]+)\s*px/i))) return parseFloat(m[1]); + return null; +} +function planeWidthPx(plan, plane, W) { + const p = plan.planes && plan.planes[plane]; + const css = p && (typeof p === "string" ? p : p.css); + const v = cssVal(css, "width"); + if (!v) return null; + let m; + if ((m = v.match(/([\d.]+)\s*%/))) return (parseFloat(m[1]) / 100) * W; + if ((m = v.match(/([\d.]+)\s*px/))) return parseFloat(m[1]); + return null; +} +function setFontSize(css, fracOfH) { + const decl = `font-size: calc(${fracOfH.toFixed(3)} * var(--h))`; + if (/font-size\s*:/i.test(css || "")) return String(css).replace(/font-size\s*:\s*[^;}]+/i, decl); + return (css ? css.replace(/\s*$/, "").replace(/;?\s*$/, "; ") : "") + decl + ";"; +} + +function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) { + console.error("usage: fit-fonts.cjs "); + process.exit(1); + } + const planPath = path.join(project, "plan.json"); + let plan; + try { + plan = JSON.parse(fs.readFileSync(planPath, "utf8")); + } catch { + console.error("[fit-fonts] no plan.json (Cinematic only) — skipping"); + process.exit(0); + } + const W = plan.width || 1920, + H = plan.height || 1080; + const groups = (plan.groups || []).concat(plan.crown_group ? [plan.crown_group] : []); + const MARGIN = 0.92; // leave 8% breathing room inside the box + const HERO_MIN_FRAC = 0.18; // a hero below ~0.18·h isn't "big" — keep it punchy, widen its box instead + + let changed = 0; + for (const g of groups) { + const text = (g.words || []).map((w) => w.text).join(" "); + const nChars = text.replace(/\s/g, "").length + (g.words || []).length * 0.5; // glyphs + ~half-space gaps + if (nChars < 1) continue; + const fam = familyOf(g.css); + let adv = ADV[fam] ?? DEFAULT_ADV; + if (/text-transform\s*:\s*uppercase/i.test(g.css || "") || text === text.toUpperCase()) + adv *= 1.05; + const sizePx = sizePxOf(g.css, H); + if (!sizePx) continue; // no explicit size → template default handles it + const boxW = (g.plane ? planeWidthPx(plan, g.plane, W) : null) || W; + const usable = boxW * MARGIN; + // A WRAPPING group only overflows if a SINGLE word is wider than the box (the rest + // wraps). A NOWRAP group must fit its whole line. So don't shrink wrapping narration + // down to one line — only force the whole line for nowrap; else just the longest word. + const nowrap = /white-space\s*:\s*nowrap/i.test(g.css || ""); + const longestWord = (g.words || []).reduce( + (m, w) => Math.max(m, String(w.text || "").replace(/\s/g, "").length), + 0, + ); + const constrainChars = nowrap ? nChars : longestWord; + if (constrainChars < 1) continue; + const estW = constrainChars * adv * sizePx; + if (estW > usable) { + const newPx = usable / (constrainChars * adv); + let frac = Math.max(0.02, newPx / H); + const isHero = g.hero === true || /^(hero|crown)$/i.test(g.plane || ""); + if (isHero && frac < HERO_MIN_FRAC) { + // The hero must stay BIG. If it won't fit its box while staying punchy, the BOX is + // too narrow (the hero should span the subject) — keep it at the floor + flag it, + // rather than silently shrinking the peak into a small word. + frac = HERO_MIN_FRAC; + g.css = setFontSize(g.css, frac); + changed++; + console.log( + `[fit-fonts] ⚠ ${g.id || "(group)"} HERO "${text.slice(0, 28)}" won't fit box ${Math.round(usable)}px while staying big → KEPT at floor ${frac}·h. WIDEN the hero plane (it should span the subject, centered), not shrink the peak.`, + ); + continue; + } + g.css = setFontSize(g.css, frac); + changed++; + console.log( + `[fit-fonts] ${g.id || "(group)"}: "${text.slice(0, 28)}" (${nowrap ? "nowrap line" : "longest word"}) est ${Math.round(estW)}px > box ${Math.round(usable)}px → shrink to ${frac.toFixed(3)}·h (${Math.round(newPx)}px)`, + ); + } + } + if (changed) { + fs.writeFileSync(planPath, JSON.stringify(plan, null, 2)); + console.log(`[fit-fonts] shrank ${changed} group(s) to fit; wrote plan.json`); + } else console.log("[fit-fonts] all groups fit their box — no change"); +} +main(); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/gen-stroke-path.py b/plugins/hyperframes/skills/embedded-captions/scripts/gen-stroke-path.py new file mode 100644 index 000000000..45dc1d862 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/gen-stroke-path.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +"""gen-stroke-path.py — generalized draw-on path generator. + +Lays out ANY word in a single-line (pen-path) SVG font — Hershey/EMS — and emits +one continuous-dash-revealable path `d`. The glyph data IS the pen path, so +stroke-order reveal is exact by construction for any text, no per-word tuning. + +Usage: gen-stroke-path.py +Prints: the path `d` string + layout info on stderr. +""" +import re, sys + +font_path, text, target_w, baseline_y, x0 = ( + sys.argv[1], sys.argv[2], float(sys.argv[3]), float(sys.argv[4]), float(sys.argv[5])) + +svg = open(font_path).read() +glyphs = {} +for m in re.finditer(r']*?horiz-adv-x="([\d.]+)"(?:[^>]*?d="([^"]*)")?', svg): + ch, adv, d = m.group(1), float(m.group(2)), m.group(3) or "" + glyphs[ch] = (adv, d) +# default advance for space +space_adv = glyphs.get(" ", (300, ""))[0] + +# total advance width in font units +total = 0.0 +for ch in text: + total += glyphs.get(ch, (space_adv, ""))[0] +s = target_w / total # scale font-units → px + +out = [] +cursor = 0.0 +NUM = re.compile(r"[-\d.]+") +for ch in text: + adv, d = glyphs.get(ch, (space_adv, "")) + if d: + # polylines only (M/L): transform every coordinate pair + toks = re.findall(r"([ML])\s+([-\d.]+)\s+([-\d.]+)", d) + for cmd, xs, ys in toks: + x = x0 + (cursor + float(xs)) * s + y = baseline_y - float(ys) * s # SVG-font y is UP; flip + out.append(f"{cmd} {x:.1f} {y:.1f}") + cursor += adv + +print(" ".join(out)) +print(f"[gen] chars={len(text)} scale={s:.3f} width={total*s:.0f}px " + f"subpaths={sum(1 for o in out if o.startswith('M'))}", file=sys.stderr) diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/inject-fonts.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/inject-fonts.cjs new file mode 100644 index 000000000..b3994a2a9 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/inject-fonts.cjs @@ -0,0 +1,169 @@ +#!/usr/bin/env node +/* + * inject-fonts.cjs — inline the @font-face blocks each HTML actually uses. + * + * node inject-fonts.cjs [file.html ...] + * + * hyperframes' renderer only auto-supplies its ~18 CANONICAL_FONTS. Every other + * family (Anton, Bangers, VT323, Press Start 2P, …) falls back to a generic font + * unless the HTML ships a local @font-face — even when it "looks fine" locally, + * because that only works when the font happens to be installed as a system font. + * On a clean/offline/CI machine it silently degrades. (hyperframes' own font + * linter flags exactly this: font_family_without_font_face.) + * + * This step reads the bundled font library (modes/standard/fonts/fonts.css — + * base64 woff2, no sub-resources), finds which of those families the HTML uses, + * and inlines just those @font-face blocks into a `, "i"), ""); + + const used = usedFamilies(html); + const already = declaredFamilies(html); + const blocks = []; + const inlined = []; + for (const fam of used) { + if (already.has(fam)) continue; + const lb = lib.get(fam); + if (!lb) continue; // canonical / system / unknown — not ours to supply + blocks.push(...lb); + inlined.push(fam); + } + if (!blocks.length) { + fs.writeFileSync(file, html); + return { file: path.basename(file), inlined: [] }; + } + const style = ``; + // Prefer right after ; fall back to before , then , then prepend. + if (/]*>/i.test(html)) html = html.replace(/]*>/i, (m0) => `${m0}\n${style}`); + else if (/<\/head>/i.test(html)) html = html.replace(/<\/head>/i, `${style}\n`); + else if (/]*>/i.test(html)) + html = html.replace(/]*>/i, (m0) => `${m0}\n${style}`); + else html = style + "\n" + html; + + fs.writeFileSync(file, html); + return { file: path.basename(file), inlined }; +} + +function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) { + console.error("usage: inject-fonts.cjs [file.html ...]"); + process.exit(1); + } + const lib = loadFontLibrary(); + let files = process.argv.slice(3); + if (!files.length) files = ["index.html", "rail.html", "index_fg.html"]; + files = files.map((f) => (path.isAbsolute(f) ? f : path.join(project, f))); + + let touched = 0; + for (const f of files) { + const r = injectInto(f, lib); + if (r == null) continue; + if (r.inlined.length) { + console.log(`[inject-fonts] ${r.file}: embedded ${r.inlined.join(", ")}`); + touched++; + } else console.log(`[inject-fonts] ${r.file}: no non-canonical fonts to embed`); + } + if (!touched) + console.log(`[inject-fonts] nothing embedded (all fonts canonical/system or already declared)`); +} +main(); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/lib-dna.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/lib-dna.cjs new file mode 100644 index 000000000..8ab5eee72 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/lib-dna.cjs @@ -0,0 +1,201 @@ +/* + * lib-dna.cjs — DNA registry loader + scene-token resolver. + * + * A DNA is a complete visual language (type, palette logic, motion grammar, hero + * orchestration) that PARAMETERIZES per scene instead of shipping fixed look files. + * The resolver folds in safe-zones.json's v2 scene measurements (palette / optics / + * lighting) and envelope.json's loudness so the compiled tokens fit THIS clip: + * + * accent — scene-sampled when the DNA says "scene" (clamped readable) + * text shadow — contact shadow cast along the measured light direction + * depth match — embed text blur follows the scene's depth-of-field + * hero amp — entrance amplitude coupled to the spoken word's loudness (RMS) + * + * Everything is read from files written by deterministic scripts — no randomness. + */ +const path = require("path"); +const fs = require("fs"); + +const SKILL_ROOT = path.resolve(__dirname, ".."); +const DNA_DIR = path.join(SKILL_ROOT, "dna"); + +// legacy template names → DNA (back-compat for existing plan.json files) +const LEGACY = { "cinematic-cream": "cream" }; + +function list() { + try { + return fs + .readdirSync(DNA_DIR) + .filter((f) => f.endsWith(".json")) + .map((f) => f.replace(/\.json$/, "")) + .sort(); + } catch { + return []; + } +} + +function load(name) { + const p = path.join(DNA_DIR, `${name}.json`); + if (!fs.existsSync(p)) { + throw new Error(`unknown DNA "${name}". Available: ${list().join(", ")}`); + } + return JSON.parse(fs.readFileSync(p, "utf8")); +} + +function readJson(p) { + try { + return JSON.parse(fs.readFileSync(p, "utf8")); + } catch { + return null; + } +} + +// ── audio impact: where does this window's loudness rank within the clip? ────── +// envelope.json = { hop, rms: [linear 0..1 per hop] } (audio-envelope.cjs) +function heroImpact(project, t0, t1) { + const env = readJson(path.join(project, "envelope.json")); + if (!env || !Array.isArray(env.rms) || !env.rms.length) return 0.6; // neutral default + const hop = env.hop || 0.05; + const i0 = Math.max(0, Math.floor(t0 / hop)), + i1 = Math.min(env.rms.length, Math.ceil(t1 / hop)); + if (i1 <= i0) return 0.6; + const span = i1 - i0; + const mean = (arr, a, b) => { + let s = 0; + for (let i = a; i < b; i++) s += arr[i]; + return s / (b - a); + }; + const target = mean(env.rms, i0, i1); + // percentile of this window vs all same-length windows across the clip + let below = 0, + total = 0; + for (let s = 0; s + span <= env.rms.length; s += Math.max(1, Math.floor(span / 2))) { + total++; + if (mean(env.rms, s, s + span) <= target) below++; + } + return total ? below / total : 0.6; +} + +// ── scene-aware token resolution ─────────────────────────────────────────────── +function resolveTokens(dna, project, opts) { + const sz = readJson(path.join(project, "safe-zones.json")) || {}; + const palette = sz.palette || {}; + const optics = sz.optics || {}; + const lighting = sz.lighting || {}; + + // accent: "scene" → sampled suggestion, else literal. + // accentMode "counter" (loud registers): the accent must FIGHT the scene's + // temperature, not harmonize with it — a sampled warm sienna inside a tungsten room + // camouflages (the warm-on-warm failure a blind review caught across three DNAs). + // Counter-pole = rotate the sampled hue 180° and push saturation/lightness hot. + let accent = + dna.palette.accent === "scene" + ? palette.accentSuggestion || dna.palette.accent_fallback || "#e3c06a" + : dna.palette.accent; + if ( + dna.palette.accentMode === "counter" && + dna.palette.accent === "scene" && + /^#([0-9a-f]{6})$/i.test(accent || "") + ) { + const n = parseInt(accent.slice(1), 16); + let r = (n >> 16) / 255, + g2 = ((n >> 8) & 255) / 255, + b = (n & 255) / 255; + const mx = Math.max(r, g2, b), + mn = Math.min(r, g2, b), + d = mx - mn; + let h = 0; + if (d > 0) { + h = mx === r ? ((g2 - b) / d) % 6 : mx === g2 ? (b - r) / d + 2 : (r - g2) / d + 4; + h *= 60; + if (h < 0) h += 360; + } + h = (h + 180) % 360; + const s = 0.85, + v = 0.92; // hot, acid, readable + const c = v * s, + x = c * (1 - Math.abs(((h / 60) % 2) - 1)), + m = v - c; + const [r2, g3, b2] = + h < 60 + ? [c, x, 0] + : h < 120 + ? [x, c, 0] + : h < 180 + ? [0, c, x] + : h < 240 + ? [0, x, c] + : h < 300 + ? [x, 0, c] + : [c, 0, x]; + const f = (q) => + Math.round((q + m) * 255) + .toString(16) + .padStart(2, "0"); + accent = `#${f(r2)}${f(g3)}${f(b2)}`; + } + + const dark = dna.palette.scheme === "dark-on-light"; + + // contact shadow along the measured light direction + a soft ambient. + // light-on-dark also gets the warm bloom layer when the DNA asks for it. + let shadowParts = []; + if (dna.optics && dna.optics.contactShadow) { + const sd = lighting.shadow || { dx: 0, dy: 3 }; + shadowParts.push(`${sd.dx}px ${sd.dy + 1}px 10px rgba(0,0,0,${dark ? 0.22 : 0.32})`); + } + shadowParts.push(dark ? "0 1px 14px rgba(0,0,0,0.10)" : "0 2px 22px rgba(0,0,0,0.28)"); + if (dna.optics && dna.optics.warmBloom) shadowParts.push("0 0 26px rgba(255,214,160,0.18)"); + const textShadow = shadowParts.join(", "); + + // depth match: embed (bg) text picks up the scene's bokeh; fg/rail stay sharp + const blurPx = (dna.optics && dna.optics.depthMatch && optics.suggestedTextBlurPx) || 0; + const baseFilter = dna.filter && dna.filter !== "none" ? dna.filter : ""; + const filterBg = `${baseFilter}${blurPx ? ` blur(${blurPx}px)` : ""}`.trim() || "none"; + const filterFg = baseFilter || "none"; + + // hero orchestration + loudness coupling — one config PER hero (scarcity is per + // beat/block, not per clip; each hero's amplitude follows ITS spoken loudness) + const heroGroups = (opts && (opts.heroGroups || (opts.heroGroup ? [opts.heroGroup] : []))) || []; + const heroes = heroGroups.map((hg) => { + const impact = heroImpact(project, hg.in, Math.min(hg.in + 0.7, hg.out)); + const amp = +((0.75 + impact * 0.5) * (hg.minor ? 0.7 : 1)).toFixed(3); // 0.75…1.25, minors damped + return { + // spread the DNA's full hero block (entrance/perLetter/glow/breathe/ripple/loom/ + // letterBlur/sheen/echoes/… — new fx fields flow through with no plumbing), + // then the per-hero computed values + ...dna.hero, + entrance: dna.hero.entrance || "emergence", + dimOthers: dna.hero.dimOthers != null ? dna.hero.dimOthers : 0.45, + id: hg.id, + minor: hg.minor === true, + in: hg.in, + out: hg.out, + amp, + heroColor: dna.palette.heroColor === "accent" ? accent : null, + }; + }); + const hero = heroes[0] || null; // back-compat single accessor + + return { + fontFamily: dna.font.family, + capColor: dna.palette.cap_color, + blend: dna.palette.blend, + accent, + textShadow, + filterBg, + filterFg, + blurPx, + motion: dna.motion, + hero, + heroes, + heroCss: (dna.hero && dna.hero.css) || "", + heroCase: (dna.hero && dna.hero.case) || "none", + heroTracking: (dna.hero && dna.hero.tracking) || "0", + dnaCss: dna.css || "", + register: dna.register, + name: dna.name, + }; +} + +module.exports = { LEGACY, list, load, resolveTokens, heroImpact }; diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/make-cinematic.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/make-cinematic.cjs new file mode 100644 index 000000000..fb1d9bacd --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/make-cinematic.cjs @@ -0,0 +1,1205 @@ +#!/usr/bin/env node +/* + * make-cinematic.cjs — compile cinematic.json → plan.json (then make-composition.cjs). + * CINEMATIC MODE, raised to BLOCK level. The agent authors thought-BLOCKS — lines of + * words, which plane each block stacks in, at most one promoted HERO word — and the + * compiler lowers that into the classic plan.json with everything deterministic + * generated, so the Cinematic failure modes seen in the wild become impossible: + * - READING ORDER by construction: lines stack in declaration order inside a flex + * plane (spoken order = visual order; a hero can never sit below later words) + * - timings from the transcript BY SEQUENCE (no hand-copied times; duplicates by position) + * - accumulate-within-block / page-flip-between-blocks rhythm generated: + * lines of a block share the block's out (they accumulate, then clear together + * when the next block's first word lands); the NEXT block enters fresh + * - hero hand-off: the promoted word is lifted OUT of its line, enters as the hero + * (its own plane, BIG) when spoken, holds to the END of its block, exits cleanly + * - fg fallback: safe-zones verdict "fg" → caption_layer:"fg" automatically + * + * node make-cinematic.cjs + * + * cinematic.json schema: + * { + * "template": "cinematic-cream", + * "width": 1920, "height": 1080, "fps": 30, + * "planes": { // layout REGIONS — place them using safe-zones.json + * "narr": "top: 14%; left: 4%; width: 26%;", // string or {css} + * "hero": null // null/absent → auto from safe-zones heroAnchor + * }, + * "blocks": [ + * { "plane": "narr", "lines": [ + * { "words": ["You","need","to"], "css": "font-size: calc(0.05*var(--h)); font-weight:600;" }, + * { "words": ["judge","us","by","the"], "css": "font-size: calc(0.062*var(--h)); font-weight:700;" }, + * { "words": ["actions"], "hero": true, + * "text": "ACTIONS", "css": "font-size: calc(0.24*var(--h)); font-weight:900; text-transform:uppercase;" }, + * { "words": ["that","we","take."], "css": "font-size: calc(0.05*var(--h));" }, + * // per-line escape hatch: "layer":"fg" lifts a line ABOVE the subject matte + * // (use when the occlusion gate reports a context line eaten by the subject) + * { "words": ["over","the","subject"], "layer": "fg" } + * ] }, + * { "plane": "narr", "lines": [ ... next thought ... ] } + * ], + * "tones": { "default": "soft", "hero": "present" } // optional + * } + * Rules: words must match the transcript verbatim in spoken order across all blocks. + * Mark at most ONE line "hero": true per clip (scarcity); its words form the hero + * (usually a single word; "text" overrides the display form). + */ +const path = require("path"); +const fs = require("fs"); + +const norm = (s) => + String(s == null ? "" : s) + .toLowerCase() + .replace(/[^a-z0-9']/g, ""); +const LOOKAHEAD = 40; + +// Authored css WITHOUT a font-size renders at browser-default ~16px (an +// invisible ribbon) and every gate still passes — observed in the cold-start +// E2E. Guarantee the default is present whenever the author omitted it. +function ensureFontSize(css, defaultDecl) { + if (!css) return defaultDecl; + return /font-size\s*:/.test(css) ? css : defaultDecl + " " + css; +} + +function die(m) { + console.error(`[make-cinematic] ${m}`); + process.exit(1); +} + +function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) die("usage: make-cinematic.cjs "); + const cj = path.join(project, "cinematic.json"); + const tj = path.join(project, "transcript.json"); + if (!fs.existsSync(cj)) die(`missing ${cj} — author it first (schema in this header)`); + if (!fs.existsSync(tj)) die(`missing ${tj} — run prepare.sh first`); + const C = JSON.parse(fs.readFileSync(cj, "utf8")); + const tr = (JSON.parse(fs.readFileSync(tj, "utf8")).words || []).filter( + (w) => w && "start" in w && "end" in w, + ); + if (!tr.length) die("transcript has no word timings"); + + // safe-zones: fg verdict + heroAnchor default + let sz = null; + try { + sz = JSON.parse(fs.readFileSync(path.join(project, "safe-zones.json"), "utf8")); + } catch {} + // author override first (borderline scenes: coverage near the line, agitated subject), + // else the safe-zones verdict. + // narration legibility follows the verdict; the HERO is judged separately — it WANTS + // occlusion (~30–55% is the product). fg for the hero is the LAST resort: only when no + // height band achieves ≤62% predicted occlusion (safe-zones heroBands). An explicit + // author caption_layer:"fg" still forces everything front. + const authorFg = C.caption_layer === "fg"; + const narrFg = authorFg || (sz && sz.recommendation === "fg"); + const hb = sz && sz.heroBands; + const heroFeasible = authorFg ? false : hb ? hb.feasible : !narrFg; + const globalFg = narrFg; // narration layer (name kept for the lowering below) + + const W = C.width || 1920, + H = C.height || 1080, + FPS = C.fps || 24; + const blocks = C.blocks || []; + if (!blocks.length) die("blocks is empty"); + + // ── sequence-match every word across blocks/lines ────────────────────────── + let p = 0; + const missing = []; + for (const b of blocks) + for (const ln of b.lines || []) { + ln._w = (ln.words || []).map((text) => { + const t = norm(text); + let f = -1; + for (let j = p; j < Math.min(tr.length, p + LOOKAHEAD); j++) + if (norm(tr[j].text) === t) { + f = j; + break; + } + if (f < 0) { + missing.push(text); + return { text, start: null, end: null }; + } + p = f + 1; + return { text, start: tr[f].start, end: tr[f].end, ti: f }; + }); + } + if (missing.length) + die( + `words not in transcript (in order): ${missing.join(" ")} — lines must match the transcript verbatim`, + ); + + // COMPLETENESS GATE — verbatim is a hard rule, so enforce it at compile time: the + // sequence matcher's lookahead can silently SKIP transcript words the author forgot + // (a real case shipped missing "in our newly released model."). Every transcript word + // must be consumed; the only legitimate drops are filler (um/uh/stutters), declared in + // cinematic.json "drops": ["um", ...]. + { + const consumed = new Set(); + for (const b of blocks) + for (const ln of b.lines || []) for (const w of ln._w) if (w.ti != null) consumed.add(w.ti); + const dropOk = new Set((C.drops || []).map(norm)); + const FILLER = new Set(["um", "uh", "er", "ah", "hmm", "mm"]); + const skipped = tr + .map((w, i) => ({ w, i })) + .filter( + ({ w, i }) => !consumed.has(i) && !dropOk.has(norm(w.text)) && !FILLER.has(norm(w.text)), + ); + if (skipped.length) + die( + `VERBATIM VIOLATION — ${skipped.length} transcript word(s) never authored (the matcher skipped them): ` + + `${skipped.map(({ w }) => `"${w.text}"`).join(" ")} — add them to a line, or declare true filler in "drops": []`, + ); + } + + // text override + multiple words double-renders (override replaces word 1, words + // 2..n still draw) — caught cold by a clean-room agent; illegal for ANY hero line. + for (const b of blocks) + for (const ln of b.lines || []) { + if (ln.hero && ln.text && (ln.words || []).length > 1) + die( + `hero line ["${(ln.words || []).join('" "')}"] has BOTH multiple words and a "text" override — drop "text" (words render verbatim; DNA case applies) or promote a single word.`, + ); + } + + // ── block windows: in = first word −lead; out = page-flip = next block's first word −0.28 (or +1.2 hold) ── + const LEAD = 0.18; + const bw = blocks.map((b) => { + const ws = (b.lines || []).flatMap((l) => l._w); + return { first: Math.min(...ws.map((w) => w.start)), last: Math.max(...ws.map((w) => w.end)) }; + }); + let srcDur = null; + try { + const cp = require("child_process"); + for (const f of ["source.mp4"].concat( + fs.readdirSync(project).filter((x) => /\.(mp4|mov|webm)$/i.test(x)), + )) { + const fp = path.join(project, f); + if (!fs.existsSync(fp)) continue; + const d = parseFloat( + cp.execFileSync( + "ffprobe", + [ + "-v", + "error", + "-show_entries", + "format=duration", + "-of", + "default=nokey=1:noprint_wrappers=1", + fp, + ], + { encoding: "utf8" }, + ), + ); + if (d > 0) { + srcDur = d; + break; + } + } + } catch {} + const DUR = +(srcDur || bw[bw.length - 1].last + 0.6).toFixed(3); + // ── SLOT layout + paging. Lines get FIXED absolute positions (no flex reflow — the + // "lower line jumps up when the upper one clears" bug is impossible by construction). + // Lines accumulate down the plane like a poem; the plane PAGE-FLIPS (all visible lines + // clear together, the next line restarts at the top) only when (a) the plane is full, + // (b) a block sets "flip": true, or (c) a block boundary coincides with a real speech + // pause (≥0.6s). Block windows (bw) are kept only for the hero's hold. + for (let i = 0; i < bw.length; i++) { + bw[i].in = Math.max(0, bw[i].first - LEAD); + bw[i].out = Math.min(DUR - 0.05, Math.min(bw[i].last, DUR - 0.05) + 0.9); + // a block's hold (incl. a LOCKUP's) yields to the NEXT block's entrance — the same + // page-flip semantics columns already have; floor: its own words must finish + if (i + 1 < bw.length) + bw[i].out = Math.max( + Math.min(bw[i].last, DUR - 0.05) + 0.15, + Math.min(bw[i].out, bw[i + 1].first - 0.28), + ); + } + const fracOfLine = (css) => { + const m = (css || "").match(/font-size\s*:\s*calc\(\s*([\d.]+)\s*\*\s*var\(--h\)/); + return m ? +m[1] : 0.05; + }; + const planeBudgetPx = (pk) => { + const css = + (C.planes && + C.planes[pk] && + (typeof C.planes[pk] === "string" ? C.planes[pk] : C.planes[pk].css)) || + ""; + const m = css.match(/height\s*:\s*([\d.]+)%/); + return (m ? +m[1] / 100 : 0.3) * H; + }; + + // ── planes: agent's + auto LOCKUP planes (one per hero block) ─────────────── + // The LOCKUP is the layout answer to "the sentence reads broken around the hero": + // a hero block's lines do NOT scatter into the narration column — kicker, HERO and + // tail compose as ONE bonded ORBIT (context anchored at the hero's edges, diagonal + // read). DEPTH: context EMBEDS (bg) with the hero — one shared depth; per-line + // `layer:"fg"` is the escape hatch when the matte eats a context line (gate tells you). + const planes = {}; + for (const [k, v] of Object.entries(C.planes || {})) { + if (v == null) continue; + let css = typeof v === "string" ? v : v.css || ""; + if (!/text-align\s*:/.test(css)) css += " text-align:center;"; // slot children are absolute; only alignment carries + planes[k] = { css }; + } + // multiple heroes allowed — scarcity is per BLOCK (≤1 per thought), not per clip. + // The LARGEST authored hero is the APEX: it gets the full lockup embed (centered on + // the subject, matte showcase). Smaller heroes are MINOR peaks: they stay IN their + // column's flow as oversized emphasis lines (fg, hero motion at reduced amplitude) — + // not every beat needs the matte showcase; that's what keeps the apex an event. + const allHeroBlocks = []; + blocks.forEach((b, bi) => { + const hs = (b.lines || []).filter((l) => l.hero === true); + if (hs.length > 1) + die( + `block ${bi} has ${hs.length} hero lines — at most ONE hero per block (scarcity = per beat)`, + ); + if (hs.length === 1) + allHeroBlocks.push({ b, bi, ln: hs[0], frac: fracOfLine(hs[0].css) || 0.24 }); + }); + const apexFracAll = Math.max(...allHeroBlocks.map((h) => h.frac), 0); + // placement: "column" keeps even an APEX in its column's flow (the hero bursts the + // column instead of crossing the subject) — the sanctioned alternative to the + // subject-anchored lockup. Author it per hero line: { "hero": true, "placement": "column" }. + const heroBlocks = allHeroBlocks.filter( + (h) => h.frac >= apexFracAll - 1e-6 && (h.ln.placement || "subject") !== "column", + ); + const minorHeroBis = new Set( + allHeroBlocks + .filter((h) => h.frac < apexFracAll - 1e-6 || (h.ln.placement || "subject") === "column") + .map((h) => h.bi), + ); + const columnApexBis = new Set( + allHeroBlocks + .filter((h) => h.frac >= apexFracAll - 1e-6 && (h.ln.placement || "subject") === "column") + .map((h) => h.bi), + ); + if (minorHeroBis.size) + console.log( + `[make-cinematic] ${minorHeroBis.size} minor hero(es) stay in the column flow (apex gets the lockup embed)`, + ); + const lockupName = (bi) => `lockup-b${bi}`; + const lockupTemplate = + C.planes && C.planes.lockup + ? typeof C.planes.lockup === "string" + ? C.planes.lockup + : C.planes.lockup.css + : null; + delete planes.lockup; // template only — not a real plane + for (const hRef of heroBlocks) { + const a = sz && sz.heroAnchor && sz.heroAnchor.plane; + // band pick: target ~40% occlusion AND a band the DNA's text can survive on + // (skip bright bands when luma data exists) — heroAnchor.yPct is the fallback + let heroTop = a ? a.yPct : 30; + if (hb && hb.profile && hb.profile.length) { + const ok = hb.profile.filter( + (b2) => b2.occPct >= 12 && b2.occPct <= 62 && (b2.bgLuma == null || b2.bgLuma <= 165), + ); + const pool = ok.length ? ok : hb.profile; + const best = pool.reduce((x, y) => + Math.abs(y.occPct - 40) < Math.abs(x.occPct - 40) ? y : x, + ); + heroTop = +(best.topPct + 6.5).toFixed(1); + } + const heroFrac = (hRef.ln.css || "").match(/calc\(\s*([\d.]+)\s*\*\s*var\(--h\)/); + // the lockup is taller than the hero alone (context above+below) — anchor so the + // HERO band (not the plane top) lands on the target, then clamp so the WHOLE + // lockup (pre + hero + post) stays on frame + const heroIdx2 = (hRef.b.lines || []).indexOf(hRef.ln); + const preH = (hRef.b.lines || []) + .filter((l, i) => l !== hRef.ln && i < heroIdx2) + .reduce( + (s, l) => + s + (fracOfLine(l.css) * 100 * 1.32 + Math.max(1.6, fracOfLine(l.css) * 100 * 0.38)), + 0, + ); + const postH = (hRef.b.lines || []) + .filter((l, i) => l !== hRef.ln && i > heroIdx2) + .reduce( + (s, l) => + s + (fracOfLine(l.css) * 100 * 1.32 + Math.max(1.6, fracOfLine(l.css) * 100 * 0.38)), + 0, + ); + const heroHpct = (heroFrac ? +heroFrac[1] : 0.24) * 100 * 1.12; + const totalH = preH + heroHpct + postH; + let top = +Math.max(2, Math.min(96 - totalH, heroTop - heroHpct / 2 - preH)).toFixed(1); + const css = lockupTemplate + ? lockupTemplate.replace(/top:\s*[\d.]+%/, `top: ${top}%`) + : a + ? `top: ${top}%; left: ${a.xPct}%; width: ${a.wPct}%; text-align: center;` + : `top: ${top}%; left: 6%; width: 88%; text-align: center;`; + planes[lockupName(hRef.bi)] = { css }; + hRef.plane = lockupName(hRef.bi); + } + // legacy alias: an author-defined "hero" plane positions the FIRST lockup + if (planes.hero) { + if (heroBlocks.length) { + planes[lockupName(heroBlocks[0].bi)] = planes.hero; + } + delete planes.hero; + } + + // ── PER-PLANE LEGIBILITY COMPENSATION ──────────────────────────────────── + // The DNA fixes hue + blend; the SCENE decides whether that survives. Match each + // plane to its best-overlapping measured zone and ladder the treatment: + // luma > 150 → opaque (blend:normal) + strong tight scrim — screen/blend washes out + // luma 95–150 → keep the DNA blend, strengthen the glyph scrim + const planeComp = {}; + if (sz && sz.zones) { + const zlist = Object.entries(sz.zones).filter(([, z]) => z && z.meanLuma != null); + for (const [pk, pv] of Object.entries(C.planes || {})) { + const css0 = typeof pv === "string" ? pv : (pv || {}).css || ""; + const lm = css0.match(/left:\s*([\d.]+)%/), + wm = css0.match(/width:\s*([\d.]+)%/); + if (!lm || !wm) continue; + const a0 = +lm[1], + a1 = a0 + +wm[1]; + let best = null, + bestOv = 0; + for (const [, z] of zlist) { + const ov = Math.min(a1, z.xPct + z.wPct) - Math.max(a0, z.xPct); + if (ov > bestOv) { + bestOv = ov; + best = z; + } + } + if (!best) continue; + // gate on the time PEAK too — a dark wall swept by a bright moving object + // (handheld drift, screens) averages "clean" but peaks hot, and text there + // washes out exactly when the bright thing passes (real cold-start case) + const pkL = best.peakLuma != null ? best.peakLuma : best.meanLuma; + if (best.meanLuma > 150 || pkL > 175) + planeComp[pk] = + " mix-blend-mode: normal; text-shadow: 0 1px 6px rgba(0,0,0,.65), 0 2px 16px rgba(0,0,0,.4);"; + else if (best.meanLuma > 95 || pkL > 135) + planeComp[pk] = " text-shadow: 0 1px 5px rgba(0,0,0,.6), 0 2px 14px rgba(0,0,0,.35);"; + if (planeComp[pk]) + console.log( + `[make-cinematic] plane "${pk}" zone luma ${best.meanLuma} (peak ${pkL}) → legibility compensation (${best.meanLuma > 150 || pkL > 175 ? "opaque+scrim" : "scrim"})`, + ); + } + } + // lockup context shares the hero band's luma + const bandLuma = sz && sz.heroAnchor && sz.heroAnchor.bandLuma; + const lockupComp = + bandLuma != null && bandLuma > 150 + ? " mix-blend-mode: normal; text-shadow: 0 1px 6px rgba(0,0,0,.65), 0 2px 16px rgba(0,0,0,.4);" + : bandLuma != null && bandLuma > 95 + ? " text-shadow: 0 1px 5px rgba(0,0,0,.6), 0 2px 14px rgba(0,0,0,.35);" + : ""; + + // ── lower to classic plan.json groups (slot layout + per-plane paging) ───── + const tones = C.tones || {}; + let dnaBodyLayer = null; + try { + const dnaLib0 = require("./lib-dna.cjs"); + const dn0 = C.dna || (C.template ? dnaLib0.LEGACY[C.template] : "cream"); + if (dn0) { + const d0 = dnaLib0.load(dn0); + dnaBodyLayer = d0.bodyLayer || null; + // category lock (symmetric): column is every classic DNA's home today, + // so this only fires if a future DNA declares a different home. + if (d0.deliveries && d0.deliveries.home && d0.deliveries.home !== "column") + console.warn( + `[make-cinematic] WARN: DNA "${dn0}" declares home="${d0.deliveries.home}" — cinematic use is cross-category and unvalidated.`, + ); + } + } catch (e) { + if (e.message && e.message.includes("does not support")) throw e; + } + const groups = []; + const heroRefs = heroBlocks; // [{b, bi, ln, plane}] + const isHeroBlock = new Set(heroBlocks.map((h) => h.bi)); + const flat = []; + blocks.forEach((b, bi) => { + const heroIdx = isHeroBlock.has(bi) ? (b.lines || []).findIndex((l) => l.hero === true) : -1; + (b.lines || []).forEach((ln, li) => { + if (ln.hero === true && isHeroBlock.has(bi)) return; // APEX heroes slot into their lockup below + flat.push({ + b, + bi, + ln, + plane: heroIdx >= 0 ? lockupName(bi) : b.plane, + lockupPos: heroIdx >= 0 ? (li < heroIdx ? "pre" : "post") : null, + isMinorHero: ln.hero === true && minorHeroBis.has(bi), // minor peak rides its column + first: Math.min(...ln._w.map((w) => w.start)), + lastEnd: Math.min(Math.max(...ln._w.map((w) => w.end)), DUR - 0.05), + frac: fracOfLine(ln.css), + }); + }); + }); + // size sanity: narration below 0.05·h is whisper-tier (36px at 720p) — warn loudly + { + const tiny = flat.filter((l) => !l.isMinorHero && l.frac > 0 && l.frac < 0.05); + if (tiny.length) + console.log( + `[make-cinematic] ⚠ ${tiny.length} narration line(s) authored below 0.05·h (whisper tier) — body narration wants 0.055–0.07·h: ${tiny + .slice(0, 3) + .map((l) => `"${l.ln.words.slice(0, 3).join(" ")}…"`) + .join(" ")}`, + ); + } + // RATIO LOCK — poster lockup typography: context is sized FROM the hero, the way a + // title system locks its eyebrow/tagline (kicker & tail ≈ 0.26× the hero height, + // clamped to [0.05, 0.085]·h). Hero dominance is structural (~4× height + weight + // contrast), so the old mass-rule downscale is gone — whisper-small context was the + // disease, not the cure. Too MUCH context is a line-count problem, never a size one. + for (const hRef of heroRefs) { + const ctx = flat.filter((l) => l.bi === hRef.bi); + if (!ctx.length) continue; + const heroFracV = fracOfLine(hRef.ln.css || "") || 0.24; + const ratioFrac = +Math.min(0.085, Math.max(0.05, heroFracV * 0.26)).toFixed(4); + if (ctx.length > 3) + console.log( + `[make-cinematic] ⚠ lockup-b${hRef.bi} has ${ctx.length} context lines — a lockup wants kicker + hero + tail; move narration to the column (a leading clause can be its own block)`, + ); + const moved = ctx.filter((l) => Math.abs(l.frac - ratioFrac) > 0.002).length; + ctx.forEach((l) => { + l.ln.css = (l.ln.css || "").replace( + /font-size\s*:\s*[^;]+/, + `font-size: calc(${ratioFrac} * var(--h))`, + ); + l.frac = ratioFrac; + }); + if (moved) + console.log( + `[make-cinematic] lockup-b${hRef.bi}: context RATIO-LOCKED to 0.26×hero → ${ratioFrac}·h (${moved} line(s) re-sized)`, + ); + } + const byPlane = {}; + flat.forEach((l) => { + (byPlane[l.plane] = byPlane[l.plane] || []).push(l); + }); + // make sure a lockup whose block has NO context lines still exists in the loop + for (const hRef of heroRefs) if (!byPlane[hRef.plane]) byPlane[hRef.plane] = []; + for (const [pk, ls] of Object.entries(byPlane)) { + const isLockup = /^lockup-b/.test(pk); + const budget = isLockup ? H : planeBudgetPx(pk); // a lockup is ONE composition — never paginate inside it + const hRef = isLockup ? heroRefs.find((h) => h.plane === pk) : null; + const heroH = hRef ? (fracOfLine(hRef.ln.css || "") || 0.24) * H * 1.12 + 12 : 0; + // ORBIT estimate: where do the hero's left/right edges land inside the (frame-wide, + // centered) lockup plane — kicker hangs off the left edge, tail off the right + let orbit = null; + if (hRef) { + const disp = String(hRef.ln.text || (hRef.ln.words || []).join(" ")); + const fpx = (fracOfLine(hRef.ln.css || "") || 0.24) * H; + const estW = Math.min( + W * 0.94, + Math.max(fpx * 1.2, disp.replace(/\s/g, "").length * fpx * 0.6), + ); + const planeCss0 = (planes[pk] && planes[pk].css) || ""; + const _pl = ((planeCss0.match(/left:\s*([\d.]+)%/) || [0, 0])[1] * W) / 100; + const pw = ((planeCss0.match(/width:\s*([\d.]+)%/) || [0, 100])[1] * W) / 100; + const heroLeft = Math.max(0, (pw - estW) / 2); + // side-aware: anchor context to the CLEANER side of THIS hero's window — the + // kicker/tail must land on scene, not on a large/moving subject + let side = (sz && sz.subject && sz.subject.clearerSide) || "left"; + try { + const hin = Math.min(...hRef.ln._w.map((w) => w.start)); + const win = (sz.windows || []).find((w2) => hin >= w2.in - 0.3 && hin <= w2.out + 0.3); + if (win && win.clearerSide) side = win.clearerSide; + } catch {} + orbit = { + left: Math.round(heroLeft), + right: Math.round(Math.max(0, pw - heroLeft - estW)), + maxW: Math.round(Math.min(estW * 0.75, pw * 0.55)), + side, + }; + } + const pages = []; + let page = [], + slot = 0; + for (const l of ls) { + // the HERO occupies its slot between pre- and post-context, in spoken order + if (hRef && hRef.slotPx == null && l.lockupPos === "post") { + hRef.slotPx = Math.round(slot); + slot += heroH; + } + const lineH = l.frac * H * 1.32 + Math.max(12, Math.round(l.frac * H * 0.38)); // ink overflows the 1.0 line-box (+shadows) — breathe in proportion to the type + const prev = page[page.length - 1]; + const pauseGap = prev ? l.first - prev.lastEnd : 0; + const boundary = prev && l.bi !== prev.bi; + // a block carrying a COLUMN-PLACED apex is one composition — never split it on + // budget (the oversized hero legitimately exceeds the column's page height) + const unbreakable = columnApexBis.has(l.bi) && prev && prev.bi === l.bi; + if ( + page.length && + !unbreakable && + (slot + lineH > budget || (boundary && l.b.flip === true) || (boundary && pauseGap >= 0.6)) + ) { + pages.push(page); + page = []; + slot = 0; + } + l.slotPx = Math.round(slot); + if (isLockup) l._orbit = orbit; + slot += lineH; + page.push(l); + } + if (hRef && hRef.slotPx == null) { + hRef.slotPx = Math.round(slot); + } // hero is the block's last line + if (page.length) pages.push(page); + pages.forEach((pg, pi) => { + const nextFirst = pi + 1 < pages.length ? pages[pi + 1][0].first : null; + const maxEnd = Math.max(...pg.map((l) => l.lastEnd)); + let out = + nextFirst != null + ? Math.max(maxEnd + 0.01, Math.min(DUR - 0.05, nextFirst - 0.28)) + : Math.min(DUR - 0.05, maxEnd + 1.2); + // THE LOCKUP OWNS THE FRAME: a sidebar page must not linger into an apex + // lockup's window (its kicker/tail can land in the same zone → text-on-text) + if (!isLockup) + for (const hRef2 of heroRefs) { + const lkIn = bw[hRef2.bi].first - 0.18; + if (lkIn > maxEnd - 0.2 && lkIn < out) + out = Math.max(maxEnd + 0.01, Math.min(out, lkIn - 0.28)); + } + pg.forEach((l, li) => { + l.pageIdx = pi; + if (!isLockup) + for (const hRef2 of heroRefs) { + const lkOut = bw[hRef2.bi].out; + const lkIn2 = bw[hRef2.bi].first - 0.18; + const enter0 = Math.max(0, l.first - LEAD); + if (enter0 > lkIn2 && enter0 < lkOut) + l._delayIn = +Math.min(l.first, Math.max(enter0, lkOut - 0.2)).toFixed(3); + } + // a LOCKUP fades as ONE unit: context lines exit with the hero (block window), + // never linger on page timing after the hero has left + l.out = l.lockupPos ? +Math.min(out, bw[l.bi].out).toFixed(3) : +out.toFixed(3); + l.in = l._delayIn != null ? l._delayIn : +Math.max(0, l.first - LEAD).toFixed(3); + // first line of a NEW page: don't enter before the old page has begun clearing + if (li === 0 && pi > 0) + l.in = +Math.min(l.first, Math.max(l.first - LEAD, pages[pi - 1][0].out - 0.02)).toFixed( + 3, + ); + }); + }); + } + let gid = 0; + for (const l of flat) { + l.gid = l.isMinorHero ? `h-${l.bi}` : `b${l.bi}-l${gid++}`; + // depth model: lockup CONTEXT embeds (bg) WITH the hero — the orbit anchors it + // beside the head/shoulder so it reads on the scene, one shared depth; narration + // columns embed too unless the DNA declares bodyLayer:"fg" (loud's announce-style). + // Minor heroes ride their column in FRONT. Per-line layer overrides any default. + // ORBIT depth: lockup context lands BESIDE the subject (kicker/tail at the hero's + // edges) — so it EMBEDS (bg) like the hero; the whole composition shares one depth. + // fg remains for: minor heroes (column emphasis), a DNA's bodyLayer (loud announces), + // scene verdict FG (globalFg), and explicit per-line "layer" overrides. + const defLayer = l.isMinorHero ? "fg" : dnaBodyLayer || "bg"; + groups.push({ + id: l.gid, + plane: l.plane, + layer: globalFg ? "fg" : l.ln.layer || l.b.layer || defLayer, + ...(l.isMinorHero ? { hero: true, ...(columnApexBis.has(l.bi) ? {} : { minor: true }) } : {}), + tone: l.isMinorHero ? tones.hero || "present" : l.ln.tone || tones.default || "soft", + allow_overlap: true, + // a MINOR hero holds only to the end of ITS thought (+a breath) — lingering with + // the page through a long pause leaves it co-visible with the next apex + in: l.in, + out: l.isMinorHero ? +Math.min(l.out, bw[l.bi].out + 0.3).toFixed(3) : l.out, + // carry the PLANE's text-align onto each slotted line (absolute children don't + // reliably inherit through the template's .cap centering — authored "right edge + // hugs the silhouette" was silently centered) + css: + (l.lockupPos && l._orbit + ? (l.ln.anchor || (l.lockupPos === "pre" ? l._orbit.side : l._orbit.side)) === "left" + ? `position:absolute;top:${l.slotPx}px;left:${l._orbit.left}px;right:auto;max-width:${l._orbit.maxW}px;text-align:left; ` + : `position:absolute;top:${l.slotPx}px;right:${l._orbit.right}px;left:auto;max-width:${l._orbit.maxW}px;text-align:right; ` + : `position:absolute;left:0;right:0;top:${l.slotPx}px; ` + + (() => { + const pc = + (C.planes && + C.planes[l.plane] && + (typeof C.planes[l.plane] === "string" + ? C.planes[l.plane] + : C.planes[l.plane].css)) || + ""; + const ta = pc.match(/text-align\s*:\s*(left|right|center)/); + return ta ? `text-align:${ta[1]}; ` : ""; + })()) + + ensureFontSize(l.ln.css, "font-size: calc(0.05 * var(--h)); font-weight: 600;") + + (l.lockupPos ? lockupComp : planeComp[l.plane] || ""), + words: l.ln._w.map((w, wi2) => ({ + // minor/column heroes honor the display-form override too (single-word lines) + text: l.isMinorHero && l.ln.text && wi2 === 0 && l.ln._w.length === 1 ? l.ln.text : w.text, + start: w.start, + end: Math.min(w.end, DUR - 0.05), + ti: w.ti, + })), + }); + } + for (const hRef of heroRefs) { + const { bi, ln } = hRef; + const w0 = ln._w[0]; + groups.push({ + id: `h-${bi}`, + hero: true, + plane: hRef.plane, + layer: ln.layer || (heroFeasible ? "bg" : "fg"), + tone: tones.hero || "present", + allow_overlap: true, + in: +Math.max(0, w0.start - 0.02).toFixed(3), + out: +bw[bi].out.toFixed(3), + css: + `position:absolute;left:0;right:0;top:${hRef.slotPx || 0}px; text-align:center; ` + + ensureFontSize( + ln.css, + "font-size: calc(0.24 * var(--h)); font-weight: 900; white-space: nowrap;", + ), // case/tracking come from the DNA's hero treatment + words: ln._w.map((w, i) => ({ + text: i === 0 && ln.text ? ln.text : w.text, + start: w.start, + end: Math.min(w.end, DUR - 0.05), + ti: w.ti, + })), + }); + if (!heroFeasible) + console.log( + "[make-cinematic] no hero band ≤62% predicted occlusion → hero rendered in FRONT (last resort)", + ); + } + // scarcity spacing: heroes must breathe apart (≥ a beat between windows) + const heroGs = groups.filter((g) => g.hero === true).sort((a, b) => a.in - b.in); + for (let i = 1; i < heroGs.length; i++) { + const gap = heroGs[i].in - heroGs[i - 1].out; + if (gap < 0.6) + console.log( + `[make-cinematic] ⚠ heroes "${heroGs[i - 1].words[0].text}" and "${heroGs[i].words[0].text}" are only ${gap.toFixed(2)}s apart — peaks need a beat of air between them (consider demoting one to an emphasis line)`, + ); + } + // proximity: narration planes should HUG the silhouette (the embed reads as in-scene + // only when typography interacts with the subject) — warn on far-parked planes. + if (sz && sz.subject) { + for (const [pk2, pv] of Object.entries(C.planes || {})) { + if (/^lockup/.test(pk2) || pk2 === "hero" || pv == null) continue; + const css2 = typeof pv === "string" ? pv : pv.css || ""; + const lm = css2.match(/left\s*:\s*([\d.]+)%/), + wm = css2.match(/width\s*:\s*([\d.]+)%/); + if (!lm || !wm) continue; + const pl = +lm[1], + pr = +lm[1] + +wm[1]; + const gap = + pr <= sz.subject.colMinPct + ? sz.subject.colMinPct - pr + : pl >= sz.subject.colMaxPct + ? pl - sz.subject.colMaxPct + : 0; + if (gap > 12) + console.log( + `[make-cinematic] ⚠ plane "${pk2}" sits ${gap.toFixed(0)}% away from the silhouette — embeds read in-scene when text HUGS the subject (use safe-zones zones.hugLeft/hugRight, gap 2–6%)`, + ); + } + } + const plan = { + mode: "template", + dna: C.dna || (C.template ? undefined : "cream"), // canonical: name a DNA; default cream + template: C.template || "cinematic-cream", + compiled_by: "make-cinematic.cjs", + width: W, + height: H, + fps: FPS, + duration: DUR, + ...(globalFg && (!heroRefs.length || !heroFeasible) ? { caption_layer: "fg" } : {}), // mixed narration-fg + hero-bg → per-group layers (hybrid render) + planes: Object.fromEntries(Object.entries(planes).map(([k, v]) => [k, { css: v.css }])), + groups, + }; + fs.writeFileSync(path.join(project, "plan.json"), JSON.stringify(plan, null, 2)); + console.log( + `[make-cinematic] ${blocks.length} block(s) → ${groups.length} group(s)` + + `${heroRefs.length ? `, ${heroRefs.length} hero(es): ${heroRefs.map((h) => `"${h.ln.text || h.ln.words[0]}"`).join(" · ")} (each holds to its block end, lockup-composed)` : ""}` + + `${globalFg ? ", caption_layer=fg (safe-zones verdict)" : ""}, canvas ${DUR}s`, + ); + // straight into the existing template compiler + const cp2 = require("child_process"); + let r = cp2.spawnSync("node", [path.join(__dirname, "make-composition.cjs"), project], { + stdio: "inherit", + }); + if ((r.status || 0) !== 0) process.exit(r.status); + + // ── RE-SLOT pass (real measurement). Compile-time slots assume each line renders as + // ONE visual line; a narrow plane WRAPS long lines and the next slot overlaps the + // wrapped tail. Measure every page's REAL text heights in Chromium and re-stack. + { + const textBoxH = (c) => { + const ws = (c.words || []).filter((w) => (w.opacity ?? 1) > 0.05 && w.w > 0); + if (!ws.length) return c.cap_bbox ? c.cap_bbox.h : 0; + return Math.max(...ws.map((w) => w.y + w.h)) - Math.min(...ws.map((w) => w.y)); + }; + const pagesByKey = {}; + for (const l of flat) { + const key = l.plane + "|" + (l.pageIdx || 0); + (pagesByKey[key] = pagesByKey[key] || { t: +(l.out - 0.1).toFixed(2), lines: [] }).lines.push( + l, + ); + } + // the HERO is a real member of its lockup's stack — re-slot must move it (and the + // post-context below it) from MEASURED heights, or a wrapped pre-line / raised hero + // font reopens the very overlap this pass exists to prevent + for (const hRef of heroRefs) { + const key = hRef.plane + "|0"; + const hg2 = groups.find((g2) => g2.id === `h-${hRef.bi}`); + if (!hg2) continue; + (pagesByKey[key] = pagesByKey[key] || { + t: +(hg2.out - 0.1).toFixed(2), + lines: [], + }).lines.push({ + gid: hg2.id, + slotPx: hRef.slotPx || 0, + frac: fracOfLine(hg2.css) || 0.24, + _hero: true, + }); + } + const times = [...new Set(Object.values(pagesByKey).map((pg) => pg.t))]; + if (times.length) { + cp2.spawnSync( + "node", + [path.join(__dirname, "measure-layout.cjs"), project, ...times.map(String)], + { stdio: "ignore", timeout: 120000 }, + ); + let lay = null; + try { + lay = JSON.parse(fs.readFileSync(path.join(project, "_layout.json"), "utf8")); + } catch {} + if (lay && lay.samples) { + let changes = 0; + for (const pg of Object.values(pagesByKey)) { + const sample = lay.samples.reduce((a, b) => + Math.abs(b.t - pg.t) < Math.abs(a.t - pg.t) ? b : a, + ); + if (!sample || Math.abs(sample.t - pg.t) > 0.3) continue; + const ordered = [...pg.lines].sort((a, b) => a.slotPx - b.slotPx); + let top = 0; + for (const l of ordered) { + const cap = (sample.caps || []).find((c) => c.id === l.gid); + const realH = cap + ? (cap.cap_bbox && cap.cap_bbox.h) || textBoxH(cap) + : l.frac * H * 1.25; + if (Math.abs(top - l.slotPx) > 3) { + const g = groups.find((g2) => g2.id === l.gid); + g.css = g.css.replace(/top:\s*-?[\d.]+px/, "top:" + Math.round(top) + "px"); + if (l._hero) { + const hr = heroRefs.find((h) => `h-${h.bi}` === l.gid); + if (hr) hr.slotPx = Math.round(top); + } + l.slotPx = Math.round(top); + changes++; + } + top += + (realH || l.frac * H * 1.25) + Math.max(12, Math.round((l.frac || 0.05) * H * 0.38)); // box is lh1.12 — contains its own ink + } + } + if (changes) { + console.log( + `[make-cinematic] re-slot: ${changes} line(s) re-stacked from MEASURED heights (wrapped lines accounted)`, + ); + fs.writeFileSync(path.join(project, "plan.json"), JSON.stringify(plan, null, 2)); + cp2.spawnSync("node", [path.join(__dirname, "make-composition.cjs"), project], { + stdio: "ignore", + }); + try { + fs.unlinkSync(path.join(project, "_layout.json")); + } catch {} + } + } + } + } + + // ── HERO post-pass (real measurement, up to 2 re-emits) — runs PER HERO ───── + // (a) SIZE: a timid hero is the #1 quality kill. If the authored font leaves >25% + // of the usable width unused, raise it to the width-fit maximum (DNA sizeRange cap). + // (b) CLEARANCE vs OTHER planes: the hero band must not overlap caps outside its own + // lockup (its own context is composed around it by the slot layout). On a hit, + // shift the whole LOCKUP plane vertically. + // (c) LOCKUP RE-STACK: a size change moves the hero's height — restack the lockup's + // slots from measured heights so post-context stays bonded BELOW the hero. + // HERO words never wrap — a mid-word break ("Watermelo|n") is wrong in every case, + // and author css REPLACES the default (which silently lost white-space:nowrap). + // Forced here so no authoring path can drop it; centered nowrap text overflows a + // narrow plane SYMMETRICALLY, which also keeps width-fit honest (it measures the + // true single-line width instead of a wrapped row). + // narration lines whipped away by a mid-sentence page-flip are the same disease + // in mild form — warn (a deliberate quick beat is legal, so no die) + for (const g of groups) + if (!g.hero && g.words && g.words.length && g.out - g.in < 0.6) { + console.log( + `[make-cinematic] ⚠ line "${g.words + .map((w) => w.text) + .join(" ") + .slice( + 0, + 28, + )}" visible only ${(g.out - g.in).toFixed(2)}s (page-flip) — merge micro-lines or give the plane more height so the page holds`, + ); + } + // MIN DWELL — a peak on screen <0.5s is unreadable ("stars" shipped at 0.47s and + // the user couldn't read it). Merge the block with the next (one thought), promote + // a word with room, or demote to an emphasized line. <0.8s gets a loud warning. + for (const g of groups) + if (g.hero) { + const dwell = g.out - g.in; + if (dwell < 0.5) + die( + `hero "${(g.words[0] || {}).text}" is on screen only ${dwell.toFixed(2)}s (<0.5s readability floor) — merge its block with the next, promote a word with more room, or demote it to an emphasized (non-hero) line.`, + ); + if (dwell < 0.8) + console.log( + `[make-cinematic] ⚠ hero "${(g.words[0] || {}).text}" dwell ${dwell.toFixed(2)}s is tight (<0.8s) — consider merging blocks so the peak can breathe`, + ); + } + { + let nwChanged = false; + for (const g of groups) + if (g.hero && !/white-space\s*:\s*nowrap/.test(g.css || "")) { + g.css = (g.css || "") + " white-space: nowrap;"; + nwChanged = true; + } + if (nwChanged) { + fs.writeFileSync(path.join(project, "plan.json"), JSON.stringify(plan, null, 2)); + require("child_process").spawnSync( + "node", + [path.join(__dirname, "make-composition.cjs"), project], + { stdio: "ignore" }, + ); + } + } + const fracOf = (css) => { + const m = (css || "").match(/font-size\s*:\s*calc\(\s*([\d.]+)\s*\*\s*var\(--h\)/); + return m ? +m[1] : null; + }; + const setFrac = (css, f) => + (css || "").replace( + /font-size\s*:\s*[^;]+/, + "font-size: calc(" + f.toFixed(3) + " * var(--h))", + ); + const textBox = (c) => { + const ws = (c.words || []).filter((w) => (w.opacity ?? 1) > 0.05 && w.w > 0); + if (!ws.length) return c.cap_bbox; + const x0 = Math.min(...ws.map((w) => w.x)), + x1 = Math.max(...ws.map((w) => w.x + w.w)); + const y0 = Math.min(...ws.map((w) => w.y)), + y1 = Math.max(...ws.map((w) => w.y + w.h)); + return { x: x0, y: y0, w: x1 - x0, h: y1 - y0 }; + }; + let dnaSizeCap = 0.34, + dnaHeroCase = "none"; + try { + const dnaLib2 = require("./lib-dna.cjs"); + const dn = plan.dna || dnaLib2.LEGACY[plan.template]; + if (dn) { + const dj = dnaLib2.load(dn); + if (dj.hero && dj.hero.sizeRange) dnaSizeCap = dj.hero.sizeRange[1]; + if (dj.hero) dnaHeroCase = dj.hero.case || "none"; + } + } catch {} + // the APEX (largest authored hero) gets the width-fit raise; minor heroes keep their + // authored size — inter-hero hierarchy is a deliberate choice, not timidity + const apexFrac = Math.max( + ...heroRefs.map((h) => fracOf((groups.find((g) => g.id === `h-${h.bi}`) || {}).css) || 0), + 0, + ); + for (const hRef of heroRefs) { + const heroG = groups.find((g) => g.id === `h-${hRef.bi}`); + if (!heroG) continue; + const isApex = (fracOf(heroG.css) || 0) >= apexFrac - 1e-6; + const lockupMates = groups.filter((g) => g.plane === hRef.plane && g.id !== heroG.id); + // hero size changed → context follows the 0.26 poster ratio, and its orbit + // max-width scales WITH the font (a stale max-width wraps re-locked context + // into multi-row towers that blow the stack past the frame) + const relockMates = (hf) => { + const rf = +Math.min(0.085, Math.max(0.05, hf * 0.26)).toFixed(4); + for (const m of lockupMates) { + const mf = fracOf(m.css); + if (!mf || Math.abs(mf - rf) <= 0.002) continue; + const scale = rf / mf; + m.css = setFrac(m.css, rf).replace( + /max-width:\s*([\d.]+)px/, + (s2, px) => "max-width:" + Math.round(+px * scale) + "px", + ); + } + }; + const measure = () => { + const midT = ((heroG.in + Math.min(heroG.out, heroG.in + 1.0)) / 2).toFixed(2); + const endT = Math.max(+midT + 0.05, heroG.out - 0.12).toFixed(2); + cp2.spawnSync( + "node", + [path.join(__dirname, "measure-layout.cjs"), project, String(midT), String(endT)], + { stdio: "ignore", timeout: 90000 }, + ); + try { + const ss = JSON.parse(fs.readFileSync(path.join(project, "_layout.json"), "utf8")).samples; + const near = (t) => + ss.reduce((a, b) => (Math.abs(b.t - t) < Math.abs((a ? a.t : 1e9) - t) ? b : a), null); + return { caps: (near(+midT) || {}).caps || [], capsEnd: (near(+endT) || {}).caps || [] }; + } catch { + return null; + } + }; + let didRaise = false; + for (let pass = 0; pass < 5; pass++) { + const m0 = measure(); + if (!m0) break; + const caps = m0.caps, + capsEnd = m0.capsEnd && m0.capsEnd.length ? m0.capsEnd : m0.caps; + const hc0 = caps.find((c) => c.id === heroG.id); + if (!hc0 || !hc0.cap_bbox) break; + const hc = { ...hc0, cap_bbox: textBox(hc0) }; + const mateIds = new Set(lockupMates.map((m) => m.id)); + const others = caps + .filter( + (c) => + c.id !== heroG.id && + !mateIds.has(c.id) && + !/-glow$/.test(c.id || "") && + c.cap_bbox && + c.opacity > 0.05, + ) + .map((c) => ({ ...c, cap_bbox: textBox(c) })); + const maxW = W * 0.94; + const f0 = fracOf(heroG.css); + let changed = false; + if (f0 && hc.cap_bbox.w > 0) { + if (hc.cap_bbox.w > maxW) { + const nf = Math.max(0.06, (f0 * maxW) / hc.cap_bbox.w); + console.log( + `[make-cinematic] hero "${heroG.words[0].text}" too WIDE ${Math.round(hc.cap_bbox.w)}px → ${f0}h→${nf.toFixed(3)}h`, + ); + heroG.css = setFrac(heroG.css, nf); + changed = true; + } else if (hc.cap_bbox.w >= maxW * 0.88) { + if (pass === 0) + console.log( + `[make-cinematic] hero "${heroG.words[0].text}" at width CEILING (${Math.round(hc.cap_bbox.w)}/${Math.round(maxW)}px) — cannot enlarge.`, + ); + } else if (!didRaise && hc.cap_bbox.w < maxW * 0.88 && isApex) { + // NO DEAD ZONE: anything under 88% of usable width is raised toward a 93% + // fill (the old <75% trigger let 75–88%-wide heroes stay merely "decent") + const fit = (f0 * (maxW * 0.93)) / hc.cap_bbox.w; + const nf = Math.min(dnaSizeCap, fit); + if (nf > f0 * 1.05 || fit > dnaSizeCap * 1.02) { + if (nf > f0 * 1.001) + console.log( + `[make-cinematic] hero "${heroG.words[0].text}" TIMID (${Math.round(hc.cap_bbox.w)}px of ${Math.round(maxW)}px usable) → ${f0}h→${nf.toFixed(3)}h (width-fit max)`, + ); + // SHORT-WORD FILL: height cap bound before the width target → fill with + // TRACKING (film-title craft — HER, DUNE), ≤0.32em so it stays a word. + const wAtCap = (hc.cap_bbox.w * nf) / f0; + const dispT = String(heroG.text || (heroG.words || []).map((w) => w.text).join(" ")); + // never letterspace lowercase (tracked lowercase falls apart — caps only) + const capsy = dnaHeroCase === "uppercase" || dispT === dispT.toUpperCase(); + if (fit > dnaSizeCap && wAtCap < maxW * 0.85 && capsy) { + const disp = dispT; + // letter-spacing adds a gap after EVERY char (N gaps) and the centering + // text-indent adds one more — budget N+1 gaps or the word leaves the frame + const gaps = disp.length + 1; + const tr = +Math.min(0.32, (maxW * 0.88 - wAtCap) / (gaps * nf * H)).toFixed(3); + if (tr >= 0.04) { + heroG.css = + heroG.css + .replace(/letter-spacing\s*:[^;]+;?\s*/g, "") + .replace(/text-indent\s*:[^;]+;?\s*/g, "") + + (heroG.css.trim().endsWith(";") || !heroG.css.trim() ? "" : ";") + + ` letter-spacing:${tr}em; text-indent:${tr}em;`; + console.log( + `[make-cinematic] hero "${disp}" short word at height cap (${Math.round(wAtCap)}px of ${Math.round(maxW)}px) → tracked +${tr}em to fill`, + ); + } + } + heroG.css = setFrac(heroG.css, nf); + changed = true; + didRaise = true; + relockMates(nf); + } + } + } + const hbx = hc.cap_bbox; + // colliders OUTSIDE the lockup only — the lockup composes around the hero by design + const hits = others.filter((o) => { + const b = o.cap_bbox; + const ix = Math.min(hbx.x + hbx.w, b.x + b.w) - Math.max(hbx.x, b.x); + const iy = Math.min(hbx.y + hbx.h, b.y + b.h) - Math.max(hbx.y, b.y); + return ix > 8 && iy > 8; + }); + if (hits.length) { + const maxBottom = Math.max(...hits.map((o) => o.cap_bbox.y + o.cap_bbox.h)); + const minTop = Math.min(...hits.map((o) => o.cap_bbox.y)); + const downTo = ((maxBottom + 14) / H) * 100; + const upTo = Math.max(2, ((minTop - hbx.h - 14) / H) * 100); + const planeCss = plan.planes[hRef.plane].css; + const curTop = +(planeCss.match(/top:\s*([\d.]+)%/) || [0, 30])[1]; + const newTop = downTo + (hbx.h / H) * 100 < 96 ? downTo : upTo; + plan.planes[hRef.plane].css = planeCss.replace( + /top:\s*[\d.]+%/, + "top: " + newTop.toFixed(1) + "%", + ); + console.log( + `[make-cinematic] hero "${heroG.words[0].text}" OVERLAPS ${hits.map((o) => o.id).join(",")} — lockup top ${curTop}% → ${newTop.toFixed(1)}%`, + ); + changed = true; + } + // ORBIT REFINE: anchor kicker/tail to the MEASURED hero edges (estimate → real) + if (lockupMates.length && hc.cap_bbox && hc.cap_bbox.w > 0) { + const planeCss2 = (plan.planes[hRef.plane] && plan.planes[hRef.plane].css) || ""; + const pl2 = ((planeCss2.match(/left:\s*([\d.]+)%/) || [0, 0])[1] * W) / 100; + const relL = Math.max(0, Math.round(hc.cap_bbox.x - pl2)); + const pw2 = ((planeCss2.match(/width:\s*([\d.]+)%/) || [0, 100])[1] * W) / 100; + const relR = Math.max(0, Math.round(pw2 - (hc.cap_bbox.x - pl2) - hc.cap_bbox.w)); + for (const m of lockupMates) { + if (/left:\s*\d+px;right:auto/.test(m.css)) { + const nc = m.css.replace(/left:\s*\d+px/, "left:" + relL + "px"); + if (nc !== m.css) { + m.css = nc; + changed = true; + } + } else if (/right:\s*\d+px;left:auto/.test(m.css)) { + const nc = m.css.replace(/right:\s*\d+px/, "right:" + relR + "px"); + if (nc !== m.css) { + m.css = nc; + changed = true; + } + } + } + } + // LOCKUP RE-STACK from measured heights — runs EVERY pass for lockups (orbit + // max-widths wrap context lines, so the re-slot's estimates can leave the tail + // displaced or the whole composition off frame) + if (lockupMates.length) { + const caps2 = capsEnd; // lockup-END sample: every context line is revealed there + // TOWER CHECK — a context line wrapped to 3+ rows means its orbit max-width is + // too narrow for the (re-locked) font; widen toward the plane before stacking, + // or the tower blows the stack past the frame and the walk-back eats the hero + for (const m of lockupMates) { + const cm = caps2.find((x) => x.id === m.id); + const frm = fracOf(m.css) || 0.05; + const mwM = m.css.match(/max-width:\s*([\d.]+)px/); + if (!cm || !cm.cap_bbox || !mwM) continue; + const rows = Math.round(cm.cap_bbox.h / (frm * H * 1.12)); + if (rows >= 3) { + const planeCssW2 = (plan.planes[hRef.plane] && plan.planes[hRef.plane].css) || ""; + const pwX = W * (+(planeCssW2.match(/width:\s*([\d.]+)%/) || [0, 92])[1] / 100); + const nw = Math.round(pwX * 0.62); + if (nw > +mwM[1] + 10) { + m.css = m.css.replace(/max-width:\s*[\d.]+px/, "max-width:" + nw + "px"); + console.log( + `[make-cinematic] context "${((m.words || [])[0] || {}).text}…" wrapped to ${rows} rows — orbit max-width ${Math.round(+mwM[1])}→${nw}px (towers break the stack)`, + ); + changed = true; + } + } + } + const entries = [heroG, ...lockupMates] + .map((g) => { + const c = caps2.find((x) => x.id === g.id); + const curTop = +(g.css.match(/top:\s*(-?[\d.]+)px/) || [0, 0])[1]; + const fr = fracOf(g.css) || 0.05; + // SLOT HEIGHT = the LAYOUT box (cap_bbox), not the glyph box: words reveal + // over time, so at the hero-mid sample a context line's later words are + // still opacity-0 — glyph-box measured a wrapped line one row short and the + // next line slotted INTO its wrap band (real text-on-text shipped). + const measuredH = c && c.cap_bbox ? c.cap_bbox.h : null; + const h2 = g.id === heroG.id && didRaise ? fr * H * 1.12 : measuredH || fr * H * 1.25; + return { g, curTop, h: h2 }; + }) + .sort((a, b) => a.curTop - b.curTop); + let top = 0; + for (const e of entries) { + if (Math.abs(top - e.curTop) > 3) { + e.g.css = e.g.css.replace(/top:\s*-?[\d.]+px/, "top:" + Math.round(top) + "px"); + changed = true; + } + top += e.h + Math.max(12, Math.round((fracOf(e.g.css) || 0.05) * H * 0.38)); // box is lh1.12 — contains its own ink + } + // RE-CLAMP the plane after MEASURED growth — keep the whole composition on frame + const planeCss3 = plan.planes[hRef.plane].css; + const curTopPct = +(planeCss3.match(/top:\s*([\d.]+)%/) || [0, 30])[1]; + const maxTopPct = Math.max(2, ((H * 0.97 - top) / H) * 100); + if (curTopPct > maxTopPct + 0.3) { + plan.planes[hRef.plane].css = planeCss3.replace( + /top:\s*[\d.]+%/, + "top: " + maxTopPct.toFixed(1) + "%", + ); + console.log( + `[make-cinematic] lockup measured ${Math.round(top)}px tall — plane top ${curTopPct}% → ${maxTopPct.toFixed(1)}% (kept on frame)`, + ); + changed = true; + } + // even at the 2% ceiling the stack can exceed the frame (TIMID raise + ratio + // context on a tall lockup) — walk the hero back 8% and re-lock until it fits + if (top > H * 0.95 && maxTopPct <= 2.01) { + const f0c = fracOf(heroG.css); + if (f0c && f0c > 0.14) { + // decisive step: stack height scales ~linearly with the hero (context is + // ratio-locked to it), so aim straight at a 93% fill instead of nibbling + const nf2 = +Math.max(0.14, Math.min(f0c * 0.92, (f0c * (H * 0.93)) / top)).toFixed(3); + console.log( + `[make-cinematic] lockup stack ${Math.round(top)}px exceeds the frame even at top 2% — hero ${f0c}h → ${nf2}h (fit)`, + ); + heroG.css = setFrac(heroG.css, nf2); + relockMates(nf2); + didRaise = true; + changed = true; + } + } + } + if (!changed) break; + fs.writeFileSync(path.join(project, "plan.json"), JSON.stringify(plan, null, 2)); + r = cp2.spawnSync("node", [path.join(__dirname, "make-composition.cjs"), project], { + stdio: "ignore", + }); + try { + fs.unlinkSync(path.join(project, "_layout.json")); + } catch {} + } + } + // MINOR HERO measure pass — minors keep their authored size (hierarchy is a choice) + // but never ship broken: wider than the frame's usable width shrinks to fit, and a + // column overflow gets a loud note (centered spill is legal on a clear side only). + { + const minors = groups.filter((g) => g.hero && !heroRefs.some((h) => `h-${h.bi}` === g.id)); + let minorChanged = false; + for (const mg of minors) { + const midT = ((mg.in + Math.min(mg.out, mg.in + 1.0)) / 2).toFixed(2); + cp2.spawnSync("node", [path.join(__dirname, "measure-layout.cjs"), project, String(midT)], { + stdio: "ignore", + timeout: 60000, + }); + let mc = null; + try { + mc = ( + JSON.parse(fs.readFileSync(path.join(project, "_layout.json"), "utf8")).samples[0].caps || + [] + ).find((c) => c.id === mg.id); + } catch {} + if (!mc || !mc.cap_bbox) continue; + const bb = textBox(mc), + f0 = fracOf(mg.css); + if (f0 && bb.w > W * 0.94) { + const nf = Math.max(0.06, +((f0 * (W * 0.94)) / bb.w).toFixed(3)); + console.log( + `[make-cinematic] minor hero "${(mg.words[0] || {}).text}" too WIDE ${Math.round(bb.w)}px → ${f0}h→${nf.toFixed(3)}h (shrink-to-fit)`, + ); + mg.css = setFrac(mg.css, nf); + minorChanged = true; + } else { + const planeCssM = (plan.planes[mg.plane] && plan.planes[mg.plane].css) || ""; + const pwPx = W * (+(planeCssM.match(/width:\s*([\d.]+)%/) || [0, 100])[1] / 100); + if (bb.w > pwPx * 1.05) + console.log( + `[make-cinematic] note: minor hero "${(mg.words[0] || {}).text}" (${Math.round(bb.w)}px) spills its ${Math.round(pwPx)}px column — fine on a clear side; reduce size if it crosses the subject`, + ); + } + try { + fs.unlinkSync(path.join(project, "_layout.json")); + } catch {} + } + if (minorChanged) { + fs.writeFileSync(path.join(project, "plan.json"), JSON.stringify(plan, null, 2)); + cp2.spawnSync("node", [path.join(__dirname, "make-composition.cjs"), project], { + stdio: "ignore", + }); + } + } + process.exit(0); +} +main(); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/make-composition.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/make-composition.cjs new file mode 100644 index 000000000..aa499faba --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/make-composition.cjs @@ -0,0 +1,404 @@ +#!/usr/bin/env node +/* + * make-composition.cjs — compile plan.json → index.html (CINEMATIC MODE). + * + * DNA path (canonical): plan.dna names a dna/.json → modes/cinematic/engine.html + * is compiled with scene-resolved tokens (lib-dna.cjs): scene-sampled accent, light- + * direction contact shadow, depth-match blur, hero three-act orchestration with + * RMS-coupled amplitude. plan.template="cinematic-cream" maps to dna "cream". + * + * Legacy path: plan.template naming an archived template dir still compiles 1:1 + * (memory-wall / champion / portrait-header in modes/cinematic/_archive are NOT + * auto-discovered — restore them to modes/cinematic/ to use). + * + * node make-composition.cjs + */ +const path = require("path"); +const fs = require("fs"); +const cp = require("child_process"); +const dnaLib = require("./lib-dna.cjs"); + +const SKILL_ROOT = path.resolve(__dirname, ".."); +const TEMPLATES = path.join(SKILL_ROOT, "modes", "cinematic"); + +// Source clip duration (seconds) via ffprobe. The COMPOSITION/background length must +// follow the SOURCE, not the last caption — see the Bug-1 note in main(). +function sourceDurationSec(project) { + let cands = ["source.mp4"]; + try { + cands = cands.concat( + fs + .readdirSync(project) + .filter( + (f) => + /\.(mp4|mov|webm|mkv|m4v)$/i.test(f) && + !/^(final|bg_plus_caps|fg_caps|rail|index)/.test(f), + ), + ); + } catch {} + for (const c of cands) { + const p = path.isAbsolute(c) ? c : path.join(project, c); + if (!fs.existsSync(p)) continue; + try { + const out = cp + .execFileSync( + "ffprobe", + [ + "-v", + "error", + "-show_entries", + "format=duration", + "-of", + "default=nokey=1:noprint_wrappers=1", + p, + ], + { encoding: "utf8" }, + ) + .trim(); + const d = parseFloat(out); + if (d > 0) return d; + } catch {} + } + return null; +} + +function hexLum(hex) { + let h = String(hex).replace("#", ""); + if (h.length === 3) h = [...h].map((c) => c + c).join(""); + const r = parseInt(h.slice(0, 2), 16) / 255, + g = parseInt(h.slice(2, 4), 16) / 255, + b = parseInt(h.slice(4, 6), 16) / 255; + if ([r, g, b].some(Number.isNaN)) return 0.9; + return 0.299 * r + 0.587 * g + 0.114 * b; +} +const defaultTextShadow = (c) => + hexLum(c) < 0.45 + ? "0 2px 6px rgba(0, 0, 0, 0.28)" + : "0 0 18px rgba(255, 220, 170, 0.55), 0 3px 8px rgba(0, 0, 0, 0.85)"; +const defaultTextFilter = (c) => + hexLum(c) < 0.45 ? "contrast(1.08)" : "brightness(1.1) contrast(1.05)"; + +function findTemplate(name) { + const p = path.join(TEMPLATES, name, "template.html"); + if (fs.existsSync(p)) return p; + const avail = fs + .readdirSync(TEMPLATES) + .filter((d) => fs.existsSync(path.join(TEMPLATES, d, "template.html"))) + .sort(); + console.error(`[compile] unknown template: ${name}. Available: ${avail.join(", ")}`); + process.exit(1); +} +function escBr(t) { + const e = String(t) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """); + return e + .replace(/<br>/g, "
") + .replace(/<br\/>/g, "
") + .replace(/<br \/>/g, "
"); +} +// hero words get per-letter inner spans () so the engine can stagger +// letters; .w keeps wrapping the word so every gate (occlusion / overflow / layout) +// measures exactly what it measured before. +function wordSpan(w, i, perLetter) { + if (!perLetter) return `${escBr(w.text)}`; + const t = String(w.text); + if (//i.test(t)) return `${escBr(t)}`; // explicit
words stay whole + const letters = [...t] + .map((ch) => (ch === " " ? " " : `${escBr(ch)}`)) + .join(""); + return `${letters}`; +} +function renderCap(g, heroCfg) { + const slot = g.slot ?? g.style ?? ""; + const layerAttr = g.layer ? ` data-layer="${g.layer}"` : ""; + const isHero = heroCfg && g.hero === true; + const perLetter = isHero && heroCfg.perLetter; + const cls = slot ? `cap cap-${slot}` : "cap"; + const spans = g.words.map((w, i) => wordSpan(w, i, perLetter)).join("\n "); + const capDiv = `
\n ${spans}\n
`; + if (!isHero) return capDiv; + // fx siblings render UNDER the hero (earlier sibling = beneath): glow first, then + // echoes, then the hero itself. Plain .w spans; none are in plan.groups → gates skip. + const plainSpans = g.words + .map((w, i) => `${escBr(w.text)}`) + .join("\n "); + const parts = []; + if (heroCfg.glow) + parts.push( + ``, + ); + (heroCfg.echoes || []).forEach((ec, k) => { + parts.push( + ``, + ); + }); + parts.push(capDiv); + return parts.join("\n "); +} +function buildGroupsHtml(groups, planes, heroCfg) { + if (!planes) return groups.map((g) => renderCap(g, heroCfg)).join("\n "); + const order = Object.keys(planes); + const grouped = {}; + order.forEach((p) => (grouped[p] = [])); + const free = []; + for (const g of groups) { + const pid = g.plane; + if (pid && pid in grouped) grouped[pid].push(g); + else free.push(g); + } + const parts = []; + for (const pid of order) + parts.push( + `
\n ${grouped[pid].map((g) => renderCap(g, heroCfg)).join("\n ")}\n
`, + ); + for (const g of free) parts.push(renderCap(g, heroCfg)); + return parts.join("\n "); +} +function buildPlanesCss(planes) { + if (!planes) return ""; + return Object.entries(planes) + .map(([pid, p]) => { + // Accept BOTH plane shapes: { body: { css: "..." } } and the bare-string + // { body: "..." } (matches how groups write css). Reading only p.css silently + // dropped the string form → empty CSS → planes collapsed to (0,0). + let css = (typeof p === "string" ? p : (p || {}).css || "").trim(); + if (!css) return null; + if (!css.endsWith(";")) css += ";"; + return ` .plane-${pid} { ${css} }`; + }) + .filter(Boolean) + .join("\n"); +} +function buildPerGroupCss(groups, tokens) { + return groups + .map((g) => { + const parts = []; + if (g.scale != null) parts.push(`--s: ${g.scale};`); + let css = (g.css || "").trim(); + if (css) parts.push(css.endsWith(";") ? css : css + ";"); + const isHero = tokens && g.hero === true; + if (isHero) { + // DNA hero treatment (case / tracking / extra css) — authored css still wins (it comes first? no: later rules win; DNA goes first so the author can override) + const dnaHero = []; + if (tokens.heroCase && tokens.heroCase !== "none") + dnaHero.push(`text-transform: ${tokens.heroCase};`); + if (tokens.heroTracking && tokens.heroTracking !== "0") + dnaHero.push(`letter-spacing: ${tokens.heroTracking};`); + if (tokens.heroCss) + dnaHero.push(tokens.heroCss.endsWith(";") ? tokens.heroCss : tokens.heroCss + ";"); + if (tokens.hero && tokens.hero.heroColor) dnaHero.push(`color: ${tokens.hero.heroColor};`); + parts.unshift(...dnaHero); + } + const rules = []; + if (parts.length) rules.push(` #${g.id} { ${parts.join(" ")} }`); + // fx duplicates mirror the hero's geometry exactly (same slot/absolute CSS) so a + // flex/slot plane can't displace them; glow blur comes from .hero-glow (em-based), + // echo colors from their own rules (they must NOT inherit a transparent text fill). + if (isHero && tokens.hero) { + // word-level hero treatment (e.g. chrome's gradient clip — background-clip:text + // can't clip through composited children, so it must live ON the .w span) + if (tokens.hero.wordCss) rules.push(` #${g.id} .w { ${tokens.hero.wordCss} }`); + if (tokens.hero.glow > 0 && parts.length) + rules.push(` #${g.id}-glow { ${parts.join(" ")} }`); + (tokens.hero.echoes || []).forEach((ec, k) => { + const extra = + `color: ${ec.color}; -webkit-text-fill-color: ${ec.color}; background: none;` + + (ec.blur ? ` filter: blur(${ec.blur}px);` : ""); + rules.push(` #${g.id}-echo-${k} { ${parts.join(" ")} ${extra} }`); + }); + } + return rules.length ? rules.join("\n") : null; + }) + .filter(Boolean) + .join("\n"); +} +function buildGroupsJson(groups) { + return JSON.stringify( + groups.map((g) => ({ + id: g.id, + in: g.in, + out: g.out, + tone: g.tone ?? "soft", + ...(g.hero === true ? { hero: true } : {}), + ...(g.minor === true ? { minor: true } : {}), + ...(g.plane ? { plane: g.plane } : {}), + words: g.words.map((w) => ({ text: w.text, start: w.start, end: w.end })), + })), + null, + 10, + ); +} + +function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) { + console.error("usage: make-composition.cjs "); + process.exit(1); + } + const planPath = path.join(project, "plan.json"); + if (!fs.existsSync(planPath)) { + console.error(`[compile] missing ${planPath}`); + process.exit(1); + } + const plan = JSON.parse(fs.readFileSync(planPath, "utf8")); + if (plan.mode === "custom") { + console.error("[compile] mode=custom — skip this script and hand-write index.html."); + process.exit(1); + } + if (plan.mode === "standard") { + console.error( + "[compile] mode=standard — this plan.json is DERIVED by make-standard.cjs; compile Standard projects with make-standard.cjs (from standard.json), not this script.", + ); + process.exit(1); + } + // ── DNA resolution: plan.dna (canonical) or a legacy template name ────────── + const dnaName = plan.dna || dnaLib.LEGACY[plan.template] || null; + let dna = null, + tokens = null; + if (dnaName) { + try { + dna = dnaLib.load(dnaName); + } catch (e) { + console.error(`[compile] ${e.message}`); + process.exit(1); + } + } + const heroGroups = (plan.groups || []).filter((x) => x.hero === true); + if (dna) { + tokens = dnaLib.resolveTokens(dna, project, { heroGroups }); + console.log( + `[compile] DNA "${dna.name}" (${tokens.register}) — accent ${tokens.accent}` + + `${tokens.blurPx ? ` · depth-match blur ${tokens.blurPx}px` : ""}` + + `${tokens.heroes.length ? ` · hero amp ${tokens.heroes.map((h) => h.amp).join("/")} (RMS-coupled)` : ""}`, + ); + } + let src = dna + ? fs.readFileSync(path.join(TEMPLATES, "engine.html"), "utf8") + : fs.readFileSync(findTemplate(plan.template), "utf8"); + // Bug-1: the canvas/background length = SOURCE clip length, NOT the last-caption time. + // If plan.duration < source, the bg video ends before the matte → the tail shows only + // the foreground subject on black. Caption groups keep their own in/out (they may end + // earlier); only the composition duration follows the source. + const srcDur = sourceDurationSec(project); + const renderDur = srcDur && srcDur > 0 ? srcDur : plan.duration; + if (srcDur && Math.abs(srcDur - (plan.duration || 0)) > 0.2) + console.log( + `[compile] canvas duration → source length ${renderDur.toFixed(2)}s (plan.duration=${plan.duration}); captions keep their own times.`, + ); + const plane = plan.plane || {}, + header = plan.header || {}, + crown = plan.crown || {}; + // LOCKED DNA — the plan can NOT override colour / blend / shadow / filter. Picking a + // DNA commits to its visual identity; only layout + per-group typography stay + // agent-authored. If a scene's luminance fights the look, pick a DIFFERENT DNA + // (bright scene → "ink") — never recolour this one. (plan.cap_color / blend_mode / + // text_shadow / text_filter are intentionally ignored.) + const capColor = tokens ? tokens.capColor : "#fff5df"; + const g = (o, k, d) => (o && o[k] != null ? o[k] : d); + const heroCfg = + tokens && tokens.heroes && tokens.heroes.length + ? { + perLetter: tokens.heroes[0].perLetter, + glow: tokens.heroes[0].glow, + echoes: tokens.heroes[0].echoes || [], + } + : null; + const subs = { + DURATION: `${renderDur}`, + FPS: `${plan.fps ?? 24}`, + WIDTH: `${plan.width}`, + HEIGHT: `${plan.height}`, + FONT_SCALE: `${plan.font_scale ?? 1.0}`, + PLANE_TOP: `${g(plane, "top", 0)}`, + PLANE_LEFT: `${g(plane, "left", "")}`, + PLANE_RIGHT: `${g(plane, "right", "")}`, + PLANE_WIDTH: `${g(plane, "width", 0)}`, + PLANE_HEIGHT: `${g(plane, "height", 0)}`, + ROTATE_Y: `${g(plane, "rotateY", 0)}`, + ROTATE_X: `${g(plane, "rotateX", 0)}`, + HEADER_TOP: `${g(header, "top", 0)}`, + HEADER_HEIGHT: `${g(header, "height", 0)}`, + CROWN_TOP: `${g(crown, "top", plan.crown_top ?? g(plan.crown_position || {}, "top", 440))}`, + CROWN_LEFT: `${g(crown, "left", 0)}`, + CROWN_RIGHT: `${g(crown, "right", 0)}`, + CROWN_ALIGN: `${g(crown, "align", "center")}`, + CROWN_SCALE: `${g(crown, "scale", 1.0)}`, + BLEND_MODE: tokens ? tokens.blend : "screen", + CAP_COLOR: capColor, + TEXT_SHADOW: tokens ? tokens.textShadow : defaultTextShadow(capColor), + TEXT_FILTER: tokens ? tokens.filterBg : defaultTextFilter(capColor), + // engine-only placeholders (legacy templates simply don't contain them) + FONT_FAMILY: tokens ? tokens.fontFamily : "Inter", + ACCENT: tokens ? tokens.accent : "#e3c06a", + TEXT_FILTER_BG: tokens ? tokens.filterBg : defaultTextFilter(capColor), + TEXT_FILTER_FG: tokens ? tokens.filterFg : defaultTextFilter(capColor), + DNA_CSS: tokens && tokens.dnaCss ? tokens.dnaCss : "", + MOTION_JSON: JSON.stringify( + tokens + ? tokens.motion + : { + soft: { y: 8, dur: 0.45, ease: "power2.out" }, + present: { y: 6, scale: 1.04, dur: 0.22, ease: "power3.out" }, + }, + ), + HEROES_JSON: tokens && tokens.heroes ? JSON.stringify(tokens.heroes) : "[]", + HERO_JSON: tokens && tokens.hero ? JSON.stringify(tokens.hero) : "null", + GROUPS_HTML: buildGroupsHtml(plan.groups, plan.planes, heroCfg), + PLANES_CSS: buildPlanesCss(plan.planes), + CUSTOM_CSS: buildPerGroupCss(plan.groups, tokens), + GROUPS_JSON: buildGroupsJson(plan.groups), + }; + const cg = plan.crown_group; + if (cg) { + const layerAttr = cg.layer ? ` data-layer="${cg.layer}"` : ""; + const spans = cg.words + .map((w, i) => `${escBr(w.text)}`) + .join("\n "); + subs.CROWN_HTML = `
\n ${spans}\n
`; + subs.CROWN_JSON = JSON.stringify( + { + id: cg.id, + in: cg.in, + out: cg.out, + tone: cg.tone ?? "present", + words: cg.words.map((w) => ({ text: w.text, start: w.start, end: w.end })), + }, + null, + 10, + ); + } else { + subs.CROWN_HTML = ""; + subs.CROWN_JSON = "null"; + } + + for (const [k, v] of Object.entries(subs)) src = src.split(`{{${k}}}`).join(v); + fs.writeFileSync(path.join(project, "index.html"), src); + console.log( + `[compile] ${dna ? `dna=${dna.name} (engine)` : `template=${plan.template}`} → ${path.join(project, "index.html")}`, + ); + + // per-group FG → index_fg.html (same strategy as the Python version) + const fgGroups = plan.groups.filter((x) => x.layer === "fg"); + if (fgGroups.length || (plan.crown_group || {}).layer === "fg") { + const fgCss = ` + +`; + let fg = src.replace("", fgCss + " "); + fg = fg.replace('
\n
.json) is a complete visual constitution composed + * from two registries implemented HERE, once, for all DNAs: + * + * BODY PARADIGMS how the transcript surface lives + * rail lower-third lines that replace each other (fg alpha) + * panel console log accumulating in a docked glass panel (fg alpha) + * poem lines accumulate in open space, stanza by stanza (fg alpha) + * takeover every beat owns the full frame as a hard-cut card (bg) + * + * HERO SETPIECES the climax choreography + * detonation sliced stencil stamp: shear-in, snap, squash, cool, furniture + * decode slot-machine glyph reels lock left→right, CRT-off exit + * drawon single-line-font stroke-order writing (sequential dash reveal) + * assembly inline word assembles from inbound particles (poem apex) + * colorflip inline accent-color crush card (takeover apex) + * + * plus LINKAGES (theme interactions: redact-until-hero, disperse-on-last-word, + * corrupt-on-last-word) and a PLATE budget compiled to _postfx.sh. + * + * Inputs : /theme.json { dna, lines:[[w,...],...], hero:{match,text?}, + * minors?:[...], width?, height?, fps? } + * /transcript.json (verbatim, word timings) + * themes/.json + * Outputs: index.html (bg: plate reaction + embedded setpiece) + * rail.html (fg alpha: body paradigm + front fx) [unless body.layer=bg] + * _postfx.sh (plate reaction: punch/shake/grain after composite) + * + * Render: scripts/render-theme.sh (render-and-composite + postfx) + * + * Determinism contract: paused GSAP on window.__timelines["main"], seeded PRNG + * only (mulberry32), set-chains / pure-f(t) keyframes, no Math.random/Date.now. + */ +const fs = require("fs"); +const path = require("path"); +const { execFileSync } = require("child_process"); + +const PROJECT = path.resolve(process.argv[2] || "."); +const SKILL = path.resolve(__dirname, ".."); +const F = 1 / 24; + +// ---------- load inputs ---------- +const theme = JSON.parse(fs.readFileSync(path.join(PROJECT, "theme.json"), "utf8")); +const dna = JSON.parse(fs.readFileSync(path.join(SKILL, "themes", theme.dna + ".json"), "utf8")); +const transcript = JSON.parse(fs.readFileSync(path.join(PROJECT, "transcript.json"), "utf8")); +const W = theme.width || 1280, + H = theme.height || 720; + +// FPS: matte.fps is AUTHORITATIVE (written by matte.cjs at the source's native +// rate; the matte overlay + postfx zoompan must run at this rate or the output +// retimes). theme.fps only overrides when matte.fps is absent. +function readMatteFps() { + try { + const v = parseInt( + fs.readFileSync(path.join(PROJECT, "matte.fps"), "utf8").replace(/\D/g, ""), + 10, + ); + return v > 0 ? v : null; + } catch { + return null; + } +} +const FPS = readMatteFps() || theme.fps || 24; + +function probeDuration() { + try { + const out = execFileSync( + "ffprobe", + [ + "-v", + "error", + "-show_entries", + "format=duration", + "-of", + "csv=p=0", + path.join(PROJECT, "source.mp4"), + ], + { encoding: "utf8" }, + ); + return parseFloat(out.trim()); + } catch { + const n = fs.readdirSync(path.join(PROJECT, "frames_fg")).length; + return n / FPS; + } +} +const DUR = +(theme.duration || probeDuration()).toFixed(6); + +// ---------- scene awareness (safe-zones.json): inherit the typography system ---------- +// The existing modes' scene intelligence applies here too: hero placement comes +// from the measured occlusion bands + subject anchor, panel/poem dock on the +// clearer side, and hero font size is width-fit to the actual word. Explicit +// theme.json values > scene auto > DNA fallback. +function readJson2(p) { + try { + return JSON.parse(fs.readFileSync(p, "utf8")); + } catch { + return null; + } +} +const sz = readJson2(path.join(PROJECT, "safe-zones.json")); + +// per-setpiece preferred band (topPct of the hero's TOP edge) +const SETPIECE_PREF_TOP = { + detonation: 28, + decode: 26, + drawon: 18, + cpslam: 27, + settle: 27, + flapboard: 25, + ledwipe: 52, + vhsosd: 26, + bossintro: 30, + rubberstamp: 29, + lasercage: 33, + boltstrike: 24, + holoboot: 28, + biobloom: 33, + silkribbon: 18, + scopetrace: 25, + papermat: 26, + centerfold: 21, + chalkwrite: 44, + spraytag: 26, + brushwrite: 19, + inkbloom: 25, + ransomnote: 31, +}; + +function sceneHeroXY(setpiece, fontPx) { + const exX = theme.hero && theme.hero.x, + exY = theme.hero && theme.hero.y; + let x = exX ?? null, + y = exY ?? null; + if (x == null && sz && sz.heroAnchor && sz.heroAnchor.centerXPct != null) + x = (W * sz.heroAnchor.centerXPct) / 100; + if (x == null) x = dna.hero.x ?? W / 2; + if (y == null && sz && sz.heroBands && Array.isArray(sz.heroBands.profile)) { + const pref = SETPIECE_PREF_TOP[setpiece] ?? 28; + const ok = sz.heroBands.profile.filter((b) => b.occPct >= 18 && b.occPct <= 55); + const pool = ok.length ? ok : sz.heroBands.profile; + const best = pool.reduce((a, b) => + Math.abs(b.topPct - pref) < Math.abs(a.topPct - pref) ? b : a, + ); + y = (H * best.topPct) / 100 + fontPx * 0.55; // band top → glyph center + } + if (y == null) y = dna.hero.y ?? H * 0.37; + return { x: Math.round(x), y: Math.round(y) }; +} + +// width-fit: hero font size from the actual word (never overflow, never timid) +function fitHeroPx(text, basePx, emPerChar, maxFrac) { + const est = (px) => text.length * emPerChar * px; + let px = basePx; + const maxW = W * (maxFrac || 0.92); + if (est(px) > maxW) px = Math.floor(maxW / (text.length * emPerChar)); + // short words: allow growth toward the poster fill, capped — except in the + // calm register, where the DNA base size IS the ceiling (quiet briefs got a + // 188px hero from this growth in the cold-start E2E) + else if (est(px) < W * 0.55 && dna.register !== "calm") + px = Math.min(Math.floor(maxW / (text.length * emPerChar)), Math.round(basePx * 1.25)); + return Math.max(64, px); +} + +// clearer side for docked furniture (panel / poem): away from the subject +const CLEARER = (sz && sz.subject && sz.subject.clearerSide) || "left"; + +// ---------- measured glyph metrics (assets/fonts/char-widths.json) ---------- +// Per-char advance widths (em) + fontBoundingBox ascent/descent for every +// bundled family, measured once in headless Chrome over the SAME woff2 faces +// the renderer embeds. Lets a paradigm BAKE pixel-exact word geometry at +// compile time (beam aim, flare centers) so font-load timing in the render +// browser can never skew it (kerning ignored: ≤3px/word vs ground truth). +const CHARW = (() => { + try { + return JSON.parse(fs.readFileSync(path.join(SKILL, "assets/fonts/char-widths.json"), "utf8")); + } catch { + return null; + } +})(); +function famMetrics(fam) { + return (CHARW && CHARW[fam]) || null; +} +function wordPx(text, fam, px, lsEm) { + const m = famMetrics(fam); + if (!m) console.error(`[make-theme] WARN no measured widths for "${fam}" -> 0.6em/char estimate`); + const adv = m + ? [...text].reduce((a, c) => a + (m.widths[c] ?? m.widths["0"] ?? 0.6), 0) + : text.length * 0.6; + return adv * px + (lsEm || 0) * px * text.length; +} + +// ---------- word timing: sequential matcher (verbatim completeness) ---------- +const norm = (s) => s.toLowerCase().replace(/[^\p{L}\p{N}']/gu, ""); +const tWords = transcript.words.map((w) => ({ + text: w.text ?? w.word, + start: w.start, + end: w.end, + used: false, +})); +let cursor = 0; +function takeWord(authored) { + const target = norm(authored); + for (let i = cursor; i < Math.min(cursor + 3, tWords.length); i++) { + if (norm(tWords[i].text) === target) { + if (tWords[i].used) + throw new Error( + `[make-theme] "${authored}" is already claimed by hero.match — embed setpieces own the hero word: leave it OUT of lines (rail↔climax hand-off)`, + ); + tWords[i].used = true; + cursor = i + 1; + return tWords[i]; + } + } + throw new Error( + `[make-theme] cannot match authored word "${authored}" near transcript position ${cursor} ("${(tWords[cursor] || {}).text}") — lines must follow transcript order verbatim`, + ); +} + +// hero phrase: located independently in the transcript (it may sit between lines) +function findPhrase(phrase) { + const parts = phrase.trim().split(/\s+/).map(norm); + for (let i = 0; i <= tWords.length - parts.length; i++) { + if (parts.every((p, k) => norm(tWords[i + k].text) === p)) { + return { + start: tWords[i].start, + end: tWords[i + parts.length - 1].end, + idx: i, + len: parts.length, + }; + } + } + throw new Error(`[make-theme] hero phrase "${phrase}" not found in transcript`); +} +const heroInline = !!dna.hero.inline; +// theme.hero is OPTIONAL: a heroless theme runs pure-body (the right authoring +// for quiet briefs — "安静/每个词都要读到" wants no setpiece at all). +const HEROLESS = !theme.hero; +if (HEROLESS) theme.hero = {}; +const hero = theme.hero.match ? findPhrase(theme.hero.match) : null; +if (!hero && !HEROLESS) + throw new Error( + "[make-theme] theme.json requires hero:{match} (omit hero entirely for a quiet pure-body run)", + ); +const heroText = (theme.hero.text || theme.hero.match || "").toUpperCase(); +const heroDisplay = theme.hero.text || theme.hero.match; // case preserved for drawon/assembly + +// mark hero transcript words as consumed when the setpiece is EMBED (not inline): +// the rail/panel/poem must NOT contain them (rail↔climax hand-off), except panel +// with redact linkage (panel shows them redacted — author includes them). +const redactLinkage = (dna.linkages || []).includes("redact-until-hero"); +if (!heroInline && !HEROLESS && !redactLinkage) { + for (let k = 0; k < hero.len; k++) tWords[hero.idx + k].used = true; +} + +// resolve lines: every entry gets word objects with timings + role flags +const minors = new Set((theme.minors || []).map(norm)); +const LINES = (theme.lines || []).map((arr, li) => { + const words = arr.map((a) => { + const tw = takeWord(a); + return { + display: a, + start: tw.start, + end: tw.end, + minor: minors.has(norm(a)), + isHero: + !!hero && + norm(a) === norm((theme.hero.match || "").split(/\s+/)[0]) && + tw.start >= hero.start - 0.01 && + tw.start <= hero.end + 0.01, + }; + }); + return { id: li, words }; +}); +// completeness gate +const unused = tWords.filter((w) => !w.used); +if (unused.length) + throw new Error( + `[make-theme] transcript words not covered by lines/hero: ${unused.map((w) => w.text).join(" ")}`, + ); + +// per-line windows +LINES.forEach((L, i) => { + L.in = L.words[0].start - 0.02; + L.out = i + 1 < LINES.length ? LINES[i + 1].words[0].start - 0.02 : DUR - 0.1; +}); +const LASTWORD = LINES[LINES.length - 1].words[LINES[LINES.length - 1].words.length - 1]; + +// hero window: onset → bounded hold (maxHold; 0 = to clip end — neonsign's +// lit-sign design). Unbounded default holds turned short clips into wallpaper. +const heroIn = hero ? hero.start : -999; +const MAXHOLD = dna.hero.maxHold ?? 3.2; +const heroOut = hero + ? Math.min(DUR - 0.06, theme.hero.out ?? (MAXHOLD > 0 ? heroIn + MAXHOLD : DUR - 0.1)) + : -999; + +// ---------- hero geometry: scene-aware position + width-fit size (computed ONCE, +// shared by the setpiece and the front fx so flash/rings/sparks stay centered) ---- +const HG = { x: dna.hero.x ?? W / 2, y: dna.hero.y ?? H * 0.37, fontPx: dna.hero.fontPx || 178 }; +if (!heroInline && !HEROLESS) { + if (dna.hero.setpiece === "detonation") { + HG.fontPx = fitHeroPx(heroText, dna.hero.fontPx || 178, 0.56, 0.92); + Object.assign(HG, sceneHeroXY("detonation", HG.fontPx)); + HG.halfW = (heroText.length * 0.56 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "decode") { + const units = [...heroText].reduce((a, c) => a + (c === " " ? 0.38 : 0.82), 0); + HG.fontPx = Math.min(dna.hero.fontPx || 112, Math.floor((W * 0.94) / units)); + Object.assign(HG, sceneHeroXY("decode", HG.fontPx)); + HG.halfW = (units * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "drawon") { + Object.assign(HG, sceneHeroXY("drawon", 130)); + HG.halfW = Math.min(dna.hero.params.targetWidth || 640, W - 200) / 2; + } else if (dna.hero.setpiece === "cpslam") { + HG.fontPx = fitHeroPx(heroText, dna.hero.fontPx || 168, 0.56, 0.9); + Object.assign(HG, sceneHeroXY("cpslam", HG.fontPx)); + HG.halfW = (heroText.length * 0.56 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "settle") { + HG.fontPx = fitHeroPx(heroText, dna.hero.fontPx || 150, 0.58, 0.9); + Object.assign(HG, sceneHeroXY("settle", HG.fontPx)); + HG.halfW = (heroText.length * 0.58 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "flapboard") { + // one flap tile per char; tile geometry derives from fontPx (demo ratio + // 100px tile @ 138px Anton), width-fit shrinks both together + const gap = dna.hero.params.gap || 7; + const n = heroText.length; + let fpx = dna.hero.fontPx || 138; + let tw = Math.round(fpx * 0.725); + const fitW = W * 0.94 - 40 - (n - 1) * gap; + if (n * tw > fitW) { + tw = Math.floor(fitW / n); + fpx = Math.round(tw / 0.725); + } + HG.fontPx = fpx; + Object.assign(HG, sceneHeroXY("flapboard", fpx)); + HG.tileW = tw; + HG.tileH = Math.round(tw * 1.48); + HG.halfW = (n * tw + (n - 1) * gap + 40) / 2; + } else if (dna.hero.setpiece === "ledwipe") { + // LED transit panel: the word lights inside a fixed departure-board panel + // (demo 1080×232 @ 120px VT323 ≈ 0.50em/char incl tracking) — width-fit + // shrinks the type, never the panel; panel height derives from the type + const panelW = Math.min(dna.hero.params.panelW || 1080, W - 120); + const units = heroText.length * 0.5; + HG.fontPx = Math.min(dna.hero.fontPx || 120, Math.floor((panelW - 80) / units)); + Object.assign(HG, sceneHeroXY("ledwipe", HG.fontPx)); + HG.panelW = panelW; + HG.panelH = 44 + Math.round(HG.fontPx * 1.42) + 18; + HG.halfW = panelW / 2; + } else if (dna.hero.setpiece === "vhsosd") { + // camcorder OSD readout (demo: VT323 150px ≈ 0.47em/char incl 0.02em tracking) + HG.fontPx = fitHeroPx(heroText, dna.hero.fontPx || 150, 0.47, 0.92); + Object.assign(HG, sceneHeroXY("vhsosd", HG.fontPx)); + HG.halfW = (heroText.length * 0.47 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "bossintro") { + // 8-bit boss word (demo: Press Start 2P 84px ≈ 1.0em/char); the pixel-block + // matrix derives from the word rect (cell 0.7×/0.5× fontPx, ~50px side pad) + HG.fontPx = fitHeroPx(heroText, dna.hero.fontPx || 84, 1.0, 0.92); + Object.assign(HG, sceneHeroXY("bossintro", HG.fontPx)); + HG.halfW = (heroText.length * 1.0 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "rubberstamp") { + // bordered rubber-stamp face (demo: Special Elite 120px REMARKABLE ≈ + // 0.60em/char + 0.015em tracking); the face adds padding + border that + // scale with fontPx (80px + 12px at the demo size) + HG.fontPx = fitHeroPx(heroText, dna.hero.fontPx || 120, 0.615, 0.86); + Object.assign(HG, sceneHeroXY("rubberstamp", HG.fontPx)); + HG.halfW = (heroText.length * 0.615 * HG.fontPx + (92 * HG.fontPx) / 120) / 2; + } else if (dna.hero.setpiece === "lasercage") { + // beam-cage word (demo: Audiowide 100px): exact em width from the measured + // char table — the converging beams, cage lines and glow stack all derive + // from the word rect, so the fit must not guess + const em1 = wordPx(heroText, dna.fonts.hero, 1, 0.02) || heroText.length * 0.8; + HG.fontPx = Math.min(dna.hero.fontPx || 100, Math.floor((W * 0.9) / em1)); + Object.assign(HG, sceneHeroXY("lasercage", HG.fontPx)); + HG.halfW = (em1 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "boltstrike") { + // storm slam (demo: Anton 145px REMARKABLE): exact em width from the + // measured char table — the bolt offsets, word scrim and ozone glow all + // derive from the word rect (demo rect: 720×145 → halfW 360) + const em1 = wordPx(heroText, dna.fonts.hero, 1, 0.012) || heroText.length * 0.56; + HG.fontPx = Math.min(dna.hero.fontPx || 145, Math.floor((W * 0.92) / em1)); + Object.assign(HG, sceneHeroXY("boltstrike", HG.fontPx)); + HG.halfW = (em1 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "holoboot") { + // volumetric projection word (demo: Orbitron 700 118px, letter-spacing 0): + // exact em width from the measured char table — the projection cone, seed + // beam, emitter dot and scrim all derive from the word rect + const em1 = wordPx(heroText, dna.fonts.hero, 1, 0) || heroText.length * 0.8; + HG.fontPx = Math.min(dna.hero.fontPx || 118, Math.floor((W * 0.9) / em1)); + Object.assign(HG, sceneHeroXY("holoboot", HG.fontPx)); + HG.halfW = (em1 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "biobloom") { + // abyss bloom word (demo: Fredoka 700 120px RECOVER, 0.01em tracking): + // exact em width from the measured char table — the tendril anchors, + // pocket scrim, pre-glow and spill all derive from the word rect + const em1 = wordPx(heroText, dna.fonts.hero, 1, 0.01) || heroText.length * 0.66; + HG.fontPx = Math.min(dna.hero.fontPx || 120, Math.floor((W * 0.9) / em1)); + Object.assign(HG, sceneHeroXY("biobloom", HG.fontPx)); + HG.halfW = (em1 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "silkribbon") { + // silk ribbon draw-on (demo: HersheyScript "recover" w=880 on a 1010×280 + // canvas, ink center ≈ canvas center): the canvas, aurora-gradient span + // and spill all derive from targetWidth; 115 ≈ the ribbon's ink height + // (sky band top → ribbon center, same registration as the demo) + Object.assign(HG, sceneHeroXY("silkribbon", 115)); + HG.ribbonW = Math.min(dna.hero.params.targetWidth || 880, W - 240); + HG.halfW = (HG.ribbonW + 130) / 2; + } else if (dna.hero.setpiece === "scopetrace") { + // phosphor trace word (demo: HersheyScript "pixel size" ≈705px ink, ink + // center ≈ baseline − 28): the surge column, flatline flash, spill and + // write window all derive from targetWidth; 115 ≈ the trace's ink height + Object.assign(HG, sceneHeroXY("scopetrace", 115)); + HG.traceW = Math.min(dna.hero.params.targetWidth || 720, W - 200); + HG.halfW = (HG.traceW + 50) / 2; + } else if (dna.hero.setpiece === "papermat") { + // torn-paper letter chips glued on a kraft mat (demo: Anton 130px ink on + // 118×170 chips, pitch tileW+14, mat N*pitch+80 wide × 240 tall): chip + // geometry derives from fontPx (demo ratios), width-fit shrinks both + const n = heroText.length; + let fpx = dna.hero.fontPx || 130; + let tw = Math.round(fpx * 0.91); + const fitW = W * 0.94 - 80 - n * 14; + if (n * tw > fitW) { + tw = Math.floor(fitW / n); + fpx = Math.round(tw / 0.91); + } + HG.fontPx = fpx; + Object.assign(HG, sceneHeroXY("papermat", fpx)); + HG.tileW = tw; + HG.tileH = Math.round(fpx * 1.31); + HG.pitch = tw + 14; + HG.matW = n * HG.pitch + 80; + HG.matH = Math.round(fpx * 1.846); + HG.halfW = HG.matW / 2; + } else if (dna.hero.setpiece === "centerfold") { + // pop-up book centerfold (demo: Baloo 2 800 120px STARS over a 12-point + // paper starburst, outer R 220 ≈ 0.59×wordW, box 620×560 = 2R+180 × 2R+fontPx): + // the bursts, blob shadow, struts and the confetti hinge all derive from + // the word rect; width-fit shrinks the type, the burst follows the word + // but is capped so the unfold stays inside the frame + const em1 = wordPx(heroText, dna.fonts.hero, 1, 0.02) || heroText.length * 0.62; + HG.fontPx = Math.min(dna.hero.fontPx || 120, Math.floor((W * 0.5) / em1)); + Object.assign(HG, sceneHeroXY("centerfold", HG.fontPx)); + HG.wordW = Math.round(em1 * HG.fontPx); + HG.burstR = Math.round(Math.min(Math.max(1.83 * HG.fontPx, 0.59 * HG.wordW), H * 0.42)); + HG.boxW = Math.max(2 * HG.burstR + 180, HG.wordW + 24); + HG.boxH = 2 * HG.burstR + HG.fontPx; + HG.halfW = HG.boxW / 2; + } else if (dna.hero.setpiece === "chalkwrite") { + // hand-written chalk word (demo: HersheyScript "remarkable" ≈860px ink, + // ink 130 tall, ink CENTER on HG.y): the writing starts at the board's + // LEFT margin — a hand writes from the left, never centered on the + // subject — so x derives from the body strip, not the hero anchor; the + // stroke path is parsed at compile time inside the setpiece and the + // board rect / underlines / fg dust clap all register on the measured + // ink box. 130 ≈ the chalk ink height (band top → ink center). + const stripW9 = (dna.body.strip && dna.body.strip.w) || 1200; + const SX9 = (dna.body.strip && dna.body.strip.x) ?? Math.round((W - stripW9) / 2); + HG.chalkW = Math.min(dna.hero.params.targetWidth || 860, stripW9 - 28); + HG.fontPx = 130; + Object.assign(HG, sceneHeroXY("chalkwrite", 130)); + if ((theme.hero && theme.hero.x) == null) HG.x = SX9 + 12 + Math.round(HG.chalkW / 2); + HG.halfW = Math.round(HG.chalkW / 2); + } else if (dna.hero.setpiece === "spraytag") { + // spray-painted tag (demo: HersheyScript "recover" w=1000 → ink ≈1010×120, + // ink center (646,252)): the tag CENTERS on the hero anchor in the sky + // band — crossing the subject silhouette is the point; the stroke path is + // parsed at compile time inside the setpiece, which registers the + // pen-finish point on HG for the fg paint splat (fx.paintsplat). 120 ≈ the + // tag's ink height (band top → ink center); halfW adds the halo overspray. + HG.sprayW = Math.min(dna.hero.params.targetWidth || 1000, W - 140); + HG.fontPx = 120; + Object.assign(HG, sceneHeroXY("spraytag", 120)); + HG.halfW = Math.round(HG.sprayW / 2) + 30; + } else if (dna.hero.setpiece === "brushwrite") { + // sumi-e gesture (demo: HersheyScript "remarkable" w=760 → ink ≈760×115, + // ink center (863,202)): the gesture CENTERS on the hero anchor in the sky + // band — crossing the subject silhouette is the point; the stroke path is + // parsed at compile time inside the setpiece, which registers the + // pen-START point on HG for the fg ink flecks (fx.brushflecks). 120 ≈ the + // gesture's ink height (band top → ink center); halfW adds spatter margin. + HG.brushW = Math.min(dna.hero.params.targetWidth || 760, W - 240); + HG.fontPx = 120; + Object.assign(HG, sceneHeroXY("brushwrite", 120)); + HG.halfW = Math.round(HG.brushW / 2) + 40; + } else if (dna.hero.setpiece === "inkbloom") { + // sumi drop in still water (demo: Shippori Mincho 700 132px "pixel size.", + // 0.02em tracking, case preserved): exact em width from the measured char + // table — the blob stack, ripple rings and wisp anchors all derive from + // the word rect (kx/ky scale units inside the setpiece) + const em1 = wordPx(heroDisplay, dna.fonts.hero, 1, 0.02) || heroDisplay.length * 0.5; + HG.fontPx = Math.min(dna.hero.fontPx || 132, Math.floor((W * 0.9) / em1)); + Object.assign(HG, sceneHeroXY("inkbloom", HG.fontPx)); + HG.halfW = (em1 * HG.fontPx) / 2; + } else if (dna.hero.setpiece === "ransomnote") { + // ransom-note letter chips (demo: 10 chips, 4 recipes/fonts cycled, base + // 130px with seeded ±13% sizes): width-fit uses the measured advance of + // each glyph IN ITS OWN recipe font + 0.20em chip padding + 6px margins, + // so the crooked collage never overflows the frame + const fams4 = [dna.fonts.body, dna.fonts.dark, dna.fonts.news, dna.fonts.accent]; + let k4 = 0; + const em1 = [...heroText].reduce((a, c) => { + if (c === " ") return a + 0.3; + const fam = fams4[k4++ % 4]; + return a + (famMetrics(fam) ? wordPx(c, fam, 1, 0) : 0.62) + 0.2; + }, 0); + const n = heroText.length; + HG.fontPx = Math.min(dna.hero.fontPx || 130, Math.floor((W * 0.92 - n * 6) / em1)); + Object.assign(HG, sceneHeroXY("ransomnote", HG.fontPx)); + HG.halfW = (em1 * HG.fontPx + n * 6) / 2; + } + // keep the word on frame (when wider than the frame, CENTER it — an inverted + // Math.max/Math.min clamp would silently pin to the lower bound off-center) + if (HG.halfW) + HG.x = + 2 * HG.halfW + 24 > W ? W / 2 : Math.max(HG.halfW + 12, Math.min(W - HG.halfW - 12, HG.x)); + HG.y = Math.max(HG.fontPx * 0.55 + 8, Math.min(H * 0.62, HG.y)); +} + +// ---------- shared emit helpers ---------- +const MULBERRY = `function mulberry32(a){return function(){a|=0;a=(a+0x6D2B79F5)|0;let t=Math.imul(a^(a>>>15),1|a);t=(t+Math.imul(t^(t>>>7),61|t))^t;return((t^(t>>>14))>>>0)/4294967296;}}`; + +// bundled @font-face subset for this DNA's families — the renderer only +// auto-supplies its canonical fonts; anything else silently falls back unless +// the page ships a local @font-face (same determinism contract as Standard). +const FONT_FACES = (() => { + let css = ""; + try { + css = fs.readFileSync(path.join(SKILL, "modes/standard/fonts/fonts.css"), "utf8"); + } catch { + return null; + } + return css + .split("@font-face") + .slice(1) + .map((b) => "@font-face" + b.slice(0, b.indexOf("}") + 1)); +})(); +// per-page: embed only families this page's markup actually references +function fontCssFor(pageParts) { + if (!FONT_FACES) return ""; + const fams = [...new Set(Object.values(dna.fonts || {}))].filter((f) => !/^Hiragino/.test(f)); + const out = []; + for (const fam of fams) { + if (!pageParts.includes(fam)) continue; + // quote-agnostic: fonts.css has shipped with both 'single' and "double" + // quoted family names (formatters flip them); a literal match silently + // skipped EVERY embed and warned on bundled fonts. + const famRe = new RegExp( + `font-family\\s*:\\s*['"]` + fam.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + `['"]`, + ); + const hits = FONT_FACES.filter((b) => famRe.test(b)); + if (!hits.length) + console.error( + `[make-theme] WARN font "${fam}" not in bundled fonts.css -> renderer fallback risk`, + ); + out.push(...hits); + } + return out.join("\n"); +} +const GSAP = ``; + +function bgSkeleton(stageHtml, css, js) { + const FONT_CSS = fontCssFor(stageHtml + css); + return ` + + + + +${GSAP} + + + +
+ +
+${stageHtml} +
+ +
+ + +`; +} + +function fgSkeleton(stageHtml, css, js) { + const FONT_CSS = fontCssFor(stageHtml + css); + return ` + + + + +${GSAP} + + + +
+
+${stageHtml} +
+
+ + +`; +} + +const esc = (s) => String(s).replace(/&/g, "&").replace(/ ({ + id: "r" + L.id, + in: +L.in.toFixed(3), + out: +L.out.toFixed(3), + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + })); + const css = ` + .rail { position:absolute; left:${W / 2}px; top:${H - b.bottomPx}px; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.body}', sans-serif; font-size:${b.fontPx}px; line-height:1; + letter-spacing:${b.letterSpacing || "0.02em"}; color:${dna.palette.body}; + ${b.textTransform ? "text-transform:" + b.textTransform + ";" : ""} + text-shadow: ${b.glow || "0 3px 14px rgba(0,0,0,0.65), 0 1px 3px rgba(0,0,0,0.5)"}; } + .rail .w { display:inline-block; opacity:0; margin:0 0.14em; } + .rail .w.minor { font-size:${Math.round(b.fontPx * (b.minorScale || 1.4))}px; } + .rail .w.em { color:${dna.palette.em || dna.palette.accent}; font-weight:700; } + ${ + b.rule + ? `#rrule { position:absolute; left:${W / 2}px; top:${H - b.bottomPx + 38}px; width:0; height:2px; + background:${b.rule.color}; opacity:0.5; transform:translateX(-50%); + box-shadow: 0 0 12px ${dna.palette.accent}; }` + : "" + }`; + const html = + lineData.map((L) => `
`).join("\n") + + (b.rule ? `\n
` : ""); + const stamp = b.entrance === "stamp"; + const boot = b.entrance === "bootflick"; + const fade = b.entrance === "fade"; + const js = ` + // ---- body paradigm: RAIL (${b.entrance} in / ${b.exit} out) ---- + const HOT = ${J(dna.palette.hot || dna.palette.accent)}, BONE = ${J(dna.palette.body)}; + const RAIL = ${J(lineData)}; + const rrnd = mulberry32(2026); + RAIL.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt,,minor]) => { + const s = document.createElement("span"); + s.className = "w" + (minor ? (${J(stamp)} || ${J(boot)} ? " minor" : " em") : ""); + s.textContent = txt; line.appendChild(s); + }); + gsap.set(line, { xPercent: -50, yPercent: -100 }); + tl.set(line, { opacity: 1 }, L.in); + const XO = L.out - ${b.exit === "drop" ? "0.18" : "0.17"}; // exit start (single source) + let lastB = -1; // line-y bounce ownership guard + L.words.forEach(([txt, st, minor], wi) => { + const el = line.children[wi]; +${ + boot + ? ` // BOOTFLICK: corrupted-cyan boot 1-2f -> settles to UI color + tl.set(el, { opacity: 0.6, color: "#00F0FF", x: 2 }, st); + if (rrnd() < 0.45) { tl.set(el, { opacity: 0.15, x: -2 }, st + F); tl.set(el, { opacity: 1, color: BONE, x: 0 }, st + 2 * F); } + else { tl.set(el, { opacity: 1, color: BONE, x: 0 }, st + F); } + if (minor) { + tl.fromTo(el, { scale: 1.18 }, { scale: 1, duration: 0.25, ease: "power2.out" }, st + F); + tl.set(el, { textShadow: "2px 0 0 #00F0FF, -2px 0 0 #FF003C, 0 2px 10px rgba(0,0,0,0.75)" }, st + 2 * F); + }` + : fade + ? ` // FADE: 2-frame fade-up — the word simply reads (anchor register) + tl.fromTo(el, { opacity: 0, y: 4 }, { opacity: 1, y: 0, duration: 0.12, ease: "power2.out" }, st); + if (minor) tl.fromTo(el, { scale: 1.07 }, { scale: 1, duration: 0.3, ease: "power2.out" }, st);` + : stamp + ? ` // STAMP: 1f appear oversized+hot, crush, recoil, cool to bone + tl.set(el, { opacity: 1, scale: minor ? 2.1 : 1.28, color: HOT, transformOrigin: "50% 80%" }, st); + tl.to(el, { scale: 1, duration: 0.11, ease: "power3.in" }, st + 0.01); + tl.set(el, { scaleX: 1.05, scaleY: 0.95 }, st + 0.12); + tl.to(el, { scaleX: 1, scaleY: 1, duration: 0.22, ease: "elastic.out(1, 0.45)" }, st + 0.16); + tl.to(el, { color: minor ? ${J(dna.palette.minorCool || "#F2CFA0")} : BONE, duration: minor ? 0.6 : 0.32, ease: "power1.in" }, st + 0.15); + if (st + 0.02 >= lastB && st + 0.24 <= XO) { // one bounce owner at a time; none during exit + tl.set(line, { y: minor ? 4 : 2 }, st + 0.02); + tl.to(line, { y: 0, duration: 0.18, ease: "power2.out" }, st + 0.06); + lastB = st + 0.24; + }` + : ` // FLICK: tube lights with seeded double-flicks + tl.set(el, { opacity: 0.35 }, st); + if (rrnd() < 0.35) { tl.set(el, { opacity: 0.08 }, st + F); tl.set(el, { opacity: 1 }, st + 2 * F); } + else { tl.set(el, { opacity: 1 }, st + F); } + if (minor) tl.fromTo(el, { scale: ${dna.body.emScale || 1.18} }, { scale: 1, duration: 0.3, ease: "power2.out" }, st + F);` +} + }); +${ + b.exit === "drop" + ? ` // DROP exit (completes before the next line stamps) + tl.to(line, { y: 34, opacity: 0, duration: 0.16, ease: "power2.in" }, XO); + tl.set(line, { display: "none" }, XO + 0.18);` + : b.exit === "fade" + ? ` // FADE exit (quiet settle-down) + tl.to(line, { opacity: 0, y: 6, duration: 0.15, ease: "power1.in" }, XO); + tl.set(line, { display: "none" }, XO + 0.17);` + : ` // POWERCUT exit (completes before the next line) + tl.set(line, { opacity: 0.5 }, XO); tl.set(line, { opacity: 0.12 }, XO + F); + tl.set(line, { opacity: 0 }, XO + 3 * F); tl.set(line, { display: "none" }, XO + 4 * F);` +} + }); +${ + b.rule + ? ` tl.fromTo("#rrule", { width: 0, opacity: 0 }, { width: ${b.rule.width}, opacity: 0.5, duration: 0.4, ease: "power2.out" }, 0.25); + tl.to("#rrule", { opacity: 0, duration: 0.3 }, ${(DUR - 0.2).toFixed(2)});` + : "" +} +${ + b.yield + ? ` // rail yields while the apex lands (furniture never contests the hero). + // Overlap guards: dim starts after the line is IN, never runs into the exit; + // restore is emitted only with clear runway before the exit (else the line + // simply exits dimmed — never two owners of one opacity). + RAIL.forEach((L) => { + if (L.in < ${heroIn.toFixed(3)} + 0.9 && L.out > ${heroIn.toFixed(3)} - 0.3) { + const XO2 = L.out - ${b.exit === "drop" ? "0.18" : "0.17"}; + const dimT = Math.max(${(heroIn - (b.yield.pre || 0.2)).toFixed(3)}, L.in + 0.05); + if (XO2 > dimT + 0.25) { + tl.to("#" + L.id, { opacity: ${b.yield.dim}, duration: 0.2 }, dimT); + const resT = ${(heroIn + (b.yield.post || 0.9)).toFixed(3)}; + if (resT + 0.3 < XO2) tl.to("#" + L.id, { opacity: 1, duration: 0.25 }, resT); + } + } + });` + : "" +}`; + return { css, html, js }; +} + +function paradigmPanel() { + const b = dna.body; + const lockT = + heroIn + 0.3 + (dna.hero.params.lockStagger || 0.045) * (heroText.length - 1) + 0.083; + const lineData = LINES.map((L) => ({ + id: "ln" + L.id, + words: L.words.map((w) => [ + w.display, + +w.start.toFixed(3), + // redaction: words inside the hero phrase window get blocks until lock + redactLinkage && w.start >= hero.start - 0.01 && w.start <= hero.end + 0.01 + ? +lockT.toFixed(3) + : 0, + ]), + })); + const lineH = Math.round(b.fontPx * 1.35); + const maxVis = Math.max(3, Math.floor((H * 0.48 - 60) / lineH)); + const dockCss = CLEARER === "right" ? `right:${b.panel.left}px;` : `left:${b.panel.left}px;`; + const css = ` + #panel { position:absolute; ${dockCss} bottom:${b.panel.bottom}px; width:${b.panel.width}px; + padding:18px 22px 22px; background:${dna.palette.panelBg}; + border:1px solid ${dna.palette.accent}59; border-radius:4px; opacity:0; + box-shadow: 0 0 24px rgba(0,0,0,0.35), inset 0 0 60px ${dna.palette.accent}0a; } + #panel .hd { font-family:'${dna.fonts.tag}', monospace; font-size:22px; color:${dna.palette.prompt}; + letter-spacing:2px; border-bottom:1px solid ${dna.palette.accent}40; + padding-bottom:8px; margin-bottom:10px; } + .ln { font-family:'${dna.fonts.body}', monospace; font-size:${b.fontPx}px; line-height:1.35; + color:${dna.palette.body}; text-shadow: 0 0 8px ${dna.palette.accent}59; + white-space:nowrap; opacity:0; } + .ln .pr { color:${dna.palette.prompt}; margin-right:8px; } + .ln .w { display:inline-block; overflow:hidden; vertical-align:bottom; white-space:nowrap; + margin-right:0.3em; } + .ln .red { color:#7adcff; } + .caret { display:inline-block; width:14px; height:26px; background:${dna.palette.body}; + vertical-align:baseline; opacity:0; margin-left:4px; } + #logclip { max-height:${maxVis * lineH}px; overflow:hidden; } + #logwrap { position:relative; }`; + const html = `
+
${esc(theme.panelHeader || "OBS-01 // " + (b.panel.header || "LOG_"))}
+
+${lineData.map((L) => `
`).join("\n")} +
+
`; + const js = ` + // ---- body paradigm: PANEL (typed console log, accumulate) ---- + tl.fromTo("#panel", { opacity: 0, x: -16 }, { opacity: 1, x: 0, duration: 0.3, ease: "power2.out" }, 0.05); +${ + b.yield + ? ` tl.to("#panel", { opacity: ${b.yield.dim}, duration: 0.25, ease: "power1.in" }, ${(heroIn - 0.08).toFixed(3)}); + tl.to("#panel", { opacity: 1, duration: 0.3, ease: "power1.out" }, ${(lockT + 0.15).toFixed(3)});` + : "" +} + const LOG = ${J(lineData)}; + const MAXVIS = ${maxVis}, LINEH = ${lineH}; + LOG.forEach((L, li) => { + if (li >= MAXVIS) { // terminal scroll: older rows slide up out of the clip + tl.to("#logwrap", { y: -(li - MAXVIS + 1) * LINEH, duration: 0.28, ease: "power2.out" }, + L.words[0][1] - 0.10); + } + const line = document.getElementById(L.id); + const p = document.createElement("span"); p.className = "pr"; p.textContent = "$"; + line.appendChild(p); + tl.set(line, { opacity: 1 }, L.words[0][1] - 0.03); + L.words.forEach(([txt, st, redUntil]) => { + const wrap = document.createElement("span"); wrap.className = "w"; + const inner = document.createElement("span"); + inner.textContent = redUntil ? "█".repeat(Math.max(3, txt.length - 1)) : txt; + wrap.appendChild(inner); line.appendChild(wrap); + tl.fromTo(wrap, { width: 0 }, { width: "auto", duration: 0.12, + ease: "steps(" + Math.max(2, txt.length) + ")" }, st); + if (redUntil) { + const real = document.createElement("span"); + real.textContent = txt; real.style.display = "none"; real.className = "red"; + wrap.appendChild(real); + tl.set(inner, { display: "none" }, redUntil); + tl.set(real, { display: "inline" }, redUntil); + } + }); +${ + b.caret + ? ` const c = document.createElement("span"); c.className = "caret"; line.appendChild(c); + const lastEnd = L.words[L.words.length - 1][1] + 0.25; + for (let bk = 0; bk < 4; bk++) tl.set(c, { opacity: bk % 2 === 0 ? 1 : 0 }, lastEnd + bk * 0.22); + tl.set(c, { opacity: 0 }, lastEnd + 0.9);` + : "" +} + }); +${ + (dna.linkages || []).includes("corrupt-on-last-word") + ? ` // the feed corrupts on the final word + const NZ = ${(LASTWORD.start + 0.04).toFixed(3)}; + [[3,0],[-4,1],[3,2],[-2,3],[0,4]].forEach(([dx, k]) => { + tl.set("#panel", { x: dx, filter: dx ? "hue-rotate(" + dx * 8 + "deg)" : "none" }, NZ + k * F); + }); + tl.set("#panel", { x: 0, filter: "none" }, NZ + 5 * F);` + : "" +}`; + return { css, html, js }; +} + +function paradigmPoem() { + const b = dna.body; + const colLeft = CLEARER === "right" ? Math.round(W * 0.52) : b.left; + const scrimSide = CLEARER === "right" ? "right" : "left"; + // stanza split: break after a line whose last word ends a sentence + const stanzas = [[]]; + LINES.forEach((L) => { + stanzas[stanzas.length - 1].push(L); + const last = L.words[L.words.length - 1].display; + if (/[.!?]$/.test(last) && L !== LINES[LINES.length - 1]) stanzas.push([]); + }); + if (stanzas.some((s) => s.length > b.stanzaTops.length)) + console.warn( + "[make-theme] poem stanza exceeds available slots — extra lines share the last slot", + ); + const stanzaData = stanzas.map((s, si) => + s.map((L, li) => ({ + id: "s" + si + "l" + L.id, + top: b.stanzaTops[Math.min(li, b.stanzaTops.length - 1)] + si * 16, + words: L.words.map((w) => [ + w.display, + +w.start.toFixed(3), + w.isHero && heroInline ? "big" : w.minor ? "em" : "", + ]), + })), + ); + const lastStanzaIdx = stanzaData.length - 1; + const css = ` + ${ + b.scrim + ? `#pscrim { position:absolute; inset:0; opacity:0; + background: linear-gradient(${scrimSide === "left" ? "100deg" : "260deg"}, + rgba(4,8,16,${b.scrim.opacity}) 0%, rgba(4,8,16,${b.scrim.opacity * 0.6}) 38%, rgba(4,8,16,0) 62%); }` + : "" + } + .pline { position:absolute; left:${colLeft}px; white-space:nowrap; + font-family:'${dna.fonts.body}', serif; font-weight:600; font-size:${b.fontPx}px; + line-height:1; color:${dna.palette.body}; + text-shadow: 0 0 14px rgba(255,244,214,0.5), 0 2px 12px rgba(0,0,0,0.6); } + .pline .l { display:inline-block; opacity:0; } + .pline .sp { display:inline-block; width:0.28em; } + .pline .big { font-size:${Math.round(b.fontPx * (b.bigScale || 2))}px; font-style:italic; font-weight:700; + text-shadow: 0 0 24px rgba(255,244,214,0.7), 0 2px 14px rgba(0,0,0,0.6); } + .pline .em { font-size:${Math.round(b.fontPx * (b.emScale || 1.38))}px; font-style:italic; font-weight:700; } + .star { position:absolute; border-radius:50%; background:#fff7e0; opacity:0; + box-shadow: 0 0 8px rgba(255,247,224,0.9); }`; + const html = + (b.scrim ? `
\n` : "") + + stanzaData + .flat() + .map((L) => `
`) + .join("\n"); + const disperse = (dna.linkages || []).includes("disperse-on-last-word"); + const js = ` + // ---- body paradigm: POEM (condense, accumulate, ${disperse ? "disperse" : "hold"}) ---- + const prnd = mulberry32(${b.seed || 777}); + const stage = document.getElementById("stage"); +${ + b.scrim + ? ` tl.fromTo("#pscrim", { opacity: 0 }, { opacity: 1, duration: 0.6, ease: "power1.out" }, 0.15); + tl.to("#pscrim", { opacity: 0, duration: 0.4, ease: "power1.in" }, ${(LASTWORD.start + 0.15).toFixed(3)});` + : "" +} + const STANZAS = ${J(stanzaData)}; + const lastLetters = []; + STANZAS.forEach((stanza, si) => { + stanza.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt, st, cls], wi) => { + if (wi > 0) { const g = document.createElement("span"); g.className = "sp"; line.appendChild(g); } + const letters = []; + for (const ch of txt) { + const l = document.createElement("span"); + l.className = "l" + (cls ? " " + cls : ""); l.textContent = ch; + line.appendChild(l); letters.push(l); + } + const spread = cls === "big" ? ${dna.hero.params.spread || 150} : 46; + letters.forEach((l, li) => { + const sx = (prnd() - 0.5) * 2 * spread, sy = (prnd() - 0.5) * 2 * spread * 0.7; + tl.fromTo(l, { x: sx, y: sy, opacity: 0, filter: "blur(6px)" }, + { x: 0, y: 0, opacity: 1, filter: "blur(0px)", + duration: cls === "big" ? 0.7 : 0.5, ease: "power2.out" }, + st - 0.04 + li * (cls === "big" ? 0.03 : 0.016)); + if (si === ${lastStanzaIdx}) lastLetters.push(l); + }); + if (cls === "big") { + // SETPIECE assembly: star particles fly INTO the apex as it forms + const lt = line.style.top ? parseFloat(line.style.top) : 110; + for (let i = 0; i < ${dna.hero.params.particles || 22}; i++) { + const p = document.createElement("div"); + p.className = "star"; stage.appendChild(p); + const s = 2 + Math.round(prnd() * 3); + const tx = ${colLeft} + 90 + prnd() * 240, ty = lt - 20 + prnd() * 70; + const fx = tx + (prnd() - 0.5) * 560, fy = ty + (prnd() - 0.5) * 380; + gsap.set(p, { width: s, height: s, left: fx, top: fy }); + tl.to(p, { keyframes: { x: [0, (tx - fx) * 0.6, tx - fx], y: [0, (ty - fy) * 0.6, ty - fy], + opacity: [0, 0.95, 0] }, + duration: 0.5 + prnd() * 0.2, ease: "power2.in" }, st - 0.05 + prnd() * 0.3); + } + tl.fromTo(letters, { textShadow: "0 0 30px rgba(255,244,214,0.9), 0 2px 12px rgba(0,0,0,0.5)" }, + { textShadow: "0 0 18px rgba(255,244,214,0.55), 0 2px 12px rgba(0,0,0,0.5)", + duration: 0.8, ease: "power1.out" }, st + 0.55); + } + }); + }); + // earlier stanzas drift out before the next stanza begins + if (si < STANZAS.length - 1) { + const nextIn = STANZAS[si + 1][0].words[0][1]; + stanza.forEach((L, k) => { + tl.to("#" + L.id + " .l", { y: -10, opacity: 0, filter: "blur(4px)", + duration: 0.5, ease: "power1.in", stagger: 0.008 }, nextIn - 0.62 + k * 0.12); + tl.set("#" + L.id, { display: "none" }, nextIn + 0.1); + }); + } + }); +${ + disperse + ? ` // SEMANTIC EXIT: the whole visible poem disperses on the final word. + // Clamped so the scatter COMPLETES before the clip ends (stagger included). + const NZ = ${Math.min(LASTWORD.start + 0.06, DUR - 0.58).toFixed(3)}; + const DDUR = ${Math.min(0.42, Math.max(0.24, DUR - Math.min(LASTWORD.start + 0.06, DUR - 0.58) - 0.14)).toFixed(2)}; + lastLetters.forEach((l) => { + const dx = (prnd() - 0.5) * 260, dy = (prnd() - 0.5) * 200 - 40; + tl.to(l, { x: dx, y: dy, opacity: 0, filter: "blur(7px)", + duration: DDUR, ease: "power2.in" }, NZ + prnd() * 0.05); + });` + : "" +}`; + return { css, html, js }; +} + +function paradigmTakeover() { + const b = dna.body; + // each LINE is a card; minors hot; hero = colorflip apex inline + const cards = LINES.map((L, i) => { + const txt = L.words + .map((w) => w.display) + .join(" ") + .toUpperCase(); + const isHero = L.words.some((w) => w.isHero); + const hot = isHero || L.words.some((w) => w.minor); + const _contentish = txt.replace(/[^A-Z]/g, "").length; + const px = isHero + ? dna.hero.fontPx || 196 + : Math.min( + b.sizes.minor, + Math.round(Math.min(b.sizes.content, (W * 0.86) / (0.55 * Math.max(3, txt.length)))), + ); + return { + id: "c" + i, + txt, + in: +L.in.toFixed(3), + out: +L.out.toFixed(3), + px, + hot: hot ? 1 : 0, + hero: isHero ? 1 : 0, + last: i === LINES.length - 1 ? 1 : 0, + }; + }); + // a held card before a silence ≥0.5s creeps, then VOID until the next card + for (let i = 0; i + 1 < cards.length; i++) { + const gap = cards[i + 1].in - LINES[i].words[LINES[i].words.length - 1].end; + if (gap > 0.5) { + cards[i].creep = 1; + cards[i].out = +(cards[i + 1].in - Math.min(0.6, gap * 0.45)).toFixed(3); + } + } + const css = ` + #dim { position:absolute; inset:0; opacity:0; background:#05070c; } + .card { position:absolute; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.body}', sans-serif; line-height:1; letter-spacing:0.015em; + color:${dna.palette.body}; text-shadow: 0 4px 26px rgba(0,0,0,0.65); } + .card.hot { color:${dna.palette.accent}; + text-shadow: 0 0 34px ${dna.palette.accent}73, 0 4px 26px rgba(0,0,0,0.65); }`; + const html = `
`; + const js = ` + // ---- body paradigm: TAKEOVER (hard-cut full-frame cards) + colorflip apex ---- + const stage = document.getElementById("stage"); + const ANCH = ${J(b.anchors)}; + tl.fromTo("#dim", { opacity: 0 }, { opacity: ${b.baseDim}, duration: 0.25, ease: "power2.in" }, 0.05); + const CARDS = ${J(cards)}; + CARDS.forEach((c, ci) => { + const el = document.createElement("div"); + el.className = "card" + (c.hot ? " hot" : ""); + el.textContent = c.txt; el.style.fontSize = c.px + "px"; + stage.appendChild(el); + const [ax, ay] = ANCH[ci % ANCH.length]; + gsap.set(el, { left: ax, top: ay, xPercent: -50, yPercent: -50, + rotation: (ci % 2 === 0 ? 1 : -1) * (0.8 + (ci % 3) * 0.7) }); + if (c.hero) { + // SETPIECE colorflip: crush-in, squash, settle; plate dim deepens + tl.set("#dim", { opacity: ${dna.hero.params.dimKick} }, c.in); + tl.to("#dim", { opacity: ${b.baseDim}, duration: 0.5, ease: "power2.out" }, c.in + 0.12); + tl.set(el, { opacity: 1, scale: ${dna.hero.params.crushFrom}, filter: "blur(10px) brightness(2.6)" }, c.in - 0.04); + tl.to(el, { scale: 1, filter: "blur(0px) brightness(1)", duration: 0.11, ease: "power4.in" }, c.in - 0.04); + tl.set(el, { scaleX: 1.10, scaleY: 0.92 }, c.in + 0.07); + tl.to(el, { scaleX: 1, scaleY: 1, duration: 0.45, ease: "elastic.out(1.05, 0.36)" }, c.in + 0.15); + tl.to(el, { scale: 1.05, duration: Math.max(0.2, c.out - c.in - 0.3), ease: "power1.inOut" }, c.in + 0.25); + } else if (c.hot) { + tl.set(el, { opacity: 1, scale: ${b.hotSnap} }, c.in); + tl.to(el, { scale: 1, duration: 0.22, ease: "back.out(1.8)" }, c.in + 0.02); + } else { + tl.set(el, { opacity: 1, scale: 0.94 }, c.in); + tl.to(el, { scale: c.creep ? ${b.creepScale} : 1.0, + duration: Math.max(0.08, c.out - c.in - 0.02), + ease: c.creep ? "power1.in" : "power2.out" }, c.in + 0.01); + } + if (c.last && ${J(!!dna.hero.params.dissolveLast)}) { + tl.to(el, { filter: "blur(9px)", opacity: 0, duration: 0.32, ease: "power2.in" }, c.out - 0.23); + tl.set(el, { display: "none" }, c.out + 0.1); + } else { + tl.set(el, { opacity: 0, display: "none" }, c.out); + } + }); + tl.to("#dim", { opacity: 0, duration: 0.3, ease: "power1.in" }, ${(DUR - 0.27).toFixed(2)});`; + return { css, html, js }; +} + +/* ===================================================================== + * HERO SETPIECES (embedded, bg layer) — { css, html, js } for index.html + * ===================================================================== */ + +function setpieceDetonation() { + const h = dna.hero, + p = h.params, + I = heroIn; + const bw = Math.min(p.barWidth, W - 100, HG.halfW * 2 + 140); + const css = ` + #scrim { position:absolute; inset:0; opacity:0; + background: radial-gradient(120% 105% at 50% 38%, rgba(0,0,0,0) 26%, rgba(0,0,0,0.8) 100%); } + #dimP { position:absolute; inset:0; opacity:0; background:#000; } + #det { position:absolute; left:${HG.x}px; top:${HG.y}px; opacity:0; } + .band, #heat { position:absolute; left:0; top:0; transform:translate(-50%,-50%); + font-family:'${dna.fonts.hero}', sans-serif; font-size:${HG.fontPx}px; line-height:1; + letter-spacing:0.012em; white-space:nowrap; color:${dna.palette.body}; + text-shadow: 0 3px 18px rgba(0,0,0,0.55), 0 1px 3px rgba(0,0,0,0.4); } + ${p.slices.map((s, i) => `#b${i + 1} { clip-path: inset(${s[0]}% 0 ${s[1]}% 0); }`).join("\n ")} + #heat { top:6px; color:#ff7a28; filter:blur(24px); opacity:0; text-shadow:none; } + .bar { position:absolute; left:50%; width:${bw}px; height:3px; margin-left:-${bw / 2}px; + background:${dna.palette.body}; opacity:0.85; transform-origin:50% 50%; } + #barT { top:-${Math.round(HG.fontPx * 0.7)}px; } #barB { top:${Math.round(HG.fontPx * 0.66)}px; } + .tick { position:absolute; width:3px; height:14px; background:${dna.palette.hot}; top:-${Math.round(HG.fontPx * 0.7)}px; opacity:0; } + #tickL { left:calc(50% - ${bw / 2}px); } #tickR { left:calc(50% + ${bw / 2 - 3}px); } + #tagwrap { position:absolute; left:50%; transform:translateX(-50%); top:${Math.round(HG.fontPx * 0.7)}px; + overflow:hidden; white-space:nowrap; } + #tag { font-family:'${dna.fonts.tag}', monospace; font-size:21px; letter-spacing:0.34em; + color:${dna.palette.hot}; white-space:nowrap; text-shadow: 0 2px 8px rgba(0,0,0,0.6); }`; + const html = `
+
+
${esc(heroText)}
+ ${p.slices.map((_, i) => `
${esc(heroText)}
`).join("\n ")} + ${p.bars ? `
` : ""} + ${p.ticks ? `
` : ""} + ${p.tag ? `
${esc(p.tag)} // T+${heroIn.toFixed(2)}S
` : ""} +
`; + const bandIds = p.slices.map((_, i) => "#b" + (i + 1)); + const js = ` + // ---- setpiece: DETONATION (charge → sheared slices snap → cool → furniture) ---- + const I = ${I.toFixed(3)}, HOTC = ${J(dna.palette.hot)}, BONEC = ${J(dna.palette.body)}; + tl.fromTo("#scrim", { opacity: 0 }, { opacity: ${dna.plate.charge}, duration: 0.40, ease: "power2.in" }, I - 0.42); + tl.set("#dimP", { opacity: ${dna.plate.dim} }, I); + tl.to("#dimP", { opacity: ${(dna.plate.dim * 0.47).toFixed(2)}, duration: 0.9, ease: "power2.out" }, I + 0.10); + tl.to("#scrim", { opacity: 0.30, duration: 0.9, ease: "power2.out" }, I + 0.10); + tl.to(["#scrim","#dimP"], { opacity: 0, duration: 0.45, ease: "power1.in" }, ${(heroOut - 0.25).toFixed(3)}); + tl.set("#det", { opacity: 1 }, I - 0.05); + tl.fromTo("#det", { scale: 3.4 }, { scale: 1.0, duration: 0.10, ease: "power4.in" }, I - 0.05); + const BANDS = ${J(bandIds)}; + const SHEAR = ${J(p.sliceShear)}; + BANDS.forEach((sel, i) => { + tl.fromTo(sel, { x: SHEAR[i], filter: "blur(14px) brightness(3.4)" }, + { x: SHEAR[i] * 0.26, filter: "blur(0px) brightness(1.5)", duration: 0.10, ease: "power4.in" }, I - 0.05); + }); + tl.set(BANDS, { x: 0, filter: "brightness(1.9)" }, I + 0.05); + tl.set("#det", { scaleX: 1.12, scaleY: 0.90 }, I + 0.05); + tl.to("#det", { scaleX: 1, scaleY: 1, duration: 0.55, ease: "elastic.out(1.05, 0.34)" }, I + 0.13); + tl.to(BANDS, { filter: "brightness(1)", duration: 0.5, ease: "power2.out" }, I + 0.15); + tl.set(BANDS, { color: HOTC }, I + 0.05); + tl.to(BANDS, { color: BONEC, duration: 0.9, ease: "power1.in" }, I + 0.22); +${p.bars ? ` tl.fromTo(["#barT","#barB"], { scaleX: 0, opacity: 0.85 }, { scaleX: 1, duration: 0.34, ease: "expo.out" }, I + 0.16);` : ""} +${ + p.ticks + ? ` tl.set(["#tickL","#tickR"], { opacity: 1 }, I + 0.42); + tl.fromTo(["#tickL","#tickR"], { scaleY: 0 }, { scaleY: 1, duration: 0.14, ease: "back.out(2)" }, I + 0.42);` + : "" +} +${p.tag ? ` tl.fromTo("#tagwrap", { width: 0 }, { width: 340, duration: 0.45, ease: "steps(16)" }, I + 0.5);` : ""} + tl.fromTo("#heat", { opacity: 0 }, { opacity: 0.75, duration: 0.3 }, I + 0.06); + tl.to("#heat", { keyframes: { opacity: [0.75, 0.5, 0.6, 0.4, 0.46, 0.30] }, duration: 1.4, ease: "none" }, I + 0.5); + tl.to("#det", { scale: 1.035, duration: 1.2, ease: "power1.inOut" }, I + 0.75); + // EXIT: the stamp shears apart + BANDS.forEach((sel, i) => { + tl.to(sel, { x: -SHEAR[i] * 1.5, opacity: 0, duration: 0.16, ease: "power2.in" }, ${(heroOut - 0.18).toFixed(3)} + i * 0.01); + }); + tl.to(["#barT","#barB","#tickL","#tickR","#tagwrap","#heat"], { opacity: 0, duration: 0.13 }, ${(heroOut - 0.18).toFixed(3)}); + tl.set("#det", { display: "none" }, ${(heroOut + 0.02).toFixed(3)});`; + return { css, html, js }; +} + +function setpieceDecode() { + const h = dna.hero, + p = h.params, + I = heroIn; + const lockStagger = p.lockStagger || 0.045; + const E = theme.hero.exitAt ?? Math.min(heroOut, I + 1.75); + const broom = Math.min(HG.x, W - HG.x) - HG.halfW; // room for brackets + const useBrackets = !!p.brackets && broom > 22; + const boff = Math.max(14, Math.min(40, Math.floor(broom - 8))); + const css = ` + #dimP { position:absolute; inset:0; opacity:0; background:#021018; } + #blk { position:absolute; left:${HG.x}px; top:${HG.y}px; transform:translate(-50%,-50%); opacity:0; } + #word { display:flex; align-items:flex-start; justify-content:center; + font-family:'${dna.fonts.hero}', sans-serif; font-weight:800; font-size:${HG.fontPx}px; + line-height:${HG.fontPx}px; color:#eafaff; + text-shadow: 0 0 14px ${dna.palette.accent}8c, 0 3px 16px rgba(0,0,0,0.6); } + .reel { display:block; height:${HG.fontPx}px; width:0.82em; overflow:hidden; text-align:center; } + .reel.sp { width:0.38em; } + .col { display:block; } .col span { display:block; height:${HG.fontPx}px; } + .br { position:absolute; width:26px; height:26px; opacity:0; } + .br.tl { left:-${boff}px; top:-30px; border-left:3px solid ${dna.palette.accent}; border-top:3px solid ${dna.palette.accent}; } + .br.tr { right:-${boff}px; top:-30px; border-right:3px solid ${dna.palette.accent}; border-top:3px solid ${dna.palette.accent}; } + .br.bl { left:-${boff}px; bottom:-34px; border-left:3px solid ${dna.palette.accent}; border-bottom:3px solid ${dna.palette.accent}; } + .br.brr{ right:-${boff}px; bottom:-34px; border-right:3px solid ${dna.palette.accent}; border-bottom:3px solid ${dna.palette.accent}; }`; + const html = `
+
+
+ ${useBrackets ? `
` : ""} +
`; + const js = ` + // ---- setpiece: DECODE (glyph reels lock left→right, CRT-off exit) ---- + const I = ${I.toFixed(3)}, TEXT = ${J(heroText)}, GLYPHS = ${J(p.glyphs)}; + const drnd = mulberry32(${p.seed || 99}); + tl.fromTo("#dimP", { opacity: 0 }, { opacity: ${dna.plate.dim}, duration: 0.3, ease: "power2.in" }, I - 0.25); + tl.to("#dimP", { opacity: 0, duration: 0.4, ease: "power1.in" }, ${(E + 0.05).toFixed(3)}); + const word = document.getElementById("word"); + const reels = []; + for (let i = 0; i < TEXT.length; i++) { + const ch = TEXT[i]; + const reel = document.createElement("span"); + reel.className = "reel" + (ch === " " ? " sp" : ""); + const col = document.createElement("span"); col.className = "col"; + if (ch !== " ") { + const n = 5 + Math.floor(drnd() * 4); + for (let k = 0; k < n; k++) { + const s = document.createElement("span"); + s.textContent = GLYPHS[Math.floor(drnd() * GLYPHS.length)]; col.appendChild(s); + } + const fin = document.createElement("span"); fin.textContent = ch; col.appendChild(fin); + reel.dataset.steps = n; + } + reel.appendChild(col); word.appendChild(reel); reels.push({ el: reel, col, ch, i }); + } + tl.set("#blk", { opacity: 1 }, I - 0.02); + reels.forEach((r) => { + if (r.ch === " ") return; + const lock = I + 0.30 + ${lockStagger} * r.i; + const steps = parseInt(r.el.dataset.steps, 10); + tl.fromTo(r.col, { y: 0 }, { y: -${HG.fontPx} * steps, duration: lock - I, ease: "steps(" + steps + ")" }, I); + tl.set(r.el, { color: "#bfe9ff", + textShadow: "3px 0 10px ${dna.palette.accent}cc, -3px 0 10px ${dna.palette.magenta}cc" }, I); + tl.set(r.el, { textShadow: "-3px 0 10px ${dna.palette.accent}cc, 3px 0 10px ${dna.palette.magenta}cc" }, I + 0.12 + 0.02 * r.i); + tl.set(r.el, { color: "#ffffff", textShadow: "0 0 22px rgba(255,255,255,0.95)" }, lock); + tl.set(r.el, { color: "#eafaff", + textShadow: "0 0 14px ${dna.palette.accent}8c, 0 3px 16px rgba(0,0,0,0.6)" }, lock + 0.083); + }); + const LOCKED = I + 0.30 + ${lockStagger} * (TEXT.length - 1) + 0.083; + tl.set("#blk", { scale: 1.04 }, LOCKED - 0.083); + tl.to("#blk", { scale: 1, duration: 0.3, ease: "elastic.out(1, 0.4)" }, LOCKED); +${ + useBrackets + ? ` [".br.tl",".br.tr",".br.bl",".br.brr"].forEach((sel, k) => { + tl.fromTo(sel, { opacity: 0, scale: 0.3 }, { opacity: 0.95, scale: 1, duration: 0.22, ease: "expo.out" }, I - 0.12 + k * 0.05); + });` + : "" +} + // EXIT: CRT power-off + tl.to("#blk", { filter: "brightness(2.6)", duration: 0.07, ease: "power2.in" }, ${E.toFixed(3)}); + tl.to("#blk", { scaleY: 0.012, duration: 0.13, ease: "power4.in" }, ${(E + 0.06).toFixed(3)}); + tl.set("#blk", { opacity: 0, display: "none" }, ${(E + 0.2).toFixed(3)});`; + return { css, html, js }; +} + +function setpieceDrawon() { + const h = dna.hero, + p = h.params, + I = heroIn; + // generate the stroke path at COMPILE time — any word, zero tuning + const fontPath = path.join(SKILL, "assets/strokefonts", dna.fonts.strokeFont); + const gen = path.join(SKILL, "scripts/gen-stroke-path.py"); + const tw = Math.min(p.targetWidth || 640, W - 200); + const D = execFileSync( + "python3", + [gen, fontPath, heroDisplay.toLowerCase(), String(tw), "185", String(Math.round(380 - tw / 2))], + { encoding: "utf8" }, + ).trim(); + const WIN = p.window || 0.78; + const css = ` + #spill { position:absolute; left:${HG.x}px; top:${HG.y}px; width:820px; height:440px; + margin-left:-410px; margin-top:-220px; border-radius:50%; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, ${dna.palette.accent}57 0%, ${dna.palette.accent}00 70%); } + #sign { position:absolute; left:${HG.x}px; top:${HG.y}px; } + #neonsvg { position:absolute; left:0; top:0; margin-left:-380px; margin-top:-150px; + transform:rotate(${p.rotate || -3}deg); overflow:visible; } + #coreG { filter: drop-shadow(0 0 5px #fff) drop-shadow(0 0 16px ${dna.palette.accent}); } + #pen { filter: drop-shadow(0 0 8px #fff) drop-shadow(0 0 22px ${dna.palette.accent}); }`; + const html = `
+
+ + + + + + + + +
`; + const js = ` + // ---- setpiece: DRAWON (single-line font, SEQUENTIAL stroke reveal) ---- + // SVG dash restarts per subpath → one per pen stroke, revealed in + // writing order at constant pen speed; nib rides each stroke, hops at lifts. + const I = ${I.toFixed(3)}, WIN = ${WIN}, DRAWN = I + WIN, ENDT = ${heroOut.toFixed(3)}; + const D = ${J(D)}; + document.getElementById("tubeP").setAttribute("d", D); + const subs = D.split(/(?=M )/).map(s => s.trim()).filter(Boolean); + const SVGNS = "http://www.w3.org/2000/svg"; + function mk(parent, d, stroke, w) { + const el = document.createElementNS(SVGNS, "path"); + el.setAttribute("d", d); el.setAttribute("fill", "none"); + el.setAttribute("stroke", stroke); el.setAttribute("stroke-width", w); + el.setAttribute("stroke-linecap", "round"); el.setAttribute("stroke-linejoin", "round"); + el.setAttribute("opacity", "0"); // hidden until its turn (kills round-cap dot) + document.getElementById(parent).appendChild(el); + return el; + } + const strokes = subs.map((d) => ({ halo: mk("haloG", d, ${J(dna.palette.accent)}, ${p.haloWidth}), + core: mk("coreG", d, "#fff", ${p.tubeWidth}) })); + let total = 0; + strokes.forEach((s) => { s.len = s.core.getTotalLength(); total += s.len; }); + tl.fromTo("#tubeP", { opacity: 0 }, { opacity: 1, duration: 0.35 }, I - 0.6); + tl.fromTo("#spill", { opacity: 0 }, { opacity: ${p.spill || 0.38}, duration: WIN + 0.2, ease: "power1.in" }, I); + const pen = document.getElementById("pen"); + let t = I; + strokes.forEach((s) => { + const d = WIN * s.len / total; + gsap.set([s.core, s.halo], { strokeDasharray: s.len, strokeDashoffset: s.len }); + tl.set([s.core, s.halo], { opacity: 1 }, t); + tl.fromTo([s.core, s.halo], { strokeDashoffset: s.len }, { strokeDashoffset: 0, duration: d, ease: "none" }, t); + const n = Math.max(4, Math.round(s.len / 14)), xs = [], ys = []; + for (let k = 0; k <= n; k++) { + const pt = s.core.getPointAtLength(s.len * k / n); xs.push(pt.x); ys.push(pt.y); + } + tl.set(pen, { x: xs[0], y: ys[0] }, t); + tl.to(pen, { keyframes: { x: xs, y: ys }, duration: d, ease: "none" }, t); + t += d; + }); + gsap.set(pen, { attr: { cx: 0, cy: 0 } }); + tl.set(pen, { opacity: 1 }, I - 0.01); + tl.to(pen, { scale: 2.2, opacity: 0, duration: 0.12, ease: "power2.in", transformOrigin: "50% 50%" }, DRAWN); +${ + p.hum + ? ` const humStart = DRAWN + 0.08, humDur = Math.max(0.2, ENDT - humStart); + const NN = Math.max(6, Math.round(humDur / (2 * F))); + const humVals = []; + for (let k = 0; k <= NN; k++) { + const tt = k / NN * humDur; + humVals.push(0.78 + 0.06 * Math.sin(2 * Math.PI * 9 * tt) + 0.05 * Math.sin(2 * Math.PI * 13 * tt + 1.1)); + } + tl.to("#haloG", { keyframes: { opacity: humVals }, duration: humDur, ease: "none" }, humStart); + tl.set("#coreG", { opacity: 0.45 }, ENDT + (${p.buzzDipAt || -0.18})); + tl.set("#coreG", { opacity: 1 }, ENDT + (${p.buzzDipAt || -0.18}) + F);` + : "" +}`; + return { css, html, js }; +} + +/* ===================================================================== + * FRONT FX (fg layer additions) — flash / rings / sparks / scanband + * ===================================================================== */ +function frontFx() { + const fx = dna.fx || {}; + let css = "", + html = "", + js = ""; + const I = heroIn; + if (fx.flash) { + css += ` + #fxflash { position:absolute; inset:0; opacity:0; + background: radial-gradient(95% 80% at 50% 37%, rgba(255,250,240,0.95) 0%, rgba(255,235,210,0.7) 38%, rgba(120,90,60,0) 100%); }`; + html += `
\n`; + js += ` + tl.set("#fxflash", { opacity: ${fx.flash} }, ${(I + 0.045).toFixed(3)}); + tl.to("#fxflash", { opacity: 0, duration: 0.17, ease: "expo.out" }, ${(I + 0.085).toFixed(3)});`; + } + if (fx.rings) { + css += ` + .fxring { position:absolute; left:${HG.x}px; top:${HG.y}px; width:90px; height:32px; + margin-left:-45px; margin-top:-16px; border-radius:50%; opacity:0; } + #fxr1 { border:4px solid rgba(255,228,196,0.95); filter:blur(1.5px); } + #fxr2 { border:3px solid rgba(255,150,70,0.8); filter:blur(3px); }`; + html += `
\n
\n`; + js += ` + tl.set("#fxr1", { opacity: 1, scale: 1 }, ${(I + 0.05).toFixed(3)}); + tl.to("#fxr1", { scale: 16, opacity: 0, duration: 0.58, ease: "expo.out" }, ${(I + 0.05).toFixed(3)}); + tl.to("#fxr1", { filter: "blur(7px)", duration: 0.58, ease: "power1.in" }, ${(I + 0.05).toFixed(3)}); + tl.set("#fxr2", { opacity: 0.55, scale: 1 }, ${(I + 0.13).toFixed(3)}); + tl.to("#fxr2", { scale: 11, opacity: 0, duration: 0.72, ease: "expo.out" }, ${(I + 0.13).toFixed(3)});`; + } + if (fx.sparks) { + css += ` + .fxspark { position:absolute; left:${HG.x}px; top:${HG.y}px; border-radius:2px; + background:#ffd9a8; opacity:0; } + .fxember { position:absolute; border-radius:50%; background:#ff9544; filter:blur(1px); opacity:0; }`; + js += ` + { const frnd = mulberry32(${fx.seed || 7}); + const stg = document.getElementById("stage"); + for (let i = 0; i < ${fx.sparks}; i++) { + const el = document.createElement("div"); el.className = "fxspark"; stg.appendChild(el); + const ang = frnd() * Math.PI * 2, dist = 130 + frnd() * 330; + const dx = Math.cos(ang) * dist, dy = Math.sin(ang) * dist * 0.55; + const grav = 40 + frnd() * 90, s = 3 + Math.round(frnd() * 5), d = 0.6 + frnd() * 0.45; + gsap.set(el, { width: s, height: s, x: 0, y: 0 }); + tl.set(el, { opacity: 1 }, ${(I + 0.05).toFixed(3)}); + tl.to(el, { keyframes: { x: [0, dx*0.55, dx*0.85, dx], + y: [0, dy*0.55 + grav*0.15, dy*0.85 + grav*0.55, dy + grav], + opacity: [1, 1, 0.65, 0] }, duration: d, ease: "power2.out" }, ${(I + 0.05).toFixed(3)}); + } + for (let i = 0; i < ${fx.embers || 0}; i++) { + const el = document.createElement("div"); el.className = "fxember"; stg.appendChild(el); + const s = 3 + Math.round(frnd() * 3); + gsap.set(el, { width: s, height: s, left: ${HG.x - 220} + frnd() * 440, top: ${HG.y + 32} + frnd() * 60 }); + const t0 = ${(I + 0.6).toFixed(3)} + frnd() * 0.9, dr = 1.0 + frnd() * 0.7; + const yA = -40 - frnd() * 50, yB = -80 - frnd() * 60; + const xA = (frnd() - 0.5) * 30, xB = (frnd() - 0.5) * 50; + tl.to(el, { keyframes: { opacity: [0, 0.75, 0.4, 0.8, 0], + y: [0, yA*0.5, yA, (yA+yB)/2, yB], + x: [0, xA*0.5, xA, (xA+xB)/2, xB] }, duration: dr, ease: "power1.out" }, t0); + } + }`; + } + if (fx.crowdflash) { + // two stadium camera-flash pops: lock start / lock end (flapboard rhythm) + const [fa, fb] = fx.crowdflash; + const lockEnd = I + ((dna.hero.params || {}).lockWindow || 0.34); + css += ` + #fxcrowd { position:absolute; inset:0; opacity:0; + background: radial-gradient(85% 70% at 50% 34%, rgba(255,250,238,0.85) 0%, + rgba(255,238,210,0.45) 45%, rgba(60,50,35,0) 100%); }`; + html += `
\n`; + js += ` + tl.set("#fxcrowd", { opacity: ${fa} }, ${I.toFixed(3)}); + tl.to("#fxcrowd", { opacity: 0, duration: 0.10, ease: "expo.out" }, ${(I + 0.042).toFixed(3)}); + tl.set("#fxcrowd", { opacity: ${fb} }, ${lockEnd.toFixed(3)}); + tl.to("#fxcrowd", { opacity: 0, duration: 0.12, ease: "expo.out" }, ${(lockEnd + 0.042).toFixed(3)});`; + } + if (fx.paflash) { + // PA-system flash over the board glow at apex contact (ledwipe completes) + const C2 = I + ((dna.hero.params || {}).wipeDur || 0.3); + const pw = (HG.panelW || 900) - 180, + ph = Math.round((HG.panelH || 232) * 1.9); + css += ` + #fxpa { position:absolute; left:${Math.round(HG.x - pw / 2)}px; top:${Math.round(HG.y - ph / 2)}px; + width:${pw}px; height:${ph}px; opacity:0; + background: radial-gradient(closest-side, rgba(255,200,100,0.55), ${dna.palette.accent}00 70%); }`; + html += `
\n`; + js += ` + tl.set("#fxpa", { opacity: ${fx.paflash} }, ${C2.toFixed(3)}); + tl.to("#fxpa", { opacity: 0, duration: 0.22, ease: "expo.out" }, ${(C2 + 0.042).toFixed(3)});`; + } + if (fx.coinflash) { + // 1-frame arcade impact flash at the boss-word strike (the coin blip at + // max amplitude) — vertical center rides the hero band + const FT = I + ((dna.hero.params || {}).flashDelay ?? 0.14); + const cyP = Math.round((HG.y / H) * 100); + css += ` + #fxcoin { position:absolute; inset:0; opacity:0; z-index:16; + background: radial-gradient(58% 38% at 50% ${cyP}%, rgba(255,255,255,0.9) 0%, rgba(255,255,255,0) 70%); }`; + html += `
\n`; + js += ` + tl.set("#fxcoin", { opacity: ${fx.coinflash} }, ${FT.toFixed(3)}); + tl.to("#fxcoin", { opacity: 0, duration: 0.12, ease: "expo.out" }, ${(FT + 0.042).toFixed(3)});`; + } + if (fx.inkflecks) { + // red ink flecks spatter off the rubber-stamp contact (fg layer, ballistic + // with gravity) — fires at C = heroIn + params.crush, the punch anchor + const C4 = I + ((dna.hero.params || {}).crush ?? 0.074); + css += ` + .fxfleck { position:absolute; left:${HG.x}px; top:${HG.y}px; border-radius:50%; + background:${dna.palette.fleck || dna.palette.accent}; opacity:0; }`; + js += ` + { const frnd = mulberry32(${fx.seed || 18}); + const stg = document.getElementById("stage"); + for (let i = 0; i < ${fx.inkflecks}; i++) { + const el = document.createElement("div"); el.className = "fxfleck"; stg.appendChild(el); + const ang = frnd() * Math.PI * 2, dist = 70 + frnd() * 200; + const dx = Math.cos(ang) * dist, dy = Math.sin(ang) * dist * 0.6; + const grav = 30 + frnd() * 60, sz2 = 2 + Math.round(frnd() * 3), d = 0.32 + frnd() * 0.2; + gsap.set(el, { width: sz2, height: sz2, x: 0, y: 0 }); + tl.set(el, { opacity: 1 }, ${C4.toFixed(3)}); + tl.to(el, { keyframes: { x: [0, dx * 0.6, dx], + y: [0, dy * 0.6 + grav * 0.2, dy + grav], + opacity: [1, 0.85, 0] }, + duration: d, ease: "power2.out" }, ${(C4 + 0.01).toFixed(3)}); + } + }`; + } + if (fx.laserflash) { + // apex contact flash in FRONT of everything (the laser ignite pop, 4 + // frames) — sized from the hero rect, tinted with the accent + const fw = Math.round(2 * (HG.halfW || 330) + 80), + fh = Math.round((HG.fontPx || 100) * 4.8); + css += ` + #fxlaser { position:absolute; left:${HG.x - Math.round(fw / 2)}px; top:${HG.y - Math.round(fh / 2)}px; + width:${fw}px; height:${fh}px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, rgba(235,255,244,0.9) 0%, ${dna.palette.accent}73 38%, rgba(0,0,0,0) 72%); }`; + html += `
\n`; + js += ` + tl.set("#fxlaser", { opacity: ${fx.laserflash} }, ${(I + 0.03).toFixed(3)}); + tl.to("#fxlaser", { opacity: 0, duration: 0.16, ease: "expo.out" }, ${(I + 0.075).toFixed(3)});`; + } + if (fx.strikeflash) { + // full-frame lightning flash in FRONT of everything: leader blink 2 frames + // before contact (bright / dim alternation), return stroke at contact + 1f, + // expo-out decay — same flicker grammar as the bg bolt + css += ` + #fxstrike { position:absolute; inset:0; opacity:0; + background: radial-gradient(80% 65% at 50% 38%, rgba(245,250,255,0.9) 0%, rgba(205,228,252,0.5) 40%, rgba(110,140,180,0) 100%); }`; + html += `
\n`; + js += ` + tl.set("#fxstrike", { opacity: ${(fx.strikeflash * 0.45).toFixed(3)} }, ${(I - 2 * F).toFixed(3)}); + tl.set("#fxstrike", { opacity: ${(fx.strikeflash * 0.18).toFixed(3)} }, ${(I - F).toFixed(3)}); + tl.set("#fxstrike", { opacity: ${fx.strikeflash} }, ${(I + 0.02).toFixed(3)}); + tl.to("#fxstrike", { opacity: 0, duration: 0.16, ease: "expo.out" }, ${(I + 0.06).toFixed(3)});`; + } + if (fx.holoflash) { + // cyan LOCK flash in front of everything when the projection boots to + // full brightness — a radial centered on the hero (frame-fraction anchor) + const hxP = ((HG.x / W) * 100).toFixed(1), + hyP = ((HG.y / H) * 100).toFixed(1); + css += ` + #fxholo { position:absolute; inset:0; opacity:0; + background: radial-gradient(58% 44% at ${hxP}% ${hyP}%, ${dna.palette.accent}8c 0%, rgba(80,160,200,0.18) 45%, rgba(40,80,110,0) 72%); }`; + html += `
\n`; + js += ` + tl.set("#fxholo", { opacity: ${fx.holoflash} }, ${(I + 0.075).toFixed(3)}); + tl.to("#fxholo", { opacity: 0, duration: 0.22, ease: "expo.out" }, ${(I + 0.105).toFixed(3)});`; + } + if (fx.sporeburst) { + // bioluminescent spores burst PAST the bloom at contact (fg, in front of + // the subject) — seeded radial puffs from the hero center, slight sink + const C6 = I + ((dna.hero.params || {}).crush ?? 0.11); + css += ` + .fxspore { position:absolute; left:${HG.x}px; top:${HG.y}px; border-radius:50%; + background:${dna.palette.spore || dna.palette.accent}; + box-shadow: 0 0 6px 1px ${dna.palette.accent}cc; opacity:0; }`; + js += ` + { const frnd = mulberry32(${fx.seed || 12}); + const stg = document.getElementById("stage"); + for (let i = 0; i < ${fx.sporeburst}; i++) { + const el = document.createElement("div"); el.className = "fxspore"; stg.appendChild(el); + const s = 2 + Math.round(frnd()); + gsap.set(el, { width: s, height: s }); + const ang = frnd() * Math.PI * 2, dist = 70 + frnd() * 110; + const dx = Math.cos(ang) * dist * 1.25, dy = Math.sin(ang) * dist * 0.7; + tl.to(el, { keyframes: { x: [0, dx * 0.6, dx], y: [0, dy * 0.6, dy + 10], + opacity: [0.7, 0.5, 0] }, + duration: 0.45 + frnd() * 0.15, ease: "power2.out" }, ${(C6 + 0.01).toFixed(3)} + i * 0.012); + } + }`; + } + if (fx.silkmotes) { + // gentle aurora light motes drifting up near the ribbon during its hold + // (fg layer) — seeded along the ribbon span at the demo's spread fractions + // (the gap around 0.4 keeps them off the subject's face) + const halfW = HG.halfW || 440; + css += ` + .fxmote { position:absolute; border-radius:50%; opacity:0; filter:blur(1.5px); }`; + js += ` + { const frnd = mulberry32(${fx.seed || 9}); + const stg9 = document.getElementById("stage"); + const PALM = [${J(dna.palette.rose)}, ${J(dna.palette.accent)}, ${J(dna.palette.violet)}]; + const FRX = [-0.88, -0.56, -0.27, 0.05, 0.72, 0.84]; + for (let i = 0; i < ${fx.silkmotes}; i++) { + const m = document.createElement("div"); m.className = "fxmote"; stg9.appendChild(m); + const s = 3 + Math.round(frnd() * 3); + const c = PALM[i % 3]; + const mx = ${HG.x} + FRX[i % 6] * ${Math.round(halfW)} + (frnd() - 0.5) * 40; + const my = ${HG.y} - 5 + frnd() * 110; + gsap.set(m, { width: s, height: s, left: mx, top: my, + background: c, boxShadow: "0 0 6px " + c }); + const t0 = ${(I + 0.13).toFixed(3)} + i * 0.09 + frnd() * 0.08; + tl.fromTo(m, { y: 10 }, + { keyframes: { opacity: [0, 0.45, 0], y: [10, -16, -44] }, + duration: 0.75, ease: "sine.out" }, Math.min(t0, ${(DUR - 0.79).toFixed(3)})); + } + }`; + } + if (fx.paperscraps) { + // torn paper scraps puff PAST the subject at each apex chip contact (fg, + // in front) — ballistic steps(4) arcs, one accent scrap per puff + // (the papermat landing rhythm); centers baked from the chip geometry + const N9 = heroText.length; + const pitch9 = HG.pitch || 132, + step9 = (dna.hero.params || {}).step ?? 0.09; + const y9 = Math.round(HG.y + (HG.tileH || 170) / 2 - 9); + const puffs = []; + for (let i = 0; i < N9; i++) + if (heroText[i] !== " ") + puffs.push([ + Math.round(HG.x + (i - (N9 - 1) / 2) * pitch9), + +(I + i * step9).toFixed(3), + +((i - (N9 - 1) / 2) * 22).toFixed(1), + ]); + css += ` + .fxscrap { position:absolute; opacity:0; border-radius:1px; }`; + js += ` + { const frnd = mulberry32(${fx.seed || 150372}); + const stg = document.getElementById("stage"); + const PUFFS = ${J(puffs)}; + PUFFS.forEach(([px, pc, drift]) => { + for (let k = 0; k < ${fx.paperscraps}; k++) { + const el = document.createElement("div"); el.className = "fxscrap"; stg.appendChild(el); + const s = 7 + Math.round(frnd()*6); + el.style.width = s+"px"; el.style.height = Math.max(4, s-3)+"px"; + el.style.background = (k === 1) ? ${J(dna.palette.accent)} : ${J(dna.palette.chip || "#f6edd8")}; + el.style.left = (px + (frnd()-0.5)*40)+"px"; + el.style.top = (${y9} + (frnd()-0.5)*14)+"px"; + const dx = (frnd()-0.5)*180 + drift; + const dyU = -(35 + frnd()*55); + const dyF = dyU + 80 + frnd()*55; + const rot = (frnd()-0.5)*240; + tl.set(el, { opacity: 1 }, pc); + tl.to(el, { keyframes: { x: [0, dx*0.6, dx], y: [0, dyU, dyF], + rotation: [0, rot*0.6, rot], opacity: [1, 1, 0] }, + duration: 0.42, ease: "steps(4)" }, pc); + } + }); + }`; + } + if (fx.confetti) { + // paper confetti flicks up PAST the subject when the apex word pops (fg, + // in front) — seeded ballistic arcs with card tumble; launch line baked + // from the centerfold hinge (90% of the burst box, where the paper folds) + const u0 = (HG.burstR || 220) / 220; + const boxH0 = HG.boxH || 560; + const hingeY = Math.round(HG.y + 24 * u0 - boxH0 / 2 + 0.9 * boxH0); + const CC = dna.palette.conf || [ + dna.palette.cream || "#f6ecd4", + dna.palette.accent, + dna.palette.body, + ]; + css += ` + .fxconf { position:absolute; opacity:0; border-radius:1px; }`; + js += ` + { const frnd = mulberry32(${fx.seed || 360372}); + const stg = document.getElementById("stage"); + const CCOL = ${J(CC)}; + for (let i = 0; i < ${fx.confetti}; i++) { + const el = document.createElement("div"); el.className = "fxconf"; + el.style.background = CCOL[i % CCOL.length]; stg.appendChild(el); + gsap.set(el, { width: 5 + Math.round(frnd() * 5), height: 4 + Math.round(frnd() * 4), + left: ${HG.x - 30} + frnd() * 70, top: ${hingeY - 2} + frnd() * 16 }); + const dx = (frnd() - 0.5) * 320, up = -90 - frnd() * 140, grav = 150 + frnd() * 120; + const rot = (frnd() - 0.5) * 520, d = 0.55 + frnd() * 0.3, t0 = ${(I + 0.128).toFixed(3)} + frnd() * 0.08; + tl.set(el, { opacity: 1 }, t0); + tl.to(el, { keyframes: { x: [0, dx * 0.5, dx * 0.85, dx], + y: [0, up, up * 0.55 + grav * 0.35, up * 0.1 + grav], + rotation: [0, rot * 0.4, rot * 0.75, rot], + opacity: [1, 1, 0.8, 0] }, + duration: d, ease: "power1.out" }, t0); + } + }`; + } + if (fx.chalkclap) { + // hand-slap dust CLAP in FRONT of the subject the instant the chalk word + // completes (the bg board shakes the same frame) — seeded radial specks + + // a soft blurred puff, centered on the pen's final contact point (baked + // by setpieceChalkwrite into HG.clapX/Y/T) + const cx9 = Math.round(HG.clapX ?? HG.x + (HG.halfW || 80)), + cy9 = Math.round(HG.clapY ?? HG.y), + ct9 = +(HG.clapT ?? I + 0.5).toFixed(3); + const DUST9 = dna.palette.dust || "#f7f5ea"; + css += ` + #fxclap { position:absolute; left:${cx9}px; top:${cy9}px; width:0; height:0; } + #fxclap .cd { position:absolute; left:0; top:0; border-radius:50%; background:${DUST9}; opacity:0; } + #fxpuff { position:absolute; left:-48px; top:-48px; width:96px; height:96px; border-radius:50%; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, ${DUST9}80 0%, ${DUST9}00 70%); + filter: blur(4px); }`; + html += `
\n`; + js += ` + { const frnd = mulberry32(${fx.seed || 13}); + const clap = document.getElementById("fxclap"); + for (let i = 0; i < ${fx.chalkclap}; i++) { + const s = document.createElement("div"); s.className = "cd"; + const sz = 2.5 + frnd() * 3.2; + s.style.width = sz + "px"; s.style.height = sz + "px"; + s.style.marginLeft = (-sz / 2) + "px"; s.style.marginTop = (-sz / 2) + "px"; + clap.appendChild(s); + const a = (i / ${fx.chalkclap}) * 6.2832 + (frnd() - 0.5) * 0.5; + const dist = 42 + frnd() * 55; + tl.set(s, { opacity: 1 }, ${ct9}); + tl.to(s, { x: Math.cos(a) * dist, y: Math.sin(a) * dist * 0.8 + 26, + duration: 0.5 + frnd() * 0.15, ease: "power2.out" }, ${ct9}); + tl.to(s, { opacity: 0, duration: 0.4, ease: "power1.in" }, ${(ct9 + 0.1).toFixed(3)}); + } + tl.fromTo("#fxpuff", { opacity: 0.55, scale: 0.35 }, + { opacity: 0, scale: 1.8, duration: 0.5, ease: "power2.out" }, ${ct9}); + }`; + } + if (fx.paintsplat) { + // paint SPLAT in FRONT of the subject the instant the spray tag completes + // — a hot magenta ring + a soft paint-color ring + seeded droplets with + // gravity, centered on the pen-finish point (baked by setpieceSpraytag + // into HG.splatX/Y/T) + const sx = Math.max(60, Math.min(W - 60, Math.round(HG.splatX ?? HG.x + (HG.halfW || 80)))); + const sy = Math.round(HG.splatY ?? HG.y); + const st9 = +Math.min(HG.splatT ?? I + 0.5, DUR - 0.5).toFixed(3); + const HOT9 = dna.palette.em2 || dna.palette.hot || "#ff2e88"; + const PAINT9 = dna.palette.accent || "#ffd23f"; + css += ` + .fxsplat { position:absolute; left:${sx}px; top:${sy}px; border-radius:50%; opacity:0; } + #fxsp1 { width:40px; height:30px; border:5px solid ${HOT9}; margin-left:-20px; margin-top:-15px; } + #fxsp2 { width:26px; height:20px; border:4px solid ${PAINT9}; margin-left:-13px; margin-top:-10px; + filter: blur(1.5px); } + .fxsdrop { position:absolute; left:${sx}px; top:${sy}px; background:${HOT9}; + border-radius:50%; opacity:0; }`; + html += `
\n
\n`; + js += ` + tl.set("#fxsp1", { opacity: 1, scale: 0.3 }, ${st9}); + tl.to("#fxsp1", { scale: 4.6, opacity: 0, duration: 0.42, ease: "expo.out" }, ${st9}); + tl.to("#fxsp1", { filter: "blur(4px)", duration: 0.42, ease: "power1.in" }, ${st9}); + tl.set("#fxsp2", { opacity: 0.8, scale: 0.4 }, ${(st9 + 0.04).toFixed(3)}); + tl.to("#fxsp2", { scale: 3.4, opacity: 0, duration: 0.5, ease: "expo.out" }, ${(st9 + 0.04).toFixed(3)}); + { const frnd = mulberry32(${fx.seed || 20260611}); + const stg = document.getElementById("stage"); + for (let i = 0; i < ${fx.paintsplat}; i++) { + const el = document.createElement("div"); + el.className = "fxsdrop"; stg.appendChild(el); + const s = 3 + Math.round(frnd() * 4); + gsap.set(el, { width: s, height: s }); + const ang = frnd() * Math.PI * 2, dist = 36 + frnd() * 64; // capped: stays inside the frame edge + const dx = Math.cos(ang) * dist, dyv = Math.sin(ang) * dist * 0.7; + const grav = 26 + frnd() * 40, d = 0.38 + frnd() * 0.25; + tl.set(el, { opacity: 1, x: 0, y: 0 }, ${st9}); + tl.to(el, { keyframes: { x: [0, dx * 0.6, dx], + y: [0, dyv * 0.6 + grav * 0.2, dyv + grav], + opacity: [1, 0.85, 0] }, + duration: d, ease: "power2.out" }, ${st9}); + } + }`; + } + if (fx.brushflecks) { + // ink flecks kicked PAST the subject at the brush's first contact (the + // start-splat depth pass) — seeded upward ballistic arcs from the pen-START + // point (baked by setpieceBrushwrite into HG.fleckX/Y/T) + const bx = Math.max(40, Math.min(W - 40, Math.round(HG.fleckX ?? HG.x - (HG.halfW || 80)))); + const by = Math.round(HG.fleckY ?? HG.y); + const bt = +Math.min(HG.fleckT ?? I + 0.01, DUR - 0.4).toFixed(3); + css += ` + .fxbfleck { position:absolute; left:${bx}px; top:${by}px; border-radius:50%; + background:${dna.palette.ink || "#1a130c"}; opacity:0; }`; + js += ` + { const frnd = mulberry32(${fx.seed || 20260611}); + const stg = document.getElementById("stage"); + for (let i = 0; i < ${fx.brushflecks}; i++) { + const el = document.createElement("div"); el.className = "fxbfleck"; stg.appendChild(el); + const s = 3 + Math.round(frnd() * 3); + gsap.set(el, { width: s, height: s }); + const a = -0.4 - frnd() * 2.4, dist = 46 + frnd() * 90; + const dx = Math.cos(a) * dist, dyv = Math.sin(a) * dist; + tl.set(el, { opacity: 1 }, ${bt}); + tl.to(el, { keyframes: { x: [0, dx * 0.6, dx], y: [0, dyv * 0.6, dyv + 26], + opacity: [1, 0.85, 0] }, + duration: 0.36, ease: "power2.out" }, ${bt}); + } + }`; + } + if (fx.scanband) { + const lockT = + heroIn + 0.3 + (dna.hero.params.lockStagger || 0.045) * (heroText.length - 1) + 0.083; + css += ` + #fxband { position:absolute; left:0; top:-80px; width:100%; height:70px; opacity:0; + background: linear-gradient(180deg, ${dna.palette.accent}00 0%, ${dna.palette.accent}66 50%, ${dna.palette.accent}00 100%); } + #fxlock { position:absolute; inset:0; opacity:0; + background: radial-gradient(80% 60% at 52% 35%, ${dna.palette.accent}99 0%, ${dna.palette.accent}00 70%); }`; + html += `
\n
\n`; + js += ` + tl.set("#fxband", { opacity: 0.5 }, ${(I - 0.05).toFixed(3)}); + tl.fromTo("#fxband", { y: 0 }, { y: ${H + 160}, duration: 0.5, ease: "power1.in" }, ${(I - 0.05).toFixed(3)}); + tl.set("#fxband", { opacity: 0 }, ${(I + 0.46).toFixed(3)}); + tl.set("#fxlock", { opacity: ${fx.lockflash || 0.55} }, ${(lockT - 0.083).toFixed(3)}); + tl.to("#fxlock", { opacity: 0, duration: 0.2, ease: "expo.out" }, ${lockT.toFixed(3)});`; + } + return { css, html, js }; +} + +/* ===================================================================== + * ASSEMBLE + POSTFX + * ===================================================================== */ +function paradigmLastpage() { + // THE LAST PAGE: a blurred "future manuscript" haunts the room all video; + // at the apex one rack-focus reveals every faint line was the apex word. + const b = dna.body, + I = heroIn; + const prnd = (() => { + let a = b.seed || 4242; + return () => { + a |= 0; + a = (a + 0x6d2b79f5) | 0; + let t = Math.imul(a ^ (a >>> 15), 1 | a); + t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; + return ((t ^ (t >>> 14)) >>> 0) / 4294967296; + }; + })(); + // field instances: seeded positions in the upper room, away from the subject column + const subjX = sz && sz.heroAnchor ? (W * sz.heroAnchor.centerXPct) / 100 : W * 0.5; + const inst = []; + for (let i = 0; i < (b.fieldCount || 9); i++) { + let x = 80 + prnd() * (W - 160), + y = 60 + prnd() * (H * 0.55); + if (Math.abs(x - subjX) < 170) + x = x < subjX ? subjX - 180 - prnd() * 120 : subjX + 180 + prnd() * 120; + inst.push({ + x: Math.round(Math.max(70, Math.min(W - 70, x))), + y: Math.round(y), + px: Math.round(34 + prnd() * 96), + rot: +((prnd() - 0.5) * 8).toFixed(1), + op: +(0.26 + prnd() * 0.2).toFixed(2), + }); + } + const main = inst.reduce((a, c) => (c.px > a.px ? c : a), inst[0]); + const lineData = LINES.map((L) => ({ + id: "m" + L.id, + in: +L.in.toFixed(3), + out: +L.out.toFixed(3), + words: L.words.map((w) => [w.display, +w.start.toFixed(3)]), + })); + const css = ` + .fld { position:absolute; white-space:nowrap; font-family:'${dna.fonts.body}', serif; + font-weight:600; color:${dna.palette.body}; filter: blur(${b.fieldBlur || 9}px); } + .ms { position:absolute; left:${W / 2}px; top:${H - (b.bottomPx || 96)}px; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.body}', serif; font-size:${b.fontPx}px; line-height:1; + color:${dna.palette.body}; text-shadow: 0 2px 12px rgba(0,0,0,0.6); } + .ms .w { display:inline-block; opacity:0; margin:0 0.14em; overflow:hidden; vertical-align:bottom; white-space:nowrap; }`; + const html = + inst + .map( + (f, i) => + `
${esc(heroDisplay)}
`, + ) + .join("\n") + + "\n" + + lineData.map((L) => `
`).join("\n"); + const js = ` + // ---- THE LAST PAGE ---- + const I = ${I.toFixed(3)}; + const MS = ${J(lineData)}; + MS.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt]) => { const sp = document.createElement("span"); sp.className = "w"; sp.textContent = txt; line.appendChild(sp); }); + gsap.set(line, { xPercent: -50, yPercent: -100 }); + tl.set(line, { opacity: 1 }, L.in); + const XO = L.out - ${b.exit === "drop" ? "0.18" : "0.17"}; // exit start (single source) + let lastB = -1; // line-y bounce ownership guard + L.words.forEach(([txt, st], wi) => { + const el = line.children[wi]; + tl.set(el, { opacity: 1 }, st); + tl.fromTo(el, { width: 0 }, { width: "auto", duration: Math.min(0.18, 0.03 * txt.length + 0.04), + ease: "steps(" + Math.max(2, txt.length) + ")" }, st); + }); + const xo = L.out - 0.18; + tl.to(line, { opacity: 0, duration: 0.16, ease: "power2.in" }, xo); + tl.set(line, { display: "none" }, xo + 0.18); + }); + // the field breathes imperceptibly (alive, unreadable) + ${inst.map((f, i) => `tl.to("#f${i}", { y: ${prnd() - 0.5 > 0 ? "+" : "-"}${(3 + prnd() * 5).toFixed(1)}, duration: ${(2.4 + prnd() * 2).toFixed(1)}, ease: "sine.inOut" }, 0);`).join("\n ")} + // APEX: rack focus — the future was only ever one sentence + tl.to(".fld", { filter: "blur(0px)", duration: 0.38, ease: "power3.inOut" }, I - 0.1); + ${inst + .map((f, i) => + i === inst.indexOf(main) + ? `tl.to("#f${i}", { opacity: 1, scale: 1.22, duration: 0.5, ease: "power2.out" }, I + 0.15); + tl.to("#f${i}", { textShadow: "0 0 28px rgba(255,244,220,0.5)", duration: 0.5 }, I + 0.15);` + : `tl.to("#f${i}", { opacity: ${(f.op * 0.85).toFixed(2)}, duration: 0.5 }, I + 0.3);`, + ) + .join("\n ")} + // hold revealed ~1.2s, then the future blurs back except the main instance + tl.to(".fld", { filter: "blur(${b.fieldBlur || 9}px)", duration: 0.6, ease: "power2.inOut" }, I + 1.5); + tl.to("#f${inst.indexOf(main)}", { filter: "blur(0px)", duration: 0.01 }, I + 1.5); + ${inst.map((f, i) => (i === inst.indexOf(main) ? "" : `tl.to("#f${i}", { opacity: 0, duration: 0.6 }, I + 1.6);`)).join("\n ")} + tl.to("#f${inst.indexOf(main)}", { opacity: 0, duration: 0.3, ease: "power2.in" }, ${(heroOut - 0.3).toFixed(3)});`; + return { css, html, js }; +} + +function paradigmFlaprail() { + // FLAPRAIL: stadium-departures chyron bar; body words flip in on split-flap + // tiles (2 seeded wrong-word flickers then the real word clacks on), exits + // flip to blank cascading left→right. Furniture: bar tag + ROW flip counter + // (+ optional odometer chip pinned to the first emphasis line). + const b = dna.body; + const barH = b.barH || 96; + const stagger = 0.025, + exDu = 0.075; + const lineData = LINES.map((L) => ({ + id: "fl" + L.id, + in: +L.in.toFixed(3), + out: +L.out.toFixed(3), + words: L.words.map((w) => [w.display.toUpperCase(), +w.start.toFixed(3), w.minor ? 1 : 0]), + })); + const chy = b.chyron || {}; + const ctrVals = lineData.map((_, i) => String(i + 1).padStart(2, "0")); + // odometer chip docks above the bar while the FIRST emphasis line reads + const chipL = b.chip ? LINES.find((L) => L.words.some((w) => w.minor)) : null; + const chipParts = chipL ? String(b.chip.value).split(".") : []; + const css = ` + #flwrap { position:absolute; inset:0; } + #flbar { position:absolute; left:0; right:0; top:${H - barH}px; height:${barH}px; + background: linear-gradient(180deg, rgba(26,29,35,0.93) 0%, rgba(15,17,21,0.96) 100%); + border-top:3px solid ${dna.palette.accent}; + box-shadow: 0 -6px 26px rgba(0,0,0,0.45), inset 0 1px 0 ${dna.palette.accent}40; } + #fltag { position:absolute; left:30px; top:30px; font-family:'${dna.fonts.tag}', sans-serif; + font-weight:600; font-size:25px; letter-spacing:4px; color:${dna.palette.accent}; opacity:0.92; } + #flctr { position:absolute; right:30px; top:22px; white-space:nowrap; } + #flctr .clab { font-family:'${dna.fonts.tag}', sans-serif; font-weight:600; font-size:22px; + letter-spacing:3px; color:#8A8F98; vertical-align:18px; margin-right:8px; } + #ctrbox { display:inline-block; width:54px; height:46px; perspective:260px; vertical-align:top; } + #ctrflap { position:relative; display:block; width:100%; height:100%; transform-origin:50% 0%; + backface-visibility:hidden; border-radius:3px; + background: linear-gradient(180deg,#2E333B 0%,#262B32 48%,#1B1F25 52%,#242930 100%); + box-shadow: inset 0 0 0 1px rgba(0,0,0,0.6), 0 2px 5px rgba(0,0,0,0.5); } + #ctrflap .nv { position:absolute; inset:0; display:none; text-align:center; + font-family:'${dna.fonts.tag}', sans-serif; font-weight:600; font-size:36px; + line-height:50px; color:${dna.palette.accent}; } + .flline { position:absolute; left:${W / 2}px; top:${H - Math.round(barH / 2) - 1}px; white-space:nowrap; } + .ftile { display:inline-block; perspective:240px; opacity:0; margin-right:8px; vertical-align:middle; } + .fflap { position:relative; display:inline-block; transform-origin:50% 0%; backface-visibility:hidden; + font-family:'${dna.fonts.body}', sans-serif; font-weight:600; font-size:${b.fontPx}px; line-height:1; + letter-spacing:${b.letterSpacing || "1px"}; color:${dna.palette.body}; padding:8px 13px 4px; border-radius:4px; + background: linear-gradient(180deg,#31363F 0%,#272C33 47%,#1C2026 53%,#262B32 100%); + box-shadow: inset 0 0 0 1px rgba(0,0,0,0.55), 0 3px 8px rgba(0,0,0,0.5), + inset 0 1px 0 rgba(255,255,255,0.07); + text-shadow: 0 2px 4px rgba(0,0,0,0.45); } + .ftile.em .fflap { box-shadow: inset 0 0 0 1px rgba(0,0,0,0.55), inset 0 -3px 0 ${dna.palette.accent}, + 0 3px 8px rgba(0,0,0,0.5); } + .fflap .rl { visibility:hidden; } + .fflap .wv { position:absolute; left:0; right:0; top:8px; text-align:center; display:none; + color:${dna.palette.grey || "#B9BEC7"}; } +${ + chipL + ? ` #flchip { position:absolute; left:${b.chip.x}px; top:${b.chip.y}px; perspective:300px; opacity:0; } + #chipflap { display:block; transform-origin:50% 0%; backface-visibility:hidden; white-space:nowrap; + background: linear-gradient(180deg,#2B3038 0%,#22262D 50%,#1A1E24 100%); + border-radius:4px; border:1px solid rgba(0,0,0,0.6); padding:5px 12px 3px; + box-shadow: inset 0 0 0 1px ${dna.palette.accent}59, 0 3px 10px rgba(0,0,0,0.5); } + #chipflap .clab { font-family:'${dna.fonts.tag}', sans-serif; font-weight:600; font-size:24px; + letter-spacing:2px; color:${dna.palette.accent}; margin-right:8px; vertical-align:4px; } + .dcol { display:inline-block; height:36px; overflow:hidden; vertical-align:top; } + .dcol span { display:block; height:36px; line-height:38px; font-family:'${dna.fonts.tag}', sans-serif; + font-weight:600; font-size:34px; color:${dna.palette.body}; text-align:center; } + .cfix { display:inline-block; height:36px; line-height:38px; font-family:'${dna.fonts.tag}', sans-serif; + font-weight:600; font-size:34px; color:${dna.palette.body}; vertical-align:top; } + #cunit { font-size:22px; color:#8A8F98; margin-left:3px; } + #bdot { display:inline-block; width:9px; height:9px; border-radius:50%; + background:${dna.palette.accent}; margin-left:9px; vertical-align:14px; opacity:0.15; + box-shadow: 0 0 7px ${dna.palette.accent}cc; }` + : "" +}`; + const html = `
+
+
${esc(chy.tag || "DEPARTURES")}
+
${esc(chy.counter || "ROW")}${ctrVals + .map((v, i) => `${v}`) + .join("")}
+
+${lineData.map((L) => `
`).join("\n")} +${ + chipL + ? `
${esc(b.chip.label)}${chipParts + .map((_, i) => ``) + .join( + `.`, + )}${esc(b.chip.unit || "")}
` + : "" +} +
`; + const js = ` + // ---- body paradigm: FLAPRAIL (split-flap word tiles on a chyron bar) ---- + const HOT = ${J(dna.palette.hot || dna.palette.accent)}, BONE = ${J(dna.palette.body)}; + const frnd2 = mulberry32(${b.seed || 808}); + const GLYPHS = ${J(dna.body.glyphs || "ABCDEFGHIKLMNOPRSTUVXYZ0123456789")}; + function wrongOf(txt) { + let s = ""; + for (const c of txt) s += /[A-Z']/.test(c) ? GLYPHS[Math.floor(frnd2() * GLYPHS.length)] : c; + return s; + } + // chyron bar rides up; nothing visible at t=0 + tl.fromTo("#flbar", { y: ${barH + 14} }, { y: 0, duration: 0.20, ease: "power3.out" }, 0.0); + tl.set("#n0", { display: "block" }, 0.18); + const FRAIL = ${J(lineData)}; + FRAIL.forEach((L, li) => { + const line = document.getElementById(L.id); + const tiles = []; + L.words.forEach(([txt, , em]) => { + const tile = document.createElement("span"); tile.className = "ftile" + (em ? " em" : ""); + const flap = document.createElement("span"); flap.className = "fflap"; + const rl = document.createElement("span"); rl.className = "rl"; rl.textContent = txt; + const w1 = document.createElement("span"); w1.className = "wv"; w1.textContent = wrongOf(txt); + const w2 = document.createElement("span"); w2.className = "wv"; w2.textContent = wrongOf(txt); + flap.appendChild(rl); flap.appendChild(w1); flap.appendChild(w2); + tile.appendChild(flap); line.appendChild(tile); + tiles.push({ tile, flap, rl, w1, w2 }); + }); + gsap.set(line, { xPercent: -50, yPercent: -50 }); + L.words.forEach(([txt, st, em], wi) => { + const { tile, flap, rl, w1, w2 } = tiles[wi]; + // flick 1 (wrong), flick 2 (wrong), flick 3 (real) — the flap motif + tl.set(tile, { opacity: 1 }, st); + tl.set(w1, { display: "block" }, st); + tl.fromTo(flap, { rotationX: -88 }, { rotationX: 0, duration: 0.05, ease: "power1.in" }, st); + tl.set(w1, { display: "none" }, st + 0.055); + tl.set(w2, { display: "block" }, st + 0.055); + tl.set(flap, { rotationX: -88 }, st + 0.055); + tl.to(flap, { rotationX: 0, duration: 0.05, ease: "power1.in" }, st + 0.06); + tl.set(w2, { display: "none" }, st + 0.115); + tl.set(rl, { visibility: "visible" }, st + 0.115); + tl.set(flap, { rotationX: -88, color: HOT }, st + 0.115); + tl.to(flap, { rotationX: 0, duration: 0.065, ease: "power2.in" }, st + 0.12); + // contact squash → elastic settle, paint cools (amber stays on emphasized tiles) + tl.set(tile, { scaleX: 1.05, scaleY: 0.92 }, st + 0.185); + tl.to(tile, { scaleX: 1, scaleY: 1, duration: 0.28, ease: "elastic.out(1, 0.4)" }, st + 0.21); + tl.to(flap, { color: em ? HOT : BONE, duration: 0.35, ease: "power1.in" }, st + 0.25); + }); + // hold life: low breathe on the line + const lastIn = L.words[L.words.length - 1][1] + 0.4; + const span = (L.words.length - 1) * ${stagger} + ${exDu} + 0.02; + const XO = L.out - span; + if (XO - lastIn > 0.3) + tl.to(line, { scale: 1.014, duration: XO - lastIn, ease: "sine.inOut" }, lastIn); + // exit: flip to blank, cascading left→right (completes before the next line) + L.words.forEach((w, wi) => { + const t = XO + wi * ${stagger}; + tl.to(tiles[wi].flap, { rotationX: 90, duration: ${exDu}, ease: "power2.in" }, t); + tl.set(tiles[wi].tile, { opacity: 0 }, t + ${exDu}); + }); + tl.set(line, { display: "none" }, L.out); + }); + // row counter flips at each line change + FRAIL.slice(1).forEach((L, k) => { + const t = L.words[0][1]; + tl.set("#n" + k, { display: "none" }, t); + tl.set("#n" + (k + 1), { display: "block" }, t); + // immediateRender:false — the flap is visible from t=0; the from-state must + // not leak into the opening hold (paused timeline + seek renders it) + tl.fromTo("#ctrflap", { rotationX: -80 }, { rotationX: 0, duration: 0.07, ease: "power2.in", immediateRender: false }, t); + tl.set("#ctrflap", { scaleY: 0.92 }, t + 0.07); + tl.to("#ctrflap", { scaleY: 1, duration: 0.18, ease: "elastic.out(1, 0.45)" }, t + 0.09); + }); +${ + chipL + ? ` // odometer chip (emphasis furniture): clacks on beside the emphasis line, + // digits roll on true reels, status dot blinks through the hold (dead-air life) + const CIN = ${(chipL.words[chipL.words.length - 1].start + 0.06).toFixed(3)}; + const COUT = ${(+chipL.out).toFixed(3)}; + ${J(chipParts)}.forEach((fin, ci) => { + const col = document.getElementById("dc" + ci); + const stack = document.createElement("div"); + const steps = 4 + ci; + for (let k = 0; k < steps; k++) { const s = document.createElement("span"); + s.textContent = Math.floor(frnd2() * 10); stack.appendChild(s); } + const f = document.createElement("span"); f.textContent = fin; stack.appendChild(f); + col.appendChild(stack); + tl.fromTo(stack, { y: 0 }, { y: -36 * steps, duration: 0.42 + ci * 0.13, + ease: "steps(" + steps + ")" }, CIN + 0.08 + ci * 0.04); + }); + tl.set("#flchip", { opacity: 1 }, CIN); + tl.fromTo("#chipflap", { rotationX: -85 }, { rotationX: 0, duration: 0.09, ease: "power2.in" }, CIN); + tl.set("#chipflap", { scaleX: 1.04, scaleY: 0.93 }, CIN + 0.09); + tl.to("#chipflap", { scaleX: 1, scaleY: 1, duration: 0.24, ease: "elastic.out(1, 0.42)" }, CIN + 0.11); + tl.set(".dcol span", { color: HOT }, CIN + 0.67); + tl.to(".dcol span", { color: BONE, duration: 0.4 }, CIN + 0.87); + for (let k = 0; k < 4; k++) { + const t = CIN + 0.64 + k * 0.22; + if (t + 0.11 < COUT - 0.05) { tl.set("#bdot", { opacity: 1 }, t); tl.set("#bdot", { opacity: 0.15 }, t + 0.11); } + } + tl.to("#chipflap", { rotationX: 88, duration: 0.09, ease: "power2.in" }, COUT); + tl.set("#flchip", { display: "none" }, COUT + 0.10);` + : "" +} +${ + b.yield + ? ` // rail yields while the apex board locks + tl.to("#flwrap", { opacity: ${b.yield.dim}, duration: 0.18, ease: "power1.in" }, ${(heroIn - (b.yield.pre || 0.07)).toFixed(3)}); + tl.to("#flwrap", { opacity: 1, duration: 0.22, ease: "power1.out" }, ${(heroIn + (b.yield.post || 0.47)).toFixed(3)});` + : "" +}`; + return { css, html, js }; +} + +function paradigmLedboard() { + // LEDBOARD: docked transit departure-strip; body lines arrive by vertical + // SCROLL-SNAP paging (steps(6)) inside the board window; each word lights via + // a small L→R LED column wipe (low-amplitude apex motif) + 1-frame arrival + // flicker; emphasis words get the LED-refresh double-blink. Furniture: green + // platform tag, ticking clock seconds, status swap gag (⚠ DELAYED → ● ON TIME + // shortly after the apex resolves), idle LED shimmer in dead air. + const b = dna.body; + const bd = b.board || {}; + const bw = bd.width || 1000, + bh = bd.h || 116; + const bleft = bd.left ?? Math.round((W - bw) / 2); + const btop = H - (bd.bottom ?? 30) - bh; + const hdrH = 30, + winH = bh - hdrH - 2, + lineH = winH - 2; + const hd = b.header || {}; + const A = dna.palette.accent; + const GRN = dna.palette.green || "#36e57a"; + const WRN = dna.palette.warn || "#ff9e3d"; + const lineData = LINES.map((L) => ({ + id: "t" + L.id, + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + })); + // page-in ~0.2s before the first word lights (the paging IS the anticipation); + // each line pages out exactly as the next pages in (snap swap), last one early + // enough that the 0.20s page-out completes before the clip ends + const pins = LINES.map((L, i) => + i === 0 + ? Math.max(0.02, +(L.words[0].start - 0.22).toFixed(3)) + : +(L.words[0].start - 0.22).toFixed(3), + ); + lineData.forEach((L, i) => { + L.pin = pins[i]; + L.pout = i + 1 < pins.length ? pins[i + 1] : +Math.min(LINES[i].out, DUR - 0.22).toFixed(3); + }); + // idle LED shimmer: any dead air ≥1.2s between word lights gets refresh blips + const starts = LINES.flatMap((L) => L.words.map((w) => w.start)); + const shimmers = []; + for (let i = 0; i + 1 < starts.length; i++) + if (starts[i + 1] - starts[i] > 1.2) + for (let t = starts[i] + 0.43; t < starts[i + 1] - 0.55; t += 0.6) + shimmers.push(+t.toFixed(3)); + // status gag: ⚠ DELAYED blinks while we wait, pages to ● ON TIME after the apex + const swapT = +Math.min(heroIn + 0.69, DUR - 1.2).toFixed(3); + const statBlinks = [swapT - 2.55, swapT - 1.75, swapT - 1.15] + .filter((t) => t > 0.25) + .map((t) => +t.toFixed(3)); + // clock seconds reel: one stacked digit per elapsed second + const nDig = Math.floor(DUR - 0.02) + 1; + const lateT = +(LASTWORD.start + 0.19).toFixed(3); // one late LED refresh on the final word + const css = ` + #tboard { position:absolute; left:${bleft}px; top:${btop}px; width:${bw}px; height:${bh}px; border-radius:6px; + background-color: rgba(8,8,11,0.90); + background-image: radial-gradient(${A}0d 1px, rgba(0,0,0,0) 1.4px); + background-size: 7px 7px; + border:1px solid ${A}47; border-top:2px solid ${A}73; + box-shadow: 0 10px 30px rgba(0,0,0,0.5), inset 0 0 40px ${A}0a; } + #thdr { position:absolute; left:0; right:0; top:0; height:${hdrH}px; + border-bottom:1px solid ${A}38; + font-family:'${dna.fonts.tag}', monospace; font-size:20px; letter-spacing:0.12em; } + #tplt { position:absolute; left:16px; top:4px; color:${GRN}; + text-shadow:0 0 8px ${GRN}80; } + #tstatwin { position:absolute; right:128px; top:3px; width:170px; height:24px; overflow:hidden; } + #tstatstack { position:absolute; left:0; top:0; width:100%; } + .tstrow { display:block; height:24px; line-height:24px; text-align:right; } + #tstrow1 { color:${WRN}; text-shadow:0 0 8px ${WRN}80; } + #tstrow2 { color:${GRN}; text-shadow:0 0 8px ${GRN}80; } + #tclock { position:absolute; right:14px; top:4px; color:${A}bf; + text-shadow:0 0 6px ${A}59; } + #tclock .cw { display:inline-block; width:11px; height:22px; overflow:hidden; + vertical-align:bottom; } + #tdigcol span { display:block; height:22px; line-height:22px; } + #twin { position:absolute; left:0; right:0; top:${hdrH + 2}px; bottom:0; overflow:hidden; } + .tline { position:absolute; left:22px; top:0; height:${lineH}px; line-height:${lineH}px; + font-family:'${dna.fonts.body}', monospace; font-size:${b.fontPx}px; letter-spacing:${b.letterSpacing || "0.05em"}; + color:${dna.palette.body}; white-space:nowrap; + text-shadow: 0 0 9px ${A}73, 0 0 1px ${dna.palette.hot}e6; } + .tline .w { display:inline-block; margin-right:0.35em; }`; + const html = `
+
+
${esc(hd.plt || "PLT 4")}
+
+ ${esc(hd.statusWait || "⚠ DELAYED")} + ${esc(hd.statusOk || "● ON TIME")} +
+
${esc(hd.clockPrefix || "19:42:0")}${Array.from( + { length: nDig }, + (_, k) => `${k}`, + ).join("")}
+
+
+
`; + const js = ` + // ---- body paradigm: LEDBOARD (scroll-snap paging + per-word LED column wipes) ---- + const twin = document.getElementById("twin"); + const TRAIL = ${J(lineData)}; + let lastW = null; + TRAIL.forEach((L) => { + const line = document.createElement("div"); line.className = "tline"; + twin.appendChild(line); + gsap.set(line, { y: ${winH + 2} }); // parked below the window + tl.to(line, { y: 0, duration: 0.22, ease: "steps(6)" }, L.pin); // page in + tl.to(line, { y: ${-(winH + 2)}, duration: 0.20, ease: "steps(6)" }, L.pout); // page out + L.words.forEach(([txt, st, em]) => { + const w = document.createElement("span"); w.className = "w"; + w.textContent = txt; line.appendChild(w); lastW = w; + const steps = Math.max(3, txt.length); + tl.fromTo(w, { clipPath: "inset(0% 100% 0% 0%)" }, + { clipPath: "inset(0% 0% 0% 0%)", duration: 0.12, ease: "steps(" + steps + ")" }, st); + tl.set(w, { clipPath: "none" }, st + 0.17); // free the glow + tl.set(w, { opacity: 0.5 }, st + 0.13); // 1-frame arrival flicker + tl.set(w, { opacity: 1 }, st + 0.172); + if (em && st + 0.56 < L.pout) { // LED refresh: blinks twice + tl.set(w, { opacity: 0.22 }, st + 0.30); + tl.set(w, { opacity: 1 }, st + 0.383); + tl.set(w, { opacity: 0.22 }, st + 0.466); + tl.set(w, { opacity: 1 }, st + 0.55); + } + }); + }); +${ + lateT + 0.05 < DUR - 0.25 + ? ` // the final word gets one late LED refresh blink (kept inside the clip) + tl.set(lastW, { opacity: 0.22 }, ${lateT.toFixed(3)}); + tl.set(lastW, { opacity: 1 }, ${(lateT + 0.042).toFixed(3)});` + : "" +} + + // ===== furniture ===== + // status blinks while we wait, then the gag: pages to the OK row + ${J(statBlinks)}.forEach((t) => { + tl.set("#tstrow1", { opacity: 0.35 }, t); + tl.set("#tstrow1", { opacity: 1 }, t + 0.042); + }); + tl.to("#tstatstack", { y: -24, duration: 0.16, ease: "steps(4)" }, ${swapT.toFixed(3)}); + tl.set("#tstrow2", { opacity: 0.5 }, ${(swapT + 0.18).toFixed(3)}); + tl.set("#tstrow2", { opacity: 1 }, ${(swapT + 0.222).toFixed(3)}); + + // clock seconds tick (stacked digit column, stepped shifts) + for (let k = 1; k <= ${nDig - 1}; k++) tl.set("#tdigcol", { y: -22 * k }, k); + + // idle LED refresh shimmer in the dead air (board never freezes) + ${J(shimmers)}.forEach((t) => { + tl.set("#twin", { opacity: 0.88 }, t); + tl.set("#twin", { opacity: 1 }, t + 0.042); + }); +${ + b.yield + ? ` + // ===== hierarchy: board yields while the apex lands ===== + tl.to("#tboard", { opacity: ${b.yield.dim}, duration: 0.18, ease: "power1.in" }, ${(heroIn - (b.yield.pre || 0.2)).toFixed(3)}); + tl.to("#tboard", { opacity: 1, duration: 0.25, ease: "power1.out" }, ${(heroIn + (b.yield.post || 0.9)).toFixed(3)});` + : "" +}`; + return { css, html, js }; +} + +function paradigmVhsrail() { + // VHSRAIL: camcorder-playback lower third. Every body word carries a PERMANENT + // 1px red+cyan misregistration fringe and arrives by tracking glitch (instant + // on + 2-frame y-shake + 1-frame band-slice shift of the word's bottom half); + // emphasis words get the PAUSE jitter (±1px y oscillation) + a white noise-band + // flicker. Exits are REWIND streaks left with a flat-white echo copy + scrub + // lines. Furniture: ▶ PLAY / ◀◀ REW top-left (REW gag in dead air and on the + // final rewind), ● REC top-right during the apex window, green timestamp + // bottom-right with a 1 Hz blinking colon, an idle tape-drift line in long + // silences, and the apex-coupled artifacts: 1-frame full white tear band + + // head-switching noise bar at REC FREEZE, scrub lines at the apex band on the + // hero's rewind exit. + const b = dna.body; + const p = dna.hero.params || {}; + const X = theme.hero.exitAt ?? Math.min(heroOut, heroIn + (p.hold ?? 1.69)); // hero REWIND (shared with vhsosd) + const railTop = H - (b.bottomPx || 108); + const osd = b.osd || {}; + const ts = osd.ts || ["JUN.11 2026 PM 7", "42"]; + const A = dna.palette.accent, + GRN = dna.palette.green || dna.palette.accent, + RED = dna.palette.red || "#FF2E2E", + CYN = dna.palette.cyan || "#3FE8E8"; + // line windows: `out` is the REWIND start — early into dead air (with the + // PLAY→REW gag), before the clip end for the last line + const lineData = LINES.map((L, i) => { + const lastEnd = L.words[L.words.length - 1].end; + const next = LINES[i + 1]; + let out = +(L.out - 0.05).toFixed(3), + gag = 0; + if (next && next.in - lastEnd > 0.7) { + out = +(lastEnd + 0.53).toFixed(3); + gag = 1; + } + if (!next) out = +(DUR - 0.14).toFixed(3); + return { + id: "v" + L.id, + eid: "ve" + L.id, + in: +L.in.toFixed(3), + out, + gag, + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + }; + }); + const lastOut = lineData[lineData.length - 1].out; + const css = ` + /* ---- OSD furniture ---- */ + .osd { position:absolute; font-family:'${dna.fonts.tag}', monospace; font-size:28px; line-height:1; + letter-spacing:2px; color:${A}; opacity:0; + text-shadow: -1px 0 0 ${RED}59, 1px 0 0 ${CYN}59, + 0 0 7px rgba(0,0,0,0.95), 0 2px 5px rgba(0,0,0,0.85); } + #osdplay { left:36px; top:34px; } + #pmode, #rmode { display:flex; align-items:center; gap:10px; } + #rmode { display:none; } + .tri { width:0; height:0; border-left:16px solid ${A}; + border-top:9px solid transparent; border-bottom:9px solid transparent; + filter: drop-shadow(0 0 4px rgba(0,0,0,0.9)); } + .rtri { width:0; height:0; border-right:14px solid ${A}; + border-top:8px solid transparent; border-bottom:8px solid transparent; + filter: drop-shadow(0 0 4px rgba(0,0,0,0.9)); } + #rmode .rtri + .rtri { margin-left:-6px; } + #rec { right:36px; top:34px; display:flex; align-items:center; gap:10px; color:${dna.palette.body}; } + #rdot { width:15px; height:15px; border-radius:50%; background:#ff3b30; + box-shadow: 0 0 6px rgba(0,0,0,0.85), 0 0 10px rgba(255,59,48,0.55); } + #osdts { right:36px; bottom:22px; color:${GRN}; + text-shadow: -1px 0 0 ${RED}4d, 1px 0 0 ${CYN}4d, + 0 0 7px rgba(0,0,0,0.95), 0 2px 5px rgba(0,0,0,0.85); } + + /* ---- body rail ---- */ + .vln, .vlnE { position:absolute; left:${W / 2}px; top:${railTop}px; white-space:nowrap; opacity:0; + font-family:'${dna.fonts.body}', monospace; font-size:${b.fontPx}px; line-height:1; + letter-spacing:${b.letterSpacing || "0.04em"}; text-transform:uppercase; + color:${dna.palette.body}; + text-shadow: -1px 0 0 ${RED}66, 1px 0 0 ${CYN}66, + 0 2px 6px rgba(0,0,0,0.85), 0 0 14px rgba(0,0,0,0.55); } + .vlnE { color:#ffffff; text-shadow:none; } + .vw { position:relative; display:inline-block; margin-right:0.3em; opacity:0; } + .vwa { display:inline-block; clip-path: inset(0 0 56% 0); } + .vwb { position:absolute; left:0; top:0; clip-path: inset(44% 0 0 0); } + .vnz { position:absolute; left:-4px; right:-4px; top:30%; height:38%; opacity:0; + background: repeating-linear-gradient(0deg, rgba(255,255,255,0.85) 0 2px, rgba(255,255,255,0) 2px 5px); } + + /* ---- tape artifacts ---- */ + #tear { position:absolute; left:0; top:${HG.y - 55}px; width:100%; height:110px; opacity:0; + background: linear-gradient(180deg, rgba(255,255,255,0.55) 0%, #ffffff 30%, #ffffff 70%, rgba(255,255,255,0.55) 100%); } + #hsbar { position:absolute; left:0; bottom:0; width:100%; height:16px; opacity:0; + background: repeating-linear-gradient(90deg, + rgba(205,205,205,0.92) 0 7px, rgba(60,60,60,0.85) 7px 11px, + rgba(165,165,165,0.9) 11px 19px, rgba(28,28,28,0.85) 19px 26px); } + .scrub { position:absolute; left:0; width:100%; height:3px; opacity:0; + background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.75) 8%, + rgba(225,225,225,0.5) 38%, rgba(255,255,255,0.8) 62%, rgba(255,255,255,0) 100%); } + #scrub1 { top:${railTop - 18}px; } #scrub2 { top:${railTop + 20}px; } + #scrub3 { top:${HG.y - 28}px; } #scrub4 { top:${HG.y + 34}px; } + #drift { position:absolute; left:0; top:${railTop + 48}px; width:100%; height:2px; opacity:0; + background: rgba(255,255,255,0.45); }`; + const html = + `
+
PLAY
+
REW
+
+
REC
+
${esc(ts[0])}:${esc(ts[1])}
+` + + lineData + .map( + (L) => `
`, + ) + .join("\n") + + ` +
+
+
+
+
`; + // PLAY → REW gags: each dead-air rewind + the final rewind (no restore) + const gags = lineData + .filter((L) => L.gag) + .map((L) => [+(L.out - 0.01).toFixed(3), +(L.out + 0.35).toFixed(3)]); + gags.push([+(lastOut - 0.01).toFixed(3), null]); + const js = ` + // ---- body paradigm: VHSRAIL (tracking-glitch words, REWIND exits, OSD furniture) ---- + const I = ${heroIn.toFixed(3)}, X = ${X.toFixed(3)}; + + // ===== OSD furniture: present the whole clip, 1-frame power-on glitch ===== + tl.set(["#osdplay","#osdts"], { opacity: 1, x: 5 }, 0.02); + tl.set(["#osdplay","#osdts"], { x: 0 }, 0.02 + F); + // timestamp colon blinks at 1 Hz + for (let k = 0; 0.50 + k < ${(DUR - 0.04).toFixed(2)}; k++) { + tl.set("#col", { opacity: 0 }, 0.50 + k); + if (1.00 + k < ${(DUR - 0.04).toFixed(2)}) tl.set("#col", { opacity: 1 }, 1.00 + k); + } + // PLAY -> REW gag on each dead-air rewind, and again at the final rewind + ${J(gags)}.forEach(([a, b]) => { + tl.set("#pmode", { display: "none" }, a); + tl.set("#rmode", { display: "flex" }, a); + if (b) { tl.set("#rmode", { display: "none" }, b); tl.set("#pmode", { display: "flex" }, b); } + }); + + // ===== body rail ===== + const VRAIL = ${J(lineData)}; + VRAIL.forEach((L) => { + const line = document.getElementById(L.id); + const echo = document.getElementById(L.eid); + echo.textContent = L.words.map((w) => w[0]).join(" "); + L.words.forEach(([txt]) => { + const w = document.createElement("span"); w.className = "vw"; + const a = document.createElement("span"); a.className = "vwa"; a.textContent = txt; + const b2 = document.createElement("span"); b2.className = "vwb"; b2.textContent = txt; + const n = document.createElement("span"); n.className = "vnz"; + w.appendChild(a); w.appendChild(b2); w.appendChild(n); line.appendChild(w); + }); + gsap.set([line, echo], { xPercent: -50, yPercent: -50 }); + tl.set(line, { opacity: 1 }, L.words[0][1] - 0.02); + + L.words.forEach(([txt, st, em], wi) => { + const w = line.children[wi]; + const b2 = w.children[1], n = w.children[2]; + // tracking glitch entrance: instant on, 2-frame y-shake, 1-frame band slice shift + tl.set(w, { opacity: 1, y: 3 }, st); + tl.set(b2, { x: 7 }, st); + tl.set(w, { y: -3 }, st + F); + tl.set(b2, { x: 0 }, st + F); + tl.set(w, { y: 0 }, st + 2 * F); + if (em) { + // PAUSE jitter: y oscillation +-1px for 0.3s + white noise band flicker + const e = st + 0.125; + [-1, 1, -1, 1, 0].forEach((v, k) => tl.set(w, { y: v }, e + k * 0.05)); + [0.5, 0, 0.35, 0].forEach((o, k) => tl.set(n, { opacity: o }, e + k * 0.065)); + } + }); + + // REWIND exit: streak left + echo copy + 2 scrub lines + const ed = L.out >= ${(DUR - 0.25).toFixed(2)} ? 0.12 : 0.16; + tl.to(line, { x: -60, opacity: 0, duration: 0.12, ease: "power2.in" }, L.out); + tl.set(echo, { opacity: 0.35 }, L.out + 0.01); + tl.to(echo, { x: -110, opacity: 0, duration: ed, ease: "power2.in" }, L.out + 0.02); + tl.set([line, echo], { display: "none" }, Math.min(L.out + 0.22, ${(DUR - 0.02).toFixed(2)})); + [0.6, 0.25, 0.5, 0].forEach((o, k) => { + tl.set(["#scrub1","#scrub2"], { opacity: o }, Math.min(L.out + k * F, ${(DUR - 0.02).toFixed(2)})); + }); + }); +${ + b.yield + ? ` + // rail yields while the apex lands (dim clamped ≥ line-in; restore only with runway) + VRAIL.forEach((L) => { + if (L.in < I + 0.9 && L.out > I - 0.3) { + const dimT = Math.max(I - ${(b.yield.pre || 0.2).toFixed(2)}, L.in + 0.05); + if (L.out > dimT + 0.25) { + tl.to("#" + L.id, { opacity: ${b.yield.dim}, duration: 0.12, ease: "power1.in" }, dimT); + const resT = I + ${(b.yield.post || 0.9).toFixed(2)}; + if (resT + 0.3 < L.out) tl.to("#" + L.id, { opacity: 1, duration: 0.25 }, resT); + } + } + });` + : "" +} + + // idle tape noise in dead air + VRAIL.filter((L) => L.gag).forEach((L) => { + tl.set("#drift", { opacity: 0.12 }, L.out + 0.2); + tl.fromTo("#drift", { y: 0 }, { y: -55, duration: 0.5, ease: "none" }, L.out + 0.2); + tl.set("#drift", { opacity: 0 }, L.out + 0.7); + }); + + // ===== REC FREEZE artifacts (apex-coupled, in FRONT of the subject) ===== + // 1-frame full white tear band + tl.set("#tear", { opacity: 0.95 }, I); + tl.set("#tear", { opacity: 0 }, I + F); + // ● REC blinks top-right (1-frame glitch entrance) + tl.set("#rec", { opacity: 1, x: 6 }, I + 0.04); + tl.set("#rec", { x: 0 }, I + 0.04 + F); + [[0.49, 0], [0.79, 1], [1.24, 0], [1.54, 1]].forEach(([dt, o]) => { + if (I + dt < X - 0.05) tl.set("#rdot", { opacity: o }, I + dt); + }); + tl.set("#rec", { opacity: 0 }, X); + // head-switching noise bar: sets every frame for 10 frames + const HSX = [0, 140, 60, 220, 30, 180, 90, 250, 10, 120]; + HSX.forEach((px, k) => { + tl.set("#hsbar", { opacity: k % 2 ? 0.62 : 0.9, backgroundPositionX: px + "px" }, I + k * F); + }); + tl.set("#hsbar", { opacity: 0 }, I + 10 * F); + + // apex REWIND exit: 2 scrub lines at the apex band + [0.6, 0.25, 0.5, 0].forEach((o, k) => tl.set(["#scrub3","#scrub4"], { opacity: o }, X + k * F)); + // head-switch reprise on the final rewind + [[0, 0.85, 40], [0.04, 0.6, 190], [0.08, 0.8, 90]].forEach(([dt, o, px]) => { + tl.set("#hsbar", { opacity: o, backgroundPositionX: px + "px" }, ${lastOut.toFixed(3)} + dt); + }); + tl.set("#hsbar", { opacity: 0 }, ${Math.min(lastOut + 0.12, DUR - 0.02).toFixed(3)});`; + return { css, html, js }; +} + +function paradigmHudrail() { + // HUDRAIL: arcade-cabinet HUD. The whole frame plays through a CRT (scanline + // + vignette overlays); body words coin-pop onto a docked HUD bar (2px accent + // border, 1UP / CREDIT tags) with steps(2) pixel pops + a 1-frame white + // coin-blip tick over the word; emphasis words run a 3-frame palette swap + // (body -> accent -> magenta -> body). Lines exit by checkerboard dissolve + // (words vanish in 2 alternating 2-frame passes). The 1UP tag blinks on the + // classic attract cadence all clip; the HUD yields while the boss lands. + const b = dna.body; + const bar = b.bar || {}; + const barH = bar.h || 70, + inset = bar.inset || 24, + barBot = bar.bottom || 50; + const barTop = H - barBot - barH; + const tags = b.tags || {}; + const A = dna.palette.accent, + MG = dna.palette.magenta || "#FF2E88"; + const lineData = LINES.map((L, i) => ({ + id: "h" + L.id, + in: +L.in.toFixed(3), + // checkerboard exit start: just before the next line's first pop + xo: i + 1 < LINES.length ? +(L.out - 0.04).toFixed(3) : +Math.min(L.out, DUR - 0.11).toFixed(3), + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + })); + const css = ` + #hud { position:absolute; left:${inset}px; top:${barTop}px; width:${W - 2 * inset}px; height:${barH}px; + opacity:0; background:rgba(3,8,18,0.84); border:2px solid ${A}; + box-shadow:0 0 16px ${A}59, inset 0 0 24px ${A}14; z-index:3; } + .hln { position:absolute; left:50%; top:50%; white-space:nowrap; opacity:0; + font-family:'${dna.fonts.body}', monospace; font-size:${b.fontPx}px; line-height:1; + ${b.textTransform ? "text-transform:" + b.textTransform + ";" : ""} + color:${dna.palette.body}; text-shadow:0 3px 0 rgba(0,0,0,0.6); } + .hw { position:relative; display:inline-block; margin-right:0.45em; opacity:0; } + .hw:last-child { margin-right:0; } + .htick { position:absolute; inset:-3px; background:#ffffff; opacity:0; } + #tagL { position:absolute; left:18px; top:50%; transform:translateY(-50%); + font-family:'${dna.fonts.tag}', monospace; font-size:15px; color:${dna.palette.yellow || A}; + text-shadow:0 2px 0 rgba(0,0,0,0.6); } + #tagR { position:absolute; right:18px; top:50%; transform:translateY(-50%); + font-family:'${dna.fonts.tag}', monospace; font-size:12px; color:${dna.palette.credit || A}; + text-shadow:0 2px 0 rgba(0,0,0,0.6); } + #crtvig { position:absolute; inset:0; opacity:0; z-index:20; pointer-events:none; + background:radial-gradient(120% 95% at 50% 46%, rgba(0,0,0,0) 58%, rgba(0,0,0,0.34) 100%); } + #crtscan { position:absolute; inset:0; opacity:0; z-index:21; pointer-events:none; + background:repeating-linear-gradient(180deg, rgba(0,0,0,0.9) 0px, rgba(0,0,0,0.9) 2px, rgba(0,0,0,0) 2px, rgba(0,0,0,0) 5px); }`; + const html = `
+
${esc(tags.left || "1UP")}
+
${esc(tags.right || "CREDIT 01")}
+${lineData.map((L) => `
`).join("\n")} +
+
+
`; + const js = ` + // ---- body paradigm: HUDRAIL (coin-pop words on an arcade HUD bar) ---- + // world overlays: scanlines + slight vignette + tl.set("#crtscan", { opacity: ${b.scan ?? 0.06} }, 0.03); + tl.set("#crtvig", { opacity: 1 }, 0.03); + // HUD bar boots up + tl.set("#hud", { opacity: 1 }, 0.05); + tl.fromTo("#hud", { y: 14 }, { y: 0, duration: 0.12, ease: "steps(2)" }, 0.05); + // 1UP blink, classic cadence (baked sets) + for (let t = 0.28, k = 0; t < ${(DUR - 0.06).toFixed(2)}; t += 0.45, k++) { + tl.set("#tagL", { opacity: k % 2 === 0 ? 0.3 : 1 }, t); + } + const HUD = ${J(lineData)}; + HUD.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt]) => { + const w = document.createElement("span"); w.className = "hw"; w.textContent = txt; + const tick = document.createElement("div"); tick.className = "htick"; + w.appendChild(tick); line.appendChild(w); + }); + gsap.set(line, { xPercent: -50, yPercent: -50 }); + tl.set(line, { opacity: 1 }, L.in); + L.words.forEach(([txt, st, em], wi) => { + const el = line.children[wi], tick = el.lastChild; + // coin pop: instant-on + steps(2) scale from the baseline + 1-frame blip + tl.set(el, { opacity: 1 }, st); + tl.fromTo(el, { scale: 0 }, { scale: 1, duration: 0.12, ease: "steps(2)", + transformOrigin: "50% 100%" }, st); + tl.set(tick, { opacity: 0.95 }, st); // coin blip, exactly 1 frame + tl.set(tick, { opacity: 0 }, st + 0.042); + if (em) { // 3-frame palette swap (body -> accent -> magenta -> body) + tl.set(el, { color: ${J(A)} }, st + 0.13); + tl.set(el, { color: ${J(MG)} }, st + 0.172); + tl.set(el, { color: ${J(dna.palette.body)} }, st + 0.214); + } + }); + // checkerboard dissolve: words vanish in 2 alternating set passes + L.words.forEach((w, wi) => { + tl.set(line.children[wi], { opacity: 0 }, + wi % 2 === 0 ? L.xo : Math.min(L.xo + 0.083, ${(DUR - 0.03).toFixed(2)})); + }); + tl.set(line, { opacity: 0, display: "none" }, Math.min(L.xo + 0.15, ${(DUR - 0.02).toFixed(2)})); + }); +${ + b.yield + ? ` // HUD yields while the boss lands (restore only with runway) + tl.to("#hud", { opacity: ${b.yield.dim}, duration: 0.15, ease: "power1.in" }, ${(heroIn - (b.yield.pre || 0.2)).toFixed(3)}); +${ + heroIn + (b.yield.post || 0.9) + 0.3 < DUR - 0.1 + ? ` tl.to("#hud", { opacity: 1, duration: 0.25, ease: "power1.out" }, ${(heroIn + (b.yield.post || 0.9)).toFixed(3)});` + : "" +}` + : "" +}`; + return { css, html, js }; +} + +function paradigmCarbonstrip() { + // CARBONSTRIP: cold-war case-file transcript strip docked on the clearer + // side (manila gradient, punch holes, faint red watermark, typed case + // header). Carbon type HAMMERS in per word — per-char sets 30ms apart, + // scale 1.35→1 in one frame (the stamp motif at low amplitude) — every + // strike kicks the strip 1px (y-channel locked while the strip itself is + // tweened); seeded ±1.2px baselines + seeded ribbon-ink weight. Emphasis + // words get a red ink ellipse drawn around them. Lines live on up to + // body.rows fixed slots; PAGES (broken at full rows, dead-air gaps > 0.7s, + // and after the hero hand-off line — it is filed away while the stamp owns + // the frame) exit by X-row over-strike (3 chunks per line, lines 0.16s + // apart) then a carriage yank-down feed; the final page is pulled with the + // whole strip at clip end. The strip top-shadow breathes during the + // stamp's dead-still hold; the strip yields (body.yield) while it lands. + const b = dna.body; + const p = dna.hero.params || {}; + const C = heroIn + (p.crush ?? 0.074); // stamp contact (shared with rubberstamp) + const SW = (b.strip && b.strip.w) || 764, + SH = (b.strip && b.strip.h) || 132; + const SX = (b.strip && b.strip.x) ?? (CLEARER === "left" ? 48 : W - 48 - SW); + const ST = H - ((b.strip && b.strip.bottomPx) ?? 4) - SH; + const ROWS = b.rows || [36, 82]; + const FY = +(DUR - 0.1).toFixed(3); // final carriage yank (the file is pulled) + const HDR = b.header || "TRANSCRIPT OF RECORDING"; + const hdrW = Math.round(HDR.length * 11.4); + const hdrSteps = Math.max(8, Math.round(HDR.length * 0.58)); + const rgb = (h) => + [h.slice(1, 3), h.slice(3, 5), h.slice(5, 7)].map((x) => parseInt(x, 16)).join(","); + const ACC = dna.palette.accent || "#b3271e"; + // ---- pages: up to ROWS.length lines per carriage feed ---- + const pages = []; + let cur = []; + LINES.forEach((L, i) => { + cur.push(L); + const next = LINES[i + 1]; + const heroLine = heroIn >= L.in - 0.01 && heroIn < L.out; + const gap = next ? next.words[0].start - L.words[L.words.length - 1].end : 0; + if (!next || cur.length === ROWS.length || heroLine || gap > 0.7) { + pages.push(cur); + cur = []; + } + }); + // ---- exit schedule: X-strike chunks (0.05s apart, lines 0.16s apart) → + // yank → hide → carriage return. Roomy cadence in dead air, compressed + // when the next page is close (both cadences are the demo's). The whole + // exit always completes before the next page's first hammer strike. + const YLOCK = [[0, 0.215]]; // strip-y tween windows: no kicks inside + const pageData = pages.map((pg, pi) => { + const lines = pg.map((L, k) => ({ + id: "d" + L.id, + top: ROWS[k], + n: L.words.reduce((a, w) => a + w.display.length, 0) + L.words.length - 1, + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + })); + if (pi === pages.length - 1) { + YLOCK.push([+(FY - 0.01).toFixed(3), +(DUR + 0.02).toFixed(3)]); + return { lines, xs: null, yank: null, limit: FY }; + } + const lastW = pg[pg.length - 1].words; + const lastEnd = lastW[lastW.length - 1].end; + const nextIn = +(pages[pi + 1][0].words[0].start - 0.02).toFixed(3); + const n = pg.length; + const roomySpan = 0.16 * (n - 1) + 0.55, + tightSpan = 0.16 * (n - 1) + 0.3; + let xt0 = lastEnd + 0.33, + roomy = true; + if (xt0 + roomySpan > nextIn) { + xt0 = Math.max(lastEnd + 0.18, nextIn - roomySpan); + if (xt0 + roomySpan > nextIn + 0.001) { + roomy = false; + xt0 = Math.max(lastEnd + 0.15, nextIn - tightSpan); + } + } + xt0 = +xt0.toFixed(3); + const lastChunkEnd = xt0 + 0.16 * (n - 1) + 0.1; + const yankT = +(lastChunkEnd + (roomy ? 0.14 : 0.07)).toFixed(3); + const yankDur = roomy ? 0.1 : 0.07; + const hideT = +(yankT + (roomy ? 0.11 : 0.07)).toFixed(3); + const returnT = +(yankT + (roomy ? 0.13 : 0.075)).toFixed(3); + const returnDur = roomy ? 0.18 : 0.055; + const fits = xt0 + (roomy ? roomySpan : tightSpan) <= nextIn + 0.02; + YLOCK.push([+(yankT - 0.01).toFixed(3), +(returnT + returnDur).toFixed(3)]); + return { + lines, + xs: fits ? xt0 : null, + yank: [yankT, yankDur, hideT, returnT, returnDur], + limit: hideT, + }; + }); + // red-circle draw durations clamp inside the word's page life + pageData.forEach((pg) => + pg.lines.forEach((ln) => + ln.words.forEach((wd) => { + if (wd[2]) { + const circT = wd[1] + wd[0].length * 0.03 + 0.02; + wd.push(+Math.min(0.25, Math.max(0.14, pg.limit - circT - 0.02)).toFixed(3)); + } + }), + ), + ); + const css = ` + #strip { position:absolute; left:${SX}px; top:${ST}px; width:${SW}px; height:${SH}px; opacity:0; + background: linear-gradient(180deg, #e0cda6 0%, ${dna.palette.paper || "#d8c49a"} 42%, #ccb486 100%); + border:1px solid rgba(106,86,48,0.9); border-radius:2px; + box-shadow: inset 0 1px 0 rgba(255,250,235,0.5), inset 0 -14px 22px rgba(95,74,38,0.18); } + #shade { position:absolute; left:2px; right:2px; top:-16px; height:16px; opacity:0.5; + background: linear-gradient(180deg, rgba(15,10,4,0) 0%, rgba(15,10,4,0.38) 100%); } + .hole { position:absolute; left:14px; width:13px; height:13px; border-radius:50%; + background:rgba(58,45,24,0.34); box-shadow: inset 0 2px 2px rgba(30,22,10,0.5), 0 1px 0 rgba(255,248,230,0.45); } + #wm { position:absolute; right:18px; top:40px; font-family:'${dna.fonts.tag}', serif; + font-size:32px; letter-spacing:7px; color:rgba(${rgb(ACC)},0.13); + transform:rotate(-6deg); white-space:nowrap; } + #hdrwrap { position:absolute; left:52px; top:9px; overflow:hidden; white-space:nowrap; width:0; } + #hdr { font-family:'${dna.fonts.tag}', serif; font-size:14px; letter-spacing:3px; + color:${dna.palette.ink || "#8a6f3f"}; white-space:nowrap; } + .ln { position:absolute; left:52px; font-family:'${dna.fonts.body}', serif; font-size:${b.fontPx}px; + line-height:1; color:${dna.palette.body}; white-space:nowrap; } + .ln .w { display:inline-block; position:relative; margin-right:0.5em; } + .ln .c { display:inline-block; opacity:0; } + .xrow { position:absolute; left:52px; font-family:'${dna.fonts.body}', serif; font-size:${b.fontPx}px; + line-height:1; color:rgba(${rgb(ACC)},0.85); white-space:nowrap; } + .xrow span { opacity:0; } + .circ { position:absolute; left:-13px; top:-9px; width:calc(100% + 26px); + height:calc(100% + 18px); overflow:visible; pointer-events:none; } + .circ ellipse { fill:none; stroke:${ACC}; stroke-width:3.6; stroke-linecap:round; }`; + const html = `
+
+
+
+
${esc(b.watermark || "CONFIDENTIAL")}
+
${esc(HDR)}
+${pageData + .flatMap((pg) => pg.lines) + .map((ln) => `
`) + .join("\n")} +
`; + const shadeStart = +(C + 0.12).toFixed(3); + const shadeDur = Math.min(1.5, FY - shadeStart - 0.05); + const dimT = +(heroIn - ((b.yield && b.yield.pre) || 0.02)).toFixed(3); + const resT = +(heroIn + ((b.yield && b.yield.post) || 0.41)).toFixed(3); + const js = ` + // ---- body paradigm: CARBONSTRIP (typewriter hammer in / X-strike + carriage-feed out) ---- + const strip = document.getElementById("strip"); + const krnd = mulberry32(${b.seed || 180618}); + // y-channel windows where the strip is tweened — no kicks allowed inside + const YLOCK = ${J(YLOCK)}; + function kick(t) { + for (const [a, b] of YLOCK) if (t >= a && t <= b + 0.045) return; + tl.set(strip, { y: 1 }, t); + tl.set(strip, { y: 0 }, t + 0.042); + } + + // ===== strip entrance: the carriage feeds the paper up ===== + tl.set(strip, { opacity: 1 }, 0.02); + tl.fromTo(strip, { y: 130 }, { y: 0, duration: 0.19, ease: "power3.out" }, 0.02); + tl.fromTo("#hdrwrap", { width: 0 }, { width: ${hdrW}, duration: 0.42, ease: "steps(${hdrSteps})" }, 0.10); + + // ===== body: typewriter hammer (per-char sets, 30ms apart) ===== + const PAGES = ${J(pageData)}; + const NS = "http://www.w3.org/2000/svg"; + const strikes = [], circles = []; + PAGES.forEach((pg) => { + pg.lines.forEach((ln) => { + const line = document.getElementById(ln.id); + ln.words.forEach(([txt, st, em, cd]) => { + const w = document.createElement("span"); w.className = "w"; + [...txt].forEach((ch, i) => { + const c = document.createElement("span"); c.className = "c"; c.textContent = ch; + w.appendChild(c); + strikes.push([c, st + i * 0.03]); + }); + if (em) { + const svg = document.createElementNS(NS, "svg"); + svg.setAttribute("class", "circ"); svg.setAttribute("viewBox", "0 0 120 64"); + svg.setAttribute("preserveAspectRatio", "none"); + const el = document.createElementNS(NS, "ellipse"); + el.setAttribute("cx", 60); el.setAttribute("cy", 32); + el.setAttribute("rx", 55); el.setAttribute("ry", 25); + el.setAttribute("transform", "rotate(-4 60 32)"); + svg.appendChild(el); w.appendChild(svg); + circles.push([el, st + txt.length * 0.03 + 0.02, cd]); + } + line.appendChild(w); + }); + }); + }); + strikes.forEach(([c, t]) => { + const off = (krnd() - 0.5) * 2.4; // ±1.2px baseline wobble + const ink = 0.84 + krnd() * 0.16; // uneven ribbon ink + gsap.set(c, { y: off, transformOrigin: "50% 85%" }); + tl.set(c, { opacity: ink, scale: 1.35 }, t); // hammer = the stamp motif, low amplitude + tl.set(c, { scale: 1 }, t + 0.042); + kick(t); // every strike kicks the strip + }); + // red ink circles draw around the emphasis words + circles.forEach(([el, t, d]) => { + const len = el.getTotalLength(); + gsap.set(el, { attr: { "stroke-dasharray": len, "stroke-dashoffset": len } }); + tl.to(el, { attr: { "stroke-dashoffset": 0 }, duration: d, ease: "power2.inOut" }, t); + }); + + // ===== exits: X-row over-strike (3 chunks per line) then carriage yank ===== + PAGES.forEach((pg) => { + const hides = pg.lines.map((ln) => "#" + ln.id); + if (pg.xs != null) pg.lines.forEach((ln, k) => { + const row = document.createElement("div"); + row.className = "xrow"; row.style.top = (ln.top + 2) + "px"; + strip.appendChild(row); hides.push(row); + const third = Math.max(1, Math.ceil(ln.n / 3)); + let left = ln.n; + for (let j = 0; j < 3 && left > 0; j++) { + const nC = Math.min(third, left); left -= nC; + const s = document.createElement("span"); s.textContent = "X".repeat(nC); + row.appendChild(s); + const t = pg.xs + k * 0.16 + j * 0.05; + tl.set(s, { opacity: 1 }, t); + kick(t); + } + }); + if (pg.yank) { + const [yt, yd, ht, rt, rd] = pg.yank; + tl.to(strip, { y: 30, duration: yd, ease: "power3.in" }, yt); + tl.set(hides, { opacity: 0 }, ht); + tl.to(strip, { y: 0, duration: rd, ease: "power2.out" }, rt); + } + }); +${ + b.yield + ? ` + // ===== apex etiquette: the strip yields while the stamp lands ===== + tl.to(strip, { opacity: ${b.yield.dim}, duration: 0.18, ease: "power1.in" }, ${dimT}); +${resT + 0.3 < FY ? ` tl.to(strip, { opacity: 1, duration: 0.25, ease: "power1.out" }, ${resT});` : ""}` + : "" +} +${ + shadeDur > 0.4 + ? ` + // strip top-shadow breathes during the stamp's dead-still hold + tl.to("#shade", { keyframes: { opacity: [0.5, 0.72, 0.54, 0.7, 0.55, 0.66, 0.5] }, + duration: ${shadeDur.toFixed(2)}, ease: "none" }, ${shadeStart});` + : "" +} + + // ===== ending: the file is pulled — strip yanks down and is gone ===== + tl.to(strip, { y: 34, duration: 0.09, ease: "power3.in" }, ${FY}); + tl.to(strip, { opacity: 0, duration: 0.06 }, ${(FY + 0.02).toFixed(3)});`; + return { css, html, js }; +} + +function paradigmLaserrail() { + // LASERRAIL: concert lower third — every word is IGNITED where two thin + // laser beams (accent from the top-left, magenta from the top-right) sweep + // to CONVERGE on its position 2 frames early; at convergence a flare pops + // and the word snaps on in laser color (the apex motif at low amplitude: + // crush → contact squash → elastic settle, brightness cool). Emphasis words + // strobe once (1 frame off / back on) and their beams linger. Exits: a + // sweeper beam crosses L→R and carries the words (streak x+44 + blur). + // Word centers are BAKED at compile time from the measured char-width table + // (assets/fonts/char-widths.json) so font-load timing can't skew beam aim + // (calibrated vs the t37 demo's browser-measured table: ≤3px/word). + const b = dna.body; + const fam = dna.fonts.body; + const m = famMetrics(fam) || { ascent: 0.8, descent: 0.2, widths: {} }; + const lsEm = parseFloat(b.letterSpacing) || 0; + const gapEm = b.wordGapEm ?? 0.24; + const railBot = H - b.bottomPx; + const emPx = Math.round(b.fontPx * (b.minorScale || 1.325)); + const A = dna.palette.accent; + const lineData = LINES.map((L, i) => { + const words = L.words.map((w) => ({ + txt: b.textTransform === "uppercase" ? w.display.toUpperCase() : w.display, + st: +w.start.toFixed(3), + em: w.minor ? 1 : 0, + })); + // centered-line layout, baked in px (CSS model: inline-blocks on one + // baseline, margin 0 em, tracking after every char incl the last) + const pxs = words.map((w) => (w.em ? emPx : b.fontPx)); + const ws = words.map((w, k) => wordPx(w.txt, fam, pxs[k], lsEm)); + const total = ws.reduce((a, x, k) => a + x + 2 * gapEm * pxs[k], 0); + const maxPx = Math.max(...pxs); + const baseline = railBot - (maxPx * (1 - m.ascent + m.descent)) / 2; + let cur = W / 2 - total / 2; + const pos = words.map((w, k) => { + const cx = cur + gapEm * pxs[k] + ws[k] / 2; + cur += ws[k] + 2 * gapEm * pxs[k]; + return [ + Math.round(cx), + Math.round(baseline - (pxs[k] * (m.ascent - m.descent)) / 2), + Math.round(ws[k]), + ]; + }); + // sweep starts so the carried words clear before the next line's beams own + // the rail; last line keeps the demo's end-of-clip runway + const sweepT = + i + 1 < LINES.length + ? +(L.out - 0.14).toFixed(3) + : +Math.min(L.out - 0.14, DUR - 0.26).toFixed(3); + return { + id: "lr" + L.id, + in: +L.in.toFixed(3), + sweepT, + words: words.map((w) => [w.txt, w.st, w.em]), + pos, + }; + }); + const css = ` + #lrfx { position:absolute; inset:0; } + .lrline { position:absolute; left:${W / 2}px; top:${railBot}px; opacity:0; white-space:nowrap; + font-family:'${fam}', sans-serif; font-size:${b.fontPx}px; line-height:1; + letter-spacing:${b.letterSpacing || "0.02em"}; color:${dna.palette.body}; + ${b.textTransform ? "text-transform:" + b.textTransform + ";" : ""} + text-shadow: 0 0 10px ${A}bf, 0 0 26px ${A}61, 0 2px 6px rgba(0,0,0,0.7); } + .lrline .w { display:inline-block; opacity:0; margin:0 ${gapEm}em; } + .lrline .w.em { font-size:${emPx}px; + text-shadow: 0 0 14px ${A}e6, 0 0 34px ${A}80, 0 2px 6px rgba(0,0,0,0.7); } + .lflare { position:absolute; width:54px; height:54px; border-radius:50%; opacity:0; + background: radial-gradient(circle, rgba(220,255,235,0.95) 0%, ${A}80 40%, ${A}00 70%); } + .lsweep { position:absolute; width:3px; height:88px; opacity:0; + background: linear-gradient(180deg, ${A}00 0%, rgba(230,255,242,0.95) 45%, ${A}00 100%); + filter: drop-shadow(0 0 6px ${A}); }`; + const html = + ` + + \n` + lineData.map((L) => `
`).join("\n"); + const js = ` + // ---- body paradigm: LASERRAIL (per-word beam-converge ignition) ---- + const LACC = ${J(A)}, LMAG = ${J(dna.palette.magenta || "#ff4df0")}; + const NSL = "http://www.w3.org/2000/svg"; + const lrStage = document.getElementById("stage"); + const gLR = document.getElementById("gLR"); + function lrLine(x1, y1, x2, y2, col, w) { + const l = document.createElementNS(NSL, "line"); + l.setAttribute("x1", x1); l.setAttribute("y1", y1); + l.setAttribute("x2", x2); l.setAttribute("y2", y2); + l.setAttribute("stroke", col); l.setAttribute("stroke-width", w); + l.setAttribute("stroke-linecap", "round"); + l.style.opacity = 0; gLR.appendChild(l); return l; + } + const LRAIL = ${J(lineData)}; + LRAIL.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt, , em]) => { + const s = document.createElement("span"); + s.className = "w" + (em ? " em" : ""); s.textContent = txt; + line.appendChild(s); + }); + gsap.set(line, { xPercent: -50, yPercent: -100, transformOrigin: "50% 100%" }); + tl.set(line, { opacity: 1 }, L.words[0][1] - 0.03); + L.words.forEach(([txt, st, em], wi) => { + const el = line.children[wi]; + const [wx, wy] = L.pos[wi]; + // beams yield inside the apex window (the hero owns the light) + const yld = (st > ${(heroIn - 0.41).toFixed(3)} && st < ${(heroIn + 0.99).toFixed(3)}) + ? ${b.yield ? (b.yield.beamDim ?? 0.55) : 1} : 1; + const t0 = st - 0.21, cv = st - 0.083; + // two beams converge on the word 2 frames before its time + [[-25, -15, LACC, wx - 170], [${W + 25}, -15, LMAG, wx + 170]].forEach(([ex, ey, col, sx]) => { + const halo = lrLine(ex, ey, sx, wy - 30, col, 5); + const core = lrLine(ex, ey, sx, wy - 30, col, 1.5); + tl.set(halo, { opacity: 0.24 * yld }, t0); + tl.set(core, { opacity: 0.92 * yld }, t0); + tl.to([halo, core], { attr: { x2: wx, y2: wy }, duration: cv - t0, ease: "power2.out" }, t0); + tl.to([halo, core], { opacity: 0, duration: em ? 0.45 : 0.2, ease: "power1.in" }, st + 0.03); + }); + // convergence flare + const f = document.createElement("div"); + f.className = "lflare"; lrStage.appendChild(f); + f.style.left = (wx - 27) + "px"; f.style.top = (wy - 27) + "px"; + tl.set(f, { opacity: 0.85, scale: 0.5 }, cv); + tl.to(f, { scale: 1.35, opacity: 0, duration: 0.13, ease: "power2.out" }, st - 0.01); + // IGNITE (apex motif at low amplitude): on in 1 frame, crush, squash, settle + tl.set(el, { opacity: 1, scale: 1.12, filter: "brightness(1.85)", transformOrigin: "50% 80%" }, st); + tl.to(el, { scale: 1, duration: 0.09, ease: "power3.in" }, st + 0.005); + tl.set(el, { scaleX: 1.05, scaleY: 0.94 }, st + 0.1); + tl.to(el, { scaleX: 1, scaleY: 1, duration: 0.3, ease: "elastic.out(1, 0.42)" }, st + 0.14); + tl.to(el, { filter: "brightness(1)", duration: 0.22, ease: "power2.out" }, st + 0.07); + if (em) { // single strobe: 1 frame off, back on + tl.set(el, { opacity: 0 }, st + 0.18); + tl.set(el, { opacity: 1 }, st + 0.222); + } + }); + // hold life: gentle breathe + laser shimmer while the line waits + const lastSt = L.words[L.words.length - 1][1]; + const free = L.sweepT - lastSt - 0.35; + if (free > 0.45) { + const half = Math.min(0.55, free / 2); + tl.to(line, { scale: 1.013, duration: half, ease: "sine.inOut" }, lastSt + 0.35); + tl.to(line, { scale: 1.0, duration: half, ease: "sine.inOut" }, lastSt + 0.35 + half); + } + if (free > 0.9) { + tl.to(line, { keyframes: { filter: ["brightness(1)","brightness(1.07)","brightness(1)","brightness(1.05)","brightness(1)"] }, + duration: 0.9, ease: "none" }, lastSt + 0.5); + } + // EXIT: sweeper beam crosses L→R, words streak away as it passes them + const xs = L.pos.map((p) => p[0]); + const x0 = Math.min(...xs) - 46, x1 = Math.max(...xs) + 46; + const sw = document.createElement("div"); + sw.className = "lsweep"; lrStage.appendChild(sw); + sw.style.left = x0 + "px"; sw.style.top = (L.pos[0][1] - 58) + "px"; + tl.set(sw, { opacity: 0.9 }, L.sweepT); + tl.to(sw, { x: x1 - x0, duration: 0.13, ease: "power1.in" }, L.sweepT); + tl.to(sw, { opacity: 0, duration: 0.05 }, L.sweepT + 0.13); + L.words.forEach((w, wi) => { + const el = line.children[wi]; + const frac = (L.pos[wi][0] - x0) / Math.max(1, x1 - x0); + tl.to(el, { x: 44, opacity: 0, filter: "blur(5px)", duration: 0.11, ease: "power2.in" }, + L.sweepT + 0.11 * frac); + }); + tl.set(line, { display: "none" }, Math.min(L.sweepT + 0.32, ${(DUR - 0.02).toFixed(3)})); + }); +${ + b.yield + ? ` // rail yields while the apex lands (restore only with clear runway) + LRAIL.forEach((L) => { + if (L.in < ${heroIn.toFixed(3)} + 0.9 && L.sweepT > ${heroIn.toFixed(3)} - 0.3) { + const dimT = Math.max(${(heroIn - (b.yield.pre || 0.04)).toFixed(3)}, L.in + 0.05); + if (L.sweepT > dimT + 0.25) { + tl.to("#" + L.id, { opacity: ${b.yield.dim}, duration: 0.15 }, dimT); + const resT = ${(heroIn + (b.yield.post || 0.9)).toFixed(3)}; + if (resT + 0.3 < L.sweepT) tl.to("#" + L.id, { opacity: 1, duration: 0.25 }, resT); + } + } + });` + : "" +}`; + return { css, html, js }; +} + +function paradigmStormrail() { + // STORMRAIL: rain-washed lower third. Ambient rain = seeded thin streaks + // falling on repeating linear cycle tweens (pure f(t), one wind vector, + // mid-fall at t0); a second streak set DOUBLES the rain for ~1s after the + // strike. Body words arrive with the lightning-kiss motif at low amplitude + // (2-frame lit-bright pop + micro settle); emphasis = sheet-lightning double + // flash (the bg sky double-kisses at the same beats). Exits wash downward + // with the rain (y+22, blur). The visible line dims while the bolt lands and + // its text-shadow flips toward the strike for the flash frames. + const b = dna.body; + const r = b.rain || {}; + const A = dna.palette.accent; + const railTop = H - (b.bottomPx || 98); + const sgn = (dna.hero.params || {}).side === "right" ? -1 : 1; + const lineData = LINES.map((L) => ({ + id: "st" + L.id, + in: +L.in.toFixed(3), + // wash start: just before the next line — but a line facing dead air + // washes away early (the demo's r1 exits at lastWord + 1.08s) + out: +Math.min(L.out - 0.05, L.words[L.words.length - 1].end + 1.08, DUR - 0.2).toFixed(3), + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + })); + const css = ` + #stscrim { position:absolute; left:0; right:0; top:${H - 180}px; height:180px; opacity:0; + background:linear-gradient(to bottom, rgba(6,10,18,0) 0%, rgba(6,10,18,0.45) 45%, rgba(6,10,18,0.62) 100%); } + #rain { position:absolute; inset:0; opacity:${r.opacity ?? 0.08}; } + #rain2 { position:absolute; inset:0; opacity:0; } + .drop { position:absolute; left:0; top:0; width:2px; border-radius:1px; + background:linear-gradient(to bottom, rgba(200,222,244,0) 0%, rgba(214,232,250,0.95) 100%); } + .stline { position:absolute; left:${W / 2}px; top:${railTop}px; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.body}', sans-serif; font-weight:700; font-size:${b.fontPx}px; line-height:1.15; + letter-spacing:${b.letterSpacing || "0.015em"}; color:${dna.palette.body}; + text-shadow: 0 6px 16px rgba(2,8,18,0.85), 0 2px 4px rgba(2,8,18,0.7), 0 0 14px ${A}47; } + .stline .w { display:inline-block; opacity:0; margin:0 0.16em; }`; + const html = + `
+
+` + + lineData.map((L) => `
`).join("\n") + + ` +
`; + const js = ` + // ---- body paradigm: STORMRAIL (lightning-kiss words, rain-wash exits, ambient rain) ---- + const I = ${heroIn.toFixed(3)}; + // ambient rain: seeded streaks on repeating linear cycles (f(t), no random at render) + function makeRain(container, n, seed, t0, t1) { + const rnd = mulberry32(seed); + for (let i = 0; i < n; i++) { + const el = document.createElement("div"); + el.className = "drop"; container.appendChild(el); + const x0 = 20 + rnd() * ${W - 40}, d = 0.55 + rnd() * 0.55; + const len = 46 + rnd() * 70, frac = rnd(); + const travel = ${H + 300}, dx = -160; // slanted fall, one wind vector + gsap.set(el, { height: len, rotation: 9, x: x0, y: -160 }); + let t = t0; + // partial first cycle so rain is mid-fall at t0 + tl.fromTo(el, { y: -160 + travel * frac, x: x0 + dx * frac }, + { y: ${H + 140}, x: x0 + dx, duration: d * (1 - frac), ease: "none" }, t); + t += d * (1 - frac); + while (t < t1) { + tl.fromTo(el, { y: -160, x: x0 }, + { y: ${H + 140}, x: x0 + dx, duration: d, ease: "none" }, t); + t += d; + } + } + } + makeRain(document.getElementById("rain"), ${r.count ?? 18}, ${r.seed ?? 9021}, 0, ${(DUR - 0.02).toFixed(2)}); + makeRain(document.getElementById("rain2"), ${r.count ?? 18}, ${r.seed2 ?? 4477}, ${(heroIn - 0.11).toFixed(3)}, ${Math.min(heroIn + 1.24, DUR - 0.02).toFixed(3)}); + // rain doubles for ~1s after the strike + tl.set("#rain2", { opacity: 0.11 }, I + 0.02); + tl.to("#rain2", { opacity: 0, duration: 0.30 }, ${Math.min(heroIn + 1.02, DUR - 0.34).toFixed(3)}); + + // rail scrim (stable reading surface against the busy lower frame) + tl.to("#stscrim", { opacity: 1, duration: 0.20 }, 0.05); + tl.to("#stscrim", { opacity: 0, duration: 0.16 }, ${(DUR - 0.18).toFixed(3)}); + + const SRAIL = ${J(lineData)}; + SRAIL.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt]) => { + const s = document.createElement("span"); + s.className = "w"; s.textContent = txt; line.appendChild(s); + }); + gsap.set(line, { xPercent: -50, yPercent: -100 }); + tl.set(line, { opacity: 1 }, L.words[0][1] - 0.025); + L.words.forEach(([txt, st, em], wi) => { + const el = line.children[wi]; + // entrance = the apex motif at low amplitude: lit-bright pop + micro settle + tl.set(el, { opacity: 1, y: 4, scale: 1.06, filter: "brightness(2.2)", + transformOrigin: "50% 85%" }, st); + tl.to(el, { y: 0, scale: 1, duration: 0.12, ease: "power2.out" }, st + F); + tl.to(el, { filter: "brightness(1)", duration: 0.14, ease: "power1.out" }, st + F); + if (em && st + 0.20 + 3 * F < ${(DUR - 0.04).toFixed(2)}) { // sheet lightning: 2-frame double flash + const t0 = st + 0.20; + tl.set(el, { filter: "brightness(1.9)" }, t0); + tl.set(el, { filter: "brightness(1.0)" }, t0 + F); + tl.set(el, { filter: "brightness(1.8)" }, t0 + 2 * F); + tl.to(el, { filter: "brightness(1)", duration: 0.12 }, t0 + 3 * F); + } + }); + // EXIT: wash downward with the rain + tl.to(line, { y: 22, opacity: 0, filter: "blur(3px)", duration: 0.18, ease: "power1.in" }, L.out); + tl.set(line, { display: "none" }, Math.min(L.out + 0.20, ${(DUR - 0.02).toFixed(2)})); + }); +${ + b.yield + ? ` // rail yields while the bolt lands; the visible line's shadow flips toward + // the strike for the flash frames (light from the bolt side) + SRAIL.forEach((L) => { + if (L.in < I + 0.9 && L.out > I - 0.3) { + const dimT = Math.max(I - ${(b.yield.pre ?? 0.15).toFixed(2)}, L.in + 0.05); + if (L.out > dimT + 0.25) { + tl.to("#" + L.id, { opacity: ${b.yield.dim}, duration: 0.12 }, dimT); + const resT = I + ${(b.yield.post ?? 0.29).toFixed(2)}; + if (resT + 0.3 < L.out) tl.to("#" + L.id, { opacity: 1, duration: 0.10 }, resT); + } + } + if (L.in <= I - 2 * F && L.out > I) { + tl.set("#" + L.id, { textShadow: "${12 * sgn}px 4px 12px rgba(2,8,18,0.85), 0 0 14px ${A}73" }, I - 2 * F); + tl.set("#" + L.id, { textShadow: "0 6px 16px rgba(2,8,18,0.85), 0 2px 4px rgba(2,8,18,0.7), 0 0 14px ${A}47" }, I + 0.09); + } + });` + : "" +}`; + return { css, html, js }; +} + +function paradigmHolorail() { + // HOLORAIL: a volumetric projection PLATE (scanlined glass slab with corner + // brackets + feed tag) is the stable reading surface; it boots like a + // projector turning ON (scaleY snap + 1-frame flicker) and breathes a slow + // luminance cycle. Body words boot with the apex motif at low amplitude: + // instant opacity + RISING sweep reveal (clip wipe), a 1-frame interference + // x-glitch, and a constant chromatic-fringe text-shadow. Emphasis words get + // a 2-frame projection DROPOUT that restores brighter, then settles. Each + // line drifts slowly in rotationY (it IS a projection) and exits with the + // projector-cut: brightness pop → collapse to a horizontal slit → to a dot. + const b = dna.body; + const A = dna.palette.accent, + MG = dna.palette.magenta || "#ff5fd6"; + const plateW = b.plateW || 980, + plateH = b.plateH || 96; + const plateY = H - (b.bottomPx || 108); // plate center + const lineY = plateY + (b.lineDy ?? 9); // line center sits low in the plate + const lineData = LINES.map((L, i) => ({ + id: "hl" + L.id, + // projector-cut start: completes (0.15s) before the next line boots; + // the last line keeps the demo's end-of-clip runway + exit: +(i + 1 < LINES.length ? L.out - 0.15 : Math.min(L.out + 0.07, DUR - 0.18)).toFixed(3), + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + })); + const shadowBase = `-1.5px 0 0 ${A}8c, 1.5px 0 0 ${MG}6b, 0 0 16px ${A}80, 0 2px 8px rgba(1,10,16,0.85)`; + const shadowEm = `-1.5px 0 0 ${A}cc, 1.5px 0 0 ${MG}99, 0 0 26px ${dna.palette.glowEm || "#A0F2FF"}d9, 0 2px 8px rgba(1,10,16,0.85)`; + const css = ` + #railwrap { position:absolute; inset:0; } + #plate { position:absolute; left:${W / 2}px; top:${plateY}px; width:${plateW}px; height:${plateH}px; opacity:0; + border-radius:3px; + background: linear-gradient(180deg, rgba(4,22,33,0.46) 0%, rgba(6,30,44,0.55) 100%); + border: 1px solid ${A}52; + box-shadow: 0 0 26px rgba(60,170,210,0.20), inset 0 0 38px ${A}0f; } + #pscan { position:absolute; inset:0; border-radius:3px; + background: repeating-linear-gradient(180deg, ${A}00 0px, ${A}00 3px, ${A}12 3px, ${A}12 4px); } + #ptag { position:absolute; left:14px; top:7px; font-family:'${dna.fonts.tag}', sans-serif; + font-weight:400; font-size:11px; letter-spacing:0.32em; color:${A}99; } + .crn { position:absolute; width:11px; height:11px; } + .crn.a { left:-1px; top:-1px; border-left:2px solid ${A}cc; border-top:2px solid ${A}cc; } + .crn.b { right:-1px; top:-1px; border-right:2px solid ${A}cc; border-top:2px solid ${A}cc; } + .crn.c { left:-1px; bottom:-1px; border-left:2px solid ${A}cc; border-bottom:2px solid ${A}cc; } + .crn.d { right:-1px; bottom:-1px; border-right:2px solid ${A}cc; border-bottom:2px solid ${A}cc; } + .hln { position:absolute; left:${W / 2}px; top:${lineY}px; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.body}', sans-serif; font-weight:500; font-size:${b.fontPx}px; + line-height:1.15; letter-spacing:${b.letterSpacing || "0.02em"}; } + .hln .w { display:inline-block; opacity:0; margin-right:0.3em; + color:${dna.palette.body}ed; + text-shadow: ${shadowBase}; }`; + const html = + `
+
+
+
${esc(theme.plateTag || b.tag || "VOLUMETRIC FEED // CH-07")}
+
+
+
+` + + lineData.map((L) => `
`).join("\n") + + ` +
`; + // plate breathe: finite yoyo cycles sized to the runway before the end cut + const pCut = +(DUR - 0.14).toFixed(3); + const breaths = Math.max(1, Math.floor((pCut - 0.5) / 0.8) - 1); + const js = ` + // ---- body paradigm: HOLORAIL (projection plate, sweep-boot words, projector-cut exits) ---- + gsap.set("#plate", { xPercent: -50, yPercent: -50, transformOrigin: "50% 50%" }); + + // plate boots like a projector turning ON (inverse of the projector-cut exit) + tl.set("#plate", { opacity: 1 }, 0.10); + tl.fromTo("#plate", { scaleY: 0.03 }, { scaleY: 1, duration: 0.13, ease: "expo.out" }, 0.10); + tl.set("#plate", { opacity: 0.35 }, 0.155); + tl.set("#plate", { opacity: 1 }, 0.195); + tl.to("#plate", { opacity: 0.93, duration: 0.8, ease: "sine.inOut", yoyo: true, repeat: ${breaths} }, 0.5); + + const HRAIL = ${J(lineData)}; + const HSH_BASE = ${J(shadowBase)}, HSH_EM = ${J(shadowEm)}; + HRAIL.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt], wi) => { + const s = document.createElement("span"); + s.className = "w"; s.textContent = txt; + if (wi === L.words.length - 1) s.style.marginRight = "0"; + line.appendChild(s); + }); + gsap.set(line, { xPercent: -50, yPercent: -50, transformPerspective: 700, transformOrigin: "50% 50%" }); + tl.set(line, { opacity: 1 }, L.words[0][1] - 0.03); + + L.words.forEach(([txt, st, em], wi) => { + const el = line.children[wi]; + // BOOT (low-amplitude apex motif): instant opacity + vertical sweep reveal + tl.set(el, { opacity: 1, clipPath: "inset(-20% -10% 100% -10%)" }, st); + tl.to(el, { clipPath: "inset(-20% -10% -30% -10%)", duration: 0.15, ease: "power2.out" }, st); + tl.set(el, { clipPath: "none" }, st + 0.16); + // 1-frame interference glitch + tl.set(el, { x: 2 }, st + 0.05); + tl.set(el, { x: -2 }, st + 0.09); + tl.set(el, { x: 0 }, st + 0.13); + // EMPHASIS: 2-frame projection dropout, restores brighter (delay shrinks + // near the line's projector-cut so dropout+restore always complete) + if (em) { + const d = Math.min(${b.emphDelay ?? 0.34}, L.exit - st - 0.183); + if (d >= 0.083) { + tl.set(el, { opacity: 0.2 }, st + d); + tl.set(el, { opacity: 1, color: ${J(dna.palette.em || "#f4feff")}, textShadow: HSH_EM }, st + d + 0.083); + const sb = st + d + 0.51; + if (sb < L.exit - 0.05) + tl.to(el, { color: ${J((dna.palette.body || "#c7f1ff") + "ed")}, textShadow: HSH_BASE, + duration: Math.min(0.4, ${(DUR - 0.04).toFixed(2)} - sb), ease: "power1.in" }, sb); + } + } + }); + + // slow rotateY drift — it IS a projection + const dS = L.words[0][1] + 0.08; + const dD = Math.max(0.3, L.exit - dS - 0.04); + tl.to(line, { keyframes: { rotationY: [-3.5, 3.5, -2.5] }, duration: dD, ease: "none" }, dS); + + // EXIT: projector cut — line collapses to a bright slit, then to a dot + const ex = L.exit; + tl.set(line, { filter: "brightness(2.2)" }, ex); + tl.to(line, { scaleY: 0.045, duration: 0.07, ease: "power3.in" }, ex + 0.005); + tl.to(line, { scaleX: 0.015, duration: 0.06, ease: "power3.in" }, ex + 0.08); + tl.set(line, { opacity: 0, display: "none" }, ex + 0.15); + }); +${ + b.yield + ? ` // the whole rail (plate included) yields while the apex lands + tl.to("#railwrap", { opacity: ${b.yield.dim}, duration: 0.18, ease: "power1.in" }, ${(heroIn - (b.yield.pre ?? 0.18)).toFixed(3)}); + tl.to("#railwrap", { opacity: 1, duration: 0.22, ease: "power1.out" }, ${(heroIn + (b.yield.post ?? 0.37)).toFixed(3)});` + : "" +} + // end: the plate itself gets the projector cut + tl.set("#plate", { filter: "brightness(2.2)" }, ${pCut}); + tl.to("#plate", { scaleY: 0.03, duration: 0.07, ease: "power3.in" }, ${(pCut + 0.005).toFixed(3)}); + tl.to("#plate", { scaleX: 0.012, duration: 0.05, ease: "power3.in" }, ${(pCut + 0.08).toFixed(3)}); + tl.set("#plate", { opacity: 0 }, ${Math.min(pCut + 0.12, DUR - 0.02).toFixed(3)});`; + return { css, html, js }; +} + +function paradigmPlanktonrail() { + // PLANKTONRAIL: deep-sea lower third on TWO coexisting row slots — even + // lines ride the upper row, odd lines the lower, so couplets share the + // water like drifting strata. Words GLOW ON like jellyfish (the apex bloom + // at low amplitude): 2-frame opacity + radial bloom from center (scale + // 0.92→1, blur 5→0, brightness 0.45→1) while a cyan glow text-shadow grows + // in; emphasis words pulse a slow DOUBLE-BEAT (jellyfish propulsion). Every + // line floats on a gentle y drift and exits by SINKING (+15px, dimming). + // Furniture: seeded plankton motes drift f(t) in the open water; the ones + // seeded in a ring around the apex get ATTRACTED to the bloom and brighten + // as it lands. The line feeding the apex dims while the bloom owns the + // frame (no restore — it exits dimmed, by design); a line entering during + // the hold arrives dimmed and restores once the bloom settles. + const b = dna.body; + const A = dna.palette.accent, + VIO = dna.palette.violet || "#9d7bff"; + const rowB = H - (b.bottomPx || 70); // lower row center + const rowA = rowB - (b.rowDy ?? 58); // upper row center + const m = b.motes || {}; + const yld = b.yield || {}; + // active line = the one feeding the apex (last line that starts before it) + const activeIdx = LINES.reduce((a, L, i) => (L.words[0].start < heroIn ? i : a), 0); + const lineData = LINES.map((L, i) => { + // two-row coexistence: a line clears when its ROW is next needed (line + // i+2) or ~0.3s after its couplet finishes speaking (staggered pair + // exits); a pre-apex leftover clears just before the bloom lands (the + // feeding line stays and yields instead); the last line floats to the end + const pairLast = LINES[Math.min(i - (i % 2) + 1, LINES.length - 1)]; + const pairEnd = pairLast.words[pairLast.words.length - 1].end; + let out = + i + 2 < LINES.length + ? Math.min(LINES[i + 2].in - 0.15, pairEnd + 0.28 + (i % 2) * 0.12) + : i + 1 < LINES.length + ? LINES[i + 1].words[0].start - 0.05 + : null; + if (i !== activeIdx && out != null && out > heroIn - 0.25 && L.in < heroIn) out = heroIn - 0.21; + return { + id: "pl" + L.id, + top: i % 2 ? rowB : rowA, + in: +L.in.toFixed(3), + out: out == null ? null : +Math.min(out, DUR - 0.36).toFixed(3), + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + }; + }); + const shOn = `0 2px 10px rgba(1,10,20,0.85), 0 0 16px ${A}cc`; + const shEm = `0 2px 10px rgba(1,10,20,0.85), 0 0 18px ${A}f2, 0 0 34px ${VIO}8c`; + const css = ` + .mote { position:absolute; border-radius:50%; background:${dna.palette.mote || "#96f5e8"}f2; + box-shadow: 0 0 7px 2px ${A}bf; opacity:0; } + .pln { position:absolute; left:${W / 2}px; white-space:nowrap; + font-family:'${dna.fonts.body}', sans-serif; font-weight:400; font-size:${b.fontPx}px; + line-height:1.2; color:${dna.palette.body}; } + .pln .w { display:inline-block; position:relative; margin-right:0.30em; opacity:0; } + .pln .w:last-child { margin-right:0; } + .pln .ink { display:inline-block; + text-shadow: 0 2px 10px rgba(1,10,20,0.85), 0 0 0px ${A}00; } + .pln .w.em .ink { color:${dna.palette.em || "#f4fffd"}; + text-shadow: 0 2px 10px rgba(1,10,20,0.85), 0 0 0px ${A}00, 0 0 0px ${VIO}00; }`; + const html = + `
+` + + lineData + .map((L) => `
`) + .join("\n"); + const js = ` + // ---- body paradigm: PLANKTONRAIL (jellyfish glow-on, two-row float, sinking exits) ---- + const I = ${heroIn.toFixed(3)}; + const mrnd = mulberry32(${m.seed ?? 2929}); + const mf = document.getElementById("mfield"); + // plankton motes: seeded drift walks f(t); the first ${m.near ?? 5} seed a + // ring around the bloom heart and get ATTRACTED to it as the apex lands + const APX = ${HG.x}, APY = ${HG.y}; + for (let i = 0; i < ${m.count ?? 12}; i++) { + const near = i < ${m.near ?? 5}; + const el = document.createElement("div"); + el.className = "mote"; mf.appendChild(el); + let L, T; + if (near) { + const ang = (i / ${m.near ?? 5}) * Math.PI * 2 + 0.55 + mrnd() * 0.5; + const r = (150 + mrnd() * 75) * ${(HG.fontPx / 120).toFixed(3)}; + L = APX + Math.cos(ang) * r * 1.35; + T = APY + Math.sin(ang) * r * 0.85; + } else { + L = 60 + mrnd() * ${W - 120}; + T = 60 + mrnd() * ${H - 260}; + } + L = Math.max(20, Math.min(${W - 25}, L)); T = Math.max(25, Math.min(${H - 175}, T)); + const s = 2 + Math.round(mrnd() * 2); + gsap.set(el, { width: s, height: s, left: L, top: T }); + const tin = 0.04 + mrnd() * 0.35; + tl.to(el, { opacity: 0.1, duration: 0.3, ease: "power1.out" }, tin); + // slow seeded drift walk + const a1 = (mrnd() - 0.5) * 36, a2 = a1 + (mrnd() - 0.5) * 36, a3 = a2 + (mrnd() - 0.5) * 30; + const b1 = (mrnd() - 0.5) * 28, b2 = b1 + (mrnd() - 0.5) * 28, b3 = b2 + (mrnd() - 0.5) * 24; + const dEnd = near ? I - 0.25 : ${(DUR - 0.34).toFixed(3)}; + tl.to(el, { keyframes: { x: [a1, a2, a3], y: [b1, b2, b3], + opacity: [0.13, 0.07, 0.11] }, + duration: dEnd - (tin + 0.32), ease: "sine.inOut" }, tin + 0.32); + if (near) { + // ATTRACTION: pulled toward the bloom, brightening + const tx = (APX - L) * 0.72 + (mrnd() - 0.5) * 24; + const ty = (APY - T) * 0.72 + (mrnd() - 0.5) * 18; + tl.to(el, { x: tx, y: ty, opacity: 0.42, scale: 1.7, + duration: 0.75, ease: "power2.in" }, I - 0.19 + i * 0.045); + tl.to(el, { keyframes: { x: [tx + 4, tx - 3, tx + 2], y: [ty - 4, ty + 3, ty - 2] }, + duration: 0.32, ease: "sine.inOut" }, ${Math.min(heroIn + 0.59, DUR - 0.42).toFixed(3)}); + tl.to(el, { y: ty + 18, opacity: 0, duration: 0.18, ease: "power1.in" }, ${(DUR - 0.22).toFixed(3)}); + } else { + tl.to(el, { y: "+=14", opacity: 0, duration: 0.16, ease: "power1.in" }, ${(DUR - 0.2).toFixed(3)}); + } + } + + // ---- body lines: jellyfish glow-on, floating couplet rows, sinking exits ---- + const SH_ON = ${J(shOn)}, SH_EM = ${J(shEm)}; + const PRAIL = ${J(lineData)}; + PRAIL.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt, , em]) => { + const w = document.createElement("span"); + w.className = "w" + (em ? " em" : ""); + const ink = document.createElement("span"); ink.className = "ink"; + ink.textContent = txt; w.appendChild(ink); line.appendChild(w); + }); + gsap.set(line, { xPercent: -50, yPercent: -50 }); + + // gentle float while held (everything in the abyss floats) + const t0 = Math.max(0.02, L.words[0][1] - 0.02); + const D = (L.out ?? ${(DUR - 0.06).toFixed(3)}) - t0 - 0.04; + const yArr = D > 1.5 ? [-2, 2, -3, 1, 3, 0] : [-2, 1, -2, 0]; + tl.to(line, { keyframes: { y: yArr }, duration: D, ease: "sine.inOut" }, t0); + + L.words.forEach(([txt, st, em], wi) => { + const w = line.children[wi], ink = w.children[0]; + // GLOW ON: radial bloom from word center (the apex bloom at low amplitude) + tl.set(w, { opacity: 1 }, st - 0.01); + tl.fromTo(ink, { opacity: 0 }, { opacity: 1, duration: 0.083, ease: "none" }, st); + tl.fromTo(ink, { scale: 0.92, filter: "blur(5px) brightness(0.45)" }, + { scale: 1, filter: "blur(0px) brightness(1)", duration: 0.4, ease: "sine.out" }, st); + tl.to(ink, { textShadow: em ? SH_EM : SH_ON, duration: 0.4, ease: "sine.out" }, st); + // EMPHASIS: slow double-beat pulse (jellyfish propulsion) + if (em && st + 1.07 <= ${(DUR - 0.09).toFixed(3)}) { + tl.to(ink, { keyframes: { + filter: ["blur(0px) brightness(1.4)", "blur(0px) brightness(1.06)", + "blur(0px) brightness(1.5)", "blur(0px) brightness(1.12)", + "blur(0px) brightness(1)"], + scale: [1.035, 1.01, 1.05, 1.015, 1] }, + duration: 0.55, ease: "sine.inOut" }, st + 0.52); + } + }); + + // EXIT: light sinks — drift down +15 while dimming + if (L.out != null) { + tl.to(line, { y: 15, opacity: 0, duration: 0.3, ease: "power1.in" }, L.out); + tl.set(line, { display: "none" }, Math.min(L.out + 0.32, ${(DUR - 0.02).toFixed(2)})); + } + }); + + // rail yields to the apex landing: the feeding line dims (and exits dimmed + // unless it has ≥0.9s of hold left); a line entering during the hold + // arrives at ${yld.enter ?? 0.8} and restores once the bloom settles + PRAIL.forEach((L, i) => { + if (i === ${activeIdx} && (L.out ?? 99) > I - ${(yld.pre ?? 0.17).toFixed(2)} + 0.25) { + tl.to("#" + L.id, { opacity: ${yld.dim ?? 0.55}, duration: 0.18, ease: "power1.out" }, I - ${(yld.pre ?? 0.17).toFixed(2)}); + if ((L.out ?? 99) > I + 1.2) + tl.to("#" + L.id, { opacity: 1, duration: 0.25, ease: "power1.out" }, I + 0.9); + } + if (L.in > I && L.in < I + 0.9) { + tl.set("#" + L.id, { opacity: ${yld.enter ?? 0.8} }, L.in); + tl.to("#" + L.id, { opacity: 1, duration: 0.25, ease: "power1.out" }, + Math.min(Math.max(I + ${(yld.post ?? 0.63).toFixed(2)}, L.in + 0.1), ${(DUR - 0.28).toFixed(2)})); + } + });`; + return { css, html, js }; +} + +function paradigmSheenrail() { + // SHEENRAIL: iridescent silk lower third on TWO coexisting row slots — even + // lines ride the upper row (H − bottomPx − rowDy), odd lines the lower + // (H − bottomPx), so couplets read together like a woven pair. Words are + // aurora-gradient ink (background-clip:text over a rose→teal→violet wash + // whose backgroundPosition DRIFTS f(t) across the whole clip — the body's + // hold life) above a blurred dark understroke; entrance = 2-frame opacity + // + y8 settle (the ribbon's flow at low amplitude); emphasis = ONE bright + // sheen sweep marching through the word + a brightness pulse. Exits + // dissolve UPWARD (y−12, blur 3, staggered) and each line releases 3-4 + // drifting light streaks that float up from its row. A soft radial band + // scrim sits under the rows (stable reading surface); the whole rail — + // band included — yields while the ribbon writes. Line scheduling mirrors + // planktonrail's two-row coexistence: a row clears when next needed (line + // i+2) or shortly after its couplet finishes speaking (staggered pair + // exits); the pre-apex leftover clears at heroIn−0.32 while the FEEDING + // line stays (it dims with the railwrap yield); the last line holds. + const b = dna.body; + const PAL = [dna.palette.rose, dna.palette.accent, dna.palette.violet]; + const rowB = H - (b.bottomPx || 76); // lower row TOP edge + const rowA = rowB - (b.rowDy ?? 58); // upper row TOP edge + const band = b.band || {}; + const bandW = band.w ?? 860, + bandH = band.h ?? 170; + const bandCy = Math.round((rowA + rowB + b.fontPx * 1.1) / 2); + const yld = b.yield || {}; + // active line = the one feeding the apex (last line that starts before it) + const activeIdx = LINES.reduce((a, L, i) => (L.words[0].start < heroIn ? i : a), 0); + const lineData = LINES.map((L, i) => { + const pairLast = LINES[Math.min(i - (i % 2) + 1, LINES.length - 1)]; + const pairEnd = pairLast.words[pairLast.words.length - 1].end; + let out = + i + 2 < LINES.length + ? Math.min(LINES[i + 2].in - 0.15, pairEnd + 0.23 + (i % 2) * 0.17) + : i + 1 < LINES.length + ? LINES[i + 1].words[0].start - 0.11 + : null; + if (i !== activeIdx && out != null && out > heroIn - 0.25 && L.in < heroIn) out = heroIn - 0.32; + return { + id: "sk" + L.id, + top: i % 2 ? rowB : rowA, + out: out == null ? null : +Math.min(out, DUR - 0.4).toFixed(3), + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + }; + }); + const css = ` + #skwrap { position:absolute; inset:0; } + #band { position:absolute; left:${W / 2}px; top:${bandCy}px; width:${bandW}px; height:${bandH}px; + margin-left:-${bandW / 2}px; margin-top:-${bandH / 2}px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, rgba(6,10,28,0.55) 0%, rgba(6,10,28,0.3) 55%, rgba(6,10,28,0) 78%); } + .skl { position:absolute; left:${W / 2}px; white-space:nowrap; + font-family:'${dna.fonts.body}', serif; font-weight:500; font-size:${b.fontPx}px; + line-height:1.1; } + .skl .w { position:relative; display:inline-block; margin-right:0.3em; opacity:0; } + .skl .w:last-child { margin-right:0; } + .skl .sh { position:absolute; left:0; top:3px; color:rgba(4,8,22,0.7); + filter:blur(3px); z-index:0; } + .skl .grad { position:relative; z-index:1; + background-image: linear-gradient(100deg, ${PAL[0]} 0%, ${PAL[1]} 32%, ${PAL[2]} 64%, ${PAL[0]} 96%); + background-size: 300% 100%; + -webkit-background-clip: text; background-clip: text; color: transparent; } + .skl .shine { position:absolute; left:0; top:0; z-index:2; opacity:0; + background-image: linear-gradient(100deg, rgba(255,255,255,0) 40%, rgba(255,255,255,0.95) 50%, rgba(255,255,255,0) 60%); + background-size: 260% 100%; + -webkit-background-clip: text; background-clip: text; color: transparent; } + .streak { position:absolute; width:3px; border-radius:2px; opacity:0; filter:blur(2px); }`; + const html = + `
+
+` + + lineData + .map((L) => `
`) + .join("\n") + + ` +
`; + const js = ` + // ---- body paradigm: SHEENRAIL (flow-on entrance, sheen-sweep emphasis, dissolve-to-streaks exits) ---- + const I = ${heroIn.toFixed(3)}; + const srnd = mulberry32(${b.seed ?? 20260611}); + const stg = document.getElementById("stage"); + const PAL = ${J(PAL)}; + const SRAIL = ${J(lineData)}; + tl.to("#band", { opacity: 1, duration: 0.35, ease: "sine.out" }, 0.12); + const allGrads = []; + SRAIL.forEach((L) => { + const line = document.getElementById(L.id); + const wraps = []; + L.words.forEach(([txt, st, em]) => { + const w = document.createElement("span"); w.className = "w"; + const sh = document.createElement("span"); sh.className = "sh"; sh.textContent = txt; + const g = document.createElement("span"); g.className = "grad"; g.textContent = txt; + const sn = document.createElement("span"); sn.className = "shine"; sn.textContent = txt; + w.appendChild(sh); w.appendChild(g); w.appendChild(sn); + line.appendChild(w); wraps.push(w); allGrads.push(g); + // FLOW ON: 2-frame opacity + y8 settle (the ribbon's flow at low amplitude) + tl.fromTo(w, { opacity: 0 }, { opacity: 1, duration: 2 * F, ease: "none" }, st); + tl.fromTo(w, { y: 8 }, { y: 0, duration: 0.38, ease: "sine.out" }, st); + // EMPHASIS: the sheen pulses bright once through the word + if (em) { + const pt = st + 0.16; + tl.set(sn, { opacity: 1 }, pt); + tl.fromTo(sn, { backgroundPosition: "-80% 50%" }, + { backgroundPosition: "180% 50%", duration: 0.42, ease: "power2.inOut" }, pt); + tl.to(sn, { opacity: 0, duration: 0.12, ease: "none" }, pt + 0.34); + tl.to(g, { keyframes: { filter: ["brightness(1)", "brightness(1.55)", "brightness(1)"] }, + duration: 0.42, ease: "none" }, pt); + } + }); + gsap.set(line, { xPercent: -50 }); + // EXIT: the line dissolves upward and releases drifting light streaks + if (L.out != null) { + tl.to(wraps, { opacity: 0, y: -12, filter: "blur(3px)", + duration: 0.32, ease: "power1.in", stagger: 0.035 }, L.out); + tl.set(line, { display: "none" }, L.out + 0.6); + const nS = ${b.streaks ?? 4}; + for (let i = 0; i < nS; i++) { + const s = document.createElement("div"); s.className = "streak"; stg.appendChild(s); + const c = PAL[i % 3]; + const x = ${W / 2} + (i - (nS - 1) / 2) * 95 + (srnd() - 0.5) * 50; + const hh = 40 + Math.round(srnd() * 28); + gsap.set(s, { left: x, top: L.top + 14, height: hh, + background: "linear-gradient(to top, rgba(255,255,255,0) 0%, " + c + " 50%, rgba(255,255,255,0) 100%)" }); + tl.fromTo(s, { y: 14 }, + { keyframes: { opacity: [0, 0.7, 0], y: [14, -28, -78] }, + duration: 0.62, ease: "power1.out" }, Math.min(L.out + 0.04 + i * 0.05, ${(DUR - 0.66).toFixed(3)})); + } + } + }); + // continuous iridescent sheen drift f(t) — the body's hold life + tl.fromTo(allGrads, { backgroundPosition: "0% 50%" }, + { backgroundPosition: "300% 50%", duration: ${(DUR - 0.04).toFixed(3)}, ease: "none" }, 0); + // rail yields — band included — while the ribbon writes (apex owns the frame) + tl.to("#skwrap", { opacity: ${yld.dim ?? 0.5}, duration: 0.2, ease: "sine.in" }, I - ${(yld.pre ?? 0.16).toFixed(2)}); + tl.to("#skwrap", { opacity: 1, duration: 0.3, ease: "sine.out" }, I + ${(yld.post ?? 0.62).toFixed(2)});`; + return { css, html, js }; +} + +function paradigmScoperail() { + // SCOPERAIL: oscilloscope lower third. A dark phosphor scope band (HUD + // readouts, graticule) hosts an ALWAYS-ALIVE waveform — an SVG polyline + // rebuilt from baked point-set states (seeded pseudo-RMS envelope: speech + // grows it, silence flattens it, every word arrival kicks a local gaussian + // burst for ~3 frames; the hero words kick WIDE bursts where the trace + // surges off the scope to write). Body lines (phosphor mono) sit on the + // band above the trace and wipe in L→R over reserved-width slots (the apex + // pen-write at low amplitude) with a 2-frame just-traced flash; emphasis + // words get a ticking frequency-readout chip; the trig LED blinks on every + // word arrival. Lines collapse INTO the waveform on exit. At the FINAL word + // the trace explodes to max-amp chaos, flatlines, collapses to a single dot + // and `body.siglost` stamps — the scope dies with the clip. + const b = dna.body; + const A = dna.palette.accent, + BRT = dna.palette.bright || "#d6ffe4", + FLSH = dna.palette.flash || "#eafff2", + EM = dna.palette.em || "#ffb347", + HUD = dna.palette.hud || "#2f8f55"; + const bandH = b.bandH || 164; + const bandTop = H - bandH; + const waveH = b.waveH || 84; + const NZ = +LASTWORD.start.toFixed(3); // the scope-death beat + // line windows: exits collapse into the trace — early into dead air + // (lastWordStart+0.67), else just before the next line needs the slot + const lineData = LINES.map((L, i) => { + const lastSt = L.words[L.words.length - 1].start; + const next = LINES[i + 1]; + const out = next + ? +Math.min(next.in - 0.05, lastSt + 0.67).toFixed(3) + : +Math.min(NZ + 0.33, DUR - 0.2).toFixed(3); + return { + id: "sc" + L.id, + in: +L.in.toFixed(3), + out, + words: L.words.map((w) => [ + w.display, + +w.start.toFixed(3), + w.minor ? 1 : 0, + Math.abs(w.start - NZ) < 0.001 ? 1 : 0, // the death word settles hot + ]), + }; + }); + // waveform burst map BAKED from measured glyph metrics (slot centers) + + // the hero kick positions (the trace surges wide where the apex writes) + const GAPem = 0.32; + const burst = []; // [t, x, big] + LINES.forEach((L) => { + const ws = L.words.map((w) => wordPx(w.display, dna.fonts.body, b.fontPx, 0)); + const totalW = ws.reduce((a, c) => a + c, 0) + GAPem * b.fontPx * (L.words.length - 1); + let x = W / 2 - totalW / 2; + L.words.forEach((w, i) => { + burst.push([+w.start.toFixed(3), +(x + ws[i] / 2).toFixed(1), 0]); + x += ws[i] + GAPem * b.fontPx; + }); + }); + if (!heroInline) + for (let k = 0; k < hero.len; k++) { + const hx = HG.x + (hero.len === 1 ? 0 : (k / (hero.len - 1)) * 0.6 * (HG.halfW || 300)); + burst.push([+tWords[hero.idx + k].start.toFixed(3), +hx.toFixed(1), 1]); + } + const css = ` + #scband { position:absolute; left:0; top:${bandTop}px; width:${W}px; height:${bandH}px; opacity:0; + background: rgba(0,12,4,0.58); border-top:1px solid ${A}4d; + box-shadow: 0 -8px 30px rgba(0,0,0,0.35); } + .schud { position:absolute; top:6px; font-family:'${dna.fonts.tag}', monospace; font-size:20px; + color:${HUD}; letter-spacing:2px; } + #schudL { left:24px; } + #schudR { right:24px; } + #sctrig { display:inline-block; width:10px; height:10px; border-radius:50%; + background:${EM}; box-shadow:0 0 6px ${EM}cc; margin-left:8px; opacity:0.45; } + #scgrat { position:absolute; left:0; top:${b.waveTop || 80}px; width:${W}px; height:${waveH}px; opacity:0.6; + background-image: + repeating-linear-gradient(90deg, ${A}12 0 1px, transparent 1px 80px), + linear-gradient(180deg, transparent ${Math.round(waveH / 2 - 1)}px, ${A}1a ${Math.round(waveH / 2 - 1)}px ${Math.round(waveH / 2 + 1)}px, transparent ${Math.round(waveH / 2 + 1)}px); } + #scwavewrap { position:absolute; left:0; top:${b.waveTop || 80}px; width:${W}px; height:${waveH}px; } + #scwave { filter: drop-shadow(0 0 5px ${A}bf); } + .scln { position:absolute; left:0; top:${b.lineDy || 34}px; width:${W}px; text-align:center; + font-family:'${dna.fonts.body}', monospace; font-size:${b.fontPx}px; line-height:${Math.round(b.fontPx * 1.1)}px; + color:${A}; text-shadow:0 0 8px ${A}73; + white-space:nowrap; opacity:0; } + .scln .w { display:inline-block; vertical-align:bottom; white-space:nowrap; + margin-right:${GAPem}em; position:relative; } + .scln .sz { visibility:hidden; } + .scln .clip { position:absolute; left:0; top:0; overflow:hidden; white-space:nowrap; width:0; } + .scchip { position:absolute; left:50%; top:-26px; width:130px; margin-left:-65px; + height:24px; font-family:'${dna.fonts.tag}', monospace; font-size:21px; + color:${EM}; text-shadow:0 0 6px ${EM}99; opacity:0; } + .scchip .cv { position:absolute; left:0; top:0; width:100%; text-align:center; opacity:0; } + #scdot { position:absolute; left:${W / 2 - 6}px; top:${bandTop + (b.waveTop || 80) + Math.round(waveH / 2) - 4}px; + width:9px; height:9px; border-radius:50%; background:${BRT}; opacity:0; + box-shadow:0 0 8px ${A}, 0 0 22px ${A}e6; } + #scsiglost { position:absolute; left:0; top:${bandTop + (b.waveTop || 80)}px; width:${W}px; text-align:center; + font-family:'${dna.fonts.tag}', monospace; font-size:24px; letter-spacing:6px; + color:${EM}; text-shadow:0 0 10px ${EM}b3; opacity:0; }`; + const html = + `
+
${esc(b.hudL || "SPECTRUM // CH1")}
+
${esc(b.hudR || FPS + ".0 kS/s · TRIG")}
+
+
+ + + +
+` + + lineData.map((L) => `
`).join("\n") + + ` +
+
${esc(b.siglost || "— SIGNAL LOST —")}
+
`; + const js = ` + // ---- body paradigm: SCOPERAIL (trace-wipe words, waveform alive all clip) ---- + const rnd = mulberry32(${b.waveSeed || 7}); + const NZ = ${NZ.toFixed(3)}, ENDC = ${(DUR - 0.02).toFixed(3)}; + const BURST = ${J(burst)}; // [t, x, big] — word arrivals kick the trace + const allT = BURST.map((q) => q[0]); + const burstAt = {}; const bigAt = {}; + BURST.forEach(([t, x, big]) => { burstAt[t] = x; if (big) bigAt[t] = 1; }); + + // ===== baked waveform states (pure f(t) + seeded jitter; ~2 states/word frame) ===== + const timesSet = []; + let t0 = 0; + while (t0 < NZ - 0.015) { timesSet.push(t0); t0 += 1 / 12; } + allT.forEach((wt) => { [wt, wt + F, wt + 2 * F].forEach((x) => { if (x < NZ - 0.015) timesSet.push(x); }); }); + for (let te = NZ - 0.01; te <= Math.min(NZ + 0.311, ENDC); te += F) timesSet.push(te); + timesSet.push(Math.min(NZ + 0.325, ENDC), Math.min(NZ + 0.35, ENDC)); + timesSet.sort((a, b2) => a - b2); + const times = timesSet.filter((x, i) => i === 0 || x - timesSet[i - 1] > 0.02); + const NPTS = ${Math.round(W / 20) + 1}, MIDY = ${Math.round(waveH / 2)}; + function speechEnv(t) { + let e = 0; + allT.forEach((wt) => { + const g = Math.exp(-Math.pow((t - wt - 0.10) / 0.21, 2)); + if (g > e) e = g; + }); + return e; + } + const wavePts = []; + times.forEach((t) => { + const boom = t > NZ - 0.007 && t < NZ + 0.308; + const flat = t >= NZ + 0.32; + const baseAmp = flat ? 0.5 : (boom ? 34 : 2.2 + 15 * speechEnv(t)); + const pts = []; + for (let i = 0; i < NPTS; i++) { + const x = i * 20; + let amp = baseAmp; + if (!boom && !flat) { + allT.forEach((wt) => { + if (t >= wt - 0.005 && t <= wt + 0.13) { + const big = bigAt[wt]; + amp += (big ? 30 : 20) * Math.exp(-Math.pow((x - burstAt[wt]) / (big ? 240 : 95), 2)); + } + }); + } + const jit = (rnd() - 0.5) * 2; + let y = amp * (0.52 * Math.sin(i * 0.55 + t * 16.2 + 0.7) + + 0.42 * Math.sin(i * 1.27 - t * 23.5 + 2.1) + + (boom ? 0.85 : 0.42) * jit); + if (y > MIDY - 4) y = MIDY - 4; if (y < -(MIDY - 4)) y = -(MIDY - 4); + pts.push(x + "," + (MIDY + y).toFixed(1)); + } + wavePts.push([t, pts.join(" ")]); + }); + const scwave = document.getElementById("scwave"); + scwave.setAttribute("points", wavePts[0][1]); + wavePts.forEach(([t, str]) => { tl.set(scwave, { attr: { points: str } }, Math.min(t, ENDC)); }); + + // ===== scope power-on ===== + tl.fromTo("#scband", { opacity: 0 }, { opacity: 1, duration: 0.12, ease: "power1.out" }, 0.02); + tl.fromTo("#scwavewrap", { scaleX: 0.04, transformOrigin: "50% 50%" }, + { scaleX: 1, duration: 0.22, ease: "power2.out" }, 0.04); +${ + b.yield && !heroInline + ? ` + // rail yields while the apex trace writes (band carries lines + wave + HUD) + tl.to("#scband", { opacity: ${b.yield.dim}, duration: 0.18, ease: "power1.in" }, ${Math.max(heroIn - (b.yield.pre || 0.13), 0.2).toFixed(3)}); + tl.to("#scband", { opacity: 1, duration: 0.25, ease: "power1.out" }, ${Math.min(heroIn + (b.yield.post || 0.97), DUR - 0.4).toFixed(3)});` + : "" +} + + // ===== body lines: trace-wipe entrances over reserved-width slots ===== + const SRAIL = ${J(lineData)}; + function chipVals(r, idx) { + if (idx % 2 === 0) { + let v = 150 + Math.round(r() * 250); const a = [v]; + v += 300 + Math.round(r() * 200); a.push(v); + v += 200 + Math.round(r() * 150); a.push(v); + return a.map((x) => x + " Hz"); + } + let v = 0.3 + Math.round(r() * 3) * 0.1; const a = [v]; + v += 0.4 + Math.round(r() * 2) * 0.1; a.push(v); + v += 0.2 + Math.round(r() * 2) * 0.1; a.push(v); + return a.map((x) => x.toFixed(1) + " kHz"); + } + const crnd = mulberry32(${b.chipSeed || 11}); + let chipIdx = 0; + SRAIL.forEach((L) => { + const line = document.getElementById(L.id); + tl.set(line, { opacity: 1 }, L.words[0][1] - 0.03); + L.words.forEach(([txt, wt, minor, death]) => { + // reserved-width slot: sizer keeps the centered line static (no + // re-center drift as words arrive); the clip wipes the word in over it. + const wrap = document.createElement("span"); wrap.className = "w"; + const sizer = document.createElement("span"); sizer.className = "sz"; + sizer.textContent = txt; + const clip = document.createElement("span"); clip.className = "clip"; + const inner = document.createElement("span"); + inner.textContent = txt; + clip.appendChild(inner); wrap.appendChild(sizer); wrap.appendChild(clip); + line.appendChild(wrap); + // entrance = apex motif at low amplitude: the trace draws it L→R + tl.fromTo(clip, { width: 0 }, { width: "auto", duration: 0.10, ease: "none" }, wt); + // phosphor just-traced flash (full brightness instantly, settle in 2 frames) + const settle = death + ? { color: ${J(EM)}, textShadow: "0 0 9px ${EM}8c" } + : { color: ${J(A)}, textShadow: "0 0 8px ${A}73" }; + tl.set(inner, { color: ${J(FLSH)}, textShadow: "0 0 16px ${BRT}f2" }, wt); + tl.set(inner, settle, wt + 2 * F); + // trigger LED blink on every word arrival + tl.set("#sctrig", { opacity: 1, scale: 1.35 }, wt); + tl.set("#sctrig", { opacity: 0.45, scale: 1 }, wt + 2 * F); + // emphasis: ticking frequency readout (seeded, ascending) + if (minor) { + const chip = document.createElement("span"); chip.className = "scchip"; + const cvs = chipVals(crnd, chipIdx++).map((v) => { + const s = document.createElement("span"); s.className = "cv"; s.textContent = v; + chip.appendChild(s); return s; + }); + wrap.appendChild(chip); + tl.set(chip, { opacity: 1 }, wt + 0.12); + cvs.forEach((s, i) => { + tl.set(s, { opacity: 1 }, wt + 0.12 + i * 2 * F); + if (i < cvs.length - 1) tl.set(s, { opacity: 0 }, wt + 0.12 + (i + 1) * 2 * F); + }); + } + }); + // exit: the line collapses INTO the waveform + tl.to(line, { y: 30, opacity: 0, duration: 0.13, ease: "power2.in" }, L.out); + }); + + // ===== the death beat: explosion / band shake / flatline / dot / siglost ===== + [[3, 0], [-4, 1], [3, 2], [-2, 3], [0, 4]].forEach(([dx, k]) => { + tl.set("#scband", { x: dx }, Math.min(NZ + k * 0.042, ENDC)); + }); + tl.set("#scband", { x: 0 }, Math.min(NZ + 0.21, ENDC)); + // trig LED panics, then dies + [0, 1, 2, 3].forEach((k) => { + tl.set("#sctrig", { opacity: k % 2 ? 0.2 : 1, background: ${J(dna.palette.panic || "#ff5f47")}, + boxShadow: "0 0 8px ${(dna.palette.panic || "#ff5f47") + "e6"}" }, Math.min(NZ + k * 2 * F, ENDC)); + }); + tl.set("#sctrig", { opacity: 0.18 }, Math.min(NZ + 0.35, ENDC)); + // flatline → trace shrinks to a single dot + tl.to("#scwavewrap", { scaleX: 0.015, duration: 0.055, ease: "power3.in", + transformOrigin: "50% 50%" }, Math.min(NZ + 0.365, ENDC - 0.06)); + tl.set("#scwavewrap", { opacity: 0 }, Math.min(NZ + 0.425, ENDC)); + tl.set("#scdot", { opacity: 1 }, Math.min(NZ + 0.39, ENDC)); + tl.set("#scdot", { opacity: 0.45 }, Math.min(NZ + 0.465, ENDC)); + tl.set("#scdot", { opacity: 1 }, Math.min(NZ + 0.49, ENDC)); + // SIGNAL LOST stamp (2-frame flicker in; clamped ≤ DUR−0.02) + tl.set("#scsiglost", { opacity: 1 }, Math.min(NZ + 0.43, ENDC - 2 * F)); + tl.set("#scsiglost", { opacity: 0.35 }, Math.min(NZ + 0.43 + F, ENDC - F)); + tl.set("#scsiglost", { opacity: 1 }, Math.min(NZ + 0.43 + 2 * F, ENDC));`; + return { css, html, js }; +} + +function paradigmPaperrail() { + // PAPERRAIL: stop-motion craft table — a kraft strip (torn top edge, washi- + // taped corners, handwritten tag) holds cream paper chips that are PLACED + // one by one: opacity full in 0 frames, y −16 + scale 1.06→1 with steps(2), + // seeded ±2.5° crooked = the papermat drop at low amplitude. The strip + // jitters ±0.7px every 4 frames (handmade weave); chips hold a rotation-only + // ~5fps wobble. Emphasis words get a washi-tape slap (chip pressed 1 frame); + // the FINAL word is an accent chip (sign-off); the hero slot keeps a red + // paper star (rail↔climax hand-off) that pulses as the apex chips land. + // Exits: chips peeled off (rotation −8°, y −40, steps(3)), staggered. + const b = dna.body; + const stripW = (b.strip && b.strip.w) || 1140; + const stripH = (b.strip && b.strip.h) || 88; + const SX = (b.strip && b.strip.x) ?? Math.round((W - stripW) / 2); + const ST = H - ((b.strip && b.strip.bottomPx) ?? 26) - stripH; + const k = (b.fontPx || 38) / 38; // chip furniture scales with the type + const r = (v) => Math.round(v * k); + const tapeDelay = b.tapeDelay ?? 0.25; + // hero hand-off slot: the line whose window holds the apex keeps a star chip + const heroLi = heroInline ? -1 : LINES.findIndex((L) => heroIn >= L.in - 0.01 && heroIn < L.out); + const lineData = LINES.map((L, li) => { + const n = L.words.length + (li === heroLi ? 1 : 0); + // peel (0.18s + stagger) always completes on frame; demo cadence L.out−0.04 + const xo = +( + li === LINES.length - 1 ? Math.min(L.out - 0.04, DUR - 0.2 - (n - 1) * 0.03) : L.out - 0.04 + ).toFixed(3); + const words = L.words.map((w, wi) => { + const isLast = li === LINES.length - 1 && wi === L.words.length - 1; + const kind = isLast ? 3 : w.minor ? 1 : 0; // 0 chip / 1 taped / 2 star / 3 accent + let tapeT = 0; + if (kind === 1) { + const tt = +Math.min(w.start + tapeDelay, xo - 0.2).toFixed(3); + if (tt >= w.start + 0.08) tapeT = tt; + } + return [w.display, +w.start.toFixed(3), kind, tapeT]; + }); + if (li === heroLi) { + const at = L.words.filter((w) => w.start < heroIn).length; + words.splice(at, 0, ["*", +heroIn.toFixed(3), 2, 0]); + } + return { id: "pl" + L.id, in: +L.in.toFixed(3), xo, words }; + }); + const css = ` + #pstrip { position:absolute; left:${SX}px; top:${ST}px; width:${stripW}px; height:${stripH}px; opacity:0; } + #pstrip .paper { position:absolute; inset:0; + background: linear-gradient(180deg, #bd9e6f 0%, #b89968 45%, #a8854f 100%); + box-shadow: inset 0 -4px 0 rgba(90,66,30,0.55); } + .pwt { position:absolute; width:84px; height:24px; opacity:0.62; background: rgba(255,99,84,0.85); } + .pwt i { position:absolute; inset:0; display:block; + background: repeating-linear-gradient(90deg, rgba(255,255,255,0.22) 0 6px, rgba(255,255,255,0) 6px 13px); } + #pwtL { left:-16px; top:-11px; } #pwtR { right:-14px; top:-9px; } + #ptag { position:absolute; right:30px; top:${stripH - 38}px; font-family:'${dna.fonts.tag}', cursive; + font-size:24px; color:${dna.palette.tag || "#503d20"}; opacity:0.85; white-space:nowrap; } + #plines { position:absolute; inset:0; } + .pline { position:absolute; left:${W / 2}px; top:${ST + 14}px; white-space:nowrap; opacity:0; } + .pchip { position:relative; display:inline-block; margin-right:${r(10)}px; padding:${r(5)}px ${r(14)}px ${r(7)}px; + background:${dna.palette.chip || "#f6edd8"}; border:1px solid ${dna.palette.chipEdge || "#cdb98e"}; border-radius:3px; + box-shadow: 0 3px 0 rgba(58,38,16,0.38); + font-family:'${dna.fonts.body}', sans-serif; font-weight:600; font-size:${b.fontPx}px; line-height:1.15; + color:${dna.palette.body}; opacity:0; } + .pchip.red { background:${dna.palette.accent}; border-color:${dna.palette.accentEdge || "#c93527"}; color:#fff3e4; } + .ptape { position:absolute; top:-10px; right:-15px; width:${r(58)}px; height:${r(18)}px; opacity:0; + background: rgba(255,79,63,0.66); } + .ptape i { position:absolute; inset:0; display:block; + background: repeating-linear-gradient(90deg, rgba(255,255,255,0.25) 0 5px, rgba(255,255,255,0) 5px 11px); } + .pstarw { position:relative; display:inline-block; width:${r(46)}px; height:${r(44)}px; + margin-right:${r(10)}px; vertical-align:${-r(7)}px; opacity:0; } + .pstar { position:absolute; inset:0; background:${dna.palette.accent}; + clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%); + filter: drop-shadow(0 3px 0 rgba(58,38,16,0.38)); }`; + const html = `
+
+
+
+
${esc(b.tag || "cut & paste · 12 fps")}
+
+
+${lineData.map((L) => `
`).join("\n")} +
`; + const dimT = +Math.max(0.15, heroIn - ((b.yield && b.yield.pre) || 0.2)).toFixed(3); + const resT = +(heroIn + ((b.yield && b.yield.post) || 0.9)).toFixed(3); + const js = ` + // ---- body paradigm: PAPERRAIL (chips placed steps(2) / peel-off exit) ---- + const RAILP = ${J(lineData)}; + const rrnd = mulberry32(${b.seed || 150372}); + // torn top edge on the kraft strip (sides/bottom are the table cut) + (function(){ + const pts = []; const SEG = 28; + for (let i = 0; i <= SEG; i++) + pts.push(((${stripW}/SEG)*i).toFixed(1) + "px " + Math.max(0, (rrnd()-0.5)*8 + 4).toFixed(1) + "px"); + pts.push("${stripW}px ${stripH}px", "0px ${stripH}px"); + document.querySelector("#pstrip .paper").style.clipPath = "polygon(" + pts.join(",") + ")"; + })(); + gsap.set("#pwtL", { rotation: -38 }); + gsap.set("#pwtR", { rotation: 33 }); + gsap.set("#ptag", { rotation: -2 }); + + // ===== STRIP: placed on the table, then handmade jitter every 4 frames ===== + tl.set("#pstrip", { opacity: 1 }, 0.10); + tl.fromTo("#pstrip", { y: ${stripH + 26} }, { y: 0, duration: 0.18, ease: "steps(3)" }, 0.10); + for (let t = 0.45; t < ${(DUR - 0.06).toFixed(3)}; t += 1/6) + tl.set("#pstrip", { x: (rrnd()-0.5)*1.4, y: (rrnd()-0.5)*1.4, rotation: (rrnd()-0.5)*0.36 }, t); +${ + b.yield && !heroInline + ? ` + // rail yields while the apex chips land (furniture never contests the hero) + tl.to(["#pstrip", "#plines"], { opacity: ${b.yield.dim}, duration: 0.10 }, ${dimT}); +${resT + 0.3 < DUR ? ` tl.to(["#pstrip", "#plines"], { opacity: 1, duration: 0.22 }, ${resT});` : ""}` + : "" +} + + // ===== BODY: paper chips placed one by one ===== + RAILP.forEach((L) => { + const line = document.getElementById(L.id); + gsap.set(line, { xPercent: -50 }); + tl.set(line, { opacity: 1 }, L.in); + L.words.forEach(([txt, st, kind, tapeT], wi) => { + let el; + if (kind === 2) { // apex hand-off: red paper star in the slot + el = document.createElement("span"); el.className = "pstarw"; + const s = document.createElement("span"); s.className = "pstar"; + el.appendChild(s); line.appendChild(el); + // placement pulse when the apex word starts landing + tl.set(s, { scale: 1.18 }, st + 0.09); + tl.set(s, { scale: 1.06 }, st + 0.17); + tl.set(s, { scale: 1 }, st + 0.25); + } else { + el = document.createElement("span"); + el.className = "pchip" + (kind === 3 ? " red" : ""); + el.textContent = txt; + line.appendChild(el); + } + const r0 = (rrnd()-0.5)*5; // seeded ±2.5° crooked placement + gsap.set(el, { transformOrigin: "50% 80%" }); + // PLACED: the apex drop at low amplitude — opacity full in 0 frames + tl.set(el, { opacity: 1, rotation: r0 }, st); + tl.fromTo(el, { y: -16, scale: 1.06 }, { y: 0, scale: 1, duration: 0.12, ease: "steps(2)" }, st); + // handmade hold wobble (rotation only, ~5fps) + for (let t = st + 0.40; t < L.xo - 0.06; t += 0.21) + tl.set(el, { rotation: r0 + (rrnd()-0.5)*1.0 }, t); + // washi-tape slap pins the emphasis words + if (kind === 1 && tapeT > 0) { + const tape = document.createElement("span"); tape.className = "ptape"; + const ti = document.createElement("i"); tape.appendChild(ti); + el.appendChild(tape); + gsap.set(tape, { rotation: -36 }); + tl.set(tape, { opacity: 0.92 }, tapeT); + tl.fromTo(tape, { scale: 1.7 }, { scale: 1, duration: 0.0833, ease: "steps(2)" }, tapeT); + tl.set(el, { y: 2 }, tapeT); // chip pressed by the slap + tl.set(el, { y: 0 }, tapeT + 0.0833); + } + // EXIT: peeled off + tl.to(el, { rotation: r0 - 8, y: -40, opacity: 0, duration: 0.18, ease: "steps(3)" }, + L.xo + wi*0.03); + }); + });`; + return { css, html, js }; +} + +function paradigmPopuprail() { + // POPUPRAIL: pop-up book page — a cream page strip (center foldline) unfolds + // up from the bottom edge (scaleY back.out, the stage is built); words POP + // UP on a baseline hinge (rotationX 85→0, back.out = the centerfold motif at + // low amplitude) on two reading rows that alternate per line. Emphasis words + // land bigger with a contact squash the strip FEELS (1px dip), then flick- + // wobble; blue paper struts lean in behind emphasis + the sign-off word; the + // hero slot keeps a blue paper star (rail↔climax hand-off). Exits fold flat + // in an L→R wave (the page closing); on the final word the whole page TILTS + // (paper physics) and the strip itself folds shut on the last frame. + const b = dna.body; + const stripW = (b.strip && b.strip.w) || 1230; + const stripH = (b.strip && b.strip.h) || 124; + const rowY = { A: H - (b.rowA ?? 70), B: H - (b.rowB ?? 20) }; + const k = (b.fontPx || 42) / 42; // chip furniture scales with the type + const r = (v) => Math.round(v * k); + const emPx = b.emPx || Math.round((b.fontPx || 42) * 1.24); + const maxHold = b.maxHold ?? 0.95; + // hero hand-off slot: the line whose window holds the apex keeps a star chip + const heroLi = heroInline ? -1 : LINES.findIndex((L) => heroIn >= L.in - 0.01 && heroIn < L.out); + const lineData = LINES.map((L, li) => { + const lastSt = L.words[L.words.length - 1].start; + const n = L.words.length + (li === heroLi ? 1 : 0); + // fold as the next line begins, or after maxHold in silence; the fold wave + // + slot hide always complete by DUR−0.017 (demo cadence: L4 folds 5.76) + const foldT = +Math.min(L.out, lastSt + maxHold, DUR - 0.147 - 0.045 * (n - 1)).toFixed(3); + const words = L.words.map((w, wi) => { + const isLast = li === LINES.length - 1 && wi === L.words.length - 1; + const kind = isLast ? 2 : w.minor ? 1 : 0; // 0 plain | 1 emph | 2 emph-blue | 3 star + let wobT = 0, + wobD = 0, + strutT = 0; + if (kind === 1) { + // paper-flick after landing, squeezed to fit before the fold + const wt = +(w.start + 0.2).toFixed(3); + const wd = +Math.min(0.5, foldT - wt - 0.04).toFixed(2); + if (wd >= 0.15) { + wobT = wt; + wobD = wd; + } + } + if (kind >= 1) { + const st2 = +Math.min(w.start + (kind === 2 ? 0.15 : 0.26), foldT - 0.1).toFixed(3); + if (st2 >= w.start + 0.08) strutT = st2; + } + return [w.display, +w.start.toFixed(3), kind, wobT, wobD, strutT]; + }); + if (li === heroLi) { + const at = L.words.filter((w) => w.start < heroIn).length; + words.splice(at, 0, ["*", +heroIn.toFixed(3), 3, 0, 0, 0]); + } + return { id: "pu" + L.id, row: li % 2 === 0 ? "A" : "B", foldT, words }; + }); + const css = ` + #pupage { position:absolute; inset:0; } + #pustrip { position:absolute; left:${W / 2}px; top:${H}px; width:${stripW}px; height:${stripH}px; + opacity:0; border-radius:4px 4px 0 0; + background: linear-gradient(180deg, ${dna.palette.page || "#f7eed8"} 0%, ${dna.palette.page2 || "#f0e4c8"} 55%, ${dna.palette.page3 || "#e7d8b4"} 100%); + border-top: 2px solid ${dna.palette.pageEdge || "rgba(122,96,54,0.55)"}; + box-shadow: 0 -12px 26px rgba(18,12,5,0.38), inset 0 14px 18px rgba(255,255,248,0.5); } + #pufold { position:absolute; left:50%; top:0; bottom:0; width:3px; margin-left:-1px; + background: linear-gradient(90deg, rgba(120,95,55,0) 0%, rgba(120,95,55,0.30) 50%, rgba(255,252,240,0.5) 100%); } + .puline { position:absolute; left:${W / 2}px; white-space:nowrap; } + .puslot { display:inline-block; position:relative; margin-right:0.34em; vertical-align:baseline; } + .puw { display:inline-block; position:relative; z-index:1; opacity:0; + font-family:'${dna.fonts.body}', sans-serif; font-weight:600; font-size:${b.fontPx}px; + line-height:1.04; color:${dna.palette.body}; } + .puw.em { font-size:${emPx}px; font-weight:800; } + .puw.blue { color:${dna.palette.blue || dna.palette.accent}; } + .puw.star { width:${r(30)}px; height:${r(30)}px; background:${dna.palette.accent}; vertical-align:${-r(2)}px; + filter: drop-shadow(0 2px 2px rgba(60,40,15,0.35)); + clip-path: polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%); } + .pustrut { position:absolute; right:-8px; bottom:0; width:${r(19)}px; height:${r(16)}px; + background: linear-gradient(180deg,${dna.palette.strut1 || "#4f93c4"} 0%, ${dna.palette.strut2 || dna.palette.accent} 70%); + clip-path: polygon(0 100%, 100% 100%, 100% 0); opacity:0; z-index:0; }`; + const html = `
+
+${lineData.map((L) => `
`).join("\n")} +
`; + const js = ` + // ---- body paradigm: POPUPRAIL (baseline-hinge pop-ups / fold-flat exit) ---- + const RAILU = ${J(lineData)}; + const ROWY = ${J(rowY)}; + + // ===== PAGE STRIP: unfolds up from the bottom edge (the stage is built) ===== + gsap.set("#pustrip", { xPercent: -50, yPercent: -100, transformOrigin: "50% 100%", scaleY: 0.02 }); + tl.set("#pustrip", { opacity: 1 }, 0.14); + tl.to("#pustrip", { scaleY: 1, duration: 0.24, ease: "back.out(1.5)" }, 0.14); + // hold life: the whole page breathes very gently + tl.to("#pupage", { keyframes: { y: [0, -1.6, -0.4, -1.4, 0] }, + duration: ${Math.min(5.3, DUR - 0.75).toFixed(2)}, ease: "sine.inOut" }, 0.40); + + // ===== BODY: words pop up on the baseline hinge ===== + RAILU.forEach((L) => { + const line = document.getElementById(L.id); + line.style.top = ROWY[L.row] + "px"; + const els = L.words.map(([txt, st, kind]) => { + const slot = document.createElement("span"); slot.className = "puslot"; + let strut = null; + if (kind === 1 || kind === 2) { + strut = document.createElement("div"); strut.className = "pustrut"; + slot.appendChild(strut); + } + const w = document.createElement("span"); + w.className = "puw" + (kind === 1 ? " em" : kind === 2 ? " em blue" : kind === 3 ? " star" : ""); + if (kind !== 3) w.textContent = txt; + slot.appendChild(w); + line.appendChild(slot); + return { w, strut, slot }; + }); + gsap.set(line, { xPercent: -50, yPercent: -100 }); + + L.words.forEach(([txt, st, kind, wobT, wobD, strutT], wi) => { + const { w, strut, slot } = els[wi]; + gsap.set(w, { transformPerspective: 650, transformOrigin: "50% 100%", rotationX: 85 }); + // POP UP — baseline hinge, paper overshoot; back-shadow grows as it rises + tl.set(w, { opacity: 1, textShadow: "0 0px 0px rgba(70,50,25,0)" }, st); + tl.to(w, { rotationX: 0, duration: 0.25, ease: "back.out(1.4)" }, st); + tl.to(w, { textShadow: "0 3px 5px rgba(70,50,25,0.38)", duration: 0.25, ease: "power1.out" }, st); + if (kind === 1 || kind === 2) { // contact squash on the big words + tl.set(w, { scaleX: 1.06, scaleY: 0.93 }, st + 0.12); + tl.to(w, { scaleX: 1, scaleY: 1, duration: 0.30, ease: "elastic.out(1, 0.4)" }, st + 0.16); + tl.set("#pustrip", { y: 1 }, st + 0.13); // the page feels the landing + tl.to("#pustrip", { y: 0, duration: 0.16, ease: "power2.out" }, st + 0.18); + } + if (wobT) tl.to(w, { keyframes: { rotationX: [0, -4, 2.8, -1.4, 0.5, 0] }, + duration: wobD, ease: "sine.inOut" }, wobT); + if (strut && strutT) { // visible paper strut leans in behind + gsap.set(strut, { transformOrigin: "50% 100%", scaleY: 0 }); + tl.set(strut, { opacity: 1 }, strutT); + tl.to(strut, { scaleY: 1, duration: 0.12, ease: "back.out(2)" }, strutT); + } + // EXIT — the page closes: words fold flat in an L→R wave + const ft = L.foldT + wi * 0.045; + tl.to(w, { rotationX: 88, duration: 0.12, ease: "power2.in" }, ft); + tl.to(w, { textShadow: "0 0px 0px rgba(70,50,25,0)", duration: 0.12 }, ft); + if (strut) tl.to(strut, { scaleY: 0, duration: 0.10, ease: "power2.in" }, ft); + tl.set(slot, { opacity: 0 }, ft + 0.13); + }); + }); +${ + b.yield && !heroInline + ? ` + // APEX OWNS ITS WINDOW — page yields while the centerfold lands, restores + tl.to("#pupage", { opacity: ${b.yield.dim}, duration: 0.12, ease: "power1.out" }, ${(heroIn - (b.yield.pre || 0.03)).toFixed(3)}); + tl.to("#pupage", { opacity: 1, duration: 0.22, ease: "power1.in" }, ${(heroIn + (b.yield.post || 0.47)).toFixed(3)});` + : "" +} +${ + b.tilt !== false + ? ` + // paper-world physics: on the final word the whole page TILTS and slides + tl.to("#pupage", { rotation: 2, x: 6, transformOrigin: "50% 100%", + duration: 0.26, ease: "back.out(2.2)" }, ${(LASTWORD.start + 0.02).toFixed(3)});` + : "" +} + // ending: after the last fold the strip itself closes (book shut) + tl.to("#pustrip", { scaleY: 0.03, duration: 0.07, ease: "power3.in" }, ${(DUR - 0.082).toFixed(3)}); + tl.set("#pustrip", { opacity: 0 }, ${(DUR - 0.017).toFixed(3)});`; + return { css, html, js }; +} + +function paradigmChalkrail() { + // CHALKRAIL: night-lecture chalk band — a deep-green board strip (worn top + // hairline, eraser smudges, handwritten header tag, two chalk sticks) docked + // at the bottom edge holds reading rows that ACCUMULATE: lines fill the rows + // top→bottom in phases of rows.length; when the next phase needs the rows an + // ERASER SWIPE clears the board (a blurred light band sweeps across, the + // words SMEAR out scaleX 1.3 + blur(8), faint ghost smudges stay — chalk + // never fully erases). Words are chalk-written fast: 2-frame pop + scribble + // clip-reveal steps(4) + 6 seeded dust specks puffing at the base + seeded + // ±2° tilt = the chalkwrite verb at low amplitude. Emphasis = double + // underline dashes drawn beneath; the FINAL transcript word lands in yellow + // chalk (sign-off). Band yields during the apex landing, restores after. + const b = dna.body; + const stripW = (b.strip && b.strip.w) || 1200; + const stripH = (b.strip && b.strip.h) || 148; + const SX = (b.strip && b.strip.x) ?? Math.round((W - stripW) / 2); + const ST = H - ((b.strip && b.strip.bottomPx) ?? 0) - stripH; + const rows = b.rows || [26, 82]; + const R = rows.length; + const kw = stripW / 1200, + kh = stripH / 148; // furniture scales with the strip (demo 1200×148) + const lineData = LINES.map((L, li) => ({ + id: "cl" + L.id, + top: rows[li % R], + words: L.words.map((w, wi) => [ + w.display, + +w.start.toFixed(3), + w.minor ? 1 : 0, + li === LINES.length - 1 && wi === L.words.length - 1 ? 1 : 0, // yellow sign-off + ]), + })); + // eraser passes: one per phase boundary — swipe after the previous phase's + // last word ends, always landing clear of the next phase's first word + const erases = []; + for (let pi = R; pi < LINES.length; pi += R) { + const prevEnd = Math.max( + ...LINES.slice(pi - R, pi).map((L) => L.words[L.words.length - 1].end), + ); + const nextIn = LINES[pi].in; + const t = +Math.max( + prevEnd + 0.05, + Math.min(prevEnd + (b.eraseDelay ?? 0.23), nextIn - 0.9), + ).toFixed(3); + erases.push({ t, lines: lineData.slice(pi - R, pi).map((L) => L.id) }); + } + const css = ` + #cband { position:absolute; left:${SX}px; top:${ST}px; width:${stripW}px; height:${stripH}px; opacity:0; + background: linear-gradient(180deg, ${dna.palette.bandHi || "#23392d"} 0%, ${dna.palette.board || "#1d3328"} 45%, ${dna.palette.bandLo || "#16271f"} 100%); + border-radius:8px 8px 0 0; + box-shadow: inset 0 0 70px rgba(0,0,0,0.5), inset 0 14px 18px -12px rgba(0,0,0,0.6), + 0 -3px 18px rgba(0,0,0,0.35); } + #cband .hairline { position:absolute; top:0; left:0; right:0; height:1px; + background: rgba(240,245,235,0.14); } + #cband .smg { position:absolute; border-radius:50%; } + #csmg1 { left:${Math.round(520 * kw)}px; top:${Math.round(14 * kh)}px; width:${Math.round(300 * kw)}px; height:${Math.round(90 * kh)}px; transform:rotate(-4deg); + background: radial-gradient(50% 50% at 50% 50%, rgba(220,230,220,0.07) 0%, rgba(220,230,220,0) 70%); } + #csmg2 { left:${Math.round(880 * kw)}px; top:${Math.round(60 * kh)}px; width:${Math.round(260 * kw)}px; height:${Math.round(74 * kh)}px; transform:rotate(5deg); + background: radial-gradient(50% 50% at 50% 50%, rgba(220,230,220,0.06) 0%, rgba(220,230,220,0) 70%); } + #chdr { position:absolute; top:5px; left:28px; font-family:'${dna.fonts.tag || dna.fonts.body}', cursive; + font-size:23px; letter-spacing:1.5px; color:rgba(238,244,236,0.5); opacity:0; } + #cstickW { position:absolute; right:30px; bottom:12px; width:52px; height:9px; border-radius:4px; + background: linear-gradient(180deg, #f4f1e4 0%, #d9d4c2 100%); + transform: rotate(9deg); box-shadow: 0 2px 3px rgba(0,0,0,0.4); opacity:0; } + #cstickY { position:absolute; right:96px; bottom:11px; width:27px; height:8px; border-radius:4px; + background: linear-gradient(180deg, #efd680 0%, #d8ba55 100%); + transform: rotate(-5deg); box-shadow: 0 2px 3px rgba(0,0,0,0.4); opacity:0; } + .crow { position:absolute; left:30px; white-space:nowrap; + font-family:'${dna.fonts.body}', cursive; font-size:${b.fontPx}px; line-height:1.0; color:${dna.palette.body}; + text-shadow: ${b.glow || "0 0 7px rgba(250,250,240,0.28), 0 1px 0 rgba(255,255,255,0.10)"}; } + .crow .w { display:inline-block; position:relative; margin-right:0.35em; opacity:0; } + .crow .w .txt { display:inline-block; } + .crow .w.yel { color:${dna.palette.em || "#f3d96b"}; text-shadow: 0 0 8px ${(dna.palette.em || "#f3d96b") + "52"}, 0 1px 0 rgba(255,255,255,0.08); } + .crow .w .d { position:absolute; bottom:2px; width:3px; height:3px; border-radius:50%; + background:${dna.palette.dust || "#f1efe2"}; opacity:0; pointer-events:none; } + .crow .w svg.ul { position:absolute; left:2%; bottom:-8px; width:96%; height:18px; overflow:visible; } + .cghost { position:absolute; border-radius:50%; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, rgba(240,244,238,0.10) 0%, rgba(240,244,238,0) 70%); } + #cgh1 { left:${Math.round(110 * kw)}px; top:${Math.round(24 * kh)}px; width:${Math.round(430 * kw)}px; height:${Math.round(62 * kh)}px; } + #cgh2 { left:${Math.round(80 * kw)}px; top:${Math.round(80 * kh)}px; width:${Math.round(360 * kw)}px; height:${Math.round(56 * kh)}px; } + #ceraser { position:absolute; top:-8px; left:0; width:120px; height:${stripH + 16}px; opacity:0; + background: linear-gradient(100deg, rgba(236,242,236,0) 0%, rgba(236,242,236,0.30) 45%, rgba(236,242,236,0) 100%); + filter: blur(5px); }`; + const html = `
+
+
+
+
${esc(b.tag || "NIGHT LECTURE · wk 07")}
+
+
+${lineData.map((L) => `
`).join("\n")} +
+
+
+
`; + const js = ` + // ---- body paradigm: CHALKRAIL (chalk scribble pop / eraser-swipe phases) ---- + const RAILC = ${J(lineData)}; + const ERASES = ${J(erases)}; + const rrnd = mulberry32(${b.seed || 13}); + const SVGNS = "http://www.w3.org/2000/svg"; + + // ===== band furniture ===== + tl.fromTo("#cband", { opacity: 0, y: 26 }, { opacity: 1, y: 0, duration: 0.22, ease: "power2.out" }, 0.03); + tl.fromTo("#chdr", { opacity: 0 }, { opacity: 1, duration: 0.25 }, 0.30); + tl.fromTo("#cstickW", { opacity: 0 }, { opacity: 0.92, duration: 0.2 }, 0.36); + tl.fromTo("#cstickY", { opacity: 0 }, { opacity: 0.92, duration: 0.2 }, 0.42); + + // ===== body words: chalk-dust pop (entrance = the apex motif, low amplitude) ===== + RAILC.forEach((L) => { + const line = document.getElementById(L.id); + L.words.forEach(([txt, st, em, yel]) => { + const w = document.createElement("span"); w.className = "w" + (yel ? " yel" : ""); + const inner = document.createElement("span"); inner.className = "txt"; inner.textContent = txt; + w.appendChild(inner); line.appendChild(w); + gsap.set(w, { rotation: (rrnd() * 4 - 2), transformOrigin: "50% 100%" }); + gsap.set(inner, { clipPath: "inset(-30% 102% -30% -2%)" }); + // 2-frame pop + fast scribble reveal + tiny drop-settle + tl.fromTo(w, { opacity: 0 }, { opacity: 1, duration: 0.07, ease: "power1.in" }, st); + tl.to(inner, { clipPath: "inset(-30% -2% -30% -2%)", duration: 0.12, ease: "steps(4)" }, st); + tl.fromTo(w, { y: 4 }, { y: 0, duration: 0.2, ease: "power2.out" }, st); + // 6 seeded dust specks puff at the word base + for (let k = 0; k < 6; k++) { + const d = document.createElement("span"); d.className = "d"; + d.style.left = (6 + rrnd() * 84) + "%"; + w.appendChild(d); + tl.set(d, { opacity: 0.85 }, st + 0.02); + tl.to(d, { y: 12 + rrnd() * 16, x: rrnd() * 16 - 8, opacity: 0, + duration: 0.36 + rrnd() * 0.15, ease: "power1.in" }, st + 0.02); + } + // emphasis: double underline dashes drawn beneath + if (em) { + const svg = document.createElementNS(SVGNS, "svg"); + svg.setAttribute("class", "ul"); svg.setAttribute("viewBox", "0 0 100 18"); + svg.setAttribute("preserveAspectRatio", "none"); + const col = yel ? ${J(dna.palette.em || "#f3d96b")} : ${J(dna.palette.body)}; + [["M 3 5 C 28 2, 66 8, 97 4", Math.min(st + 0.22, ${(DUR - 0.3).toFixed(3)}), 0.12], + ["M 6 12 C 36 9, 62 15, 95 11", Math.min(st + 0.38, ${(DUR - 0.2).toFixed(3)}), 0.10]].forEach(([dd, tu, du]) => { + const p = document.createElementNS(SVGNS, "path"); + p.setAttribute("d", dd); p.setAttribute("fill", "none"); + p.setAttribute("stroke", col); p.setAttribute("stroke-width", "3"); + p.setAttribute("stroke-linecap", "round"); + p.setAttribute("vector-effect", "non-scaling-stroke"); + p.setAttribute("opacity", "0"); + svg.appendChild(p); + const len = p.getTotalLength(); + gsap.set(p, { strokeDasharray: len, strokeDashoffset: len }); + tl.set(p, { opacity: 0.9 }, tu); + tl.to(p, { strokeDashoffset: 0, duration: du, ease: "power2.in" }, tu); + }); + w.appendChild(svg); + } + }); + }); + + // ===== ERASER SWIPE between phases: light band sweeps, old words smear out ===== + ERASES.forEach((E, ei) => { + tl.set("#ceraser", { opacity: 1, x: -160 }, E.t); + tl.to("#ceraser", { x: ${stripW + 60}, duration: 0.42, ease: "power1.inOut" }, E.t); + tl.set("#ceraser", { opacity: 0 }, E.t + 0.44); + E.lines.forEach((id, r) => { + const kids = document.getElementById(id).children; + for (let i = 0; i < kids.length; i++) + tl.to(kids[i], { scaleX: 1.3, x: "+=24", opacity: 0, filter: "blur(8px)", + transformOrigin: "0% 80%", duration: 0.18, ease: "power2.in" }, + E.t + 0.03 + r * 0.01 + i * 0.06); + }); + // faint smudges the eraser leaves behind (stay) + if (ei === 0) { + tl.fromTo("#cgh1", { opacity: 0 }, { opacity: 0.8, duration: 0.25 }, E.t + 0.17); + tl.fromTo("#cgh2", { opacity: 0 }, { opacity: 0.8, duration: 0.25 }, E.t + 0.27); + } + }); +${ + b.yield && !heroInline + ? ` + // APEX OWNS ITS WINDOW — band yields while the chalk word writes, restores + tl.to("#cband", { opacity: ${b.yield.dim}, duration: 0.14, ease: "power1.in" }, ${(heroIn - (b.yield.pre || 0.07)).toFixed(3)}); +${ + heroIn + (b.yield.post || 0.41) < DUR - 0.3 + ? ` tl.to("#cband", { opacity: 1, duration: 0.22, ease: "power1.out" }, ${(heroIn + (b.yield.post || 0.41)).toFixed(3)});` + : "" +}` + : "" +}`; + return { css, html, js }; +} + +function paradigmMarkerrail() { + // MARKERRAIL: street handstyle rail — marker words FLICK onto a stable + // bottom rail (opacity full in 1 frame + 1-frame squeak skew, seeded crooked + // rotation settling back.out — the spray-write verb at low amplitude); + // emphasis words take an alternating paint color (`palette.em`/`em2`) + a + // spray-underline SWOOSH (dash-revealed squiggle) with 8 seeded overspray + // dots; the FINAL transcript word lands BIG in `palette.em` with mini + // apex-impact physics (crush → squash → elastic — it rides the plate punch). + // Spent lines are ROLLER-BUFFED: a gray paint roller sweeps across, the + // words vanish under it and the wet smear lingers before fading; the last + // line is never buffed (the sign-off stays painted). Rail yields while the + // apex tag writes. + const b = dna.body; + const EMS = [ + dna.palette.em || dna.palette.accent, + dna.palette.em2 || dna.palette.em || dna.palette.accent, + ]; + let emIdx = 0; + const lineData = LINES.map((L, li) => ({ + id: "mr" + L.id, + in: +L.in.toFixed(3), + out: +L.out.toFixed(3), + last: li === LINES.length - 1 ? 1 : 0, + words: L.words.map((w, wi) => { + const signoff = li === LINES.length - 1 && wi === L.words.length - 1; + return [ + w.display, + +w.start.toFixed(3), + signoff ? EMS[0] : w.minor ? EMS[emIdx++ % EMS.length] : 0, + signoff ? 1 : 0, + ]; + }), + })); + const css = ` + .mline { position:absolute; left:${W / 2}px; top:${H - b.bottomPx}px; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.body}', cursive; font-size:${b.fontPx}px; line-height:1.25; + color:${dna.palette.body}; + text-shadow: ${b.glow || "0 3px 12px rgba(0,0,0,0.72), 0 1px 3px rgba(0,0,0,0.6)"}; } + .mline .w { display:inline-block; opacity:0; margin-right:0.32em; position:relative; } + .mline .w:last-child { margin-right:0; } + .mroller { position:absolute; left:-14px; top:-8px; right:-14px; bottom:-8px; opacity:0; + background: linear-gradient(180deg, ${dna.palette.rollerHi || "#8d8a86"} 0%, ${dna.palette.rollerLo || "#6f6c69"} 45%, ${dna.palette.roller || "#807d79"} 100%); + border-radius:5px; } + .muline { position:absolute; left:-8%; top:100%; width:116%; height:26px; margin-top:-8px; + overflow:visible; } + .modot { position:absolute; width:5px; height:5px; border-radius:50%; opacity:0; }`; + const html = lineData.map((L) => `
`).join("\n"); + const js = ` + // ---- body paradigm: MARKERRAIL (marker flick in / roller buff out) ---- + const RAILM = ${J(lineData)}; + const DURM = ${(DUR - 0.02).toFixed(3)}; + const mrnd = mulberry32(${b.seed || 20260611}); + const SVGNSM = "http://www.w3.org/2000/svg"; + function mUnderline(span, color, t0) { + // spray underline swoosh: dash-revealed squiggle + seeded overspray dots + const svg = document.createElementNS(SVGNSM, "svg"); + svg.setAttribute("class", "muline"); + svg.setAttribute("viewBox", "0 0 120 26"); + svg.setAttribute("preserveAspectRatio", "none"); + const path = document.createElementNS(SVGNSM, "path"); + path.setAttribute("d", "M 5 13 C 28 20, 52 6, 78 12 S 108 16, 115 10"); + path.setAttribute("fill", "none"); path.setAttribute("stroke", color); + path.setAttribute("stroke-width", "8"); path.setAttribute("stroke-linecap", "round"); + path.setAttribute("opacity", "0"); + svg.appendChild(path); span.appendChild(svg); + const len = path.getTotalLength(); + gsap.set(path, { strokeDasharray: len, strokeDashoffset: len }); + tl.set(path, { opacity: 0.95 }, t0); + tl.to(path, { strokeDashoffset: 0, duration: 0.2, ease: "power2.out" }, t0); + for (let i = 0; i < 8; i++) { + const d = document.createElement("div"); + d.className = "modot"; d.style.background = color; span.appendChild(d); + const s = 3 + Math.round(mrnd() * 3); + gsap.set(d, { width: s, height: s, left: (4 + mrnd() * 92) + "%", + bottom: -(2 + mrnd() * 18) }); + const td = t0 + 0.03 + mrnd() * 0.15; + tl.set(d, { opacity: 0.9, scale: 0.4 }, td); + tl.to(d, { scale: 1.25, duration: 0.12, ease: "power2.out" }, td); + tl.to(d, { opacity: 0, duration: 0.3, ease: "power1.in" }, td + 0.12); + } + } + RAILM.forEach((L) => { + const line = document.getElementById(L.id); + const txt = document.createElement("div"); + txt.style.position = "relative"; line.appendChild(txt); + const roller = document.createElement("div"); + roller.className = "mroller"; line.appendChild(roller); + gsap.set(roller, { scaleX: 0, transformOrigin: "0% 50%" }); + L.words.forEach(([w]) => { + const s = document.createElement("span"); + s.className = "w"; s.textContent = w; txt.appendChild(s); + }); + gsap.set(line, { xPercent: -50, yPercent: -100 }); + tl.set(line, { opacity: 1 }, L.words[0][1] - 0.02); + L.words.forEach(([w, st, em, big], wi) => { + const el = txt.children[wi]; + const rot0 = (mrnd() - 0.5) * 12, rotF = (mrnd() - 0.5) * 4; + // FLICK IN: opacity full in 1 frame, squeak skew for 1 frame, back.out settle + tl.set(el, { opacity: 1, scale: big ? 1.5 : 1.18, rotation: rot0, skewX: 7, + color: em || ${J(dna.palette.body)}, transformOrigin: "50% 88%" }, st); + tl.set(el, { skewX: 0 }, st + F); + if (big) { // sign-off lands with the plate punch — mini apex-impact physics + tl.to(el, { scale: 1, duration: 0.09, ease: "power3.in" }, st + F); + tl.set(el, { scaleX: 1.1, scaleY: 0.9 }, st + F + 0.09); + tl.to(el, { scaleX: 1, scaleY: 1, duration: 0.26, ease: "elastic.out(1, 0.4)" }, st + F + 0.09 + 2 * F); + tl.to(el, { rotation: rotF, duration: 0.2, ease: "power2.out" }, st + F); + } else { + tl.to(el, { scale: 1, rotation: rotF, duration: 0.18, ease: "back.out(2.2)" }, st + F); + } + if (em && !big) mUnderline(el, em, Math.min(st + 0.22, ${(DUR - 0.5).toFixed(3)})); + }); + if (!L.last) { // BUFF EXIT: gray roller sweeps the line, smear lingers + const XO = L.out - 0.15; + tl.set(roller, { opacity: 0.92 }, XO); + tl.fromTo(roller, { scaleX: 0 }, { scaleX: 1, duration: 0.15, ease: "power2.in" }, XO); + tl.set(txt, { opacity: 0 }, XO + 0.15); + tl.to(roller, { opacity: 0.15, filter: "blur(2px)", duration: 0.22, ease: "power1.out" }, XO + 0.17); + tl.to(roller, { opacity: 0, duration: 0.35 }, Math.min(XO + 0.55, DURM - 0.36)); + tl.set(line, { display: "none" }, Math.min(XO + 0.95, DURM)); + } + }); +${ + b.yield && !heroInline + ? ` // APEX OWNS ITS WINDOW — the line visible at the tag's onset yields. + // Restore only with runway before the buff (else the line exits dimmed). + RAILM.forEach((L) => { + if (L.in <= ${heroIn.toFixed(3)} && L.out > ${(heroIn - (b.yield.pre || 0.04)).toFixed(3)}) { + const dimT = Math.max(${(heroIn - (b.yield.pre || 0.04)).toFixed(3)}, L.in + 0.05); + const XO2 = L.out - 0.15; + if (XO2 > dimT + 0.2 || L.last) { + tl.to("#" + L.id, { opacity: ${b.yield.dim}, duration: 0.16 }, dimT); + const resT = ${(heroIn + (b.yield.post || 0.17)).toFixed(3)}; + if (L.last ? resT < DURM - 0.3 : resT + 0.15 < XO2) + tl.to("#" + L.id, { opacity: 1, duration: 0.18 }, resT); + } + } + });` + : "" +}`; + return { css, html, js }; +} + +function paradigmBrushrail() { + // BRUSHRAIL: washi paper band — a deckle-edged paper band (two faintly + // rotated under-sheets + a warm translucent main sheet) swipes in L→R behind + // a traveling brush-head shadow (the ink gesture at low amplitude); body + // words are brush-WIPED on (clip reveal 0.16s behind a per-word brush head) + // on centered replace-lines with seeded ±1° tilt; emphasis words get a + // double curved ink underline drawn beneath (fat wash + tight core); spent + // lines are wiped OFF right-to-left like a wet cloth (the reveal in reverse, + // an erase brush head riding the wipe); the band + the line under the + // gesture yield while the apex lands, and the band exits with the last line + // on one final R→L wipe. + const b = dna.body; + const stripW = (b.strip && b.strip.w) || 820; + const stripH = (b.strip && b.strip.h) || 90; + const SX = (b.strip && b.strip.x) ?? Math.round((W - stripW) / 2); + const ST = H - ((b.strip && b.strip.bottomPx) ?? 61) - stripH; + const CX = SX + Math.round(stripW / 2), + CY = ST + Math.round(stripH / 2); + const lineY = CY - 1; + const maxHold = b.maxHold ?? 0.78; + const lineData = LINES.map((L, li) => { + const lastSt = L.words[L.words.length - 1].start; + // erase: as the next line needs the surface, or after maxHold in silence; + // the LAST line is wiped with the band just before the clip ends + let eraseT, eraseEnd; + if (li === LINES.length - 1) { + eraseT = +(DUR - 0.142).toFixed(3); + eraseEnd = +(DUR - 0.032).toFixed(3); + } else { + eraseT = +Math.max(lastSt + 0.18, Math.min(L.out - 0.136, lastSt + maxHold)).toFixed(3); + eraseEnd = +Math.max(eraseT + 0.06, Math.min(L.out + 0.004, eraseT + 0.14)).toFixed(3); + } + return { + id: "br" + L.id, + eraseT, + eraseEnd, + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + }; + }); + const lastE = lineData[lineData.length - 1].eraseT; + const heroLi = heroInline ? -1 : LINES.findIndex((L) => heroIn >= L.in - 0.01 && heroIn < L.out); + const INKB = dna.palette.body || "#221a12"; // brush-head shadow = the body ink + const breD = Math.min(5.5, DUR - 0.55).toFixed(2); + const breN = Math.max(16, Math.round(breD * 11.6)); + const css = ` + #band { position:absolute; left:${CX}px; top:${CY}px; width:${stripW}px; height:${stripH}px; } + .bandu { position:absolute; inset:0; border-radius:8px; + background: linear-gradient(180deg, ${dna.palette.paperHi || "#efe8d7"} 0%, ${dna.palette.paperLo || "#e7dfcb"} 100%); } + #bandu1 { transform:rotate(-0.7deg) scale(1.012); opacity:0.42; } + #bandu2 { transform:rotate(0.5deg) scaleX(0.99); opacity:0.42; } + #bandmain { position:absolute; inset:0; border-radius:8px; + background: linear-gradient(180deg, ${dna.palette.sheetHi || "#f5efe2"}ed 0%, ${dna.palette.sheetLo || "#ece4d2"}ed 100%); + box-shadow: 0 5px 20px rgba(18,14,10,0.4), inset 0 0 26px rgba(120,98,70,0.18); } + .bandbh { position:absolute; top:-8%; width:30px; height:116%; opacity:0; + background: linear-gradient(90deg, ${dna.palette.bh || "#281e14"}00 0%, ${dna.palette.bh || "#281e14"}80 100%); + filter: blur(7px); } + .bline { position:absolute; left:${CX}px; top:${lineY}px; white-space:nowrap; opacity:0; + font-family:'${dna.fonts.body}', serif; font-weight:${b.weight || 600}; font-size:${b.fontPx}px; + line-height:1; color:${dna.palette.body}; + text-shadow: 0 1px 2px rgba(70,48,26,0.22); } + .bline .cell { display:inline-block; position:relative; margin-right:0.3em; } + .bline .wrap { display:inline-block; position:relative; } + .bline .bh { position:absolute; top:-14%; width:26px; height:128%; opacity:0.55; + background: linear-gradient(90deg, ${INKB}00 0%, ${INKB}8c 100%); + filter: blur(6px); } + .bline svg.ul { position:absolute; left:-3%; bottom:-12px; width:106%; height:14px; + overflow:visible; } + .bline .ebh { position:absolute; top:-18%; width:34px; height:136%; opacity:0; + background: linear-gradient(270deg, ${INKB}00 0%, ${INKB}80 100%); + filter: blur(7px); }`; + const html = `
+
+
+
+
+
+
+${lineData.map((L) => `
`).join("\n")} +
`; + const js = ` + // ---- body paradigm: BRUSHRAIL (brush-wipe reveals / wet-cloth wipe exits) ---- + const RAILB = ${J(lineData)}; + const brnd = mulberry32(${b.seed || 20260611}); + const SVGNSB = "http://www.w3.org/2000/svg"; + const ULD1 = "M 5 8 C 30 11.5, 68 4, 95 7"; + const ULD2 = "M 2 9 C 32 12.5, 66 4.5, 98 7.5"; + + // ===== BAND: swipes in L→R behind a brush head (the gesture, low amplitude) ===== + gsap.set("#band", { xPercent: -50, yPercent: -50, clipPath: "inset(0% 100% 0% 0%)" }); + tl.to("#band", { clipPath: "inset(0% 0% 0% 0%)", duration: 0.2, ease: "power2.out" }, 0.08); + tl.fromTo("#bandbh", { left: -30, opacity: 0.6 }, + { left: "100%", opacity: 0.6, duration: 0.2, ease: "power2.out" }, 0.08); + tl.set("#bandbh", { opacity: 0 }, 0.30); + // paper under light: the deckle under-sheet breathes faintly (baked f(t)) + const bnB = ${breN}, bvB = []; + for (let k = 0; k <= bnB; k++) bvB.push(0.40 + 0.05 * Math.sin(2 * Math.PI * 0.32 * (k / bnB * ${breD}))); + tl.to("#bandu1", { keyframes: { opacity: bvB }, duration: ${breD}, ease: "none" }, 0.3); + + // ===== BODY: words brush-wiped on, lines wiped off like a wet cloth ===== + RAILB.forEach((L) => { + const line = document.getElementById(L.id); + const rot = (brnd() - 0.5) * 2; // seeded ±1° tilt + L.words.forEach(([txt,, em]) => { + const cell = document.createElement("span"); cell.className = "cell"; + const wrap = document.createElement("span"); wrap.className = "wrap"; + const tx = document.createElement("span"); tx.textContent = txt; + const bh = document.createElement("div"); bh.className = "bh"; + wrap.appendChild(tx); wrap.appendChild(bh); cell.appendChild(wrap); + if (em) { // double curved ink underline + const svg = document.createElementNS(SVGNSB, "svg"); + svg.setAttribute("class", "ul"); svg.setAttribute("viewBox", "0 0 100 14"); + svg.setAttribute("preserveAspectRatio", "none"); + const mkp = (d, w, op) => { + const p = document.createElementNS(SVGNSB, "path"); + p.setAttribute("d", d); p.setAttribute("fill", "none"); + p.setAttribute("stroke", ${J(dna.palette.ulInk || dna.palette.body)}); + p.setAttribute("stroke-width", w); + p.setAttribute("stroke-opacity", op); p.setAttribute("stroke-linecap", "round"); + p.setAttribute("opacity", "0"); svg.appendChild(p); return p; + }; + cell._ulFat = mkp(ULD1, 7, 0.3); + cell._ulCore = mkp(ULD2, 2.6, 0.95); + cell.appendChild(svg); + } + line.appendChild(cell); + }); + const ebh = document.createElement("div"); ebh.className = "ebh"; + line.appendChild(ebh); + gsap.set(line, { xPercent: -50, yPercent: -50, rotation: rot }); + tl.set(line, { opacity: 1 }, L.words[0][1] - 0.02); + + L.words.forEach(([txt, st, em], wi) => { + const cell = line.children[wi]; + const wrap = cell.firstChild, bh = wrap.children[1]; + gsap.set(wrap, { clipPath: "inset(-14% 100% -14% 0%)" }); + tl.to(wrap, { clipPath: "inset(-14% 0% -14% 0%)", duration: 0.16, ease: "power2.out" }, st); + tl.fromTo(bh, { left: -26, opacity: 0.55 }, + { left: "100%", opacity: 0.55, duration: 0.16, ease: "power2.out" }, st); + tl.set(bh, { opacity: 0 }, st + 0.17); + if (em) { + [[cell._ulFat, 0.12], [cell._ulCore, 0.15]].forEach(([p, dly]) => { + const len = p.getTotalLength(); + const tu = Math.min(st + dly, ${(DUR - 0.3).toFixed(3)}); + gsap.set(p, { strokeDasharray: len, strokeDashoffset: len }); + tl.set(p, { opacity: 1 }, tu); + tl.to(p, { strokeDashoffset: 0, duration: 0.22, ease: "power2.out" }, tu); + }); + } + }); + + // EXIT: the reveal in reverse — a wet cloth wipes R→L, erase head riding + gsap.set(line, { clipPath: "inset(-30% 0% -30% 0%)" }); + tl.to(line, { clipPath: "inset(-30% 100% -30% 0%)", duration: L.eraseEnd - L.eraseT, + ease: "power2.in" }, L.eraseT); + tl.fromTo(ebh, { left: "100%", opacity: 0.5 }, + { left: -34, opacity: 0.5, duration: L.eraseEnd - L.eraseT, ease: "power2.in" }, L.eraseT); + tl.set(ebh, { opacity: 0 }, L.eraseEnd + 0.01); + tl.set(line, { opacity: 0 }, L.eraseEnd + 0.02); + }); +${ + b.yield && !heroInline + ? ` + // APEX OWNS ITS WINDOW — band + the line under the gesture yield, band restores + tl.to(${heroLi >= 0 ? `["#band", "#br${heroLi}"]` : `"#band"`}, { opacity: ${b.yield.dim}, duration: 0.16 }, ${(heroIn - (b.yield.pre || 0.16)).toFixed(3)}); +${ + heroIn + (b.yield.post || 0.46) + 0.3 < DUR + ? ` tl.to("#band", { opacity: 1, duration: 0.18 }, ${(heroIn + (b.yield.post || 0.46)).toFixed(3)});` + : "" +}` + : "" +} + + // ending: the band itself is wiped off with the last line (one final R→L wipe) + tl.to("#band", { clipPath: "inset(0% 100% 0% 0%)", duration: 0.13, ease: "power2.in" }, ${lastE}); + tl.fromTo("#bandbh", { left: "100%", opacity: 0.6 }, + { left: -30, opacity: 0.6, duration: 0.13, ease: "power2.in" }, ${lastE}); + tl.set("#bandbh", { opacity: 0 }, ${Math.min(lastE + 0.14, DUR - 0.01).toFixed(3)});`; + return { css, html, js }; +} + +function paradigmInkrail() { + // INKRAIL: sumi ink on still water — up to three fixed reading ROWS at the + // bottom center (rows cycle in pairs, the closing line takes the third row, + // so the final thought ACCUMULATES instead of replacing) where Mincho-serif + // ink words BLEED in over a paper-white halo glow (opacity snaps in 2 + // frames; blur 12→0 + scale 1.25→1 carry the bleed — the apex bloom at low + // amplitude) while a duplicate blurred dark halo overshoots then tightens; + // an ink-settling RULE (gradient hairline) draws beneath each line; + // emphasis words shed a faint ink wisp curling off the word top; spent + // lines RE-DISSOLVE (blur up + spread + fade + slight rise — ink dispersing + // back into the water) as the line-after-next approaches (= the next + // occupant of their row); the closing lines persist to clip end; the rows + // visible under the bloom yield while the drop blooms. + const b = dna.body; + const rowGap = b.rowGap ?? 56; + const bottomPx = b.bottomPx ?? 36; // center of the LAST reading row + const n = LINES.length; + const base = n >= 3 ? 0 : 3 - n; // few lines sink to the lower rows + const lineData = LINES.map((L, li) => { + const slot = li === n - 1 && n >= 3 ? 2 : base + (li % 2); + let outT = null, + outDur = 0; + if (li + 2 < n) { + // re-dissolve as the line-after-next approaches; never dissolve mid-read + outDur = +Math.max(0.35, 0.5 - 0.05 * li).toFixed(2); + outT = +Math.max( + L.words[L.words.length - 1].start + 0.25, + LINES[li + 2].words[0].start - outDur - 0.05, + ).toFixed(3); + } + return { + id: "ik" + L.id, + in: +L.in.toFixed(3), + y: H - bottomPx - (2 - slot) * rowGap, + outT, + outDur, + words: L.words.map((w) => [w.display, +w.start.toFixed(3), w.minor ? 1 : 0]), + }; + }); + const INK = dna.palette.body; + const PAP = dna.palette.paper || "#fffaee", + PAP2 = dna.palette.paper2 || "#fff8e8"; + const css = ` + .irow { position:absolute; left:${W / 2}px; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.body}', serif; font-weight:${b.weight || 400}; + font-size:${b.fontPx}px; line-height:1.25; letter-spacing:${b.letterSpacing || "0.055em"}; + color:${INK}; } + .irow .w { display:inline-block; position:relative; margin-right:0.34em; } + .irow .w:last-child { margin-right:0; } + .irow .ink { position:relative; display:inline-block; opacity:0; + text-shadow: 0 0 5px ${PAP}, 0 0 14px ${PAP}f2, 0 0 30px ${PAP2}d9, 0 1px 2px ${PAP}e6; } + .irow .halo { position:absolute; left:0; top:0; opacity:0; color:${INK}; filter:blur(9px); } + .irule { position:absolute; left:50%; bottom:-7px; width:86%; height:2px; + margin-left:-43%; opacity:0; transform-origin:50% 50%; + background: linear-gradient(90deg, ${INK}00 0%, ${INK}8c 18%, ${INK}8c 82%, ${INK}00 100%); + box-shadow: 0 1px 7px ${PAP}8c; filter: blur(0.8px); } + .iwisp { position:absolute; left:50%; top:-16px; width:22px; height:28px; + margin-left:-11px; opacity:0; border:3px solid transparent; + border-top-color:${INK}8c; border-radius:50%; filter:blur(2px); }`; + const html = lineData + .map((L) => `
`) + .join("\n"); + const js = ` + // ---- body paradigm: INKRAIL (ink bleed-in / re-dissolve exits) ---- + const RAILI = ${J(lineData)}; + const IKLATE = ${(DUR - 0.84).toFixed(3)}; // late words bleed faster (resolve before clip end) + RAILI.forEach((L, li) => { + const line = document.getElementById(L.id); + const rule = document.createElement("div"); rule.className = "irule"; line.appendChild(rule); + L.words.forEach(([txt]) => { + const w = document.createElement("span"); w.className = "w"; + const halo = document.createElement("span"); halo.className = "halo"; halo.textContent = txt; + const ink = document.createElement("span"); ink.className = "ink"; ink.textContent = txt; + w.appendChild(halo); w.appendChild(ink); line.appendChild(w); + }); + gsap.set(line, { xPercent: -50, yPercent: -50 }); + tl.set(line, { opacity: 1 }, L.in); + L.words.forEach(([txt, st, em], wi) => { + const w = line.children[wi + 1]; // children[0] is the rule + const halo = w.children[0], ink = w.children[1]; + // BLEED IN: opacity snaps (2 frames); blur 12→0 + scale 1.25→1 carry the + // bleed (late words bleed faster so they fully resolve before clip end) + const late = st > IKLATE; + tl.fromTo(ink, { opacity: 0 }, { opacity: 1, duration: 0.083, ease: "none" }, st); + tl.fromTo(ink, { filter: "blur(12px)", scale: 1.25 }, + { filter: "blur(0px)", scale: 1, duration: late ? 0.4 : 0.6, ease: "power2.out", + transformOrigin: "50% 60%" }, st); + // the dark halo overshoots then tightens (the bloom motif, low amplitude) + tl.fromTo(halo, { opacity: em ? 0.55 : 0.5, scale: 1.5 }, + { scale: 1.04, opacity: em ? 0.3 : 0.25, duration: late ? 0.5 : 0.7, + ease: "power2.out", transformOrigin: "50% 60%" }, st); + // emphasis: a faint ink wisp curls off the word top (skipped near clip end) + if (em && st + 1.55 <= ${(DUR - 0.03).toFixed(3)}) { + const wsp = document.createElement("div"); wsp.className = "iwisp"; w.appendChild(wsp); + const dir = li % 2 === 0 ? 1 : -1; + tl.set(wsp, { opacity: 0.5, transformOrigin: "50% 50%" }, st + 0.55); + tl.fromTo(wsp, { y: 0, x: 0, rotation: 12 * dir, scaleY: 1 }, + { y: -38, x: 10 * dir, rotation: 92 * dir, scaleY: 1.55, + duration: 1.0, ease: "power1.out" }, st + 0.55); + tl.to(wsp, { opacity: 0, duration: 0.42, ease: "power1.in" }, st + 1.12); + } + }); + // ink-settling rule beneath the line + tl.set(rule, { opacity: 0.55 }, L.words[0][1] + 0.12); + tl.fromTo(rule, { scaleX: 0 }, { scaleX: 1, duration: 0.9, ease: "power2.out" }, + L.words[0][1] + 0.12); + // EXIT: re-dissolve — blur up + spread + fade + slight rise, ink dispersing + // (the closing lines persist — the final thought stays readable) + if (L.outT !== null) { + tl.to(line, { filter: "blur(9px)", scale: 1.13, opacity: 0, y: -8, + duration: L.outDur, ease: "power1.in", transformOrigin: "50% 50%" }, L.outT); + tl.set(line, { display: "none" }, L.outT + L.outDur + 0.02); + } + }); +${ + b.yield && !heroInline + ? ` + // rows visible under the bloom yield while the drop blooms, restore after. + // Overlap guards: dim only after the line is IN with runway before its exit; + // restore only with clear runway (else the line exits dimmed — one owner). + RAILI.forEach((L) => { + const dimT = ${(heroIn + (b.yield.delay ?? 0.12)).toFixed(3)}; + if (L.in < dimT - 0.05 && (L.outT === null || L.outT > dimT + 0.35)) { + tl.to("#" + L.id, { opacity: ${b.yield.dim}, duration: 0.3, ease: "power1.out" }, dimT); + const resT = ${(heroIn + (b.yield.post ?? 1.07)).toFixed(3)}; + if (L.outT === null || resT + 0.33 < L.outT) + tl.to("#" + L.id, { opacity: 1, duration: 0.3, ease: "power1.out" }, resT); + } + });` + : "" +}`; + return { css, html, js }; +} + +// ---- ransom shared pieces: the cutout-chip recipes and the seeded paper-tear +// polygon are ONE paper stock used by both layers (ransomrail body chips in the +// fg, ransomnote letter chips in the bg) — emitted into each page separately +function ransomChipCss(ls) { + const p = dna.palette; + return ` + .ca { background:${p.paper || "#f5f1e4"}; color:${p.paperInk || "#17130d"}; font-family:'${dna.fonts.body}', sans-serif; letter-spacing:${ls}; } + .cb { background:${p.dark || "#141414"}; color:${p.darkInk || "#f7f5ef"}; font-family:'${dna.fonts.dark}', sans-serif; font-weight:800; } + .cc { background:${p.news || "#d8d3c5"}; color:${p.newsInk || "#262017"}; font-family:'${dna.fonts.news}', monospace; } + .cd { background:${p.accent || "#ffd23f"}; color:${p.accentInk || "#1c160c"}; font-family:'${dna.fonts.accent}', cursive; }`; +} +// seeded 12-vertex tear polygon — j() call order matches the demo exactly so +// identical seeds reproduce the demo's torn edges +const RANSOM_TEAR = `function tearPoly(r){ + const j = () => +(r()*5).toFixed(1); + const p = [[j(),j()],[33,j()],[66,j()],[100-j(),j()],[100-j(),33],[100-j(),66], + [100-j(),100-j()],[66,100-j()],[33,100-j()],[j(),100-j()],[j(),66],[j(),33]]; + return "polygon(" + p.map(q => q[0] + "% " + q[1] + "%").join(",") + ")"; + }`; + +function paradigmRansomrail() { + // RANSOMRAIL: kidnapper's collage — every transcript word is a cutout chip + // in one of 4 cycled recipes (paper/Anton, black/Inter-800, newsprint/ + // Special Elite, accent/Permanent Marker; emphasis words snap to the accent + // chip) PASTED along the bottom rail line with seeded crookedness, seeded + // ±px sizes and misaligned baselines — the paste is the apex slam motif at + // low amplitude (1f appear at scale 1.12 → power3.in crush → 2-frame contact + // squash → elastic settle). Emphasis = 1-frame RE-PASTE lift (shadow grows, + // rotation flips sign for good); exits = chips RIPPED off one by one with + // 1-frame paper-tear flashes under each; lines breathe through their hold; + // the whole railwrap yields while the apex letters slam behind the subject. + const b = dna.body; + const last = LINES.length - 1; + const lineData = LINES.map((L, li) => { + const n = L.words.length; + const stag = li === last ? 0.04 : 0.045; + const ripDur = li === last ? 0.12 : 0.14; + const lastSt = L.words[n - 1].start; + // rip cadence (demo): chips tear off just before the next line pastes — + // the rip tail overlaps the new line a beat (collage chaos, by design); + // a line whose last word just spoke waits lastWord+0.14 first + let ripStart = + li === last + ? Math.min(L.out - 0.04, DUR - 0.06 - ripDur - stag * (n - 1)) + : Math.max(lastSt + 0.14, LINES[li + 1].in - ripDur - stag * (n - 1) + 0.05); + ripStart = +Math.min(ripStart, DUR - 0.06 - ripDur - stag * (n - 1)).toFixed(3); + const words = L.words.map((w, wi) => { + const st = +w.start.toFixed(3); + const R = +Math.max(ripStart + stag * wi, st + 0.12).toFixed(3); + // re-paste lift: needs its own window before the chip's rip + let emphT = w.minor ? +Math.min(st + (b.emphDelay ?? 0.23), R - 0.27).toFixed(3) : 0; + if (emphT && emphT < st + 0.08) emphT = 0; + return [w.display, st, emphT, R, w.minor ? 1 : 0]; + }); + // hold life: gentle collage breathe on the whole line (demo cadence) + const bs = +(L.words[0].start + 0.08).toFixed(3); + const bd = +Math.min(1.8, ripStart - 0.03 - bs).toFixed(2); + return { id: "rr" + L.id, in: +L.in.toFixed(3), ripDur, words, bs, bd: bd >= 0.3 ? bd : 0 }; + }); + const css = ` + #rrailwrap { position:absolute; inset:0; } + .rline { position:absolute; left:${W / 2}px; top:${H - b.bottomPx}px; white-space:nowrap; } + .rline .w { display:inline-block; position:relative; margin:0 5px; } + .rflash { position:absolute; inset:-4px; background:${dna.palette.flash || "#fffdf2"}; opacity:0; z-index:0; } + .rmove { display:inline-block; position:relative; z-index:1; opacity:0; + filter: drop-shadow(0 5px 0 rgba(8,6,4,0.5)); } + .rchip { display:inline-block; line-height:1.05; padding:0.08em 0.16em 0.11em; + text-transform:${b.textTransform || "uppercase"}; } +${ransomChipCss(b.letterSpacing || "0.02em")}`; + const html = `
+${lineData.map((L) => `
`).join("\n")} +
`; + const js = ` + // ---- body paradigm: RANSOMRAIL (chips pasted crooked / ripped off with tear flashes) ---- + const RAILR = ${J(lineData)}; + const crnd = mulberry32(${b.seed || 3940}); + ${RANSOM_TEAR} + const HARDR = "drop-shadow(0 5px 0 rgba(8,6,4,0.5))"; + const LIFTR = "drop-shadow(0 14px 3px rgba(8,6,4,0.35))"; + const RECS = ["ca", "cb", "cc", "cd"]; + let recC = 0, recPrev = -1; // recipe cycle: emphasis snaps to the accent chip, + function nextRec(em) { // never two identical chips in a row + let rec = em ? 3 : recC % 4; + if (rec === recPrev) { recC++; rec = recC % 4; } + if (!em) recC++; + recPrev = rec; + return rec; + } + RAILR.forEach((L, li) => { + const line = document.getElementById(L.id); + gsap.set(line, { xPercent: -50, yPercent: -100 }); + L.words.forEach(([txt, st, emphT, R, em], wi) => { + const w = document.createElement("div"); w.className = "w"; + const fl = document.createElement("div"); fl.className = "rflash"; + fl.style.clipPath = tearPoly(crnd); + const mv = document.createElement("div"); mv.className = "rmove"; + const chip = document.createElement("div"); chip.className = "rchip " + RECS[nextRec(em)]; + chip.style.fontSize = (${b.fontPx} - 2 + Math.round(crnd() * 3) + (em ? 3 : 0)) + "px"; + chip.style.clipPath = tearPoly(crnd); + chip.textContent = txt; + mv.appendChild(chip); w.appendChild(fl); w.appendChild(mv); line.appendChild(w); + // seeded crookedness: rot sign alternates with line+word parity (demo), + // baseline shove dy leans the other way + const sgn = (li + wi) % 2 === 0 ? -1 : 1; + const rot = sgn * (2 + crnd() * 2.5); + const dy = -sgn * (1 + crnd() * 2); + // PASTE = apex slam motif at low amplitude + tl.set(mv, { opacity: 1, scale: 1.12, rotation: rot * 1.5, y: dy - 8 }, st); + tl.to(mv, { scale: 1, rotation: rot, y: dy, duration: 0.08, ease: "power3.in" }, st + 0.005); + tl.set(mv, { scaleX: 1.05, scaleY: 0.95 }, st + 0.09); + tl.to(mv, { scaleX: 1, scaleY: 1, duration: 0.22, ease: "elastic.out(1, 0.4)" }, st + 0.173); + // EMPHASIS = re-paste: 1-frame lift (shadow grows), rotation flips sign for good + if (emphT) { + tl.set(mv, { y: dy - 7, scale: 1.08, rotation: -rot, filter: LIFTR }, emphT); + tl.to(mv, { y: dy, scale: 1, duration: 0.09, ease: "power3.in" }, emphT + 0.083); + tl.set(mv, { filter: HARDR }, emphT + 0.175); + tl.set(mv, { scaleX: 1.04, scaleY: 0.96 }, emphT + 0.178); + tl.to(mv, { scaleX: 1, scaleY: 1, duration: 0.16, ease: "elastic.out(1, 0.4)" }, emphT + 0.262); + } + // EXIT = ripped off, paper-tear flash 1 frame under the chip + tl.set(fl, { opacity: 0.85 }, R); + tl.set(fl, { opacity: 0 }, R + 0.045); + tl.to(mv, { rotation: rot + (wi % 2 ? 16 : -17), y: dy - 30, opacity: 0, + duration: L.ripDur, ease: "power2.in" }, R); + }); + if (L.bd) tl.to(line, { keyframes: { scale: [1, 1.015, 1.005, 1.016, 1] }, + duration: L.bd, ease: "none" }, L.bs); + }); +${ + b.yield && !heroInline + ? ` // rail yields while the apex letters slam behind the subject (container + // opacity — never contests the per-chip channels) + tl.to("#rrailwrap", { opacity: ${b.yield.dim}, duration: 0.12 }, ${Math.max(0.05, heroIn - (b.yield.pre ?? 0.02)).toFixed(3)}); +${ + heroIn + (b.yield.post ?? 0.71) < DUR - 0.3 + ? ` tl.to("#rrailwrap", { opacity: 1, duration: 0.2 }, ${(heroIn + (b.yield.post ?? 0.71)).toFixed(3)});` + : "" +}` + : "" +}`; + return { css, html, js }; +} + +const PARADIGMS = { + rail: paradigmRail, + panel: paradigmPanel, + poem: paradigmPoem, + takeover: paradigmTakeover, + lastpage: paradigmLastpage, + flaprail: paradigmFlaprail, + ledboard: paradigmLedboard, + vhsrail: paradigmVhsrail, + hudrail: paradigmHudrail, + carbonstrip: paradigmCarbonstrip, + laserrail: paradigmLaserrail, + stormrail: paradigmStormrail, + holorail: paradigmHolorail, + planktonrail: paradigmPlanktonrail, + sheenrail: paradigmSheenrail, + scoperail: paradigmScoperail, + paperrail: paradigmPaperrail, + popuprail: paradigmPopuprail, + chalkrail: paradigmChalkrail, + markerrail: paradigmMarkerrail, + brushrail: paradigmBrushrail, + inkrail: paradigmInkrail, + ransomrail: paradigmRansomrail, +}; + +function setpieceCpslam() { + // CP-language EMBED climax: acid-yellow word slams in BEHIND the subject with + // REAL notch cuts (SVG mask = true transparency over footage), a chromatic + // split that settles to a PERMANENT registration error, seeded glitch ticks, + // and a glitch-out exit. The frame stays footage — the word is set dressing. + const h = dna.hero, + p = h.params || {}, + I = heroIn; + const YEL = dna.palette.body || "#FCEE0A", + CYN = "#00F0FF", + RED = "#FF003C"; + const srnd = (() => { + let a = p.seed || 2077; + return () => { + a |= 0; + a = (a + 0x6d2b79f5) | 0; + let t = Math.imul(a ^ (a >>> 15), 1 | a); + t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; + return ((t ^ (t >>> 14)) >>> 0) / 4294967296; + }; + })(); + const DISP = heroText.toUpperCase(), + hpx = HG.fontPx; + const halfW = HG.halfW || (DISP.length * 0.56 * hpx) / 2; + const BW = Math.round(halfW * 2 + 140), + BH = Math.round(hpx * 1.5); + const CX = BW - 80 > W ? W / 2 : Math.max(BW / 2 - 40, Math.min(W - BW / 2 + 40, HG.x)), + CY = HG.y; + // seeded diagonal cuts through the letter band (precision is not the point — + // the cuts read as stencil damage wherever they land) + const nN = Math.max(2, Math.floor(DISP.length / 2.2)); + const used = []; + while (used.length < nN) { + const i = Math.floor(srnd() * DISP.length); + if (!used.includes(i)) used.push(i); + } + const notches = used + .map((i, k) => { + const cx = BW / 2 - halfW + (i + 0.5) * 0.56 * hpx + (srnd() - 0.5) * 8; + const cy = BH / 2 + (k % 2 ? 0.24 : -0.27) * hpx + (srnd() - 0.5) * 10; + return ``; + }) + .join("\n "); + const lay = (id, fill) => + ``; + const css = ` + #cpband { position:absolute; left:0; top:-80px; width:100%; height:70px; opacity:0; + background: linear-gradient(180deg, rgba(0,240,255,0) 0%, rgba(0,240,255,0.4) 50%, rgba(0,240,255,0) 100%); } + #cps { position:absolute; left:${CX}px; top:${CY}px; width:0; height:0; opacity:0; } + #cpsW { position:absolute; left:0; top:0; transform:translate(-50%,-50%); + filter: drop-shadow(0 4px 18px rgba(0,0,0,0.5)); } + #cpkana { position:absolute; left:0; top:-${Math.round(hpx * 0.82)}px; transform:translate(-50%,-50%); + font-family:'Hiragino Sans','Hiragino Kaku Gothic ProN',sans-serif; font-weight:600; + font-size:20px; letter-spacing:0.5em; text-indent:0.5em; color:${YEL}; opacity:0; + white-space:nowrap; text-shadow: 0 2px 8px rgba(0,0,0,0.7); }`; + const html = `
+
+ + + ${esc(DISP)} + ${notches} + + ${lay("cpC", CYN)} + ${lay("cpR", RED)} + ${lay("cpY", YEL)} + +
${esc(p.kana || "サイバーパンク")}
+
`; + // a climax is an EVENT: on long clips holding to clip-end turns it into + // wallpaper. Default hold ~2.6s after the slam; hero.exitAt / params.hold override. + const EX = theme.hero.exitAt ?? Math.min(heroOut - 0.2, I + (p.hold ?? 2.6)); + const js = ` + // ---- setpiece: CPSLAM (band charge -> crush slam -> permanent registration -> glitch-out) ---- + const I = ${I.toFixed(3)}; + const crnd = mulberry32(${p.seed || 2077}); + tl.set("#cpband", { opacity: 1 }, I - 0.35); + tl.fromTo("#cpband", { y: 0 }, { y: ${H + 160}, duration: 0.36, ease: "power1.in" }, I - 0.35); + tl.set("#cpband", { opacity: 0 }, I + 0.01); + // crush slam (weighted), chromatic layers split wide on impact + tl.set("#cps", { opacity: 1 }, I - 0.04); + tl.fromTo("#cpsW", { scale: 2.6, filter: "blur(9px) brightness(2.2) drop-shadow(0 4px 18px rgba(0,0,0,0.5))" }, + { scale: 1, filter: "blur(0px) brightness(1) drop-shadow(0 4px 18px rgba(0,0,0,0.5))", duration: 0.11, ease: "power4.in" }, I - 0.04); + tl.set("#cpsW", { scaleX: 1.09, scaleY: 0.93 }, I + 0.08); + tl.to("#cpsW", { scaleX: 1, scaleY: 1, duration: 0.46, ease: "elastic.out(1.05, 0.36)" }, I + 0.16); + // SVG children move via attr.transform ONLY (banned: gsap x/y component + // props on SVG children — getBBox parse path). Frame-quantized step chain + // replaces the 0.16s recoil tween (identical on screen at 24fps). + const RG = (dx, dy, at) => { tl.set("#cpC", { attr: { transform: "translate(" + dx + " " + dy + ")" } }, at); tl.set("#cpR", { attr: { transform: "translate(" + (-dx) + " " + (-dy) + ")" } }, at); }; + RG(9, 0, I - 0.04); + RG(6, 0, I + 0.02); RG(3, 0, I + 0.02 + F); RG(1, 0, I + 0.02 + 2 * F); RG(0, 0, I + 0.02 + 3 * F); + // ...then the print settles WRONG: permanent registration error (the look) + RG(2.5, -1, I + 0.3); + tl.fromTo("#cpkana", { opacity: 0 }, { opacity: 0.92, duration: 0.18 }, I + 0.22); + // living word: seeded glitch ticks (registration jolts / 1f slips) + let gt = I + 0.62; + while (gt < ${EX.toFixed(3)} - 0.25) { + if (crnd() < 0.55) { + RG(8, -1, gt); RG(2.5, -1, gt + F); + } else { + tl.set("#cps", { x: (crnd() - 0.5) * 10 }, gt); + tl.set("#cps", { x: 0 }, gt + F); + } + gt += 0.45 + crnd() * 0.6; + } + tl.to("#cpsW", { scale: 1.035, duration: 1.1, ease: "power1.inOut" }, I + 0.72); + // EXIT: glitch-out + const E = ${EX.toFixed(3)}; + tl.set("#cpkana", { opacity: 0 }, E); + RG(15, -1, E); + tl.set("#cps", { x: -7 }, E + F); + tl.set("#cps", { opacity: 0, display: "none" }, E + 2 * F);`; + return { css, html, js }; +} + +function setpieceSettle() { + const I = heroIn; + const E = theme.hero.exitAt ?? Math.min(heroOut, DUR - 0.12); + const ruleW = Math.round(2 * HG.halfW * 0.62); + const holdDur = Math.max(0.4, E - I - 0.85); + const css = ` + ${dna.plate.dim ? `#dimP { position:absolute; inset:0; opacity:0; background:#06080c; }` : ""} + #stl { position:absolute; left:${HG.x}px; top:${HG.y}px; transform:translate(-50%,-50%); } + #stl-w { font-family:'${dna.fonts.hero}', sans-serif; font-weight:700; font-size:${HG.fontPx}px; + line-height:1; letter-spacing:0.01em; white-space:nowrap; color:${dna.palette.body}; + text-shadow: 0 2px 18px rgba(0,0,0,0.5), 0 1px 4px rgba(0,0,0,0.35); opacity:0; } + #stl-rule { position:absolute; left:50%; bottom:-20px; transform:translateX(-50%); + width:0; height:3px; border-radius:2px; background:${dna.palette.accent}; + opacity:0.85; box-shadow: 0 1px 8px rgba(0,0,0,0.4); }`; + const html = ` ${dna.plate.dim ? `
` : ""} +
${heroDisplay.toUpperCase()}
`; + const js = ` + // ---- setpiece: SETTLE (quiet blur-settle + accent underline; restraint IS the style) ---- + const I = ${I.toFixed(3)}; +${ + dna.plate.dim + ? ` tl.fromTo("#dimP", { opacity: 0 }, { opacity: ${dna.plate.dim}, duration: 0.35, ease: "power2.in" }, I - 0.3); + tl.to("#dimP", { opacity: 0, duration: 0.4, ease: "power1.in" }, ${(E + 0.02).toFixed(3)});` + : "" +} + // opacity lands in ~2 frames; the transform settles separately (no ghost ramp) + tl.fromTo("#stl-w", { opacity: 0 }, { opacity: 1, duration: 0.09, ease: "power1.out" }, I); + tl.fromTo("#stl-w", { y: 14, scale: 1.05, filter: "blur(9px)" }, + { y: 0, scale: 1, filter: "blur(0px)", duration: 0.45, ease: "power3.out" }, I); + tl.fromTo("#stl-rule", { width: 0 }, { width: ${ruleW}, duration: 0.35, ease: "expo.out" }, I + 0.28); + // hold life: one slow visible loom + tl.to("#stl", { scale: 1.018, duration: ${holdDur.toFixed(2)}, ease: "power1.inOut" }, I + 0.6); + // exit: soften and lift (asymmetric to the landing) + tl.to("#stl-rule", { width: 0, opacity: 0, duration: 0.2, ease: "power2.in" }, ${(E - 0.05).toFixed(3)}); + tl.to("#stl-w", { filter: "blur(5px)", duration: 0.22, ease: "power1.in" }, ${(E - 0.02).toFixed(3)}); + tl.to("#stl", { opacity: 0, y: -10, duration: 0.24, ease: "power2.in" }, ${E.toFixed(3)}); + tl.set("#stl", { display: "none" }, ${(E + 0.26).toFixed(3)});`; + return { css, html, js }; +} +function setpieceFlapboard() { + // SPLIT-FLAP DEPARTURES BOARD: floodlights swing on, the housing clacks down + // behind the subject, one giant flap tile per char flip-cycles seeded wrong + // glyphs then locks the real char left→right with clack rhythm; rule wipes, + // status ticker types on; one tile re-flutters during the hold; tiles flip + // to blank and the housing flips away. + const h = dna.hero, + p = h.params, + I = heroIn; + const N = heroText.length; + const gap = p.gap || 7; + const tileW = HG.tileW, + tileH = HG.tileH, + fpx = HG.fontPx; + const lockWin = p.lockWindow || 0.34; + const AIN = I - 0.15; + const lockEnd = I + lockWin; + const E = heroOut; + const headH = 34; + const boardH = 10 + headH + tileH + 18; + const boardW = HG.halfW * 2; + const ruleW = Math.round(boardW - 43); + const ruleY = Math.round(HG.y + boardH / 2 + 37); + const tagW = Math.round((p.tag || "").length * 19); + const flutterIdx = Math.min(N - 1, Math.floor(N * 0.6)); + const exit0 = E - ((N - 1) * 0.03 + 0.09); + const css = ` + #dimF { position:absolute; inset:0; opacity:0; background:#06080c; } + #scrimF { position:absolute; inset:0; opacity:0; + background: linear-gradient(180deg, rgba(5,7,11,0.72) 0%, rgba(5,7,11,0.3) 42%, + rgba(5,7,11,0) 68%); } + #glowF { position:absolute; inset:0; opacity:0; + background: radial-gradient(46% 38% at ${((HG.x / W) * 100).toFixed(1)}% ${((HG.y / H) * 100).toFixed(1)}%, rgba(255,196,110,0.5) 0%, + rgba(255,160,60,0.16) 55%, rgba(0,0,0,0) 78%); } + #persp { position:absolute; inset:0; perspective:950px; } + #board { position:absolute; left:${HG.x}px; top:${HG.y}px; opacity:0; transform-origin:50% 0%; + background: linear-gradient(180deg,#171B21 0%,#101319 100%); + border-radius:8px; border:1px solid #353C47; border-top:3px solid ${dna.palette.hot}; + padding:10px 20px 18px; + box-shadow: 0 18px 60px rgba(0,0,0,0.65), inset 0 1px 0 rgba(255,255,255,0.06); } + #bhead { display:flex; justify-content:space-between; align-items:baseline; gap:40px; + font-family:'${dna.fonts.tag}', sans-serif; font-weight:600; font-size:24px; + letter-spacing:4px; color:${dna.palette.hot}; opacity:0.9; padding:0 4px 8px; } + #bhead .r { color:#8A8F98; letter-spacing:3px; } + #slots { display:flex; gap:${gap}px; } + .atile { position:relative; width:${tileW}px; height:${tileH}px; perspective:620px; + border-radius:4px; background:#0A0D11; + box-shadow: inset 0 0 0 1px #1F242B, inset 0 5px 12px rgba(0,0,0,0.75); } + .aflap { position:absolute; inset:0; transform-origin:50% 0%; backface-visibility:hidden; + border-radius:4px; text-align:center; + background: linear-gradient(180deg,#343A43 0%,#272C34 48%,#1A1E25 52%,#242931 100%); + box-shadow: inset 0 0 0 1px rgba(0,0,0,0.55), inset 0 1px 0 rgba(255,255,255,0.08); + font-family:'${dna.fonts.hero}', sans-serif; font-size:${fpx}px; line-height:${tileH + 2}px; + color:${dna.palette.boardBone || dna.palette.body}; + text-shadow: 0 4px 14px rgba(0,0,0,0.55); } + .aflap::after { content:""; position:absolute; left:0; right:0; top:50%; height:2px; + margin-top:-1px; background:rgba(0,0,0,0.5); } + .ac { position:absolute; inset:0; } + .ac.wv { display:none; color:#C3C8D0; } + .ac.rl { visibility:hidden; } + #ruleF { position:absolute; left:${HG.x}px; top:${ruleY}px; width:${ruleW}px; height:3px; + margin-left:-${Math.round(ruleW / 2)}px; background:${dna.palette.hot}; opacity:0; transform-origin:50% 50%; + box-shadow: 0 0 12px ${dna.palette.hot}99; } + #tagwrapF { position:absolute; left:${HG.x}px; top:${ruleY + 14}px; transform:translateX(-50%); + overflow:hidden; white-space:nowrap; width:0; } + #tagF { font-family:'${dna.fonts.tag}', sans-serif; font-weight:600; font-size:27px; letter-spacing:7px; + color:${dna.palette.hot}; white-space:nowrap; text-shadow: 0 2px 8px rgba(0,0,0,0.7); }`; + const html = `
+
+
+
${esc(p.headerLeft || "★ DEPARTURES")}${esc(p.headerRight || "")}
+
+
+
+
+ ${p.tag ? `
${esc(p.tag)}
` : ""}`; + const js = ` + // ---- setpiece: FLAPBOARD (housing clack → flip-cycle → lock left→right → board life) ---- + const I = ${I.toFixed(3)}, AIN = ${AIN.toFixed(3)}, LOCK0 = I, LSTEP = ${(lockWin / Math.max(1, N - 1)).toFixed(5)}; + const WORDB = ${J(heroText)}, BGLYPHS = ${J(p.glyphs || "ABCDEFGHIKLMNOPRSTUVXYZ0123456789")}; + const HOTB = ${J(dna.palette.hot)}, BONEB = ${J(dna.palette.boardBone || dna.palette.body)}; + const brnd = mulberry32(${p.seed || 8088}); + // scene reaction: floodlights swing onto the board + tl.fromTo("#dimF", { opacity: 0 }, { opacity: ${dna.plate.dim}, duration: 0.16, ease: "power2.in" }, AIN - 0.08); + tl.fromTo("#scrimF", { opacity: 0 }, { opacity: ${dna.plate.charge}, duration: 0.16, ease: "power2.in" }, AIN - 0.08); + tl.to("#dimF", { opacity: ${(dna.plate.dim * 0.59).toFixed(2)}, duration: 0.8, ease: "power2.out" }, ${(lockEnd - 0.23).toFixed(3)}); + tl.to("#scrimF", { opacity: ${(dna.plate.charge * 0.61).toFixed(2)}, duration: 0.8, ease: "power2.out" }, ${(lockEnd - 0.23).toFixed(3)}); + tl.to(["#dimF", "#scrimF"], { opacity: 0, duration: 0.4, ease: "power1.in" }, ${(E - 0.39).toFixed(3)}); + // build the flap tiles (one per char; spaces are blank tiles) + const slots = document.getElementById("slots"); + const btiles = []; + for (let i = 0; i < WORDB.length; i++) { + const atile = document.createElement("div"); atile.className = "atile"; + if (WORDB[i] === " ") { + atile.style.width = Math.round(${tileW} * 0.45) + "px"; + slots.appendChild(atile); btiles.push(null); continue; + } + const flap = document.createElement("div"); flap.className = "aflap"; + const n = 3 + Math.floor(brnd() * 3); // 3-5 seeded wrong chars + const wrongs = []; + for (let k = 0; k < n; k++) { + const s = document.createElement("div"); s.className = "ac wv"; + s.textContent = BGLYPHS[Math.floor(brnd() * BGLYPHS.length)]; + flap.appendChild(s); wrongs.push(s); + } + const rl = document.createElement("div"); rl.className = "ac rl"; rl.textContent = WORDB[i]; + flap.appendChild(rl); + atile.appendChild(flap); slots.appendChild(atile); + btiles.push({ atile, flap, rl, wrongs, n }); + } + gsap.set("#board", { xPercent: -50, yPercent: -50 }); + // housing clacks down (the flap motif at housing scale) + tl.set("#board", { opacity: 1 }, AIN); + tl.fromTo("#board", { rotationX: -52 }, { rotationX: 0, duration: 0.13, ease: "power3.in" }, AIN); + tl.set("#board", { scaleX: 1.012, scaleY: 0.965 }, AIN + 0.13); + tl.to("#board", { scaleX: 1, scaleY: 1, duration: 0.28, ease: "elastic.out(1, 0.42)" }, AIN + 0.16); + // flip-cycle wrong chars, lock left→right with clack rhythm + btiles.forEach((T, i) => { + if (!T) return; + const Li = LOCK0 + i * LSTEP; + const Si = AIN + 0.035 + i * 0.008; + const cyc = (Li - Si) / T.n; + tl.set(T.wrongs[0], { display: "block" }, AIN); + tl.fromTo(T.flap, { rotationX: -85 }, { rotationX: 0, duration: cyc * 0.8, ease: "power1.in" }, Si); + for (let k = 1; k < T.n; k++) { + const c = Si + k * cyc; + tl.set(T.wrongs[k - 1], { display: "none" }, c); + tl.set(T.wrongs[k], { display: "block" }, c); + tl.fromTo(T.flap, { rotationX: -85 }, { rotationX: 0, duration: cyc * 0.8, ease: "power1.in" }, c); + } + // LOCK: real char drops in, hot flash, squash, elastic settle, cool to bone + tl.set(T.wrongs[T.n - 1], { display: "none" }, Li); + tl.set(T.rl, { visibility: "visible" }, Li); + tl.set(T.flap, { color: HOTB, filter: "brightness(2.1)" }, Li); + tl.fromTo(T.flap, { rotationX: -90 }, { rotationX: 0, duration: 0.075, ease: "power2.in" }, Li); + tl.set(T.atile, { scaleX: 1.05, scaleY: 0.92 }, Li + 0.075); + tl.to(T.atile, { scaleX: 1, scaleY: 1, duration: 0.3, ease: "elastic.out(1, 0.38)" }, Li + 0.1); + tl.to(T.flap, { color: BONEB, filter: "brightness(1)", duration: 0.45, ease: "power2.out" }, Li + 0.15); + }); + // clack rhythm: baked y-jitter on the housing across the lock window + tl.to("#board", { keyframes: { y: [0, 2, 0, 1.4, 0, 2, 0, 1.2, 0, 1.8, 0] }, + duration: ${(lockWin + 0.08).toFixed(2)}, ease: "none" }, LOCK0 - 0.01); + // lock-complete: the big clack (plate punch lands here) + tl.set("#board", { scaleX: 1.03, scaleY: 0.96 }, ${lockEnd.toFixed(3)}); + tl.to("#board", { scaleX: 1, scaleY: 1, duration: 0.42, ease: "elastic.out(1, 0.4)" }, ${(lockEnd + 0.03).toFixed(3)}); + tl.fromTo("#glowF", { opacity: 0 }, { opacity: 0.85, duration: 0.12, ease: "power2.out" }, ${lockEnd.toFixed(3)}); + tl.to("#glowF", { keyframes: { opacity: [0.85, 0.55, 0.7, 0.45, 0.6, 0.42, 0.5] }, + duration: ${Math.max(0.4, E - 0.49 - (lockEnd + 0.15)).toFixed(2)}, ease: "none" }, ${(lockEnd + 0.15).toFixed(3)}); + tl.fromTo("#ruleF", { scaleX: 0, opacity: 1 }, { scaleX: 1, duration: 0.3, ease: "expo.out" }, ${(lockEnd + 0.05).toFixed(3)}); +${p.tag ? ` tl.to("#tagwrapF", { width: ${tagW}, duration: 0.4, ease: "steps(16)" }, ${(lockEnd + 0.11).toFixed(3)});` : ""} + // hold life: loom + one mechanical re-flutter tic — boards do this + tl.to("#board", { scaleX: 1.022, scaleY: 1.022, duration: ${Math.max(0.4, Math.min(1.0, exit0 - lockEnd - 0.55)).toFixed(2)}, ease: "power1.inOut" }, ${(lockEnd + 0.5).toFixed(3)}); + const T6 = btiles[${flutterIdx}]; + if (T6 && ${(lockEnd + 1.0).toFixed(3)} < ${(exit0 - 0.2).toFixed(3)}) { + const ft = ${(lockEnd + 0.9).toFixed(3)}; + tl.set(T6.rl, { visibility: "hidden" }, ft); + tl.set(T6.wrongs[0], { display: "block" }, ft); + tl.fromTo(T6.flap, { rotationX: -70 }, { rotationX: 0, duration: 0.055, ease: "power1.in" }, ft); + tl.set(T6.wrongs[0], { display: "none" }, ft + 0.06); + tl.set(T6.rl, { visibility: "visible" }, ft + 0.06); + tl.fromTo(T6.flap, { rotationX: -80 }, { rotationX: 0, duration: 0.06, ease: "power2.in" }, ft + 0.06); + } + // exit: tiles flip to blank (0→90) cascading, housing flips away + tl.to("#glowF", { opacity: 0, duration: 0.3, ease: "power1.in" }, ${(E - 0.49).toFixed(3)}); + tl.to("#ruleF", { scaleX: 0, opacity: 0, duration: 0.12, ease: "power2.in" }, ${(E - 0.44).toFixed(3)}); +${p.tag ? ` tl.to("#tagwrapF", { width: 0, duration: 0.16, ease: "steps(8)" }, ${(E - 0.44).toFixed(3)});` : ""} + btiles.forEach((T, i) => { + if (!T) return; + tl.to(T.flap, { rotationX: 90, duration: 0.085, ease: "power2.in" }, ${exit0.toFixed(3)} + i * 0.03); + }); + tl.to("#board", { rotationX: -45, opacity: 0, duration: 0.13, ease: "power2.in" }, ${(E - 0.04).toFixed(3)}); + tl.set("#board", { display: "none" }, ${Math.min(E + 0.08, DUR - 0.015).toFixed(3)});`; + return { css, html, js }; +} + +function setpieceLedwipe() { + // TRANSIT LED BOARD: cool scrim + dim charge the room, a departure-board + // panel EXPANDS upward (stepped paging motif), then the word lights + // column-by-column via a L→R illumination wipe (clipPath steps) inside a + // chasing LED-marquee border; PA "ding" = two brightness pulses; hold life = + // glow breathe + LED dropouts; exit pages the word up out of the panel and + // the panel collapses back down. + const h = dna.hero, + p = h.params, + I = heroIn; + const C = I + (p.wipeDur || 0.3); // wipe completes = contact + const E = heroOut; + const panelW = HG.panelW, + panelH = HG.panelH, + fpx = HG.fontPx; + const px = Math.round(HG.x - panelW / 2), + py = Math.round(HG.y - panelH / 2); + const spillW = panelW - 180, + spillH = Math.round(panelH * 1.9); + const exScroll = +(E - 0.72).toFixed(3); + const wipeSteps = Math.max(8, Math.round(heroText.length * 1.4)); + const A = dna.palette.accent, + HOT = dna.palette.hot, + GRN = dna.palette.green || "#36e57a"; + // marquee dot lattice scales with the panel; chase runs until the exit + const nTop = Math.max(10, Math.round(panelW / 45)); + const nSide = Math.max(2, Math.round((panelH - 19) / 52) - 1); + const kMax = Math.max(4, Math.floor((exScroll - (I - 0.01)) / 0.1)); + const css = ` + #scrimL { position:absolute; inset:0; opacity:0; + background: radial-gradient(120% 105% at 50% 40%, rgba(2,6,14,0) 30%, rgba(2,6,14,0.85) 100%); } + #dimL { position:absolute; inset:0; opacity:0; background:#020409; } + #spillL { position:absolute; left:${Math.round(HG.x - spillW / 2)}px; top:${Math.round(HG.y - spillH / 2)}px; + width:${spillW}px; height:${spillH}px; opacity:0; + background: radial-gradient(closest-side, ${A}4d, ${A}00 72%); } + #apxL { position:absolute; left:${px}px; top:${py}px; width:${panelW}px; height:${panelH}px; opacity:0; } + #panelL { position:absolute; inset:0; border-radius:8px; + background-color: rgba(8,8,11,0.93); + background-image: radial-gradient(${A}0e 1px, rgba(0,0,0,0) 1.4px); + background-size: 7px 7px; + border:2px solid ${A}4d; + box-shadow: 0 18px 50px rgba(0,0,0,0.55), inset 0 0 70px ${A}0d; } + .ldot { position:absolute; width:7px; height:7px; border-radius:50%; + background:${A}; opacity:0.18; box-shadow:0 0 6px ${A}8c; } + #ptagL, #gtagL { position:absolute; top:16px; font-family:'${dna.fonts.tag}', monospace; font-size:22px; + letter-spacing:0.18em; opacity:0; white-space:nowrap; } + #ptagL { left:28px; color:${A}9e; } + #gtagL { right:28px; color:${GRN}; text-shadow:0 0 8px ${GRN}80; } + #panwinL { position:absolute; left:24px; right:24px; top:44px; bottom:18px; overflow:hidden; } + #scrollL { position:absolute; inset:0; } + #ghostL, #awordL { position:absolute; left:50%; top:50%; + font-family:'${dna.fonts.hero}', monospace; font-size:${fpx}px; line-height:1; + letter-spacing:0.05em; white-space:nowrap; } + #ghostL { color:${A}; opacity:0; } + #awordL { color:${A}; opacity:0; + text-shadow: 0 0 18px ${A}8c, 0 0 2px ${HOT}cc; }`; + const html = `
+
+
+
${esc(p.headerLeft || "NOW ARRIVING ▸ 19:42")}
+
${esc(p.headerRight || "GATE A4")}
+
+
+
${esc(heroText)}
+
${esc(heroText)}
+
+
+
+
`; + const js = ` + // ---- setpiece: LEDWIPE (panel expands → L→R illumination wipe → PA ding → page-up exit) ---- + const I = ${I.toFixed(3)}, C = ${C.toFixed(3)}; + gsap.set("#panelL", { transformOrigin: "50% 100%", scaleY: 0 }); + gsap.set(["#ghostL", "#awordL"], { xPercent: -50, yPercent: -50 }); + + // ===== scene charge / release ===== + tl.fromTo("#scrimL", { opacity: 0 }, { opacity: ${dna.plate.charge}, duration: 0.30, ease: "power2.in" }, I - 0.31); + tl.fromTo("#dimL", { opacity: 0 }, { opacity: ${dna.plate.dim}, duration: 0.25, ease: "power2.in" }, I - 0.25); + tl.fromTo("#spillL", { opacity: 0 }, { opacity: 0.45, duration: 0.40, ease: "power2.out" }, I + 0.05); + tl.to("#spillL", { opacity: 0, duration: 0.35, ease: "power1.in" }, ${(E - 0.54).toFixed(3)}); + tl.to(["#scrimL", "#dimL"], { opacity: 0, duration: 0.40, ease: "power1.in" }, ${(E - 0.44).toFixed(3)}); + + // ===== board expands UPWARD (stepped paging motif, apex scale) ===== + tl.set("#apxL", { opacity: 1 }, I - 0.26); + tl.to("#panelL", { scaleY: 1, duration: 0.20, ease: "steps(6)" }, I - 0.25); + tl.set("#panelL", { borderColor: "${HOT}f2" }, I - 0.05); + tl.set("#panelL", { borderColor: "${A}4d" }, I + 0.07); + + // power-on boot: unlit LED cells + header tags flicker alive + tl.set("#ghostL", { opacity: 0.06 }, I - 0.045); + tl.set("#ghostL", { opacity: 0.13 }, I - 0.003); + tl.set(["#ptagL", "#gtagL"], { opacity: 0.4 }, I - 0.045); + tl.set(["#ptagL", "#gtagL"], { opacity: 0.9 }, I - 0.003); + + // ===== APEX: L→R illumination wipe — LEDs light column by column ===== + tl.set("#awordL", { opacity: 1, color: "${HOT}" }, I); + tl.fromTo("#awordL", { clipPath: "inset(0% 100% 0% 0%)" }, + { clipPath: "inset(0% 0% 0% 0%)", duration: ${(p.wipeDur || 0.3).toFixed(2)}, ease: "steps(${wipeSteps})" }, I); + tl.set("#awordL", { clipPath: "none" }, C + 0.05); // free the glow halo + tl.to("#awordL", { color: "${A}", duration: 0.60, ease: "power1.in" }, C + 0.05); // hot → amber cool + + // contact: squash held 2 frames, elastic settle (board cell flexes) + tl.set("#scrollL", { scaleX: 1.06, scaleY: 0.94 }, C); + tl.to("#scrollL", { scaleX: 1, scaleY: 1, duration: 0.42, ease: "elastic.out(1, 0.4)" }, C + 0.083); + + // PA "ding" = two quick brightness pulses + tl.set("#panwinL", { filter: "brightness(1.7)" }, C + 0.02); + tl.set("#panwinL", { filter: "brightness(1)" }, C + 0.10); + tl.set("#panwinL", { filter: "brightness(1.45)" }, C + 0.18); + tl.set("#panwinL", { filter: "brightness(1)" }, C + 0.26); +${ + C + 0.99 < exScroll + ? ` + // hold life: glow breathes + LED dropouts + tl.to("#awordL", { textShadow: "0 0 30px ${A}d9, 0 0 4px ${HOT}f2", + duration: 0.45, ease: "sine.inOut" }, C + 0.54); + tl.to("#awordL", { textShadow: "0 0 18px ${A}8c, 0 0 2px ${HOT}cc", + duration: 0.45, ease: "sine.inOut" }, C + 0.99); + tl.set("#awordL", { opacity: 0.82 }, C + 0.61); tl.set("#awordL", { opacity: 1 }, C + 0.652); + tl.set("#awordL", { opacity: 0.90 }, C + 1.04); tl.set("#awordL", { opacity: 1 }, C + 1.082); + tl.set("#ptagL", { opacity: 0.45 }, C + 0.41); tl.set("#ptagL", { opacity: 0.9 }, C + 0.452);` + : "" +} + + // ===== exit: word pages up out of the window, board collapses ===== + tl.to("#scrollL", { y: ${-(panelH - 62)}, duration: 0.22, ease: "steps(6)" }, ${exScroll.toFixed(3)}); + tl.set(["#ptagL", "#gtagL"], { opacity: 0 }, ${(exScroll + 0.2).toFixed(3)}); + tl.to("#panelL", { scaleY: 0, duration: 0.18, ease: "steps(6)" }, ${(exScroll + 0.24).toFixed(3)}); + tl.set("#apxL", { opacity: 0 }, ${(exScroll + 0.44).toFixed(3)}); + + // ===== chasing LED marquee border (8-phase set chain) ===== + const panelL = document.getElementById("panelL"); + const PW = ${panelW}, PH = ${panelH}, groups = [[], [], [], [], [], [], [], []]; + const pts = []; + for (let i = 0; i < ${nTop}; i++) pts.push([10 + i * (PW - 27) / ${nTop - 1}, 6]); // top L→R + for (let j = 0; j < ${nSide}; j++) pts.push([PW - 13, 6 + (j + 1) * (PH - 19) / ${nSide + 1}]); // right ↓ + for (let i = ${nTop - 1}; i >= 0; i--) pts.push([10 + i * (PW - 27) / ${nTop - 1}, PH - 13]); // bottom R→L + for (let j = ${nSide - 1}; j >= 0; j--) pts.push([6, 6 + (j + 1) * (PH - 19) / ${nSide + 1}]); // left ↑ + pts.forEach(([x, y], i) => { + const d = document.createElement("div"); + d.className = "ldot"; d.style.left = Math.round(x) + "px"; d.style.top = Math.round(y) + "px"; + d.style.opacity = "0"; panelL.appendChild(d); + groups[i % 8].push(d); + }); + groups.forEach((g) => tl.set(g, { opacity: 0.18 }, I - 0.02)); + for (let k = 0; k <= ${kMax}; k++) { + const t = I - 0.01 + k * 0.1; + for (let q = 0; q < 8; q++) { + const lit = (((q - k) % 8) + 8) % 8 < 2; + tl.set(groups[q], { opacity: lit ? 0.95 : 0.18 }, t); + } + }`; + return { css, html, js }; +} + +function setpieceVhsosd() { + // REC FREEZE: the word slams in as a huge camcorder OSD readout BEHIND the + // subject. Permanent lens vignette = the camcorder look; a backlight-comp + // scrim kills the bright sky behind the word. Arrival = tracking-sliced + // crush (3 horizontal clip-path bands sheared + blurred, power4.in) that + // SNAPS into register on the contact frame, squash → elastic settle; heavy + // red/cyan misregistration cools from ±arrival px to ±settled px and keeps + // BREATHING through the hold; tape-weave y jitter + slow loom; auto-iris + // pump (white wash up, dark dip, settle). Exit = REWIND streak left with a + // flat-white echo copy. + const h = dna.hero, + p = h.params, + I = heroIn; + const C = I + (p.crush ?? 0.1); // contact: slices snap into register + const X = theme.hero.exitAt ?? Math.min(heroOut, I + (p.hold ?? 1.69)); // REWIND + const clips = p.bandClips || [ + [0, 64], + [36, 30], + [70, 0], + ]; + const shear = p.bandShear || [-46, 40, -34]; + const mi = p.misregIn ?? 11, // arrival misregistration (px) + m = p.misreg ?? 3; // settled misregistration (px) + const RED = dna.palette.red || "#FF2E2E", + CYN = dna.palette.cyan || "#3FE8E8"; + const yPct = ((HG.y / H) * 100).toFixed(0); + const css = ` + #vig { position:absolute; inset:0; opacity:0; + background: radial-gradient(115% 100% at 50% 46%, rgba(0,0,0,0) 52%, rgba(0,0,0,${p.vignette ?? 0.34}) 100%); } + #vscrim { position:absolute; inset:0; opacity:0; + background: radial-gradient(58% 44% at 50% ${yPct}%, rgba(0,0,0,0.62) 0%, rgba(0,0,0,0.34) 55%, rgba(0,0,0,0) 78%); } + #iris { position:absolute; inset:0; opacity:0; background:#ffffff; } + #irisd { position:absolute; inset:0; opacity:0; background:#000000; } + #osdw, #oecho { position:absolute; left:${HG.x}px; top:${HG.y}px; opacity:0; } + .aw { position:absolute; left:0; top:0; white-space:nowrap; + font-family:'${dna.fonts.hero}', monospace; font-size:${HG.fontPx}px; line-height:1; + letter-spacing:0.02em; } + #mr { color:${RED}; opacity:0.55; } + #mc { color:${CYN}; opacity:0.55; } + .wb2 { color:${dna.palette.body}; text-shadow: 0 4px 24px rgba(0,0,0,0.6), 0 1px 4px rgba(0,0,0,0.45); } + ${clips.map((c, i) => `#vb${i + 1} { clip-path: inset(${c[0]}% 0 ${c[1]}% 0); }`).join("\n ")} + #oe { color:#ffffff; opacity:0.4; text-shadow:none; }`; + const html = `
+
+
+
+
${esc(heroText)}
+
${esc(heroText)}
+ ${clips.map((_, i) => `
${esc(heroText)}
`).join("\n ")} +
+
+
${esc(heroText)}
+
+
`; + const bandIds = clips.map((_, i) => "#vb" + (i + 1)); + // hold life windows (clamped inside [contact, exit] so nothing fights the rewind) + const weaveTs = []; + const wv = p.weave || [-2, 1, -1, 2, -1, 1, -2, 0]; + for (let k = 0; k < wv.length; k++) { + const t = C + 0.19 + k * 0.17; + if (t < X - 0.05) weaveTs.push([+t.toFixed(3), wv[k]]); + } + const brDur = Math.min(1.3, X - (C + 0.21) - 0.05); + const loomDur = Math.min(0.92, X - (C + 0.64) - 0.03); + const js = ` + // ---- setpiece: VHSOSD (tracking-sliced OSD slam → misreg breathe → REWIND exit) ---- + const I = ${I.toFixed(3)}, C = ${C.toFixed(3)}, X = ${X.toFixed(3)}; + gsap.set(${J(["#mr", "#mc", ...bandIds, "#oe"])}, { xPercent:-50, yPercent:-50 }); + gsap.set("#weave", { x: 0, y: 0 }); + + // camcorder lens vignette — present the whole clip + tl.set("#vig", { opacity: 1 }, 0.02); + + // backlight-compensation scrim behind the word (the sky is bright up there) + tl.fromTo("#vscrim", { opacity: 0 }, { opacity: ${dna.plate.charge}, duration: 0.20, ease: "power2.in" }, I - 0.04); + tl.to("#vscrim", { opacity: ${(dna.plate.charge * 0.69).toFixed(2)}, duration: 0.8, ease: "power2.out" }, C + 0.35); + tl.to("#vscrim", { opacity: 0, duration: 0.30, ease: "power1.in" }, X); + + // ===== ARRIVAL: tracking-sliced crush, opacity 1 instantly ===== + tl.set("#osdw", { opacity: 1 }, I); + tl.fromTo("#osdw", { scale: 2.9 }, { scale: 1, duration: C - I, ease: "power4.in" }, I); + const SHEAR = ${J(shear)}; + ${J(bandIds)}.forEach((sel, i) => { + tl.fromTo(sel, { x: SHEAR[i], filter: "blur(10px) brightness(2.6)" }, + { x: Math.round(SHEAR[i] * 0.3), filter: "blur(1px) brightness(1.7)", duration: C - I, ease: "power4.in" }, I); + }); + tl.set("#mr", { x: -${mi} }, I); + tl.set("#mc", { x: ${mi} }, I); + + // SNAP into register on the contact frame + squash, elastic settle + tl.set(${J(bandIds)}, { x: 0, filter: "brightness(1.85)" }, C); + tl.set("#mr", { x: -${m} }, C); + tl.set("#mc", { x: ${m} }, C); + tl.set("#osdw", { scaleX: 1.10, scaleY: 0.90 }, C); + tl.to("#osdw", { scaleX: 1, scaleY: 1, duration: 0.50, ease: "elastic.out(1, 0.36)" }, C + 0.083); + tl.to(${J(bandIds)}, { filter: "brightness(1)", duration: 0.45, ease: "power2.out" }, C + 0.10); + + // AUTO-IRIS PUMP: wash up, then a dark dip, once + tl.to("#iris", { opacity: 0.20, duration: 0.12, ease: "sine.out" }, C + 0.04); + tl.to("#iris", { opacity: 0, duration: 0.33, ease: "power1.in" }, C + 0.16); + tl.to("#irisd", { opacity: ${dna.plate.dim}, duration: 0.28, ease: "sine.out" }, C + 0.55); + tl.to("#irisd", { opacity: 0, duration: 0.40, ease: "sine.in" }, C + 0.85); +${ + brDur > 0.3 + ? ` + // ===== HOLD LIFE: misregistration breathes, tape weave, slow loom ===== + tl.to("#mr", { keyframes: { x: [-${m}, -${(m * 1.53).toFixed(1)}, -${(m * 1.07).toFixed(1)}, -${(m * 1.67).toFixed(1)}, -${(m * 1.17).toFixed(1)}] }, duration: ${brDur.toFixed(2)}, ease: "none" }, C + 0.21); + tl.to("#mc", { keyframes: { x: [${m}, ${(m * 1.53).toFixed(1)}, ${(m * 1.07).toFixed(1)}, ${(m * 1.67).toFixed(1)}, ${(m * 1.17).toFixed(1)}] }, duration: ${brDur.toFixed(2)}, ease: "none" }, C + 0.21); + ${J(weaveTs)}.forEach(([t, v]) => tl.set("#weave", { y: v }, t));` + : "" +} +${ + loomDur > 0.3 + ? ` tl.to("#osdw", { keyframes: { scale: [1, 1.03, 1.015, 1.028] }, duration: ${loomDur.toFixed(2)}, ease: "none" }, C + 0.64);` + : "" +} + + // ===== EXIT: REWIND — streak left with echo copy ===== + tl.to("#osdw", { x: -190, scaleX: 1.3, opacity: 0, duration: 0.13, ease: "power2.in" }, X); + tl.set("#oecho", { opacity: 1 }, X); + tl.fromTo("#oe", { x: 0, opacity: 0.4 }, { x: -95, opacity: 0, duration: 0.18, ease: "power2.in" }, X + 0.01); + tl.set(["#osdw","#oecho"], { display: "none" }, X + 0.25);`; + return { css, html, js }; +} + +function setpieceBossintro() { + // BOSS INTRO (bg): the room darkens behind a CRT edge glow (cyan base wash, + // pulses on the last emphasis before the boss and spills magenta on the + // strobe + the final word), WARNING blinks 2x above the word rect, then + // ~COLS×ROWS seeded pixel blocks fall steps(3) into a tight matrix grid + // covering the word rect (1-frame white land tick each — the coin-blip motif + // at block scale), and the word flashes ON (instant, oversized, quantized + // crush → 2-frame squash → elastic settle) with chromatic ghost layers and a + // 3-frame palette strobe. Hold: quantized breathe + CRT glow cycle + baked + // block shimmer blinks. Exit: per-letter checkerboard dissolve; blocks drop + // away quantized. FG furniture (rides rail.html via fg parts): letterbox + // bars slam in with a 1-frame overshoot and a HI-SCORE odometer rolls + // top-right through the hold. + const h = dna.hero, + p = h.params || {}, + I = heroIn; + const CY = dna.palette.accent, + MG = dna.palette.magenta || "#FF2E88", + YL = dna.palette.yellow || "#FFE600"; + const FLASH = I + (p.flashDelay ?? 0.14); + const EX = theme.hero.exitAt ?? Math.min(heroOut - 0.2, I + (p.hold ?? 1.24)); + const ROWS = p.rows || 4; + const CWp = Math.round(HG.fontPx * 0.7), + CHp = Math.round(HG.fontPx * 0.5); + const COLS = Math.ceil((HG.halfW * 2 + 100) / CWp); + const X0 = Math.round(HG.x - (COLS * CWp) / 2), + Y0 = Math.round(HG.y - (ROWS * CHp) / 2); + // scene-reaction pulses: the edge glow pre-echoes the boss on the last + // emphasis word before the takeover; magenta answers on the final word + const minorsBefore = LINES.flatMap((L) => L.words).filter((w) => w.minor && w.start < I - 0.3); + const pulseT = minorsBefore.length ? minorsBefore[minorsBefore.length - 1].start : null; + const endPulse = + LASTWORD.start + 0.384 < DUR - 0.02 && LASTWORD.start > EX + 0.4 ? LASTWORD.start : null; + const lb = p.letterbox || 44; + const css = ` + #bdim { position:absolute; inset:0; opacity:0; + background:linear-gradient(180deg, rgba(2,3,12,0.66) 0%, rgba(2,3,12,0.40) 55%, rgba(2,3,12,0.30) 100%); } + #edgeC { position:absolute; inset:0; opacity:0; box-shadow: inset 0 0 130px ${CY}4d; } + #edgeM { position:absolute; inset:0; opacity:0; box-shadow: inset 0 0 130px ${MG}52; } + #blocks{ position:absolute; inset:0; } + .blk { position:absolute; opacity:0; } + #bossWord { position:absolute; left:${HG.x}px; top:${HG.y}px; opacity:0; } + .bw { position:absolute; left:0; top:0; white-space:nowrap; + font-family:'${dna.fonts.hero}', monospace; font-size:${HG.fontPx}px; line-height:1; } + #bwC { color:${CY}; opacity:0; } + #bwM { color:${MG}; opacity:0; } + #bwMain{ color:#ffffff; + text-shadow:0 6px 0 rgba(0,0,0,0.6), 0 0 16px rgba(0,0,0,0.9), 0 0 5px rgba(0,0,0,0.85); } + #bwMain .bl { display:inline-block; } + #warning { position:absolute; left:${HG.x}px; top:${Math.round(HG.y - HG.fontPx * 1.43)}px; opacity:0; + font-family:'${dna.fonts.tag}', monospace; font-size:26px; letter-spacing:0.4em; + color:${MG}; + text-shadow:0 0 14px rgba(0,0,0,0.95), 0 0 6px rgba(0,0,0,0.9), 0 4px 0 rgba(0,0,0,0.8); }`; + const html = `
+
+
+
+
+
${esc(heroText)}
+
${esc(heroText)}
+
+
+
${esc(p.tag || "WARNING")}
`; + const js = ` + // ---- setpiece: BOSSINTRO (dim + WARNING -> pixel-block assembly -> strobe flash) ---- + const I = ${I.toFixed(3)}, FLASH = ${FLASH.toFixed(3)}, OUT = ${EX.toFixed(3)}; + const CYc = ${J(CY)}, MGc = ${J(MG)}, YLc = ${J(YL)}, WHc = "#ffffff"; + const brnd = mulberry32(${p.seed || 13013}); + + // ===== scene reaction: CRT edge glow lives behind the subject ===== + tl.set("#edgeC", { opacity: 0.28 }, 0.05); +${ + pulseT != null + ? ` // pulse on the last emphasis before the boss + tl.set("#edgeC", { opacity: 0.62 }, ${pulseT.toFixed(3)}); + tl.set("#edgeC", { opacity: 0.28 }, ${(pulseT + 0.084).toFixed(3)});` + : "" +} + // boss dim: room darkens for the boss intro (helps a bright sky too) + tl.to("#bdim", { opacity: ${dna.plate.dim ?? 0.58}, duration: 0.12, ease: "power2.out" }, I - 0.15); + tl.set("#edgeC", { opacity: 0.8 }, FLASH); + tl.to("#edgeC", { opacity: 0.34, duration: 0.6, ease: "power2.out" }, FLASH + 0.08); + tl.set("#edgeM", { opacity: 0.5 }, FLASH + 0.084); // magenta strobe spill + tl.to("#edgeM", { opacity: 0, duration: 0.25, ease: "power1.out" }, FLASH + 0.126); + tl.to("#bdim", { opacity: 0, duration: 0.35, ease: "power1.inOut" }, OUT + 0.10); +${ + endPulse != null + ? ` // magenta answers on the final word + tl.set("#edgeM", { opacity: 0.55 }, ${endPulse.toFixed(3)}); + tl.to("#edgeM", { opacity: 0, duration: 0.3, ease: "power1.out" }, ${(endPulse + 0.084).toFixed(3)});` + : "" +} + + // ===== WARNING blinks 2x above the word ===== + tl.set("#warning", { opacity: 1 }, I - 0.135); + tl.set("#warning", { opacity: 0 }, I - 0.05); + tl.set("#warning", { opacity: 1 }, I + 0.035); + tl.set("#warning", { opacity: 0 }, I + 0.12); + gsap.set("#warning", { xPercent: -50, yPercent: -50 }); + + // ===== pixel-block boss assembly: blocks fall steps(3) into a tight grid ===== + const blocksEl = document.getElementById("blocks"); + const X0 = ${X0}, Y0 = ${Y0}, COLS = ${COLS}, ROWS = ${ROWS}, CW = ${CWp}, CH = ${CHp}; + for (let c = 0; c < COLS; c++) { + for (let r = 0; r < ROWS; r++) { + const b = document.createElement("div"); + b.className = "blk"; blocksEl.appendChild(b); + const s = 8 + Math.round(brnd() * 6); // 8–14px + const jx = Math.round((brnd() - 0.5) * 6), jy = Math.round((brnd() - 0.5) * 6); + const px = brnd(); + const col = px < 0.4 ? CYc : px < 0.78 ? MGc : px < 0.93 ? YLc : WHc; + gsap.set(b, { width: s, height: s, + left: X0 + c * CW + (CW - s) / 2 + jx, + top: Y0 + r * CH + (CH - s) / 2 + jy, + backgroundColor: col }); + const start = Math.min(I - 0.15 + c * 0.010 + brnd() * 0.04, FLASH - 0.10); + let dur = 0.12 + brnd() * 0.06; + if (start + dur > FLASH - 0.02) dur = FLASH - 0.02 - start; + const fall = 240 + brnd() * 260; + tl.set(b, { opacity: 0.9, y: -fall }, start); + tl.to(b, { y: 0, duration: dur, ease: "steps(3)" }, start); + // 1-frame white land tick (the coin-blip motif at block scale) + const land = start + dur; + tl.set(b, { backgroundColor: WHc }, land); + tl.set(b, { backgroundColor: col, opacity: 0.85 }, land + 0.042); + // hold shimmer: baked blink sets (no infinite repeats) + const t1 = FLASH + 0.11 + brnd() * 0.45, t2 = FLASH + 0.61 + brnd() * 0.4; + if (t1 + 0.083 < OUT) { tl.set(b, { opacity: 0.5 }, t1); tl.set(b, { opacity: 0.85 }, t1 + 0.083); } + if (t2 + 0.083 < OUT) { tl.set(b, { opacity: 0.55 }, t2); tl.set(b, { opacity: 0.85 }, t2 + 0.083); } + // exit: blocks drop off, quantized + const tE = Math.min(OUT + brnd() * 0.15, ${(DUR - 0.32).toFixed(2)}); + tl.to(b, { y: 220 + brnd() * 140, opacity: 0, duration: 0.2 + brnd() * 0.1, + ease: "steps(3)" }, tE); + } + } + + // ===== the word flashes ON over the block grid ===== + const main = document.getElementById("bwMain"); + const letters = []; + ${J(heroText)}.split("").forEach((ch) => { + const s = document.createElement("span"); + s.className = "bl"; s.textContent = ch === " " ? "\\u00a0" : ch; + main.appendChild(s); letters.push(s); + }); + gsap.set("#bwC", { xPercent: -50, yPercent: -50, x: -4 }); + gsap.set("#bwM", { xPercent: -50, yPercent: -50, x: 4 }); + gsap.set("#bwMain",{ xPercent: -50, yPercent: -50 }); + gsap.set("#bossWord", { transformOrigin: "50% 50%" }); + + // arrival: instant-on at full opacity, quantized crush, 2-frame squash, elastic settle + tl.set("#bossWord", { opacity: 1, scale: 1.15 }, FLASH); + tl.set(["#bwC", "#bwM"], { opacity: 0.85 }, FLASH); + tl.to("#bossWord", { scale: 1, duration: 0.1, ease: "steps(3)" }, FLASH); + tl.set("#bossWord", { scaleX: 1.07, scaleY: 0.92 }, FLASH + 0.1); + tl.to("#bossWord", { scaleX: 1, scaleY: 1, duration: 0.3, + ease: "elastic.out(1, 0.38)" }, FLASH + 0.142); + // 3-frame palette strobe (white -> cyan -> magenta -> white) + tl.set(main, { color: CYc }, FLASH + 0.042); + tl.set(main, { color: MGc }, FLASH + 0.084); + tl.set(main, { color: WHc }, FLASH + 0.126); + // hold life: quantized breathe + CRT glow cycle (emitted only with runway) + if (FLASH + 0.61 < OUT) { + tl.to("#bossWord", { scale: 1.016, duration: 0.4, ease: "sine.inOut", + repeat: 1, yoyo: true }, FLASH + 0.61); + } + const HALO = ", 0 6px 0 rgba(0,0,0,0.6), 0 0 16px rgba(0,0,0,0.9), 0 0 5px rgba(0,0,0,0.85)"; + [[0.2, CYc], [0.5, MGc], [0.8, CYc]].forEach(([dt, gc]) => { + if (FLASH + dt < OUT) tl.set(main, { textShadow: "0 0 22px " + gc + "d9" + HALO }, FLASH + dt); + }); + + // exit: checkerboard dissolve — letters vanish in 2 alternating set passes + letters.forEach((s, i) => { + tl.set(s, { opacity: 0 }, i % 2 === 0 ? OUT : OUT + 0.083); + }); + tl.set(["#bwC", "#bwM"], { opacity: 0 }, OUT + 0.042); + tl.set("#bossWord", { opacity: 0, display: "none" }, OUT + 0.17);`; + // fg furniture: letterbox bars + HI-SCORE odometer ride the fg alpha layer + // (in FRONT of the subject — the cabinet frames the player) + const fgCss = ` + #lbTop { position:absolute; left:0; top:-${lb}px; width:${W}px; height:${lb}px; background:#000; z-index:14; } + #lbBot { position:absolute; left:0; bottom:-${lb}px; width:${W}px; height:${lb}px; background:#000; z-index:14; } + #hi { position:absolute; right:36px; top:${lb + 18}px; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.tag}', monospace; font-size:18px; z-index:15; + text-shadow:0 3px 0 rgba(0,0,0,0.75), 0 0 10px rgba(0,0,0,0.6); } + #hi .lab { color:${CY}; margin-right:0.5em; } + #hi #hsv { color:${YL}; }`; + const fgHtml = `
+
+
HI-SCORE0000000
`; + const fgJs = ` + // ---- bossintro furniture (fg): letterbox slam + HI-SCORE odometer ---- + { + const BI = ${I.toFixed(3)}, BF = ${FLASH.toFixed(3)}, BO = ${EX.toFixed(3)}; + const hrnd = mulberry32(${(p.seed || 13013) + 7}); + // letterbox bars slam in (quantized), 1-frame overshoot, retract after + tl.to("#lbTop", { y: ${lb}, duration: 0.12, ease: "steps(3)" }, BI - 0.15); + tl.to("#lbBot", { y: -${lb}, duration: 0.12, ease: "steps(3)" }, BI - 0.15); + tl.set("#lbTop", { y: ${lb + 4} }, BI - 0.02); tl.set("#lbTop", { y: ${lb} }, BI + 0.022); + tl.set("#lbBot", { y: -${lb + 4} }, BI - 0.02); tl.set("#lbBot", { y: -${lb} }, BI + 0.022); + tl.to("#lbTop", { y: 0, duration: 0.15, ease: "steps(3)" }, BO + 0.13); + tl.to("#lbBot", { y: 0, duration: 0.15, ease: "steps(3)" }, BO + 0.13); + // HI-SCORE counter odometer-rolls during the hold + const hsv = document.getElementById("hsv"); + tl.set("#hi", { opacity: 1 }, BF + 0.03); + tl.fromTo("#hi", { scale: 0 }, { scale: 1, duration: 0.1, ease: "steps(2)", + transformOrigin: "100% 50%" }, BF + 0.03); + let score = 1370; + for (let t = BF + 0.09; t < BO - 0.03; t += 0.066) { + score += 4000 + Math.round(hrnd() * 5500); + tl.set(hsv, { textContent: String(score).padStart(7, "0") }, t); + } + tl.set("#hi", { color: "#ffffff" }, BO + 0.08); // 1-frame white tick out + tl.set("#hi", { opacity: 0 }, BO + 0.122); + }`; + return { css, html, js, fgCss, fgHtml, fgJs }; +} + +function setpieceRubberstamp() { + // RUBBER STAMP: the footage becomes an archival page at the apex — vignette + // charge (plate.charge) + manila sepia wash + a dim kick (plate.dim) that + // cools — then the verdict slams in BEHIND the subject as a bordered rubber + // stamp at params.rotation: crush 2.2→1 power4.in, 2-frame contact squash, + // double-strike ghost print, two thin-ink patches (clip-path circles in + // paper color), wet-ink saturate/brightness settle, and a paper indent + // shadow that blooms under the face. Stamps don't move: the hold is DEAD + // STILL, sold by the breathing indent + a slow paper loom. Exit at + // C + params.hold = mechanical 3-frame yank-down cut (the page is filed + // away); the archive plate releases 0.25s before it. + const h = dna.hero, + p = h.params || {}, + I = heroIn; + const C = I + (p.crush ?? 0.074); // stamp contact (plate punch lands here via punchOffset) + const X = theme.hero.exitAt ?? Math.min(heroOut - 0.06, C + (p.hold ?? 2.02)); + const ROT = p.rotation ?? -8; + const RED = dna.palette.accent || "#b3271e"; + const s = HG.fontPx / 120; // demo face was cut at 120px — chrome scales with it + const bw = Math.max(3, Math.round(6 * s)), + rad = Math.round(14 * s); + const padT = Math.round(20 * s), + padX = Math.round(40 * s), + padB = Math.round(14 * s); + const paperW = Math.round(HG.halfW * 2 * 1.18), + paperH = Math.round(HG.fontPx * 2.83); + const indW = Math.round(HG.halfW * 2 * 1.06), + indH = Math.round(HG.fontPx * 2.08); + const patches = p.patches || [ + [27, 36, 0.72], + [71, 68, 0.57], + ]; + const loomDur = Math.min(1.7, DUR - (C + 0.35) - 0.03); + const breDur = Math.min(1.6, DUR - (C + 0.45) - 0.03); + const css = ` + #dsep { position:absolute; inset:0; opacity:0; background:${dna.palette.paper || "#d8c49a"}; } + #dvig { position:absolute; inset:0; opacity:0; + background: radial-gradient(115% 100% at 50% 40%, rgba(0,0,0,0) 30%, rgba(20,14,8,0.85) 100%); } + #ddim { position:absolute; inset:0; opacity:0; background:#140d06; } + #dapex { position:absolute; left:${HG.x}px; top:${HG.y}px; width:0; height:0; } + #dpaper { position:absolute; width:${paperW}px; height:${paperH}px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, rgba(222,203,160,0.92) 0%, rgba(216,196,154,0.55) 52%, rgba(216,196,154,0) 78%); } + #dindent { position:absolute; width:${indW}px; height:${indH}px; opacity:0; filter:blur(8px); + background: radial-gradient(50% 50% at 50% 50%, rgba(26,16,9,0.62) 0%, rgba(26,16,9,0.30) 48%, rgba(26,16,9,0) 72%); } + #dstamp { position:absolute; } + #dsface { position:relative; display:inline-block; } + .dface { font-family:'${dna.fonts.hero}', serif; font-size:${HG.fontPx}px; line-height:1; + white-space:nowrap; letter-spacing:0.015em; color:${RED}; + border:${bw}px solid currentColor; border-radius:${rad}px; + padding:${padT}px ${padX}px ${padB}px; } + #dghost, #dp1, #dp2 { position:absolute; inset:0; } + #dghost { opacity:0; } + #dp1 .dface, #dp2 .dface { color:rgba(219,199,156,0.55); } + #dp1 { clip-path: circle(${Math.round(patches[0][2] * HG.fontPx)}px at ${patches[0][0]}% ${patches[0][1]}%); } + #dp2 { clip-path: circle(${Math.round(patches[1][2] * HG.fontPx)}px at ${patches[1][0]}% ${patches[1][1]}%); }`; + const html = `
+
+
+
+
+
+
+
+
${esc(heroText)}
+
${esc(heroText)}
+
${esc(heroText)}
+
${esc(heroText)}
+
+
+
`; + const js = ` + // ---- setpiece: RUBBERSTAMP (archive charge → stamp crush → dead-still hold → filed away) ---- + const I = ${I.toFixed(3)}, C = ${C.toFixed(3)}, X = ${X.toFixed(3)}; + + // static geometry + gsap.set("#dpaper", { xPercent:-50, yPercent:-50, rotation: ${p.paperRot ?? 2.4} }); + gsap.set("#dindent", { xPercent:-50, yPercent:-50, rotation: ${ROT} }); + gsap.set("#dstamp", { xPercent:-50, yPercent:-50, rotation: ${ROT}, opacity: 0, + transformOrigin: "50% 50%" }); + gsap.set("#dghost", { x: ${Math.round(5 * s) || 5}, y: -${Math.round(4 * s) || 4}, rotation: 1.3 }); + + // ===== SCENE REACTION: the footage becomes an archive page ===== + tl.fromTo("#dvig", { opacity: 0 }, { opacity: ${dna.plate.charge}, duration: 0.18, ease: "power2.in" }, C - 0.18); + tl.fromTo("#dsep", { opacity: 0 }, { opacity: ${p.sepia ?? 0.14}, duration: 0.28, ease: "power1.out" }, C - 0.12); + tl.set("#ddim", { opacity: ${dna.plate.dim} }, C); + tl.to("#ddim", { opacity: ${(dna.plate.dim * 0.385).toFixed(2)}, duration: 0.5, ease: "power2.out" }, C + 0.05); + tl.to("#dvig", { opacity: ${(dna.plate.charge * 0.5).toFixed(2)}, duration: 0.8, ease: "power2.out" }, C + 0.12); + tl.to(["#dvig","#dsep","#ddim"], { opacity: 0, duration: 0.4, ease: "power1.in" }, X - 0.25); + + // the page lights up an instant before contact (what the stamp lands ON) + tl.fromTo("#dpaper", { opacity: 0, scale: 0.92 }, + { opacity: 0.6, scale: 1, duration: 0.10, ease: "expo.out" }, C - 0.05); + tl.to("#dpaper", { keyframes: { scale: [1, 1.016, 1.005, 1.018, 1.008, 1.015] }, + duration: ${loomDur.toFixed(2)}, ease: "none" }, C + 0.35); + + // ===== ARRIVAL: rubber stamp crush → contact squash → dead still ===== + tl.set("#dstamp", { opacity: 1, scale: 2.2 }, C - 0.115); + tl.to("#dstamp", { scale: 1, duration: 0.115, ease: "power4.in" }, C - 0.115); + tl.set("#dstamp", { scaleX: 1.07, scaleY: 0.93 }, C); // contact squash + tl.to("#dstamp", { scaleX: 1, scaleY: 1, duration: 0.09, ease: "power2.out" }, C + 0.083); + // double-strike ghost prints on contact + tl.set("#dghost", { opacity: 0.35 }, C); + // wet ink settles + tl.set("#dmain", { filter: "saturate(1.5) brightness(1.3)" }, C); + tl.to("#dmain", { filter: "saturate(1) brightness(1)", duration: 0.5, ease: "power2.out" }, C + 0.06); + + // paper indent shadow blooms under the stamp, then breathes (the hold-life; + // the stamp itself stays DEAD STILL) + tl.set("#dindent", { opacity: 0.5, scale: 0.7 }, C); + tl.to("#dindent", { scale: 1, opacity: 0.42, duration: 0.35, ease: "expo.out" }, C + 0.02); + tl.to("#dindent", { keyframes: { opacity: [0.42, 0.30, 0.40, 0.31, 0.38, 0.33] }, + duration: ${breDur.toFixed(2)}, ease: "none" }, C + 0.45); + + // ===== EXIT: page filed away — mechanical 3-frame yank-down cut ===== + tl.set("#dapex", { y: 10 }, X); + tl.set("#dapex", { y: 28, opacity: 0.5 }, X + F); + tl.set("#dapex", { opacity: 0 }, X + 2 * F);`; + return { css, html, js }; +} + +function setpieceLasercage() { + // LASER CAGE: concert blackout — the plate dims and haze cones breathe in + // the top corners; a 6-beam laser array (alternating accent/magenta, + // emitters along the top edge) snaps on and SWEEPS to converge on the word + // center, a hot core pops at convergence, and the word IGNITES behind the + // subject with an additive glow stack (wide blur + magenta fringe + tight + // blur + core): crush → contact squash → elastic settle + 2 controlled + // strobe pops. A criss-cross beam CAGE draws itself around the word rect + // and flickers; during the hold the array FANS OUT slowly behind the word + // (the iconic concert fan) while the word looms. Exit: the beams sweep away + // L→R carrying the letters (streak + blur) and the room lifts back up. + const I = heroIn; + const X0 = +(heroOut - 0.38).toFixed(3); // beams-carry-the-letters exit + const A = dna.palette.accent, + MG = dna.palette.magenta || "#ff4df0"; + const CORE = dna.palette.core || "#eefff5", + SOFT = dna.palette.glowSoft || "#c9ffe2"; + const fpx = HG.fontPx, + halfW = Math.round(HG.halfW), + cx = HG.x, + cy = HG.y; + // emitters along the top edge, initial aim points, fan-out floor targets + // (demo geometry expressed as frame fractions) + const EMX = [-0.023, 0.141, 0.352, 0.648, 0.859, 1.023].map((f) => Math.round(W * f)); + const EMY = [-20, -45, -55, -55, -45, -20]; + const STX = [0.164, 0.828, 0.313, 0.688, 0.406, 0.594].map((f) => Math.round(W * f)); + const FANX = [0.094, 0.258, 0.426, 0.574, 0.742, 0.906].map((f) => Math.round(W * f)); + const FANY = [0.75, 0.9, 0.97, 0.97, 0.9, 0.75].map((f) => Math.round(H * f)); + // beam-grid cage around the word rect (extents derive from halfW + fontPx) + const CAGE = [ + [cx - (halfW + 90), cy + 0.76 * fpx, cx + (halfW + 90), cy - 0.68 * fpx, A, 0.5], + [cx - (halfW + 90), cy - 0.68 * fpx, cx + (halfW + 90), cy + 0.76 * fpx, MG, 0.42], + [cx - (halfW - 80), cy + 1.0 * fpx, cx + (halfW - 80), cy - 0.92 * fpx, A, 0.5], + [cx - (halfW - 80), cy - 0.92 * fpx, cx + (halfW - 80), cy + 1.0 * fpx, MG, 0.42], + [cx - (halfW + 40), cy - 0.74 * fpx, cx + (halfW + 40), cy - 0.74 * fpx, A, 0.45], + [cx - (halfW + 40), cy + 0.82 * fpx, cx + (halfW + 40), cy + 0.82 * fpx, MG, 0.4], + ].map((c) => c.map((v) => (typeof v === "number" ? Math.round(v) : v))); + const spillW = 2 * halfW + 240, + spillH = Math.round(fpx * 5.2); + const hazeW = Math.round(W * 0.656), + hazeH = H + 60; + const blurBig = Math.round(0.22 * fpx), + blurTight = Math.max(3, Math.round(0.07 * fpx)), + fringeOff = Math.max(2, Math.round(0.03 * fpx)); + // hold-life choreography only with runway before the exit + const strobeTs = [I + 0.5, I + 1.08].filter((t) => t < X0 - 0.25); + const fanDur = +Math.max(0.4, Math.min(1.0, X0 - (I + 0.62 + 5 * 0.04) - 0.05)).toFixed(2); + const flickDur = +Math.max(0.4, Math.min(1.2, X0 - 0.05 - (I + 0.6))).toFixed(2); + const lstag = +Math.min( + 0.025, + Math.max(0.008, (DUR - 0.25 - (X0 + 0.02)) / Math.max(1, heroText.length - 1)), + ).toFixed(4); + const css = ` + #dimC { position:absolute; inset:0; background:#000; opacity:0; } + #hazeLc { position:absolute; left:-150px; top:-130px; width:${hazeW}px; height:${hazeH}px; opacity:0; + background: radial-gradient(58% 95% at 12% 4%, ${A}80 0%, ${A}00 68%); + filter: blur(10px); } + #hazeRc { position:absolute; right:-150px; top:-130px; width:${hazeW}px; height:${hazeH}px; opacity:0; + background: radial-gradient(58% 95% at 88% 4%, ${MG}6b 0%, ${MG}00 68%); + filter: blur(10px); } + #spillC { position:absolute; left:${cx}px; top:${cy}px; width:${spillW}px; height:${spillH}px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, ${A}8c 0%, ${A}00 70%); + mix-blend-mode:screen; } + #lasersC { position:absolute; inset:0; } + #hotC { position:absolute; left:${cx}px; top:${cy}px; width:130px; height:130px; opacity:0; + background: radial-gradient(circle, rgba(235,255,244,0.95) 0%, ${A}99 42%, ${A}00 72%); + filter: blur(4px); mix-blend-mode:screen; } + #apexC { position:absolute; left:${cx}px; top:${cy}px; opacity:0; white-space:nowrap; + font-family:'${dna.fonts.hero}', sans-serif; font-size:${fpx}px; line-height:1; letter-spacing:0.02em; } + .clayer { position:absolute; left:0; top:0; } + #cglow { color:${A}; filter:blur(${blurBig}px); opacity:0; mix-blend-mode:screen; } + #cglow2 { color:${SOFT}; filter:blur(${blurTight}px); opacity:0; mix-blend-mode:screen; } + #cfringe{ color:${MG}; left:${fringeOff}px; top:${fringeOff}px; opacity:0; } + #cword { position:relative; color:${CORE}; + text-shadow: 0 0 16px ${A}d9, 0 0 44px ${A}80, 0 2px 8px rgba(0,0,0,0.55); } + #cword .L { display:inline-block; }`; + const html = `
+
+
+ + + +
+
+
${esc(heroText)}
+
${esc(heroText)}
+
${esc(heroText)}
+
+
`; + const js = ` + // ---- setpiece: LASERCAGE (6-beam converge → ignite → cage → fan-out → carried exit) ---- + const I = ${I.toFixed(3)}, X0 = ${X0.toFixed(3)}; + const CACC = ${J(A)}, CMAG = ${J(MG)}; + const NSC = "http://www.w3.org/2000/svg"; + gsap.set("#apexC", { xPercent: -50, yPercent: -50, transformOrigin: "50% 50%" }); + gsap.set(["#spillC", "#hotC"], { xPercent: -50, yPercent: -50 }); + + // apex word as letters (for the carried-away exit) + const cw = document.getElementById("cword"); + const cletters = []; + for (const ch of ${J(heroText)}) { + const s = document.createElement("span"); + s.className = "L"; s.textContent = ch === " " ? "\\u00a0" : ch; + cw.appendChild(s); cletters.push(s); + } + + // ---- 6-beam array (emitters along the top edge, alternating accent/magenta) + const gB = document.getElementById("gB"), gC = document.getElementById("gC"); + const EM = ${J(EMX.map((x, i) => [x, EMY[i]]))}; + const STARTX = ${J(STX)}; + const FAN = ${J(FANX.map((x, i) => [x, FANY[i]]))}; + function mkLnC(parent, x1, y1, x2, y2, col, w) { + const l = document.createElementNS(NSC, "line"); + l.setAttribute("x1", x1); l.setAttribute("y1", y1); + l.setAttribute("x2", x2); l.setAttribute("y2", y2); + l.setAttribute("stroke", col); l.setAttribute("stroke-width", w); + l.setAttribute("stroke-linecap", "round"); + l.style.opacity = 0; parent.appendChild(l); return l; + } + const cbeams = []; + for (let i = 0; i < 6; i++) { + const col = i % 2 ? CMAG : CACC; + const halo = mkLnC(gB, EM[i][0], EM[i][1], STARTX[i], ${cy + 4}, col, 6); + const core = mkLnC(gB, EM[i][0], EM[i][1], STARTX[i], ${cy + 4}, col, 1.6); + core.style.filter = "drop-shadow(0 0 6px " + col + ")"; + cbeams.push([halo, core]); + } + + // ---- beam-grid cage around the word rect + const ccage = ${J(CAGE)}.map(([x1, y1, x2, y2, col, op]) => { + const el = mkLnC(gC, x1, y1, x2, y2, col, 1.2); + const len = Math.hypot(x2 - x1, y2 - y1); + el.setAttribute("stroke-dasharray", len); + el.setAttribute("stroke-dashoffset", len); + return { el, len, op }; + }); + + // ===== WORLD: concert blackout + haze cones + tl.fromTo("#dimC", { opacity: 0 }, { opacity: ${dna.plate.dim}, duration: 0.35, ease: "power1.out" }, 0.03); + tl.to(["#hazeLc","#hazeRc"], { opacity: 0.08, duration: 0.5, ease: "power1.out" }, 0.15); + + // ===== CHARGE: room deepens, 6 beams snap on and sweep to center + tl.to("#dimC", { opacity: ${dna.plate.charge}, duration: 0.26, ease: "power2.in" }, I - 0.31); + tl.to(["#hazeLc","#hazeRc"], { opacity: 0.10, duration: 0.28 }, I - 0.29); + cbeams.forEach((els, i) => { + const t0 = I - 0.26 + i * 0.022; + tl.set(els[0], { opacity: 0.26 }, t0); + tl.set(els[1], { opacity: 0.95 }, t0); + tl.to(els, { attr: { x2: ${cx}, y2: ${cy} }, duration: 0.16, ease: "power2.inOut" }, t0); + }); + tl.fromTo("#hotC", { opacity: 0, scale: 0.4 }, + { opacity: 0.6, scale: 1, duration: 0.1, ease: "power2.in" }, I - 0.11); + tl.to("#hotC", { scale: 2.8, opacity: 0, duration: 0.2, ease: "expo.out" }, I); + + // ===== IGNITE: crush in → contact squash → elastic settle; additive glow stack + tl.set("#apexC", { opacity: 1, scale: 1.16 }, I - 0.02); + tl.to("#apexC", { scale: 1, duration: 0.09, ease: "power4.in" }, I - 0.018); + tl.set("#apexC", { scaleX: 1.09, scaleY: 0.92 }, I + 0.08); + tl.to("#apexC", { scaleX: 1, scaleY: 1, duration: 0.5, ease: "elastic.out(1, 0.38)" }, I + 0.165); + tl.set("#cglow", { opacity: 0.95 }, I); + tl.set("#cglow2", { opacity: 0.60 }, I); + tl.set("#cfringe",{ opacity: 0.30 }, I); + tl.set("#cword", { filter: "brightness(1.9)" }, I); + tl.to("#cword", { filter: "brightness(1)", duration: 0.3, ease: "power2.out" }, I + 0.08); + tl.to("#cglow", { opacity: 0.55, duration: 0.45, ease: "power2.out" }, I + 0.15); + tl.to("#cglow2", { opacity: 0.38, duration: 0.45, ease: "power2.out" }, I + 0.15); + tl.set("#dimC", { opacity: ${(dna.plate.charge - 0.06).toFixed(2)} }, I + 0.05); + tl.to("#dimC", { opacity: ${(dna.plate.charge - 0.1).toFixed(2)}, duration: 0.8, ease: "power1.out" }, I + 0.2); + tl.set("#spillC", { opacity: 0.22 }, I + 0.02); + tl.to("#spillC", { opacity: 0.12, duration: 0.2, ease: "power2.out" }, I + 0.25); + + // ===== CAGE draws around the word + ccage.forEach((c, i) => { + const t = I + 0.08 + i * 0.03; + tl.set(c.el, { opacity: c.op }, t); + tl.to(c.el, { attr: { "stroke-dashoffset": 0 }, duration: 0.18, ease: "power2.out" }, t); + }); + tl.to(ccage.map((c) => c.el), + { keyframes: { opacity: [0.48, 0.36, 0.44, 0.34, 0.42, 0.38] }, duration: ${flickDur}, ease: "none" }, + I + 0.6); + + // ===== controlled strobe pops (with the ignite flash: events spread > 1s) + ${J(strobeTs.map((t) => +t.toFixed(3)))}.forEach((t) => { + tl.set("#apexC", { filter: "brightness(2.05)" }, t); + tl.set("#apexC", { filter: "brightness(1)" }, t + 0.05); + tl.set("#spillC", { opacity: 0.27 }, t); + tl.to("#spillC", { opacity: 0.12, duration: 0.3, ease: "power2.out" }, t + 0.05); + }); + + // ===== FAN OUT: the iconic fan opens behind the word during the hold + cbeams.forEach((els, i) => { + const t = I + 0.62 + i * 0.04; + tl.to(els, { attr: { x2: FAN[i][0], y2: FAN[i][1] }, duration: ${fanDur}, ease: "power1.inOut" }, t); + tl.to(els[0], { opacity: 0.18, duration: 0.4 }, t); + tl.to(els[1], { opacity: 0.50, duration: 0.4 }, t); + }); + tl.to(["#hazeLc","#hazeRc"], { opacity: 0.16, duration: 0.6, ease: "power1.inOut" }, I + 0.35); + + // ===== HOLD LIFE: loom breathe + glow flicker + tl.to("#apexC", { scale: 1.03, duration: 0.6, ease: "sine.inOut" }, I + 0.8); + tl.to("#apexC", { scale: 1.0, duration: 0.6, ease: "sine.inOut" }, I + 1.4); + tl.to("#cglow", { keyframes: { opacity: [0.55, 0.42, 0.52, 0.40, 0.48, 0.45] }, + duration: ${Math.min(1.15, Math.max(0.4, X0 - 0.06 - (I + 0.62))).toFixed(2)}, ease: "none" }, I + 0.62); + + // ===== EXIT: beams sweep away L→R carrying the letters + ccage.forEach((c, i) => { + tl.to(c.el, { attr: { "stroke-dashoffset": c.len }, duration: 0.16, ease: "power2.in" }, X0 + i * 0.02); + tl.set(c.el, { opacity: 0 }, X0 + i * 0.02 + 0.17); + }); + cletters.forEach((l, i) => { + tl.to(l, { x: 44, opacity: 0, filter: "blur(6px)", duration: 0.16, ease: "power2.in" }, + X0 + 0.02 + i * ${lstag}); + }); + tl.to(["#cglow","#cglow2","#cfringe"], { x: 60, opacity: 0, duration: 0.22, ease: "power2.in" }, X0 + 0.06); + cbeams.forEach((els, i) => { + tl.to(els, { attr: { x2: "+=${Math.round(W * 0.742)}" }, duration: 0.28, ease: "power2.in" }, X0 + 0.02 + i * 0.03); + tl.to(els, { opacity: 0, duration: 0.22 }, X0 + 0.04 + i * 0.03); + }); + tl.to("#spillC", { opacity: 0, duration: 0.25 }, X0 - 0.01); + tl.to("#dimC", { opacity: 0.12, duration: 0.4, ease: "power1.in" }, X0 + 0.06); + tl.to(["#hazeLc","#hazeRc"], { opacity: 0.03, duration: 0.4 }, X0 + 0.06); + tl.set("#apexC", { display: "none" }, ${(DUR - 0.02).toFixed(3)});`; + return { css, html, js }; +} + +function setpieceBoltstrike() { + // THUNDER apex: the storm is the editor. A slate storm mood sits on the room + // from t=0 and the sky "kisses" (1-frame brighten) on every body word — + // double-kiss on emphasis words, re-flashes during the hold. Before the + // strike the room charge-dims under a radial word scrim; a hand-authored + // branched bolt (haze/glow/core stack) flashes 2 frames BEFORE the word + // (leader → return stroke at contact) with a sky flash, then the word slams + // in lit HARD (brightness 2.5 → 1) with its text-shadow flipped toward the + // bolt for the flash frames; an ozone under-glow blooms and breathes through + // the hold (loom + 2-frame lit blips on the sheet re-flashes); exit washes + // downward with the rain. + const p = dna.hero.params || {}, + I = heroIn; + const A = dna.palette.accent, // ozone / bolt haze + GL = dna.palette.glow || "#cfe8ff", // bolt glow + CORE = dna.palette.core || "#ffffff", // bolt core + HC = dna.palette.hero || dna.palette.body; + const EX = theme.hero.exitAt ?? Math.min(heroOut - 0.2, I + (p.hold ?? 2.05)); + const hpx = HG.fontPx, + halfW = HG.halfW || heroText.length * 0.28 * hpx; + // word scrim sized from the word rect (demo 1100×330 around a 720×145 word) + const scW = Math.round(2 * halfW + 380), + scH = Math.round(hpx * 2.28); + // hand-authored branched bolt (5-seg zigzag + 2 branches) measured off the + // demo cut — offsets from the word center in halfW (x) / fontPx (y) units; + // the leader always enters from above the frame + const sgn = p.side === "right" ? -1 : 1; + const kx = ((halfW || 360) / 360) * sgn, + ky = hpx / 145; + const pts = (arr, top) => + arr + .map(([dx, dy], k) => { + const x = HG.x + dx * kx; + let y = HG.y + dy * ky; + if (top && k === 0) y = Math.min(y, -25); + return `${Math.round(x)},${Math.round(y)}`; + }) + .join(" "); + const MAINP = pts( + [ + [-45, -282], + [-107, -134], + [-23, -56], + [-113, 66], + [-17, 150], + [-85, 268], + ], + true, + ); + const BAP = pts([ + [-107, -134], + [-183, -56], + [-157, 10], + ]); + const BBP = pts([ + [-113, 66], + [-187, 140], + [-163, 200], + ]); + const wS = (w) => (w * ky).toFixed(1); + const boltSvg = (color, w, wb) => + `` + + `` + + `` + + `` + + ``; + // the sky kisses on every BODY word (the hero word is consumed by the slam) + const kissData = LINES.flatMap((L) => + L.words.map((w) => [+w.start.toFixed(3), w.minor ? 1 : 0]), + ).filter(([t]) => t < DUR - 0.1); + const css = ` + #mood { position:absolute; inset:0; background:rgba(38,62,96,${p.mood ?? 0.1}); } + #dimP { position:absolute; inset:0; opacity:0; background:#0a1422; } + #kiss { position:absolute; inset:0; opacity:0; + background:linear-gradient(to bottom, rgba(222,236,255,0.95) 0%, rgba(222,236,255,0.40) 38%, rgba(222,236,255,0) 72%); } + #wordscrim { position:absolute; left:${HG.x}px; top:${HG.y}px; width:${scW}px; height:${scH}px; + margin-left:-${Math.round(scW / 2)}px; margin-top:-${Math.round(scH / 2)}px; opacity:0; border-radius:50%; + background:radial-gradient(50% 50% at 50% 50%, rgba(5,10,20,0.85) 0%, rgba(5,10,20,0.45) 55%, rgba(5,10,20,0) 100%); } + #apex { position:absolute; left:${HG.x}px; top:${HG.y}px; opacity:0; } + .aw { position:absolute; left:0; top:0; transform:translate(-50%,-50%); + font-family:'${dna.fonts.hero}', sans-serif; font-size:${hpx}px; line-height:1; + letter-spacing:0.012em; white-space:nowrap; } + #ozone { color:${A}; filter:blur(${Math.max(10, Math.round(26 * ky))}px); opacity:0; top:${Math.round(8 * ky)}px; } + #aword { color:${HC}; + text-shadow: 0 8px 26px rgba(3,8,18,0.85), 0 2px 6px rgba(3,8,18,0.7), 0 0 18px ${A}59; } + #bolt { position:absolute; inset:0; opacity:0; } + .boltlayer { position:absolute; inset:0; } + .boltlayer svg { position:absolute; inset:0; width:${W}px; height:${H}px; } + #boltHaze { filter:blur(16px); opacity:0.55; } + #boltGlow { filter:blur(5px); opacity:0.9; } + #skyflash { position:absolute; inset:0; opacity:0; + background:radial-gradient(120% 90% at 42% 22%, rgba(240,248,255,0.95) 0%, rgba(200,222,250,0.55) 45%, rgba(120,150,190,0) 100%); }`; + const html = `
+
+
+
+
+
${esc(heroText)}
+
${esc(heroText)}
+
+
+
${boltSvg(A, 22, 13)}
+
${boltSvg(GL, 9, 5)}
+
${boltSvg(CORE, 3.5, 2.2)}
+
+
`; + // breathe/loom clamp inside [contact, exit] for any clip length + const breDur = Math.max(0.6, Math.min(1.5, EX - 0.23 - (I + 0.3))); + const loomDur = Math.max(0.4, EX - 0.04 - (I + 0.74)); + const js = ` + // ---- setpiece: BOLTSTRIKE (storm charge → branched-bolt leader → word slams in lit) ---- + const I = ${I.toFixed(3)}, EXB = ${EX.toFixed(3)}; + + // distant lightning KISS: 1-frame sky brighten on every body word + const KISS = ${J(kissData)}; + KISS.forEach(([t, em]) => { + tl.set("#kiss", { opacity: 0.06 }, t); + tl.set("#kiss", { opacity: 0 }, t + F); + if (em && t + 0.20 + 3 * F < ${(DUR - 0.04).toFixed(2)}) { + // emphasis words get the sheet-lightning double kiss (matches the rail double flash) + const t0 = t + 0.20; + tl.set("#kiss", { opacity: 0.07 }, t0); + tl.set("#kiss", { opacity: 0 }, t0 + F); + tl.set("#kiss", { opacity: 0.06 }, t0 + 2 * F); + tl.set("#kiss", { opacity: 0 }, t0 + 3 * F); + } + }); + // sheet re-flashes during the apex hold + [I + 0.84, I + 1.44].forEach((t) => { + if (t < EXB - 0.2) { tl.set("#kiss", { opacity: 0.08 }, t); tl.set("#kiss", { opacity: 0 }, t + F); } + }); + + // CHARGE: the storm gathers before the strike (ends before the bolt frames) + tl.fromTo("#dimP", { opacity: 0 }, { opacity: ${dna.plate.charge || 0.3}, duration: 0.30, ease: "power2.in" }, I - 0.39); + tl.fromTo("#wordscrim", { opacity: 0 }, { opacity: 0.42, duration: 0.30, ease: "power2.in" }, I - 0.39); + + // THE STRIKE: bolt flashes 2 frames before the word, return stroke at contact + tl.set("#bolt", { opacity: 1 }, I - 2 * F); + tl.set("#bolt", { opacity: 0.35 }, I - F); + tl.set("#bolt", { opacity: 1 }, I); + tl.to("#bolt", { opacity: 0, duration: 0.07, ease: "power2.in" }, I + 0.045); + + tl.set("#skyflash", { opacity: 0.26 }, I - 2 * F); + tl.set("#skyflash", { opacity: 0.10 }, I - F); + tl.set("#skyflash", { opacity: 0.30 }, I + 0.02); + tl.to("#skyflash", { opacity: 0, duration: 0.22, ease: "expo.out" }, I + 0.06); + + // dim released by the flash, settles to a storm hold, lifts at the end + tl.set("#dimP", { opacity: 0.08 }, I - 2 * F); + tl.to("#dimP", { opacity: ${dna.plate.dim || 0.22}, duration: 0.25, ease: "power2.out" }, I + 0.10); + tl.to("#dimP", { opacity: 0, duration: 0.40, ease: "power1.in" }, EXB - 0.14); + tl.set("#wordscrim", { opacity: 0.32 }, I - 2 * F); + tl.to("#wordscrim", { opacity: 0.36, duration: 0.30 }, I + 0.10); + tl.to("#wordscrim", { opacity: 0, duration: 0.30 }, EXB - 0.04); + + // APEX WORD: slam transit → contact squash (2 frames) → elastic settle + tl.set("#apex", { opacity: 1 }, I - 2 * F); + tl.fromTo("#apex", { scale: 3.1 }, { scale: 1, duration: 0.105, ease: "power4.in" }, I - 2 * F); + tl.fromTo("#aword", { filter: "blur(14px) brightness(3.2)" }, + { filter: "blur(0px) brightness(2.5)", duration: 0.105, ease: "power4.in" }, I - 2 * F); + tl.set("#apex", { scaleX: 1.10, scaleY: 0.90 }, I + 0.025); + tl.to("#apex", { scaleX: 1, scaleY: 1, duration: 0.55, ease: "elastic.out(1.05, 0.34)" }, I + 0.025 + 2 * F); + // lit HARD for 2 frames, then cools + tl.to("#aword", { filter: "blur(0px) brightness(1)", duration: 0.45, ease: "power2.out" }, I + 0.025 + 2 * F); + + // SIGNATURE: shadow flips toward the bolt (light from the strike side) for the flash frames + tl.set("#aword", { textShadow: "${16 * sgn}px 6px 18px rgba(2,6,14,0.9), ${4 * sgn}px 2px 6px rgba(2,6,14,0.75), 0 0 26px ${A}b3" }, I - 2 * F); + tl.set("#aword", { textShadow: "0 8px 26px rgba(3,8,18,0.85), 0 2px 6px rgba(3,8,18,0.7), 0 0 18px ${A}59" }, I + 0.09); + + // ozone under-glow blooms with the hit, breathes during hold + tl.set("#ozone", { opacity: 0.85 }, I + 0.02); + tl.to("#ozone", { keyframes: { opacity: [0.85, 0.5, 0.65, 0.42, 0.55, 0.38] }, + duration: ${breDur.toFixed(2)}, ease: "none" }, I + 0.30); + tl.to("#ozone", { opacity: 0.32, duration: 0.18 }, EXB - 0.22); + + // hold life: loom + 2-frame lit blips on the sheet re-flashes + tl.to("#apex", { scale: 1.035, duration: ${loomDur.toFixed(2)}, ease: "power1.inOut" }, I + 0.74); + [[I + 0.84, 1.45], [I + 1.44, 1.35]].forEach(([t, b2]) => { + if (t < EXB - 0.2) { + tl.set("#aword", { filter: "brightness(" + b2 + ")" }, t); + tl.set("#aword", { filter: "brightness(1)" }, t + F); + } + }); + + // EXIT: washes downward with the rain + tl.to("#apex", { y: 38, opacity: 0, filter: "blur(6px)", duration: 0.22, ease: "power2.in" }, EXB); + tl.set("#apex", { display: "none" }, ${Math.min(EX + 0.26, DUR - 0.02).toFixed(3)});`; + return { css, html, js }; +} + +function setpieceHoloboot() { + // HOLOGRAM apex: full volumetric boot behind the subject. A desk emitter dot + // pops, the projection cone SNAPS wide (scaleX expo), a seed beam fires up + // from the emitter, and the word boots with a RISING clip sweep (opacity is + // instant — the reveal is a wipe) into a 7-layer projection stack (dark + // backing shadow / wide glow / magenta+cyan chromatic fringes / core / + // scanline mask / climbing interference bands). Contact = over-bright flash + // + squash held 2 frames + elastic settle + 1-frame x interference jumps; + // fringes blow wide then settle to a constant registration offset. Hold + // life: bands climb, rotationY oscillates, glow/cone breathe, emitter dot + // pulses, slow loom; a hand "passes through" the projection (skew + blur + + // fringe blowout, pure projection logic). Exit: the projector cut — the + // word collapses to a horizontal line, then to the base dot. A second, + // smaller emitter cone rises from the desk under the holorail plate all + // video (the body rail is cast from the SAME projector grammar). + const p = dna.hero.params || {}, + I = heroIn; + const A = dna.palette.accent, + MG = dna.palette.magenta || "#ff5fd6"; + const GLOW = dna.palette.glow || "#3eccf2", + CORE = dna.palette.core || "#eafbff"; + const fpx = HG.fontPx, + halfW = Math.round(HG.halfW || heroText.length * 0.4 * fpx), + cx = HG.x, + cy = HG.y; + const k = fpx / 118; // demo scale unit (Orbitron 700 @ 118px) + // apex rig geometry derives from the word rect + const coneW = Math.min(2 * halfW + 80, W - 40); + const coneTop = Math.round(cy - 0.55 * fpx); + const emitY = Math.min(H - 30, Math.round(cy + 2.4 * fpx)); + const coneH = emitY - coneTop; + const beamTop = coneTop + 40, + beamH = emitY - beamTop; + const cxP = ((cx / W) * 100).toFixed(1), + cyP = ((cy / H) * 100).toFixed(1); + // body-zone projector under the holorail plate (cone behind the subject) + const plateBot = Math.round(H - (dna.body.bottomPx || 108) + (dna.body.plateH || 96) / 2); + const bcW = p.coneW || 800, + bcTop = plateBot - 4, + bcH = H - bcTop - 4; + // interference-band pitch scales with the type + const bandH = Math.max(20, Math.round(fpx * 0.39)); + const bp = (f) => Math.round(bandH * f); + // projector-cut exit + hold-life windows (all runway-clamped) + const cutT = +Math.min(heroOut - 0.22, DUR - 0.3).toFixed(3); + const C = I + 0.07; // contact + const holdD = +Math.max(0.6, Math.min(1.72, cutT - 0.05 - (I + 0.24))).toFixed(2); + const holdD2 = +Math.max(0.5, holdD - 0.1).toFixed(2); + const reactD = +Math.max(0.3, Math.min(0.9, cutT - 0.3 - (I + 0.24))).toFixed(2); + const loomD = +Math.min(0.62, Math.max(0.2, cutT - 0.3 - (I + 0.74))).toFixed(2); + // the hand-pass needs the loom done (scale channel) and clear exit runway + const passT = +Math.max(I + (p.passAt ?? 1.29), I + 1.25).toFixed(3); + const doPass = passT + 0.65 < cutT - 0.05; + const css = ` + #dimH { position:absolute; inset:0; opacity:0; background:#02101a; } + #scrimH { position:absolute; inset:0; opacity:0; + background: radial-gradient(58% 46% at ${cxP}% ${cyP}%, rgba(2,9,15,0.88) 0%, rgba(2,9,15,0.55) 48%, rgba(2,9,15,0) 78%); } + #bcone { position:absolute; left:${Math.round(W / 2 - bcW / 2)}px; top:${bcTop}px; width:${bcW}px; height:${bcH}px; opacity:0; + clip-path: polygon(0% 0%, 100% 0%, 51.6% 100%, 48.4% 100%); + background: linear-gradient(to top, ${A}4d 0%, ${A}1a 55%, ${A}05 100%); } + #bdot { position:absolute; left:${Math.round(W / 2 - 4.5)}px; top:${H - 10}px; width:9px; height:9px; border-radius:50%; + background:${dna.palette.dot || "#bff0ff"}; opacity:0; + box-shadow: 0 0 10px ${A}e6, 0 0 24px ${A}8c; } + #apxcone { position:absolute; left:${Math.round(cx - coneW / 2)}px; top:${coneTop}px; width:${coneW}px; height:${coneH}px; opacity:0; + clip-path: polygon(0% 0%, 100% 0%, 53% 100%, 47% 100%); + background: linear-gradient(to top, ${A}57 0%, ${A}1f 50%, ${A}05 100%); } + #apxbeam { position:absolute; left:${Math.round(cx - 2.5)}px; top:${beamTop}px; width:5px; height:${beamH}px; opacity:0; + background: linear-gradient(to top, ${CORE}f2, ${CORE}1f); + filter: blur(0.6px); } + #apxdot { position:absolute; left:${Math.round(cx - 6.5)}px; top:${emitY - 6}px; width:13px; height:13px; border-radius:50%; + background:${dna.palette.dotHot || "#dff8ff"}; opacity:0; + box-shadow: 0 0 12px ${A}f2, 0 0 34px ${A}99; } + #apx { position:absolute; left:${cx}px; top:${cy}px; opacity:0; } + #apxclip { position:relative; } + .aw { font-family:'${dna.fonts.hero}', sans-serif; font-weight:700; font-size:${fpx}px; line-height:1; + letter-spacing:0; white-space:nowrap; } + #adark { position:absolute; left:0; top:${Math.max(2, Math.round(3 * k))}px; color:rgba(1,12,20,0.92); + filter:blur(${Math.max(4, Math.round(7 * k))}px); transform:scale(1.03); } + #aglow { position:absolute; left:0; top:0; color:${GLOW}f2; + filter:blur(${Math.max(8, Math.round(16 * k))}px); transform:scale(1.05); opacity:0.55; } + #cmag { position:absolute; left:0; top:0; color:${MG}8c; } + #ccyn { position:absolute; left:0; top:0; color:${A}99; } + #acore { position:relative; color:${CORE}; + text-shadow: 0 0 22px ${A}73, 0 3px 14px rgba(1,10,16,0.55); } + #ascan { position:absolute; left:0; top:0; color:transparent; + -webkit-background-clip:text; background-clip:text; + background-image: repeating-linear-gradient(180deg, rgba(0,0,0,0) 0px, rgba(0,0,0,0) 2.5px, rgba(2,12,18,0.62) 2.5px, rgba(2,12,18,0.62) 4px); } + #abands { position:absolute; left:0; top:0; color:transparent; opacity:0; + -webkit-background-clip:text; background-clip:text; + background-image: repeating-linear-gradient(180deg, rgba(255,255,255,0) 0px, rgba(255,255,255,0) ${bp(0.717)}px, ${dna.palette.band || "#d8faff"}f2 ${bp(0.783)}px, ${dna.palette.band || "#d8faff"}f2 ${bp(0.87)}px, rgba(255,255,255,0) ${bp(0.935)}px, rgba(255,255,255,0) ${bandH}px); + background-size: 100% ${bandH}px; }`; + const html = `
+
+
+
+
+
+
+
+
+
${esc(heroText)}
+
${esc(heroText)}
+
${esc(heroText)}
+
${esc(heroText)}
+
${esc(heroText)}
+
${esc(heroText)}
+
${esc(heroText)}
+
+
`; + // body-projector flicker cycles, baked to the clip length + const coneFlicks = []; + for (let t = 0.6; t + 2.2 <= DUR - 0.25; t += 2.3) coneFlicks.push(+t.toFixed(2)); + const dotPulses = []; + let dt = 0.5; + for (; dt + 2.0 <= DUR - 0.3; dt += 2.15) dotPulses.push(+dt.toFixed(2)); + const dotTail = dt + 1.0 <= DUR - 0.24 ? +dt.toFixed(2) : null; + const js = ` + // ---- setpiece: HOLOBOOT (emitter pop → cone snap → seed beam → rising-sweep word boot) ---- + const I = ${I.toFixed(3)}, CUT = ${cutT.toFixed(3)}; + gsap.set("#apx", { xPercent: -50, yPercent: -50, transformPerspective: 900, transformOrigin: "50% 50%" }); + gsap.set("#apxcone", { transformOrigin: "50% 100%" }); + gsap.set("#apxbeam", { transformOrigin: "50% 100%" }); + gsap.set("#bcone", { transformOrigin: "50% 100%" }); + gsap.set("#apxclip", { clipPath: "inset(100% 0% 0% 0%)" }); + + // ===== body-zone projector boots with the rail (cone behind the subject) + tl.set("#bdot", { opacity: 1 }, 0.06); + tl.fromTo("#bdot", { scale: 0.2 }, { scale: 1, duration: 0.12, ease: "back.out(2)" }, 0.06); + tl.set("#bcone", { opacity: 0.9 }, 0.08); + tl.fromTo("#bcone", { scaleY: 0.05 }, { scaleY: 1, duration: 0.14, ease: "expo.out" }, 0.08); + tl.set("#bcone", { opacity: 0.5 }, 0.22); + tl.set("#bcone", { opacity: 0.9 }, 0.26); + ${J(coneFlicks)}.forEach((t, i) => { + tl.to("#bcone", { keyframes: { opacity: i % 2 ? [0.86, 0.72, 0.84, 0.7, 0.84] : [0.9, 0.74, 0.86, 0.72, 0.86] }, + duration: 2.2, ease: "none" }, t); + }); + ${J(dotPulses)}.forEach((t) => { + tl.to("#bdot", { keyframes: { scale: [1, 1.3, 1, 1.25, 1] }, duration: 2.0, ease: "none" }, t); + }); + ${dotTail != null ? `tl.to("#bdot", { keyframes: { scale: [1, 1.25, 1] }, duration: 1.0, ease: "none" }, ${dotTail});` : ""} + // projector cut at the very end + tl.to("#bcone", { opacity: 0, duration: 0.18, ease: "power1.in" }, ${(DUR - 0.2).toFixed(3)}); + tl.set("#bdot", { scale: 1.6 }, ${(DUR - 0.12).toFixed(3)}); + tl.set("#bdot", { opacity: 0 }, ${(DUR - 0.05).toFixed(3)}); + + // ===== scene reaction: the room dims while the volumetric apex burns + tl.fromTo("#scrimH", { opacity: 0 }, { opacity: ${dna.plate.scrim ?? 0.58}, duration: 0.34, ease: "power2.in" }, I - 0.21); + tl.set("#dimH", { opacity: ${dna.plate.charge ?? 0.28} }, I - 0.05); + tl.to("#dimH", { opacity: ${dna.plate.dim ?? 0.18}, duration: ${reactD}, ease: "power2.out" }, I + 0.24); + tl.to("#scrimH", { opacity: ${((dna.plate.scrim ?? 0.58) * 0.79).toFixed(2)}, duration: ${reactD}, ease: "power2.out" }, I + 0.24); + tl.to(["#dimH","#scrimH"], { opacity: 0, duration: 0.4, ease: "power1.in" }, CUT - 0.12); + + // ===== APEX: full volumetric boot + // 1. emitter dot pops, cone SNAPS wide + tl.set("#apxdot", { opacity: 1 }, I - 0.135); + tl.fromTo("#apxdot", { scale: 0.2 }, { scale: 1, duration: 0.12, ease: "back.out(2.4)" }, I - 0.135); + tl.set("#apxcone", { opacity: 1 }, I - 0.125); + tl.fromTo("#apxcone", { scaleX: 0.07 }, { scaleX: 1, duration: 0.11, ease: "expo.out" }, I - 0.125); + tl.set("#apxcone", { opacity: 0.55 }, I - 0.01); + tl.set("#apxcone", { opacity: 0.95 }, I + 0.035); + // 2. seed beam fires up from the emitter + tl.set("#apxbeam", { opacity: 1 }, I - 0.095); + tl.fromTo("#apxbeam", { scaleY: 0 }, { scaleY: 1, duration: 0.085, ease: "power3.in" }, I - 0.095); + tl.to("#apxbeam", { opacity: 0, duration: 0.3, ease: "power1.in" }, I + 0.11); + // 3. the word boots with a RISING sweep (opacity instant, reveal is a wipe) + tl.set("#apx", { opacity: 1 }, I - 0.055); + tl.to("#apxclip", { clipPath: "inset(0% 0% 0% 0%)", duration: 0.125, ease: "power2.in" }, I - 0.055); + tl.set("#apxclip", { clipPath: "none" }, I + 0.08); // free the glow bloom after the sweep + // 4. contact: over-bright flash + squash held 2 frames + elastic settle + tl.set("#apxclip", { filter: "brightness(2.3)" }, ${C.toFixed(3)}); + tl.to("#apxclip", { filter: "brightness(1)", duration: 0.36, ease: "power2.out" }, ${(C + 0.05).toFixed(3)}); + tl.set("#apx", { scaleX: 1.07, scaleY: 0.91 }, ${C.toFixed(3)}); + tl.to("#apx", { scaleX: 1, scaleY: 1, duration: 0.5, ease: "elastic.out(1, 0.38)" }, ${(C + 0.084).toFixed(3)}); + // interference glitch on arrival (1-frame x jumps) + tl.set("#apxclip", { x: 3 }, ${(C + 0.02).toFixed(3)}); + tl.set("#apxclip", { x: -3 }, ${(C + 0.062).toFixed(3)}); + tl.set("#apxclip", { x: 0 }, ${(C + 0.104).toFixed(3)}); + // chromatic fringes blow wide then settle to the constant offset + tl.fromTo("#cmag", { x: -8 }, { x: -2, duration: 0.4, ease: "power2.out" }, ${C.toFixed(3)}); + tl.fromTo("#ccyn", { x: 8 }, { x: 2, duration: 0.4, ease: "power2.out" }, ${C.toFixed(3)}); + + // ===== hold life: interference bands climb, rotateY oscillates, glow breathes, loom + tl.set("#abands", { opacity: 0.55, backgroundPosition: "0px 0px" }, I + 0.24); + tl.to("#abands", { backgroundPosition: "0px -${6 * bandH}px", duration: ${holdD}, ease: "none" }, I + 0.24); + tl.to("#apx", { keyframes: { rotationY: [0, 6, -7, 5, 0] }, duration: ${holdD}, ease: "none" }, I + 0.24); + tl.to("#aglow", { keyframes: { opacity: [0.55, 0.4, 0.52, 0.38, 0.5] }, duration: ${holdD2}, ease: "none" }, I + 0.29); + tl.to("#apxcone", { keyframes: { opacity: [0.95, 0.78, 0.9, 0.76, 0.88] }, duration: ${holdD2}, ease: "none" }, I + 0.29); + tl.to("#apxdot", { keyframes: { scale: [1, 1.4, 1, 1.35, 1, 1.3, 1] }, duration: ${holdD2}, ease: "none" }, I + 0.29); + ${loomD >= 0.2 ? `tl.to("#apx", { scale: 1.028, duration: ${loomD}, ease: "sine.inOut" }, I + 0.74);` : ""} +${ + doPass + ? ` + // ===== a hand "passes through" the projection: pure projection logic + const P = ${passT.toFixed(3)}; + tl.set("#apx", { skewX: 6 }, P); + tl.set("#apxclip", { filter: "blur(2.5px) brightness(1.35)" }, P); + tl.set("#cmag", { x: -7 }, P); + tl.set("#ccyn", { x: 7 }, P); + tl.set("#apx", { skewX: -4 }, P + 0.042); + tl.set("#apxclip", { filter: "blur(1px)" }, P + 0.083); + tl.set("#apx", { skewX: 0 }, P + 0.125); + tl.set("#apxclip", { filter: "none" }, P + 0.125); + tl.to("#cmag", { x: -2, duration: 0.18, ease: "power2.out" }, P + 0.05); + tl.to("#ccyn", { x: 2, duration: 0.18, ease: "power2.out" }, P + 0.05); + tl.set("#apx", { scaleY: 0.97 }, P + 0.13); + tl.to("#apx", { scaleY: 1, duration: 0.3, ease: "elastic.out(1, 0.4)" }, P + 0.172);` + : "" +} + + // ===== EXIT: projector cut — collapse to a horizontal line, then to the base dot + tl.set("#apxclip", { filter: "brightness(2.4)" }, CUT - 0.02); + tl.to("#apx", { scaleY: 0.018, duration: 0.09, ease: "power3.in" }, CUT); + tl.to("#apx", { scaleX: 0.015, duration: 0.075, ease: "power3.in" }, CUT + 0.10); + tl.set("#apx", { opacity: 0 }, CUT + 0.18); + tl.to("#apxcone", { opacity: 0, duration: 0.16, ease: "power1.in" }, CUT + 0.02); + tl.set("#apxdot", { scale: 2.2 }, CUT + 0.12); + tl.to("#apxdot", { opacity: 0, duration: 0.09, ease: "power2.in" }, CUT + 0.18);`; + return { css, html, js }; +} + +function setpieceBiobloom() { + // BIOLUME apex: a bioluminescent BLOOM behind the subject. The abyss grade + // (params.mood) + a breathing vignette sit on the room from t=0 — the world + // IS underwater before anything speaks. A creature pre-glow gathers with a + // double-beat anticipation and crushes to a point; a dark pocket scrim + // (plate.scrim) opens behind the word zone; the word CONDENSES in (scale + // 2.35 crush power4.in 0.11s, blur 15→2, brightness 2.6→1.7) → 2-frame + // contact squash → elastic settle while cyan light SPILLS onto the scene; + // 6 luminous tendrils (blurred SVG strokes, cyan/violet alternating) draw + // outward from the word rect, staggered; through the hold the glow breathes + // 8–14%, two counter-drifting caustic gradients shimmer over the text zone + // and the bloom drifts slowly with the current (params.drift). Exit: the + // light SINKS — every glowing thing drifts down while dimming. Tendril + // geometry is hand-authored from the demo and baked at compile time as + // offsets from the word center (halfW/x × fontPx/120 units, frame-clamped). + const p = dna.hero.params || {}, + I = heroIn; + const A = dna.palette.accent, + VIO = dna.palette.violet || "#9d7bff", + ICE = dna.palette.ice || "#8fe8ff", + CORE = dna.palette.core || "#f2fffd"; + const fpx = HG.fontPx, + halfW = Math.round(HG.halfW || heroText.length * 0.33 * fpx), + cx = HG.x, + cy = HG.y; + const ky = fpx / 120; // demo scale unit (Fredoka 700 @ 120px) + const demoHalf = (wordPx("RECOVER", dna.fonts.hero, 120, 0.01) || 562) / 2; + const kx = halfW / demoHalf; + const TX = (x) => Math.round(Math.max(16, Math.min(W - 16, cx + (x - 560) * kx))); + const TY = (y) => Math.round(Math.max(16, Math.min(H - 16, cy + (y - 300) * ky))); + // 6 tendril cubics: anchors on the word rect edge, filaments reaching out + const TENDRILS = [ + [ + [340, 268], + [255, 230], + [195, 185], + [135, 110], + ], + [ + [525, 244], + [500, 185], + [560, 140], + [520, 70], + ], + [ + [725, 262], + [795, 222], + [850, 180], + [915, 112], + ], + [ + [365, 332], + [280, 372], + [215, 425], + [150, 492], + ], + [ + [580, 352], + [605, 415], + [545, 465], + [585, 530], + ], + [ + [715, 335], + [790, 380], + [855, 425], + [920, 475], + ], + ].map((pts) => { + const q = pts.map(([x, y]) => TX(x) + " " + TY(y)); + return `M ${q[0]} C ${q[1]}, ${q[2]}, ${q[3]}`; + }); + const TCOL = [A, VIO, ICE, A, VIO, A]; + const C = +(I + (p.crush ?? 0.11)).toFixed(3); // contact + const SINK = +Math.min(heroOut - 0.2, DUR - 0.3).toFixed(3); + // tendril stagger auto-clamps so the last filament completes before the sink + const stag = +Math.max(0.02, Math.min(0.05, (SINK - 0.46 - (C + 0.02)) / 5)).toFixed(3); + const breatheD = +Math.min(0.72, Math.max(0.3, DUR - 0.06 - (C + 0.12))).toFixed(2); + const flickD = +Math.min(0.7, SINK - 0.02 - (C + 0.34)).toFixed(2); + const shimD = +Math.min(0.5, Math.max(0.2, SINK + 0.03 - (C + 0.21))).toFixed(2); + const driftD = +Math.min(0.64, Math.max(0.2, SINK - (I + 0.21))).toFixed(2); + const wordFlickT = I + 0.59 + 0.32 <= SINK + 0.05 ? +(I + 0.59).toFixed(3) : null; + // geometry derived from the word rect + const pkW = Math.round(2 * halfW + 280), + pkH = Math.round(2.5 * fpx); + const pgW = Math.round(1.083 * fpx), + pgH = Math.round(0.717 * fpx); + const cxP = ((cx / W) * 100).toFixed(1), + cyP = ((cy / H) * 100).toFixed(1); + const css = ` + #abyss { position:absolute; inset:0; opacity:${p.mood ?? 0.92}; + background:linear-gradient(180deg, rgba(3,11,26,0.52) 0%, rgba(3,11,26,0.30) 30%, + rgba(4,9,20,0.10) 52%, rgba(2,7,16,0.18) 78%, rgba(1,5,12,0.34) 100%); } + #vig { position:absolute; inset:0; opacity:0.75; + background:radial-gradient(120% 110% at 50% 46%, rgba(0,0,0,0) 36%, + rgba(2,8,20,0.45) 66%, rgba(1,4,12,0.95) 100%); } + #pocket { position:absolute; left:${cx - Math.round(pkW / 2)}px; top:${cy - Math.round(pkH / 2)}px; + width:${pkW}px; height:${pkH}px; opacity:0; + background:radial-gradient(50% 50% at 50% 50%, rgba(1,8,18,0.72) 0%, + rgba(1,8,18,0.40) 55%, rgba(1,8,18,0) 78%); } + #spill { position:absolute; inset:0; opacity:0; + background:radial-gradient(58% 46% at ${cxP}% ${cyP}%, ${A}80 0%, + ${A}2b 42%, ${A}00 74%); } + .cau { position:absolute; left:${Math.round(W * 0.0625)}px; top:${Math.round(H * 0.069)}px; + width:${Math.round(W * 0.781)}px; height:${Math.round(H * 0.75)}px; opacity:0; } + #cauA { background:radial-gradient(46% 42% at 42% 46%, ${ICE}d9 0%, ${ICE}00 68%); } + #cauB { background:radial-gradient(44% 46% at 58% 52%, ${VIO}bf 0%, ${VIO}00 66%); } + #preglow { position:absolute; left:${cx}px; top:${cy}px; width:${pgW}px; height:${pgH}px; + margin-left:-${Math.round(pgW / 2)}px; margin-top:-${Math.round(pgH / 2)}px; + border-radius:50%; opacity:0; + background:radial-gradient(50% 50% at 50% 50%, rgba(170,255,242,0.95) 0%, + ${A}80 45%, ${A}00 75%); + filter:blur(${Math.max(6, Math.round(10 * ky))}px); } + #tndwrap { position:absolute; inset:0; } + #tnd { position:absolute; inset:0; width:${W}px; height:${H}px; } + #gGlow { filter:blur(5px); } + #gCore { filter:blur(1.1px); } + #tnd path { fill:none; stroke-linecap:round; opacity:0; } + #apex { position:absolute; left:${cx}px; top:${cy}px; opacity:0; } + .aw { position:absolute; left:0; top:0; white-space:nowrap; + font-family:'${dna.fonts.hero}', sans-serif; font-weight:700; font-size:${fpx}px; + line-height:1; letter-spacing:0.01em; } + #aglow { color:${A}; filter:blur(${Math.max(10, Math.round(18 * ky))}px); opacity:0; } + #aword { color:${CORE}; + text-shadow: 0 0 ${Math.round(18 * ky)}px ${A}f2, 0 0 ${Math.round(46 * ky)}px ${A}8c, + 0 0 ${Math.round(100 * ky)}px ${VIO}80, 0 4px ${Math.round(22 * ky)}px rgba(1,8,16,0.7); }`; + const html = `
+
+
+
+
+
+
+
+ + + + +
+
+
${esc(heroText)}
+
${esc(heroText)}
+
`; + const js = ` + // ---- setpiece: BIOBLOOM (pre-glow gathers → word condenses → tendrils draw → light sinks) ---- + const BI = ${I.toFixed(3)}, BC = ${C.toFixed(3)}, SINK = ${SINK.toFixed(3)}; + gsap.set(["#aglow", "#aword"], { xPercent: -50, yPercent: -50 }); + gsap.set("#apex", { transformOrigin: "0px 0px" }); + gsap.set("#preglow", { scale: 0.6 }); + + // ===== the abyss breathes (whole clip) ===== + tl.to("#vig", { keyframes: { opacity: [0.8, 0.72, 0.83, 0.74, 0.81, 0.76] }, + duration: ${(DUR - 0.09).toFixed(2)}, ease: "sine.inOut" }, 0.03); + + // ===== light tendrils (SVG, drawn outward from the word rect) ===== + const TND = ${J(TENDRILS)}; + const TCOL = ${J(TCOL)}; + const NS = "http://www.w3.org/2000/svg"; + const gGlow = document.getElementById("gGlow"); + const gCore = document.getElementById("gCore"); + const tpaths = []; + TND.forEach((d, i) => { + const mk = (g, w) => { + const pp = document.createElementNS(NS, "path"); + pp.setAttribute("d", d); pp.setAttribute("stroke", TCOL[i]); + pp.setAttribute("stroke-width", w); g.appendChild(pp); + const L = pp.getTotalLength(); + gsap.set(pp, { strokeDasharray: L, strokeDashoffset: L }); + return pp; + }; + tpaths.push([mk(gGlow, ${Math.max(6, Math.round(9 * ky))}), mk(gCore, ${Math.max(2, Math.round(3 * ky))})]); + }); + + // ===== anticipation: a creature approaches — double-beat pre-glow ===== + tl.to("#preglow", { keyframes: { opacity: [0.34, 0.14, 0.46, 0.34], + scale: [0.9, 0.72, 1.08, 0.95] }, + duration: 0.19, ease: "sine.inOut" }, ${Math.max(0.05, I - 0.31).toFixed(3)}); + tl.to("#preglow", { scale: 0.32, opacity: 0.95, duration: 0.1, ease: "power4.in" }, ${Math.max(0.17, I - 0.115).toFixed(3)}); + tl.set("#preglow", { opacity: 0 }, BI); + tl.to("#pocket", { opacity: ${dna.plate.scrim ?? 0.55}, duration: 0.22, ease: "power2.out" }, BI - 0.03); + + // ===== bloom arrival: crush -> contact squash (2f) -> elastic settle ===== + tl.set("#apex", { opacity: 1 }, BI); + tl.fromTo("#apex", { scale: 2.35 }, { scale: 1.0, duration: ${(C - I).toFixed(3)}, ease: "power4.in" }, BI); + tl.fromTo("#aword", { filter: "blur(15px) brightness(2.6)" }, + { filter: "blur(2px) brightness(1.7)", duration: ${(C - I).toFixed(3)}, ease: "power4.in" }, BI); + tl.set("#apex", { scaleX: 1.09, scaleY: 0.93 }, BC); + tl.set("#aword", { filter: "blur(0px) brightness(1.85)" }, BC); + tl.set("#aglow", { opacity: 0.9 }, BC); + tl.set("#spill", { opacity: 0.55 }, BC); + tl.to("#apex", { scaleX: 1, scaleY: 1, duration: 0.5, ease: "elastic.out(1, 0.42)" }, BC + 0.085); + tl.to("#aword", { filter: "blur(0px) brightness(1.45)", duration: 0.34, ease: "power2.out" }, BC + 0.1); + tl.to("#spill", { opacity: 0.2, duration: 0.12, ease: "expo.out" }, BC + 0.07); + + // ===== tendrils draw outward, staggered ===== + tpaths.forEach(([pg, pc], i) => { + const t0 = BC + 0.02 + i * ${stag}; + tl.set(pg, { opacity: 0.5 }, t0); + tl.set(pc, { opacity: 0.95 }, t0); + tl.to([pg, pc], { strokeDashoffset: 0, duration: 0.42, ease: "power2.out" }, t0); + }); +${ + flickD >= 0.25 + ? ` tl.to("#gGlow", { keyframes: { opacity: [0.78, 1, 0.72, 1, 0.82] }, + duration: ${flickD}, ease: "sine.inOut" }, BC + 0.34);` + : "" +} + + // ===== hold: glow breathes strongly (8-14%), caustics counter-drift ===== + tl.to("#aglow", { keyframes: { scale: [1.1, 1.04, 1.13, 1.07], + opacity: [0.78, 0.9, 0.7, 0.85] }, + duration: ${breatheD}, ease: "sine.inOut" }, BC + 0.12); +${ + wordFlickT != null + ? ` tl.to("#aword", { keyframes: { filter: ["blur(0px) brightness(1.6)", "blur(0px) brightness(1.4)", + "blur(0px) brightness(1.62)", "blur(0px) brightness(1.5)"] }, + duration: 0.32, ease: "sine.inOut" }, ${wordFlickT.toFixed(3)});` + : "" +} + tl.to("#cauA", { opacity: 0.06, duration: 0.3, ease: "power1.out" }, BC + 0.02); + tl.to("#cauB", { opacity: 0.06, duration: 0.3, ease: "power1.out" }, BC + 0.07); + tl.fromTo("#cauA", { x: -45 }, { x: 85, duration: ${Math.min(0.95, DUR - 0.06 - (C + 0.02)).toFixed(2)}, ease: "none" }, BC + 0.02); + tl.fromTo("#cauB", { x: 55 }, { x: -75, duration: ${Math.min(0.95, DUR - 0.06 - (C + 0.02)).toFixed(2)}, ease: "none" }, BC + 0.02); + tl.to("#spill", { keyframes: { opacity: [0.13, 0.19, 0.15] }, + duration: ${shimD}, ease: "sine.inOut" }, BC + 0.21); + // deep-sea current: the bloom drifts slowly, revealing letters from behind + // the subject (x channel otherwise unused on #apex) + tl.to("#apex", { x: ${p.drift ?? -30}, duration: ${driftD}, ease: "sine.out" }, BI + 0.21); + + // ===== exit: the light SINKS back into the deep ===== + tl.to("#tndwrap", { y: 14, opacity: 0, duration: 0.2, ease: "power2.in" }, SINK); + tl.to(["#cauA", "#cauB"], { opacity: 0, duration: 0.18, ease: "power1.in" }, SINK + 0.04); + tl.to(["#pocket", "#spill"], { opacity: 0, duration: 0.22, ease: "power1.in" }, SINK + 0.04); + tl.to("#apex", { y: 26, opacity: 0, duration: 0.2, ease: "power2.in" }, SINK + 0.06); + tl.to("#aword", { filter: "blur(6px) brightness(1.2)", duration: 0.2, ease: "power1.in" }, SINK + 0.06); + tl.set("#apex", { display: "none" }, ${Math.min(SINK + 0.28, DUR - 0.02).toFixed(3)});`; + return { css, html, js }; +} + +function setpieceSilkribbon() { + // ---- setpiece: SILKRIBBON (aurora silk written into the night sky) ---- + // The hero word is WRITTEN behind the subject as a silk ribbon: sequential + // Hershey-stroke reveal (one per pen stroke, constant pen speed) in + // a blurred halo + tight core, BOTH stroked by ONE userSpaceOnUse aurora + // linearGradient (rose→teal→violet, reflect spread). SIGNATURE: the + // gradient's x1/x2 translate f(t) from I−0.07 to the end so the aurora + // colors FLOW THROUGH the drawn ribbon during the hold. A soft light mote + // (blurred halo + core dot) rides the pen, hops at lifts, and blooms out + // at the final stroke. Scene reaction: two huge aurora blobs drift the sky + // f(t) from t=0 (~params.wash) and DEEPEN as the ribbon writes; a top + // scrim (plate.scrim) charges in at I−0.34 (sky washout guard); a light + // spill tints the sky once the ribbon completes, flickering gently; the + // halo breathes through the hold. Gentle — no shake, no contact squash: + // the apex verb is the writing itself. + const h = dna.hero, + p = h.params, + I = heroIn; + // stroke path baked at COMPILE time — any word, zero tuning (drawon pattern) + const fontPath = path.join(SKILL, "assets/strokefonts", dna.fonts.strokeFont); + const gen = path.join(SKILL, "scripts/gen-stroke-path.py"); + const tw = HG.ribbonW || Math.min(p.targetWidth || 880, W - 240); + const svgW = tw + 130, + svgH = 280; + const D = execFileSync( + "python3", + [ + gen, + fontPath, + heroDisplay.toLowerCase(), + String(tw), + "200", + String(Math.round((svgW - tw) / 2)), + ], + { encoding: "utf8" }, + ).trim(); + const ENDT = +(DUR - 0.04).toFixed(3); + // writing window: keep the demo's 0.68s unless the hero lands too late to + // finish + hold before the end of the clip + const WIN = Math.min(p.window || 0.68, Math.max(0.36, ENDT - 0.42 - I)); + const ROSE = dna.palette.rose, + TEAL = dna.palette.accent, + VIO = dna.palette.violet, + DEEP = dna.palette.deep || "#070C24"; + const scrim = (dna.plate || {}).scrim ?? 0.72; + // aurora gradient span rides the ribbon ink (demo: 560 over 880, shift 1.5×span) + const gx1 = Math.round((svgW - tw) / 2), + span = Math.round(tw * 0.6364); + const spillW = tw + 60, + spillH = Math.round((tw + 60) * 0.51); + const css = ` + .aur { position:absolute; border-radius:50%; opacity:0; will-change:transform; } + #aurA { left:${Math.round(-0.141 * W)}px; top:${Math.round(-0.278 * H)}px; width:${Math.round(0.859 * W)}px; height:${Math.round(0.778 * H)}px; + background: radial-gradient(50% 50% at 50% 50%, ${TEAL}d9 0%, ${TEAL}00 70%); } + #aurB { left:${Math.round(0.406 * W)}px; top:${Math.round(-0.361 * H)}px; width:${Math.round(0.922 * W)}px; height:${Math.round(0.833 * H)}px; + background: radial-gradient(50% 50% at 50% 50%, ${ROSE}cc 0%, ${ROSE}00 70%); } + #apexScrim { position:absolute; left:0; top:0; width:${W}px; height:${Math.round(0.653 * H)}px; opacity:0; + background: linear-gradient(to bottom, ${DEEP}${Math.round(scrim * 255) + .toString(16) + .padStart(2, "0")} 0%, ${DEEP}${Math.round(scrim * 0.694 * 255) + .toString(16) + .padStart(2, "0")} 55%, ${DEEP}00 100%); } + #spill { position:absolute; left:${HG.x}px; top:${HG.y}px; width:${spillW}px; height:${spillH}px; + margin-left:-${Math.round(spillW / 2)}px; margin-top:-${Math.round(spillH / 2)}px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, ${TEAL}80 0%, ${VIO}47 45%, ${ROSE}00 75%); } + #silk { position:absolute; left:${HG.x}px; top:${HG.y}px; margin-left:-${Math.round(svgW / 2)}px; + margin-top:-${Math.round(svgH / 2)}px; overflow:visible; } + #coreG { filter: drop-shadow(0 0 6px rgba(255,255,255,0.55)); }`; + const html = `
+
+
+
+ + + + + + + + + + + + + + + + `; + const js = ` + // ---- setpiece: SILKRIBBON (sequential silk-stroke reveal, flowing aurora gradient) ---- + const I9 = ${I.toFixed(3)}, WIN = ${WIN.toFixed(3)}, DRAWN = I9 + WIN, ENDT = ${ENDT}; + const D = ${J(D)}; + + // aurora wash: 2 huge soft blobs drifting f(t) (baked keyframes, ease none) + tl.to("#aurA", { opacity: ${p.wash ?? 0.12}, duration: 0.5, ease: "sine.out" }, 0.05); + tl.to("#aurB", { opacity: ${p.wash ?? 0.12}, duration: 0.5, ease: "sine.out" }, 0.15); + tl.to("#aurA", { keyframes: { x: [0, 34, 58, 44, 16, -8, 0], y: [0, 10, 22, 30, 22, 8, 0] }, + duration: ENDT, ease: "none" }, 0); + tl.to("#aurB", { keyframes: { x: [0, -28, -52, -60, -38, -12, 0], y: [0, 14, 8, -6, -16, -8, 0] }, + duration: ENDT, ease: "none" }, 0); + // sky reaction: the aurora deepens while the ribbon writes + tl.to("#aurA", { opacity: ${p.deepen ?? 0.2}, duration: 0.5, ease: "sine.inOut" }, I9 - 0.1); + tl.to("#aurB", { opacity: ${p.deepen ?? 0.2}, duration: 0.5, ease: "sine.inOut" }, I9 - 0.05); + + // apex scrim charges in before the ribbon (sky washout guard) + tl.to("#apexScrim", { opacity: 1, duration: 0.38, ease: "sine.inOut" }, I9 - 0.34); + + // silk ribbon: sequential stroke draw-on, halo + core share the gradient + const subs = D.split(/(?=M )/).map(s => s.trim()).filter(Boolean); + const SVGNS = "http://www.w3.org/2000/svg"; + function mk(parent, d, w) { + const el = document.createElementNS(SVGNS, "path"); + el.setAttribute("d", d); el.setAttribute("fill", "none"); + el.setAttribute("stroke", "url(#agrad)"); el.setAttribute("stroke-width", w); + el.setAttribute("stroke-linecap", "round"); el.setAttribute("stroke-linejoin", "round"); + el.setAttribute("opacity", "0"); // hidden until its turn (kills round-cap dot) + document.getElementById(parent).appendChild(el); + return el; + } + const strokes = subs.map((d) => ({ halo: mk("haloG", d, ${p.haloWidth ?? 18}), + core: mk("coreG", d, ${p.coreWidth ?? 6}) })); + let total = 0; + strokes.forEach((s) => { s.len = s.core.getTotalLength(); total += s.len; }); + let t9 = I9; + strokes.forEach((s) => { + const d = WIN * s.len / total; + gsap.set([s.core, s.halo], { strokeDasharray: s.len, strokeDashoffset: s.len }); + tl.set([s.core, s.halo], { opacity: 1 }, t9); + tl.fromTo([s.core, s.halo], { strokeDashoffset: s.len }, + { strokeDashoffset: 0, duration: d, ease: "none" }, t9); + // nib (a soft light mote) rides each stroke, hops at pen lifts + const n = Math.max(4, Math.round(s.len / 14)), xs = [], ys = []; + for (let k = 0; k <= n; k++) { + const pt = s.core.getPointAtLength(s.len * k / n); + xs.push(pt.x); ys.push(pt.y); + } + tl.set(["#nib", "#nibCore"], { x: xs[0], y: ys[0] }, t9); + tl.to("#nib", { keyframes: { x: xs, y: ys }, duration: d, ease: "none" }, t9); + tl.to("#nibCore", { keyframes: { x: xs, y: ys }, duration: d, ease: "none" }, t9); + t9 += d; + }); + gsap.set(["#nib", "#nibCore"], { attr: { cx: 0, cy: 0 } }); + tl.set("#nib", { opacity: 0.85 }, I9 - 0.01); + tl.set("#nibCore", { opacity: 1 }, I9 - 0.01); + tl.to("#nib", { scale: 2.4, opacity: 0, duration: 0.22, ease: "sine.in", + transformOrigin: "50% 50%" }, DRAWN); + tl.to("#nibCore", { scale: 2.4, opacity: 0, duration: 0.16, ease: "sine.in", + transformOrigin: "50% 50%" }, DRAWN); + + // SIGNATURE: the gradient FLOWS through the drawn ribbon — translate the + // userSpaceOnUse gradient (x1/x2 together); reflect spread makes the aurora + // colors march continuously along the silk during the hold + tl.fromTo("#agrad", { attr: { x1: ${gx1}, x2: ${gx1 + span} } }, + { attr: { x1: ${gx1 - Math.round(1.5 * span)}, x2: ${gx1 + span - Math.round(1.5 * span)} }, + duration: ENDT - (I9 - 0.07), ease: "none" }, I9 - 0.07); + + // light spill tints the sky as the ribbon completes + tl.to("#spill", { opacity: ${p.spill ?? 0.3}, duration: 0.7, ease: "sine.out" }, I9 + 0.1); + if (ENDT - (I9 + 0.8) > 0.15) { + const SP = ${p.spill ?? 0.3}; + tl.to("#spill", { keyframes: { opacity: [SP, SP - 0.05, SP + 0.01, SP - 0.04, SP] }, + duration: ENDT - (I9 + 0.8), ease: "none" }, I9 + 0.8); + } + // hold life: the halo breathes gently (aurora shimmer) + if (ENDT - DRAWN > 0.1) + tl.to("#haloG", { keyframes: { opacity: [0.85, 0.7, 0.9, 0.72, 0.86] }, + duration: ENDT - DRAWN, ease: "none" }, DRAWN);`; + return { css, html, js }; +} + +function setpieceScopetrace() { + // ---- setpiece: SCOPETRACE (the trace leaps off the scope and WRITES the word) ---- + // A surge column jumps from the scope band up to the pen-start point, then + // the waveform WRITES the hero word in a thin phosphor stroke (sequential + // Hershey stroke reveal — core only, no halo: it is a trace, not a tube). + // The phosphor FILL flicker-arrives 2 frames + a 5-step blink AFTER the + // write completes (scope persistence), hums + breathes 1.6% through the + // hold, then the word COLLAPSES to a flatline (scaleY crush + horizontal + // flash) clearing before the next spoken word. Scene reaction: phosphor + // scrim + green spill behind the subject; a 1-frame green pulse answers the + // final transcript word (the scope-death beat the paradigm owns up front). + const h = dna.hero, + p = h.params, + I = heroIn; + const fontPath = path.join(SKILL, "assets/strokefonts", dna.fonts.strokeFont); + const gen = path.join(SKILL, "scripts/gen-stroke-path.py"); + const tw = HG.traceW; + // strip punctuation for the pen (the demo wrote "pixel size", period dropped) + const traceText = heroDisplay.toLowerCase().replace(/[^\p{L}\p{N} ']/gu, ""); + const svgW = tw + 140, + svgH = 320, + BY = 215, // local baseline; ink center ≈ BY − 28 (demo registration) + CY = BY - 28; + const D = execFileSync( + "python3", + [gen, fontPath, traceText, String(tw), String(BY), String(70)], + { encoding: "utf8" }, + ).trim(); + // surge column lands at the pen-start point (first M of the path) + const m0 = D.match(/M ([\d.]+) ([\d.]+)/); + const surgeX = Math.round(HG.x - svgW / 2 + (m0 ? +m0[1] : 70)); + const WIN = p.window || 0.6; + const FLICK = +(I + WIN + (p.flickGap ?? 0.12)).toFixed(3); + // exit: collapse to flatline CLEAR of the next spoken word (the demo's + // 3.33 before "It's" 3.545); falls back to the hero window end + const nextT = tWords + .filter((w) => w.start > hero.end + 0.01) + .map((w) => w.start) + .sort((a, b) => a - b)[0]; + let EXIT = nextT != null ? nextT - (p.clearGap ?? 0.215) : heroOut - 0.2; + EXIT = +Math.max(FLICK + 0.45, Math.min(EXIT, heroOut)).toFixed(3); + const A = dna.palette.accent, + BRT = dna.palette.bright || "#d6ffe4"; + const scrim = dna.plate.scrim ?? 0.62; + const ox = ((HG.x / W) * 100).toFixed(1), + oy = ((HG.y / H) * 100).toFixed(1); + const spillW = tw + 260, + spillH = Math.round((tw + 260) * 0.47); + const css = ` + #scdim { position:absolute; inset:0; opacity:0; + background: radial-gradient(90% 75% at ${ox}% ${oy}%, rgba(1,14,7,${scrim}) 0%, rgba(1,10,5,${(scrim * 0.55).toFixed(2)}) 60%, rgba(1,8,4,${(scrim * 0.19).toFixed(2)}) 100%); } + #scspill { position:absolute; left:${HG.x}px; top:${HG.y}px; width:${spillW}px; height:${spillH}px; + margin-left:-${Math.round(spillW / 2)}px; margin-top:-${Math.round(spillH / 2)}px; border-radius:50%; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, ${A}33 0%, ${A}00 70%); } + #scsurge { position:absolute; left:${surgeX}px; top:0; width:3px; height:${H}px; opacity:0; + background: linear-gradient(180deg, ${A}00 0%, ${BRT}f2 45%, ${A}80 100%); + box-shadow: 0 0 12px ${A}cc; } + #scblk { position:absolute; inset:0; } + #scsvg { position:absolute; left:${HG.x}px; top:${HG.y}px; margin-left:-${Math.round(svgW / 2)}px; + margin-top:-${CY}px; overflow:visible; } + #schaloG { filter: blur(7px); opacity:0.85; } + #sccoreG { filter: drop-shadow(0 0 4px ${BRT}e6) drop-shadow(0 0 14px ${A}); } + #scpen { filter: drop-shadow(0 0 7px #fff) drop-shadow(0 0 20px ${A}); } + #scflat { position:absolute; left:${Math.round(HG.x - (tw + 36) / 2)}px; top:${HG.y - 2}px; + width:${tw + 36}px; height:4px; opacity:0; + background:${BRT}; box-shadow: 0 0 18px ${A}, 0 0 42px ${A}b3; } + #scpulse { position:absolute; inset:0; opacity:0; + background: radial-gradient(70% 60% at 50% 60%, ${A}38 0%, rgba(0,0,0,0) 70%); }`; + const html = `
+
+
+
+ + + + + +
+
+
`; + const js = ` + // ---- setpiece: SCOPETRACE (surge → pen write → fill flicker → hum → flatline) ---- + const I = ${I.toFixed(3)}, WIN = ${WIN}, DRAWN = I + WIN, FLICK = ${FLICK.toFixed(3)}, EXIT = ${EXIT.toFixed(3)}; + const D = ${J(D)}; + + // scene reaction: phosphor scrim + spill while the trace owns the room + tl.fromTo("#scdim", { opacity: 0 }, { opacity: 1, duration: 0.22, ease: "power2.in" }, I - 0.18); + tl.to("#scdim", { opacity: 0, duration: 0.30, ease: "power1.in" }, EXIT + 0.05); + tl.fromTo("#scspill", { opacity: 0 }, { opacity: ${p.spill ?? 0.55}, duration: WIN, ease: "power1.in" }, I); + tl.to("#scspill", { opacity: 0, duration: 0.18, ease: "power2.in" }, EXIT); + + // surge: the trace leaps up from the scope band to the pen-start point + tl.fromTo("#scsurge", { opacity: 0, scaleY: 0, transformOrigin: "50% 100%" }, + { opacity: 1, scaleY: 1, duration: 0.10, ease: "power3.in" }, I - 0.12); + tl.set("#scsurge", { opacity: 0 }, I + 0.04); + + // sequential stroke draw-on (one per pen lift; core writes, halo waits) + const subs = D.split(/(?=M )/).map(s => s.trim()).filter(Boolean); + const SVGNS = "http://www.w3.org/2000/svg"; + function mkP(parent, d, stroke, w) { + const el = document.createElementNS(SVGNS, "path"); + el.setAttribute("d", d); el.setAttribute("fill", "none"); + el.setAttribute("stroke", stroke); el.setAttribute("stroke-width", w); + el.setAttribute("stroke-linecap", "round"); el.setAttribute("stroke-linejoin", "round"); + el.setAttribute("opacity", "0"); + document.getElementById(parent).appendChild(el); + return el; + } + const strokes = subs.map((d) => ({ + halo: mkP("schaloG", d, ${J(A)}, ${p.haloWidth || 14}), + core: mkP("sccoreG", d, ${J(BRT)}, ${p.coreWidth || 4}), + })); + let total = 0; + strokes.forEach((s) => { s.len = s.core.getTotalLength(); total += s.len; }); + const scpen = document.getElementById("scpen"); + let t = I; + strokes.forEach((s) => { + const d = WIN * s.len / total; + gsap.set([s.core, s.halo], { strokeDasharray: s.len, strokeDashoffset: s.len }); + gsap.set(s.halo, { opacity: 0 }); // halo arrives at FLICK, not during write + tl.set(s.core, { opacity: 1 }, t); + tl.fromTo(s.core, { strokeDashoffset: s.len }, + { strokeDashoffset: 0, duration: d, ease: "none" }, t); + tl.fromTo(s.halo, { strokeDashoffset: s.len }, + { strokeDashoffset: 0, duration: d, ease: "none" }, t); + const n = Math.max(4, Math.round(s.len / 14)), xs = [], ys = []; + for (let k = 0; k <= n; k++) { + const pt = s.core.getPointAtLength(s.len * k / n); + xs.push(pt.x); ys.push(pt.y); + } + tl.set(scpen, { x: xs[0], y: ys[0] }, t); + tl.to(scpen, { keyframes: { x: xs, y: ys }, duration: d, ease: "none" }, t); + t += d; + }); + gsap.set(scpen, { attr: { cx: 0, cy: 0 } }); + tl.set(scpen, { opacity: 1 }, I - 0.01); + tl.to(scpen, { scale: 2.4, opacity: 0, duration: 0.12, ease: "power2.in", + transformOrigin: "50% 50%" }, DRAWN); + + // fill flicker-on (halo = phosphor "fill"; full within 2 frames) + tl.set("#schaloG", { opacity: 0 }, 0); + const haloPaths = strokes.map(s => s.halo); + tl.set(haloPaths, { opacity: 1 }, FLICK - 2 * F); // pre-arm strokes + [[1, 0], [0.25, 1], [1, 2], [0.55, 3], [1, 4]].forEach(([o, k]) => { + tl.set("#schaloG", { opacity: o }, FLICK + k * F); + }); + tl.set("#sccoreG", { opacity: 0.55 }, FLICK + F); + tl.set("#sccoreG", { opacity: 1 }, FLICK + 2 * F); + + // hold life: glow hum + 1.6% breathe (breathe ends exactly at the collapse) + const humStart = FLICK + 5 * F, humDur = Math.max(0.2, EXIT - humStart); + const NH = Math.max(6, Math.round(humDur / (2 * F))); + const humVals = []; + for (let k = 0; k <= NH; k++) { + const tt = k / NH * humDur; + humVals.push(0.80 + 0.10 * Math.sin(2 * Math.PI * 7 * tt) + 0.06 * Math.sin(2 * Math.PI * 11.3 * tt + 0.9)); + } + tl.to("#schaloG", { keyframes: { opacity: humVals }, duration: humDur, ease: "none" }, humStart); + tl.fromTo("#scblk", { scale: 1, transformOrigin: "${ox}% ${oy}%" }, + { scale: 1.016, duration: humDur, ease: "sine.inOut" }, humStart); + + // exit: trace collapses back to a flatline (the scope takes the word back) + tl.to("#scblk", { scaleY: 0.02, duration: 0.14, ease: "power3.in", + transformOrigin: "${ox}% ${oy}%" }, EXIT); + tl.set("#scblk", { opacity: 0 }, EXIT + 0.15); + tl.set("#scflat", { opacity: 1 }, EXIT + 0.13); + tl.to("#scflat", { opacity: 0, scaleX: 0.1, duration: 0.16, ease: "power2.in", + transformOrigin: "50% 50%" }, EXIT + 0.15); + + // second beat: 1-frame phosphor pulse behind the subject on the death word + tl.set("#scpulse", { opacity: 1 }, ${Math.min(LASTWORD.start, DUR - 0.15).toFixed(3)}); + tl.set("#scpulse", { opacity: 0.4 }, ${Math.min(LASTWORD.start + F, DUR - 0.1).toFixed(3)}); + tl.set("#scpulse", { opacity: 0 }, ${Math.min(LASTWORD.start + 2 * F, DUR - 0.05).toFixed(3)});`; + return { css, html, js }; +} + +function setpiecePapermat() { + // STOP-MOTION PAPERCUT EMBED: a torn-edge kraft mat drops onto the scene + // (steps(2) slap), then one torn cream chip per char DROPS with steps(3) + // gravity + 1-frame overshoot, lands crooked (seeded ±3° ±4px), settles in + // three 12fps poses and holds an 8fps wobble (baked set chain) until the + // FINAL word bumps the table and the chips SCATTER off down-right + // (disperse-on-last-word). Scene reaction: warm vignette charges with the + // landing. All geometry derives from HG (papermat branch). + const p = dna.hero.params || {}, + I = heroIn; + const N = heroText.length; + const STEP = p.step ?? 0.09; + const tileW = HG.tileW, + tileH = HG.tileH, + fpx = HG.fontPx, + pitch = HG.pitch, + matW = HG.matW, + matH = HG.matH; + const matT = +Math.max(0.02, I - 0.212).toFixed(3); + // scatter trigger: the final word bumps the table (hero.exitAt overrides); + // the whole exit (chips 0.30 + mat sweep 0.26 at +0.21) lands inside DUR + const scatT = +Math.min( + Math.max( + I + (N - 1) * STEP + 0.5, + Math.min( + theme.hero.exitAt ?? LASTWORD.start + 0.02, + DUR - 0.48, + DUR - 0.32 - (N - 1) * 0.045, + ), + ), + DUR - 0.48, + ).toFixed(3); + const VIG = p.vig ?? 0.3; + const dropM = -(HG.y + matH / 2 + 50); // mat fully offscreen above + const dropL = -(HG.y + tileH / 2 + 100); // chips fully offscreen above + // tableau breathe windows (camera push feel), clamped before the scatter + const T1 = +(I + 0.83).toFixed(3); + const D1 = +Math.min(2.2, scatT - 0.3 - T1).toFixed(2); + const T2 = +(T1 + Math.max(0, D1)).toFixed(3); + const D2 = +Math.min(1.9, scatT - 0.15 - T2).toFixed(2); + const vigSettleT = +Math.min(matT + 0.79, scatT - 0.85).toFixed(3); + const css = ` + #vigP { position:absolute; inset:0; opacity:0; + background: radial-gradient(120% 105% at ${((HG.x / W) * 100).toFixed(0)}% ${((HG.y / H) * 100).toFixed(0)}%, rgba(0,0,0,0) 38%, rgba(26,16,5,0.85) 100%); } + #apx { position:absolute; left:${HG.x}px; top:${HG.y}px; width:0; height:0; } + #mat { position:absolute; left:${-Math.round(matW / 2)}px; top:${-Math.round(matH / 2)}px; width:${matW}px; height:${matH}px; } + #mat .pap { position:absolute; inset:0; background:linear-gradient(178deg,#bd9d6c 0%,#b08f5d 55%,#a17f4c 100%); } + #mat .pap2 { position:absolute; inset:7px; background:rgba(140,110,62,0.35); } + #matshad { position:absolute; left:${-Math.round(matW / 2) + 2}px; top:${Math.round(matH / 2) - 18}px; width:${matW + 6}px; height:30px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, rgba(25,15,5,0.55) 0%, rgba(25,15,5,0) 72%); + filter: blur(5px); } + .lshad { position:absolute; width:${Math.round(tileW * 1.08)}px; height:24px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, rgba(28,17,6,0.6) 0%, rgba(28,17,6,0) 70%); + filter: blur(4px); } + .lchip { position:absolute; width:${tileW}px; height:${tileH}px; } + .lchip .pap { position:absolute; inset:0; background:${dna.palette.paper || "#f8f0dd"}; } + .lchip .pap2 { position:absolute; inset:5px; background:${dna.palette.paper2 || "#efe3c6"}; } + .lchip .gl { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; + font-family:'${dna.fonts.hero}', sans-serif; font-size:${fpx}px; line-height:1; color:${dna.palette.ink || "#2b241b"}; }`; + const html = `
+
+
+
+
`; + const js = ` + // ---- setpiece: PAPERMAT (mat slap → stepped-gravity chip drops → 8fps wobble → table-bump scatter) ---- + const I = ${I.toFixed(3)}, STEP = ${STEP}, SCAT = ${scatT}; + const prnd = mulberry32(${p.seed || 151515}); + const apx = document.getElementById("apx"); + // seeded torn-paper polygon (px coords on a w×h box) + function torn(w, h, jag, sx, sy, rr){ + const pts = [], j = () => Math.min(jag, Math.max(0, jag*0.5 + (rr()-0.5)*jag)); + for (let i=0; i<=sx; i++) pts.push([(w/sx)*i, j()]); + for (let i=1; i<=sy; i++) pts.push([w - j(), (h/sy)*i]); + for (let i=sx-1; i>=0; i--) pts.push([(w/sx)*i, h - j()]); + for (let i=sy-1; i>=1; i--) pts.push([j(), (h/sy)*i]); + return "polygon(" + pts.map(q => q[0].toFixed(1)+"px "+q[1].toFixed(1)+"px").join(",") + ")"; + } + document.querySelector("#mat .pap").style.clipPath = torn(${matW}, ${matH}, 12, 12, 4, prnd); + document.querySelector("#mat .pap2").style.clipPath = torn(${matW - 14}, ${matH - 14}, 10, 12, 4, prnd); + + // ===== MAT: the animator slaps the backdrop down first ===== + gsap.set("#mat", { transformOrigin: "50% 100%" }); + tl.fromTo("#mat", { y: ${dropM}, rotation: -5 }, + { y: 6, rotation: -1.2, duration: 0.14, ease: "steps(2)" }, ${matT}); + tl.set("#mat", { scaleY: 0.97, scaleX: 1.02 }, ${(matT + 0.14).toFixed(3)}); + tl.set("#mat", { y: 0, scaleY: 1, scaleX: 1 }, ${(matT + 0.223).toFixed(3)}); + tl.set("#matshad", { opacity: 0.32 }, ${(matT + 0.14).toFixed(3)}); + for (let t = ${(matT + 0.54).toFixed(3)}; t < ${(scatT - 0.08).toFixed(3)}; t += 0.25) + tl.set("#mat", { x: (prnd()-0.5)*1.6, y: (prnd()-0.5)*1.6, rotation: -1.2 + (prnd()-0.5)*0.7 }, t); + // mat leaves last, swept off down-right + tl.to("#mat", { x: 430, y: ${H - 40}, rotation: 13, duration: 0.26, ease: "steps(3)" }, ${(scatT + 0.21).toFixed(3)}); + tl.set("#matshad", { opacity: 0 }, ${(scatT + 0.25).toFixed(3)}); + + // ===== SCENE REACTION: warm vignette charges with the landing ===== + tl.fromTo("#vigP", { opacity: 0 }, { opacity: ${VIG}, duration: 0.24, ease: "power2.in" }, ${matT}); + tl.to("#vigP", { opacity: ${(VIG * 0.4).toFixed(2)}, duration: 0.7, ease: "power2.out" }, ${vigSettleT}); + tl.to("#vigP", { opacity: 0, duration: 0.35, ease: "power1.in" }, ${(scatT - 0.11).toFixed(3)}); + + // ===== LETTERS: torn chips drop with stepped gravity ===== + const GLYPHS = ${J([...heroText])}; + GLYPHS.forEach((ch, i) => { + if (ch === " ") return; + const cx = (i - ${((N - 1) / 2).toFixed(1)}) * ${pitch} + (prnd()-0.5)*8; // seeded ±4px misalignment + const jy = (prnd()-0.5)*8; + const r0 = (prnd()-0.5)*6; // seeded ±3° crooked landing + const C = I + i * STEP; + + const shad = document.createElement("div"); + shad.className = "lshad"; + shad.style.left = (cx - ${Math.round((tileW * 1.08) / 2)}) + "px"; + shad.style.top = (${Math.round(tileH / 2) + 3} + jy*0.3) + "px"; + apx.appendChild(shad); + + const chip = document.createElement("div"); + chip.className = "lchip"; + chip.style.left = (cx - ${Math.round(tileW / 2)}) + "px"; + chip.style.top = (${-Math.round(tileH / 2)} + jy) + "px"; + const pap = document.createElement("div"); pap.className = "pap"; + const pap2 = document.createElement("div"); pap2.className = "pap2"; + const gl = document.createElement("div"); gl.className = "gl"; gl.textContent = ch; + pap.style.clipPath = torn(${tileW}, ${tileH}, 8, 6, 7, prnd); + pap2.style.clipPath = torn(${tileW - 10}, ${tileH - 10}, 6, 6, 7, prnd); + chip.appendChild(pap); chip.appendChild(pap2); chip.appendChild(gl); + apx.appendChild(chip); + gsap.set(chip, { transformOrigin: "50% 100%" }); + + // anticipation shadow blob appears on the landing spot 3 frames early + tl.set(shad, { opacity: 0.16, scaleX: 1.35 }, C - 0.125); + // DROP: two airborne poses then contact — steps(3) gravity, 1-frame overshoot + tl.fromTo(chip, { y: ${dropL}, rotation: r0 - 8 }, + { y: 8, rotation: r0, duration: 0.21, ease: "steps(3)" }, C - 0.21); + tl.set(chip, { scaleX: 1.07, scaleY: 0.90 }, C); // contact squash + tl.set(shad, { opacity: 0.50, scaleX: 1 }, C); // shadow grows on land + tl.set(chip, { y: -4, scaleY: 1.05, scaleX: 0.97 }, C + 0.0833); // 12fps settle pose 1 + tl.set(chip, { y: 2, scaleY: 0.98, scaleX: 1.01 }, C + 0.1667); // pose 2 + tl.set(chip, { y: 0, scaleY: 1, scaleX: 1 }, C + 0.25); // rest + tl.to(shad, { opacity: 0.34, duration: 0.3, ease: "power1.out" }, C + 0.30); + + // HOLD: 8fps wobble — baked sets every 3 frames (the stop-motion heartbeat) + for (let t = C + 0.50; t < SCAT - 0.13; t += 0.125) + tl.set(chip, { rotation: r0 + (prnd()-0.5)*1.4, x: (prnd()-0.5)*1.4, y: (prnd()-0.5)*1.4 }, t); + + // SCATTER on the final word — chips slide off-table down-right, steps(4) + const S = SCAT + i*0.045; + tl.to(chip, { x: 250 + prnd()*200, y: ${H - 110} + prnd()*110, rotation: r0 + 28 + prnd()*24, + duration: 0.30, ease: "steps(4)" }, S); + tl.set(shad, { opacity: 0 }, S + 0.06); + }); +${ + D1 >= 0.4 + ? ` + // hold loom: the whole tableau breathes very slowly (camera push feel) + tl.to("#apx", { scale: 1.016, duration: ${D1}, ease: "sine.inOut" }, ${T1}); +${D2 >= 0.3 ? ` tl.to("#apx", { scale: 1.004, duration: ${D2}, ease: "sine.inOut" }, ${T2});` : ""}` + : "" +} + // table bump, 1 frame before the scatter begins + tl.set("#apx", { y: 4 }, ${(scatT - 0.041).toFixed(3)}); + tl.set("#apx", { y: 0 }, ${(scatT + 0.001).toFixed(3)});`; + return { css, html, js }; +} + +function setpieceCenterfold() { + // POP-UP BOOK CENTERFOLD: blue + cream 12-point paper starbursts unfold on a + // baseline hinge (scaleY 0.03→1 back.out, staggered), then the hero word + // pops up in hinged clip-path segments (rotationX 85→0, the body motif at + // full amplitude), kraft struts lean in, backdrop + word wobble-settle + // TOGETHER (one wrapper owns rotationX), breathe through the hold, and the + // whole centerfold folds flat at heroOut (the book closing). A dusk scrim + // charges behind it (bright-sky insurance). Geometry derives from HG. + const p = dna.hero.params || {}, + I = heroIn; + const segs = p.segs || 3, + stag = p.segStagger ?? 0.07; + const u = HG.burstR / 220; // prop scale (demo burst R 220) + const boxW = HG.boxW, + boxH = HG.boxH; + const cx = Math.round(boxW / 2), + cy = Math.round(boxH / 2); + const lineH = Math.round(HG.fontPx * 1.1667); + const wordTop = Math.round(cy - 24 * u - lineH / 2); // word center 24u above box center + const R1 = HG.burstR, + r1 = Math.round(0.673 * R1), + R2 = Math.round(0.9 * R1), + r2 = Math.round(0.555 * R1); + const strokeW = Math.max(2, Math.round(3 * u)); + // exit start: fold flat before the next sentence (demo 3.28 = heroOut−0.33), + // never before the pop + wobble have read, always complete by DUR−0.08 + const XO = +Math.max(I + (segs - 1) * stag + 0.45, Math.min(heroOut - 0.33, DUR - 0.39)).toFixed( + 3, + ); + const scrimT = +Math.max(0.02, I - 0.272).toFixed(3); + const blueT = +Math.max(0.04, I - 0.272).toFixed(3); + const wobT = +(I + 0.428).toFixed(3); + const wobD = +Math.min(0.7, XO - 0.05 - (I + 0.428)).toFixed(2); + const brT = +(I + 1.178).toFixed(3); + const brD = +Math.min(1.7, XO - 0.15 - (I + 1.178)).toFixed(2); + const segClips = Array.from({ length: segs }, (_, i) => { + const lp = ((i * 100) / segs).toFixed(1), + rp = (((segs - 1 - i) * 100) / segs).toFixed(1); + return ` #cfsg${i} { clip-path: inset(0 ${rp}% 0 ${lp}%); }`; + }).join("\n"); + const css = ` + #cfscrim { position:absolute; inset:0; opacity:0; + background: radial-gradient(46% 54% at ${((HG.x / W) * 100).toFixed(0)}% ${(((HG.y + 24 * u) / H) * 100).toFixed(0)}%, + rgba(16,24,42,0.62) 0%, rgba(16,24,42,0.34) 55%, rgba(16,24,42,0) 100%); } + #cf { position:absolute; left:${HG.x}px; top:${Math.round(HG.y + 24 * u)}px; width:${boxW}px; height:${boxH}px; } + #cfWob { position:absolute; inset:0; } + .cfburst { position:absolute; inset:0; opacity:0; } + #cfShadow { position:absolute; left:50%; top:${Math.round(cy + 172 * u)}px; width:${Math.round(380 * u)}px; height:${Math.round(30 * u)}px; + margin-left:${-Math.round(190 * u)}px; opacity:0; filter:blur(6px); border-radius:50%; + background: radial-gradient(closest-side, rgba(22,14,5,0.55), rgba(22,14,5,0)); } + .cfstrut { position:absolute; width:${Math.round(36 * u)}px; height:${Math.round(30 * u)}px; opacity:0; + background: linear-gradient(135deg,${dna.palette.kraft1 || "#a98f5e"} 0%, ${dna.palette.kraft2 || "#cdbb92"} 45%, ${dna.palette.kraft3 || "#e6d6af"} 100%); + filter: drop-shadow(0 2px 2px rgba(40,26,10,0.35)); + clip-path: polygon(0 100%, 100% 100%, 100% 0); } + #cfs1 { left:${Math.round(cx - 134 * u)}px; top:${Math.round(cy + 28 * u)}px; } + #cfs2 { left:${Math.round(cx + 98 * u)}px; top:${Math.round(cy + 28 * u)}px; transform:scaleX(-1); } + #cfword { position:absolute; left:0; right:0; top:${wordTop}px; height:${lineH}px; } + .cfseg { position:absolute; inset:0; opacity:0; text-align:center; + font-family:'${dna.fonts.hero}', sans-serif; font-weight:800; font-size:${HG.fontPx}px; + line-height:${lineH}px; letter-spacing:0.02em; color:${dna.palette.ink || dna.palette.body}; + text-shadow: 0 3px 10px rgba(56,38,14,0.32); } +${segClips}`; + const html = `
+
+
+ + + + + + +
+
+
+
+${Array.from({ length: segs }, (_, i) => `
${esc(heroText)}
`).join("\n")} +
+
+
`; + const js = ` + // ---- setpiece: CENTERFOLD (starburst unfold → hinged segment pop → wobble-settle → fold flat) ---- + const I = ${I.toFixed(3)}, XO = ${XO}; + // deterministic starburst geometry (paper sun) + function starPts(cx, cy, n, R, r, rot) { + const p = []; + for (let i = 0; i < n * 2; i++) { + const a = rot + Math.PI * i / n, rad = (i % 2 === 0) ? R : r; + p.push((cx + Math.cos(a) * rad).toFixed(1) + "," + (cy + Math.sin(a) * rad).toFixed(1)); + } + return p.join(" "); + } + document.getElementById("cfpB").setAttribute("points", starPts(${cx}, ${cy}, 12, ${R1}, ${r1}, -Math.PI/2 + 0.13)); + document.getElementById("cfpC").setAttribute("points", starPts(${cx}, ${cy}, 12, ${R2}, ${r2}, -Math.PI/2)); + + gsap.set("#cf", { xPercent: -50, yPercent: -50 }); + gsap.set("#cfWob", { transformPerspective: 900, transformOrigin: "50% 82%" }); + gsap.set(".cfburst", { transformOrigin: "50% 90%", scaleY: 0.03 }); + gsap.set(".cfseg", { transformPerspective: 800, transformOrigin: "50% 100%", rotationX: 85 }); + gsap.set(".cfstrut", { transformOrigin: "50% 100%", scaleY: 0 }); + gsap.set("#cfShadow", { scaleX: 0.3 }); + + // scrim charges before the unfold (bright sky insurance) + tl.to("#cfscrim", { opacity: ${p.scrim ?? 0.42}, duration: 0.28, ease: "power2.out" }, ${scrimT}); + + // backdrop unfolds FIRST — baseline hinge, paper overshoot + tl.set("#cfbBlue", { opacity: 1 }, ${blueT}); + tl.to("#cfbBlue", { scaleY: 1, duration: 0.26, ease: "back.out(1.6)" }, ${blueT}); + tl.set("#cfbCream", { opacity: 1 }, ${(+blueT + 0.06).toFixed(3)}); + tl.to("#cfbCream", { scaleY: 1, duration: 0.26, ease: "back.out(1.6)" }, ${(+blueT + 0.06).toFixed(3)}); + tl.to("#cfShadow", { opacity: 0.45, scaleX: 1, duration: 0.30, ease: "power2.out" }, ${(+blueT + 0.03).toFixed(3)}); + + // the word pops up in hinged segments (left→right), staggered + for (let i = 0; i < ${segs}; i++) { + const t0 = I + i * ${stag}, el = "#cfsg" + i; + tl.set(el, { opacity: 1 }, t0); // 1 within 2 frames + tl.to(el, { rotationX: 0, duration: 0.26, ease: "back.out(1.4)" }, t0); + } + + // visible paper struts lean in behind the word + tl.set(".cfstrut", { opacity: 1 }, ${(I + 0.328).toFixed(3)}); + tl.to("#cfs1", { scaleY: 1, duration: 0.12, ease: "back.out(2)" }, ${(I + 0.328).toFixed(3)}); + tl.to("#cfs2", { scaleY: 1, duration: 0.12, ease: "back.out(2)" }, ${(I + 0.378).toFixed(3)}); +${ + wobD >= 0.2 + ? ` + // backdrop + word wobble-settle TOGETHER (one wrapper owns it) + tl.to("#cfWob", { keyframes: { rotationX: [0, -3.6, 2.4, -1.3, 0.6, 0] }, + duration: ${wobD}, ease: "sine.inOut" }, ${wobT});` + : "" +} +${ + brD >= 0.5 + ? ` + // hold life: slow paper breathing through the silence + tl.to("#cfWob", { keyframes: { rotationX: [0, 1.5, -1.1, 1.3, 0] }, + duration: ${brD}, ease: "sine.inOut" }, ${brT}); + tl.to("#cfShadow", { keyframes: { scaleX: [1, 1.05, 0.98, 1.04, 1] }, + duration: ${brD}, ease: "sine.inOut" }, ${brT});` + : "" +} + + // EXIT — the centerfold folds flat (book closing) + for (let i = 0; i < ${segs}; i++) { + const ft = XO + i * 0.05, el = "#cfsg" + i; + tl.to(el, { rotationX: 88, duration: 0.14, ease: "power2.in" }, ft); + tl.set(el, { opacity: 0 }, ft + 0.15); + } + tl.to(".cfstrut", { scaleY: 0, duration: 0.10, ease: "power2.in" }, XO + 0.02); + tl.to("#cfbCream", { scaleY: 0.03, duration: 0.13, ease: "power2.in" }, XO + 0.12); + tl.set("#cfbCream", { opacity: 0 }, XO + 0.26); + tl.to("#cfbBlue", { scaleY: 0.03, duration: 0.12, ease: "power2.in" }, XO + 0.18); + tl.set("#cfbBlue", { opacity: 0 }, XO + 0.31); + tl.to("#cfShadow", { opacity: 0, scaleX: 0.3, duration: 0.16, ease: "power1.in" }, XO + 0.14); + tl.to("#cfscrim", { opacity: 0, duration: 0.28, ease: "power1.in" }, XO + 0.02);`; + return { css, html, js }; +} + +function setpieceChalkwrite() { + // ---- setpiece: CHALKWRITE (the board grows and a hand WRITES the word) ---- + // The lower chalk band grows into a FULL deep-green board behind the subject + // 0.3s before the apex (scaleY power3.out from the bottom edge, the room + // dims with it); the hero word is HAND-WRITTEN in chalk — sequential Hershey + // stroke reveal (drawon pattern), dry/rough via seeded ±1px jitter baked + // onto every pen point, a blurred halo under a tight core, a chalk-stick + // nib riding the pen — while dust specks fall from the nib. On completion a + // hand-slap CLAP shakes the board 1 frame (the dust burst lives in the + // rail, in FRONT of the subject: fx.chalkclap), then TWO violent + // accelerating underlines slash beneath (nib rides them, dust kicks at the + // ends), the chalk flicks away, and the halo breathes through the hold with + // two slow motes drifting off the letters. + const h = dna.hero, + p = h.params, + I = heroIn; + const fontPath = path.join(SKILL, "assets/strokefonts", dna.fonts.strokeFont); + const gen = path.join(SKILL, "scripts/gen-stroke-path.py"); + const tw = HG.chalkW; + const x0 = Math.round(HG.x - tw / 2); + let D = execFileSync( + "python3", + [gen, fontPath, heroDisplay.toLowerCase(), String(tw), "450", String(x0)], + { encoding: "utf8" }, + ).trim(); + // register the measured ink box on HG (ink CENTER lands on HG.y), then the + // board rect, underlines and the fg clap all derive from the same box + const pts = [...D.matchAll(/[ML] ([-\d.]+) ([-\d.]+)/g)].map((m) => [+m[1], +m[2]]); + const ys0 = pts.map((q) => q[1]); + const dy = +(HG.y - (Math.min(...ys0) + Math.max(...ys0)) / 2).toFixed(1); + D = D.replace(/([ML]) ([-\d.]+) ([-\d.]+)/g, (m, c, x, y) => `${c} ${x} ${(+y + dy).toFixed(1)}`); + const inkTop = Math.min(...ys0) + dy, + inkBot = Math.max(...ys0) + dy, + inkH = inkBot - inkTop; + const inkL = Math.min(...pts.map((q) => q[0])), + inkR = Math.max(...pts.map((q) => q[0])); + // board: full strip width, grows from the bottom edge up past the ink + // (demo: ink top 320, board top 248 → gap 0.554 × ink height 130) + const stripW = (dna.body.strip && dna.body.strip.w) || 1200; + const SX = (dna.body.strip && dna.body.strip.x) ?? Math.round((W - stripW) / 2); + const boardTop = Math.max(40, Math.round(inkTop - (p.boardGap ?? 0.554) * Math.max(inkH, 90))); + const boardH = H - boardTop; + const kw = stripW / 1200, + kb = boardH / 472; // board furniture scales with the demo rect (1200×472) + const ENDT = +(DUR - 0.04).toFixed(3); + // writing window: keep the demo's 0.78s unless the hero lands too late to + // finish + underline + hold before the end of the clip + const WIN = Math.min(p.window || 0.78, Math.max(0.4, ENDT - 0.95 - I)); + const DRAWN = +(I + WIN).toFixed(3); + // hand-off to the fg dust clap: the pen's final contact point, at write end + HG.clapX = Math.round(pts[pts.length - 1][0]); + HG.clapY = Math.round(pts[pts.length - 1][1] + dy); + HG.clapT = DRAWN; + const CHALK = dna.palette.chalk || dna.palette.accent || "#fbf9ef"; + const DUST = dna.palette.dust || "#f6f4e9"; + const css = ` + #cwDim { position:absolute; inset:0; background:${p.dimColor || "rgba(4,14,9,0.95)"}; opacity:0; } + #cwVig { position:absolute; inset:0; opacity:0; + background: radial-gradient(75% 70% at 50% 45%, rgba(0,0,0,0) 55%, rgba(2,10,6,0.55) 100%); } + #cwUnit { position:absolute; inset:0; } + #cwBoard { position:absolute; left:${SX}px; top:${boardTop}px; width:${stripW}px; height:${boardH}px; + background: linear-gradient(180deg, ${dna.palette.boardHi || "#22392c"} 0%, ${dna.palette.board || "#1d3328"} 40%, ${dna.palette.boardLo || "#182b22"} 100%); + border-radius:6px 6px 0 0; + box-shadow: inset 0 0 90px rgba(0,0,0,0.55), 0 6px 24px rgba(0,0,0,0.45); } + #cwRim { position:absolute; top:0; left:0; right:0; height:7px; opacity:0.85; + border-radius:6px 6px 0 0; + background: linear-gradient(180deg, ${dna.palette.rim || "#8a6a48"} 0%, ${dna.palette.rimLo || "#5f452c"} 100%); } + #cwBoard .bsm { position:absolute; border-radius:50%; } + #cwBsm1 { left:${Math.round(120 * kw)}px; top:${Math.round(90 * kb)}px; width:${Math.round(430 * kw)}px; height:${Math.round(150 * kb)}px; transform:rotate(-5deg); + background: radial-gradient(50% 50% at 50% 50%, rgba(214,226,214,0.08) 0%, rgba(214,226,214,0) 70%); } + #cwBsm2 { left:${Math.round(660 * kw)}px; top:${Math.round(230 * kb)}px; width:${Math.round(380 * kw)}px; height:${Math.round(130 * kb)}px; transform:rotate(4deg); + background: radial-gradient(50% 50% at 50% 50%, rgba(214,226,214,0.07) 0%, rgba(214,226,214,0) 70%); } + #cwSvg { position:absolute; left:0; top:0; overflow:visible; } + #cwHaloG { opacity:${p.halo ?? 0.18}; } + #cwCoreG { opacity:0.92; }`; + const html = `
+
+
+
+
+
+
+
+ + + + + + + + + + + +
`; + const js = ` + // ---- setpiece: CHALKWRITE (board grows; the hero word is hand-written in chalk) ---- + const I8 = ${I.toFixed(3)}, WIN8 = ${WIN.toFixed(3)}, DRAWN = ${DRAWN}, ENDT = ${ENDT}; + const D8 = ${J(D)}; + const crnd = mulberry32(${p.seed ?? 7}); + + // scene reaction: vignette early; the room dims as the board grows + tl.fromTo("#cwVig", { opacity: 0 }, { opacity: ${p.vig ?? 0.35}, duration: 0.35, ease: "power1.out" }, 0.10); + tl.fromTo("#cwDim", { opacity: 0 }, { opacity: ${p.dim ?? 0.22}, duration: 0.30, ease: "power1.in" }, ${(I - 0.3).toFixed(3)}); + + // the board grows taller 0.3s before the writing + gsap.set("#cwBoard", { scaleY: 0, transformOrigin: "50% 100%" }); + tl.to("#cwBoard", { scaleY: 1, duration: 0.30, ease: "power3.out" }, ${(I - 0.3).toFixed(3)}); + + // chalk strokes: dry/rough = baked ±1px y jitter on every pen point + const jrnd = mulberry32(${p.jitterSeed ?? 21}); + const jD = D8.replace(/([ML]) ([-\\d.]+) ([-\\d.]+)/g, + (m, c, x, y) => c + " " + x + " " + (parseFloat(y) + (jrnd()*2 - 1)).toFixed(1)); + const subs = jD.split(/(?=M )/).map(s => s.trim()).filter(Boolean); + const SVGNS8 = "http://www.w3.org/2000/svg"; + function mk(parent, d, stroke, w) { + const el = document.createElementNS(SVGNS8, "path"); + el.setAttribute("d", d); el.setAttribute("fill", "none"); + el.setAttribute("stroke", stroke); el.setAttribute("stroke-width", w); + el.setAttribute("stroke-linecap", "round"); el.setAttribute("stroke-linejoin", "round"); + el.setAttribute("opacity", "0"); + document.getElementById(parent).appendChild(el); + return el; + } + const strokes = subs.map((d) => ({ + halo: mk("cwHaloG", d, "#ffffff", ${p.haloWidth ?? 14}), + core: mk("cwCoreG", d, ${J(CHALK)}, ${p.coreWidth ?? 7}), + })); + let total = 0; + strokes.forEach((s) => { s.len = s.core.getTotalLength(); total += s.len; }); + const nib = document.getElementById("cwNib"); + gsap.set(nib, { rotation: -36, transformOrigin: "50% 50%" }); + let acc = 0; + const cum = []; // cumulative starts per stroke + strokes.forEach((s) => { cum.push(acc); acc += s.len; }); + strokes.forEach((s, si) => { + const d = WIN8 * s.len / total, st = I8 + WIN8 * cum[si] / total; + gsap.set([s.core, s.halo], { strokeDasharray: s.len, strokeDashoffset: s.len }); + tl.set([s.core, s.halo], { opacity: 1 }, st); + tl.fromTo([s.core, s.halo], { strokeDashoffset: s.len }, + { strokeDashoffset: 0, duration: d, ease: "none" }, st); + const n = Math.max(4, Math.round(s.len / 14)), xs = [], ys = []; + for (let k = 0; k <= n; k++) { + const pt = s.core.getPointAtLength(s.len * k / n); + xs.push(pt.x); ys.push(pt.y); + } + tl.set(nib, { x: xs[0], y: ys[0] }, st); + tl.to(nib, { keyframes: { x: xs, y: ys }, duration: d, ease: "none" }, st); + }); + tl.set(nib, { opacity: 1 }, I8 - 0.01); + + // ${p.dustN ?? 8} dust specks fall from the nib along the path + function speck(parent, x, y, r, fill) { + const c = document.createElementNS(SVGNS8, "circle"); + c.setAttribute("cx", x); c.setAttribute("cy", y); c.setAttribute("r", r); + c.setAttribute("fill", fill); c.setAttribute("opacity", "0"); + document.getElementById(parent).appendChild(c); + return c; + } + for (let k = 0; k < ${p.dustN ?? 8}; k++) { + const f = (k + 0.6) / ${p.dustN ?? 8}, target = f * total; + let si = 0; while (si < strokes.length - 1 && cum[si + 1] <= target) si++; + const pt = strokes[si].core.getPointAtLength(target - cum[si]); + const c = speck("cwDustG", pt.x, pt.y + 4, 1.6 + crnd() * 1.4, ${J(DUST)}); + const ts = I8 + f * WIN8; + tl.set(c, { opacity: 0.9 }, ts); + tl.to(c, { y: 26 + crnd() * 20, x: crnd() * 14 - 7, duration: 0.5, ease: "power1.in" }, ts); + tl.to(c, { opacity: 0, duration: 0.42, ease: "power1.in" }, ts + 0.08); + } + + // hand-slap CLAP: 1-frame board shake (dust burst lives in the rail, in front) + tl.set("#cwUnit", { y: 3 }, DRAWN); + tl.set("#cwUnit", { y: -2 }, DRAWN + F); + tl.set("#cwUnit", { y: 1 }, DRAWN + 2*F); + tl.set("#cwUnit", { y: 0 }, DRAWN + 3*F); + + // two violent underlines (fast accelerating slashes), seeded waviness + const UL = [ + { x1: ${Math.round(inkL + 14)}, x2: ${Math.round(inkR - 4)}, y: ${Math.round(inkBot + 30)}, n: 4, t: DRAWN + 0.09, dur: 0.10 }, + { x1: ${Math.round(inkL + 58)}, x2: ${Math.round(inkR - 44)}, y: ${Math.round(inkBot + 50)}, n: 3, t: DRAWN + 0.23, dur: 0.09 }, + ]; + UL.forEach((u) => { + if (u.t + u.dur > ENDT - 0.1) return; + let ud = "M " + u.x1 + " " + (u.y + (crnd()*9 - 4.5)).toFixed(1); + for (let k = 1; k <= u.n; k++) + ud += " L " + (u.x1 + (u.x2 - u.x1) * k / u.n).toFixed(1) + " " + (u.y + (crnd()*9 - 4.5)).toFixed(1); + const halo = mk("cwHaloG", ud, "#ffffff", ${p.haloWidth ?? 14}); + const core = mk("cwCoreG", ud, ${J(CHALK)}, ${(p.coreWidth ?? 7) + 1}); + const len = core.getTotalLength(); + gsap.set([core, halo], { strokeDasharray: len, strokeDashoffset: len }); + tl.set([core, halo], { opacity: 1 }, u.t); + tl.fromTo([core, halo], { strokeDashoffset: len }, + { strokeDashoffset: 0, duration: u.dur, ease: "power3.in" }, u.t); + // nib rides the slash + const n = 8, xs = [], ys = []; + for (let k = 0; k <= n; k++) { const pt = core.getPointAtLength(len * k / n); xs.push(pt.x); ys.push(pt.y); } + tl.set(nib, { x: xs[0], y: ys[0] }, u.t); + tl.to(nib, { keyframes: { x: xs, y: ys }, duration: u.dur, ease: "none" }, u.t); + // dust kicked up where the slash ends + for (let k = 0; k < 3; k++) { + const c = speck("cwDustG", xs[n] - 4 + crnd() * 8, ys[n], 1.4 + crnd(), ${J(DUST)}); + tl.set(c, { opacity: 0.85 }, u.t + u.dur); + tl.to(c, { y: 16 + crnd() * 14, x: crnd() * 18 - 6, opacity: 0, duration: 0.38, ease: "power1.in" }, u.t + u.dur); + } + }); + // chalk flicks away after the second underline + tl.to(nib, { x: "+=30", y: "+=22", scale: 2, opacity: 0, duration: 0.14, ease: "power2.in" }, + Math.min(DRAWN + 0.35, ENDT - 0.15)); + + // hold life: halo breathe (baked f(t), deterministic) + const humStart = Math.min(DRAWN + 0.46, ENDT - 0.3), humDur = ENDT - humStart; + const N8 = Math.max(6, Math.round(humDur / (2 * F))); + const humVals = []; + for (let k = 0; k <= N8; k++) { + const tt = k / N8 * humDur; + humVals.push(${p.halo ?? 0.18} + 0.05 * Math.sin(2 * Math.PI * 1.6 * tt) + 0.02 * Math.sin(2 * Math.PI * 3.7 * tt + 0.8)); + } + tl.to("#cwHaloG", { keyframes: { opacity: humVals }, duration: humDur, ease: "none" }, humStart); + // two slow motes drifting off the letters during the hold + [[humStart + 0.10, ${Math.round(inkL + 0.43 * (inkR - inkL))}], [humStart + 0.50, ${Math.round(inkL + 0.71 * (inkR - inkL))}]].forEach(([ts, mx]) => { + if (ts + 0.5 > ENDT) return; + const c = speck("cwDustG", mx + crnd() * 30, ${Math.round((inkTop + inkBot) / 2 + 42)}, 1.5 + crnd(), ${J(DUST)}); + tl.set(c, { opacity: 0.6 }, ts); + tl.to(c, { y: 30, x: crnd() * 10 - 5, opacity: 0, duration: 0.5, ease: "power1.in" }, ts); + });`; + return { css, html, js }; +} + +function setpieceSpraytag() { + // ---- setpiece: SPRAYTAG (a writer steps up and TAGS the hero word) ---- + // The dusk wall dims + a radial scrim charges as the writer steps up; the + // can RATTLES at the start point (seeded set-chain nib jitter), then the + // hero word is spray-written stroke by stroke — sequential Hershey dash + // reveal (drawon pattern) — as a TRIPLE stack per stroke: fat dark + // under-stroke (sky-contrast armor) + blurred overspray halo + wet paint + // core, the glowing nib riding each stroke. Seeded overspray dots pop near + // the nib as it passes; the nib throws off at the finish (the magenta splat + // lives in the rail, in FRONT of the subject: fx.paintsplat). Through the + // hold, seeded DRIPS grow from painted low points (signature) and the halo + // hums while the whole tag slowly looms. + const h = dna.hero, + p = h.params, + I = heroIn; + const fontPath = path.join(SKILL, "assets/strokefonts", dna.fonts.strokeFont); + const gen = path.join(SKILL, "scripts/gen-stroke-path.py"); + const tw = HG.sprayW; + const x0 = Math.round(HG.x - tw / 2); + let D = execFileSync( + "python3", + [gen, fontPath, heroDisplay.toLowerCase(), String(tw), "450", String(x0)], + { encoding: "utf8" }, + ).trim(); + // register the measured ink box on HG (ink CENTER lands on HG.y); the loom + // origin and the fg paint splat derive from the same box + const pts = [...D.matchAll(/[ML] ([-\d.]+) ([-\d.]+)/g)].map((m) => [+m[1], +m[2]]); + const ys0 = pts.map((q) => q[1]); + const dy = +(HG.y - (Math.min(...ys0) + Math.max(...ys0)) / 2).toFixed(1); + D = D.replace(/([ML]) ([-\d.]+) ([-\d.]+)/g, (m, c, x, y) => `${c} ${x} ${(+y + dy).toFixed(1)}`); + const ENDT = +(DUR - 0.04).toFixed(3); + // writing window: keep the demo's 0.58s unless the hero lands too late to + // finish + splat + drip before the end of the clip + const WIN = Math.min(p.window || 0.58, Math.max(0.35, ENDT - 0.55 - I)); + const DRAWN = +(I + WIN).toFixed(3); + // hand-off to the fg paint splat: the pen-finish point, at write end + HG.splatX = Math.round(pts[pts.length - 1][0]); + HG.splatY = Math.round(pts[pts.length - 1][1] + dy); + HG.splatT = DRAWN; + const PAINT = dna.palette.accent || "#ffd23f"; + const UNDER = dna.palette.under || "#241008"; + const NIB = dna.palette.nib || "#fff6d9"; + const css = ` + #stDim { position:absolute; inset:0; opacity:0; background:${p.dimColor || "#0a0608"}; } + #stScrim { position:absolute; inset:0; opacity:0; + background: radial-gradient(92% 78% at 50% 36%, rgba(0,0,0,0) 28%, rgba(10,4,12,0.78) 100%); } + #stWrap { position:absolute; inset:0; } + #stSvg { position:absolute; left:0; top:0; overflow:visible; } + #stCoreG { filter: drop-shadow(0 3px 7px rgba(0,0,0,0.55)); } + #stNib { filter: blur(0.8px) drop-shadow(0 0 9px ${PAINT}e6); } + .stdrip { position:absolute; height:0; opacity:0; + background: linear-gradient(180deg, ${PAINT} 0%, ${dna.palette.dripMid || "#eab928"} 78%, ${dna.palette.dripLo || "#d8a51d"} 100%); + border-radius: 0 0 4px 4px; + box-shadow: 0 2px 4px rgba(0,0,0,0.35); }`; + const html = `
+
+ + + + + + + + + + + + +
`; + const js = ` + // ---- setpiece: SPRAYTAG (rattle → sequential spray write → drips + hum) ---- + const Ig = ${I.toFixed(3)}, WINg = ${WIN.toFixed(3)}, DRAWNg = ${DRAWN}, ENDTg = ${ENDT}; + const Dg = ${J(D)}; + const grnd = mulberry32(${p.seed ?? 140987}); + + // scene reaction: the wall darkens as the writer steps up (charge) + tl.fromTo("#stDim", { opacity: 0 }, { opacity: ${p.dim ?? 0.22}, duration: 0.40, ease: "power2.in" }, ${(I - 0.42).toFixed(3)}); + tl.fromTo("#stScrim", { opacity: 0 }, { opacity: ${p.scrim ?? 0.62}, duration: 0.40, ease: "power2.in" }, ${(I - 0.42).toFixed(3)}); + + // per-stroke TRIPLE stack (split at pen lifts) — sequential dash reveal + const subsG = Dg.split(/(?=M )/).map(s => s.trim()).filter(Boolean); + const SVGNSG = "http://www.w3.org/2000/svg"; + function mkG(parent, d, stroke, w) { + const el = document.createElementNS(SVGNSG, "path"); + el.setAttribute("d", d); el.setAttribute("fill", "none"); + el.setAttribute("stroke", stroke); el.setAttribute("stroke-width", w); + el.setAttribute("stroke-linecap", "round"); el.setAttribute("stroke-linejoin", "round"); + el.setAttribute("opacity", "0"); + document.getElementById(parent).appendChild(el); + return el; + } + const strokesG = subsG.map((d) => ({ + under: mkG("stUnderG", d, ${J(UNDER)}, ${p.underWidth ?? 21}), // dark edge — sky-contrast armor + halo: mkG("stHaloG", d, ${J(PAINT)}, ${p.haloWidth ?? 36}), // fat soft overspray spread + core: mkG("stCoreG", d, ${J(PAINT)}, ${p.coreWidth ?? 13}), // wet paint core + })); + let totalG = 0; + strokesG.forEach((s) => { s.len = s.core.getTotalLength(); totalG += s.len; }); + + // helper: point at a global arc-length along the whole word + function pointAtTotal(L) { + let acc = 0; + for (const s of strokesG) { + if (L <= acc + s.len) return s.core.getPointAtLength(L - acc); + acc += s.len; + } + return strokesG[strokesG.length - 1].core.getPointAtLength(strokesG[strokesG.length - 1].len); + } + + // ANTICIPATION: the can RATTLES at the start point before painting + const nibG = document.getElementById("stNib"); + gsap.set(nibG, { attr: { cx: 0, cy: 0 } }); + const p0g = pointAtTotal(0); + tl.set(nibG, { opacity: 1, x: p0g.x, y: p0g.y }, Ig - 0.30); + for (let k = 0; k < 6; k++) { // set-chain rattle (sanctioned jitter) + tl.set(nibG, { x: p0g.x + (grnd() - 0.5) * 10, y: p0g.y + (grnd() - 0.5) * 7 }, Ig - 0.28 + k * 2 * F); + } + tl.set(nibG, { x: p0g.x, y: p0g.y }, Ig - 0.02); + + // SEQUENTIAL spray write: constant pen speed, nib rides each stroke + let tg = Ig; + strokesG.forEach((s) => { + const d = WINg * s.len / totalG; + gsap.set([s.under, s.halo, s.core], { strokeDasharray: s.len, strokeDashoffset: s.len }); + tl.set([s.under, s.halo, s.core], { opacity: 1 }, tg); + tl.fromTo([s.under, s.halo, s.core], { strokeDashoffset: s.len }, + { strokeDashoffset: 0, duration: d, ease: "none" }, tg); + const n = Math.max(4, Math.round(s.len / 14)), xs = [], ys = []; + for (let k = 0; k <= n; k++) { + const pt = s.core.getPointAtLength(s.len * k / n); + xs.push(pt.x); ys.push(pt.y); + } + tl.set(nibG, { x: xs[0], y: ys[0] }, tg); + tl.to(nibG, { keyframes: { x: xs, y: ys }, duration: d, ease: "none" }, tg); + tg += d; + }); + // nib throw-off at the finish (the splat ring itself lives on the rail layer) + tl.to(nibG, { scale: 2.6, opacity: 0, duration: 0.12, ease: "power2.in", + transformOrigin: "50% 50%" }, DRAWNg); + + // OVERSPRAY: seeded dots popping near the nib as it passes + for (let i = 0; i < ${p.osprayN ?? 6}; i++) { + const c = document.createElementNS(SVGNSG, "circle"); + c.setAttribute("r", (2 + grnd() * 2.4).toFixed(1)); + c.setAttribute("fill", ${J(PAINT)}); c.setAttribute("opacity", "0"); + document.getElementById("stOsprayG").appendChild(c); + const f = 0.08 + 0.84 * grnd(); + const ti = Ig + WINg * f; + const pt = pointAtTotal(totalG * f); + const ox = (grnd() < 0.5 ? -1 : 1) * (9 + grnd() * 18); + const oy = (grnd() < 0.5 ? -1 : 1) * (7 + grnd() * 14); + tl.set(c, { opacity: 0.85 }, ti); + tl.fromTo(c, { attr: { cx: pt.x + ox, cy: pt.y + oy } }, + { attr: { cx: pt.x + ox * 1.9, cy: pt.y + oy * 1.9 }, + duration: 0.30, ease: "power2.out" }, ti); + tl.to(c, { opacity: 0, duration: 0.26, ease: "power1.in" }, ti + 0.05); + } + + // DRIPS (signature): seeded drips grow from painted low points and KEEP + // growing through the hold + const samplesG = []; + { let acc = 0; + strokesG.forEach((s) => { + const n = Math.max(6, Math.round(s.len / 10)); + for (let k = 0; k <= n; k++) { + const L = s.len * k / n; + const pt = s.core.getPointAtLength(L); + samplesG.push({ x: pt.x, y: pt.y, L: acc + L }); + } + acc += s.len; + }); + } + const maxYg = Math.max(...samplesG.map(q => q.y)); + const lowsG = samplesG.filter(q => q.y > maxYg - 8).sort((a, b) => a.x - b.x); + const pickedG = []; + for (let tries = 0; tries < 60 && pickedG.length < ${p.drips ?? 3}; tries++) { + const cand = lowsG[Math.floor(grnd() * lowsG.length)]; + if (cand && pickedG.every(q => Math.abs(q.x - cand.x) > 110)) pickedG.push(cand); + } + const stageG = document.getElementById("stage"); + pickedG.forEach((q) => { + const el = document.createElement("div"); + el.className = "stdrip"; stageG.appendChild(el); + const w = 6 + Math.round(grnd() * 3); + gsap.set(el, { left: q.x - w / 2, top: q.y - 4, width: w }); + const paintT = Ig + WINg * (q.L / totalG); + const start = Math.min(paintT + 0.22 + grnd() * 0.22, ENDTg - 0.3); + const dur = Math.min(1.25, ENDTg - start); + const hh = (36 + grnd() * 36) * Math.max(0.55, dur / 1.25); + tl.set(el, { opacity: 1 }, start); + tl.to(el, { height: hh, duration: dur, ease: "power1.in" }, start); + }); + + // HOLD LIFE: halo hum (baked f(t), deterministic) + slow loom on the whole tag + const humStartG = DRAWNg + 0.06, humDurG = Math.max(0.2, ENDTg - DRAWNg - 0.06); + const NG = Math.max(6, Math.round(humDurG / (2 * F))); + const humValsG = []; + for (let k = 0; k <= NG; k++) { + const tt = k / NG * humDurG; + humValsG.push(${p.haloOpacity ?? 0.5} + 0.07 * Math.sin(2 * Math.PI * 7 * tt) + 0.05 * Math.sin(2 * Math.PI * 11 * tt + 0.9)); + } + tl.to("#stHaloG", { keyframes: { opacity: humValsG }, duration: humDurG, ease: "none" }, humStartG); + gsap.set("#stWrap", { transformOrigin: "${HG.x}px ${HG.y}px" }); + tl.to("#stWrap", { scale: 1.014, duration: 0.5, ease: "power1.inOut" }, DRAWNg + 0.08);`; + return { css, html, js }; +} + +function setpieceBrushwrite() { + // ---- setpiece: BRUSHWRITE (sumi-e — ONE violent calligraphic gesture) ---- + // A warm paper wash charges behind the word; the brush SLAPS down at the + // first pen point (start-splat: irregular ink blob + seeded satellites — + // the fg fleck pass rides fx.brushflecks), then the hero word is written in + // ONE sequential gesture — Hershey dash reveal at constant pen speed — as a + // FOUR-layer stack per stroke (blurred bleed under fat/mid/core widths = + // pressure-tapered wet brush), the round ink nib riding the pen and + // flicking off at the finish. Spatter droplets eject perpendicular at the + // sharpest-curvature points of the gesture. Through the hold the ink + // BLEEDS into the paper (the blurred under-layer swells visible) and the + // whole work breathes; then the vermilion SEAL chop stamps beside the ink + // (power4 crush → 2-frame squash → elastic settle, red flecks kicked) — + // the plate punch lands on the chop contact. + const h = dna.hero, + p = h.params, + I = heroIn; + const fontPath = path.join(SKILL, "assets/strokefonts", dna.fonts.strokeFont); + const gen = path.join(SKILL, "scripts/gen-stroke-path.py"); + const tw = HG.brushW; + const x0 = Math.round(HG.x - tw / 2); + let D = execFileSync( + "python3", + [gen, fontPath, heroDisplay.toLowerCase(), String(tw), "450", String(x0)], + { encoding: "utf8" }, + ).trim(); + // register the measured ink box on HG (ink CENTER lands on HG.y); the wash, + // breathe origin, seal chop and the fg flecks all derive from the same box + const pts = [...D.matchAll(/[ML] ([-\d.]+) ([-\d.]+)/g)].map((m) => [+m[1], +m[2]]); + const ys0 = pts.map((q) => q[1]); + const dy = +(HG.y - (Math.min(...ys0) + Math.max(...ys0)) / 2).toFixed(1); + D = D.replace(/([ML]) ([-\d.]+) ([-\d.]+)/g, (m, c, x, y) => `${c} ${x} ${(+y + dy).toFixed(1)}`); + const inkBot = Math.max(...ys0) + dy; + const inkR = Math.max(...pts.map((q) => q[0])); + const ENDT = +(DUR - 0.04).toFixed(3); + // writing window: keep the demo's 0.45s unless the gesture lands too late to + // finish + seal + bleed before the end of the clip + const WIN = Math.min(p.window || 0.45, Math.max(0.3, ENDT - 0.9 - I)); + const DRAWN = +(I + WIN).toFixed(3); + // hand-off to the fg ink flecks: the brush's FIRST contact point, at slap-down + HG.fleckX = Math.round(pts[0][0]); + HG.fleckY = Math.round(pts[0][1] + dy); + HG.fleckT = +(I + 0.01).toFixed(3); + // seal chop: below-right of the ink (demo offsets), kept on frame + const SEALC = +(DRAWN + (p.sealDelay ?? 0.04)).toFixed(3); + const sealS = p.sealSize ?? 64; + const sealX = Math.min(W - 48, Math.max(60, Math.round(inkR + (p.sealDx ?? -103)))); + const sealY = Math.min(H - 80, Math.round(inkBot + (p.sealDy ?? 72))); + const INK = dna.palette.ink || "#19120b"; + const WASH = dna.palette.wash || "#f6f0e2"; + const WASH2 = dna.palette.wash2 || "#f4edde"; + const washW = tw + 380, + washH = p.washH ?? 420; + const bleedT = +(DRAWN + 0.1).toFixed(3); + const bleedDur = +Math.max(0.4, Math.min(1.7, ENDT - DRAWN - 0.1)).toFixed(2); + const breT = +Math.min(SEALC, ENDT - 0.4).toFixed(3); + const breDur = +Math.max(0.3, Math.min(1.78, ENDT - breT)).toFixed(2); + const breN = Math.max(8, Math.round(breDur / (2 * F))); + const css = ` + #bwWash { position:absolute; left:${HG.x}px; top:${HG.y}px; width:${washW}px; height:${washH}px; + margin-left:-${Math.round(washW / 2)}px; margin-top:-${Math.round(washH / 2)}px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, + ${WASH}d9 0%, ${WASH2}73 52%, ${WASH2}00 75%); } + #bwSvg { position:absolute; left:0; top:0; overflow:visible; } + #bwSeal { position:absolute; left:${sealX}px; top:${sealY}px; width:${sealS}px; height:${sealS}px; opacity:0; + border-radius:6px; + background: radial-gradient(70% 70% at 42% 38%, ${dna.palette.seal || "#d24a32"} 0%, ${dna.palette.sealMid || "#c03422"} 62%, ${dna.palette.sealLo || "#a92a1a"} 100%); + box-shadow: 0 3px 10px rgba(20,10,6,0.45), inset 0 0 9px rgba(255,140,110,0.35); } + #bwSeal span { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; + font-family:'${dna.fonts.seal || dna.fonts.body}', serif; font-weight:700; + font-size:${Math.round(sealS * 0.656)}px; color:${dna.palette.sealText || "#f7efe2"}; } + .bwfleck { position:absolute; border-radius:50%; background:${dna.palette.sealMid || "#c03422"}; opacity:0; }`; + const html = `
+ + + + + + + + + + + + + + + + +
${esc(p.sealGlyph || "観")}
`; + const js = ` + // ---- setpiece: BRUSHWRITE (slap-down → one gesture → bleed + seal chop) ---- + const Ib = ${I.toFixed(3)}, WINb = ${WIN.toFixed(3)}, DRAWNb = ${DRAWN}, ENDTb = ${ENDT}; + const Db = ${J(D)}; + const wrnd = mulberry32(${p.seed ?? 380611}); + + // scene reaction: the paper wash charges in just before the gesture + tl.fromTo("#bwWash", { opacity: 0 }, { opacity: ${p.wash ?? 0.34}, duration: 0.22, ease: "power2.in" }, ${(I - 0.18).toFixed(3)}); +${ + I + 1.3 < ENDT + ? ` tl.to("#bwWash", { opacity: ${p.washSettle ?? 0.27}, duration: ${Math.min(1.2, ENDT - I - 1.0).toFixed(2)}, ease: "power1.out" }, ${(I + 1.0).toFixed(3)});` + : "" +} + + // strokes split at pen lifts; FOUR stacked widths = pressure-tapered wet brush + const subsB = Db.split(/(?=M )/).map(s => s.trim()).filter(Boolean); + const SVGNSB2 = "http://www.w3.org/2000/svg"; + function mkB(parent, d, w, op) { + const el = document.createElementNS(SVGNSB2, "path"); + el.setAttribute("d", d); el.setAttribute("fill", "none"); + el.setAttribute("stroke", ${J(INK)}); el.setAttribute("stroke-width", w); + el.setAttribute("stroke-opacity", op); + el.setAttribute("stroke-linecap", "round"); el.setAttribute("stroke-linejoin", "round"); + el.setAttribute("opacity", "0"); + document.getElementById(parent).appendChild(el); + return el; + } + const strokesB = subsB.map((d) => ({ + bleed: mkB("bwBleedG", d, ${p.bleedWidth ?? 16}, 1), + fat: mkB("bwFatG", d, ${p.fatWidth ?? 18}, 0.25), + mid: mkB("bwMidG", d, ${p.midWidth ?? 10}, 0.6), + core: mkB("bwCoreG", d, ${p.coreWidth ?? 5}, 1), + })); + let totalB = 0; + strokesB.forEach((s) => { s.len = s.core.getTotalLength(); totalB += s.len; }); + + // start-splat: irregular ink blob at the first pen point (the brush SLAPS down) + const SXB = ${Math.round(pts[0][0])}, SYB = ${Math.round(pts[0][1] + dy)}; + (function buildSplat() { + const g = document.getElementById("bwSplatG"); + const main = document.createElementNS(SVGNSB2, "ellipse"); + main.setAttribute("cx", SXB - 4); main.setAttribute("cy", SYB + 2); + main.setAttribute("rx", 24); main.setAttribute("ry", 15); + main.setAttribute("transform", "rotate(-24 " + (SXB - 4) + " " + (SYB + 2) + ")"); + main.setAttribute("fill", ${J(INK)}); main.setAttribute("fill-opacity", "0.9"); + g.appendChild(main); + for (let i = 0; i < 5; i++) { + const c = document.createElementNS(SVGNSB2, "circle"); + const a = wrnd() * Math.PI * 2, dist = 16 + wrnd() * 26; + c.setAttribute("cx", SXB - 4 + Math.cos(a) * dist); + c.setAttribute("cy", SYB + 2 + Math.sin(a) * dist * 0.7); + c.setAttribute("r", (1.8 + wrnd() * 3.4).toFixed(1)); + c.setAttribute("fill", ${J(INK)}); c.setAttribute("fill-opacity", "0.85"); + g.appendChild(c); + } + })(); + tl.set("#bwSplatG", { opacity: 1 }, Ib); + tl.fromTo("#bwSplatG", { scale: 0.35, svgOrigin: "${Math.round(pts[0][0])} ${Math.round(pts[0][1] + dy)}" }, + { scale: 1, duration: 0.12, ease: "power3.out" }, Ib); + + // ONE sequential gesture: constant pen speed, the round ink nib riding + const nibB = document.getElementById("bwNib"); + let tb = Ib, accB = 0; + const curvB = []; // spatter candidates: {x,y,ang,dA,te} + strokesB.forEach((s) => { + const d = WINb * s.len / totalB; + const layers = [s.bleed, s.fat, s.mid, s.core]; + layers.forEach(pp => gsap.set(pp, { strokeDasharray: s.len, strokeDashoffset: s.len })); + tl.set(layers, { opacity: 1 }, tb); + tl.fromTo(layers, { strokeDashoffset: s.len }, + { strokeDashoffset: 0, duration: d, ease: "none" }, tb); + const n = Math.max(6, Math.round(s.len / 12)), xs = [], ys = []; + let prevAng = null; + for (let k = 0; k <= n; k++) { + const pt = s.core.getPointAtLength(s.len * k / n); + xs.push(pt.x); ys.push(pt.y); + if (k > 0) { + const ang = Math.atan2(ys[k] - ys[k-1], xs[k] - xs[k-1]); + if (prevAng !== null) { + let dA = Math.abs(ang - prevAng); if (dA > Math.PI) dA = 2 * Math.PI - dA; + if (dA > 0.55) + curvB.push({ x: xs[k-1], y: ys[k-1], ang: prevAng, dA, + te: Ib + WINb * (accB + s.len * (k-1) / n) / totalB }); + } + prevAng = ang; + } + } + tl.set(nibB, { x: xs[0], y: ys[0] }, tb); + tl.to(nibB, { keyframes: { x: xs, y: ys }, duration: d, ease: "none" }, tb); + tb += d; accB += s.len; + }); + gsap.set(nibB, { attr: { cx: 0, cy: 0 } }); + tl.set(nibB, { opacity: 1 }, Ib - 0.01); + // the brush lifts off with a flick at the end of the gesture + tl.to(nibB, { x: "+=42", y: "-=30", scale: 1.9, opacity: 0, duration: 0.1, + ease: "power2.in", transformOrigin: "50% 50%" }, DRAWNb); + + // spatter droplets ejected at the sharpest-curvature points of the gesture + curvB.sort((a, b) => b.dA - a.dA); + const pickedB = []; + for (const c of curvB) { + if (pickedB.length >= ${p.spatterN ?? 6}) break; + if (pickedB.every(q => Math.abs(q.te - c.te) > 0.045)) pickedB.push(c); + } + const spatB = document.getElementById("bwSpatG"); + pickedB.forEach((c) => { + if (c.te + 0.33 > ENDTb) return; + const el = document.createElementNS(SVGNSB2, "circle"); + el.setAttribute("cx", c.x); el.setAttribute("cy", c.y); + el.setAttribute("r", (2.2 + wrnd() * 2.2).toFixed(1)); + el.setAttribute("fill", ${J(INK)}); el.setAttribute("opacity", "0"); + spatB.appendChild(el); + const side = wrnd() > 0.5 ? 1 : -1; + const ea = c.ang + side * Math.PI / 2; + const dist = 34 + wrnd() * 60; + const dx = Math.cos(ea) * dist, dyv = Math.sin(ea) * dist - 18; + tl.set(el, { opacity: 1 }, c.te); + tl.to(el, { keyframes: { x: [0, dx * 0.6, dx], y: [0, dyv * 0.6, dyv + 22], + opacity: [1, 0.9, 0] }, + duration: 0.32, ease: "power2.out" }, c.te); + }); + + // HOLD: the ink BLEEDS into the paper (blurred under-layer swells) + breathe + tl.to("#bwBleedG", { opacity: ${p.bleed ?? 0.38}, duration: ${bleedDur}, ease: "sine.inOut" }, ${bleedT}); + const bNb = ${breN}, bValsB = []; + for (let k = 0; k <= bNb; k++) { + const tt = k / bNb * ${breDur}; + bValsB.push(1 + 0.006 * Math.sin(2 * Math.PI * ${p.breatheHz ?? 0.55} * tt)); + } + tl.to("#bwInkAll", { keyframes: { scale: bValsB }, duration: ${breDur}, ease: "none", + svgOrigin: "${HG.x} ${HG.y}" }, ${breT}); +${ + SEALC + 0.38 <= ENDT + ? ` + // vermilion SEAL chop stamps the work — the plate punch lands on the contact + gsap.set("#bwSeal", { xPercent: -50, yPercent: -50, rotation: -6, transformOrigin: "50% 50%" }); + tl.set("#bwSeal", { opacity: 1, scale: 1.7 }, ${(SEALC - 0.1).toFixed(3)}); + tl.to("#bwSeal", { scale: 1, duration: 0.09, ease: "power4.in" }, ${(SEALC - 0.095).toFixed(3)}); + tl.set("#bwSeal", { scaleX: 1.07, scaleY: 0.93 }, ${SEALC}); + tl.to("#bwSeal", { scaleX: 1, scaleY: 1, duration: 0.28, ease: "elastic.out(1, 0.4)" }, ${(SEALC + 0.08).toFixed(3)}); + { const stg = document.getElementById("stage"); + for (let i = 0; i < 3; i++) { + const el = document.createElement("div"); el.className = "bwfleck"; + stg.appendChild(el); + const s = 2 + Math.round(wrnd() * 2); + gsap.set(el, { width: s, height: s, left: ${sealX}, top: ${sealY} }); + const a = wrnd() * Math.PI * 2, dist = 32 + wrnd() * 38; + tl.set(el, { opacity: 0.9 }, ${(SEALC + 0.01).toFixed(3)}); + tl.to(el, { x: Math.cos(a) * dist, y: Math.sin(a) * dist + 12, opacity: 0, + duration: 0.3, ease: "power2.out" }, ${(SEALC + 0.01).toFixed(3)}); + } + }` + : "" +}`; + return { css, html, js }; +} + +function setpieceInkbloom() { + // INKWATER apex: a sumi ink drop falls into still water BEHIND the subject. + // Scene reaction: paper-white radial washes behind the two text zones — the + // body rows get a PERSISTENT paper backing from t≈0.15 (the closing lines + // keep their ground) and the apex zone charges just before the drop — plus + // a gentle vignette that STILLS the world while the ink blooms. The drop + // appears above the word point, swells, falls (power2.in, scaleY stretch), + // squashes on contact (2 frames) and merges into the bloom: 3 stacked + // blurred irregular ellipses scaling at different rates with counter- + // rotations + 2 thin concentric ripple rings expanding on the water + // surface; the hero words RESOLVE out of the blob (opacity snaps, blur + // 16→0 + scale 1.12→1 carries the bleed) — the first at contact, the + // following at their own spoken times; through the hold the glyph edges + // BREATHE (baked blur keyframes), the whole group looms 1.018 and faint + // ink wisps curl off the word top; exit: RE-DISSOLVE (blur up + spread + + // fade — the ink disperses back into the water), timed to clear before the + // next body line needs the reader. Blob / ring / wisp geometry is the + // demo's, scaled from the measured word rect (kx = halfW/demoHalf, + // ky = fontPx/132); the rail wash registers on the body row geometry. + const p = dna.hero.params || {}, + D = heroIn; + const INK = dna.palette.ink || dna.palette.body; + const PAP = dna.palette.paper || "#fffaee", + PAP2 = dna.palette.paper2 || "#fff8e8"; + const WASH = dna.palette.wash || "#fff9ee", + WAPX = dna.palette.washApex || "#fffaf0"; + const fpx = HG.fontPx, + halfW = Math.round(HG.halfW || heroDisplay.length * 0.25 * fpx), + cx = HG.x, + cy = HG.y; + const ky = fpx / 132; // demo scale unit (Shippori Mincho 700 @ 132px) + const demoHalf = (wordPx("pixel size.", dna.fonts.hero, 132, 0.02) || 650) / 2; + const kx = halfW / demoHalf; + const SX = (v) => Math.round(v * kx), + SY = (v) => Math.round(v * ky); + const C = +(D + (p.fall ?? 0.15)).toFixed(3); // contact with the water surface + // hero words resolve on their own spoken times (the first at contact) + const heroWords = heroDisplay.trim().split(/\s+/); + const RES = heroWords.map((wtx, k) => { + const tw = tWords[Math.min(hero.idx + k, hero.idx + hero.len - 1)]; + return +Math.max(C + 0.02, k === 0 ? 0 : tw.start).toFixed(3); + }); + // the bloom re-dissolves before the next body line needs the reader + const nextL = LINES.find((L) => L.words[0].start > hero.end + 0.05); + const XOUT = +Math.max( + C + 0.55, + Math.min( + D + (p.maxHold ?? 1.75), + nextL ? nextL.words[0].start - (p.clearGap ?? 0.24) : DUR - 0.6, + DUR - 0.6, + ), + ).toFixed(3); + const loomT = +(D + 0.373).toFixed(3), + loomD = +Math.min(1.3, XOUT - (D + 0.373) - 0.03).toFixed(2); + const vigOutT = +(XOUT - 0.15).toFixed(3), + vigOutD = +Math.min(0.6, DUR - 0.05 - (XOUT - 0.15)).toFixed(2); + // rail wash centers on the body reading rows (middle row) + const railY = H - ((dna.body && dna.body.bottomPx) ?? 36) - ((dna.body && dna.body.rowGap) ?? 56); + const wrW = p.washRailW ?? 1180, + wrH = p.washRailH ?? 300; + const waW = 2 * halfW + 370, + waH = p.washApexH ?? 430; + const blr = (v) => Math.max(8, SY(v)); + const css = ` + #ikvig { position:absolute; inset:0; opacity:0; + background: radial-gradient(115% 100% at 50% 40%, rgba(0,0,0,0) 42%, rgba(8,6,4,0.55) 100%); } + #ikwashRail { position:absolute; left:${W / 2}px; top:${railY}px; width:${wrW}px; height:${wrH}px; + margin-left:-${Math.round(wrW / 2)}px; margin-top:-${Math.round(wrH / 2)}px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, ${WASH}7a 0%, ${WASH}3d 48%, ${WASH}00 75%); } + #ikwashApex { position:absolute; left:${cx}px; top:${cy}px; width:${waW}px; height:${waH}px; + margin-left:-${Math.round(waW / 2)}px; margin-top:-${Math.round(waH / 2)}px; opacity:0; + background: radial-gradient(50% 50% at 50% 50%, ${WAPX}4d 0%, ${WAPX}21 50%, ${WAPX}00 76%); } + #inkG { position:absolute; left:${cx}px; top:${cy}px; opacity:0; } + #ikdrop { position:absolute; left:${-SY(9)}px; top:${-SY(228)}px; width:${SY(18)}px; height:${SY(18)}px; + border-radius: 46% 54% 50% 50% / 38% 40% 62% 60%; + background:${INK}; opacity:0; box-shadow: 0 0 6px ${INK}73; } + .ikblob { position:absolute; opacity:0; background:${INK}; } + #ikb1 { left:${SX(-115)}px; top:${SY(-64)}px; width:${SX(230)}px; height:${SY(128)}px; + border-radius: 47% 53% 44% 56% / 58% 42% 60% 40%; filter: blur(${blr(16)}px); } + #ikb2 { left:${SX(-205)}px; top:${SY(-44)}px; width:${SX(190)}px; height:${SY(108)}px; + border-radius: 56% 44% 58% 42% / 44% 60% 40% 56%; filter: blur(${blr(20)}px); } + #ikb3 { left:${SX(-13)}px; top:${SY(-66)}px; width:${SX(206)}px; height:${SY(96)}px; + border-radius: 42% 58% 50% 50% / 62% 38% 56% 44%; filter: blur(${blr(24)}px); } + .ikring { position:absolute; left:${SX(-80)}px; top:${SY(-8)}px; width:${SX(160)}px; height:${SY(44)}px; + border-radius:50%; opacity:0; } + #ikr1 { border:2px solid ${INK}cc; filter: blur(1.2px); } + #ikr2 { border:2px solid ${INK}8c; filter: blur(2.2px); } + #ikword { position:absolute; left:0; top:0; white-space:nowrap; + transform: translate(-50%,-50%); + font-family:'${dna.fonts.hero}', serif; font-weight:700; + font-size:${fpx}px; line-height:1; letter-spacing:0.02em; color:${INK}; } + #ikword .ikw { display:inline-block; opacity:0; margin-right:0.30em; + text-shadow: 0 0 14px ${PAP}f2, 0 0 36px ${PAP2}b3, 0 2px 4px ${PAP}99; } + #ikword .ikw:last-child { margin-right:0; } + .ikwisp { position:absolute; width:${SY(30)}px; height:${SY(38)}px; opacity:0; + border:4px solid transparent; border-top-color:${INK}80; + border-radius:50%; filter: blur(2.5px); } + #ikwisp1 { left:${SX(-210)}px; top:${SY(-118)}px; } + #ikwisp2 { left:${SX(118)}px; top:${SY(-122)}px; }`; + const html = `
+
+
+
+
+
+
+
+
+
${heroWords.map((t, k) => `${esc(t)}`).join("")}
+
+
+
+
`; + const js = ` + // ---- setpiece: INKBLOOM (drop falls → ink blooms → words resolve → re-dissolve) ---- + // paper washes (the scene offers paper to the ink); the rail wash PERSISTS + tl.fromTo("#ikwashRail", { opacity: 0 }, { opacity: 1, duration: 0.5, ease: "power1.out" }, 0.15); + tl.fromTo("#ikwashApex", { opacity: 0 }, { opacity: 1, duration: 0.3, ease: "power1.out" }, ${Math.max(0.02, D - 0.077).toFixed(3)}); + tl.to("#ikwashApex", { opacity: 0, duration: 0.5, ease: "power1.in" }, ${XOUT}); + + // the world stills while the ink blooms + tl.to("#ikvig", { opacity: ${p.vig ?? 0.34}, duration: 0.45, ease: "power2.out" }, ${C}); + tl.to("#ikvig", { opacity: 0, duration: ${vigOutD}, ease: "power1.in" }, ${vigOutT}); + + // ===== drop: appears, swells, falls, squashes on contact, merges into the blob ===== + tl.set("#inkG", { opacity: 1 }, ${(D - 0.08).toFixed(3)}); + tl.set("#ikdrop", { opacity: 1, transformOrigin: "50% 50%" }, ${(D - 0.08).toFixed(3)}); + tl.fromTo("#ikdrop", { scale: 0.55 }, { scale: 1, duration: 0.08, ease: "power2.out" }, ${(D - 0.08).toFixed(3)}); + tl.to("#ikdrop", { y: ${SY(219)}, duration: ${(C - D).toFixed(3)}, ease: "power2.in" }, ${D.toFixed(3)}); + tl.to("#ikdrop", { scaleY: 1.45, scaleX: 0.8, duration: ${(C - D).toFixed(3)}, ease: "power2.in" }, ${D.toFixed(3)}); + tl.set("#ikdrop", { scaleX: 1.7, scaleY: 0.35 }, ${C}); // contact squash, 2 frames + tl.to("#ikdrop", { opacity: 0, duration: 0.07 }, ${(C + 0.083).toFixed(3)}); + + // ===== bloom: 3 stacked blurred ellipses, different rates; opacity snaps then decays ===== + const IKB = [["#ikb1", 0.82, 0.50, 3.0, -4, 5, 0, 1.15, 0.18, 1.05], + ["#ikb2", 0.62, 0.42, 2.4, 7, -7, 0.04, 1.35, 0.22, 1.15], + ["#ikb3", 0.50, 0.55, 3.8, -9, 8, 0.08, 1.50, 0.30, 1.20]]; + IKB.forEach(([sel, op, s0, s1, r0, r1, dt, gd, ft, fd]) => { + tl.set(sel, { opacity: op, transformOrigin: "50% 50%" }, ${C} + dt); + tl.fromTo(sel, { scale: s0, rotation: r0 }, + { scale: s1, rotation: r1, duration: gd, ease: "expo.out" }, ${C} + dt); + tl.to(sel, { opacity: 0, duration: fd, ease: "power1.in" }, ${C} + ft); + }); + + // ripple rings on the water surface + tl.set("#ikr1", { opacity: 0.7, transformOrigin: "50% 50%" }, ${(C + 0.02).toFixed(3)}); + tl.fromTo("#ikr1", { scale: 1 }, { scale: 7.2, duration: 1.45, ease: "expo.out" }, ${(C + 0.02).toFixed(3)}); + tl.to("#ikr1", { opacity: 0, duration: 1.25, ease: "power1.in" }, ${(C + 0.22).toFixed(3)}); + tl.set("#ikr2", { opacity: 0.5, transformOrigin: "50% 50%" }, ${(C + 0.16).toFixed(3)}); + tl.fromTo("#ikr2", { scale: 1 }, { scale: 9.6, duration: 1.7, ease: "power2.out" }, ${(C + 0.16).toFixed(3)}); + tl.to("#ikr2", { opacity: 0, duration: 1.4, ease: "power1.in" }, ${(C + 0.4).toFixed(3)}); + + // ===== the words resolve out of the blob (opacity snaps, BLUR carries the bleed) ===== + const IKRES = ${J(RES)}; + IKRES.forEach((rt, k) => { + const el = document.getElementById("ikw" + k); + const rd = Math.min(0.8, Math.max(0.3, ${XOUT} - rt - 0.25)); + tl.set(el, { opacity: 1, transformOrigin: "50% 60%" }, rt); + tl.fromTo(el, { scale: 1.12, filter: "blur(16px)" }, + { scale: 1, filter: "blur(0px)", duration: rd, ease: "power2.out" }, rt); + // hold life: glyph edges breathe (blur 0 → ~0.8 → 0, slow) + const bt = rt + Math.max(0.82, rd + 0.02), bd = k % 2 ? 0.5 : 0.66; + if (bt + bd <= ${XOUT} + 0.02) { + tl.to(el, { keyframes: { filter: ["blur(0px)","blur(0.8px)","blur(0.15px)","blur(0.7px)","blur(0px)"] }, + duration: bd, ease: "none" }, bt); + } + }); +${ + loomD >= 0.2 + ? ` // gentle loom on the group through the hold + tl.to("#inkG", { scale: 1.018, duration: ${loomD}, ease: "power1.inOut", transformOrigin: "50% 50%" }, ${loomT});` + : "" +} + + // faint ink wisps curl off the word top during the hold +${ + C + 0.573 + 0.6 <= XOUT + ? ` tl.set("#ikwisp1", { opacity: 0.45, transformOrigin: "50% 50%" }, ${(C + 0.573).toFixed(3)}); + tl.fromTo("#ikwisp1", { y: 0, x: 0, rotation: 14, scaleY: 1 }, + { y: -44, x: 12, rotation: 96, scaleY: 1.6, duration: 0.95, ease: "power1.out" }, ${(C + 0.573).toFixed(3)}); + tl.to("#ikwisp1", { opacity: 0, duration: 0.4, ease: "power1.in" }, ${(C + 1.123).toFixed(3)});` + : "" +} +${ + C + 0.753 + 0.6 <= XOUT + ? ` tl.set("#ikwisp2", { opacity: 0.4, transformOrigin: "50% 50%" }, ${(C + 0.753).toFixed(3)}); + tl.fromTo("#ikwisp2", { y: 0, x: 0, rotation: -18, scaleY: 1 }, + { y: -40, x: -14, rotation: -98, scaleY: 1.5, duration: 0.9, ease: "power1.out" }, ${(C + 0.753).toFixed(3)}); + tl.to("#ikwisp2", { opacity: 0, duration: 0.38, ease: "power1.in" }, ${(C + 1.273).toFixed(3)});` + : "" +} + + // exit: re-dissolve — blur up + spread + fade, ink dispersing + tl.to("#inkG", { scale: 1.15, filter: "blur(11px)", opacity: 0, + duration: 0.52, ease: "power1.in" }, ${XOUT}); + tl.set("#inkG", { display: "none" }, ${Math.min(XOUT + 0.6, DUR - 0.02).toFixed(3)});`; + return { css, html, js }; +} + +function setpieceRansomnote() { + // ---- setpiece: RANSOMNOTE (letter-by-letter cutout slam → collective jolt → ripped off) ---- + // The hero word slams in BEHIND the subject as a ransom note: one cutout + // chip per letter (4 recipes cycled, seeded ±13% sizes / alternating-sign + // rotations / misaligned baselines), each slamming in oversized with a + // flight shadow that POPS tight on contact (power3.in crush → 2-frame + // squash → elastic settle) at S_i = I + 0.01 + step·i. When the LAST letter + // lands the whole word takes a collective 1-frame JOLT + a scene pulse + // (the plate punch anchors here — punchOffset is recomputed from the real + // letter count so the punch always lands on the jolt). Hold = slow loom + // keyframes (the crooked grid never straightens). Exit = letters RIPPED + // off one by one, a 1-frame paper-tear flash under each. Scene reaction = + // a collage scrim darkens the bright sky for the apex window. + const p = dna.hero.params || {}, + I = heroIn; + const STEP = p.step ?? 0.06, + CRUSH = p.crush ?? 0.09, + RSTAG = p.ripStag ?? 0.045; + const BASE = HG.fontPx; + const kf = BASE / 130; // chip chrome scales with the demo's 130px cut + const N = [...heroText].filter((c) => c !== " ").length; + const JOLT = +(I + 0.01 + STEP * (N - 1) + CRUSH).toFixed(3); + // rip schedule: letters tear off while the closing line speaks (demo: + // lastWord − 0.19), clamped so the last rip completes on frame and the + // note holds ≥0.45s after the jolt + let ripT = Math.min( + theme.hero.exitAt ?? LASTWORD.start - (p.ripLead ?? 0.19), + DUR - 0.22 - RSTAG * (N - 1), + ); + ripT = +Math.max(Math.min(ripT, DUR - 0.22 - RSTAG * (N - 1)), JOLT + 0.45).toFixed(3); + // the plate punch lands on the collective jolt, whatever the word length + if (dna.plate && dna.plate.punch) dna.plate.punchOffset = +(JOLT - I).toFixed(3); + const scrimT = +Math.max(0.02, I - 0.07).toFixed(3); + const loomT = +(JOLT + 0.1).toFixed(3); + const loomD = +Math.min(0.95, ripT - 0.08 - loomT).toFixed(2); + const css = ` + #rscrim { position:absolute; inset:0; opacity:0; + background: linear-gradient(180deg, rgba(12,8,5,0.66) 0%, rgba(12,8,5,0.48) 38%, + rgba(12,8,5,0.22) 62%, rgba(12,8,5,0.05) 100%); } + #rpulse { position:absolute; inset:0; opacity:0; background:rgba(10,6,3,0.75); } + #rnote { position:absolute; left:${HG.x}px; top:${HG.y}px; white-space:nowrap; } + .aw { display:inline-block; position:relative; margin:0 3px; } + .asp { display:inline-block; width:${Math.round(BASE * 0.3)}px; } + .aflash { position:absolute; inset:-5px; background:${dna.palette.flash || "#fffdf2"}; opacity:0; z-index:0; } + .awm { display:inline-block; position:relative; z-index:1; opacity:0; + filter: drop-shadow(0 ${Math.max(4, Math.round(7 * kf))}px 0 rgba(8,6,4,0.55)); } + .achip { display:inline-block; line-height:1.04; padding:0.05em 0.10em 0.09em; } +${ransomChipCss("0.01em")}`; + const html = `
+
+
`; + const js = ` + // ---- setpiece: RANSOMNOTE (letter chips slam → collective jolt → ripped off) ---- + const I = ${I.toFixed(3)}, STEP = ${STEP}, CRUSH = ${CRUSH}, RIPT = ${ripT}; + const arnd = mulberry32(${p.seed || 3939}); + ${RANSOM_TEAR} + const HARDA = "drop-shadow(0 ${Math.max(4, Math.round(7 * kf))}px 0 rgba(8,6,4,0.55))"; + const FLIGHTA = "drop-shadow(0 ${Math.max(10, Math.round(24 * kf))}px 5px rgba(8,6,4,0.30))"; + const group = document.getElementById("rnote"); + gsap.set(group, { xPercent: -50, yPercent: -50 }); + + // scene reacts: collage scrim darkens the bright sky for the apex window + tl.to("#rscrim", { opacity: ${p.scrim ?? 0.44}, duration: 0.12, ease: "power2.out" }, ${scrimT}); + + // ===== letter-by-letter ransom slam: S_k = I + 0.01 + STEP*k, contact = S_k + CRUSH + const RECSA = ["ca", "cb", "cc", "cd"]; + let k = 0; + ${J([...heroText])}.forEach((ch) => { + if (ch === " ") { + const sp = document.createElement("div"); sp.className = "asp"; + group.appendChild(sp); + return; + } + const aw = document.createElement("div"); aw.className = "aw"; + const fl = document.createElement("div"); fl.className = "aflash"; + fl.style.clipPath = tearPoly(arnd); + const mv = document.createElement("div"); mv.className = "awm"; + const chip = document.createElement("div"); chip.className = "achip " + RECSA[k % 4]; + chip.style.fontSize = Math.round(${BASE} * (0.85 + arnd() * 0.27)) + "px"; + chip.style.clipPath = tearPoly(arnd); + chip.textContent = ch; + mv.appendChild(chip); aw.appendChild(fl); aw.appendChild(mv); group.appendChild(aw); + // seeded crooked grid (demo grammar): rot sign alternates per letter, + // baseline shove dy leans the other way, the rip throws with the rot sign + const sgn = k % 2 ? 1 : -1; + const rot = sgn * (2 + arnd() * 3); + const dy = -sgn * (2 + arnd() * 4); + const rr = sgn * (15 + arnd() * 7); + const S = I + 0.01 + STEP * k, C = S + CRUSH; + tl.set(mv, { opacity: 1, scale: 1.5, rotation: rot * 1.8, y: dy - 20, filter: FLIGHTA }, S); + tl.to(mv, { scale: 1, rotation: rot, y: dy, duration: 0.085, ease: "power3.in" }, S + 0.005); + tl.set(mv, { filter: HARDA }, C); // shadow pop: snaps tight on contact + tl.set(mv, { scaleX: 1.07, scaleY: 0.93 }, C + 0.004); // contact squash, held 2 frames + tl.to(mv, { scaleX: 1, scaleY: 1, duration: 0.3, ease: "elastic.out(1, 0.4)" }, C + 0.087); + // ===== exit: RIPPED off one by one, tear flash 1 frame under each + const R = RIPT + ${RSTAG} * k; + tl.set(fl, { opacity: 0.85 }, R); + tl.set(fl, { opacity: 0 }, R + 0.045); + tl.to(mv, { rotation: rot + rr, y: dy - 34, opacity: 0, + duration: 0.16, ease: "power2.in" }, R); + k++; + }); + + // collective 1-frame jolt when the last letter lands + scene pulse + tl.set("#rnote", { y: 6 }, ${JOLT}); + tl.to("#rnote", { y: 0, duration: 0.14, ease: "power3.out" }, ${(JOLT + 0.042).toFixed(3)}); + tl.set("#rpulse", { opacity: ${p.pulse ?? 0.2} }, ${JOLT}); + tl.to("#rpulse", { opacity: 0, duration: 0.13, ease: "power1.out" }, ${(JOLT + 0.042).toFixed(3)}); +${ + loomD >= 0.35 + ? ` + // hold life: the pasted word looms (the crooked grid never straightens) + tl.to("#rnote", { keyframes: { scale: [1, 1.02, 1.006, 1.018, 1] }, + duration: ${loomD}, ease: "none" }, ${(JOLT + 0.1).toFixed(3)});` + : "" +} + tl.to("#rscrim", { opacity: 0, duration: 0.3, ease: "power1.in" }, ${(ripT + 0.06).toFixed(3)});`; + return { css, html, js }; +} + +const SETPIECES = { + detonation: setpieceDetonation, + decode: setpieceDecode, + drawon: setpieceDrawon, + cpslam: setpieceCpslam, + settle: setpieceSettle, + flapboard: setpieceFlapboard, + ledwipe: setpieceLedwipe, + vhsosd: setpieceVhsosd, + bossintro: setpieceBossintro, + rubberstamp: setpieceRubberstamp, + lasercage: setpieceLasercage, + boltstrike: setpieceBoltstrike, + holoboot: setpieceHoloboot, + biobloom: setpieceBiobloom, + silkribbon: setpieceSilkribbon, + scopetrace: setpieceScopetrace, + papermat: setpiecePapermat, + centerfold: setpieceCenterfold, + chalkwrite: setpieceChalkwrite, + spraytag: setpieceSpraytag, + brushwrite: setpieceBrushwrite, + inkbloom: setpieceInkbloom, + ransomnote: setpieceRansomnote, +}; + +if (!PARADIGMS[dna.body.paradigm]) + throw new Error("[make-theme] unknown body paradigm: " + dna.body.paradigm); +const body = PARADIGMS[dna.body.paradigm](); + +let setp = { css: "", html: "", js: "" }; +if (!heroInline && !HEROLESS) { + if (!SETPIECES[dna.hero.setpiece]) + throw new Error("[make-theme] unknown setpiece: " + dna.hero.setpiece); + setp = SETPIECES[dna.hero.setpiece](); +} +const fx = frontFx(); + +// bg file: plate reaction + embedded setpiece (+ body if body.layer === "bg") +const bodyInBg = dna.body.layer === "bg"; +const poemScrimInBg = dna.body.paradigm === "poem" && dna.body.scrim; +let bgExtra = { css: "", html: "", js: "" }; +if (poemScrimInBg) { + // poem keeps its scrim BEHIND the subject (subject stays lit) while the poem + // itself rides the fg alpha layer + const bgScrimSide = typeof CLEARER !== "undefined" && CLEARER === "right" ? "right" : "left"; + bgExtra.css = ` + #pscrimBg { position:absolute; inset:0; opacity:0; + background: linear-gradient(${bgScrimSide === "left" ? "100deg" : "260deg"}, + rgba(4,8,16,${dna.body.scrim.opacity}) 0%, rgba(4,8,16,${(dna.body.scrim.opacity * 0.6).toFixed(2)}) 38%, rgba(4,8,16,0) 62%); }`; + bgExtra.html = `
`; + bgExtra.js = ` + tl.fromTo("#pscrimBg", { opacity: 0 }, { opacity: 1, duration: 0.6, ease: "power1.out" }, 0.15); + tl.to("#pscrimBg", { opacity: 0, duration: 0.4, ease: "power1.in" }, ${(LASTWORD.start + 0.15).toFixed(3)});`; +} + +const bgHtml = bgSkeleton( + [bgExtra.html, setp.html, bodyInBg ? body.html : ""].filter(Boolean).join("\n"), + [bgExtra.css, setp.css, bodyInBg ? body.css : ""].filter(Boolean).join("\n"), + [bgExtra.js, setp.js, bodyInBg ? body.js : ""].filter(Boolean).join("\n"), +); +fs.writeFileSync(path.join(PROJECT, "index.html"), bgHtml); + +// fg file (rail.html): body paradigm (when fg) + setpiece fg parts + front fx +// (a setpiece may emit fgHtml/fgCss/fgJs — e.g. a verbatim caption chip that +// must ride ABOVE the matte while the setpiece scenery stays embedded behind) +if (!bodyInBg || fx.html || fx.js || setp.fgHtml) { + const fgHtml = fgSkeleton( + [!bodyInBg ? body.html : "", setp.fgHtml || "", fx.html].filter(Boolean).join("\n"), + [!bodyInBg ? body.css : "", setp.fgCss || "", fx.css].filter(Boolean).join("\n"), + [!bodyInBg ? body.js : "", setp.fgJs || "", fx.js].filter(Boolean).join("\n"), + ); + fs.writeFileSync(path.join(PROJECT, "rail.html"), fgHtml); +} else if (fs.existsSync(path.join(PROJECT, "rail.html"))) { + fs.unlinkSync(path.join(PROJECT, "rail.html")); +} + +// _postfx.sh: plate reaction after the matte composite (subject+text move as one) +const P = HEROLESS ? { grain: (dna.plate || {}).grain || 5 } : dna.plate || {}; +// punchOffset: themes whose impact is NOT the hero onset (e.g. flapboard's +// lock-complete clack) shift the plate punch anchor; default keeps onset+2f +const anchorT = (heroIn + (P.punchOffset ?? 0.045)).toFixed(3); +let filter; +// zoompan resamples EVERY frame (even z=1) -> run it 2x supersampled and +// lanczos back down so the always-on resample costs no sharpness (shake amps +// are in pixels -> doubled at 2x) +const SS = 2; +if (P.punch) { + const minor = P.minorPunch && LINES.find((L) => L.words.some((w) => w.minor)); + const minorT = minor ? (minor.words.find((w) => w.minor).start + 0.01).toFixed(3) : null; + filter = `scale=${W * SS}:${H * SS}:flags=lanczos,zoompan= + z='1+${P.punch}*exp(-${P.punchDecay || 9}*(time-${anchorT}))*between(time,${anchorT},${anchorT}+${P.shakeWindow || 0.6})${minorT ? `+${P.minorPunch}*exp(-10*(time-${minorT}))*between(time,${minorT},${minorT}+0.4)` : ""}': + x='iw/2-(iw/zoom/2)${P.shakeAmpX ? `+${P.shakeAmpX * SS}*exp(-${P.shakeDecay || 7}*(time-${anchorT}))*sin(2*PI*${P.shakeHz || 12}*(time-${anchorT}))*between(time,${anchorT},${anchorT}+${P.shakeWindow || 0.6})` : ""}': + y='ih/2-(ih/zoom/2)${P.shakeAmpY ? `+${P.shakeAmpY * SS}*exp(-${P.shakeDecay || 7}*(time-${anchorT}))*cos(2*PI*${((P.shakeHz || 12) * 1.31).toFixed(2)}*(time-${anchorT}))*between(time,${anchorT},${anchorT}+${P.shakeWindow || 0.6})` : ""}': + d=1:s=${W * SS}x${H * SS}:fps=${FPS},scale=${W}:${H}:flags=lanczos`; +} else if (P.pushIn) { + filter = `scale=${W * SS}:${H * SS}:flags=lanczos,zoompan=z='1+${P.pushIn}*time/${DUR.toFixed(2)}':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=1:s=${W * SS}x${H * SS}:fps=${FPS},scale=${W}:${H}:flags=lanczos`; +} else { + filter = `null`; +} +const rgba = P.rgbashift + ? `,rgbashift=rh=-${P.rgbashift}:bh=${P.rgbashift}:enable='between(t,${anchorT},${(heroIn + 0.125).toFixed(3)})+between(t,${(LASTWORD.start + 0.04).toFixed(3)},${(LASTWORD.start + 0.17).toFixed(3)})',format=yuv420p` + : ""; +fs.writeFileSync( + path.join(PROJECT, "_postfx.sh"), + `#!/usr/bin/env bash +# generated by make-theme.cjs — plate reaction for theme "${dna.name}" +set -euo pipefail +cd "$(dirname "$0")" +ffmpeg -y -v error -i final.mp4 -filter_complex " + [0:v]${filter}${rgba}, + noise=alls=${P.grain || 5}:allf=t+u[v]" \\ + -map "[v]" -map 0:a -c:v libx264 -crf 14 -preset slow -profile:v high -c:a copy \\ + final_fx.mp4 +echo "[postfx] ${dna.name} → final_fx.mp4" +`, +); + +console.log( + `[make-theme] ${dna.name}: index.html${!bodyInBg || fx.html ? " + rail.html" : ""} + _postfx.sh`, +); +console.log( + `[make-theme] body=${dna.body.paradigm}(${dna.body.layer}) hero=${HEROLESS ? "none (pure body)" : heroInline ? "inline:" + dna.hero.setpiece : dna.hero.setpiece + " @" + heroIn.toFixed(2) + "s"} lines=${LINES.length} dur=${DUR}s`, +); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/matte.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/matte.cjs new file mode 100644 index 000000000..bb0fe2343 --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/matte.cjs @@ -0,0 +1,279 @@ +#!/usr/bin/env node +/* + * matte.cjs — subject matting via hyperframes' built-in `remove-background` + * (rembg-equivalent u2net_human_seg, Apache-2.0, 320×320 input, ~9 fps on + * CoreML). Replaces the previous bundled PP-MattingV2 ONNX (34 MB asset + + * an onnxruntime inference loop in this script): one engine, zero bundled + * weights — the model auto-downloads once (~168 MB) to ~/.cache/hyperframes/. + * + * Semantics note (validated 2026-06-12 on 6 scenes + a cold-start E2E): a + * HUMAN segmenter by intent, not surgically. Thin offset furniture (mic boom + * arms) is usually excluded — captions render over it, behind the person — + * but large salient objects near the subject (a telescope rig) can still + * leak into the matte and occlude captions. Objects HELD by the subject + * (products, phones) may drop out intermittently, letting captions pass in + * front. Never assume: sample frames_fg/ before placing the hero. + * + * Pipeline: + * source.mp4 → hyperframes remove-background → ProRes 4444 .mov (lossless + * alpha; temp, deleted) → ffmpeg fps= → frames_fg/f_%04d.png. + * frames_bg/ is extracted at the same rate (preview tooling reads it). + * + * node matte.cjs + * Reads: /source.mp4 (any video in the project dir is adopted) + * Writes: /frames_fg/f_%04d.png (RGBA, subject opaque), + * /frames_bg/f_%04d.png, /matte.fps + * Env: HYPERFRAMES_ROOT — hyperframes checkout (default ~/Downloads/hyperframes) + */ +const path = require("path"); +const fs = require("fs"); +const os = require("os"); +const cp = require("child_process"); + +function hfCli() { + const roots = [ + process.env.HYPERFRAMES_ROOT, + path.resolve(__dirname, "..", "..", ".."), // skills/embedded-captions/scripts → repo root if in-repo + path.join(os.homedir(), "Downloads", "hyperframes"), + ].filter(Boolean); + for (const root of roots) { + const cli = path.join(root, "packages", "cli", "dist", "cli.js"); + if (fs.existsSync(cli)) return cli; + } + console.error("[matte] cannot find hyperframes cli — set HYPERFRAMES_ROOT to a built checkout"); + process.exit(3); +} + +function ensureSource(project) { + const src = path.join(project, "source.mp4"); + if (!fs.existsSync(src)) { + const found = fs + .readdirSync(project) + .filter((f) => /\.(mp4|mov|webm|mkv)$/i.test(f) && !f.startsWith("_")) + .map((f) => path.join(project, f))[0]; + if (!found) return src; + try { + fs.symlinkSync(path.basename(found), src); + } catch { + fs.copyFileSync(found, src); + } + console.log(`[matte] resolved source.mp4 -> ${path.basename(found)}`); + } + return src; +} + +function rateOf(expr) { + const [n, d] = String(expr || "").split("/"); + const f = parseFloat(n) / parseFloat(d || "1"); + return Number.isFinite(f) && f > 0 ? f : 0; +} + +// Prefer avg_frame_rate (frames/duration — the truth) over r_frame_rate (the +// container's nominal tick rate, which lies on VFR sources: a 24fps screen +// recording can carry r_frame_rate=60 and would 2.5x-desync the matte). +function probeRates(src) { + try { + const out = cp + .execFileSync("ffprobe", [ + "-v", + "0", + "-select_streams", + "v:0", + "-show_entries", + "stream=r_frame_rate,avg_frame_rate", + "-of", + "default=nk=1:nw=1", + src, + ]) + .toString() + .trim() + .split("\n"); + return { r: rateOf(out[0]), avg: rateOf(out[1]) }; + } catch { + return { r: 0, avg: 0 }; + } +} + +function probeFps(src) { + const { r, avg } = probeRates(src); + const f = avg || r; + return f > 0 ? Math.max(1, Math.round(f)) : 24; +} + +// VFR when nominal and actual disagree by >5% — the remove-background engine +// mishandles VFR timestamps (observed: 2251 fg frames vs 902 bg on one clip), +// so VFR sources get normalized to CFR before matting. +function isVfr(src) { + const { r, avg } = probeRates(src); + return r > 0 && avg > 0 && Math.abs(r - avg) / avg > 0.05; +} + +function extractFrames(src, dst, fps, extra = []) { + fs.mkdirSync(dst, { recursive: true }); + if (fs.readdirSync(dst).some((f) => f.endsWith(".png"))) return false; + cp.execFileSync( + "ffmpeg", + ["-y", "-i", src, "-vf", `fps=${fps}`, ...extra, path.join(dst, "f_%04d.png")], + { stdio: "ignore" }, + ); + return true; +} + +function countPngs(dir) { + try { + return fs.readdirSync(dir).filter((f) => f.endsWith(".png")).length; + } catch { + return 0; + } +} + +async function main() { + const project = path.resolve(process.argv[2] || ""); + if (!process.argv[2]) { + console.error("usage: matte.cjs "); + process.exit(1); + } + const src = ensureSource(project); + if (!fs.existsSync(src)) { + console.error(`[matte] no source video found in ${project}`); + process.exit(2); + } + + const fpsFile = path.join(project, "matte.fps"); + // read-with-catch (no exists-then-read TOCTOU): a missing/corrupt fps file + // simply falls through to probing the source. + let fps = 0; + try { + fps = parseInt(fs.readFileSync(fpsFile, "utf8").replace(/\D/g, ""), 10) || 0; + } catch { + /* no cached fps — probe below */ + } + if (!fps) fps = probeFps(src); + fs.writeFileSync(fpsFile, String(fps)); + + const framesBg = path.join(project, "frames_bg"); + const framesFg = path.join(project, "frames_fg"); + if (extractFrames(src, framesBg, fps)) + console.log(`[matte] source fps=${fps} → frames_bg extracted`); + + const want = countPngs(framesBg); + if (want > 0 && countPngs(framesFg) >= want) { + console.log(`[matte] frames_fg already complete (${want} frames) — nothing to do`); + return; + } + + // 1) subject matte via hyperframes (ProRes 4444 keeps the alpha lossless). + // VFR sources are normalized to CFR first — remove-background trusts + // timestamps and emits a desynced frame count on VFR input (the ghost + // double-subject bug: the pasted matte runs at the wrong speed). + let matteSrc = src; + if (isVfr(src)) { + const cfr = path.join(project, "_src_cfr.mp4"); + if (!fs.existsSync(cfr)) { + console.log( + `[matte] VFR source detected (nominal != actual fps) → normalizing to ${fps}fps CFR for matting`, + ); + cp.execFileSync( + "ffmpeg", + [ + "-y", + "-i", + src, + "-fps_mode", + "cfr", + "-r", + String(fps), + "-c:v", + "libx264", + "-crf", + "16", + "-preset", + "fast", + "-an", + cfr, + ], + { stdio: "ignore" }, + ); + } + matteSrc = cfr; + } + const mov = path.join(project, "_matte_tmp.mov"); + const t0 = Date.now(); + const cached = fs.existsSync( + path.join( + os.homedir(), + ".cache", + "hyperframes", + "background-removal", + "models", + "u2net_human_seg.onnx", + ), + ); + console.log( + `[matte] hyperframes remove-background (u2net_human_seg${cached ? "" : "; first run downloads ~168 MB"})… model load takes ~1-2 min with no output — not hung`, + ); + const r = cp.spawnSync("node", [hfCli(), "remove-background", matteSrc, "-o", mov], { + stdio: ["ignore", "pipe", "pipe"], + encoding: "utf8", + }); + if (r.status !== 0 || !fs.existsSync(mov)) { + console.error("[matte] remove-background FAILED:"); + console.error((r.stderr || r.stdout || "").split("\n").slice(-8).join("\n")); + process.exit(4); + } + + // 2) burst to RGBA pngs at the project rate + fs.mkdirSync(framesFg, { recursive: true }); + cp.execFileSync( + "ffmpeg", + ["-y", "-i", mov, "-vf", `fps=${fps}`, "-pix_fmt", "rgba", path.join(framesFg, "f_%04d.png")], + { stdio: "ignore" }, + ); + fs.rmSync(mov, { force: true }); + + // 3) count parity with frames_bg. Composite overlays fg by INDEX at matte.fps, + // so any fg/bg count mismatch is a time desync (subject ghosting). Handle + // BOTH directions: pad when short, linearly remap when long — and shout + // when the mismatch is big enough to mean broken timestamps upstream. + let got = countPngs(framesFg); + const tol = Math.max(2, Math.round(want * 0.01)); + if (Math.abs(got - want) > tol) { + console.error( + `[matte] WARN frame-count desync: fg=${got} vs bg=${want} (tolerance ${tol}). ` + + `Reconciling by remap — if the source is VFR this run predates the CFR fix; ` + + `delete frames_fg/ frames_bg/ matte.fps and re-run matte.cjs.`, + ); + } + if (got > want && want > 0) { + // keep want frames sampled evenly across got (re-times fg onto the bg timeline) + const keep = []; + for (let j = 1; j <= want; j++) + keep.push(Math.min(got, Math.max(1, Math.round((j - 0.5) * (got / want))))); + const tmp = path.join(project, "_fg_remap"); + fs.mkdirSync(tmp, { recursive: true }); + keep.forEach((srcIdx, k) => { + fs.copyFileSync( + path.join(framesFg, `f_${String(srcIdx).padStart(4, "0")}.png`), + path.join(tmp, `f_${String(k + 1).padStart(4, "0")}.png`), + ); + }); + fs.rmSync(framesFg, { recursive: true, force: true }); + fs.renameSync(tmp, framesFg); + got = countPngs(framesFg); + } + while (got < want && got > 0) { + fs.copyFileSync( + path.join(framesFg, `f_${String(got).padStart(4, "0")}.png`), + path.join(framesFg, `f_${String(got + 1).padStart(4, "0")}.png`), + ); + got++; + } + console.log( + `[matte] done in ${((Date.now() - t0) / 1000).toFixed(1)}s → fg=${got} bg=${want} @ ${fps}fps${got === want ? " (parity ok)" : ""}`, + ); +} + +main().catch((e) => { + console.error("[matte]", e.message); + process.exit(1); +}); diff --git a/plugins/hyperframes/skills/embedded-captions/scripts/measure-layout.cjs b/plugins/hyperframes/skills/embedded-captions/scripts/measure-layout.cjs new file mode 100644 index 000000000..b0720a58a --- /dev/null +++ b/plugins/hyperframes/skills/embedded-captions/scripts/measure-layout.cjs @@ -0,0 +1,293 @@ +#!/usr/bin/env node +/** + * measure-layout.cjs — pixel-perfect bbox measurement using headless Chromium. + * + * Loads the compiled index.html, seeks the GSAP timeline to specified sample + * times, queries every .cap container + every .w word span via + * getBoundingClientRect(), writes results to _layout.json. + * + * check-occlusion.cjs then reads _layout.json + frames_fg/*.png and computes + * per-word occlusion against the actual subject silhouette (matte alpha via + * sharp) — pixel accurate, no char_ratio guessing. + * + * Usage: + * node measure-layout.cjs [times...] + * If no times given, samples groups['in', 'out'] midpoints. + */ +const path = require("path"); +const fs = require("fs"); +const os = require("os"); + +// Locate hyperframes' bundled puppeteer. render-and-composite.sh exports +// HYPERFRAMES_ROOT; standalone we also try the in-repo path + ~/Downloads, and +// accept ANY puppeteer@* the bun store holds (not a pinned version). +const HF_ROOTS = [ + process.env.HYPERFRAMES_ROOT, + path.resolve(__dirname, "../../.."), // skills/embedded-captions/scripts → repo root if in-repo + path.join(os.homedir(), "Downloads", "hyperframes"), +].filter(Boolean); +let puppeteer = null; +for (const root of HF_ROOTS) { + const cands = [path.join(root, "node_modules", "puppeteer")]; + const bunDir = path.join(root, "node_modules", ".bun"); + try { + if (fs.existsSync(bunDir)) { + for (const d of fs.readdirSync(bunDir)) { + if (d.startsWith("puppeteer@")) + cands.push(path.join(bunDir, d, "node_modules", "puppeteer")); + } + } + } catch { + /* ignore */ + } + for (const p of cands) { + try { + if (fs.existsSync(p)) { + puppeteer = require(p); + break; + } + } catch { + /* try next */ + } + } + if (puppeteer) break; +} +if (!puppeteer) { + console.error( + "[measure] could not locate puppeteer — set HYPERFRAMES_ROOT to a built hyperframes checkout", + ); + process.exit(3); +} + +// Resolve hyperframes' bundled GSAP. The templates load GSAP from a CDN +// (cdn.jsdelivr.net), but in headless Chromium that request can be slow or +// blocked — the page's inline `gsap.timeline()` then throws "gsap is not +// defined" and the occlusion gate hard-fails. We inject this local copy on +// every new document (before any page script runs) so window.gsap always +// exists, and abort the CDN request so the parser never stalls on it. The +// render path is unaffected — this is measurement-only. +let gsapSource = null; +for (const root of HF_ROOTS) { + const cands = [path.join(root, "node_modules", "gsap", "dist", "gsap.min.js")]; + const bunDir = path.join(root, "node_modules", ".bun"); + try { + if (fs.existsSync(bunDir)) { + for (const d of fs.readdirSync(bunDir)) { + if (d.startsWith("gsap@")) + cands.push(path.join(bunDir, d, "node_modules", "gsap", "dist", "gsap.min.js")); + } + } + } catch { + /* ignore */ + } + for (const p of cands) { + try { + if (fs.existsSync(p)) { + gsapSource = fs.readFileSync(p, "utf8"); + break; + } + } catch { + /* try next */ + } + } + if (gsapSource) break; +} + +async function main() { + const projectDir = process.argv[2]; + if (!projectDir) { + console.error("usage: measure-layout.cjs [t1 t2 ...]"); + process.exit(1); + } + const indexPath = path.resolve(projectDir, "index.html"); + if (!fs.existsSync(indexPath)) { + console.error(`[measure] missing ${indexPath} — run make-composition.cjs first`); + process.exit(2); + } + + // Load plan to get groups + sample times + const planPath = path.join(projectDir, "plan.json"); + let plan = null; + if (fs.existsSync(planPath)) plan = JSON.parse(fs.readFileSync(planPath, "utf8")); + + // Determine sample times: per group, sample multiple points across [in, out] + // (catches subject motion within block, multi-frame validation). + const explicitTimes = process.argv.slice(3).map(Number).filter(Number.isFinite); + let sampleTimes = explicitTimes; + if (sampleTimes.length === 0 && plan?.groups) { + const allTimes = new Set(); + for (const g of plan.groups) { + const dur = g.out - g.in; + // 4 samples per group: 15%, 40%, 65%, 90% through window — covers entry/peak/exit + [0.15, 0.4, 0.65, 0.9].forEach((p) => allTimes.add(+(g.in + dur * p).toFixed(3))); + } + sampleTimes = [...allTimes].sort((a, b) => a - b); + } + + // Match render-and-composite's Chrome detection + const exe = + process.platform === "darwin" + ? "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" + : "/usr/bin/google-chrome"; + + const W = plan?.width || 720; + const H = plan?.height || 1290; + const FPS = plan?.fps || 24; + + const browser = await puppeteer.launch({ + headless: "new", + executablePath: fs.existsSync(exe) ? exe : undefined, + args: [ + "--disable-web-security", + "--allow-file-access-from-files", + `--window-size=${W},${H}`, + "--disable-dev-shm-usage", + ], + }); + try { + const page = await browser.newPage(); + await page.setViewport({ width: W, height: H, deviceScaleFactor: 1 }); + page.on("pageerror", (err) => console.error(`[browser-error] ${err.message}`)); + + // Inject local GSAP before any page script + abort the CDN + + + +
+${body.join("\n")} +
+ + + + +`; + +writeFileSync(outPath, html); + +// ---------- summary ---------- +console.log(`✓ wrote ${outPath}`); +console.log(` canvas: ${WIDTH}×${HEIGHT}`); +console.log(` frames (track 1): ${mounted.length}`); +console.log(` voice (track 10): ${voiceCount}`); +console.log(` bgm (track 11): ${bgmEmitted ? "yes" + bgmNote : "no"}`); +console.log(` captions (track 2): ${captionsEmitted ? "yes" : "no"}`); +console.log(` sfx (track 20+): ${sfxEmitted}`); +console.log(` assets staged: ${staged}/${wanted.size}`); +console.log(` total duration: ${TOTAL}s`); +if (repairs.length) { + console.log(`\nrepaired (frame files updated in place):`); + for (const rp of repairs) console.log(` - ${rp}`); +} +if (anomalies.length) { + console.log(`\nanomalies (non-fatal):`); + for (const a of anomalies) console.log(` - ${a}`); +} diff --git a/plugins/hyperframes/skills/faceless-explainer/scripts/audio.mjs b/plugins/hyperframes/skills/faceless-explainer/scripts/audio.mjs new file mode 100644 index 000000000..f1f9df1b9 --- /dev/null +++ b/plugins/hyperframes/skills/faceless-explainer/scripts/audio.mjs @@ -0,0 +1,253 @@ +#!/usr/bin/env node +// audio.mjs — faceless-explainer audio ADAPTER. The TTS / BGM / SFX implementation +// no longer lives here: it is the shared engine at +// ../../hyperframes-media/scripts/audio.mjs. This file only (a) maps the +// frame model (SCRIPT.md frames + STORYBOARD.md music/sfx) into the +// engine's neutral audio_request.json, (b) converts the engine's id-keyed +// audio_meta back into the frame-keyed shape captions.mjs / assemble-index.mjs +// already consume, and (c) keeps the local `sync-durations` pass (it rewrites +// STORYBOARD.md, which is this skill's concern). +// +// Three modes (unchanged CLI surface): +// (default) generate — engine --only tts,bgm. BGM mode is "retrieve" (strict: +// no HeyGen credential ⇒ skip, never a detached generate, since this +// workflow has no wait-bgm step). Runs in the background during Step 4. +// sync-durations — write real voice durations into STORYBOARD.md (local). +// fetch-sfx — engine --only sfx, merged into the existing meta (Step 5, +// after the frames' `sfx:` cues exist). +// +// node audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json +// node audio.mjs sync-durations --audio-meta ./audio_meta.json --storyboard ./STORYBOARD.md +// node audio.mjs fetch-sfx --storyboard ./STORYBOARD.md --hyperframes . + +import { spawnSync } from "node:child_process"; +import { existsSync, readFileSync, writeFileSync } from "node:fs"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { parseStoryboard } from "./lib/storyboard.mjs"; + +const HERE = dirname(fileURLToPath(import.meta.url)); +const DEFAULT_ENGINE = join(HERE, "..", "..", "hyperframes-media", "scripts", "audio.mjs"); + +const flag = (argv, name, def) => { + const i = argv.indexOf(`--${name}`); + return i >= 0 && i + 1 < argv.length ? argv[i + 1] : def; +}; +const pad2 = (n) => String(n).padStart(2, "0"); + +// SCRIPT.md → [{ frame, text }]. `## … (Frame N)` opens a line; `**key:**` rows +// are metadata; the indented block is the spoken text (the only TTS input). +function parseScript(md) { + const out = []; + let cur = null; + const flush = () => { + if (cur && cur.text.trim()) out.push({ frame: cur.frame, text: cur.text.trim() }); + cur = null; + }; + for (const line of md.split(/\r?\n/)) { + const h = line.match(/^#{2,3}\s+.*?\(frame\s+(\d+)\)/i); + if (h) { + flush(); + cur = { frame: Number(h[1]), text: "" }; + continue; + } + if (!cur) continue; + if (/^\s*\*\*/.test(line)) continue; + const m = line.match(/^(?: {4,}|\t)(.+)$/); + if (m) cur.text += (cur.text ? " " : "") + m[1].trim(); + } + flush(); + return out; +} + +// Path of the engine's neutral meta — a stable sidecar so `--only` merges +// (generate then fetch-sfx) accumulate, while audio_meta.json holds the PL shape. +const neutralPath = (plOutPath) => join(dirname(plOutPath), "audio_engine_meta.json"); + +// Run the shared engine. Returns nothing; dies on a non-zero exit. +function runEngine({ request, hyperframesDir, neutral, only, extra = [] }, die) { + const reqPath = join(hyperframesDir, "audio_request.json"); + writeFileSync(reqPath, JSON.stringify(request, null, 2)); + const engine = process.env.HF_MEDIA_ENGINE || DEFAULT_ENGINE; + if (!existsSync(engine)) die(`media audio engine not found at ${engine} (set $HF_MEDIA_ENGINE)`); + const args = [ + engine, + "--request", + reqPath, + "--hyperframes", + hyperframesDir, + "--out", + neutral, + "--only", + only, + ...extra, + ]; + const r = spawnSync("node", args, { stdio: "inherit" }); + if (r.status !== 0) die(`media audio engine exited ${r.status}`); +} + +// Engine neutral meta (id-keyed) → frame-keyed meta consumed by +// captions.mjs / assemble-index.mjs. id is the zero-padded frame number. +function toFrameKeyedMeta(neutral) { + const voices = (neutral.voices ?? []).map((v) => ({ + frame: Number(v.id), + path: v.path, + duration_s: v.duration_s, + words: (v.words ?? []).map((w) => ({ id: w.id, text: w.text, start: w.start, end: w.end })), + })); + const bgm = neutral.bgm + ? { + path: neutral.bgm.path, + volume: neutral.bgm.volume, + query: neutral.bgm.query ?? null, + duration_s: neutral.bgm.duration_s ?? null, + } + : null; + const sfx = (neutral.sfx ?? []).map((s) => ({ + frame: Number(s.id), + file: s.file, + offset_s: s.offset_s ?? 0, + duration_s: s.duration_s ?? 1, + volume: s.volume ?? 0.35, + })); + return { bgm, voices, sfx }; +} + +// ── generate (TTS + BGM) ──────────────────────────────────────────────────── +function runGenerate(argv) { + const die = (m) => { + console.error(`✗ audio generate: ${m}`); + process.exit(1); + }; + const hyperframesDir = resolve(flag(argv, "hyperframes", ".")); + const storyboardPath = resolve(flag(argv, "storyboard", join(hyperframesDir, "STORYBOARD.md"))); + const scriptPath = resolve(flag(argv, "script", join(hyperframesDir, "SCRIPT.md"))); + const outPath = resolve(flag(argv, "out", join(hyperframesDir, "audio_meta.json"))); + const userVoice = flag(argv, "voice", null); + const speed = Number(flag(argv, "speed", "1.0")) || 1.0; + + if (!existsSync(storyboardPath)) die(`STORYBOARD.md not found at ${storyboardPath}`); + const manifest = parseStoryboard(readFileSync(storyboardPath, "utf8")); + const g = manifest.globals; + + const lines = existsSync(scriptPath) + ? parseScript(readFileSync(scriptPath, "utf8")).map((l) => ({ + id: pad2(l.frame), + text: l.text, + })) + : []; + if (!lines.length) console.error("· no SCRIPT.md — silent film (BGM only)"); + + // BGM mood: storyboard `music:` → message → arc → default. `mode: retrieve` is + // strict here (no wait-bgm step downstream). + const query = (g.extra && g.extra.music) || g.message || g.arc || "calm cinematic underscore"; + const request = { + provider: "auto", + speed, + lines, + bgm: { mode: "retrieve", query, blob: g.message || "", arc: g.arc || "" }, + }; + if (userVoice) request.voice = userVoice; + + const neutral = neutralPath(outPath); + runEngine({ request, hyperframesDir, neutral, only: "tts,bgm" }, die); + + const meta = toFrameKeyedMeta(JSON.parse(readFileSync(neutral, "utf8"))); + writeFileSync(outPath, JSON.stringify(meta, null, 2)); + console.log( + `✓ audio generate: ${meta.voices.length} voice + ${meta.bgm ? "1 bgm" : "no bgm"} → ${outPath}`, + ); +} + +// ── fetch-sfx ──────────────────────────────────────────────────────────────── +function runFetchSfx(argv) { + const die = (m) => { + console.error(`✗ audio fetch-sfx: ${m}`); + process.exit(1); + }; + const hyperframesDir = resolve(flag(argv, "hyperframes", ".")); + const storyboardPath = resolve(flag(argv, "storyboard", join(hyperframesDir, "STORYBOARD.md"))); + const outPath = resolve(flag(argv, "audio-meta", join(hyperframesDir, "audio_meta.json"))); + + if (!existsSync(storyboardPath)) die(`STORYBOARD.md not found at ${storyboardPath}`); + const manifest = parseStoryboard(readFileSync(storyboardPath, "utf8")); + + // Per-frame `sfx:` cues (comma-separated) → engine lines carrying only sfx. + const lines = []; + for (const f of manifest.frames) { + const names = (f.extra?.sfx ?? "") + .split(",") + .map((s) => s.trim()) + .filter(Boolean); + if (names.length && f.number != null) lines.push({ id: pad2(f.number), sfx: names }); + } + + const neutral = neutralPath(outPath); + const request = { lines, bgm: { mode: "none" } }; + // --only sfx is a MERGE, not an overwrite: the engine reads the existing neutral + // sidecar (audio_engine_meta.json) and recomputes only the sfx section, so the + // voices/bgm written by the earlier generate (--only tts,bgm) pass are preserved. + runEngine({ request, hyperframesDir, neutral, only: "sfx" }, die); + + const meta = toFrameKeyedMeta(JSON.parse(readFileSync(neutral, "utf8"))); + writeFileSync(outPath, JSON.stringify(meta, null, 2)); + console.log(`✓ audio fetch-sfx: ${meta.sfx.length} SFX cue(s) → ${outPath}`); +} + +// ── sync-durations (local; rewrites STORYBOARD.md) ──────────────────────────── +function runSyncDurations(argv) { + const die = (m) => { + console.error(`✗ audio sync-durations: ${m}`); + process.exit(1); + }; + const hyperframesDir = resolve(flag(argv, "hyperframes", ".")); + const audioMetaPath = resolve(flag(argv, "audio-meta", join(hyperframesDir, "audio_meta.json"))); + const storyboardPath = resolve(flag(argv, "storyboard", join(hyperframesDir, "STORYBOARD.md"))); + if (!existsSync(audioMetaPath)) die(`audio_meta.json not found at ${audioMetaPath}`); + + const meta = JSON.parse(readFileSync(audioMetaPath, "utf8")); + const durByFrame = new Map(); + for (const v of meta.voices ?? []) { + if (v.frame != null && v.duration_s) durByFrame.set(v.frame, v.duration_s); + } + + // Read directly and handle ENOENT here, rather than an existsSync precheck — + // the check→write pair (write-back below) is a TOCTOU race CodeQL flags. + let storyboardRaw = ""; + try { + storyboardRaw = readFileSync(storyboardPath, "utf8"); + } catch { + die(`STORYBOARD.md not found at ${storyboardPath}`); + } + const lines = storyboardRaw.split(/\r?\n/); + const FRAME_RE = /^#{2,3}\s+(?:frame|beat|scene)\b.*?(\d+)/i; + let curFrame = null; + let updated = 0; + for (let i = 0; i < lines.length; i++) { + const h = lines[i].match(FRAME_RE); + if (h) { + curFrame = Number(h[1]); + continue; + } + if (curFrame != null && durByFrame.has(curFrame)) { + const m = lines[i].match(/^(\s*[-*]\s+duration\s*:\s*).*/i); + if (m) { + lines[i] = `${m[1]}${durByFrame.get(curFrame)}s`; + durByFrame.delete(curFrame); + updated++; + } + } + } + writeFileSync(storyboardPath, lines.join("\n")); + const missing = [...durByFrame.keys()]; + console.log( + `✓ audio sync-durations: ${updated} frame duration(s) updated` + + (missing.length ? ` · no \`- duration:\` line for frame(s) ${missing.join(", ")}` : ""), + ); +} + +// ── dispatch ────────────────────────────────────────────────────────────────── +const sub = process.argv[2]; +if (sub === "sync-durations") runSyncDurations(process.argv.slice(3)); +else if (sub === "fetch-sfx") runFetchSfx(process.argv.slice(3)); +else runGenerate(process.argv.slice(2)); // default: generate diff --git a/plugins/hyperframes/skills/faceless-explainer/scripts/build-frame.mjs b/plugins/hyperframes/skills/faceless-explainer/scripts/build-frame.mjs new file mode 100644 index 000000000..74171acaa --- /dev/null +++ b/plugins/hyperframes/skills/faceless-explainer/scripts/build-frame.mjs @@ -0,0 +1,536 @@ +#!/usr/bin/env node +// build-frame.mjs — Step 2 design system in ONE command. The LLM only chooses a +// preset; this does the deterministic rest: copy the preset's FRAME.md → frame.md, +// remix its colors/typography onto the project's brand tokens, copy the preset's +// caption-skin.html, and self-validate. "Strict on brand" is deterministic, so it's +// a script, not LLM hand-editing (which mis-copies hex / breaks keys). +// +// node build-frame.mjs --preset capsule --hyperframes . +// [--tokens capture/extracted/tokens.json] [--preset-dir ] +// +// Remix rule — ONLY `colors:` values and `typography:` fontFamily change; keys, +// structure, geometry, and components are untouched: +// colors — map brand tokens onto the preset's keys BY ROLE: the ink-role key takes +// the brand ink (darkest/ink-named), the canvas-role key takes the brand +// canvas (lightest), and every other color is repainted with the nearest +// brand accent's hue+saturation while KEEPING its own lightness, so tint +// families (sun / sun-soft / haze) stay a family. Empty brand colors → the +// preset palette is kept (it is already a complete, good design). +// fonts — the preset's display family → the brand display font, its body family → +// the brand body font, wherever they appear. Empty brand fonts → kept. + +import { + copyFileSync, + existsSync, + mkdirSync, + readdirSync, + readFileSync, + writeFileSync, +} from "node:fs"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { + brandRolesFromStats, + chroma, + lum, + parseColors, + parseFonts, + pickAccent, + semanticColors, + UA_DEFAULT_COLORS, +} from "./lib/tokens.mjs"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const argv = process.argv.slice(2); +const flag = (name, def) => { + const i = argv.indexOf(`--${name}`); + return i >= 0 && i + 1 < argv.length ? argv[i + 1] : def; +}; +const die = (m) => { + console.error(`✗ build-frame: ${m}`); + process.exit(1); +}; + +const presetName = flag("preset", null); +const hyperframesDir = resolve(flag("hyperframes", ".")); +const presetDir = resolve( + flag("preset-dir", join(__dirname, "../../hyperframes-creative/frame-presets")), +); +const tokensPath = resolve(flag("tokens", join(hyperframesDir, "capture/extracted/tokens.json"))); + +if (!presetName) die("--preset is required"); +const presetFrame = join(presetDir, presetName, "FRAME.md"); +if (!existsSync(presetFrame)) { + const avail = existsSync(presetDir) + ? readdirSync(presetDir, { withFileTypes: true }) + .filter((d) => d.isDirectory()) + .map((d) => d.name) + : []; + die( + `no FRAME.md for preset "${presetName}" under ${presetDir}\n available: ${avail.join(", ")}`, + ); +} + +// ── HSL helpers (recolor = brand hue+sat, original lightness) ────────────────── +function hexToHsl(hex) { + const m = /^#?([0-9a-fA-F]{6})$/.exec(String(hex).trim()); + if (!m) return null; + const n = parseInt(m[1], 16); + const r = ((n >> 16) & 255) / 255, + g = ((n >> 8) & 255) / 255, + b = (n & 255) / 255; + const max = Math.max(r, g, b), + min = Math.min(r, g, b), + d = max - min; + let h = 0; + const l = (max + min) / 2; + const s = d === 0 ? 0 : l > 0.5 ? d / (2 - max - min) : d / (max + min); + if (d !== 0) { + h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4; + h *= 60; + } + return { h, s, l }; +} +function hslToHex(h, s, l) { + h = (((h % 360) + 360) % 360) / 360; + const hue = (p, q, t) => { + t = (t + 1) % 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; + }; + let r, g, b; + if (s === 0) { + r = g = b = l; + } else { + const q = l < 0.5 ? l * (1 + s) : l + s - l * s; + const p = 2 * l - q; + r = hue(p, q, h + 1 / 3); + g = hue(p, q, h); + b = hue(p, q, h - 1 / 3); + } + const to = (x) => + Math.round(x * 255) + .toString(16) + .padStart(2, "0") + .toUpperCase(); + return `#${to(r)}${to(g)}${to(b)}`; +} +const hueDist = (a, b) => { + const d = Math.abs(a - b) % 360; + return d > 180 ? 360 - d : d; +}; +function hexToRgb(hex) { + const m = /^#?([0-9a-fA-F]{6})$/.exec(String(hex).trim()); + if (!m) return null; + const n = parseInt(m[1], 16); + return [(n >> 16) & 255, (n >> 8) & 255, n & 255]; +} +const rgbToHsl = (r, g, b) => + hexToHsl("#" + [r, g, b].map((x) => Math.round(x).toString(16).padStart(2, "0")).join("")); +// Repaint a chromatic rgba()/rgb() tint with the brand accent's RGB, keeping its alpha. +// A near-neutral rgb (shadow / scrim overlay) is left untouched; a non-rgba string → null. +function remapRgbaToAccent(val, brAccent, brAccent2, prAccentHsl, prAccent2Hsl) { + const m = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)\s*(?:[,/]\s*([\d.]+%?))?\s*\)$/i.exec( + String(val).trim(), + ); + if (!m) return null; + const r = +m[1], + g = +m[2], + b = +m[3], + a = m[4]; + if (Math.max(r, g, b) - Math.min(r, g, b) < 16) return null; // neutral overlay — keep as-is + const src = rgbToHsl(r, g, b); + const useSecond = + brAccent2 && + prAccentHsl && + prAccent2Hsl && + src && + hueDist(src.h, prAccent2Hsl.h) < hueDist(src.h, prAccentHsl.h); + const t = hexToRgb(useSecond ? brAccent2 : brAccent); + if (!t) return null; + return a !== undefined + ? `rgba(${t[0]}, ${t[1]}, ${t[2]}, ${a})` + : `rgb(${t[0]}, ${t[1]}, ${t[2]})`; +} + +// ── brand tokens ────────────────────────────────────────────────────────────── +let brandColors = []; +let brandFonts = []; +let brandFontWeights = []; // weights the brand text font actually ships (tokens fonts[].weights) +let brandColorStats = []; // rich per-color usage stats (areaBg / interactiveBg / textCount …) +// Icon/glyph fonts capture surfaces as "fonts" — they are never the brand text face +// (webflow-icons, Font Awesome, icomoon …) and must not become display/body or contribute weights. +const isIconFont = (name) => + /(?:^|[\s_-])icons?(?:[\s_-]|$)|icomoon|font\s*-?awesome|glyphicons?|material\s*icons|feather\s*icons/i.test( + String(name), + ); +if (existsSync(tokensPath)) { + try { + const t = JSON.parse(readFileSync(tokensPath, "utf8")); + brandColors = (t.colors ?? []) + .map((c) => (typeof c === "string" ? c : (c?.hex ?? c?.value ?? ""))) + .map((c) => String(c).trim()) + .filter((c) => /^#?[0-9a-fA-F]{6}$/.test(c)) + .map((c) => (c.startsWith("#") ? c : `#${c}`)); + brandFonts = (t.fonts ?? []) + .map((f) => (typeof f === "string" ? f : (f?.family ?? f?.name ?? ""))) + .map((f) => String(f).split(",")[0].replace(/['"]/g, "").trim()) + .filter(Boolean) + .filter((f) => !isIconFont(f)); + // Union of the (non-icon) brand fonts' available weights — used to clamp the preset's + // type ramp so a font shipping only 400/500 never faux-bolds a 600/700 heading. + brandFontWeights = [ + ...new Set( + (t.fonts ?? []) + .filter((f) => f && typeof f === "object" && !isIconFont(f.family ?? f.name ?? "")) + .flatMap((f) => (Array.isArray(f.weights) ? f.weights : [])) + .map((w) => parseInt(w, 10)) + .filter((w) => Number.isFinite(w)), + ), + ].sort((a, b) => a - b); + brandColorStats = Array.isArray(t.colorStats) ? t.colorStats : []; + } catch (e) { + die(`tokens.json parse: ${e.message}`); + } +} + +let md = readFileSync(presetFrame, "utf8"); +const presetColors = parseColors(md); +const summary = []; + +// ── color remix ─────────────────────────────────────────────────────────────── +if (brandColors.length && presetColors.length) { + const pr = semanticColors(presetColors); + // Brand roles: prefer the function-based reading of capture colorStats (canvas = + // largest background, accent = top interactive bg, ink = dominant contrasting text). + // Fall back to the legacy luminance/chroma heuristic only when stats are absent — + // but pick the accent via pickAccent either way so a UA-default link color never wins. + const br = + brandRolesFromStats(brandColorStats, brandColors) ?? + (() => { + // strip UA-default link colors so a stray color can't become ink/canvas/accent + const clean = brandColors.filter((h) => !UA_DEFAULT_COLORS.has(h.toUpperCase())); + const s = semanticColors(clean.map((h, i) => [`c${i}`, h])); + return { + ink: s.ink, + canvas: s.canvas, + accent: pickAccent(brandColorStats, clean, [s.ink, s.canvas]) ?? s.accent, + accent2: s.accent2, + }; + })(); + if (!br.accent) die("accent 选取失败:品牌色里没有可用的强调色"); + if (chroma(br.accent) <= 40) { + console.warn( + ` ⚠ accent ${br.accent} 彩度很低 (${chroma(br.accent)}) — 确认这是品牌色而非中性/默认色`, + ); + } + // Map by LUMINANCE POLARITY. The preset's darker value takes the brand's darker value and + // the lighter takes the lighter — UNLESS the brand's GROUND polarity differs from the + // preset's. Every shipped preset is light-ground; a dark-mode brand (Linear, Vercel, + // Raycast…) has its canvas darker than its ink (colorStats already resolved the real + // ground as the largest-area background). On a polarity MISMATCH we INVERT the mapping so a + // light preset becomes the dark brand (canvas↔ink swap) instead of forcing the brand onto + // an off-brand light video; neutral/tint lightness is then mirrored (L→1−L) so the whole + // palette flips to the brand's ground. Same-polarity (the common case) is unchanged. + const darker = (a, b) => ((lum(a) ?? 0) <= (lum(b) ?? 0) ? a : b); + const prDark = darker(pr.ink, pr.canvas); + const prLight = prDark === pr.ink ? pr.canvas : pr.ink; + const brDark = darker(br.ink, br.canvas); + const brLight = brDark === br.ink ? br.canvas : br.ink; + const presetGroundDark = (lum(pr.canvas) ?? 255) < (lum(pr.ink) ?? 0); + const brandGroundDark = (lum(br.canvas) ?? 255) < (lum(br.ink) ?? 0); + const invert = presetGroundDark !== brandGroundDark; + const mapDark = invert ? brLight : brDark; // preset's dark value → this brand value + const mapLight = invert ? brDark : brLight; // preset's light value → this brand value + const flipL = (l) => (invert ? 1 - l : l); // mirror tint/neutral lightness when flipping + const prAccentHsl = hexToHsl(pr.accent); + const prAccent2Hsl = hexToHsl(pr.accent2); + const newByKey = new Map(); + for (const [key, val] of presetColors) { + const ph = hexToHsl(val); + let next; + if (val === prDark) next = mapDark; + else if (val === prLight) next = mapLight; + else if ( + /(?:^|[-_])(?:positive|negative|success|error|warning|danger|good|bad|up|down)(?:[-_]|$)/i.test( + key, + ) + ) + // semantic status colors (green/red …) — the HUE carries the meaning; never repaint. + // MUST precede the accent checks: a preset's red "negative" is often its 2nd-most-chromatic + // color and would otherwise be claimed as accent2 and recolored to the brand hue. + next = val; + else if (val === pr.accent) + next = br.accent; // primary accent → the EXACT brand color + else if (pr.accent2 !== pr.accent && val === pr.accent2) + next = br.accent2; // exact 2nd accent + else if (!ph) { + // rgba()/rgb() tint → repaint its rgb with the brand accent, keep alpha (a neutral + // overlay is kept). A non-color non-hex value (var(), named) falls through unchanged. + next = remapRgbaToAccent(val, br.accent, br.accent2, prAccentHsl, prAccent2Hsl) ?? val; + } else if (chroma(val) < 16) { + // NEUTRAL source (grey text-ladder, hairline borders) → keep it NEUTRAL. Apply at most a + // whisper of the brand hue (sat ≤ 0.06); never the accent's full saturation — that is what + // turned the grey ladder into saturated blue. + const bh = hexToHsl(br.accent); + next = bh ? hslToHex(bh.h, Math.min(ph.s, 0.06), flipL(ph.l)) : val; + } else { + // chromatic tint → repaint with the nearest brand accent's hue+sat, keep THIS color's + // lightness so tint families stay families. + const useSecond = + pr.accent !== pr.accent2 && + prAccentHsl && + prAccent2Hsl && + hueDist(ph.h, prAccent2Hsl.h) < hueDist(ph.h, prAccentHsl.h); + const bh = hexToHsl(useSecond ? br.accent2 : br.accent); + next = bh ? hslToHex(bh.h, bh.s, flipL(ph.l)) : val; + } + if (next !== val) newByKey.set(key, next); + } + // rewrite only the value of each colors: line; everything else byte-identical. + let inBlock = false; + md = md + .split(/\r?\n/) + .map((line) => { + if (/^colors:\s*$/.test(line)) { + inBlock = true; + return line; + } + if (inBlock && /^\S/.test(line)) inBlock = false; + if (!inBlock) return line; + const m = line.match( + /^(\s+)([\w-]+):\s*(?:"[^"]*"|'[^']*'|#[0-9a-fA-F]{3,8}|rgba?\([^)]*\)|[^#\n]*?)(\s+#.*)?$/, + ); + if (m && newByKey.has(m[2])) return `${m[1]}${m[2]}: "${newByKey.get(m[2])}"${m[3] ?? ""}`; + return line; + }) + .join("\n"); + summary.push( + `colors: ${invert ? "INVERTED (dark-mode brand on light preset) · " : ""}dark ${prDark}→${mapDark}, light ${prLight}→${mapLight}, accent ${pr.accent}→${br.accent}` + + ` (${newByKey.size}/${presetColors.length} keys repainted${brandColorStats.length ? ", via colorStats" : ""})`, + ); +} else { + summary.push( + brandColors.length + ? "colors: preset has no parseable colors — kept" + : "colors: no brand colors — preset palette kept", + ); +} + +// ── font remix ──────────────────────────────────────────────────────────────── +if (brandFonts.length) { + const pf = parseFonts(md); + const strip = (q) => (q ? q.replace(/^"|"$/g, "") : null); + const pDisplay = strip(pf.display); + const pBody = strip(pf.body); + const pMono = strip(pf.mono); + // A monospace brand face is for code / labels / chrome — never the reading display or body. + // Split the brand fonts: the primary NON-mono family carries display AND body (the common + // single-sans case, e.g. Inter for everything), and a captured mono (Berkeley Mono, + // JetBrains Mono…) is routed onto the preset's mono role instead of turning the body + // monospace. (Distinct display/body brands still resolve to a clean sans; hand-tune the + // display in frame.md if a separate display face is wanted.) + const isMonoFont = (n) => + /(?:^|[\s_-])mono(?:[\s_-]|$)|monospace|consol|courier|menlo|monaco|jetbrains|berkeley|space\s*mono|ibm\s*plex\s*mono|sf\s*mono|roboto\s*mono|source\s*code|fira\s*code|geist\s*mono|dm\s*mono/i.test( + String(n), + ); + const nonMono = brandFonts.filter((f) => !isMonoFont(f)); + const monoFonts = brandFonts.filter(isMonoFont); + const bDisplay = nonMono[0] ?? brandFonts[0]; + const bBody = nonMono[0] ?? brandFonts[0]; + const bMono = monoFonts[0] ?? null; + const escRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + // Replace the preset family as a WHOLE WORD/PHRASE everywhere — frontmatter values, + // component strings like "Space Grotesk 600", AND prose — case-sensitive with word + // boundaries so a single-word family ("Inter") can never corrupt a substring + // ("interactive"). Quote-exact replace alone missed names baked into longer strings + prose. + const swapFamily = (from, to) => { + if (from && to && from !== to) md = md.replace(new RegExp(`\\b${escRe(from)}\\b`, "g"), to); + }; + swapFamily(pDisplay, bDisplay); + if (pBody !== pDisplay) swapFamily(pBody, bBody); + // route the brand mono onto the preset's mono role (only if the preset has a DISTINCT mono + // family — never collapse body/display into mono) + if (bMono && pMono && pMono !== pBody && pMono !== pDisplay) swapFamily(pMono, bMono); + summary.push( + `fonts: display ${pDisplay}→${bDisplay}, body ${pBody}→${bBody}` + + (bMono && pMono && pMono !== pBody && pMono !== pDisplay ? `, mono ${pMono}→${bMono}` : ""), + ); +} else { + summary.push("fonts: no brand fonts — preset fonts kept"); +} + +// ── cap type weights to the brand font's available faces ────────────────────── +// The remix swaps the font FAMILY but keeps the preset's weights; a brand font that ships +// only e.g. 400/500 would faux-bold every 600/700 heading. Clamp each `typography:` weight +// to the NEAREST weight the brand font actually provides (tokens.json fonts[].weights). +if (brandFonts.length && brandFontWeights.length) { + const avail = brandFontWeights; + const nearest = (n) => + avail.reduce((best, w) => { + const dw = Math.abs(w - n), + db = Math.abs(best - n); + return dw < db || (dw === db && w > best) ? w : best; + }, avail[0]); + let capped = 0; + const cap = (num) => { + const n = parseInt(num, 10); + if (avail.includes(n)) return String(n); + const c = nearest(n); + if (c !== n) capped++; + return String(c); + }; + let inType = false; + md = md + .split(/\r?\n/) + .map((line) => { + if (/^typography:\s*$/.test(line)) { + inType = true; + return line; + } + if (inType && /^\S/.test(line)) inType = false; + let out = line; + // (a) structured `weight: NNN` in the typography ramp + if (inType) out = out.replace(/(\bweight:\s*)(\d{3})\b/g, (m, pfx, num) => pfx + cap(num)); + // (b) a weight baked into a quoted `typography:` component value, e.g. + // cta-button → typography: "Basier Square 600" (NNN not followed by a unit like px) + out = out.replace( + /(typography:\s*"[^"]*?\b)(\d{3})\b(?![a-z%])/gi, + (m, pfx, num) => pfx + cap(num), + ); + return out; + }) + .join("\n"); + if (capped) + summary.push(`fonts: capped ${capped} type weight(s) to brand faces {${avail.join(", ")}}`); +} + +// ── brand-adaptation note ───────────────────────────────────────────────────── +// The remix fixes the NORMATIVE frontmatter, but the preset's PROSE still carries its +// original weight ranges / color-names. Prepend a short "frontmatter is truth" header so a +// reader (or frame worker) interprets any lingering preset prose THROUGH the brand values — +// instead of fragile per-sentence prose surgery. +if (brandFonts.length || (brandColors.length && presetColors.length)) { + const bD = brandFonts[0]; + const bB = brandFonts[1] ?? brandFonts[0]; + const note = + `## Brand adaptation (READ FIRST — the frontmatter is the source of truth)\n\n` + + `This is the **${presetName}** preset remixed onto the captured brand. The YAML frontmatter above ` + + `(colors · typography · components) is **normative and already correct — use it verbatim.** The prose ` + + `below is the ORIGINAL preset's intent; read it THROUGH the frontmatter:\n\n` + + (brandFonts.length + ? `- **Fonts** — already set to **${bD}** (display) / **${bB}** (body); ignore any preset font name lingering in prose.\n` + : "") + + (brandFontWeights.length + ? `- **Weights** — the brand font ships \`{${brandFontWeights.join(", ")}}\` only; every weight is clamped to these — ignore higher preset weights (e.g. 600/700) in prose.\n` + : "") + + `- **Colors** — use the frontmatter hex; preset color NAMES in prose (e.g. "cobalt", "cream") mean the remapped brand values.\n`; + if (/^# .*$/m.test(md)) md = md.replace(/^# .*$/m, (m) => `${m}\n\n${note}`); + else md = `${note}\n${md}`; + summary.push("brand-adaptation note prepended"); +} + +// ── stage brand font files + emit @font-face ────────────────────────────────── +// A brand font is rarely a Google font, so renaming the family in frame.md is not enough: +// nothing loads the actual face. If the capture downloaded font files, copy them to +// assets/fonts/ under CLEAN, weight-named names (so captions.mjs' family-prefix matcher +// finds them too) and append a ready-to-paste, ROOT-RELATIVE @font-face block to frame.md. +if (brandFonts.length) { + const norm = (s) => + String(s) + .toLowerCase() + .replace(/[^a-z0-9]/g, ""); + const extOf = (f) => (f.match(/\.(woff2|woff|ttf|otf)$/i)?.[1] ?? "").toLowerCase(); + const FMT = { woff2: "woff2", woff: "woff", ttf: "truetype", otf: "opentype" }; + const weightInfo = (name) => { + const s = name.toLowerCase(); + if (/black|heavy|ultra|extrabold/.test(s)) return { n: 800, w: "ExtraBold" }; + if (/semibold|demibold/.test(s)) return { n: 600, w: "SemiBold" }; + if (/bold/.test(s)) return { n: 700, w: "Bold" }; + if (/medium/.test(s)) return { n: 500, w: "Medium" }; + if (/light|thin/.test(s)) return { n: 300, w: "Light" }; + return { n: 400, w: "Regular" }; + }; + const fams = [...new Set(brandFonts)]; + const srcDirs = [ + join(hyperframesDir, "capture/assets/fonts"), + join(hyperframesDir, "assets/fonts"), + ].filter((d) => existsSync(d)); + const files = []; + for (const d of srcDirs) + for (const f of readdirSync(d).sort()) if (extOf(f)) files.push({ d, f }); + // Single family → all font files belong to it (the common captured case, hash-named files + // included). Multiple families → assign each file to the longest family key its name contains. + const ranked = [...fams].sort((a, b) => norm(b).length - norm(a).length); + const famOf = (f) => + fams.length === 1 ? fams[0] : ranked.find((x) => norm(f).includes(norm(x))); + const outDir = join(hyperframesDir, "assets/fonts"); + const faces = []; + const stagedNames = new Set(); + for (const { d, f } of files) { + const fam = famOf(f); + if (!fam) continue; + const { n, w } = weightInfo(f); + const clean = `${fam.replace(/[^A-Za-z0-9]/g, "")}-${w}.${extOf(f)}`; + if (stagedNames.has(clean)) continue; + mkdirSync(outDir, { recursive: true }); + if (!existsSync(join(outDir, clean))) copyFileSync(join(d, f), join(outDir, clean)); + stagedNames.add(clean); + faces.push( + `@font-face{font-family:"${fam}";font-weight:${n};font-style:normal;font-display:block;src:url("assets/fonts/${clean}") format("${FMT[extOf(f)]}");}`, + ); + } + if (faces.length) { + md += + `\n\n## Font loading (auto-generated)\n\n` + + `The brand font ships as local files in \`assets/fonts/\` — do NOT link Google Fonts for it. ` + + `Paste this \`\n```\n"; + summary.push( + `fonts: staged ${stagedNames.size} face(s) → assets/fonts/ + @font-face in frame.md`, + ); + } +} + +// ── write frame.md ──────────────────────────────────────────────────────────── +const framePath = join(hyperframesDir, "frame.md"); +writeFileSync(framePath, md); + +// ── copy caption-skin.html ──────────────────────────────────────────────────── +const presetSkin = join(presetDir, presetName, "caption-skin.html"); +let skinCopied = false; +if (existsSync(presetSkin)) { + const skinDir = join(hyperframesDir, ".hyperframes"); + mkdirSync(skinDir, { recursive: true }); + copyFileSync(presetSkin, join(skinDir, "caption-skin.html")); + skinCopied = true; +} + +// ── self-validate ───────────────────────────────────────────────────────────── +const outColors = parseColors(md); +if (outColors.length !== presetColors.length) { + die(`color keys changed (${presetColors.length}→${outColors.length}) — keys must be preserved`); +} +const outRoles = semanticColors(outColors); +const li = lum(outRoles.ink), + lc = lum(outRoles.canvas); +// ink (type) and canvas (ground) must differ enough to READ — in EITHER direction. A +// light-mode spec has ink darker than canvas; a dark-mode spec (the polarity flip above) +// the reverse. Assert luminance SEPARATION, not a fixed polarity. +if (li != null && lc != null && Math.abs(li - lc) < 40) { + die( + `ink (${outRoles.ink}, lum ${li.toFixed(0)}) and canvas (${outRoles.canvas}, lum ${lc.toFixed(0)}) lack contrast — bad brand mapping`, + ); +} + +console.log(`✓ build-frame: ${presetName} → ${framePath}`); +for (const s of summary) console.log(` ${s}`); +console.log( + ` .hyperframes/caption-skin.html: ${skinCopied ? "copied" : "preset ships none — captions will use the default pill"}`, +); +console.log(` self-check: keys preserved, ink/canvas contrast ok ✓`); diff --git a/plugins/hyperframes/skills/faceless-explainer/scripts/captions.mjs b/plugins/hyperframes/skills/faceless-explainer/scripts/captions.mjs new file mode 100644 index 000000000..433248deb --- /dev/null +++ b/plugins/hyperframes/skills/faceless-explainer/scripts/captions.mjs @@ -0,0 +1,508 @@ +#!/usr/bin/env node +// captions.mjs — build the captions sub-composition from STORYBOARD + audio_meta. +// +// One mode: `build`. Reads STORYBOARD.md (frame order + durations → cumulative +// frame starts) + audio_meta.json (voices[].words, frame-relative) → absolute- +// timed caption groups → writes: +// compositions/captions.html — a self-contained sub-composition the index +// assembler mounts on its captions track (data-composition-id="captions"). +// caption_groups.json — the computed groups (debug / inspection / --out). +// caption-overrides.json — an empty `[]` shim (silences the captions runtime's +// validate-time fetch; only written when captions.html is). +// No narration / no words → legal skip: nothing written, assemble-index then omits +// the captions track (it keys off compositions/captions.html existence). +// +// node captions.mjs build --storyboard ./STORYBOARD.md --audio-meta ./audio_meta.json --hyperframes . --out ./caption_groups.json +// +// CAPTION LOOK — two sources, picked automatically: +// 1. PRESET SKIN (preferred). If a project-local `.hyperframes/caption-skin.html` +// exists (Step 2 copies the chosen frame-preset's skin into the project), it is +// the caption look. +// It is a brand-token-strict skin with three reserved holes; this script fills them +// and wraps the result in a