:root{--bg: #f3f5f9;--panel: #ffffff;--panel-2: #f8fafc;--line: #e3e8ef;--line-2: #d3dae4;--text: #17202b;--muted: #5d6b7d;--faint: #8a97a8;--brand: #0b5fff;--brand-2: #0a4ed6;--brand-soft: #e8f0ff;--ok: #12a150;--ok-soft: #e4f6ec;--warn: #c98a00;--warn-soft: #fff5d9;--bad: #d92d20;--bad-soft: #fde8e7;--info: #0e7490;--side: #0d1726;--side-2: #142236;--side-text: #c9d4e3;--radius: 10px;--shadow: 0 1px 2px rgba(16, 24, 40, .06), 0 4px 14px rgba(16, 24, 40, .06);--mono: "Cascadia Mono", "Consolas", ui-monospace, monospace;font-family:Segoe UI Variable,Segoe UI,system-ui,-apple-system,sans-serif;font-size:14px;color:var(--text);background:var(--bg)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg)}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--brand)}code,.mono{font-family:var(--mono);font-size:12.5px}h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.01em}h1{font-size:22px}h2{font-size:18px}h3{font-size:15px}h4{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}p{margin:0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#c5cdd8;border-radius:6px;border:2px solid transparent;background-clip:content-box}.shell{display:grid;grid-template-columns:236px 1fr;height:100%;transition:grid-template-columns .18s ease}.shell.mini{grid-template-columns:64px 1fr}.side{background:var(--side);color:var(--side-text);display:flex;flex-direction:column;padding:14px 10px;gap:3px;overflow-y:auto;overflow-x:hidden}.brand{display:flex;align-items:center;gap:10px;padding:4px 6px 18px;color:#fff;min-height:54px}.brand b{font-size:15px;letter-spacing:-.01em;display:block;white-space:nowrap}.brand small{display:block;color:#8ea3bd;font-size:11.5px;white-space:nowrap}.side .nav{display:flex;align-items:center;gap:12px;padding:9px 11px;border-radius:9px;cursor:pointer;color:var(--side-text);border:0;background:none;width:100%;text-align:left;white-space:nowrap;min-height:40px}.side .nav:hover{background:var(--side-2);color:#fff}.side .nav.active{background:#1d3150;color:#fff;box-shadow:inset 3px 0 #3b82ff}.side .nav .ico{flex:none}.side .sep{height:1px;background:#1f2f45;margin:10px 4px}.side .label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#6f86a3;padding:6px 11px}.side .proj{font-size:13px}.side .proj .nav-label{overflow:hidden;text-overflow:ellipsis}.proj-badge{width:22px;height:22px;border-radius:6px;background:#22406e;color:#cfe0ff;display:grid;place-items:center;font-size:11.5px;font-weight:700;flex:none}.nav.active .proj-badge{background:#3b82ff;color:#fff}.side .foot{margin-top:auto;display:flex;flex-direction:column;gap:4px;padding-top:10px}.foot-info{padding:6px 11px;font-size:12px;color:#7f93ad;line-height:1.6}.shell.mini .nav-label,.shell.mini .label{display:none}.shell.mini .side .nav{justify-content:center;padding:9px 0}.shell.mini .brand{justify-content:center;padding:4px 0 18px}.shell.mini .brand div{display:none}.brand img{border-radius:8px;flex:none}.main{display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden}.topbar{height:56px;display:flex;align-items:center;gap:10px;padding:0 20px;background:var(--panel);border-bottom:1px solid var(--line);flex:none}.topbar .crumb{color:var(--muted);display:flex;align-items:center;gap:6px;min-width:0}.topbar .crumb b{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crumb-link{color:var(--muted);text-decoration:none}.crumb-link:hover{color:var(--brand)}.topbar .spacer{flex:1}.chip{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:12.5px;font-weight:600;text-decoration:none;border:1px solid transparent;white-space:nowrap}.chip.ok{background:var(--ok-soft);color:#0b6b34;border-color:#b8e7cb}.chip.warn{background:var(--warn-soft);color:#7a5200;border-color:#f3dc9b}.chip.bad{background:var(--bad-soft);color:#a3170e;border-color:#f6b9b3}.content{flex:1;overflow:auto;padding:24px 28px 48px}.content.flush{padding:0;overflow:hidden;display:flex;flex-direction:column}.page{max-width:1180px;margin:0 auto}.loading-page{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;color:var(--muted)}.spinner.lg{width:34px;height:34px;border-width:3px}.ico{display:inline-block;vertical-align:-3px;flex:none}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid var(--line-2);background:var(--panel);padding:7px 13px;border-radius:8px;cursor:pointer;font-weight:550;white-space:nowrap;line-height:1.2;transition:background .12s,border-color .12s}.btn:hover{background:var(--panel-2);border-color:#c0c9d6}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-2)}.btn.danger{color:var(--bad)}.btn.danger.solid{background:var(--bad);border-color:var(--bad);color:#fff}.btn.ghost{border-color:transparent;background:transparent}.btn.ghost:hover{background:#eef2f7}.btn.sm{padding:4px 9px;font-size:12.5px;border-radius:7px}.btn.lg{padding:11px 18px;font-size:15px}.btn.ok{background:var(--ok);border-color:var(--ok);color:#fff}.iconbtn{width:32px;height:32px;padding:0}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card.pad{padding:18px}.card .head{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line)}.card .head .spacer{flex:1}.card .body{padding:16px 18px}.row{display:flex;align-items:center;gap:10px}.row.wrap{flex-wrap:wrap}.row.top{align-items:flex-start}.col{display:flex;flex-direction:column;gap:10px}.grow{flex:1;min-width:0}.grid{display:grid;gap:16px}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.muted{color:var(--muted)}.faint{color:var(--faint)}.small{font-size:12.5px}.tiny{font-size:11.5px}.right{margin-left:auto}.mt{margin-top:14px}.mb{margin-bottom:14px}.gap-lg{gap:18px}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:11.5px;font-weight:600;background:#eef2f7;color:#475467;white-space:nowrap}.badge.ok{background:var(--ok-soft);color:#0b7a3b}.badge.warn{background:var(--warn-soft);color:#8a5d00}.badge.bad{background:var(--bad-soft);color:#b42318}.badge.info{background:var(--brand-soft);color:var(--brand-2)}.badge.dark{background:#1d2939;color:#fff}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:#98a2b3;flex:none}.dot.green{background:var(--ok)}.dot.amber{background:#f5a524}.dot.red{background:var(--bad)}.dot.blue{background:var(--brand)}.field{display:flex;flex-direction:column;gap:5px}.field>span{font-size:12.5px;font-weight:600;color:#344054}.field small{color:var(--faint);font-size:11.5px}.input,select.input,textarea.input{border:1px solid var(--line-2);border-radius:8px;padding:8px 10px;background:#fff;outline:none;width:100%}.input:focus{border-color:var(--brand);box-shadow:0 0 0 3px #0b5fff22}textarea.input{resize:vertical;min-height:80px}.input.sm{padding:5px 8px;font-size:13px}.check{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.check input{width:16px;height:16px;accent-color:var(--brand)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 6px;background:var(--panel);flex-wrap:wrap}.tab{padding:11px 14px;border:0;background:none;cursor:pointer;color:var(--muted);font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:7px}.tab:hover{color:var(--text)}.tab.active{color:var(--brand);border-bottom-color:var(--brand)}.pills{display:inline-flex;background:#eef2f7;border-radius:9px;padding:3px;gap:2px}.pill{border:0;background:none;padding:5px 11px;border-radius:7px;cursor:pointer;font-weight:600;font-size:12.5px;color:var(--muted)}.pill.active{background:#fff;color:var(--text);box-shadow:0 1px 2px #0002}table.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th{text-align:left;font-weight:600;color:var(--muted);font-size:12px;padding:8px 10px;border-bottom:1px solid var(--line);background:var(--panel-2);position:sticky;top:0;z-index:1}.tbl td{padding:7px 10px;border-bottom:1px solid #eef1f5;vertical-align:top}.tbl tr:hover td{background:#fafbfd}.tbl tr.sel td{background:var(--brand-soft)}.tbl input.cell,.tbl select.cell{border:1px solid transparent;background:transparent;padding:3px 5px;border-radius:5px;width:100%;font-size:12.5px}.tbl input.cell:focus,.tbl select.cell:focus{border-color:var(--brand);background:#fff;outline:none}.scroll{overflow:auto}.empty{padding:40px 20px;text-align:center;color:var(--muted)}.empty .icon{font-size:30px;margin-bottom:8px}.progress{height:8px;background:#e9edf3;border-radius:99px;overflow:hidden}.progress>div{height:100%;background:var(--brand);border-radius:99px;transition:width .3s}.progress.ok>div{background:var(--ok)}.spinner{width:16px;height:16px;border-radius:50%;border:2px solid #c7d2e3;border-top-color:var(--brand);animation:spin .8s linear infinite;display:inline-block;flex:none}@keyframes spin{to{transform:rotate(360deg)}}.kpi{padding:14px 16px}.kpi .v{font-size:26px;font-weight:700;letter-spacing:-.02em}.kpi .l{color:var(--muted);font-size:12.5px}.callout{border:1px solid #c8daff;background:#f3f7ff;border-radius:10px;padding:12px 14px;color:#1d3a7a}.callout.warn{border-color:#f5d68a;background:#fffaeb;color:#7a5200}.callout.bad{border-color:#f6b9b3;background:#fff4f3;color:#8a1c13}.callout.ok{border-color:#a6e3bf;background:#f0fbf5;color:#0b5c2e}.pre{font-family:var(--mono);font-size:12px;background:#0f1720;color:#d6e2f0;border-radius:8px;padding:12px;overflow:auto;white-space:pre-wrap;word-break:break-word;max-height:360px}.kbd{font-family:var(--mono);font-size:11px;border:1px solid var(--line-2);border-bottom-width:2px;border-radius:4px;padding:0 4px;background:#fff}.divider{height:1px;background:var(--line);margin:14px 0}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0d172673;display:grid;place-items:center;z-index:50;padding:20px;animation:fade .12s}@keyframes fade{0%{opacity:0}}.modal{background:#fff;border-radius:14px;width:min(560px,100%);max-height:90vh;overflow:auto;box-shadow:0 20px 60px #0000004d}.modal.wide{width:min(880px,100%)}.modal .mh{padding:18px 22px 6px}.modal .mb{padding:12px 22px}.modal .mf{padding:14px 22px 18px;display:flex;gap:10px;justify-content:flex-end}.toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:60}.toast{background:#101828;color:#fff;padding:11px 14px;border-radius:10px;box-shadow:0 8px 30px #0004;max-width:420px;display:flex;gap:10px;align-items:flex-start;animation:slide .18s}.toast.bad{background:#8a1c13}.toast.ok{background:#0b5c2e}@keyframes slide{0%{transform:translateY(10px);opacity:0}}.hero{display:flex;align-items:center;gap:18px;background:linear-gradient(120deg,#0b2a5c,#0b5fff 70%,#39c4ff);color:#fff;border-radius:16px;padding:26px 28px;box-shadow:var(--shadow)}.hero h1{font-size:26px}.hero p{color:#d8e6ff;max-width:720px;margin-top:6px;line-height:1.5}.pathway{display:grid;grid-template-columns:repeat(8,1fr);gap:8px;margin-top:18px}.pathway div{background:#ffffff1f;border:1px solid rgba(255,255,255,.2);border-radius:10px;padding:9px 10px;font-size:12px;line-height:1.3}.pathway b{display:block;font-size:11px;color:#9fd0ff}.pcard{padding:16px;cursor:pointer;transition:transform .12s,box-shadow .12s;display:flex;flex-direction:column;gap:10px}.pcard:hover{transform:translateY(-2px);box-shadow:0 6px 22px #1018281f}.steps-mini{display:flex;gap:4px}.steps-mini span{flex:1;height:6px;border-radius:9px;background:#e4e9f0}.steps-mini span.done{background:var(--ok)}.steps-mini span.doing,.steps-mini span.stale{background:#f5a524}.workspace{display:flex;flex-direction:column;flex:1;min-height:0}.stepper{display:flex;align-items:center;gap:0;padding:8px 14px;background:var(--panel);border-bottom:1px solid var(--line);overflow-x:auto;flex:none;scrollbar-width:thin}.step{display:flex;align-items:center;gap:9px;padding:6px 10px;border-radius:10px;cursor:pointer;border:1px solid transparent;background:none;text-align:left;min-width:0;flex:none}.step:hover{background:#f1f4f9}.step .num{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#eef2f7;color:#5b6b82;flex:none;border:1.5px solid #dbe2ec}.step.done .num{background:var(--ok);color:#fff;border-color:var(--ok)}.step.doing .num,.step.stale .num{background:#fff7e6;color:#b06f00;border-color:#f5b74a}.step.active{background:var(--brand-soft);border-color:#c9dbff}.step.active .num{background:var(--brand);color:#fff;border-color:var(--brand);box-shadow:0 0 0 3px #0b5fff33}.step.active.done .num{background:var(--ok);border-color:var(--ok);box-shadow:0 0 0 3px #12a15033}.step-text{display:flex;flex-direction:column}.step .t{font-weight:650;font-size:13px;white-space:nowrap;color:var(--text)}.step .s{font-size:11px;color:var(--faint);white-space:nowrap}.step-line{flex:1 1 10px;min-width:6px;max-width:34px;height:2px;background:#e1e7ef;border-radius:2px}.step-line.done{background:#9fdcb7}@media (max-width: 1640px){.step .s{display:none}}@media (max-width: 1360px){.step:not(.active) .step-text{display:none}.step{padding:6px}}.stepbody{flex:1;overflow:auto;padding:22px 26px 36px}.stepbody.flush{padding:0;overflow:hidden;display:flex;flex-direction:column}.stephead{display:flex;align-items:flex-start;gap:14px;margin-bottom:20px}.stephead-ico{width:44px;height:44px;border-radius:12px;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center;flex:none}.stephead .grow p{color:var(--muted);margin-top:5px;max-width:860px;line-height:1.5}.stepnav{display:flex;align-items:center;gap:14px;padding:9px 18px;background:var(--panel);border-top:1px solid var(--line);flex:none;box-shadow:0 -4px 14px #1018280a}.stepnav-mid{flex:1;display:flex;align-items:center;gap:14px;justify-content:center;min-width:0}.stepnav-status{display:inline-flex;align-items:center;gap:7px;font-weight:600;font-size:13px;color:#8a5d00;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stepnav-status.ok{color:#0b7a3b}.stepnav-progress{width:120px;height:6px;border-radius:9px;background:#e9edf3;overflow:hidden;flex:none}.stepnav-progress span{display:block;height:100%;background:var(--ok);border-radius:9px}@media (max-width: 1100px){.stepnav-progress,.stepnav-mid .faint{display:none}}.modal.welcome{width:min(520px,100%)}.welcome-hero{text-align:center;padding:30px 30px 12px}.welcome-hero h1{margin-top:14px;font-size:22px}.welcome-hero p{color:var(--muted);margin-top:8px;line-height:1.5}.modal.welcome .mb{padding:10px 30px}.modal.welcome .mf{padding:8px 30px 28px}.modal.welcome .mf .btn{width:100%}.guide{display:grid;grid-template-columns:1fr 1fr;gap:12px 22px}.guide-step{display:flex;gap:12px;align-items:flex-start}.guide-ico{width:34px;height:34px;border-radius:10px;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center;flex:none}.drop{border:2px dashed #b9c6d8;border-radius:14px;padding:30px;text-align:center;background:#fbfcfe;transition:all .15s;cursor:pointer}.drop.over{border-color:var(--brand);background:var(--brand-soft)}.drop .big{font-size:34px}.kind-select{border:1px solid var(--line-2);border-radius:6px;padding:3px 6px;font-size:12.5px;background:#fff}.agraph{width:100%;height:320px}.anode rect{rx:12}.anode text{font-family:inherit}.anode.running rect{animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{50%{opacity:.65}}.timeline{display:flex;flex-direction:column;gap:2px;font-size:13px}.timeline .ev{display:grid;grid-template-columns:54px 92px 1fr;gap:10px;padding:5px 8px;border-radius:6px}.timeline .ev:nth-child(odd){background:#f7f9fc}.span-row{display:grid;grid-template-columns:22px 1.3fr 2fr 90px 90px 70px 80px;gap:8px;align-items:center;padding:6px 10px;border-bottom:1px solid #eef1f5;font-size:12.5px;cursor:pointer}.span-row:hover{background:#f7f9fc}.chat{display:grid;grid-template-columns:1fr 360px;height:100%;min-height:0}.chat-main{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line)}.msgs{flex:1;overflow:auto;padding:18px 22px;display:flex;flex-direction:column;gap:14px}.msg{max-width:860px}.msg.user{align-self:flex-end;background:var(--brand);color:#fff;padding:9px 13px;border-radius:14px 14px 4px}.msg.bot{align-self:flex-start;background:#fff;border:1px solid var(--line);padding:12px 14px;border-radius:14px 14px 14px 4px;box-shadow:var(--shadow);white-space:pre-wrap;line-height:1.5}.msg.bot.blocked{border-color:#f6b9b3;background:#fff7f6}.cite{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:18px;padding:0 5px;border-radius:5px;background:var(--brand-soft);color:var(--brand-2);font-size:11px;font-weight:700;cursor:pointer;margin:0 1px;vertical-align:1px}.proposal{border:1px solid #c8daff;background:#f6f9ff;border-radius:10px;padding:10px 12px;margin-top:10px;white-space:normal}.composer{border-top:1px solid var(--line);padding:12px 16px;background:var(--panel);display:flex;gap:10px}.composer textarea{flex:1;min-height:44px;max-height:140px}.suggest{display:flex;gap:6px;flex-wrap:wrap;padding:0 16px 10px;background:var(--panel)}.suggest button{border:1px solid var(--line-2);background:#fff;border-radius:999px;padding:4px 10px;font-size:12px;cursor:pointer;color:var(--muted)}.srcpanel{overflow:auto;padding:14px;background:var(--panel-2)}.src{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:10px;font-size:12.5px}.src.hl{border-color:var(--brand);box-shadow:0 0 0 3px #0b5fff22}.src pre{white-space:pre-wrap;font-family:inherit;margin:6px 0 0;max-height:180px;overflow:auto;color:#344054}.scada-wrap{display:flex;flex:1;min-height:0}.scada-stage{flex:1;position:relative;min-width:0;overflow:hidden}.scada-svg{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;touch-action:none}.theme-animated .scada-svg{background:radial-gradient(1200px 700px at 30% 20%,#1c2c44,#0e1726 70%)}.theme-control .scada-svg{background:#d7dade}.scada-toolbar{display:flex;align-items:center;gap:6px;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;flex:none}.scada-toolbar .sep{width:1px;height:22px;background:var(--line);margin:0 4px}.screen-tabs{display:flex;gap:4px;padding:6px 10px 0;background:#e9edf3;border-bottom:1px solid var(--line);overflow-x:auto;flex:none}.screen-tab{padding:7px 13px;border-radius:8px 8px 0 0;border:1px solid transparent;border-bottom:0;cursor:pointer;background:transparent;font-weight:600;font-size:12.5px;color:var(--muted);white-space:nowrap}.screen-tab.active{background:var(--panel);border-color:var(--line);color:var(--text)}.alarm-strip{display:flex;gap:8px;align-items:center;padding:6px 12px;background:#2a0f12;color:#ffd7d3;font-size:12.5px;overflow-x:auto;flex:none}.alarm-strip.none{background:#0f2a1c;color:#b8f0cf}.alarm{display:inline-flex;gap:6px;align-items:center;padding:3px 9px;border-radius:6px;background:#5a1a1f;white-space:nowrap;cursor:pointer}.alarm.p1{background:#b42318;color:#fff;animation:blink 1s steps(2) infinite}.alarm.acked{animation:none;opacity:.75}@keyframes blink{50%{opacity:.55}}.side-panel{width:330px;flex:none;border-left:1px solid var(--line);background:var(--panel);overflow:auto;display:flex;flex-direction:column}.side-panel.left{border-left:0;border-right:1px solid var(--line);width:250px}.side-panel .sec{padding:12px 14px;border-bottom:1px solid var(--line)}.side-panel .sec h4{margin-bottom:8px}.palette-item{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:8px;cursor:grab;font-size:12.5px;border:1px solid transparent}.palette-item:hover{background:#f1f4f9;border-color:var(--line)}.palette-item svg{flex:none;background:#f1f5fa;border-radius:6px;border:1px solid var(--line)}.prop-grid{display:grid;grid-template-columns:92px 1fr;gap:7px 10px;align-items:center;font-size:12.5px}.prop-grid>label{color:var(--muted);font-weight:600}.bind-row{border:1px solid var(--line);border-radius:8px;padding:8px;margin-bottom:7px;background:var(--panel-2)}.bind-row.unbound{border-color:#f6b9b3;background:#fff7f6}.bottom-dock{height:260px;border-top:1px solid var(--line);background:var(--panel);display:flex;flex-direction:column;flex:none}.bottom-dock.min{height:38px}.zoom-ctl{position:absolute;right:12px;bottom:12px;display:flex;flex-direction:column;gap:4px}.zoom-ctl button{width:32px;height:32px;border-radius:8px;border:1px solid #ffffff33;background:#0d1726cc;color:#fff;cursor:pointer;font-size:16px}.theme-control .zoom-ctl button{background:#fffc;color:#222;border-color:#999}.legend{position:absolute;left:12px;bottom:12px;display:flex;gap:10px;background:#0d1726cc;color:#dbe6f3;padding:6px 10px;border-radius:8px;font-size:11.5px}.theme-control .legend{background:#ffffffd9;color:#333}.detail{position:absolute;top:12px;right:12px;width:300px;background:#fff;border-radius:12px;box-shadow:0 10px 40px #0005;overflow:hidden;z-index:5}.detail .dh{padding:12px 14px;background:#0f1b2d;color:#fff;display:flex;align-items:center;gap:8px}.detail .db{padding:12px 14px;font-size:13px}.detail .kv{display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px dashed #e3e8ef}.spin{animation:spin var(--spd, 1.2s) linear infinite;transform-box:fill-box;transform-origin:center}.flash{animation:flash .8s steps(2) infinite}@keyframes flash{50%{opacity:.15}}.flow{stroke-dasharray:10 12;animation:flow 1s linear infinite}@keyframes flow{to{stroke-dashoffset:-22}}.wave{animation:wave 3s ease-in-out infinite}@keyframes wave{50%{transform:translate(-12px)}}.bubble{animation:bubble 2.2s ease-in infinite}@keyframes bubble{0%{transform:translateY(0);opacity:.9}to{transform:translateY(-60px);opacity:0}}.stroke-anim{animation:strokepulse 1.4s ease-in-out infinite}@keyframes strokepulse{50%{stroke-opacity:.35}}.mix{animation:mix .6s ease-in-out infinite alternate;transform-box:fill-box;transform-origin:center}@keyframes mix{to{transform:scaleX(-1)}}.piston{animation:piston .7s ease-in-out infinite alternate}@keyframes piston{to{transform:translate(4px)}}.tested{animation:testpulse .7s ease-in-out infinite alternate}@keyframes testpulse{to{stroke-width:6;stroke-opacity:.4}}.portal-body{background:#0b1220}.portal{display:flex;flex-direction:column;height:100%;color:#e6edf3;background:#0b1220}.portal header{display:flex;align-items:center;gap:12px;padding:10px 16px;background:#0f1a2b;border-bottom:1px solid #1d2a3d;flex-wrap:wrap}.portal header .t{font-weight:700;font-size:16px}.portal header .crumbs{color:#8aa0b4;font-size:12.5px}.portal .conn{padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700}.portal .conn.live{background:#0f3d26;color:#6ee7a8}.portal .conn.demo{background:#1c2f57;color:#9cc2ff}.portal .conn.lost,.portal .conn.waiting{background:#4a1414;color:#ffb4ab}.portal .screen-tabs{background:#0f1a2b;border-color:#1d2a3d}.portal .screen-tab{color:#8aa0b4}.portal .screen-tab.active{background:#16243a;border-color:#1d2a3d;color:#fff}.portal .pbtn{border:1px solid #2a3b52;background:#16243a;color:#dbe6f3;padding:5px 11px;border-radius:8px;cursor:pointer;font-size:12.5px}.portal .stats{display:flex;gap:10px;padding:10px 16px;overflow-x:auto;background:#0d1626;border-bottom:1px solid #1d2a3d}.portal .stat{background:#13203a;border-radius:10px;padding:8px 12px;min-width:120px}.portal .stat b{font-size:18px;display:block}.portal .stat span{font-size:11.5px;color:#8aa0b4}@media (max-width: 760px){.portal header{padding:8px 10px}.portal .detail{left:8px;right:8px;width:auto;top:auto;bottom:8px}}@media (max-width: 1200px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.pathway{grid-template-columns:repeat(4,1fr)}}.btn .ico{margin:0 -1px}.btn.icon{padding:5px 7px}.btn.on{background:var(--brand-soft);border-color:#b9cffb;color:var(--brand-2)}.btn.ok .ico,.btn.primary .ico{color:inherit}.tool-group{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--line);border-radius:9px;background:var(--panel-2)}.tool-group .btn{border-color:transparent;background:transparent}.tool-group .btn:hover:not(:disabled){background:#fff;border-color:var(--line-2)}.tool-group .btn.on{background:#fff;border-color:#b9cffb}button.chip{cursor:pointer;font-family:inherit}button.chip:hover{filter:brightness(.97)}.toggle{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12.5px;font-weight:600;color:var(--muted)}.toggle input{display:none}.toggle span{width:30px;height:17px;border-radius:99px;background:#cfd7e3;position:relative;transition:background .15s;flex:none}.toggle span:after{content:"";position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:#fff;transition:transform .15s;box-shadow:0 1px 2px #0003}.toggle input:checked+span{background:var(--brand)}.toggle input:checked+span:after{transform:translate(13px)}.hintbar{padding:6px 14px;background:#eef4ff;color:#1d3a7a;font-size:12.5px;border-bottom:1px solid #d8e4fb;flex:none}.subtabs{padding:0 18px}.subtabs .tab{padding:12px 14px}.page.wide{max-width:1400px}.screen-tab.add{color:var(--brand);padding:6px 10px}.bottom-dock.min{height:44px}.link{color:var(--brand)}.center{text-align:center}.drop{padding:46px 30px}.drop h2{margin-top:10px}.drop-ico{width:64px;height:64px;border-radius:18px;margin:0 auto;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center}.dropbar{display:flex;align-items:center;gap:14px;padding:12px 16px;border:1.5px dashed #b9c6d8;border-radius:12px;background:#fbfcfe;color:var(--brand);transition:all .15s}.dropbar .grow{color:var(--text)}.dropbar.over{border-color:var(--brand);background:var(--brand-soft)}.checklist{display:flex;flex-wrap:wrap;gap:8px 18px}.check-item{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:#8a5d00}.check-item.ok{color:#0b7a3b}.check-item .faint{font-weight:400}.file-ico{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;flex:none;background:#fdecec;color:#c0392b}.file-ico.sheet{background:#e6f6ec;color:#1e874b}.file-ico.image{background:#efe9fb;color:#6d4bc4}.callout.row{align-items:flex-start}.callout .ico{margin-top:1px}.badge .ico{vertical-align:-2px}.card .head h3{white-space:nowrap}.kpi .v{font-size:24px}.tbl td{vertical-align:middle}.hero .how{display:grid;grid-template-columns:repeat(8,1fr);gap:8px;margin-top:18px}.hero .how div{background:#ffffff1f;border:1px solid rgba(255,255,255,.2);border-radius:10px;padding:9px 10px;font-size:12px;line-height:1.3;display:flex;flex-direction:column;gap:5px}.hero .how .ico{color:#9fd0ff}.pcard .row .btn{margin-left:auto}.pcard-foot{display:flex;align-items:center;gap:10px;padding-top:10px;border-top:1px solid var(--line)}.newcard{border:2px dashed #c6d3e6;background:transparent;box-shadow:none;align-items:center;justify-content:center;color:var(--brand);min-height:150px;font-weight:650}.newcard:hover{background:var(--brand-soft)}@media (max-width: 1280px){.hero .how{grid-template-columns:repeat(4,1fr)}.g3{grid-template-columns:repeat(2,minmax(0,1fr))}}.searchbox{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line-2);border-radius:9px;padding:6px 10px;background:#fff;color:var(--faint)}.searchbox input{border:0;outline:0;background:transparent;width:200px}.gate-ico{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:var(--bad-soft);color:var(--bad);flex:none}.gate-ico.ok{background:var(--ok-soft);color:var(--ok)}details.failtests summary{cursor:pointer;display:flex;align-items:center;gap:8px;list-style:none}details.failtests summary::-webkit-details-marker{display:none}details.failtests summary:after{content:"▸";margin-left:auto;color:var(--faint)}details.failtests[open] summary:after{content:"▾"}details.failtests[open] summary{margin-bottom:6px}.stages{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.stage-lane{display:flex;flex-direction:column;gap:6px;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;padding:8px}.stage-lane-h{font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);padding:2px 2px 4px}.stage{background:#fff;border:1px solid var(--line);border-left:4px solid #c3ccd8;border-radius:8px;padding:7px 9px;font-size:12.5px}.stage.done{border-left-color:var(--ok)}.stage.running{border-left-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}.stage.failed{border-left-color:var(--bad);background:var(--bad-soft)}.stage.skipped{opacity:.55}.stage-n{display:inline-grid;place-items:center;width:19px;height:19px;border-radius:50%;background:var(--panel-2);border:1px solid var(--line-2);font-size:10.5px;font-weight:800;color:var(--muted)}.stage.done .stage-n{background:var(--ok-soft);border-color:#a6dfbe;color:var(--ok)}.stage-note{margin-top:3px;line-height:1.35;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}@media (max-width: 1200px){.stages{grid-template-columns:repeat(2,minmax(0,1fr))}}.modal:has(.rq){width:min(1280px,96vw)}.rq{display:flex;flex-direction:column;gap:10px;min-height:62vh}.rq-groups{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.rq-group{display:inline-flex;gap:6px;align-items:center;border:1px solid var(--line-2);background:#fff;border-radius:999px;padding:5px 12px;font-weight:600;cursor:pointer}.rq-group.active{background:var(--brand);border-color:var(--brand);color:#fff}.rq-group.active .badge{background:#fff3;color:#fff}.rq-group:disabled{opacity:.45;cursor:default}.rq-body{display:grid;grid-template-columns:340px minmax(0,1fr);gap:14px;min-height:0;flex:1}.rq-list{border:1px solid var(--line);border-radius:10px;overflow:auto;max-height:66vh}.rq-row{display:flex;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--line);cursor:pointer}.rq-row:hover{background:var(--panel-2)}.rq-row.sel{background:var(--brand-soft);box-shadow:inset 3px 0 0 var(--brand)}.rq-detail{display:flex;flex-direction:column;gap:10px;overflow:auto;max-height:66vh;padding-right:4px}.rq-answers{display:flex;flex-wrap:wrap;gap:8px}.rq-answer{display:inline-flex;gap:8px;align-items:center;border:1px solid var(--line-2);background:#fff;border-radius:9px;padding:8px 12px;cursor:pointer;font:inherit}.rq-answer:hover{border-color:var(--brand)}.rq-answer.primary{border-color:var(--ok);background:var(--ok-soft)}.rq-answer.bad{border-color:#f3b4ae;color:var(--bad)}.rq-answer.ghost{background:transparent}.rq-answer:disabled{opacity:.5;cursor:default}.rq-answer kbd,.rq kbd{font-family:var(--mono);font-size:11px;border:1px solid var(--line-2);border-bottom-width:2px;border-radius:4px;padding:0 5px;background:#fff;color:var(--text)}.rq-evidence{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}.rq-ev{border:1px solid var(--line);border-radius:10px;padding:8px;display:flex;flex-direction:column;gap:4px;background:#fff}.rq-ev img{width:100%;max-height:220px;object-fit:contain;background:#fff;border-radius:6px;cursor:zoom-in;border:1px solid var(--line)}.rq-quote{font-size:12.5px;line-height:1.45;color:var(--muted);background:var(--panel-2);border-radius:6px;padding:8px}.btn.warn{background:var(--warn-soft);border-color:#f5d68a;color:#7a5200}.pareto{display:flex;flex-direction:column;gap:6px}.pareto-row{display:flex;align-items:center;gap:8px}.pareto-bar{flex:1;height:12px;background:var(--panel-2);border-radius:6px;overflow:hidden;border:1px solid var(--line)}.pareto-bar>div{height:100%;background:linear-gradient(90deg,#f59e0b,#ef4444);border-radius:6px}:root{--gold: #d4a017;--gold-soft: #fbf3d9}.theme-light .scada-svg{background:linear-gradient(#fff,#f3f6fa)}.theme-light .zoom-ctl button{background:#fff;color:#17202b;border-color:#c9d6e6;box-shadow:0 1px 2px #0001}.legend.light{background:#fffe;color:#17202b;border:1px solid #e3e8ef;box-shadow:0 2px 8px #0001}.legend-heat i{display:inline-block;width:36px;height:8px;border-radius:4px;vertical-align:middle;margin-right:4px;background:linear-gradient(90deg,#2563eb,#d4a017,#dc2626)}.alarm-strip.light{background:#fff1f0;color:#8a1c13;border-bottom:1px solid #f6b9b3}.alarm-strip.none.light{background:#f0fbf5;color:#0b5c2e;border-bottom:1px solid #a6e3bf}.alarm-strip.light .alarm{background:#fde8e7;color:#8a1c13}.alarm-strip.light .alarm.p1{background:#dc2626;color:#fff}.fp{position:absolute;top:12px;right:12px;width:372px;max-height:calc(100% - 24px);overflow:auto;background:#fff;border-radius:14px;box-shadow:0 14px 44px #10182838;z-index:5;border:1px solid #e3e8ef;font-size:13px;animation:slide .16s}.fp-head{display:flex;align-items:center;gap:10px;padding:12px 14px;border-top:4px solid #2563eb;border-bottom:1px solid #e3e8ef}.fp-state{font-size:11px;font-weight:800;letter-spacing:.06em;color:#fff;padding:4px 9px;border-radius:999px;white-space:nowrap}.fp-id{font-size:15px;display:block}.fp-name{font-size:12px;color:#5d6b7d;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fp-x{border:0;background:#f1f4f9;width:28px;height:28px;border-radius:8px;cursor:pointer;color:#5d6b7d;flex:none}.fp-x:hover{background:#e3e8ef}.fp-heat{display:flex;align-items:center;gap:10px;padding:7px 14px;color:#fff;font-weight:700;font-size:12.5px}.fp-heat-bar{flex:1;height:6px;background:#ffffff59;border-radius:3px;overflow:hidden}.fp-heat-bar i{display:block;height:100%;background:#fff}.fp-body{padding:10px 14px 12px;display:flex;flex-direction:column;gap:8px}.fp-big{display:flex;align-items:baseline;gap:4px;padding:6px 10px;background:#f7f9fc;border-radius:10px;border-left:4px solid var(--gold)}.fp-big b{font-size:24px;font-family:var(--mono);color:#0b3fa8}.fp-big span{font-size:12px;color:#5d6b7d}.fp-big small{font-size:11px;color:#8a97a8;margin-left:4px}.fp-rows{display:flex;flex-direction:column}.fp-row{display:grid;grid-template-columns:1.2fr auto 96px;gap:2px 10px;align-items:center;padding:6px 0;border-bottom:1px dashed #e3e8ef}.fp-label{color:#344054;font-weight:600}.fp-label i{color:#b45309;font-style:normal}.fp-val{text-align:right}.fp-num{font-family:var(--mono);font-size:14px;color:#17202b}.fp-num small{font-size:11px;color:#5d6b7d;font-weight:600}.fp-trend{display:flex;justify-content:flex-end}.fp-tag{grid-column:1 / -1;font-family:var(--mono);font-size:10.5px;color:#8a97a8;line-height:1}.fp-pill{display:inline-block;padding:2px 10px;border-radius:999px;font-size:11.5px;font-weight:800;background:#eef2f7;color:#475467}.fp-pill.on{background:#dcfce7;color:#15803d}.fp-pill.off{background:#eef2f7;color:#64748b}.fp-pill.bad{background:#fee2e2;color:#b91c1c}.fp-pill.muted{font-weight:600;color:#8a97a8}.fp-sec-h{font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#8a97a8;margin:6px 0 2px}.fp-foot{font-size:11.5px;color:#8a97a8}.fp.dark{background:#0f1b2d;color:#e6edf3;border-color:#223556}.fp.dark .fp-head{border-bottom-color:#223556}.fp.dark .fp-name,.fp.dark .fp-label,.fp.dark .fp-num{color:#dbe6f3}.fp.dark .fp-x{background:#1d2d47;color:#cfe3ff}.fp.dark .fp-big{background:#132238}.fp.dark .fp-row{border-bottom-color:#223556}.fp.dark .fp-pill{background:#1d2d47;color:#cfe3ff}.spark{display:block}@media (max-width: 760px){.fp{left:8px;right:8px;width:auto;top:auto;bottom:8px;max-height:60%}}.agent-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.agent-card{border:1px solid var(--line);border-radius:10px;padding:9px 11px;background:#fff;display:flex;flex-direction:column;gap:4px;border-left:4px solid #c3ccd8}.agent-card.done{border-left-color:var(--ok)}.agent-card.running{border-left-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}.agent-card.failed{border-left-color:var(--bad)}.agent-card.retry,.agent-card.paused{border-left-color:var(--warn)}.agent-card .tiny{line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}@media (max-width: 1200px){.agent-strip{grid-template-columns:repeat(2,minmax(0,1fr))}}body.portal-body{background:#f4f7fb}body.portal-body.dark{background:#0b1220}.portal.light{background:#f4f7fb;color:#17202b}.portal.light header{background:#fff;border-top:4px solid var(--gold);border-bottom:1px solid #e3e8ef;box-shadow:0 2px 10px #1018280d}.portal.light header .t{color:#0b3fa8}.portal.light header .crumbs{color:#5d6b7d}.portal.light .conn.live{background:#e4f6ec;color:#0b6b34}.portal.light .conn.demo{background:#e8f0ff;color:#0b3fa8}.portal.light .conn.lost,.portal.light .conn.waiting{background:#fde8e7;color:#a3170e}.portal.light .pbtn{border:1px solid #c9d6e6;background:#fff;color:#0b3fa8}.portal.light .pbtn:hover{background:#eaf1fb}.portal.light .stats{background:#fff;border-bottom:1px solid #e3e8ef}.portal.light .stat{background:#f7f9fc;border:1px solid #e3e8ef;border-left:4px solid var(--gold)}.portal.light .stat b{color:#0b3fa8}.portal.light .stat span{color:#5d6b7d}.portal.light .screen-tabs{background:#eef2f7;border-color:#e3e8ef}.portal.light .screen-tab{color:#5d6b7d}.portal.light .screen-tab.active{background:#fff;border-color:#e3e8ef;color:#0b3fa8;box-shadow:inset 0 3px 0 var(--gold)}.portal.light .pfoot{background:#fff;color:#8a97a8;border-top:1px solid #e3e8ef;padding:6px 14px;font-size:11px}.portal.light .empty{color:#5d6b7d}.portal:not(.light) .pfoot{background:#0b1220;color:#5f738c;padding:6px 14px;font-size:11px}.portal:not(.light) .portal-toolbar{background:#0f1a2b;border-color:#1d2a3d}.portal:not(.light) .pills{background:#16243a}.portal:not(.light) .pill{color:#8aa0b4}.portal:not(.light) .pill.active{background:#223556;color:#fff}.portal:not(.light) .hintbar{display:none}.card{box-shadow:0 1px 2px #1018280a,0 6px 20px #1018280d}.kpi .v{font-size:26px}.stephead h1{font-size:23px}.hmi-spin{animation:hmiSpin .9s linear infinite;transform-box:fill-box;transform-origin:center}@keyframes hmiSpin{to{transform:rotate(360deg)}}.hmi-flow{stroke-dasharray:8 8;animation:hmiFlow .8s linear infinite}@keyframes hmiFlow{to{stroke-dashoffset:-32}}.hmi-blink{animation:hmiBlink 1s steps(2) infinite}@keyframes hmiBlink{50%{opacity:0}}.hmi-blink-soft{animation:hmiBlinkSoft .9s ease-in-out infinite}@keyframes hmiBlinkSoft{50%{opacity:.35}}.hmi-fault{animation:hmiFault .8s steps(2) infinite}@keyframes hmiFault{50%{fill:#8f0d0d}}.hmi-bubble{animation:hmiBubble 2.2s ease-in infinite}@keyframes hmiBubble{0%{transform:translateY(0);opacity:.9}to{transform:translateY(-60px);opacity:0}}.hmi-wave{animation:hmiWave 3s ease-in-out infinite}@keyframes hmiWave{50%{transform:translate(-12px)}}.hmi-mix{animation:hmiMix .6s ease-in-out infinite alternate;transform-box:fill-box;transform-origin:center}@keyframes hmiMix{to{transform:scaleX(-1)}}.hmi-pulse{animation:hmiPulse .9s ease-in-out infinite}@keyframes hmiPulse{50%{opacity:.35}}.hmi-sym{transition:opacity .2s}.hmi{display:flex;flex-direction:column;flex:1;min-height:0;background:#fff}.hmi.dark{background:#0b1220;color:#e6edf3}.hmi-bar{display:flex;align-items:center;gap:6px;padding:7px 12px;background:#0b3d91;color:#fff;flex:none;flex-wrap:wrap}.hmi.dark .hmi-bar{background:#0f1a2b}.hmi-bar .hb{border:1px solid #ffffff55;background:#ffffff1f;color:#fff;font-weight:800;font-size:11.5px;letter-spacing:.03em;padding:6px 12px;border-radius:4px;cursor:pointer;text-transform:uppercase;white-space:nowrap}.hmi-bar .hb:hover{background:#fff3}.hmi-bar .hb.active{background:#ffe066;color:#1f2937;border-color:#ffe066}.hmi-bar .hb.alarm{background:#e03131;border-color:#e03131}.hmi-bar .hb.alarm.on{animation:hmiBannerFlash 1s steps(2) infinite}@keyframes hmiBannerFlash{50%{background:#8f0d0d}}.hmi-bar .title{flex:1;text-align:center;font-weight:800;letter-spacing:.08em;font-size:14px;min-width:120px}.hmi-bar .live{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;font-family:var(--mono);white-space:nowrap}.hmi-bar .live .dot{width:8px;height:8px;border-radius:50%;background:#51cf66;animation:hmiLive 1.2s ease-in-out infinite}.hmi-bar .live .dot.off{background:#adb5bd;animation:none}@keyframes hmiLive{50%{opacity:.35;transform:scale(.7)}}.hmi-bar select.hb{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto;text-transform:none}.hmi-banner{display:flex;align-items:center;gap:12px;padding:7px 14px;background:#e03131;color:#fff;font-weight:800;font-size:12.5px;flex:none;animation:hmiBannerFlash 1.2s steps(2) infinite}.hmi-banner.acked{background:#c92a2a;animation:none}.hmi-banner.none{background:#0f3d26;color:#b8f0cf;animation:none;font-weight:700}.hmi-banner .msg{flex:1;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hmi-banner .hb{border:1px solid #ffffff88;background:#fff2;color:#fff;font-weight:800;font-size:11px;padding:5px 10px;border-radius:4px;cursor:pointer;white-space:nowrap}.hmi-banner .hb:hover{background:#fff4}.hmi-tabs{display:flex;gap:2px;padding:6px 12px 0;background:#f1f3f5;border-bottom:1px solid #dee2e6;flex:none;overflow-x:auto}.hmi.dark .hmi-tabs{background:#0f1a2b;border-color:#1d2a3d}.hmi-tab{border:1px solid transparent;border-bottom:0;background:transparent;padding:7px 14px;border-radius:6px 6px 0 0;font-weight:700;font-size:12.5px;color:#495057;cursor:pointer;white-space:nowrap}.hmi-tab.active{background:#fff;border-color:#dee2e6;color:#0b3d91}.hmi.dark .hmi-tab{color:#9fb0c5}.hmi.dark .hmi-tab.active{background:#16243a;border-color:#1d2a3d;color:#fff}.hmi-body{display:flex;flex:1;min-height:0}.hmi-main{display:flex;flex-direction:column;flex:1;min-width:0;position:relative}.hmi-side{width:250px;flex:none;border-left:1px solid #dee2e6;background:#f8f9fa;overflow:auto;font-size:12px}.hmi.dark .hmi-side{background:#0f1a2b;border-color:#1d2a3d}.hmi-side h4{margin:0;padding:9px 12px 6px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#495057;border-bottom:1px solid #dee2e6;background:#f1f3f5;position:sticky;top:0}.hmi.dark .hmi-side h4{background:#16243a;border-color:#1d2a3d;color:#9fb0c5}.hmi-kpi{display:grid;grid-template-columns:1fr auto;gap:2px 8px;align-items:baseline;padding:6px 12px;border-bottom:1px dashed #e9ecef;cursor:pointer}.hmi-kpi:hover{background:#eef3fb}.hmi.dark .hmi-kpi{border-color:#1d2a3d}.hmi.dark .hmi-kpi:hover{background:#16243a}.hmi-kpi .l{color:#495057;font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hmi.dark .hmi-kpi .l{color:#9fb0c5}.hmi-kpi .v{font-family:var(--mono);font-weight:800;font-size:14px;color:#0b3d91;white-space:nowrap}.hmi.dark .hmi-kpi .v{color:#5ef0c1}.hmi-kpi .v small{font-size:10px;font-weight:700;color:#495057;margin-left:3px}.hmi-kpi .v.near{color:#b45309}.hmi-kpi .v.hit{color:#e03131;animation:hmiPulse .9s ease-in-out infinite}.hmi-kpi .t{grid-column:1 / -1;font-size:10px;color:#868e96;font-family:var(--mono)}.hmi-legend{display:flex;flex-wrap:wrap;gap:4px 14px;padding:6px 14px;font-size:11px;color:#495057;background:#f8f9fa;border-top:1px solid #dee2e6;flex:none}.hmi.dark .hmi-legend{background:#0f1a2b;border-color:#1d2a3d;color:#9fb0c5}.hmi-legend i{display:inline-block;width:18px;height:5px;border-radius:2px;vertical-align:middle;margin-right:5px}.hmi-legend b{display:inline-block;width:10px;height:10px;border-radius:50%;vertical-align:middle;margin-right:5px}.hmi-table{width:100%;border-collapse:collapse;font-size:12.5px}.hmi-table th{text-align:left;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:#495057;padding:8px 10px;border-bottom:2px solid #dee2e6;background:#f8f9fa;position:sticky;top:0}.hmi-table td{padding:6px 10px;border-bottom:1px solid #e9ecef;vertical-align:middle}.hmi-table tr:hover td{background:#eef3fb}.hmi-table .mono{font-family:var(--mono);font-weight:700;color:#0b3d91}.hmi-table .st{font-size:10.5px;font-weight:800;padding:2px 7px;border-radius:3px;color:#fff;background:#2f9e44;white-space:nowrap}.hmi-table .st.near{background:#f08c00}.hmi-table .st.hit{background:#e03131}.hmi-table .st.off{background:#adb5bd}.hmi-table .st.bad{background:#7f1d1d}.hmi-table .bar{position:relative;height:8px;background:#e9ecef;border-radius:4px;min-width:110px}.hmi-table .bar i{position:absolute;top:0;left:0;height:100%;background:#0b3d91;border-radius:4px}.hmi-table .bar em{position:absolute;top:-3px;width:2px;height:14px;background:#e03131}.hmi-table .bar em.lo{background:#1971c2}.hmi-scroll{flex:1;overflow:auto;background:#fff}.hmi.dark .hmi-scroll{background:#0b1220}.hmi.dark .hmi-table th{background:#16243a;color:#9fb0c5;border-color:#1d2a3d}.hmi.dark .hmi-table td{border-color:#1d2a3d}.hmi.dark .hmi-table tr:hover td{background:#16243a}.hmi.dark .hmi-table .mono{color:#5ef0c1}.hmi-trend{display:flex;flex-direction:column;gap:10px;padding:12px}.hmi-trend .pick{display:flex;flex-wrap:wrap;gap:6px}.hmi-trend .pick button{border:1px solid #ced4da;background:#fff;border-radius:999px;padding:4px 10px;font-size:11.5px;font-weight:700;cursor:pointer;color:#495057}.hmi-trend .pick button.on{color:#fff;border-color:transparent}.hmi-trend svg{width:100%;height:320px;background:#fff;border:1px solid #dee2e6;border-radius:6px}.hmi.dark .hmi-trend svg{background:#0f1b2c;border-color:#1d2a3d}.hmi-alarms{padding:10px 12px;display:flex;flex-direction:column;gap:6px}.hmi-alarm{display:grid;grid-template-columns:54px 1fr auto auto;gap:10px;align-items:center;padding:8px 12px;border-radius:6px;background:#fff5f5;border:1px solid #ffc9c9;font-size:12.5px}.hmi-alarm.p1{background:#ffe3e3;border-color:#ff8787}.hmi-alarm.acked{background:#f8f9fa;border-color:#dee2e6}.hmi-alarm .pr{font-weight:800;color:#e03131}.hmi-alarm .when{color:#868e96;font-family:var(--mono);font-size:11px}.hmi-alarm .hb{border:1px solid #ced4da;background:#fff;padding:4px 9px;border-radius:4px;cursor:pointer;font-weight:700;font-size:11px}.hmi-unit-cards{display:flex;gap:8px;padding:8px 12px;overflow-x:auto;flex:none;background:#f8f9fa;border-bottom:1px solid #dee2e6}.hmi.dark .hmi-unit-cards{background:#0f1a2b;border-color:#1d2a3d}.hmi-unit{border:1px solid #dee2e6;border-radius:6px;background:#fff;padding:6px 10px;min-width:180px;font-size:11.5px;display:flex;flex-direction:column;gap:4px;cursor:pointer}.hmi.dark .hmi-unit{background:#16243a;border-color:#1d2a3d}.hmi-unit .n{font-weight:800;display:flex;justify-content:space-between;gap:8px;align-items:center}.hmi-unit .mode{font-size:10px;font-weight:800;color:#fff;padding:2px 7px;border-radius:3px;background:#868e96}.hmi-unit .mode.run{background:#2f9e44}.hmi-unit .mode.alarm{background:#e03131}.hmi-unit .modes{display:flex;gap:3px;flex-wrap:wrap}.hmi-unit .modes span{border:1px solid #ced4da;border-radius:3px;padding:1px 6px;font-size:10px;font-weight:800;color:#868e96}.hmi-unit .modes span.on{background:#2f9e44;color:#fff;border-color:#2f9e44}.hmi-unit .modes span.m{color:#e67700;border-color:#e67700}@media (max-width: 760px){.hmi-bar{gap:4px;padding:6px 8px}.hmi-bar .hb{padding:5px 8px;font-size:10.5px}.hmi-bar .title{font-size:12px;min-width:0;flex-basis:100%;order:10;text-align:left}.hmi-bar .pills,.hmi-side{display:none}.hmi-unit-cards{padding:6px 8px}.hmi-unit{min-width:150px}.hmi-legend{font-size:10px;gap:3px 9px}.fp{width:calc(100% - 16px);right:8px;top:8px}}.pshell{display:grid;grid-template-columns:224px 1fr;height:100%;background:#f4f6fb;color:#17202b}.pshell-msg{display:grid;place-items:center;height:100%;color:#5d6b7d}.pside{background:#0b2447;color:#dbe6f3;display:flex;flex-direction:column;padding:14px 12px;gap:4px}.pbrand{display:flex;align-items:center;gap:10px;padding:4px 6px 16px}.pbrand b{display:block;font-size:15px;color:#fff}.pbrand small{font-size:10px;letter-spacing:.12em;color:#d4a017;font-weight:800}.pnav{display:flex;align-items:center;gap:10px;width:100%;border:0;background:transparent;color:#c9d4e3;padding:10px 12px;border-radius:9px;cursor:pointer;font-size:13.5px;font-weight:600;text-align:left}.pnav:hover{background:#ffffff14;color:#fff}.pnav.on{background:#ffffff1f;color:#fff;box-shadow:inset 3px 0 #d4a017}.pnav em{margin-left:auto;background:#e03131;color:#fff;font-size:10.5px;font-weight:800;border-radius:999px;padding:2px 7px;font-style:normal}.plabel{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#7f93ad;padding:14px 12px 4px;font-weight:800}.pplant{background:#ffffff12;border-radius:10px;padding:10px 12px}.pplant small{display:block;font-size:10.5px;color:#7f93ad}.pplant b{display:block;font-size:13px;color:#fff}.pplant span{font-size:11.5px;color:#9fb0c5}.pside-foot{font-size:10.5px;color:#7f93ad;padding:8px 6px;line-height:1.4}.pmain{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.ptop{display:flex;align-items:center;gap:12px;padding:12px 22px;background:#fff;border-bottom:1px solid #e3e8ef;border-top:4px solid #d4a017;flex:none}.ptop .t{font-weight:800;font-size:16px;color:#0b3fa8}.ptop .crumbs{font-size:12px;color:#5d6b7d}.pconn{padding:4px 10px;border-radius:999px;font-size:12px;font-weight:700;background:#e8f0ff;color:#0b3fa8}.pconn.live{background:#e4f6ec;color:#0b6b34}.pconn.lost,.pconn.waiting{background:#fde8e7;color:#a3170e}.picon{position:relative;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;border:1px solid #e3e8ef;background:#fff;color:#0b3fa8;cursor:pointer;text-decoration:none}.picon em{position:absolute;top:-6px;right:-6px;background:#e03131;color:#fff;font-size:10px;font-weight:800;border-radius:999px;padding:1px 6px;font-style:normal}.ppage{flex:1;min-height:0;overflow:auto;padding:20px 24px 40px;display:flex;flex-direction:column;gap:16px}.ppage>*{flex:none}.pscada{flex:1;display:flex;min-height:0;padding:12px}.pscada .hmi{border-radius:12px;overflow:hidden;box-shadow:0 1px 2px #1018280f,0 4px 14px #1018280f;border:1px solid #e3e8ef}.pbanner{display:flex;align-items:center;gap:16px;padding:22px 26px;border-radius:14px;background:linear-gradient(100deg,#0b3fa8,#0b5fff 60%,#2f7cff);color:#fff;box-shadow:0 10px 30px #0b3fa840}.pbanner h2{font-size:22px;margin:0}.pbanner p{margin:6px 0 0;color:#dbe6ff;font-size:13.5px}.pgold{border:0;background:#d4a017;color:#1f2937;font-weight:800;padding:10px 16px;border-radius:9px;cursor:pointer;text-decoration:none;white-space:nowrap;font-size:13px;margin-left:auto}.pgold:hover{background:#e3b22f}.pgold:disabled{opacity:.6;cursor:default}.plink{border:0;background:transparent;color:#0b3fa8;font-weight:700;cursor:pointer;font-size:12.5px;text-decoration:none;padding:0}.plink.w{border:1px solid #c9d6e6;background:#fff;padding:7px 12px;border-radius:8px}.pstats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px}.pstat{background:#fff;border:1px solid #e3e8ef;border-left:4px solid #0b3fa8;border-radius:10px;padding:12px 14px;box-shadow:0 1px 2px #1018280d}.pstat b{display:block;font-size:22px;color:#0b3fa8}.pstat span{font-size:11.5px;color:#5d6b7d}.pstat.g{border-left-color:#12a150}.pstat.r{border-left-color:#e03131}.pstat.y{border-left-color:#d4a017}.pstat.b{border-left-color:#0b5fff}.pcard{background:#fff;border:1px solid #e3e8ef;border-radius:12px;padding:14px 16px;box-shadow:0 1px 2px #1018280d}.pcard-h{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}.pcard-h h3{font-size:15px;white-space:nowrap}.ptiles{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px}.ptile{position:relative;border:1px solid #e3e8ef;border-radius:10px;padding:12px 12px 10px 48px;background:#fff;border-bottom:3px solid #0b3fa8}.ptile i{position:absolute;left:12px;top:12px;width:28px;height:28px;border-radius:8px;display:grid;place-items:center;font-style:normal;font-size:14px;background:#e8f0ff;color:#0b3fa8}.ptile b{display:block;font-size:20px;color:#0b3fa8;line-height:1.1}.ptile b small{font-size:11px;margin-left:3px;color:#5d6b7d}.ptile span{display:block;font-size:11.5px;color:#5d6b7d;margin-top:2px}.ptile em{display:block;font-size:10.5px;color:#8a97a8;font-style:normal;margin-top:2px}.ptile.g{border-bottom-color:#12a150}.ptile.g i{background:#e4f6ec;color:#0b6b34}.ptile.y{border-bottom-color:#d4a017}.ptile.y i{background:#fff5d9;color:#8a5d00}.ptile.b{border-bottom-color:#0b5fff}.ptiles.small6 .ptile{padding-left:12px}.ptrends{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:14px}.ptrend{border:1px solid #e3e8ef;border-radius:10px;padding:10px 12px}.pdot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:middle}.pval{font-size:22px;font-weight:800;color:#0b3fa8;margin:4px 0}.pval small{font-size:12px;color:#5d6b7d;margin-left:4px}.pspark{width:100%;height:56px;display:block}.pgrid3{display:grid;grid-template-columns:1.2fr 1.2fr 1fr;gap:14px}.pgrid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.pgrid2.wide{grid-template-columns:1.4fr 1fr}.pbar{padding:7px 0;border-bottom:1px dashed #e9ecef}.pbar-t{height:8px;background:#e9edf3;border-radius:4px;overflow:hidden;margin:4px 0 2px}.pbar-t i{display:block;height:100%;border-radius:4px}.palarm{display:grid;grid-template-columns:30px 1fr auto;gap:8px;align-items:center;padding:6px 10px;border-radius:8px;background:#fff5f5;border:1px solid #ffc9c9;font-size:12.5px;cursor:pointer}.palarm b{color:#e03131}.palarm small{color:#868e96;font-family:var(--mono)}.pstep{display:flex;gap:12px;align-items:center}.pnum{width:30px;height:30px;border-radius:50%;background:#d4a017;color:#1f2937;display:grid;place-items:center;font-weight:800}.pfield{display:flex;flex-direction:column;gap:4px;font-size:12px;color:#5d6b7d;font-weight:600}.pfield em{font-weight:400}.pfield input,.pfield select,.pin{border:1px solid #c9d6e6;border-radius:8px;padding:8px 10px;font-size:13px;background:#fff;color:#17202b;width:100%}.pchip{border:1px solid #c9d6e6;background:#fff;border-radius:999px;padding:5px 11px;font-size:12px;font-weight:700;color:#0b3fa8;cursor:pointer}.ptoggle{display:flex;align-items:center;gap:10px;margin-bottom:10px;cursor:pointer}.ptoggle input{display:none}.ptoggle i{width:36px;height:20px;border-radius:999px;background:#c9d6e6;position:relative;transition:background .2s}.ptoggle i:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .2s}.ptoggle input:checked+i{background:#12a150}.ptoggle input:checked+i:after{left:18px}.rep{background:#fff;border:1px solid #e3e8ef;border-radius:12px;overflow:hidden}.rep-band{background:linear-gradient(100deg,#0b2447,#0b3fa8);color:#fff;padding:16px 20px;position:relative}.rep-band small{color:#cfe0ff;letter-spacing:.08em;font-weight:800;font-size:10.5px}.rep-band h3{font-size:18px;margin:2px 0}.rep-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.rep-chips span{background:#fff2;padding:3px 9px;border-radius:999px;font-size:11px}.rep-actions{position:absolute;right:16px;top:16px;display:flex;gap:6px}.rep-actions .plink.w{background:#fff2;border-color:#fff5;color:#fff}.rep-sum{margin:14px 16px;background:#fff8e1;border:1px solid #f3dc9b;border-radius:8px;padding:10px 14px;font-size:13px}.rep-sum .chip{font-size:10.5px;margin-left:6px}.rep .ptiles,.rep .pgrid2{padding:0 16px 16px}.ptable{width:100%;border-collapse:collapse;font-size:12.5px}.ptable td{padding:6px 8px;border-bottom:1px solid #e9ecef}.ptable .r{text-align:right;font-family:var(--mono)}.dp{width:420px;flex:none;border-left:1px solid #dee2e6;background:#fff;display:flex;flex-direction:column;min-height:0;animation:slide .16s}.dp-head{border-top:4px solid #0b3fa8;padding:12px 16px 0;border-bottom:1px solid #e3e8ef}.dp-crumb{font-size:11px;color:#8a97a8}.dp-title{display:flex;align-items:center;gap:8px;margin:4px 0 8px}.dp-title b{font-size:17px;color:#0b3fa8}.dp-title span{font-size:13px;color:#17202b}.dp-title .dp-chip{font-size:10.5px;background:#e8f0ff;color:#0b3fa8;padding:2px 8px;border-radius:999px;font-weight:700}.dp-title .fp-x{margin-left:auto}.dp-tabs{display:flex;gap:2px}.dp-tabs button{border:0;background:transparent;padding:8px 12px;font-weight:700;font-size:12.5px;color:#5d6b7d;cursor:pointer;border-bottom:3px solid transparent}.dp-tabs button.on{color:#0b3fa8;border-bottom-color:#d4a017}.dp-body{padding:12px 16px;overflow:auto;display:flex;flex-direction:column;gap:12px}.dp-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:8px}.dp-kpi{border:1px solid #e3e8ef;border-radius:8px;padding:8px 10px}.dp-kpi span{display:block;font-size:11px;color:#5d6b7d}.dp-kpi b{display:block;font-size:17px;color:#0b3fa8}.dp-kpi small{color:#8a97a8;font-size:10.5px}.dp-sec{border:1px solid #e3e8ef;border-radius:8px;padding:10px 12px}.dp-sec h5,.dp-body h5{margin:0 0 8px;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#5d6b7d}.dp-conn>div{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin-bottom:6px}.dp-l{font-size:11px;color:#8a97a8;min-width:72px}.dp-tag{border:1px solid #c9d6e6;background:#f7f9fc;border-radius:6px;padding:2px 8px;font-size:11.5px;font-weight:700;color:#0b3fa8;cursor:pointer;font-family:var(--mono)}.dp-table{width:100%;border-collapse:collapse;font-size:12.5px}.dp-table td,.dp-table th{padding:6px 4px;border-bottom:1px solid #e9ecef;vertical-align:top}.dp-table td:first-child{color:#5d6b7d;width:38%}.dp-table th{font-size:10.5px;text-transform:uppercase;color:#5d6b7d;text-align:left}.dp-ev{border-left:3px solid #d4a017;padding:4px 8px;margin-bottom:6px;font-size:12.5px}@media (max-width: 1100px){.pstats,.ptiles{grid-template-columns:repeat(3,minmax(0,1fr))}.ptrends,.pgrid3,.pgrid2,.pgrid2.wide{grid-template-columns:1fr}}@media (max-width: 760px){.pshell{grid-template-columns:1fr;grid-template-rows:auto 1fr}.pside{flex-direction:row;align-items:center;padding:8px;overflow-x:auto}.pbrand{padding:0 8px 0 0}.pbrand div,.plabel,.pplant,.pside-foot{display:none}.pnav{width:auto}.pstats,.ptiles{grid-template-columns:repeat(2,minmax(0,1fr))}.dp{width:100%}}.pbanner .how{display:grid;grid-template-columns:repeat(8,1fr);gap:8px;margin-top:16px}.pbanner .how div{background:#ffffff1f;border:1px solid rgba(255,255,255,.2);border-radius:10px;padding:8px 10px;font-size:11.5px;line-height:1.3;display:flex;flex-direction:column;gap:4px;color:#fff}.pbanner .how .ico{color:#ffd966}@media (max-width: 1280px){.pbanner .how{grid-template-columns:repeat(4,1fr)}}.road{display:flex;flex-direction:column;gap:12px}.road-top{display:flex;align-items:center;gap:12px}.road-pct b{font-size:20px;color:#0b3fa8;margin-right:8px}.road-pct span{font-size:12px;color:var(--muted)}.road-bar{flex:1;height:8px;background:#e9edf3;border-radius:4px;overflow:hidden}.road-bar i{display:block;height:100%;background:linear-gradient(90deg,#0b3fa8,#d4a017);border-radius:4px;transition:width .4s}.road-path{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.road-ms{display:flex;flex-direction:column;gap:2px;min-width:0}.road-ms>b{font-size:13px;color:#17202b}.road-ms>small{font-size:11px;color:var(--muted);min-height:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.road-node{position:relative;display:flex;align-items:center;height:30px;margin-bottom:4px}.road-dot{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:800;background:#e9edf3;color:#5d6b7d;border:2px solid #c3ccd8;z-index:1}.road-line{position:absolute;left:30px;right:-10px;top:13px;height:3px;background:#dfe5ee}.road-ms.done .road-dot{background:#12a150;border-color:#12a150;color:#fff}.road-ms.done .road-line{background:#12a150}.road-ms.running .road-dot{background:#0b5fff;border-color:#0b5fff;color:#fff;animation:pulse 1.2s infinite}.road-ms.running .road-line{background:linear-gradient(90deg,#0b5fff,#dfe5ee)}.road-ms.failed .road-dot{background:#e03131;border-color:#e03131;color:#fff}.road-ms.retry .road-dot,.road-ms.paused .road-dot{background:#d4a017;border-color:#d4a017;color:#1f2937}@keyframes pulse{0%{box-shadow:0 0 #0b5fff73}70%{box-shadow:0 0 0 9px #0b5fff00}to{box-shadow:0 0 #0b5fff00}}.road-steps{display:flex;flex-direction:column;gap:4px;margin-top:6px}.road-step{display:flex;align-items:center;gap:6px;font-size:11.5px;background:#fff;border:1px solid var(--line);border-left:3px solid #c3ccd8;border-radius:6px;padding:4px 7px;min-width:0}.road-step span{font-family:var(--mono);font-size:10px;color:var(--muted)}.road-step em{font-style:normal;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.road-step i{font-style:normal;font-size:10px;color:var(--muted)}.road-step.done{border-left-color:#12a150}.road-step.running{border-left-color:#0b5fff;background:#e8f0ff;font-weight:700}.road-step.failed{border-left-color:#e03131;background:#fde8e7}.road-step.skipped{opacity:.55}@media (max-width: 1100px){.road-path{grid-template-columns:repeat(2,minmax(0,1fr))}.road-line{display:none}}.pavatar{display:flex;align-items:center;gap:8px;border:1px solid #e3e8ef;border-radius:10px;padding:4px 10px 4px 4px;background:#fff}.pavatar>span{width:30px;height:30px;border-radius:50%;background:#d4a017;color:#1f2937;display:grid;place-items:center;font-weight:800;font-size:11px}.pavatar b{display:block;font-size:12.5px;color:#17202b}.pavatar small{font-size:10.5px;color:#5d6b7d}.pgold.sm{padding:6px 12px;font-size:12px}.pscada-page{gap:14px}.pscada-page .pscada{flex:none;height:calc(100vh - 150px);min-height:560px;padding:0}.pevents .pev-list{max-height:260px;overflow:auto;display:flex;flex-direction:column;gap:3px}.pev{display:grid;grid-template-columns:56px 110px 1fr;gap:10px;font-size:12.5px;padding:5px 8px;border-radius:6px;border-left:3px solid #c3ccd8;background:#f7f9fc}.pev.raised{border-left-color:#e03131}.pev.cleared{border-left-color:#12a150}.pev.acked{border-left-color:#0b5fff}.rep-sum{display:flex;gap:10px;align-items:flex-start}.rep-spark{width:26px;height:26px;border-radius:50%;background:#d4a017;color:#fff;display:grid;place-items:center;flex:none;font-size:13px}.ptile i svg{width:15px;height:15px}.hmi-find{margin-left:8px;position:relative}.hmi-find input{background:#fff;border:1px solid #c9d6e6;border-radius:6px;padding:4px 8px;font-size:12px;width:150px;color:#17202b}.hmi-find ul{position:absolute;top:28px;left:0;z-index:20;list-style:none;margin:0;padding:4px;background:#fff;border:1px solid #c9d6e6;border-radius:8px;box-shadow:0 8px 24px #10182824;min-width:240px;max-height:240px;overflow:auto}.hmi-find li{padding:5px 8px;border-radius:6px;cursor:pointer;font-size:12px;color:#17202b;display:flex;gap:8px}.hmi-find li:hover{background:#e8f0ff}.hmi-find li b{font-family:var(--mono);color:#0b3fa8}.brand{text-decoration:none}.page.narrow{max-width:760px}.stepper{justify-content:center}.input.lg{font-size:17px;padding:12px 14px}.drop{border:2px dashed #c3d3ea;border-radius:14px;background:#f7faff;padding:46px 20px;display:flex;flex-direction:column;align-items:center;gap:12px;color:#0b3fa8;cursor:pointer;text-align:center;transition:background .15s,border-color .15s}.drop:hover,.drop.over{background:#e8f0ff;border-color:#0b5fff}.tbl td.r{text-align:right}.ed{display:flex;flex-direction:column;flex:1;min-height:0;background:#fff}.ed-bar{display:flex;align-items:center;gap:6px;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--panel);flex:none}.ed-screens,.bare-screens{display:flex;gap:4px;margin-left:10px;flex-wrap:wrap}.ed-body{position:relative;flex:1;display:flex;min-height:0}.ed-add{position:absolute;right:18px;top:18px;z-index:5;display:flex;flex-direction:column;align-items:center;gap:2px;width:64px;height:64px;border-radius:16px;border:0;background:#0b3fa8;color:#fff;font-weight:700;font-size:12px;cursor:pointer;box-shadow:0 8px 22px #0b3fa859;justify-content:center}.ed-add:hover{background:#0b5fff}.add-grid-wrap{max-height:62vh;overflow:auto}.add-fam{margin:6px 0;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.add-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}.add-item{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 6px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer;font-size:12px;color:var(--text)}.add-item:hover{border-color:#0b5fff;background:#f3f7ff}.add-t{width:40px;height:40px;display:grid;place-items:center;font-weight:800;font-size:22px;color:#0b3fa8}.hmi.bare{background:#fff}.bare-head{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--line);background:#fff;flex:none}.bare-head>b{font-size:16px;color:#0b3fa8}.hmi.bare .hmi-body{flex:1;min-height:0}.test-bar{display:flex;align-items:center;gap:10px}.test-prog{width:160px;height:8px;border-radius:9px;background:#e9edf3;overflow:hidden}.test-prog i{display:block;height:100%;background:linear-gradient(90deg,#0b3fa8,#12a150);border-radius:9px;transition:width .4s}.apath{display:flex;align-items:stretch;gap:0}.apath-line{flex:1;height:3px;background:#dfe5ee;margin-top:22px;min-width:18px}.apath-line.done{background:#12a150}.apath-node{display:flex;flex-direction:column;align-items:center;gap:3px;width:168px;padding:8px 6px;border:1px solid transparent;border-radius:12px;background:none;cursor:pointer;text-align:center}.apath-node:hover{background:#f5f8ff}.apath-node.sel{background:#eef4ff;border-color:#c9dbff}.apath-dot{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font-weight:800;background:#eef2f7;color:#5b6b82;border:2px solid #dbe2ec}.apath-node b{font-size:13.5px;color:#17202b}.apath-node small{font-size:10.5px;color:#5d6b7d;font-family:var(--mono)}.apath-node em{font-style:normal;font-size:11px;font-weight:700;color:#8a97a8;text-transform:uppercase;letter-spacing:.04em}.apath-node.running .apath-dot{background:#0b5fff;border-color:#0b5fff;color:#fff;animation:pulse 1.2s infinite}.apath-node.running em{color:#0b5fff}.apath-node.review .apath-dot{background:#d4a017;border-color:#d4a017;color:#1f2937}.apath-node.review em{color:#a06f00}.apath-node.approved .apath-dot{background:#12a150;border-color:#12a150;color:#fff}.apath-node.approved em{color:#0b7a3b}.apath-node.failed .apath-dot{background:#e03131;border-color:#e03131;color:#fff}.aout{overflow:hidden}.aout-head{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--line);background:#fbfcfe}.aout-head h3{font-size:16px}.aout-body{padding:16px}.trace{max-height:260px;overflow:auto;border-bottom:1px solid var(--line);background:#fafbfc}.kv{width:100%;border-collapse:collapse;font-size:12.5px}.kv td{padding:4px 6px;border-bottom:1px solid #eef1f5;vertical-align:top}.kv td:first-child{color:#5d6b7d;width:38%;white-space:nowrap}.counts{display:flex;flex-wrap:wrap;gap:8px}.count{display:inline-flex;align-items:baseline;gap:6px;padding:6px 12px;border-radius:10px;background:#f3f6fb;border:1px solid #e3e8ef;font-size:12.5px;color:#3b4a5e}.count b{font-size:17px;color:#0b3fa8}.count.gold{background:#fff8e1;border-color:#f3dc9b}.count.warn{background:#fff4e6;border-color:#ffd8a8}.check{display:flex;gap:8px;align-items:flex-start;padding:6px 0;border-bottom:1px dashed #eef1f5;font-size:13px}.check .dot{margin-top:5px}.elk-wrap{position:relative;border:1px solid var(--line);border-radius:10px;background:#fff;height:62vh;min-height:420px}.elk-svg{width:100%;height:100%;touch-action:none}.elk-node{cursor:grab}.elk-busy{position:absolute;top:10px;left:12px;font-size:12px;color:#0b5fff;background:#eef4ff;padding:4px 10px;border-radius:8px}.preview-box{height:64vh;min-height:440px;display:flex;border-top:1px solid var(--line)}.models-tbl td{vertical-align:middle}.ok-t{color:#0b7a3b}.bad-t{color:#c92a2a}.tbl tr.off td{opacity:.45;text-decoration:line-through}.scroll-x{overflow:auto;max-height:60vh}.proc{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin-bottom:6px}.proc summary{cursor:pointer}.ov-wrap{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:12px}.ov-svg{width:100%;height:620px;background:#fff;border:1px solid var(--line, #dee2e6);border-radius:8px;cursor:grab;touch-action:none}.ov-side{display:flex;flex-direction:column;gap:10px;max-height:620px;overflow:auto}.ov-legend div,.ov-side .tiny div{display:flex;align-items:center;gap:6px;margin:2px 0}.ov-legend span{display:inline-block;width:18px;height:4px;border-radius:2px}.ov-sw{display:inline-block;width:14px;height:4px;border-radius:2px}.ov-issues{display:flex;flex-direction:column;gap:4px}.ov-issue{display:flex;gap:6px;align-items:flex-start;text-align:left;font-size:12px;background:none;border:1px solid var(--line, #dee2e6);border-radius:6px;padding:5px 7px;cursor:pointer}.ov-issue:hover{background:#f1f3f5}.ov-issue .dot{flex:none;margin-top:4px}.dot.grey{background:#adb5bd}@media (max-width: 900px){.ov-wrap{grid-template-columns:1fr}.ov-svg{height:420px}}.s4-twin{position:relative;height:100%;display:flex;flex-direction:column;gap:8px;min-height:0}.s4-switch{align-self:flex-start}.tw{display:grid;grid-template-columns:236px minmax(0,1fr);grid-template-rows:44px minmax(0,1fr) auto;height:min(78vh,900px);min-height:520px;border:1px solid var(--line, #dee2e6);border-radius:12px;overflow:hidden;background:#fff}.tw.panel-on{grid-template-columns:236px minmax(0,1fr) 300px}.tw.rail-off{grid-template-columns:44px minmax(0,1fr)}.tw.rail-off.panel-on{grid-template-columns:44px minmax(0,1fr) 300px}.tw-top{grid-column:1 / -1;display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--line, #dee2e6);background:#f8fafc;font-size:13px;min-width:0}.tw-crumb{color:#6b7a8c;font-size:12px;white-space:nowrap}.tw-mode{font-weight:700;font-size:11.5px;letter-spacing:.04em;padding:3px 9px;border-radius:999px;border:1px solid;white-space:nowrap}.tw-mode.live{color:#1f7a33;border-color:#2f9e44;background:#ebfbee}.tw-mode.sim{color:#0b4bbf;border-color:#4c8bf5;background:repeating-linear-gradient(135deg,#e8f0ff 0,#e8f0ff 6px,#f4f8ff 6px,#f4f8ff 12px)}.tw-mode.none{color:#6b7a8c;border-color:#ced4da;background:#f1f3f5}.tw-alarm{border:1px solid #ced4da;background:#fff;border-radius:999px;padding:3px 10px;font-size:12px;cursor:pointer;white-space:nowrap}.tw-alarm.on{border-color:#e03131;color:#c92a2a;background:#fff5f5;font-weight:700}.tw-chip{font-size:11px;color:#8a6d00;background:#fff8db;border:1px solid #f2d36b;border-radius:999px;padding:2px 8px;white-space:nowrap;cursor:help}.tw-rail{grid-row:2 / 4;border-right:1px solid var(--line, #dee2e6);padding:8px;display:flex;flex-direction:column;gap:8px;overflow:auto;background:#fbfcfd;min-height:0}.tw-tree{flex:1;overflow:auto;min-height:120px;font-size:12.5px}.tw-tree summary{cursor:pointer;font-weight:600;padding:3px 0}.tw-item{display:flex;align-items:center;gap:6px;width:100%;text-align:left;border:0;background:none;padding:3px 6px;border-radius:6px;cursor:pointer;font-size:12.5px}.tw-item:hover{background:#eef3f8}.tw-item.sel{background:#fff4cf;outline:1px solid #d4a017}.tw-item:focus-visible,.tw-tools button:focus-visible,.tw-tabs button:focus-visible{outline:2px solid #1c7ed6;outline-offset:1px}.tw-dot{width:9px;height:9px;border-radius:50%;flex:none}.tw-sw{display:inline-block;width:14px;height:4px;border-radius:2px;margin-right:5px;vertical-align:middle}.tw-sect{border-top:1px solid #e9ecef;padding-top:6px;display:flex;flex-direction:column;gap:3px;font-size:12.5px}.tw-chk{display:flex;align-items:center;gap:6px}.tw-view{position:relative;min-width:0;min-height:0;background:#eef2f6}.tw-view canvas{touch-action:none}.tw-2d{width:100%;height:100%;display:block;cursor:grab}.tw-loading{display:grid;place-items:center;height:100%;min-height:300px;color:#6b7a8c;font-size:13px}.tw-tools{position:absolute;top:10px;right:10px;display:flex;flex-direction:column;gap:4px}.tw-tools button{width:32px;height:32px;border-radius:8px;border:1px solid #ced4da;background:#fffe;cursor:pointer;font-size:15px}.tw-tools button:hover{background:#fff;border-color:#1c7ed6}.tw-trace{position:absolute;left:10px;top:10px;background:#fffdf3;border:1px solid #d4a017;border-radius:8px;padding:4px 4px 4px 10px;font-size:12px;display:flex;gap:8px;align-items:center}.tw-simtag{position:absolute;left:10px;bottom:10px;font-size:11px;font-weight:700;letter-spacing:.05em;color:#0b4bbf;background:#e8f0ffee;border:1px dashed #4c8bf5;border-radius:6px;padding:3px 8px}.tw-panel{grid-row:2 / 3;grid-column:3;border-left:1px solid var(--line, #dee2e6);padding:10px;overflow:auto;display:flex;flex-direction:column;gap:8px;background:#fff;min-height:0}.tw-state{border-left:4px solid;padding:4px 8px;font-weight:700;font-size:13px;background:#f8f9fa;border-radius:4px}.tw-tabs{display:flex;gap:2px;align-items:center;flex-wrap:wrap}.tw-tabs button{border:0;background:none;padding:5px 9px;border-radius:6px;cursor:pointer;font-size:12.5px;color:#495057;text-transform:capitalize}.tw-tabs button.active{background:#e8f0ff;color:#0b4bbf;font-weight:600}.tw-drawer{grid-column:2 / -1;border-top:1px solid var(--line, #dee2e6);background:#fbfcfd;padding:2px 8px;min-width:0}.tw-drawer.open .tw-body{height:190px;overflow:auto;padding:6px 4px}.tw-ev{font-size:12px;padding:2px 0;cursor:pointer}.tw-ev:hover{background:#eef3f8}.tw-spark{width:100%;height:42px;background:#f8f9fa;border-radius:4px}.tw-label{background:#ffffffe6;border:1px solid #ced4da;border-radius:6px;padding:1px 6px;font-size:11px;white-space:nowrap;color:#1b2a41;box-shadow:0 1px 2px #0001}.tw-label.sel{border-color:#d4a017;background:#fffdf3}.tw-label em{color:#868e96;font-style:normal}@media (prefers-reduced-motion: reduce){.tw *{transition:none!important}}@media (max-width: 900px){.tw,.tw.panel-on{grid-template-columns:44px minmax(0,1fr)}.tw-panel{position:absolute;right:0;top:44px;bottom:0;width:280px;z-index:5;box-shadow:-4px 0 12px #0002}}.draw-layers{position:absolute;left:10px;top:10px;z-index:3;display:flex;gap:10px;background:#ffffffe6;border:1px solid #dee2e6;border-radius:8px;padding:4px 10px;font-size:12px;color:#334155}.draw-layers label{display:flex;align-items:center;gap:4px;cursor:pointer}.hmi-pulse{stroke-dasharray:2 10;animation:hmiPulse 1.6s ease-in-out infinite}@keyframes hmiPulse{0%,to{stroke-opacity:.15}50%{stroke-opacity:.9}}@media (prefers-reduced-motion: reduce){.hmi-pulse,.hmi-flow{animation:none}}.achat{border:1px solid var(--line, #dee2e6);border-radius:10px;margin-top:14px;background:#fbfcfe}.achat.over{outline:2px dashed #1c7ed6}.achat-head{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid #e9ecef;flex-wrap:wrap}.achat-list{max-height:320px;overflow:auto;padding:10px 12px;display:flex;flex-direction:column;gap:8px}.achat-msg{display:flex;flex-direction:column;max-width:82%}.achat-msg.user{align-self:flex-end;align-items:flex-end}.achat-bubble{padding:8px 11px;border-radius:12px;font-size:13px;white-space:pre-wrap;line-height:1.45}.achat-msg.user .achat-bubble{background:#1c5fd8;color:#fff;border-bottom-right-radius:4px}.achat-msg.agent .achat-bubble{background:#fff;border:1px solid #dee2e6;border-bottom-left-radius:4px}.achat-files{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.achat-msg.user .chip{background:#ffffff26;color:#fff;border-color:#fff5}.achat-input{border-top:1px solid #e9ecef;padding:8px 12px;display:flex;flex-direction:column;gap:6px}.achat-ex{display:block;margin:4px 0;border:1px dashed #b6c6dc;background:#fff;border-radius:6px;padding:3px 8px;font-size:12px;cursor:pointer;text-align:left;font-family:inherit}.achat-ex:hover:not(:disabled){border-color:#1c7ed6}.sc-bg{background:radial-gradient(1200px 700px at 30% 20%,#fff,#f1f5fb 60%,#e8eef7)}.sc-stream{stroke-dasharray:10 22;animation:scStream 1.1s linear infinite;filter:drop-shadow(0 0 2px #ffffffcc)}@keyframes scStream{to{stroke-dashoffset:-32}}.sc-shimmer{stroke-dasharray:3 16;animation:scShimmer 2.4s ease-in-out infinite}@keyframes scShimmer{0%,to{stroke-opacity:.2}50%{stroke-opacity:.95}}.sc-glow{animation:scGlow 2.6s ease-in-out infinite}@keyframes scGlow{0%,to{stroke-opacity:.08}50%{stroke-opacity:.24}}.sc-breathe{animation:scBreathe 2.4s ease-in-out infinite;transform-box:fill-box;transform-origin:center}@keyframes scBreathe{0%,to{opacity:.55;transform:scale(.94)}50%{opacity:1;transform:scale(1.06)}}.sc-alarm{animation:scAlarm 1s ease-in-out infinite}@keyframes scAlarm{0%,to{stroke-opacity:.2}50%{stroke-opacity:1}}.sc-strip{position:absolute;top:10px;right:12px;z-index:3;display:flex;gap:8px;pointer-events:none}.sc-card{background:#fffe;border:1px solid #dfe6ef;border-radius:12px;padding:6px 12px;box-shadow:0 4px 14px #0b1b3314;display:flex;flex-direction:column;align-items:flex-start;min-width:84px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.sc-card b{font-size:17px;color:#0b2447;letter-spacing:-.01em}.sc-card span{font-size:11px;color:#6b7a8c}.sc-card.ok b{color:#2f9e44}.sc-card.bad b{color:#e03131}@media (prefers-reduced-motion: reduce){.sc-stream,.sc-shimmer,.sc-glow,.sc-breathe,.sc-alarm{animation:none}}@media (max-width: 760px){.sc-strip{left:10px;right:10px;overflow-x:auto}.sc-card{min-width:72px}}.modes-tbl th.vert{height:92px;vertical-align:bottom;padding:2px 3px}.modes-tbl th.vert span{writing-mode:vertical-rl;transform:rotate(180deg);font-size:10.5px;white-space:nowrap}.modes-tbl td.st{text-align:center;font:600 11px/1 ui-monospace,monospace;padding:4px 3px;min-width:22px}.st-open{background:#e6f6ea;color:#2b8a3e}.st-closed{color:#adb5bd}.st-run{background:#e7f0ff;color:#1c5fd8}.st-stop{color:#adb5bd}.miss-list{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;max-height:220px;overflow:auto}.mode-pick select{max-width:240px}.ov-fixbar{background:#fff8e1;border:1px solid #f0d58a;border-radius:10px;padding:6px 10px}.ov-svg.ov-draw{cursor:crosshair}.ov-fixpanel{border-color:#f0d58a;background:#fffdf5}.ov-fixform label{display:flex;flex-direction:column;gap:3px}.ov-fixrow{padding:3px 0;border-bottom:1px dashed #eadfb8;align-items:center}.ov-unplaced{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;max-height:140px;overflow:auto}.ov-unplaced .chip{cursor:pointer}.ed-ink{align-items:center;padding:2px 8px;border:1px solid #dfe6ef;border-radius:10px;background:#fff}.ed-sw{width:18px;height:18px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #cfd8e3;cursor:pointer;padding:0}.ed-sw.on{box-shadow:0 0 0 2px #0b2447}.ed-colour{width:26px;height:22px;padding:0;border:none;background:none;cursor:pointer}.sc-liquid{animation:scLiquid 3.2s ease-in-out infinite}@keyframes scLiquid{0%,to{fill-opacity:.38}50%{fill-opacity:.52}}.sym-rot text{transform-box:fill-box;transform-origin:center;transform:rotate(-90deg)}.net-pct{font-size:44px;font-weight:750;letter-spacing:-.03em;line-height:1;display:flex;flex-direction:column;gap:4px;min-width:120px}.net-spark polyline{fill:none;stroke:var(--brand);stroke-width:2}.net-spark .full{stroke:var(--ok);stroke-dasharray:3 3;opacity:.6}.net-kpis{grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:10px;min-width:260px}.net-kpis .kpi{padding:10px 12px}.s4{height:100%;display:flex;flex-direction:column;min-height:0}.s4-title{max-width:260px}.s4-save{font-size:12px;color:var(--muted);padding:0 6px;white-space:nowrap}.s4-save.saving,.s4-save.dirty{color:#b7791f}.s4-save.conflict,.s4-save.error{color:#e03131;font-weight:600}.s4-body{flex:1;display:flex;min-height:0}.s4-main{position:relative;flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.props{width:320px;flex:none;border-left:1px solid var(--line);background:var(--panel);overflow-y:auto;padding:12px 14px;display:flex;flex-direction:column;gap:12px}.props-empty{padding:24px 6px;line-height:1.6}.props-head{display:flex;align-items:flex-start;gap:8px}.props-sec{display:flex;flex-direction:column;gap:8px}.props-sec h5{margin:4px 0 0;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.props-f{display:flex;flex-direction:column;gap:3px;font-size:12px}.props-f>span{color:var(--muted)}.props-f em{font-style:normal;color:#b7791f}.props-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.props-bind{display:flex;flex-direction:column;gap:6px}.props-prop{font-size:12px;min-width:64px;color:var(--muted)}.props-tag{border:1px solid var(--line);border-radius:10px;padding:10px;background:#f7f9fc;display:flex;flex-direction:column;gap:8px}.props-actions{display:flex;gap:6px;margin-top:auto;padding-top:8px}.s5{height:100%;display:flex;flex-direction:column;min-height:0}.s5>.hmi{flex:1;min-height:0}.s5-dt{flex:none;border-bottom:1px solid var(--line);background:var(--panel)}.s5-dt-head{display:flex;align-items:center;gap:10px;width:100%;padding:8px 14px;border:0;background:none;cursor:pointer;font:inherit;text-align:left}.s5-dt.ok .s5-dt-head svg:first-child{color:#2f9e44}.s5-dt.warn .s5-dt-head svg:first-child{color:#b7791f}.s5-dt.bad .s5-dt-head svg:first-child{color:#e03131}.s5-dt-list{list-style:none;margin:0;padding:0 14px 10px;max-height:32vh;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.s5-dt-list li{display:flex;align-items:center;gap:8px;font-size:13px;padding:4px 0;border-top:1px solid var(--line)}.s5-dt-list li.error svg:first-child{color:#e03131}.s5-dt-list li.warning svg:first-child{color:#b7791f}.s8-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.s8-facts>div{border:1px solid var(--line);border-radius:10px;padding:8px 12px;display:flex;flex-direction:column;gap:2px}.s8-facts span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.s8-facts b{font-size:18px}.s8-facts b.ok{color:#2f9e44;font-size:14px}.s8-facts b.warn{color:#b7791f;font-size:14px}.s8-facts em{font-style:normal;font-size:11px;color:var(--muted)}.s8-plcs input,.s8-plcs select{min-width:0;width:100%}.s8-plcs td:nth-child(2){min-width:140px}.s8-plcs td:nth-child(3),.s8-plcs td:nth-child(5){width:80px}.s8-plcs td:nth-child(4){min-width:120px}.s8-plcs td:nth-child(6){width:100px}.s8-plcs input.warn{border-color:#e0a030}.s8-last{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.s8-last svg{color:#2f9e44}.s8-steps{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px;font-size:14px;line-height:1.5}.s8-steps code,.callout code{font-size:12px;background:#eef2f7;padding:1px 5px;border-radius:5px}.s9-grid{align-items:start}.s9-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}.s9-facts>div{border:1px solid var(--line);border-radius:10px;padding:8px 12px;display:flex;flex-direction:column;gap:2px;min-width:0}.s9-facts span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.s9-facts b{font-size:15px;overflow-wrap:anywhere}.s9-facts b.ok{color:#2f9e44}.s9-facts b.warn{color:#b7791f}.s9-facts em{font-style:normal;font-size:11px;color:var(--muted);overflow-wrap:anywhere}.s9-todo{margin:0;padding-left:18px;font-size:13px;color:var(--muted);display:flex;flex-direction:column;gap:4px}.s9-inv{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px dashed var(--line);border-radius:8px}.s9-shifts input{min-width:0;width:100%}.s9-result{gap:8px;padding:12px 14px;border-radius:10px;background:#e7f6ee;border:1px solid #b4e0c6}.s9-result>.row>svg{color:#2f9e44}.s9-hist{margin-top:6px}.s9-local>summary{cursor:pointer;list-style:none;flex-wrap:wrap}.s9-local>summary::-webkit-details-marker{display:none}.s9-local>summary:before{content:"▸";color:var(--muted)}.s9-local[open]>summary:before{content:"▾"}.s9-local .page{max-width:none;margin:0}.s6-lead{margin:-6px 0 0;max-width:72ch}.s6-howto summary{display:flex;align-items:center;gap:8px;padding:12px 16px;cursor:pointer;list-style:none}.s6-howto summary::-webkit-details-marker{display:none}.s6-howto ol{margin:0;padding:0 20px 14px 40px;display:flex;flex-direction:column;gap:6px;max-width:80ch}.s6-limits ul{margin:6px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:3px}.s6-drop{padding:22px;display:flex;flex-direction:column;align-items:center;gap:8px}.s6-fields textarea{resize:vertical;font-family:inherit}.s6-wide{grid-column:1 / -1}.s6-stages{display:flex;gap:6px;list-style:none;margin:0;padding:0;flex-wrap:wrap}.s6-stages li{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:999px;font-size:12.5px;background:#eef2f7;color:var(--muted)}.s6-stages li.now{background:var(--brand-soft);color:var(--brand-2);font-weight:600}.s6-stages li.done{background:var(--ok-soft);color:#0b6b34}.s6-summary{padding:14px 16px;display:flex;flex-direction:column;gap:10px}.s6-counts{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;font-size:14px;color:var(--muted)}.s6-n b{font-size:22px;margin-right:4px;font-variant-numeric:tabular-nums}.s6-n.green b{color:var(--ok)}.s6-n.amber b{color:var(--warn)}.s6-n.red b{color:var(--bad)}.s6-n.extra b{color:var(--faint)}.s6-n.confirmed b{color:var(--brand-2)}.s6-match{margin-left:auto;color:var(--text)}.s6-match b{font-size:22px;font-variant-numeric:tabular-nums}.s6-search{width:180px}.s6-thead{flex-wrap:wrap;row-gap:8px}.s6-thead .pill{white-space:nowrap}.s6-table{overflow:auto;max-height:70vh}.s6-table .tbl td{white-space:normal}.s6-status{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11.5px;font-weight:700;white-space:nowrap}.s6-status.green{background:var(--ok-soft);color:#0b6b34}.s6-status.amber{background:var(--warn-soft);color:#7a5200}.s6-status.red{background:var(--bad-soft);color:#a3170e}.s6-status.extra{background:#eef2f7;color:#475467}.s6-status.confirmed{background:var(--brand-soft);color:var(--brand-2)}.s6-reason{max-width:34ch}.s6-note{color:var(--info);max-width:34ch}.s6-samples{max-width:18ch;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.s6-sugg{max-width:30ch}.s6-actions{display:flex;flex-wrap:wrap;gap:4px;min-width:150px}.s6-row.decided td{color:var(--muted)}.s6-empty{text-align:center;padding:22px!important}.s6-cap{padding:6px 0;border-bottom:1px solid #eef1f5}.s6-cap:last-child{border-bottom:0}.s7v-gate{padding:16px;display:flex;flex-direction:column;gap:10px}.s7v-pct{font-size:28px;font-variant-numeric:tabular-nums}.s7v-parts{gap:18px;flex-wrap:wrap}.s7v-parts span{display:inline-flex;align-items:center;gap:5px}.s7v-counts{font-size:13px}.s7v-counts .s6-n b{font-size:18px}.s7v-ok{color:#0b6b34}.s7v-bad{color:#a3170e}.s7v-val{font-variant-numeric:tabular-nums;white-space:nowrap}html,body,#root{height:100%}body.portal-body{margin:0;background:#f4f6fb}.pmain{display:flex;flex-direction:column;min-width:0;min-height:0;height:100%;overflow:hidden}.cauth{min-height:100%;display:grid;place-items:center;padding:24px 16px;background:linear-gradient(180deg,#0b2447 0,#0b2447 38%,#f4f6fb 38%)}.cauth-card{width:min(400px,100%);background:#fff;border-radius:14px;border:1px solid #e3e8ef;padding:26px 26px 22px;box-shadow:0 10px 40px #0b24472e;display:flex;flex-direction:column;gap:12px}.cauth-brand{display:flex;align-items:center;gap:10px;color:#0b2447}.cauth-brand b{display:block;font-size:15px}.cauth-brand small{font-size:10px;letter-spacing:.12em;color:#8a6d0b;font-weight:700}.cauth h1{font-size:20px;margin:6px 0 0;color:#0b3fa8}.cauth-sub{margin:0;color:#5d6b7d;font-size:13.5px}.cform{display:flex;flex-direction:column;gap:12px}.cform label,.cgrid label{display:flex;flex-direction:column;gap:4px;font-size:12.5px;font-weight:600;color:#3d4a5c}.cwide{margin-left:0;width:100%;padding:11px 16px;font-size:14px}.cmsg{padding:10px 12px;border-radius:9px;font-size:13px;line-height:1.45;border:1px solid #c9d6e6;background:#eef4ff;color:#17325c}.cmsg.bad{background:#fdecea;border-color:#f2b8b3;color:#8a1c12}.cmsg.ok{background:#e7f6ee;border-color:#b4e0c6;color:#0b5a2c}.cmsg.warn{background:#fff6e0;border-color:#f0d48a;color:#6b4b00}.cmsg code,.ctoken code{background:#fff9;padding:1px 5px;border-radius:5px;font-size:12px}.cbreak{word-break:break-all}.cdot{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:#5d6b7d;white-space:nowrap}.cdot i{width:9px;height:9px;border-radius:50%;background:#98a2b3}.cdot.online{color:#0b6b34}.cdot.online i{background:#2f9e44;box-shadow:0 0 0 3px #2f9e4422}.cdot.offline{color:#a3170e}.cdot.offline i{background:#e03131}.cdot.revoked i{background:#495057}.cbad{color:#c92a2a;font-weight:700}.cdanger{color:#c92a2a}.csites{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}.csite{text-align:left;font:inherit;color:inherit;cursor:pointer;display:flex;flex-direction:column;gap:6px}.csite:hover{border-color:#0b3fa8;box-shadow:0 6px 22px #1018281f}.csite-h{display:flex;align-items:center;gap:8px}.csite-h b{font-size:16px;color:#0b2447;flex:1}.csite-k,.cfacts{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px;margin-top:8px}.csite-k>div,.cfacts>div{background:#f6f8fc;border-radius:9px;padding:8px 10px;display:flex;flex-direction:column;gap:2px}.csite-k span,.cfacts span{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:#5d6b7d;font-weight:700}.csite-k b,.cfacts b{font-size:16px;color:#17202b}.cfacts em{font-style:normal;font-size:11px;color:#5d6b7d}.clive-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.pscada-page .pscada{flex:1}.ctable-wrap{overflow-x:auto}.ptable th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:#5d6b7d;padding:6px 8px;border-bottom:1px solid #dde3ec;white-space:nowrap}.ptable th.r{text-align:right}.calarms tr.cunacked td{background:#fff4f3}.csev{display:inline-flex;align-items:center;gap:5px;font-weight:700;font-size:12px;color:#c92a2a}.csev.lo{color:#1c5cab}.cactive{color:#c92a2a}.ccount{background:#e03131;color:#fff;border-radius:999px;font-size:11px;font-weight:800;padding:1px 8px}.cfilters{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.cfilters .input:not(.csel){max-width:260px}.csel{width:auto}.cinline{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600}.cgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;align-items:end}.cgrid-end{display:flex;justify-content:flex-end}.cgrid-end .pgold{margin-left:0}.cempty{padding:30px;text-align:center;color:#5d6b7d;font-size:13.5px}.ctoken{margin-top:12px;display:flex;flex-direction:column;gap:8px}.ctoken pre{margin:0;background:#0b2447;color:#e7eef8;padding:12px 14px;border-radius:9px;font-size:12.5px;overflow-x:auto}.ctags{display:flex;flex-wrap:wrap;gap:6px}.ctag{display:inline-flex;align-items:center;gap:6px;border:1px solid #d5dde8;background:#fff;border-radius:999px;padding:5px 11px;font:inherit;font-size:12.5px;cursor:pointer;color:#17202b}.ctag small{color:#5d6b7d}.ctag.on{border-color:#0b3fa8;background:#eef4ff;font-weight:700}.ctag i{width:10px;height:10px;border-radius:3px}.ctrend{display:flex;flex-direction:column;gap:14px}.ctrend-bar{display:flex;align-items:center;gap:8px}.cchart{margin:0}.cchart figcaption{display:flex;align-items:center;gap:8px;font-size:13px;color:#17202b;margin-bottom:2px;flex-wrap:wrap}.cchart figcaption i{width:12px;height:4px;border-radius:2px}.cchart figcaption span{color:#5d6b7d;font-size:12px}.cchart figcaption em{font-style:normal;color:#5d6b7d;font-size:12px}.cchart-val{font-family:var(--mono);color:#17202b!important;font-weight:700;font-size:13px!important}.cchart-val small{color:#5d6b7d;font-weight:400}.cchart svg{width:100%;height:150px;display:block;touch-action:none}.cgl{stroke:#e6eaf0;stroke-width:1;vector-effect:non-scaling-stroke}.caxis{fill:#6b7787;font-size:11px;font-family:var(--mono)}.ccross{stroke:#9aa5b4;stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke}.mt{margin-top:10px}.mono{font-family:var(--mono)}.nowrap{white-space:nowrap}.row.gap{display:flex;gap:8px;align-items:center}.ctable-wrap .ptable{min-width:760px}.ctable-wrap .ptable td:first-child{white-space:nowrap}.cshell{--rail: 64px;height:100%;display:flex;background:#f4f6fb;color:#17202b;position:relative}.crail{position:fixed;inset:0 auto 0 0;z-index:40;width:var(--rail);background:#0b2447;color:#c9d4e3;display:flex;flex-direction:column;gap:4px;padding:12px 10px;overflow:hidden;transition:width .18s ease,box-shadow .18s}.crail.open{width:216px;box-shadow:8px 0 30px #0b244747}.crail-brand{display:flex;align-items:center;gap:10px;padding:2px 6px 14px;white-space:nowrap}.crail-brand img{flex:none}.crail-brand b{display:block;color:#fff;font-size:14px}.crail-brand small{font-size:9.5px;letter-spacing:.12em;color:#d4a017;font-weight:800}.crail-item{position:relative;display:flex;align-items:center;gap:14px;height:44px;padding:0 12px;border:0;border-radius:10px;background:transparent;color:inherit;cursor:pointer;font:inherit;font-size:13.5px;font-weight:600;white-space:nowrap;flex:none}.crail-item svg{flex:none}.crail-item:hover{background:#ffffff14;color:#fff}.crail-item.on{background:#ffffff24;color:#fff}.crail-item.on svg{color:#d4a017}.crail-brand span,.crail-item span{opacity:0;transition:opacity .12s}.crail.open .crail-brand span,.crail.open .crail-item span{opacity:1}.crail-item em,.cbottom em{position:absolute;top:5px;left:28px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:#e03131;color:#fff;font:800 10px/16px system-ui,sans-serif;text-align:center;font-style:normal}.cmain{flex:1;min-width:0;margin-left:var(--rail);display:flex;flex-direction:column;height:100%;overflow:hidden}.ctop{display:flex;align-items:center;gap:10px;padding:8px 20px;background:#fff;border-bottom:1px solid #e3e8ef;border-top:3px solid #d4a017;flex:none;min-height:52px}.ctop-logo{display:none}.cavatar{width:32px;height:32px;border-radius:50%;background:#d4a017;color:#1f2937;display:grid;place-items:center;font-weight:800;font-size:11.5px;flex:none}.cavatar.lg{width:46px;height:46px;font-size:15px}.cbottom{display:none}.cplant{position:relative;min-width:0}.cplant-btn{display:flex;align-items:center;gap:8px;border:1px solid #e3e8ef;background:#fff;border-radius:10px;padding:7px 12px;font:inherit;cursor:pointer;color:#0b2447;max-width:100%}.cplant-btn b{font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cplant-btn:hover{border-color:#0b3fa8}.cpdot{width:9px;height:9px;border-radius:50%;background:#98a2b3;flex:none}.cpdot.online{background:#2f9e44;box-shadow:0 0 0 3px #2f9e4422}.cpdot.offline{background:#e03131}.cplant-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:50;list-style:none;margin:0;padding:6px;min-width:260px;max-width:86vw;background:#fff;border:1px solid #e3e8ef;border-radius:12px;box-shadow:0 12px 34px #10182829;max-height:60vh;overflow:auto}.cplant-menu button{display:flex;align-items:center;gap:10px;width:100%;border:0;background:none;padding:9px 10px;border-radius:8px;cursor:pointer;font:inherit;text-align:left}.cplant-menu button:hover,.cplant-menu button.on{background:#eef4ff}.cplant-menu span{flex:1;min-width:0}.cplant-menu b{display:block;font-size:13.5px;color:#17202b}.cplant-menu small{font-size:11.5px;color:#5d6b7d}.cplant-menu em{background:#e03131;color:#fff;border-radius:999px;font-size:10.5px;font-weight:800;padding:1px 7px;font-style:normal}.cempty{display:flex;flex-direction:column;align-items:center;color:#8a97a8}.cempty p{margin:8px 0 0;font-weight:600}.cdash{gap:14px}.cstats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.cstat{background:#fff;border:1px solid #e3e8ef;border-radius:12px;padding:12px 14px;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:10px;align-items:center;color:#0b3fa8}.cstat svg{grid-row:span 2}.cstat b{font-size:20px;color:#17202b;line-height:1.1}.cstat small{font-size:11.5px;color:#5d6b7d}.cstat.ok{color:#2f9e44}.cstat.ok b{color:#0b6b34}.cstat.bad{color:#e03131}.cstat.bad b{color:#c92a2a}.cvals{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.cval{--c: #0b3fa8;text-align:left;font:inherit;background:#fff;border:1px solid #e3e8ef;border-radius:12px;padding:10px 12px;cursor:pointer;display:flex;flex-direction:column;gap:4px;color:#17202b;transition:border-color .12s,box-shadow .12s;min-width:0}.cval:hover{border-color:#b7c4d6}.cval.on{border-color:var(--c);box-shadow:0 0 0 1px var(--c) inset}.cval-n{display:flex;align-items:center;gap:6px;font-size:12px;color:#5d6b7d;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cval-n i{width:10px;height:4px;border-radius:2px;background:var(--c);flex:none}.cval-v{font:700 20px/1.15 var(--mono);color:#0b2447;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cval-v small{font:500 12px system-ui,sans-serif;color:#5d6b7d;margin-left:4px}.cval.hot .cval-v{color:#c92a2a}.cval.cool .cval-v{color:#1c5cab}.cval.bad .cval-v{color:#98a2b3}.cchartcard{display:flex;flex-direction:column;gap:8px}.cchart-h{display:flex;justify-content:flex-end}.cstates{display:flex;flex-wrap:wrap;gap:6px}.cstate{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid #e3e8ef;border-radius:999px;padding:4px 10px;font-size:12px;color:#3d4a5c;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cstate i{width:8px;height:8px;border-radius:50%;background:#ced4da;flex:none}.cstate.on i{background:#2f9e44}.cstate.on{color:#0b6b34;border-color:#b4e0c6}.calist{display:flex;flex-direction:column;gap:2px;padding:8px 10px}.calrow{display:grid;grid-template-columns:auto 1fr auto auto auto;gap:10px;align-items:center;padding:6px 4px;font-size:13px;color:#6b4b00;border-bottom:1px solid #f1f3f5}.calrow:last-child{border-bottom:0}.calrow.new{color:#c92a2a}.calrow b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#17202b}.calrow small{color:#8a97a8;white-space:nowrap}.cscada-page{gap:10px;padding-bottom:16px}.cscada-page .pscada{flex:1;min-height:420px;padding:0;display:flex}.cscada-page .hmi.bare{border-radius:12px;border:1px solid #e3e8ef;overflow:hidden;flex:1;display:flex;flex-direction:column;min-height:0}.cscada-page .bare-head{padding:8px 12px;gap:8px;flex-wrap:wrap}.cscada-page .bare-head>b{display:none}.cscada-page .bare-head>.grow{display:none}.cscada-page .bare-screens{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;min-width:0;flex:1;flex-wrap:nowrap;margin-left:0}.cscada-page .bare-screens .pill{white-space:nowrap}.cscada-page .hmi-body{display:flex;min-height:0;flex:1;position:relative}.cscada-page .hmi-main{position:relative;flex:1;min-width:0;display:flex}.cshell .scada-stage{touch-action:none}.cscada-tools{display:flex;align-items:center;gap:8px;margin-left:auto}.clive{display:inline-flex;align-items:center;gap:6px;font:800 11px system-ui,sans-serif;letter-spacing:.06em;color:#c92a2a}.clive i{width:8px;height:8px;border-radius:50%;background:#e03131}.clive.on{color:#0b6b34}.clive.on i{background:#2f9e44;animation:cpulse 2s infinite}@keyframes cpulse{50%{box-shadow:0 0 0 4px #2f9e4433}}@media (prefers-reduced-motion: reduce){.clive.on i{animation:none}.crail,.crail span{transition:none}}.calchip{display:inline-flex;align-items:center;gap:5px;border:1px solid #e3e8ef;background:#fff;border-radius:999px;padding:4px 10px;font:700 12.5px system-ui,sans-serif;cursor:pointer;color:#5d6b7d}.calchip.has{color:#6b4b00;border-color:#f0d48a}.calchip.new{color:#fff;background:#e03131;border-color:#e03131}.cscada-3d{position:relative;flex:1;display:flex;flex-direction:column;min-height:0;border-radius:12px;overflow:hidden;border:1px solid #e3e8ef}.cscada-3d>.cscada-tools{position:absolute;top:10px;right:10px;z-index:5;background:#ffffffe6;border-radius:10px;padding:4px 6px}.csettings{max-width:760px;width:100%}.caccount{display:flex;align-items:center;gap:12px}.caccount b{display:block;font-size:16px}.caccount small{color:#5d6b7d;font-size:12.5px}.crow-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.cdev{border-top:1px solid #f1f3f5;padding:10px 0}.cdev:first-of-type{border-top:0}.cdev-h{display:flex;align-items:center;gap:10px}.cdev-plcs{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.cplc{display:inline-flex;align-items:center;gap:6px;border:1px solid #e3e8ef;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600}.cplc i{width:8px;height:8px;border-radius:50%;background:#ced4da}.cplc.ok i{background:#2f9e44}.cplc.bad i{background:#e03131}.cplc small{color:#5d6b7d;font-weight:400}.cmanage summary{cursor:pointer;display:flex;align-items:center;gap:8px;font-weight:700;color:#0b3fa8;list-style:none}.cmanage summary::-webkit-details-marker{display:none}.cmanage[open] summary{margin-bottom:12px}.cmanage .ppage{padding:0;overflow:visible}@media (max-width: 760px){.crail{display:none}.cmain{margin-left:0;padding-bottom:calc(60px + env(safe-area-inset-bottom))}.ctop{padding:6px 12px;min-height:48px;border-top-width:0}.ctop-logo{display:block}.cplant-btn{padding:6px 10px}.cplant-btn b{font-size:14px}.ppage{padding:12px 12px 18px;gap:12px}.cbottom{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;background:#fff;border-top:1px solid #e3e8ef;padding:4px 6px calc(4px + env(safe-area-inset-bottom));box-shadow:0 -4px 18px #1018280f}.cbottom button{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;border:0;background:none;padding:6px 0 4px;color:#6b7787;font:inherit;cursor:pointer;border-radius:10px}.cbottom button small{font-size:10.5px;font-weight:600}.cbottom button.on{color:#0b3fa8}.cbottom button.on .cbottom-ic{background:#e8f0ff}.cbottom-ic{position:relative;display:grid;place-items:center;width:48px;height:28px;border-radius:999px}.cbottom em{top:-3px;left:30px}.cstats{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.cstat{padding:10px 12px}.cstat b{font-size:17px}.cvals{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.cval{padding:9px 10px}.cval-v{font-size:17px}.cscada-page{padding:8px 8px 10px}.cscada-page .pscada{min-height:0;height:calc(100dvh - 130px - env(safe-area-inset-bottom));flex:none}.cscada-page .dp{position:absolute;left:0;right:0;bottom:0;width:auto;max-height:62%;z-index:20;border-left:0;border-top:1px solid #dee2e6;border-radius:14px 14px 0 0;box-shadow:0 -10px 30px #1018282e}.cscada-page .draw-layers{display:none}.cscada-page .bare-head{padding:6px 8px}.cscada-page .bare-screens{order:2;flex:1 1 100%}.cscada-page .bare-screens .pill{padding:5px 10px;font-size:12px}.cscada-tools{flex:1 1 100%;justify-content:flex-end}.calrow{grid-template-columns:auto 1fr auto auto}.calrow small{display:none}.ctable-wrap .ptable{min-width:560px}.cfilters{gap:8px}.cfilters .input{max-width:100%}}
