*,*::before,*::after{box-sizing:border-box}
:root{
  --bg:#0b0e14;--panel:#11151f;--card:#0d1119;--border:#232a38;
  --text:#cfd6e4;--muted:#67718a;--input:#0d1119;--btn:#1c2433;--btnh:#243049;
  --accent:#2962ff;--accent-hover:#1e53e5;--accent-soft:rgba(41,98,255,0.12);
  --green:#26a69a;--red:#ef5350;--orange:#ff9800;--purple:#9c27b0;--yellow:#f0b90b;
  --radius:8px;--radius-sm:4px;--radius-lg:12px;
  --panel-width:340px;--font-base:13px;--font-small:11px;--font-tiny:10px;
  --axis-x:26px;--col-w:76px;
}
body.light{
  --bg:#eef1f5;--panel:#fff;--card:#f7f8fa;--border:#d8dde6;
  --text:#1c2330;--muted:#667085;--input:#fff;--btn:#e7ebf2;--btnh:#d9dfea;
}
html,body{margin:0;height:100%;width:100%;background:var(--bg);color:var(--text);font:var(--font-base)/1.4 system-ui,Arial;overflow:hidden}
button{font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:inherit;color:var(--text);background:var(--input);border:1px solid var(--border);border-radius:var(--radius-sm);padding:3px 6px;outline:none}
input:focus,select:focus{border-color:var(--accent)}
input[type=color]{padding:0;height:24px;cursor:pointer;background:transparent}
input[type=range]{accent-color:var(--accent)}
input[type=checkbox]{accent-color:var(--accent);cursor:pointer}
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}

/* AUTH */
#authOverlay{position:fixed;inset:0;background:var(--bg);z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center}
#authOverlay .auth-box{background:var(--panel);padding:24px;border-radius:var(--radius-lg);border:1px solid var(--border);width:320px}
#authOverlay input{width:100%;margin-bottom:12px;padding:10px}
#authOverlay .auth-btn{width:100%;padding:10px;background:var(--accent);color:#fff;border:none;border-radius:var(--radius-sm);cursor:pointer;font-weight:bold;font-size:14px}
#authOverlay .auth-btn:hover{background:var(--accent-hover)}
#authOverlay .auth-error{color:var(--red);font-size:12px;margin-top:8px;text-align:center}
#authOverlay .auth-link{display:block;text-align:center;margin-top:16px;color:var(--muted);font-size:11px;text-decoration:none}

/* APP */
#app{display:none;flex-direction:column;height:100vh;width:100vw}

/* RIBBON */
.ribbon{background:var(--panel);border-bottom:1px solid var(--border);user-select:none;flex-shrink:0}
.ribbon-tabs{display:flex;align-items:stretch;height:36px;padding:0 8px}
.ribbon-tab{padding:0 14px;font-size:12px;font-weight:500;color:var(--muted);display:flex;align-items:center;gap:5px;border-bottom:2px solid transparent;transition:all .2s;white-space:nowrap}
.ribbon-tab:hover{color:var(--text);background:var(--btnh)}
.ribbon-tab.active{color:var(--accent);border-bottom-color:var(--accent);background:var(--accent-soft)}
.ribbon-collapse{margin-left:auto;padding:0 10px;color:var(--muted);display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm)}
.ribbon-collapse:hover{color:var(--text);background:var(--btnh)}
.ribbon-collapse svg{width:14px;height:14px;transition:transform .25s}
.ribbon-collapse.collapsed svg{transform:rotate(180deg)}
.ribbon-content{height:0;overflow:hidden;background:var(--panel);border-bottom:1px solid var(--border);transition:height .28s cubic-bezier(.4,0,.2,1)}
.ribbon-content.open{height:90px}
.ribbon-inner{display:flex;align-items:center;padding:8px 14px;gap:8px;height:90px;overflow-x:auto}
/* лента «Вид»: секция настроек (тема, сетка, магнит, подсветка точек) */
#rib-view.open{height:auto;max-height:min(52vh,440px)}
#rib-view .ribbon-inner{height:auto;max-height:inherit;align-items:flex-start;overflow-y:auto}
#viewSettingsBox{width:340px;flex:0 0 auto;margin:0}
#rib-view label{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:4px 0;font-size:var(--font-small);color:var(--muted)}
#rib-view input[type=number]{width:100px}
#rib-view hr{border:none;border-top:1px solid var(--border);margin:8px 0}
.ribbon-group{display:flex;flex-direction:column;align-items:center;gap:4px;padding:0 12px;border-right:1px solid var(--border);flex-shrink:0}
.ribbon-group:last-child{border-right:none}
.ribbon-group-label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-top:auto;white-space:nowrap}
.ribbon-group-items{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:center}
.rib-btn{display:flex;flex-direction:column;align-items:center;gap:2px;padding:5px 7px;border-radius:var(--radius-sm);min-width:48px;transition:all .15s;font-size:10px;color:var(--muted)}
.rib-btn:hover{background:var(--btnh);color:var(--text)}
.rib-btn.active{background:var(--accent-soft);color:var(--accent)}
.rib-btn svg{width:18px;height:18px}
.rib-btn span{white-space:nowrap}
.tf-btn{padding:3px 8px;border-radius:var(--radius-sm);font-size:11px;color:var(--muted);transition:all .15s;font-weight:500}
.tf-btn:hover{color:var(--text);background:var(--btnh)}
.tf-btn.active{color:var(--accent);background:var(--accent-soft)}

/* MAIN AREA */
.main-area{display:flex;flex:1;min-height:0}
#leftcol{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}
#hint{padding:2px 10px;font-size:var(--font-tiny);color:var(--muted);background:var(--card);border-bottom:1px solid var(--border);white-space:nowrap;overflow:hidden;flex-shrink:0}
#wrap{flex:1;position:relative;min-height:0;overflow:hidden}
#chart{position:absolute;inset:0;cursor:crosshair}
#statusbar{padding:4px 10px;background:var(--panel);border-top:1px solid var(--border);font-family:ui-monospace,Consolas,monospace;font-size:var(--font-small);color:var(--muted);white-space:nowrap;overflow:hidden;flex-shrink:0;line-height:1.6}

/* PANEL TABS */
#panel-tabs{display:flex;border-bottom:1px solid var(--border);flex-shrink:0}
.ptab{flex:1;padding:7px 8px;text-align:center;font-size:11px;font-weight:500;color:var(--muted);border:none;background:transparent;cursor:pointer;border-bottom:2px solid transparent;transition:all var(--transition)}
.ptab:hover{color:var(--text);background:var(--btnh)}
.ptab.active{color:var(--accent);border-bottom-color:var(--accent);background:var(--accent-soft)}

/* RIGHT PANEL — KEY FIX */
#panel{
  width:var(--panel-width);
  max-width:35vw;
  min-width:280px;
  background:var(--panel);
  border-left:1px solid var(--border);
  flex-shrink:0;
  display:flex;
  flex-direction:column;
  overflow:hidden;
}
#panel-scroll{
  flex:1;
  overflow-y:auto;
  overflow-x:hidden;
  padding:10px;
  scrollbar-width:thin;
}
#panel-scroll::-webkit-scrollbar{width:6px}
#panel-scroll::-webkit-scrollbar-track{background:transparent}
#panel-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
#panel-scroll::-webkit-scrollbar-thumb:hover{background:var(--muted)}

#panel label{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:4px 0;font-size:var(--font-small);color:var(--muted)}
#panel input[type=number]{width:100px}
#panel select{width:100%}
#panel .row{display:flex;gap:6px;margin:6px 0}
#panel .row button{flex:1}
#panel hr{border:none;border-top:1px solid var(--border);margin:8px 0}
details{margin:5px 0;border:1px solid var(--border);border-radius:6px;padding:5px 8px;background:var(--card)}
summary{cursor:pointer;font-size:var(--font-base);color:var(--text);outline:none}
button.panel-btn{background:var(--btn);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);padding:4px 10px;cursor:pointer;white-space:nowrap}
button.panel-btn:hover{background:var(--btnh)}
button.panel-btn.active{background:#0e4d64;border-color:#00e5ff;color:#eaffff}
button.panel-btn.feed-active{background:#006400;border-color:#00ff00;color:#00ff00;animation:feedPulse 1s ease-in-out infinite}
button.panel-btn.debug-active{background:#8b0000;border-color:#ff0000;color:#ff0000}
@keyframes feedPulse{0%,100%{opacity:1}50%{opacity:.7}}

/* TF ROW */
.tfrow{display:flex;gap:5px;align-items:center;font-size:var(--font-small);flex-wrap:wrap;padding:4px 5px;border-bottom:1px solid var(--border)}
.tfrow:last-child{border-bottom:none}
.tfrow .dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.tfrow b{width:38px}
.tfrow label{margin:0;gap:3px;font-size:var(--font-tiny);justify-content:flex-start;color:var(--muted)}
.tfrow .mainRadio{accent-color:#00e5ff}
.tfrow.active{background:rgba(0,229,255,.06)}

/* ZZ GRID */
.zzgrid{display:grid;grid-template-columns:1fr 1fr;gap:3px 8px;font-size:var(--font-tiny);color:var(--muted)}
.zzgrid label{margin:2px 0;font-size:var(--font-tiny)}

/* HIER INFO */
.hierLevelInfo{margin:3px 0;padding:4px 8px;background:rgba(255,255,255,.03);border-radius:4px;border:1px solid transparent}
.hierLevelInfo[open]{border-color:#2b3a55}
.hierLevelInfo .angleInfo{font-size:var(--font-tiny);color:var(--muted);font-family:ui-monospace,monospace;margin-top:3px;line-height:1.5}
.zlineChecks{display:flex;gap:10px;margin-top:4px;align-items:center;flex-wrap:wrap}
.zlineChecks label{margin:0;gap:4px;font-size:var(--font-tiny);color:#ffd700;font-weight:600;justify-content:flex-start}
.zlineChecks label.mode{color:#9ad0ff}
.zlineChecks label.coeff{color:#7ee787}
.zlineChecks label.gann{color:#ffa500}
.statsBlock{font-size:9px;color:#7ee787;margin:2px 0 4px;padding:3px 6px;background:rgba(126,231,135,.06);border-radius:4px;line-height:1.5}
.statsBlock b{color:#9ad0ff}

/* SNAP POINTS */
.snap-points-list{max-height:300px;overflow-y:auto;font-size:10px;font-family:ui-monospace,monospace;margin-top:10px}
.snap-point-item{padding:6px 8px;margin:3px 0;background:var(--card);border-radius:4px;cursor:pointer;border-left:3px solid var(--highlight-color,#ff0000);transition:background .2s}
.snap-point-item:hover{background:var(--btnh)}
.snap-point-item .point-type{color:var(--highlight-color,#ff0000);font-weight:bold;font-size:11px}
.snap-point-item .point-coords{color:var(--muted);font-size:9px}
.snap-point-item .point-screen{color:#00e5ff;font-size:9px;margin-top:1px}

/* LINE RATIO */
.lineRatioBlock{margin:4px 0;font-size:var(--font-small)}
.ratioValue{color:#7ee787;font-weight:600;font-family:ui-monospace,monospace}

/* OBJECT TREE */
.obj-group{margin-bottom:4px}
.obj-group-header{display:flex;align-items:center;gap:5px;padding:4px 6px;border-radius:var(--radius-sm);cursor:pointer;font-size:11px;font-weight:600;color:var(--text);transition:background .1s;user-select:none}
.obj-group-header:hover{background:var(--btnh)}
.obj-group-header .chevron{width:10px;height:10px;transition:transform .2s;color:var(--muted);flex-shrink:0}
.obj-group-header.collapsed .chevron{transform:rotate(-90deg)}
.obj-group-header .count{margin-left:auto;font-size:9px;color:var(--muted);background:var(--btn);padding:1px 5px;border-radius:8px}
.obj-group-items{overflow:hidden;transition:max-height .25s}
.obj-group-items.collapsed{max-height:0!important}
.obj-item{display:flex;align-items:center;gap:4px;padding:3px 6px 3px 18px;border-radius:var(--radius-sm);cursor:pointer;font-size:11px;color:var(--text);transition:background .1s;border-left:2px solid transparent}
.obj-item:hover{background:var(--btnh)}
.obj-item.selected{background:var(--accent-soft);color:var(--accent);border-left-color:var(--accent)}
.obj-item .obj-icon{width:12px;height:12px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:10px}
.obj-item .obj-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.obj-item .obj-actions{display:flex;gap:1px;opacity:0;transition:opacity .15s}
.obj-item:hover .obj-actions{opacity:1}
.obj-act{width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;color:var(--muted);font-size:9px;cursor:pointer}
.obj-act:hover{background:var(--btnh);color:var(--text)}
.obj-act.del{color:var(--red)}
.obj-act.del:hover{background:rgba(239,83,80,.15)}

/* OBJECT PROPERTIES */
.prop-section{margin-bottom:10px}
.prop-section-title{font-size:10px;color:var(--accent);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;font-weight:600;padding-bottom:4px;border-bottom:1px solid var(--border)}
.prop-row{display:flex;align-items:center;justify-content:space-between;padding:3px 0;gap:6px}
.prop-label{font-size:11px;color:var(--muted);flex-shrink:0}
.prop-val{display:flex;align-items:center;gap:4px}
.prop-val input[type=color]{width:28px;height:20px;padding:0;border:1px solid var(--border);border-radius:3px;cursor:pointer;background:transparent}
.prop-val input[type=number]{width:60px;padding:2px 4px;font-size:11px}
.prop-val input[type=text]{width:100px;padding:2px 4px;font-size:11px}
.prop-val select{padding:2px 4px;font-size:11px}
.prop-actions{display:flex;gap:4px;margin-top:8px;padding-top:6px;border-top:1px solid var(--border)}
.prop-btn{flex:1;padding:4px;border:1px solid var(--border);background:var(--btn);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;font-size:10px;text-align:center}
.prop-btn:hover{background:var(--btnh)}
.prop-btn.danger{color:var(--red);border-color:rgba(239,83,80,.3)}
.prop-btn.danger:hover{background:rgba(239,83,80,.1)}

/* MOBILE */
#togglePanel{display:none;position:absolute;top:10px;right:10px;z-index:101;background:var(--btn);border:1px solid var(--border);border-radius:6px;width:36px;height:36px;align-items:center;justify-content:center;cursor:pointer;font-size:18px;padding:0}
#togglePanel:hover{background:var(--btnh)}
@media(max-width:767px){
  :root{--panel-width:min(320px,85vw)}
  #panel{position:absolute;right:0;top:0;bottom:0;z-index:100;box-shadow:-4px 0 12px rgba(0,0,0,.5);transform:translateX(100%);max-width:none}
  #panel.open{transform:translateX(0)}
  #togglePanel{display:flex!important}
}
@media(max-width:480px){
  :root{--font-base:11px;--axis-x:20px;--col-w:52px}
  .ribbon-inner{padding:4px 8px;gap:4px}
  .rib-btn{padding:4px 5px;min-width:40px}
}
