/* ===== 基础与全局背景 ===== */
*{box-sizing:border-box;margin:0;padding:0}
html,body{
  width:100vw;height:100vh;overflow:hidden;
  font-family:var(--font-cn);
  font-size:13px;color:var(--txt-1);
  -webkit-font-smoothing:antialiased;
  background:#000;
}

/* 固定 16:9 舞台:虚拟画布 1920×1080,由 JS 计算 scale 自适应视口
   transform-origin 留默认 (center),配合 translate(-50%,-50%) 在任意 scale 都能居中 */
.stage{
  position:absolute;left:50%;top:50%;
  width:1920px;height:1080px;
  transform:translate(-50%,-50%) scale(var(--stage-scale,1));
  background:var(--bg-deep);
  overflow:hidden;
}
.stage::before{
  content:"";position:absolute;inset:0;
  background-image:
    linear-gradient(rgba(63,195,245,.025) 1px,transparent 1px),
    linear-gradient(90deg,rgba(63,195,245,.025) 1px,transparent 1px);
  background-size:80px 80px;
  pointer-events:none;
  mask-image:radial-gradient(ellipse at center,#000 30%,transparent 90%);
  z-index:1;
}
.stage::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(1400px 700px at 50% 0%,rgba(31,80,150,.45),transparent 60%),
    radial-gradient(1100px 800px at 50% 100%,rgba(15,46,90,.5),transparent 70%),
    linear-gradient(180deg,#02060f 0%,#04102a 50%,#061a3d 100%);
  z-index:0;
}
body{position:relative}

/* 扫描线特效 */
.scan{
  position:absolute;left:0;right:0;top:0;height:1px;
  background:linear-gradient(90deg,transparent,var(--cyan),transparent);
  opacity:.4;pointer-events:none;
  animation:scanline 8s linear infinite;
}
@keyframes scanline{
  0%{transform:translateY(0);opacity:0}
  10%{opacity:.4}
  90%{opacity:.4}
  100%{transform:translateY(1080px);opacity:0}
}

@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}
@keyframes spin{to{transform:rotate(360deg)}}

/* ===== 主网格 ===== */
.main{
  position:relative;
  height:calc(1080px - 88px);
  padding:14px 22px;
  display:grid;
  grid-template-columns:380px 1fr 380px;
  grid-template-rows:1fr 280px;
  grid-template-areas:
    "data thermal kpi"
    "calib calib  calib";
  gap:14px;
  z-index:2;
}
.p-data       {grid-area:data;display:flex;flex-direction:column;gap:10px;min-height:0}
.p-thermal-col{grid-area:thermal;display:flex;flex-direction:column;gap:10px;min-height:0}
.p-thermal-col .p-thermal{flex:1;min-height:0}
.p-kpi        {grid-area:kpi}
.p-calib      {grid-area:calib}
