Files
buildmymcpserver/apps/web/public/videos/hero-poster.jpg

161 lines
62 KiB
Plaintext
Raw Normal View History

feat(web): Remotion hero video — Section 2 (prompt → server → connect) New @bmm/video workspace at remotion/. Renders an 8s 1920×1080 H.264 + WebM + JPG poster sequence that visualises the three-step "How it works" pitch literally: - Beat 1 (0-2s): "Search our Notion workspace" word-by-word entrance with spring-in from below + brief indigo under-glow + monospace prompt.txt label. Blinking cursor bridges the loop seam. - Beat 2 (2-5s): each prompt word detonates into ~9 particles per word; particles drift, then magnetically converge onto target slots along a server schematic that strokes itself on. Scan-line sweep + corner labels (mcp-notion, OAuth 2.1, search_pages, get_page_content) sell that this is a real artefact, not a placeholder. - Beat 3 (5-8s): Claude Desktop client panel slides in from the right; a Bézier wire animates between server and client; three data-packet dots travel along the wire; 200-OK tag pops; green live-dot pulses on the server. Last 12 frames fade to black so frame 239 ≈ frame 0 and browser <video loop> has no visible seam. Brand palette is hard-coded in lib/colors.ts to match globals.css — keeps the Remotion bundle self-contained (no Tailwind import needed). springIn / softSpring / clampLerp / rand helpers in lib/easings.ts power the motion vocabulary. Concurrency=1 + yuv420p in the config gives a deterministic render that plays on every <video> tag. File sizes: hero.mp4 449 KB, hero.webm 258 KB, hero-poster.jpg 33 KB — all well under the 3 MB / 250 KB ceilings. Section 2 ("How it works") now opens with the video in a border-bordered aspect-video panel between the heading and the three existing cards. autoPlay+muted+loop+playsInline satisfies every mobile autoplay policy; motion-reduce:hidden swaps in the static poster for prefers-reduced-motion users. Scripts: - pnpm --filter @bmm/video render:all (mp4 + webm + poster) - pnpm --filter @bmm/video to-web (copy to apps/web/public/videos/) - pnpm --filter @bmm/video build (both, end-to-end) `to-web` is the script name because `publish` collides with pnpm's built-in npm-publish command which refused to run with an unclean tree. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:57:08 +02:00
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>JFIF<00><><01>ICC_PROFILE<01>0mntrRGB XYZ <07>acsp<00><><00>- desc<00>$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprt<01><mluc enUSsRGBXYZ o<>8<><03>XYZ b<><00><><18>XYZ $<24><0F><00><>XYZ <00><><00>-paraff<00><> Y<13>
feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
[mluc enUS Google Inc. 2016<><36>C  !"$"$<1E><>C<1E><>8<07>"<01><><08><>W
 !1A"QSUa<55><61><EFBFBD><EFBFBD><EFBFBD>2RTq<54><71><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#356bcst<73><74>&BVer<65>$4<><34><08><>%u<><75>CD<43><44><EFBFBD><05><>5!1Q<31><51>ARaq<61>3<EFBFBD><33>S<EFBFBD><53>"2b<32><62>B<>#<23><> ?<00>B:<3A><> <1A>f]<5D>[DݻWv<57><76><EFBFBD>h<EFBFBD><68>suLD=<3D>qytc<74><63>O<EFBFBD><4F><EFBFBD>5ȷviɷT<C9B7>S娊<53>T|q<><71>><3E>.<2E><><EFBFBD><EFBFBD>p<EFBFBD>]<5D>qM<71>*<2A><><EFBFBD>)<29>LDLL<4C>j<EFBFBD><6A><EFBFBD><0E>}V<>pܝ6<DC9D><36><EFBFBD>J<EFBFBD>ɢg<C9A2><67><EFBFBD>Uv#<23><><EFBFBD><EFBFBD><EFBFBD>]<5D><><EFBFBD>֘<EFBFBD><D698>J8<18><>riDZ6b<36>^^-<2D>-<2D><>z<EFBFBD>#א<><D790><EFBFBD>˯*<2A><><EFBFBD><1A>EQTu<54><75>bf'<27>:<1D><>j<EFBFBD>Br<42>UfhŦnE<6E><45><EFBFBD>٪<EFBFBD><D9AA><EFBFBD><EFBFBD>f<EFBFBD>N<EFBFBD><4E>O<EFBFBD>ߙ<EFBFBD><DF99><EFBFBD><EFBFBD><EFBFBD>gbE6| ڪ<><DAAA><EFBFBD>W/WO{qWv"<22><>L<EFBFBD>}Ȱ<EF96A7>q<EFBFBD>Vf}<7D><><EFBFBD><EFBFBD>-۪)<29>oeڵ<65><DAB5>/<2F><>ؗ<><D897>&<26>MMq=*<2A><><EFBFBD><EFBFBD><EFBFBD>LLL<4C><4C><EFBFBD><EFBFBD>:u<><><DCA3><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD>՜<EFBFBD><D59C><EFBFBD>5ks3<15>T<EFBFBD>|[<5B><>~<7E>ͼ<EFBFBD><CDBC>31<33><31><18>m<EFBFBD>Z<EFBFBD>Eq5X<35>zxs}=O<>o~{<18>&~N<19><>
<EFBFBD>5<EFBFBD>4<EFBFBD>7s<EFBFBD>ۙ<EFBFBD><EFBFBD><EFBFBD>U\N<><4E><1E>h_<68>v<EFBFBD><76><EFBFBD>޷U<DEB7><55>U4<55>MQ<4D><51><EFBFBD>D<EFBFBD><44>p.<2E><>gݬ<>
nFU<EFBFBD><EFBFBD>m<EFBFBD><14>4DL<44>UD<55>Ze<5A><65>o[<5B><>'\W<16>[<5B>5<EFBFBD><35>+<2B>(<28>fc<66><63>tž<><C5BE>w)<29>4<EFBFBD><06><>Z<>y Uq>Z<>kߟM{<7B>e<EFBFBD>5ݿM<DDBF>{<7B>]Uwc<77>\S<1B><>f"?,<2C><><EFBFBD>z<EFBFBD>q8V,S<><53><EFBFBD><7F>DfU<66>Z<EFBFBD>횼I<ED9ABC><49>nt<6E><74>*bz<62><7A>/f<>U<EFBFBD><55>f+<2B>5M<35><4D>znE4<45>_><3E><>">9<06><><1C>e<EFBFBD>bWjū<6A><C5AB><EFBFBD><EFBFBD><EFBFBD>s*<2A><1A>oq<6F><71><EFBFBD><1A><><EFBFBD>|~<1D><><EFBFBD>x<EFBFBD><78>nnܝSܦ<><DCA6><EFBFBD>7T<37>><3E><><EFBFBD><EFBFBD>v<EFBFBD>+Ꜽ_TX<54>{<7B><><EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD>{<7B><>T<EFBFBD><54>z&zG<7A><47><EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD>'<27>83Uvh<76><68><EFBFBD><EFBFBD>TݻM<DDBB>b"w;<3B><>#<23><><18><><19><>ӓvq+<2B>MQMSg2<67><EFBFBD>qES1<53>/>/<2F><><EFBFBD><EFBFBD>\<5C>,MV<4D><56><EFBFBD><EFBFBD>r-ڈ<><<3C>u<EFBFBD>y:|<7C>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>i<EFBFBD><69>'!E<><16><>Z<EFBFBD><5A><15>V<EFBFBD>*<2A><><EFBFBD><EFBFBD><EFBFBD><1D><><EFBFBD><EFBFBD>fG<66><47>kxwh<77><68><EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD>b"&<26><><EFBFBD>-<2D>h<EFBFBD>X5Q<14><>܉<EFBFBD>+<2B>v<EFBFBD><76>U<EFBFBD>=UD<55>LǦ7Ѫ<37><D1AA><EFBFBD>8\E}<7D><><EFBFBD>/U<55>՛<EFBFBD>]<5D><>{<7B><><EFBFBD>&cs<63>y<EFBFBD>X<EFBFBD><58><EFBFBD>S<17><>2q<32><71>Z<EFBFBD>.<2E><EFBFBD>γEULz;<3B>W<13><><EFBFBD>^<5E>r<EFBFBD>U<EFBFBD>Z<EFBFBD><07><>>2<><32>r<EFBFBD><72><EFBFBD>m<>DOw^<5E>ŧ<EFBFBD><53>%<25><><EFBFBD>-<2D>n<EFBFBD>V<EFBFBD>S4WL<57>5STjbc<62> <0B><><EFBFBD>x1F4߻kƢ=Wk<57>4k{<7B>w<EFBFBD><77>Q<EFBFBD>ozy<7A><79>mU<6D>e<EFBFBD>f<EFBFBD>ߦ<EFBFBD><DFA6>W~j<><6A>3<EFBFBD>z<EFBFBD>DO]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD>+<2B><17><><EFBFBD>j<>{.<2E>^<5E>3Mt<4D>3Wz=<3D>GMo<4D><6F><EFBFBD><EFBFBD><EFBFBD>竦h<E7ABA6><68>gS1:<3A>LL|<7C>怃g<E68083><67><EFBFBD><EFBFBD>r<EFBFBD><72>ċu^<5E><>b<EFBFBD><62>ۉ<EFBFBD><DB89>LF<4C>'<27><19><>j<EFBFBD><6A><EFBFBD><EFBFBD>v<EFBFBD><76><EFBFBD>\<5C><>n<EFBFBD>1><3E><>LD<4C>R<EFBFBD><52><EFBFBD>D<EFBFBD><44><12><>ٵE<15><><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD>S<10><>=|o<15>c"<22>-˙SD[<5B><>U<EFBFBD><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U1<1E>_v~5<1A>o<19><>Qv<51>iƊl<C68A>Msw&ݭDη<44><CEB7><EFBFBD>O<EFBFBD><4F><1C><1F><>U<EFBFBD><55><EFBFBD><67>EV<45><56>v<EFBFBD><76><EFBFBD>}<7D>1<><12>vR<76>M<EFBFBD>Bk<42><6B><EFBFBD>ݚh<DD9A>9<EFBFBD><74><D9A6>)<29>MtϔL<CF94><4C><EFBFBD>h,ݵ<>+<2B><>]<5D><><EFBFBD><EFBFBD><EFBFBD>ʢ<EFBFBD>6)<29><><EFBFBD><EFBFBD>1<11>ȶ<EFBFBD><C8B6><EFBFBD>q<19><><EFBFBD>2q<32>-[<5B>)<29><><EFBFBD>v<EFBFBD>jg<6A><67><EFBFBD><EFBFBD>7<EFBFBD>#<23><><EFBFBD><EFBFBD>ۣ&-)G~<7E><>^<5E><>5S<35><53><EFBFBD>TLǜO<C79C><4F>엇G<19>]<5D>fV<66>Y<EFBFBD>lffQg<51>ݚ<EFBFBD>f"k<>}1<><31><EFBFBD><EFBFBD>/<2F><>v<EFBFBD><76>DUUSM<1B>)<29><>F<>u<1E>ndv<><76><EFBFBD><EFBFBD>e|<7C><>,׏G<D78F><47>r-<2D>t<EFBFBD><74><EFBFBD>w<><77>}Q<>&<26><14>u<EFBFBD>Lj&gQ<67><51><EFBFBD><EFBFBD>|<7C>[<5B><>c<>ƽj<C6BD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ug<55><67>M<EFBFBD><4D>٦<><D9A6><EFBFBD>Z<EFBFBD>ݚ~<7E>t<EFBFBD><74>Op<><70><EFBFBD><EFBFBD><EFBFBD>7⊽<37><E28ABD>7i<37>MQ<4D><51><EFBFBD>3<1F><>L <0A>c<EFBFBD><63><EFBFBD><EFBFBD> <0B><00><><EFBFBD>߉4<DF89><34>ƻ<EFBFBD>~}<7D>o]u<><EFBFBD>c<1E><>4<EFBFBD><34>U<EFBFBD><55><EFBFBD><EFBFBD>Mwi<77><69><EFBFBD>T<EFBFBD>1<EFBFBD>v<EFBFBD> <09>׮<15>3<EFBFBD><33><18><>1<11><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD>M<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD>kȿE<C8BF>sn<73><6E><EFBFBD>DܹM<DCB9>=ULD~y<07>)<29>eq<65><71><EFBFBD>_<EFBFBD>&7<>Y<16><><EFBFBD><EFBFBD>&u<><75>;<3B><>Ϫ<EFBFBD>8<EFBFBD> xt<78><74><EFBFBD><EFBFBD><EFBFBD>-S<11><>:<3A>#<23>a<EFBFBD><61><EFBFBD><EFBFBD>j<EFBFBD><6A>3n<33><><CD98>k<EFBFBD>ϳ]U<><55>";<3B><>5O<35><4F><EFBFBD><EFBFBD>ёv<D191>X<EFBFBD>.Z<>/<2F>S_<53>r<EFBFBD>t<EFBFBD>D<EFBFBD><44><EFBFBD>T<EFBFBD>GX<47>KnS<6E><53><EFBFBD>(<28><><EFBFBD>b#<23><>χ<EFBFBD>n<EFBFBD><6E>V<EFBFBD><56><EFBFBD>*<2A>O<EFBFBD><73>Uv<55>W.<2E>9<18>q<EFBFBD>ߛ<EFBFBD>x7<78>݉󈙚fu<66><75>.$uI<00><>t'<27> <09>G@z<><11><00><>t'<27> <09>G@z<>l<><01>`<06>`<60>l<EFBFBD>(<28>DDDDDDD6
<><CD82><EFBFBD><01>`̀u'<27>@ <09><06> <0A>g<EFBFBD><00>6<EFBFBD><02>6OI6<00><1B>Z"7 <20><>^` <20> <20>F<EFBFBD>P,ƧR
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00

feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
Dnu<00><>ju <20> <20>F<EFBFBD>P,ƧR
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00

feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
Do<EFBFBD>]h<14>Z@ <0A>]<5D>ǘ6<>B
"<22><>u<><75>l<00><11><00><>u'<27><04>#<23>l <09>&<26>Q]<5D><>Qffz<66><00><>:<3A><00>
GI<47><01>=@P:}@<08><><11>w<04><><EFBFBD>'pOY܀<11>w<04><><EFBFBD>'p~P:H<01>GO @<40><><EFBFBD>(<08><><EFBFBD><00><><EFBFBD><EFBFBD><EFBFBD> 1<>@{<7B><><EFBFBD>ADH<><48><EFBFBD>g<EFBFBD>l<08><01><04>
m6<02>( <20> <20><02><00> <20> <20> <20>"<22> <20> <20> <20> <20> <20><00>

<01>؂
!<21>P<EFBFBD>@ <09><06><10><><EFBFBD>C<EFBFBD>PH<><48>)<29><11>@<<3C><><02>Y<EFBFBD> <20><><EFBFBD>#s<>5<>Ԁ<1B>D,ƧR<C6A7>,F<>PXAf5:<3A>P<><50><EFBFBD>3<>, <20><1A>HXAB<41>
Dnu
<20><1A>H()<11><> 1<>Ԁ<EFBFBD><D480><EFBFBD><EFBFBD><1B>@ <20><1A>HXAB<41>
Dnu<05>bbu"XAB<41>
Dnu<05>cS<63>@#s<>cS<63>@<08>Π<00><><EFBFBD>@A@AH<41>ΠY<>:<3A><00><>'<27><00><>Aּ<>@]<5D>
$<24><>"
:<3A><13><00><06>>h<02><>Pc<><63><<3C>P#<23><>s<>X<><58>y<><79><11>w<04><><EFBFBD><02>I<EFBFBD><13>w(<28>a<16>GI<47><13><><EFBFBD>'q<>OY܀<00>!1;<3B>Pw3<77>X<>N<EFBFBD><4E><00><><EFBFBD>Q@A@E<><45><EFBFBD><<3C> <09><><EFBFBD>X<>N<EFBFBD><4E><00><><EFBFBD>Q@A@B7<13><><EFBFBD>$<24><><EFBFBD>E<08>;<3B>z<><7A><EFBFBD><00><><EFBFBD>'<27><>@,"<22>I<EFBFBD>X'<27><>Q@@#<23><> <09>;<3B>:<13><<3C> <09><<3C>z<><7A><EFBFBD><00>:<3A>w<><77>AC`<01>M<>(
(<02><00>"<22><02><>[
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00


feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
<02><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00> <20> <20> <20> <20> <20> <20> <20> <20> <20> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00


feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
(XAD<41><44><08> <20> "<22> <20> mPAD]<5D><12><>@P<05><>.<2E><><02><1E><01>=@#<23><> <09><><EFBFBD><00><1B>@ <20><><EFBFBD>B<EFBFBD>
-<2D><08>Π<00><><EFBFBD>@R"fu<00><>ju>`<00><><EFBFBD>3<>bbu )3:<3A>cS<63><53><00>3:<3A>0bbu (<02>nue<>cS<63><53>(<02>Y<><59><EFBFBD><EFBFBD><EFBFBD><02> 3:<3A>2<EFBFBD> 11:<3A><><EFBFBD><EFBFBD><02> 3:<3A>2<EFBFBD> 11:<3A><><EFBFBD>Xb7:<3A>Af5:<3A>4<00><><EFBFBD>BLLN<4C><4E>()<11><>@ <20><13><>T<14><><EFBFBD>@ <20><13><>T<14><><EFBFBD><05><><EFBFBD>H*:8<><38>՛<EFBFBD><D59B>^6?â-ڋ<>.U<><55><EFBFBD>3U1<55><31><EFBFBD><EFBFBD><EFBFBD><79><12><><0E>_<EFBFBD>z<EFBFBD><7A>f<EFBFBD>F<EFBFBD><46>w1<77>=<1E>y<EFBFBD>u<06><>O <0A>N'%<25><><EFBFBD>j<EFBFBD><6A><EFBFBD>Dc<44>~<7E>]D<>w<EFBFBD><77>n5<6E><35><EFBFBD><EFBFBD>Z<1C>-<2D>.N<>%<25><>/Qf<51><66><EFBFBD>]<5D><>fcϤU?<3F>c<><63><EFBFBD>q<EFBFBD><71><18><18><>w<EFBFBD>_<EFBFBD><5F><EFBFBD>.b<>n""f<><66>*<2A><><EFBFBD><1C>j<><6A>S~<7E><>ښ<EFBFBD><DA9A>Uw<><>o<EFBFBD><6F><EFBFBD><EFBFBD>v<EFBFBD>8|Lxͻ{;"<22>{QO<51>n<EFBFBD>,k&j<><6A>G<EFBFBD><47>ӯ<EFBFBD>Qu=X<>Ρ, <20><1A>K{<7B><><EFBFBD>̵<EFBFBD>MY<68><CAA2>b<EFBFBD>b<><62>1<EFBFBD><1B>F<EFBFBD>]|<7C><>}:<3A> <01><><EFBFBD>ca[Ǧ<><C7A6><EFBFBD><EFBFBD><EFBFBD>n+<2B>j<EFBFBD>1G<31>3<EFBFBD><1B>N<EFBFBD>]|<7C><>=;<3B><><16>9<EFBFBD><39>3+Ʊ5ͻqj<71>]<5D>]Q3<>f<EFBFBD>b""cs3<73><33>D<EFBFBD><44>s<EFBFBD><73>'<27><>;<3B>E<17><>f<EFBFBD>r<><72>c]<5D>gݏD<DD8F><44><EFBFBD>ǻ<1E>6<EFBFBD><36><EFBFBD>dO<13>f<66>t<EFBFBD><74><EFBFBD>?<3F><><EFBFBD>z)<29><><EFBFBD>|]:<3A>@㍮FŜ^F<>5<EFBFBD><35>.[<5B>rh<72><68>n)<29>u:<3A><><EFBFBD>{<7B><><EFBFBD>q<EFBFBD>U<EFBFBD>8<EFBFBD><38>]܊1<DC8A>#Wp<57><70>;<3B>ȯST\<5C>bu><3E><><EFBFBD>~<7E>pE@<06><13><><EFBFBD>NM<4E>̛<EFBFBD><CC9B><EFBFBD>Q*<2A><><EFBFBD><EFBFBD><EFBFBD>MT<4D><54><EFBFBD>o<EFBFBD><6F>10(<28>8<EFBFBD><38><EFBFBD>j<EFBFBD><6A><EFBFBD>{<7B>s-<2D><>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Q<><51><EFBFBD>ڿn<DABF>NfL<66>b<EFBFBD><62>WU4w목ީ<EBAAA9><DEA9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD>9,+X<><58><EFBFBD>b<EFBFBD>z<EFBFBD><16><>:꣹\Lkt<6B>N<EFBFBD>S<EFBFBD>'<27><>jc<6A><63>C<><43><70><16>=Y<><45>b1<62><31>v<EFBFBD><76>SUs\܎<>G<>G^<5E>_!o<16>e<EFBFBD>xY5<59>ئuE<75><45>xs_<73><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><01>;<3B>x<EFBFBD>"<22>X<EFBFBD>]<5D>3蜋qr<71><72>
&<26>Q5<51><1B><>5<1B>={<7B><>ŢݿUE<55><45>*<2A>]<5D>U]<14><>[<5B><><EFBFBD>o<EFBFBD>n<12><>}Wg<57>1y<<3C>\<5C>F<EFBFBD>ڢ<EFBFBD>wl޵<6C>x<>DOz&&<26><><EFBFBD>M3<1A><><EFBFBD>E<EFBFBD>6<EFBFBD><36>Jr<4A>\<5C><><EFBFBD><1E><1D><>;<3B><><EFBFBD><EFBFBD>F<EFBFBD>=331<1B><>b:<3A>Tn<54><18>m<EFBFBD><16><>r72&<26><>*<2A>w®<><C2AE>Lꪩ<4C><EAAAA9>L<EFBFBD>g<EFBFBD><11><><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD>j<EFBFBD>wh<77><16>bSvj<76>oZ<6F><5A>z<EFBFBD>'<27><>KX<><58>q<EFBFBD>q<EFBFBD>(<28>*<2A><>uQn<>qET<45>]<5D>U1UZ<55>׺<EFBFBD><D7BA><EFBFBD><EFBFBD>ex1+<2B>˵r1<72>S]<16><><EFBFBD>"<22><>sQ3r<33><72><EFBFBD>(,8#k<>ţ <0B><><EFBFBD>n<EFBFBD>Wh<57>SMuQݙ<51><DD99><EFBFBD><EFBFBD>nu<6E><75>ˡc<CBA1><63><EFBFBD>ŷ<EFBFBD><C5B7>\Ŀ<>n.<2E>3<EFBFBD><33>1L<31>n<EFBFBD><6E>N<EFBFBD>z)<29><>M<EFBFBD><4D>8<EFBFBD>=,E<><45>E9ܷk~ު(<28><><EFBFBD><EFBFBD><EFBFBD>f7<66><37><EFBFBD><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><18><>Y.QE<51><>E5S<35><53>*<2A><>:k<><6B><EFBFBD>:<3A>o<><6F>*<2A>˛96<39><36>vh<76>q4ݝ<34>E3Wz;<3B>31<11>|<7C>,<2C>,Kf.U<><55><EFBFBD><EFBFBD>oMQ]<5D><><EFBFBD>DQ4<51>z<EFBFBD>+<2B><><EFBFBD>r x6l<00>lM<>f<>DٰQ6lM<>f<>DٰQ6lM<>f<>D<EFBFBD> <0B><><EFBFBD>ASf<53>H<EFBFBD><48>6mE<6D><45>l<EFBFBD>(l<> f<>~16<31>'pOY܂<59>
-<2D><><EFBFBD><EFBFBD><EFBFBD>'s;<3B>X<>N<EFBFBD><00>3<EFBFBD>X<>;<3B>z<><7A>PPcq;<3B>z<><7A>P#<23><> <09><><EFBFBD><EFBFBD>@E<><45><EFBFBD>:<13><><EFBFBD>(<28>(D<>N<EFBFBD><4E>=grF<>w <09><><EFBFBD><00><><EFBFBD>:H;<3B><><EFBFBD><EFBFBD><11><><EFBFBD>I's;<3B>7<13><>gs<67>Pcq;<3B>w3<77>EB:N<><00><><EFBFBD>@<08>;<3B>z<><7A>P<10><><EFBFBD>Pw3<77>E<01><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Fr-SEɹj<C9B9><6A>"<22><>f"*<2A>i<EFBFBD><69>q:<3A><><EFBFBD>|{<7B><><EFBFBD><EFBFBD>Y<EFBFBD>]<5D>X<EFBFBD>WF>5<><0E><><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>]"ffzG<7A>H<EFBFBD><48><EFBFBD><EFBFBD><1D>nO<6E><4F><EFBFBD><EFBFBD><EFBFBD>+˽U<14>o.<2E>Vi<56><69><EFBFBD><EFBFBD>;<3B>UEs31<33>[<5B><>><3E>/<2F>ȵ<EFBFBD><C8B5>eeY<65><59><EFBFBD><EFBFBD><EFBFBD>WG~"*<2A><>M<EFBFBD>mPAE<41><45>wx<77><78><EFBFBD><EFBFBD>W<18>}D<>[<5B><><EFBFBD>橏缺<E6A98F><E7BCBA><EFBFBD>]<5D>j<EFBFBD>]TƩ<54><C6A9>b=<3D>@<1D>W'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>7q<37><71><EFBFBD><EFBFBD>U<EFBFBD><55>&c_<63><5F><EFBFBD><EFBFBD>F<EFBFBD>w<04><><EFBFBD>s<EFBFBD><73><EFBFBD>c<EFBFBD><63><EFBFBD><EFBFBD>{"ջU<D5BB>ț6<C89B><36><EFBFBD>bbb55S<35><53><EFBFBD>s<><73><EFBFBD>{<7B><><0E><><EFBFBD><EFBFBD><EFBFBD>77z<37>QTL<54><4C>Ƣ<EFBFBD><C6A2>]<5D><><EFBFBD>8<EFBFBD><38><11><>Փf-<2D>7-^<5E>n<EFBFBD><6E><><E888AA>j<EFBFBD>q<EFBFBD>'q1<71><31>'}9<>79l<39>9-[ŷU<C5B7>|{qj<71>~}<7D>Q<EFBFBD><51><EFBFBD>}333<33><33><EFBFBD>뭷0<EBADB7>8<EFBFBD><38><EFBFBD>W<EFBFBD>V]<17><>T<EFBFBD>f<EFBFBD>5Sz"<22><>7T<37>D<>f7W<><57><EFBFBD>\<5C>ӑ<EFBFBD>v<EFBFBD><71>&<26><>:<3A>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>
s<EFBFBD><<3C>&<26>Y<>b<EFBFBD>O<>4<EFBFBD><15>O~<7E><><EFBFBD><EFBFBD><EFBFBD>ߗ<EFBFBD><DF97><EFBFBD><16><>+<2B>(<28><>w<EFBFBD>f53<1F><1E>q<EFBFBD>94F]۶<><DBB6><00>U<EFBFBD>q]Q<>"j<>'<27>n<EFBFBD><6E>#/<2F><><EFBFBD><EFBFBD>w&<26>/W5<57><17><>ni<6E><69>(<28>Uo<55><6F>s@o<><6F>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD>b<EFBFBD><54>b*<2A><>t<EFBFBD><74>Ovf"<22><><EFBFBD><EFBFBD><EFBFBD>Ǣw<C7A2>S9<<3C>Z<EFBFBD><5A>a`<60>vq<76>MUM˱<14>r<EFBFBD><72><EFBFBD><EFBFBD>bf)<29>DDF<44><46>{<7B><>Dg<13><><EFBFBD><EFBFBD>۱<EFBFBD><DBB1><EFBFBD>g2<67><32><EFBFBD>4Sn"<22>]"<22><>]<5D>΢'<27>_Lß<4C>U<EFBFBD>s.<2E><>v<>U<EFBFBD>i<EFBFBD>]ϝ1<CF9D><31><EFBFBD>z'<27><>j<EFBFBD><6A>h<EFBFBD>8ۜ>7s<><73>mcSj(<28><>F%[<5B><><EFBFBD><EFBFBD>3<1B><1A><>F<EFBFBD><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<7F><56><EFBFBD><18>'J<><4A>UqN<71><4E><EFBFBD><EFBFBD><EFBFBD>|p<><01><><1C>7y:)<29>]<5D>9ݹ<>Uv<55><76><EFBFBD>Wk<57><6B><EFBFBD>b*<2A><><EFBFBD>Lnw<6E><77>t|<7C><00><><EFBFBD>lY<6C><59>e<EFBFBD><65><EFBFBD>ȷܮ<C8B7>t<EFBFBD><74>F<EFBFBD>*<2A><>&b'<27>GM<47><4D>}a<> <20>s9<73>Wx<57>Xz<58>ܯ<EFBFBD>U<EFBFBD><55><EFBFBD>8<EFBFBD><38>#QN虚<4E>3<EFBFBD><33><EFBFBD>fyL~7"=s<><73>2nܢb<DCA2>K<14><1D>w<EFBFBD>wr<77><72><EFBFBD><EFBFBD>ytp<74>|<7C><>f<EFBFBD>3<EFBFBD>{*<2A>3N<33>W~<7E>6<EFBFBD>j<EFBFBD><6A>T<EFBFBD>UZ<55>k<EFBFBD><6B><EFBFBD>8+<2B>U<EFBFBD>L<EFBFBD>3<EFBFBD>sm<73>ȵ<EFBFBD>DYƦ<59>Dw<44><77><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F>Z<EFBFBD><5A>@ <0C><><EFBFBD><EFBFBD><EFBFBD>31<33><31>1<EFBFBD><31><EFBFBD>sv%<25>t<EFBFBD><74>G<><47>MՏz<D58F><7A>E[<5B><><EFBFBD>U?؝|<7C><><EFBFBD><EFBFBD> <20><><16><>Dd\<5C>E<EFBFBD><45>oUEUD{<7B>1<><31>z<>~,׃<><D783>r<EFBFBD>-Qji<6A><69>M<EFBFBD><4D>4<EFBFBD>{<7B><>{<7B>Z<EFBFBD><5A>P<0E> <0A><>g:<3A><><EFBFBD>V<EFBFBD>^<5E>Z<>6i<36>"b<><62>s3]:<3A>؎<EFBFBD><D88E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'c<><63><EFBFBD>U<EFBFBD>U<EFBFBD>Ȧ+<2B>'z<><7A>r<EFBFBD><72><EFBFBD>O_N<5F>?ː-<2D><00><02>6l[<00><00><> <0B><>
2b@PPP@AE@<00>
A@A@A@A@A@A@A@A@A@A@A@A@<40>
<05> <0B>
<00><><EFBFBD><EFBFBD><EFBFBD> <08> <20> <20>(<08><>ųv<C5B3>5޿U<DEBF><55>}<7D>qM<71><4D>租X<E7A79F>u<EFBFBD>w<EFBFBD>5^<5E><>Y8<59><38>N>M<>1_<31>E<15>;<3B><><06><1B><>U˔\<5C><>wj<77>b}<7D><>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>n~'<27><>WEuWr<57>f<EFBFBD>鉊h<E9898A>n&u3<75>~$<24><><EFBFBD>ƚ<EFBFBD>&<26><><EFBFBD><EFBFBD><EFBFBD>\ӿ<>-d<>ڻU<DABB>Y<17><>^<5E><><EFBFBD>\<5C><><EFBFBD><EFBFBD> س<><D8B3><19><18>7<EFBFBD>SM<53><4D>UQn&fiߜLƼ<4C>ŏUݵz+<2B>~US]tLULkqWv'<27><>޺<EFBFBD>w<EFBFBD>d<EFBFBD>FG<46>"<22>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD>|<7C>e994ܮ<34>9i<><69>LWTW;<3B>'<27>s<EFBFBD>˵M<CBB5><4D><EFBFBD>u<EFBFBD>tM1U5UOvf&7<>7:<3A><58><D88E>)<29><EFBFBD>;<3B><><EFBFBD><EFBFBD>Az<41><7A><EFBFBD>z<>w&<26>b<EFBFBD><62><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD>-<2D>]<5D><><EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD>UL<55>b~ l<><6C><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD>,<2C>4<EFBFBD>z-<2D>3LN<4C><4E>fg<66><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>995EY7<59>ު#Q7+<2B><>#<23><><EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD>4<EFBFBD><34>ޢ<<3C>> z<>Ů<EFBFBD>=v<>E<EFBFBD><45><EFBFBD><EFBFBD>"<22><><EFBFBD>U1<55><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD>/<2F>_<EFBFBD>E?{Mw&<26><>ɷ<EFBFBD> M14UTܦ&5<>g{<7B><><EFBFBD>L@ n<>ٯ<EFBFBD>7"<22><><EFBFBD>QG<51><47>w<1E>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD><EFBFBD>:<3A>;<3B><><EFBFBD>o{ֺǹ<D6BA><C7B9>e<>}<7D><><EFBFBD><0E><>Tu<54><75><15><1D><>*<2A><>~G<><47><EFBFBD><EFBFBD>6<EFBFBD><36>g*<2A><>u}<7D>\<5C><><EFBFBD><EFBFBD><00><1A><>qr<71>EV<45><56><EFBFBD><EFBFBD>wm<77><6D>?X<>u<EFBFBD>w<EFBFBD>1<>+VM<56><4D><EFBFBD>j<EFBFBD><6A>f<EFBFBD><1D><><EFBFBD><EFBFBD>F<EFBFBD><46>I뷞>VV4U<18><17><>_}<7D><>4<EFBFBD><34><EFBFBD>1<EFBFBD>21<32><31><EFBFBD><EFBFBD>ݳTƦm<C6A6>4<EFBFBD><34><EFBFBD><06>>=<<3C>Vrꪫv<EAAAAB><76><EFBFBD><EFBFBD>n*<2A>o<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>N5<4E><35><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>f<EFBFBD>k<EFBFBD><6B><EFBFBD>\<5C><>y<EFBFBD><79>ɳv<C9B3><76>r/[<5B>W<EFBFBD>WEs?<3F>a<EFBFBD>ەݹU˕<55>]uNꪩ<4E><EAAAA9><EFBFBD>r <0A>[6<>s<EFBFBD>bk<62><6B>n<EFBFBD><6E><EFBFBD><EFBFBD>f<EFBFBD>i<EFBFBD><69>]K)<29><>y:p<><70><><D7B7>1DD<44>s<EFBFBD><73>X<EFBFBD>'<27>ږ<EFBFBD>\<5C>\Wj<57><6A><EFBFBD><<3C><>u0μ<30><CEBC><EFBFBD><EFBFBD>v<EFBFBD><76><EFBFBD>\<5C>U5<55><35>:<3A><><EFBFBD>흉k&<26><11>M<EFBFBD>u<EFBFBD>L<EFBFBD>L<EFBFBD>T<EFBFBD><54>S<EFBFBD><53><EFBFBD><EFBFBD>ڼ<EFBFBD> <18><><EFBFBD><1A><><EFBFBD>f<EFBFBD>"h<><68>S<1E><>}<7D><><EFBFBD><17>r2.Ss&<26>̊<EFBFBD><CC8A>%sWOs͟!<21>^ev<65><76><EFBFBD><16>ݸ<EFBFBD>E4MZ<4D><5A>/9<><06><><EFBFBD><16><>٢<><D9A2>ܦ*<2A><><EFBFBD>1>s<><73><EFBFBD>=<1F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̻֩<CCBB>{*<2A><>t<EFBFBD><74>Ew&b?$H-<2D><>8X<38><58>j<EFBFBD>+<2B>T<EFBFBD>4<EFBFBD><34>mk<6D><6B>|<7C><>4<EFBFBD><34>;Qc~<7E><>Nj~,<2C><><EFBFBD>^<5E><>[<5B><>ů<EFBFBD><C5AF>^ne<6E>xǯ.<2E>Vb""<22>ܙ<EFBFBD>Q<EFBFBD><51><EFBFBD>=U<><55>oSNM<4E>޻<><DEBB><EFBFBD>|<7C><>n<EFBFBD>q1~݋<>z<EFBFBD><7A>]<5D><><EFBFBD>~'<27><><><DB98>}<1C><>7<EFBFBD><37>DQM<51><4D>DD<44>SN<>~+<2B><05>(<28>P&I:<3A><13>#<23><>yy<79>,|@<40><>^`"<22>Dnu<05>&5:<3A>@E<><45><EFBFBD>֧R
<EFBFBD>(<28><1B>@ <20><13>#s<>P <09>N<EFBFBD>R"fu
11:<3A>0<05><><EFBFBD>D 11:<3A>@<12><>D<EFBFBD><44>:<3A><>Y<EFBFBD><59>Ԁ<EFBFBD>DLΣ<4C><00><><EFBFBD>O@<05><><EFBFBD>G<EFBFBD> <20><13>@"fu<11>Y<><59><EFBFBD><EFBFBD>Tb&gQA<05><><EFBFBD>J<00>3<><33><EFBFBD><EFBFBD><EFBFBD>LN<4C>:<3A> 3:<3A><>,<2C><><EFBFBD>P"fu<04><><EFBFBD>|<7C>@AH<41><48><EFBFBD>
<EFBFBD><EFBFBD>LN<EFBFBD>X<><58><EFBFBD>@<40>,<2C><><EFBFBD>a"&gQ<00><>LN<4C>b7:<3A>@<40><><EFBFBD>@DR#s<>FS<1A>J
"<22><1B>@ <20><1A>HDLΠY<>N<EFBFBD>K~@z<00><><EFBFBD>G_ c<><14><><EFBFBD><05><>h <0B>U#<23>lڋ=DٰQ6mE#<23>l<EFBFBD>/<2F>f<>X<EFBFBD>;M<><05><><EFBFBD>`<60><>j 'p<><04><><EFBFBD><02>,t<><74>=gr(<00><><EFBFBD>w Y@<13>w (<02>I<EFBFBD><02><><EFBFBD>@<08>;<3B>w3<77>K<><4B><EFBFBD>'q<>N<>w3<77><00><><EFBFBD>}E<><45><EFBFBD>@<40>33<33><33><EFBFBD><EFBFBD><EFBFBD>gf<67>5<EFBFBD>c\<5C><>3<EFBFBD><33>kTS?S<>?<<3C><><EFBFBD><EFBFBD>l<EFBFBD><6C>N:<3A><>򫑱<1F><>z{.-Qx<51>y%<25><>Ԛ<EFBFBD>s<EFBFBD><73>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><>=<3D><><EFBFBD>g<EFBFBD><<>oG<6F><47><EFBFBD>Rf<52>.<1E>cq;<3B><>߱<EFBFBD><DFB1>~<7E>?Y<><59><19>{7߸<37><DFB8>x<EFBFBD><00>h<EFBFBD><68><EFBFBD><EFBFBD>L<EFBFBD><4C>ĝ<EFBFBD><C49D>|<7C>R<EFBFBD>{<1E><><EFBFBD>3<EFBFBD><33>?<3F><><EFBFBD><EFBFBD><EFBFBD>~<7E>?Y<><59><19><><EFBFBD>O)3G Rj]<5D><63><D9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><><EFBFBD>y'<27><>8<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><1D><63><D9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><><EFBFBD>y'<27><><EFBFBD><EFBFBD><EFBFBD>;<3B>ܚ<EFBFBD>s<EFBFBD><73>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><>=<3D><><EFBFBD>g<EFBFBD>,<>4x<34>I<EFBFBD>&h<><68><EFBFBD>MK<4D><4B>{7߸<37><DFB8>X<EFBFBD><00>{<1E><><EFBFBD>3<EFBFBD><33>?<3F><><o$<24><>4qp<71>$n'p<>{<1E><><EFBFBD>3<EFBFBD><33>?<3F><>dz}<7D><><EFBFBD>e<EFBFBD><65>f<EFBFBD><1B><<3C><>\9<><39><EFBFBD>Ի<EFBFBD>dz}<7D><><EFBFBD>e<EFBFBD><65>g<EFBFBD><67><EFBFBD>~<7E>?Yc<59><19><><EFBFBD>O)3GRj]<5D><63><D9BE>~<7E><><EFBFBD>3<EFBFBD><33>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><><EFBFBD>y'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#q;<3B>7s<37><73>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><>=<3D><><EFBFBD>g<EFBFBD>,<>4x<34>I<EFBFBD>&h<><68><EFBFBD><EFBFBD>w>f<><66><EFBFBD>=<3D><><EFBFBD>g<EFBFBD>,<>=<3D>f<EFBFBD><66><19><><1F><>7<>yI<79>8<EFBFBD>}Qڞ<51>rUG<55>6mdO<64><4F><EFBFBD>[<5B>T<EFBFBD>j*<2A>r<EFBFBD>٪<EFBFBD>ꢪf<EAA2AA><66><EFBFBD>LLjb\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><1B><>y<EFBFBD><1C>w3<77><08>N<EFBFBD><00><><EFBFBD>P<><50><1B><><13><>Ϛ(XAQ<00><><EFBFBD>ǘ;<3B>܀3<13><> <04><><EFBFBD>YEAP7<13><00>=gs<67>@"u;<3B><><04><><EFBFBD>('pOY܀<59>
<11>w
<EFBFBD>OYܢ<EFBFBD><EFBFBD><11>w
OY܀<00>tꨁ>`t'<27><>QP#<23><01>(<28> <12>
$J<>$<24><>LMUE4<45><34><EFBFBD><EFBFBD>"=#<23>{3<>իw|9<><39>鈷N<E988B7><4E>O<EFBFBD><4F><EFBFBD>~ρV5ya&m N
<EFBFBD><EFBFBD>b<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD>n[<5B><>8<EFBFBD><38><EFBFBD>oL<6F>S<11><00><><EFBFBD>sV<73><56>M<EFBFBD>6<EFBFBD>W<EFBFBD><57>:<3A>&<26>];<3B>(<28>bc_ڝ<5F><DA9D>5<EFBFBD>О<EFBFBD><D09E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><6D>7<><37>?%:<3A><>txS<78>o3<6F><33><EFBFBD><1F>,<2C>a<EFBFBD><61><EFBFBD><EFBFBD>:><3E><>?|<7C><><EFBFBD><EFBFBD>y<EFBFBD>#<23>ü<><C3BC><EFBFBD>}g<>><3E><>;<3B>}.<2E>֝<EFBFBD>c<EFBFBD><63>(<28>Z<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><00>Q<><1F><>|<7C><><EFBFBD>{#<23>ü<><C3BC><EFBFBD>}g<>><3E><>;<3B>}.<2E><><77><<3C><>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t}G<>~<7E><EFBFBD>G<EFBFBD><47><EFBFBD>h~<1D>><3E>s<EFBFBD>=<3D><><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>w><3E><><EFBFBD>~Y<>KT<4B><54> ?}<7D><><EFBFBD><EFBFBD>=`<60><><EFBFBD><EFBFBD>:><3E><1E><>C<EFBFBD><43>)<29><><EFBFBD>Y쏴?<0E><>K<EFBFBD><4B><EFBFBD><EFBFBD>c<EFBFBD><63>(<28>Z<EFBFBD>~<7E>a<EFBFBD><61><EFBFBD><00>Q<><1F><><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>G<EFBFBD><1F>yO<79><4F><EFBFBD><EFBFBD>d}<7D><>w<EFBFBD><77><><CFAC><1F>yGR<47>3<EFBFBD><33><0F>o<EFBFBD><6F><EFBFBD><EFBFBD>X0<58><30><EFBFBD>Ώ<><CE8F><EFBFBD>><3E><>;<3B>}.<2E><>{#<23>ü<><C3BC><EFBFBD>}g}<7D><><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>~<7E><EFBFBD>G<EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>t}L=<3D><><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>w><3E><>h~<1D>><3E>s<EFBFBD>;<3B><><EFBFBD><EFBFBD>QԵL<D4B5>`<60><><EFBFBD><EFBFBD>:><3E><> ?}<7D><><EFBFBD><EFBFBD>a쏴?<0E><>K<EFBFBD><4B><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43>)<29><><EFBFBD>Y<EFBFBD>v?,򎥪g<F28EA5AA><1F><><EFBFBD><EFBFBD><EFBFBD><1E>a<EFBFBD><61><EFBFBD><00>Sd}<7D><>w<EFBFBD><77><>G<EFBFBD><1F>yO<79><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>u-S?X0<58><30><EFBFBD>Ώ<>}<7D><><EFBFBD><EFBFBD><47><CE8F>쏴?<0E><>K<EFBFBD><4B><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43>)<29><><EFBFBD>Z<EFBFBD>ݏ<EFBFBD><<3C><>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#<23>G<EFBFBD>{<1F><>܏<EFBFBD>S<><53>h~<1D>><3E>s<EFBFBD>=<3D><><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>w><3E><><EFBFBD>~Y<>KT<4B><54>?<3F><><EFBFBD>:><3E><><EFBFBD><1F><>|<7C><><EFBFBD>~<7E><>C<EFBFBD><43>)<29><><EFBFBD>Y쏴?<0E><>K<EFBFBD><4B><EFBFBD><EFBFBD>c<EFBFBD><63>(<28>Z<EFBFBD><5A><EFBFBD><EFBFBD>?}<7D><><EFBFBD><EFBFBD><1E><><EFBFBD><EFBFBD>#<23>G<EFBFBD><47><EFBFBD>G<EFBFBD><1F>yO<79><4F><EFBFBD><EFBFBD>d}<7D><>w<EFBFBD><77><><CFAC><1F>yGR<47>==<3D><><EFBFBD><EFBFBD><47><CE8F>?<3F><><EFBFBD>:><3E><><EFBFBD>><3E><>;<3B>}.<2E><>{#<23>ü<><C3BC><EFBFBD>}g}<7D><><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><0F>r>t}G<><47>?}<7D><><EFBFBD><EFBFBD><<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>w><3E><>h~<1D>><3E>s<EFBFBD>;<3B><><EFBFBD><EFBFBD>QԵO_c<5F>~<7E><><EFBFBD><EFBFBD><EFBFBD>=<3D><><EFBFBD><EFBFBD><47><CE8F>쏴?<0E><>K<EFBFBD><4B><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43>)<29><><EFBFBD>Y<EFBFBD>v?,򎥪z<F28EA5AA><1F><>܏<EFBFBD>Q<><0F>2>t}O/d}<7D><>w<EFBFBD><77><>G<EFBFBD><1F>yO<79><4F><EFBFBD><EFBFBD><EFBFBD><00><>g<EFBFBD>u-S<><53><EFBFBD><1F><>|<7C><><EFBFBD><EFBFBD><EFBFBD><1F><>|<7C><><EFBFBD>><3E><>C<EFBFBD><43>)<29><><EFBFBD>Y쏴?<0E><>K<EFBFBD><4B><EFBFBD><EFBFBD>c<><63>(<28>Z<EFBFBD><5A><EFBFBD><EFBFBD>?}<7D><><EFBFBD><EFBFBD><1E><><EFBFBD><EFBFBD>#<23>G<EFBFBD><47><EFBFBD>G<EFBFBD><1F>yO<79><4F><EFBFBD><EFBFBD>d}<7D><>w<EFBFBD><77><><CFAC><1F>yGR<47>=<3D><><EFBFBD><EFBFBD><EFBFBD><47><CE8F><EFBFBD><0F>r>t}Od}<7D><>w<EFBFBD><77><>G<EFBFBD><1F>yO<79><4F><EFBFBD><EFBFBD><EFBFBD><00><>g<EFBFBD>u-Sڮ^<5E><>蟎b<62>4<EFBFBD><34>+<2B>隬\<5C><><EFBFBD>֥<EFBFBD><1D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۱<EFBFBD>7oM<6F>~J<><0E><1D><>͹9*mY<6D>TꜛtE<14>ܮ<EFBFBD><DCAE><EFBFBD>j5<6A>LO<4C>T<EFBFBD><63>x<EFBFBD>_<EFBFBD>O<EFBFBD><4F><EFBFBD>LM34<33>&'Џ<><D08F>71<><C5B9><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><06><><EFBFBD>3xPETPPAR|<7C>Z#r<><72><EFBFBD><EFBFBD>l<EFBFBD>F~]%T<>f<EFBFBD><66>"<22>ǜ<EFBFBD>Ǖ1<C795><31><EFBFBD>(<28><>r<EFBFBD>GW{<7B>1<EFBFBD>rS<72>OJ0<4A><30><1E><>&<26><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F>z<EFBFBD>(<28><>k<EFBFBD><0F><>x5r<35><72>r<EFBFBD><72><EFBFBD>vk<76>#<23>E>T<><1E>4<EFBFBD>H<EFBFBD><48><03><><EFBFBD><7F><EFBFBD><EFBFBD>oP]<5D><16><>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>щ<EFBFBD>316<>◈r<E29788><72><EFBFBD><EFBFBD>p<EFBFBD><70>Y<EFBFBD>3r)ʽEsM<73>SDۉ<44>~u<><75><11>Ϻ<EFBFBD>xubM<62>&l䎿 <0A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]<5D><><EFBFBD>'<27>H<EFBFBD><48>b<>u3ޙ<33><DE99><EFBFBD>{Y<><59> ,<1C>B<EFBFBD><42><EFBFBD><EFBFBD>Sb<53>j<EFBFBD><6A><EFBFBD>c<EFBFBD>]<5D>i빦j<EBB9A6>t<EFBFBD><74><EFBFBD><67>m<EFBFBD>۶<EFBFBD><DBB6><>D<EFBFBD><44><EFBFBD>ʽ]<5D><><EFBFBD>]<16><><EFBFBD><EFBFBD>S1<53><31>;݊20<32>n_<6E>USD<53><44><EFBFBD><EFBFBD>t<EFBFBD>|<7C><><EFBFBD>Z<EFBFBD><5A><EFBFBD>g<EFBFBD><67>,<2C><><EFBFBD>v<EFBFBD><76> u/<2F><><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD>:<3A>U<>SgTt<54><74>M5<4D>sTG<54>b:N<>znQ<6E>Uq3͜<><CD9C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><5A>^m赓L<E8B593><4C><EFBFBD>x<EFBFBD><78>U<EFBFBD>b"bk<62><6B><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><77>jX<6A><58><EFBFBD>#"<22><><EFBFBD>nZ<6E>"<22>#<1E><><EFBFBD><EFBFBD>n{<7B><<3C><><EFBFBD>|n<>ٱ"<22><><EFBFBD>3C@nq<6E><71><EFBFBD>"<22><><16>dSGzͪ-<2D><>Y<EFBFBD>:w<><77><EFBFBD>I<EFBFBD><49>Y<EFBFBD>ɋ<16><>v<EFBFBD>i<EFBFBD><17>DSܯ<53>OJ<4F>z<EFBFBD><7A><1D>Y3<59><17>j <0C>Er<><72>UT<55>3T<><1B><><EFBFBD>7<1B>]<5D><EFBFBD><7F>⩚j<E2A99A><6A><EFBFBD><EFBFBD>wn<77><6E>qn<71><6E><EFBFBD>SU3<15>:<3A><>Z0k<30><6B><EFBFBD>7F<37>f#c<>:<18>}e<><65>Y<EFBFBD>U޹3O<33>V54<35>߶<><DFB6><EFBFBD><EFBFBD>N<EFBFBD>#<1B><>tqvr<76><72>dW~<7E>SL۪<4C>SM:<3A>߶<EFBFBD><DFB6>Ϝz>Bpj<70><6A>_|h<><68><13><><EFBFBD>q<EFBFBD>s.^Φ,<2C>1w<31>ċ<EFBFBD><C48B>N<EFBFBD>ޚ<EFBFBD><DE9A>u<EFBFBD><75>|<7C>/<2F><>?:<3A><>W<EFBFBD>ܢ<EFBFBD>L<EFBFBD><4C>X<EFBFBD><>;<3B>n7<6E><37>^<5E><><EFBFBD><EFBFBD>bN]<5D>ݻl&hsGN<47>?<13>z<EFBFBD>j̽LDj<44><6A><1F>T<EFBFBD><54><EFBFBD>UL<55><1D><>M<EFBFBD>z<EFBFBD>L2p(<28>s<1E><>Q<EFBFBD>w^5h<>)<29><><EFBFBD>nw><3E><><EFBFBD><EFBFBD>$<24>W3oM<6F><4D><EFBFBD><u<><75>*<2A><1F>EW<45>(<28><><EFBFBD>4<EFBFBD><34>ͩ<EFBFBD><CDA9>><3E>b<EFBFBD>jg`<60>6q<\~O&<26>uDͪna<6E>ת<>=b<><62><EFBFBD><EFBFBD>X<EFBFBD>5=<3D><12><><EFBFBD>l߶:<3A>hrGn8|H<><48>r7r<37><72><EFBFBD>r<EFBFBD><72>s<EFBFBD>j+<2B><>;<3B>&<26><><EFBFBD>G<EFBFBD>6<EFBFBD><36><EFBFBD>c#"<22>D<EFBFBD>ݻ4^<5E>m<EFBFBD>ˆ<EFBFBD><C288><EFBFBD><EFBFBD>Ʒ><3E>#K<><4B>-<2D>/<2F>7<19><><EFBFBD><EFBFBD><EFBFBD>9T<39><54>N?'rj<72><14>ɪ&<26><>k<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD>z=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>21mݪ<6D>6<EFBFBD>M]T<>f<EFBFBD>N<EFBFBD><4E>ξV<CEBE><56><EFBFBD>Ù<EFBFBD><EFBFBD>.<2E><>v5<76>l<EFBFBD><6C>/SݹnuT<54><7F><EFBFBD><EFBFBD>ևw<D687><77><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD>Ƨ<EFBFBD>SU<11><00><1C><><EFBFBD><EFBFBD>qEv<45><76><EFBFBD>j&<26><00><>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00>
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00

feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
<EFBFBD><00>
<EFBFBD><EFBFBD><00>"<22><><EFBFBD><00><>(<08>
<EFBFBD>(* "<22><> <20><><02><>O<>O<EFBFBD> <0C><><EFBFBD>r-<2D><>:⟖_q~<7E>R<EFBFBD>y<EFBFBD>{Z<><5A>طT<54>5<EFBFBD>]~Z)<29>?;<3B><><EFBFBD><EFBFBD> o<>i<EFBFBD><69><EFBFBD>g<><67><EFBFBD><EFBFBD>{<1F>;<3B><><EFBFBD>?<3F> <12><>i<EFBFBD><69>:<3A><><EFBFBD>|<7C>@}<7D>5<EFBFBD>UpX<15>j<EFBFBD><6A>X<EFBFBD>T<EFBFBD><00>4OM<4F><00>UD~g<><67>Q<EFBFBD>߹o<DFB9>j<EFBFBD>~I}<7D> <09>S<EFBFBD><53>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><1F><><EFBFBD><EFBFBD><EFBFBD>{w<>aa<61>;<3B><10>F<EFBFBD>xB<78><42>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@P<05><><EFBFBD>c<>51<35>@<12><>D<EFBFBD><44> <09>N<EFBFBD>X<><58><EFBFBD>y<EFBFBD> 11:<3A><00><><EFBFBD>Du&5:<3A>0|<7C><1E><><EFBFBD><EFBFBD>v<>b<EFBFBD>E<1A>d<EFBFBD>"<22>yj<79><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'R<>`ݣ;<12>ۑE<DB91>[<5B>jꘊf&ff<66>S>]ff'<27>&g~{<7B>fQ4<51>m<><6D>Rx<52>_<><5F>/ا<>^<5E><><EFBFBD>S<EFBFBD><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k_{<7B>=zv<7A>;֮ٻU<D9BB><55><EFBFBD><EFBFBD>r<EFBFBD><72>S\jc<6A>K<17><03><>v|ч6<D187>ZY<5A>b<EFBFBD><62><EFBFBD><EFBFBD>sQ<73><51>X<EFBFBD><58>o*l<><6C><EFBFBD><EFBFBD>S<EFBFBD><53><EFBFBD><EFBFBD><EFBFBD>?i<14><>-N<>Zq<5A><<Z<><5A>f<EFBFBD>Y<EFBFBD><59>K7<><37><EFBFBD>v<EFBFBD><76><4C>{<7B><>k.<2E>s<11><>N<EFBFBD><4E><EFBFBD>U;<3B><><EFBFBD><19>rx<72><78>fW<66><57><EFBFBD>5ގ혹]h<>N<EFBFBD>u4<75>D<EFBFBD>^Qף<51>DLΣ͸<CEA3><18>kxzA<7A><1D>Z<EFBFBD>}X7<58><37>LE<4C>)<29>E=<3D><>5<1D>qǗMKW//<6D>b<EFBFBD>5<EFBFBD>+<2B>7r<37>\<5C>j<EFBFBD>׽Ө<>t<EFBFBD><74><EFBFBD>m)<29><>ԅX<D485><58>{<7B><>H- <0A><>S<EFBFBD>͵<16>9̋q=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wS/{<7B><>=<3D>n^<5E>
<EFBFBD>3<EFBFBD>Q4ܻ7<EFBFBD>GX<EFBFBD>USF<EFBFBD>Ljc<6A><63>#<23><><EFBFBD>w<EFBFBD><77>v<EFBFBD><76>o<EFBFBD>hv1<76><31><18><>i<EFBFBD><69>rfթ<66>v+<2B>M<><4D><EFBFBD><14>vb<76>ߜ<EFBFBD><DF9C><EFBFBD>Wk팼<<3C><>\<5C>&j<><6A>M<EFBFBD><4D><EFBFBD>(<28><>W<EFBFBD>><3E>=b&gQ<67>֣g<><67>{a<><61><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>.x<>Y<EFBFBD><59>S1<53><31>G{<7B>1<EFBFBD>#<23>4<EFBFBD><34><EFBFBD>^Eu<45>۹n<DBB9><6E>馺⺣<E9A6BA><E2BAA3>Do<44><6F><13>F*Ī<><C4AA><EFBFBD><EFBFBD>ejh<6A><68>3r<33><72><EFBFBD>&&<26><>u3<14>u<EFBFBD>79<37><39>9ٕ_<D995>j<EFBFBD><6A>*<2A><>h<EFBFBD>~.DL<44><4C>Z<EFBFBD><5A>G<EFBFBD><47>+<2B>)<29>|$<24><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><5A><C6B5>E<EFBFBD>s5x<35>d<EFBFBD>U33<33><33>^<5E>N<EFBFBD>t<EFBFBD><74><EFBFBD>{cgqV<71>q<EFBFBD><71><EFBFBD>r<EFBFBD>ܳT׿U<D7BF>UT<55>{<7B>Þ<EFBFBD>#<23><>;<3B><>3<><33><EFBFBD><EFBFBD>=q7<71><37>tt-<0E>n<05><19><><EFBFBD>̹\<5C>5Mvr<76><72><EFBFBD>cZ<63>۫ѿK<D1BF><4B><EFBFBD>222*<2A><>ު<EFBFBD><DEAA>ݪ-<2D><>j<EFBFBD><1B><>M3ӧXiLLN<4C>:<3A>w<EFBFBD>Z#f<>H<EFBFBD>Y<EFBFBD><59><EFBFBD>g'<27><><EFBFBD><EFBFBD>7<EFBFBD><37>1Mn.<2E><EFBFBD>LDDw<44><77>ޣϻ<DEA3><CFBB>gfa<66><61><13>Nȳ]<5D><><EFBFBD>5<EFBFBD><35>M]w1ފcQ?<3F><><13>T<EFBFBD><54>3}<7D>Y<EFBFBD><59><EFBFBD><EFBFBD>^8<>X<EFBFBD>mx<6D>%Qz<51>\<5C>Z<EFBFBD>MSN<53>~_G<5F><47><EFBFBD>87<38><37><EFBFBD><EFBFBD><EFBFBD>ȵv<C8B5>jk<6A>"+<2B><><EFBFBD><EFBFBD>kF<><46>m<15><><EFBFBD>Du'<1A><><EFBFBD>}#<23> :<3A>g<EFBFBD>s<EFBFBD>f<EFBFBD><66>?6<>V<EFBFBD><56>gY<67>M<15><>w4<77>{<7B><>zo<7A><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>2<><32><EFBFBD><EFBFBD><EFBFBD>ёh<><68><EFBFBD>b;<3B><><EFBFBD>:<3A>#<23>11:<3A><><EFBFBD>j1?<3F><><EFBFBD>e<EFBFBD><65>'<27>o/<2F><><EFBFBD>n<EFBFBD>V<EFBFBD><56>\<5C>U_zi<7A>_=F<>F<EFBFBD><46><EFBFBD>Ŧ-z<>3<EFBFBD>o'<27>5]<5D><><EFBFBD>~s<>ϔz}<<3C><00><12><>r<EFBFBD><72><EFBFBD>\?<1B>ӿW<D3BF><57>W<EFBFBD>T<>1<13><><EFBFBD><EFBFBD>L8s<38><73><EFBFBD><EFBFBD><EFBFBD>feW<65>sQ5j"<22>|<7C><>""<22>c∈<63><E28888><EFBFBD>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><15>u<EFBFBD>7n<37><6E>b-,<2C><><EFBFBD>zH<7A><48>
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00

feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
DL΢7 <20><>LN<4C><05><><EFBFBD>@ Lju <00>DLΣ<4C> <20><1A>H*F<>Q@ <09><><EFBFBD><EFBFBD>(XAH<41><48><EFBFBD>u<EFBFBD>Y<><59>ԠF<>P,<2C><><EFBFBD>z<02>3:<3A>@<40><><EFBFBD>O@PR"fu <20><1A>J)3:<3A>De11:<3A>E"&gP,ƧR<C6A7>)<11>$Y<> <00>@ <20>]%4*
"<22>TDD<07><1D>!<21><>-?<3F>e<><65>T<><EFBFBD>c<EFBFBD><00>}<7D><>w<EFBFBD><77>7<EFBFBD><37><EFBFBD><EFBFBD>}<7D>3<EFBFBD>S<EFBFBD><53>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_G<13>~<1C><><0F><01>].<2E>p|<7C>h<EFBFBD><68>~<1F><><1A>ܚ<EFBFBD><DC9A>h<EFBFBD><68>k+<2B>zE1Uک<55><DAA9>3<EFBFBD>#{<7B><>w;G<>7<EFBFBD><37>g<EFBFBD>̾C<CCBE><43><EFBFBD>Z<EFBFBD><5A>U<EFBFBD>sh<73><68><EFBFBD>z<EFBFBD>$<24><>oƵn<C6B5><6E><EFBFBD><EFBFBD><EFBFBD>w鍵<77><E98DB5><EFBFBD><EFBFBD><EFBFBD>?<3F><03><><EFBFBD><EFBFBD>7<17><><EFBFBD>X˽~<7E><><EFBFBD><EFBFBD>v<EFBFBD><76>k<EFBFBD>b-Q]ST<53>j:k~so<><6F><EFBFBD>.<2E><><EFBFBD><EFBFBD>}U<>~+<2B><>SU8*<2A>ͫ<EFBFBD>37<33><37>{~<06><><EFBFBD><EFBFBD><EFBFBD>=<3D><><EFBFBD> <20><><1B>u<EFBFBD><75>[<5B><><EFBFBD><EFBFBD><EFBFBD>ók<C3B3><6B>i<EFBFBD><69>3<EFBFBD><33>Ĺ<EFBFBD>11<1F>۽r<DBBD><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD>zGV<47>`~<7E><><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><70><EFBFBD>ݳ<EFBFBD><DDB3>b<EFBFBD><62><16>F<EFBFBD><46>n<EFBFBD><6E>*<2A><><EFBFBD>&<26><>v<EFBFBD><76><EFBFBD><EFBFBD>h<EFBFBD><68><EFBFBD>n)<29><>)<29><>n;<3B><>1<EFBFBD><31>~?7 / .<2E>v<EFBFBD><18>w<EFBFBD><77>6<EFBFBD><36><EFBFBD>j<EFBFBD><6A>E5UN<55>f&}-<2D><1E><>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD><6F>g?<3F><><EFBFBD><EFBFBD>2oڪ<6F>ٚ<EFBFBD>SE<53><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"j<><6A>SW<>:<3A><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD>lbe<62><65><EFBFBD>ܽ<1B><>>W.<2E><75><D7B6>ʩ<EFBFBD><CAA9><00>c<EFBFBD>w<EFBFBD><77>=<3D><><EFBFBD><EFBFBD><EFBFBD>ff<66>g0<67>.<2E>Z<EFBFBD><5A><EFBFBD><EFBFBD>9<EFBFBD>\<5C><>Ji<4A>#<23>j<><6A><EFBFBD><EFBFBD><EFBFBD>vb'<27><>'?<3F><>;7<>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD>'#<23>~<><7F><EFBFBD>x<16><>bj<62><6A>W]1z<31><7A>D<EFBFBD>E<EFBFBD><45><EFBFBD>MO<4D><EFBFBD><ED8DAE>}<7D><>+<2B>a<EFBFBD><61><EFBFBD>=;<3B><>:<3A><>S<EFBFBD><53><EFBFBD><17><>خ<EFBFBD>m<EFBFBD>X<EFBFBD><1B>j{<7B><>ߧ]A<>}<7D><>jy<6A>.<2E>)<29><><EFBFBD>g&<26><>Ż<EFBFBD><C5BB>caFM<46><4D>4<EFBFBD><34><EFBFBD>Q7&&u=<3D><>zy<7A>x/<2F><>my<6D>W<EFBFBD><57>x<EFBFBD><17><>q<EFBFBD>k/
<EFBFBD>U<EFBFBD>9<16><>M^<1D><><EFBFBD>i<EFBFBD><69><EFBFBD>QLn&f!<21><>r;7<>^<03><><EFBFBD><EFBFBD><EFBFBD><1E>ep<65>}<fV/!c*<2A>5SESU7<55>͋5<CD8B><35><EFBFBD><EFBFBD><EFBFBD>5M3O<>'o<><6F>_<EFBFBD>n_<6E>ݱ<EFBFBD>=<3D>Y<EFBFBD>q<EFBFBD>{3<>y<>rf<72>d<EFBFBD>Z<EFBFBD>ū<EFBFBD><C5AB>\SMQn<51><6E><EFBFBD><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F>լ<1B><>>4c<34><63>]x<>8<EFBFBD><38>r<EFBFBD>^<5E>*<2A><>ݻf<DDBB><66><EFBFBD><EFBFBD>zLoq<6F><70><DFA3><EFBFBD>c<>;ٜN/<2F>x<EFBFBD><78>q<EFBFBD><71><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>[<5B>fnw;<3B>w<><77>73<15><12><00>3<EFBFBD><33>~<7E>v/<2F><>;Yv<59><76>f<EFBFBD>诘Țj<C89A><6A>115<31><35>y<EFBFBD>s<EFBFBD>=<3D><><EFBFBD><EFBFBD>\<5C><1F><>F%<25><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>a<EFBFBD><45>׍r<D78D>z<>j<EFBFBD><6A><EFBFBD>v<03><>v<EFBFBD>;<3B><><EFBFBD><EFBFBD>,r<>}<7D><><EFBFBD>n<EFBFBD>]<5D>v<EFBFBD><76><EFBFBD>4<EFBFBD>5ܻUqn<71>b*<2A><><EFBFBD>f#ϣ<><CFA3><13><><EFBFBD><EFBFBD><EFBFBD><17><><00>n<EFBFBD>Y<EFBFBD><59>ܽ<EFBFBD><DCBD>v<EFBFBD><76>w3<77><12><><EFBFBD>j<EFBFBD>Ž<1A><><EFBFBD><EFBFBD><EFBFBD>Ug^}]> <0B>݋<EFBFBD><DD8B>[<5B>~3<><33><17><>9<EFBFBD>mF^gFm<46>k<EFBFBD>j<EFBFBD><6A>׏v<D78F><76><EFBFBD>WWZ<7F><5A><EFBFBD>&<26>GN<47><4E><EFBFBD>i<EFBFBD><1F><0E><>b<EFBFBD><62>X<EFBFBD><58>`<60><>U630<33>l<EFBFBD><6C><EFBFBD>U?}L]<5D>]tw<74><77>N<EFBFBD><4E>6<EFBFBD>v<07><>q9<1C><>8<EFBFBD><38><18>=S<>G<1F><><EFBFBD>^<5E>j5<6A><35>Z<EFBFBD>v<EFBFBD><76><EFBFBD><1B><><EFBFBD>:<3A>ӧ<EFBFBD><D3A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<19><>ó<EFBFBD><C3B3>|<7C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD><EFBFBD><44>W*<2A>U<EFBFBD>z<EFBFBD><7A>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B>}<7D>v<EFBFBD><76>x<1C>hk<68><6B>=<3D><><EFBFBD><EFBFBD>p20<32><30>^;<3B>w-޳Mv<4D><76>=Q<><51>h<EFBFBD><1A>;<3B>k<EFBFBD>ުgz<67>~1<>O<EFBFBD><4F>k;U<>\<5C><><EFBFBD>k<><6B>j<EFBFBD>6<EFBFBD>Z<EFBFBD><5A>bo<62>5U<14>UY<55><59><EFBFBD>F<EFBFBD><46><EFBFBD><EFBFBD><EFBFBD>DL<44><4C>D<EFBFBD>L<EFBFBD><4C>v<EFBFBD><76>h08|G<>3<EFBFBD>Q{0r-e[<5B>nfc<66>M<EFBFBD>UUo<55><1A><>{T<>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X=<3D><>w<1D><>@<40>8<EFBFBD><38>rŜk6볟3<14>Ȋ<EFBFBD><C88A><EFBFBD>k<1E><><EFBFBD>DN<44>&fw<66><77>:<3A><>s<EFBFBD>O<EFBFBD><4F><EFBFBD>i<EFBFBD><69>3<EFBFBD><33><EFBFBD><EFBFBD>q<EFBFBD><71><><7F><EFBFBD><02><><EFBFBD><EFBFBD>7{<7B><17><><EFBFBD>h<EFBFBD>U4<55>j<EFBFBD><6A><EFBFBD>S<1D>D<EFBFBD><44>jf}<7D>{G<><47><EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1r-<2D><><EFBFBD><EFBFBD>9<EFBFBD><<3C><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>j<EFBFBD><6A>Ms<13><13><><EFBFBD><EFBFBD><EFBFBD>~<7E><><EFBFBD> <0A>.B<>g<EFBFBD>k<EFBFBD><6B><EFBFBD><62>k#<23>Ư:<3A>y<EFBFBD>L<EFBFBD>s<EFBFBD><73>i<EFBFBD>]Wz;<3B><>֩<EFBFBD><D6A9>K<EFBFBD><4B><EFBFBD><EFBFBD><EFBFBD>o<05><><EFBFBD><EFBFBD>N<EFBFBD>ʹ<EFBFBD><CAB9>f<EFBFBD>x<EFBFBD>~lcUDU<44>"<22><><EFBFBD><EFBFBD>E<1B><><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>#<23><> <0C>ݎ<EFBFBD><DD8E>Q<1E><><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD>ԙ<7F><D499>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><07>c<EFBFBD>.<2E>2<>Y<EFBFBD><59>k&<26>u<EFBFBD>M7<4D>EQEȉ<45>ULUV<><56>7><3E>C<EFBFBD>@<01><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>|{U]<5D>r<EFBFBD><72>4<EFBFBD><1B><>=<3D><1D><><EFBFBD><EFBFBD>|<7C>/!r߉M<DF89><4D><EFBFBD>N<EFBFBD><4E>LLN<4C>><3E>bL<62>31<33><31><EFBFBD><EFBFBD><EFBFBD>Q<EFBFBD>UXqz<71><7A>;G<>W<><57>E|<7C>vi<76><69><EFBFBD>n*<2A><><EFBFBD>=~''<17><><EFBFBD>+/<2F><>C<12>cLEVk<56><6B>%S?{<7B>Q4<51><34><EFBFBD>Y<EFBFBD>.<2E>~<7E><>L<EFBFBD><4C><1F><>Vp<56><70>^<5E><>nx<6E>UwQ;<3B><><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>.+<2B><><EFBFBD><EFBFBD>r<EFBFBD>3<EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD>Ytڈ<74>w<EFBFBD><77>۫ݝ<DBAB><12>/Tm|<7C><><EFBFBD>;f/f<><66>h<EFBFBD>w<EFBFBD><16>_F<5F> <09>S<EFBFBD>M<EFBFBD><4D>K<6C>vwLF<4C>c<EFBFBD>E^_<1F>z<EFBFBD><7A>u_<75><5F>Σ<EFBFBD>‹U<C28B>F$F<><46>]<5D><>j(<28><>u<EFBFBD>~-<2D>zq<7A><71><19><><EFBFBD>d<EFBFBD>qyї(<28>j<EFBFBD>U6<55><36><15>q<EFBFBD><71>[<5B>Lk<4C><6B>ɟfy<66>\-<2D><><EFBFBD> <09>ǹU-[<5B><><EFBFBD><EFBFBD><EFBFBD>*<2A>QT<51>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><54><D7B6><EFBFBD>Ş<EFBFBD><C59E>SDO<44><4F><EFBFBD><EFBFBD>,<2C><><EFBFBD>ueg<65><67><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD>z,ܞ<><DC9E><EFBFBD><EFBFBD><EFBFBD>33<1D>s:<3A><>[<5B>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD>2n<32><6E>m<EFBFBD><6D><EFBFBD><EFBFBD>;<3B><><EFBFBD>ju<6A><75>LO<4C><4F><EFBFBD><EFBFBD>hm<68><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻs:<3A><>nc<6E>Sk<53>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>uo}<7D><><EFBFBD>㋝r<E38B9D><72><EFBFBD><EFBFBD>qq<71>Mb<4D><62>m<EFBFBD><6D><EFBFBD>}<7D>}ޟ?ʴ<><CAB4>ݼ<0E>1*<2A>M<EFBFBD>-;8m<38><6D><EFBFBD><01><>}g <09>S<EFBFBD><53>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1F><1F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'<27>O<1F><>G<EFBFBD>v!<21>Hd<48><00>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>G<0F>>!Ν<><CE9D>X<EFBFBD>N<EFBFBD><07>te<74><65>BP<08>N<EFBFBD>]<5D><><EFBFBD>F@ D<>N<EFBFBD>@ <09><>܀<00><>'pN<>w
<08><>w<04>grK:+<2B>gp<67><70><EFBFBD><EFBFBD>u<EFBFBD>y<EFBFBD><79>v<EFBFBD><76>{<7B>˳Lj<4C>2-<2D>}<7D><>)<29><><EFBFBD>>(<28>{S<><53>u<EFBFBD><75>6<><36><EFBFBD>ߏ<EFBFBD>u<EFBFBD><75>n^<5E><>X<EFBFBD><16><><EFBFBD><EFBFBD><EFBFBD><32><C3BB><17>?<3F>~<7E>#<23>O]<5D><><EFBFBD><EFBFBD>3<EFBFBD><33>j<><6A>M<EFBFBD>Z<EFBFBD><5A>9GC,;<3B><><EFBFBD><EFBFBD><7F>g<EFBFBD><67><EFBFBD>U<EFBFBD>c'q<><71>3<EFBFBD><33>j<>nMɫ<4D>Ӕt2û<<3C><1C><><EFBFBD><EFBFBD>o<EFBFBD><6F><EFBFBD>S<EFBFBD>|/<2F><EFBFBD><7F><EFBFBD>j<>nMɫ<4D>Ӕt2û<32><C3BB><17>?<3F>|<7C><><EFBFBD>=w<><77><00><>ϟ<EFBFBD><CF9F><EFBFBD><16>ܚ<EFBFBD><DC9A>G(<28>e<EFBFBD>w<EFBFBD>|/<2F><EFBFBD><7F><EFBFBD>jG1<47><13><><EFBFBD><19><><EFBFBD>><3E><>ܛ<EFBFBD>W_<08> <0C><><EFBFBD>1<EFBFBD>3<EFBFBD><33><EFBFBD><1B><><EFBFBD>><3E><><EFBFBD> <0B><><EFBFBD>>~Gڸ[<5B>rj<72><6A><1C><><EFBFBD><1D>]<5D><><EFBFBD><EFBFBD>3<EFBFBD><33>}<7D><><EFBFBD><17>?<3F>|<7C><><EFBFBD>p<EFBFBD>&<26><><EFBFBD><EFBFBD>9GC,;<3B><><EFBFBD><EFBFBD><7F>g<EFBFBD><67><EFBFBD>R9<52>8<EFBFBD><38><01><><EFBFBD><<3C><>p<EFBFBD>&<26><><EFBFBD><EFBFBD>9GC,;<3B><>a<EFBFBD><61>x7<37><7F>}<7D><><EFBFBD><17>?<3F>|<7C><><EFBFBD>p<EFBFBD>&<26><><EFBFBD><EFBFBD>9GC,;<3B><><EFBFBD><EFBFBD><7F>g<EFBFBD><67><EFBFBD>S<EFBFBD>|/<2F><EFBFBD><7F><EFBFBD>j<><6A><EFBFBD>u<1A><>G(<28>e<EFBFBD>s<EFBFBD>|/<2F><EFBFBD><7F><EFBFBD>jG1<47><13><>8<EFBFBD><38><00><><EFBFBD><EFBFBD><1E>7Q<37><51><EFBFBD>r<EFBFBD><72>Xw'<27>Ù<EFBFBD><C399>n<><00><><EFBFBD>S<EFBFBD>|/<2F><EFBFBD><7F><EFBFBD>j<><6A><EFBFBD>rj<72><6A><1C><><EFBFBD><1D>^<5E><><1B><><EFBFBD><EFBFBD>o<>^W5<57><35>UT~<7E>;73#.z<EF8B93><7A><EFBFBD>)<29>S<EFBFBD>DyD{<7B><1E>W<EFBFBD><57>+<2B><15><16><>DD;<3B>:N<>u0
L<EFBFBD>w>`L<><4C>:H33;<3B>0<12>`#<23><> <09><><EFBFBD>A<08>N<EFBFBD><4E><00><><EFBFBD>@<08>N<EFBFBD><00><><EFBFBD><EFBFBD>E@<08>N<EFBFBD><00><><EFBFBD>E<08><><EFBFBD>t <09><>܀<00>'q<>'s;<3B>"u;<3B>&fgr<67><00>GI<47><04><><EFBFBD>(!<1B><>*;<3B>ܢ<EFBFBD><DCA2>GI<47>=gh<67>t<><<3C>* <11>w<>P%<1E>w<EFBFBD><77>7<EFBFBD><37><EFBFBD><EFBFBD>}<7D>3<EFBFBD>S<EFBFBD><53>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><18><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><>O'<27><>?<3F>w<EFBFBD>S<EFBFBD>}Oi<4F>b<EFBFBD><62><EFBFBD>@5<><01>5M>R<>u\<5C>|<7C><> `@Y<>U1<55><00>d<64>a<EFBFBD><1C><><EFBFBD>O<EFBFBD><4F>~<7E>} <0B>T<EFBFBD><54>=<3D><><EFBFBD><EFBFBD><EFBFBD>r?<3F>?<3F><><EFBFBD><EFBFBD><EFBFBD>;g<><67><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>|<7C>U!_6d<>aE@LY<02><00><><00> 2<><32><EFBFBD>@<40><>/WC<03><>ͦ<EFBFBD><CDA6><EFBFBD>n\<5C>L꫚<4C><14>Z<EFBFBD><5A>~ymS<6D>f<EFBFBD><66><00><EFBFBD><E3A998><EFBFBD>,G<><47><EFBFBD><E8A7B2><17>g<EFBFBD>f<EFBFBD><17><><EFBFBD><EFBFBD>?<3F><><EFBFBD>o<EFBFBD>,<>_c<5F><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD>x<EFBFBD>I<EFBFBD>&h<><68><EFBFBD>:<3A><><EFBFBD><EFBFBD>}<7D><><EFBFBD>e<EFBFBD><65>g<EFBFBD><67><EFBFBD>~<7E>Yc<59><19><><EFBFBD>O)3G<0F><><EFBFBD><EFBFBD>?<3F><><EFBFBD>o<EFBFBD>,<>=<3D><><EFBFBD><EFBFBD><1B><><1F><>7<>yI<79>8<EFBFBD>}N<><4E><EFBFBD><EFBFBD><EFBFBD>~<7E>Yc<59><19><37><DFB8>X<EFBFBD>ƺ<o$<24><>4qp<71><70>]<5D>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><><EFBFBD>y'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>}<7D><><EFBFBD>e<EFBFBD><65>g<EFBFBD><67><EFBFBD>~<7E>Yc<59><19><><EFBFBD>O)3G<0F><>]<5D>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><><EFBFBD>y'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5.߱<><DFB1>~<7E>Yc<59><19><37><DFB8>X<EFBFBD><00>h<EFBFBD><68><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>Ԛ<EFBFBD>o<EFBFBD><6F>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><>?<3F><><EFBFBD>o<EFBFBD>,<>4x<34>I<EFBFBD>&h<><68>jMK<4D><4B><37><DFB8>X<EFBFBD><00>{<1F><><EFBFBD>7<EFBFBD><37>?<3F><><o$<24><>4qq5&<26><><EFBFBD>?<3F><><EFBFBD>o<EFBFBD>,<>=<3D><><EFBFBD><EFBFBD><1B><><1F><>7<>yI<79>8<EFBFBD><38><EFBFBD>R<EFBFBD><52><1F><><EFBFBD>7<EFBFBD><37>?<3F><><EFBFBD><EFBFBD>}<7D><><EFBFBD>e<EFBFBD><65>f<EFBFBD><1B><<3C><>\><3E><>=<3D><EFBFBD><E4AA8F><EFBFBD>ȟ<EFBFBD>ǿn<C7BF>_%L<>wmUESEt<45>5D<35>bcS<12>^x<78> <12> <09>H<EFBFBD><00>
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00

feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
<EFBFBD><00>PQPT@APP@E@APPAPE@PAQQ!PP<04>I<1E><EFBFBD><7F>7<EFBFBD><37><EFBFBD><EFBFBD>}<7D>1<EFBFBD>T<EFBFBD><54>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><>O'<27><>?<3F>w<EFBFBD>S<EFBFBD>}Oi<4F>s<EFBFBD>|>T<07>t<1E>V+<2B>Ȯ<EFBFBD>ʭ<EFBFBD>U<13><>w)<29>O檙<4F><E6AA99><EFBFBD>-<2D><12><>r<EFBFBD>.Y<>)<29><>SWz<57><7A><EFBFBD><EFBFBD>xS<78><><DBA6><EFBFBD><EFBFBD><0F><>c<13><><EFBFBD>1<EFBFBD><31>\Z'7
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>")<29>nן{<7B>O]k{<7B><07><03>|<7C><>p<EFBFBD>\<5C><1C><><EFBFBD>Z<EFBFBD>w<1A>갼Hʦ<48>qr<71><14>L<EFBFBD>DWM1TW<54><57><EFBFBD><EFBFBD><EFBFBD>&7<><37><EFBFBD>O+<2B><><EFBFBD><EFBFBD> '<27><><EFBFBD><EFBFBD>rYeX<65><58>b<EFBFBD>ˮ<EFBFBD>Q<><51><EFBFBD><EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B>G<EFBFBD><47>Q a<><61><EFBFBD>o<EFBFBD><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD> g<><67><EFBFBD>'6<>vߪ2hɷ/<2F>]Z<>TGv<47>L<EFBFBD>L<><15><EFBFBD><E2AEBE><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD>X<EFBFBD>eq9W(<28>ܪ<EFBFBD> eLթ<4C>x<EFBFBD>d{z<><7A><EFBFBD>=5<1E><><EFBFBD><EFBFBD><01><><EFBFBD><EFBFBD><EFBFBD>y <18><17><>r-<2D><>oQj<51><6A>Σu<CEA3>1M1<4D><31><EFBFBD>=9<>/;<3B><>2<EFBFBD><32>N<EFBFBD>X<EFBFBD>Ļ6<C4BB>ۊ鯻Ty<54>z<EFBFBD><7A><EFBFBD><EFBFBD><30><07><>3<EFBFBD><33>k<12>dQ7/ݦ<><DDA6><EFBFBD>1TL<54><4C><14>T<EFBFBD><EFBFBD>vO<76>7<EFBFBD><37><EFBFBD><EFBFBD><1C>Ϻ<EFBFBD><CFBA><EFBFBD>
<EFBFBD>^5|^bf<62><66><EFBFBD>h<EFBFBD>Eu<45><75>Xտih<>Nj<4E><6A>.<2E><>MZ<4D><5A><EFBFBD>WU<57>\<5C>220<32>_<EFBFBD><5F>xW<78><57>r<EFBFBD><72>ψ<EFBFBD><CF88><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>m<EFBFBD><6D><11>'<27>L<EFBFBD><4C>}<7D>;y<>v˱9]<5D><><EFBFBD><EE8583><EFBFBD>b<EFBFBD>m<EFBFBD>U<EFBFBD><55>v<EFBFBD>ɧ2j<32><6A>uY<75><69><DDA9>j<EFBFBD>QM4<4D>{<7B><00><1E>g<EFBFBD>,<2C>G<1F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̯<1E>uL^<5E>4SWr<57>֦<EFBFBD>{<7B><>3<EFBFBD><33><EFBFBD>#^z<>?S<><53>/<19><>[<5B><>?<0F><><1D>v^<5E><>K<1C>\<5C>UM<15>W<EFBFBD><57>Z<EFBFBD>j<EFBFBD>ڦ<EFBFBD><DAA6><EFBFBD><EFBFBD><EFBFBD>c}c<>v<EFBFBD><76><<3C><>9<EFBFBD><39><EFBFBD><EFBFBD>'i}G<><47><EFBFBD>qq<71><71>ʯ<EFBFBD><CAAF><EFBFBD><EFBFBD>h<EFBFBD>h<EFBFBD><68><EFBFBD>h<EFBFBD>i<EFBFBD><69>~<16>'<27>=7=C<><43><1E>윋x<EC9C8B><78><EFBFBD>^<5E>v<EFBFBD><76>ݻt<DDBB>UWT΢"#<23><>ϡr<CFA1>_<EFBFBD>ɻ<EFBFBD><C9BB>f<EFBFBD><66><EFBFBD>k<EFBFBD>wm\<5C>i<EFBFBD><69><EFBFBD>u4<75>OX<4F><58><EFBFBD><12><>?<3F><><EFBFBD>}<7D>/3<><33><EFBFBD>U<EFBFBD><55>c<17>6<EFBFBD>q<EFBFBD><71>c.<2E><> ]L^<5E><><EFBFBD>Z<EFBFBD>4<EFBFBD>r5<1B>4<EFBFBD><34><EFBFBD>9<EFBFBD>|<7C>m1<6D><31>_<EFBFBD>&Nu<4E><75><<3C><>W<EFBFBD>S<EFBFBD>E<EFBFBD><1E>Uw<55><77>ʨ<EFBFBD>)<29>}<7D>=<3D>V<EFBFBD><56><EFBFBD>Ƕ<EFBFBD><00><><EFBFBD>ý<EFBFBD><C3BD>W<EFBFBD>~<7E>z<EFBFBD>Q<14><>>E<><45>u<EFBFBD><75><EFBFBD>v<EFBFBD>i<EFBFBD><69><EFBFBD>S<EFBFBD>w<13><><EFBFBD><EFBFBD><EFBFBD>^w<><77><EFBFBD>?v<>?<3F><><EFBFBD>a<EFBFBD><61><EFBFBD><EFBFBD>|/<2F>N<55><69>d\<5C><><EFBFBD>b<EFBFBD><62><EFBFBD>Ez<45><7A><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD><6F>;'<27>B<EFBFBD><42><EFBFBD>x ݣ<><DDA3>cs<1C>&f]뼿<><EBBCBF>r-<2D><>b)<29>Z<EFBFBD><5A>x<EFBFBD>\Uv{<7B><><EFBFBD><EFBFBD>G<>o@<40>z<1F>v<EFBFBD><76><EFBFBD>g%<25><><EFBFBD>gr<67><72>۞w
s-r6<72>}_U.w<>L<EFBFBD>՚<EFBFBD><D59A>c<EFBFBD><63><EFBFBD><EFBFBD>w<EFBFBD>5<EFBFBD>.`;U<><55><EFBFBD><EFBFBD>1c<0F>]<5D><>"<22>W<EFBFBD><57><EFBFBD><EFBFBD>Y<EFBFBD>v<EFBFBD>;<3B>S\<5C><EFBFBD>ήZ<CEAE><5A>|<7C><><07><><EFBFBD>37<33><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD>\<5C><>N' <0B>
*<2A><>r<EFBFBD>+<2B><>U<EFBFBD>c<EFBFBD>U}<7D><>&<26><>=T}<7D><>܎<EFBFBD>bs\<5C>i<EFBFBD>+X<>.N6!<21>z<EFBFBD>U<><55>"<22>ʽr<CABD>U<EFBFBD><55>f<EFBFBD>Unfc<66>n<01><00><><EFBFBD><EFBFBD>vZ<76><5A>_g<5F>cc<63><63><EFBFBD>ccX<63><58><17><>o<1F><>Tܦ+<2B><><EFBFBD><12>˗<EFBFBD><CB97>v<EFBFBD>&<26>Un(<28>ژ<EFBFBD>|<7C>ی<><DB8C>C<EFBFBD><43>5<EFBFBD>M<EFBFBD>{<7B><><EFBFBD>Uc<55><63>%<25>|<7C><><EFBFBD>Uwb<77><62><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22>S<EFBFBD><07>|Ogy~W<><57><EFBFBD><EFBFBD> {Wp<57><70>)<29><>T<EFBFBD>ۦ<EFBFBD>t<EFBFBD>=ت(<28><><EFBFBD><EFBFBD>s<11>bu<62><75>K<EFBFBD><4B>/<2F><1F><><EFBFBD>~<7E>G<EFBFBD>z<EFBFBD>K<EFBFBD><4B><02>tq<74>6j<36><6A>'~<7E>mދ^%s<><73>-v(<28><>W<EFBFBD>s<><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD>c<EFBFBD><63><EFBFBD>;><3E><><EFBFBD>qw<71>f<EFBFBD>E6&<26><><EFBFBD>f<EFBFBD><66>f<EFBFBD><66>1<EFBFBD><31>~<7E>s<EFBFBD><01><>b<EFBFBD>#<23><1E><>78<37><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><12><><EFBFBD>vh<76>&b<><62>w*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>gQ<67><16><><EFBFBD>_<EFBFBD>f<EFBFBD><><DB96>j<EFBFBD><6A>S<13>~<7E><>8<EFBFBD>xkv<>d<EFBFBD><64>k<EFBFBD><6B>a<EFBFBD>r<EFBFBD><72>כ<EFBFBD><D79B><EFBFBD>MY<4D>5<EFBFBD>3]<16>گ<EFBFBD>5o<35>ݫ<EFBFBD><11>m񝬱<6D>c<EFBFBD>q<><71>a<EFBFBD><61><EFBFBD>ܛ<EFBFBD>d<EFBFBD><64>z<EFBFBD>'<27>3:<3A><>(<28>q<EFBFBD><71><EFBFBD><EFBFBD>6P
><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00><><EFBFBD>N<><4E>9<0F> <0C><>j<EFBFBD><6A><EFBFBD><EFBFBD><17><><EFBFBD><EFBFBD>{#<23>;<0F><>?<3F>2ū<7F><C5AB><EFBFBD><76><CFA3><10>N<EFBFBD>x¤,F<>P<EFBFBD><50><EFBFBD>Ǒ11:<3A>X<><58><EFBFBD>u<EFBFBD>&&'S<><53>A@<08>΢cS<63>"fu 1<>Ԡ<00><>3<><33>P <09><><EFBFBD><EFBFBD><EFBFBD>>J-<11>u<EFBFBD><75>k6q<36>?.<2E><12><>i<EFBFBD>fwvc<76>fcʘ<63><CA98>ϔzf9<66><39><EFBFBD><EFBFBD>>%8T<38><54>%4<><34>1<><31><EFBFBD><EFBFBD>ޟ<EFBFBD>2<EFBFBD><32>SL<>>3<>$<24>j<EFBFBD><6A><EFBFBD><EFBFBD>M3~<7E><>Gv<47>|<7C><>=<3D>i<EFBFBD><69><bbu>n<><6E>ǭ><3E>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7^|zt<7A><74>LY<4C><59><EFBFBD><EFBFBD><EFBFBD><14>X:<3A><>}<7D>Lz<4C>g<EFBFBD>ZȿT<C8BF>M<1E><><EFBFBD>Dǝ]<5D><><EFBFBD>u<EFBFBD><75>d<EFBFBD><0E><>ԓ6r<36>O<0E><><EFBFBD><EFBFBD><EFBFBD>ʳv<CAB3><76>g<EFBFBD>k.<2E>gz<67>ߏr} ,q<><71>|<7C><>ɛVq<56><71><EFBFBD><EFBFBD>ݾ<EFBFBD>UU<55><55><EFBFBD>i<EFBFBD>oz<6F><7A>1<EFBFBD>?3}<7D>v<EFBFBD><76><EFBFBD><1F><><EFBFBD><EFBFBD>@tm<74><6D>j山g*<2A>S<EFBFBD><53>><1D>mn<6D>L<EFBFBD>7L<37>jbzLo<4C><6F>e<EFBFBD>v&%<25>-^<5E>ʿv<CABF>Uͺ<55><EFBFBD><E588A2><EFBFBD><EFBFBD>T<>Ʀ=0<><30>\D<>X/ <11><>8<EFBFBD><jo<6A><6F>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD>.E<>h<EFBFBD><1A>-LWV<57>$<24><><EFBFBD>q<18>xd<>VtM<74>"<22>.QE٘<45>f"<22><>g<EFBFBD>O<EFBFBD><4F>ѹ츱}<7D><><EFBFBD>Q<><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V~E<><45><EFBFBD><EFBFBD>h<EFBFBD>q<EFBFBD>Ê<EFBFBD><C38A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>yuL<EEB993>sDǶ<44>֜<EFBFBD>ê<EFBFBD><C3AA><EFBFBD><15><> <0A>k7b<37>ܫ<EFBFBD>رkQUT[<5B><>3>Q<11><>D<EFBFBD><44>t<EFBFBD><74><EFBFBD>Z0<5A><30>rv1<76><31>ݽj<DDBD><6A><EFBFBD>F?<3F><>fzSݪ<53><DDAA><EFBFBD>o<EFBFBD><6F><EFBFBD>Έªb&<}`<60><>73<37>,<2C><67>]<5D>z<EFBFBD>U<17>ަ<EFBFBD>'<27><14><>Ϧ<EFBFBD>m<>[<5B><>ŋ<EFBFBD><C58B>̿~q<><71>W|Lx<4C><1B><><EFBFBD>1U[<5B><>=/q^<5E>OX<4F><58><EFBFBD>^<1C><><EFBFBD>8<EFBFBD>0lec<65>]<5D>߈<EFBFBD><DF88>\<5C>M<><4D><EFBFBD><EFBFBD>UN<55>{<7B><>z=<3D>ݞ
<EFBFBD><EFBFBD>*<2A><>ws<77>U<EFBFBD><55><EFBFBD><EFBFBD> <0B>
f7ٹ<><D9B9>;<3B>GOL{<7B><><65>b7E<37><45><EFBFBD><EFBFBD><10><>1pr)<29><EFBFBD>[<5B>jռznD<6E>y<EFBFBD><79>N<EFBFBD>8<EFBFBD>l,<2C><><EFBFBD><EFBFBD><EFBFBD>ȳMMtM<18>\<5C><11>w\k<><6B>5M<35><4D><EFBFBD> v<><76>Ƨ<1E><>iȻvݙ<76><DD99><EFBFBD>n+<2B>=<3D>k5G<35>mebq<62>y_R<5F><52><EFBFBD><00>ESM<53><4D>c<EFBFBD>LLoʘ<6F>w<EFBFBD>ǚS<C79A>UQx<51><78><05><><EFBFBD><EFBFBD>0<EFBFBD><30>kT<6B>.}<7D><>f(<28><>w-<2D>Z<EFBFBD><5A><EFBFBD>b<EFBFBD><62><EFBFBD>t<EFBFBD><74>/<02> <0A><><EFBFBD>yWn<57><6E><EFBFBD>^54<35><1A>><3E>+<2B><><EFBFBD>58<15><>m<EFBFBD><6D>:<3A><><v<><67><C4A7><EFBFBD>]<5D>ηEtN<74><4E>(<28><><EFBFBD>m<1D><>~t<>#<23>yp<79>M9<4D><39>/<2F>s&)<29><><EFBFBD><EFBFBD>>4ޚ#[<5B>W<31><DDA7><EFBFBD>=:5<><35><EFBFBD><14>l<EFBFBD><6C> <09><1C><>eS<65>Lc<4C>W&<26><>M<EFBFBD><4D><EFBFBD>j<EFBFBD>ּ<EFBFBD>}5S<35>u<EFBFBD><75>{<7B><>v<EFBFBD>i<EFBFBD>U4Wߦ&b*ַSTӱw<D3B1><77>q<EFBFBD><71>d\ǽGv<47><13><><EFBFBD>8kG<6B><47>sT<73><54>o<1F>?4U<34>\<5C>ۘ<><DB98>jj<6A>?<3F><61><C598>Q<EFBFBD>\1<><1F>ڱ7<DAB1>"<22>LN<4C><4E><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<><33><EFBFBD> <20><13><>JDL΢ <09><><EFBFBD>Ƥ<14><><EFBFBD>Dubbu>h3:<3A>4Y<><59><EFBFBD><EFBFBD><EFBFBD> <20><1B>@11:<3A>0P#s<><73> <09>N<EFBFBD><05><><EFBFBD>B,<2C><><EFBFBD>z 
DLΠTcS<63><53>@"&gP,ƧR<C6A7>F<>P<EFBFBD> 1<><31><00><11><>,ƧR<C6A7>)dY<>y<EFBFBD>"<22><>Y<><59><EFBFBD> <20><> P<>E@U$ <07><1D>!<21><>-?<3F>e<><65>T<><EFBFBD>c<EFBFBD><00>}<7D><>w<EFBFBD><77>7<EFBFBD><37><EFBFBD><EFBFBD>}<7D>/<2F>S<EFBFBD><53>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_G<13>~<1C><><0F><01>]<><EF8389><EFBFBD>o<1A>VE<56><45><16>ۚ뫦<DB9A>Du<44><75><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD><EFBFBD>|<7C>=<3D>+<2B>N<EFBFBD>+<2B><><14><>QӬG<D3AC>}<00><0E><><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>M<EFBFBD><13><><EFBFBD>ּ{QN-s5<73><35><1D><>֞<EFBFBD><D69E>:uzb<7A>c<EFBFBD>Y<<3C>pָL<D6B8><4C>&<26><><00><><EFBFBD>U<15>?<3F>1V<31><1C> u#<23><><EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD>G!g:<3A>w<EFBFBD><77>^-<2D><13><><>1<EFBFBD>|<7C>|<7C><><EFBFBD>s9YyX<79><17><>V-ٵvq<76>nUݘ<55><DD98><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<>G<03><>u<EFBFBD><08>y)˻oŷcԵ<63><D4B5><EFBFBD><EFBFBD>QN<51>1<EFBFBD><31><EFBFBD>qr<71><72><EFBFBD>b<EFBFBD><62>^<5E>ȷ:<3A><><EFBFBD>&<26><><EFBFBD>rbz<62><@<1B>?<15><>9<EFBFBD>`p<>vg#<23>\L<>c<16>WnU<1B><>i<EFBFBD><69><EFBFBD>Lv9<76><39>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;9<>q<EFBFBD>9<EFBFBD><39>-<2D><>+<2B><><EFBFBD><EFBFBD>#<23>STD<54><44>b:o<><6F><EFBFBD><EFBFBD>?<3F><>o)<29><>r=<3D><>0<EFBFBD> ޘ<><DE98><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F>iD<69>W<><57> }?<3F>8<EFBFBD>W k<><6B>'<27>ɯ<EFBFBD><C9AF>j<EFBFBD>n<EFBFBD>FE9<45><39><EFBFBD>ܙ<EFBFBD><DC99>Uۦw1]3<1D><>Lz\<><7F><EFBFBD>?<3F><1C><11>q9sD\<5C><19><>عݝ<D8B9><DD9D><EFBFBD>q<13><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>><3E><><1E><><EFBFBD><EFBFBD><EFBFBD>)<29>qv<71><76>\<5C><><EFBFBD>dxVm<56>Lnw<6E><77><EFBFBD><EFBFBD>DSM5U3<55><12>gv#<0F><>ƿ<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD>`՟c<D59F><63>&<26><18>Y<EFBFBD>{<7B>5[<5B><>^<5E><>|8<>5<EFBFBD><35>D<EFBFBD><44><EFBFBD><EFBFBD>s<EFBFBD>=<3D><><EFBFBD><EFBFBD>n%<25><><EFBFBD><<3C><><EFBFBD>J312<31><32><EFBFBD>m^<5E>T<EFBFBD>1<15>Mt<4D><74><EFBFBD>&*<2A>'<27><>G<EFBFBD><47>9ns<6E><73><EFBFBD><EFBFBD>x<EFBFBD><78>O2<4F><32><EFBFBD><EFBFBD><EFBFBD>Ǫ<EFBFBD>ʢ<<3C>)<29>&g@<40>[<5B>v<07><><EFBFBD>e<EFBFBD><65><EFBFBD><EFBFBD>QَS"#<23><>y<EFBFBD>l<EFBFBD>3zf<7A><66>)<29><><EFBFBD>S<1B><><EFBFBD>DS<44>z<EFBFBD>{3<>.k<>]<5D><><EFBFBD>qx<71>l<>W<EFBFBD>r<EFBFBD>%<25><>l<EFBFBD>L<EFBFBD>k<EFBFBD><6B>4W_w}7Ϙ8<03><>v?<3F>|<7C><><EFBFBD><EFBFBD><1B>\<5C>)<29><>v<EFBFBD>Wo<57><6F>^<5E>n<EFBFBD><6E><EFBFBD><EFBFBD>L<EFBFBD>=&#S<><53><EFBFBD>OV<4F>9<EFBFBD>r<EFBFBD>t<>s|Vw<17><14>sc3<1E>7"<22><><EFBFBD><EFBFBD>Q<13><>A<EFBFBD>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00><><EFBFBD>N<><4E>9<0F> <0C><>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><00><><>C<>C#<23>Z<EFBFBD>|<7C><>l<EFBFBD>8~<7E><>t2<EF978C><32>a<EFBFBD>+<2B><>,<2C><><EFBFBD>a
<EFBFBD><EFBFBD> F<>w<00>=grɋ bu;<3B>ffw <1B><> ;<3B>܀
N<>p
,<2C><><EFBFBD>g<EFBFBD>
O<><4F><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD>dQ<64>r<EFBFBD><72><EFBFBD>f<EFBFBD><66>a<EFBFBD><61>u.<2E><15>3<EFBFBD>-<2D>޹M<17>n1<6E><31>b)<29><><EFBFBD><EFBFBD>*<2A><><EFBFBD>31>Q3;<3B><>z<EFBFBD>&&<26><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<16><>gr<67><72>g9~<7E>=c<><15><><EFBFBD><EFBFBD><EFBFBD>?~~<7E>Z<EFBFBD><5A>y<EFBFBD>ӷ<EFBFBD>^<5E>r<EFBFBD>ڭ^<5E>]<5D><><EFBFBD><EFBFBD>U:<3A><><EFBFBD>^<5E>Ӎ<><D38D>wskť<6B><C5A5>*<2A>:x<><78>}<7D>Lz.`d\<5C>b<EFBFBD><62><EFBFBD><EFBFBD>SLQ5L<35><4C><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>TbUDޕ<44><DE95><EFBFBD><EFBFBD><EFBFBD>7pq/ӏVU<56><55><EFBFBD>i<EFBFBD>7m<37><6D><EFBFBD>1<1B><>Q<EFBFBD><51><EFBFBD><EFBFBD>zo^O;yؔ߿L<DFBF><4C><EFBFBD>;<3B>M<>o<EFBFBD><6F>*<2A>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bzO<7A><4F><EFBFBD>5<18><><EFBFBD><EFBFBD>o<EFBFBD>~&Xt<58><74>6<EFBFBD><EFBFBD><16><><EFBFBD>4<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><13><>S<13>g<EFBFBD>ο&<26>|<7C>}|<7C>l^<5E>w6<77><36><EFBFBD>SNFO<46>\G<>"<22>G<EFBFBD><47>h<EFBFBD>3<EFBFBD>\<5C>4<EFBFBD>f<EFBFBD><66><EFBFBD>s<EFBFBD><73>\<5C>tEgQb<51><62>f<EFBFBD>W<EFBFBD>M3<4D><33>c<EFBFBD>OE<4F><45><EFBFBD><EFBFBD>Y<EFBFBD>)<29><>"<22><><14><>͊<EFBFBD><CD8A>b<EFBFBD><62><EFBFBD>݋q<DD8B><71>{<7B>P<EFBFBD>]<5D><12><><EFBFBD><EFBFBD><EFBFBD>!2é<32><C3A9><EFBFBD><EFBFBD><EFBFBD>Ɗ<EFBFBD>2+<2B>Ǚ<EFBFBD><C799><EFBFBD>SL[<5B><><EFBFBD><EFBFBD>=<3D><>˧{<7B><><EFBFBD>US\<5C>3<EFBFBD><33>w<EFBFBD><77><><C4AA><EFBFBD><05><>k<12>U<EFBFBD><55>ػ<EFBFBD><D8BB><EFBFBD>.w*<2A><>)<29><>1<EFBFBD><31><EFBFBD><13>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FU<46>><3E>r<EFBFBD>&-Q7<51><37>b<EFBFBD><62>w<EFBFBD><77><EFBFBD><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD>y9<79>э]6<><36><EFBFBD><16>O?<3F><><EFBFBD>c/bM7<4D><37><EFBFBD>uZ<75>v骍<76>QM4DD<44>}|<7C><>e<EFBFBD><65><EFBFBD><EFBFBD>e<EFBFBD>r<EFBFBD><72><EFBFBD>Ow<><1B>~$S<><53>{X<>c]<<3C><><1A>щTLL<4C><4C><EFBFBD><00><>,;<3B><<3C>5<EFBFBD>y<18>q<EFBFBD><18>ڦ<EFBFBD>T<EFBFBD>6<EFBFBD><36><EFBFBD><EFBFBD>Z<EFBFBD><5A><16><>GH<47><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><+񫷇<>X<><58><EFBFBD>.z<>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{i<><69><EFBFBD>r<06><>b<EFBFBD><62><EFBFBD><EFBFBD><EFBFBD><1E><><1B>fV=7<>W<EFBFBD><57>~<7E><><EFBFBD>;<3B><>M<EFBFBD><4D><EFBFBD>?:*ܧ<1B><><EFBFBD>v<EFBFBD>Y<18><17><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M1='s4N<34>cE\<5C><16><><EFBFBD>=!lܻ<DCBB><7F>2<EFBFBD>T<EFBFBD>_<EFBFBD><16>"<22><><17><>*<2A><>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD>Bry<18>9<EFBFBD>dXǿj<C7BF><6A><EFBFBD>WEw<45><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD>-A'<16><><EFBFBD><EFBFBD><05><><EFBFBD>N&M<>ub<75>_<EFBFBD>ݢ<EFBFBD>*<2A><><EFBFBD><EFBFBD><EFBFBD>""<<3C><>^L<><4C><EFBFBD>.`ٳ<><D9B3><EFBFBD>j<EFBFBD><6A>+<2B><><EFBFBD>U3<55><33><EFBFBD>b<EFBFBD><62><EFBFBD>+@YŪfg<66><67>ui<75><69>'ͫ<><19>+<2B>o<EFBFBD>:͊h<CD8A>w3<77><33><EFBFBD>ߝS<DF9D><53><EFBFBD>?'<27><>E_<>ȹ~<7E><><EFBFBD>mdſsQ14<31><34>1<EFBFBD>כD^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> C+<2B>*<2A>~<7E><><EFBFBD>޹T<DEB9>:<3A>fv<66>[X<><58>ůU<C5AF>w<EFBFBD><77><EFBFBD><EFBFBD>Ƣ<EFBFBD><C6A2><EFBFBD>4o<34>}<7D><><EFBFBD>O<EFBFBD>'<27>S5ɸ<35><C9B8>k<EFBFBD><6B><EFBFBD><EFBFBD>w<EFBFBD><77>2'݈<>b<EFBFBD><62><EFBFBD><1E><8<>3D<><44>a<EFBFBD><61>e<EFBFBD><65>˯"<22><>j<EFBFBD>E4<45>SLF<4C><46>>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1B>lXܳ33<33><33><EFBFBD>
111=Affw3<77>X<><58><EFBFBD>t<EFBFBD>ffw=e7<13><>&fgs<67>@"f'q<><71><04><>s<EFBFBD>@cq;<3B>@<40><><EFBFBD>P&bw <09><><EFBFBD>:N<><00><><EFBFBD>QQ<08><><EFBFBD>t&fgs(<28><>n'p<02>33<33>T@#<23><> <09>;<3B>APc<><63><<3C>w3<77>E<00><><EFBFBD><00><><EFBFBD>T@:N<> <09>y<><79> ,"<22>"<22> *<2A>O<>O<EFBFBD>=<3D><><EFBFBD> o<>i<EFBFBD><69><EFBFBD>._<><5F><EFBFBD><EFBFBD>{<1F>;<3B><>㿤1<E3BFA4>ŧ<EFBFBD><C5A7><EFBFBD><EFBFBD><EFBFBD><7F>O<EFBFBD><4F><EFBFBD>ᄃb<EFBEA7>8<EFBFBD><38><EFBFBD><EFBFBD>^<5E>|<7C><0F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,~g#<23><><EFBFBD>o<1E><>nU6-E<><45><EFBFBD><EFBFBD>")<29><><EFBFBD><EFBFBD><EFBFBD>~W<><57><EFBFBD><1D><>k<EFBFBD><6B><EFBFBD>v&Ew<45><77><17><>M<EFBFBD>~%Q<1D><>*<2A><><EFBFBD><EFBFBD>y<EFBFBD>>Z<><5A><EFBFBD>w<><77>v_<12>.<2E>&o=k<>8<EFBFBD>V|oQ<6F><51><EFBFBD>]؝U<17><>ޞ<><DE9E>(<28>;饋<><E9A58B>y<><79>ɵVu<56>[mM<6D><4D><EFBFBD><EFBFBD>N<><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7BDAE>^<5E><>{<7B>>D.;qOe<4F><EFBFBD>o1<18><><EFBFBD>]<5D>V%<25><><EFBFBD><EFBFBD>ۈ<EFBFBD>׉M:<3A><>s;<3B>z<1D><<3C>f<EFBFBD>ync??<3F><>W<EFBFBD>M<EFBFBD>h<EFBFBD>tj|x<>4L<34><4C><EFBFBD><EFBFBD>b7<62><37>t<EFBFBD><74><EFBFBD>?D<><44>\$ddxW3<57><33>*2)<29>v<EFBFBD>b<>TEw<45>jf(<28>r<EFBFBD>k<EFBFBD><6B>f'^<5E><><EFBFBD>G<EFBFBD>v<EFBFBD><76><EFBFBD>[<5B><>z<EFBFBD><EFBFBD>c<EFBFBD>f<EFBFBD><66>`Z<><5A>SN<53>L[<5B>TӨߞ<D3A8>s<>}/ܿ<><DCBF>;=<3D><><1F><><EFBFBD><66><D189>NE^<5E><>M۳4<DBB3><34><EFBFBD><EFBFBD><EFBFBD>#<23><>{<7B>>7<><00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD><53><EFBFBD><E1ABB5>L<EFBFBD><4C>.s;:<3A>ۘ<EFBFBD><DB98>W<EFBFBD>eQ6<51><36>+<2B><><EFBFBD><16><><EFBFBD>"cSWN<57>k<EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>[<5B><>M<EFBFBD><4D><EFBFBD>r<1D><><EFBFBD><EFBFBD><EFBFBD>̯'<27><><EFBFBD>k+DZ<16><>D_<44>V<>US5Ӿ<35><D3BE><EFBFBD>!~<7E><>}ӻ%<25>`<60>S <0B><><EFBFBD>%=<3D>C<0E><><EFBFBD>+t<>˦=<3D><>u_<75>DUni<6E>"<22>{<7B><><EFBFBD><EFBFBD>4<EFBFBD>O<EFBFBD><4F><EFBFBD>o<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD>lq<6C><71>۳<EFBFBD><DBB3>v3<76><33><EFBFBD>Nj<EFBFBD>SU]<5D>4M<34>u<EFBFBD>S<1B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~t<03>;;<3B>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><77>k5<6B>lpF&Wnn;<3B>r,Ş<>{<7B><>U艍<55><E8898D><EFBFBD><EFBFBD><17>ǘ<EFBFBD><C798><EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD><<3C>omՍk<02>-\<5C>ufͫ4_<34>O<1A>:LE<4C><45><EFBFBD>o<EFBFBD><6F><EFBFBD>~V<03><>g<EFBFBD>l[<5B><><EFBFBD>g<EFBFBD>W#6<><36><EFBFBD><EFBFBD>r<EFBFBD>c<EFBFBD>ª͞<C2AA><CD9E>So<1A><1A>V<EFBFBD><56>(<28>csW<73>ngoN<6F>v<EFBFBD><16>9<EFBFBD><39>v<EFBFBD>&xۗ8<DB97><38>,<2C><>vk<76><6B><EFBFBD>}<7D><>f<EFBFBD><66><EFBFBD>Sn<53><6E>f#<23><><EFBFBD>ף<><D7A3><1F><><EFBFBD><EFBFBD>dy/<2F><><11><>S/<2F><16><>l\KV<4B><56>f<><66>+<2B><1A>|<1E>x<EFBFBD>O<EFBFBD><4F>s]1<><31>D̸}<7D><>{ <09><><EFBFBD>l<EFBFBD><6C><EFBFBD>1<EFBFBD>K<EFBFBD><18>4<EFBFBD>يx[v<>}隨<><E99AA8>Uj<55><6A><EFBFBD><EFBFBD>*<2A>g<EFBFBD>a<EFBFBD><61><0F><><EFBFBD>cyK'<1F><>^]9<><39>os֋wE<77>몪j<EBAAAA>U]wsq<73><71>[<5B><><EFBFBD>u<EFBFBD><75><EFBFBD>}<7D><><EFBFBD>2<EFBFBD>{<7B><><EFBFBD><EFBFBD>0}Iո<7F>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD>Mq4ݯ}诬N<E8AFAC>1<EFBFBD>V<EFBFBD><56><EFBFBD>}g <0B>S<EFBFBD><53>=<3D><><EFBFBD><EFBFBD><EFBFBD><64>~Wz<57>"n<><6E><EFBFBD><EFBFBD><EFBFBD>|<7C><><EFBFBD><17><><EFBFBD><EFBFBD>{#<23>;<0F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><16><>/<2F><>~<7E><1F>|C<>E<EFBFBD>^u<>5\<5C><><EFBFBD><EFBFBD>LϔN<CF94><4E><EFBFBD>F'rj<72>~<7E>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD><64>M><3E>K6n^<5E><>t<EFBFBD><74>=<1B>K<EFBFBD><4B>Z<EFBFBD><5A>r<EFBFBD><72><EFBFBD>rcL<16><><EFBFBD>]<5D><>u<EFBFBD><75>Rou<14><>܊.<2E>Z<EFBFBD>"5ݟ<>6<><36><EFBFBD><EFBFBD>+<2B><>O<EFBFBD>kd$L<><4C><11>1v<31>ȟ.<2E><><00>y<EFBFBD>b"f'S<>*<2A>1(ɋ @PTT<54><54><EFBFBD><EFBFBD>u<EFBFBD>y<EFBFBD><79>Vi<56>v-eY<65>5M<16><><EFBFBD>{<7B><><EFBFBD>SL=<3D><>č<EFBFBD><C48D>6<><36><EFBFBD>ߏ<EFBFBD>q<EFBFBD><EFBFBD>;V$E<>o<EFBFBD>i<EFBFBD>L<EFBFBD><4C>z<EFBFBD><7A><EFBFBD>O<><4F><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>|/<2F>8<EFBFBD><38>d}<7D><>ީ{<7B>֮<EFBFBD>NQ<4E><51>߮<>_q<><71><EFBFBD><EFBFBD>U<EFBFBD><55> <0B>7<><37>j<><6A><EFBFBD>;<3B><1A><>G(<28>e<EFBFBD>s<EFBFBD>|/<2F>8<EFBFBD><38>d}<7D><><EFBFBD><17>o<>2><3E><><EFBFBD>IޓU_<08> <0C><>z<EFBFBD><7A><EFBFBD><1B><>><3E><><EFBFBD> <0B>7<><37>j<><6A><EFBFBD>{<7B>j<EFBFBD><6A><1C><><EFBFBD><1D>]<5D><><00>~~Gڞ<47><DA9E>|<01><><EFBFBD><EFBFBD><EFBFBD>q;<3B>w<EFBFBD><77>W<EFBFBD>9GC,;~<7E><>|<01><><EFBFBD><EFBFBD><EFBFBD>=w<><77><03><><EFBFBD>j<><6A>M<EFBFBD><4D><EFBFBD><EFBFBD><1C><>ew=w<><77><03><><EFBFBD>jz<6A><7A><EFBFBD><1B><>><3E><>ܛ<EFBFBD>U_<55>(<28><>]<5D>]<5D><><00>~~Gڞ<47><DA9E>|<01><><EFBFBD><EFBFBD><EFBFBD>q7'zMU~<7E><><EFBFBD><EFBFBD><1D>]<5D><><00>~~Gڞ<47><DA9E>|<01><><EFBFBD><EFBFBD><EFBFBD>q;<3B>nMU~<7E><><EFBFBD><EFBFBD><1D>]<5D><><00>I<7F><49><EFBFBD><EFBFBD><EFBFBD><17>o<>2><3E><><EFBFBD>I<EFBFBD>5U<35>r<EFBFBD><72>Xw=w<><77><03><>&Gڞ<47><DA9E>|<01><><EFBFBD>#<23>\=ɹ5U<35>r<EFBFBD><72>Xw=w<><77><03><>&Gڧ<47><DAA7>_q<><71><EFBFBD><EFBFBD>WrnMU~<7E><><EFBFBD><EFBFBD><1D>^<5E><>7<EFBFBD><37><EFBFBD><EFBFBD>*<2A>U<EFBFBD><55>s_<73><5F>UG<55>s<EFBFBD>s22<32><32><EFBFBD>7<EFBFBD><37>^<5E>7T<37>QQ<1E>G<EFBFBD><47>ܧ<EFBFBD>s<EFBFBD><1E><><EFBFBD>;<08><>g`8<><00>
<20><><00><><EFBFBD>
<08> <20><>
<00><>(*<02><> <00> <20>
<EFBFBD>"<22><>  <20>*
$**<00><> <20>*<2A>~;<3B>C<1B>Z|>˗<><CB97><EFBFBD><EFBFBD><00><><EFBFBD>N<><4E>x<EFBFBD><78> o<>i<EFBFBD><69><EFBFBD>._<><5F><EFBFBD><EFBFBD>{<1F>;<3B><>ؾ<EFBFBD>'<27><>*<03><>6<EFBFBD><36>;/<2F><><EFBFBD>& \<5C>ܪ<EFBFBD><DCAA><EFBFBD><EFBFBD>Ѹ<EFBFBD>7:<3A><>"gQ=<<3C>.<2E>s<EFBFBD><73><EFBFBD><EFBFBD>&5<>әj<D399><6A><EFBFBD>F]<5D><><EFBFBD><EFBFBD>]<5D><><EFBFBD>o<EFBFBD><1B>߾<EFBFBD><DFBE>5;7<><37><EFBFBD><EFBFBD><EFBFBD>r3b2)<29><33><DEB5><EFBFBD><EFBFBD>cz<63>N<EFBFBD>z<EFBFBD>;<3B><>=<3D>.<2E>U<EFBFBD><55><EFBFBD>Ջ<F'g&<26><>Ne<4E><65>?<3F>Gvi<76><69>gtչ<74><EFBFBD>F<EFBFBD><46>88}<7D><><EFBFBD>y|n6'<27><>^U5Uj<55>Y<EFBFBD>j<EFBFBD>Ww<57><77>.ST<53>5GM<47>3<><33>MYr<59><72><EFBFBD>q<EFBFBD>/<2F>x<EFBFBD>"'<27>G!<21>]<5D><><EFBFBD><EFBFBD><00>+<2B>D<EFBFBD><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43>r\<><17>*<2A><>S{..<2E>~j<><6A>f*<2A><><EFBFBD><EFBFBD>v<EFBFBD>׵<EFBFBD>os<6F>4nf<6E>zs<7A><73><EFBFBD><EFBFBD>f<EFBFBD>õD<C3B5>tS<74><53>߻^<5E>Urm<72>1娢:zw<7A><19><>_<EFBFBD><5F><EFBFBD><EFBFBD>?<3F><>n<EFBFBD>xU<>x<EFBFBD>6l<36>4<EFBFBD>Z<EFBFBD>Oz<4F>j=31<1B><>a<EFBFBD><61><EFBFBD>s<EFBFBD><73><EFBFBD>a<EFBFBD>ijj<C4B3>V<EFBFBD><56>3^]<5D><><EFBFBD>S<EFBFBD><53><EFBFBD>_{<7B>D<EFBFBD><44>D<EFBFBD>S<13><>v׻I<D7BB><49><EFBFBD>r<EFBFBD>ָNF<4E><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*䨪(<28>nE{<7B><>cq<63>i<EFBFBD><69>z<EFBFBD><7A>Ў<EFBFBD>ڷ<EFBFBD>z<EFBFBD>'<1F>a<EFBFBD><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>c<EFBFBD><63>]<5D>n<EFBFBD>5<EFBFBD>Q\[<5B><>b<EFBFBD>bw<62>5<EFBFBD><35><EFBFBD>5<EFBFBD>>?<3F><>sx<73><78><EFBFBD>εWUr<><72><EFBFBD>k<EFBFBD><6B>'ʪk<CAAA>f<EFBFBD><66><><D899><EFBFBD>u<EFBFBD>O<EFBFBD>z<EFBFBD><7A>FW<46><57><EFBFBD><EFBFBD>ۊ7<DB8A><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WܧQ<DCA7><51>^뒀<0E>a<EFBFBD>?<1D><>}C{:<3A>?<12>=ܬ̹<DCAC>7< <16><><EFBFBD><EFBFBD>(<28><><EFBFBD>u<1A>c<EFBFBD>f<<3C>s'w<><1C><1D><>'3#<0E><>;<3B>ױ2<D7B1><32><EFBFBD><EFBFBD>Uz<55><7A>uQU1_v<5F><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD>><3E><><EFBFBD><EFBFBD>O1<4F>ׁ<EFBFBD>ݯ<EFBFBD><DDAF><EFBFBD><><7F>O#ùb͎<62>_<EFBFBD><5F>Sr<53><72>L<EFBFBD>1Msw<><77><11>s9<73><39>ͮC<CDAE><43><EFBFBD>5<EFBFBD><EFBFBD><7F><EFBFBD><14><>v<EFBFBD>58<35>+<2B><>͚<EFBFBD>WD<57>U4<55>Ʒߚu1;<3B><>N<EFBFBD><4E>?/<2F><><EFBFBD><EFBFBD>rm<72>s<03><><EFBFBD>g<EFBFBD><67><EFBFBD>Ew<45>Z<EFBFBD><5A><EFBFBD><EFBFBD>M<EFBFBD>
5]U\<5C>LQ؍y<D88D><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><0E>c<EFBFBD><63>/<2F><><EFBFBD> E6<45><36>/<2F>r<><72>&<26>ܽ߿Mj<><6A>T<EFBFBD><54><EFBFBD>"<22>֣<EFBFBD>~3<>}<7D>[<5B><>-<2D><><EFBFBD>_<EFBFBD><5F><EFBFBD><16>W)\QNMvh<76>)<29><>)<29><><EFBFBD>uL<75>LDw<44>:<3A><><EFBFBD>r<EFBFBD><72><EFBFBD><<3C><>_?v<><03>(<28><>:p?<3F><>ƝSŏ<13><><EFBFBD><EFBFBD><EFBFBD>׉<EFBFBD><D789><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><>ݰ<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B>w
<EFBFBD>k<><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Lt<4C>"<22>*<2A><>ULU<4C><55><EFBFBD><EFBFBD>oO<6F><02>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><19>c<EFBFBD><63>
<EFBFBD>B#"<22>x<EFBFBD><78>*<2A><><EFBFBD><EFBFBD>7<H<>oÊz뻠i<EBBBA0>?s<>R<EFBFBD>m<EFBFBD><6D><EFBFBD><EFBFBD>^<5E><>˜<EFBFBD>%<25><>*<2A><><EFBFBD><16><><EFBFBD><EFBFBD>j<EFBFBD><6A><EFBFBD>_v<5F><76><EFBFBD>\Lw<4C>=<3D>I<EFBFBD><49><EFBFBD> ؼ~s<><73>vC<76><43><EFBFBD><61>Ď<EFBFBD>,<2C>WVDW<44><57><EFBFBD>)<29>)<29>N<EFBFBD>j<EFBFBD><6A>5<13>΢}9<1E><><EFBFBD><EFBFBD>m<EFBFBD><6D>O<EFBFBD><4F><EFBFBD>Y<EFBFBD><59><EFBFBD>1-<2D>Y<EFBFBD><59><EFBFBD>k<EFBFBD><6B><EFBFBD>[<5B>b<EFBFBD><6A><C8A6><EFBFBD>z<EFBFBD><7A>f)<29>sQ<1E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD><6F>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N?'<16>Ϋ<EFBFBD>4W]v<>M<EFBFBD>b:yS3<53><33>}<7D><>V_h;Y<><59><EFBFBD>ɧ<02><>?<3F><>G<EFBFBD>x<EFBFBD>i<EFBFBD><69>5<EFBFBD>o<EFBFBD>S<EFBFBD>M<1B>ULF<4C>.om<6F>H<EFBFBD><48>k<EFBFBD>N<06><>ˌ <0C><>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD>7.<2E>۟Y{ow<6F><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~Mع<4D><D8B9><EFBFBD><EFBFBD>xw<78><77>i<EFBFBD>i<EFBFBD><69>Y<EFBFBD>;<3B><><EFBFBD>6<EFBFBD><36>_7/<2F><><EFBFBD>_f<1D><>{M<>d<EFBFBD><64><EFBFBD>z.<2E>Y^<5E><><EFBFBD>k<11><>;<3B><>#]=<3D>j5<1E><><EFBFBD>@Q<><51>/<2F>O<1F><>G<EFBFBD>v!<21><>!<21><>-_<>__<5F><5F>T<><54><00>d<64>a<EFBFBD><1C><><EFBFBD>O<EFBFBD><4F>~<7E><><EFBFBD><EFBFBD>G<0F>>!Ν<><CE9D>e YDoQ<0F><>ƧR*K <07><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STM<1F>Tn 3:<3A><>Z<EFBFBD>1<13><>M]<5D>\<5C>S3<53><33>#<23><>=<3D>[<5B>w<>_<EFBFBD>u<EFBFBD>ک<EFBFBD><DAA9>^w<13>dX<64>(<28><><EFBFBD><EFBFBD>U4<55>M<EFBFBD><4D><17><><EFBFBD>l<EFBFBD><6C>\<5C><><EFBFBD>=<12><><EFBFBD><EFBFBD><EFBFBD>γ3<CEB3>Q<EFBFBD><51>v<03><><18>nk<6E>z<EFBFBD><7A><EFBFBD><00><>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>*<2A>#<23>b<<3C><>TKf&'S<00>
<00>3<><33>bbu>h<><68>3<><33><EFBFBD><02>LN<4C>5((2<><32><EFBFBD>c<EFBFBD>̬E<CCAC>?<3F>z<EFBFBD><Vve5U<35><55>r<EFBFBD>(<28>U^<5E>E3<45><33>=#<23><>j<EFBFBD>6w<36><77>qW!b'<27><><EFBFBD>OfŪ/<14>$<24><10><>MK<4D><4B><37><DFB8>X<EFBFBD>ƾ<><C6BE>}<7D><><EFBFBD>e<EFBFBD><65>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C>jMK<4D><4B><37><DFB8>X<EFBFBD><00>Gg<47>fu<17><><EFBFBD>X<EFBFBD><00>h<EFBFBD><68><EFBFBD><EFBFBD>L<EFBFBD><4C>jMK<4D>=<3D>͉<EFBFBD><CD89><EFBFBD>w<EFBFBD><00>,<>=<3D>f{<7B><1B><><1F><>&7<>yI<79>MI<4D>v<EFBFBD><76><EFBFBD>{<7B><1B><><1F><>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3I<33><49><EFBFBD>Rf<52>Rj]<5D>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><35>f<EFBFBD><66>/q<><71><00><>?<3F><><o$<24><>48z<38>R<EFBFBD>Og<4F>bu7<75><37><EFBFBD><00><>?<3F><><EFBFBD><EFBFBD><EFBFBD>~<7E>Yc<59><19><><EFBFBD>O)3C<33><43>5.ױ<><D7B1>~<7E>Yc<59><1A><1F><><EFBFBD>7<EFBFBD><37>?<3F><><o$<24><><EFBFBD>&<26>Ի~<7E><>=<3D><><EFBFBD>e<EFBFBD><65>dv{6gQ{<7B><>e<EFBFBD><65>f<EFBFBD><1B><<3C><>&<26>Իs<D4BB><73>؝M<D89D>:?<3F><><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>~<7E><>Yc<59><1A><><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C>jMK<4D><4B><33><DFB8>X<EFBFBD><00>{<1F><><EFBFBD>;<3B><>?<3F><><o$<24><>48<34><38>ٞ<EFBFBD><D99E>ƿ<EFBFBD><C6BF><EFBFBD>g<EFBFBD>)<29>,O<4F><EEADAD>ga<67>5dc\<5C><><EFBFBD>TW<54><57>T<EFBFBD>UGI<47><49><EFBFBD>ٱi<D9B1><69>3<EFBFBD>sC<73>2<EFBFBD><32><EFBFBD>f&5,^y<><08><><EFBFBD>F<EFBFBD>Y<><59><EFBFBD>ƦA@AH<41><48><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>zJDnb"7 <20><>LN<4C>5"DLΣ<4C><CEA3><04><><EFBFBD>zH* 3:<3A><><13><>H()3:<3A><><EFBFBD><EFBFBD>LN<4C><4E><14><><EFBFBD>D <20><>LN<4C><4E><08>D<EFBFBD><44><05><><EFBFBD>OD@X<><58><EFBFBD> <20><>LN<4C>R#s<><73>PY<50><59><EFBFBD><EFBFBD>
)<11><> ='R<> "<22><1B>"<22><49>
<EFBFBD>s<EFBFBD>zOPT@:<3A><13><00>QE<>T%RAU$<1E>w<EFBFBD><77>7<EFBFBD><37><EFBFBD><EFBFBD>}<7D>/<2F>S<EFBFBD><53>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><18><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><>O'<27><>?<3F>w<EFBFBD>S<EFBFBD>}Oi<4F>s<EFBFBD>|>T<07>t<07>p<EFBFBD><70><<><7F><1F><>|<7C>!<21>!<21><>-_<><5F><EFBFBD>/<2F>S<1F><>G<EFBFBD>v!<21>Hd<48><00>W<EFBFBD>}N<><4E>p<EFBFBD><70><EFBFBD><1C><>/Q:<3A><>e<0F><><EFBFBD><EFBFBD>w( <08>E"u;<3B>ffw,<2C><><1E>nݳWz<57>ʨ<EFBFBD><CAA8>t<EFBFBD>b<>K<EFBFBD>k<EFBFBD>sĹ15O<35><4F>[zWF5TMV<4D><56>EQ<1B><>O<EFBFBD><4F><EFBFBD>x<05>/<05>j<EFBFBD><6A><EFBFBD>fb<<3C>H<><48>ۖ<EFBFBD><DB96>[<5B><>'╽v<E295BD><76>EU<45><14>mM<6D>y<EFBFBD>L<EFBFBD><4C><<3C><>j<EFBFBD>v<EFBFBD><76>dDU<11><><EFBFBD><EFBFBD><EFBFBD>/$<24><>&fgs=@Ubu;<3B>4ffgs;<3B>|<7C>h<EFBFBD><68><EFBFBD>n;Ռzs<7A><73><EFBFBD><EFBFBD>5LY<4C>;<3B>c<>fcʘ<63><CA98>ϔzf9<66><39><EFBFBD><EFBFBD><EFBFBD>x\<5C><><EFBFBD>Ҍ:)Ǧ=ɦ=<3D><>z<EFBFBD><7A><EFBFBD>e<EFBFBD><65><EFBFBD>"<22><>|>g<>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>˪<EFBFBD>ȻUqDj<44>|<7C><><><11>C<EFBFBD>t<EFBFBD>`<60>=i<><69><EFBFBD>}G<><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>מ<EFBFBD>=:<3A>F&,<2C><>L<EFBFBD><EFBFBD>l<EFBFBD>4<1D>^<1A><><1B><66>L<EFBFBD>5<EFBFBD>1⪭U<E2AAAD><55><EFBFBD>ލ<EFBFBD><DE8D>z<EFBFBD><<3C><><*<2A>&ԓ6qȝN<C89D><4E><EFBFBD><6C><D593><76>6<EFBFBD>w,Eu<45>1<EFBFBD><31><EFBFBD><EFBFBD>DDDLo<4C><6F><EFBFBD><EFBFBD>[2<>X<EFBFBD><35>k<EFBFBD><6B>UO<55>Q1<51><31><EFBFBD><EFBFBD>1)VT<>i.񙙝Ϙ<F199999D><CF98><EFBFBD>-ggS<67>{"q骚<71>.w;<3B>3׬t<D7AC><74><EFBFBD><1E><18>,<2C><>̌<EFBFBD>n<EFBFBD>v<EFBFBD>w<EFBFBD><77><11><>w[<5B><><EFBFBD><00><><EFBFBD>q<EFBFBD>pk<70><6B><EFBFBD><EFBFBD><EFBFBD>~x<><78><EFBFBD>p<EFBFBD><70>|N7TZ<54>'2/Mq<4D>/<2F>E<EFBFBD><45><1B><>Ƿ<EFBFBD><C7B7><EFBFBD>N<EFBFBD><4E><EFBFBD>Gg<47>Y<EFBFBD>2g+'±Mɷrq<72><71>ʨ<EFBFBD><CAA8><EFBFBD>\<5C>1<EFBFBD><31>O]<5D><>t<EFBFBD><74>^b۷<62><DBB7><EFBFBD>1;<3B>Ԏ<EFBFBD><1F><>w<06>N^^M<><0E>4wmcSs}虉<><E89989>O<EFBFBD>ˍMshY<68>9<EFBFBD><39><EFBFBD>Ϙ<EFBFBD>Y<EFBFBD><59>i<EFBFBD>͵<EFBFBD><CDB5><7A>6<EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD>|<7C><>u<EFBFBD><1C>[܏<>z<EFBFBD><7A>QW<51>M<EFBFBD>oݚbc<62>L<EFBFBD>^<5E><><EFBFBD><7F><EFBFBD><EFBFBD>"<22><><05><>:<3A><>q<EFBFBD><71><EFBFBD><EFBFBD><EFBFBD>Ͽ꫹]<5D><><EFBFBD>&<26><><EFBFBD>T<EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD>aw<61>Ƿ<EFBFBD>d<EFBFBD>Փ~<7E><><EFBFBD>< v<><76><11><>fg<66><67>c]cS<63>z<><7A>o<><6F>c<EFBFBD>3C<33>F<EFBFBD>wm<><6D>^><3E>6<EFBFBD>M<EFBFBD><4D><EFBFBD><EFBFBD>\<5C><>ë<1A>i<EFBFBD><69>o<EFBFBD>w<EFBFBD>uקO<D7A7><4F><EFBFBD>l:8<>96<39>o<EFBFBD>z<EFBFBD>SL۪<4C>E1<45><31><EFBFBD>n<EFBFBD><6E><EFBFBD>ǣ<EFBFBD>I<EFBFBD><49>/<2F>}<7D><>i<EFBFBD><69>w>h<><68>\N>gw2<77><32><EFBFBD>b<EFBFBD>S|H<>M<14>}<7D><>k<EFBFBD>^<5E>C[<16><><EFBFBD><>[Uwb<77>{<7B>׽<EFBFBD>uL<75>y<EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<1D>`<60> <11><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><48><C3B3>z<EFBFBD><7A><EFBFBD>TUg<17>]S<11><>rj<72><6A>5<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>0lX<6C>-<2D><>ʹ5M]˾<><CBBE><16><><>UF<55>;<3B>8<15>9<EFBFBD>/m<><6D><EFBFBD>{<7B>/'<12><><1E>TEQ<45><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&'<27><><EFBFBD>n<EFBFBD>\]<5D>:<3A>?<3F>̋<EFBFBD>N<EFBFBD><4E><18>ff?
<EFBFBD><EFBFBD>LL9<EFBFBD><EFBFBD>Mx5<EFBFBD>vL<17><><EFBFBD>#<23>j<EFBFBD>=Y<><59>w)<29><>/Z<>υ3<CF85>13<31>L<EFBFBD><4C><EFBFBD><EFBFBD>}<<3C><>O<EFBFBD><4F><EFBFBD>x<EFBFBD><78>a<EFBFBD>֌<EFBFBD>*<2A>T{<7B>T{Y<><59>wg<77>8W#R<><52>LM1\x<><78><EFBFBD>G<07><><<3C>i&bw& <09><><EFBFBD><EFBFBD><EFBFBD>&bw<13><>ffw3<77>P<10><><EFBFBD><EFBFBD>I&fgs<67>@E<><45><EFBFBD><EFBFBD>I<05><><EFBFBD><EFBFBD><EFBFBD>PX<><58><EFBFBD>N<EFBFBD>@Y<><59><EFBFBD><EFBFBD><EFBFBD><00><><EFBFBD><EFBFBD>33;<3B><><00>GI<47><04>gr<67>3<13><>L<>w(<28>3<13><>L<><4C><EFBFBD>P<00><><EFBFBD>Ā<13>w(<02>
<11>w<04><>r<EFBFBD>t<><00>O^<5E> <20><01>; <09><><EFBFBD>#<23><><04><>!:<3A><13><><03>@ <20><08>J<><4A>$<24>>@<40>㿤1<E3BFA4>ŧ<EFBFBD><C5A7><EFBFBD><EFBFBD><EFBFBD><7F>O<EFBFBD><4F><EFBFBD><7F><EFBFBD>7<EFBFBD><37><EFBFBD><EFBFBD><EFBFBD><16><><0F><><EFBFBD><00>y?<3F><><EFBFBD>Ӿ<><D3BE><EFBFBD><EFBFBD><EFBFBD>{OÝ{<7B><><EFBFBD>>k<>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00><><EFBFBD>N<><4E>9<0F> <0C><>j<EFBFBD><6A><EFBFBD><EFBFBD><17><><EFBFBD><EFBFBD>{#<23>;<0F><>?<3F>2ū<7F><C5AB><EFBFBD><76><CFA3><10>N<EFBFBD>xC(b<>9<>TRUEPLY
<EFBFBD>
(=,ݹf<DDB9><66><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>y<EFBFBD>L_{;<3B>f<EFBFBD>QT<51>E3<45><33>ƶ<EFBFBD><C6B6><1E><>Dڿnj<6E>Z*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD>g.̀<><CD80>ʭWަ)<29><><EFBFBD>Q<EFBFBD><51>w<EFBFBD>۹<14>6i<36>W<EFBFBD><57><EFBFBD><EFBFBD>?<3F>Ыy<D0AB><EFBFBD><E78ABD>ܹn+<2B>UϦ<><CFA6><EFBFBD>G<EFBFBD>x"<22><><EFBFBD><02><>=-O<><4F><EFBFBD><1E>|<7C><><EFBFBD>5<EFBFBD><35><EFBFBD>E:<3A>+<2B><><EFBFBD>o_<6F><5F><EFBFBD>]<5D>+<2B>f<EFBFBD>[<5B><>r<EFBFBD>/Z<>cW\<5C>S13<31><33><EFBFBD><EFBFBD>.<2E>3<13>3<><02><>4q<34><71><EFBFBD>I<EFBFBD><49>}o<><6F><EFBFBD>b<EFBFBD><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S<><53><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD>u<EFBFBD><75>N<EFBFBD>)v<><76>7*<2A>z<EFBFBD>v<EFBFBD><76>Κ<EFBFBD><CE9A><EFBFBD><EFBFBD><EFBFBD>/Fi<><69><EFBFBD><EFBFBD>mx<6D><78>4<EFBFBD>[<5B>c<13><><EFBFBD>o-<2D>ܪ<EFBFBD><14>7{<7B><>i<EFBFBD>Wz5<1D><>1=|<7C><><EFBFBD><18>ūoJ<6F>D<EFBFBD><44><EFBFBD><EFBFBD>i<EFBFBD><69>6v%̋t<CC8B>5ۛw<DB9B>:<3A><><EFBFBD>OY<4F><59><EFBFBD><EFBFBD>GMo<4D><6F>uk<75>_<EFBFBD>'&<26><>SM<1D>j<EFBFBD>|<7C><><EFBFBD>DG<44><47><EFBFBD><EFBFBD>IĪi<C4AA>%<25>|NM<4E>Lȿ~<7E><><EFBFBD>E<53>Q>ڙ<>9<EFBFBD><39>}ǮO!FE<18>]<5D>Wv<57><53><DE98><EFBFBD>S<EFBFBD>Q3<51>n"<22><><EFBFBD><EFBFBD>4<05>j✑<6A><E29C91><EFBFBD>h<EFBFBD><68>r<EFBFBD><72>~U7*<2A><><EFBFBD>n<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD>qr<71>"ffb<66>b<EFBFBD>|<7C>}<7D><>h<7F>ʵ<EFBFBD><6F>ȳE<C8B3><45>S}Ɋ<><C98A>O<EFBFBD>o<EFBFBD>;<3B><><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58>~<7E><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><1C><><EFBFBD>9mz<6D><7A><EFBFBD><EFBFBD>D<EFBFBD><44>|<7C> Z<><5A>Lwff7=zǡ<7A><1C><>*ë53<35>f.<2E>q<<3C><>NM؜<4D>Ȼo<C8BB>E<EFBFBD>TN<54>w3ݙ<33>(<28>ǥ<EFBFBD>N^>Vm9<18>&j<><6A>E<EFBFBD><45><4C>T{Y<><59><EFBFBD><EFBFBD>z<EFBFBD><7A>i+]<5D>yb<79><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rq<72><71><EFBFBD><EFBFBD>.=<3D><1D><>E<EFBFBD><45>s<EFBFBD><73>1M:{s\<5C>\<5C>X<EFBFBD><02>1n<31><6E><EFBFBD><EFBFBD><EFBFBD><12><><EFBFBD>_<EFBFBD>3<EFBFBD><33><EFBFBD>9<EFBFBD>8<EFBFBD><38>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD>FV|m<>kXy4^<5E>3W<33>VM5S3:ߵ<>D<EFBFBD><44>N<EFBFBD>>7<>6wo<1E><>;*<2A>vj<76><6A><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD>ot<6F>sӤt<D3A4><74>r<EFBFBD><72>z<EFBFBD>o<EFBFBD><6F><EFBFBD><EFBFBD>Z<1C> XS<58><53><EFBFBD><EFBFBD>r<EFBFBD><72>j<EFBFBD><6A><EFBFBD>So<53>Ƶ<EFBFBD><C6B5><EFBFBD>F<EFBFBD>)<29><><EFBFBD>j<EFBFBD><6A><EFBFBD>ތj<DE8C>E<EFBFBD>tZ<74>ݹnbg<62><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǔ<EFBFBD>$c<><16><><EFBFBD><EFBFBD>:<3A><><EFBFBD>y<<3C><><EFBFBD>Z<EFBFBD>ȷ&<26>4Օ<34><D595><EFBFBD>u<EFBFBD><75>i<EFBFBD><69>Y<EFBFBD>C_''<27><>*<2A><>x7<78><37>ջ<EFBFBD>{+<2B>U޾]覝t<E8A69D><74><02><>1*߷<>ta<><61><EFBFBD><EFBFBD>^%8<>X<EFBFBD><58><EFBFBD><EFBFBD><J<><4A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>q<EFBFBD>3<EFBFBD>j<EFBFBD><6A><EFBFBD>ڳn<DAB3><6E><EFBFBD><EFBFBD>M1<4D><31><EFBFBD><EFBFBD>UU\<5C>]<5D><><EFBFBD>j<EFBFBD>Z<EFBFBD>Ez<45>cn<63>[<5B><>5k<35><6B>#<23><>wgr<67> <12> <0A><><EFBFBD>z<EFBFBD><7A>"<22>&&<26><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>><3E>3<>3<11>-<2D><1A>ܳ<EFBFBD>6<EFBFBD>(<28><><>7܏!<15><>@l@PT@TQDTPP@E@PQED` @T%RA <09> <07><1D>!<21><>-?<3F>e<><65>T<><EFBFBD>c<EFBFBD><00>}<7D><>w<EFBFBD><77>7<EFBFBD><37><EFBFBD><EFBFBD>}<7D>/<2F>S<EFBFBD><53>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_G<13>~<1C><><0F><01>]<01><>/<2F>O<1F><>G<EFBFBD>v#<23><EFBFBD><7F><1F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>O<1F><>G<EFBFBD>v#<23><EFBFBD><7F><1F><><EFBFBD><EFBFBD><EFBFBD>{g<><67><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>|<7C>!<21>2<EFBFBD><32><EFBFBD><EFBFBD>]I<><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¤(<00><1B>@#$<24><><EFBFBD>J<EFBFBD>(3<>P <09><>Ԁ<00><>3:<3A><>LLN<4C>5 <02><>w <0C>W<>k<EFBFBD>r<EFBFBD>&$D<><44><<3C>b<EFBFBD>[<5B>X<EFBFBD>"m[<5B><>_<EFBFBD>G{q<><71>q<EFBFBD>Uj.<2E>D<EFBFBD>O<EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD>bbu=%<25><15>E]<5D>*<2A><><EFBFBD>bt<62><74>b61<19>U>,Uv&<26><><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><6C>?v*<2A>U{<7B>Z*<2A>/Ϋ}<7D>x<EFBFBD><78><EFBFBD>ïË<C3AF>ʻ<EFBFBD><CABB>6<>1<EFBFBD><31><EFBFBD><ډWW<17>ʵf<CAB5>b<>U<EFBFBD>cTёn+<2B>ǹL<C7B9><4C>L=<3D><><EFBFBD>:<3A><>.6<EFBFBD><EFBFBD><EFBFBD>ߏ<EFBFBD>q<EFBFBD><EFBFBD><EFBFBD>:<3A>r<EFBFBD>GjĈ<6A><C488><EFBFBD>i<EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1B>L<EFBFBD><4C>=w<><77><03><>&Gڸ}<7D>;<3B>֪<EFBFBD>NQ<4E><51><EFBFBD>z<EFBFBD><7A><EFBFBD><1B>L<EFBFBD><4C>=w<><77><03><>&Gڸ}<7D>X<EFBFBD><58><EFBFBD>F<EFBFBD><46><EFBFBD><EFBFBD><EFBFBD>:&Wo<57>|/<2F><38><DF9F><EFBFBD><EFBFBD><EFBFBD>_q<>?#<23>\I<><49><EFBFBD>Ƥܚ<C6A4><DC9A>G(<28>ew=w<><77><03><><EFBFBD>jz<6A><7A><EFBFBD><1B><>><3E><>ܛ<EFBFBD>W_<08> <0C><><EFBFBD><EFBFBD>_q<>?#<23>O]<5D><><00>~~Gڸ{<7B><><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><11>:]<5D>]<5D><><00>~~Gڞ<47><DA9E>|<01><><EFBFBD>#<23>\I<>D<EFBFBD>w<EFBFBD>rj<72><6A><1C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <0B>7<><37>jz<6A><7A><EFBFBD><1B><>><3E><>ܛ<EFBFBD>U_<08> <0C><><EFBFBD><EFBFBD>_<00><>?#<23>O]<5D><><01>~~Gڸ{<7B>;<3B>:<3A>̚<EFBFBD><CC9A>9GC+<2B><><EFBFBD><17><o<><6F><EFBFBD>S<EFBFBD>|/<2F><78><DF9F><EFBFBD>$<24><>u=%7&<26><><11>:]<5D>]<5D><><01>~~Gڞ<47><DA9E>|<03><><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>+<2B><>U|#<23>t2<74>S<EFBFBD><53>t<EFBFBD>x.:<3A><><EFBFBD>_<EFBFBD><5F>q<EFBFBD><71><EFBFBD><EFBFBD>]<5D>U<EFBFBD>Qk<16>Q<EFBFBD><51>Ǣ(<28>G<EFBFBD>T<EFBFBD>Z<EFBFBD>♗+<2B><><4C>'<27>W1h<31>{Z>)U[E<><45>u1<75>y<><79>
<20><>D<EFBFBD><44>#r<><13><>J<02>
<08>D<EFBFBD><44>#<23>"2<><32><EFBFBD>OID<00><><EFBFBD>GYbbu1<75><08><><EFBFBD>GPf&'S<1A>@"fu11:<3A><>3<><33><EFBFBD><04><><EFBFBD>zHDLΡ&&'R <20>F<>POIԀ<49>D<><44>#<23><08><1A>OD"&gP,<2C><><EFBFBD>|<7C>P@"7:<3A>cS<63>@#s<>@E<><45><EFBFBD>PP<08>D =%R! <09>)<00>=:(<28><07>*B<>*<00><> <20>ێ<><DB8E><EFBFBD><EFBFBD><16><><0F><><EFBFBD><00>y?<3F><><EFBFBD>Ӿ<><D3BE>;<3B>G<1B>Z|>˗<><CB97><EFBFBD><EFBFBD><00><><EFBFBD>N<><4E>v/<2F><><EFBFBD>?u<><75>ʀ<EFBFBD><CA80><EFBFBD><00><><17><><EFBFBD><EFBFBD>{#<23>;<0F><><EFBFBD>2?ū<><C5AB><EFBFBD><EFBFBD>O<EFBFBD><4F>?<3F><><EFBFBD><EFBFBD><EFBFBD>>G<><47><EFBFBD><EFBFBD><EFBFBD><16><>/<2F><>><3E><1F>|C<>;<3B><> <0C><><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD>w ,# "u;<3B><05><><EFBFBD>U<EFBFBD> "u;<3B><><EFBFBD>3<EFBFBD>܀<EFBFBD>)1;<3B><>L<><4C><EFBFBD><EFBFBD>"f'q:<3A>ffw3<77>Q<>f<EFBFBD><66>3<EFBFBD><33>ʩ<EFBFBD><CAA9><13><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#<23><<3C>SJ<53>-[<5B><><EFBFBD>>%<25><>r&|<7C>5S<35>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><69>lk<6C>ۦuU<75>j<EFBFBD>-S<>?<<3C>8~B<>f<EFBFBD><66><EFBFBD><EFBFBD><37><D68B><EFBFBD><EFBFBD><7F><EFBFBD>Sٱj<D9B1><6A>3?<3F><><EFBFBD><EFBFBD>.<0E>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D>3𕉈<33><00>־<EFBFBD>f<EFBFBD>U9mtG<74><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00>֗7<><<3C><>)<29>pu+<1B><>t<EFBFBD>g<EFBFBD><67>g<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00>}<7D><>{<7B><1D><><1F><><EFBFBD>cy'<27><>hqgs;<3B><>)<29>v<EFBFBD><76><EFBFBD>{<7B><1D><><1F><>c<EFBFBD><63><EFBFBD><EFBFBD>~<7E><><EFBFBD>3G<33><47><EFBFBD>R<EFBFBD><52><EFBFBD>Ԛ<EFBFBD>k<EFBFBD><6B>g<EFBFBD><71><DFAC><00><>?<3F><><EFBFBD>w<EFBFBD>,<>4x<34>I<EFBFBD>&hqz<71>L<EFBFBD><4C>:K<><4B><33><DFB8>X<EFBFBD>ƾ<><C6BE>=<3D><><EFBFBD>e<EFBFBD><65>f<EFBFBD><1B><<3C>48<34>33<33><33>'Wk<57><6B>g<EFBFBD><71><DFAC><00><>?<3F><><EFBFBD>w<EFBFBD>,<>4<EFBFBD><34>Y<EFBFBD>f<EFBFBD><17>uv<75><76><EFBFBD>{<7B><1D><><1F><>c<EFBFBD><63><EFBFBD><EFBFBD>~<7E><><EFBFBD>3G<33><47><EFBFBD>Fhqz<71>3<13><>L;~<7E><>=<3D><><EFBFBD>e<EFBFBD><65>g<EFBFBD><67><EFBFBD>~<7E><>X<EFBFBD><58><19><><EFBFBD>O)3C<33>3T<33><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76><EFBFBD>{<7B><1D><><1F><>c<EFBFBD><63><EFBFBD><EFBFBD>~<7E><><EFBFBD>5<EFBFBD>cy'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/_q<5F><71>?<3F><><EFBFBD>w<EFBFBD>,<>=<3D><>{<7B><1D><><1F><>&7<>yI<79>^<5E>U111<31>25<32><35>|<7C><>E<<3C><><EFBFBD><EFBFBD>[W?<3F><>æ<EFBFBD><C3A6>1<EFBFBD>QES<45>k<EFBFBD><6B><EFBFBD><EFBFBD>U'<27>K5vlJb<4A>L<EFBFBD>\<5C>К<EFBFBD>;<3B><><EFBFBD>UN<55><<3C>&ED&bw<13><>ffw=fPE<>X<00><><EFBFBD><EFBFBD><EFBFBD> <20>33;<3B><><EFBFBD>* 3<13><>ffw3<77><08><><EFBFBD>y<EFBFBD>33<33><33>&bw<13><>@<40><><EFBFBD><EFBFBD><EFBFBD>@&bw$<00><><EFBFBD>Ϙ<00>D<>w<04><><EFBFBD>|<7C>@ED'S<>&w;<3B>@<08>;<3B>gs<67>E@@"u;<3B>gs<67><73><EFBFBD>*'p<02><>w <00>GI<47><04><><EFBFBD><EFBFBD><11>w<04><><EFBFBD>GAY<>e#<23><><EFBFBD>O<EFBFBD>y<08> <00><><00><>$<24> @v+<2B><>-<2D><>
⯒_sz<EFBFBD>Upy<EFBFBD><EFBFBD>{j<><6A>߷L<4C>4O]~J*<2A>3<7F><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n׉4dY<64><59>uo<75><6F><EFBFBD>_><3E><>?<12><><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><57>q<EFBFBD><71><0F><><EFBFBD><EFBFBD><66>mV<6D>ݪw^5<><35><EFBFBD>w<EFBFBD><77>T<EFBFBD>F<EFBFBD><46>:עgѣ=<3D><><EFBFBD><EFBFBD>8<EFBFBD>۱<EFBFBD>Vl<56><6C>~ZwX<><58><1A><>S3cj<63>Q.P<>{<1C><0F>\<5C><>.}G<><47><EFBFBD><EFBFBD><05>}<12><>Ɨ<1B><<3C>sG,u=<3D>v<EFBFBD><76>.S<><53>><3E><><EFBFBD>h~<02>><3E>s<EFBFBD>4<EFBFBD><34>I<EFBFBD>&h<><EFBFBD><E58EA7><EFBFBD><EFBFBD><05>}<12><>{<1C><0F>\<5C><>.}F<><1B><<3C><>\<5C><><EFBFBD>9<EFBFBD><1F><>O<EFBFBD>\<5C><>c<EFBFBD><63><EFBFBD> <0B><>%Ϩ<><CFA8>y'<27><><EFBFBD><EFBFBD><EFBFBD>:<3A><>;C<>)<29>K<EFBFBD>Q<EFBFBD>s<EFBFBD>?r<>D<EFBFBD><44>\o$<24><>4qr<71>S<EFBFBD><53>h~<02>><3E>s<EFBFBD>=<3D>v<EFBFBD><76>.S<><53>><3E>K<EFBFBD><4B><EFBFBD>Rf<52>.X<>{<1C><0F>\<5C><>.}G<><47><EFBFBD><EFBFBD><05>}<12><>iq<69><71><EFBFBD>L<EFBFBD><4C><EFBFBD>Oc<4F><63><EFBFBD> <0B><>%Ϩ<>9<EFBFBD><1F><>O<EFBFBD>\<5C><>.7<EFBFBD>yI<EFBFBD>8<EFBFBD>c<EFBFBD><EFBFBD>s<EFBFBD>?r<>D<EFBFBD><44><1E>;C<>)<29>K<EFBFBD>Q<EFBFBD><51><EFBFBD>O)3G,u=<3D>v<EFBFBD><76>.S<><53>><3E><><EFBFBD>h~<02>><3E>s<EFBFBD>4<EFBFBD><34>I<EFBFBD>&h<><EFBFBD><E58EA7><EFBFBD><EFBFBD><05>}<12><>{<1C><0F>\<5C><>.}F<><1B><<3C><>\<5C><><EFBFBD>9<EFBFBD><1F><>O<EFBFBD>\<5C><>c<EFBFBD><63><EFBFBD> <0B><>%Ϩ<><CFA8>y'<27><><EFBFBD><EFBFBD><EFBFBD>:<3A><>;C<>)<29>K<EFBFBD>Q<EFBFBD>s<EFBFBD>?r<>D<EFBFBD><44>\o$<24><>4qr<71>S<EFBFBD><53>h~<02>><3E>s<EFBFBD>=<3D>v<EFBFBD><76>.S<><53>><3E>K<EFBFBD><4B><EFBFBD>Rf<52>.X<>{<1C><0F>\<5C><>.}G<><47><EFBFBD><EFBFBD><05>}<12><>iq<69><71><EFBFBD>L<EFBFBD><4C><EFBFBD>Oc<4F><63><EFBFBD> <0B><>%Ϩ<>9<EFBFBD><1F><>O<EFBFBD>\<5C><>.7<EFBFBD>yI<EFBFBD>8<EFBFBD>c<EFBFBD><EFBFBD>s<EFBFBD>?r<>D<EFBFBD><44><1E>;C<>)<29>K<EFBFBD>Q<EFBFBD><51><EFBFBD>O)3G,u=<3D>v<EFBFBD><76>.S<><53>><3E><><EFBFBD>h~<02>><3E>s<EFBFBD>4<EFBFBD><34>I<EFBFBD>&h<><EFBFBD><E58EA7><EFBFBD><EFBFBD><05>}<12><>{<1C><0F>\<5C><>.}F<><1B><<3C><>\<5C><><EFBFBD>9<EFBFBD><1F><>O<EFBFBD>\<5C><>c<EFBFBD><63><EFBFBD> <0B><>%Ϩ<><CFA8>y'<27><><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>{~߇͵<1F>z<EFBFBD>ۧ<EFBFBD><DBA7>P<EFBFBD><50><EFBFBD>KXW"<22>%U<><55>i<EFBFBD>эn<D18D><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><13>f7<66>Lǧx}<7D><1E><>Y<EFBFBD><59>;!&<26><><EFBFBD>5<EFBFBD>R<EFBFBD>X<18><>Z<EFBFBD><5A>_<EFBFBD>L<EFBFBD><00>5<EFBFBD>M<EFBFBD><00>SD<53>w<EFBFBD>߯Ŀr<C4BF><72>U5|<7C><>.<2E><>SݹkĚ<6B>ޙ<EFBFBD><DE99>o<EFBFBD>o<EFBFBD><1C>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>ӇO<D387><4F><EFBFBD>Q+
@<40>5*@<40><><EFBFBD> <0C><>PP%E<>6<EFBFBD>q<EFBFBD>֬<EFBFBD>Fv]%T<>f<EFBFBD><66>"<22>ǜ<EFBFBD>Ǖ1<C795><31><EFBFBD>(<28><>s-Ǔ<><C793><08><>ç<><18>S<EFBFBD>Lz"i<>m?<3F><><EFBFBD><EFBFBD>Y<EFBFBD><59><02><>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD> l<><6C><EFBFBD><EFBFBD><EFBFBD><6F><DD9A><EFBFBD><EFBFBD>O<EFBFBD>4G<34>M1<4D>#⇀<><E28780><EFBFBD><EFBFBD>z<EFBFBD>믨.<2E><>]<5D><13><><EFBFBD><EFBFBD><EFBFBD>_<1E>i<EFBFBD>fb&m<><6D>6C<36><0E><17>{<7B><><EFBFBD>u]ɪ?<3F><><EFBFBD>-<2D>݈<EFBFBD>o_z;<3B>~<7E><>X<>j`<60><>F<EFBFBD><46>(<28>h<EFBFBD>f<EFBFBD><66><EFBFBD><EFBFBD>~S<1F><>QMWun&)<29><>ޖ<EFBFBD><1D>g*<2A><>s&m\<5C><>Uۢ-<2D><><EFBFBD><EFBFBD>f<EFBFBD><66><EFBFBD>5<<3C><><EFBFBD>Os<4F>
<EFBFBD>-˕z<CB95>&<26><16>7<EFBFBD>-w<><77><>|<7C> S<>x<EFBFBD><78>Y-3,.ٻk<D9BB><6B>&#<23><>|<7C>6<EFBFBD>}<7D><>2.b<>z<EFBFBD><7A>Ʀ7<1D><><EFBFBD>Ln=<13>ǢYqV<71>r2<72>cd<63><64>qv<71><76>Ģ"<22><>s<EFBFBD>)<29><>ʙj<CA99><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>^Z<><5A><EFBFBD><EFBFBD>я<EFBFBD><D18F><EFBFBD>VUUE<55><45><EFBFBD>f"<22><><EFBFBD>?<3F>y<EFBFBD><79>k<EFBFBD><6B>z<EFBFBD><<18>}Yt<59>ϊb<CF8A>+<2B><><EFBFBD>^<1D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߝ<EFBFBD><DF9D><EFBFBD>^<5E><><1D><>b<EFBFBD><66><1F>W<12><08><>q~<7E><><EFBFBD>ȳ~f<><66><EFBFBD><EFBFBD><EFBFBD>&<26>E<EFBFBD><45>O{{<7B><1A><>s<><0E>I<EFBFBD>-L<><4C><1D>^<16>G-<2D><>FFe<46>ǟi<C79F><69>Eu\<5C>Q<13>{<7B><>?vz{<7B>{v&G#s<12>uɦ-MV<4D><56><EFBFBD>vf<76><66><EFBFBD><EFBFBD>;<3B>:<3A><>L<EFBFBD><4C>eŋl<C58B>6<EFBFBD><1B>49<34><39>W\c<>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>U<1A>q<1A><><EFBFBD><EFBFBD><EFBFBD><13>y<<3C><>1)<29>U<EFBFBD>,<2C><>)<29>TSr+<2B><><EFBFBD>oʪ}<7D><EFBFBD>O<EFBFBD>Fg<12><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o <11><><EFBFBD><EFBFBD><EFBFBD>3"<22>vi<76><69><EFBFBD><EFBFBD>4[<5B>UkZ<6B><5A><EFBFBD><EFBFBD>c<EFBFBD><63><EFBFBD><EFBFBD><18>f5<66><16>}W~1<>:<3A><>r,G<><>}5<><35><EFBFBD><EFBFBD>͖<EFBFBD>x<EFBFBD>L<EFBFBD><EFBFBD>k<1E><>n^<5E>Ȯŋz<C58B><7A>-<2D><EFBFBD>"7<11><>9<EFBFBD>/<2F><>M3T<33><15>:p<><70><EFBFBD><EFBFBD>qm<71>\<5C>f<66><1F>S3<53><33>j<EFBFBD><<3C>=u筼rq<72>Xϋ3z<33><7A>U4<55>7b<37>Y<EFBFBD>z<EFBFBD><7A>w<EFBFBD><77>F<EFBFBD>;s<>TE<54>/m<>]<5D><><EFBFBD><EFBFBD><EFBFBD>Ś<EFBFBD> <0B>LW<1D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*<2A><>1<EFBFBD>[|<7C><1F><><17>K<EFBFBD>z<EFBFBD><00>{<7B><><EFBFBD>X<EFBFBD>}z뻪<7A><EBBBAA>{Y<>=iU5<55>Ui<55>?<3F> <0A><><EFBFBD>1<EFBFBD><>J;<3B><>QM<51>1<EFBFBD><31>S>S>t<>]zc<7A>}<<3C><>R<EFBFBD><52><11><>1<EFBFBD>WZ2<5A><32><EFBFBD>ǻ5G<35><47><EFBFBD>Wv3<7F>v:<3A>c<EFBFBD>LW?1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#B<00> @(   <00> *
<02><00>* <00><08><><00><>"<22>*B<>*$<24><>L<>TUL<55>Lu<4C><75>@y<><79><EFBFBD><EFBFBD>޵LQ<4C>G<EFBFBD><11>4N<34><4E>۱<EFBFBD><DBB1>zm_<6D>#<23><>GmƦ-vr<76><72>}<7D>a<EFBFBD><61>G͏<47><CD8F>A<EFBFBD><41>Y6><3E><>&<26><><EFBFBD>a<><61><EFBFBD><EFBFBD>{<7B>G͏<47><CD8F><EFBFBD><0F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<1A>c$><3E><><EFBFBD>?z<><7A>c<EFBFBD>=<3D>a<EFBFBD><61>G͏<47><CD8F>A<EFBFBD><41>L<EFBFBD><4C>_d^<5E><><EFBFBD>c<EFBFBD>=<3D>a{<7B>G͏<47><CD8F>A<EFBFBD><41>2C<32>}<7D>a{<7B>G͏<47><CD8F>A<EFBFBD><41>Y6><3E><>5<><35>H}/<2F> /z<><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>#<23><><EFBFBD><EFBFBD><EFBFBD><06><18><0F><>A<EFBFBD><41>Y6><3E><><17>d|<7C><><EFBFBD>4h<34><68><EFBFBD>!<21><><EFBFBD>0<EFBFBD><30>#<23><><EFBFBD>{ <20><><EFBFBD><EFBFBD><EFBFBD>[洺<><E6B4BA>~*<2A><><EFBFBD>{ <20><><EFBFBD><EFBFBD><EFBFBD>Z<> <20><><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>5ئH}/<2F> ?z<><7A><EFBFBD><EFBFBD><EFBFBD>8\<5C>9nR<6E><1F>b<EFBFBD>WoUݍ<55><1A>=3=|<7C>:<3A>;O<><4F><EFBFBD>v<EFBFBD><0F><>fn<66><6E>޻<EFBFBD>]6<>"<22><>ȳD<C8B3>o<EFBFBD>v,<2C><>==<3D><><EFBFBD>&54<35><34>jo<6A>l<EFBFBD>T<EFBFBD>6=<3D><><EFBFBD>8<EFBFBD>R<EFBFBD><1F>b<EFBFBD>7l<37>ݝS<1A>=|<7C>:<3A><><EFBFBD>a{<7B>G͏<47><CD8F><EFBFBD>E<EFBFBD>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>w<1A><>FE<17><>z<EFBFBD><7A><EFBFBD>N<EFBFBD>~X<><58>|<7C><><EFBFBD><EFBFBD><EFBFBD><1A>p<EFBFBD><70>7<EFBFBD>6)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>#<23><><EFBFBD>{ <20><><EFBFBD><EFBFBD><EFBFBD>[<5B><>i<EFBFBD><69>b<EFBFBD><62>K<><4B> <0B><>>l}g<> /z<><7A><EFBFBD><EFBFBD><EFBFBD>kF<6B>v*d<><64><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Y<><59> ޲>l}o<>ѣ]<5D>d<EFBFBD><64><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Y<><59> <0B><>>l}o<>ѣ]<5D>d<EFBFBD><64>{ <20><><EFBFBD><EFBFBD><EFBFBD>Y<><59> ޲>l}o<>ѥ<EFBFBD><D1A5><EFBFBD>!<21><><EFBFBD>0<EFBFBD><30>#<23><><EFBFBD>{ <20><><EFBFBD><EFBFBD><EFBFBD>[<5B>t<EFBFBD><06><14><0F><>A<EFBFBD><41>Y6><3E><><17>d|<7C><><EFBFBD>5<EFBFBD><35>Jk<4A>L<EFBFBD><4C>__<5F><5F><EFBFBD>#<23><><EFBFBD>z<EFBFBD><00><>W<EFBFBD>l}o<><6F><EFBFBD><EFBFBD>c!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G͏<47>}<><7F><EFBFBD><EFBFBD>6><3E><>+<2B><>2C<32>'<27><><EFBFBD>Z<EFBFBD>?<3F>><3E><>g9z<39>3F=O<><4F>;<3B><>r51<35><31><EFBFBD><EFBFBD>1j<31>]b<>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2B2<42><32><EFBFBD>#s<><73>TS<13><>T#s:<3A>&<26>'ST@<40><><EFBFBD>D(<04><><EFBFBD>@QDX<44><58><EFBFBD>y<EFBFBD><13><>
"<22><4C><00><><EFBFBD>OI'<27>zZ<7A><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_/{"<22>w2u<32>N<EFBFBD><4E>\EZ<45><5A><EFBFBD><EFBFBD>p(<28>g<06><39>.<2E>_<><5F>Ʈ<EFBFBD><C6AE><EFBFBD>bgsES>]ff'<27>&g~{<7B>fQ4<51>m<><6D>Rx<52>_[<5B><><>~<7E><><EFBFBD><03><>7<37>Mk<4D>u<EFBFBD><75>N<EFBFBD>+z<><7A>7j<37>z<EFBFBD>v<EFBFBD>S<EFBFBD><53><EFBFBD>N<EFBFBD>?,K|Ӌ<><D38B>wskť<6B><C5A5>*<2A>:~n&-4\<5C>*<2A>˵36<33><36><EFBFBD>N<EFBFBD><1D>u;<3B><>4<EFBFBD><34><EFBFBD><15>xY<78><59><EFBFBD><EFBFBD><EFBFBD><J<>W<EFBFBD><57>~<7E>UQU<14>w<EFBFBD><77>DUL<55><4C>tU<74>?<3F><><15><><EFBFBD><EFBFBD>v<EFBFBD><76> <0B><>c<EFBFBD><>N<EFBFBD><4E>4LU:<3A>i<EFBFBD><69><EFBFBD>sV73<37>n<EFBFBD>j鵼= <20>=<3D><>ڿ<EFBFBD>]<5D>6<EFBFBD>[<5B><>ޮ\<5C><>ը<EFBFBD><D5A8><EFBFBD>|<7C><><EFBFBD>[<5B>γ<EFBFBD>v<EFBFBD>Wh<57>\W4S_vg]|<7C>:<3A><13>u>c<19>6oΝ<>J<EFBFBD><4A>,<2C>i<EFBFBD><69>T<EFBFBD><34>ȉ<EFBFBD>TS31L<31>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汪ǹF>&UnX<6E>3Uܪk<DCAA><6B><EFBFBD><EFBFBD>(<28>'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49><1F>,<2C><14><><EFBFBD><EFBFBD>-W.<2E>u<75>3<1B><>9<EFBFBD>1<EFBFBD>mbE<62><45><EFBFBD>j<EFBFBD>Ʈ<EFBFBD>LE7(<28>[<5B>#<23><><EFBFBD>:<3A>}=<1C><><EFBFBD><EFBFBD>G<EFBFBD><47><15>D<EFBFBD><44>+<2B>n<EFBFBD>Z9<<1A> ܛ<>Y]ܙ<>4<EFBFBD>ʊj<CA8A>{<7B>T<EFBFBD>n<EFBFBD><6E><EFBFBD>G<EFBFBD>v<>x<EFBFBD>yw.Q<><51><16><>6<EFBFBD><36><EFBFBD><EFBFBD><EFBFBD>z|ꚻ<><EA9ABB><EFBFBD> ;<3B><><EFBFBD><EFBFBD>7mQ5<51>F<><46><EFBFBD>Y<EFBFBD>7w<14>DLyES<45><53>GMN&<26><>(<28><>ȋ<EFBFBD><C88B>F<EFBFBD><>\Z<>V]<5D><>^<5E><>۱U7&u<><75><EFBFBD>11<1E>=3<><33><EFBFBD>Yy<59><79>X<EFBFBD><58>x<>ܪ*<2A>5<EFBFBD><35>&u<>M=#T<><54><EFBFBD>|<7C><><EFBFBD>[<5B><>]۔<>3<EFBFBD>K{Euo<75><6F>έDG<44><47><EFBFBD><EFBFBD>Q<EFBFBD>jq<6A><71><EFBFBD>V$Z<><5A>v<EFBFBD><76>w<EFBFBD>*<2A><>ET<45>v"#^q<><71><EFBFBD><EFBFBD>Z<EFBFBD>2<EFBFBD><32><EFBFBD>obW<62>~<7E><>+<2B><><EFBFBD>_<EFBFBD><5F>&"u<>{<7B>?<3F>O<EFBFBD><4F>h<EFBFBD><68><EFBFBD>G<EFBFBD>WhĪ<68><C4AA>;}<7D><>k"ŪnZʱ]<5D>53M;<3B>D<EFBFBD><44>1:<3A><>ϜO<CF9C>ZcS<63><53>G:j<>f<EFBFBD><66>u0<75> L<><4C>-`\<5C>[<5B>-S7<53><37>S1<53><31><EFBFBD><EFBFBD>y<>MD&w#<23><><18><><C4AA>c<EFBFBD>rm<72>n<EFBFBD><35><D3BD>i<EFBFBD>"<22>9<EFBFBD><39><EFBFBD>u<18>r<EFBFBD>g<EFBFBD>&Xt<58><74>V<EFBFBD>)<29><>w<EFBFBD><(<28><>m<EFBFBD><6D><EFBFBD>b<EFBFBD><62><EFBFBD><EFBFBD><EFBFBD><1A>.<2E><>9<EFBFBD><39>ͫ<EFBFBD><CDAB><EFBFBD>jͺ<6A>\<5C><>4<EFBFBD><1B><><EFBFBD>W<EFBFBD>^-y<><79>2<EFBFBD><10><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><57>><3E>տ-QW<><57>G<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD>λN-<2D>W"<22><>u5<>14<31>D<EFBFBD><44>1<><31>"f|<7C>b5<62><35><EFBFBD>U;<3B>1ꈦ(<28><><>8<EFBFBD>+<2B>ЊDnu<11>U<><55><EFBFBD>cR<63>`<08>Σ<EFBFBD><00><><EFBFBD>LjQ<00><><EFBFBD>G<EFBFBD><08><13><>(3:<3A><>,<2C><><EFBFBD>cR<63>D<><44><<3C>bbu=%"&gQ@ <09><>ԠD<><44>bbu0 <20>F<>PLLN<4C>"&gQ"<22>LN<4C><08><><EFBFBD><00>11:<3A>A@<00><><EFBFBD>E<><45><EFBFBD>@@#s<>@E<><45>%E@<00><><00><>I<EFBFBD><08>|H yy<79>)<00>=A<03><14> <09><04><01>H<04>E<01><> {<7B> ;QB<>()<29>텏^^e<>[sLWz<57>6隼<36>fu<1B>^Z{a_<61>2<>U<EFBFBD><55>k<EFBFBD>r<EFBFBD><72><EFBFBD>^S1;<3B><><EFBFBD>Qlћp<D19B><70><EFBFBD><EFBFBD>f_Ź4<C5B9>vnUn<55><6E><EFBFBD>f'S<><53><EFBFBD>6<EFBFBD>yy<79><79><EFBFBD>E1]<5D><>\<5C>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD>N]<5D> <20>4<EFBFBD>]к].<2E>F<EFBFBD>4.<2E><10>4<EFBFBD>.<2E>)<29><><04>e'b<>
<10><><EFBFBD>:<3A><>,<08>s<EFBFBD><73>PTH<><48><EFBFBD>H<02><><EFBFBD><EFBFBD><EFBFBD>J,N<>p<EFBFBD><04><><EFBFBD>@PAbf'q<>P<05><><EFBFBD><EFBFBD><EFBFBD>X<><58><EFBFBD>N<EFBFBD>Y<><59><EFBFBD><EFBFBD><EFBFBD>|l<><6C>bbbu,<06>G[<1B>˷j<CBB7>7<EFBFBD>,<2C><34>"<22><><EFBFBD><1E>3<EFBFBD>L|Q0<51><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڦ<DAA6>~?u<><0F><><>Չk<><6B><EFBFBD><EFBFBD><EFBFBD>a<EFBFBD><61><EFBFBD> <0B>7<><37>j<><6A><EFBFBD>|<01><><EFBFBD>#<23>\-<2D>ޖ<EFBFBD>u<EFBFBD><75>Q<EFBFBD><51><0E><><EFBFBD>_q<><71><EFBFBD><EFBFBD>R9<52>8<EFBFBD><38><03><><EFBFBD><00><><EFBFBD><EFBFBD>zN<7A><4E><EFBFBD><EFBFBD>9GC,;<3B><>a<EFBFBD><61>x7<37>d}<7D><><EFBFBD><17>o<>2><3E><><EFBFBD>IޓW_<57>(<28><>]<5D>]<5D><><00>~~Gڞ<47><DA9E>|<01><><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>ҽ<EFBFBD>5u<35>r<EFBFBD><72>Ws<57>|/<2F><38><DF9F><EFBFBD>sQ;<3B><07><><EFBFBD><00>#<23>\><3E><><EFBFBD>W_<08> <0C><><EFBFBD>s;<3B><07><><EFBFBD>yjz<6A><7A><EFBFBD><1B><>><3E><>ܛ<EFBFBD>W_<08> <0C><><EFBFBD>s<><73><EFBFBD><EFBFBD><EFBFBD><00>2><3E><><1C>U<13><><EFBFBD>W<><57>/<2F>7<7F><37><EFBFBD>ɹ'<27>U<9GD<47>"]<5D>\<5C>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD>:<3A><EFBFBD><EF9EAB>V><3E><><EFBFBD>W<EFBFBD><1F><><EFBFBD>W<0E><><EFBFBD>wL<77>LzbY]<5D>v<EFBFBD>QU<51><EFBFBD><E6A988><EFBFBD><EFBFBD><EFBFBD>9GC,<2C>ڞcgs<67><73><EFBFBD><EFBFBD>#<23>S<EFBFBD>|/<2F>x<EFBFBD><78>d}<7D><>4<EFBFBD>Wnj<6E>v<EFBFBD>+<2B><><EFBFBD>\y<>I<EFBFBD><49>w<EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9GB-.߮<>_<00><>?#<23>O]<5D><><01>~~Gڸ{<7B>r<EFBFBD><72><EFBFBD>G(<28><>]<5D><><EFBFBD>:wx.:<3A><><EFBFBD>ߟ<EFBFBD>q<EFBFBD><71><EFBFBD>eܵU<DCB5>>-<2D><>UQ<55>DQޏr<DE8F><72><EFBFBD>G<EFBFBD>3.V<>f{V$Ţm<C5A2>h<EFBFBD>\<5C>ʺ橙<CABA><E6A999><EFBFBD>B=<3D><>
D<EFBFBD>N<EFBFBD><EFBFBD>Y<><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00> 1;<3B><><EFBFBD>,<2C><><EFBFBD>z<EFBFBD>D<>LLN<4C><05><><EFBFBD><EFBFBD><EFBFBD>P&bbc<62><63><EFBFBD><EFBFBD>33<33><33>@@<00><><EFBFBD><EFBFBD><EFBFBD>`<00><><EFBFBD><EFBFBD><EFBFBD>@<08><><EFBFBD>N<EFBFBD><00><><EFBFBD>ϚD<>N<EFBFBD><4E>&w;<3B>"u;<3B>ffw3<77>'S<>ffw>hD<>wOY<4F><59>@P<><50><EFBFBD>&w;<3B>@#<23><> <09><>PE@<08>N<EFBFBD>@Y<><59><EFBFBD>#<23>T'Ϩ<01><><EFBFBD><13>@<05><00>  3 <0C>b.<2E><00>i@MPQDQPb<50>6<>_׌/Tx~<0F>-<2D><>&<26><><EFBFBD><EFBFBD>o{<7B><>5^<5E>X<EFBFBD><58><EFBFBD>Yŷ4<C5B7>w<EFBFBD>Sn<53><6E><EFBFBD>&gQ<67><51><EFBFBD>E<><45><EFBFBD>9<EFBFBD>׌<>S<EFBFBD>~<0F>.x~<1E><><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><5A>5<1E><><EFBFBD><EFBFBD><EFBFBD>^Ź4<C5B9>vnUn<55><6E><EFBFBD>f'S<><53><EFBFBD>b^j<>Œ71UTF<>ѥWF<57>ѠK<>E4hth!EQ!<21>(*<02><> J<>
"<22>
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00
feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
<EFBFBD>(<02>
m<>4<EFBFBD><34>b<04><>V<EFBFBD><17><>MU<4D>c\<5C><>3<EFBFBD><33>kTS<54>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>O<01>;<3B>W<EFBFBD><57>t<EFBFBD><74><EFBFBD><EFBFBD><1F><><EFBFBD><EFBFBD>͋T^)<29>I<EFBFBD>mI<6D>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><1B><><1F><><EFBFBD><EFBFBD>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><>&7<>yI<79>MI<4D>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><1B><><1F><><63><D9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3I<33><49><EFBFBD>Rf<52>Rj]<5D>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><>cy'<27><><EFBFBD><EFBFBD>Ԛ<EFBFBD>k<EFBFBD><6B>o<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><00><>?<3F><><EFBFBD>o<EFBFBD>,<>4<EFBFBD><34>I<EFBFBD>&hqu&<26><><EFBFBD>?<3F><><EFBFBD>o<EFBFBD>,<>=<3D><>{<7B><1B><><1F><>&7<>yI<79>]I<>v<EFBFBD><76><EFBFBD>{<7B><1B><><1F><>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3I<33><49><EFBFBD>Rf<52>Rj]<5D>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD>?<3F><><EFBFBD>o<EFBFBD>,<>]&7<>yI<79>MH<4D><48><1F><><EFBFBD>7<EFBFBD><37>?<3F><><EFBFBD><EFBFBD><EFBFBD>~<7E>Yc<59><19><><EFBFBD><EFBFBD>)3C<33><43><EFBFBD>ۖj<DB96>[<5B>i<EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>Qnn[Nj<><C78B>n}Or<4F><72><EFBFBD>v{<7B>:s*<2A>c<EFBFBD>ʼ<1A><><EFBFBD><E8B1B2>vn<76>MS:<3A>ݍm<DD8D><18>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>f{<7B>/<2F>Zz6L<36>6;7&<26>SWr<57><72><1A><>7 ~<7E>U<EFBFBD>M<EFBFBD>^N<><4E><EFBFBD> y<><79><EFBFBD><1E><><EFBFBD><EFBFBD>E<EFBFBD>)<29><><EFBFBD>o<EFBFBD>N<EFBFBD><4E>^Ș<><C898>
<EFBFBD><02> <00><00><08> <20>(  "<22>   , "<22><68>C <18><>b)<29>AtiDF<>ѥ<00><><EFBFBD>F<><1E>Y<15>fYʷ<14>vnSr<53><72><EFBFBD>f'q<><71><EFBFBD><EFBFBD><EFBFBD> }x<><78>G<EFBFBD><47><EFBFBD><EFBFBD>߉<EFBFBD>k<EFBFBD><6B><EFBFBD>F<EFBFBD><46><EFBFBD><EFBFBD>xw<78><77><EFBFBD>b^9<><15>f^ʹ<14>w<EFBFBD>Ur<55><72><EFBFBD>&gs<67><73>o<EFBFBD><6F>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}Qs<51><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD>Mi<4D><69>Z<EFBFBD>M<><4D><00><><EFBFBD>
<EFBFBD><EFBFBD>@*,D<>@<06>'<27><02><>u<>B<EFBFBD><42><EFBFBD><EFBFBD>$C@<06>#~J"<22>u<EFBFBD><75>4<00><><EFBFBD>@<40>OIԀ<00><><EFBFBD><EFBFBD>=<02><>'S<>#s:<3A>cS<63>DP<00><><EFBFBD>B<EFBFBD>OIԊ
<EFBFBD>(3<><33>&5:<3A><><04><02><1B><><EFBFBD>~5<><38>G<EFBFBD>L<EFBFBD>4ٳ;<3B><>1<EFBFBD>31<33>Lt<4C><74><EFBFBD>=3<1C>Q<EFBFBD><51><EFBFBD><EFBFBD><EFBFBD><0F><>*c<><63>SN=1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F>z<EFBFBD>)<29><>k<EFBFBD><0F><>x5r<35><72>2<EFBFBD><32><EFBFBD>vk<76>#<23>E>T<><1E>4<EFBFBD>H<EFBFBD><48>$<24>'R<>z<EFBFBD><7A>z<EFBFBD>믨.<2E><>]<5D>q<><71><EFBFBD>{<7B>ǧJh<4A>ř<EFBFBD><C599><EFBFBD>o<EFBFBD>M<EFBFBD><EFBFBD><E683A1>f<EFBFBD><66>&<26>Mtd^߁n<DF81>]<5D><>_<EFBFBD>V㻹<56><1A><><EFBFBD><EFBFBD>QUsjI<6A>9<EFBFBD><39><EFBFBD>p=q˪<71><CBAA>1<>m<EFBFBD><7A><C7B1>:<3A>H<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29>|<7C>6il<>1<EFBFBD><31>v<EFBFBD>E<EFBFBD><45>U<EFBFBD><55><EFBFBD>~q<>i<EFBFBD><69>~-<2D><>j<EFBFBD><6A><EFBFBD>٣]<5D><><EFBFBD>c~<7E><>4<EFBFBD>N_<11><><EFBFBD><EFBFBD><EFBFBD>h<EFBFBD>UXܕwn<77>1Ex<45>DU><3E>3<EFBFBD><33>~^<5E><>t<EFBFBD>=<3D>q<EFBFBD>Q<EFBFBD>D<EFBFBD><44>ȯ"<22><1F>^4SF<53>{<7B><>W3<57><33><EFBFBD><EFBFBD><EFBFBD>:<3A><15><>nq<6E><71>P<>c<EFBFBD><63><15> 73<37>h<EFBFBD>*<2A><><EFBFBD><EFBFBD>-5E1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=UQ<1D><>&j<><6A><EFBFBD><EFBFBD>L<EFBFBD>fkª<6B><C2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD><06><17><><EFBFBD>v<EFBFBD>y<17>w(<28><><EFBFBD>v"<22><><EFBFBD>31;<3B><>y5<79>ʼnȊo\<5C>E<EFBFBD><45><EFBFBD><EFBFBD>qUQ<1F><><EFBFBD>~<7E><>6<EFBFBD><36>]<5D>:<3A><><EFBFBD>><3E>Z<EFBFBD><5A><EFBFBD>dM<64><4D><EFBFBD>+<2B>^4D<34>3<EFBFBD>S<15><><EFBFBD><EFBFBD> r8<72><38><EFBFBD>o<EFBFBD>޽4<DEBD>E<EFBFBD><45>n<EFBFBD>Q<EFBFBD><51>:<3A>m<EFBFBD><6D>t<EFBFBD>t<EFBFBD><74><EFBFBD><EFBFBD>۳u<DBB3>c<EFBFBD>3C<33>7<EFBFBD>1x<31>8<EFBFBD>Y6<59>2<EFBFBD><32>rf<72><0E>ji<6A>&5<><6D>^<5E>:<3A>O{8Mxqz<71>S&<26><><EFBFBD>5Da<44><61><15><4C><CEB7><EFBFBD>jcz#<02><>l<EFBFBD><6C>:<3A><>ʦ<EFBFBD><CAA6><EFBFBD>*<2A>f&:<3A><><EFBFBD>M<EFBFBD><4D>9j<39><1C><>ՕO<D595>y<13>r}<14>><3E><>*<2A><>>}:ӣ;<3B><><EFBFBD><EFBFBD><14>4<EFBFBD><34><EFBFBD>Y<EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD>+<2B>i<EFBFBD><69><EFBFBD><EFBFBD>Ʀ%<25><>v<EFBFBD><76><EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S3<53><33>Y<EFBFBD>y<EFBFBD><79><EFBFBD>\ұ7<D2B1>b&gQ<67>\<5C>h<EFBFBD><68>'tU4<55><34>:ef<65><74><D7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD>Bb<42>[<5B>c<EFBFBD>٪<EFBFBD>O<EFBFBD>U_<><5F>V<EFBFBD>SDWUE3<45>:<3A>,<1E>roY<6F>Qrb<72><62><EFBFBD><EFBFBD><EFBFBD>Y<><59>ly#;^<1C><><EFBFBD><EFBFBD><14><><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>f<EFBFBD><0E>7b<37>-D<><44>x.<2E><>g<EFBFBD><67><13><><EFBFBD>U<08><><EFBFBD>F<EFBFBD><00><><EFBFBD>Lj@DX<44><58><EFBFBD>F<EFBFBD>bbu1<75>B<EFBFBD><11><>G<EFBFBD>11:<3A><><EFBFBD>3<><33><EFBFBD><04><><EFBFBD>cR<00><1B>@;<3B>Ԉ<00>Dnu<04><><EFBFBD>@"fu@ <09><><EFBFBD><EFBFBD><EFBFBD>"<22>F<>u;<3B><><EFBFBD><EFBFBD>*<02>&5:<3A>PX<>:<3A>@<40><><EFBFBD>@@<40><>@<08><>u(<00>GY<47><13><><00>0z"<22>R<00><><00><> *<04><00> <0B> <20>+<2B> <1E><><EFBFBD><18><EFBFBD><E698AE>m<EFBFBD>5yD<79><44>F<EFBFBD>/\,<2C><>3,<2C>[<5B>f<EFBFBD>7)<29>LU<4C>3<13><><EFBFBD><EFBFBD><16><19> <0B><>^&e<>[<5B>L<EFBFBD>f<EFBFBD>V<EFBFBD><56>|<7C>bu:yG<79><4C><DC8A>/e\<5C>b<EFBFBD><62>*<2A>TS<54>3<><33>Ȫ٧.<2E>(<28> <0C>&<26><>Ǻ<EFBFBD>^}dc<64><63>2<18>)'p<>2<EFBFBD><32><EFBFBD><18>2f<>U<EFBFBD><55><EFBFBD><EFBFBD>̓)<29>;<3B>6lEX<>N<EFBFBD>gs<67><73>P &bw<08>;<3B><>*<00>N<EFBFBD>pL<>w )1;<3B>ffgr<02>,L<><4C>:J
,<2C><><EFBFBD>|<7C>I<>zZ<7A>s<EFBFBD>3s<17>(<28>Q<EFBFBD><51><EFBFBD>5<EFBFBD>WW<>޿3<DEBF>D<EFBFBD>]<5D>+<2B>gb[<5B><>r(<28>kq<6B>]sL<><4C><EFBFBD><EFBFBD>TϗY<CF97><59><EFBFBD><EFBFBD><EFBFBD>ߞ<EFBFBD>ׁTM3G<33><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD><EFBFBD>+[<5B>=O<><4F><EFBFBD><EFBFBD>5<EFBFBD><35>מ<EFBFBD>;|<7C><>W,ݪ<><DDAA>u۹O<DBB9>5S<35><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8ݟ7w6<77>ZY<5A>b<EFBFBD><EFBFBD>fŊ;<3B><><><C9B3>.S{<7B>M;<3B>*{<7B>3<EFBFBD><33><EFBFBD>p<>EuQ7<51>f.<2E><><EFBFBD>bٻr<D9BB><72>?USU<53><55><EFBFBD><EFBFBD>h<><68>>Un<<3C><>zS<06>5<EFBFBD><35>9X<39>߷1<DFB7>iwî<77><C3AE>bu1<75><31><EFBFBD><00>k<EFBFBD>W1oOH<4F><48>͞G&2<>|Jh<4A>(<28>i<EFBFBD><69>f<EFBFBD><66><EFBFBD>4ƣs鞟<><E48795>ٽE<D9BD>s<EFBFBD><73><EFBFBD>*<2A><><EFBFBD><EFBFBD>Rk<52><6B>4<EFBFBD>,<2C>̿<EFBFBD>\<5C>1<EFBFBD><31>v<EFBFBD>ڦ&<26><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><14>v5<76>殟+g<><67><EFBFBD>#<23><><EFBFBD><EFBFBD>9<EFBFBD>mZ<6D>)<29><>Y}<7D>Uk<55><6B><EFBFBD>Ljw<6A>˒:w<><77><EFBFBD><EFBFBD><EFBFBD>d<16>K<13><><12><><18><>M<EFBFBD><4D><EFBFBD>E3>ڞ<><DA9E><EFBFBD>fg<66>Ý<13><>y<EFBFBD><79>X<EFBFBD>U<13>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD>]<5D>^^=<3D><><EFBFBD>*<2A>"<22><><EFBFBD><EFBFBD><EFBFBD>LN<4C>M[<5B>/<2F><><EFBFBD>eY<65>0<EFBFBD><30>Ƣ<EFBFBD><C6A2>Tx<54><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><0F><>,b՗/<2F><>uk<75>0=y<><79>o &<26>t<EFBFBD>߮<EFBFBD>Y4<59><34>W<EFBFBD>Uw#Q<><51><EFBFBD>7<EFBFBD>7x븳g&<26>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>S<><53><EFBFBD>w#}*<2A><><EFBFBD><EFBFBD><EFBFBD> <0A>+۷<DBB7>x<EFBFBD>Xt22<32><32><EFBFBD><EFBFBD><58><D6B0><EFBFBD>nf<6E><12><>j<EFBFBD>fu<66><6B>t<EFBFBD><74><EFBFBD>KYXT<58>U<EFBFBD>N.D<>U\Wc""<22><><EFBFBD>G<EFBFBD><47>o<EFBFBD> <09>3<EFBFBD>U{<7B>[t-<2D>ffw=dF<64><46>Tb[<5B>76<37>k<EFBFBD>f<EFBFBD>^w<><77>3<1F><>ϧ<EFBFBD>=3<19><><EFBFBD>L<EFBFBD><4C><1C>a<>ƻ<EFBFBD>1(<28><>{<7B><4C><DC98><EFBFBD><EFBFBD><EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD>~<7E>FE<46><45><EFBFBD><EFBFBD><EFBFBD>ܪk<DCAA><6B><EFBFBD><EFBFBD>fw2ׇ z<><7A><EFBFBD>cr<63>Z<14><><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>@<08><><EFBFBD>t<EFBFBD>ż<><C5BC><EFBFBD><16>SE<53>=<3D><><EFBFBD><EFBFBD>K<EFBFBD><4B>4<EFBFBD>r)<29><><EFBFBD><13><>(y<>d<EFBFBD><11><><1E>1L<>U3<55>U5n%<25><>{W<>En<><6E>k<EFBFBD><6B><00>:U<><55>Mɶ#<23>ĉ<EFBFBD><C489><EFBFBD>I<EFBFBD>TQ<54>]<5D>Q<EFBFBD><51><EFBFBD><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD>gWm<57>O<EFBFBD>>E<><45>{0<><30><EFBFBD><EFBFBD><EFBFBD>@.<2E> p"f'q:<3A>ffw3<77>X<><58><EFBFBD>OTffgs<67><73>3<13><>(<02><><EFBFBD><EFBFBD><EFBFBD><08><><EFBFBD>33<33><33>@'S<>&w;<3B>@T<08><><EFBFBD>33<33><33>&bw<13><00><><EFBFBD>@P<><50><EFBFBD>I<><49><EFBFBD><EFBFBD>P'S<> <09><><EFBFBD>T<00><><EFBFBD><05><><EFBFBD>P@<00><>X'<27><>A<00><><03><>@#<23><><00>G<EFBFBD><47><EFBFBD> 0<> <20>@PA<><41>x><3E>az<61><7A><EFBFBD>}Qo<51><6F>5<EFBFBD><35><EFBFBD><EFBFBD>{<7B>Mi<4D><69>ñ^Ve<56>[sLWz<57>6隼<36>fukf*<2A>E<EFBFBD>z<EFBFBD>><0F><19><><EFBFBD><EFBFBD>T\<5C><>=w{<7B><>ֵ<EFBFBD>Zj<5A>s,W<><57>{<16><>5ٹU<D9B9><55><EFBFBD>)<29><>N<EFBFBD>F$<24><>7<EFBFBD><00>
<EFBFBD>(<00>(
<EFBFBD>(<00><02>"<22>D<EFBFBD>,J<>X<EFBFBD>!b!@DPEPTP<>TW<54>"<22><>u<EFBFBD>y<EFBFBD><79>Vi<56>v,<2C>Y<EFBFBD>5M<16><><EFBFBD>{<7B><><EFBFBD>SL=<3D><><EFBFBD>:<3A>\V<><00>~?u<><0F><>^<5E><>X<EFBFBD><16><><EFBFBD>D<EFBFBD><44>Xw}w<><77><00><>ϟ<EFBFBD><CF9F><EFBFBD><EFBFBD><EFBFBD>_q<>?#<23>\.<2E>Gz<47><7A>u<EFBFBD>r<EFBFBD><72>Xw}x<><78><03><><EFBFBD>jz<6A><7A><EFBFBD><19><>><3E><><EFBFBD><49><DEA8><EFBFBD>9GC,;<3B><>a<61><7F>g<EFBFBD>2><3E><><EFBFBD> <0B><><EFBFBD>I<7F><49><EFBFBD>zN<7A><4E><EFBFBD><EFBFBD>G(<28>e<EFBFBD>s׌/<2F>8<EFBFBD><38>d}<7D><><EFBFBD><17>o<>2><3E><><EFBFBD>IޓW_<08> <0C><>z<EFBFBD><7A><EFBFBD><1B>L<EFBFBD><4C>_^0<><00>I<7F><49><EFBFBD>z<><7A>Q<EFBFBD><51><EFBFBD>r<EFBFBD><72>Xw}x<><78><03><>&Gڞ<47>a|<01><><EFBFBD>#<23>\.<2E>Gz<47>W_<57>(<28>e<EFBFBD>w׌/<2F>8<EFBFBD><38>d}<7D><><EFBFBD><17>o<>2><3E><><EFBFBD>Tw<54>5u<35>r<EFBFBD><72>Xw}x<><78><03><>&Gڧ<47>_<><5F><1B>L<EFBFBD><4C>p<EFBFBD><70><1D>5u<35>r<EFBFBD><72>Xv<58><76><EFBFBD><EFBFBD>:<3A><><EFBFBD>1<EFBFBD>ֻ<EFBFBD>ښ<EFBFBD><DA9A>k<EFBFBD><6B>?9<>Y7<59>/W{"<22>wn<77>;<3B><><EFBFBD>~9<><39><EFBFBD><1C>Ǯ<EFBFBD><C7AE><EFBFBD><10>;<01><><00> <0C><>戢j<E688A2>i<EFBFBD><69><1B><><07><><EFBFBD>f<EFBFBD><66><EFBFBD>+<2B><>æw<C3A6>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><54>`<60>3<13><>J%<25><><EFBFBD>Uwk<77>i<EFBFBD>rcH<63><48><EFBFBD>z娷r<E5A8B7><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59>tj<74><6A>[<5B>}&i<>"^b6<62><36><EFBFBD>t<EFBFBD>k<EFBFBD>b<EFBFBD><62>S<EFBFBD><53><EFBFBD>%<25><><00> <20><00><00>
<00><00><00><> <00><>
@<40><00><><EFBFBD><00><><EFBFBD><02><>{<7B><>_"<22>F#.<2E><EFBFBD>W<EFBFBD>w+<2B>
<EFBFBD>B<EFBFBD>1w+<2B>
<EFBFBD>D<EFBFBD>W<EFBFBD>|<7C><>A{<7B><>_!ܯ<>*<2A> H<><48>+<2B>
<EFBFBD>E<EFBFBD>W<EFBFBD>|<7C><>b2<62>W<EFBFBD>|<7C>ܯ<EFBFBD>*<2A> H<><48>+<2B>
<EFBFBD>C<EFBFBD>_<EFBFBD>U<EFBFBD>dA{<7B><>_!ܯ<>*<2A><16> <20><><EFBFBD><02><><EFBFBD>W<EFBFBD>|<7C><>G<EFBFBD><1D><>s,<2C>[<5B>f<EFBFBD>7)<29>LU<4C>3<13><>Ϲ_<CFB9>U<EFBFBD>6<EFBFBD><36>(<28><>Ǣ<<1E><13>׻ލ<D7BB>}5<><EFBFBD>d<EFBFBD><64>e<EFBFBD><65><EFBFBD><EFBFBD>e\<5C>b<EFBFBD><62>*<2A>TS<54>3<><33>ɷ<EFBFBD><C9B7>O<EFBFBD><4F><EFBFBD><11><><EFBFBD><EFBFBD>}<7D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><5A>5<EFBFBD><35><EFBFBD>_!]5f<35><66>!<21><>ï<EFBFBD>*<2A><0E><EFBFBD>W<EFBFBD>ͥX<CDA5>ܯ<EFBFBD>*<2A><17>_<EFBFBD>U<EFBFBD>-<2D>b2<62>W<EFBFBD>|<7C>[<5B><33>B<EFBFBD>1U<31><55>GN<47>_!ܯ<>*<2A> O]<5D><><02><><EFBFBD>W<EFBFBD>|<7C><>A{<7B><> _!<16>L<EFBFBD><4C>_!i֚<>C<EFBFBD>_<EFBFBD><5F><EFBFBD><16><05>W<EFBFBD>5|<7C>r<EFBFBD><72><EFBFBD><EFBFBD>-" <0C><><EFBFBD>_"<22>~_"<22>F-ju1<75>4<>4,F<>QB<><42><EFBFBD><EFBFBD>a`E@73<37> <09>N<EFBFBD>PQDX<44>Π<00><><EFBFBD>Lj@Q"fu`<04><><EFBFBD>|<7C>Qb7:<3A>&&'S(3:<3A>0w<13><>Q"fud<00><><EFBFBD>O<EFBFBD>3:<3A>܀<13><><EFBFBD>D<><44>#`)11:<3A><00>,D<><44>#rLLN<4C>:<3A>(<28><00>3<><33><EFBFBD> LLN<4C><08><><EFBFBD>@1<><31><EFBFBD><EFBFBD>i<>i<EFBFBD>*<2A>f&'q1<71>z<EFBFBD>ɪ<EFBFBD><C9AA><EFBFBD><EFBFBD>UW<55><57>U<H<>:<3A><>4<EFBFBD><34>zصMؘ񨢿DU<44>'<27><><EFBFBD>EV<45><56>+<2B><><EFBFBD>ܝ<EFBFBD><DC9D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U11=<10><>Q<EFBFBD>r<EFBFBD><72><EFBFBD>Oz<4F>4<EFBFBD><34>UGO<47>س]<5D><>Gz<<3C><><EFBFBD>&!~)<29>e<EFBFBD>c<EFBFBD>[<5B>\<5C>_r<5F>3MQ<4D><51>c<1B><>y<EFBFBD><79>ޢN<DEA2>u=$ܠ<>ɰd1<64><31><EFBFBD>uh*$<24>'S<>M<EFBFBD><4D><EFBFBD>6
&<26><>ΠI<>:<3A><>*DL΢7 ƧR<C6A7><52><1B><>y<EFBFBD><04><><EFBFBD>@T6F<36>u<00><><EFBFBD>OCb<43><62><EFBFBD><EFBFBD>2<18><><EFBFBD><EFBFBD>D<><44><EFBFBD>M<EFBFBD><4D>nM<6E><4D><1D><><EFBFBD>@(<28>3<13>6
<EFBFBD>$u<>@='R<11>BO@Cf<43><66> ;ٰQ6<02>uK<75>,!<21>M<>AD<41>lM<>f<>@<04>0<01><>&<26>Z<EFBFBD><5A>.<2E>.<15>,<2C><><EFBFBD><EFBFBD> <0A><>ي{<7B><><EFBFBD><00>=:|s1<1F><>ςƣ#.ժ<>b<EFBFBD><62><EFBFBD><EFBFBD>qLu<4C><75>fdW<64><57>U<EFBFBD><55>)<29>Ji<4A>ʚc<CA9A>D|Q<1E>:i<>ÌJ<C38C><4A>;<3B>?<3F>~Bomx<6D>E==M<>w<EFBFBD>^<5E><><EFBFBD><EFBFBD>ܫ<EFBFBD><DCAB>7<11><><EFBFBD>(<28>'<5<><35><16><>г<EFBFBD><D0B3>p<EFBFBD><00>g<EFBFBD>2<EFBFBD><32><n<1F><1C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00><><EFBFBD>2<EFBFBD><32><n<1F> <0C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00>g<EFBFBD>2<EFBFBD><32><n<1F> <0C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00>g<EFBFBD>2<EFBFBD><32><n<1F><1C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00><><EFBFBD>2<EFBFBD><32><n<1F> <0C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00>g<EFBFBD>2<EFBFBD><32><n<1F> <0C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00>g<EFBFBD>2<EFBFBD><32><n<1F><1C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00><><EFBFBD>2<EFBFBD><32><n<1F> <0C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00>g<EFBFBD>2<EFBFBD><32><n<1F> <0C><00>Q<EFBFBD>Nxkq}?m= C<><43>p<EFBFBD><00>g<EFBFBD>2<EFBFBD><32>"<22><1F><00><><EFBFBD><EFBFBD>><3E><> n/<2F><><EFBFBD><EFBFBD>ht<~#<23> <0C><00>Q<EFBFBD>G<EFBFBD><47><EFBFBD>!<21><><EFBFBD>><3E><> n/<2F><><EFBFBD><EFBFBD>ht<~<1F> <0C><>Q<EFBFBD>G<EFBFBD><47><EFBFBD>!<21><><EFBFBD>><3E><> n/<2F><><EFBFBD><EFBFBD>ht<~<1F> <0C><>Q<EFBFBD>K<17><><EFBFBD><EFBFBD><EFBFBD>?<3F><>}<7D><>.<2E><17><><EFBFBD>д:>?<11><><EFBFBD>?<3F><>}<7D><><EFBFBD><1F>g}2<><32>s<EFBFBD>[<5B><><EFBFBD>i<EFBFBD>Z<1F><>C;<3B><>}<7D><><EFBFBD><1F>g}2<><32>s<EFBFBD>[<5B><><EFBFBD>i<EFBFBD>Z<1F><>C;<3B><>}<7D><><EFBFBD>#<23> <0C><>Q<EFBFBD>Npkq}?m= C<><43><EFBFBD>#<23> <0C><>Q<EFBFBD>G<EFBFBD><47>~!<21><><EFBFBD>><3E><> n/<2F><><EFBFBD><EFBFBD>ht|~#<23> <0C><>Q<EFBFBD>G<EFBFBD>8<EFBFBD><38>3<EFBFBD><33>G<EFBFBD>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<0E><>8<EFBFBD><38>3<EFBFBD><33>G<EFBFBD>{<7B><>u<EFBFBD>l<EFBFBD>_<EFBFBD><5F>E<15><><EFBFBD>?<3F><> n/<2F><>lt- ܬKw,Ց<>}3<1D><><EFBFBD><00>7<EFBFBD>bf??G2<47>f<EFBFBD><66>-<2D><<3C><><EFBFBD>)<29>DEZ<45>U5yUL<55><4C>g<EFBFBD><67><EFBFBD>˛ǧ.<2E><>&f<>*<2A><>>sL<73><4C>٦<EFBFBD><D9A6>qp<71><12><><EFBFBD><EFBFBD><EFBFBD>-"U<>hX<68>N<EFBFBD>gs<67>#<23>d)1;<3B><>,<2C><>r<00>,L<><4C><05><><EFBFBD>DPX<><58><EFBFBD> 3<>܈<02><>3<13>&w;<3B><14><><EFBFBD>ǚ<00>33<33>Q@<00><><EFBFBD><EFBFBD><EFBFBD>@ffw2<77>
1;<3B>4ffgs<67>DDH<><48><EFBFBD>y<EFBFBD> 33;<3B>1QR'S<><53><EFBFBD>fw;<3B>1QR&bwh<02><><EFBFBD><02><02>3<13><>(<02><><EFBFBD><EFBFBD><EFBFBD>H<><48><EFBFBD>ORQ<05><><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>dzw'"݋Mw.U<14>Lzf]<5D>i<EFBFBD>p&l<>ų<EFBFBD>]<5D><>w<EFBFBD>M]<5D><>b<><62><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><<3C><>𦸽<EFBFBD> 3g i<><69><EFBFBD><EFBFBD>k<EFBFBD><6B>3<EFBFBD><1F>z<EFBFBD>k<EFBFBD><6B>3<EFBFBD><1F><EFBFBD><EBA7A3>/<?UuU;<3B>fg<66><67><EFBFBD>wq<77><71>g<EFBFBD><67><EFBFBD>Ȏ<EFBFBD>E[<5B><><EFBFBD>>NǮ6<C7AE> <09>?A<><41><EFBFBD>6<EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><E9A6A3><EFBFBD>gk<67>j<EFBFBD><6A><EFBFBD>W<EFBFBD>D<EFBFBD>1<EFBFBD>z<EFBFBD>aTUE]ک<><67><DC98>#<23><><13><><EFBFBD>Ș<EFBFBD><C898><EFBFBD><EFBFBD>\<5C>b<EFBFBD><62><EFBFBD><EFBFBD>8ڦ#[<5B><1B><00>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>W|<7C>;<EFBFBD>y
<EFBFBD><EFBFBD>8<EFBFBD> u<>yN?z'<27><><EFBFBD>ͦ<EFBFBD><CDA6>8n6<6E>F<EFBFBD>X<EFBFBD><58><EFBFBD>H<EFBFBD><48><EFBFBD><EFBFBD>"<22>G<EFBFBD>습;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><g<><67><00>=q<><71>O<17><0F>]=<><7F>y|<7C>չܦ<D5B9>C덯<43>x<EFBFBD><78><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD>\m|<13><><EFBFBD><EFBFBD><EFBFBD>\m|<13><><EFBFBD><EFBFBD><EFBFBD>=<>y<EFBFBD><79><EFBFBD><EFBFBD>O]ľ<>y Z<><5A><EFBFBD>?A<><41>*<2A><><EFBFBD>5x^<5E><><EFBFBD><EFBFBD>U<EFBFBD><55><EFBFBD>u<EFBFBD><16>}<7D>⩝oݍDzb}M<13><>^K<>S33<33><16><><EFBFBD>oWf<57>Qr<51><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>b<EFBFBD>N<EFBFBD>d$)<13><> 33;<3B>"u;<3B><14><><EFBFBD>̈<00><><EFBFBD><05><><EFBFBD>:$<24>X<EFBFBD>x<EFBFBD>m<>αYW)<29><><1E><><EFBFBD>-<2D>>]<5D><><EFBFBD><EFBFBD>Su<1A><><EFBFBD><EFBFBD><EFBFBD>GL<)ĞL<>ř<EFBFBD><C599>d<EFBFBD><64>#<23><><11><>8ȏDx?<3F>W<EFBFBD>_<04>G<7F>wm=<><7F><EFBFBD><EFBFBD><EFBFBD>ۄ<EFBFBD><DB84><EFBFBD>q<EFBFBD><71>O<17><EFBFBD>O\m|<13><><1F><>=<><7F><EFBFBD><0F><><13><>K<EFBFBD>}q<><71>O<17><EFBFBD>=q<><71>O<17><EFBFBD>4<EFBFBD>y<EFBFBD>ҙ<EFBFBD><D299><EFBFBD><EFBFBD>w;<3B>6<EFBFBD>\m|<13><><1F><>\m|<13><><1F><>OG<4F><EFBFBD><ECB9A7><EFBFBD><06>C덯<43>x<EFBFBD><78><EFBFBD><00><EFBFBD>8<EFBFBD><38><EFBFBD><00><><EFBFBD><EFBFBD><EFBFBD>3z>wdO<64>%<25>^<5E><><EFBFBD>#<23><>?<3F><><EFBFBD>g<>\?1<><31>c<63>&$<24><><EFBFBD><EFBFBD>I<EFBFBD>x>zgs<67><1D><><\<5C>{<7B>8}Oz<4F>3]<5D>h<EFBFBD>j<EFBFBD>h<EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><>8ba<62><1C>X<EFBFBD><58>J<EFBFBD>X<EFBFBD>sP<73><50><EFBFBD> <09><><EFBFBD><08><> <09><> 2 t^7<1E>Js<4A><73><EFBFBD><EFBFBD><EFBFBD>3,SWvnLy<4C>3<EFBFBD><33>'<27>N<EFBFBD>11<1A><><EFBFBD><EFBFBD><EFBFBD>$<24>f<>T<EFBFBD>C<19><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD><53>m<EFBFBD>V<EFBFBD>=UL<55><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>?<3F><>OG<4F><47>)y<><79><EFBFBD><EFBFBD>><3E><><EFBFBD><1F><><07><><EFBFBD><EFBFBD><EFBFBD><1F><><07><>z<<3C>i/<<><3E><>_<03><EFBFBD><7F>s<>_q<71><7F>sMG<4D><47>%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><6B>/<2F><1F>z<EFBFBD>k<EFBFBD><6B>/<2F><1F>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<7C><>\m|<11><><EFBFBD><EFBFBD><EFBFBD>\m|<11><><EFBFBD><EFBFBD><EFBFBD>5<><7F><EFBFBD><0F>C덯<43>8<EFBFBD><38><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}q<><71>G<17><0F>=q<><71>G<17><0F>4<EFBFBD>y<EFBFBD><79>^x>x}<0F>6<EFBFBD><08><>A<><41><EFBFBD>6<EFBFBD><08><>A<>暏?<3F>K<EFBFBD><07><0F><>B<EFBFBD>]+Ḻ<><E1B8BA>DžU;<3B><><EFBFBD><13>Z<EFBFBD><5A>Xױ+<2B><><EFBFBD><EFBFBD>߅<EFBFBD>j<>w"zw<7A><77>9<EFBFBD>z<EFBFBD><7A><EFBFBD><1B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z/MW.<2E><> <20><><EFBFBD><04> "<22><>v<EFBFBD>7<EFBFBD><37>_<EFBFBD>rѭ<7F><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><7F><EFBFBD>F<><46>ۋ<EFBFBD>(<28><><EFBFBD>R7<52><37><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>5N<35><4E><EFBFBD><EFBFBD>}_d<5F><64>Ew<45>ё7o_<6F>&<26>7*<2A>h<EFBFBD>t<EFBFBD>QN<51><4E>g<EFBFBD>M_<4D><74>;6^[تm<0F>><3E>Y<EFBFBD>g<EFBFBD><67><EFBFBD>Q<EFBFBD><51>r)<29><><EFBFBD><EFBFBD><EFBFBD>LU4<55>i<EFBFBD>=;+U<>y<EFBFBD>.[<5B>E<EFBFBD><45><EFBFBD>:<3A>̧<1A><>yr<79><72>W<EFBFBD><00><>ba<62>sD<73>M<EFBFBD><4D><EFBFBD>܁<EFBFBD><DC81>y7}<7D>\<5C>G!V<>:<3A><><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD><66>O]<5D><17>fw<66><77>zf7<66><37>3vg<76>x<EFBFBD><78> <0C>2<EFBFBD><32><EFBFBD>cy<14><>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f*<2A>z7='<27>0<EFBFBD><00>s<EFBFBD><73>Z<EFBFBD>Z<EFBFBD>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n(Ȣ<>Q<EFBFBD>ϽN<CFBD><4E><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD>t{W~rq.QW/9<>-<2D>n<EFBFBD><6E>v<EFBFBD>xq4<71>b<EFBFBD><62>uw<75>g<EFBFBD>#S<>=<3D><><03><07><><5F>[)<29><>)<29><Z+<2B>-<2D>MT<4D><54>(<28>1=<3D><><EFBFBD>}<13><>|O#<23><><EFBFBD><EFBFBD>Dcr<63><66><D5A9><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD>{i<>V<EFBFBD>wV<77><56>N<EFBFBD>1a<31><61><EFBFBD>;!v<><76><17><>*<2A>zj<7A>LUU<19><><EFBFBD>DDO<44>5<EFBFBD><35><EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD>|<7C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S=<3D>k}|<7C> S<>Yucg<63>g<EFBFBD>c<>˵V=<3D><><EFBFBD><EFBFBD>v*<2A><>3<EFBFBD>D<EFBFBD>ۙ<>n<EFBFBD>swO#Os<0E><16><>91Q1<51><31><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD>w1?<3F>Ɓ<EFBFBD><C681><EFBFBD>;S]<5D><>vy\lڮ<6C>UsMuWr<57>]<5D><><EFBFBD>u:<3A><><EFBFBD>Z<EFBFBD>E^<5E>o<EFBFBD>ϴY<CFB4>u<EFBFBD><75>Sw<53><77>M<EFBFBD><4D><EFBFBD><EFBFBD>j<EFBFBD>r<EFBFBD><72><EFBFBD>S3L<33><4C><EFBFBD>Q<13><><07><0F><><EFBFBD>f<EFBFBD>qx<71>2<EFBFBD>[7m<37>b<EFBFBD>[s<>n<EFBFBD>QT<51>:<3A>(<28><>b{<7B><1E><>נ<EFBFBD>y^<5E>f<EFBFBD>)<29><>E<EFBFBD>6ꦚ,N]<14>Ѫ<EFBFBD><D1AA><EFBFBD>3<EFBFBD><33>ޏD<DE8F><44>t<0F><01><><EFBFBD><1D><>k<EFBFBD>v-k<>\F<>s<EFBFBD>LG<4C>gS<67>L<EFBFBD><1B>w<02><>]<5D><><EFBFBD>M<EFBFBD><4D>&<26><><EFBFBD>L~<7E>8<EFBFBD>x/k<>k<EFBFBD>>'<27><>;<3B><><EFBFBD>O<EFBFBD>x<>S<EFBFBD>s'*i<><69>1jlSv<53><H<><48><EFBFBD><EFBFBD>QTLDoq=z<><7A><EFBFBD>XSM;"<22>y<EFBFBD><79><EFBFBD><EFBFBD>^<5E>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD> <0B><><EFBFBD>C<EFBFBD>_a|<7C><>h<EFBFBD>p<EFBFBD>ָ<EFBFBD>\<5C>Lnz<6E><W<>Lڹ><3E><><EFBFBD>;<3B>"<22>z<EFBFBD>X<EFBFBD>U<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD>y x|^]<5D>\,<2C>{<7B>U<EFBFBD><55><EFBFBD>r<EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD>J<EFBFBD><4A>*<2A><><1A><>G<>ުv<DEAA><76><00>F<EFBFBD>uf<75><66><EFBFBD><EFBFBD> <0B>l/<2F>{<7B>Ta| <0A><><EFBFBD>}<7D>FU<46>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>ܘ<EFBFBD><DC98><EFBFBD><E6AB9D><EFBFBD>_w<5F>:yW<79><57><EFBFBD>Zǎb2.<2E><><EFBFBD>/<2F>\Sg<53><67><EFBFBD>;<3B><><EFBFBD>f<EFBFBD><66>|<7C>>n4U<34>&oNȿ<4E><C8BF><EFBFBD>lG<6C><47>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD> <0B><><EFBFBD>Bo<42>N<EFBFBD>x<EFBFBD>Jc<4A>ݹw<77><7F>t<EFBFBD><74><EFBFBD>Y|n<1D>U<EFBFBD>~<7E>1M4SDގ<44>1LD<4C>T<EFBFBD>3LU<4C>><3E><><EFBFBD><EFBFBD> ڌ<>l<EFBFBD>X<EFBFBD><58>ޢl<DEA2><6C>[<5B>Ew<77><7F>Q<EFBFBD><51>+<2B><>W<EFBFBD>'<27><>\E1T<31><54><00>;o<><6F>&\L<>K5X<35>+<0F>Q<><16>S<EFBFBD><53>}"b}4<><34>Ÿ<EFBFBD><C5B8>m_<><5F>N]U7N5<4E><35><EFBFBD>ݍS<DD8D><00>M.C<><43><EFBFBD><16><><EFBFBD>_<EFBFBD><5F><00>7n<06>h<><68><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD>44<1B><><EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"<22>@@<40><>(<28>((<28><>"<22><02><02><><00><00>
(<28><05><02>p<00>\A<04>4<EFBFBD>IW<><57>9Z<39><5A>w<EFBFBD><77><EFBFBD>UN<55>k԰g<D4B0>O<EFBFBD>;<3B><><EFBFBD>ѩ<7F>݇<EFBFBD>i<EFBFBD><69><EFBFBD>ψ<0F>><3E><1C>mn}<7D>r<EFBFBD>C<EFBFBD><43>s<EFBFBD><73>]<5D><><EFBFBD><e<><65>ͪm<CDAA><6D>bb<62><62>qf)<29>G]S="<18><>+<2B>1<EFBFBD>?`ov<6F>#<23>gs[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6AAAF><EFBFBD>W{6<>&)<29>3\<5C><>ٚ<EFBFBD><D99A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>F_'w<><77><EFBFBD>p=<3D>˿<<3C>^6<15>X|%ڢ/^<5E><>^<5E><>i<EFBFBD>>۬݉<DBAC>|陈<><E99988><EFBFBD><EFBFBD>C<EFBFBD>C<EFBFBD><43><EFBFBD>~W<><57><EFBFBD><EFBFBD>}<7D>W<EFBFBD><57><EFBFBD>p;5M<35>R,^<5E>~<7E>=s<><54><DCA6><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD>1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wjs<6A>x^<5E>r<EFBFBD><72>幌kX<6B>p<EFBFBD>s\<5C><><EFBFBD>]y4ܪk<DCAA>Ȧf<C8A6><66><EFBFBD>~<7E>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>R+<2B><>~R<>UUw<><77>i<EFBFBD>v'Kc<4B><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <0B><1D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>~<7E><>u[<1E><><EFBFBD>V]<5D><><EFBFBD><EFBFBD><18>Z<EFBFBD>;q<>F<14><14>*<2A><:nUwunb<6E>S3gk2Y<32>}<7D><>.<2E>Mʻ<4D><11><><EFBFBD>M<18><><1A>U<EFBFBD><55>:<3A>q<EFBFBD>g<EFBFBD><67>~<7E><><EFBFBD>u<0E>}<7D>x.<1B><17>s9ڭۋ<DAAD>dՋF,۳<><DBB3>V<EFBFBD>b,S_z<5F><7A>M11T<31>V<EFBFBD><56>+k<EE8987>8<EFBFBD><38><EFBFBD><EFBFBD>N%<25>32<33>O<17><>si<73>E=<3D><>OQ<><51>m3<6D>c3O<33>l~7M5U:<3A>&}=!<1F><EFBFBD>~<7E>ڋ6<DA8B>i{#<23><><EFBFBD>%M1<><31><EFBFBD><EFBFBD>/^<5E><>]<5D>UQ<55>nb&|N<><EFBFBD>*<2A>{<7B>ާ}<7D><><EFBFBD><06><00>#<1F><><EFBFBD>fs<66>'/<2F><>=<3D>ȿ<17><>Wr1<72><31><EFBFBD>Z<EFBFBD>E<1B><>뻪㽹<EBBBAA>I5<49>L<EFBFBD>ۿ<EFBFBD><07><>t<EFBFBD>W<EFBFBD>|<1D><><EFBFBD><1D><>2.QNU<4E>o\<5C><><EFBFBD>i<EFBFBD>rh<72>o<EFBFBD>W{Wh<57><68> Z<>Lj5<6A><35><EFBFBD><EFBFBD>r<EFBFBD>tk<w <0B>v<EFBFBD><76>?fO<17>z<EFBFBD>9+W&*ʢ<><45>F⸚<46><E2B89A>>s<><73><EFBFBD><><C898><EFBFBD>:+.<2E>G<EFBFBD>ǯW:<3A>\<5C>j<EFBFBD>S<EFBFBD><53>U<EFBFBD>j<EFBFBD><6A>2<EFBFBD><32><EFBFBD>;A<><EFBFBD>(<28>w<EFBFBD><77><EFBFBD><EFBFBD>=<3D><><00><><EFBFBD>?<3F><>Z<EFBFBD>_-4#ا<><D8A7><EFBFBD>S]<5D><02><><EFBFBD>h<EFBFBD>>><3E><13>hWf=<3D>޿<7F>/<2F>+<2B>z<><00><><EFBFBD><EFBFBD>(<28><>qGk<47><15><00><EFBFBD>?<3F>_<EFBFBD><5F><EFBFBD><EFBFBD>O<EFBFBD><71>;_<><5F><EFBFBD><EFBFBD><EFBFBD>Q<>
<EFBFBD>޿<><><7F>e<EFBFBD>Q<EFBFBD><51><00>?<3F>_<EFBFBD><5F><EFBFBD><14><00><EFBFBD>4<EFBFBD><00>˸<><CBB8><EFBFBD>
<EFBFBD>޿<><1F><><EFBFBD><EFBFBD><EFBFBD>Q<><51>(<28><>qGk<47><14><00><EFBFBD>?<3F>O<EFBFBD><4F><EFBFBD><EFBFBD>O<EFBFBD><51>]5DS3L<33>U<1B><><EFBFBD>b<EFBFBD>k<EFBFBD><6B>1<EFBFBD>׫<><D7AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD>֏\+<2B><><EFBFBD>><3E><>x<EFBFBD><78><EFBFBD>/N<>/W<><57><EFBFBD><00><><EFBFBD>tbg<62><67>6<><36>=R<><52>M<EFBFBD>гLWz<57><>?k<>;GT<47><54>Bj<42><6A>Sr5QT<>D8<18><>U<EFBFBD><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>h<68><7F><1F>W<57><7F>q<EFBFBD><71>5{<7B>ĕoh<6F><68><EFBFBD><EFBFBD> {<7B><><EFBFBD>e<EFBFBD>_<EFBFBD>m<EFBFBD>{3<><33><EFBFBD><EFBFBD><<3C>U<><55><EFBFBD><EFBFBD>M<15>_<EFBFBD>u:<3A><>O~"zw<7A>ߛ5M<35><4D><EFBFBD>a<EFBFBD>1<EFBFBD><1E>v<EFBFBD><76><EFBFBD>v<EFBFBD><76>r<EFBFBD>U<EFBFBD><55>r<EFBFBD>>/ wŮ'&<26>7<EFBFBD><37>ni<6E><69>r<EFBFBD>b<EFBFBD>W\<5C>uD<75>L<EFBFBD><4C>V<EFBFBD>. ?t[<5B><><EFBFBD><EFBFBD>-<2D>s<18><>ī"<22><><EFBFBD>[<5B><>Nuu7k<37>7u3ruLLܙ<4C><DC99><EFBFBD>ƥ<EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>|<7C><>q<EFBFBD>wr<77><72>v<EFBFBD><1B><><EFBFBD><EFBFBD>3<EFBFBD><33>y<EFBFBD><79><EFBFBD>v<EFBFBD><76><EFBFBD>1<EFBFBD><31>j<EFBFBD>h<EFBFBD>ݎ<EFBFBD>3Uuo<75>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00><><00><10>O<EFBFBD>'<27>Q<>2=p<><70><EFBFBD>>{<7B><13><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>kDTY<54><59><EFBFBD><EFBFBD><EFBFBD>j<>]<5D>?<3F>Oe<4F>h<EFBFBD><68>ؼ<EFBFBD>\u<>q<EFBFBD><71>k<EFBFBD><6B>ۦoWE<>u{I<><49>sLSߊ<53>kQN<51>?<19>"<22><00><EFBFBD> {[<5B>cه<63><D987> <1E><><EFBFBD><EFBFBD>><1F><><EFBFBD>~/<2F><><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><77>޺<EFBFBD><DEBA><19>?G<>/<2F> '<27><><EFBFBD>s.<2E>]<5D><><EFBFBD><EFBFBD>!<21><><EFBFBD>n<>"<22>Ȼ6<C8BB><36>UO<55><4F><EFBFBD>"<22><><EFBFBD>U3幟)<29>v<02><><EFBFBD>t<><74><EFBFBD>U<<3C>=<3D><><EFBFBD>ɯ60"b<><62>U<EFBFBD>f<EFBFBD><66><0E>_Xֺ<58><D6BA>ٙl<D999>4~<7E><>h<EFBFBD><68><EFBFBD>n<EFBFBD><6E>kiȎ<69>N<1D>\}YskŘǛ<C598><C79B>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1F><>q<><71><EFBFBD>w<EFBFBD><77>K~<7E><><EFBFBD>U<55>TM3<4D>&_5<0F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1E><><EFBFBD><EFBFBD>\<>O<EFBFBD><4F>RF<52>D=<3D>=I<><49>=]<5D><><EFBFBD><EFBFBD><EFBFBD><7F>˦<7F><CBA6><EFBFBD>N<EFBFBD>{<13><00><><00>p<EFBFBD> <_4G<34><47><EFBFBD><EFBFBD><1D><>O<EFBFBD><4F><EFBFBD><00><><00><><00><EFBFBD><7F><EFBFBD><EFBFBD><00>sL<73>*;<><7F><EFBFBD><EFBFBD><EFBFBD>Q<> <09><00><><00><><7F>fgv<><00>?<3F><><EFBFBD><EFBFBD><EFBFBD><13><00><><00>M7<4D><37>33<33>;<><7F><EFBFBD><EFBFBD><EFBFBD>Q<> <09><00><><00>o<><6F>fgv<><00>?<3F><><EFBFBD><EFBFBD><EFBFBD><13><00><><00>4<EFBFBD><34><1C><><1C><>><3E><><00><EFBFBD><7F><EFBFBD><13><00><><00>4<EFBFBD><34><1C><>%4<>T<EFBFBD>h<EFBFBD>j<EFBFBD>r#o<><6F><EFBFBD><EFBFBD>Gj><3E><><><1D><><EFBFBD>K<EFBFBD>؟c<D89F>ʰ=G뷪;<3B><><EFBFBD>|><3E><><EFBFBD><EFBFBD><E7AEAF><EFBFBD><EFBFBD><17>w<EFBFBD><77><EFBFBD><EFBFBD>T<EFBFBD>}M<><4D>t<EFBFBD>z5<7A>:<3A><>f<EFBFBD><00>߲W<DFB2><57>7<EFBFBD><EFBFBD><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Q~t<><74><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><57><EFBFBD><EFBFBD>x99ٗ<39><D997><EFBFBD><EFBFBD>ƵU˗'[<5B>4<EFBFBD>3== g<><67>DzyLN<4C><4E><EFBFBD><EFBFBD>s<EFBFBD>=<3D>v8<76><38>ܳ<EFBFBD><DCB3><EFBFBD>6>e<><65>)<29>lj5S<35><53><EFBFBD>OoG<6F><47>h|<7C>m<EFBFBD><6D>;7<>.><3E>1<>r<EFBFBD>ve<76>x8<78>Xw-\<5C><><EFBFBD>wi<77>"g<>N<EFBFBD>N<4E><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>ݛ<EFBFBD>x<EFBFBD>uU<14>Vn <0A>3;<3B><><EFBFBD>鎳ݫ<E98EB3>ϸ<EFBFBD>N<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3>U<EFBFBD><55>qWk<57><6B><EFBFBD>Sf<53><66>ri<72>&<26>.ULWWv}/<2F><><1B><><EFBFBD><EFBFBD><1A><>v<EFBFBD><76><EFBFBD><EFBFBD>{<弊<><E5BC8A>.r<><72><EFBFBD>)<29><><EFBFBD>Gr<47>U<EFBFBD>N<EFBFBD>t<74><EEA9A6>ykz<6B>W<EFBFBD><57>ݘ<EFBFBD>'<11>cr<63><72>g<EFBFBD>l <0C>F>VN<1D>V<EFBFBD>n7<1D><EFBFBD>zO<7A>n<EFBFBD>a<>mc<6D><63>f<EFBFBD>c<EFBFBD>Ck<43><6B>׍9<D78D><39><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>קz~<7E><>l<EFBFBD>|ut>g<><67>w<13>`v<><76>Q<EFBFBD>X<EFBFBD><58>hʻ<68>r<EFBFBD><72>]<5D><>ۉ<EFBFBD><DB89><EFBFBD>4D<34><44><EFBFBD>ө<EFBFBD><D3A9>;or<1C>ٟ<><D99F>dy<64><16>yNg <0B><><EFBFBD><EFBFBD><00><>M<EFBFBD>4<EFBFBD>U~<7E><>w<12><><EFBFBD><EFBFBD>k^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>虤~W<><57> <0B>\<5C>k<><6B>{<17>>C
<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]<5D>\D<>uU4<55><4B>gl9<6C>Ȟ<17><><EFBFBD>'<18>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:*<2A><>=ھ)<29><>W<EFBFBD><57>[<5B><><EFBFBD><1F><>Oc<4F><63>o<EFBFBD>d<EFBFBD>c/?<3F>x<EFBFBD><78><L<>6<EFBFBD><36>4<EFBFBD><><D898>*<2A><00><><1A>3<1B><><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>v?<3F><><EFBFBD>U<EFBFBD>v~<7E>vF^5<>Wry<72>k<11>U<EFBFBD><55>Ur<55>_<>D<EFBFBD><4C><C7B6>;<3B>z<19><><EFBFBD><EFBFBD><EFBFBD>x<19><><EFBFBD><EFBFBD>o<EFBFBD><6F>X<EFBFBD>h<EFBFBD>f<EFBFBD><66><EFBFBD><EFBFBD>uG<75>UL<55><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>q<1C>9<EFBFBD>S<EFBFBD><53><EFBFBD>fo'<27>\MT<4D><54>X<EFBFBD><58>ʢ<<3C>)<29>&z><3E><>ŝ<EFBFBD><C59D>ڜ[vs<76>r98|^&vm<76><6D>v<EFBFBD><76><EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><13><>yS<79><53><EFBFBD>}<7D>K<EFBFBD><4B>?_'<1C>x<><78><EFBFBD><EFBFBD>ɉ<EFBFBD><C989>Ne8<65><38>5F<35><46><EFBFBD><EFBFBD>UM4<4D>1<EFBFBD>{<7B><11><>}<7D><><EFBFBD>d{W<><57>{Y<1D><><EFBFBD>7<EFBFBD>Y<EFBFBD>_r<5F><72><EFBFBD> <0B>)<29><>oQ5<51>3<><43><CF9A>ix<<|<7C>k<EFBFBD>ܿ<19><><EFBFBD><00><><EFBFBD>¹f<C2B9><66>7<EFBFBD>j<EFBFBD>"*<2A>ף<EFBFBD><D7A3><EFBFBD>򶸏<EFBFBD>G<17>g<EFBFBD><67>\<5C>f<EFBFBD>? 2<>8<<3C><><EFBFBD>;<3B><6A><CDBB>k<>"<22><><EFBFBD>{h<><68>)<29>n<19><><EFBFBD><EFBFBD>=<3D><><EFBFBD><EFBFBD>g<EFBFBD>G=Gh2-U<>Y<EFBFBD><59><>Ȼ<15>ET<45>3U<33><55><1B>W"<22><><EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><79><EFBFBD>(<28><><EFBFBD><EFBFBD>*<2A>Sz)<29><><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><79><EFBFBD>{<7B>:<3A>ua<75><61><07>|<7C>k<><6B><EFBFBD><15>L<EFBFBD>+<2B>޵<EFBFBD><DEB5><EFBFBD>޹n<DEB9><6E>b<EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD>r<EFBFBD>'<1B><><EFBFBD><EFBFBD>/<2F><>Y<EFBFBD><59><EFBFBD>Q<EFBFBD>6)<29>.`\<5C>*<2A>F:<3A>#<23>]Q;<3B>F<EFBFBD>9=<3D><><EFBFBD>
<EFBFBD><<1A><1C>ۙ<EFBFBD>#<23><>llL<6C>n\ǚ/SMW<4D>cqn<71><6E><EFBFBD>":Lnb<6E><62>G<EFBFBD><47>}<7D><>Ff5X}<7D><>r,\<5C><>%m`ܮ<><DCAE><EFBFBD><EFBFBD>LS<4C><53><EFBFBD>>mNs<4E><73><EFBFBD>,<2C><><EFBFBD><EFBFBD>+;<3B>̊b<CC8A><62><EFBFBD>Ǯ<EFBFBD>Ȧ|<7C><>TD<54>_<EFBFBD>}ϲ8<CFB2><0F><>;<3B><><EFBFBD><EFBFBD> <0B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>R<EFBFBD>ޛt<><74>պ<EFBFBD><D5BA><EFBFBD><EFBFBD>^<5E>뉊fj<66><6A><EFBFBD>޾<03>ݓ<EFBFBD><DD93><EFBFBD>T<EFBFBD><54>03q<33>q<EFBFBD><71>O<EFBFBD><4F><EFBFBD>r.[<5B>E1<45>j<EFBFBD><6A>'m<><6D><EFBFBD><EFBFBD>VNE<4E><45><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>ǹf<C7B9><66>|C<><43><EFBFBD><EFBFBD><00><><EFBFBD>O+<2B> <0B><>V<>xI<78><49><EFBFBD>V0<56><30>[X<04>5I<35><04>Y@v<>5<EFBFBD><35>_<EFBFBD>2ѭ<7F><D1AD><EFBFBD><EFBFBD><EFBFBD>QW<51>L<EFBFBD><4C>n4<6E><34>_<EFBFBD>G<EFBFBD><47>R<EFBFBD><52>zٿ~<7E><><1B>-<2D>ϹT<CFB9><54>G<EFBFBD>*(<28><><EFBFBD><EFBFBD>v^H<><48><EFBFBD>*UUUU5UT<55>T<EFBFBD><54>fw2<77>_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>y_<07><>?o<>x?<3F>Q<EFBFBD>~<7E>g<EFBFBD><67>^-ʦ)<29><>+<2B><><EFBFBD>uyU<1F><><EFBFBD><EFBFBD>]<5D>k<EFBFBD><6B><EFBFBD><EFBFBD><1F>𩹯<EFBFBD>ާ<EFBFBD>9<EFBFBD><0F><><><EFBFBD><7F><EFBFBD><EFBFBD>N<EFBFBD>c<EFBFBD>Le<4C><65><EFBFBD><5F><1E><0F><><EFBFBD>(<28>C<EFBFBD><43><EFBFBD>9<EFBFBD><39>J><3E><><EFBFBD><EFBFBD><7F><EFBFBD><EFBFBD>G<EFBFBD><47><EFBFBD><1F><>t<EFBFBD>G<EFBFBD><47><EFBFBD>]K:=<3D><1F><><EFBFBD><00>Q<EFBFBD><51>{<7B><>s?<3F><>}<7D><><EFBFBD><EFBFBD>yG<79><47><EFBFBD><07><>?o<>j#<23><><EFBFBD><00><><EFBFBD><1E><0F><><EFBFBD>(<28>D<EFBFBD><44><EFBFBD><EFBFBD><EFBFBD>Vu_<17><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&<26><<3C><><EFBFBD>Y<EFBFBD><59><EFBFBD>M<EFBFBD>^<5E>Ʒ6<C6B7>o<EFBFBD>=<3D><>Us<55><73>?.<2E><<3C>?6<>*誟?/v<18><>bU<62>7<EFBFBD>F<EFBFBD>h<EFBFBD><00><><EFBFBD><EFBFBD>7<EFBFBD>6<EFBFBD>-<2D><>?G<>\o<>m<EFBFBD>?B<>x<EFBFBD><78>'{<7B>
<EFBFBD><15>VAu<>@(N<>u(<28>Ǜ&1栢,u<>B<EFBFBD>OIԀ,D<><44> @&&'S怠<1B><><13><>H<00>,ngQ
11:<3A>"fu*LLN<4C><4E>cs:<3A>w<13>#<23><><<3C> <09>:<3A>073<37><33>'q:<3A>0"fu<04><><EFBFBD>@<08>Σ<EFBFBD><00><><EFBFBD>|<7C><08>:<3A>zN<7A><4E>b<><62><EFBFBD>zG<7A>:<3A><>߮<EFBFBD><DFAE><1A>\<5C>Ȣ<EFBFBD><C8A2>f<EFBFBD>z<EFBFBD>}<7D><><EFBFBD><EFBFBD>-߳\ۻj<DBBB><6A><EFBFBD><EFBFBD><EFBFBD>&<1D>nq<6E><71><EFBFBD><EFBFBD>eY<65><59><17><><EFBFBD>{<7B>DOO<4F><4F>k<EFBFBD>s<EFBFBD><73>`<60>a<><61>ؙ<EFBFBD>ۢN<DBA2><4E><EFBFBD><EFBFBD><05><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><7F> ? <0B>H<7F>gN洼4F<34><46>,<2C>/<2F><>#<23><><EFBFBD><EFBFBD><33><D397><EFBFBD><EFBFBD><EFBFBD>sYxh<78><68><EFBFBD><EFBFBD><13>/<2F><>#<23><>PY<50>_<EFBFBD><5F>G<EFBFBD><1D>e<EFBFBD><65>7<EFBFBD>Ag<41>~/<2F><1F>z<EFBFBD><7A><EFBFBD><EFBFBD>_<EFBFBD>?<3F><>k/ <11><> ? <0B>H<7F>c<>~<17><><EFBFBD><EFBFBD><EFBFBD>sYxh<78><68>PY<50>>_<><5F>G<EFBFBD><1E><><EFBFBD><EFBFBD><17><><EFBFBD>;<3B><><EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD>\WESMQ<4D><51>ߨ,<2C>/<2F><>#<23><>PY<50>_<EFBFBD><5F>G<EFBFBD><1D>| ĵ<>^<5E><>Gz<47>"<22><><EFBFBD>)<29><><EFBFBD>ej<65>(<28>_<EFBFBD><5F><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD>Ag_<67><5F>_<EFBFBD>?مW<D985><57>:<3A><>NU<4E>G"<22><><EFBFBD>Z<EFBFBD><5A><EFBFBD>{<7B><>Q׹<1B><><EFBFBD>zs8SLm<4C>G<EFBFBD>f<EFBFBD>-K_<4B>ێ<EFBFBD>_<EFBFBD>:<3A>Z<EFBFBD>j<EFBFBD>Z<EFBFBD><5A>jm<6A>L<EFBFBD>ؗ*<19>~<7E><>Ց]ʪ<>Us]U<><55>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD>DEv<45><76>{<7B>~<7E><><EFBFBD>Nj^|J<><4A>7olZ<10><>b<EFBFBD>i<>~<7E>+<2B>Jj<4A><6A><EFBFBD><EFBFBD><EFBFBD>Q\<5C>V<EFBFBD>z<><7A>܉<EFBFBD><DC89> <20>3:<3A>i<05><><EFBFBD>Lu@<00><><EFBFBD>@Z<><5A>b)<29><>b<EFBFBD>(<28><>c>D<>qmU^<5E>\<5C>STL<54><4C><EFBFBD><EFBFBD>3Oh9<08><EFBFBD>7'<27><><EFBFBD><EFBFBD><EFBFBD>ba<62>r<EFBFBD><72><EFBFBD><EFBFBD>gٷk><3E>b<EFBFBD>[<5B>(<28>"<22>f<EFBFBD>.S]<5D><>&<26><>#<23><>'q<11><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UL<>3<EFBFBD>m?,<2C>/<01><> 3<><33>qz<71><7A><EFBFBD>~<7E>=Ag<41><67>+<2B><1F><><EFBFBD><EFBFBD><EFBFBD>fn<66>ޠ<><DEA0><EFBFBD><15><><EFBFBD>=Ag<41><67>+<2B><1F>w5<77>/ <11><>}<7D><>8<EFBFBD><38><EFBFBD><7F>}<7D><>8<EFBFBD><38><EFBFBD><7F><EFBFBD><EFBFBD><EFBFBD>4<06><00><>~<17><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D><>8<EFBFBD><38><EFBFBD><7F><EFBFBD><EFBFBD>o <11><>}<7D><>8<EFBFBD><38><EFBFBD><7F>}<7D><>8<EFBFBD><38><EFBFBD><7F><EFBFBD><EFBFBD><EFBFBD>4F<34><46><EFBFBD>~<>Ǩ,G<>s\G<>b<EFBFBD>ο4D<34><44><EFBFBD><EFBFBD>0^<19>f{<7B><>%<25>E<EFBFBD><45>J<EFBFBD><4A><EFBFBD>&<26><><EFBFBD>/<2F><>'k7;<1E>/{<7B><17>S4]Ɋ&<26>b<EFBFBD>M4D<34>z<EFBFBD>fb:n5<6E><35><EFBFBD><EFBFBD><EFBFBD><1E><>D<>מv<D79E><76><EFBFBD>V<10><><EFBFBD>H<11> <04><><08><> <09>HH5UE[<5B><><EFBFBD>|<7C><13><><EFBFBD><EFBFBD>޷<EFBFBD>]<5D><><EFBFBD><06>v<76><7F><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD><65><EFBFBD>q<EFBFBD><71><EFBFBD>b<EFBFBD><62><EFBFBD>]6虛觽6<E8A7BD>|<7C><><EFBFBD><EFBFBD>3קX<D7A7><58><EFBFBD><EFBFBD>b}<1D><><EFBFBD><EFBFBD>3<EFBFBD>ޡƪwo<77><6F>*<2A><>3r<33>eT<65><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<><57><EFBFBD>z;<3B><>&<12><>޷<><DEB7>c<EFBFBD><63><<3C>G<EFBFBD><47>~<18><>O?Q<><51><EFBFBD>0^<><7F>? q_<71><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<><57><EFBFBD>;<3B><>& <0B>@o<><6F>g<EFBFBD><67>+<2B><><EFBFBD><1E><><EFBFBD>c<EFBFBD><63><<3C>Gs_<73><5F>xh <0A>[<5B><>1<EFBFBD>~<7E>~<7E><><EFBFBD>? q_<71><5F><EFBFBD><EFBFBD>k<EFBFBD><6B>/ <01><>}<7D><>8<EFBFBD><38><EFBFBD><EFBFBD>z<EFBFBD>g<EFBFBD><67>+<2B><><EFBFBD><1D><EFBFBD><05><>7<EFBFBD>n<EFBFBD><6E><EFBFBD><15>y<EFBFBD><79>[<5B><>1<EFBFBD>~<7E>~<7E><><EFBFBD><EFBFBD>`<60>4<06><00><>~<18><>O?Q<>}<7D><>8<EFBFBD><38><EFBFBD><EFBFBD>w5<77>L<17><><EFBFBD><EFBFBD><4C>w<EFBFBD>v<EFBFBD>,<2C><><1D><><EFBFBD><EFBFBD> 8<18><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>-Uk<55>SL<53><4C> >C;<1A>%xuU\<5C>uꌉ<75><EA8C89>߈<EFBFBD>SqN<71>33<33>u#]l<6C><7F>WT<57><54>7<EFBFBD>ra<72>B<EFBFBD>cd*B<><00><><EFBFBD>>`<00>|<7C>@v{5<><00>W<EFBFBD>W'<27><1B>F<EFBFBD>f<66><7F><EFBFBD><EFBFBD>O<EFBFBD>7<1A>n/У<>~)H<>6u<36>i<EFBFBD><69>'<27>k6gʟ<67>c<EFBFBD><<3C><><0E>p<EFBFBD><70><EFBFBD>яܱMw-x<>MY6⚩<36>b<EFBFBD><62>S<EFBFBD>"v<><76>7<EFBFBD><37><EFBFBD>B<EFBFBD><_<>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWr#<23>h<EFBFBD>g<EFBFBD>Tt<54><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7<05><>X<EFBFBD>z<EFBFBD>8<EFBFBD><4D>+̳ES:<3A>kUQ1<51><31><EFBFBD><EFBFBD><1B><>NfU*<2A>8<EFBFBD><16>b<EFBFBD><62><EFBFBD>j<EFBFBD>ө<EFBFBD><D3A9>UQ:<3A><><EFBFBD>&<15><>D<EFBFBD>b<EFBFBD><>]<5D>(<28><><EFBFBD>{<7B><1D><><EFBFBD><1B><>t#s<><73><EFBFBD>S<EFBFBD>~mSM<53><4D><EFBFBD>35\<5C><><EFBFBD>~<7E>Q3<51>?<3F><><EFBFBD><EFBFBD>Ž<EFBFBD><C5BD>V=<3D><>.Q<><51>E<EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD><07><><EFBFBD>x<EFBFBD><78>F<EFBFBD><46>ŋ5ULni<6E><69><16>$U1<55>/B`<60><>Y<EFBFBD><59>Z<EFBFBD><16><>t<EFBFBD>U<EFBFBD><55><EFBFBD>Z<EFBFBD>G<EFBFBD>Z<EFBFBD><01>7<EFBFBD><37>3j̧X<>r<EFBFBD>{<7B>L<EFBFBD>Z<EFBFBD>+<2B><><EFBFBD><EFBFBD>5wj<77>Ӥϥ<D3A4><CFA5><EFBFBD>w<12>ٽ6<D9BD><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r>Zf`c<12>nDX<44><58><EFBFBD>I<EFBFBD><49><EFBFBD>.<2E>n5}j<><6A><EFBFBD><#7,Q<14>w<EFBFBD>)<29><>_<EFBFBD>ݭULy<4C><79><EFBFBD><<3C><>ܐsFxl<78><6C>b<EFBFBD>N%u_<75>i<EFBFBD>4fZ<66><5A><EFBFBD><EFBFBD>I<EFBFBD>*<2A>OX<4F><58><EFBFBD>x9aNe^<17>&<26><><EFBFBD>3Ty<54><79><EFBFBD>c<EFBFBD>ց<EFBFBD><0E>=<3D><>]V<><56>=<3D><EFBFBD><E6A689>Uu1<75><31><EFBFBD> <20><13><>J7<>.'<27><>9K\g<17><EFBFBD><EA8CBB>U<16><>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD>LGJi<4A><69><EFBFBD>4@_<><5F><<3C><><EFBFBD>\<5C>1<EFBFBD>E<EFBFBD>ۙV<DB99>.r5qv<71>(<28>ꧻDۦ<44><DBA6>m<EFBFBD><6D>\W<><57>j<EFBFBD>]n<><6E><EFBFBD><EFBFBD><EFBFBD>Ͼ<><CFBE><EFBFBD><1C>-<2D>bf<62><66><EFBFBD>||<7C>G"<22><1D>_<EFBFBD>r<EFBFBD><72><EFBFBD>-EQTѪ&<26>;<3B>ը<EFBFBD><D5A8>f<EFBFBD><66><EFBFBD>n?e<>!{<7B><>s<EFBFBD><73><EFBFBD>k<EFBFBD><6B>x<EFBFBD><1B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAA6AB>i<EFBFBD><69>l۹\Ω<><CEA9><EFBFBD>|i#<23>[<5B><><EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵E<CBB5><45><EFBFBD>mdZɢ<5A>uSM<53>QTQr"uSDU<44><55><EFBFBD><EFBFBD>O<EFBFBD><10><>'<27><><EFBFBD><7F><EFBFBD>F<>׃<EFBFBD>+<2B><><EFBFBD><EFBFBD>w<EFBFBD><77><EFBFBD>a^XVP<56>:<3A><>P_9܀ j<><6A><EFBFBD>,L<><4C>Qffgs"<00>
)<13><>t&w;<3B><05><><EFBFBD><EFBFBD>,<2C><><EFBFBD>g<EFBFBD><67>(L<><4C>Ā;<3B><><EFBFBD>X<>N<EFBFBD><05><>;<3B><>Y"f'pL<><4C><EFBFBD>bf'p<>,<2C><><EFBFBD>DDH<><48><EFBFBD> 33;<3B>"u;<3B>@gs<67><73>QR&bw<12>,<2C><><EFBFBD>d@@<14><><EFBFBD><EFBFBD><00>33<33>@I"f:<3A>BPw3<77>c0<63>4<EFBFBD>ú<EFBFBD>z&<26> <20> <1A>=|F<> <20> |f<><66><EFBFBD><10> f w<><77>"c<><63> <0B><><EFBFBD><EFBFBD>5<EFBFBD><35> Ϻw^<5E>4 "<22>T<EFBFBD><54><EFBFBD>EѠ:<3A><>PT!<21>5M5ET<45><54><EFBFBD><EFBFBD>@{<7B><><EFBFBD>h<EFBFBD><68>վ<EFBFBD><00><><1A><>э<EFBFBD><74>^<5E>u<EFBFBD><75><EFBFBD><EFBFBD>?<3F><>%<25>-<2D><><EFBFBD><EFBFBD>[<5B>4<EFBFBD>13<31><33><EFBFBD><EFBFBD>ع<EFBFBD>7h<37><68>j<EFBFBD>ULt<4C>#S<>l5<6C>v(<28><><EFBFBD>Wv<57>s<EFBFBD><73>N<EFBFBD><4E>nmU<14>TU<54><55>M5n <0B>h<EFBFBD><68>k1;<3B>Y<><59>ܠJ2b<32>L1<4C><31><EFBFBD>4<EFBFBD>a1תi<D7AA><69><03>Pi<50><69> g<>Ia<49><61><EFBFBD>3<EFBFBD>h<EFBFBD><68>F<EFBFBD>h<EFBFBD>a<EFBFBD><61><EFBFBD><EFBFBD>2ѠOJ€,"<22>yH<01><>
<EFBFBD><01> <07>IO&B &_=<1A><>|L<>hk<>4<EFBFBD>F<EFBFBD><46><EFBFBD>|L<>hk<>5<EFBFBD>6<EFBFBD><36>D`Qw^ޫ<><1B><>!<21><>"n<>_<11>z4+ <1A><><EFBFBD><EFBFBD>0<EFBFBD><30>k<EFBFBD>g<EFBFBD>@<40>K<12>@'<27>R|<7C><01>>A>@<40><>g<EFBFBD><67><EFBFBD><EFBFBD>d<EFBFBD><00>q<EFBFBD><71><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><7F><EFBFBD>F<>Q<EFBFBD><51><EFBFBD>{<7B><>)<1B><><EFBFBD>S<EFBFBD><00>~<7E><>f|<7C><><00>?s<>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ~<15><><EFBFBD>tWn<57>{<7B>r-<2D>f<EFBFBD><66>S*<2A><><EFBFBD>!<21><><EFBFBD>Պ<EFBFBD>/W<><57>w<EFBFBD><77><><C7A2>LJ\ܙ<>:w&#<23><>Q<EFBFBD>1<EFBFBD>ߟ<EFBFBD>cWj<57><4D><DBBC>{<7B><>M<EFBFBD>U<EFBFBD>٪<EFBFBD><D9AA>S14<>1_<><5F><01><><EFBFBD><EFBFBD>\<5C>ʫ'<27><>ǹz<C7B9><7A>ݦ<><DDA6>3ަw3M<1A>><3E><><EFBFBD>0r<30><72>Z<EFBFBD><5A>j<>{<7B><><EFBFBD>+<2B>j<EFBFBD><6A><53><DD89>zN<7A>}<7D>P<0F><>;<0E>{<7B>g*<2A><><EFBFBD>~<7E><><EFBFBD>U5x<35>nb#<23><><EFBFBD>w<EFBFBD><1A>y<EFBFBD><79><<3C><>Wy<<3C><>.x<><78><EFBFBD><EFBFBD>W<EFBFBD><57><EFBFBD>{<7B><>&<26>w<13><>ų<EFBFBD>Z<EFBFBD><5A>U;<3B><><EFBFBD>Y<EFBFBD>W<EFBFBD>U3*6<>z<EFBFBD><7A>~;*<2A>]<5D><><EFBFBD>ȋtصr<D8B5>w;<3B><><EFBFBD><EFBFBD>M<EFBFBD><4D><EFBFBD>G<EFBFBD>:o<><6F><EFBFBD>_O9<4F><39>F~V/<2F>ջw<D5BB><77><EFBFBD>ߪ54<35><34>E3=w;<3B><>7.<2E>]ȹv<C8B9><14>F<EFBFBD><46><EFBFBD>E<EFBFBD><45>(<28><><EFBFBD>:<3A><>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X8<58><38><1D><>^<5E>sV<><56>Ҫ<EFBFBD>;<3B><><EFBFBD><<3C><>V<EFBFBD>+<2B>9V<39>h<EFBFBD><68>Ev⨎<76><E2A88E>m?<3F><><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><68><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g_<67><07>g<EFBFBD><67>k<EFBFBD><6B>w"<22><>6銦f<E98AA6>5<EFBFBD>L<EFBFBD>Y<EFBFBD><59><EFBFBD>bg<62><67><EFBFBD><EFBFBD>a]<5D><>rW<72> [i<>Qv<51><76>\<5C><><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59>}<1E>GH<47><48><EFBFBD><17>(<28><><EFBFBD><EFBFBD>)<29>gq<67><71>Z<EFBFBD>?<3F>h<EFBFBD>&Z<>;<1C>T^<5E>j<EFBFBD><6A>wnU\Dӏf<D38F><66>v<EFBFBD>)<29><><EFBFBD>h<EFBFBD>yGJc<4A><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD>o<EFBFBD><6F>ˎ<EFBFBD>EQf<51>tj<74>Gz<47><7A>QN<51>gs<67><73><EFBFBD><EFBFBD>"<03>O5<4F>Ÿ<EFBFBD>{%<25><><EFBFBD>k<EFBFBD>7r<37>?<1F><>qY<><59><EFBFBD><EFBFBD>ϸwk<77>{+<2B><>UOj<4F>>+*<2A>#j<><6A><EFBFBD>ֹKU<4B>j<EFBFBD>zU<17>g<EFBFBD><67><EFBFBD><EFBFBD><+<2B>4<EFBFBD>}/ȀA<7F><41>u9N<39>_<EFBFBD>9<EFBFBD>~;;<3B><><EFBFBD>̱<EFBFBD><CCB1><EFBFBD><EFBFBD>cz<63>(<28>"<22><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>j<EFBFBD><6A>b<EFBFBD><62><EFBFBD>6<EFBFBD>[<5B><>{<7B><>u<EFBFBD>N<EFBFBD>p]<5D><>+^=<3D><<3C><0F><>o<1A>)<29>޳MSnrmU\<5C>k<EFBFBD><6B><EFBFBD>U<EFBFBD>3N<><4E><EFBFBD><EFBFBD>a<EFBFBD>f;qU<71><55><EFBFBD><EFBFBD>\<5C><>b<EFBFBD>M<EFBFBD><W<>2<EFBFBD><32><EFBFBD><EFBFBD>6<EFBFBD><36>U6nE6<45>ջ5x<35>Qr<51>fj<66>EWY<57><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00>M<EFBFBD><0E>r<EFBFBD><72><EFBFBD><EFBFBD>x<1C>m<EFBFBD>6<EFBFBD>g=v3<76><33>5U\<5C><>[ݪmeQMQަ&<26><><EFBFBD>""i<>? ݭ}<7D>j<EFBFBD><6A>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>хw7?<3F><>Su<53>ܮ-<2D>MY1<59>^<5E>j<EFBFBD>f'<27>j#݈~e<>G<EFBFBD><47>g#<23><><EFBFBD>y}<7D><><EFBFBD>?w#2<>9E<>U=<3D>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>73;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<7C><><EFBFBD><EFBFBD>;<3B><><EFBFBD>x68<36><38>z"*<2A>w<15><><11><><EFBFBD>_<EFBFBD>\S<><53>.<2E><><06><11>{<7B><><EFBFBD><EFBFBD>,zm<7A>{<12><17><>r<EFBFBD><72>3UEQ<1E><>y><3E><><EFBFBD><EFBFBD>I<EFBFBD>~<7E><1D><><EFBFBD>9<><39>c<EFBFBD><63>a<>wh<77>i<EFBFBD>f;<3B>\<5C>5u<35>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;]<5D><>8<13><><EFBFBD><EFBFBD>Z<EFBFBD>5E]<5D>><12><><EFBFBD><EFBFBD>6i<36>_<16>/<2F><07><><EFBFBD>~<7E><><EFBFBD><00>;?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD>}<7D><>j0lUn*<2A>g~۽US>^<5E><><EFBFBD>e<><65>S<EFBFBD><53><EFBFBD><1F>6 <0B><>aq<18><>{3gp<><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>c<EFBFBD>MUU?<3F><>Ju<17><><EFBFBD>}<7D><>;<3B><><EFBFBD><1F><11>q<EFBFBD><71><11>g<EFBFBD><67>6<EFBFBD><36><EFBFBD>Ś+<2B>&<26>i<EFBFBD><69>UU^<5E>c<EFBFBD>=<3D><><EFBFBD>F<EFBFBD>m<EFBFBD><6D>}<7D><>w`<60><0E><>X\E<>?<3F><>c<1A>64<36>v<EFBFBD><76><1D><>L<EFBFBD>1<EFBFBD><31><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>;C<>/<2F><> <0B> <0C>."<22><17><>3<EFBFBD>v<EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD>1ުj<DEAA><6A><EFBFBD>w4<77>3><3E>Jf<4A><66><EFBFBD>C<EFBFBD><43>#<23><><EFBFBD>\<5C><>#<23>ƽ<EFBFBD>Qz<51>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><77><14><>y<EFBFBD><79>w<EFBFBD><77>?U<>o!<21>N<03><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>]<5D><><EFBFBD>EQ<16>Ȧ<EFBFBD><C8A6>Z<EFBFBD><5A><EFBFBD>gw<67><77><EFBFBD><EFBFBD>Ukr<6B><72>7<EFBFBD>]<5D><><EFBFBD> <0B><><EFBFBD><EFBFBD><EFBFBD> \u<><75>Ձ<EFBFBD><D581><EFBFBD>O+v<><76><EFBFBD><EFBFBD>f*<2A>j<EFBFBD><6A>Ji<4A><69>*袺<>D<EFBFBD>{<7B><>r <0F>;<19><><EFBFBD>`<60>3<EFBFBD><33><EFBFBD>渌{9<><39> <0B>}<7D>܍<EFBFBD><DC8D>b<EFBFBD><62>M<EFBFBD><4D>LY<4C><59><EFBFBD>:Sv޽<76>{}ft<66><01><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_g<5F><67><EFBFBD><11><>J<EFBFBD>!E<>l<17><><EFBFBD><EFBFBD>b+<2B><><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD>f'ө<><D3A9><EFBFBD><<3C><><00>sY$g~f<><66>&<26><>-ST<53><54><EFBFBD><EFBFBD>~<7E>}z<><7A><EFBFBD>]<5D><>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i7;K<><4B>?<3F>1<EFBFBD>Ѷ<EFBFBD><D1B6><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>42c
<EFBFBD><EFBFBD>(V0<56><30>(,y<><18>d
<02> <20><><EFBFBD><02>"<22><02><> (<28><>QQQ<02><><02><02><02><02><02><02><02><02><02>L <20> <00><>  <0B>@<40><>Ш.<2E><> <20>4.<2E><>
<EFBFBD><EFBFBD>Pb<EFBFBD>

<EFBFBD> p<11>\<5C><><EFBFBD>Qn<51>kQ5S<35>?;<3B><>6<EFBFBD><36>WnM<6E>u<EFBFBD><75><EFBFBD><EFBFBD>y<EFBFBD>fr<66>n<EFBFBD><6E>ȳ<16><>M<EFBFBD>w"<22>.<2E><><EFBFBD>q<>113<13><><EFBFBD><EFBFBD><EFBFBD>g.<2E><>"<22>UQ<>5DL<07>Dqx<12><>ۛ<EFBFBD>7{<7B>D<EFBFBD>^<5E>ue~ݚi<DD9A><69>_<EFBFBD><5F>~<7E>i<EFBFBD><69>.<2E><>g<EFBFBD><67><EFBFBD>¹6<C2B9>H<EFBFBD>T<EFBFBD><54>Z<EFBFBD><5A>[<5B>)<29>Pi4.<2E>@ <20>5 <20><>@<40><><EFBFBD><EFBFBD><00><00>*@<02> <20>4.<2E> <0B>@<40><EFBFBD><E8888D>@-~%4<>M}<7D><>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/|<7C><><EFBFBD>Ȫ<EFBFBD>><3E>")<29><>C<EFBFBD>D%;cj <0B>B<EFBFBD><42>4.<2E> <0B>JO<><4F><EFBFBD><EFBFBD>|<7C>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><7F><EFBFBD>F<>Q<EFBFBD>ٯ<EFBFBD><D9AF><EFBFBD>)<29><><EFBFBD>ƣۋ<C6A3>(<28><><EFBFBD>R7<52>ku<6B><75>ES1<><31>^#ȭ<>j<7F><6A><06><><47>\l<><6C>T|<7C>5<EFBFBD><35>>t5<74><35>g_ڣ<5F>A<EFBFBD><41>Q<EFBFBD><51><EFBFBD>:<3A><>: j<7F><6A> `<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD>T|<7C>k<05>ο<EFBFBD>G΃_ڣ<5F>CX.6u<EFBFBD><EFBFBD>>t<1A><>:<1A>q<EFBFBD><71><EFBFBD>Q<EFBFBD><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <0B><>j<7F><6A><06><><47>\l<><6C>T|<7C>5<EFBFBD><35>>t5<74><35>g_ڣ<5F>A<EFBFBD><41>Q<EFBFBD><51><EFBFBD>:<3A><>: j<7F><6A> `<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD>T|<7C>k<05>ο<EFBFBD>G΃_ڣ<5F>CX.6u<EFBFBD><EFBFBD>>t<1A><>:<1A>q<EFBFBD><71><EFBFBD>Q<EFBFBD><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <0B><>j<7F><6A><06><><47>\l<><6C>T|<7C>5<EFBFBD><35>>t5<74><35><EFBFBD><EFBFBD>q<14>113><3E><><EFBFBD>7;K<><4B>?<3F>1<EFBFBD>Ѷ<EFBFBD>nv<6E><76><EFBFBD><EFBFBD>c<63>m<EFBFBD><6D><EFBFBD><15><><EFBFBD>I;<3B>hT<68><54>VP<56> <1B><><13>u ,y<><18>d
!gP
<13>u
<EFBFBD>(<28>gPOIԀ<00>ngP<02><><EFBFBD>J<02>(<28>,ngQ<67><00><><EFBFBD>H3:<3A>bbu1<75>E (<28>3:<3A>&&'S
F<>u<04>'R<11><>GPw<13>"&gQ<67><00><><EFBFBD>H<1B><>u'q:<3A>73<37>'q:<3A><><EFBFBD><08>3<><33><EFBFBD><04><><EFBFBD>cH
3<><33><EFBFBD><13><08>Σ<EFBFBD>;<3B>Ԡ(<28>* <1B><> <20>;<3B>ԅ<EFBFBD><00><><EFBFBD>@ <09>N<EFBFBD>P'<27><>@<01>g"<22><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>эU<D18D>w|K<><4B>s<EFBFBD><73>`GY<47>L<>{<7B>.<2E><><EFBFBD>sU<73><55>E~<7E>j<EFBFBD><6A><EFBFBD>v1<>_<EFBFBD><5F><EFBFBD>=<3D><><EFBFBD>o<EFBFBD><6F>w<13>7<EFBFBD>KLF<4C>er<65><72><EFBFBD>ݮ<EFBFBD><DDAE><EFBFBD>ܘ<EFBFBD><15><><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>><3E><><EFBFBD><EFBFBD>_<EFBFBD>]<15><>k<>TL<54><4C>.^c<><63>3<EFBFBD>E*<2A><><EFBFBD>6<EFBFBD>t<EFBFBD><74>u+z<>V<EFBFBD>#<23>E}<7D>)<29><><EFBFBD>\<5C>{<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#<23>=:J@<01> <20>.<2E><> h<1E>٦1*<2A>rf7=<3D>q<EFBFBD>ϧ<EFBFBD>0<EFBFBD>f<EFBFBD>tWU1<55>h<EFBFBD><68>3:cUUU<14>US1Lj"g<>fv<66><76> >j<><6A> I g<>_<EFBFBD><5F><EFBFBD>S'<27><1B>F<EFBFBD>f<66><7F><EFBFBD><EFBFBD>O<EFBFBD>7<1A>n/У<>~)H<><00>( <0A><><EFBFBD>?O<>Lo<4C>m<EFBFBD>۝<EFBFBD><DB9D>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD>~<7E>~<7E><>RN<52>!^EeL<><4C> <09><><EFBFBD><Ռy<D58C>bf'p<>,<2C><>s<EFBFBD>
"<22><>:<3A><><00>;<3B>Ȋ<02>
D<EFBFBD>N<EFBFBD>Y<><59><EFBFBD>bf'q:AE<41><45><EFBFBD>e@<40><>N<EFBFBD>q((<28>;<3B>̈<02>1;<3B>ffw <13><>t@gs<67>@&bw<02><><EFBFBD><EFBFBD>@<00><>3<13>@ffw(&bw<02><><EFBFBD><EFBFBD>P'S<>@gs<67>@<08><><EFBFBD>33<33>"u;<3B>@ffw=DP'S<><53> <0B>33;<3B>@'S<>&fgr
<EFBFBD><13><> 3<>܈
D<EFBFBD>w<05><><EFBFBD>|<7C>'S<>ffw"GI<47>b<>fE<66>b<EFBFBD><62>*<2A>?<3F><>"a<>ETx<54>U<EFBFBD>fi<66>X<EFBFBD>t<EFBFBD>K3<4B>#s<><73>cw"<22><15><>o<EFBFBD>5<EFBFBD>~<7E>[<18><>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{ѿ<><D1BF><EFBFBD>i<EFBFBD><69>,<2C>QU<51><55><EFBFBD><EFBFBD>i<EFBFBD><<3C>S˩ޞ<CBA9>{}}<7D><><EFBFBD><EFBFBD><EFBFBD>ۚn[<5B>T<EFBFBD><54><EFBFBD>Ȋ<EFBFBD><C88A> <09>kOQ<4F><51><EFBFBD>n|^<5E><>_<EFBFBD>S"<22>4<EFBFBD> uWN<57><4E><EFBFBD>S<02>m<EFBFBD>cޜK<DE9C>Q[<5B>uƷ<75>k<EFBFBD><6B><EFBFBD>xDL΢&d<>D<><08>=g<><00>X<><00><><EFBFBD>v<EFBFBD>MT<4D>E:<3A><><EFBFBD>D 3<11>^,<2C><>ȵ<17><><EFBFBD>&u<13><>իW<D5AB><57>T܊g<DC8A>]$<24>z<EFBFBD><7A><EFBFBD><EFBFBD>*<2A><>#<23><1F>K<EFBFBD><4B>[<5B><><EFBFBD><EFBFBD>6<EFBFBD>SE=u<1E><>e<EFBFBD><02>DnI<>T<EFBFBD>0c>b<><03>ٯ<EFBFBD><D9AF><EFBFBD>+<2B><><EFBFBD>mG<6D><05>F6e<36><65><EFBFBD><EFBFBD>U<><55><<3C><><EFBFBD>?<3F>e<EFBFBD>f=x<>Z<>b<EFBFBD>u<EFBFBD><75>|<7C><>z<EFBFBD>Q<EFBFBD>Lu{q6<71>z&<&~<7E>%<^ <<3C>o<><6F><EFBFBD><EFBFBD><EFBFBD>W<1B>o,<z<>r)<29>L<EFBFBD>;<3B>UUySLu<4C><75><EFBFBD><EFBFBD>a<EFBFBD><61>ѓ<EFBFBD>v<EFBFBD>1Eu<45>H<EFBFBD>8<EFBFBD>:G<><47>z<EFBFBD><7A>vz<76>|f><3E>=a'{<7B>J<>o"<22><00><00><>Ɍy<C98C>(<28>(
(<28>(<28>*<2A>
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00
feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
"<22><><02><02><><00>p<00>\Q<02><>(<28><00><00><00><00><00><00><00><00><00><00> qD <0B>
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00
feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
<EFBFBD> (<28>*<00><00>
<EFBFBD>*۹]<5D><><EFBFBD>u<EFBFBD>5G<35>%<25><1B><><EFBFBD>o_<6F>)<29>_{^]#kf<6B><66>h<EFBFBD><68>Ʀ<EFBFBD><C6A6><EFBFBD><EFBFBD><12>]#9b<39>eT۪<54><EFBFBD><E299A6>-<2D>b<1E>m<EFBFBD>w&<26>Y<15><>ʚ<EFBFBD><CA9A><EFBFBD><EFBFBD>p&=^<5E>-x<>1<EFBFBD>[<5B>_<EFBFBD>:<3A>~<7E>ڪ)<29><><EFBFBD>q<EFBFBD><71>V<EFBFBD><56> i<>ޜL<DE9C><4C><EFBFBD><EFBFBD><EFBFBD>UT<55>n&T<>Uuwi<77>j<EFBFBD>}<1B>>KMUSTUMSLǔĆ<C794>UڻDn<44>U<EFBFBD><1E><>0<EFBFBD><30>]Q<>i<EFBFBD>c<63><E285AE><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76><EFBFBD>ST<53>ڿz<DABF>=<3D>wk<77>&w<><77>"U<7F>LM3<4D><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD><37>W<EFBFBD>sQ<73>g<EFBFBD>,nW]<5D><><EFBFBD><EFBFBD>L<EFBFBD>:<3A>2*<2A>U~<7E><><EFBFBD>&<26>Rs1<73>j<EFBFBD>ڻ<EFBFBD><EFBFBD><E89AAA> <0C><>ޱ<14><>&<26><><EFBFBD><EFBFBD>q3<13><><EFBFBD>ȓ<EFBFBD>]<5D><>lZǢ<5A>qr<71><72>V<EFBFBD>}35G<35>yGr<47><72>w]W<><57><EFBFBD><EFBFBD>%<25><><EFBFBD><EFBFBD><EFBFBD>uQܷ<51>n<EFBFBD>><3E><>_+<2B><05><><EFBFBD>(<00><><EFBFBD>>`<00><><EFBFBD><EFBFBD>*+<2B>*<2A>G<EFBFBD>u13<31>Uf,d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><55><DDAE>5u<35>&&??W%<<3C><><EFBFBD><EFBFBD><EFBFBD>ܖw<DC96><77>=]}S<>k<EFBFBD>><3E><><EFBFBD><EFBFBD>ߧ<EFBFBD><0F><><EFBFBD><7F><EFBFBD>W <0B>_<EFBFBD><5F><EFBFBD><EFBFBD>]<>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>Ï<EFBFBD>R<EFBFBD><52><EFBFBD>|7<><37><EFBFBD>C<><43>O<0F><>{?<3F>t}<7D><>߯<EFBFBD><DFAF><EFBFBD>N<EFBFBD><EFBFBD>W<EFBFBD>j0J9<4A>Դ<EFBFBD><D4B4> <0A><><EFBFBD><7F><EFBFBD>S<EFBFBD><53><EFBFBD><1E><>j<><6A><EFBFBD><EFBFBD>:<3A>S<EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD>Ҏuu-.<2E><><EFBFBD>~=<3D><>:><3E><><EFBFBD><6F><C7B3>Gڸ=<3D><><0E><><EFBFBD><EFBFBD><EFBFBD>u|<7C><><07><><EFBFBD>]KK<4B><4B><EFBFBD>ߏg<DF8F><0E><><><1B><><EFBFBD><00><><EFBFBD><EFBFBD>~<7E>ë<EFBFBD>;<3B><>_)<29><><EFBFBD>(<28>WR<57><52>x|7<><37><EFBFBD>C<><43>O<0F><>{?<3F>t}<7D><>߯<EFBFBD><DFAF><EFBFBD>N<EFBFBD><EFBFBD>W<EFBFBD>j0J9<4A>Դ<EFBFBD><D4B4> <0A><><EFBFBD><7F><EFBFBD>S<EFBFBD><53><EFBFBD><1E><>j<><6A><EFBFBD><EFBFBD>:<3A>S<EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD>Ҏuu-.<2E><><EFBFBD>~=<3D><>:><3E><><EFBFBD><6F><C7B3>Gڸ=<3D><><0E><><EFBFBD><EFBFBD><EFBFBD>u|<7C><><07><><EFBFBD>]KK<4B><4B><EFBFBD>ߏg<DF8F><0E><><><1B><><EFBFBD><00><><EFBFBD><EFBFBD>~<7E>ë<EFBFBD>;<3B><>_)<29><><EFBFBD>(<28>WR<57><52>x|7<><37><EFBFBD>C<><43>O<0F><>{?<3F>t}<7D><>߯<EFBFBD><DFAF><EFBFBD>N<EFBFBD><EFBFBD>W<EFBFBD>j0J9<4A>Դ<EFBFBD><D4B4> <0A><><EFBFBD><7F><EFBFBD>S<EFBFBD><53><EFBFBD><1E><>j<><6A><EFBFBD><EFBFBD>:<3A>S<EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD>Ҏuu-.<2E><><EFBFBD>~=<3D><>:><3E><><EFBFBD><6F><C7B3>Gڸ=<3D><><0E><><EFBFBD><EFBFBD><EFBFBD>u|<7C><><07><><EFBFBD>]KK<4B><4B><EFBFBD>ߏg<DF8F><0E><><><1B><><EFBFBD><00><><EFBFBD><EFBFBD>~<7E>ë<EFBFBD>;<3B><>_)<29><><EFBFBD>(<28>WR<57><52>x|7<><37><EFBFBD>C<><43>O<0F><>{?<3F>t}<7D><>߯<EFBFBD><DFAF><EFBFBD>N<EFBFBD><EFBFBD>W<EFBFBD>j0J9<4A>Դ<EFBFBD><D4B4> <0A><><EFBFBD><7F><EFBFBD>S<EFBFBD><53><EFBFBD><1E><>j<><6A><EFBFBD><EFBFBD>:<3A>S<EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD>Ҏuu-.<2E><><EFBFBD>~=<3D><>:><3E><><EFBFBD><6F><C7B3>Gڸ=<3D><><0E><><EFBFBD><EFBFBD><EFBFBD>u|<7C><><07><><EFBFBD>]KK<4B><4B><EFBFBD>ߏg<DF8F><0E><><><1B><><EFBFBD><00><><EFBFBD><EFBFBD>~<7E>ë<EFBFBD>;<3B>?<0E><><EFBFBD>`<60><>s<EFBFBD><73>iw<69>><1B><><EFBFBD><00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~=<3D><>:><3E><><EFBFBD><EFBFBD><EFBFBD>:<3A>S<EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD>Ҏuu-.<2E><><EFBFBD>~=<3D><>:><3E><><EFBFBD><6F><C7B3>Gڸ=<3D><><0E><><EFBFBD><EFBFBD><EFBFBD>u|<7C><><07><><EFBFBD>]KK<4B><4B><EFBFBD><EFBFBD><00>g<EFBFBD><0E><>;<3B>==}S<>w<EFBFBD>><3E><><EFBFBD><EFBFBD>߫<EFBFBD>8Q]<>W<EFBFBD>w랝<77><EB9E9D><EFBFBD><EFBFBD><EFBFBD><07>><3E>KK<4B><4B><EFBFBD>n<EFBFBD>3cׁf~<7E>&<26><>w?<3F><><EFBFBD><EFBFBD><11><><EFBFBD>U<EFBFBD>5<EFBFBD>ޟ<EFBFBD>Ǯ<EFBFBD><C7AE><EFBFBD>.5X<EFBFBD>ȁa<15>T<<3C>X<EFBFBD>V0<56>#<23><> <09>:<3A>DX<44>:<3A><03>u"<22>gPN<>u (<28>(<28>gPOI<4F><49><EFBFBD><EFBFBD><00>,u<>@;<3B>Ԡ(<00><11>u<00>N<EFBFBD>u=QQ<00><><EFBFBD>@P<00><><EFBFBD>z<11><>@;<3B>Ԁ<11><>@='S<>X<>Σ<EFBFBD><00><><EFBFBD>@QQ<08>:<3A>Q'<27><>@E<><45><EFBFBD> <09>:<3A><08>:<3A>zN<7A>D73<37>'<27><>@<08>:<3A>zt<7A>@#<23><> <09><>/<2F>z <13>@<08><><01>].<2E><00><>@<04><01><> 0<><30>b.<2E>h<><68>ѥ4i@MPF<>ѥ4i@MPF<>55<><35>PF<>ѯ<>@M|f<>ѥ4k<34>P_<19>4 <09>thc<>PX<>!Ant'<27>
,<02><>]切(:<3A><>3<>܀,L<><4C><05><><EFBFBD>Ȁ(<28><>R&bw<04><><EFBFBD>dbu;<3B><><EFBFBD>,<2C><>r
feat: particle cloud (no discrete dots) + geo-IP country preselect on login Two coordinated polish moves the owner asked for. ## 1. Hero particle field — "no white dots, just a glow that follows the mouse and is always in motion" Previous tuning (uPointSize 2.8, uBaseAlpha 0.6) gave discrete indigo dots that additively saturated to near-white in dense clusters. The owner wanted no granular dots visible at all — a continuous indigo cloud that the cursor pulls toward itself. Changes: - **Render fragment**: replaced the anti-aliased disc SDF (`smoothstep(0.5, 0.42, d)` — hard edge) with a Gaussian falloff (`exp(-d * d * 6.0)` — smooth blob, no edge). Each particle is now a soft volume that blends seamlessly with neighbours. - **Sim fragment**: replaced the outward-gradient ring push with a mouse-halo attraction. Particles drift toward an ideal radius (~0.20) around the cursor, with exp-bell falloff so they don't collapse onto the cursor or feel influenced from across the canvas. `ringField()` helper is now unused but kept for future use. - **JS uniforms**: `uPointSize` 2.8→14 (256-tier) / 3.6→20 (128-tier); `uBaseAlpha` 0.6→0.055. Individual particles are below the perception threshold for "dot" but 65k of them additively composite into a continuous cloud. With the much lower per-particle alpha, the cumulative brightness never saturates to white. - **ParticleField tick loop**: asymmetric ring-active fade — `alpha = 0.14` ramping in (fast cursor response), `0.012` decaying out (slow glow trail after the pointer moves away). Matches the brief "glow longer + attractive to mouse but always in motion". - **ParticleHero index.tsx**: added an always-on indigo radial gradient behind the WebGL canvas, so the hero never reads as visually empty between frames — the canvas additively paints the dynamic cloud on top. Removed the white-dot stipple from the static fallback (it was the most likely source of the "weisse punkte" complaint for any visitor on the fallback path). ## 2. SMS login — pre-select country picker from visitor's geo-IP The country picker on `/login` previously defaulted to `'CH'` for everyone. Visitors from DE / AT / US / etc. had to manually scroll to their dial code — small friction but it sits on the highest-stakes conversion step in the funnel. - **New API route** `apps/api/src/routes/geo.ts` → `GET /v1/geo/country` returns `{ country: 'CH' | 'DE' | … | null }` by reading Cloudflare's `CF-IPCountry` header. Public, no auth — reading a 2-letter country code from a geo-IP header isn't PII under GDPR / DSG. `'XX'` and `'T1'` (CF's "unknown" + Tor) are normalised to `null`. Outside CF (dev), header is missing → null. - **Login page** picks up the result in the existing `useEffect`, guards against codes not in our country list, and calls `setCountry` to override the `'CH'` default. Stays at `'CH'` if the detection fails or the visitor is on a Tor exit. Verified live: the endpoint returns `{"country":"DE"}` from CF's German edge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:17:20 +02:00
feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
D<EFBFBD>N<EFBFBD><EFBFBD><00>;<3B>Ȁ(<28><02><>N<EFBFBD>Y<><59>܈<02><02>:<3A><><00>;<3B>Ȁ(<28>)<13><> 3<>܈<02><02>:<3A><><00>;<3B>Ȁ(<28>)1;<3B>ffgr<67> *<2A><>w @Y<><59>܈<02><02>3<13>@ffw(1;<3B>ffw \R&bw <20>33<33>@<08>N<EFBFBD><00><><EFBFBD>@<08>N<EFBFBD>Y<><59><07>=@A<<3C><05><> <0B><04><>O z<> ! <09><01><>H.<2E> <0B>@<40><><EFBFBD> <20>4.<2E> <0B>@<40><><EFBFBD> <20>4.<2E> <0B>@<40><><EFBFBD> <20>4.<2E> <0B>@<40><><EFBFBD> <20>4.<2E> <0B>@<40><>A4<41><00>
(<00><02><02><02><00><00><00>
(<28>\ <0B> <20>@<40><> (<28>(<28><00>*.<2E>t"<22>GY<47>.<2E><>
h4jT<03><>c<><01>:@<08><>yH<02>
"<22>Y<EFBFBD>u<><75><02><>gPOIԀ<11>u<04><>HgPOIԀ<11>u<04><>HgP\zN<7A>.u<>@='RGY<47><13>u u<>@='RGY<47>='R
"<22><>u<04><><EFBFBD><07><03>D:<3A><01>4<00>E<>GPz<04>(.<2E>@<06>@<40>:<3A><13><00><><04><>4<00>"z<>S@<40>غEX<>=<05>#{<<3C>X<>N<EFBFBD>Y<><59><EFBFBD><00>:<3A><><00>;<3B>Ȁ(<28>)<13><> 3<>܈<02><02>:<3A><><00>;<3B>Ȁ(<28>)<13><> 3<>܈<02><02>:<3A><><00>;<3B>Ȁ(<28>)<13><> 3<>܈<02><02>:<3A><><00><><EFBFBD>P<05><><EFBFBD><EFBFBD><00>;<3B><>GO Ϭ<><CFAC>
GD~9@<08> <0B>I<EFBFBD><49>P <11><><00><>t'<27>4hѠF<> 4hѠF<> 4hѠF<> 4hѠF<> 4hѠ@4<00><><EFBFBD><EFBFBD>F<>@@@@@@DDDPF<>Ђ
<01>@<11><00><>u'<27><08><06>K=A@AH<41>,ƀAM <0B>#<23><>.<2E>h4hX<><58><EFBFBD>,<2C>Ġ<1E><05><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LJ4ib֍]<00><><1B>A<05><> <20>&<26>A@Ѣz<11><00><>u'<27> <09>G@z<><11><00><>t'<27> <09>G@z<><11><00><>t'<27> <09>G@z<><11><00><>t'<27> <09><03><>