:root {
  --bg: #0f1420;
  --bg-panel: #161d2e;
  --bg-panel-2: #1c2540;
  --border: #2a3452;
  --text: #e7ebf5;
  --text-dim: #9aa5c0;
  --accent: #6ea8fe;

  --c-root: #f5c451;
  --c-domain: #6ea8fe;
  --c-service: #6ee7b7;
  --c-feature: #f0839c;

  --line-hier: #48507a;
  --line-related: #f0839c;
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  width: 100%;
  height: 100%;
  background: var(--bg);
  color: var(--text);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  overflow: hidden;
}

#topbar {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 56px;
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 0 18px;
  background: rgba(22, 29, 46, 0.92);
  backdrop-filter: blur(6px);
  border-bottom: 1px solid var(--border);
  z-index: 20;
}

#topbar-title {
  display: flex;
  flex-direction: column;
  line-height: 1.15;
  white-space: nowrap;
}
#topbar-name { font-weight: 600; font-size: 15px; }
#topbar-sub { font-size: 11px; color: var(--text-dim); }

#search-box {
  position: relative;
  width: 280px;
}
#search-input {
  width: 100%;
  padding: 8px 12px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--bg-panel-2);
  color: var(--text);
  font-size: 13px;
  outline: none;
}
#search-input:focus { border-color: var(--accent); }
#search-results {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  right: 0;
  max-height: 320px;
  overflow-y: auto;
  background: var(--bg-panel-2);
  border: 1px solid var(--border);
  border-radius: 8px;
  display: none;
  z-index: 30;
}
#search-results.visible { display: block; }
.search-result-item {
  padding: 8px 12px;
  font-size: 12.5px;
  cursor: pointer;
  border-bottom: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  gap: 8px;
}
.search-result-item:last-child { border-bottom: none; }
.search-result-item:hover { background: rgba(110, 168, 254, 0.15); }
.search-result-item .srt-type {
  font-size: 10px;
  color: var(--text-dim);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  white-space: nowrap;
}

#topbar-actions {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 10px;
}
#topbar-actions button {
  padding: 7px 12px;
  border-radius: 7px;
  border: 1px solid var(--border);
  background: var(--bg-panel-2);
  color: var(--text);
  font-size: 12.5px;
  cursor: pointer;
  white-space: nowrap;
}
#topbar-actions button:hover { border-color: var(--accent); color: var(--accent); }

.toggle {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  color: var(--text-dim);
  cursor: pointer;
  white-space: nowrap;
}
.toggle input { accent-color: var(--accent); cursor: pointer; }

#legend {
  position: fixed;
  left: 16px;
  bottom: 16px;
  z-index: 15;
  background: rgba(22, 29, 46, 0.9);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 14px;
  font-size: 11.5px;
  color: var(--text-dim);
  backdrop-filter: blur(6px);
}
.legend-row { display: flex; align-items: center; gap: 7px; padding: 2px 0; }
.legend-sep { height: 1px; background: var(--border); margin: 6px 0; }
.dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block; flex: none; }
.dot-root { background: var(--c-root); }
.dot-domain { background: var(--c-domain); }
.dot-service { background: var(--c-service); }
.dot-feature { background: var(--c-feature); }
.conf { width: 16px; height: 3px; display: inline-block; background: var(--text-dim); flex: none; }
.conf-high { opacity: 1; }
.conf-medium { opacity: 0.6; }
.conf-low { opacity: 0.32; border-top: 1px dashed var(--text-dim); background: none; }
.line { width: 20px; height: 0; border-top: 2px solid; display: inline-block; flex: none; }
.line-hier { border-color: var(--line-hier); }
.line-related { border-color: var(--line-related); border-top-style: dashed; }

#graph-container {
  position: fixed;
  inset: 0;
  top: 56px;
}
#graph { width: 100%; height: 100%; cursor: grab; }
#graph:active { cursor: grabbing; }

.node circle {
  stroke-width: 1.5px;
  cursor: pointer;
  transition: r 120ms ease, filter 120ms ease;
}
.node:hover circle { filter: brightness(1.25); }
.node text {
  fill: var(--text);
  font-size: 11px;
  pointer-events: none;
  paint-order: stroke;
  stroke: var(--bg);
  stroke-width: 3px;
  stroke-linejoin: round;
}
.node.root text { font-size: 14px; font-weight: 700; }
.node.domain text { font-size: 12.5px; font-weight: 600; }
.node.has-children circle { stroke-dasharray: none; }

.node circle.conf-low { stroke-dasharray: 3 2; }

.link {
  fill: none;
  stroke: var(--line-hier);
  stroke-opacity: 0.55;
}
.link.conf-low { stroke-dasharray: 2 3; stroke-opacity: 0.35; }
.link.conf-medium { stroke-opacity: 0.45; }

.related-link {
  fill: none;
  stroke: var(--line-related);
  stroke-width: 1.4px;
  stroke-dasharray: 5 4;
  stroke-opacity: 0.55;
  pointer-events: none;
}

.node.dimmed { opacity: 0.15 !important; }
.link.dimmed { opacity: 0.08 !important; }
.related-link.dimmed { opacity: 0.08 !important; }
.node.highlighted circle { stroke: #fff; stroke-width: 2.5px; }

.node.service text { font-size: 10.5px; }
.node.feature text { font-size: 9.5px; }

/* Подписи: домен/root видны всегда; сервис/фича раскрываются по зуму или hover */
.node.service text { opacity: 0.55; transition: opacity 150ms ease; }
.node.feature text { opacity: 0; transition: opacity 150ms ease; }
svg.zoom-mid .node.service text { opacity: 1; }
svg.zoom-in .node.feature text { opacity: 1; }
.node.hover-focus text { opacity: 1; }
.node.hover-focus circle { stroke-width: 2px; filter: brightness(1.2); }

#tooltip {
  position: fixed;
  z-index: 40;
  max-width: 280px;
  background: #0b0f1a;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px 12px;
  font-size: 12.5px;
  line-height: 1.4;
  pointer-events: none;
  box-shadow: 0 10px 30px rgba(0,0,0,0.4);
}
#tooltip.hidden { display: none; }
#tooltip .tt-title { font-weight: 700; margin-bottom: 3px; }
#tooltip .tt-desc { color: var(--text-dim); }
#tooltip .tt-conf {
  display: inline-block;
  margin-top: 6px;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-dim);
}
#tooltip .tt-repos {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--border);
}
#tooltip .tt-repos-title {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-dim);
  margin-bottom: 5px;
}
#tooltip .tt-repo-item {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  padding: 2px 0;
}
#tooltip .tt-repo-dot { width: 7px; height: 7px; border-radius: 50%; flex: none; }
#tooltip .tt-repo-role {
  margin-left: auto;
  font-size: 10px;
  text-transform: uppercase;
  color: var(--text-dim);
}

#side-panel {
  position: fixed;
  top: 56px;
  right: 0;
  bottom: 0;
  width: 380px;
  background: var(--bg-panel);
  border-left: 1px solid var(--border);
  z-index: 25;
  overflow-y: auto;
  transform: translateX(0);
  transition: transform 200ms ease;
  box-shadow: -12px 0 30px rgba(0,0,0,0.35);
}
#side-panel.hidden { transform: translateX(100%); }
#side-panel-close {
  position: absolute;
  top: 10px;
  right: 12px;
  background: none;
  border: none;
  color: var(--text-dim);
  font-size: 22px;
  cursor: pointer;
  line-height: 1;
}
#side-panel-close:hover { color: var(--text); }
#side-panel-content { padding: 28px 22px 22px; }

.sp-type {
  display: inline-block;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 3px 8px;
  border-radius: 5px;
  margin-bottom: 10px;
}
.sp-type.type-root { background: rgba(245, 196, 81, 0.18); color: var(--c-root); }
.sp-type.type-domain { background: rgba(110, 168, 254, 0.18); color: var(--c-domain); }
.sp-type.type-service { background: rgba(110, 231, 183, 0.18); color: var(--c-service); }
.sp-type.type-feature { background: rgba(240, 131, 156, 0.18); color: var(--c-feature); }

.sp-title { font-size: 19px; font-weight: 700; margin: 0 0 8px; }
.sp-desc { color: var(--text-dim); font-size: 13.5px; line-height: 1.5; margin-bottom: 16px; }

.sp-conf {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--text-dim);
  margin-bottom: 18px;
}
.sp-conf-bar { width: 60px; height: 5px; border-radius: 3px; background: #2a3452; overflow: hidden; }
.sp-conf-bar-fill { height: 100%; background: var(--accent); }

.sp-section { margin-bottom: 20px; }
.sp-section-title {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-dim);
  margin-bottom: 10px;
  display: flex;
  justify-content: space-between;
}

.sp-list { list-style: none; margin: 0; padding: 0; }
.sp-list-item {
  padding: 9px 10px;
  background: var(--bg-panel-2);
  border: 1px solid var(--border);
  border-radius: 8px;
  margin-bottom: 7px;
  font-size: 13px;
  cursor: pointer;
}
.sp-list-item:hover { border-color: var(--accent); }
.sp-list-item .sli-name { font-weight: 600; }
.sp-list-item .sli-link { display: inline-block; color: inherit; text-decoration: none; }
.sp-list-item .sli-link:hover { color: var(--accent); text-decoration: underline; }
.sp-list-item .sli-role {
  font-size: 10px;
  text-transform: uppercase;
  color: var(--text-dim);
  margin-left: 6px;
  font-weight: 400;
}
.sp-list-item .sli-desc { color: var(--text-dim); font-size: 12px; margin-top: 3px; }
.sp-list-item .sli-conf { font-size: 10px; color: var(--text-dim); margin-top: 4px; }

.role-pill {
  display: inline-block;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  padding: 1px 7px;
  border-radius: 999px;
  border: 1px solid;
  margin-left: 6px;
  font-weight: 600;
}

.sp-related-item {
  padding: 9px 10px;
  background: rgba(240, 131, 156, 0.08);
  border: 1px solid rgba(240, 131, 156, 0.3);
  border-radius: 8px;
  margin-bottom: 7px;
  font-size: 12.5px;
}
.sp-related-item .sri-target { font-weight: 600; color: var(--c-feature); cursor: pointer; }
.sp-related-item .sri-relation { color: var(--text-dim); margin-top: 3px; }

.sp-empty { color: var(--text-dim); font-size: 12.5px; font-style: italic; }

#hint {
  position: fixed;
  bottom: 16px;
  right: 16px;
  z-index: 15;
  font-size: 11px;
  color: var(--text-dim);
  background: rgba(22, 29, 46, 0.9);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 7px 11px;
  backdrop-filter: blur(6px);
}
