/* 550C 项目工作台：工业军用风格，与 550W 窗口统一 */
.py-win{
  position:fixed;left:60px;top:44px;width:min(1080px,94vw);height:min(700px,90vh);
  background:var(--win-bg,#0B0F0E);border:1px solid var(--accent-b,#A9C4A9);
  box-shadow:0 18px 60px rgba(0,0,0,.85),0 0 22px rgba(140,253,255,.10);
  z-index:2050;display:none;flex-direction:column;
  color:var(--win-txt,#CFE3DA);font-family:Consolas,Menlo,monospace;
  min-width:520px;min-height:360px;overflow:hidden;
  text-transform:none;letter-spacing:normal;
}
/* 与 SYS-MGMT 等原生窗口共用 .maximized / .collapsed 行为 */
.py-win.maximized{position:fixed!important;inset:0!important;width:auto!important;height:auto!important;transform:none!important;}
.py-win.maximized .rsz{display:none;}
.py-win.collapsed{height:auto!important;}
.py-win.collapsed .py-body{display:none;}
.py-win.collapsed .rsz{display:none;}
/* 八向缩放手柄（initWinChrome 注入 .rsz-*） */
.py-win .rsz{position:absolute;z-index:9;}
.py-win .rsz-n{top:-3px;left:12px;right:12px;height:3px;cursor:n-resize;}
.py-win .rsz-s{bottom:-3px;left:12px;right:12px;height:3px;cursor:s-resize;}
.py-win .rsz-e{top:12px;bottom:12px;right:-3px;width:3px;cursor:e-resize;}
.py-win .rsz-w{top:12px;bottom:12px;left:-3px;width:3px;cursor:w-resize;}
.py-win .rsz-ne{top:-3px;right:-3px;width:8px;height:8px;cursor:ne-resize;}
.py-win .rsz-nw{top:-3px;left:-3px;width:8px;height:8px;cursor:nw-resize;}
.py-win .rsz-se{bottom:-3px;right:-3px;width:8px;height:8px;cursor:se-resize;}
.py-win .rsz-sw{bottom:-3px;left:-3px;width:8px;height:8px;cursor:sw-resize;}
.py-head-right{margin-left:auto;display:flex;align-items:center;gap:8px;}
.py-head-right .winbtns{margin-left:0;padding-left:0;}
.py-tag{font-size:9.5px;color:var(--white,#9DB8AE);letter-spacing:.1em;}
.py-bar{
  flex:none;display:flex;align-items:center;gap:6px;padding:6px 10px;
  border-bottom:1px solid var(--win-line,rgba(122,139,122,.30));background:#0E1211;
}
.py-sel{
  background:#0A0D0C;border:1px solid var(--win-line,rgba(122,139,122,.30));
  color:var(--accent-b,#A9C4A9);font:12px Consolas,monospace;padding:3px 6px;outline:none;min-width:150px;
}
.py-btn{
  background:#0E1211;border:1px solid var(--win-line,rgba(122,139,122,.30));
  color:var(--accent-b,#A9C4A9);font:12px Consolas,monospace;padding:4px 10px;cursor:pointer;
}
.py-btn:hover{background:rgba(122,139,122,.22);color:var(--white-hi,#E8F5EE);}
.py-btn:active{transform:translateY(1px);}
.py-btn.primary{background:var(--accent-d,#4A5A52);border-color:var(--accent-d,#4A5A52);color:var(--white-hi,#E8F5EE);}
.py-btn.primary:hover{background:#5a665a;border-color:#5a665a;}
.py-btn.danger:hover{color:#ff6b6b;border-color:#ff6b6b;}
.py-sp{flex:1;}
.py-body{flex:1;min-height:0;display:flex;}
.py-side{
  width:184px;flex:none;overflow:auto;border-right:1px solid var(--win-line,rgba(122,139,122,.30));
  background:#0A0E0D;padding:4px 0;
}
.py-side-hd{padding:5px 10px;font-size:10.5px;color:var(--white,#9DB8AE);letter-spacing:.1em;
  border-bottom:1px solid rgba(122,139,122,.16);margin-bottom:4px;display:flex;align-items:center;gap:6px;}
.py-side-hd .py-dot{width:5px;height:5px;background:var(--accent,#8CFDFF);flex:none;}
.py-file{padding:5px 12px;font-size:12px;color:var(--win-txt,#CFE3DA);cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:6px;}
.py-file:hover{background:rgba(122,139,122,.16);color:var(--white-hi,#E8F5EE);}
.py-file.on{background:rgba(122,139,122,.26);color:var(--white-hi,#E8F5EE);
  border-left:2px solid var(--accent,#8CFDFF);padding-left:10px;}
.py-file .py-dirty{width:5px;height:5px;border-radius:50%;background:var(--amber,#E8A020);flex:none;margin-left:auto;}
.py-main{flex:1;min-width:0;display:flex;flex-direction:column;background:#050807;}
.py-path{padding:4px 12px;font-size:10.5px;color:var(--white,#9DB8AE);
  border-bottom:1px solid rgba(122,139,122,.16);flex:none;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;display:flex;align-items:center;gap:8px;}
.py-path .py-pstat{font-size:9.5px;letter-spacing:.1em;color:#7d9a8f;margin-left:6px;}
.py-path #pyOutSt{margin-left:auto;}
.py-path .py-pstat.dirty{color:var(--amber,#E8A020);}
.py-path .py-pstat.run{color:var(--accent,#8CFDFF);}
.py-path .py-pstat.ok{color:var(--accent-b,#A9C4A9);}
.py-path .py-pstat.bad{color:#ff6b6b;}

/* ---------- 代码编辑器：行号 + 语法高亮 ---------- */
.py-ed{flex:1;min-height:0;display:flex;position:relative;background:#050807;overflow:hidden;}
.py-gutter{
  flex:none;width:52px;box-sizing:border-box;padding:10px 10px 10px 0;text-align:right;
  color:#47625a;font:12.5px/21px Consolas,Menlo,monospace;background:#040706;
  border-right:1px solid rgba(122,139,122,.14);overflow:hidden;user-select:none;white-space:pre;
}
.py-gutter .gline{height:21px;line-height:21px;}
.py-gutter .gline.err{color:#ff6b6b;}
.py-ed-main{flex:1;min-width:0;position:relative;overflow:hidden;}
.py-hl{
  position:absolute;left:0;top:0;width:100%;height:100%;margin:0;box-sizing:border-box;
  padding:10px 12px;overflow:hidden;pointer-events:none;white-space:pre;tab-size:4;
  color:#B8D8C8;font:12.5px/21px Consolas,Menlo,monospace;background:transparent;
}
.py-hl code{font:inherit;color:inherit;}
.py-code{
  position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box;margin:0;
  resize:none;border:0;outline:none;overflow:auto;white-space:pre;tab-size:4;
  background:transparent;color:transparent;caret-color:#8CFDFF;
  font:12.5px/21px Consolas,Menlo,monospace;padding:10px 12px;
  -webkit-text-fill-color:transparent;
}
.py-code::selection{background:rgba(140,253,255,.28);}
.py-curline,.py-errline{position:absolute;left:0;right:0;height:21px;pointer-events:none;display:none;}
.py-curline{background:rgba(140,253,255,.045);border-left:2px solid rgba(140,253,255,.35);}
.py-errline{background:rgba(255,80,80,.12);border-left:2px solid #ff6b6b;}
.py-gutter .gerr{color:#ff6b6b;font-weight:bold;}

/* 语法着色 */
.py-hl .t-kw{color:#6FD3FF;}
.py-hl .t-str{color:#C8E08A;}
.py-hl .t-num{color:#E8C06A;}
.py-hl .t-com{color:#54726A;font-style:italic;}
.py-hl .t-bi{color:#A9C4E8;}
.py-hl .t-def{color:#8CFDFF;}
.py-hl .t-dec{color:#E8A020;}

/* ---------- 输出 ---------- */
.py-split{flex:none;height:5px;cursor:row-resize;background:#0A0E0D;border-top:1px solid rgba(122,139,122,.10);}
.py-split:hover{background:rgba(122,139,122,.35);}
.py-out-head{
  flex:none;display:flex;align-items:center;gap:8px;padding:4px 12px;
  border-top:1px solid var(--win-line,rgba(122,139,122,.30));border-bottom:1px solid rgba(122,139,122,.16);
  background:#0E1211;font-size:10.5px;color:var(--white,#9DB8AE);letter-spacing:.12em;
}
.py-out-st{margin-left:auto;font-size:10px;}
.py-out-st.ok{color:var(--accent-b,#A9C4A9);}
.py-out-st.bad{color:var(--red,#ff6b6b);}
.py-out-st.run{color:var(--accent,#8CFDFF);}
.py-mini{background:transparent;border:1px solid rgba(122,139,122,.30);color:var(--white,#9DB8AE);
  font:10px Consolas,monospace;padding:1px 8px;cursor:pointer;}
.py-mini:hover{color:var(--white-hi,#E8F5EE);border-color:var(--accent-b,#A9C4A9);}
.py-out{
  flex:none;height:168px;overflow:auto;margin:0;padding:8px 12px;
  background:#050807;color:#A9C4A9;font:12px/1.6 Consolas,Menlo,monospace;
  white-space:pre-wrap;word-break:break-all;
}
.py-out .ln{min-height:19.2px;}
.py-out .err{color:#ff6b6b;}
.py-out .err .py-jump{color:#ffb0b0;text-decoration:underline;cursor:pointer;}
.py-out .dim{color:#6f8a80;}
.py-out .ok{color:#8CFDFF;}
.py-out::-webkit-scrollbar{width:8px;}
.py-out::-webkit-scrollbar-thumb{background:rgba(122,139,122,.4);}

/* 底部状态条 */
.py-status{
  flex:none;display:flex;align-items:center;gap:14px;padding:3px 12px;
  background:#0A0E0D;border-top:1px solid rgba(122,139,122,.16);
  font-size:10px;color:#6f8a80;letter-spacing:.08em;user-select:none;
}
.py-status .py-pos{margin-left:auto;color:#8fa9a0;}
.py-status b{color:#A9C4A9;font-weight:normal;}

@media (max-width:720px){
  .py-win{left:0;top:0;width:100vw;height:100vh;min-width:0;}
  .py-side{width:112px;}
  .py-gutter{width:40px;}
  .py-status{font-size:9px;gap:8px;}
}

/* 联机公共工程：文件所属者标签 */
.py-owner{margin-left:auto;font-size:9px;color:#7f9187;white-space:nowrap;padding-left:6px;}
.py-file.on .py-owner{color:#9fb8aa;}
.ops-pub-req{display:none;margin-left:8px;background:#0c1511;border:1px solid #8d7550;color:#d9c8a3;font:10px Consolas,monospace;padding:2px 8px;cursor:pointer;}
