/* ===== 蓝色主题变量 ===== */
:root {
  --blue-primary: #3b82f6;
  --blue-primary-light: #60a5fa;
  --blue-primary-dark: #2563eb;
  --blue-secondary: #1e293b;
  --blue-bg: #0f172a;
  --blue-glass: rgba(59,130,246,0.15);
  --blue-glass-border: rgba(96,165,250,0.5);

  /* Element Plus 主色覆盖 */
  --el-color-primary: #3b82f6;
  --el-color-primary-light-3: #60a5fa;
  --el-color-primary-light-5: #93c5fd;
  --el-color-primary-light-7: #bfdbfe;
  --el-color-primary-light-8: #dbeafe;
  --el-color-primary-light-9: #eff6ff;
  --el-color-primary-dark-2: #2563eb;

  /* 圆角统一 */
  --border-radius-sm: 6px;
  --border-radius-md: 8px;
  --border-radius-lg: 12px;
  --border-radius-xl: 16px;
}

/* ===== 全局 ===== */
body, html { margin:0;padding:0;height:100%;font-family:'Microsoft YaHei','微软雅黑',sans-serif; }

/* ===== 登录页 Hero（淡蓝版） ===== */
.login-page {
  position:relative;
  min-height:100vh;
  overflow:hidden;
  display:flex;
  justify-content:center;
  align-items:center;
}
.login-video {
  position:absolute;
  top:0;left:0;
  width:100%;height:100%;
  object-fit:cover;
  z-index:0;
  filter:hue-rotate(-70deg) saturate(1.4) brightness(0.9);
}
.login-video-tint {
  position:absolute;
  top:0;left:0;
  width:100%;height:100%;
  background:linear-gradient(135deg, rgba(30,58,95,0.55), rgba(59,130,246,0.35));
  z-index:1;
  mix-blend-mode:multiply;
}
.login-overlay {
  position:absolute;
  inset:0;
  display:flex;
  justify-content:center;
  align-items:center;
  z-index:2;
}
.login-box {
  background:linear-gradient(145deg, rgba(30,58,95,0.65), rgba(23,42,69,0.55));
  backdrop-filter:blur(24px);
  -webkit-backdrop-filter:blur(24px);
  border:1px solid rgba(96,165,250,0.45);
  border-radius:var(--border-radius-xl);
  padding:48px 44px;
  width:380px;
  box-shadow:0 12px 50px rgba(0,0,0,0.3), inset 0 1px 0 rgba(255,255,255,0.08);
  text-align:center;
}
.login-box h2 {
  margin:0 0 8px;
  font-size:26px;
  font-weight:700;
  color:#fff;
  letter-spacing:1px;
}
.login-subtitle {
  margin:0 0 28px;
  font-size:14px;
  color:rgba(255,255,255,0.7);
}
.login-box .el-form-item { margin-bottom:20px; }
.login-box .el-input__wrapper {
  background:linear-gradient(135deg, rgba(255,255,255,0.08), rgba(255,255,255,0.03));
  border:1px solid rgba(96,165,250,0.25);
  box-shadow:inset 0 1px 3px rgba(0,0,0,0.2) !important;
  border-radius:var(--border-radius-md);
  transition:all .3s;
}
.login-box .el-input__wrapper:hover {
  border-color:rgba(96,165,250,0.5);
  background:linear-gradient(135deg, rgba(255,255,255,0.12), rgba(255,255,255,0.05));
}
.login-box .el-input__wrapper.is-focus {
  border-color:var(--blue-primary);
  box-shadow:0 0 0 3px rgba(59,130,246,0.15), inset 0 1px 3px rgba(0,0,0,0.2) !important;
  background:linear-gradient(135deg, rgba(255,255,255,0.12), rgba(255,255,255,0.05));
}
.login-box .el-input__inner { color:#fff;font-size:15px;height:42px; }
.login-box .el-input__inner::placeholder { color:rgba(255,255,255,0.4);font-size:14px; }
.login-box .el-input__prefix-inner .el-icon { color:rgba(255,255,255,0.4);font-size:16px; }
.login-box .el-checkbox { color:rgba(255,255,255,0.7); }
.login-box .el-checkbox__label { color:rgba(255,255,255,0.7);font-size:14px; }
.login-box .el-checkbox__input.is-checked .el-checkbox__inner { background:var(--blue-primary);border-color:var(--blue-primary); }

/* 登录按钮 → 玻璃质感 */
.login-box .el-button--primary {
  background:rgba(59,130,246,0.3);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
  border:1px solid rgba(96,165,250,0.5);
  border-radius:var(--border-radius-md);
  font-weight:600;
  height:44px;
  font-size:16px;
  letter-spacing:1px;
  box-shadow:0 4px 20px rgba(59,130,246,0.3);
  transition:all .3s ease;
}
.login-box .el-button--primary:hover {
  background:rgba(59,130,246,0.5);
  border-color:rgba(96,165,250,0.7);
  box-shadow:0 6px 28px rgba(59,130,246,0.45);
  transform:translateY(-2px);
}
.login-box .el-button--primary:active {
  transform:translateY(0);
  box-shadow:0 2px 12px rgba(59,130,246,0.3);
}
.login-link { color:rgba(255,255,255,0.7); }
.login-link:hover { color:#fff; }
.login-box .el-form-item:last-child { margin-bottom:0; }
.login-box .el-link.el-link--primary { color:rgba(96,165,250,0.9); }
.login-box .el-link.el-link--primary:hover { color:rgba(96,165,250,1); }
.login-box .el-link.el-link--info { color:rgba(255,255,255,0.5); }
.login-box .el-link.el-link--info:hover { color:rgba(255,255,255,0.8); }

/* ===== 主布局 ===== */
.main-layout { display:flex;height:100vh; }

/* ===== 侧边栏 ===== */
.sidebar {
  width:210px;
  background:linear-gradient(180deg, #1e3a5f 0%, #172a45 100%);
  color:rgba(255,255,255,0.7);
  display:flex;
  flex-direction:column;
  flex-shrink:0;
  box-shadow:2px 0 12px rgba(0,0,0,0.15);
}
.logo {
  padding:22px 20px;
  text-align:center;
  font-size:17px;
  font-weight:bold;
  border-bottom:1px solid rgba(255,255,255,0.06);
  color:#fff;
  letter-spacing:1px;
}
.nav-item {
  padding:14px 20px;
  cursor:pointer;
  transition:all .25s ease;
  display:flex;
  align-items:center;
  gap:10px;
  font-size:14px;
  border-left:3px solid transparent;
  position:relative;
}
.nav-item:hover {
  background:rgba(255,255,255,0.08);
  color:var(--blue-primary-light);
  transform:translateX(3px);
}
.nav-item.active {
  background:rgba(59,130,246,0.18);
  color:var(--blue-primary);
  border-left-color:var(--blue-primary);
  border-right:none;
}
.role-item { padding:8px 12px;cursor:pointer;transition:all .3s;border-radius:4px;margin-bottom:4px; }
.role-item:hover { background:#f5f7fa; }
.role-item.active { background:var(--blue-primary);color:#fff; }
.user-info {
  padding:15px 20px;
  border-top:1px solid rgba(255,255,255,0.06);
  display:flex;
  justify-content:space-between;
  align-items:center;
  font-size:13px;
  color:rgba(255,255,255,0.6);
  margin-top:auto;
}

/* ===== 内容区 ===== */
.content { flex:1;padding:24px;overflow:auto;background:#f4f5f9; }

/* ===== 页面标题栏 ===== */
.page-header {
  display:flex;
  justify-content:space-between;
  align-items:center;
  margin-bottom:20px;
  background:#fff;
  padding:18px 22px;
  border-radius:var(--border-radius-lg);
  border:1px solid #f0f0f0;
  box-shadow:0 1px 6px rgba(0,0,0,0.04);
  transition:box-shadow .3s;
}
.page-header:hover {
  box-shadow:0 2px 12px rgba(0,0,0,0.06);
}
.page-header h3 { margin:0;color:#303133;font-size:16px; }

/* ===== 通用卡片 ===== */
.card {
  background:#fff;
  padding:24px;
  border-radius:var(--border-radius-lg);
  margin-bottom:18px;
  box-shadow:0 2px 12px rgba(0,0,0,0.05);
  border:1px solid #f2f2f2;
  transition:box-shadow .3s, transform .3s;
}
.card:hover {
  box-shadow:0 4px 20px rgba(0,0,0,0.07);
}

/* ===== 系统按钮增强 ===== */
.el-button--primary {
  background:linear-gradient(135deg, var(--blue-primary), var(--blue-primary-dark));
  border-color:var(--blue-primary);
  box-shadow:0 2px 8px rgba(59,130,246,0.2);
  transition:all .25s ease;
}
.el-button--primary:hover {
  background:linear-gradient(135deg, var(--blue-primary-light), var(--blue-primary));
  border-color:var(--blue-primary-light);
  box-shadow:0 4px 14px rgba(59,130,246,0.35);
  transform:translateY(-1px);
}
.el-button--primary:active {
  transform:translateY(0);
  box-shadow:0 1px 4px rgba(59,130,246,0.15);
}
.el-button--primary.is-plain {
  background:rgba(59,130,246,0.08);
  border-color:rgba(59,130,246,0.3);
  color:var(--blue-primary);
  box-shadow:none;
}
.el-button--primary.is-plain:hover {
  background:rgba(59,130,246,0.15);
  border-color:var(--blue-primary);
}
.el-button--primary.is-disabled {
  background:linear-gradient(135deg, #93c5fd, #60a5fa);
  border-color:#93c5fd;
  box-shadow:none;
}

/* 默认按钮 hover 变蓝 */
.el-button--default {
  transition:all .25s ease;
  border-radius:var(--border-radius-sm);
}
.el-button--default:hover {
  border-color:var(--blue-primary);
  color:var(--blue-primary);
  box-shadow:0 2px 8px rgba(59,130,246,0.08);
}
.el-button--default.el-button--danger:hover {
  border-color:#f56c6c;
  color:#f56c6c;
  box-shadow:0 2px 8px rgba(245,108,108,0.15);
}

/* 小按钮 */
.el-button--small {
  border-radius:var(--border-radius-sm);
}
.el-button--primary.el-button--small {
  box-shadow:0 1px 4px rgba(59,130,246,0.15);
}

/* 文字按钮 */
.el-button--text {
  padding-left:4px;
  padding-right:4px;
}
.el-button--text:hover {
  color:var(--blue-primary-light) !important;
}

.proj-name-item { padding:10px 16px;cursor:pointer;transition:all .2s;border-bottom:1px solid #ebeef5;font-size:13px;color:#303133;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.proj-name-item:hover { background:#f5f7fa;transform:translateX(2px); }
.proj-name-item.active { background:rgba(59,130,246,0.08);color:var(--blue-primary);font-weight:bold;border-left:3px solid var(--blue-primary); }
h4 { margin:16px 0 8px;color:#606266;font-size:14px; }

/* ===== Element Plus 表格增强 ===== */
.el-table {
  border-radius:var(--border-radius-md);
  overflow:hidden;
  box-shadow:0 1px 4px rgba(0,0,0,0.03);
}
.el-table th.el-table__cell,
.el-table thead th {
  background:var(--blue-primary) !important;
  color:#fff !important;
  font-weight:600 !important;
  font-size:13px;
  padding:10px 0;
}
.el-table th.el-table__cell .cell { color:#fff !important; }
.el-table--striped .el-table__body tr.el-table__row--striped td { background:rgba(59,130,246,0.03); }
.el-table__body tr:hover > td { background:rgba(59,130,246,0.05) !important; }

/* ===== 甘特图增强 ===== */
.gantt-row {
  display:flex;
  border-bottom:1px solid #ebeef5;
  padding:12px 0;
  align-items:center;
  transition:background .2s;
}
.gantt-row:hover { background:rgba(59,130,246,0.03);border-radius:6px; }
.gantt-info { width:300px;flex-shrink:0;flex-grow:0;min-width:0;overflow:hidden;padding-right:12px; }
.gantt-name { font-size:13px;color:#303133;font-weight:500;line-height:1.35;word-break:break-all; }
.gantt-owner { font-size:12px;color:#3b82f6;margin-top:2px;line-height:1.3;word-break:break-all; }
.gantt-time { font-size:11px;color:#909399;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.gantt-time .time-est { color:#909399;display:block; }
.gantt-time .time-actual { color:var(--blue-primary);display:block;margin-top:2px; }
.gantt-bar-area { flex:1;min-width:0;display:flex;align-items:center;gap:10px;padding:0 4px; }
.gantt-bar-wrap { flex:1;height:30px;background:#f0f2f5;border-radius:8px;position:relative;overflow:visible;transition:all .3s; }
.gantt-bar-wrap:hover { transform:scaleY(1.15);background:#e8eaf0;z-index:1000; }
.gantt-bg { position:absolute;top:7px;height:16px;background:#dcdfe6;border-radius:6px;z-index:1;pointer-events:none; }
.gantt-actual { position:absolute;top:7px;height:16px;background:linear-gradient(90deg, var(--blue-primary), var(--blue-primary-light));border-radius:6px;z-index:2;opacity:0.9;box-shadow:0 1px 4px rgba(59,130,246,0.25);pointer-events:none; }
.gantt-actual.early { background:linear-gradient(90deg, #67c23a, #85ce61);box-shadow:0 1px 4px rgba(103,194,58,0.25); }
.gantt-actual.delay { background:linear-gradient(90deg, #f56c6c, #f89898);box-shadow:0 1px 4px rgba(245,108,108,0.25); }
.gantt-actual.suspended { background:linear-gradient(90deg, #909399, #c0c4cc);box-shadow:0 1px 4px rgba(144,147,153,0.25); }
.gantt-actual.awaiting { background:linear-gradient(90deg, #e6a23c, #f3d19e);box-shadow:0 1px 4px rgba(230,162,60,0.25); }
.gantt-actual.rework { background:linear-gradient(90deg, #9093fc, #c6c8ff);box-shadow:0 1px 4px rgba(144,147,252,0.25); }
.gantt-actual.cancelled { background:linear-gradient(90deg, #606266, #909399);box-shadow:0 1px 4px rgba(96,98,102,0.25); }
.gantt-dot { position:absolute;top:5px;width:6px;height:20px;border-radius:6px;z-index:4;pointer-events:none;transform:translateX(-50%); }
.gantt-dot.est { background:#909399;border:1.5px solid #fff;box-sizing:border-box; }
.gantt-dot.actual { background:var(--blue-primary);border:1.5px solid #fff;box-sizing:border-box; }
.gantt-dot.actual.early { background:#67c23a; }
.gantt-dot.actual.delay { background:#f56c6c; }
.gantt-status { width:80px;text-align:center;flex-shrink:0; }
.gantt-tooltip { position:absolute;background:rgba(0,0,0,0.85);color:#fff;padding:8px 12px;border-radius:8px;font-size:12px;line-height:1.6;white-space:nowrap;z-index:999;pointer-events:none;display:none;backdrop-filter:blur(8px); }
.gantt-bar-wrap:hover .gantt-tooltip { display:block; }

/* ===== 项目列表选中行 ===== */
.el-table .current-row td { background-color:rgba(59,130,246,0.06) !important; }
.el-table .current-row td:first-child { border-left:3px solid var(--blue-primary); }

/* ===== 智能助手浮动窗口 ===== */
.ai-assistant-float { position:fixed;right:24px;bottom:24px;z-index:1000;display:flex;flex-direction:column;align-items:flex-end;gap:10px; }
.ai-assistant-btn { width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg, var(--blue-primary), #2563eb);color:#fff;display:flex;justify-content:center;align-items:center;font-size:22px;cursor:pointer;box-shadow:0 4px 15px rgba(59,130,246,0.4);transition:all .3s; }
.ai-assistant-btn:hover { transform:scale(1.08);box-shadow:0 6px 20px rgba(59,130,246,0.5); }
.ai-assistant-panel { width:400px;height:520px;background:#fff;border-radius:var(--border-radius-lg);box-shadow:0 8px 30px rgba(0,0,0,0.15);display:none;flex-direction:column;overflow:hidden;border:1px solid #f0f0f0; }
.ai-assistant-float.open .ai-assistant-panel { display:flex; }
.ai-assistant-header { background:linear-gradient(135deg, var(--blue-primary), #2563eb);color:#fff;padding:12px 16px;display:flex;justify-content:space-between;align-items:center;font-weight:500;font-size:14px; }
.ai-assistant-body { flex:1;padding:16px;overflow-y:auto;background:#f8f9fb; }
.ai-assistant-footer { padding:12px 16px;border-top:1px solid #ebeef5;background:#fff; }
.ai-msg { display:flex;margin-bottom:12px; }
.ai-msg.assistant { justify-content:flex-start; }
.ai-msg.user { justify-content:flex-end; }
.ai-msg-bubble { max-width:80%;padding:10px 14px;border-radius:12px;font-size:13px;line-height:1.6;word-break:break-all; }
.ai-msg.assistant .ai-msg-bubble { background:#fff;color:#303133;border:1px solid #ebeef5;box-shadow:0 1px 4px rgba(0,0,0,0.04); }
.ai-msg.user .ai-msg-bubble { background:linear-gradient(135deg, var(--blue-primary), #2563eb);color:#fff; }

/* 销售台账操作列对齐 */
.op-col .cell { padding-left: 0 !important; padding-right: 0 !important; }
.op-col .el-button--text { padding-left: 10px !important; padding-right: 10px !important; margin-left: 0 !important; }
.el-table__header-wrapper .op-col .cell { padding-left: 10px !important; }