mirror of
https://github.com/zoo-apps/zoolabs.io.git
synced 2026-10-30 14:56:27 +00:00
`.deep-said` had neither an align-self nor a max-width, so in a column flexbox Blue's answers stretched the whole thread while the reader's questions hugged the right. One voice as a wall of text and the other as a bubble does not read as two people talking. Both are pinned now — Blue hard left, the reader hard right, each stopping short of the far edge — so the shape of an exchange is legible before a word of it is. The rest is one page in two rooms rather than two Blues. `?embed` drops the chrome the host already draws — its header, and the appearance panel, which is not ours to offer to someone reading their page — and puts one thing in its place: Open Blue, at the top of the window, carrying the question already asked. `?q` is the other half of that: a question asked anywhere is answered here on arrival instead of being forgotten at the door. Both are read from location after mount, because the site is a static export and the query is not a build-time fact. The door itself is unchanged and still free: anyone can talk to Blue without an account, and the sign-in that continues the conversation in the lab is where it always was.
31 lines
1.1 KiB
TypeScript
31 lines
1.1 KiB
TypeScript
import type { AppProps } from 'next/app'
|
|
import { GuiProvider } from '@hanzo/gui'
|
|
import config from '../lib/gui'
|
|
import { useArrival } from '../lib/arrival'
|
|
import Look from '../components/Look'
|
|
|
|
import '../styles/globals.css'
|
|
import '../styles/gui.css'
|
|
|
|
/**
|
|
* `disableInjectCSS`, because `gui.css` above IS the sheet — generated from the
|
|
* same config by `scripts/gui-css.mjs`. Left to inject, the runtime writes the
|
|
* whole accumulated sheet on every flush and the page ships several copies.
|
|
*
|
|
* The site has one appearance, so the theme is stated here and there is nothing
|
|
* to resolve at run time.
|
|
*/
|
|
export default function App({ Component, pageProps }: AppProps) {
|
|
const { embedded } = useArrival()
|
|
return (
|
|
<GuiProvider config={config} defaultTheme="light" disableInjectCSS>
|
|
<Component {...pageProps} />
|
|
{/* Site chrome, so it is here and not on each page: every route gets the
|
|
one control over how it reads — except in someone else's hero, where
|
|
the reader is reading THEIR page and this control is not ours to
|
|
offer. */}
|
|
{!embedded && <Look />}
|
|
</GuiProvider>
|
|
)
|
|
}
|