80e6e91e

Author: Valentin Hirschi <valentin.hirschi@gmail.com>

Committer: GitHub <noreply@github.com>

Add an animated front-page tour with soundtrack (#118)

* add an animated front-page tour with a generated soundtrack

Embed a time-seekable showcase of the CLI, process generation, Monte Carlo
integration, the Rust and Python APIs, and the crate ecosystem on the portal
landing page. The stage is a pure function of time, so the same assets drive
the browser embed and `just showcase-video`, which renders an MP4 through
Playwright and ffmpeg. A seeded slow-blues piano score is composed and
synthesized both in the browser and for the video, so no media is checked in.
NixCI stays disabled while the change is under review.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178cbipLJ24TZTQ3T8jDcbP

* use Kevin MacLeod's Hard Boiled as the tour soundtrack

Replace the synthesized score with the first 1:41.5 of "Hard Boiled" by
Kevin MacLeod (incompetech.com, CC BY 4.0), faded over its last 2.5 s and
re-encoded at 160 kb/s. The page plays it through an audio element whose
clock drives the animation while sound is on, the video render muxes the
same file, and the landing page, the outro, and the assets README carry
the attribution the license requires.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178cbipLJ24TZTQ3T8jDcbP

* show both loop momenta in the tour's Local Unitarity scene

Write the integral over d^3k d^3l with the cut terms bracketed on (k, l),
let a second marker carry l along the gluon rung, and place the green
"finite at every k and l" line below the equation. Inline scene styles now
use the scoped --gl-* tokens, which restores the red cut lines, numerals,
caption, and term highlights that the embed refactor had made invisible;
highlighted terms colour their subscripts too.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178cbipLJ24TZTQ3T8jDcbP

* slow down the tour's Local Unitarity scene and hold its conclusion

Pace the scene 1.5x slower and keep it on screen for five more seconds
after the finite statement, which now reads "Finite at every momenta k and
l !" centred beneath the equation. The k marker circulates clockwise around
the left triangle and l anti-clockwise around the right one, and cut
numerals stay hidden until their cut starts. The integration summary holds
two seconds longer, so the tour runs 1:55.8 and the soundtrack excerpt is
re-trimmed to match.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178cbipLJ24TZTQ3T8jDcbP

* fix the tour's code panes and hold the integration summary longer

The embed assembly had indented every line after the first inside the
Python and Rust snippets, so both panes showed misplaced indentation and
the Rust pane scrolled its opening lines away. Restore the snippets, fit the
Rust example in its pane, and colour Rust literals as keywords. The
integration summary holds two more seconds, so the tour runs 1:57.8 and the
soundtrack excerpt is re-trimmed to match.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178cbipLJ24TZTQ3T8jDcbP

* highlight line-continued strings in the tour's rust pane

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178cbipLJ24TZTQ3T8jDcbP

* enable nixci for final review

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178cbipLJ24TZTQ3T8jDcbP

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>