.student-start{color:#1e3548;background:#fff;border:1px solid #dce6ee;border-radius:14px;margin:12px 22px 0;padding:17px 20px;box-shadow:0 3px 20px #1e354808}.student-start-heading,.student-route{justify-content:space-between;align-items:center;gap:15px;display:flex}.student-start-heading strong,.student-route strong{font-size:16px}.student-start-heading p,.student-route p{color:#62778b;margin:8px 0 0;line-height:1.8}.student-start-heading small{color:#62778b;white-space:nowrap}.student-start-choices{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:15px;display:grid}.student-start-choice{text-align:right;border-radius:12px;flex-direction:column;align-items:flex-start;gap:9px;padding:16px;display:flex}.student-start-choice>span{color:#008ab9;background:#e8f7fd;border-radius:9px;place-items:center;width:32px;height:32px;font-size:22px;display:grid}.student-start-choice strong{font-size:13px}.student-start-choice small{color:#62778b;line-height:1.9}.student-route-status{color:#236a81;background:#f1f8fb;border-radius:9px;margin-top:12px;padding:10px 12px}.student-start-foot{color:#365c71;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-top:12px;display:flex}.student-start-foot small{color:#7e8e9a}@media (width<=720px){.student-start-choices{grid-template-columns:1fr}.student-start-heading,.student-route{flex-direction:column;align-items:flex-start}}.equipment{color:#284353;text-align:center;direction:rtl;background:linear-gradient(90deg,#e7edf0 0%,#fff 7% 93%,#e2e9ec 100%);border:1px solid #bfcdd5;border-radius:10px;width:220px;height:218px;transition:box-shadow .15s,border-color .15s;position:relative;box-shadow:0 5px 12px #29435312}.equipment:hover{border-color:#80bfd4;box-shadow:0 9px 24px #215a7220}.equipment.chosen{border:2px solid #00a0dc;box-shadow:0 0 0 4px #00a0dc19,0 10px 24px #1c729320}.equipment-top{border-bottom:1px solid #d6e2e8;justify-content:space-between;align-items:center;height:42px;padding:10px 16px;display:flex}.brand-mini{letter-spacing:1px;color:#435f70;font-family:Arial,sans-serif;font-size:9px}.brand-mini b{color:#1b9ec7}.model-code{background:var(--equipment-accent);color:#fff;border-radius:4px;padding:3px 7px;font-size:10px}.equipment-face{height:143px;padding:10px 20px 0}.equipment h3{text-overflow:ellipsis;white-space:nowrap;max-width:175px;margin:1px 0 4px;font-size:12px;overflow:hidden}.equipment p{color:#708693;margin:0;font-size:9px}.equipment-foot{color:#6b818f;border-top:1px solid #dbe5e9;justify-content:space-around;align-items:center;gap:4px;height:32px;font-size:8px;display:flex;position:absolute;bottom:0;left:0;right:0}.relay-symbol{direction:ltr;margin:20px 0;font-family:monospace;font-size:20px}.relay-symbol small{color:#718c9b;font:8px Arial;display:block}.rocker{direction:ltr;background:#f3f6f7;border:1px solid #d1dbe1;border-radius:7px;gap:4px;width:86px;height:46px;margin:12px auto;padding:5px;display:flex}.rocker span{color:#90a0a9;background:#fff;border:1px solid #dce4e9;border-radius:3px;flex:1;place-items:center;display:grid}.ac-symbol{color:#bd834b;font-size:36px;line-height:1.3}.ac-symbol small{font-size:8px;display:block}.bulb{color:#899da5;background:#f4f6f6;border-radius:50%;width:62px;margin:8px auto;font-size:39px;line-height:1.2}.bulb.lit{color:#b88b13;background:#fff2b3;box-shadow:0 0 30px #f8d55e88}.bulb small{padding-bottom:4px;font:9px Arial;display:block}.terminal-label{pointer-events:none;color:#4c6575;direction:ltr;background:#f9fcfd;border-radius:3px;padding:2px 4px;font:9px Consolas,monospace;position:absolute}.terminal-label.left{left:12px}.terminal-label.right{right:12px}.terminal-pin{cursor:crosshair;z-index:4;border:3px solid #fff;border-radius:50%;width:15px;height:15px;position:absolute;box-shadow:0 0 0 1px #8fa7b6}.terminal-pin:hover{box-shadow:0 0 0 5px #00a0dc35}.storm-canvas{width:100%;height:100%;position:relative;overflow:hidden}.storm-canvas .node{cursor:grab}.storm-port{z-index:8;cursor:crosshair;width:15px;height:15px;position:absolute}.storm-port .port{background:var(--port-color);border:3px solid #fff;border-radius:50%;width:15px;height:15px;box-shadow:0 0 0 1px #90a9b6}.storm-port:hover .port{box-shadow:0 0 0 5px #00a0dc35}.storm-canvas svg{overflow:visible}.storm-canvas .srd-diagram{width:100%;height:100%}.react-flow__handle{border:3px solid #fff!important;width:15px!important;height:15px!important}.react-flow__edge.selected .react-flow__edge-path{filter:drop-shadow(0 0 3px #00a0dc50);stroke:#00a0dc!important;stroke-width:4px!important}.react-flow__edge:hover .react-flow__edge-path{stroke-width:4px}.react-flow__attribution{font-size:8px}.react-flow__node{background:0 0;border:0}.react-flow__controls{display:none}.equipment.junction{height:270px}.junction-rails{fill:none;stroke-width:2.5px;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.equipment.junction .terminal-label.right{right:8px}.equipment.junction .terminal-label.left{left:8px}:root{color:#1e3548;font-synthesis:none;--accent:#00a0dc;--muted:#62778b;--line:#dce6ee;background:#f3f7fa;font-family:Tahoma,Segoe UI,sans-serif;font-size:13px}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{cursor:pointer;border:1px solid var(--line);color:#244456;background:#fff;border-radius:8px;padding:9px 12px;transition:background .12s,box-shadow .12s}button:hover{background:#edfaff;border-color:#85d4ee}button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline-offset:3px;outline:3px solid #00a0dc}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.danger{color:#b63f53;border-color:#f0cbd1}header{border-bottom:1px solid var(--line);background:#fff;justify-content:space-between;align-items:center;height:82px;padding:0 28px;display:flex}.identity{align-items:center;gap:12px;display:flex}.logo{background:var(--accent);color:#fff;border-radius:12px;place-items:center;width:44px;height:44px;font-size:28px;font-weight:700;display:grid}.identity strong{letter-spacing:-1px;direction:ltr;font-size:22px;display:block}.identity strong span{color:var(--accent)}.identity small{color:var(--muted);margin-top:4px;display:block}.header-status{color:#597585;align-items:center;gap:8px;font-size:12px;display:flex}.header-status b{border-right:1px solid var(--line);color:#177fa5;direction:ltr;margin-right:12px;padding-right:18px}.offline-dot{background:#2da980;border-radius:50%;width:8px;height:8px}.toolbar{border-bottom:1px solid var(--line);background:#fbfdfe;flex-wrap:wrap;align-items:center;gap:8px;padding:12px 24px;display:flex}.tool-divider{border-right:1px solid var(--line);height:22px;margin:0 5px}.counts{color:var(--muted);margin-inline-start:auto;font-size:12px}.studio-grid{grid-template-columns:252px minmax(380px,1fr) 260px;gap:16px;min-height:640px;padding:18px 22px;display:grid}.catalog,.properties{border:1px solid var(--line);background:#fff;border-radius:14px;align-self:start;padding:20px 16px}.catalog h2,.properties h2{margin:6px 0 12px;font-size:16px}.section-eyebrow{letter-spacing:1.8px;color:#1296c2;direction:ltr;font-size:9px;font-weight:700;display:block}.catalog p,.properties p{color:var(--muted);font-size:11px;line-height:1.9}.catalog-item{text-align:right;border-radius:11px;align-items:center;gap:10px;width:100%;margin:12px 0;padding:13px 10px;display:flex;box-shadow:0 3px 14px #29445906}.catalog-item>span{color:#fff;border-radius:6px;flex-shrink:0;place-items:center;width:35px;height:43px;font-size:12px;font-weight:700;display:grid}.catalog-item div{flex:1}.catalog-item strong{font-size:11px;display:block}.catalog-item small{color:var(--muted);text-align:right;margin-top:6px;font-size:9px;display:block}.catalog-item>b{color:#6ba2b7;font-size:17px}.illustrative{color:#526c7e;background:#f0f9fc;border:1px solid #d5edf6;border-radius:10px;margin-top:28px;padding:12px;font-size:10px;line-height:2}.canvas-panel{border:1px solid var(--line);background:#fff;border-radius:14px;flex-direction:column;min-width:0;display:flex;overflow:hidden}.canvas-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;padding:18px 20px;display:flex}.canvas-heading h1{margin:5px 0 0;font-size:18px}.grid-label{letter-spacing:1px;color:#738a9b;direction:ltr;font-size:8px}.canvas{direction:ltr;background-color:#f8fbfd;background-image:radial-gradient(#c9dbe5 1px,#0000 1px);background-size:20px 20px;height:610px;min-height:420px;position:relative;overflow:hidden}.canvas-tools{border-top:1px solid var(--line);background:#fff;align-items:center;gap:6px;padding:9px 14px;display:flex}.canvas-tools button{padding:5px 10px}.canvas-tools span{color:var(--muted);margin-inline-start:auto;font-size:9px}.properties label{color:#536b7a;margin:12px 0;font-size:11px;display:block}.properties input:not([type=checkbox]),.properties select{color:#213f51;background:#fbfdfe;border:1px solid #cddde7;border-radius:7px;width:100%;min-width:0;margin-top:6px;padding:9px 7px;display:block}.properties select{max-width:100%;font-size:10px}.properties>button{width:100%;margin:5px 0}.position-fields{direction:ltr;gap:8px;display:flex}.position-fields label{width:50%}.property-spec{color:#6b8091;background:#f4f8fb;border-radius:8px;padding:10px;font-size:11px}.empty-inspector{color:#72899a;text-align:center;border:1px dashed #d2e0e8;border-radius:10px;padding:18px;font-size:11px;line-height:2.1}.empty-inspector span{color:#b6d1dd;font-size:42px;display:block}.section-divider{background:var(--line);height:1px;margin:22px 0}.properties h3{font-size:12px}.relay-control{background:#eaf8fe;border-radius:8px;padding:12px;line-height:2}.relay-control small{font-size:9px;display:block}.wire-list{text-align:right;width:100%;margin-top:6px;font-size:10px}.properties details{margin-top:20px}.validation-panel{border:1px solid var(--line);background:#fff;border-radius:12px;margin:0 22px 24px;padding:14px 18px}.validation-badge{color:#2e6d81;background:#eef7f9;border-radius:6px;padding:7px 10px;font-size:11px;display:inline-block}.validation-badge.bad{color:#b4534b;background:#fff0ee}.live-message{color:#4d687c;margin-right:18px;font-size:12px}.validation-body{color:#637e8e;grid-template-columns:1fr 1fr;gap:15px;font-size:11px;line-height:1.8;display:grid}.validation-body ul,.validation-body ol{padding-right:18px}.json-dialog{z-index:99;background:#fff;border:1px solid #b9dbea;border-radius:14px;width:88vw;height:90vh;position:fixed;inset:4vh 6vw;box-shadow:0 15px 90px #223d6c40}.json-dialog pre{text-align:left;background:#f5f8fa;height:85%;padding:20px;font-size:12px;overflow:auto}.json-dialog button{float:left}summary{cursor:pointer;line-height:2}@media (width<=1150px){.studio-grid{grid-template-columns:210px minmax(320px,1fr)}.properties{grid-column:1/-1;display:block}.canvas{height:580px}.grid-label{display:none}}@media (width<=720px){header{flex-wrap:wrap;gap:16px;height:auto;min-height:80px;padding:16px}.studio-grid{flex-direction:column;gap:12px;padding:12px;display:flex}.catalog{grid-template-columns:1fr 1fr;gap:8px;width:100%;display:grid}.catalog h2,.catalog>p,.catalog>.section-eyebrow,.illustrative{grid-column:1/-1}.catalog-item{margin:0}.illustrative{margin-top:4px}.properties{width:100%}.canvas{height:520px}.toolbar{gap:6px;padding:10px}.toolbar button{font-size:11px}.validation-panel{margin:0 12px 18px}.validation-body{grid-template-columns:1fr}.canvas-tools span{display:none}.live-message{margin:10px 0;display:block}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}.online-projects,.online-projects form{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.online-projects{border-bottom:1px solid var(--line);background:#fbfdfe;padding:10px 24px}.online-projects input,.online-projects select{border:1px solid var(--line);border-radius:8px;max-width:100%;padding:8px}.online-projects output{overflow-wrap:anywhere;direction:ltr}.react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#555;--xy-background-pattern-lines-color-default:#333;--xy-background-pattern-cross-color-default:#333;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}.d7-node{box-sizing:content-box;direction:ltr;border:0;outline:none;position:relative}.d7-node .actuator{direction:ltr;width:100%;height:100%;font-family:Arial,sans-serif;display:block;overflow:visible}.d7-node .terminal{pointer-events:none}.d7-node .terminal-highlight{transition:opacity .1s}.d7-node .wire-handle{z-index:15;cursor:crosshair;border-radius:50%;background:0 0!important;border:2px solid #0000!important;width:26px!important;min-width:26px!important;height:26px!important;min-height:26px!important}.d7-node .wire-handle:hover,.d7-node .wire-handle:focus-visible{outline:none;box-shadow:0 0 0 4px #00a0dc33;border-color:#3bcaff!important}.wire-handle.compatible{box-shadow:0 0 0 5px #65bda65c;border-color:#149975!important}.wire-handle.connectingto.valid{box-shadow:0 0 0 7px #3bcaff66}.terminal-magnifier{pointer-events:none;z-index:40;color:#42687b;background:#fff;border:1px solid #69c4e5;border-radius:10px;width:260px;padding:10px;font-size:11px;position:absolute;bottom:105%;left:0;box-shadow:0 6px 30px #163a4930}.terminal-magnifier>div{background:#eaf2f7;border-radius:6px;height:120px;margin:6px 0;overflow:hidden}.terminal-magnifier .actuator{width:100%;height:100%;overflow:hidden}.terminal-magnifier code{font-size:10px}.canvas{height:700px}.react-flow__edge-updater{fill:#fff;stroke:#00a0dc;stroke-width:1.5px}.react-flow__edge-path{stroke-linejoin:round;stroke-linecap:round}.toolbar select{color:#476d82;background:#fff;border:1px solid #cde0e9;border-radius:7px;padding:8px}.react-flow__handle:focus-visible{outline-offset:3px;outline:3px solid #00a0dc}.properties input[type=range]{padding:0!important}.canvas-heading{min-height:80px}.wire-handle{background:0 0!important;border:0!important;width:0!important;min-width:0!important;height:0!important;min-height:0!important;padding:0!important}.wire-handle:after{content:"";background:#718ca0;border:3px solid #fff;border-radius:50%;width:15px;height:15px;position:absolute;top:0;left:0;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #86a6b8}.d7-node .wire-handle{border:0!important;width:0!important;min-width:0!important;height:0!important;min-height:0!important}.d7-node .wire-handle:after{width:26px;height:26px;box-shadow:none;background:0 0;border:2px solid #0000}.d7-node .wire-handle:hover:after,.d7-node .wire-handle:focus-visible:after{border-color:#3bcaff;box-shadow:0 0 0 4px #00a0dc33}.wire-handle.compatible:after,.d7-node .wire-handle.compatible:after{border-color:#149975;box-shadow:0 0 0 5px #65bda65c}.wire-handle:after{background:var(--pin-color,#718ca0)}.d7-node .wire-handle:after{background:0 0}.react-flow__edgeupdater{cursor:crosshair}.psu-node{box-sizing:border-box;direction:ltr;border:0;outline:none;position:relative}.psu-node .psu{direction:ltr;width:100%;max-width:none;height:100%;display:block;overflow:visible}.psu-node.chosen{outline-offset:4px;border-radius:12px;outline:2px solid #00a0dc}.psu-node .wire-handle{z-index:15;cursor:crosshair;background:0 0!important;border:0!important;width:0!important;min-width:0!important;height:0!important;min-height:0!important;padding:0!important}.psu-node .wire-handle:after{content:"";background:var(--pin-color,#718ca0);border:2px solid #fff;border-radius:50%;width:14px;height:14px;position:absolute;top:0;left:0;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #86a6b8}.psu-node .wire-handle:hover:after,.psu-node .wire-handle:focus-visible:after{border-color:#3bcaff;box-shadow:0 0 0 4px #00a0dc33}.psu-node .wire-handle.disabled:after{opacity:.45;background:#93a1aa;border-color:#eef3f6}.psu-node .wire-handle.disabled{cursor:not-allowed}.psu-node .wire-handle.compatible:after{border-color:#149975;box-shadow:0 0 0 5px #65bda65c}.psu-magnifier{width:230px;left:50%;transform:translate(-50%)}.psu-magnifier p{color:#5b7a8b;margin:4px 0;font-size:11px}.d4-node{box-sizing:content-box;direction:ltr;border:0;outline:none;flex-direction:column;display:flex;position:relative}.d4-switch{flex:none;width:100%;position:relative}.d4-switch .d4{direction:ltr;width:100%;height:100%;display:block;overflow:visible}.d4-node.chosen{outline-offset:4px;border-radius:10px;outline:2px solid #00a0dc}.d4-node .wire-handle{z-index:15;cursor:crosshair;background:0 0!important;border:0!important;width:0!important;min-width:0!important;height:0!important;min-height:0!important;padding:0!important}.d4-node .wire-handle:after{content:"";background:var(--pin-color,#718ca0);border:2px solid #fff;border-radius:50%;width:12px;height:12px;position:absolute;top:0;left:0;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #86a6b8}.d4-node .wire-handle:hover:after,.d4-node .wire-handle:focus-visible:after{border-color:#3bcaff;box-shadow:0 0 0 3px #00a0dc33}.d4-node .wire-handle.compatible:after{border-color:#149975;box-shadow:0 0 0 4px #65bda65c}.d4-connector{pointer-events:none;background:linear-gradient(#0a0f13,#070a0d);border-top:1px solid #27333c;border-radius:0 0 8px 8px;flex:auto;font-family:Tahoma,sans-serif;position:relative}.conn-label{letter-spacing:1px;color:#8fb0bf;font-size:9px;position:absolute;top:50%;right:4%;transform:translateY(-50%)}.conn-note{color:#4f6572;font-size:8px;position:absolute;top:50%;left:4%;transform:translateY(-50%)}.conn-port{color:#8aa6b5;white-space:nowrap;pointer-events:none;padding-top:15px;font-size:9px;position:absolute;transform:translate(-50%,-7px)}.conn-port:before{content:"";background:#0d151a;border:2px solid #3d5563;border-radius:50%;width:13px;height:13px;position:absolute;top:0;left:50%;transform:translate(-50%)}.conn-port.on{color:#bff6ff}.conn-port.on:before{background:#5fe8ff;border-color:#bff6ff;box-shadow:0 0 8px #5fe8ff66}.d4-zone-chip{color:#8fe3ff;pointer-events:none;background:#04222f;border:1px solid #00a0dc;border-radius:6px;padding:2px 6px;font-family:Tahoma,sans-serif;font-size:9px;position:absolute;top:1.5%;left:2%}.react-flow:has(.react-flow__edge.selected) .react-flow__nodes{pointer-events:none}.d4-prog-chip{z-index:20;color:#9fb6c3;pointer-events:none;white-space:nowrap;background:#0a1116e6;border:1px solid #4a5a64;border-radius:6px;padding:2px 7px;font-family:Tahoma,sans-serif;font-size:9px;position:absolute;top:1.5%;right:2%}.d4-prog-chip.unknown{color:#e2b766;background:#1d1709e6;border-color:#7a5c22}.d4-prog-chip.pending{color:#8fe3ff;background:#04222fe6;border-color:#00a0dc}.d4-prog-chip.on{color:#ffb3b3;background:#2a0d10e6;border-color:#b8343b}.d4-prog-chip.off{color:#9fe0b5;background:#0c1d14e6;border-color:#2f7d4f}.d4-prog-chip.demo{color:#9fb6c3;background:#0a1116e6;border-color:#4a5a64}.d4-prog-chip.live{color:#9fe0b5;background:#0c1d14e6;border-color:#2f7d4f}.live-bar{color:#b9ceda;z-index:50;background:#101820;border-bottom:1px solid #223040;flex-wrap:wrap;align-items:center;gap:14px;padding:8px 22px;font-size:11px;display:flex;position:sticky;top:0}.live-bar label{align-items:center;gap:6px;display:flex}.live-bar input[type=password]{color:#dbe7ee;background:#0b1117;border:1px solid #2c3d4a;border-radius:6px;width:260px;padding:5px 8px;font-family:monospace}.live-bar button{color:#cfe6f2;cursor:pointer;background:#13202b;border:1px solid #2c3d4a;border-radius:6px;padding:5px 10px;font-size:11px}.live-badge{color:#e2b766;background:#1d1709;border:1px solid #7a5c22;border-radius:999px;padding:3px 9px}.live-badge.on{color:#ffb3b3;background:#2a0d10;border-color:#b8343b}.live-hint{color:#6f8795;font-size:10px}.d4-group-panel{z-index:25;color:#bfe3f4;cursor:default;background:#07131be6;border:1px solid #2f5d74;border-radius:7px;width:52%;padding:5px 7px;font-family:Tahoma,sans-serif;font-size:8px;position:absolute;bottom:11%;left:2%}.d4-group-title{color:#8fb9cc;margin-bottom:3px;font-size:7px;line-height:1.5}.d4-group-actions{gap:4px;margin-bottom:2px;display:flex}.d4-group-actions button{color:#bfe3f4;cursor:pointer;background:#0b1d28;border:1px solid #2f5d74;border-radius:4px;flex:1;padding:2px 0;font-family:Tahoma,sans-serif;font-size:8px}.d4-group-actions button.on{color:#9fe0b5;background:#0d2a1c;border-color:#46b37a}.d4-group-status{color:#e2b766;font-size:7px}.d4-group-status[data-state=on],.d4-group-status[data-state=off]{color:#9fe0b5}.d4-group-status[data-state=pending]{color:#8fe3ff}.training-drawer{inset-inline-end:14px;z-index:80;direction:rtl;background:#fff;border:1px solid #d8dee8;border-radius:16px;flex-direction:column;width:390px;max-width:calc(100vw - 28px);font-family:inherit;display:flex;position:fixed;top:104px;bottom:16px;overflow:auto;box-shadow:0 18px 50px #0c192d38}.training-head{color:#fff;background:#0f1b2d;justify-content:space-between;gap:10px;padding:14px 16px;display:flex}.training-head span{letter-spacing:.12em;color:#8fb3d9;margin-bottom:4px;font-size:10px;display:block}.training-head strong{font-size:13px;line-height:1.8}.training-head button{color:#fff;cursor:pointer;background:0 0;border:0;font-size:22px}.training-mode{padding:7px 16px;font-size:11px;font-weight:700}.training-mode.live{color:#146c43;background:#e7f6ed}.training-mode.demo{color:#8a5a00;background:#fff4df}.training-progress{color:#4a5b70;grid-template-columns:1fr auto;gap:4px 8px;padding:10px 16px;font-size:11px;display:grid}.training-progress b{color:#0b63ce}.training-progress div{background:#eef2f7;border-radius:4px;grid-column:1/-1;height:5px;overflow:hidden}.training-progress i{background:#0b63ce;height:100%;transition:width .2s;display:block}.training-steps{border-bottom:1px solid #edf0f5;gap:2px;margin:0;padding:6px 10px;list-style:none;display:grid}.training-steps button{width:100%;font:inherit;color:#40536a;cursor:pointer;text-align:right;background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;padding:6px 8px;font-size:11px;display:flex}.training-steps button span{background:#eef2f7;border-radius:50%;place-items:center;width:18px;height:18px;font-size:10px;display:grid}.training-steps button.done span{color:#fff;background:#1f9d55}.training-steps button.current{color:#0b4da2;background:#eef5ff;font-weight:700}.training-body{padding:12px 16px 18px}.training-body h3{color:#12233a;margin:0 0 6px;font-size:14px}.training-body p{color:#4b5e75;margin:0 0 10px;font-size:11.5px;line-height:1.9}.training-fact{background:#f8fafc;border:1px solid #dbe3ee;border-radius:9px;margin:8px 0;padding:9px 10px;font-size:11px;line-height:1.8}.training-fact.ok{color:#146c43;background:#f0fbf4;border-color:#b7e2c8}.training-fact.bad{color:#8a5a00;background:#fff8ee;border-color:#f0cfae}.training-fact small,.training-warning{color:#67788d;margin-top:5px;font-size:10px;line-height:1.7;display:block}.training-table{border:1px solid #e1e7f0;border-radius:10px;margin:8px 0;font-size:11px;overflow:hidden}.training-table>div{border-bottom:1px solid #eef2f7;grid-template-columns:44px 1fr 1.4fr;gap:6px;padding:7px 9px;display:grid}.training-table b{color:#0b4da2}.training-table span{color:#3f536b}.training-warning{color:#7a5200;background:#fff4df;border-radius:8px;margin:8px 0;padding:8px 9px;font-size:10.5px;line-height:1.8}.training-check{color:#2b405a;align-items:flex-start;gap:8px;margin:10px 0;font-size:11px;line-height:1.7;display:flex}.training-check input{margin-top:3px}.training-nav{gap:8px;margin-top:12px;display:flex}.training-nav button{font:inherit;cursor:pointer;background:#fff;border:1px solid #cfd8e5;border-radius:8px;flex:1;padding:8px;font-size:11px}.training-nav button.primary{color:#fff;background:#0b63ce;border-color:#0b63ce}.training-nav button:disabled{opacity:.45;cursor:not-allowed}.training-load{color:#0b4da2;font:inherit;cursor:pointer;background:#f3f8ff;border:1px solid #0b63ce;border-radius:8px;margin:8px 0;padding:8px 10px;font-size:11px}.training-gate{color:#8a5a00;margin-top:8px;font-size:10px;display:block}@media (width<=760px){.training-drawer{inset-inline-end:10px;width:calc(100vw - 20px);top:92px;bottom:10px}}.ets-badge{color:#40536a;background:#f3f6fa;border:1px solid #dfe6ef;border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px;margin:0 16px 8px;padding:7px 9px;font-size:10.5px;display:flex}.ets-badge b{color:#0b4da2}.ets-badge.verified{background:#edf9f1;border-color:#b7e2c8}.ets-badge.verified b{color:#146c43}.ets-badge.invalid{background:#fff4df;border-color:#f0cfae}.ets-badge.unverified{background:#fff9ed}.ets-badge small{color:#67788d;text-overflow:ellipsis;white-space:nowrap;max-width:180px;font-size:9px;overflow:hidden}.training-file{color:#40536a;margin:10px 0;font-size:10.5px;line-height:1.8;display:block}.training-file input{max-width:100%;margin-top:5px;font-size:10px;display:block}.ets-record{color:#3f536b;background:#fbfdff;border:1px dashed #c7d4e5;border-radius:9px;margin:7px 0;padding:8px 10px;font-size:10px;line-height:1.9}.ets-record>div{flex-wrap:wrap;justify-content:space-between;gap:8px;display:flex}.ets-record ul{color:#9a3b1b;margin:5px 0;padding-inline-start:16px}.ets-record .ok{color:#146c43}.ets-record code{font-size:9px}.training-warning code{text-align:left;word-break:break-all;color:#3a4d64;direction:ltr;background:#fff;border-radius:5px;margin-top:4px;padding:5px;display:block}.evidence-grid{grid-template-columns:1fr;gap:3px;margin:0 16px 8px;font-size:9.5px;display:grid}.evidence-grid>div{background:#f7f9fc;border:1px solid #e2e9f2;border-radius:7px;flex-direction:column;gap:2px;padding:5px 7px;display:flex}.evidence-grid span{color:#67788d}.evidence-grid b{color:#17324f;font-size:10px}.evidence-grid b.ok{color:#146c43}.evidence-grid b.warn{color:#8a5a00}.ets-badge.self{background:#eef5ff;border-color:#c9dcf5}.ets-badge.self b{color:#0b4da2}.ets-badge.project{background:#f3f6fa}.ets-compare{background:#f7fbff;border:1px solid #c9dcf5;border-radius:9px;margin:8px 0;padding:8px 10px;font-size:10px;line-height:1.8}.ets-compare-head{flex-direction:column;gap:2px;margin-bottom:5px;display:flex}.ets-compare-head small{color:#5d7087;word-break:break-all;font-size:9px}.ets-row{border-top:1px solid #e5eef8;grid-template-columns:78px 1fr auto;align-items:center;gap:6px;padding:4px 0;display:grid}.ets-row code{color:#17324f;word-break:break-all;font-size:9px}.ets-row b{color:#146c43;font-size:9px}.ets-row.mismatch b,.ets-row.invalid b{color:#9a3b1b}.ets-row.not-found b,.ets-row.unverified b,.ets-row.warn b{color:#8a5a00}.ets-compare>small{color:#67788d;margin-top:5px;display:block}.ets-row.wide{grid-template-columns:78px 1fr}.ets-row.wide b{color:#40536a;text-align:left;font-weight:600}.ets-workshop{background:#fcfdff;border:1px solid #dbe3ee;border-radius:9px;margin:8px 0;padding:8px 10px}.ets-workshop-head{justify-content:space-between;margin-bottom:4px;font-size:10.5px;display:flex}.ets-workshop-head b{color:#17324f}.ets-workshop-head small{color:#8a5a00}.ets-workshop .training-check{margin:5px 0;font-size:10px}.dimming-objects{background:#edf5fa;border-radius:5px;gap:4px;width:75%;margin:4px auto;padding:5px;font-size:9px;display:grid}.dimming-objects time{overflow-wrap:anywhere;direction:ltr;font-size:8px}.equipment.d0,.equipment.dimLamp{min-height:215px}.brightness-meter{accent-color:#00a0dc;width:100%;height:.65rem}.equipment.d2,.equipment.shutter,.equipment.blinds{min-height:260px}.covering-face{color:#234b5d;justify-items:center;gap:4px;font-size:10px;display:grid}.covering-face svg{width:86px;height:80px}.covering-face time{color:#3f6375;font-size:8px}
