@font-face{
  font-family:"Monaspace Krypton";
  src:url("/static/fonts/MonaspaceKrypton-Regular.otf") format("opentype");
  font-weight:400;font-style:normal;
}
@font-face{
  font-family:"Monaspace Krypton";
  src:url("/static/fonts/MonaspaceKrypton-Bold.otf") format("opentype");
  font-weight:700;font-style:normal;
}

:root{
  --nord0:#2E3440; --nord1:#3B4252; --nord2:#434C5E; --nord3:#4C566A;
  --nord4:#D8DEE9; --nord5:#E5E9F0;
  --frost:#88C0D0;                 /* единственный акцент */
  --nord9:#81A1C1; --nord10:#5E81AC;
  --red:#BF616A; --orange:#D08770; --amber:#EBCB8B; --green:#A3BE8C; --purple:#B48EAD;
  --ok-plate:#1A2E1A; --bad-plate:#2E1A1A; --warn-plate:#2E2A1A;
  --mono:"Monaspace Krypton",monospace;
}

*{margin:0;padding:0;box-sizing:border-box;border-radius:0}
html,body{height:100%}
body{
  font-family:var(--mono);background:var(--nord0);color:var(--nord4);
  font-size:13px;line-height:1.5;overflow:hidden;display:flex;flex-direction:column;
}
button,input,select{font-family:var(--mono)}
::selection{background:var(--frost);color:var(--nord0)}

.hidden{display:none!important}

/* ───── скроллбары: тонкие, квадратные ───── */
::-webkit-scrollbar{width:7px;height:7px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--nord2)}
::-webkit-scrollbar-thumb:hover{background:var(--nord3)}
html{scrollbar-color:var(--nord2) transparent}

/* ───── верхняя плашка: акцентная линия + бар ───── */
.top-accent{height:2px;background:var(--frost);flex:none}
.topbar{
  height:48px;flex:none;background:var(--nord1);border-bottom:1px solid var(--nord2);
  display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 16px;
}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.brand-mark{color:var(--frost);font-weight:700;font-size:14px;letter-spacing:1px}
.brand h1{font-size:13px;font-weight:700;letter-spacing:3px;color:var(--nord4);white-space:nowrap}
.brand-sub{font-size:11px;color:var(--nord4);white-space:nowrap}
.header-controls{display:flex;gap:6px;align-items:center;flex-wrap:wrap}

/* ───── поля ввода ───── */
select,input[type=number]{
  background:var(--nord0);color:var(--nord4);border:1px solid var(--nord3);
  padding:5px 8px;font-size:12px;outline:none;height:28px;
}
select:focus,input[type=number]:focus{border-color:var(--frost);box-shadow:0 0 0 1px var(--frost)}

/* ───── кнопки ───── */
.btn{
  border:1px solid var(--nord3);background:var(--nord1);color:var(--nord4);
  padding:6px 12px;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
  cursor:pointer;white-space:nowrap;transition:background 90ms,color 90ms,border-color 90ms;
}
.btn:hover{background:var(--nord2)}
.btn.primary{background:var(--nord9);border-color:var(--nord9);color:var(--nord0)}
.btn.primary:hover{background:var(--nord10);border-color:var(--nord10)}
.btn.primary:disabled,.btn.ghost:disabled{
  opacity:.38;cursor:default;background:var(--nord0);color:var(--nord3);border-color:var(--nord3);
}
.btn.ghost{background:transparent;border:1px solid var(--nord3);color:var(--frost)}
.btn.ghost:hover{background:var(--nord2)}
.btn.small{padding:3px 8px;font-size:9px}
.btn-icon{
  width:28px;height:28px;background:var(--nord0);color:var(--nord4);border:1px solid var(--nord3);
  cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:11px;
  transition:background 90ms,color 90ms;
}
.btn-icon:hover{background:var(--nord2);color:var(--frost)}

button:focus-visible,select:focus-visible,input:focus-visible,a:focus-visible{
  outline:1px solid var(--frost);outline-offset:1px;
}

/* ───── строка ошибки: красная плашка, прямой текст ───── */
.error-bar{
  position:fixed;top:56px;left:50%;transform:translateX(-50%);z-index:50;
  background:var(--bad-plate);color:var(--red);border:1px solid var(--red);
  padding:7px 14px;font-size:12px;max-width:80%;text-align:center;
}

/* ───── каркас страницы ───── */
.main-layout{flex:1;display:flex;min-height:0}
.sidebar{
  flex:0 0 288px;min-width:288px;background:var(--nord1);border-right:1px solid var(--nord2);
  overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:10px;
}
.content{flex:1;min-width:0;display:flex;flex-direction:column;gap:10px;padding:14px 16px;overflow-y:auto}

/* ───── панели: жёсткие плашки с шапкой ───── */
.panel{background:var(--nord1);border:1px solid var(--nord2);padding:12px}
.panel h3{
  margin:-12px -12px 11px;padding:7px 12px;background:var(--nord2);border-bottom:1px solid var(--nord3);
  color:var(--frost);font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;
}
.param-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;gap:10px}
.param-row:last-child{margin-bottom:0}
.param-row label{font-size:11px;color:var(--nord4);letter-spacing:.3px;white-space:nowrap}
.param-row input,.param-row select{width:116px;flex:none}

/* ───── шапка визуализации ───── */
.viz-header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.view-tabs{display:flex;gap:0;border:1px solid var(--nord3)}
.view-tab{
  background:var(--nord1);border:none;border-right:1px solid var(--nord3);
  padding:6px 14px;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
  color:var(--nord4);cursor:pointer;transition:color 90ms,background 90ms;
}
.view-tab:last-child{border-right:none}
.view-tab:hover{color:var(--frost)}
.view-tab.active{background:var(--frost);color:var(--nord0)}
#time-display{font-size:12px;color:var(--nord4)}
#active-count{font-size:12px;color:var(--green)}
.viz-toggle{display:flex;align-items:center;gap:6px;font-size:10px;letter-spacing:1px;color:var(--nord4);cursor:pointer;text-transform:uppercase;font-weight:700}
.viz-toggle input{accent-color:var(--frost);cursor:pointer}
.png-group{display:flex;gap:6px}

/* ───── сцена (карта/глобус) ───── */
.map-container{
  position:relative;background:var(--nord0);border:1px solid var(--nord2);flex:none;
}
#map-canvas,#globe-canvas{width:100%;height:auto;display:block}
.viz-overlay{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  background:rgba(46,52,64,.82);color:var(--nord4);font-size:13px;text-align:center;z-index:5;
}
.viz-overlay .ov-title{color:var(--frost);font-weight:700;letter-spacing:2px;text-transform:uppercase;font-size:12px}

/* ───── временная шкала ───── */
.timeline-container{display:flex;align-items:center;gap:10px}
#time-slider{flex:1;-webkit-appearance:none;appearance:none;background:transparent;height:22px;cursor:pointer;margin:0}
#time-slider::-webkit-slider-runnable-track{height:2px;background:var(--nord2)}
#time-slider::-webkit-slider-thumb{background:var(--frost);width:8px;height:14px;border:1px solid var(--nord0);margin-top:-6px}
#time-slider::-moz-range-track{height:2px;background:var(--nord2)}
#time-slider::-moz-range-thumb{background:var(--frost);width:8px;height:14px;border:1px solid var(--nord0)}
#speed-select{width:72px;flex:none}

/* ───── результаты ───── */
.results-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.result-panel{overflow-y:auto;max-height:300px}
#results-table{width:100%;border-collapse:collapse;font-size:12px}
#results-table th{
  background:var(--nord2);color:var(--nord4);font-size:9px;font-weight:700;letter-spacing:1px;
  text-transform:uppercase;padding:6px 8px;text-align:left;border-bottom:1px solid var(--nord3);
  position:sticky;top:0;
}
#results-table td{padding:7px 8px;border-bottom:1px solid var(--nord2)}
#results-table tbody tr:nth-child(even){background:#363D4E}
#results-table tr{cursor:pointer;transition:background 90ms}
#results-table tr:hover{background:var(--nord2)}
#results-table tr.selected{background:#383F50;box-shadow:inset 2px 0 0 var(--frost)}
.pct-good{color:var(--green);background:var(--ok-plate);padding:1px 6px;font-weight:700}
.pct-warn{color:var(--amber);background:var(--warn-plate);padding:1px 6px;font-weight:700}
.pct-bad{color:var(--red);background:var(--bad-plate);padding:1px 6px;font-weight:700}

#route-info{font-size:12px;color:var(--nord4);margin-bottom:8px}
#route-detail{font-size:11px;line-height:2.1}
.route-node{
  display:inline-block;background:var(--nord0);border:1px solid var(--nord3);
  padding:1px 7px;margin:1px 1px 0 0;font-size:11px;
}
.route-node.sat{border-color:var(--frost);color:var(--frost)}
.route-node.client{border-color:var(--green);color:var(--green)}
.route-node.gateway{border-color:var(--amber);color:var(--amber)}
.route-arrow{color:var(--nord4);margin:0 4px;font-size:10px}

/* ───── внутренности боковой панели ───── */
.plane-editor{border:1px solid var(--nord3);background:var(--nord0);padding:8px;margin-bottom:8px}
.plane-editor .plane-title{font-size:12px;font-weight:700;margin-bottom:7px;display:flex;align-items:center;gap:7px}
.plane-chip{width:8px;height:8px;display:inline-block;background:currentColor}
.plane-editor label{font-size:10px;color:var(--nord4)}
.plane-editor input{width:78px;padding:4px 6px}
.failure-item{display:flex;gap:4px;align-items:center;margin-bottom:5px;font-size:11px}
.failure-item select{width:60px;padding:4px 3px}
.failure-item input{width:50px;padding:4px 3px;font-size:11px}
.failure-item .btn-remove{background:none;border:none;color:var(--red);cursor:pointer;font-size:14px;padding:0 2px}
.variant-item{display:flex;justify-content:space-between;align-items:center;gap:6px;border:1px solid var(--nord3);background:var(--nord0);padding:6px 8px;margin-bottom:5px;font-size:11px;cursor:default;transition:background .15s}
.variant-item:hover{background:var(--nord1)}
.variant-item.v-selected{border-color:var(--frost);background:rgba(136,192,208,0.08)}
.variant-item .v-check{accent-color:var(--frost);cursor:pointer;margin-right:4px}
.variant-item .v-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--nord4)}
.variant-item .v-load{color:var(--green);cursor:pointer;font-size:12px;margin-left:2px}
.variant-item .v-comp{color:var(--frost);cursor:pointer;font-size:13px}
.variant-item .v-del{color:var(--red);cursor:pointer;font-size:13px}
.variant-actions{display:flex;gap:6px;margin-top:6px}

.comparison-header{display:flex;justify-content:space-between;align-items:center}
.comparison-header h3{margin:0}
.comparison-info{font-size:11px;color:var(--nord4);margin:6px 0;opacity:.7}
.comparison-scroll{overflow-x:auto}
#comparison-panel{margin-top:2px}
#comparison-table{width:100%;border-collapse:collapse;font-size:12px;white-space:nowrap}
#comparison-table th{
  background:var(--nord2);color:var(--nord4);font-size:9px;font-weight:700;letter-spacing:1px;
  text-transform:uppercase;padding:6px 8px;text-align:left;border-bottom:1px solid var(--nord3);
  position:sticky;top:0;z-index:1;
}
#comparison-table td{padding:7px 8px;border-bottom:1px solid var(--nord2)}
#comparison-table tr:nth-child(even){background:#363D4E}
#comparison-table tr:hover{background:var(--nord2)}
#comparison-table .diff{color:var(--amber);font-weight:700}
#comparison-table .delta-pos{color:var(--green);font-weight:700}
#comparison-table .delta-neg{color:var(--red);font-weight:700}
#comparison-table .delta-zero{color:var(--nord4);opacity:.5}
#comparison-table tr.param-changed td{background:rgba(235,203,139,0.08);box-shadow:inset 3px 0 0 var(--amber)}
#comparison-table td.section-label{font-weight:700;color:var(--frost);background:var(--nord1);border-bottom:1px solid var(--nord3)}

/* ───── выводы по целям и устойчивости ───── */
.conclusions-panel{max-height:none}
.panel-sub{
  margin:11px 0 7px;color:var(--frost);font-size:9px;font-weight:700;letter-spacing:2px;
  text-transform:uppercase;
}
.concl-verdict{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:5px 0;border-bottom:1px solid var(--nord2);font-size:12px;color:var(--nord4);
}
.concl-v-t{font-weight:700}
.concl-v-r{font-weight:700;flex:none}
.concl-item{margin:6px 0;font-size:12px;line-height:1.55;color:var(--nord4)}
.concl-vuln{color:var(--nord4)}
.concl-fix{color:var(--frost)}

/* ───── статусбар: stderr приложения ───── */
.statusbar{
  height:28px;flex:none;background:var(--nord1);border-top:1px solid var(--nord2);
  display:flex;align-items:center;justify-content:space-between;gap:24px;padding:0 16px;
  font-size:11px;color:var(--nord4);
}
.statusbar .state{color:var(--green)}
.statusbar .state.busy{color:var(--amber)}
.statusbar .state.err{color:var(--red)}
.statusbar #status-center{color:var(--nord5);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.statusbar #status-right{white-space:nowrap;color:var(--nord4)}

/* ───── звёздный фон: статичный, позади всего ───── */
.space-bg{position:fixed;inset:0;z-index:0;pointer-events:none}
.sidebar,.content{position:relative;z-index:1}

@media(max-width:1260px){
  .results-row{grid-template-columns:1fr}
  .sidebar{flex-basis:240px;min-width:240px}
}
@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
}

/* ───── PDF-отчёт: печать через #report-print ───── */
.report-print{display:none}

@media print{
  @page{margin:12mm}
  html,body{overflow:visible;height:auto;background:#fff}
  body>*{display:none!important}
  #report-print{
    display:block!important;background:#fff;color:#2E3440;
    font-family:"Monaspace Krypton",monospace;font-size:11px;line-height:1.5;
    padding:0;max-width:none;
  }
  #report-print .rp-head{border-bottom:2px solid #88C0D0;margin-bottom:14px;padding-bottom:8px}
  #report-print .rp-kicker{color:#5E81AC;font-size:9px;text-transform:uppercase;letter-spacing:1px}
  #report-print h1{font-size:18px;margin:2px 0}
  #report-print .rp-meta{color:#4C566A;font-size:10px}
  #report-print section{margin-bottom:12px;page-break-inside:avoid}
  #report-print h2{
    font-size:12px;color:#5E81AC;text-transform:uppercase;letter-spacing:0.5px;
    margin:8px 0 4px;border-bottom:1px solid #D8DEE9;padding-bottom:2px;
  }
  #report-print h3{font-size:11px;margin:6px 0 2px}
  #report-print .rp-table{width:100%;border-collapse:collapse;font-size:10px}
  #report-print .rp-table th,#report-print .rp-table td{border:1px solid #D8DEE9;padding:3px 6px;text-align:left}
  #report-print .rp-table th{background:#ECEFF4;color:#4C566A;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  #report-print .rp-table td.rp-k{color:#4C566A;width:40%}
  #report-print .rp-lines div{margin:1px 0}
  #report-print .rp-route .rp-node{color:#2E3440}
  #report-print .rp-route .rp-arrow{color:#5E81AC}
  #report-print .rp-sub{color:#4C566A;font-size:10px;margin:2px 0}
  #report-print .rp-img{max-width:100%;border:1px solid #D8DEE9;margin:4px 0;display:block}
  #report-print .rp-item{margin:4px 0;page-break-inside:avoid}
  #report-print .rp-vuln{color:#2E3440}
  #report-print .rp-fix{color:#5E81AC}
  #report-print tr{page-break-inside:avoid}
}