:root { --panel-bg: rgba(8, 18, 38, 0.68); --panel-bg-strong: rgba(8, 20, 44, 0.88); --panel-border: rgba(103, 232, 249, 0.24); --panel-border-strong: rgba(34, 211, 238, 0.72); --panel-radius: 18px; --panel-blur: 18px; --panel-shadow: 0 18px 50px rgba(2, 8, 23, 0.48); --glow-cyan: #22d3ee; --glow-blue: #3b82f6; --glow-violet: #8b5cf6; --text-primary: #e6f7ff; --text-secondary: rgba(226, 242, 255, 0.68); --grid-line: rgba(56, 189, 248, 0.08); } html, body, #root { height: 100%; } body { margin: 0; overflow: hidden; color: var(--text-primary); font-family: Inter, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; background: radial-gradient(circle at 12% 8%, rgba(34, 211, 238, 0.2), transparent 30%), radial-gradient(circle at 88% 2%, rgba(139, 92, 246, 0.2), transparent 32%), linear-gradient(135deg, #020617, #071120 48%, #0f172a); } body::before, body::after { content: ""; position: fixed; inset: 0; pointer-events: none; } body::before { z-index: 0; background-image: linear-gradient(var(--grid-line) 1px, transparent 1px), linear-gradient(90deg, var(--grid-line) 1px, transparent 1px); background-size: 36px 36px; mask-image: linear-gradient(to bottom, black, transparent 88%); } body::after { z-index: 0; background: radial-gradient(circle at 50% 78%, rgba(59, 130, 246, 0.14), transparent 36%); animation: aurora 28s ease-in-out infinite alternate; } @keyframes aurora { from { transform: translate3d(-1.5%, 0, 0) scale(1); } to { transform: translate3d(1.5%, -2%, 1.04); } } .ant-layout, .ant-layout-has-sider { background: transparent !important; } .glass-header { display: flex; align-items: center; justify-content: space-between; height: 64px; padding: 0 20px; background: rgba(4, 13, 30, 0.72) !important; border-bottom: 1px solid rgba(103, 232, 249, 0.2); box-shadow: 0 12px 34px rgba(2, 8, 23, 0.38); backdrop-filter: blur(18px); } .brand-block { display: flex; align-items: center; gap: 12px; min-width: 0; } .brand-block img { width: 40px; height: 40px; object-fit: contain; filter: drop-shadow(0 0 12px rgba(34, 211, 238, 0.75)); } .brand-title { margin: 0; overflow: hidden; color: var(--text-primary); font-size: 20px; font-weight: 700; letter-spacing: 0.04em; text-overflow: ellipsis; white-space: nowrap; text-shadow: 0 0 18px rgba(34, 211, 238, 0.38); } .user-chip { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border: 1px solid rgba(103, 232, 249, 0.22); border-radius: 999px; background: rgba(255, 255, 255, 0.06); cursor: pointer; transition: border-color 0.25s ease, box-shadow 0.25s ease; } .user-chip:hover { border-color: rgba(34, 211, 238, 0.7); box-shadow: 0 0 22px rgba(34, 211, 238, 0.16); } .user-chip .ant-avatar { border: 1px solid rgba(103, 232, 249, 0.45); } .user-name { color: var(--text-primary); font-size: 14px; } .glass-sider { background: rgba(4, 13, 30, 0.58) !important; border-right: 1px solid rgba(103, 232, 249, 0.16); backdrop-filter: blur(16px); } .glass-sider .ant-menu { padding: 10px 8px; background: transparent !important; border-inline-end: 0 !important; } .glass-sider .ant-menu-item, .glass-sider .ant-menu-submenu-title { height: 42px; margin-inline: 0; border-radius: 12px; color: rgba(230, 247, 255, 0.76); } .glass-sider .ant-menu-item:hover, .glass-sider .ant-menu-submenu-title:hover { color: #a5f3fc !important; background: rgba(34, 211, 238, 0.1) !important; } .glass-sider .ant-menu-item-selected { color: #ecfeff !important; background: linear-gradient(90deg, rgba(34, 211, 238, 0.28), rgba(139, 92, 246, 0.18)) !important; box-shadow: inset 0 0 0 1px rgba(103, 232, 249, 0.35), 0 0 20px rgba(34, 211, 238, 0.14); } .glass-sider .ant-menu-submenu-selected > .ant-menu-submenu-title { color: #a5f3fc; } .panel-content { position: relative; z-index: 1; height: calc(100vh - 64px - 36px); overflow: auto; background: transparent; } .glass-footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; height: 36px; padding: 0 16px; color: var(--text-secondary); background: rgba(4, 13, 30, 0.7); border-top: 1px solid rgba(103, 232, 249, 0.18); backdrop-filter: blur(16px); } .glass-footer a { color: #67e8f9; text-decoration: none; } .glass-footer a:hover { color: #cffafe; text-shadow: 0 0 12px rgba(34, 211, 238, 0.75); } .footer-group { display: flex; align-items: center; gap: 14px; min-width: 0; } .ant-card { color: var(--text-primary); border: 1px solid var(--panel-border); border-radius: var(--panel-radius); background: linear-gradient(145deg, rgba(255, 255, 255, 0.08), var(--panel-bg) 42%, rgba(255, 255, 255, 0.03)); box-shadow: var(--panel-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.08); backdrop-filter: blur(var(--panel-blur)); overflow: hidden; } .ant-card-head { min-height: 48px; color: var(--text-primary); background: rgba(34, 211, 238, 0.06); border-bottom: 1px solid rgba(103, 232, 249, 0.16); } .ant-card-head-title, .ant-card-extra { color: var(--text-primary); } .ant-card-body { position: relative; z-index: 1; } .ant-table { color: var(--text-primary); background: transparent; } .ant-table-thead > tr > th { color: #cffafe !important; background: rgba(34, 211, 238, 0.1) !important; border-bottom-color: rgba(103, 232, 249, 0.2) !important; } .ant-table-tbody > tr > td, .ant-table-summary > tr > th, .ant-table-summary > tr > td { color: var(--text-primary) !important; background: transparent !important; border-bottom-color: rgba(103, 232, 249, 0.12) !important; } .ant-table-tbody > tr.ant-table-row:hover > td { background: rgba(34, 211, 238, 0.08) !important; } .ant-pagination .ant-pagination-item, .ant-pagination .ant-pagination-prev .ant-pagination-item-link, .ant-pagination .ant-pagination-next .ant-pagination-item-link { color: #a5f3fc; border-color: rgba(103, 232, 249, 0.25); background: rgba(255, 255, 255, 0.04); } .ant-pagination .ant-pagination-item-active { border-color: var(--panel-border-strong); box-shadow: 0 0 14px rgba(34, 211, 238, 0.16); } .ant-pagination .ant-pagination-item-ellipsis, .ant-pagination .ant-pagination-jump-prev .ant-pagination-item-link-icon, .ant-pagination .ant-pagination-jump-next .ant-pagination-item-link-icon { color: #a5f3fc !important; text-shadow: none !important; } .ant-descriptions .ant-descriptions-item-label, .ant-descriptions .ant-descriptions-item-content { color: var(--text-primary); background: transparent; } .ant-descriptions .ant-descriptions-view, .ant-descriptions .ant-descriptions-row > th, .ant-descriptions .ant-descriptions-row > td { border-color: rgba(103, 232, 249, 0.14); } .ant-btn-primary { border: 0; background: linear-gradient(135deg, #0891b2, #2563eb 52%, #7c3aed); box-shadow: 0 10px 24px rgba(37, 99, 235, 0.28); } .ant-btn-primary:hover, .ant-btn-primary:focus { background: linear-gradient(135deg, #06b6d4, #3b82f6 52%, #8b5cf6) !important; box-shadow: 0 0 26px rgba(34, 211, 238, 0.26) !important; } .ant-btn-default { color: #a5f3fc; border-color: rgba(103, 232, 249, 0.28); background: rgba(255, 255, 255, 0.04); } .ant-btn-default:hover { color: #cffafe !important; border-color: rgba(34, 211, 238, 0.7) !important; } .ant-tag { border-color: rgba(103, 232, 249, 0.28); background: rgba(34, 211, 238, 0.1); } .ant-modal-content, .ant-drawer-content { color: var(--text-primary); border: 1px solid var(--panel-border); background: var(--panel-bg-strong); backdrop-filter: blur(20px); } .ant-modal-header, .ant-drawer-header, .ant-modal-footer { color: var(--text-primary); background: transparent; } .ant-modal-title, .ant-drawer-title, .ant-drawer-header-title, .ant-drawer-close, .ant-modal-close { color: var(--text-primary); } .ant-select-dropdown { color: var(--text-primary); border: 1px solid var(--panel-border); background: var(--panel-bg-strong); backdrop-filter: blur(18px); } .ant-select-item { color: var(--text-primary); } .ant-select-item-option-active, .ant-select-item-option-selected { background: rgba(34, 211, 238, 0.16) !important; } .ant-spin-dot-item { background-color: #67e8f9; } :focus-visible { outline: 2px solid rgba(103, 232, 249, 0.85); outline-offset: 2px; } @media (max-width: 768px) { .glass-header { padding: 0 12px; } .brand-title { display: none; } .footer-group { gap: 8px; } .footer-hide-sm { display: none; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: 0.01ms !important; } } /* Dark-theme fallback: prevent component library default white surfaces from showing inside dark panels. */ #root .ant-card, #root .ant-table, #root .ant-descriptions-view, #root .ant-modal-content, #root .ant-drawer-content, #root .ant-select-dropdown, #root .ant-picker-dropdown .ant-picker-panel-container, #root .ant-popover-inner, #root .ant-collapse, #root .ant-list, #root .ant-pagination .ant-pagination-item, #root .ant-pagination .ant-pagination-item-link { color: #e6f7ff; } #root .ant-table, #root .ant-descriptions-view, #root .ant-modal-content, #root .ant-drawer-content, #root .ant-select-dropdown, #root .ant-picker-dropdown .ant-picker-panel-container, #root .ant-popover-inner, #root .ant-collapse { background-color: rgba(7, 18, 39, 0.9); } #root .ant-table-cell { background-color: transparent; color: #e6f7ff; } #root .ant-picker, #root .ant-input, #root .ant-input-affix-wrapper, #root .ant-select-selector, #root .ant-input-number, #root .ant-btn-default { color: #e6f7ff; } #root .ant-descriptions-item-label, #root .ant-descriptions-item-content, #root .ant-form-item, #root .ant-list-item, #root .ant-select-selection-item, #root .ant-select-selection-placeholder, #root .ant-picker-input > input { color: inherit; } #root .ant-empty-description, #root .ant-typography, #root .ant-modal .ant-modal-title, #root .ant-drawer .ant-drawer-title { color: #e6f7ff; } /* Dark panel contrast hardening: alerts, status tags and auxiliary controls */ .ant-alert { color: var(--text-primary); border-color: rgba(103, 232, 249, 0.24); background: linear-gradient(135deg, rgba(15, 35, 66, 0.88), rgba(7, 18, 39, 0.9)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06); } .ant-alert-message, .ant-alert-description { color: var(--text-primary) !important; } .ant-alert-icon { color: #67e8f9 !important; } .ant-alert.ant-alert-warning { border-color: rgba(251, 191, 36, 0.32); background: linear-gradient(135deg, rgba(67, 48, 12, 0.86), rgba(28, 24, 12, 0.9)); } .ant-alert.ant-alert-warning .ant-alert-icon { color: #fbbf24 !important; } .ant-tag-green, .ant-tag-cyan, .ant-tag-blue, .ant-tag-gold, .ant-tag-orange, .ant-tag-red, .ant-tag-purple, .ant-tag-magenta { color: #dffbff; border-color: rgba(103, 232, 249, 0.28); background: rgba(34, 211, 238, 0.14); } .ant-tag-green { color: #bbf7d0; border-color: rgba(74, 222, 128, 0.32); background: rgba(34, 197, 94, 0.15); } .ant-tag-cyan { color: #a5f3fc; border-color: rgba(34, 211, 238, 0.36); background: rgba(8, 145, 178, 0.18); } .ant-tag-blue { color: #bfdbfe; border-color: rgba(96, 165, 250, 0.34); background: rgba(37, 99, 235, 0.18); } .ant-tag-gold, .ant-tag-orange { color: #fde68a; border-color: rgba(251, 191, 36, 0.34); background: rgba(217, 119, 6, 0.18); } .ant-tag-red { color: #fecdd3; border-color: rgba(251, 113, 133, 0.34); background: rgba(225, 29, 72, 0.18); } .ant-tag-purple { color: #ddd6fe; border-color: rgba(167, 139, 250, 0.34); background: rgba(124, 58, 237, 0.18); } .ant-select-arrow, .ant-select-suffix .anticon, .ant-input-password-icon, .ant-input-suffix .anticon, .ant-input-clear-icon { color: #a5f3fc !important; } .ant-input-number-handler, .ant-input-number-handler-up-inner, .ant-input-number-handler-down-inner { color: #a5f3fc !important; background: rgba(14, 30, 56, 0.92); } .ant-form-item-extra, .ant-form-item-explain, .ant-form-item-explain-success, .ant-form-item-explain-warning, .ant-form-item-explain-error { color: #b7d7e8 !important; } .ant-modal-close, .ant-drawer-close { color: #a5f3fc !important; background: transparent !important; } .ant-modal-close:hover, .ant-drawer-close:hover { color: #ecfeff !important; background: rgba(34, 211, 238, 0.12) !important; } .ant-alert-close-icon, .ant-alert-close-icon .anticon, .ant-alert-close-icon .anticon-close { color: #a5f3fc !important; } .ant-alert-close-icon:hover, .ant-alert-close-icon:hover .anticon, .ant-alert-close-icon:hover .anticon-close { color: #ecfeff !important; }