v4's arrangement, which is the one that reads as an editor: a zone head holds what acts on THAT zone, so the app grows a bar of its own for what acts on the app. * The menu bar. Brand, View and Settings, and whether ComfyUI is still on the other end. Only menus with something real in them exist -- an empty File menu is a promise the app does not keep. * The prompt is written in the CONSTRUCTOR, a window. v4 called this the Composer; that name is taken here by the element kit, and two things called Composer in one repo is one thing nobody can search for. It is the longest thing a person writes and the least often read, and a permanent third of the centre column is the room the timeline needs. The host is built at startup and outlives every opening, so a window that opens twice does not throw away what was typed. * The timeline replaces it, and Generate moves into its head with what the run is doing at the far end of the same head. No bar across the bottom: one that spans the window belongs to no region. Four faults found on the way, three of them mine and one much older: * THE OVERLAY ROOT WAS A STACKING CONTEXT. It documents at length that it must never be one -- and then set `position: fixed`, which makes one on its own. So the whole z ladder was measured inside that single element: an open menu at z 500 painted UNDER a button at z 1. Every overlay in the app was one positive z-index away from being buried, and the only reason nobody had seen it is that almost nothing claims a z-index. The root is static and zero-sized now; every layer in it is fixed already. * Generate's hover ran `filter: brightness()`, which lightens the LABEL along with the fill under it -- the one thing that had to stay readable lost contrast in both themes. Only the fill moves now, and which way it moves depends on the theme: dark's accent carries near-black text so it goes lighter, light's carries white so it goes darker. Measured: no gradient stop under 4.1:1, hovered or at rest. * A fixed-height head could not shrink below the width of everything in it, and a head now holds a title, three controls and a status. That min-content became the centre column's, so a 768px window laid out 878px wide and scrolled sideways. It wraps now, as v4's does. * A CSS patch of mine silently did nothing because its anchor text had moved and I had left the assertion off that one replacement. Every patch asserts now.
45 lines
2.1 KiB
CSS
45 lines
2.1 KiB
CSS
.cx-h { font-family: var(--font-display); font-weight: var(--fw-semibold); color: var(--text); }
|
|
.cx-h-display { font-size: var(--fs-d2); line-height: var(--lh-d2); font-weight: var(--fw-bold); letter-spacing: -0.02em; }
|
|
.cx-h-xl { font-size: var(--fs-d3); line-height: var(--lh-d3); font-weight: var(--fw-bold); letter-spacing: -0.015em; }
|
|
.cx-h-lg { font-size: var(--fs-1); line-height: var(--lh-1); }
|
|
.cx-h-md { font-size: var(--fs-2); line-height: var(--lh-2); }
|
|
.cx-h-sm { font-size: var(--fs-3); line-height: var(--lh-3); }
|
|
|
|
.cx-t { color: var(--text); }
|
|
.cx-t-lg { font-size: var(--fs-2); line-height: var(--lh-2); }
|
|
.cx-t-md { font-size: var(--fs-3); line-height: var(--lh-3); }
|
|
.cx-t-sm { font-size: var(--fs-4); line-height: var(--lh-4); }
|
|
.cx-t-xs { font-size: var(--fs-6); line-height: var(--lh-6); }
|
|
|
|
.cx-hint { font-size: var(--fs-6); line-height: var(--lh-6); color: var(--muted); }
|
|
|
|
.cx-label { font-size: var(--fs-5); line-height: var(--lh-5); color: var(--text); }
|
|
|
|
.cx-eyebrow {
|
|
font-size: var(--fs-7); line-height: var(--lh-7);
|
|
letter-spacing: .08em; text-transform: uppercase;
|
|
color: var(--faint);
|
|
}
|
|
|
|
.cx-code { font-family: var(--font-mono); font-size: 0.92em; color: var(--accent-hi); }
|
|
.cx-code-block {
|
|
font-family: var(--font-mono); font-size: var(--fs-6); line-height: var(--lh-snug);
|
|
color: var(--text); background: var(--elev-2);
|
|
border: var(--bw) solid var(--line); border-radius: var(--r-3);
|
|
padding: var(--sp-4) var(--sp-5); margin: 0;
|
|
overflow-x: auto; /* wide code scrolls itself, never the page */
|
|
}
|
|
|
|
/* The one place the app names itself. The mark carries a little of its own
|
|
light, which is what stops a 5px dot reading as a bullet point. */
|
|
.cx-brand { display: inline-flex; align-items: center; gap: var(--sp-3); }
|
|
.cx-brand-mark {
|
|
inline-size: 9px; block-size: 9px; border-radius: var(--r-pill);
|
|
border: 2px solid var(--accent);
|
|
box-shadow: 0 0 6px var(--accent-soft);
|
|
}
|
|
.cx-brand-name {
|
|
font-family: var(--font-display); font-weight: var(--fw-bold);
|
|
font-size: var(--fs-3); letter-spacing: .2px; color: var(--text);
|
|
}
|