:root,html[data-theme=dark]{--brand:#0d7d7d;--brand-600:#109090;--brand-300:#3cc0c0;--white:#fff;--canvas:#0f1216;--surface:#1a1f27;--surface-2:#222933;--line:#2c333f;--ink:#e8edf4;--ink-muted:#93a0b0;--success:#21a366;--success-ink:#0f1216;--warning:#e0a83a;--warning-ink:#0f172a;--danger:#e85d5f;--info:#6aa5f5;--purple:#a855f7;--violet:#c484fc;--orange:#ea580c;--teal:#2dd4bf;--chart-bg:#111827;--chart-grid:#ffffff12;--chart-axis:#94a3b8;--chart-cursor:#fff;--ccp-band:#21a3661a;--ccp-line:#21a3668c;--tint-success:#21a36624;--tint-warning:#e0a83a29;--tint-danger:#e85d5f1f;--tint-info:#3a7bd529;--shadow:0 4px 14px #00000080;--shadow-lg:0 14px 40px #000000b3;--focus-ring:#3cc0c0;--busy-veil:#0f1216c7;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html[data-theme=light]{--brand:#0d7d7d;--brand-600:#0b6b6b;--brand-300:#0b6b6b;--canvas:#f2f7f7;--surface:#fff;--surface-2:#eaf2f2;--line:#d3e0e0;--ink:#0f172a;--ink-muted:#4b5563;--success:#15803d;--success-ink:#fff;--warning:#b45309;--warning-ink:#fff;--danger:#a8272a;--info:#1d4ed8;--purple:#7c3aed;--violet:#9333ea;--orange:#c2410c;--teal:#0d9488;--chart-bg:#fff;--chart-grid:#0f172a14;--chart-axis:#475569;--chart-cursor:#0f172a;--ccp-band:#15803d1a;--ccp-line:#15803d8c;--tint-success:#15803d1a;--tint-warning:#b453091a;--tint-danger:#a8272a14;--tint-info:#1d4ed81a;--shadow:0 4px 14px #0f172a1a;--shadow-lg:0 16px 36px #0f172a29;--focus-ring:#0d7d7d;--busy-veil:#ffffffd1;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root{--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--touch:56px;--font-sans:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans Arabic", "Geeza Pro", Tahoma, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace}*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--canvas);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;font-size:16px;line-height:1.5;transition:background-color .25s,color .25s;overflow-x:hidden}a{color:inherit}:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}bdi.num,.num{font-variant-numeric:tabular-nums}.mono{font-family:var(--font-mono);white-space:nowrap;direction:ltr;unicode-bidi:isolate}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.topbar{z-index:20;background:var(--surface);border-bottom:1px solid var(--line);height:68px;box-shadow:inset 0 3px 0 var(--brand);flex-wrap:nowrap;align-items:center;gap:12px;padding:0 16px;display:flex;position:sticky;top:0}.brand{min-height:var(--touch);flex-shrink:0;align-items:center;gap:10px;text-decoration:none;display:flex}.brand img{background:var(--white);border-radius:6px;width:auto;height:34px;padding:2px 4px}.crumbs{white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--ink-muted);align-items:center;gap:6px;font-size:15px;display:flex;overflow:hidden}.crumbs a{min-height:var(--touch);color:var(--ink);align-items:center;padding:0 4px;text-decoration:none;display:inline-flex}.crumbs a:hover{text-decoration:underline}.crumbs .sep{opacity:.6}.crumbs .current{color:var(--ink);text-overflow:ellipsis;font-weight:700;overflow:hidden}.spacer{flex:1}.user-menu{flex-shrink:0;position:relative}.user-chip{min-height:var(--touch);border:1px solid var(--line);background:var(--surface-2);color:var(--ink);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:8px;max-width:46vw;padding:6px 14px;font-size:14px;display:flex}.user-chip .who{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu{inset-inline-end:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-md);min-width:240px;box-shadow:var(--shadow-lg);gap:2px;padding:6px;display:grid;position:absolute;top:calc(100% + 6px)}.menu-item{width:100%;min-height:var(--touch);border-radius:var(--radius-sm);color:var(--ink);font:inherit;text-align:start;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:0 14px;text-decoration:none;display:flex}.menu-item:hover{background:var(--surface-2)}.menu-item.danger{color:var(--danger)}main.page{width:100%;max-width:1400px;margin:0 auto;padding:20px 16px 48px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.page-head h1{margin:0;font-size:24px}.page-head p{color:var(--ink-muted);margin:4px 0 0}.btn{min-height:var(--touch);min-width:var(--touch);border-radius:var(--radius-md);font:inherit;cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:0 20px;font-size:16px;font-weight:700;text-decoration:none;transition:transform 80ms,background-color .15s,border-color .15s;display:inline-flex}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled,.btn[aria-disabled=true]{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand);color:var(--white)}.btn-success{background:var(--success);color:var(--success-ink)}.btn-danger-outline{color:var(--danger);border-color:var(--danger);background:0 0}.btn-danger-outline:hover{background:var(--tint-danger)}.btn-danger-solid{background:var(--danger);color:var(--white)}.btn-neutral{color:var(--ink);border-color:var(--line);background:0 0}.btn-neutral:hover{background:var(--surface-2)}.btn-sm{min-height:var(--touch);padding:0 14px;font-size:14px}.seg{flex-wrap:wrap;gap:6px;display:flex}.seg button{min-height:var(--touch);border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface-2);color:var(--ink);font:inherit;cursor:pointer;padding:0 14px;font-size:14px}.seg button[aria-pressed=true]{border-bottom:3px solid var(--brand);font-weight:700}.tile-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));align-items:stretch;gap:16px;display:grid}.tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);min-height:132px;color:var(--ink);box-shadow:var(--shadow);flex-direction:column;gap:6px;padding:20px;text-decoration:none;transition:border-color .15s,transform 80ms;display:flex;position:relative}.tile:hover{border-color:var(--brand-300)}.tile:active{transform:scale(.99)}.tile h3{margin:0;font-size:19px}.tile .sub{color:var(--ink-muted);font-size:14px}.tile .tile-ico{border-radius:var(--radius-md);background:var(--surface-2);width:44px;height:44px;color:var(--ink);place-items:center;margin-bottom:6px;display:grid}.tile .tile-ico svg{width:26px;height:26px}.legacy-tag{border:1px solid var(--line);color:var(--ink-muted);border-radius:999px;align-self:flex-start;margin-top:auto;padding:2px 10px;font-size:12px}.empty,.notice{border:1px dashed var(--line);border-radius:var(--radius-lg);color:var(--ink-muted);text-align:center;background:var(--surface);padding:24px}.notice{border-style:solid;justify-items:center;gap:12px;display:grid}.notice.warn{border-color:var(--warning)}.notice h2{color:var(--ink);margin:0;font-size:18px}.skeleton{border-radius:var(--radius-lg);background:var(--surface);border:1px solid var(--line);opacity:.6;min-height:132px}.login-wrap{place-items:center;min-height:calc(100vh - 68px);padding:24px 16px;display:grid}.login-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);width:100%;max-width:420px;box-shadow:var(--shadow-lg);border-top:4px solid var(--brand);gap:16px;padding:28px 24px;display:grid}.login-card h1{text-align:center;margin:0;font-size:22px}.login-card .login-logo{background:var(--white);border-radius:10px;justify-self:center;width:auto;height:72px;padding:4px 8px}.field{gap:6px;display:grid}.field label{font-size:15px;font-weight:700}.field input{min-height:var(--touch);border-radius:var(--radius-md);border:1px solid var(--line);background:var(--surface-2);color:var(--ink);font:inherit;padding:0 14px;font-size:17px}.form-error{min-height:24px;color:var(--danger);text-align:center;font-weight:700}.hint{color:var(--ink-muted);text-align:center;font-size:13px}.dialog-backdrop{z-index:50;background:#0000008c;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.dialog{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);width:100%;max-width:420px;box-shadow:var(--shadow-lg);gap:14px;padding:22px;display:grid}.dialog h2{margin:0;font-size:19px}.dialog-actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;display:flex}.dialog-backdrop.layer-1{z-index:52}.dialog-backdrop.layer-2{z-index:54}.dialog-backdrop.layer-3{z-index:56}.dialog-backdrop.layer-4{z-index:58}.dialog-backdrop.layer-5{z-index:60}.dialog{max-height:calc(100vh - 32px);position:relative;overflow:auto}.dialog.dialog-wide{max-width:760px}.dialog:focus{outline:none}.dialog-body,.dialog-form{gap:12px;display:grid}.busy-overlay{z-index:2;border-radius:var(--radius-lg);background:var(--busy-veil);color:var(--ink);cursor:progress;justify-content:center;align-items:center;gap:12px;font-weight:700;display:flex;position:absolute;inset:0}.spinner{border:3px solid var(--line);border-top-color:var(--success);border-radius:50%;width:26px;height:26px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.confirm-items{gap:4px;margin:0;padding-inline-start:20px;display:grid}.result-summary{font-weight:700}.table-wrap{overflow-x:auto}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table caption{text-align:start;padding:6px 0;font-weight:800}.data-table th,.data-table td{border-bottom:1px solid var(--line);text-align:start;padding:8px}.data-table td.num{font-variant-numeric:tabular-nums;text-align:end;direction:ltr}.btn-warning{background:var(--warning);color:var(--warning-ink)}.toasts{inset-inline:16px;z-index:80;pointer-events:none;justify-items:center;gap:8px;display:grid;position:fixed;bottom:16px}.toast{border-radius:var(--radius-md);background:var(--surface);width:100%;max-width:560px;color:var(--ink);border:1px solid var(--line);border-inline-start:6px solid var(--info);box-shadow:var(--shadow-lg);padding:14px 18px;font-weight:700}.toast.toast-ok{border-inline-start-color:var(--success)}.toast.toast-err{border-inline-start-color:var(--danger)}.scada{gap:16px;display:grid}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:18px}.card h2,.card h3{margin:0 0 12px;font-size:17px}.status-pill{border:1px solid var(--line);border-radius:999px;align-items:center;gap:8px;min-height:36px;padding:0 14px;font-size:14px;font-weight:700;display:inline-flex}.status-pill .dot{background:currentColor;border-radius:50%;width:10px;height:10px}.status-pill.good{color:var(--success);background:var(--tint-success)}.status-pill.bad{color:var(--danger);background:var(--tint-danger)}.status-pill small{color:var(--ink-muted);font-weight:400}.mode-banner{border-radius:var(--radius-lg);border:1px solid var(--line);border-inline-start:6px solid var(--ink-muted);background:var(--surface);flex-wrap:wrap;justify-content:space-between;gap:12px;padding:18px;display:flex}.mode-banner.run{border-inline-start-color:var(--success);background:var(--tint-success)}.mode-banner.cip,.mode-banner.hot{border-inline-start-color:var(--warning);background:var(--tint-warning)}.mode-title{margin:0;font-size:20px;font-weight:800}.mode-desc{color:var(--ink-muted);margin:4px 0 0}.ccp{text-align:end}.ccp .label{color:var(--ink-muted);font-size:13px}.ccp .value{font-size:26px;font-weight:800}.ccp .value small{color:var(--ink-muted);font-size:13px;font-weight:400}.stages{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;display:grid}.stage{border-radius:var(--radius-md);background:var(--surface-2);border:1px solid var(--line);align-content:start;gap:6px;padding:14px;display:grid}.stage-top{justify-content:space-between;align-items:center;display:flex}.stage-num{font-family:var(--font-mono);color:var(--ink-muted);font-weight:700}.badge{border:1px solid var(--line);color:var(--ink-muted);border-radius:999px;align-items:center;padding:2px 10px;font-size:12px;font-weight:700;display:inline-flex}.badge.run{color:var(--success);border-color:var(--success)}.badge.cip,.badge.hot{color:var(--warning);border-color:var(--warning)}.stage-name{font-weight:800}.stage-desc{color:var(--ink-muted);font-size:13px}.stage-val{font-size:22px;font-weight:800}.stage-target{color:var(--ink-muted);font-size:12px}.chart-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;display:flex}.chart-head p{color:var(--ink-muted);margin:2px 0 0;font-size:13px}.pens{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.pen{min-height:var(--touch);border:1px solid var(--line);background:var(--surface-2);color:var(--ink);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:inline-flex}.pen[aria-pressed=false]{opacity:.5}.pen .swatch{border-radius:2px;width:14px;height:4px}.pen .val{direction:ltr;unicode-bidi:isolate;font-weight:700}.chart-box{border-radius:var(--radius-md);border:1px solid var(--line);background:var(--chart-bg);touch-action:pan-y;direction:ltr;width:100%;position:relative;overflow:hidden}.chart-box svg{width:100%;display:block}.chart-grid line{stroke:var(--chart-grid)}.chart-axis text{fill:var(--chart-axis);font-family:var(--font-mono);font-size:11px}.chart-empty{fill:var(--chart-axis);font-size:14px}.ccp-band{fill:var(--ccp-band)}.ccp-line{stroke:var(--ccp-line);stroke-dasharray:4 4}.cursor-line{stroke:var(--chart-cursor);stroke-dasharray:2 2}.tip-bg{fill:var(--surface);stroke:var(--line)}.tip-text{fill:var(--ink);font-size:12px;font-family:var(--font-sans)}.tip-time{fill:var(--ink-muted);font-size:11px;font-family:var(--font-mono)}.trace{fill:none;stroke-linejoin:round;stroke-linecap:round;stroke-width:1.8px}.trace.bold{stroke-width:2.6px}.trace.dashed{stroke-dasharray:6 5}.tone-success{stroke:var(--success);fill:var(--success);background:var(--success)}.tone-info{stroke:var(--info);fill:var(--info);background:var(--info)}.tone-warning{stroke:var(--warning);fill:var(--warning);background:var(--warning)}.tone-danger{stroke:var(--danger);fill:var(--danger);background:var(--danger)}.tone-orange{stroke:var(--orange);fill:var(--orange);background:var(--orange)}.tone-purple{stroke:var(--purple);fill:var(--purple);background:var(--purple)}.tone-violet{stroke:var(--violet);fill:var(--violet);background:var(--violet)}.tone-teal{stroke:var(--teal);fill:var(--teal);background:var(--teal)}.trace[class*=tone-]{fill:none}.stats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:12px;display:grid}.stat{border-radius:var(--radius-md);background:var(--surface-2);gap:4px;padding:12px;display:grid}.stat .label{color:var(--ink-muted);font-size:12px}.stat .value{font-size:19px;font-weight:800}.sensors{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;display:grid}.sensor{border-radius:var(--radius-md);background:var(--surface-2);border:1px solid var(--line);gap:6px;padding:12px;display:grid}.sensor-head{justify-content:space-between;gap:8px;font-size:13px;display:flex}.sensor-key{color:var(--ink-muted);font-family:var(--font-mono);font-size:11px}.sensor-reading{font-size:24px;font-weight:800}.sensor-reading small{color:var(--ink-muted);margin-inline-start:4px;font-size:13px;font-weight:400}.sensor-bar{width:100%;height:6px;display:block}.sensor-bar .track{fill:var(--line)}.dash-list{gap:12px;display:grid}.dash-card{border-radius:var(--radius-lg);background:var(--surface);border:1px solid var(--line);min-height:88px;color:var(--ink);align-items:center;gap:14px;padding:16px 18px;text-decoration:none;display:flex}.dash-card:hover{border-color:var(--brand-300)}.dash-card .dash-body{flex:1}.dash-card .dash-name{font-size:17px;font-weight:800}.dash-card .dash-sub{color:var(--ink-muted);font-size:13px}@media (max-width:640px){.topbar{flex-wrap:wrap;gap:6px 8px;height:auto;min-height:68px;padding:6px 10px}.topbar .crumbs{flex:1 1 0}.top-mod .label{display:none}.top-mod{padding:0}.user-chip{max-width:40vw}.page-head h1{font-size:20px}.crumbs{font-size:13px}.brand img{height:28px}.ccp{text-align:start}.tile{min-height:112px}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}.rpt-lead{text-align:start;margin:0 0 10px}.rpt-text{box-sizing:border-box;border-radius:var(--radius-md);border:1px solid var(--line);background:var(--surface-2);width:100%;color:var(--ink);font:inherit;resize:vertical;padding:10px 14px;font-size:16px}.rpt-prio{border:0;flex-wrap:wrap;gap:8px 16px;margin:12px 0 0;padding:0;display:flex}.rpt-prio legend{margin-bottom:6px;padding:0;font-size:15px;font-weight:700}.rpt-radio{min-height:var(--touch);align-items:center;gap:8px;display:inline-flex}.rpt-shots{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:flex}.rpt-file{cursor:pointer}.rpt-ok,.rpt-sent{color:var(--success);min-height:1em;margin:6px 0 0;font-size:14px;font-weight:700}.rpt-mine-btn{position:relative}.rpt-badge{top:-6px;background:var(--brand);min-width:20px;height:20px;color:var(--white);text-align:center;box-sizing:border-box;border-radius:10px;padding:0 5px;font-size:12px;font-weight:800;line-height:20px;position:absolute;inset-inline-start:-6px}.rpt-list{gap:10px;margin:8px 0 0;padding:0;list-style:none;display:grid}.rpt-item{border:1px solid var(--line);border-radius:var(--radius-md);background:var(--surface-2);padding:12px}.rpt-title{word-break:break-word;font-weight:800}.rpt-note{color:var(--ink-muted);word-break:break-word;margin-top:4px;font-size:14px}.rpt-meta{color:var(--ink-muted);flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:6px;font-size:13px;display:flex}.rpt-pill{border:1px solid var(--line);color:var(--ink);border-radius:999px;padding:1px 10px;font-weight:700}.rpt-pill.is-wait{border-color:var(--warning);background:var(--tint-warning)}.rpt-pill.is-done{border-color:var(--success);background:var(--tint-success)}.rpt-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.rpt-reopen{gap:8px;margin-top:10px;display:grid}.rpt-err{color:var(--danger);margin-top:8px;font-size:14px;font-weight:700}
