/* ============================================================
   TimeSeek Workstation — 公共组件库
   按钮、表单、表格、卡片、磁贴、排行、事件、进度条等
   ============================================================ */

/* ---- 按钮 ---- */
.btn{
  display:inline-flex;align-items:center;gap:6px;
  border:1px solid var(--line);
  background:rgba(45,156,219,.15);
  color:var(--text);
  border-radius:8px;
  padding:9px 13px;
  font-size:13px;
  cursor:pointer;
  transition:all .18s;
  white-space:nowrap;
  text-decoration:none;
}
.btn:hover{
  background:rgba(45,156,219,.28);
  border-color:var(--primary);
}
.btn.primary{
  background:var(--primary);
  border-color:var(--primary);
  box-shadow:var(--glow);
}
.btn.primary:hover{background:var(--primary-light)}
.btn.success{background:var(--success);border-color:var(--success)}
.btn.warn{background:var(--warn);border-color:var(--warn);color:#17202a}
.btn.danger{background:var(--danger);border-color:var(--danger)}
.btn.sm{padding:5px 10px;font-size:12px}
.btn.lg{padding:12px 20px;font-size:15px}

/* ---- 输入框 / 下拉 ---- */
.input,.select{
  background:#fff;
  border:1px solid #d0d5dd;
  color:#1a1a1a;
  border-radius:8px;
  padding:8px 10px;
  outline:none;
  font-size:13px;
  transition:border-color .2s;
}
.input:focus,.select:focus{border-color:#2d9cdb;box-shadow:0 0 0 2px rgba(45,156,219,.2)}
.input{width:210px}
.select{cursor:pointer}
.select:hover{border-color:#9ca3af;background-color:#f9fafb}

/* ---- 标签 (chip) ---- */
.chip{
  border:1px solid var(--line);
  background:rgba(255,255,255,.04);
  color:var(--muted);
  border-radius:999px;
  padding:7px 10px;
  font-size:12px;
  cursor:pointer;
  white-space:nowrap;
  transition:all .18s;
}
.chip.active{
  background:rgba(45,156,219,.28);
  color:#fff;
  border-color:var(--primary);
}
.chip:hover:not(.active){
  background:rgba(45,156,219,.12);
  color:#fff;
}

/* ---- 磁贴 (板块树图用) ---- */
.tile{
  border:1px solid rgba(45,156,219,.2);
  border-radius:8px;
  padding:10px;
  color:#fff;
  background:#0b1b2f;
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  cursor:pointer;
  transition:all .18s;
  min-height:78px;
}
.tile:hover,.tile.active{
  border-color:var(--warn);
  box-shadow:0 0 18px rgba(255,170,58,.18);
}
.tile.big{grid-row:span 2}
.tile.wide{grid-column:span 2}
.tile-name{font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tile-sub{color:var(--muted);font-size:12px}
.tile-value{
  font-family:Consolas,monospace;
  color:#ffd27d;
  font-size:20px;
}
.tile-ratio{font-family:Consolas,monospace}
/* 磁贴配色 */
.tile.hot{background:linear-gradient(135deg,rgba(255,170,58,.72),rgba(15,35,60,.95))}
.tile.cool{background:linear-gradient(135deg,rgba(45,156,219,.58),rgba(11,27,47,.95))}
.tile.risk{background:linear-gradient(135deg,rgba(255,77,79,.62),rgba(82,23,30,.95))}
.tile.green{background:linear-gradient(135deg,rgba(0,214,143,.48),rgba(15,35,60,.95))}

/* ---- 进度条 ---- */
.track{height:6px;margin-top:6px;background:rgba(255,255,255,.08);border-radius:99px;overflow:hidden}
.fill{height:100%;border-radius:99px;background:var(--primary);transition:width .4s ease}
.track.riskbar .fill,.fill.risk{background:var(--warn)}
.track.successbar .fill,.fill.success{background:var(--success)}
.track.dangerbar .fill,.fill.danger{background:var(--danger)}

/* ---- 趋势柱状图 (脉冲可视化) ---- */
.trend{
  height:180px;
  display:flex;
  align-items:flex-end;
  gap:7px;
  overflow:auto;
  padding:14px 10px 0;
  border-top:1px solid rgba(45,156,219,.16);
  background:linear-gradient(180deg,rgba(45,156,219,.05),transparent);
}
.trend-bar{
  min-width:18px;
  border-radius:5px 5px 0 0;
  background:linear-gradient(180deg,#FFAA3A,#2D9CDB);
  box-shadow:0 0 10px rgba(45,156,219,.22);
  transition:height .3s ease;
}

/* ---- 排行列表 ---- */
.rank-list{padding:10px 14px;display:grid;gap:8px}
.rank-item{
  display:grid;
  grid-template-columns:34px minmax(0,1fr) auto;
  align-items:center;
  gap:10px;
  border-bottom:1px solid rgba(45,156,219,.14);
  padding-bottom:10px;
}
.rank-item:last-child{border-bottom:0;padding-bottom:0}
.rank-no{
  width:30px;height:30px;
  border-radius:8px;
  background:#0b1b2f;
  display:grid;
  place-items:center;
  color:var(--primary-light);
  font-weight:800;
  font-size:13px;
}
.rank-no.top{background:rgba(255,170,58,.2);color:var(--warn)}
.rank-name{font-weight:800;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.rank-sub{color:var(--subtle);font-size:12px;margin-top:3px}
.rank-val{font-family:Consolas,monospace;font-weight:800}

/* ---- 事件列表 ---- */
.event{
  display:grid;
  grid-template-columns:54px minmax(0,1fr) 54px;
  gap:10px;
  align-items:center;
  border-bottom:1px solid rgba(45,156,219,.14);
  padding:10px 0;
}
.event:last-child{border-bottom:0}
.event time{color:var(--warn);font-family:Consolas,monospace;font-size:12px}
.event p{margin:0;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.event em{font-style:normal;color:var(--subtle);text-align:right;font-size:12px}

/* ---- 迷你图例卡 ---- */
.mini-legend{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:8px;
  padding:10px 14px;
  border-top:1px solid rgba(45,156,219,.16);
}
.legend-card{
  background:#0b1b2f;
  border:1px solid rgba(45,156,219,.18);
  border-radius:8px;
  padding:8px 10px;
}
.legend-card label{color:var(--subtle);display:block;font-size:12px}
.legend-card b{display:block;margin-top:3px;font-size:15px}

/* ---- 数据表格 ---- */
.table-wrap{overflow:auto}
.table-wrap.tall{max-height:620px}
table.ws-table{
  width:100%;
  border-collapse:separate;
  border-spacing:0;
  min-width:620px;
}
table.ws-table th,table.ws-table td{
  border-bottom:1px solid rgba(45,156,219,.14);
  padding:6px 7px;
  text-align:right;
  white-space:nowrap;
  font-size:12px;
}
table.ws-table th{
  position:sticky;
  top:0;
  background:#0d2b4d;
  color:var(--muted);
  font-weight:600;
  font-size:11px;
  z-index:3;
  text-align:center;
}
table.ws-table td{
  font-family:Consolas,"Microsoft YaHei",monospace;
  color:#e8f4ff;
}
table.ws-table td.left{text-align:left}
table.ws-table tr:hover td{background:rgba(45,156,219,.08)}
table.ws-table .code{color:var(--primary-light);font-weight:800}
table.ws-table .bar-cell{min-width:112px}
table.ws-table .bar-cell b{display:block;font-size:11px;color:inherit}

/* ---- 驾驶舱磁贴网格 ---- */
.cockpit-map{
  padding:12px;
  display:grid;
  grid-template-columns:1.25fr 1fr 1fr 1.15fr;
  grid-auto-rows:96px;
  gap:8px;
}

/* ---- 功能模块卡片 ---- */
.modules-grid{
  display:grid;
  grid-template-columns:repeat(5,minmax(160px,1fr));
  gap:12px;
}
.module-card{
  background:var(--panel);
  border:1px solid var(--line);
  border-radius:10px;
  padding:20px 16px;
  text-align:center;
  transition:all .2s;
  cursor:pointer;
  text-decoration:none;
  color:var(--text);
}
.module-card:hover{
  border-color:var(--primary);
  box-shadow:var(--glow);
  transform:translateY(-2px);
}
.module-card i{font-size:28px;color:var(--primary-light);margin-bottom:10px;display:block}
.module-card .card-name{font-weight:700;font-size:14px;margin-bottom:4px}
.module-card .card-desc{color:var(--subtle);font-size:12px}

/* ---- 特色卡片 ---- */
.features-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(200px,1fr));
  gap:14px;
}
.feature-card{
  background:var(--panel);
  border:1px solid var(--line);
  border-radius:10px;
  padding:22px 18px;
}
.feature-card i{font-size:24px;color:var(--warn);margin-bottom:12px;display:block}
.feature-card h4{color:#fff;margin:0 0 8px;font-size:15px}
.feature-card p{color:var(--muted);margin:0;font-size:13px;line-height:1.6}

/* ---- 消息通知 ---- */
.notification-container{
  position:fixed;top:80px;right:20px;z-index:9999;
  display:flex;flex-direction:column;gap:8px;
}
.notification{
  background:var(--panel);
  border:1px solid var(--line);
  border-radius:8px;
  padding:12px 16px;
  box-shadow:var(--shadow);
  color:var(--text);
  font-size:13px;
  min-width:280px;
  max-width:400px;
  animation:slideIn .25s ease;
}
.notification.success{border-left:3px solid var(--success)}
.notification.error{border-left:3px solid var(--danger)}
.notification.warning{border-left:3px solid var(--warn)}
.notification.info{border-left:3px solid var(--primary)}
@keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}

/* ---- Hero (首页保留兼容) ---- */
.home-hero{
  background:linear-gradient(135deg,rgba(7,34,62,.95),rgba(11,27,47,.9));
  border:1px solid var(--line);
  border-radius:12px;
  padding:40px 36px;
  margin-bottom:20px;
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:30px;
}
.hero-left h1{font-size:32px;margin:0 0 8px;color:#fff}
.hero-left .hero-accent{color:var(--warn)}
.hero-desc{color:var(--muted);font-size:15px;margin:0 0 18px;max-width:500px}
.hero-cta{
  display:inline-flex;align-items:center;gap:8px;
  background:var(--warn);color:#17202a;
  padding:10px 22px;border-radius:8px;font-weight:800;
  transition:all .2s;
}
.hero-cta:hover{box-shadow:0 8px 24px rgba(255,170,58,.3);transform:translateY(-1px)}
.hero-badge{
  display:inline-flex;align-items:center;gap:6px;
  background:rgba(45,156,219,.18);color:var(--primary-light);
  border:1px solid rgba(45,156,219,.3);
  padding:5px 12px;border-radius:99px;font-size:12px;margin-bottom:10px;
}
.hero-stats{display:flex;gap:20px}
.hero-stat{text-align:center}
.hero-stat-num{display:block;font-size:36px;font-weight:800;color:var(--warn);font-family:Consolas,monospace}
.hero-stat-lbl{color:var(--subtle);font-size:13px}

/* ---- AI 客服悬浮按钮 ---- */
/* ---- 加载骨架 ---- */
.skeleton{background:linear-gradient(90deg,var(--panel-2) 25%,rgba(45,156,219,.08) 50%,var(--panel-2) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:8px}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}

/* ---- 响应式 ---- */
@media(max-width:1220px){
  .modules-grid{grid-template-columns:repeat(3,1fr)}
  .features-grid{grid-template-columns:repeat(2,1fr)}
  .cockpit-map{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:820px){
  .modules-grid{grid-template-columns:repeat(2,1fr)}
  .features-grid{grid-template-columns:1fr}
  .cockpit-map{grid-template-columns:repeat(2,1fr)}
  .home-hero{flex-direction:column;text-align:center}
  .hero-stats{justify-content:center}
}
@media(max-width:520px){
  .modules-grid{grid-template-columns:1fr}
  .cockpit-map{grid-template-columns:1fr}
  .tile.big,.tile.wide{grid-column:auto;grid-row:auto}
}

/* ---- 工具类 (Bootstrap 兼容补丁) ---- */
.d-none{display:none !important}
.d-flex{display:flex !important}
.justify-content-between{justify-content:space-between !important}
.align-items-center{align-items:center !important}
.flex-wrap{flex-wrap:wrap !important}

.text-center{text-align:center !important}
.text-danger{color:var(--danger) !important}
.text-white{color:#fff !important}

/* margin */
.mr-1{margin-right:.25rem !important}
.mr-2{margin-right:.5rem !important}
.mr-3{margin-right:1rem !important}
.mr-4{margin-right:1.5rem !important}
.ml-2{margin-left:.5rem !important}
.mb-3{margin-bottom:1rem !important}
.mb-4{margin-bottom:1.5rem !important}
.mt-2{margin-top:.5rem !important}
.mt-4{margin-top:1.5rem !important}
.mt-6{margin-top:4rem !important}

/* padding */
.py-5{padding-top:3rem !important;padding-bottom:3rem !important}

/* gap */
.gap-4{gap:1.5rem !important}

/* 表单控件 */
.form-control{
  display:block;
  width:100%;
  background:var(--panel);
  border:1px solid var(--line);
  color:var(--text);
  border-radius:6px;
  padding:8px 12px;
  font-size:14px;
  outline:none;
  transition:border-color .2s;
}
.form-control:focus{border-color:var(--primary)}

/* 徽章 */
.badge{
  display:inline-block;
  padding:4px 10px;
  border-radius:99px;
  font-size:12px;
  font-weight:600;
  line-height:1.4;
}
.badge-info{background:rgba(45,156,219,.2);color:var(--primary-light);border:1px solid rgba(45,156,219,.3)}

/* 按钮尺寸变体 */
.btn-sm{padding:5px 10px;font-size:12px}
.btn-secondary{background:rgba(255,255,255,.08);border-color:var(--line);color:var(--muted)}
.btn-secondary:hover{background:rgba(255,255,255,.14);color:var(--text)}

/* 加载动画 */
.spinner-border{
  display:inline-block;
  width:2rem;height:2rem;
  border:.2em solid var(--line);
  border-right-color:var(--primary);
  border-radius:50%;
  animation:spinner-border .75s linear infinite;
}
@keyframes spinner-border{to{transform:rotate(360deg)}}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* 卡片 */
.card{
  background:var(--panel);
  border:1px solid var(--line);
  border-radius:12px;
  overflow:hidden;
}
.card-header{
  padding:18px 24px;
  border-bottom:1px solid var(--line);
  display:flex;
  justify-content:space-between;
  align-items:center;
  flex-wrap:wrap;
  gap:12px;
}
.card-body{padding:24px}

/* 表格 */
.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}
.table{width:100%;border-collapse:collapse}
.table-hover tbody tr:hover{background:rgba(45,156,219,.08)}
.table th,.table td{padding:12px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
