Files
zeekay dc7ffdb401 Each turn takes its own side, and Blue fits in someone else's hero
`.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.
2026-09-07 17:01:43 -07:00

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>
)
}