scroll # Thing Lens — the morphing Thing Page (Day382) The design for `/thing/...` — a single,host-aware Thing view that **takes on the lookfrom whence you came**. Not a page type percontent kind; a **lens** that re-skins thesame Thing data to the character of the worldit's opened from. Companion to[[Impress-To-Feed.00382]],[[Portal-Awakens.00382]]; supersedes the bare`/video/:id` takeover page as the *in-shell*path. ## The core idea: facets, not page typesA Thing is a **bundle of facets** — text,pixels (images), video, 3D — that coexist onthe same Thing. The lens never strips facets;it **orders** them. - A **video** Thingcarries a text facet (subtitles / transcript— the next move). Under `spectraglyph` theplayer leads and the subtitle text sits withit. Under `gnosis` the *same Thing* leads withthe transcript and offers the video as asecondary facet. - A **gnosis / grimoire**entry carries pixels + video facets. Textleads (reading layout), but the hi-res imagesand video are first-class inside it, notremoved. So `/thing/video/`, `/thing/pixels`,`/thing/3D`, `/thing/2D` are **facet queries**("Things where this facet ispresent/primary"), not separate pageimplementations. `/thing/` = all things forthe host's scope. `/thing/<uuid>` = one Thing,opened in-place, led by the host's declaredemphasis. ## It must not destroy the page Thelens **renders inside the host's normalshell** — whatever `serve_dynamic_root`would already serve for that host: | Host |Shell it inherits | Default emphasis ||---|---|---| | `spectraglyph.*` | world feed(media) | `[video, pixels, text]` | |`<being>.*` | being page (general) | mixed /most things | | `gnosis.* / grimoire.*` |world feed (reading) | `[text, pixels, video]`| `/thing/...` only tells the live shell *whatto surface* (a category feed, or one Thingopened in a pane/lightbox). The page behind itstays intact — no fresh `<!DOCTYPE>`takeover. This reuses the chip architecture(`world-feed.js` / `being-profile.js` +per-domain theme via `/api/domains/:host` +`/api/palette`), not a one-off server-renderedpage. ## Emphasis is DECLARED, not hardcodedThe per-world lead order lives as a **gem onthe world Thing** (`sapphire=world`) — anemphasis order like `[video, text, pixels]`.The lens reads *which facets exist* on theThing and orders them by the world's declaredemphasis. Adding a new world = declaring itsorder in a gem; the lens follows for free. No`match` in Rust, same direction as making`WORLD_SUBDOMAINS` DB-driven (world-feedplan). Decision (Hex, Day 382): **declared.**First cut may seed the orders, but the sourceof truth is the world Thing's gem. ## Whatthis implies for the schema 1. **Facets livein gems.** Subtitles are a text facet on thevideo Thing (a `pearl`/text gem alongside`citrine.path`), discoverable by the lens.Pixels/3D facets likewise carry their owngem-addressed payload/pointer. 2. **Emphasisorder = a gem on the world Thing** (name TBDat build time, e.g. `ruby.lens_emphasis` or acitrine facet — settle against gem canon).3. **`/thing/<uuid>` with no facet** → leadwith the world's declared emphasis;**`/thing/<facet>/<uuid>`** → force thatfacet to lead. ## Build order (see spiral gap)1. Map the gem names: where the emphasis orderlives on the world Thing; where thetext/subtitle facet lives on a video Thing. 2.`/thing/` route family — in-shell,host-aware, category = facet query over`/api/things`. 3. Single-Thing in-place open(pane/lightbox) — keep bare `/video/:id` asthe raw/embeddable endpoint;`/thing/video/:id` is the in-shell one. 4.Declared-emphasis read from the world Thinggem. 5. Later: subtitles authoring + render asthe first real cross-facet case.