@import "tailwindcss"; @import "tw-animate-css"; @custom-variant dark (&:is(.dark *)); @theme inline { --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --color-chart-1: var(--chart-1); --color-chart-2: var(--chart-2); --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-5: var(--chart-5); --color-sidebar: var(--sidebar); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); } /* Industrial Professional Theme - 工业级专业风格 */ :root { --radius: 0.25rem; /* 深邃的工业蓝黑色调 */ --background: oklch(0.11 0.008 240); --foreground: oklch(0.92 0.01 240); /* 卡片和面板 */ --card: oklch(0.14 0.012 240); --card-foreground: oklch(0.92 0.01 240); /* 弹出层 */ --popover: oklch(0.16 0.012 240); --popover-foreground: oklch(0.92 0.01 240); /* 主色调 - 工业蓝 */ --primary: oklch(0.58 0.14 220); --primary-foreground: oklch(0.98 0.005 240); /* 次要色 */ --secondary: oklch(0.20 0.015 240); --secondary-foreground: oklch(0.85 0.01 240); /* 静音色 */ --muted: oklch(0.22 0.012 240); --muted-foreground: oklch(0.60 0.015 240); /* 强调色 - 工业橙 */ --accent: oklch(0.68 0.16 55); --accent-foreground: oklch(0.12 0.008 240); /* 功能色 */ --destructive: oklch(0.55 0.20 28); --destructive-foreground: oklch(0.98 0.005 240); /* 边框 */ --border: oklch(0.26 0.015 240); --input: oklch(0.22 0.015 240); --ring: oklch(0.58 0.14 220); /* 图表色 - 热力图 */ --chart-1: oklch(0.55 0.18 250); --chart-2: oklch(0.60 0.15 200); --chart-3: oklch(0.70 0.16 145); --chart-4: oklch(0.72 0.16 85); --chart-5: oklch(0.58 0.20 30); /* 侧边栏 */ --sidebar: oklch(0.12 0.010 240); --sidebar-foreground: oklch(0.85 0.01 240); --sidebar-primary: oklch(0.58 0.14 220); --sidebar-primary-foreground: oklch(0.98 0.005 240); --sidebar-accent: oklch(0.20 0.015 240); --sidebar-accent-foreground: oklch(0.85 0.01 240); --sidebar-border: oklch(0.24 0.015 240); --sidebar-ring: oklch(0.58 0.14 220); } .dark { --background: oklch(0.10 0.008 240); --foreground: oklch(0.92 0.01 240); --card: oklch(0.13 0.012 240); --card-foreground: oklch(0.92 0.01 240); --popover: oklch(0.15 0.012 240); --popover-foreground: oklch(0.92 0.01 240); --primary: oklch(0.58 0.14 220); --primary-foreground: oklch(0.98 0.005 240); --secondary: oklch(0.18 0.015 240); --secondary-foreground: oklch(0.85 0.01 240); --muted: oklch(0.20 0.012 240); --muted-foreground: oklch(0.60 0.015 240); --accent: oklch(0.68 0.16 55); --accent-foreground: oklch(0.12 0.008 240); --destructive: oklch(0.55 0.20 28); --destructive-foreground: oklch(0.98 0.005 240); --border: oklch(0.24 0.015 240); --input: oklch(0.20 0.015 240); --ring: oklch(0.58 0.14 220); } @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* 工业风格滚动条 */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: oklch(0.14 0.008 240); } ::-webkit-scrollbar-thumb { background: oklch(0.32 0.015 240); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: oklch(0.40 0.015 240); } } @layer components { .container { width: 100%; margin-left: auto; margin-right: auto; padding-left: 1rem; padding-right: 1rem; } .flex { min-height: 0; min-width: 0; } @media (min-width: 640px) { .container { padding-left: 1.5rem; padding-right: 1.5rem; } } @media (min-width: 1024px) { .container { padding-left: 2rem; padding-right: 2rem; max-width: 1400px; } } /* 工业面板 */ .industrial-panel { background: oklch(0.13 0.012 240); border: 1px solid oklch(0.24 0.015 240); border-radius: 3px; box-shadow: inset 0 1px 0 oklch(0.18 0.008 240), 0 2px 6px oklch(0.05 0.005 240 / 0.4); } /* 工业卡片 */ .industrial-card { background: oklch(0.12 0.010 240); border: 1px solid oklch(0.22 0.015 240); border-radius: 2px; box-shadow: inset 0 1px 0 oklch(0.16 0.008 240); } /* 状态LED指示灯 */ .status-led { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } .status-led-active { background: oklch(0.62 0.18 145); box-shadow: 0 0 8px oklch(0.62 0.18 145 / 0.6); animation: led-pulse 2s ease-in-out infinite; } .status-led-processing { background: oklch(0.68 0.16 55); box-shadow: 0 0 8px oklch(0.68 0.16 55 / 0.6); animation: led-pulse 0.6s ease-in-out infinite; } .status-led-idle { background: oklch(0.45 0.04 240); } .status-led-error { background: oklch(0.55 0.20 28); box-shadow: 0 0 8px oklch(0.55 0.20 28 / 0.6); animation: led-pulse 0.4s ease-in-out infinite; } @keyframes led-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } /* 工业进度条 */ .industrial-progress { height: 22px; background: oklch(0.10 0.008 240); border: 1px solid oklch(0.24 0.015 240); border-radius: 2px; overflow: hidden; position: relative; } .industrial-progress-bar { height: 100%; background: linear-gradient( 180deg, oklch(0.52 0.14 220) 0%, oklch(0.42 0.14 220) 50%, oklch(0.48 0.14 220) 100% ); transition: width 0.3s ease; position: relative; } .industrial-progress-bar::after { content: ''; position: absolute; inset: 0; background: repeating-linear-gradient( -45deg, transparent, transparent 6px, oklch(0.58 0.14 220 / 0.25) 6px, oklch(0.58 0.14 220 / 0.25) 12px ); animation: progress-stripes 0.8s linear infinite; } @keyframes progress-stripes { 0% { background-position: 0 0; } 100% { background-position: 24px 0; } } /* 数据网格背景 */ .data-grid-bg { background-image: linear-gradient(oklch(0.18 0.015 240 / 0.4) 1px, transparent 1px), linear-gradient(90deg, oklch(0.18 0.015 240 / 0.4) 1px, transparent 1px); background-size: 24px 24px; } /* 扫描线效果 */ .scan-line { position: absolute; left: 0; right: 0; height: 2px; background: linear-gradient( 90deg, transparent 0%, oklch(0.58 0.14 220 / 0.7) 50%, transparent 100% ); animation: scan 2.5s ease-in-out infinite; } @keyframes scan { 0% { top: 0%; opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { top: 100%; opacity: 0; } } /* 工业按钮 */ .industrial-btn { background: linear-gradient( 180deg, oklch(0.26 0.015 240) 0%, oklch(0.20 0.015 240) 100% ); border: 1px solid oklch(0.32 0.015 240); border-radius: 2px; color: oklch(0.85 0.01 240); font-weight: 500; text-transform: uppercase; letter-spacing: 0.06em; font-size: 11px; padding: 8px 14px; transition: all 0.12s ease; box-shadow: inset 0 1px 0 oklch(0.32 0.015 240), 0 1px 2px oklch(0.05 0.005 240 / 0.4); } .industrial-btn:hover { background: linear-gradient( 180deg, oklch(0.30 0.015 240) 0%, oklch(0.24 0.015 240) 100% ); } .industrial-btn:active { background: linear-gradient( 180deg, oklch(0.18 0.015 240) 0%, oklch(0.22 0.015 240) 100% ); box-shadow: inset 0 1px 3px oklch(0.05 0.005 240 / 0.5); } .industrial-btn-primary { background: linear-gradient( 180deg, oklch(0.52 0.14 220) 0%, oklch(0.42 0.14 220) 100% ); border-color: oklch(0.48 0.14 220); color: oklch(0.98 0.005 240); } .industrial-btn-primary:hover { background: linear-gradient( 180deg, oklch(0.56 0.14 220) 0%, oklch(0.46 0.14 220) 100% ); } /* 数据显示框 */ .data-display { background: oklch(0.09 0.006 240); border: 1px solid oklch(0.22 0.015 240); border-radius: 2px; padding: 6px 10px; font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; font-size: 12px; color: oklch(0.72 0.12 145); } /* 工业标签 */ .industrial-label { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: oklch(0.52 0.015 240); } /* 分隔线 */ .industrial-divider { height: 1px; background: linear-gradient( 90deg, transparent 0%, oklch(0.28 0.015 240) 20%, oklch(0.28 0.015 240) 80%, transparent 100% ); } /* 3D视图容器 */ .viewer-container { background: oklch(0.08 0.006 240); border: 2px solid oklch(0.20 0.015 240); border-radius: 3px; position: relative; overflow: hidden; } /* 热力图图例 */ .heatmap-legend { display: flex; align-items: center; gap: 8px; padding: 6px 10px; background: oklch(0.11 0.008 240); border: 1px solid oklch(0.22 0.015 240); border-radius: 2px; } .heatmap-gradient { flex: 1; height: 10px; /* 与 3D 视口一致:蓝负 → 绿名义 → 红正 */ background: linear-gradient( 90deg, #2166ac 0%, #67a9cf 22%, #4daf4a 50%, #fee08b 78%, #d73027 100% ); border-radius: 1px; } /* 数据块指示器 */ .chunk-indicator { display: flex; gap: 3px; padding: 8px; background: oklch(0.11 0.008 240); border: 1px solid oklch(0.22 0.015 240); border-radius: 2px; } .chunk-block { width: 8px; height: 24px; border-radius: 1px; transition: all 0.2s ease; } .chunk-block-pending { background: oklch(0.22 0.015 240); border: 1px solid oklch(0.28 0.015 240); } .chunk-block-processing { background: oklch(0.68 0.16 55); border: 1px solid oklch(0.72 0.16 55); animation: chunk-pulse 0.6s ease-in-out infinite; } .chunk-block-completed { background: oklch(0.52 0.14 220); border: 1px solid oklch(0.58 0.14 220); } @keyframes chunk-pulse { 0%, 100% { opacity: 1; transform: scaleY(1); } 50% { opacity: 0.6; transform: scaleY(0.92); } } /* 压缩示意图 */ .compression-visual { display: flex; align-items: center; justify-content: center; gap: 20px; padding: 20px; background: oklch(0.10 0.008 240); border: 1px solid oklch(0.22 0.015 240); border-radius: 3px; } .compression-cube { display: flex; align-items: center; justify-content: center; background: oklch(0.22 0.015 240); border: 2px solid oklch(0.32 0.015 240); border-radius: 3px; font-family: monospace; font-size: 11px; color: oklch(0.70 0.015 240); transition: all 0.5s ease; } .compression-cube-original { width: 80px; height: 80px; } .compression-cube-compressed { width: 40px; height: 40px; background: oklch(0.52 0.14 220); border-color: oklch(0.58 0.14 220); color: oklch(0.98 0.005 240); } /* 报表卡片 */ .report-card { background: oklch(0.12 0.010 240); border: 1px solid oklch(0.22 0.015 240); border-radius: 2px; overflow: hidden; } .report-card-header { background: oklch(0.15 0.012 240); border-bottom: 1px solid oklch(0.22 0.015 240); padding: 8px 12px; font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: oklch(0.65 0.015 240); } .report-card-body { padding: 12px; } /* 工作流程时间线 */ .workflow-timeline { display: flex; align-items: flex-start; position: relative; padding: 0 16px; } .workflow-step { flex: 1; display: flex; flex-direction: column; align-items: center; position: relative; z-index: 1; } .workflow-connector { position: absolute; top: 16px; left: 0; right: 0; height: 2px; background: oklch(0.22 0.015 240); z-index: 0; } .workflow-step-icon { width: 32px; height: 32px; border-radius: 3px; background: oklch(0.18 0.015 240); border: 2px solid oklch(0.28 0.015 240); display: flex; align-items: center; justify-content: center; transition: all 0.25s ease; position: relative; z-index: 2; } .workflow-step-active .workflow-step-icon { background: oklch(0.52 0.14 220); border-color: oklch(0.58 0.14 220); box-shadow: 0 0 12px oklch(0.52 0.14 220 / 0.5); } .workflow-step-completed .workflow-step-icon { background: oklch(0.52 0.16 145); border-color: oklch(0.58 0.16 145); } .workflow-step-label { margin-top: 8px; font-size: 9px; text-transform: uppercase; letter-spacing: 0.06em; color: oklch(0.48 0.015 240); text-align: center; max-width: 80px; } .workflow-step-active .workflow-step-label { color: oklch(0.78 0.01 240); } .workflow-step-completed .workflow-step-label { color: oklch(0.62 0.015 240); } /* 信息叠加层 */ .info-overlay { position: absolute; background: oklch(0.11 0.008 240 / 0.95); border: 1px solid oklch(0.28 0.015 240); border-radius: 2px; padding: 6px 10px; font-size: 10px; backdrop-filter: blur(4px); } /* 坐标轴指示器 */ .axis-indicator { position: absolute; bottom: 12px; left: 12px; width: 50px; height: 50px; background: oklch(0.11 0.008 240 / 0.9); border: 1px solid oklch(0.28 0.015 240); border-radius: 3px; } }