Add a full-featured gateway dashboard UI built on Lit web components. Shell & plumbing: - App shell with router, controllers, and dependency wiring - Login gate, i18n keys, and base layout scaffolding Styles & theming: - Base styles, chat styles, and responsive layout CSS - 6-theme glassmorphism system (Obsidian, Aurora, Solar, etc.) - Glass card, glass panel, and glass input components - Favicon logo in expanded sidebar header Views & features: - Overview with attention cards, event log, quick actions, and log tail - Chat view with markdown rendering, tool-call collapse, and delete support - Command palette with fuzzy search - Agent overview with config display, slash commands, and sidebar filtering - Session list navigation and agent selector Privacy & polish: - Redact toggle with stream-mode default - Blur host/IP in Connected Instances with reveal toggle - Sensitive config value masking with count badge - Card accent borders, hover lift effects, and responsive grid
392 lines
5.3 KiB
CSS
392 lines
5.3 KiB
CSS
/* ===========================================
|
|
Mobile Layout
|
|
=========================================== */
|
|
|
|
/* Tablet: Horizontal nav */
|
|
@media (max-width: 1100px) {
|
|
.sidebar {
|
|
flex-direction: row;
|
|
flex-wrap: nowrap;
|
|
border-right: none;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
|
|
.sidebar-header {
|
|
display: none;
|
|
}
|
|
|
|
.sidebar-footer {
|
|
display: none;
|
|
}
|
|
|
|
.sidebar-nav {
|
|
display: flex;
|
|
flex-direction: row;
|
|
flex-wrap: nowrap;
|
|
gap: 4px;
|
|
padding: 10px 14px;
|
|
overflow-x: auto;
|
|
-webkit-overflow-scrolling: touch;
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
.sidebar-nav::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
|
|
.nav-group {
|
|
display: contents;
|
|
}
|
|
|
|
.nav-group__items {
|
|
display: contents;
|
|
}
|
|
|
|
.nav-group__label {
|
|
display: none;
|
|
}
|
|
|
|
.nav-group--collapsed .nav-group__items {
|
|
display: contents;
|
|
}
|
|
|
|
.nav-item {
|
|
padding: 8px 14px;
|
|
font-size: 13px;
|
|
border-radius: var(--radius-md);
|
|
white-space: nowrap;
|
|
flex-shrink: 0;
|
|
}
|
|
}
|
|
|
|
/* Mobile-specific styles */
|
|
@media (max-width: 600px) {
|
|
.shell {
|
|
--shell-pad: 8px;
|
|
--shell-gap: 8px;
|
|
}
|
|
|
|
/* Topbar */
|
|
.topbar {
|
|
padding: 10px 12px;
|
|
gap: 8px;
|
|
flex-direction: row;
|
|
flex-wrap: nowrap;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
}
|
|
|
|
.sidebar-brand__title {
|
|
font-size: 14px;
|
|
}
|
|
|
|
.dashboard-header__breadcrumb-link,
|
|
.dashboard-header__breadcrumb-sep {
|
|
display: none;
|
|
}
|
|
|
|
.topbar-search {
|
|
min-width: 0;
|
|
max-width: none;
|
|
flex: 1;
|
|
}
|
|
|
|
.topbar-search__label {
|
|
display: none;
|
|
}
|
|
|
|
.topbar-search__kbd {
|
|
display: none;
|
|
}
|
|
|
|
.topbar-connection__label {
|
|
display: none;
|
|
}
|
|
|
|
.topbar-divider {
|
|
display: none;
|
|
}
|
|
|
|
.topbar-status {
|
|
gap: 6px;
|
|
flex-wrap: nowrap;
|
|
}
|
|
|
|
/* Nav */
|
|
.sidebar-nav {
|
|
padding: 8px 10px;
|
|
gap: 4px;
|
|
-webkit-overflow-scrolling: touch;
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
.sidebar-nav::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
|
|
.nav-group {
|
|
display: contents;
|
|
}
|
|
|
|
.nav-group__label {
|
|
display: none;
|
|
}
|
|
|
|
.nav-item {
|
|
padding: 6px 10px;
|
|
font-size: 12px;
|
|
border-radius: var(--radius-md);
|
|
white-space: nowrap;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
/* Content */
|
|
.content-header {
|
|
display: none;
|
|
}
|
|
|
|
.content {
|
|
padding: 4px 4px 16px;
|
|
gap: 12px;
|
|
}
|
|
|
|
/* Cards */
|
|
.card {
|
|
padding: 12px;
|
|
border-radius: var(--radius-md);
|
|
}
|
|
|
|
.card-title {
|
|
font-size: 13px;
|
|
}
|
|
|
|
/* Stats */
|
|
.stat-grid {
|
|
gap: 8px;
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
|
|
.stat {
|
|
padding: 10px;
|
|
border-radius: var(--radius-md);
|
|
}
|
|
|
|
.stat-label {
|
|
font-size: 11px;
|
|
}
|
|
|
|
.stat-value {
|
|
font-size: 18px;
|
|
}
|
|
|
|
/* Notes */
|
|
.note-grid {
|
|
grid-template-columns: 1fr;
|
|
gap: 8px;
|
|
}
|
|
|
|
/* Forms */
|
|
.form-grid {
|
|
grid-template-columns: 1fr;
|
|
gap: 10px;
|
|
}
|
|
|
|
.field input,
|
|
.field textarea,
|
|
.field select {
|
|
padding: 8px 10px;
|
|
border-radius: var(--radius-md);
|
|
font-size: 14px;
|
|
}
|
|
|
|
/* Buttons */
|
|
.btn {
|
|
padding: 8px 12px;
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* Pills */
|
|
.pill {
|
|
padding: 4px 10px;
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* Chat */
|
|
.chat-header {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
gap: 8px;
|
|
}
|
|
|
|
.chat-header__left {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
}
|
|
|
|
.chat-header__right {
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.chat-session {
|
|
min-width: unset;
|
|
width: 100%;
|
|
}
|
|
|
|
.chat-thread {
|
|
margin-top: 8px;
|
|
padding: 12px 8px;
|
|
}
|
|
|
|
.chat-msg {
|
|
max-width: 90%;
|
|
}
|
|
|
|
.chat-bubble {
|
|
padding: 8px 12px;
|
|
border-radius: var(--radius-md);
|
|
}
|
|
|
|
.chat-compose {
|
|
gap: 8px;
|
|
}
|
|
|
|
.chat-compose__field textarea {
|
|
min-height: 60px;
|
|
padding: 8px 10px;
|
|
border-radius: var(--radius-md);
|
|
font-size: 14px;
|
|
}
|
|
|
|
/* Log stream */
|
|
.log-stream {
|
|
border-radius: var(--radius-md);
|
|
max-height: 380px;
|
|
}
|
|
|
|
.log-row {
|
|
grid-template-columns: 1fr;
|
|
gap: 4px;
|
|
padding: 8px;
|
|
}
|
|
|
|
.log-time {
|
|
font-size: 10px;
|
|
}
|
|
|
|
.log-level {
|
|
font-size: 9px;
|
|
}
|
|
|
|
.log-subsystem {
|
|
font-size: 11px;
|
|
}
|
|
|
|
.log-message {
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* Lists */
|
|
.list-item {
|
|
padding: 10px;
|
|
border-radius: var(--radius-md);
|
|
}
|
|
|
|
.list-title {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.list-sub {
|
|
font-size: 11px;
|
|
}
|
|
|
|
/* Code blocks */
|
|
.code-block {
|
|
padding: 8px;
|
|
border-radius: var(--radius-md);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.theme-toggle {
|
|
height: 28px;
|
|
}
|
|
|
|
.theme-btn svg {
|
|
width: 12px;
|
|
height: 12px;
|
|
}
|
|
|
|
.theme-icon {
|
|
width: 12px;
|
|
height: 12px;
|
|
}
|
|
}
|
|
|
|
/* Small mobile */
|
|
@media (max-width: 400px) {
|
|
.shell {
|
|
--shell-pad: 4px;
|
|
}
|
|
|
|
.topbar {
|
|
padding: 8px 10px;
|
|
}
|
|
|
|
.sidebar-brand__title {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.sidebar-nav {
|
|
padding: 6px 8px;
|
|
}
|
|
|
|
.nav-item {
|
|
padding: 6px 8px;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.content {
|
|
padding: 4px 4px 12px;
|
|
gap: 10px;
|
|
}
|
|
|
|
.card {
|
|
padding: 10px;
|
|
}
|
|
|
|
.stat {
|
|
padding: 8px;
|
|
}
|
|
|
|
.stat-value {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.chat-bubble {
|
|
padding: 8px 10px;
|
|
}
|
|
|
|
.chat-compose__field textarea {
|
|
min-height: 52px;
|
|
padding: 8px 10px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.btn {
|
|
padding: 6px 10px;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.topbar-connection {
|
|
padding: 3px 6px;
|
|
}
|
|
|
|
.theme-toggle {
|
|
height: 26px;
|
|
}
|
|
|
|
.theme-icon {
|
|
width: 11px;
|
|
height: 11px;
|
|
}
|
|
}
|