/* ── Custom element display + layout shell ──────────────────────────────────── */
/* Every page host below is switched to `display: flex` by its component, so its
root
is a flex item. `flex-direction: column` is therefore load-bearing
and not cosmetic: in the default `row`, a flex item is sized by its content,
so a page whose root div forgot `width: 100%` renders as a narrow column in
the middle of the workspace. Column direction makes the cross axis stretch,
which fills the width whatever the inner div declares. Never omit it. */
tasks-page {
display: none; /* toggled by JS */
flex-direction: column;
flex: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
border-right: 1px solid var(--toolbar-border, #e5e9f0);
}
llm-providers-page,
models-hub-page {
display: none; /* toggled by JS */
flex-direction: column;
flex: 1;
min-width: 0;
overflow-y: auto;
border-right: 1px solid var(--toolbar-border, #e5e9f0);
}
projects-page {
display: none; /* toggled by JS */
flex-direction: column;
flex: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
border-right: 1px solid var(--toolbar-border, #e5e9f0);
}
/* The three section multiplexers (`#tasks`, `#projects`, `#models`) render one
sub-section element at a time as their only child. Sized by descendant
selector rather than by naming each section: the enumeration was the bug —
`models-tts-section` was added to the hub and never listed here, so it fell
back to an inline element sized by its content and the page rendered narrow.
A new section now inherits the sizing by existing. */
tasks-page > *,
projects-page > *,
models-hub-page > * {
display: flex;
flex-direction: column;
flex: 1;
min-height: 0;
min-width: 0;
}
session-detail-page,
system-agents-page,
file-viewer-page,
tool-detail-page {
display: none; /* toggled by JS */
flex-direction: column;
flex: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
border-right: 1px solid var(--toolbar-border, #e5e9f0);
}
users-page,
roles-page,
shared-folders-page,
files-page,
connectors-page,
connector-detail-page,
plugin-catalog-page,
plugin-detail-page,
plugin-page-host,
marketplace-page,
profile-page {
display: none; /* toggled by JS */
flex-direction: column;
flex: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
border-right: 1px solid var(--toolbar-border, #e5e9f0);
}
/* Plugin-contributed page fragments mount inside the host with the `plugin-id`
attribute set — make them fill the host column (the host is `flex:1`, but a
bare custom element has no default sizing). Generic across all plugins. */
plugin-page-host > [plugin-id] {
display: flex;
flex-direction: column;
flex: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
}
/* ── Workspace placeholder ──────────────────────────────────────────────────── */
.app-workspace {
display: flex;
flex: 1;
min-width: 0;
align-items: center;
justify-content: center;
color: var(--placeholder-color, #94a3b8);
font-size: 0.9rem;
}