/* ================= 基础排版 ================= */
:root{
  /* 整体放大 Element Plus 字号体系 */
  --el-font-size-extra-small:13px;
  --el-font-size-small:14px;
  --el-font-size-base:15px;
  --el-font-size-medium:16px;
  --el-font-size-large:18px;
  --el-font-size-extra-large:22px;
}
html,body,#app{height:100%;margin:0}
body{
  font-family:"PingFang SC","HarmonyOS Sans SC","MiSans","Microsoft YaHei UI","Microsoft YaHei","Source Han Sans SC",system-ui,"Segoe UI",Roboto,sans-serif;
  font-size:15px; line-height:1.6; color:#1f2937; background:#f0f2f5;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  letter-spacing:.01em;
}
.boot-loading{display:flex;height:100%;align-items:center;justify-content:center;color:#909399;font-size:16px}

/* ================= 表单/表格/按钮 全局放大 ================= */
.el-table,.el-table--small{font-size:14.5px}
.el-table .cell{line-height:1.75}
.el-table th.el-table__cell{background:#f8fafc!important;color:#374151;font-weight:600}
.el-table th.el-table__cell .cell{white-space:nowrap}
.el-table--border th.el-table__cell:hover{background:#eef2f7!important}
.el-form-item__label{font-size:14.5px!important;color:#374151}
.el-input__inner,.el-textarea__inner,.el-select__placeholder{font-size:14.5px}
.el-button{font-size:14.5px}
.el-button--small{font-size:13.5px}
.el-tag{font-size:13px}
.el-menu-item,.el-sub-menu__title{font-size:15.5px!important;height:52px;line-height:52px}
.el-radio,.el-checkbox,.el-radio-group{font-size:14.5px}
.el-dialog__title{font-size:17px;font-weight:600}
.el-descriptions__label,.el-descriptions__content{font-size:14.5px}
.el-select-dropdown__item{font-size:14.5px}
.el-pagination{font-size:14px}
.el-pagination .el-select .el-input{font-size:14px}

/* ================= 登录 ================= */
.login-wrap{height:100%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1e3a8a 0%,#4f46e5 50%,#7c3aed 100%)}
.login-card{width:430px;background:#fff;border-radius:14px;padding:40px 36px;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.login-card h1{font-size:24px;margin:0 0 8px;color:#111827;letter-spacing:.02em}
.login-card .sub{color:#6b7280;font-size:14px;margin-bottom:26px}

/* ================= 品牌 ================= */
.logo img,.login-brand img{display:block;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.35)}
.logo img{width:32px;height:32px;flex:none}
.logo span{line-height:1.15}
.logo em{display:block;font-style:normal;font-size:11px;font-weight:400;color:#8fa3c0;letter-spacing:.35em;margin-top:2px}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.login-brand img{width:46px;height:46px;border-radius:12px}
.login-brand span{font-size:22px;font-weight:800;color:#111827;letter-spacing:.04em}

/* ================= 布局 ================= */
.el-aside{background:#1d2939}
.logo{height:60px;display:flex;align-items:center;gap:10px;padding:0 18px;color:#fff;font-weight:700;font-size:17px;white-space:nowrap;overflow:hidden;letter-spacing:.02em}
.el-header{background:#fff;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;padding:0 20px;font-size:15px}
.page{padding:18px;overflow:auto}
.crumb{color:#6b7280;font-size:14px;margin-bottom:14px}
.crumb b{color:#111827;font-size:19px;font-weight:700;letter-spacing:.01em}

/* ================= 卡片/面板 ================= */
.stat-card{background:#fff;border-radius:10px;padding:18px 22px;box-shadow:0 1px 3px rgba(0,0,0,.06)}
.stat-card .lab{color:#6b7280;font-size:14px}
.stat-card .val{font-size:30px;font-weight:700;color:#111827;margin-top:8px;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.stat-card .val.red{color:#dc2626}.stat-card .val.blue{color:#2563eb}.stat-card .val.green{color:#059669}.stat-card .val.orange{color:#d97706}.stat-card .val.purple{color:#7c3aed;font-size:20px!important}
.panel{background:#fff;border-radius:10px;padding:18px 20px;box-shadow:0 1px 3px rgba(0,0,0,.06);margin-bottom:16px}
.panel-title{font-weight:600;font-size:16.5px;margin-bottom:14px;color:#111827;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.chart{width:100%;height:360px}
.chart-lg{width:100%;height:440px}

/* ================= 业务小件 ================= */
.room-card{cursor:pointer;transition:box-shadow .2s}
.room-card:hover{box-shadow:0 4px 16px rgba(37,99,235,.18)}
.room-card.active{outline:2px solid #2563eb}
.room-card.living{border-left:4px solid #10b981}
.spark-wrap{margin-top:10px;background:#f8fafc;border-radius:6px;padding:4px 6px 0}
.spark-wrap svg{display:block}
.spark-wrap .muted{display:block;text-align:right;padding:0 2px 2px}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px}
.dot.on{background:#10b981;animation:pulse 1.2s infinite}
.dot.off{background:#d1d5db}
@keyframes pulse{50%{opacity:.3}}
.mono{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
.muted{color:#9ca3af;font-size:13.5px}
.link-copy{color:#2563eb;cursor:pointer}
.quick-form .el-form-item{margin-bottom:10px}
.mb8{margin-bottom:8px}.mt8{margin-top:8px}.ml4{margin-left:4px}.ml8{margin-left:8px}
.filter-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
/* EP 修正：daterange 自带 flex-grow:1、select 根默认 width:100%，会把筛选栏挤成一行一个 */
.filter-bar>.el-date-editor,.filter-bar>.el-select,.filter-bar>.el-input,.filter-bar>.el-input-number{flex:0 0 auto}
.f-lab{color:#64748b;font-size:13.5px;font-weight:600;margin-left:2px}
.f-lab:first-child{margin-left:0}

/* 卡片进直播间入口 */
.room-open{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;border:1.5px solid #10b981;color:#10b981;font-size:11px;text-decoration:none;transition:.15s;flex:none}
.room-open:hover{background:#10b981;color:#fff;transform:scale(1.1)}
.room-open.grey{border-color:#94a3b8;color:#94a3b8}
.room-open.grey:hover{background:#94a3b8;color:#fff}

/* 角色权限矩阵 */
table.perm{width:100%;border-collapse:collapse;font-size:13.5px}
.perm th,.perm td{border:1px solid #eef2f7;padding:8px 12px;text-align:left}
.perm th{background:#f8fafc;font-size:13px;text-align:center}
.perm th:first-child{width:auto;text-align:left}
.perm td.y{text-align:center;color:#059669;font-weight:700;width:120px}
.perm td.n{text-align:center;color:#d1d5db;font-weight:700;width:120px}

/* 历史场次复盘：行内展开 */
.sess-expand{padding:14px 18px;background:#f6f8fb;border-radius:0 0 8px 8px}
.mini-cards{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin-bottom:4px}
.mc{background:#fff;border:1px solid #eef2f7;border-radius:8px;padding:9px 12px}
.mc .l{font-size:12px;color:#6b7280}
.mc .v{font-size:17px;font-weight:700;color:#111827;margin-top:3px;font-variant-numeric:tabular-nums}
.mc .v.blue{color:#2563eb}.mc .v.red{color:#dc2626}.mc .v.green{color:#059669}.mc .v.orange{color:#d97706}.mc .v.purple{color:#7c3aed}
.ex-chart{height:360px;margin-top:10px;background:#fff;border:1px solid #eef2f7;border-radius:8px}
.el-table__expand-column .cell{padding:0 8px}
.el-table tr.el-table__row{cursor:pointer}

/* 因果分析结论 */
.concl{display:flex;gap:10px;align-items:flex-start;padding:11px 14px;border-radius:8px;margin-bottom:9px;font-size:14.5px;line-height:1.7;border-left:4px solid #cbd5e1;background:#f8fafc}
.concl .ico{flex:none;font-size:16px;line-height:1.5}
.concl.good{border-left-color:#10b981;background:#ecfdf5;color:#065f46}
.concl.warn{border-left-color:#f59e0b;background:#fffbeb;color:#92400e}
.concl.info{border-left-color:#3b82f6;background:#eff6ff;color:#1e40af}

/* RoomId 小徽标（数据监控各 Tab 通用，点击复制） */
.rid{font-size:11px;line-height:1.5;color:#94a3b8;background:#f1f5f9;border-radius:4px;padding:0 5px;cursor:copy;font-weight:400;font-family:ui-monospace,Consolas,monospace;white-space:nowrap}
.rid:hover{color:#2563eb;background:#e0e7ff}
/* 滑出页头部：场次ID/开播时间徽标（紫色系区别于RoomId） */
.rid.sess{color:#7c3aed;background:#f5f3ff}
.rid.sess:hover{color:#5b21b6;background:#ede9fe}

/* 房间卡片页脚：按项排列，窄屏整项折行，数字不再被劈开 */
.card-foot{display:flex;flex-wrap:wrap;align-items:baseline;gap:3px 10px;margin-top:7px;font-size:12px;color:#94a3b8}
.cf-ts{white-space:nowrap;font-variant-numeric:tabular-nums;border-left:2px solid #e5e7eb;padding-left:6px;margin-left:-6px}
.cf-sep{flex:1}
.cf-item{white-space:nowrap}
.cf-item b{font-weight:600;color:#374151;font-variant-numeric:tabular-nums;margin-left:2px}
.cf-item b.blue{color:#2563eb}.cf-item b.purple{color:#7c3aed}.cf-item b.orange{color:#d97706}
/* 房间卡片：名称独立一行完整显示（自动折行），操作/状态徽章第二行 */
.rc-name-row{display:flex;align-items:flex-start;gap:7px}
.rc-name-row .dot{margin-top:7px}
.room-card .rname{flex:1;min-width:0;font-size:14.5px;font-weight:600;color:#111;line-height:1.4;overflow-wrap:anywhere}
.rc-badge-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:5px}
.rc-badge-row .rc-spacer{flex:1}
.room-card .rid,.room-card .dot{flex:none}

/* 单直播间滑出页：平铺在左侧菜单(220px)右侧、不遮菜单；内容区内自滚动 */
.room-drawer-modal{left:220px}
.room-drawer.el-drawer{left:220px;right:0;width:auto!important;max-width:none}
.room-drawer .el-drawer__header{margin-bottom:12px;padding:16px 18px 0}
.room-drawer .el-drawer__body{background:#f0f2f5;padding:12px 14px 20px!important;overflow:auto!important;-webkit-overflow-scrolling:touch}
.room-drawer .panel{margin-bottom:12px}
@media (max-width:768px){
  /* 手机端侧栏本就不占位（收起为抽屉），滑出页全幅 */
  .room-drawer-modal{left:0}
  .room-drawer.el-drawer{left:0}
  .room-drawer .el-drawer__body{padding:8px 8px 16px!important}
}

/* ================= 手机适配（≤768px） ================= */
.hamburger{font-size:20px;color:#374151;cursor:pointer;padding:2px 8px;border-radius:6px;user-select:none}
.hamburger:active{background:#eef2f7}
.el-drawer .side-menu-wrap{height:100%;background:#1d2939;padding-bottom:20px;overflow:auto}
.el-drawer__body{padding:0!important;overflow:hidden!important}
.el-drawer .side-menu-wrap .el-menu{border-right:none;background:#1d2939}
@media (max-width:768px){
  .h-domain{display:none}
  .el-header{padding:0 12px;height:52px;line-height:52px}
  .page{padding:10px}
  .crumb{font-size:17px;padding:2px 2px 10px}
  .crumb b{font-size:17px}
  .login-card{width:92vw;padding:28px 22px}
  .panel{padding:12px;border-radius:10px}
  .panel-title{font-size:15px;flex-wrap:wrap;gap:6px;row-gap:6px}
  /* KPI/卡片栅格折行（EP 用 flex-basis+max-width 控宽，必须一起覆盖） */
  .el-col-4,.el-col-6{width:50%!important;flex:0 0 50%!important;max-width:50%!important}
  .el-col-8,.el-col-10,.el-col-12,.el-col-14,.el-col-16{width:100%!important;flex:0 0 100%!important;max-width:100%!important}
  .el-row>[class*='el-col-']{padding-left:5px!important;padding-right:5px!important}
  .stat-card{padding:12px 14px}
  .stat-card .val{font-size:20px!important}
  .stat-card .lab{font-size:12.5px}
  /* 图表 */
  .chart{height:280px}
  .chart-lg{height:320px}
  /* 筛选栏纵向堆叠 */
  .filter-bar{gap:8px}
  .filter-bar .el-date-editor,.filter-bar .el-select,.filter-bar .el-input,.filter-bar .el-input-number{width:100%!important;flex:1 1 100%!important}
  .filter-bar .el-button,.filter-bar .el-button-group,.filter-bar .f-lab{flex:0 0 auto}
  .filter-bar .f-lab{width:100%;margin:2px 0 -4px}
  .filter-bar [style*="flex:1"]{display:none!important}
  .filter-bar .muted{display:none}
  /* 弹窗/气泡 */
  .el-dialog{width:94%!important;max-width:94vw;margin-top:5vh!important}
  .el-dialog__body{padding:14px 16px;max-height:70vh;overflow:auto}
  .el-form-item__label{font-size:13px}
  .el-message-box{width:92%!important}
  .el-drawer.rtl,.el-drawer.ltr{max-width:86vw}
  /* 表格：整表横向滑动 */
  .el-table{font-size:13.5px}
  .el-table .cell{padding:0 8px}
  .el-pagination{flex-wrap:wrap;gap:6px;justify-content:center}
  .el-pagination .el-pagination__sizes,.el-pagination .el-pagination__jump{display:none}
  /* 触控放大 */
  .room-open{width:28px;height:28px;font-size:13px}
  .room-card .spark-wrap{display:none}
  .rcol{width:100%!important;flex:0 0 100%!important;max-width:100%!important}
  .mini-cards{grid-template-columns:repeat(3,1fr)}
  .ex-chart{height:300px}
  .sess-expand{padding:10px}
  .kpi-flex>.stat-card .val{font-size:20px!important}
  .el-tabs__item{padding:0 12px;font-size:14px}
  .concl{font-size:13.5px;padding:9px 11px}
  /* 因果/监控 KPI 行 */
  .kpi-flex{flex-wrap:wrap}
  .kpi-flex>.stat-card{box-sizing:border-box;flex:1 1 calc(50% - 8px)!important;max-width:calc(50% - 5px)}
  /* 单列表单两列改一列 */
  .el-col-12{width:100%!important;flex:0 0 100%!important;max-width:100%!important}
  .el-descriptions__table{table-layout:fixed}
}

.live-dur{font-size:11.5px;color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;padding:1px 8px;white-space:nowrap;font-weight:600}

.cum-chip{font-size:12px;color:#5b21b6;background:#f5f3ff;border:1px solid #ddd6fe;border-radius:10px;padding:2px 10px;white-space:nowrap}
.cum-chip b{font-family:Consolas,monospace}

.cum-row{display:flex;justify-content:space-between;margin-top:8px;padding-top:7px;border-top:1px dashed #eef1f6}
.cum-row .cumv{font-size:14.5px;font-weight:700;color:#0f766e}
.cum-row .cumv.blue2{color:#2563eb}
.cum-row .cumv.purp{color:#7c3aed}

/* ── 直播场次复盘：紧凑表格排印（仅 .sess-page 作用域，不影响其他页） ── */
.sess-page .crumb .muted,
.sess-page .panel-title .muted{font-size:12.5px;font-weight:400}
.sess-page .el-table{font-size:13px}
.sess-page .el-table th.el-table__cell .cell{font-size:12.5px}
.sess-page .el-table .cell{line-height:1.45;padding-left:7px;padding-right:7px}
.sess-page .el-table td.el-table__cell{padding:6px 0}
.sess-page .el-table th.el-table__cell{padding:8px 0}
.sess-page .nw{white-space:nowrap}
.sess-page .s-name{display:flex;align-items:center;gap:6px;min-width:0}
.sess-page .s-name b{font-size:13.5px;font-weight:600;color:#111827;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sess-page .s-no{margin-left:28px;margin-top:2px;display:flex;align-items:baseline;gap:8px;font-size:12px;min-width:0}
.sess-page .s-no .mono{color:#0f766e;font-weight:600;white-space:nowrap}
.sess-page .s-no .muted{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sess-page .sess-expand{font-size:13.5px}
.sess-page .mini-cards .mc .v{font-size:15px}

/* ── 直播场次复盘：详情滑出页（点行打开，关闭返回） ── */
.sess-drawer .el-drawer__header{margin-bottom:12px;padding:16px 18px 0}
.sess-drawer .el-drawer__body{background:#f0f2f5;padding:12px 16px 20px!important;overflow:auto!important;-webkit-overflow-scrolling:touch}
.sess-drawer .sess-expand{background:transparent;padding:0;border-radius:0;font-size:13.5px}
.sd-head{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap;row-gap:4px}
.sd-title{font-size:16px;color:#111827;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sess-drawer .ex-chart{height:400px}
.sess-drawer .mini-cards{grid-template-columns:repeat(5,1fr)}
.sess-drawer .mc .v{font-size:15px}
@media (max-width:1200px){
  .sess-drawer .mini-cards{grid-template-columns:repeat(4,1fr)}
}
@media (max-width:768px){
  .sess-drawer.el-drawer{width:100%!important}
  .sd-head .el-button{margin-left:auto}
}
