diff --git a/README.md b/README.md index 541df63..14f1ae7 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,14 @@ contract is `docs/FUSION.md` in the HAL 8 repository. - Chat, code, web search, images, video and voice are always on. - Python code blocks run in the visitor's browser. +The launch film lives in `fusion/launch/`. It includes: + +- `fusion-ai-launch.mp4`, the 32-second, 16:9 cut shown on the HAL 8 page (the "Meet Fusion AI" card) and in the widget's "Watch the launch film" lightbox; +- `poster.jpg`, its poster frame; +- `fusion-ai-launch.vtt`, its subtitles. + +The film was rendered in Blender from the Apex Universe scene. The Fusion pane in it is the real widget, playing answers Fusion AI actually gave. The voice is ElevenLabs "Brian", and the score is original. + The widget is `fusion/fusion.js` and `fusion/fusion.css`. After editing either, run `python3 tools/fusion_inject.py`: it inlines the CSS and re-stamps the module version inside `index.html`, and re-running it diff --git a/fusion/fusion.css b/fusion/fusion.css index 81a3708..3eb25f5 100644 --- a/fusion/fusion.css +++ b/fusion/fusion.css @@ -76,3 +76,18 @@ .f8-fab{right:18px;bottom:18px} .f8-open .f8-fab{display:none} } +.f8-watch{margin-top:14px;display:flex;align-items:center;gap:9px;width:100%;padding:10px 13px;border:1px solid rgba(255,42,26,.35);border-radius:10px;background:linear-gradient(90deg,rgba(255,42,26,.10),rgba(255,42,26,0));color:var(--ink);font-size:13.5px;text-align:left} +.f8-watch i{width:9px;height:9px;border-radius:50%;background:#FF2A1A;box-shadow:0 0 12px #FF2A1A;flex:none} +.f8-watch span{margin-left:auto;font-family:var(--f-mono);font-size:10.5px;color:var(--ink-3)} +.f8-watch:hover{border-color:rgba(255,42,26,.7)} +.f8-film{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.86);display:flex;align-items:center;justify-content:center;padding:24px} +.f8-film-frame{position:relative;width:min(1200px,100%);aspect-ratio:16/9;border-radius:12px;overflow:hidden;box-shadow:0 30px 90px rgba(0,0,0,.7),0 0 0 1px rgba(255,255,255,.08)} +.f8-film video{width:100%;height:100%;display:block;background:#000} +.f8-film-x{position:absolute;top:10px;right:10px;width:38px;height:38px;border-radius:50%;border:0;background:rgba(0,0,0,.55);color:#fff;font-size:24px;line-height:1;cursor:pointer} +.f8-launch{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:28px;align-items:center;margin:30px 0 8px;padding:18px;border:1px solid var(--rule);border-radius:16px;background:linear-gradient(135deg,rgba(255,42,26,.06),rgba(255,255,255,.015) 45%)} +.f8-launch-media{border-radius:12px;overflow:hidden;background:#000;aspect-ratio:16/9;box-shadow:0 18px 50px rgba(0,0,0,.5)} +.f8-launch-media video{width:100%;height:100%;display:block} +.f8-launch-kicker{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.22em;color:#FF5A47;margin-bottom:10px} +.f8-launch h3{font-family:var(--f-display);font-size:30px;line-height:1.1;margin:0 0 12px;color:var(--ink)} +.f8-launch p{color:var(--ink-2);font-size:15px;line-height:1.55;margin:0 0 18px} +@media (max-width:900px){.f8-launch{grid-template-columns:1fr}} diff --git a/fusion/fusion.js b/fusion/fusion.js index b21b4fc..1172252 100644 --- a/fusion/fusion.js +++ b/fusion/fusion.js @@ -8,6 +8,8 @@ // pictures and clips it makes are deleted after a day. const EYE = 'universe/logos/hal8-eye.png'; +const LAUNCH = new URL('launch/', import.meta.url); +const FILM_V = '1'; const STORE = 'f8.chat.v1'; const VISITOR = 'f8.visitor'; const PYODIDE = 'https://cdn.jsdelivr.net/pyodide/v0.26.4/full/'; @@ -147,7 +149,8 @@ export function mount(root, opts = {}) { if (!list.length) { const s = SUGGEST[state.mode]; body.innerHTML = `
${state.mode === 'incognito' ? "You're incognito. Nothing you say here is kept." : "Hi, I'm Fusion AI. Ask, code, create or just talk."}
-