@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; }