Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dffa686a81 | ||
|
|
9421e62566 |
@@ -6,6 +6,12 @@
|
|||||||
<img src="docs/screenshots/login.png" width="720" alt="平台登录页"/>
|
<img src="docs/screenshots/login.png" width="720" alt="平台登录页"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
## 多彩霓虹主题 · 2026-10-21
|
||||||
|
|
||||||
|
全站采用玫红、橙金、薄荷绿、紫色与电光蓝多彩面板,包含彩虹渐变趋势图、极光登录背景及统一的导航、表格和 AI 对话样式。以下 12 张配图均于 2026-10-21 从当前运行版本重新采集。
|
||||||
|
|
||||||
|
完整操作录屏与本次交付包:[交付树中的 2026-10-21 版本](https://code.xinmi.cloud/depei/panel-delivery-tree/src/branch/main/交付包/smart-parking-delivery-20261021)。
|
||||||
|
|
||||||
## 目录
|
## 目录
|
||||||
|
|
||||||
- [一、详细功能描述](#一详细功能描述)
|
- [一、详细功能描述](#一详细功能描述)
|
||||||
@@ -112,7 +118,7 @@
|
|||||||
- **低延迟流媒体**:RTMP 收流 + Nginx-RTMP/FFmpeg 转 HLS 分发,兼顾实时性与浏览器兼容性。
|
- **低延迟流媒体**:RTMP 收流 + Nginx-RTMP/FFmpeg 转 HLS 分发,兼顾实时性与浏览器兼容性。
|
||||||
- **本地地图引擎**:Leaflet + 地图瓦片本地化切分与存储,支持自定义园区地图。
|
- **本地地图引擎**:Leaflet + 地图瓦片本地化切分与存储,支持自定义园区地图。
|
||||||
- **私有化一键交付**:Docker Compose 编排前后端、数据库、媒体服务,一条命令完成部署。
|
- **私有化一键交付**:Docker Compose 编排前后端、数据库、媒体服务,一条命令完成部署。
|
||||||
- **统一暗色面板设计体系**:玻璃拟态 + 霓虹光效 + 响应式布局,视觉统一、辨识度高。
|
- **多彩霓虹面板设计体系**:五色指标卡 + 彩虹趋势图 + 极光玻璃背景 + 响应式布局,视觉统一、辨识度高。
|
||||||
- **AI 能力可插拔**:支持标准 Chat Completions 协议,可按需切换 TokenFree 上的 Kimi / Qwen / Claude 等模型。
|
- **AI 能力可插拔**:支持标准 Chat Completions 协议,可按需切换 TokenFree 上的 Kimi / Qwen / Claude 等模型。
|
||||||
|
|
||||||
## 四、应用场景
|
## 四、应用场景
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 789 KiB After Width: | Height: | Size: 863 KiB |
|
Before Width: | Height: | Size: 602 KiB After Width: | Height: | Size: 636 KiB |
|
Before Width: | Height: | Size: 672 KiB After Width: | Height: | Size: 772 KiB |
|
Before Width: | Height: | Size: 597 KiB After Width: | Height: | Size: 658 KiB |
|
Before Width: | Height: | Size: 790 KiB After Width: | Height: | Size: 807 KiB |
|
Before Width: | Height: | Size: 952 KiB After Width: | Height: | Size: 957 KiB |
|
Before Width: | Height: | Size: 1011 KiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 861 KiB After Width: | Height: | Size: 869 KiB |
|
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 1017 KiB After Width: | Height: | Size: 994 KiB |
|
Before Width: | Height: | Size: 782 KiB After Width: | Height: | Size: 844 KiB |
|
Before Width: | Height: | Size: 688 KiB After Width: | Height: | Size: 809 KiB |
@@ -1,5 +1,6 @@
|
|||||||
import { defineApp } from 'umi';
|
import { defineApp } from 'umi';
|
||||||
import './global.less';
|
import './global.less';
|
||||||
import './styles/dazzle.less';
|
import './styles/dazzle.less';
|
||||||
|
import './styles/spectrum.less';
|
||||||
|
|
||||||
export default defineApp({});
|
export default defineApp({});
|
||||||
@@ -286,13 +286,13 @@ body::after {
|
|||||||
|
|
||||||
.ant-btn-primary {
|
.ant-btn-primary {
|
||||||
border: 0;
|
border: 0;
|
||||||
background: linear-gradient(135deg, #0891b2, #2563eb 52%, #7c3aed);
|
background: linear-gradient(135deg, #0e7490, #1d4ed8 52%, #6d28d9);
|
||||||
box-shadow: 0 10px 24px rgba(37, 99, 235, 0.28);
|
box-shadow: 0 10px 24px rgba(37, 99, 235, 0.28);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-btn-primary:hover,
|
.ant-btn-primary:hover,
|
||||||
.ant-btn-primary:focus {
|
.ant-btn-primary:focus {
|
||||||
background: linear-gradient(135deg, #06b6d4, #3b82f6 52%, #8b5cf6) !important;
|
background: linear-gradient(135deg, #0891b2, #2563eb 52%, #7c3aed) !important;
|
||||||
box-shadow: 0 0 26px rgba(34, 211, 238, 0.26) !important;
|
box-shadow: 0 0 26px rgba(34, 211, 238, 0.26) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -566,3 +566,40 @@ body::after {
|
|||||||
.ant-alert-close-icon:hover .anticon-close {
|
.ant-alert-close-icon:hover .anticon-close {
|
||||||
color: #ecfeff !important;
|
color: #ecfeff !important;
|
||||||
}
|
}
|
||||||
|
/* Static message/notification calls (message.error etc.) do not consume ConfigProvider
|
||||||
|
dark theme in antd v5 — force dark glass panel so no white popup appears in dark shell. */
|
||||||
|
.ant-message .ant-message-notice-content,
|
||||||
|
.ant-notification .ant-notification-notice {
|
||||||
|
color: #e6f7ff;
|
||||||
|
border: 1px solid rgba(103, 232, 249, 0.28);
|
||||||
|
background: linear-gradient(145deg, rgba(14, 30, 56, 0.96), rgba(7, 18, 39, 0.96));
|
||||||
|
box-shadow: 0 16px 44px rgba(2, 8, 23, 0.55), 0 0 24px rgba(34, 211, 238, 0.12);
|
||||||
|
backdrop-filter: blur(16px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-message .ant-message-notice-content .ant-message-custom-content,
|
||||||
|
.ant-notification .ant-notification-notice-message,
|
||||||
|
.ant-notification .ant-notification-notice-description {
|
||||||
|
color: #e6f7ff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-message .ant-message-notice-content .anticon-close-circle,
|
||||||
|
.ant-message .ant-message-notice-content .anticon-close {
|
||||||
|
color: #fb7185 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-message .ant-message-notice-content .anticon-exclamation-circle {
|
||||||
|
color: #fbbf24 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-message .ant-message-notice-content .anticon-check-circle {
|
||||||
|
color: #4ade80 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-message .ant-message-notice-content .anticon-info-circle {
|
||||||
|
color: #67e8f9 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-message .ant-message-notice-content .anticon-loading {
|
||||||
|
color: #67e8f9 !important;
|
||||||
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
box-shadow:
|
box-shadow:
|
||||||
0 24px 70px rgba(0, 0, 0, 0.48),
|
0 24px 70px rgba(0, 0, 0, 0.48),
|
||||||
inset 0 1px 0 rgba(255, 255, 255, 0.08),
|
inset 0 1px 0 rgba(255, 255, 255, 0.08),
|
||||||
0 0 36px rgba(34, 211, 238, 0.12);
|
0 0 52px rgba(34, 211, 238, 0.22);
|
||||||
backdrop-filter: blur(22px);
|
backdrop-filter: blur(22px);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
|
|
||||||
.brandRow p {
|
.brandRow p {
|
||||||
margin: 4px 0 0;
|
margin: 4px 0 0;
|
||||||
color: rgba(226, 242, 255, 0.58);
|
color: rgba(226, 242, 255, 0.82);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
letter-spacing: 0.08em;
|
letter-spacing: 0.08em;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
height: 44px;
|
height: 44px;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
border: 0;
|
border: 0;
|
||||||
background: linear-gradient(135deg, #0891b2, #2563eb 52%, #7c3aed);
|
background: linear-gradient(135deg, #0e7490, #1d4ed8 52%, #6d28d9);
|
||||||
box-shadow: 0 14px 28px rgba(37, 99, 235, 0.3);
|
box-shadow: 0 14px 28px rgba(37, 99, 235, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,7 +182,7 @@
|
|||||||
gap: 18px;
|
gap: 18px;
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
padding-top: 18px;
|
padding-top: 18px;
|
||||||
color: rgba(226, 242, 255, 0.52);
|
color: rgba(226, 242, 255, 0.78);
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
border-top: 1px solid rgba(103, 232, 249, 0.14);
|
border-top: 1px solid rgba(103, 232, 249, 0.14);
|
||||||
}
|
}
|
||||||
@@ -279,3 +279,16 @@
|
|||||||
color: #a5f3fc;
|
color: #a5f3fc;
|
||||||
text-shadow: 0 0 14px rgba(34, 211, 238, 0.75);
|
text-shadow: 0 0 14px rgba(34, 211, 238, 0.75);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Spectrum login: saturated aurora, readable midnight glass. */
|
||||||
|
.loginPage {
|
||||||
|
background: radial-gradient(ellipse at 12% 20%, #7b185c 0%, transparent 48%), radial-gradient(ellipse at 88% 15%, #44259b 0%, transparent 45%), radial-gradient(ellipse at 78% 95%, #075d65 0%, transparent 48%), radial-gradient(ellipse at 5% 95%, #874019 0%, transparent 45%), #100c29;
|
||||||
|
}
|
||||||
|
.loginPanel {
|
||||||
|
border-color: #c084fc;
|
||||||
|
background: linear-gradient(145deg, rgba(79, 26, 85, .94), rgba(22, 21, 55, .97) 55%, rgba(9, 57, 64, .96));
|
||||||
|
box-shadow: 0 30px 80px #09051c, -18px 0 65px #f43f5e30, 18px 0 65px #22d3ee35;
|
||||||
|
}
|
||||||
|
.orbOne { background: radial-gradient(circle at 30% 30%, #ffcf6c80, #fb458c40 60%, transparent 70%); border-color: #ffb46c; }
|
||||||
|
.orbTwo { background: radial-gradient(circle at 30% 30%, #b599ff80, #26dfd440 60%, transparent 70%); border-color: #ae92ff; }
|
||||||
|
.brandRow h1 { color: #fff0fb; }
|
||||||
|
|||||||
@@ -428,6 +428,15 @@
|
|||||||
.kpi-card:nth-child(4) { animation-delay: 0.2s; }
|
.kpi-card:nth-child(4) { animation-delay: 0.2s; }
|
||||||
.kpi-card:nth-child(5) { animation-delay: 0.26s; }
|
.kpi-card:nth-child(5) { animation-delay: 0.26s; }
|
||||||
|
|
||||||
|
/* 常驻霓虹边框光(静态即可见) */
|
||||||
|
.kpi-card {
|
||||||
|
box-shadow: 0 0 0 1px rgba(34, 211, 238, 0.18), 0 10px 28px rgba(2, 8, 23, 0.42), 0 0 22px rgba(34, 211, 238, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ov-panel {
|
||||||
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05), 0 0 24px rgba(34, 211, 238, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes dazzle-ov-card-in {
|
@keyframes dazzle-ov-card-in {
|
||||||
from { opacity: 0; transform: translateY(10px); }
|
from { opacity: 0; transform: translateY(10px); }
|
||||||
to { opacity: 1; transform: translateY(0); }
|
to { opacity: 1; transform: translateY(0); }
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import './index.less';
|
|||||||
type OverviewData =
|
type OverviewData =
|
||||||
ServiceTypes['GET /api/user/getOverviewStats']['res']['data'];
|
ServiceTypes['GET /api/user/getOverviewStats']['res']['data'];
|
||||||
|
|
||||||
const PALETTE = ['#22d3ee', '#fb7185', '#94a3b8'];
|
const PALETTE = ['#42f5ba', '#ff668f', '#ffc56b'];
|
||||||
|
|
||||||
const Overview: FC = () => {
|
const Overview: FC = () => {
|
||||||
const [data, setData] = useState<OverviewData>();
|
const [data, setData] = useState<OverviewData>();
|
||||||
@@ -183,6 +183,7 @@ const TrendChart: FC<{
|
|||||||
<div className="trend-chart">
|
<div className="trend-chart">
|
||||||
<svg viewBox={`0 0 ${W} ${H}`} preserveAspectRatio="none">
|
<svg viewBox={`0 0 ${W} ${H}`} preserveAspectRatio="none">
|
||||||
<defs>
|
<defs>
|
||||||
|
<linearGradient id="trendLine" x1="0" y1="0" x2="1" y2="0"><stop offset="0%" stopColor="#36e8dd" /><stop offset="45%" stopColor="#b593ff" /><stop offset="75%" stopColor="#ff76b6" /><stop offset="100%" stopColor="#ffc56b" /></linearGradient>
|
||||||
<linearGradient id="trendFill" x1="0" y1="0" x2="0" y2="1">
|
<linearGradient id="trendFill" x1="0" y1="0" x2="0" y2="1">
|
||||||
<stop offset="0%" stopColor="#22d3ee" stopOpacity="0.45" />
|
<stop offset="0%" stopColor="#22d3ee" stopOpacity="0.45" />
|
||||||
<stop offset="100%" stopColor="#22d3ee" stopOpacity="0" />
|
<stop offset="100%" stopColor="#22d3ee" stopOpacity="0" />
|
||||||
@@ -203,7 +204,7 @@ const TrendChart: FC<{
|
|||||||
<path
|
<path
|
||||||
d={path.line}
|
d={path.line}
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke="#22d3ee"
|
stroke="url(#trendLine)"
|
||||||
strokeWidth="2.5"
|
strokeWidth="2.5"
|
||||||
strokeLinecap="round"
|
strokeLinecap="round"
|
||||||
strokeLinejoin="round"
|
strokeLinejoin="round"
|
||||||
|
|||||||
@@ -15,9 +15,9 @@
|
|||||||
/* ---------- 1. 动态极光背景:三团彩色光斑缓慢漂移 ---------- */
|
/* ---------- 1. 动态极光背景:三团彩色光斑缓慢漂移 ---------- */
|
||||||
body::after {
|
body::after {
|
||||||
background:
|
background:
|
||||||
radial-gradient(circle at 22% 24%, rgba(34, 211, 238, 0.16), transparent 32%),
|
radial-gradient(circle at 22% 24%, rgba(34, 211, 238, 0.22), transparent 34%),
|
||||||
radial-gradient(circle at 78% 30%, rgba(139, 92, 246, 0.15), transparent 34%),
|
radial-gradient(circle at 78% 30%, rgba(139, 92, 246, 0.2), transparent 36%),
|
||||||
radial-gradient(circle at 50% 80%, rgba(59, 130, 246, 0.17), transparent 38%);
|
radial-gradient(circle at 50% 80%, rgba(59, 130, 246, 0.22), transparent 40%);
|
||||||
animation: dazzle-aurora 36s ease-in-out infinite alternate;
|
animation: dazzle-aurora 36s ease-in-out infinite alternate;
|
||||||
will-change: transform;
|
will-change: transform;
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ body::before {
|
|||||||
transparent
|
transparent
|
||||||
);
|
);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: 38% 100%;
|
background-size: 46% 100%;
|
||||||
animation: dazzle-header-sweep 7s linear infinite;
|
animation: dazzle-header-sweep 7s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ body::before {
|
|||||||
-webkit-mask-composite: xor;
|
-webkit-mask-composite: xor;
|
||||||
mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
|
mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
|
||||||
mask-composite: exclude;
|
mask-composite: exclude;
|
||||||
opacity: 0.22;
|
opacity: 0.5;
|
||||||
transition: opacity 0.3s ease;
|
transition: opacity 0.3s ease;
|
||||||
animation: dazzle-ring-spin 7s linear infinite;
|
animation: dazzle-ring-spin 7s linear infinite;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
/* Spectrum theme: color is carried by surfaces, not only animated accents. */
|
||||||
|
:root {
|
||||||
|
--panel-bg: rgba(30, 20, 57, .88);
|
||||||
|
--panel-bg-strong: rgba(25, 18, 48, .98);
|
||||||
|
--panel-border: rgba(192, 132, 252, .42);
|
||||||
|
--text-secondary: #c9c4e4;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: radial-gradient(ellipse at 0% 15%, #631c64 0%, transparent 48%),
|
||||||
|
radial-gradient(ellipse at 100% 5%, #253d86 0%, transparent 45%),
|
||||||
|
radial-gradient(ellipse at 85% 100%, #126459 0%, transparent 44%),
|
||||||
|
radial-gradient(ellipse at 10% 100%, #783625 0%, transparent 40%), #100d25;
|
||||||
|
}
|
||||||
|
body::after {
|
||||||
|
background: radial-gradient(ellipse at 20% 25%, #ff409522, transparent 48%),
|
||||||
|
radial-gradient(ellipse at 80% 70%, #40eac522, transparent 48%);
|
||||||
|
}
|
||||||
|
.glass-header {
|
||||||
|
background: linear-gradient(100deg, #481b55ee, #20204eee 50%, #11484bee) !important;
|
||||||
|
border-bottom-color: #bd80ee;
|
||||||
|
}
|
||||||
|
.glass-header::after {
|
||||||
|
background: linear-gradient(90deg, #ff648c, #ffce73, #55edbb, #42dffa, #ae8aff, #ff79c5);
|
||||||
|
background-size: 100% 100%;
|
||||||
|
animation: none;
|
||||||
|
}
|
||||||
|
.brand-title { color: #fff0fb; }
|
||||||
|
.glass-sider { background: linear-gradient(180deg, #281735ed, #141e3ded 60%, #123b3bed) !important; }
|
||||||
|
.glass-sider .ant-menu-item,
|
||||||
|
.glass-sider .ant-menu-submenu-title { --nav-color: #ff91ca; }
|
||||||
|
.glass-sider .ant-menu-item:nth-child(3n + 2),
|
||||||
|
.glass-sider .ant-menu-submenu:nth-child(3n + 2) > .ant-menu-submenu-title { --nav-color: #68efd0; }
|
||||||
|
.glass-sider .ant-menu-item:nth-child(3n),
|
||||||
|
.glass-sider .ant-menu-submenu:nth-child(3n) > .ant-menu-submenu-title { --nav-color: #ffd083; }
|
||||||
|
.glass-sider .ant-menu .anticon { color: var(--nav-color); }
|
||||||
|
.glass-sider .ant-menu-item-selected {
|
||||||
|
background: linear-gradient(100deg, #93315c, #563393 58%, #205467) !important;
|
||||||
|
box-shadow: inset 3px 0 #ffb4df, 0 6px 22px #e7478b22;
|
||||||
|
}
|
||||||
|
.glass-footer { background: linear-gradient(90deg, #321934ed, #142d3ded); }
|
||||||
|
|
||||||
|
.overview-screen .overview-header {
|
||||||
|
background: linear-gradient(110deg, #70264b, #382667 52%, #13575b);
|
||||||
|
border-color: #dc80c8;
|
||||||
|
}
|
||||||
|
.overview-screen .overview-title p { color: #ffd2ef; }
|
||||||
|
.overview-screen .overview-title-icon { color: #ffce73; }
|
||||||
|
.overview-screen .kpi-card { --accent: #67e8f9; --tint: #13576c; }
|
||||||
|
.overview-screen .tone-green { --accent: #78f9ba; --tint: #176044; }
|
||||||
|
.overview-screen .tone-red { --accent: #ffa4c2; --tint: #7b254b; }
|
||||||
|
.overview-screen .tone-purple { --accent: #dfb6ff; --tint: #58318b; }
|
||||||
|
.overview-screen .tone-blue { --accent: #ffda85; --tint: #714323; }
|
||||||
|
.overview-screen .kpi-card {
|
||||||
|
background: linear-gradient(125deg, var(--tint), #19172f 115%);
|
||||||
|
border-color: var(--accent);
|
||||||
|
border-top-width: 3px;
|
||||||
|
box-shadow: 0 12px 28px #09071955, inset 0 1px #ffffff22;
|
||||||
|
}
|
||||||
|
.overview-screen .kpi-icon { color: var(--accent); background: #ffffff14; animation: none; box-shadow: 0 0 22px #ffffff16; }
|
||||||
|
.overview-screen .kpi-value { color: var(--accent); animation: none; text-shadow: 0 0 24px var(--tint); }
|
||||||
|
.overview-screen .kpi-label { color: #fff4ff; }
|
||||||
|
.overview-screen .kpi-sub { color: #e3dced; }
|
||||||
|
.overview-screen .ov-panel {
|
||||||
|
background: linear-gradient(145deg, #24234c, #15162f);
|
||||||
|
border-color: #a393ed80;
|
||||||
|
}
|
||||||
|
.overview-screen .ov-dist { background: linear-gradient(145deg, #154b46, #171e36); border-color: #5adfc480; }
|
||||||
|
.overview-screen .ov-latest { background: linear-gradient(145deg, #52243e, #22172f); border-color: #f987b380; }
|
||||||
|
.overview-screen .panel-title-bar { background: linear-gradient(#ffce73, #ff76b6, #ae8aff); }
|
||||||
|
.overview-screen .donut-svg { animation: none; }
|
||||||
|
.overview-screen .latest-list li:nth-child(odd) { background: #ff91ca0b; border-radius: 8px; }
|
||||||
|
|
||||||
|
#root .ant-card {
|
||||||
|
background: linear-gradient(120deg, #39204edb, #172b42ed 65%, #12463edb);
|
||||||
|
border-color: #b68be780;
|
||||||
|
}
|
||||||
|
.ant-card-head { background: linear-gradient(90deg, #d9468a28, #9865e528, #2ed6c228); }
|
||||||
|
.ant-table-thead > tr > th {
|
||||||
|
background: #44305d !important;
|
||||||
|
color: #fff0fc !important;
|
||||||
|
border-bottom-color: #c087e77a !important;
|
||||||
|
}
|
||||||
|
.ant-table-tbody > tr:nth-child(even) > td { background: #a78bfa09 !important; }
|
||||||
|
.ant-table-tbody > tr.ant-table-row:hover > td { background: #b46ae526 !important; }
|
||||||
|
.ant-btn-primary {
|
||||||
|
background: linear-gradient(110deg, #a32962, #7434ae 55%, #176a79);
|
||||||
|
box-shadow: 0 6px 22px #ed4a982e;
|
||||||
|
}
|
||||||
|
.ant-btn-primary:hover, .ant-btn-primary:focus {
|
||||||
|
background: linear-gradient(110deg, #b42d6e, #843cc1 55%, #187788) !important;
|
||||||
|
}
|
||||||
|
.ant-pagination .ant-pagination-item-active { border-color: #ed91ce; background: #91396a44; }
|
||||||
|
.ai-chat-page .panel-card { background: linear-gradient(135deg, #49214de8, #211b42f5 45%, #123c46eb); border-color: #cb88e5; }
|
||||||
|
.ai-chat-page .ai-robot-avatar { background: linear-gradient(135deg, #b42c79, #6537bd); }
|
||||||
|
.ai-chat-page .is-user .ai-bubble-content { background: linear-gradient(120deg, #74305f, #47377f); border-color: #d995d5; }
|
||||||
|
.ai-chat-page .is-assistant .ai-bubble-content { background: #16454b; border-color: #57cdb2; }
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
*, *::before, *::after { animation: none !important; transition: none !important; }
|
||||||
|
}
|
||||||