Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
1. App.tsx: add restoreSession() call on startup to prevent redirect to login page after refresh (isRestoring guard + BootstrapScreen) 2. CloneManager: call syncAgents() after loadClones() to restore currentAgent and conversation history on app load 3. zclaw-memory: add get_or_create_session() so frontend session UUID is persisted directly — kernel no longer creates mismatched IDs 4. openai.rs: assistant message content must be non-empty for Kimi/Qwen APIs — replace empty content with meaningful placeholders Also includes admin-v2 ModelServices unified page (merge providers + models + API keys into expandable row layout)
236 lines
6.1 KiB
CSS
236 lines
6.1 KiB
CSS
@import "tailwindcss";
|
|
|
|
/* ============================================================
|
|
ZCLAW Admin Design Tokens
|
|
DeerFlow-inspired warm neutral palette with brand accents
|
|
============================================================ */
|
|
|
|
@theme {
|
|
/* Brand Colors */
|
|
--color-brand-purple: #863bff;
|
|
--color-brand-blue: #47bfff;
|
|
--color-brand-gradient: linear-gradient(135deg, #863bff, #47bfff);
|
|
|
|
/* Neutral (warm stone palette) */
|
|
--color-neutral-50: #fafaf9;
|
|
--color-neutral-100: #f5f5f4;
|
|
--color-neutral-200: #e7e5e4;
|
|
--color-neutral-300: #d6d3d1;
|
|
--color-neutral-400: #a8a29e;
|
|
--color-neutral-500: #78716c;
|
|
--color-neutral-600: #57534e;
|
|
--color-neutral-700: #44403c;
|
|
--color-neutral-800: #292524;
|
|
--color-neutral-900: #1c1917;
|
|
--color-neutral-950: #0c0a09;
|
|
|
|
/* Semantic Colors */
|
|
--color-success: #22c55e;
|
|
--color-success-soft: #dcfce7;
|
|
--color-warning: #f59e0b;
|
|
--color-warning-soft: #fef3c7;
|
|
--color-error: #ef4444;
|
|
--color-error-soft: #fee2e2;
|
|
--color-info: #3b82f6;
|
|
--color-info-soft: #dbeafe;
|
|
|
|
/* Dark mode neutrals */
|
|
--color-dark-bg: #0c0a09;
|
|
--color-dark-surface: #1c1917;
|
|
--color-dark-card: #292524;
|
|
--color-dark-border: #44403c;
|
|
--color-dark-text: #fafaf9;
|
|
--color-dark-text-secondary: #a8a29e;
|
|
|
|
/* Spacing */
|
|
--spacing-sidebar-expanded: 16rem;
|
|
--spacing-sidebar-collapsed: 3rem;
|
|
--spacing-header-height: 3.5rem;
|
|
|
|
/* Border Radius */
|
|
--radius-sm: 6px;
|
|
--radius-md: 8px;
|
|
--radius-lg: 12px;
|
|
--radius-xl: 16px;
|
|
|
|
/* Shadows */
|
|
--shadow-card: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
|
|
--shadow-card-hover: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04);
|
|
--shadow-dropdown: 0 4px 16px rgba(0, 0, 0, 0.12);
|
|
--shadow-modal: 0 8px 32px rgba(0, 0, 0, 0.16);
|
|
|
|
/* Typography */
|
|
--font-sans: "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;
|
|
--font-mono: "JetBrains Mono", ui-monospace, monospace;
|
|
|
|
/* Transitions */
|
|
--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
--transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
--transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
/* ============================================================
|
|
Base Styles
|
|
============================================================ */
|
|
|
|
html {
|
|
font-family: var(--font-sans);
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
background-color: var(--color-neutral-50);
|
|
color: var(--color-neutral-900);
|
|
transition: background-color var(--transition-normal), color var(--transition-normal);
|
|
}
|
|
|
|
/* Dark mode overrides */
|
|
html.dark body {
|
|
background-color: var(--color-dark-bg);
|
|
color: var(--color-dark-text);
|
|
}
|
|
|
|
/* Scrollbar styling */
|
|
::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background-color: var(--color-neutral-300);
|
|
border-radius: 3px;
|
|
}
|
|
|
|
html.dark ::-webkit-scrollbar-thumb {
|
|
background-color: var(--color-dark-border);
|
|
}
|
|
|
|
/* Focus visible */
|
|
:focus-visible {
|
|
outline: 2px solid var(--color-brand-purple);
|
|
outline-offset: 2px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
/* Skip to content (accessibility) */
|
|
.skip-to-content {
|
|
position: absolute;
|
|
top: -100%;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
z-index: 9999;
|
|
padding: 8px 16px;
|
|
background: var(--color-brand-purple);
|
|
color: white;
|
|
border-radius: var(--radius-md);
|
|
font-size: 14px;
|
|
text-decoration: none;
|
|
transition: top var(--transition-fast);
|
|
}
|
|
|
|
.skip-to-content:focus {
|
|
top: 8px;
|
|
}
|
|
|
|
/* ============================================================
|
|
Ant Design Overrides (Light Mode)
|
|
============================================================ */
|
|
|
|
/* ProTable search area */
|
|
.ant-pro-table-search {
|
|
background-color: var(--color-neutral-50) !important;
|
|
border-bottom: 1px solid var(--color-neutral-200) !important;
|
|
}
|
|
|
|
/* Card styling */
|
|
.ant-card {
|
|
border-radius: var(--radius-lg) !important;
|
|
border: 1px solid var(--color-neutral-200) !important;
|
|
box-shadow: var(--shadow-card) !important;
|
|
}
|
|
|
|
.ant-card:hover {
|
|
box-shadow: var(--shadow-card-hover) !important;
|
|
}
|
|
|
|
/* Table styling */
|
|
.ant-table-wrapper .ant-table-thead > tr > th {
|
|
background-color: var(--color-neutral-50) !important;
|
|
font-weight: 600 !important;
|
|
color: var(--color-neutral-600) !important;
|
|
}
|
|
|
|
/* Modal styling */
|
|
.ant-modal .ant-modal-content {
|
|
border-radius: var(--radius-lg) !important;
|
|
}
|
|
|
|
/* Tag pill style */
|
|
.ant-tag {
|
|
border-radius: 9999px !important;
|
|
padding: 0 8px !important;
|
|
}
|
|
|
|
/* Form item */
|
|
.ant-form-item-label > label {
|
|
font-weight: 500 !important;
|
|
color: var(--color-neutral-700) !important;
|
|
}
|
|
|
|
/* ============================================================
|
|
Dark Mode — Ant Design Overrides
|
|
============================================================ */
|
|
|
|
html.dark .ant-card {
|
|
background-color: var(--color-dark-card) !important;
|
|
border-color: var(--color-dark-border) !important;
|
|
}
|
|
|
|
html.dark .ant-table-wrapper .ant-table-thead > tr > th {
|
|
background-color: var(--color-dark-surface) !important;
|
|
color: var(--color-dark-text-secondary) !important;
|
|
}
|
|
|
|
html.dark .ant-table-wrapper .ant-table-tbody > tr > td {
|
|
border-color: var(--color-dark-border) !important;
|
|
}
|
|
|
|
html.dark .ant-table-wrapper .ant-table-tbody > tr:hover > td {
|
|
background-color: rgba(134, 59, 255, 0.06) !important;
|
|
}
|
|
|
|
html.dark .ant-modal .ant-modal-content {
|
|
background-color: var(--color-dark-card) !important;
|
|
}
|
|
|
|
html.dark .ant-modal .ant-modal-header {
|
|
background-color: var(--color-dark-card) !important;
|
|
}
|
|
|
|
html.dark .ant-drawer .ant-drawer-content {
|
|
background-color: var(--color-dark-surface) !important;
|
|
}
|
|
|
|
html.dark .ant-form-item-label > label {
|
|
color: var(--color-dark-text-secondary) !important;
|
|
}
|
|
|
|
html.dark .ant-select-selector,
|
|
html.dark .ant-input,
|
|
html.dark .ant-input-number {
|
|
background-color: var(--color-dark-card) !important;
|
|
border-color: var(--color-dark-border) !important;
|
|
color: var(--color-dark-text) !important;
|
|
}
|
|
|
|
html.dark .ant-pro-table-search {
|
|
background-color: var(--color-dark-surface) !important;
|
|
border-color: var(--color-dark-border) !important;
|
|
}
|