*{box-sizing:border-box}body{color:#a5c4f4;background-color:#12161c;height:100vh;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;overflow:hidden}.dashboard{width:100vw;height:100vh;display:flex}.sidebar{background:#141b24f2;border-right:1px solid #82afe62e;width:220px;min-width:220px;height:100vh;padding:25px 18px;overflow:hidden auto;box-shadow:8px 0 30px #00000040}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background:#141b24f2}.sidebar::-webkit-scrollbar-thumb{background:#5a6e878c;border-radius:10px}.sidebar::-webkit-scrollbar-thumb:hover{background:#6e8cafbf}.sidebar-title{text-align:center;color:#d0e2ff;letter-spacing:1px;margin-bottom:25px;font-size:1.2rem;font-weight:600}.usb-section{background:#141e2dd9;border:1px solid #6ebeff59;border-radius:14px;margin-bottom:22px;padding:14px 12px;box-shadow:0 8px 25px #00000059}.usb-title{color:#d0e2ff;letter-spacing:1px;text-align:center;text-transform:uppercase;margin-bottom:10px;font-size:.75rem;font-weight:700}.usb-row{align-items:center;gap:8px;margin-bottom:8px;display:flex}.usb-label{color:#ffffff8c;flex-shrink:0;width:38px;font-size:.7rem}.usb-select{color:#d0e2ff;cursor:pointer;background:#0a1018e6;border:1px solid #6ebeff66;border-radius:7px;outline:none;flex:1;padding:6px 8px;font-family:monospace;font-size:.72rem}.usb-select option{color:#d0e2ff;background:#12161c}.usb-select:focus{border-color:#6ebeff;box-shadow:0 0 6px #6ebeff66}.usb-status{color:#fff9;border-top:1px solid #ffffff14;align-items:center;gap:6px;margin-top:6px;padding-top:6px;font-size:.68rem;display:flex}.usb-dot{background:#555;border-radius:50%;flex-shrink:0;width:9px;height:9px;transition:background .2s}.usb-dot.connected{background:#22c55e;box-shadow:0 0 8px #22c55ecc}.usb-dot.disconnected{background:#ef4444;box-shadow:0 0 8px #ef444499}.usb-btn{color:#d0e2ff;letter-spacing:.5px;cursor:pointer;background:#2d3748cc;border:1.5px solid #6ebeff73;border-radius:9px;width:100%;margin-top:10px;padding:7px 0;font-size:.72rem;font-weight:600;transition:all .2s}.usb-btn:hover{background:#46648c99;border-color:#6ebeff;box-shadow:0 0 12px #6ebeff4d}.usb-btn:active{transform:scale(.98)}.palette-select{color:#d0e2ff;scrollbar-width:thin;scrollbar-color:#3a414a #12161c;background:#141e2dd9;border:1px solid #6ebeff4d;border-radius:7px;outline:none;width:100%;margin-bottom:7px;padding:6px}.palette-select::-webkit-scrollbar{width:8px}.palette-select::-webkit-scrollbar-track{background:#12161c}.palette-select::-webkit-scrollbar-thumb{background:#3a414a;border:2px solid #12161c;border-radius:6px}.palette-select::-webkit-scrollbar-thumb:hover{background:#505965}.component-box{text-align:center;cursor:grab;background:#2d374866;border:1.5px solid #82afe640;border-radius:14px;width:100%;min-height:75px;margin-bottom:15px;padding:12px;transition:all .2s;box-shadow:0 8px 25px #0000004d}.component-box:hover{border-color:#6ebeffa6;transform:translateY(-2px)}.component-box:active{cursor:grabbing}.component-title{color:#d0e2ff;margin-bottom:8px;font-size:1rem;font-weight:600}.component-hint{color:#ffffff73;font-size:.65rem}.workspace{flex:1;height:100vh;position:relative;overflow:hidden}.workspace-title{color:#d0e2ff;letter-spacing:.5px;z-index:20;font-size:1.15rem;font-weight:500;position:absolute;top:25px;left:25px}.real-time{text-align:right;color:#fff;font-size:16px;font-weight:600;line-height:1.5;position:absolute;top:10px;right:21px}.logic-canvas{background:#12161c73;border:1px solid #82afe61a;border-radius:18px;position:absolute;inset:55px 20px 20px;overflow:auto}.glass-card{-webkit-backdrop-filter:blur(12px);text-align:center;background:#2d374859;border:1.5px solid #82afe640;border-radius:16px;width:110px;padding:15px 20px;box-shadow:0 8px 32px #0000005e}.glass-card h3{color:#d0e2ff;letter-spacing:.5px;margin:0 0 12px;font-size:1.1rem;font-weight:500}.toggle-switch{cursor:pointer;background:#141e2d99;border:1.5px solid #6496d233;border-radius:30px;align-items:center;height:32px;padding:2px;display:flex;position:relative;overflow:hidden;box-shadow:inset 0 2px 4px #0006}.toggle-switch.disabled{cursor:default;opacity:.9}.slider{border-radius:20px;width:calc(50% - 1px);transition:transform .25s cubic-bezier(.4,0,.2,1),background-color .25s;position:absolute;top:2px;bottom:2px}.slider.off{background:#22c55e;transform:translate(0);box-shadow:0 0 10px #22c55e99}.slider.on{background:#ef4444;transform:translate(100%);box-shadow:0 0 10px #ef444499}.slider.trip{background:#ff0}.label{color:#fff6;z-index:2;text-align:center;pointer-events:none;width:50%;font-size:.65rem;font-weight:700;position:absolute}.label-off{left:0}.label-on{right:0}.label.active{color:#fff;text-shadow:0 0 5px #fff9}.label-trip{display:none!important}.label-trip.active{color:#000;background:#ff0;border-radius:4px;padding:2px 6px;display:inline-block!important}:is(.toggle-switch:has(.label-trip.active) .label-off,.toggle-switch:has(.label-trip.active) .label-on){display:none!important}.dropped-node,.plc-node{-webkit-backdrop-filter:blur(12px);cursor:move;z-index:30;text-align:center;background:#2d3748d1;border:1.5px solid #82afe659;border-radius:14px;min-width:130px;padding:12px;position:absolute;box-shadow:0 8px 25px #0006}.plc-node:hover{border-color:#6ebeffbf}.plc-node.operator-node{min-width:115px}.plc-node.do-node{min-width:130px}.plc-node.emergency-node{border-color:#ef44448c}.node-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.delete-btn{color:#ff6b6b;text-align:center;cursor:pointer;background:0 0;border:none;border-radius:50%;flex-shrink:0;width:22px;height:22px;padding:0;font-size:16px;font-weight:700;line-height:22px}.delete-btn:hover{color:#f44;background:#ff6b6b2e}.node-name{color:#d0e2ff;margin-bottom:7px;font-size:.9rem;font-weight:600}.rename-input{color:#fff;text-align:center;background:#141e2dcc;border:1px solid #6ebeff80;border-radius:5px;width:100%;padding:5px}.operator-symbol{color:#d0e2ff;font-size:1.2rem;font-weight:700}.emergency-node .node-name{color:#ff8a8a}.trace-layer{pointer-events:auto;z-index:10;width:100%;height:100%;position:absolute;inset:0}.trace-line{fill:none;stroke:#6ebeff;stroke-width:3px;stroke-linecap:round;filter:drop-shadow(0 0 5px #6ebeff80)}.trace-line.active{stroke:#22c55e;stroke-width:4px}.trace-line.selected{stroke:#fff;stroke-width:5px}.trace-hit-area{fill:none;stroke:#0000;stroke-width:10px;pointer-events:stroke;cursor:pointer}.port{cursor:crosshair;z-index:50;background:#12161c;border:3px solid #6ebeff;border-radius:50%;width:14px;height:14px;position:absolute}.port:hover{width:18px;height:18px;margin-top:-2px;box-shadow:0 0 12px #6ebeffe6}.output-port{top:50%;right:-8px;transform:translateY(-50%)}.input-port{left:-8px;transform:translateY(-50%)}.port.connected{background:#22c55e;border-color:#22c55e;box-shadow:0 0 10px #22c55eb3}.port.selected{background:#facc15;border-color:#facc15;box-shadow:0 0 14px #facc15e6}.timer-node{box-sizing:border-box;border-color:#3b82f68c;width:150px;min-width:150px;min-height:145px;padding:12px 10px;overflow:visible}.timer-node .node-name{color:#60a5fa;text-align:center;margin-bottom:4px}.timer-type{text-align:center;justify-content:center;align-items:center;gap:4px;width:100%;height:22px;margin-bottom:10px;font-size:15px;font-weight:700;display:flex}.timer-type-select,.counter-type-select,.bistable-type-select{box-sizing:border-box;color:#fff;text-align:center;cursor:pointer;background:#ffffff14;border:1px solid #ffffff2e;border-radius:5px;outline:none;width:68px;height:22px;padding:0 2px;font-size:14px;font-weight:700}.timer-type-select option,.counter-type-select option,.bistable-type-select option{color:#fff;background:#12161c}.timer-parameter{box-sizing:border-box;justify-content:space-between;align-items:center;gap:6px;width:100%;min-height:30px;margin:5px 0;padding:0;font-size:12px;display:flex}.timer-label{color:#9ca3af;flex:0 0 22px;font-weight:700}.timer-value{box-sizing:border-box;color:#fff;white-space:nowrap;background:#ffffff14;border:1px solid #ffffff2e;border-radius:5px;justify-content:center;align-items:center;width:88px;height:27px;padding:0 6px;font-size:12px;font-weight:600;display:flex}.pt-input-wrapper{box-sizing:border-box;background:#ffffff14;border:1px solid #ffffff2e;border-radius:5px;flex-shrink:0;align-items:center;width:88px;height:27px;display:flex;overflow:hidden}.pt-input{box-sizing:border-box;color:#fff;text-align:center;-moz-appearance:textfield;background:0 0;border:none;outline:none;width:42px;height:100%;padding:2px 3px;font-size:12px}.pt-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.pt-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.pt-unit-select{box-sizing:border-box;color:#fff;cursor:pointer;background:#ffffff1a;border:none;border-left:1px solid #ffffff26;outline:none;width:46px;height:100%;padding:0 2px;font-size:11px}.pt-unit-select option{color:#fff;background:#12161c}.counter-node .timer-parameter{box-sizing:border-box;grid-template-columns:60px 70px;align-items:center;column-gap:6px;width:100%;min-height:30px;margin:5px 0;padding:0;display:grid}.counter-node .timer-label{text-align:left;white-space:nowrap;width:75px}.counter-node .pt-input-wrapper{box-sizing:border-box;justify-content:center;align-items:center;width:65px;height:27px;display:flex}.counter-node .pt-input{text-align:center;width:100%;height:100%}.counter-node .timer-value{justify-content:center;align-items:center;width:65px;height:27px;display:flex}.counter-type{text-align:center;justify-content:center;align-items:center;gap:4px;width:100%;height:22px;margin-bottom:10px;font-size:15px;font-weight:700;display:flex}.bistable-node{box-sizing:border-box;border-color:#3b82f68c;width:150px;min-width:150px;min-height:125px;padding:12px 10px;overflow:visible}.bistable-node .node-name{color:#60a5fa;text-align:center;margin-bottom:8px}.bistable-info{color:#9ca3af;text-align:center;margin-top:5px;font-size:11px;font-weight:600}.comparator-node{width:180px;min-width:180px;min-height:180px}.comparator-node .timer-parameter{box-sizing:border-box;grid-template-columns:48px 76px;align-items:center;column-gap:6px;width:130px;min-height:30px;margin:5px auto;padding:0;display:grid}.comparator-node .timer-label{text-align:left;white-space:nowrap;width:48px;font-size:11px}.comparator-node .pt-input-wrapper{box-sizing:border-box;justify-content:center;align-items:center;width:76px;height:27px;display:flex}.comparator-node .pt-input{text-align:center;width:100%;height:100%}.comparator-type-select{box-sizing:border-box;color:#fff;text-align:center;cursor:pointer;background:#ffffff14;border:1px solid #ffffff2e;border-radius:5px;outline:none;width:76px;height:27px;padding:0 4px;font-size:11px}.comparator-type-select option{color:#fff;background:#12161c}.operator-input-count{box-sizing:border-box;color:#fff;text-align:center;cursor:pointer;background:#ffffff14;border:1px solid #ffffff2e;border-radius:5px;outline:none;width:76px;height:22px;margin:4px auto 8px;padding:0 1px;font-size:12px;font-weight:700;display:block}.operator-input-count option{color:#fff;background:#12161c}.do-feedback-node{box-sizing:border-box;text-align:center;width:145px;min-height:95px;padding:10px}.do-feedback-node .node-name{margin-bottom:5px;font-size:13px;font-weight:600}.do-feedback-node .component-hint{opacity:.8;margin-bottom:7px;font-size:11px}.do-feedback-node .contact-select{background:inherit;width:58px;height:25px;color:inherit;text-align:center;cursor:pointer;border:1px solid #ffffff2e;border-radius:6px;outline:none;padding:2px 5px;font-size:11px}.do-feedback-node .contact-select option{color:#fff;background:#12161c}.timer-feedback-node{box-sizing:border-box;border-color:#3b82f68c;width:150px;min-width:150px;min-height:145px;padding:12px 10px;overflow:visible}.timer-feedback-node .node-name{color:#60a5fa;text-align:center;margin-bottom:8px}.timer-feedback-timer{text-align:center;color:#fff;width:100%;margin-bottom:5px;font-size:13px;font-weight:700}.timer-feedback-type{text-align:center;color:#9ca3af;width:100%;margin-bottom:10px;font-size:12px;font-weight:600}.timer-feedback-select,.timer-feedback-contact{box-sizing:border-box;color:#fff;text-align:center;cursor:pointer;background:#ffffff14;border:1px solid #ffffff2e;border-radius:5px;outline:none;width:100%;height:27px;margin-bottom:6px;padding:0 6px;font-size:12px;font-weight:600}.timer-feedback-select option,.timer-feedback-contact option{color:#fff;background:#12161c}.connection-help{color:#ffffff73;z-index:40;pointer-events:none;font-size:11px;position:absolute;bottom:8px;left:50%;transform:translate(-50%)}.usb-overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:200;color:#d0e2ff;text-align:center;background:#0a0e14eb;border:1px solid #6ebeff40;border-radius:18px;flex-direction:column;justify-content:center;align-items:center;padding:30px;display:none;position:absolute;inset:55px 20px 20px}.usb-overlay h2{letter-spacing:1px;color:#d0e2ff;margin-bottom:6px;font-weight:500}.usb-overlay p{color:#ffffff80;max-width:400px;margin-bottom:24px;font-size:.85rem}.usb-overlay .big-btn{color:#d0e2ff;letter-spacing:1px;cursor:pointer;background:#2d3748e6;border:2px solid #6ebeff;border-radius:12px;padding:12px 36px;font-size:1rem;font-weight:600;transition:all .2s;box-shadow:0 0 20px #6ebeff40}.usb-overlay .big-btn:hover{background:#466ea0cc;transform:translateY(-1px);box-shadow:0 0 30px #6ebeff80}.usb-overlay .big-btn:active{transform:scale(.98)}.json-section{gap:8px;margin-bottom:22px;display:flex}.json-section .usb-btn{margin-top:0}.json-modal{z-index:1000;background:#000000a6;justify-content:center;align-items:center;display:none;position:fixed;inset:0}.json-modal.open{display:flex}.json-box{background:#151b24;border:1px solid #6ebeff66;border-radius:14px;flex-direction:column;width:min(760px,92vw);height:min(620px,88vh);padding:18px;display:flex;box-shadow:0 10px 40px #0009}.json-box h3{color:#d0e2ff;margin:0 0 10px;font-weight:600}.json-text{resize:none;color:#9fd0ff;white-space:pre;background:#0b1017;border:1px solid #6ebeff4d;border-radius:8px;outline:none;flex:1;width:100%;padding:10px;font-family:Consolas,monospace;font-size:12px}.json-actions{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.json-actions .usb-btn{width:auto;margin-top:0;padding:7px 14px}.json-msg{color:#22c55e;min-height:16px;margin-top:8px;font-size:12px}.json-msg.error{color:#ef4444}
