:root{--color-bg-one: #d3e0f7;--color-bg-two: #e2e9f7;--color-bg-three: #eff1f7;--color-primary: #568af2;--color-primary-hover: #6c99f4;--color-text: #2d2d2e;--color-text-title: #606c85;--color-text-muted: #7887a6;--color-icon: #5e6571;--color-icon-active: #8cb8ff;--color-border: #c5d0e8;--color-card-border: #e0e0e0;--color-title-bar: #568af2;--color-sidebar: #e2e9f7;--color-panel: #f5f7fc;--color-surface: #ffffff;--color-offline: #868485;--color-online: #0493e6;--color-running: #41b308;--color-alarm: #f71b6e;--sidebar-width: 240px;--sidebar-width-collapsed: 64px;--title-bar-height: 44px;--font-family: "Microsoft YaHei", "PingFang SC", sans-serif;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 20px;--shadow-card: 0 1px 3px rgba(43, 58, 90, .08)}html,body,#root{height:100%;margin:0;overflow:hidden}body{font-family:var(--font-family);font-size:14px;color:var(--color-text);background:var(--color-bg-one);-webkit-font-smoothing:antialiased}*{box-sizing:border-box}button,input{font:inherit}.app-shell{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden;background:var(--color-bg-one)}.app-shell-title-bar{flex-shrink:0;position:sticky;top:0;z-index:100}.app-body{display:flex;flex:1;min-height:0;overflow:hidden}.app-content{flex:1;min-width:0;overflow:auto;background:var(--color-bg-one)}.app-shell--no-sidebar.app-shell--no-title-bar .app-content,.app-shell--no-title-bar .app-content{flex:1 1 100%;width:100%}@media (max-width: 960px){.app-body{flex-direction:column}}.title-bar{display:grid;grid-template-columns:1fr auto auto;align-items:center;height:var(--title-bar-height);padding:0 12px 0 16px;background:linear-gradient(90deg,var(--color-primary),var(--color-primary-hover));color:#fff;user-select:none}html[data-shell=desktop] .title-bar{--wails-draggable: drag;cursor:default}html[data-shell=desktop] .title-bar.title-bar--maximized{--wails-draggable: no-drag}html[data-shell=desktop] .title-bar.title-bar--no-window-controls,html[data-shell=desktop] .scada-plant-title-bar-host .title-bar.title-bar--no-window-controls{--wails-draggable: no-drag;grid-template-columns:1fr auto}html[data-shell=desktop] .title-bar button,html[data-shell=desktop] .title-bar input,html[data-shell=desktop] .title-bar .lang-menu-popover{--wails-no-drag: no-drag}html[data-shell=browser] .title-bar{grid-template-columns:1fr auto}.title-bar-brand{display:flex;align-items:center;gap:10px}.title-bar-logo{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:1px;object-fit:contain;flex-shrink:0}.title-bar-name{font-size:15px;font-weight:600}.title-bar-actions{display:flex;align-items:center;gap:8px}.title-bar-clock{display:inline-flex;align-items:center;gap:8px;padding:4px 12px;border:1px solid rgba(255,255,255,.35);border-radius:999px;background:rgba(255,255,255,.08);color:#fff;font-size:12px;font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:nowrap}.title-bar-clock-icon{display:inline-flex;flex-shrink:0;opacity:.92}html[data-shell=desktop] .title-bar-clock{--wails-no-drag: no-drag}.title-bar-user{display:inline-flex;align-items:center;gap:8px;max-width:280px;padding:4px 8px 4px 12px;border:1px solid rgba(255,255,255,.35);border-radius:999px;background:rgba(255,255,255,.08);color:#fff;font-size:12px}.title-bar-user-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.title-bar-user-role{opacity:.85;font-size:11px}.title-bar-logout-btn{border:none;background:rgba(255,255,255,.16);color:#fff;border-radius:999px;padding:3px 10px;cursor:pointer;font-size:11px}.title-bar-logout-btn:hover{background:rgba(255,255,255,.28)}.title-bar-user-guest{opacity:.92}.title-bar-lang,.title-bar-recipe-btn{border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.08);color:#fff;border-radius:999px;padding:4px 12px;cursor:pointer}.title-bar-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.08);color:#fff;border-radius:50%;cursor:pointer}.title-bar-icon-btn svg{stroke:#fff}.title-bar-icon-btn.active,.title-bar-icon-btn:hover{background:rgba(255,255,255,.22)}.lang-menu{position:relative}.lang-menu-popover{position:absolute;top:calc(100% + 8px);right:0;min-width:140px;padding:6px;border-radius:var(--radius-md);background:var(--color-surface);border:1px solid var(--color-border);box-shadow:0 8px 24px #0000002e;z-index:1000}.lang-menu-item{display:flex;align-items:center;gap:10px;width:100%;border:none;background:transparent;color:var(--color-text);text-align:left;padding:8px 10px;border-radius:var(--radius-sm);cursor:pointer}.lang-menu-item:hover,.lang-menu-item.active{background:var(--color-bg-two);color:var(--color-primary)}.lang-menu-short{display:inline-flex;align-items:center;justify-content:center;width:28px;height:22px;border-radius:4px;background:var(--color-bg-one);font-size:11px;font-weight:700}.title-bar-lang.active,.title-bar-recipe-btn:hover,.title-bar-lang:hover{background:rgba(255,255,255,.22)}.title-bar-recipe-btn:disabled{opacity:.55;cursor:not-allowed}.title-bar-window{display:flex;gap:4px;margin-left:16px}.win-btn{width:36px;height:28px;border:none;border-radius:4px;background:transparent;color:#fff;cursor:pointer}.win-btn:hover{background:rgba(255,255,255,.15)}.win-btn-close:hover{background:#e81123}.sidebar{width:var(--sidebar-width);flex-shrink:0;display:flex;flex-direction:column;min-height:0;overflow-y:auto;background:var(--color-sidebar);border-right:1px solid var(--color-border);padding:12px 10px;transition:width .2s ease}.sidebar.collapsed{width:var(--sidebar-width-collapsed);padding:12px 6px}.sidebar.sidebar--engineering{width:280px;padding:0;background:#eceff3;border-right:1px solid #c5cdd8}.studio-sidebar-engineering .studio-sidebar-nav{padding:6px 0}.studio-engineering-tree{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto;font-size:12px;color:#1f2937}.studio-tree-section{display:flex;flex-direction:column;min-height:0}.studio-tree-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px 6px;font-size:12px;font-weight:700;color:#334155;background:#e2e8f0;border-bottom:1px solid #cbd5e1}.studio-tree-section-caption{font-size:11px;font-weight:400;color:#64748b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-tree-section-body{display:flex;flex-direction:column;padding:2px 0 6px}.studio-tree-node-wrap{display:block}.studio-tree-node{display:flex;align-items:center;gap:4px;min-height:24px;width:100%;border:none;background:transparent;color:inherit;text-align:left;font-size:12px;line-height:1.3}.studio-tree-node--leaf{cursor:pointer;padding:2px 8px}.studio-tree-node--leaf:hover,.studio-tree-node--branch:hover{background:#dbeafe}.studio-tree-node.is-selected,.studio-tree-node.is-current{background:#bfdbfe}.studio-tree-node.is-monitor-home .studio-tree-label-btn{font-weight:600}.studio-tree-expander{flex-shrink:0;width:16px;height:16px;border:1px solid #94a3b8;border-radius:2px;background:#f8fafc;color:#334155;font-size:11px;line-height:1;padding:0;cursor:pointer}.studio-tree-expander--spacer{border-color:transparent;background:transparent;cursor:default}.studio-tree-icon{flex-shrink:0;width:16px;height:16px;background-position:center;background-repeat:no-repeat;background-size:14px 14px}.studio-tree-icon--folder{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23eab308' d='M1 3h5l1 1h8v9H1z'/%3E%3Cpath fill='%23ca8a04' d='M1 3h5l1 1h8v2H1z'/%3E%3C/svg%3E")}.studio-tree-icon--screen{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='2' y='2' width='12' height='12' fill='%23fff' stroke='%2394a3b8'/%3E%3C/svg%3E")}.studio-tree-icon--module{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='3' y='3' width='10' height='10' rx='1' fill='%23dbeafe' stroke='%2364748b'/%3E%3C/svg%3E")}.studio-tree-icon--home{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%2364748b' d='M8 1 1 7h2v7h4V9h2v5h4V7h2z'/%3E%3C/svg%3E")}.studio-tree-icon--widgets{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='2' y='2' width='5' height='5' fill='%2394a3b8'/%3E%3Crect x='9' y='2' width='5' height='5' fill='%2394a3b8'/%3E%3Crect x='2' y='9' width='5' height='5' fill='%2394a3b8'/%3E%3Crect x='9' y='9' width='5' height='5' fill='%2394a3b8'/%3E%3C/svg%3E")}.studio-tree-icon--ai{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6' fill='%23c4b5fd' stroke='%237c3aed'/%3E%3C/svg%3E")}.studio-tree-label,.studio-tree-label-btn{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:none;background:transparent;text-align:left;padding:0;font:inherit;color:inherit;cursor:pointer}.studio-tree-children{display:block}.studio-tree-screens{padding:0 0 4px 8px;max-height:280px;overflow:auto}.studio-tree-empty{padding:4px 12px 8px 28px;font-size:11px;color:#64748b}.studio-nav-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;margin:0;padding:8px 12px 4px;border:none;background:transparent;font-size:13px;font-weight:600;color:var(--color-text-title);cursor:pointer;text-align:left}.studio-nav-section-head:hover,.studio-nav-section-head.is-active-branch{color:var(--color-primary)}.studio-nav-section-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-nav-section-trail{display:inline-flex;align-items:center;gap:6px;flex-shrink:0}.studio-nav-section-head .studio-nav-caption{font-size:11px;font-weight:400;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:120px}.studio-nav-section-chevron{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;color:var(--color-text-muted);transition:transform .15s ease,color .15s ease}.studio-nav-section-head:hover .studio-nav-section-chevron,.studio-nav-section-head.is-active-branch .studio-nav-section-chevron{color:var(--color-primary)}.studio-nav-section-chevron.is-expanded{transform:rotate(90deg)}.studio-nav-child{padding-left:28px;min-height:34px}.studio-nav-group{display:flex;flex-direction:column;gap:2px}.studio-nav-group+.studio-nav-group{margin-top:4px}.sidebar--with-scada-tree{display:flex;flex-direction:column}.sidebar--with-scada-tree .sidebar-nav{flex-shrink:0}.sidebar.collapsed .studio-sidebar-scada-tree{display:none}.studio-sidebar-scada-tree{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;margin-top:4px;padding:8px 8px 0;border-top:1px solid var(--color-border)}.studio-sidebar-scada-tree-head{flex-shrink:0;padding:0 4px 8px;font-size:13px;font-weight:600;color:var(--color-text-title)}.studio-sidebar-scada-tree .scada-tree-root{flex:1;min-height:0;overflow:auto;padding:0}.studio-sidebar-engineering .sidebar-collapse-btn{margin:4px 8px 8px;border-top:1px solid #cbd5e1;border-radius:0;padding-top:10px}.sidebar.sidebar--with-scada-panel{width:300px;padding:12px 8px}.sidebar.sidebar--with-scada-panel .sidebar-nav{flex-shrink:0}.studio-sidebar-scada-panel{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;gap:0}.studio-sidebar-scada-props{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;border-top:1px solid var(--color-border);margin-top:8px;padding-top:8px}.studio-sidebar-scada-props-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-shrink:0;padding:0 4px 8px;font-size:12px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.04em}.studio-sidebar-scada-props .scada-designer-props-body{flex:1;min-height:0;overflow:auto;padding:0 4px 8px}.studio-sidebar-scada-props .settings-empty-state{padding:12px 4px;font-size:12px}.studio-sidebar-scada-tree-collapsed-hint{margin:8px 0 0;padding:0;font-size:10px;text-align:center;color:var(--color-text-muted);writing-mode:vertical-rl;text-orientation:mixed;align-self:center}.studio-sidebar-nav{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}.studio-nav-tree{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto;gap:2px}.studio-nav-row{display:flex;align-items:center;gap:6px;width:100%;min-height:36px;border:none;background:transparent;color:inherit;text-align:left;border-radius:var(--radius-md);font-size:13px}.studio-nav-row--leaf{cursor:pointer}.studio-nav-row--leaf:hover{background:rgba(255,255,255,.55)}.studio-nav-row--group{font-weight:600}.studio-nav-row.is-active-branch{color:var(--color-primary)}.studio-nav-toggle{flex-shrink:0;width:20px;height:20px;border:none;background:transparent;cursor:pointer;padding:0;color:inherit;font-size:11px}.studio-nav-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-nav-label-btn{flex:1;min-width:0;border:none;background:transparent;text-align:left;padding:0;cursor:pointer;color:inherit;font:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-nav-label-btn.is-active{color:var(--color-primary);font-weight:600}.studio-nav-caption{font-size:11px;font-weight:400;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:40%}.studio-nav-children{display:flex;flex-direction:column;gap:2px}.sidebar-collapse-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:8px;border:none;background:transparent;color:var(--color-text-muted);padding:8px;border-radius:var(--radius-md);cursor:pointer}.sidebar-collapse-btn:hover{background:rgba(255,255,255,.55);color:var(--color-text-title)}.sidebar.collapsed .sidebar-item{justify-content:center;padding:10px 8px}.sidebar.collapsed .sidebar-divider{margin:8px 4px}.sidebar-nav{display:flex;flex-direction:column;gap:4px}.sidebar-nav-bottom{margin-top:auto}.sidebar-divider{height:1px;margin:12px 8px;background:var(--color-border)}.sidebar-item{display:flex;align-items:center;gap:10px;width:100%;border:none;background:transparent;color:var(--color-text-title);text-align:left;padding:10px 12px;border-radius:var(--radius-md);cursor:pointer}.sidebar-item:hover{background:rgba(255,255,255,.55)}.sidebar-item.active{background:var(--color-surface);color:var(--color-primary);box-shadow:var(--shadow-card)}.sidebar-item--overlay-action:not(.active){color:var(--color-text-muted)}.sidebar-item--overlay-action.active{color:var(--color-primary)}.studio-nav-leaf-wrap--divider{margin-top:6px;padding-top:6px;border-top:1px solid var(--color-border)}@media (max-width: 960px){.sidebar{width:100%;flex-direction:row;flex-wrap:wrap;padding:8px}.sidebar-divider{display:none}.sidebar-nav,.sidebar-nav-bottom{flex-direction:row;flex-wrap:wrap;margin-top:0}}.monitor-page{display:flex;flex-direction:column;min-height:100%;padding:8px 10px;gap:8px}.app-content:has(> .monitor-page--fill),.app-content:has(> .page-frame--fill){display:flex;flex-direction:column;overflow:hidden}.monitor-page--fill{flex:1;min-height:0}.monitor-page--plant-scada{padding:0;gap:0;width:100%;max-width:100%;min-width:0;overflow:hidden}.monitor-page--plant-scada .monitor-line-panel{border:none;padding:0;border-radius:0;background:transparent;width:100%;max-width:100%;min-width:0}.monitor-page--fill .monitor-line-panel{flex:1 1 auto;min-height:220px;height:auto}.monitor-page--fill .line-canvas-wrap{flex:1;min-height:0}.monitor-page--fill .line-loading{flex:1;display:flex;align-items:center;justify-content:center;margin:0}.monitor-header{flex-shrink:0;background:var(--color-bg-two);border-radius:var(--radius-md);padding:8px 10px 12px;border:1px solid var(--color-border)}.monitor-middle{flex-shrink:0;display:grid;grid-template-columns:minmax(280px,1fr) minmax(320px,1.5fr);gap:8px;min-height:0}.monitor-panel-title{margin:0 0 10px;font-size:14px;font-weight:600;color:var(--color-text-title)}.monitor-top{display:flex;gap:8px;min-height:0;flex:1}.monitor-main{flex:1;min-width:0;background:var(--color-bg-two);border-radius:var(--radius-md);padding:8px 12px 12px;border:1px solid var(--color-border)}.monitor-meta{display:flex;gap:16px;margin-bottom:8px;font-size:12px;color:var(--color-text-muted)}.monitor-site-banner{display:flex;align-items:center;gap:20px;margin-bottom:12px;padding:10px 14px;border-radius:var(--radius-md);background:linear-gradient(135deg,color-mix(in srgb,var(--color-primary) 8%,#fff) 0%,color-mix(in srgb,var(--color-bg-two) 92%,#fff) 100%);border:1px solid color-mix(in srgb,var(--color-primary) 18%,var(--color-border))}.scada-widget--site-banner .monitor-site-banner,.scada-widget-preview--site-banner .monitor-site-banner{margin-bottom:0;height:100%;box-sizing:border-box;border-radius:0}.scada-widget--plant-sidebar,.scada-widget-preview--plant-sidebar{padding:0}.scada-widget-preview--plant-sidebar,.scada-widget-preview--plant-title-bar,.scada-widget-preview--site-banner,.scada-widget-preview--plant-sidebar .scada-plant-sidebar-host,.scada-widget-preview--plant-sidebar .scada-plant-sidebar-preview,.scada-widget-preview--plant-title-bar .scada-plant-title-bar-host,.scada-widget-preview--plant-title-bar .scada-plant-title-bar-host--design{pointer-events:none}.scada-plant-sidebar-host{width:100%;height:100%;min-height:0;overflow:hidden}.scada-plant-sidebar-host .sidebar{width:100%;height:100%;min-height:0;border-right:none}.scada-plant-sidebar-host .sidebar.collapsed{width:var(--sidebar-width-collapsed)}.scada-plant-sidebar-preview{pointer-events:none;height:100%}.scada-site-banner-preview{width:100%;height:100%;pointer-events:none;overflow:hidden}.scada-page-stack--plant-frame.scada-page-stack--fill{position:relative;flex:1;min-height:0;width:100%;height:100%;overflow:hidden;background:transparent}.plant-app-root{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;min-width:0;overflow:hidden}.scada-page-stack-scale,.scada-page-stack-scale-inner{position:relative;transform-origin:top left}.scada-page-stack-layer{position:absolute;inset:0}.scada-page-stack-layer--foreground{inset:auto;overflow:hidden}.scada-page-stack-layer .scada-page-panel{width:100%;height:100%;padding:0;overflow:hidden;background:transparent}.scada-page-stack-layer .scada-page-panel .scada-runtime-screen{border-radius:0;box-shadow:none}.scada-page-stack-layer .scada-page-panel-scale,.scada-page-stack-layer .scada-page-panel-scale-inner{width:100%!important;height:100%!important;transform:none!important}.scada-page-stack-layer .scada-runtime-screen{width:100%!important;height:100%!important;max-height:none!important}.scada-widget--plant-title-bar,.scada-widget-preview--plant-title-bar{padding:0}.scada-plant-title-bar-host{width:100%;height:100%;overflow:visible;position:relative;z-index:120}.scada-plant-title-bar-host .title-bar{height:100%;min-height:0;overflow:visible}.scada-page-stack--plant-frame.scada-page-stack--sidebar-collapsed{--plant-sidebar-collapse-delta: 176px}.scada-page-stack--sidebar-collapsed .scada-page-stack-layer--background .scada-runtime-widget--site-banner,.scada-page-stack--sidebar-collapsed .scada-page-stack-layer--background .scada-runtime-widget--frame{transition:transform .2s ease;transform:translate(calc(-1 * var(--plant-sidebar-collapse-delta)))}.scada-page-stack--sidebar-collapsed .scada-page-stack-layer--foreground{transition:left .2s ease,width .2s ease}.scada-plant-title-bar-host--design .title-bar{background:linear-gradient(90deg,var(--color-primary),var(--color-primary-hover))}.monitor-site-brand{display:flex;align-items:center;gap:12px;min-width:0}.monitor-site-brand-icon{flex-shrink:0;filter:drop-shadow(0 2px 6px rgba(25,118,210,.18))}.monitor-site-brand-copy{display:flex;flex-direction:column;gap:2px;min-width:0}.monitor-site-brand-title{display:flex;align-items:baseline;flex-wrap:wrap;gap:.35em;line-height:1.15}.monitor-site-brand-mark{font-size:22px;font-weight:700;letter-spacing:.02em;color:var(--color-primary);font-family:Segoe UI,Helvetica Neue,Arial,sans-serif}.monitor-site-brand-suffix{font-size:18px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-title)}.monitor-site-brand-caption,.monitor-site-customer-caption{font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted)}.monitor-site-status{display:inline-flex;align-items:center;gap:8px;margin-left:auto;padding:6px 12px;border-radius:999px;border:1px solid var(--color-border);background:rgba(255,255,255,.72);font-size:12px;font-weight:600;white-space:nowrap}.monitor-site-status-dot{width:8px;height:8px;border-radius:50%;background:var(--color-offline)}.monitor-site-status--ok .monitor-site-status-dot{background:var(--color-running);box-shadow:0 0 0 3px #41b3082e}.monitor-site-status--ok{color:var(--color-running);border-color:#41b30847}.monitor-site-status--loading .monitor-site-status-dot,.monitor-site-status--warn .monitor-site-status-dot{background:#f57c00}.monitor-site-status--error .monitor-site-status-dot{background:var(--color-alarm)}.monitor-site-status-sim{margin-left:4px;padding-left:8px;border-left:1px solid var(--color-border);color:var(--color-text-muted);font-weight:500}.monitor-site-customer{display:flex;flex-direction:column;align-items:flex-end;gap:2px;min-width:0;padding-left:16px;border-left:1px solid color-mix(in srgb,var(--color-border) 80%,transparent)}.monitor-site-customer-name{font-size:24px;font-weight:700;letter-spacing:.06em;color:var(--color-text-title);line-height:1.1}@media (max-width: 960px){.monitor-site-banner{flex-wrap:wrap;gap:12px}.monitor-site-status{margin-left:0;order:3}.monitor-site-customer{margin-left:auto;padding-left:0;border-left:none;align-items:flex-start}}.kpi-grid{display:grid;gap:16px 20px;justify-content:stretch;padding:4px 0 0}.monitor-kpi-wrap--fixed{width:100%}.monitor-kpi-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;width:100%}.monitor-kpi-card{min-height:156px;padding:18px 20px;border-radius:var(--radius-lg);border:1px solid var(--color-card-border);background:#fff;box-shadow:var(--shadow-card);display:flex;flex-direction:column;gap:12px}.monitor-kpi-card-head{display:flex;align-items:center;gap:8px;min-height:24px}.monitor-kpi-card-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:8px;background:rgba(25,118,210,.1);color:#1976d2}.monitor-kpi-card-title{font-size:13px;color:var(--color-text-muted);font-weight:500}.monitor-kpi-card-value-row{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.monitor-kpi-card-value{font-size:32px;font-weight:700;color:#222;line-height:1.1}.monitor-kpi-card-unit{font-size:15px;color:#888;font-weight:500}.monitor-kpi-card-trend{display:flex;align-items:center;gap:6px;font-size:12px;margin-top:auto}.monitor-kpi-card-trend.is-up{color:var(--color-running)}.monitor-kpi-card-trend.is-pending{color:var(--color-text-muted)}.monitor-kpi-card-trend.is-pending .monitor-kpi-card-trend-value{font-weight:500}.monitor-kpi-card-trend-arrow{margin-right:2px;font-size:10px}.monitor-kpi-card-trend-label{color:var(--color-text-muted)}.monitor-kpi-card-trend-value{font-weight:600}.monitor-kpi-card-subtitle{font-size:12px;color:var(--color-text-muted);margin-top:auto}@media (max-width: 1500px){.monitor-kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 900px){.monitor-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.kpi-grid--cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.kpi-grid--cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.kpi-card{width:auto;min-height:112px;border-radius:var(--radius-lg);border:1px solid var(--color-card-border);padding:18px 10px 14px;text-align:center;box-shadow:var(--shadow-card)}.kpi-card-value{font-size:28px;font-weight:700;color:#222;line-height:1.2}.kpi-card-title{margin-top:8px;font-size:15px;color:#666;font-weight:500}.kpi-card-unit{margin-top:4px;font-size:13px;color:#aaa}.monitor-side{width:360px;flex-shrink:0;display:flex;flex-direction:column;gap:8px}.alarm-strip{display:flex;align-items:center;gap:10px;min-height:44px;padding:8px 12px;background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-sm)}.alarm-strip-label{flex-shrink:0;padding:2px 8px;border-radius:999px;background:var(--color-alarm);color:#fff;font-size:12px}.alarm-strip-scroll{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text)}.monitor-operate{display:flex;flex-direction:column;gap:10px;padding:12px;background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-sm)}.monitor-operate-tiles{display:flex;flex-wrap:wrap;gap:10px}.monitor-operate-tile{width:84px;min-height:84px;border:none;border-radius:var(--radius-md);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;font-size:13px;font-weight:500;cursor:default;padding:8px 6px}button.monitor-operate-tile{cursor:pointer}button.monitor-operate-tile:disabled{opacity:.45;cursor:not-allowed}.monitor-operate-tile--online{border:2px solid var(--color-border);background:rgba(134,132,133,.08);color:var(--color-offline)}.monitor-operate-tile--online.is-on{border-color:var(--color-running);background:rgba(65,179,8,.1);color:var(--color-running)}.monitor-operate-tile--start{background:var(--color-running);color:#fff}.monitor-operate-tile--stop{background:var(--color-alarm);color:#fff}.monitor-operate-tile--pause{background:#f57c00;color:#fff}.monitor-operate-tile--reset{background:#1976d2;color:#fff}.monitor-operate-progress{margin:0;font-size:12px;color:var(--color-text-muted)}.monitor-operate-hint,.monitor-operate-error{margin:0;font-size:12px}.monitor-operate-hint{color:var(--color-text-muted)}.monitor-operate-error{color:var(--color-alarm)}.monitor-alarm-panel{display:flex;flex-direction:column;min-height:0;padding:12px;background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-sm)}.monitor-alarm-panel .scada-alarm-widget-title,.monitor-panel-title{margin:0 0 8px;font-size:13px;font-weight:600}.monitor-alarm-table-wrap,.scada-alarm-table-wrap{flex:1;min-height:0;overflow:auto}.monitor-alarm-table,.scada-alarm-table{width:100%;border-collapse:collapse;font-size:12px}.monitor-alarm-table th,.monitor-alarm-table td,.scada-alarm-table th,.scada-alarm-table td{padding:8px 10px;border-bottom:1px solid var(--color-border);text-align:left;vertical-align:top}.monitor-alarm-table th,.scada-alarm-table th{color:var(--color-text-muted);font-weight:600;white-space:nowrap}.monitor-alarm-table tr.is-active td,.scada-alarm-table tr.is-active td{background:rgba(247,27,110,.06)}.monitor-alarm-status.is-active,.scada-alarm-status.is-active{color:var(--color-alarm);font-weight:600}.monitor-alarm-status.is-recovered,.scada-alarm-status.is-recovered{color:var(--color-text-muted)}.monitor-operate-row,.monitor-operate-product,.monitor-operate-buttons,.monitor-operate-speed{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.toggle-row{display:inline-flex;align-items:center;gap:8px;cursor:pointer}.link-state{font-size:12px;padding:2px 8px;border-radius:999px}.link-state.on{background:rgba(65,179,8,.15);color:var(--color-running)}.link-state.off{background:rgba(134,132,133,.15);color:var(--color-offline)}.monitor-operate-product{flex-direction:column;align-items:stretch;gap:6px}.monitor-operate-product div{display:flex;justify-content:space-between;gap:8px;font-size:13px;color:var(--color-text-muted)}.monitor-operate-product strong{color:var(--color-text)}.btn{border:none;border-radius:var(--radius-sm);padding:8px 12px;cursor:pointer;font-size:13px}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--color-running);color:#fff}.btn-dark{background:#333;color:#fff}.btn-secondary{background:#fff;border:1px solid var(--color-border);color:var(--color-text)}.monitor-operate-speed{flex-direction:column;align-items:stretch}.monitor-operate-speed input{width:100%;padding:6px 8px;border:1px solid var(--color-border);border-radius:var(--radius-sm)}.monitor-operate-log{flex:1;min-height:120px;display:flex;flex-direction:column;background:var(--color-panel);border-radius:var(--radius-sm);border:1px solid var(--color-border);overflow:hidden}.monitor-operate-log-title{padding:6px 10px;font-size:12px;color:var(--color-text-muted);border-bottom:1px solid var(--color-border)}.monitor-operate-log ul{list-style:none;margin:0;padding:8px 10px;overflow:auto;font-size:12px;line-height:1.6;color:var(--color-text)}.monitor-line-panel{height:var(--monitor-line-panel-height, 300px);flex-shrink:0;border-radius:var(--radius-md);background:var(--color-bg-two);border:1px solid var(--color-border);padding:8px 12px 12px;display:flex;flex-direction:column}.monitor-line-panel.monitor-layer-stack{position:relative;flex:1;min-height:0;overflow:hidden}.monitor-layer-stack .monitor-layer--base{flex:1;min-height:0;display:flex;flex-direction:column}.monitor-layer-stack .monitor-layer--frame{position:absolute;inset:0;z-index:0;display:flex;flex-direction:column;min-height:0;pointer-events:none}.monitor-layer-stack .monitor-layer--frame .scada-page-panel{pointer-events:none}.monitor-layer-stack .monitor-layer--frame .scada-runtime-widget--plant-sidebar,.monitor-layer-stack .monitor-layer--frame .scada-runtime-widget--plant-title-bar,.monitor-layer-stack .monitor-layer--frame .scada-runtime-widget--site-banner{pointer-events:auto}.monitor-layer-stack .monitor-layer--scada-home{position:relative;z-index:1}.monitor-layer-stack .monitor-layer--overlay{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;min-height:0}.monitor-layer-stack .monitor-layer--overlay.monitor-layer--pass-through{pointer-events:none}.monitor-layer-stack .scada-page-panel{flex:1;min-height:0;padding:0;overflow:hidden;background:transparent}.dev-monitor-home-config{margin-bottom:20px}.dev-monitor-home-config h3{margin:0 0 8px;font-size:1rem}.dev-monitor-home-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:8px}.dev-kpi-slot-label{font-weight:600;white-space:nowrap}.dev-kpi-panel .dev-kpi-table th:first-child,.dev-kpi-panel .dev-kpi-table td:first-child{width:120px}.monitor-kpi-wrap--split{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,420px);gap:16px;align-items:start}.monitor-kpi-wrap--split>.kpi-grid{min-width:0}.monitor-kpi-wrap--split .kpi-grid--cols-3{grid-template-columns:repeat(3,minmax(0,1fr));justify-content:stretch}.monitor-kpi-wrap--split .kpi-grid--cols-4{grid-template-columns:repeat(4,minmax(0,1fr));justify-content:stretch}.monitor-kpi-wrap--split .kpi-card{width:100%;max-width:180px;justify-self:center}.monitor-kpi-wrap--split>.monitor-kpi-charts{min-width:0}.monitor-kpi-charts{display:grid;grid-template-columns:minmax(200px,240px) minmax(0,1fr);gap:12px;min-height:220px;min-width:0}.monitor-kpi-charts--compact{grid-template-columns:1fr;min-width:0}.monitor-kpi-chart-block{border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:8px 10px;background:var(--color-bg)}.monitor-kpi-chart-block-fill{min-width:0;overflow:auto}.monitor-kpi-chart-block h3{margin:0 0 8px;font-size:13px;color:var(--color-text-title)}@media (max-width: 1100px){.monitor-kpi-wrap--split,.monitor-kpi-charts{grid-template-columns:1fr}}.line-loading{margin:0;padding:24px;color:var(--color-text-muted)}.line-canvas-wrap{display:flex;flex-direction:column;gap:8px;height:100%;position:relative}.line-canvas{width:100%;flex:1;min-height:0;display:block}.line-canvas--designer{background:color-mix(in srgb,var(--color-bg) 88%,#000 12%);border-radius:var(--radius-sm);cursor:crosshair}.layout-view-box-boundary{fill:none;stroke:var(--color-text-muted);stroke-width:1;stroke-dasharray:8 6;opacity:.75;vector-effect:non-scaling-stroke}.line-device{cursor:pointer}.line-device--no-click,.line-device--no-hover.line-device--no-click{cursor:default}.line-device-rect{transition:filter .15s ease,stroke-width .15s ease}.line-device:hover .line-device-rect{filter:brightness(1.08);stroke:var(--color-primary);stroke-width:1.5}.device-hover-tooltip{position:fixed;z-index:900;min-width:180px;max-width:260px;padding:10px 12px;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface);box-shadow:0 8px 24px #0000002e;pointer-events:none;font-size:12px}.device-hover-tooltip-title{margin-bottom:8px;font-size:13px;font-weight:600;color:var(--color-text)}.device-hover-tooltip-row{display:flex;justify-content:space-between;gap:12px;margin-bottom:4px;color:var(--color-text-muted)}.device-hover-tooltip-row strong{color:var(--color-text);font-weight:600}.device-hover-tooltip-hint{margin-top:8px;padding-top:8px;border-top:1px dashed var(--color-border);color:var(--color-text-muted);font-size:11px}.device-detail-dialog h2{margin:0 0 16px;padding-right:28px;font-size:18px}.device-detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px}.device-detail-name{font-size:16px;font-weight:600;color:var(--color-text)}.device-detail-sub{margin-top:4px;font-size:12px;color:var(--color-text-muted)}.device-detail-state{flex-shrink:0;padding:4px 10px;border-radius:999px;color:#fff;font-size:12px;font-weight:600}.device-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 16px;margin:0 0 16px}.device-detail-grid div{min-width:0}.device-detail-grid dt{margin:0 0 2px;font-size:11px;color:var(--color-text-muted)}.device-detail-grid dd{margin:0;font-size:13px;color:var(--color-text);word-break:break-all}.device-detail-tags h3{margin:0 0 8px;font-size:13px;color:var(--color-text-title)}.device-detail-tags table{width:100%;border-collapse:collapse;font-size:12px}.device-detail-tags th,.device-detail-tags td{padding:6px 8px;border-bottom:1px solid var(--color-border);text-align:left}.device-detail-tags th{color:var(--color-text-muted);font-weight:500}.device-detail-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.device-detail-error{margin:12px 0 0;font-size:12px;color:var(--color-danger, #c0392b)}.operation-dialog{width:min(100%,420px);padding:20px 22px}.operation-dialog h2{margin-bottom:12px;font-size:17px}.operation-dialog-header{margin-bottom:12px}.operation-dialog-status-grid{margin-bottom:12px;gap:8px 12px}.operation-dialog-status-grid dt{font-size:11px}.operation-dialog-status-grid dd{font-size:13px}.operation-dialog-section{margin-bottom:12px}.operation-dialog-section h3{margin:0 0 8px;font-size:12px;font-weight:600;color:var(--color-text-muted);letter-spacing:.02em}.operation-dialog-params{display:flex;flex-direction:column;gap:6px}.operation-dialog-param-row{display:grid;grid-template-columns:minmax(72px,1fr) auto auto;align-items:center;gap:8px}.operation-dialog-param-name{font-size:13px;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.operation-dialog-param-input{display:flex;align-items:center;gap:6px}.operation-dialog-param-field{width:72px;min-width:72px;max-width:72px;padding:4px 8px;font-size:13px;text-align:right}.operation-dialog-param-unit{flex-shrink:0;min-width:2.5em;font-size:11px;color:var(--color-text-muted)}.operation-dialog-param-apply{padding:4px 10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);font-size:12px;cursor:pointer;white-space:nowrap}.operation-dialog-param-apply:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary)}.operation-dialog-param-apply:disabled{opacity:.5;cursor:not-allowed}.operation-dialog-actions-section{margin-top:4px}.operation-dialog-actions{display:flex;flex-wrap:wrap;gap:8px}.operation-dialog-action{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:72px;padding:8px 12px;border-radius:var(--radius-sm);font-size:13px;line-height:1.2;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}.operation-dialog-action:disabled{opacity:.45;cursor:not-allowed}.operation-dialog-action-label{font-weight:600}.operation-dialog-action-mode{font-size:10px;font-weight:500;opacity:.85}.operation-dialog-action--pulse{border:1px solid var(--color-primary);background:transparent;color:var(--color-primary)}.operation-dialog-action--pulse:hover:not(:disabled){background:color-mix(in srgb,var(--color-primary) 12%,transparent)}.operation-dialog-action--pulse .operation-dialog-action-mode{color:var(--color-primary);opacity:.7}.operation-dialog-action--toggle{border:1px solid var(--color-border);background:var(--color-bg, #f4f5f7);color:var(--color-text-muted)}.operation-dialog-action--toggle:hover:not(:disabled){border-color:var(--color-text-muted);color:var(--color-text)}.operation-dialog-action--toggle.is-active{border-color:var(--color-primary);background:var(--color-primary);color:#fff}.operation-dialog-action--toggle.is-active .operation-dialog-action-mode{color:#ffffffd9}.operation-dialog-action--toggle.is-active:hover:not(:disabled){filter:brightness(1.05)}.dev-operation-dialogs-list{display:flex;flex-direction:column;gap:12px}.dev-operation-dialog-card{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}.dev-operation-dialog-card-header{display:flex;align-items:center;gap:10px;padding:12px 14px}.dev-operation-dialog-expand{border:none;background:transparent;color:var(--color-text);cursor:pointer;font-size:14px;line-height:1;padding:0 4px}.dev-operation-dialog-enabled{display:inline-flex}.dev-operation-dialog-id{margin-left:auto;font-size:11px;color:var(--color-text-muted)}.dev-operation-dialog-card-body{padding:0 14px 14px;border-top:1px solid var(--color-border)}.dev-operation-dialog-field-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;font-size:13px;color:var(--color-text-title)}.dev-operation-dialog-fields-table .plc-tag-id-cell{min-width:220px}.line-legend{display:flex;gap:24px;padding:0 8px;font-size:12px;color:var(--color-text)}.line-legend-item{display:inline-flex;align-items:center;gap:8px}.line-legend-item i{display:inline-block;width:10px;height:10px;border-radius:2px}.page-frame{padding:20px 24px}.page-frame--fill{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.page-frame--fill .page-frame-header{flex-shrink:0}.page-frame--fill .page-frame-body{flex:1;min-height:0;overflow:hidden}.page-frame--fill .page-frame-body>.recipe-page-layout{flex:1;min-height:0}.page-frame-header h1{margin:0 0 6px;font-size:22px;color:var(--color-text)}.page-frame-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.page-frame-heading>div:first-child p{margin:0}.page-frame-actions{display:flex;flex-shrink:0;align-items:center;gap:8px}.recipe-operation-btn{white-space:nowrap}.page-frame-header p{margin:0 0 16px;color:var(--color-text-muted)}.placeholder-panel{min-height:320px;display:flex;align-items:center;justify-content:center;background:var(--color-bg-two);border:1px dashed var(--color-border);border-radius:var(--radius-md);color:var(--color-text-muted)}.settings-page{padding:20px 24px}.settings-header h1{margin:0 0 6px;font-size:22px;color:var(--color-text)}.settings-header p{margin:0 0 16px;color:var(--color-text-muted)}.settings-tabs{display:flex;gap:8px;margin-bottom:16px}.settings-tabs button{border:1px solid var(--color-border);background:var(--color-bg-two);color:var(--color-text);border-radius:var(--radius-sm);padding:8px 16px;cursor:pointer}.settings-tabs button.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.settings-panel{background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:16px}.settings-hint{margin:0 0 12px;color:var(--color-text-muted);font-size:13px}.settings-error{margin-bottom:12px;padding:10px 12px;border-radius:var(--radius-sm);background:rgba(247,27,110,.1);color:var(--color-alarm)}.settings-notice{margin-bottom:12px;padding:10px 12px;border-radius:var(--radius-sm);background:rgba(65,179,8,.12);color:var(--color-running)}.settings-btn{padding:6px 14px;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-panel);color:var(--color-text);font-size:13px;cursor:pointer}.settings-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.settings-btn:disabled{opacity:.6;cursor:not-allowed}.settings-btn-small{padding:4px 10px;font-size:12px}.settings-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.settings-input{width:100%;min-width:120px;padding:6px 8px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text)}.settings-input-narrow{min-width:72px;width:88px}.settings-field{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--color-text-muted)}.settings-field>.settings-input{color:var(--color-text)}.settings-table-wrap-short{max-height:280px;margin-bottom:16px}.settings-plc-panel{display:flex;flex-direction:column;min-height:calc(100vh - 220px)}.dev-monitor-panel{display:flex;flex-direction:column;min-height:calc(100vh - 220px);gap:12px}.dev-monitor-toolbar{margin-bottom:0}.dev-monitor-status-bar{display:flex;flex-wrap:wrap;align-items:center;gap:12px 20px;padding:10px 14px;border:1px solid var(--border-subtle, rgba(255, 255, 255, .08));border-radius:8px;background:var(--surface-elevated, rgba(255, 255, 255, .03))}.dev-monitor-status-item{display:flex;align-items:center;gap:8px}.dev-monitor-status-label{font-size:12px;color:var(--text-muted, #9aa0a6)}.dev-monitor-status-host{flex:1;min-width:200px;font-size:12px;color:var(--text-muted, #9aa0a6)}.dev-monitor-status-time{margin-left:auto;font-size:12px;color:var(--text-muted, #9aa0a6)}.dev-monitor-pill{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:600;border:1px solid transparent}.dev-monitor-pill--online{color:#4ade80;background:rgba(74,222,128,.12);border-color:#4ade8059}.dev-monitor-pill--offline{color:#f87171;background:rgba(248,113,113,.12);border-color:#f8717159}.dev-monitor-pill--unknown{color:var(--text-muted, #9aa0a6);background:rgba(255,255,255,.05);border-color:var(--border-subtle, rgba(255, 255, 255, .1))}.dev-monitor-pill--sim{color:#fbbf24;background:rgba(251,191,36,.12);border-color:#fbbf2459}.dev-monitor-grid{display:grid;grid-template-columns:minmax(220px,260px) minmax(0,1fr);gap:16px;flex:1;min-height:0;align-items:stretch}.dev-monitor-table .dev-monitor-value{font-variant-numeric:tabular-nums;font-weight:600}.dev-monitor-value--true{color:#4ade80}.dev-monitor-value--false{color:#94a3b8}.dev-monitor-value--unknown{color:var(--text-muted, #9aa0a6)}.dev-monitor-write-cell{min-width:140px}.dev-monitor-write-muted{color:var(--text-muted, #9aa0a6)}.dev-monitor-write-bool{display:flex;gap:6px;flex-wrap:wrap}.dev-monitor-write-num{display:flex;gap:6px;align-items:center}.dev-monitor-write-input{width:88px;min-width:0;padding:4px 8px;font-size:12px}.dev-monitor-write-btn{padding:4px 10px;font-size:12px;white-space:nowrap}.channel-binding-panel{gap:12px}.channel-binding-import-input{display:none}.channel-binding-header{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start;justify-content:space-between}.channel-binding-title{margin:0 0 4px;font-size:18px;font-weight:600}.channel-binding-subtitle{margin:0;font-size:13px;color:var(--color-text-muted)}.channel-binding-toolbar{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.channel-binding-tree-panel{display:flex;flex-direction:column;gap:8px;min-height:0}.channel-binding-tree-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.channel-binding-tree-head h3{margin:0;font-size:14px;font-weight:600}.channel-binding-tree-hint{margin:0;font-size:11px;line-height:1.45;color:var(--color-text-muted)}.channel-binding-tree-search{width:100%}.channel-binding-tree{flex:1;overflow:auto;min-height:200px;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:6px;background:var(--color-bg-two)}.channel-binding-tree-empty{margin:8px 4px}.channel-binding-tree-group{margin-bottom:2px}.channel-binding-tree-group-btn{display:flex;align-items:center;gap:6px;width:100%;border:none;background:transparent;color:var(--color-text);text-align:left;padding:6px 8px;border-radius:4px;cursor:pointer;font-size:12px}.channel-binding-tree-group-btn:hover{background:color-mix(in srgb,var(--color-accent, #0493e6) 10%,transparent)}.channel-binding-tree-caret{flex-shrink:0;width:12px;font-size:10px;color:var(--color-text-muted)}.channel-binding-tree-kind{flex-shrink:0;font-size:10px;font-weight:600;padding:2px 5px;border-radius:4px;border:1px solid var(--color-border)}.channel-binding-tree-kind-tcp{color:#2563eb;background:color-mix(in srgb,#2563eb 12%,transparent)}.channel-binding-tree-kind-serial{color:#7c3aed;background:color-mix(in srgb,#7c3aed 12%,transparent)}.channel-binding-tree-group-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.channel-binding-tree-group-count{flex-shrink:0;font-size:11px;color:var(--color-text-muted)}.channel-binding-tree-driver{display:flex;flex-direction:column;align-items:stretch;gap:2px;width:100%;border:none;background:transparent;color:var(--color-text);text-align:left;padding:6px 8px 6px 20px;border-radius:4px;cursor:pointer;font-size:12px}.channel-binding-tree-driver-main{display:flex;align-items:center;gap:6px;width:100%;min-width:0}.channel-binding-tree-driver-id{font-weight:600}.channel-binding-tree-driver-sub{font-size:11px;color:var(--color-text-muted);line-height:1.35;padding-left:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.channel-binding-tree-driver.active,.channel-binding-tree-driver:hover{background:color-mix(in srgb,var(--color-accent, #0493e6) 14%,transparent)}.channel-binding-tree-driver-wrap{margin-left:12px}.channel-binding-tree-children{margin-left:20px;padding-bottom:6px}.channel-binding-tree-leaf{font-size:11px;color:var(--color-text-muted);padding:2px 8px}.channel-binding-tree-proto{margin-left:auto;font-size:11px;color:var(--color-accent, #0493e6)}.channel-binding-tree-driver-fields{display:grid;grid-template-columns:1fr 64px;gap:6px;padding:6px 8px}.channel-binding-tree-meta{font-size:11px;color:var(--color-text-muted);padding:0 8px 4px}.channel-binding-tree-footer{margin:0;font-size:11px;color:var(--color-text-muted)}.channel-binding-status.bound.legacy{color:#b45309}.channel-binding-status-wrap{display:flex;flex-direction:column;gap:2px;min-width:0}.channel-binding-status-hint{font-size:11px;color:var(--text-muted, #6b7280);word-break:break-all}.channel-binding-legacy-hint{margin:0 0 8px;font-size:12px;color:#b45309}.channel-binding-steps{margin:0 0 12px;padding-left:1.2rem;font-size:13px;color:var(--text-muted, #6b7280);line-height:1.5}.channel-binding-steps li+li{margin-top:6px}.channel-add-dialog{max-width:420px}.channel-binding-live-pill{font-size:11px;padding:2px 8px;border-radius:999px;background:color-mix(in srgb,#22c55e 15%,#fff);color:#15803d}.channel-binding-driver-online{font-size:10px;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,#94a3b8 18%,#fff);color:#64748b}.channel-binding-driver-online.is-online{background:color-mix(in srgb,#22c55e 15%,#fff);color:#15803d}.channel-binding-live-cell{min-width:72px;white-space:nowrap}.channel-binding-list-driver{font-weight:400;font-size:13px;color:var(--color-text-muted)}.channel-binding-row-unbound td{opacity:.72}.channel-binding-status.bound{color:var(--color-success, #16a34a);font-size:11px}.channel-binding-status.unbound{color:var(--color-text-muted);font-size:11px}.channel-rw-select.readwrite{color:#16a34a}.channel-rw-select.readonly{color:#2563eb}.channel-binding-list-footer{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-end;padding-top:8px;font-size:12px;color:var(--color-text-muted)}.channel-binding-bind-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.channel-binding-mode-tabs{display:flex;gap:6px}.channel-binding-mode-tabs button{flex:1;border:1px solid var(--color-border);background:var(--color-surface);border-radius:6px;padding:6px 8px;font-size:12px;cursor:pointer}.channel-binding-mode-tabs button.active{border-color:var(--color-accent);color:var(--color-accent)}.channel-binding-quick-form{display:flex;flex-direction:column;gap:8px}.channel-binding-current-info{margin-top:auto;padding-top:12px;border-top:1px solid var(--color-border);font-size:12px}.channel-binding-current-info h4{margin:0 0 8px;font-size:12px}.channel-binding-current-info dl{margin:0;display:grid;gap:6px}.channel-binding-current-info div{display:flex;gap:8px}.channel-binding-current-info dt{color:var(--color-text-muted);min-width:64px}.channel-binding-validation-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-bg-two);font-size:12px}.channel-binding-validation-bar.warn{border-color:#d97706;background:color-mix(in srgb,#d97706 10%,var(--color-bg-two))}.channel-binding-validation-summary{display:flex;flex-wrap:wrap;gap:12px}.channel-binding-validation-warn{color:#d97706;font-weight:600}.channel-binding-validation-details{margin:0;padding:8px 12px 8px 28px;font-size:12px;color:#d97706;border:1px solid color-mix(in srgb,#d97706 30%,var(--color-border));border-radius:var(--radius-sm)}.channel-batch-dialog{max-width:520px}.channel-batch-textarea{min-height:140px;resize:vertical}.channel-binding-grid{display:grid;grid-template-columns:minmax(220px,260px) minmax(0,1fr) minmax(260px,300px);gap:16px;flex:1;min-height:0;align-items:stretch}.channel-binding-bind-panel{display:flex;flex-direction:column;gap:12px;min-width:0;min-height:320px}.channel-binding-linked-devices{border-bottom:1px solid var(--border-subtle, #e8ecf2);padding-bottom:12px}.channel-binding-linked-devices h3{margin:0 0 4px;font-size:14px}.channel-binding-device-list{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:4px;max-height:220px;overflow-y:auto}.channel-binding-device-item{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;text-align:left;padding:8px 10px;border:1px solid var(--border-subtle, #e8ecf2);border-radius:6px;background:var(--surface-elevated, #fff);cursor:pointer;font:inherit}.channel-binding-device-item:hover,.channel-binding-device-item.active{border-color:var(--accent, #568af2);background:color-mix(in srgb,var(--accent, #568af2) 8%,#fff)}.channel-binding-device-order{font-size:11px;color:var(--text-muted, #6b7280);white-space:nowrap}.channel-binding-device-name{font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.channel-binding-device-meta{font-size:11px;color:var(--text-muted, #6b7280);white-space:nowrap}.channel-binding-bound-device{margin:0 0 8px;font-size:12px;color:var(--text-muted, #6b7280)}.channel-binding-row-selected td{background:color-mix(in srgb,var(--color-accent, #2196f3) 12%,transparent)}.dev-tag-library-goto-channel{margin-left:8px;vertical-align:middle}.dev-tag-library-id{font-size:12px;max-width:220px;overflow:hidden;text-overflow:ellipsis}@media (max-width: 1200px){.channel-binding-grid{grid-template-columns:1fr}}.driver-device-manage-dialog{max-height:min(88vh,720px);display:flex;flex-direction:column;overflow:hidden}.driver-device-manage-header{flex-shrink:0;padding:20px 24px 12px;border-bottom:1px solid var(--color-border)}.driver-device-manage-header h2{margin:0 0 4px;padding-right:28px;font-size:18px}.driver-device-manage-body{display:grid;grid-template-columns:minmax(240px,280px) minmax(0,1fr);flex:1;min-height:0;overflow:hidden}.driver-device-manage-tree{display:flex;flex-direction:column;gap:8px;padding:12px;border-right:1px solid var(--color-border);background:var(--color-bg-two);min-height:0;overflow:hidden}.driver-device-manage-tree-head{font-size:13px;font-weight:600}.driver-device-manage-tree-actions{display:flex;flex-direction:column;gap:6px}.driver-device-manage-tree-list{flex:1;min-height:160px;overflow:auto;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:6px;background:var(--color-bg)}.driver-device-manage-tree-group{margin-bottom:2px}.driver-device-manage-tree-node{display:flex;align-items:center;gap:6px;width:100%;border:none;background:transparent;color:var(--color-text);text-align:left;padding:6px 8px;border-radius:4px;cursor:pointer;font-size:12px}.driver-device-manage-tree-node:hover,.driver-device-manage-tree-node.active{background:color-mix(in srgb,var(--color-accent, #0493e6) 14%,transparent)}.driver-device-manage-tree-leaf{margin-left:16px}.driver-device-manage-tree-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.driver-device-manage-tree-count{flex-shrink:0;font-size:11px;color:var(--color-text-muted)}.driver-device-manage-tree-caret{flex-shrink:0;width:12px;font-size:10px;color:var(--color-text-muted)}.driver-device-manage-tree-proto{font-size:11px;color:var(--color-accent, #0493e6)}.driver-device-manage-tree-host{margin-left:auto;font-size:11px;color:var(--color-text-muted)}.driver-device-manage-add-child{margin:4px 0 4px 16px;width:calc(100% - 16px)}.driver-device-manage-detail{display:flex;flex-direction:column;gap:12px;padding:16px 20px;min-height:0;overflow:auto}.driver-device-manage-detail-empty{display:flex;align-items:center;justify-content:center;flex:1;min-height:200px}.driver-device-manage-detail-head h3{margin:0;font-size:16px}.driver-device-manage-detail-head p{margin:4px 0 0;font-size:12px;color:var(--color-text-muted)}.driver-device-manage-tabs{display:flex;flex-wrap:wrap;gap:6px}.driver-device-manage-tabs button{border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text-muted);border-radius:var(--radius-sm);padding:6px 12px;font-size:12px;cursor:pointer}.driver-device-manage-tabs button.active{border-color:var(--color-primary);color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 10%,var(--color-bg))}.driver-device-manage-form{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}.driver-package-picker{display:flex;flex-direction:column;gap:8px;grid-column:1 / -1;padding:10px 12px;border:1px solid var(--border-subtle, rgba(255, 255, 255, .08));border-radius:6px;background:var(--surface-elevated, rgba(255, 255, 255, .03))}.driver-device-manage-hint{grid-column:1 / -1;margin:0}.driver-device-manage-summary{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;margin:0}.driver-device-manage-summary div{padding:12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-two)}.driver-device-manage-summary dt{margin:0 0 4px;font-size:11px;color:var(--color-text-muted)}.driver-device-manage-summary dd{margin:0;font-size:18px;font-weight:600}.driver-device-manage-detail-actions{padding-top:4px}.driver-device-manage-footer{display:flex;flex-shrink:0;justify-content:flex-end;gap:10px;padding:12px 20px;border-top:1px solid var(--color-border);background:var(--color-bg-two)}.settings-plc-grid{display:grid;grid-template-columns:minmax(220px,260px) minmax(0,1fr);gap:16px;flex:1;min-height:0;align-items:stretch}.settings-section-drivers{align-self:start}.settings-driver-cards{display:flex;flex-direction:column;gap:10px}.settings-driver-card{display:flex;flex-direction:column;gap:8px;width:100%;padding:10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-two);text-align:left;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}.settings-driver-card-actions{display:flex;align-items:center;gap:6px}.settings-driver-id-input{min-width:0;flex:1;font-size:13px;font-weight:600;padding:4px 6px}.settings-driver-remove{min-width:28px;width:28px;height:28px;padding:0;line-height:1;font-size:18px}.dev-plc-batch{margin-bottom:12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-two)}.dev-plc-batch-toggle{width:100%;padding:10px 12px;border:none;background:transparent;color:var(--color-text);text-align:left;font-weight:600;cursor:pointer}.dev-plc-batch-toggle:disabled{opacity:.5;cursor:not-allowed}.dev-plc-batch-body{padding:0 12px 12px;display:flex;flex-direction:column;gap:10px}.dev-plc-batch-paste-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:start}.dev-plc-batch-textarea{min-height:96px;resize:vertical;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.dev-plc-batch-paste-actions{display:flex;flex-direction:column;gap:8px;min-width:140px}.dev-plc-batch-type-label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--color-text-muted)}.dev-plc-batch-table-wrap{max-height:240px}.dev-plc-batch-actions{display:flex;justify-content:flex-end;gap:8px}.settings-driver-card:hover{border-color:color-mix(in srgb,var(--color-primary) 35%,var(--color-border))}.settings-driver-card.active{border-color:var(--color-primary);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--color-primary) 25%,transparent);background:color-mix(in srgb,var(--color-primary) 6%,var(--color-bg-two))}.settings-driver-card-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.settings-driver-card-fields{display:grid;grid-template-columns:minmax(0,1fr) 64px;gap:6px;align-items:center}.settings-driver-card-fields .settings-input:not(.settings-input-port){max-width:118px}.settings-driver-card-fields .settings-input-port{min-width:64px;width:100%;padding:6px;text-align:center}.settings-driver-id{font-size:13px;font-weight:600}.settings-driver-protocol-select{min-width:0;max-width:148px;padding:4px 6px;font-size:12px}.settings-driver-protocol{font-size:12px;color:var(--color-text-muted)}.settings-driver-card-meta{font-size:12px;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-empty{margin:0;font-size:13px;color:var(--color-text-muted)}.settings-empty-state{padding:24px;text-align:center;color:var(--color-text-muted);font-size:14px}.settings-tag-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.btn-compact{padding:6px 12px;font-size:13px}.settings-section{display:flex;flex-direction:column;min-height:0;padding:14px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-panel)}.settings-section-fill{min-height:360px}.settings-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:6px}.settings-section-title{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.settings-section-title h3{margin:0;font-size:15px;color:var(--color-text)}.settings-section-meta{font-size:12px;color:var(--color-text-muted)}.settings-section-desc{margin:0 0 10px;font-size:12px;line-height:1.5;color:var(--color-text-muted)}.settings-badge{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:22px;padding:0 8px;border-radius:999px;background:rgba(86,138,242,.12);color:var(--color-primary);font-size:12px;font-weight:600}.settings-badge-muted{background:var(--color-bg-two);color:var(--color-text-muted);font-weight:500}.settings-tag-search{width:min(280px,100%);min-width:180px}.settings-table-wrap-compact{overflow:visible;max-height:none}.settings-plc-panel .settings-table-wrap-fill,.dev-tag-library-panel .settings-table-wrap-fill{flex:1;min-height:220px;max-height:none;overflow:auto}@media (max-width: 1080px){.settings-plc-grid{grid-template-columns:1fr}.settings-plc-panel{min-height:auto}.settings-section-fill{min-height:420px}}.table-empty{text-align:center;color:var(--color-text-muted);padding:24px}.alarm-page .settings-table-wrap{max-height:calc(100vh - 220px)}.settings-table-wrap{overflow:auto;max-height:calc(100vh - 260px)}.settings-table{width:100%;border-collapse:collapse;font-size:13px}.settings-table th,.settings-table td{padding:8px 10px;border-bottom:1px solid var(--color-border);text-align:left}.settings-table th{position:sticky;top:0;background:var(--color-panel);color:var(--color-text-title);font-weight:600}.settings-table .mono{font-family:Consolas,Courier New,monospace;font-size:12px}.settings-more{margin:10px 0 0;font-size:12px;color:var(--color-text-muted)}.settings-devices-table-wrap{outline:none}.settings-devices-table-wrap:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb,var(--color-primary) 35%,transparent);border-radius:var(--radius-md)}.settings-row-selected{background:color-mix(in srgb,var(--color-primary) 12%,var(--color-surface))}.settings-sort-actions{display:flex;gap:4px}.settings-section-compact{margin-bottom:16px}.settings-section-compact h3{margin:0 0 4px;font-size:15px}.settings-lang-grid{display:flex;flex-wrap:wrap;gap:8px}.settings-lang-btn{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);cursor:pointer}.settings-lang-btn.active{border-color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 12%,var(--color-surface))}.settings-lang-short{font-weight:700;min-width:1.5em}.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}.theme-card{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:14px;border:2px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);cursor:pointer;text-align:left}.theme-card.active{border-color:var(--color-primary);box-shadow:0 0 0 1px var(--color-primary)}.theme-swatch{width:100%;height:8px;border-radius:999px}.theme-preview{width:100%;height:48px;border-radius:var(--radius-sm);border:1px solid}.page-frame-body{display:flex;flex-direction:column;gap:16px}.report-kpi-row{display:grid;grid-template-columns:repeat(4,minmax(140px,1fr));gap:12px}.report-kpi{display:flex;flex-direction:column;gap:6px;padding:14px 16px;border-radius:var(--radius-md);background:var(--color-bg-two);border:1px solid var(--color-border)}.report-kpi span{font-size:12px;color:var(--color-text-muted)}.report-kpi strong{font-size:22px;color:var(--color-text-title);font-weight:700}.report-grid-2{display:grid;grid-template-columns:1.2fr 1fr;gap:16px}.report-panel{padding:16px 18px;border-radius:var(--radius-md);background:var(--color-bg-two);border:1px solid var(--color-border)}.report-panel h3{margin:0 0 12px;font-size:15px;color:var(--color-text-title);font-weight:600}.report-panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.report-panel-head h3{margin:0}.report-panel-actions{display:flex;flex-wrap:wrap;gap:8px}.report-panel-note{margin:0;font-size:13px;color:var(--color-text-muted)}.settings-note{margin-bottom:12px;padding:10px 12px;border-radius:8px;background:var(--color-bg-soft, #eef4ff);color:var(--color-text);font-size:13px}.report-table{width:100%;border-collapse:collapse;font-size:13px}.report-table th,.report-table td{padding:8px 10px;border-bottom:1px solid var(--color-border);text-align:left}.report-table th{color:var(--color-text-muted);font-weight:600}.report-row-active{background:color-mix(in srgb,var(--color-accent, #1976d2) 8%,transparent)}.recipe-editor{margin-top:0}.recipe-page-layout{display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr);gap:16px;align-items:stretch;min-height:0}.recipe-sidebar{display:flex;flex-direction:column;gap:12px;min-width:0;min-height:0;overflow:hidden}.recipe-sidebar-actions{display:flex;gap:8px}.recipe-sidebar-actions .settings-btn{flex:1}.recipe-create-dialog{display:flex;flex-direction:column;gap:12px}.recipe-create-dialog p{margin:0;font-size:13px;line-height:1.5;color:var(--color-text-muted)}.recipe-create-dialog label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--color-text-muted)}.recipe-main{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.recipe-list-panel{margin-bottom:0;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.recipe-list-panel .report-panel-head{flex-shrink:0}.recipe-list-scroll{flex:1;min-height:0;overflow:auto}.page-frame--fill .recipe-editor.report-panel{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.page-frame--fill .recipe-editor .report-panel-head,.page-frame--fill .recipe-editor .recipe-workflow-hint,.page-frame--fill .recipe-editor .recipe-save-as-row,.page-frame--fill .recipe-editor .recipe-name-row{flex-shrink:0}.page-frame--fill .recipe-editor .settings-table-wrap{flex:1;min-height:0;max-height:none;overflow:auto}.recipe-list-table{width:100%}.recipe-list-row{cursor:pointer}.recipe-create-form--stacked{flex-direction:column;align-items:stretch}.recipe-create-form--stacked .recipe-create-field,.recipe-create-form--stacked .recipe-create-field input,.recipe-create-form--stacked .recipe-create-field select{min-width:0;width:100%}.recipe-workflow-hint{margin:0 0 12px;font-size:12px;line-height:1.5;color:var(--color-text-muted)}.recipe-save-as-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;margin-bottom:12px;padding:10px 12px;border:1px solid var(--color-border);border-radius:8px;background:color-mix(in srgb,var(--color-primary) 6%,transparent)}.recipe-save-as-row label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--color-text-muted);flex:1;min-width:200px}@media (max-width: 960px){.recipe-page-layout{grid-template-columns:1fr}}.recipe-name-row{margin-bottom:12px}.recipe-name-row label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--color-text-muted)}.recipe-input{min-width:120px;padding:6px 8px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-bg, #fff);color:var(--color-text);font-size:13px}.recipe-input-compact{min-width:88px}.recipe-name-input{max-width:320px}.recipe-filter{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--color-text-muted)}.recipe-edit-table{table-layout:fixed}.recipe-edit-table .recipe-col-device{width:48px}.recipe-edit-table .recipe-col-value{width:100px}.recipe-edit-table .recipe-col-live{width:88px}.recipe-edit-table .recipe-col-unit{width:52px}.recipe-edit-table th:nth-child(1),.recipe-edit-table td:nth-child(1){text-align:center;padding-left:6px;padding-right:6px}.recipe-edit-table .recipe-value-cell{width:100px;max-width:100px;padding-left:6px;padding-right:6px}.recipe-edit-table .recipe-input{width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding:5px 6px}.recipe-live-cell{width:88px;max-width:88px;color:var(--color-text-muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:6px;padding-right:8px}.recipe-unit-cell{width:52px;max-width:52px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--color-text-muted);font-size:12px;padding-left:4px;padding-right:4px}.recipe-row-diff{background:color-mix(in srgb,#f59e0b 10%,transparent)}.recipe-create-panel{margin-bottom:16px}.recipe-create-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px}.recipe-create-field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--color-text-muted);min-width:180px}.recipe-create-field input,.recipe-create-field select{min-width:220px;padding:6px 8px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-bg, #fff);color:var(--color-text);font-size:13px}.settings-btn-danger{border-color:color-mix(in srgb,#dc2626 35%,var(--color-border));color:#dc2626}.settings-btn-danger:hover:not(:disabled){background:color-mix(in srgb,#dc2626 8%,transparent)}.settings-btn-primary{border-color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 12%,var(--color-panel));color:var(--color-primary);font-weight:600}.settings-btn-primary:hover:not(:disabled){background:color-mix(in srgb,var(--color-primary) 20%,var(--color-panel))}.report-panel-center{display:flex;flex-direction:column;align-items:center}.report-panel-note p{margin:0 0 10px;font-size:13px;line-height:1.6;color:var(--color-text-muted)}.chart-svg{width:100%;height:auto;display:block}.echarts-view{min-height:0}.chart-grid-line{stroke:var(--color-border);stroke-width:1;stroke-dasharray:4 4}.chart-axis-label{fill:var(--color-text-muted);font-size:10px}.hbar-chart{display:flex;flex-direction:column;gap:12px}.hbar-row{display:grid;grid-template-columns:minmax(120px,1fr) 2fr auto;gap:10px;align-items:center}.hbar-label{display:flex;flex-direction:column;gap:2px;min-width:0}.hbar-label strong{font-size:13px;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hbar-label span{font-size:11px;color:var(--color-text-muted)}.hbar-track{height:12px;border-radius:999px;background:color-mix(in srgb,var(--color-text-muted) 14%,var(--color-panel));border:1px solid color-mix(in srgb,var(--color-border) 80%,transparent);overflow:hidden}.hbar-fill{height:100%;border-radius:999px;min-width:0;transition:width .3s ease;box-shadow:inset 0 1px 0 color-mix(in srgb,#fff 35%,transparent)}.hbar-value{font-size:13px;font-weight:600;color:var(--color-text-title);min-width:36px;text-align:right;white-space:nowrap}.monitor-kpi-wrap--split .monitor-kpi-chart-block-fill{overflow:visible}.monitor-kpi-wrap--split .hbar-row{grid-template-columns:minmax(0,1fr) minmax(48px,2fr) max-content}.monitor-kpi-wrap--split .hbar-label span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.monitor-kpi-wrap--split .hbar-value{min-width:max-content;justify-self:end}.vbar-chart{display:flex;align-items:flex-end;gap:6px;padding-top:8px}.vbar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0}.vbar-bar-wrap{width:100%;height:160px;display:flex;align-items:flex-end;justify-content:center}.vbar-bar{width:70%;max-width:28px;border-radius:4px 4px 0 0;min-height:2px;transition:height .3s ease}.vbar-value{font-size:10px;color:var(--color-text-muted)}.vbar-label{font-size:10px;color:var(--color-text-muted);white-space:nowrap}.gauge-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}.gauge-card{padding:12px;border-radius:var(--radius-md);background:var(--color-panel);border:1px solid var(--color-border);text-align:center}.gauge-card.gauge-warning{border-color:#f5a62355}.gauge-card.gauge-expired{border-color:#f71b6e55;background:#fff5f8}.gauge-svg{width:100%;max-width:140px;margin:0 auto;display:block}.gauge-value{fill:var(--color-text-title);font-size:16px;font-weight:700}.gauge-meta{display:flex;flex-direction:column;gap:2px;margin-top:4px}.gauge-meta strong{font-size:12px;color:var(--color-text);line-height:1.3}.gauge-meta span,.gauge-meta small{font-size:11px;color:var(--color-text-muted)}.donut-wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:20px}.donut-center-title{fill:var(--color-text-title);font-size:13px;font-weight:600}.donut-center-sub{fill:var(--color-text-muted);font-size:11px}.donut-legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.donut-legend li{display:grid;grid-template-columns:12px 1fr auto;gap:8px;align-items:center;font-size:13px}.donut-legend i{width:10px;height:10px;border-radius:2px;display:block}.donut-legend strong{color:var(--color-text-title)}.urgency-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.urgency-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border-radius:var(--radius-sm);background:var(--color-panel);border:1px solid var(--color-border)}.urgency-item strong{display:block;font-size:13px;color:var(--color-text)}.urgency-item span{font-size:11px;color:var(--color-text-muted)}.urgency-meta{display:flex;align-items:center;gap:10px}.urgency-item.urgency-warning{border-color:#f5a62366}.urgency-item.urgency-expired{border-color:#f71b6e66;background:#fff5f8}.status-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600}.status-badge.status-normal{background:#41b30822;color:#2d8a06}.status-badge.status-warning{background:#f5a62322;color:#c47d00}.status-badge.status-expired{background:#f71b6e22;color:#c41052}.alarm-date-field{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--color-text-muted)}.alarm-toolbar{flex-wrap:wrap;justify-content:flex-end}.alarm-search-form{display:flex;align-items:center;gap:8px}.alarm-search-input{min-width:220px}.alarm-page-size{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--color-text-muted)}.alarm-pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px 16px;flex-wrap:wrap}.alarm-record-col-check{width:40px;text-align:center}.alarm-record-col-check input[type=checkbox]{margin:0}.alarm-record-deleting{padding:8px 16px;font-size:13px;color:var(--color-text-muted)}.alarm-pagination-info{font-size:13px;color:var(--color-text-muted)}.alarm-pagination-actions{display:flex;flex-wrap:wrap;gap:8px}@media (max-width: 1200px){.report-grid-2{grid-template-columns:1fr}.report-kpi-row{grid-template-columns:repeat(2,minmax(140px,1fr))}.monitor-top{flex-direction:column}.monitor-side{width:100%}.kpi-grid{grid-template-columns:repeat(3,minmax(140px,1fr))}}@media (max-width: 960px){.kpi-grid{grid-template-columns:repeat(2,minmax(140px,1fr))}}.auth-loading{display:flex;align-items:center;justify-content:center;min-height:100vh;color:var(--color-text-muted);background:var(--color-bg-one)}.modal-overlay{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(15,20,25,.45)}.modal-dialog{position:relative;width:min(100%,420px);padding:24px;border-radius:var(--radius-lg);border:1px solid var(--color-border);background:var(--color-surface);box-shadow:0 16px 48px #0000003d}.modal-dialog.driver-device-manage-dialog{width:min(96vw,1120px);max-height:min(88vh,760px);padding:0;display:flex;flex-direction:column;overflow:hidden}.modal-dialog.plc-point-dialog{width:min(96vw,960px);max-height:min(92vh,900px);overflow:auto}.modal-dialog.tag-select-dialog{width:min(96vw,760px);max-height:min(88vh,720px);display:flex;flex-direction:column}.modal-dialog.tag-group-members-dialog,.modal-dialog.tag-alarm-group-dialog{width:min(96vw,860px)}.modal-dialog.device-detail-dialog{width:min(96vw,720px);max-height:min(88vh,760px);overflow:auto}.modal-dialog.scada-screen-props-dialog{width:min(96vw,560px);max-height:88vh;overflow:auto}.scada-screen-props-subtitle{margin:-8px 0 16px}.scada-screen-props-body{display:flex;flex-direction:column;gap:8px}.scada-designer-props-head-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.scada-open-screen-props-btn{padding:2px 8px;font-size:12px;line-height:1.4;white-space:nowrap}.scada-widget-props-empty{padding:24px 16px;text-align:center}.scada-widget-props-empty p{margin:0;color:var(--color-text-muted, #64748b);font-size:13px;line-height:1.5}.modal-card{position:relative;width:min(100%,420px);padding:24px;border-radius:var(--radius-lg);border:1px solid var(--color-border);background:var(--color-surface);box-shadow:0 16px 48px #0000003d;display:flex;flex-direction:column;gap:12px}.modal-card.channel-batch-dialog{width:min(96vw,560px)}.modal-card h3{margin:0;padding-right:28px;font-size:18px;color:var(--color-text)}.modal-actions,.modal-dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:4px}.tag-variable-dialog h2{margin:0 0 4px;font-size:18px}.modal-close{position:absolute;top:10px;right:10px;width:32px;height:32px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-muted);font-size:22px;line-height:1;cursor:pointer}.modal-close:hover{background:var(--color-bg-two);color:var(--color-text)}.confirm-dialog h2{margin:0 0 12px;padding-right:28px;font-size:18px;color:var(--color-text)}.confirm-dialog-message{margin:0 0 20px;font-size:14px;line-height:1.6;color:var(--color-text-muted);white-space:pre-wrap}.confirm-dialog-actions{display:flex;justify-content:flex-end;gap:10px}.login-form{display:flex;flex-direction:column;gap:14px;padding-right:8px}.login-form h2{margin:0;padding-right:28px;font-size:20px;color:var(--color-text)}.login-form p{margin:0;font-size:13px;color:var(--color-text-muted)}.login-field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--color-text-title)}.login-error{padding:8px 10px;border-radius:var(--radius-sm);background:color-mix(in srgb,#e53935 12%,var(--color-surface));color:#c62828;font-size:13px}html[data-theme-mode=dark] .login-error{color:#ff8a80}.login-submit{flex:1}.login-actions{display:flex;gap:10px;margin-top:4px}.login-cancel{min-width:88px}.user-admin-form{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;align-items:end}:root{--monitor-line-panel-height: 300px;--monitor-line-panel-padding-block: 20px;--monitor-line-canvas-gap: 8px;--monitor-line-legend-block-height: 20px;--monitor-line-svg-height: calc( var(--monitor-line-panel-height) - var(--monitor-line-panel-padding-block) - var(--monitor-line-canvas-gap) - var(--monitor-line-legend-block-height) )}.app-content:has(> .dev-page--fill),.app-content:has(> .dev-page--layout-fill),.app-content:has(> .studio-shell-content > .dev-page--fill),.app-content:has(> .studio-shell-content > .dev-page--layout-fill){display:flex;flex-direction:column;overflow:hidden}.dev-page--fill,.dev-page--layout-fill{flex:1;min-height:0;display:flex;flex-direction:column}.dev-page--fill .settings-header,.dev-page--fill .dev-page-tabs-row,.dev-page--fill .dev-page-shell-toolbar,.dev-page--fill .settings-error,.dev-page--fill .settings-notice,.dev-page--layout-fill .settings-header,.dev-page--layout-fill .dev-page-tabs-row,.dev-page--layout-fill .dev-page-shell-toolbar,.dev-page--layout-fill .settings-error,.dev-page--layout-fill .settings-notice{flex-shrink:0}.dev-layout-designer{display:flex;flex-direction:column;gap:12px;flex:1;min-height:0}.dev-designer-workspace{display:grid;grid-template-columns:240px minmax(0,1fr) 300px;gap:12px;align-items:stretch;flex:1;min-height:0}.dev-designer-workspace--scada{grid-template-columns:minmax(0,1fr) 300px}.dev-designer-workspace .dev-list,.dev-designer-workspace .dev-props,.dev-designer-workspace .dev-control-palette{display:flex;flex-direction:column;min-height:0;overflow:hidden}.dev-designer-workspace .dev-list ul{flex:1;min-height:0;max-height:none;overflow:auto}.dev-list-search{width:100%;margin-bottom:8px}.dev-list-scroll{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:10px}.dev-list-group ul{margin:0;padding:0;list-style:none}.dev-list-group-label{margin:0 0 6px;font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-muted, #6b7280)}.dev-list-hint{margin:8px 0 0;font-size:12px;line-height:1.4;color:var(--color-text-muted, #6b7280)}.dev-list-empty{margin:8px 0;font-size:13px}.dev-list-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.dev-list-header h3{margin:0}.dev-list-actions{display:flex;gap:4px;flex-shrink:0}.dev-device-palette{display:flex;flex-direction:column;min-height:0}.dev-control-palette{background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px;display:flex;flex-direction:column;min-height:0}.dev-control-search{width:100%;margin-bottom:8px;flex-shrink:0}.dev-control-palette-body{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:12px}.dev-control-section{display:flex;flex-direction:column;gap:6px}.dev-control-section-label{margin:0;padding:0 2px;font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--color-text-muted)}.dev-control-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px}.dev-control-grid>li{margin:0;padding:0;min-width:0}.dev-control-tile{width:100%;height:32px;display:flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);cursor:grab;transition:border-color .15s ease,background .15s ease}.dev-control-tile:hover:not(:disabled){border-color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 8%,var(--color-bg))}.dev-control-tile:active:not(:disabled){cursor:grabbing}.dev-control-tile:disabled{opacity:.5;cursor:not-allowed}.dev-control-tile--symbol{color:#4fc3f7}.dev-control-tile-icon{font-size:1.15rem;line-height:1}.dev-control-empty{margin:0;padding:8px 4px;font-size:12px;color:var(--color-text-muted);text-align:center}.dev-list-category{display:flex;flex-direction:column;gap:4px}.dev-list-category-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:6px 4px;border:none;background:transparent;color:var(--color-text);font-size:12px;font-weight:600;cursor:pointer;text-align:left}.dev-list-chevron{display:inline-block;transition:transform .15s ease;color:var(--color-text-muted)}.dev-list-chevron--collapsed{transform:rotate(-90deg)}.dev-list-category-count{margin-left:auto;font-size:11px;color:var(--color-text-muted)}.dev-list-icon{flex:0 0 22px;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--color-border);border-radius:4px;font-size:12px;background:var(--color-bg)}.dev-list-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.dev-list-name{display:flex;align-items:flex-start;gap:8px}.dev-list-item--template .dev-list-name{cursor:grab}.dev-list-item--symbol .dev-list-icon{color:#4fc3f7;font-size:1.1rem}.dev-list-hint--inline{margin:0 0 8px;padding:0 4px;font-size:12px;line-height:1.45;color:var(--color-text-muted, #8b949e)}.dev-device--symbol{cursor:move}.dev-toolbar--compact{padding:8px 12px}.dev-designer-workspace .dev-designer-canvas-panel{min-height:0;height:auto}.dev-designer-canvas-panel{display:flex;flex-direction:column;min-height:0;background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.dev-canvas-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--color-border);background:var(--color-bg)}.dev-canvas-toolbar-group{display:flex;gap:6px;align-items:center;margin-left:auto}.dev-canvas-toolbar .settings-btn.active{border-color:var(--color-primary);color:var(--color-primary)}.dev-zoom-select select{min-width:84px;padding:4px 8px;font-size:12px}.dev-canvas-stage{display:grid;grid-template-columns:28px minmax(0,1fr);grid-template-rows:22px minmax(0,1fr);flex:1;min-height:0}.dev-canvas-ruler-corner{grid-column:1;grid-row:1;background:var(--color-bg);border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}.dev-canvas-ruler-x{grid-column:2;grid-row:1;position:relative;height:22px;overflow:hidden;background:var(--color-bg);border-bottom:1px solid var(--color-border)}.dev-canvas-ruler-y{grid-column:1;grid-row:2;position:relative;width:28px;overflow:hidden;background:var(--color-bg);border-right:1px solid var(--color-border)}.dev-canvas-ruler-tick{position:absolute;font-size:9px;color:var(--color-text-muted);white-space:nowrap}.dev-canvas-ruler-x .dev-canvas-ruler-tick{transform:translate(-50%);top:4px}.dev-canvas-ruler-y .dev-canvas-ruler-tick{left:4px;transform:translateY(-50%)}.dev-canvas-viewport{grid-column:2;grid-row:2;position:relative;overflow:hidden;min-height:0;background:var(--designer-canvas-fill, #161b22)}.dev-canvas-viewport--zoomed{overflow:auto}.dev-canvas-zoom-wrap{position:relative;width:100%;height:100%;min-height:0}.dev-canvas-viewport .line-canvas--designer{display:block;width:100%;height:100%;min-height:0}.dev-canvas-surface{vector-effect:non-scaling-stroke}.dev-line-viewport-guide{position:absolute;left:0;top:0;width:100%;height:min(var(--monitor-line-svg-height),100%);max-height:100%;pointer-events:none;box-sizing:border-box}.dev-canvas-toolbar-group--start{margin-left:0;margin-right:auto}.dev-canvas-toolbar-leading{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;margin-right:auto}.dev-canvas-toolbar-trailing{display:flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0}.dev-canvas-toolbar-leading strong{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dev-icon-btn.active{border-color:var(--color-primary);color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 12%,transparent)}.dev-zoom-glyph{display:inline-block;width:18px;font-size:16px;line-height:1}.dev-canvas-footer{display:flex;align-items:center;gap:12px;padding:6px 12px;border-top:1px solid var(--color-border);background:var(--color-bg-two);min-height:40px}.dev-canvas-footer-ops{display:inline-flex;align-items:center;gap:8px;flex-shrink:0}.dev-canvas-footer-hint{flex:1;min-width:0;margin:0;font-size:12px;line-height:1.4;color:var(--color-text-muted, #8b949e)}.dev-canvas-footer-meta{flex-shrink:0;margin-left:auto;font-size:12px;line-height:1.4;color:var(--color-text-muted, #8b949e);white-space:nowrap}.dev-group-toolbar{display:inline-flex;align-items:center;gap:4px;flex-shrink:0}.dev-group-btn{border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);border-radius:var(--radius-sm);padding:5px 10px;font-size:12px;cursor:pointer;white-space:nowrap}.dev-group-btn:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary)}.dev-group-btn:disabled{opacity:.45;cursor:not-allowed}.dev-group-sep{width:1px;height:20px;margin:0 4px;background:var(--color-border)}.dev-group-count{min-width:1.5em;padding:2px 6px;font-size:11px;font-weight:600;color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 12%,transparent);border-radius:10px;text-align:center}.dev-selection-box--multi{stroke-width:2;stroke-dasharray:8 4;opacity:.9}.dev-symbol-picker{position:relative;display:flex;align-items:center;gap:8px;flex-shrink:0}.dev-symbol-trigger{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);border-radius:var(--radius-sm);padding:6px 12px;font-size:13px;cursor:pointer}.dev-symbol-trigger.active,.dev-symbol-trigger:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary)}.dev-symbol-trigger:disabled{opacity:.5;cursor:not-allowed}.dev-symbol-trigger-caret{font-size:11px;opacity:.8}.dev-symbol-menu{position:absolute;left:0;bottom:calc(100% + 6px);z-index:30;min-width:168px;padding:6px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);box-shadow:0 8px 24px #00000047}.dev-symbol-menu-item{display:flex;align-items:center;gap:10px;width:100%;border:none;background:transparent;color:var(--color-text);border-radius:var(--radius-sm);padding:8px 10px;font-size:13px;text-align:left;cursor:pointer}.dev-symbol-menu-item:hover{background:var(--color-bg-two);color:var(--color-primary)}.dev-symbol-menu-icon{width:18px;text-align:center;color:#4fc3f7;font-size:15px}.dev-symbol-cancel{border:none;background:transparent;color:var(--color-text-muted);font-size:12px;cursor:pointer;padding:4px 6px}.dev-symbol-cancel:hover:not(:disabled){color:var(--color-primary)}.dev-canvas-viewport--place,.dev-canvas-viewport--place .line-canvas--designer{cursor:crosshair}.dev-selection-box{fill:none;stroke:var(--color-primary);stroke-width:1.5;stroke-dasharray:6 4;vector-effect:non-scaling-stroke}.dev-selection-handle{fill:#fff;stroke:var(--color-primary);stroke-width:1.5;cursor:nwse-resize;vector-effect:non-scaling-stroke}.dev-selection-handle--n,.dev-selection-handle--s{cursor:ns-resize}.dev-selection-handle--e,.dev-selection-handle--w{cursor:ew-resize}.dev-selection-handle--ne,.dev-selection-handle--sw{cursor:nesw-resize}.dev-scene-zone{fill:color-mix(in srgb,var(--color-primary) 8%,transparent);stroke:color-mix(in srgb,var(--color-primary) 35%,var(--color-border));stroke-width:1;stroke-dasharray:8 6}.dev-scene-label{fill:var(--color-text-muted);font-size:18px;text-anchor:middle;dominant-baseline:middle;pointer-events:none}.dev-scene-spine{stroke:color-mix(in srgb,var(--color-primary) 55%,#fff);stroke-width:3;opacity:.8}.dev-visibility-toggle{width:42px;height:24px;border-radius:999px;border:1px solid var(--color-border);background:var(--color-bg-two);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.dev-visibility-toggle.on{border-color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 20%,var(--color-bg-two))}.dev-anchor-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;width:84px}.dev-anchor-cell{width:24px;height:24px;border:1px solid var(--color-border);border-radius:4px;background:var(--color-bg);cursor:pointer}.dev-anchor-cell.active{border-color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 25%,var(--color-bg))}.dev-props-anchor{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--color-text-muted)}.dev-props-collapse{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0;border:0;background:transparent;color:var(--color-text);font-size:12px;font-weight:600;cursor:pointer}.dev-props-advanced{display:flex;flex-direction:column;gap:8px;padding-top:8px}.dev-props-section--collapsible{border-top:1px solid var(--color-border);padding-top:8px}.dev-layout-props{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.dev-props-tabs{display:flex;gap:4px;margin-bottom:10px;border-bottom:1px solid var(--color-border);padding-bottom:8px}.dev-props-tab{flex:1;padding:6px 8px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-muted);font-size:13px;cursor:pointer}.dev-props-tab.active{color:var(--color-text);border-color:var(--color-border);background:var(--color-bg)}.dev-props-scroll{flex:1;min-height:0;overflow:auto}.dev-props-section h4{margin:0 0 8px;font-size:12px;color:var(--color-text-muted);font-weight:600}.dev-props-toggle-row{display:flex;align-items:center;justify-content:space-between}.dev-color-input{width:100%;height:32px;padding:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dev-designer-canvas{height:auto;min-height:var(--monitor-line-panel-height);min-width:0;flex:1;display:flex;flex-direction:column}.dev-designer-canvas .line-canvas-wrap{position:relative;flex:1;min-height:0}.dev-designer-canvas .line-canvas{position:relative;z-index:1;flex:none;height:var(--monitor-line-svg-height);min-height:var(--monitor-line-svg-height)}.line-legend--designer-spacer{visibility:hidden;pointer-events:none;flex-shrink:0}.dev-props-empty{margin-top:8px}.dev-page .dev-layout{display:flex;flex-direction:column;gap:12px}.dev-toolbar{display:flex;flex-wrap:wrap;gap:12px 16px;align-items:center;padding:12px 14px;background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-md)}.dev-toolbar-group{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.dev-toolbar-label{font-size:12px;color:var(--color-text-muted);margin-right:4px}.dev-toolbar-actions{margin-left:auto;display:flex;gap:8px}.dev-grid{display:grid;grid-template-columns:220px minmax(0,1fr) 280px;gap:12px;min-height:360px}.dev-grid--side{grid-template-columns:220px minmax(0,280px);min-height:auto}.dev-layout{display:flex;flex-direction:column;gap:12px}.dev-list,.dev-props,.dev-canvas-panel{background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px;min-height:0}.dev-list h3,.dev-props h3{margin:0 0 10px;font-size:14px;color:var(--color-text)}.dev-list ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;max-height:640px;overflow:auto}.dev-list-order-row{display:flex;align-items:center;justify-content:space-between;gap:6px}.dev-list-order-num{font-size:12px;font-weight:600;color:var(--color-text-muted);min-width:1.5rem}.dev-list-item{display:flex;flex-direction:column;gap:4px;padding:8px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg)}.dev-list-item--palette{cursor:grab}.dev-list-item--palette:active{cursor:grabbing}.dev-list-item--placed{opacity:.72}.dev-list-badge{font-size:11px;color:var(--color-text-muted)}.dev-list-check{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--color-text-muted)}.dev-list-name{display:flex;flex-direction:column;align-items:flex-start;gap:2px;border:none;background:transparent;padding:0;text-align:left;color:var(--color-text)}.dev-list-name--draggable{cursor:grab;user-select:none}.dev-list-name .mono{font-size:11px;color:var(--color-text-muted)}.dev-list-name.selected strong{color:var(--color-primary)}.dev-canvas-panel{display:flex;flex-direction:column;gap:8px}.dev-canvas-panel--monitor{align-items:center}.dev-canvas-hint{margin:0;font-size:12px;color:var(--color-text-muted)}.dev-drop-preview{fill:color-mix(in srgb,var(--color-primary) 18%,transparent);stroke:var(--color-primary);stroke-width:1.5;stroke-dasharray:4 3;rx:2}.dev-props-device-name{margin:0 0 12px;font-size:14px;font-weight:600;color:var(--color-text)}.dev-marquee{fill:color-mix(in srgb,var(--color-primary) 12%,transparent);stroke:var(--color-primary);stroke-width:1;stroke-dasharray:4 3}.dev-device{cursor:grab}.dev-device.selected{cursor:grabbing}.dev-menu-features .settings-toolbar{align-items:flex-start}.dev-project-panel{display:flex;flex-direction:column;gap:24px}.dev-project-shell{display:flex;flex-direction:column;flex:1;min-height:0;gap:10px;background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px 14px}.dev-project-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-shrink:0;flex-wrap:wrap}.dev-project-toolbar-meta{display:flex;flex-direction:column;gap:4px;min-width:0}.dev-project-toolbar-meta .settings-hint{margin:0}.dev-project-toolbar-actions{flex-shrink:0}.dev-project-create-inline{flex-shrink:0;display:flex;flex-direction:column;gap:10px;padding:10px 12px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-panel)}.dev-project-create-inline h2{margin:0;font-size:15px}.dev-project-body{display:grid;grid-template-columns:minmax(300px,36%) minmax(0,1fr);gap:12px;flex:1;min-height:0}.dev-project-sidebar,.dev-project-detail{min-height:0;display:flex;flex-direction:column;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-panel);overflow:hidden}.dev-project-sidebar-head{padding:10px 12px 0;margin-bottom:0}.dev-project-list-scroll,.dev-project-detail-scroll{flex:1;min-height:0;overflow:auto}.dev-project-detail-scroll{padding:12px 14px}.dev-project-detail-tabs{display:flex;gap:6px;padding:8px 10px;border-bottom:1px solid var(--color-border);flex-shrink:0;flex-wrap:wrap}.dev-project-detail-tabs button{border:1px solid var(--color-border);background:var(--color-bg-two);color:var(--color-text);border-radius:var(--radius-sm);padding:6px 12px;font-size:13px;cursor:pointer}.dev-project-detail-tabs button.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.dev-project-detail-section{display:flex;flex-direction:column;gap:10px}.dev-project-detail-empty,.dev-project-list-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--color-text-muted);font-size:13px;padding:24px}.dev-project-grid-compact{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 12px}.dev-project-list-id{font-weight:600}.dev-project-list-sub{margin-top:2px;font-size:11px;color:var(--color-text-muted);font-family:inherit}.dev-project-section{display:flex;flex-direction:column;gap:12px}.dev-project-section h2{margin:0;font-size:16px}.dev-project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px 16px}.dev-project-field{display:flex;flex-direction:column;gap:6px}.dev-project-field-wide{grid-column:1 / -1}.dev-project-key-input{min-height:72px;max-height:120px;resize:vertical}.dev-project-license-status{display:flex;flex-wrap:wrap;gap:8px 16px;padding:12px 14px;border:1px solid var(--color-border);border-radius:var(--radius-md, 8px);background:var(--color-surface-muted, #f7f7f8);font-size:13px}.dev-project-license-message{color:var(--color-text-muted, #666)}.dev-project-restart-hint,.dev-project-env-hint{padding:10px 12px;border-radius:var(--radius-md, 8px);border:1px solid color-mix(in srgb,var(--color-warning, #d97706) 35%,var(--color-border));background:color-mix(in srgb,var(--color-warning, #d97706) 8%,transparent)}.dev-project-list-wrap{overflow-x:auto}.dev-project-list{width:100%;border-collapse:collapse;font-size:13px}.dev-project-list th,.dev-project-list td{padding:10px 12px;border-bottom:1px solid var(--color-border);text-align:left;vertical-align:middle}.dev-project-list th{font-weight:600;color:var(--color-text-muted, #666);background:var(--color-surface-muted, #f7f7f8)}.dev-project-row-active{background:color-mix(in srgb,var(--color-accent, #2563eb) 6%,transparent)}.dev-project-row-selected{outline:2px solid color-mix(in srgb,var(--color-accent, #2563eb) 35%,transparent);outline-offset:-2px}.dev-project-list tbody tr{cursor:pointer}.dev-project-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.dev-project-count{font-size:13px;color:var(--color-text-muted, #666)}.dev-project-list-actions{text-align:right;white-space:nowrap;display:flex;gap:8px;justify-content:flex-end}.dev-page-intro{margin:6px 0 0}.dev-project-deploy-block{margin-top:16px;padding-top:12px;border-top:1px solid var(--color-border, rgba(128, 128, 128, .25))}.dev-project-deploy-block h3{margin:0 0 8px;font-size:15px}.dev-project-deploy-log{margin-top:10px;max-height:220px;overflow:auto;padding:10px;font-size:12px;background:var(--color-surface-muted, rgba(0, 0, 0, .04));border-radius:6px;white-space:pre-wrap}.dev-project-deploy-warn{margin-top:8px;color:var(--color-warning, #b45309)}.dev-project-deploy-preview{margin-top:12px}.dev-project-deploy-preview-meta{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px 16px;margin:0 0 12px}.dev-project-deploy-preview-meta dt{margin:0;font-size:12px;color:var(--color-text-muted, #666)}.dev-project-deploy-preview-meta dd{margin:2px 0 0;font-size:14px}.dev-project-deploy-preview-warnings{margin:0 0 12px;padding-left:18px;color:var(--color-warning, #b45309)}.dev-project-deploy-preview-files{max-height:240px;overflow:auto}.studio-plant-preview-overlay{position:fixed;inset:0;z-index:1200;display:flex;flex-direction:column;background:var(--color-bg-one, #fff)}.studio-plant-preview-overlay--immersive{overflow:hidden}.studio-plant-preview-toolbar{flex-shrink:0;z-index:1201}.studio-plant-preview-float-bar{position:fixed;right:16px;bottom:16px;z-index:1201;display:flex;align-items:center;gap:12px;max-width:min(520px,calc(100vw - 32px));padding:10px 12px 10px 16px;border:1px solid var(--color-border, rgba(128, 128, 128, .25));border-radius:10px;background:color-mix(in srgb,var(--color-surface, #fff) 92%,transparent);box-shadow:0 8px 24px #0000001f;backdrop-filter:blur(8px)}.studio-plant-preview-float-bar-text{display:flex;flex-direction:column;gap:2px;min-width:0}.studio-plant-preview-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;border-bottom:1px solid var(--color-border, rgba(128, 128, 128, .25));background:var(--color-surface, #fff)}.studio-plant-preview-toolbar-text{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;min-width:0}.studio-plant-preview-body{flex:1;min-height:0;overflow:auto}.studio-plant-preview-body .monitor-page{min-height:100%}.studio-plant-preview-body--acceptance{padding:0;overflow:hidden}.studio-plant-preview-body--acceptance .studio-plant-acceptance-root{height:100%;min-height:0}.plant-scada-chromeless-root{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;min-width:0;overflow:hidden}.plant-scada-chromeless-root .monitor-page--fill{flex:1;min-height:0}.studio-plant-acceptance-root{flex:1;min-height:0;display:flex;flex-direction:column}.studio-plant-acceptance-root .app-shell{flex:1;min-height:0;height:100%}.dev-page--acceptance .dev-tab-panels{flex:1;min-height:0}.studio-acceptance-panel{display:flex;flex-direction:column;height:100%;min-height:0}.studio-acceptance-intro{margin:0 0 8px;flex-shrink:0}.studio-shell-content{display:flex;flex-direction:column;min-height:0;overflow:auto}.studio-shell-content:has(> .dev-page--fill),.studio-shell-content:has(> .dev-page--layout-fill){flex:1;min-height:0;overflow:hidden}.studio-launch-page{max-width:960px;margin:0 auto;padding:24px 20px 32px}.studio-launch-hero h1{margin:0 0 8px;font-size:1.5rem;font-weight:600}.studio-launch-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-top:24px}.studio-launch-card{padding:20px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface)}.studio-launch-card h2{margin:0 0 12px;font-size:1rem;font-weight:600}.studio-launch-project-name{margin:0 0 4px;font-size:1.125rem;font-weight:500}.studio-launch-actions,.studio-launch-shortcuts{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.studio-launch-footnote{margin-top:24px}.dev-page-tabs-row{display:flex;align-items:center;gap:12px;margin-bottom:16px;min-width:0}.dev-page-tabs-row .settings-tabs{flex:1;min-width:0;margin-bottom:0;flex-wrap:wrap}.dev-page-shell-toolbar{display:flex;align-items:center;gap:12px;margin-bottom:16px;min-width:0;flex-shrink:0}.dev-page-shell-title{margin:0;font-size:1.125rem;font-weight:600;flex-shrink:0}.dev-page-shell-toolbar .dev-active-project-bar--inline{margin-left:auto}.dev-page--shell-nav.dev-page--project .dev-page-shell-toolbar{margin-bottom:12px}.dev-widget-panel-section+.dev-widget-panel-section{margin-top:28px;padding-top:24px;border-top:1px solid var(--color-border)}.dev-plant-nav-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.dev-plant-nav-row{display:grid;grid-template-columns:minmax(140px,1fr) 140px auto auto;gap:12px;align-items:center;padding:12px 14px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface)}.dev-plant-nav-row-main{display:flex;flex-direction:column;gap:2px;min-width:0}.dev-plant-nav-field{display:flex;flex-direction:column;gap:4px;font-size:12px}.dev-plant-nav-field select{min-width:0}.dev-plant-nav-row-actions{display:flex;gap:6px}@media (max-width: 900px){.dev-plant-nav-row{grid-template-columns:1fr}}.dev-tab-panels{min-width:0}.dev-tab-panel{display:none}.dev-tab-panel.is-active{display:block}.dev-page--fill .dev-tab-panels,.dev-page--layout-fill .dev-tab-panels,.dev-page--fill .dev-tab-panel.is-active,.dev-page--layout-fill .dev-tab-panel.is-active{flex:1;min-height:0;display:flex;flex-direction:column}.dev-active-project-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 14px;margin-bottom:12px;border:1px solid var(--color-border);border-radius:var(--radius-md, 8px);background:var(--color-surface-muted, #f7f7f8);font-size:13px}.dev-active-project-bar--inline{flex-shrink:0;margin-bottom:0;padding:6px 10px;border-radius:var(--radius-sm);background:var(--color-bg-two);font-size:12px;max-width:min(100%,520px)}.dev-active-project-bar--inline .dev-active-project-bar-main{gap:6px 10px}.dev-active-project-bar--inline .settings-btn{padding:4px 10px;font-size:12px;white-space:nowrap}.dev-active-project-bar-main{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px}.dev-active-project-bar-label,.dev-active-project-bar-meta{color:var(--color-text-muted, #666)}.dev-active-project-bar-pending,.dev-active-project-bar-env{padding:2px 8px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--color-warning, #d97706) 12%,transparent);border:1px solid color-mix(in srgb,var(--color-warning, #d97706) 35%,var(--color-border))}.dev-project-gate{display:flex;flex-direction:column;gap:12px;max-width:720px}.dev-project-gate h2{margin:0;font-size:18px}.settings-toolbar-actions{display:flex;flex-shrink:0;align-items:center;gap:8px}.dev-menu-toggle-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.dev-menu-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid var(--color-border);border-radius:var(--radius-md, 8px);background:var(--color-surface, #fff)}.dev-menu-toggle-copy{display:flex;flex-direction:column;gap:4px;min-width:0}.dev-menu-toggle-copy strong{font-size:14px;color:var(--color-text)}.dev-menu-toggle-copy span{font-size:12px;color:var(--color-text-muted)}.dev-menu-toggle{flex-shrink:0;white-space:nowrap}.dev-kpi-panel .settings-toolbar{margin-bottom:12px}.dev-kpi-hint{margin:0 0 12px;color:var(--color-text-muted);font-size:13px;line-height:1.5}.dev-alarm-rules-panel .dev-alarm-recover-toggle{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-size:13px}.dev-alarm-rules-tag-cell{min-width:220px}.dev-alarm-rules-tag-picker{min-width:200px}.dev-alarm-rules-tag-desc{display:block;margin-top:4px;color:var(--color-text-muted);font-size:12px;line-height:1.4}.dev-alarm-rules-table .dev-alarm-rules-tag-cell .plc-tag-id-input{min-width:140px}.dev-alarm-rules-recover-cell{text-align:center}.dev-alarm-rules-filter-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.dev-alarm-rules-search{flex:1 1 220px;max-width:360px}.dev-alarm-rules-page-size{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--color-text-muted)}.dev-alarm-rules-trigger-cell{min-width:160px}.dev-alarm-rules-value-condition{display:flex;align-items:center;gap:6px}.dev-alarm-rules-pagination{margin-top:12px}.dev-tag-library-id-cell{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.dev-tag-alarm-rule-badge{display:inline-block;padding:1px 6px;border-radius:999px;background:rgba(247,27,110,.12);color:#c2185b;font-size:11px;line-height:1.4;font-family:var(--font-ui)}.dev-widget-panel,.control-library-panel{display:flex;flex-direction:column;gap:12px;min-height:0}.control-library-badge{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:999px;background:rgb(86 138 242 / 18%);color:var(--color-primary, #568af2);font-size:10px;font-weight:600;vertical-align:middle}.control-designer-preview--kpi{min-height:120px}.control-designer-kpi-fields{display:grid;gap:10px}.custom-control-kpi-card{width:100%;height:100%;display:flex;align-items:stretch}.custom-control-kpi-card .monitor-kpi-card{min-height:0;width:100%;padding:12px 16px;gap:8px;border-radius:8px;border:1px solid #1e4a6e;background:#081424;box-shadow:inset 0 0 0 1px #00d4ff14}.custom-control-kpi-card .monitor-kpi-card-icon{width:24px;height:24px;border-radius:6px;background:rgb(0 212 255 / 12%);color:#00d4ff}.custom-control-kpi-card .monitor-kpi-card-title{color:#8eb4d9;font-size:12px}.custom-control-kpi-card .monitor-kpi-card-value{font-size:28px;color:#c8dff0}.custom-control-kpi-card .monitor-kpi-card-unit{color:#6a8fad;font-size:13px}.custom-control-kpi-card .monitor-kpi-card-trend,.custom-control-kpi-card .monitor-kpi-card-subtitle{color:#6a8fad;font-size:11px}.custom-control-kpi-card .monitor-kpi-card-trend.is-up{color:#41b308}.control-library-toolbar{align-items:center}.control-library-filters{display:flex;flex-direction:column;gap:10px}.control-library-search{max-width:320px}.control-library-categories{display:flex;flex-wrap:wrap;gap:6px}.control-library-category{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--color-border, #334155);border-radius:999px;background:var(--color-panel, #101722);color:var(--color-text-muted, #94a3b8);font-size:12px;line-height:1;padding:6px 12px;cursor:pointer}.control-library-category.is-active{border-color:var(--color-primary, #568af2);color:var(--color-primary, #568af2);background:rgb(86 138 242 / 12%)}.control-library-category-count{min-width:18px;padding:1px 6px;border-radius:999px;background:rgb(148 163 184 / 14%);font-size:10px;font-weight:600;text-align:center}.control-library-category.is-active .control-library-category-count{background:rgb(86 138 242 / 18%)}.control-library-category-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;white-space:nowrap}.control-library-category-badge--system{background:rgb(86 138 242 / 16%);color:#568af2}.control-library-category-badge--dashboard{background:rgb(0 212 255 / 14%);color:#00d4ff}.control-library-category-badge--symbol{background:rgb(65 179 8 / 14%);color:#41b308}.control-library-category-badge--chart{background:rgb(245 166 35 / 14%);color:#f5a623}.control-library-category-badge--data{background:rgb(155 89 182 / 14%);color:#9b59b6}.control-library-dir{margin-left:auto;font-size:12px;word-break:break-all}.control-library-table-wrap{overflow:auto}.control-library-table th{white-space:nowrap}.control-library-sort-btn{padding:0;border:0;background:transparent;color:inherit;font:inherit;font-weight:600;cursor:pointer}.control-library-sort-btn:hover{color:var(--color-primary, #568af2)}.control-library-thumb-cell{width:112px;padding:6px 8px}.control-library-thumb{width:96px;height:64px;border:1px solid var(--color-border, #334155);border-radius:6px;background:#0f172a;overflow:hidden}.control-library-thumb .custom-control-preview{width:100%;height:100%}.control-library-thumb--loading,.control-library-thumb--invalid{display:flex;align-items:center;justify-content:center;color:#64748b;font-size:12px}.control-library-thumb--loading:after{content:"\2026"}.control-library-date{white-space:nowrap;font-size:12px;color:var(--color-muted, #94a3b8)}.control-library-page-size{display:inline-flex;align-items:center;gap:6px;font-size:12px}.control-library-page-size select{width:auto;min-width:56px;padding:4px 8px}.control-library-pagination{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding-top:4px}.control-library-total{margin-right:auto;font-size:12px;color:var(--color-muted, #94a3b8)}.control-library-table tr.is-invalid td{color:var(--color-danger, #f71b6e)}.control-library-actions{display:flex;flex-wrap:wrap;gap:8px}.control-library-empty{padding:16px 0}.control-library-modal-backdrop{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:24px;background:rgb(0 0 0 / 45%)}.control-library-modal{width:min(520px,100%);max-height:min(90vh,900px);overflow:auto;padding:20px;border:1px solid var(--color-border);border-radius:12px;background:var(--color-panel, #141c28);box-shadow:0 16px 48px #00000059}.control-library-modal--wide{width:min(960px,100%)}.control-library-modal-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px}.control-library-modal-actions{display:flex;flex-wrap:wrap;gap:8px}.control-designer-editor{display:flex;flex-direction:column;gap:16px}.control-designer-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.control-designer-field{display:flex;flex-direction:column;gap:6px;font-size:13px}.control-designer-field--wide{grid-column:1 / -1}.control-designer-split{display:grid;grid-template-columns:minmax(240px,1.2fr) minmax(220px,1fr);gap:16px}.control-designer-preview{min-height:180px;padding:12px;border:1px solid var(--color-border);border-radius:8px;background:rgb(0 0 0 / 15%)}.control-designer-preview--chart{min-height:240px}.control-designer-svg{width:100%;height:auto;display:block}.control-designer-side-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.control-designer-item-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.control-designer-item-list li{display:grid;grid-template-columns:72px 1fr auto;gap:8px;align-items:center}.control-designer-table-wrap{overflow:auto}@media (max-width: 860px){.control-designer-meta,.control-designer-split{grid-template-columns:1fr}}.dev-widget-subtabs{flex-shrink:0}.dev-kpi-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;margin-bottom:16px}.dev-kpi-toolbar label{display:flex;align-items:center;gap:8px;font-size:13px}.dev-kpi-count{font-size:13px;color:var(--color-text-muted)}.dev-kpi-table-wrap{overflow:auto}.dev-kpi-table{width:100%;border-collapse:collapse;font-size:13px}.dev-kpi-table th,.dev-kpi-table td{border-bottom:1px solid var(--color-border);padding:8px 6px;vertical-align:top;text-align:left}.dev-kpi-table th{color:var(--color-text-muted);font-weight:600}.dev-text-library-panel{display:flex;flex-direction:column;gap:10px;min-height:calc(100vh - 220px)}.dev-text-library-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;padding-bottom:4px;border-bottom:1px solid var(--color-border)}.dev-text-library-subtitle{margin:0;flex:1 1 320px;max-width:720px}.dev-text-library-stats{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.dev-text-library-stat{display:inline-flex;align-items:center;padding:4px 10px;border:1px solid var(--color-border);border-radius:999px;font-size:12px;color:var(--color-text-muted);background:var(--color-bg)}.dev-text-library-stat-warn{border-color:#f59e0b;color:#b45309;background:rgba(245,158,11,.08)}.dev-text-library-stat-dirty{border-color:var(--color-accent, #2563eb);color:var(--color-accent, #2563eb);background:color-mix(in srgb,var(--color-accent, #2563eb) 8%,transparent)}.dev-text-library-toolbar-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}.dev-text-library-toolbar-actions{display:flex;flex-wrap:wrap;gap:8px}.dev-text-library-default-lang{display:flex;align-items:center;gap:8px;font-size:13px;flex-shrink:0}.dev-text-library-default-lang select{min-width:120px}.dev-text-library-filter-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}.dev-text-library-filter-chips{display:flex;flex-wrap:wrap;gap:6px}.dev-text-library-filter-chip{border:1px solid var(--color-border);background:var(--color-bg);border-radius:6px;padding:6px 12px;font-size:13px;cursor:pointer;color:var(--color-text-muted)}.dev-text-library-filter-chip.is-active{border-color:var(--color-accent, #2563eb);color:var(--color-accent, #2563eb);background:color-mix(in srgb,var(--color-accent, #2563eb) 10%,transparent)}.dev-text-library-filter-right{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-left:auto}.dev-text-library-search{min-width:220px}.dev-text-library-page-size{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--color-text-muted)}.dev-text-library-page-size select{width:auto;min-width:56px;padding:4px 8px}.dev-text-library-warnings{padding:8px 12px;border:1px solid #f59e0b;border-radius:6px;background:rgba(245,158,11,.08);font-size:12px;color:var(--color-text-muted)}.dev-text-library-warnings p{margin:0 0 4px}.dev-text-library-langs{display:flex;flex-wrap:wrap;gap:8px}.dev-text-library-lang-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--color-border);border-radius:999px;font-size:12px;background:var(--color-bg)}.dev-text-library-lang-chip.is-required{border-color:var(--color-accent, #2563eb)}.dev-text-library-lang-chip.is-default{border-color:var(--color-accent, #2563eb);background:color-mix(in srgb,var(--color-accent, #2563eb) 8%,var(--color-bg))}.dev-text-library-lang-default{font-size:14px;font-weight:700;line-height:1;color:var(--color-accent, #2563eb)}.dev-text-library-lang-chip button{border:none;background:transparent;cursor:pointer;font-size:14px;line-height:1;padding:0;color:var(--color-text-muted)}.dev-text-library-table-wrap{flex:1;min-height:0;overflow:auto}.dev-text-library-table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}.dev-text-library-table thead th{position:sticky;top:0;z-index:2;background:var(--color-panel, var(--color-bg));box-shadow:inset 0 -1px 0 var(--color-border);white-space:nowrap}.dev-text-library-table th,.dev-text-library-table td{border-bottom:1px solid var(--color-border);padding:8px 6px;vertical-align:middle;text-align:left}.dev-text-library-sort{background:none;border:none;color:inherit;cursor:pointer;font:inherit;font-weight:600;padding:0;text-align:left}.dev-text-library-col-index{width:3rem;text-align:right;color:var(--color-text-muted);font-variant-numeric:tabular-nums}.dev-text-library-col-id{min-width:168px}.dev-text-library-col-comment{min-width:140px}.dev-text-library-col-lang{min-width:120px}.dev-text-library-col-status{width:88px;white-space:nowrap}.dev-text-library-col-actions{width:72px;white-space:nowrap}.dev-text-library-id-input{min-width:140px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}.dev-text-library-cell-missing{background:rgba(239,68,68,.06)}.dev-text-library-row-incomplete td{background:color-mix(in srgb,#f59e0b 4%,transparent)}.dev-text-library-status-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;border:1px solid #f59e0b;color:#b45309;background:rgba(245,158,11,.1)}.dev-text-library-status-badge.is-ok{border-color:var(--color-border);color:var(--color-text-muted);background:var(--color-bg)}.dev-text-library-pagination{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:12px;flex-shrink:0;font-size:12px;color:var(--color-text-muted);padding-top:4px;border-top:1px solid var(--color-border)}.dev-text-library-total{margin-right:auto}.dev-text-library-lang-dialog{max-width:420px}.dev-text-library-lang-form{display:flex;flex-direction:column;gap:12px;margin:16px 0}.dev-text-library-lang-form label{display:flex;flex-direction:column;gap:6px;font-size:13px}.text-ref-picker{display:flex;flex-direction:column;gap:8px;margin-bottom:4px}.text-ref-picker label{display:flex;flex-direction:column;gap:4px}.dev-kpi-subfields{display:flex;flex-direction:column;gap:6px;margin-top:6px}.dev-tag-library-panel{display:flex;flex-direction:column;gap:10px;min-height:calc(100vh - 220px)}.dev-tag-library-header{margin:0}.dev-tag-library-title{margin:0;font-size:18px;font-weight:600}.dev-tag-library-subtitle{margin:0;font-size:13px;color:var(--color-text-muted)}.dev-tag-library-view-toolbar-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0}.dev-tag-library-view-tabs{display:flex;flex-shrink:0;gap:6px}.dev-tag-library-view-tab{border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text-muted);border-radius:var(--radius-sm);padding:6px 14px;font-size:13px;cursor:pointer;white-space:nowrap}.dev-tag-library-view-tab.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.dev-tag-library-toolbar-actions{flex:1;min-width:0;justify-content:flex-end;flex-wrap:wrap}.dev-tag-library-filter-row{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;justify-content:space-between}.dev-tag-library-filter-right{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-left:auto;justify-content:flex-end}.dev-tag-library-type-chips,.dev-tag-library-channel-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.dev-tag-library-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-muted);border-radius:999px;padding:5px 12px;font-size:12px;cursor:pointer}.dev-tag-library-chip-sm{border-radius:6px;padding:4px 10px}.dev-tag-library-chip.active{border-color:var(--color-accent);color:var(--color-accent);background:color-mix(in srgb,var(--color-accent) 12%,transparent)}.dev-tag-library-chip:disabled{opacity:.45;cursor:not-allowed}.dev-tag-library-name-cell{min-width:140px}.dev-tag-library-name-title{font-weight:600;line-height:1.35}.dev-tag-library-name-sub{font-size:11px;color:var(--color-text-muted);line-height:1.3;margin-top:2px}.dev-tag-library-type-badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500}.dev-tag-type-bool{color:#16a34a;background:color-mix(in srgb,#16a34a 14%,transparent)}.dev-tag-type-int{color:#2563eb;background:color-mix(in srgb,#2563eb 14%,transparent)}.dev-tag-type-float{color:#7c3aed;background:color-mix(in srgb,#7c3aed 14%,transparent)}.dev-tag-type-group{color:#d97706;background:color-mix(in srgb,#d97706 14%,transparent)}.dev-tag-library-unit{font-size:12px;color:var(--color-text-muted);white-space:nowrap}.dev-tag-library-channel-cell{min-width:120px}.dev-tag-library-channel-label{font-size:12px}.dev-tag-library-channel-label.connected{color:var(--color-accent, #0493e6)}.dev-tag-library-channel-label.virtual,.dev-tag-library-channel-label.unbound{color:var(--color-text-muted)}.dev-tag-library-total{margin-right:auto;font-size:12px;color:var(--color-text-muted)}.dev-tag-library-toolbar .settings-btn.active{border-color:var(--color-accent);color:var(--color-accent)}.dev-tag-library-toolbar{align-items:flex-start}.dev-tag-library-create h3{margin:0 0 8px;font-size:14px}.dev-tag-library-create-grid{display:grid;grid-template-columns:minmax(180px,1.4fr) minmax(120px,.8fr) minmax(160px,1fr) auto;gap:8px;align-items:center}.dev-tag-library-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.dev-tag-library-filters button{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-muted);border-radius:6px;padding:6px 10px;font-size:12px;cursor:pointer}.dev-tag-library-filters button.active{border-color:var(--color-accent);color:var(--color-accent);background:color-mix(in srgb,var(--color-accent) 12%,transparent)}.dev-tag-library-search{min-width:200px;width:240px;max-width:100%}.dev-tag-library-stats{margin-left:auto;font-size:12px;color:var(--color-text-muted)}.dev-tag-library-table-wrap{flex:1;min-height:220px;max-height:none;overflow:auto}.dev-tag-library-table .settings-input{min-width:0;width:100%}.dev-tag-library-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;border:1px solid var(--color-border)}.dev-tag-library-badge.bound{color:var(--color-success, #16a34a);border-color:color-mix(in srgb,var(--color-success, #16a34a) 40%,var(--color-border))}.dev-tag-library-badge.unbound,.dev-tag-library-badge.group{color:var(--color-text-muted)}.dev-tag-library-badge.system{color:#1565c0}.dev-tag-library-badge.device{color:#2e7d32}.dev-tag-library-row-system,.dev-tag-library-row-restricted{opacity:.92}.dev-tag-library-row-dirty td{background:color-mix(in srgb,var(--color-accent) 6%,transparent)}.dev-tag-library-pagination{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-shrink:0;font-size:12px;color:var(--color-text-muted)}.dev-tag-library-sort{background:none;border:none;color:inherit;cursor:pointer;font:inherit;padding:0}.dev-tag-library-col-check{width:2.5rem}.tag-library-add-dialog{max-width:520px}.tag-library-add-form{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}.tag-library-add-form label{display:flex;flex-direction:column;gap:6px}.tag-library-batch-text{font-family:var(--font-mono, monospace);min-height:180px;resize:vertical}.tag-library-delete-warning ul{margin:8px 0 0;padding-left:1.25rem}.tag-library-delete-warning li{margin:4px 0}.dev-tag-library-edit-hint{margin-top:4px;font-size:12px}.dev-tag-library-id,.dev-tag-library-empty{color:var(--color-text-muted)}.dev-tag-library-editable{cursor:default}.dev-tag-library-row-editing td{background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.dev-tag-library-table tbody tr:not(.dev-tag-library-row-editing){cursor:pointer}@media (max-width: 960px){.dev-tag-library-create-grid{grid-template-columns:1fr}}.tag-picker{position:relative;display:flex;flex-direction:column;gap:4px;width:100%}.tag-picker-hint{font-size:11px;color:var(--color-text-muted)}.tag-picker-hint.warn{color:var(--color-warning, #c97a00)}.tag-picker-menu{position:absolute;top:calc(100% + 2px);left:0;right:0;z-index:40;margin:0;padding:4px 0;list-style:none;max-height:240px;overflow:auto;background:var(--color-surface, #1e1e1e);border:1px solid var(--color-border, #333);border-radius:6px;box-shadow:0 8px 24px #00000059}.tag-picker-menu button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:6px 10px;border:none;background:transparent;color:inherit;text-align:left;cursor:pointer}.tag-picker-menu button:hover,.tag-picker-menu button.active{background:rgba(255,255,255,.06)}.tag-picker-id{font-size:12px}.tag-picker-desc{font-size:11px;color:var(--color-text-muted)}.tag-picker-badge{font-size:10px;color:var(--color-warning, #c97a00)}.tag-picker-hint-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.tag-picker-bind-link{border:none;background:none;padding:0;font-size:11px;color:var(--color-accent, #5c9eff);cursor:pointer;text-decoration:underline}.dev-tag-library-row-actions{display:flex;flex-wrap:wrap;gap:6px}.tag-group-members-panels{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:stretch;margin:12px 0}.tag-alarm-group-panels{grid-template-columns:1fr 1fr}.tag-group-members-panel{display:flex;flex-direction:column;gap:8px;min-width:0}.tag-group-members-panel header{font-size:13px;font-weight:600}.tag-alarm-group-name-field{display:flex;flex-direction:column;gap:6px;margin-bottom:8px;font-size:13px;font-weight:600}.tag-group-members-scroll{list-style:none;margin:0;padding:4px 0;min-height:280px;max-height:min(40vh,360px);overflow:auto;border:1px solid var(--color-border, rgba(255, 255, 255, .12));border-radius:6px;background:var(--color-surface-2, rgba(0, 0, 0, .15))}.tag-group-members-item{padding:8px 12px;cursor:pointer;user-select:none;font-size:13px;line-height:1.35}.tag-group-members-item:hover{background:var(--color-surface-hover, rgba(255, 255, 255, .06))}.tag-group-members-item-selected{background:var(--color-primary-soft, rgba(21, 101, 192, .12))}.tag-group-members-empty{padding:12px;color:var(--color-text-muted);text-align:center}.tag-group-members-list{min-height:220px;font-family:var(--font-mono, monospace);font-size:12px}.tag-group-members-actions{display:none}@media (max-width: 720px){.tag-group-members-panels{grid-template-columns:1fr}.tag-group-members-actions{flex-direction:row;flex-wrap:wrap;justify-content:center}}.settings-checkbox-inline{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--color-text-muted);white-space:nowrap}.dev-plc-row-unbound td{background:rgba(201,122,0,.06)}.dev-plc-unbound-badge{display:inline-block;margin-left:8px;font-size:10px;color:var(--color-warning, #c97a00)}.plc-point-dialog h2{margin:0 0 8px;padding-right:28px;font-size:18px}.plc-point-dialog-desc{margin:0 0 16px;font-size:13px;line-height:1.5;color:var(--color-text-muted)}.plc-point-dialog-form{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:16px}.plc-point-dialog-form-single{flex-direction:column;align-items:stretch}.plc-point-field{display:flex;flex-direction:column;gap:6px;min-width:120px}.plc-point-field-grow{flex:1 1 200px}.plc-point-field-count{width:96px}.plc-point-field span{font-size:12px;color:var(--color-text-muted)}.plc-point-dialog-table{max-height:min(52vh,480px);overflow:auto;margin-bottom:12px}.plc-point-engineering-row{display:flex;flex-wrap:wrap;gap:12px}.plc-point-engineering-hint{margin:-4px 0 8px;font-size:12px;line-height:1.5;color:var(--color-text-muted)}.plc-point-dialog-error{margin:0 0 12px;font-size:13px;color:var(--color-danger, #c0392b)}.dev-plc-tag-cell{min-width:200px}.dev-plc-readonly{color:var(--color-text);font-size:13px}.dev-plc-select-col{width:36px;text-align:center}.plc-tag-id-cell{display:flex;align-items:center;gap:4px;min-width:160px}.plc-tag-id-input{flex:1;min-width:0}.plc-tag-id-pick{flex-shrink:0;min-width:32px;padding:0 8px}.tag-select-dialog-desc{margin:0 0 12px;font-size:13px;line-height:1.5;color:var(--color-text-muted)}.tag-select-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.tag-select-filters button{padding:4px 10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:transparent;cursor:pointer;font-size:12px}.tag-select-filters button.active{border-color:var(--color-primary);color:var(--color-primary)}.tag-select-clear{align-self:flex-start;margin-bottom:8px}.tag-select-dialog h2{margin:0 0 12px;padding-right:28px;font-size:18px}.tag-select-search{margin-bottom:12px}.tag-select-list{list-style:none;margin:0;padding:0;overflow:auto;flex:1;min-height:240px;max-height:min(56vh,520px);border:1px solid var(--color-border);border-radius:var(--radius-sm)}.tag-select-list button{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%;padding:10px 12px;border:none;border-bottom:1px solid var(--color-border);background:transparent;text-align:left;cursor:pointer}.tag-select-list li:last-child button{border-bottom:none}.tag-select-list button:hover,.tag-select-list button.active{background:var(--color-bg-two)}.tag-select-id{font-size:13px}.tag-select-desc{font-size:12px;color:var(--color-text-muted)}.tag-select-type{font-size:11px;padding:2px 6px;border-radius:var(--radius-sm);background:var(--color-surface-muted, rgba(127, 127, 127, .12));color:var(--color-text-muted)}.tag-select-driver{font-size:11px;color:var(--color-text-muted)}.dev-plc-engineering-input{width:72px;min-width:72px}.tag-select-empty{padding:16px;text-align:center;color:var(--color-text-muted);font-size:13px}.tag-select-overlay{z-index:1100}.dev-props-form label .tag-picker{flex:1}.dev-props-form{display:flex;flex-direction:column;gap:10px}.dev-props-form label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--color-text-muted)}.dev-props-section{display:flex;flex-direction:column;gap:8px;padding-top:8px;border-top:1px solid var(--color-border)}.dev-props-section h4{margin:0;font-size:12px;color:var(--color-text)}.dev-props-hint{margin:0;font-size:11px;line-height:1.45;color:var(--color-text-muted)}.dev-line-view-badge{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:999px;font-size:10px;font-weight:500;color:var(--color-text-muted);background:color-mix(in srgb,var(--color-primary) 10%,transparent)}@media (max-width: 1100px){.dev-grid,.dev-designer-workspace{grid-template-columns:1fr}}.dev-lines-bar{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start;padding:12px 14px;background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-md)}.dev-lines-list{display:flex;flex-wrap:wrap;gap:8px;flex:1}.dev-line-card{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;padding:8px 10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);min-width:200px}.dev-line-card.active-edit{border-color:var(--color-primary);box-shadow:0 0 0 1px color-mix(in srgb,var(--color-primary) 30%,transparent)}.dev-line-active{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--color-text-muted);white-space:nowrap}.dev-line-name{display:flex;flex-direction:column;align-items:flex-start;gap:2px;border:none;background:transparent;cursor:pointer;text-align:left;color:var(--color-text);padding:0}.dev-line-name .mono{font-size:11px;color:var(--color-text-muted)}.dev-line-remove{border:none;background:transparent;color:var(--color-text-muted);cursor:pointer;font-size:18px;line-height:1;padding:0 4px}.dev-line-remove:hover{color:#dc2626}.dev-line-actions{display:inline-flex;align-items:center;gap:2px}.dev-line-copy{border:none;background:transparent;color:var(--color-text-muted);cursor:pointer;font-size:15px;line-height:1;padding:0 4px}.dev-line-copy:hover{color:var(--color-primary)}.dev-lines-add{display:flex;gap:8px;align-items:center}.dev-icon-toolbar{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.dev-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);cursor:pointer}.dev-icon-btn:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary)}.dev-icon-btn:disabled{opacity:.4;cursor:not-allowed}.dev-icon-sep{width:1px;height:24px;background:var(--color-border);margin:0 4px}.dev-toolbar-status{flex:1;font-size:12px;color:var(--color-text-muted);min-width:120px}.dev-list-item{width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);cursor:pointer;text-align:left;color:var(--color-text)}.dev-list-item.selected{border-color:var(--color-primary);box-shadow:0 0 0 1px color-mix(in srgb,var(--color-primary) 35%,transparent)}.dev-scripts-panel,.dev-scripts-shell{display:flex;flex-direction:column;flex:1;min-height:0;gap:10px;background:var(--color-bg-two);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px 14px}.dev-scripts-topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-shrink:0;flex-wrap:wrap}.dev-scripts-topbar-hint{margin:0;flex:1;min-width:200px}.dev-scripts-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,400px);gap:12px;flex:1;min-height:0}.dev-scripts-main{display:flex;flex-direction:column;gap:8px;min-width:0;min-height:0}.dev-scripts-workspace{display:grid;grid-template-rows:minmax(0,1fr) minmax(120px,150px);gap:8px;flex:1;min-height:0}.dev-scripts-sidebar{display:flex;flex-direction:column;gap:8px;min-height:0;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:10px;background:var(--color-bg);overflow:hidden}.dev-scripts-actionbar{display:flex;flex-direction:column;gap:6px;flex-shrink:0;padding-top:2px}.dev-scripts-actionbar-group{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center}.dev-scripts-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(400px,440px);gap:12px;min-height:0;flex:1}.dev-scripts-log{display:flex;flex-direction:column;gap:8px;min-height:0;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:10px;background:var(--color-bg);overflow:hidden}.dev-scripts-vars{overflow:hidden}.dev-scripts-vars-actions{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}.dev-scripts-vars-header{display:flex;flex-direction:column;align-items:stretch;gap:8px;flex-shrink:0}.dev-scripts-vars-header h3,.dev-scripts-log h3{margin:0;font-size:14px}.dev-scripts-triggers{display:flex;flex-direction:column;gap:8px;min-height:0;flex:1;border-top:1px solid var(--color-border);padding-top:10px;overflow:hidden}.dev-scripts-triggers-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.dev-scripts-triggers-header h3{margin:0;font-size:14px}.dev-scripts-triggers-hint{margin:0;font-size:11px;line-height:1.45;color:var(--color-text-muted)}.dev-scripts-triggers-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;overflow:auto;flex:1;min-height:0}.dev-scripts-trigger-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-two);font-size:12px}.dev-scripts-trigger-meta{display:flex;flex-direction:column;gap:2px;min-width:0}.dev-scripts-trigger-var{font-weight:600;word-break:break-all}.dev-scripts-trigger-id{font-size:11px;color:var(--color-text-muted)}.dev-scripts-var-link{border:none;background:none;padding:0;color:var(--color-accent, #0493e6);cursor:pointer;font:inherit;text-align:left;word-break:break-all}.dev-scripts-var-link:hover:not(:disabled){text-decoration:underline}.dev-scripts-readonly-hint{font-size:11px;color:var(--color-text-muted)}.dev-scripts-var-tree-wrap{flex:1;min-height:0;overflow:auto;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-two)}.dev-scripts-var-tree{display:flex;flex-direction:column;gap:2px;padding:6px}.dev-scripts-var-tree-group,.dev-scripts-var-tree-subgroup{display:flex;flex-direction:column;gap:2px}.dev-scripts-var-tree-group-btn{display:flex;align-items:center;gap:6px;width:100%;border:none;background:transparent;color:var(--color-text);text-align:left;padding:6px 8px;border-radius:4px;cursor:pointer;font-size:12px;font-weight:600}.dev-scripts-var-tree-group-btn--sub{font-weight:500;color:var(--color-text-muted)}.dev-scripts-var-tree-group-btn:hover{background:color-mix(in srgb,var(--color-accent, #0493e6) 10%,transparent)}.dev-scripts-var-tree-caret{flex-shrink:0;width:12px;font-size:10px;color:var(--color-text-muted)}.dev-scripts-var-tree-group-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dev-scripts-var-tree-count{flex-shrink:0;font-size:11px;font-weight:500;color:var(--color-text-muted)}.dev-scripts-var-tree-leaf{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name actions" "meta actions";gap:2px 8px;align-items:center;padding:4px 8px 4px 0;border-radius:4px}.dev-scripts-var-tree-leaf:hover{background:color-mix(in srgb,var(--color-accent, #0493e6) 8%,transparent)}.dev-scripts-var-tree-leaf .dev-scripts-var-link{grid-area:name}.dev-scripts-var-tree-meta{grid-area:meta;display:flex;align-items:center;gap:8px;min-width:0;font-size:11px;color:var(--color-text-muted)}.dev-scripts-var-tree-type{flex-shrink:0;padding:1px 6px;border-radius:999px;border:1px solid var(--color-border);background:var(--color-bg)}.dev-scripts-var-tree-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dev-scripts-var-tree-actions{grid-area:actions;display:flex;flex-wrap:wrap;gap:4px;justify-content:flex-end}.dev-scripts-table-wrap{overflow:auto;flex:1}.dev-scripts-table{width:100%;border-collapse:collapse;font-size:12px}.dev-scripts-table th,.dev-scripts-table td{border-bottom:1px solid var(--color-border);padding:6px 4px;text-align:left;vertical-align:top}.dev-scripts-row-actions{display:flex;flex-direction:column;gap:4px}.dev-scripts-editor{flex:1;min-height:0;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.dev-scripts-log-list{overflow:auto;flex:1;display:flex;flex-direction:column;gap:6px;font-size:12px}.dev-scripts-log-item{padding:6px 8px;border-radius:var(--radius-sm);background:color-mix(in srgb,var(--color-bg-muted) 60%,transparent)}.dev-scripts-log-item--error{color:var(--color-danger, #c0392b)}.dev-scripts-log-item--success{color:var(--color-success, #1e8449)}.dev-scripts-log-time{display:block;opacity:.7;font-size:11px}.dev-scripts-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding-top:0;flex-shrink:0}@media (max-width: 1100px){.dev-scripts-body,.dev-scripts-layout{grid-template-columns:1fr}.dev-scripts-sidebar,.dev-scripts-vars{max-height:320px}}.dev-scripts-template-picker{display:inline-flex;align-items:center;gap:6px;font-size:12px}.dev-scripts-template-picker select{min-width:140px}.dev-scripts-interval{display:inline-flex;align-items:center;gap:6px;font-size:12px}.dev-scripts-interval input{width:90px}.dev-scripts-cycle-status{font-size:12px;color:var(--color-primary)}.dev-scripts-modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:1000}.dev-scripts-modal{width:min(420px,92vw);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:16px;display:flex;flex-direction:column;gap:10px}.dev-scripts-modal label{display:flex;flex-direction:column;gap:4px;font-size:12px}.dev-scripts-modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.scada-designer{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0}.scada-designer-file-actions{display:inline-flex;align-items:center;gap:8px;flex-shrink:0}.scada-designer-canvas-actions-bar{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px solid var(--color-border);background:var(--color-bg);flex-shrink:0}.scada-designer .dev-canvas-toolbar{padding:6px 8px;gap:6px}.scada-designer-canvas-wrap.dev-designer-canvas-panel{border:1px solid var(--color-border);border-radius:var(--radius-md)}.scada-designer-body{display:grid;grid-template-columns:260px minmax(0,1fr) 320px;gap:8px;flex:1;min-height:0;align-items:stretch}.scada-designer-body--sidebar-tree{grid-template-columns:minmax(0,1fr) 320px}.scada-designer-body--content-only{grid-template-columns:minmax(0,1fr)}.scada-designer-tree,.scada-designer-canvas-wrap,.scada-designer-props{display:flex;flex-direction:column;min-height:0;overflow:hidden;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-two)}.scada-designer-panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 10px;border-bottom:1px solid var(--color-border);font-size:13px;flex-shrink:0}.scada-designer-panel-meta{color:var(--text-muted, #667085);font-size:12px}.scada-designer-tree-actions{display:grid;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border-subtle, #d8dee8)}.scada-import-block{display:grid;gap:6px;margin-top:4px;padding-top:10px;border-top:1px dashed var(--border-subtle, #d8dee8)}.scada-import-hint{margin:0;font-size:12px;line-height:1.45;color:var(--text-muted, #64748b)}.scada-create-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.scada-tree-node-meta{margin-left:auto;font-size:11px;color:var(--text-muted, #64748b)}.scada-page-size-presets{display:grid;gap:6px}.scada-page-size-presets-label{font-size:12px;color:var(--text-muted, #64748b)}.scada-page-size-presets-actions{display:flex;flex-wrap:wrap;gap:6px}.scada-page-size-presets-actions button{font-size:12px;padding:4px 8px}.scada-tree-root{flex:1;overflow:auto;padding:4px 0 8px}.scada-tree-root-head{display:flex;align-items:center;gap:6px;width:100%;border:0;background:transparent;text-align:left;padding:8px 12px;cursor:pointer;font-weight:600;font-size:13px;color:#1e293b}.scada-tree-root-head:hover{background:rgba(59,130,246,.06)}.scada-tree-root-children{padding-bottom:4px}.scada-tree-empty-hint{padding:6px 12px 6px 28px;font-size:12px;color:var(--text-muted, #64748b)}.scada-tree-node{display:flex;align-items:center;gap:6px;width:100%;border:0;background:transparent;text-align:left;padding:6px 12px 6px 8px;cursor:pointer}.scada-tree-node.is-selected{background:rgba(59,130,246,.12)}.scada-tree-node.is-monitor-home{background:color-mix(in srgb,#059669 14%,transparent);border-left:3px solid #059669}.scada-tree-node.is-monitor-home.is-selected{background:color-mix(in srgb,#059669 22%,rgba(59,130,246,.12))}.scada-tree-node.is-alarm-home{background:color-mix(in srgb,#dc2626 12%,transparent);border-left:3px solid #dc2626}.scada-tree-node.is-alarm-home.is-selected{background:color-mix(in srgb,#dc2626 20%,rgba(59,130,246,.12))}.scada-tree-node.is-monitor-background{background:color-mix(in srgb,#7c3aed 12%,transparent);border-left:3px solid #7c3aed}.scada-tree-node.is-monitor-background.is-selected{background:color-mix(in srgb,#7c3aed 20%,rgba(59,130,246,.12))}.scada-tree-node-badge--home{color:#047857;border-color:color-mix(in srgb,#059669 40%,var(--color-border));background:color-mix(in srgb,#059669 10%,#fff)}.scada-tree-node-badge--alarm{color:#b91c1c;border-color:color-mix(in srgb,#dc2626 40%,var(--color-border));background:color-mix(in srgb,#dc2626 10%,#fff)}.scada-tree-node-badge--background{color:#6d28d9;border-color:color-mix(in srgb,#7c3aed 40%,var(--color-border));background:color-mix(in srgb,#7c3aed 10%,#fff)}.scada-tree-folder-toggle{width:14px;color:var(--text-muted, #667085);flex-shrink:0}.scada-tree-folder-toggle--leaf{font-size:10px}.scada-tree-node-label{display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scada-tree-node-badge{flex-shrink:0;font-size:10px;line-height:1.2;padding:1px 5px;border-radius:999px;border:1px solid var(--color-border)}.scada-tree-context-menu{position:fixed;z-index:1200;min-width:160px;padding:6px;border:1px solid var(--color-border, #d8dee8);border-radius:var(--radius-md, 8px);background:var(--color-surface, #fff);box-shadow:0 8px 24px #0000002e}.scada-tree-context-menu-item{display:block;width:100%;border:none;background:transparent;color:var(--color-text, #1e293b);border-radius:var(--radius-sm, 6px);padding:8px 12px;font-size:13px;text-align:left;cursor:pointer}.scada-tree-context-menu-item:hover:not(:disabled){background:var(--color-bg-two, #f1f5f9);color:var(--color-primary, #2563eb)}.scada-tree-context-menu-item.is-danger{color:#dc2626}.scada-tree-context-menu-item.is-danger:hover:not(:disabled){background:rgba(220,38,38,.08);color:#b91c1c}.scada-tree-context-menu-item:disabled{opacity:.5;cursor:not-allowed}.scada-tree-context-menu-empty{padding:8px 12px;font-size:12px;color:var(--color-text-muted, #64748b)}.scada-device-binding-list{display:grid;gap:6px;max-height:180px;overflow:auto}.scada-device-binding-item{align-items:flex-start}.scada-device-binding-id{display:block;font-size:11px;color:var(--text-muted, #64748b)}.line-canvas-notice{position:absolute;left:12px;right:12px;bottom:48px;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border-radius:8px;background:rgba(220,38,38,.92);color:#fff;font-size:13px}.line-canvas-notice-close{border:0;background:transparent;color:inherit;font-size:18px;cursor:pointer;line-height:1}.scada-designer-screen-tabs{display:flex;flex-wrap:nowrap;gap:4px;overflow-x:auto;padding:4px 6px;border-bottom:1px solid var(--color-border);background:var(--color-bg);flex-shrink:0}.scada-designer-screen-tab{display:inline-flex;align-items:stretch;max-width:188px;border:1px solid var(--border-subtle, #d8dee8);border-radius:6px 6px 0 0;background:#fff;flex-shrink:0}.scada-designer-screen-tab.is-active{border-color:#3b82f6;box-shadow:inset 0 -2px #3b82f6}.scada-designer-screen-tab-label{display:inline-flex;align-items:center;min-width:0;max-width:160px;padding:4px 10px;border:0;background:transparent;cursor:pointer;text-align:left;font-size:12px;font-weight:600;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scada-designer-screen-tab-close{width:22px;border:0;border-left:1px solid var(--border-subtle, #e2e8f0);background:transparent;color:#64748b;cursor:pointer;font-size:14px;line-height:1}.scada-designer-screen-tab-close:hover{color:#dc2626;background:rgba(220,38,38,.06)}.scada-designer-canvas-wrap{min-height:0;background:var(--color-bg-two)}.scada-designer-tree{background:var(--color-bg)}.scada-designer-canvas-body{display:flex;flex-direction:column;flex:1;min-height:0}.scada-canvas-stage{display:grid;grid-template-columns:28px minmax(0,1fr);grid-template-rows:22px minmax(0,1fr);flex:1;min-height:0}.scada-canvas-ruler-x{position:relative;height:22px;overflow:hidden;min-width:0}.scada-canvas-ruler-y-wrap{padding-top:var(--scada-title-bar, 0)}.scada-canvas-ruler-y{height:var(--scada-body-h, 100%);position:relative;overflow:hidden}.scada-canvas-viewport{position:relative;overflow:auto;min-height:0;min-width:0;align-self:stretch;justify-self:stretch;background:linear-gradient(90deg,rgba(0,0,0,.04) 1px,transparent 1px) 0 0 / 16px 16px,linear-gradient(rgba(0,0,0,.04) 1px,transparent 1px) 0 0 / 16px 16px}.scada-canvas-viewport--no-grid{background:#f1f5f9}.scada-canvas-zoom-wrap{position:relative;flex-shrink:0}.scada-canvas-marquee{position:absolute;border:1px dashed #94a3b8;background:rgba(148,163,184,.12);pointer-events:none;z-index:5;box-sizing:border-box}.scada-designer-props .scada-designer-panel-head{position:relative;z-index:2}.scada-widget-tool-float{position:relative;display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0}.scada-widget-tool-float-handle{width:26px;height:26px;padding:0;border:1px solid #94a3b8;border-radius:2px;background:linear-gradient(180deg,#f8fafc 0%,#e2e8f0 100%);box-shadow:inset 0 1px #ffffffd9;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#334155;font-size:14px;line-height:1}.scada-widget-tool-float-handle:hover:not(:disabled),.scada-widget-tool-float.is-open .scada-widget-tool-float-handle{border-color:#64748b;background:linear-gradient(180deg,#fff 0%,#e2e8f0 100%)}.scada-widget-tool-float-handle:disabled{opacity:.5;cursor:not-allowed}.scada-widget-tool-float-panel{display:none;flex-direction:column;position:absolute;top:100%;right:0;width:84px;border:1px solid #94a3b8;border-radius:2px;background:#eceff4;box-shadow:0 2px 8px #0f172a1f;z-index:40}.scada-widget-tool-float.is-open .scada-widget-tool-float-panel{display:flex}.scada-widget-tool-float-panel--wide{width:min(300px,calc(100vw - 24px));max-height:min(640px,calc(100vh - 72px));overflow:hidden}.scada-widget-tool-float-panel--wide .scada-widget-palette{flex:1;min-height:0}.scada-widget-tool-float-panel--wide .scada-widget-palette-list{flex:1;max-height:none;min-height:min(440px,calc(100vh - 220px))}.scada-widget-tool-float-head{display:flex;align-items:center;justify-content:space-between;gap:4px;padding:2px 4px;border-bottom:1px solid #cbd5e1;background:linear-gradient(180deg,#f8fafc 0%,#e2e8f0 100%);font-size:10px;font-weight:600;color:#475569;line-height:1.2}.scada-widget-tool-float-head span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scada-widget-tool-float-pin{width:14px;height:14px;padding:0;border:0;background:transparent;color:#64748b;font-size:10px;line-height:1;cursor:pointer;flex-shrink:0}.layout-device-tool-float .scada-widget-tool-float-panel{width:220px;max-height:min(480px,60vh)}.layout-device-palette{display:flex;flex-direction:column;min-height:0;overflow:hidden}.layout-device-palette-body{flex:1;min-height:0;overflow:auto;padding:6px}.layout-device-palette .dev-control-search{margin:6px 6px 0;flex-shrink:0}.dev-layout-props--embedded{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.scada-designer-props-body:has(> .dev-layout-props--embedded){display:flex;flex-direction:column;overflow:hidden;padding:0}.scada-designer-props-body .dev-layout-props--embedded .dev-props-tabs{margin:0;padding:10px 12px 8px}.scada-designer-props-body .dev-layout-props--embedded .dev-props-scroll{padding:0 12px 12px}.scada-widget-palette{display:flex;flex-direction:column;gap:8px;padding:8px;min-height:0}.scada-widget-palette-search{width:100%;min-height:28px;font-size:12px}.scada-widget-palette-categories{display:flex;flex-wrap:wrap;gap:4px}.scada-widget-palette-categories--custom{padding-top:2px;border-top:1px dashed var(--color-border, #cbd5e1)}.scada-widget-palette-category{border:1px solid var(--color-border, #cbd5e1);border-radius:999px;background:var(--color-bg, #fff);color:var(--color-text-muted, #64748b);font-size:11px;line-height:1;padding:4px 8px;cursor:pointer}.scada-widget-palette-category.is-active{border-color:var(--color-accent, #2563eb);color:var(--color-accent, #2563eb);background:color-mix(in srgb,var(--color-accent, #2563eb) 8%,var(--color-bg, #fff))}.scada-widget-palette-category:disabled{opacity:.45;cursor:not-allowed}.scada-widget-palette-list{display:flex;flex-direction:column;gap:2px;min-height:0;max-height:480px;overflow:auto}.scada-widget-palette-item{display:flex;align-items:center;gap:8px;width:100%;min-height:32px;padding:4px 6px;border:1px solid transparent;border-radius:4px;background:transparent;text-align:left;cursor:pointer}.scada-widget-palette-item:hover:not(:disabled){border-color:var(--color-border, #cbd5e1);background:var(--color-bg, #fff)}.scada-widget-palette-item:active:not(:disabled){background:#e2e8f0}.scada-widget-palette-item:disabled{opacity:.45;cursor:not-allowed}.scada-widget-palette-item-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:24px;height:24px;border:1px solid #cbd5e1;border-radius:3px;background:linear-gradient(180deg,#fff 0%,#e2e8f0 100%);color:#334155}.scada-widget-palette-item-icon svg{display:block}.scada-widget-palette-item-icon--custom{font-size:13px;font-weight:600}.scada-widget-palette-item-body{display:flex;flex-direction:column;gap:1px;min-width:0}.scada-widget-palette-item-label{font-size:12px;line-height:1.25;color:var(--color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scada-widget-palette-item-meta{font-size:10px;line-height:1.2;color:var(--color-text-muted, #64748b);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scada-widget-palette-section-label{margin-top:4px;padding:6px 4px 2px;border-top:1px solid var(--color-border, #cbd5e1);font-size:11px;color:var(--color-text-muted, #64748b)}.scada-widget-palette-empty{margin:0;padding:16px 8px;text-align:center;font-size:12px;color:var(--color-text-muted, #64748b)}.scada-widget-palette-foot{padding-top:2px;font-size:11px;color:var(--color-text-muted, #64748b);text-align:right}.scada-widget-palette-btn{width:26px;height:26px;padding:0;border:1px solid #cbd5e1;border-radius:1px;background:linear-gradient(180deg,#fff 0%,#e2e8f0 100%);box-shadow:inset 0 1px #ffffffe6;cursor:pointer;display:flex;align-items:center;justify-content:center}.scada-widget-palette-btn:hover:not(:disabled){border-color:#64748b;background:linear-gradient(180deg,#fff 0%,#dbeafe 100%)}.scada-widget-palette-btn:active:not(:disabled){background:#cbd5e1;box-shadow:inset 0 1px 2px #0f172a1f}.scada-widget-palette-btn:disabled{opacity:.45;cursor:not-allowed}.scada-widget-palette-icon{display:flex;align-items:center;justify-content:center;width:16px;height:16px;color:#334155;line-height:1;user-select:none}.scada-widget-palette-icon svg{display:block}.scada-widget-palette-section-label{grid-column:1 / -1;margin-top:4px;padding-top:6px;border-top:1px solid var(--color-border);font-size:11px;color:var(--color-text-muted)}.scada-widget-palette-icon--custom{font-size:14px;font-weight:600}.custom-control-preview{width:100%;height:100%;min-height:0}.custom-control-preview--fill{display:flex;flex-direction:column}.custom-control-svg{width:100%;height:100%;display:block}.custom-control-table-wrap{width:100%;height:100%;overflow:auto}.custom-control-table{width:100%}.custom-control-missing{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:8px;font-size:12px;color:var(--color-text-muted);text-align:center}.custom-control-hybrid-hint{margin:0;padding:12px}.custom-control-hybrid{display:flex;flex-direction:column;gap:8px;width:100%;height:100%;min-height:0}.custom-control-hybrid-part{min-height:0}.custom-control-hybrid-part--chart{flex:1 1 55%;min-height:120px}.custom-control-hybrid-part--table{flex:1 1 45%;overflow:auto}.custom-control-hybrid-part--svg{flex:0 0 auto}.scada-canvas-footer{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:4px 8px;border-top:1px solid var(--color-border);background:var(--color-bg);font-size:11px;color:var(--color-text-muted);flex-shrink:0}.scada-canvas-footer-coords,.scada-canvas-footer-selection{font-variant-numeric:tabular-nums}.scada-designer-screen{position:relative;margin:0;box-sizing:border-box;border:1px dashed #94a3b8;background:#e8ecf1;box-shadow:none}.scada-designer-screen--dialog{border-color:#94a3b8}.scada-designer-screen-title{height:32px;display:flex;align-items:center;padding:0 12px;border-bottom:1px dashed #cbd5e1;background:rgba(241,245,249,.92);font-size:13px;font-weight:600;box-sizing:border-box}.scada-designer-screen-body{position:relative;height:calc(100% - 32px)}.scada-designer-screen:not(:has(.scada-designer-screen-title)) .scada-designer-screen-body{height:100%}.scada-widget-preview-host{position:absolute;cursor:move;box-sizing:border-box;user-select:none;overflow:hidden}.scada-widget-preview-host .scada-widget-preview{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:4px;cursor:move}.scada-widget-preview{position:absolute;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-size:12px;display:flex;align-items:center;justify-content:center;padding:0 6px;cursor:move;box-sizing:border-box;user-select:none}.scada-widget-preview--button{background:#eff6ff}.scada-widget-preview--display{background:#f8fafc}.scada-widget-preview--frame{background:rgba(248,250,252,.8)}.scada-widget-preview--divider{background:#cbd5e1;padding:0}.scada-designer-props-body{flex:1;overflow:auto;padding:12px}.scada-designer-props-body .dev-plant-nav-row{grid-template-columns:1fr}.scada-plant-sidebar-props{display:grid;gap:10px}.scada-plant-sidebar-props .dev-plant-nav-list{max-height:min(420px,50vh);overflow:auto}.scada-site-banner-props,.scada-plant-title-bar-props{display:grid;gap:10px}.scada-props-section{display:grid;gap:10px;margin-bottom:16px}.scada-props-section h4{margin:0;font-size:13px}.scada-color-field{display:grid;grid-template-columns:48px minmax(0,1fr);gap:8px;align-items:center}.scada-props-section label{display:grid;gap:4px;font-size:12px}.scada-props-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}.scada-props-check{display:flex!important;align-items:center;gap:8px}.scada-designer-empty{flex:1;display:flex;align-items:center;justify-content:center;padding:24px}.scada-widget-preview.is-selected,.scada-widget-preview-host.is-selected{outline:1px dashed #94a3b8;outline-offset:0;z-index:10}.scada-widget-preview.is-dragging,.scada-widget-preview-host.is-dragging{opacity:.88;cursor:grabbing;z-index:20}.scada-widget-text.is-marquee,.scada-widget-preview--label.is-marquee .scada-widget-text{display:inline-block;white-space:nowrap;animation-name:scada-label-marquee;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes scada-label-marquee{0%{transform:translate(100%)}to{transform:translate(-100%)}}.scada-runtime-widget--label.is-blink,.scada-widget-preview--label.is-blink{animation-name:scada-label-blink;animation-timing-function:step-end;animation-iteration-count:infinite}@keyframes scada-label-blink{0%,49%{opacity:1}50%,to{opacity:.15}}.scada-widget-props-panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.scada-widget-props-panel-head h4{margin:0}.scada-widget-type-badge{display:inline-flex;align-items:center;padding:2px 8px;margin-bottom:10px;border-radius:4px;font-size:12px;font-weight:600;color:#475569;background:#e2e8f0;border:1px solid #cbd5e1}.modal-dialog.scada-widget-props-dialog{width:min(96vw,560px);max-height:88vh;overflow:auto}.scada-widget-props-tabs{display:flex;gap:8px;margin:0 0 12px;border-bottom:1px solid var(--color-border);padding-bottom:8px}.scada-widget-props-tabs button{border:1px solid var(--color-border);background:var(--color-bg-two);border-radius:var(--radius-sm);padding:6px 12px;font-size:13px;cursor:pointer}.scada-widget-props-tabs button.is-active{border-color:var(--color-primary);color:var(--color-primary)}.scada-widget-props-issues{margin-bottom:12px;padding:8px 10px;border-radius:var(--radius-sm);background:rgba(247,27,110,.08);color:var(--color-alarm);font-size:12px}.scada-widget-props-issues p{margin:0 0 4px}.scada-widget-props-actions{justify-content:flex-end}.scada-widget-resize-handle{position:absolute;width:8px;height:8px;background:#3b82f6;border:1px solid #fff;border-radius:1px;box-sizing:border-box;z-index:4}.scada-widget-resize-handle--nw{top:-4px;left:-4px;cursor:nwse-resize}.scada-widget-resize-handle--n{top:-4px;left:50%;margin-left:-4px;cursor:ns-resize}.scada-widget-resize-handle--ne{top:-4px;right:-4px;cursor:nesw-resize}.scada-widget-resize-handle--e{top:50%;right:-4px;margin-top:-4px;cursor:ew-resize}.scada-widget-resize-handle--se{right:-4px;bottom:-4px;cursor:nwse-resize}.scada-widget-resize-handle--s{left:50%;bottom:-4px;margin-left:-4px;cursor:ns-resize}.scada-widget-resize-handle--sw{left:-4px;bottom:-4px;cursor:nesw-resize}.scada-widget-resize-handle--w{top:50%;left:-4px;margin-top:-4px;cursor:ew-resize}.scada-runtime-overlay--immersive{position:fixed;inset:0;z-index:1200;padding:0!important;margin:0;border:0;background:#eef2f6;display:flex;align-items:stretch;justify-content:stretch;overflow:hidden}.scada-runtime-overlay--immersive.modal-overlay{background:#eef2f6;padding:0!important}.modal-overlay.scada-runtime-overlay--runtime-preview{padding:0!important}.scada-runtime-overlay--immersive.scada-runtime-overlay--runtime-preview:not(.scada-runtime-overlay--page){background:rgba(15,23,42,.45);align-items:center;justify-content:center}.scada-runtime-overlay--page-preview.scada-runtime-overlay--immersive{width:100vw;height:100vh}.scada-runtime-overlay--immersive .scada-runtime-page-preview-stack{flex:1;width:100%;height:100%;min-width:0;min-height:0}.scada-runtime-overlay--immersive .scada-page-stack--fill{width:100%;height:100%}.scada-runtime-screen--runtime-preview{outline:none;box-shadow:0 16px 40px #0f172a2e}.scada-runtime-overlay--immersive.scada-runtime-overlay--page .scada-runtime-screen{width:100vw;height:100vh;max-width:none;max-height:none;border-radius:0;box-shadow:none}.scada-runtime-overlay{z-index:1200}.scada-runtime-overlay--anchored{align-items:flex-start;justify-content:flex-start;padding:0}.scada-confirm-overlay{z-index:1400}.scada-runtime-overlay--modeless{background:rgba(15,23,42,.18)}.scada-runtime-screen{position:relative;display:flex;flex-direction:column;overflow:hidden;border-radius:8px;box-shadow:0 16px 40px #0f172a2e}.scada-runtime-screen-title{height:32px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border-bottom:1px solid #dbe3ee;background:#f8fafc;font-size:13px;font-weight:600}.scada-runtime-close{border:0;background:transparent;font-size:18px;line-height:1;cursor:pointer;color:#64748b}.scada-runtime-close--floating{position:absolute;top:6px;right:8px;z-index:2}.scada-runtime-screen-body{position:relative;flex:1;min-height:0;overflow:auto}.scada-runtime-widget{position:absolute;box-sizing:border-box;font-size:12px}.scada-runtime-widget--label{display:flex;align-items:center;color:#334155}.scada-runtime-widget--display,.scada-runtime-widget--multistate{display:flex;align-items:center;gap:6px;padding:0 8px;border:1px solid #dbe3ee;border-radius:4px;background:#fff}.scada-multistate-image{max-width:100%;max-height:100%;object-fit:contain}.scada-runtime-widget--input,.scada-widget-preview--input{display:flex;align-items:center;padding:0 8px;overflow:hidden;gap:0;border:1px solid #dbe3ee;border-radius:4px;background:#fff;color:#334155}.scada-input-inline{display:flex;align-items:center;width:100%;height:100%;min-height:0;min-width:0}.scada-input-affix{flex-shrink:0;white-space:nowrap}.scada-runtime-widget-caption{color:#64748b;white-space:nowrap}.scada-runtime-widget-value{font-weight:600}.scada-runtime-input-field{flex:1;min-width:0;height:auto;padding:0;border:0;border-radius:0;background:transparent;color:inherit;font:inherit}.scada-runtime-input-apply{flex-shrink:0;font-size:11px;padding:0 10px;border:0;border-left:1px solid #dbe3ee;border-radius:0;background:#f8fafc;color:#334155}.scada-runtime-widget--button{border:1px solid #93c5fd;border-radius:4px;background:#eff6ff;cursor:pointer}.scada-runtime-widget--button.is-active{background:#2563eb;color:#fff}.scada-runtime-widget--frame{border:1px solid #cbd5e1;border-radius:4px;background:rgba(248,250,252,.85)}.scada-runtime-frame-title{position:absolute;top:-10px;left:8px;padding:0 4px;background:#fff;color:#64748b;font-size:11px}.scada-runtime-widget--divider{background:#cbd5e1}.scada-runtime-screen--preview{outline:2px dashed #3b82f6}.scada-runtime-preview-banner{position:absolute;top:8px;left:50%;transform:translate(-50%);z-index:5;padding:2px 10px;border-radius:999px;background:rgba(37,99,235,.92);color:#fff;font-size:11px;pointer-events:none}.scada-runtime-widget--alarm-brief,.scada-runtime-widget--alarm-list,.scada-runtime-widget--kpi-card,.scada-widget-preview--alarm-brief,.scada-widget-preview--alarm-list,.scada-widget-preview--kpi-card{padding:0;background:transparent;border:none}.scada-runtime-widget--alarm-brief,.scada-runtime-widget--alarm-list,.scada-widget-preview--alarm-brief,.scada-widget-preview--alarm-list{background:var(--color-bg-two, #f8fafc);border:1px solid var(--color-border, #dbe3ee);border-radius:var(--radius-sm, 6px)}.scada-kpi-card-host{width:100%;height:100%;box-sizing:border-box}.scada-kpi-card-host .monitor-kpi-card{height:100%}.scada-alarm-widget{display:flex;flex-direction:column;min-height:0;height:100%;box-sizing:border-box;padding:10px 12px;background:inherit}.scada-alarm-widget--list{gap:8px}.scada-alarm-widget-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-shrink:0}.scada-alarm-widget-title{margin:0;font-size:13px;font-weight:600}.scada-alarm-widget-summary{font-size:12px;color:var(--color-text-muted, #64748b);white-space:nowrap}.scada-alarm-widget-placeholder{flex:1;display:flex;align-items:center;justify-content:center;min-height:72px;border:1px dashed var(--color-border, #dbe3ee);border-radius:var(--radius-sm, 6px);color:var(--color-text-muted, #64748b);font-size:12px;text-align:center;padding:12px}.scada-alarm-widget-error{font-size:12px;color:var(--color-alarm, #f71b6e)}.scada-alarm-widget-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end;justify-content:space-between;flex-shrink:0}.scada-alarm-search-form{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}.scada-alarm-date-field{display:flex;flex-direction:column;gap:4px;font-size:12px}.scada-alarm-search-input{min-width:160px}.scada-alarm-widget-toolbar-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.scada-alarm-page-size{display:inline-flex;align-items:center;gap:6px;font-size:12px}.scada-alarm-table-wrap--list{position:relative;flex:1;min-height:0}.scada-alarm-deleting{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.72);font-size:12px}.scada-alarm-col-check{width:36px}.scada-alarm-pagination{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;flex-shrink:0}.scada-alarm-pagination-actions{display:flex;flex-wrap:wrap;gap:6px}.scada-alarm-pagination-info{font-size:12px;color:var(--color-text-muted, #64748b)}.scada-runtime-error{position:absolute;left:12px;right:12px;bottom:8px;margin:0}.scada-runtime-overlay--page{padding:12px}.scada-runtime-overlay--page .scada-runtime-screen{width:min(100vw - 24px,var(--scada-screen-width, 1280px));height:min(100vh - 24px,var(--scada-screen-height, 720px));max-width:100%;max-height:100%}.scada-runtime-overlay--page-preview{display:flex;align-items:stretch;justify-content:stretch}.scada-runtime-page-preview-host{position:relative;flex:1;min-width:0;min-height:0;width:100%;height:100%;overflow:hidden;background:transparent}.studio-plant-preview-overlay--immersive{background:var(--color-bg-one, #fff)}.studio-plant-preview-overlay--immersive .studio-plant-preview-body--acceptance{flex:1;min-height:0}.studio-plant-preview-status-pill{position:fixed;top:10px;left:10px;z-index:1202;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:600;color:#92400e;background:rgba(254,243,199,.92);pointer-events:none}.studio-plant-preview-idle-hint{position:fixed;right:10px;bottom:10px;z-index:1202;padding:4px 10px;border-radius:6px;font-size:11px;color:#64748be6;background:rgba(255,255,255,.72);pointer-events:none;opacity:0;transition:opacity .2s ease}.studio-plant-preview-overlay--immersive:hover .studio-plant-preview-idle-hint{opacity:1}.scada-runtime-page-preview-host .scada-runtime-page-preview-stack,.scada-runtime-page-preview-host .scada-page-stack--fill{width:100%;height:100%}.monitor-scada-tabs{display:flex;flex-wrap:wrap;gap:6px;padding:8px 12px 0;border-bottom:1px solid var(--border-subtle, #d8dee8);background:var(--surface-raised, #f8fafc)}.monitor-scada-tab{border:1px solid var(--border-subtle, #d8dee8);border-bottom:0;border-radius:8px 8px 0 0;background:transparent;padding:8px 14px;cursor:pointer;font-size:13px}.monitor-scada-tab.is-active{background:var(--surface, #fff);font-weight:600}.scada-page-panel{flex:1;min-height:0;display:flex;overflow:auto;padding:12px;background:var(--surface-muted, #eef2f7)}.scada-page-panel--fill{position:relative;flex:1;min-height:0;width:100%;height:100%;padding:0;overflow:hidden;background:transparent}.scada-page-panel-scale{flex-shrink:0}.scada-page-panel-scale-inner{transform-origin:top left}.scada-page-panel--fill .scada-runtime-screen{margin:0;box-shadow:none;border-radius:var(--radius-md)}.monitor-layer--scada-home{flex:1;min-height:0;display:flex}.monitor-layer--scada-home .scada-page-panel{flex:1}.scada-line-canvas-host,.scada-line-canvas-placeholder,.scada-line-operate-host,.scada-line-operate-placeholder{width:100%;height:100%;min-height:0;box-sizing:border-box}.scada-line-canvas-host .line-canvas-wrap{height:100%;min-height:0}.scada-line-canvas-placeholder,.scada-line-operate-placeholder{display:flex;align-items:center;justify-content:center;border:1px dashed var(--color-border, #cbd5e1);border-radius:var(--radius-sm, 6px);background:var(--color-bg-two, #f8fafc);color:var(--color-text-muted, #64748b);font-size:12px;text-align:center;padding:8px}.scada-designer-page-frame{display:flex;align-items:stretch;box-sizing:border-box}.scada-designer-page-frame-sidebar{flex-shrink:0;display:flex;align-items:center;justify-content:center;border:1px dashed color-mix(in srgb,var(--color-primary) 35%,#94a3b8);border-radius:var(--radius-sm, 6px) 0 0 var(--radius-sm, 6px);background:color-mix(in srgb,var(--color-primary) 5%,#f1f5f9);color:var(--color-text-muted, #64748b);font-size:11px;text-align:center;padding:8px 6px;writing-mode:vertical-rl;text-orientation:mixed;pointer-events:none;user-select:none}.scada-designer-page-frame-main{flex:1;min-width:0;display:flex;flex-direction:column}.scada-designer-page-frame-banner{flex-shrink:0;display:flex;align-items:center;justify-content:center;border:1px dashed color-mix(in srgb,var(--color-primary) 35%,#94a3b8);border-bottom:none;border-radius:var(--radius-sm, 6px) var(--radius-sm, 6px) 0 0;background:color-mix(in srgb,var(--color-primary) 8%,#fff);color:var(--color-text-muted, #64748b);font-size:11px;pointer-events:none;user-select:none}.scada-designer-page-frame-content{position:relative;flex:1;min-height:0}.scada-designer-page-frame-content-label{position:absolute;top:4px;right:6px;z-index:0;font-size:10px;color:var(--color-text-muted, #94a3b8);pointer-events:none;user-select:none}.scada-designer-page-frame-content .scada-designer-screen{position:relative;z-index:1}.scada-designer-composite{position:relative;overflow:visible}.scada-designer-composite-background{position:absolute;inset:0;z-index:0;overflow:visible}.scada-designer-background-layer{position:absolute;inset:0}.scada-designer-background-layer--readonly{pointer-events:none}.scada-widget-preview-host--read-only,.scada-widget-preview-host--background-readonly{pointer-events:none;cursor:default}.scada-designer-background-readonly-hint{display:inline-flex;align-items:center;margin-right:8px;padding:4px 10px;border-radius:6px;font-size:12px;color:#64748b;background:rgba(148,163,184,.15);white-space:nowrap}.scada-designer-composite-foreground{position:absolute;z-index:1;box-sizing:border-box;overflow:visible}.scada-designer-composite-foreground .scada-designer-screen{width:100%!important;height:100%!important}.scada-designer-plant-frame{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:12px;background:var(--surface-muted, #eef2f7);overflow:hidden}.scada-designer-plant-frame-scale{position:relative;overflow:hidden;border-radius:var(--radius-md);box-shadow:0 10px 28px #0f172a1f}.scada-designer-plant-frame-inner{transform-origin:top left}.scada-designer-plant-frame-inner .studio-plant-acceptance-root{height:100%}.dev-toolbar-actions .settings-btn.is-active,.dev-toolbar-actions button.is-active{background:color-mix(in srgb,var(--color-primary) 12%,#fff);border-color:color-mix(in srgb,var(--color-primary) 35%,var(--color-border));font-weight:600}.scada-line-operate-host .monitor-operate-tiles{flex-wrap:wrap;gap:8px}.scada-line-operate-host .monitor-operate{display:flex;flex-direction:column;justify-content:center}.scada-line-operate-host .monitor-panel-title{display:none}.scada-runtime-widget--line-canvas,.scada-runtime-widget--line-operate{padding:0;background:var(--color-bg-two, #f8fafc);border:1px solid var(--color-border, #dbe3ee);border-radius:var(--radius-sm, 6px);overflow:hidden}.scada-page-panel .scada-runtime-screen{margin:0 auto;box-shadow:0 8px 24px #0f172a14}.studio-comm-driver-page,.comm-driver-panel{display:flex;flex-direction:column;gap:12px;min-height:0}.comm-driver-header{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start;justify-content:space-between}.comm-driver-header h2{margin:0 0 4px}.comm-driver-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.comm-driver-dirty{font-size:12px;color:#f59e0b}.comm-driver-tabs{display:flex;flex-wrap:wrap;gap:8px}.comm-driver-tab{padding:6px 12px;border:1px solid var(--color-border, #334155);border-radius:6px;background:transparent;color:inherit;font-size:13px;cursor:pointer}.comm-driver-tab.is-active{border-color:var(--color-primary, #568af2);background:rgb(86 138 242 / 12%)}.comm-driver-body{display:flex;flex-direction:column;gap:12px;min-height:0}.comm-driver-split{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}.comm-driver-pane,.comm-driver-tags{display:flex;flex-direction:column;gap:10px;min-width:0;padding:12px;border:1px solid var(--color-border, #334155);border-radius:8px;background:rgb(15 23 42 / 35%)}.comm-driver-pane-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.comm-driver-pane-head h3,.comm-driver-tag-test h4{margin:0;font-size:14px}.comm-driver-list{display:flex;flex-direction:column;gap:6px;max-height:220px;overflow:auto}.comm-driver-list-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 4px 4px 0;border:1px solid transparent;border-radius:6px}.comm-driver-list-select{display:flex;flex:1;align-items:center;justify-content:space-between;gap:8px;min-width:0;padding:8px 10px;border:none;border-radius:6px;background:transparent;color:inherit;text-align:left;cursor:pointer}.comm-driver-list-item.is-active{border-color:var(--color-primary, #568af2);background:rgb(86 138 242 / 10%)}.comm-driver-list-item:hover{border-color:#568af273}.comm-driver-desc-field{margin:0}.comm-driver-detail{margin-top:4px}.comm-driver-form-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.comm-driver-list-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.comm-driver-list-meta{flex-shrink:0;font-size:11px;opacity:.75}.comm-driver-form{display:grid;gap:10px}.comm-driver-form label{display:grid;gap:4px;font-size:12px}.comm-driver-form input,.comm-driver-form select,.comm-driver-table input,.comm-driver-table select{width:100%;min-width:0}.comm-driver-checkbox{display:inline-flex!important;align-items:center;gap:8px}.comm-driver-empty{margin:0;font-size:13px;opacity:.75}.comm-driver-table-wrap{overflow:auto}.comm-driver-table th,.comm-driver-table td{white-space:nowrap}.comm-driver-debug,.comm-driver-log{display:flex;flex-direction:column;gap:10px}.comm-driver-log{min-height:240px;padding:12px;border:1px solid var(--color-border, #334155);border-radius:8px}.comm-driver-editor{display:flex;flex-direction:column;gap:12px;margin-top:12px;padding-top:12px;border-top:1px solid var(--color-border, #334155)}.comm-driver-editor-head{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start;justify-content:space-between}.comm-driver-editor-head h3{margin:0 0 4px}.comm-driver-path{margin:0;font-size:12px;opacity:.75;word-break:break-all}.comm-driver-status-badge.is-online{background:rgb(34 197 94 / 18%);color:#22c55e}.comm-driver-log-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.comm-driver-log-body{margin:0;min-height:120px;padding:10px;border-radius:6px;background:rgb(2 6 23 / 55%);font-size:12px;white-space:pre-wrap}.comm-driver-tag-test-row{display:grid;grid-template-columns:minmax(120px,1fr) repeat(4,auto);gap:8px;align-items:center}.comm-driver-status-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.comm-driver-status-card{display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--color-border, #334155);border-radius:8px;background:rgb(15 23 42 / 35%)}.comm-driver-status-card header{display:flex;align-items:center;justify-content:space-between;gap:8px}.comm-driver-status-card h4{margin:0}.comm-driver-status-badge{padding:2px 8px;border-radius:999px;background:rgb(148 163 184 / 18%);font-size:11px}.comm-driver-status-card dl{display:grid;gap:6px;margin:0}.comm-driver-status-card dl div{display:flex;justify-content:space-between;gap:8px;font-size:12px}.comm-driver-status-card dt{opacity:.75}.comm-driver-status-card dd{margin:0;text-align:right}.ai-workspace{display:flex;flex-direction:column;min-height:0}.ai-workspace-toolbar{align-items:center;justify-content:space-between;gap:12px}.ai-workspace-subtitle{margin:0;flex:1;min-width:0}.ai-workspace-tabs{flex-shrink:0}.ai-workspace-body,.ai-assistant-pane,.ai-config-pane{flex:1;min-height:0;display:flex;flex-direction:column}.ai-config-pane{overflow:auto}.ai-assistant-toolbar.is-embedded{justify-content:flex-end;padding-bottom:0}.ai-assistant-page{display:flex;flex-direction:column;min-height:0}.ai-assistant-toolbar{align-items:flex-start;justify-content:space-between;gap:12px}.ai-assistant-subtitle{margin:4px 0 0;font-size:12px;opacity:.75}.ai-assistant-status{display:flex;align-items:center;gap:8px;font-size:12px;white-space:nowrap}.ai-assistant-status-dot{width:8px;height:8px;border-radius:50%;background:#94a3b8}.ai-assistant-status-dot.is-running{background:#22c55e}.ai-assistant-status-dot.is-starting{background:#eab308}.ai-assistant-status-dot.is-error{background:#ef4444}.ai-assistant-start-card{margin:12px 16px 0;display:grid;gap:10px}.ai-assistant-cmd{margin:0;padding:10px 12px;border-radius:8px;background:rgb(15 23 42 / 6%);font-size:12px}.ai-assistant-actions{display:flex;gap:8px;flex-wrap:wrap}.ai-assistant-body{flex:1;min-height:0;display:flex;flex-direction:column;padding:12px 16px 16px;gap:10px}.ai-assistant-messages{flex:1;min-height:200px;overflow:auto;border:1px solid rgb(148 163 184 / 25%);border-radius:10px;padding:12px;background:rgb(255 255 255 / 50%)}.ai-assistant-msg{margin-bottom:12px}.ai-assistant-msg-role{font-size:11px;font-weight:600;opacity:.7;margin-bottom:4px}.ai-assistant-msg-content{margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:13px;line-height:1.5}.ai-assistant-msg.is-user .ai-assistant-msg-content{color:var(--color-text, inherit)}.ai-assistant-composer{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}.ai-assistant-input{width:100%;resize:vertical;min-height:72px;padding:10px 12px;border-radius:8px;border:1px solid rgb(148 163 184 / 35%);font:inherit}.ai-assistant-toolbar-right{display:flex;flex-direction:column;align-items:flex-end;gap:8px}.ai-assistant-profile{display:flex;align-items:center;gap:8px;font-size:12px}.ai-assistant-profile select{min-width:140px}.ai-proposal-panel{display:grid;gap:10px}.ai-proposal-title{margin:0;font-size:14px}.ai-proposal-card{border:1px solid rgb(34 197 94 / 35%);border-radius:10px;padding:12px;background:rgb(34 197 94 / 6%)}.ai-proposal-card.is-invalid{border-color:#ef444466;background:rgb(239 68 68 / 6%)}.ai-proposal-card-head{display:flex;justify-content:space-between;gap:8px;margin-bottom:8px}.ai-proposal-domain{font-size:11px;opacity:.7}.ai-proposal-diff{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.ai-proposal-diff pre{margin:4px 0 0;padding:8px;border-radius:6px;background:rgb(15 23 42 / 5%);font-size:11px;overflow:auto;max-height:180px}.ai-proposal-diff-label{font-size:11px;font-weight:600;opacity:.75}.ai-proposal-actions{margin-top:10px}.ai-config-page{padding-bottom:24px}.ai-config-panel{margin:12px 16px 0;display:grid;gap:12px}.ai-config-row{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}.ai-config-row label,.ai-config-grid label{display:grid;gap:4px;font-size:12px}.ai-config-grid{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.ai-config-grid input,.ai-config-row input,.ai-config-grid select{padding:8px 10px;border-radius:6px;border:1px solid rgb(148 163 184 / 35%);font:inherit}.ai-context-usage{margin:0 16px 8px;padding:8px 12px;border-radius:8px;border:1px solid rgb(148 163 184 / 30%);background:rgb(248 250 252 / 80%)}.ai-context-usage.is-warn{border-color:#f59e0b73}.ai-context-usage.is-danger{border-color:#ef444473}.ai-context-usage-head{display:flex;justify-content:space-between;align-items:center;font-size:12px;margin-bottom:6px}.ai-context-usage-track{height:4px;border-radius:999px;background:rgb(148 163 184 / 25%);overflow:hidden}.ai-context-usage-fill{height:100%;background:var(--accent, #2563eb);transition:width .25s ease}.ai-context-usage.is-warn .ai-context-usage-fill{background:#f59e0b}.ai-context-usage.is-danger .ai-context-usage-fill{background:#ef4444}.ai-context-usage-hint{margin-top:6px;font-size:11px;color:#b45309}.ai-chat-composer{display:grid;gap:8px}.ai-chat-input-wrap{position:relative}.ai-chat-composer-actions{display:flex;gap:8px;align-items:center}.ai-chat-file-input{display:none}.ai-chat-attachments,.ai-chat-msg-attachments{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.ai-chat-attachment-chip{display:inline-flex;align-items:center;gap:6px;padding:2px 8px;border-radius:999px;font-size:11px;background:rgb(226 232 240 / 80%)}.ai-chat-attachment-chip button{border:0;background:transparent;cursor:pointer;font-size:14px;line-height:1}.ai-chat-command-menu{position:absolute;left:0;right:0;bottom:calc(100% + 4px);z-index:20;max-height:220px;overflow:auto;border-radius:8px;border:1px solid rgb(148 163 184 / 35%);background:var(--surface, #fff);box-shadow:0 8px 24px #0f172a1f}.ai-chat-command-item{width:100%;display:grid;grid-template-columns:24px 120px 1fr;gap:8px;align-items:center;padding:8px 10px;border:0;background:transparent;text-align:left;cursor:pointer;font:inherit}.ai-chat-command-item.is-active,.ai-chat-command-item:hover{background:rgb(37 99 235 / 8%)}.ai-chat-command-icon{font-weight:700;opacity:.7}.ai-chat-command-label{font-family:ui-monospace,monospace;font-size:12px}.ai-chat-command-desc{font-size:12px;opacity:.75}.ai-chat-notice{white-space:pre-wrap}.ai-markdown-body{font-size:13px;line-height:1.55;overflow-wrap:anywhere}.ai-markdown-body p,.ai-markdown-body ul,.ai-markdown-body ol,.ai-markdown-body blockquote{margin:0 0 .65em}.ai-markdown-body ul,.ai-markdown-body ol{padding-left:1.25em}.ai-markdown-body blockquote{border-left:3px solid rgb(148 163 184 / 45%);padding-left:10px;opacity:.9}.ai-inline-code{padding:1px 5px;border-radius:4px;background:rgb(226 232 240 / 80%);font-family:ui-monospace,monospace;font-size:12px}.ai-code-block{margin:.5em 0;padding:10px 12px;border-radius:8px;background:rgb(15 23 42 / 92%);color:#e2e8f0;overflow:auto;font-size:12px;line-height:1.45}.ai-code-block code{font-family:ui-monospace,monospace;white-space:pre-wrap}.ai-mermaid-block{margin:.5em 0;padding:8px;border-radius:8px;border:1px solid rgb(148 163 184 / 30%);overflow:auto}.ai-mermaid-block svg{max-width:100%;height:auto}.ai-assistant-msg-content.is-streaming{margin:0;white-space:pre-wrap;font:inherit}.ai-tool-trace{margin:8px 16px;border:1px solid rgb(148 163 184 / 30%);border-radius:8px;background:rgb(248 250 252 / 70%)}.ai-tool-trace.is-live{border-color:#2563eb59}.ai-tool-trace-toggle{width:100%;display:flex;align-items:center;gap:8px;padding:8px 12px;border:0;background:transparent;cursor:pointer;font:inherit;text-align:left}.ai-tool-trace-live-dot{width:8px;height:8px;border-radius:50%;background:#2563eb;margin-left:auto;animation:ai-pulse 1.2s ease-in-out infinite}@keyframes ai-pulse{0%,to{opacity:.35}50%{opacity:1}}.ai-tool-trace-list{display:grid;gap:8px;padding:0 12px 12px}.ai-tool-trace-item{border-radius:6px;border:1px solid rgb(148 163 184 / 25%);padding:8px 10px;background:#fff}.ai-tool-trace-item header{display:flex;justify-content:space-between;gap:8px;margin-bottom:6px;font-size:12px}.ai-tool-trace-status.is-running{color:#2563eb}.ai-tool-trace-status.is-done{color:#059669}.ai-tool-trace-status.is-error{color:#dc2626}.ai-tool-trace-args,.ai-tool-trace-result{margin:0;padding:8px;border-radius:6px;background:rgb(241 245 249 / 90%);font-size:11px;overflow:auto;max-height:160px}.ai-config-prompt-block{display:grid;gap:8px}.ai-config-prompt-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.ai-config-prompt-input{width:100%;min-height:140px;padding:10px 12px;border-radius:8px;border:1px solid rgb(148 163 184 / 35%);font:12px/1.45 ui-monospace,monospace;resize:vertical}.ai-assistant-msg .ai-tool-trace{margin:6px 0 8px}
