# YETI³ Site Branding 0.1.5

Shared site/game attribution and animated exact-page QR. Existing credit text,
classes, layout and effects stay native; only the Engine destination changes to
`https://engine.yeti3.ru/`. Game credits receive a subtle periodic shine, keyboard
focus and reduced-motion support. Customer copyright is never removed.

Install `yeti3-site-branding==0.1.5` from the Engine SDK. Run
`yeti3-site-branding --sites sites.json --port 8099` behind same-origin
`/yeti3-branding/` and load `/yeti3-branding/branding.js` with `async`.
A single shared runtime serves enrolled HTTPS hosts only. It never retrieves
page URLs, browser cookies or credentials and has no application database.

QR contains the current public HTTPS URL, including public query and fragment.
History API, hash navigation and SPA remounts update it. Private/account/payment,
login and token-bearing URLs are excluded. The SDK reuses artistic QR 0.2.2;
existing QR widgets are replaced to prevent a second stale destination. Controls
expand in the visible footer flow (or a compact corner panel in fullscreen games), inherit each site's font and colors, and honor central
QR settings at GoChain. Animation runs only while expanded; reduced motion stops
it. Optional color, template, duration, transition and effect settings are the
existing `ui.page-qr` contract.

Attribution is required by default. Removal covers the project site and all its
games and requires a current central entitlement. Public read-only rights:
`GET /api/network/v1/observer/branding/public?host=example.ru`.
A failed lookup or expired right restores the credit. Client settings cannot grant
an exemption. GoChain operators use `/observer/branding` (GET/POST), with expiry,
optimistic previous-value check, reason and `network_audit` record. Non-operator
purchases of `branding` are cash only; FUN, earned tokens and bonuses are rejected.

Deployment: `deployment/site-branding`. The installer defaults to dry run,
preserves existing body filters, validates Nginx, backs up changed configs outside
sites-enabled and restores them if validation fails. Rollback uses the saved
manifest and the previous container/image. No database or volume cleanup.

Rekvio owns an exact static override for the SDK script. Use `sync_native_override.py`
to update it while retaining the native login-form and `?login` exclusions.
Search-page filters are installed before the existing no-op header filter.

The native YETI3 mascot QR retains its illustration and controls. Only the QR matrix
and current-page destination update; QR URLs are never treated as developer credits.
`page-state` carries rights independently of legacy QR rendering overrides.
