:root{--bg: #0e1015;--panel: #161922;--panel2: #1a1e29;--border: #262b38;--text: #dfe4ee;--dim: #8b93a5;--accent: #4f8cff;--danger: #e05561}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:Segoe UI,system-ui,-apple-system,sans-serif;font-size:13px;overflow:hidden}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:8px;padding:7px 12px;background:var(--panel);border-bottom:1px solid var(--border);flex-wrap:wrap}.brand{font-weight:700;font-size:15px;letter-spacing:.4px;margin-right:4px;white-space:nowrap}.brand-mark{color:var(--accent)}.scheme-name{width:220px;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:5px 9px;font-size:12.5px}.scheme-name:focus{outline:none;border-color:var(--accent)}.tabs{display:flex;background:var(--bg);border:1px solid var(--border);border-radius:7px;overflow:hidden}.tab{background:none;border:none;color:var(--dim);padding:6px 16px;font-size:12.5px;cursor:pointer}.tab.active{background:var(--accent);color:#fff;font-weight:600}.tb-group{display:flex;gap:4px;align-items:center;padding:0 4px;border-left:1px solid var(--border)}.tb-spacer{flex:1}.btn{background:var(--panel2);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:5px 10px;font-size:12px;cursor:pointer;white-space:nowrap}.btn:hover:not(:disabled){border-color:var(--accent)}.btn:disabled{opacity:.4;cursor:default}.btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.btn.small{font-size:11.5px;padding:4px 9px}.btn.danger{color:var(--danger)}.btn.danger:hover{border-color:var(--danger)}.btn.lang{font-weight:700}.mini{background:none;border:1px solid var(--border);border-radius:4px;color:var(--dim);width:20px;height:20px;cursor:pointer;line-height:1}.mini.danger:hover{color:var(--danger);border-color:var(--danger)}.main{flex:1;display:grid;grid-template-columns:218px 1fr 272px;min-height:0}.panel{background:var(--panel);overflow-y:auto;padding:10px}.palette{border-right:1px solid var(--border)}.inspector{border-left:1px solid var(--border)}.panel-title{font-weight:700;font-size:13px;margin-bottom:8px}.canvas-wrap{position:relative;min-width:0;min-height:0}.canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none}.beam-label{paint-order:stroke;stroke:#101218;stroke-width:3px;font-family:Segoe UI,system-ui,sans-serif}.pal-search{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:5px 9px;font-size:12px;margin-bottom:8px}.pal-search:focus{outline:none;border-color:var(--accent)}.pal-found-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex:none;margin:0 11px}.pal-section{margin-bottom:10px}.pal-cat{color:var(--dim);font-size:10.5px;text-transform:uppercase;letter-spacing:.6px;margin:6px 0 4px}.pal-item{display:flex;align-items:center;gap:8px;width:100%;background:none;border:1px solid transparent;border-radius:7px;color:var(--text);padding:3px 6px;font-size:12px;cursor:pointer;text-align:left}.pal-item:hover{background:var(--panel2)}.pal-item.active{border-color:var(--accent);background:#4f8cff1f}.pal-item svg{flex:none}.pal-tpl-row{display:flex;align-items:center;gap:4px}.pal-tpl-row .pal-item{flex:1}.pal-tpl-del{background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px;padding:2px 5px}.pal-tpl-del:hover{color:var(--danger)}.pal-hint{color:var(--dim);font-size:11px;line-height:1.45;border-top:1px solid var(--border);padding-top:8px;margin-top:6px}.section{border-top:1px solid var(--border);padding:9px 0}.section:first-of-type{border-top:none}.section h4{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);margin-bottom:6px}.field{display:flex;align-items:center;gap:8px;margin-bottom:6px}.field label{flex:1;color:var(--dim);font-size:11.5px;line-height:1.25}.field input,.field select{width:108px;background:var(--bg);border:1px solid var(--border);border-radius:5px;color:var(--text);padding:4px 7px;font-size:12px}.field input:focus,.field select:focus{outline:none;border-color:var(--accent)}.hint{color:var(--dim);font-size:11.5px;line-height:1.5}.pre{white-space:pre-line}.dim{color:var(--dim)}.row-gap{display:flex;gap:6px;flex-wrap:wrap}.iorow{display:flex;gap:8px;align-items:flex-start;margin-bottom:5px}.port-chip{flex:none;font-size:10px;padding:2px 7px;border-radius:9px;border:1px solid;margin-top:1px}.port-chip.in{color:#58b7ff;border-color:#2b5a80}.port-chip.out{color:#ffb454;border-color:#7d5a2b}.iobeams{flex:1;font-size:11.5px}.beam-line{display:flex;align-items:center;gap:6px;margin-bottom:2px;white-space:nowrap}.custom-out{border:1px solid var(--border);border-radius:7px;padding:7px 8px;margin-bottom:7px}.custom-out-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px;font-size:12px}.legend{position:absolute;left:12px;bottom:12px;background:#161922eb;border:1px solid var(--border);border-radius:9px;padding:8px 12px;min-width:130px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.legend-title{font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);margin-bottom:5px}.legend-row{display:flex;align-items:center;gap:7px;font-size:12px;margin-bottom:3px}.legend-dot{width:10px;height:10px;border-radius:50%;flex:none}.legend-tag{font-size:9px;color:var(--dim);border:1px solid var(--border);border-radius:7px;padding:1px 5px}.legend-dot.big{width:13px;height:13px;cursor:pointer}.legend-pick{position:relative;display:inline-flex;cursor:pointer}.legend-pick input[type=color]{position:absolute;inset:0;opacity:0;width:100%;height:100%;cursor:pointer}.legend-overridden{text-decoration:underline dotted;text-underline-offset:3px}.legend-reset{background:none;border:none;color:var(--dim);cursor:pointer;font-size:12px;padding:0 3px}.legend-reset:hover{color:var(--danger)}.legend-hint{color:var(--dim);font-size:9.5px;margin-top:4px}.pol-tag{font-size:9.5px;color:var(--dim);border:1px solid var(--border);border-radius:7px;padding:0 5px;margin-left:2px}.crumbs{position:absolute;top:10px;left:12px;display:flex;align-items:center;gap:2px;background:#161922eb;border:1px solid var(--border);border-radius:8px;padding:4px 8px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.crumb{background:none;border:none;color:var(--accent);font-size:12px;cursor:pointer;padding:2px 4px}.crumb:disabled{color:var(--text);font-weight:600;cursor:default}.crumb-sep{color:var(--dim);font-size:10px}.news-banner{position:absolute;top:10px;right:12px;display:flex;align-items:center;gap:8px;background:#262c1af2;border:1px solid #6d7a2b;border-radius:8px;padding:6px 10px;font-size:12px;z-index:5}.btn.accent{background:var(--accent);border-color:var(--accent);color:#fff}.btn.srv-on{border-color:#3f7d4e;color:#7fd191}.modal-back{position:fixed;inset:0;background:#05070a99;display:flex;align-items:center;justify-content:center;z-index:20}.modal{width:min(980px,94vw);max-height:86vh;overflow-y:auto;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:10px}.modal-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.auth-form{max-width:340px;margin:10px auto 20px;display:flex;flex-direction:column;gap:8px}.field-v{display:flex;flex-direction:column;gap:3px}.field-v label{color:var(--dim);font-size:11.5px}.field-v input,.mgr-add input,.members-box input,.mgr-save input,.comment-add textarea{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:6px 9px;font-size:12.5px;width:100%}.field-v input:focus,.comment-add textarea:focus{outline:none;border-color:var(--accent)}.err-line{color:var(--danger);font-size:12px}.mgr-cols{display:grid;grid-template-columns:230px 1fr 280px;gap:12px;min-height:380px}.mgr-col{border:1px solid var(--border);border-radius:9px;padding:9px;overflow-y:auto;max-height:62vh}.mgr-col h4{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);margin-bottom:7px}.mgr-row{display:flex;flex-direction:column;gap:3px;width:100%;text-align:left;background:none;border:1px solid transparent;border-radius:7px;color:var(--text);padding:6px 8px;font-size:12.5px;cursor:pointer;margin-bottom:4px}.mgr-row:hover{background:var(--panel2)}.mgr-row.active{border-color:var(--accent);background:#4f8cff1a}.mgr-row.linked{border-left:3px solid #3f7d4e}.mgr-row .scheme-line{display:flex;gap:6px;align-items:center}.chip{font-size:9px;color:#7fd191;border:1px solid #3f7d4e;border-radius:7px;padding:1px 6px}.chip.lab{color:#d9a53f;border-color:#8a6a2b}.lab-port-head{display:flex;align-items:center;gap:6px}.lab-port-row{display:flex;gap:4px;margin-bottom:4px}.lab-port-row input{flex:1;min-width:0;background:var(--bg);border:1px solid var(--border);border-radius:5px;color:var(--text);padding:3px 6px;font-size:11.5px}.lab-port-row select{width:72px;background:var(--bg);border:1px solid var(--border);border-radius:5px;color:var(--text);font-size:11px;padding:3px}.lab-port-status{font-size:11px}.free-tag{color:#7fd191;border:1px solid #3f7d4e;border-radius:7px;padding:0 6px;font-size:10px}.load-line{font-size:11.5px;color:#e8c46d;border:1px solid #6d5a2b;border-radius:7px;padding:4px 8px;margin-bottom:7px}.acc{border-top:1px solid var(--border)}.acc-head{display:flex;align-items:center;gap:7px;width:100%;background:none;border:none;color:var(--dim);padding:9px 2px;font-size:11px;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;text-align:left}.acc-head:hover,.acc.open .acc-head{color:var(--text)}.acc-arrow{font-size:9px;width:9px;flex:none}.acc-title{flex:1}.acc-badge{font-size:10px;text-transform:none;letter-spacing:0;color:var(--dim);border:1px solid var(--border);border-radius:8px;padding:1px 7px;white-space:nowrap}.acc-body{padding:0 0 11px}.acc-body>.section:first-of-type{border-top:none;padding-top:0}.calib-card{border:1px solid var(--border);border-radius:8px;padding:8px;margin-bottom:8px}.calib-head{display:flex;align-items:center;gap:6px;margin-bottom:6px}.calib-empty{color:var(--dim);font-size:11.5px;background:var(--bg);border-radius:6px;padding:14px 10px;text-align:center;margin-bottom:6px}.calib-work{display:flex;align-items:center;gap:6px;font-size:12px;margin-bottom:5px;flex-wrap:wrap}.calib-work-in{width:66px;background:var(--bg);border:1px solid var(--accent);border-radius:5px;color:var(--text);padding:3px 6px;font-size:12px}.calib-arrow{color:var(--dim)}.calib-val{color:#7fd191}.calib-out{color:#e0a34c}.calib-warn{color:#e0a34c;font-size:10.5px;margin-bottom:5px}.calib-point-head{font-size:10px}.calib-point-head span{width:72px}.calib-chart{display:block;margin:2px 0 6px;background:var(--bg);border-radius:6px}.calib-name{flex:1;min-width:0;background:var(--bg);border:1px solid var(--border);border-radius:5px;color:var(--text);padding:3px 6px;font-size:11.5px;margin-right:6px}.calib-result{font-size:12px;color:#7fd191;display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:5px}.calib-result.warn{color:#e0a34c}.calib-apply{margin-left:auto;background:var(--bg);border:1px solid var(--border);border-radius:5px;color:var(--text);font-size:11px;padding:2px 4px;max-width:130px}.calib-fit{font-size:10.5px;margin-bottom:5px}.calib-actions{align-items:center}.calib-meta{font-size:10px;margin-left:auto}.calib-points{display:flex;flex-direction:column;gap:3px;margin:6px 0;max-height:160px;overflow-y:auto}.calib-point{display:flex;gap:4px;align-items:center}.lab-level-in{width:76px;flex:none}.calib-point input{width:72px;background:var(--bg);border:1px solid var(--border);border-radius:5px;color:var(--text);padding:2px 5px;font-size:11px}.calib-paste,.calib-add{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:5px 7px;font-size:11.5px;margin-top:6px;font-family:inherit;resize:vertical}.calib-add{margin-top:4px}.spark{display:block;margin:2px 0 6px}.meas-list{display:flex;flex-direction:column;gap:2px;margin-bottom:8px;max-height:150px;overflow-y:auto}.meas-row{display:flex;align-items:center;gap:5px;font-size:11.5px;white-space:nowrap}.meas-note{overflow:hidden;text-overflow:ellipsis}.meas-del{margin-left:auto;flex:none}.delta{font-size:10.5px;border-radius:7px;padding:1px 6px;border:1px solid var(--border);white-space:nowrap}.delta.down{color:#e0a34c;border-color:#7d5a2b}.delta.up{color:#7fd191;border-color:#3f7d4e}.delta.flat{color:var(--dim)}.meas-table{width:100%;border-collapse:collapse;font-size:12px}.meas-table th{text-align:left;color:var(--dim);font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;padding:4px 8px;border-bottom:1px solid var(--border)}.meas-table td{padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:top}.meas-table .dim{font-size:10.5px}.admin-star{color:#ffd35c}.mini.warn{color:#ffd35c;border-color:#7d6a2b}.tb-select{background:var(--panel2);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:5px 6px;font-size:12px}.tb-select:focus{outline:none;border-color:var(--accent)}.mgr-add,.mgr-save{display:flex;gap:6px;margin-top:6px}.mgr-save{margin-bottom:8px}.members-box{margin-top:12px;border-top:1px solid var(--border);padding-top:8px}.member-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;padding:2px 0}.comment-list{display:flex;flex-direction:column;gap:7px;max-height:30vh;overflow-y:auto;margin-bottom:7px}.comment{background:var(--panel2);border-radius:7px;padding:6px 8px;font-size:12px;white-space:pre-wrap;word-break:break-word}.comment-add{display:flex;flex-direction:column;gap:5px}.history-row{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--dim);padding:2px 0}.admin-panel{padding:4px 2px 10px}.admin-panel h4{font-size:11px;text-transform:uppercase;color:var(--dim);margin-bottom:6px}.invite-row,.user-row{display:flex;gap:10px;align-items:center;justify-content:space-between;font-size:12.5px;padding:3px 0;border-bottom:1px dashed var(--border)}.invite-row code{color:#7fd191;font-size:13px;-webkit-user-select:all;user-select:all}.user-disabled{opacity:.45;text-decoration:line-through}::-webkit-scrollbar{width:9px}::-webkit-scrollbar-thumb{background:#2a3040;border-radius:5px}::-webkit-scrollbar-track{background:transparent}
