        :root {
            --bg: #0a0e14;
            --surface: #131920;
            --surface-2: #1a2230;
            --surface-3: #1e2a3a;
            --text: #e2e8f0;
            --text-muted: #8892a4;
            --border: #2a3545;
            --accent: #00b336;
            --accent-glow: rgba(0, 179, 54, 0.25);
            --accent2: #3b82f6;
            --accent2-glow: rgba(59, 130, 246, 0.25);
        }

        /* ── Light Theme (matches veeam.com/calculators) ── */
        [data-theme="light"] {
            --bg: #f6f7fa;
            --surface: #ffffff;
            --surface-2: #f0f2f5;
            --surface-3: #e4e9ee;
            --text: #3a474d;
            --text-muted: #717e88;
            --border: #dde3ea;
            --accent: #00b336;
            --accent-glow: rgba(0, 179, 54, 0.15);
            --accent2: #3b82f6;
            --accent2-glow: rgba(59, 130, 246, 0.15);
        }
        [data-theme="light"] body {
            font-family: "Source Sans Pro", -apple-system, "Segoe UI", Roboto, sans-serif;
        }
        [data-theme="light"] .rel-row {
            border-bottom-color: rgba(58, 71, 77, 0.1);
        }
[data-theme="light"] .viz-node-circle.active {
            stroke: #3a474d;
        }
        [data-theme="light"] .sp-add-btn {
            background: rgba(0, 179, 54, 0.06);
            border-color: rgba(0, 179, 54, 0.3);
        }

        * { margin: 0; padding: 0; box-sizing: border-box; }

        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            background: var(--bg);
            color: var(--text);
            height: 100vh;
            overflow: hidden;
        }

        header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 10px 24px;
            background: var(--surface);
            border-bottom: 1px solid var(--border);
            z-index: 10;
            position: relative;
        }

        .logo-area h1 { font-size: 20px; font-weight: 700; }
        .logo-area h1 span { color: var(--accent); }
        .logo-area .subtitle { font-size: 12px; color: var(--text-muted); margin-top: 2px; }

        .controls { display: flex; align-items: center; gap: 12px; }

        .search-box input {
            background: var(--surface-2);
            border: 1px solid var(--border);
            border-radius: 8px;
            padding: 8px 14px;
            color: var(--text);
            font-size: 14px;
            width: 240px;
            outline: none;
            transition: border-color 0.2s;
        }
        .search-box input:focus { border-color: var(--accent); }
        .search-box input::placeholder { color: var(--text-muted); }

        .btn {
            background: var(--surface-2);
            border: 1px solid var(--border);
            border-radius: 8px;
            padding: 8px 16px;
            color: var(--text);
            font-size: 13px;
            cursor: pointer;
            transition: all 0.2s;
        }
        .btn:hover { background: var(--border); }

        /* ── 3-Column Layout ── */
        .main-layout {
            display: grid;
            grid-template-columns: 260px 1fr 260px;
            height: calc(100vh - 53px);
            gap: 0;
        }

        .selector-panel {
            display: flex;
            flex-direction: column;
            border-right: 1px solid var(--border);
            overflow: hidden;
        }
        .selector-panel.right-panel {
            border-right: none;
            border-left: 1px solid var(--border);
        }

        .panel-header {
            font-size: 10px;
            text-transform: uppercase;
            letter-spacing: 1.5px;
            color: var(--text-muted);
            padding: 12px 16px 8px;
            font-weight: 600;
            display: flex;
            align-items: center;
            gap: 6px;
            background: var(--surface);
            border-bottom: 1px solid var(--border);
            flex-shrink: 0;
        }
        .panel-header .dot { width: 8px; height: 8px; border-radius: 50%; }
        .panel-header .selected-count {
            margin-left: auto;
            background: var(--surface-2);
            padding: 2px 8px;
            border-radius: 10px;
            font-size: 10px;
        }

        .selector-list {
            overflow-y: auto;
            padding: 4px 0;
            flex: 1;
        }

        .cat-label {
            font-size: 9px;
            text-transform: uppercase;
            letter-spacing: 0.8px;
            color: var(--text-muted);
            padding: 10px 16px 3px;
            display: flex;
            align-items: center;
            gap: 5px;
            font-weight: 600;
        }
        .cat-dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; }

        .sel-node {
            display: flex;
            align-items: center;
            gap: 8px;
            padding: 6px 16px;
            cursor: pointer;
            font-size: 13px;
            transition: all 0.12s;
            user-select: none;
        }
        .sel-node:hover { background: var(--surface-2); }

        .sel-node .check {
            width: 16px;
            height: 16px;
            border-radius: 4px;
            border: 1.5px solid var(--border);
            display: flex;
            align-items: center;
            justify-content: center;
            flex-shrink: 0;
            transition: all 0.12s;
            font-size: 10px;
            color: transparent;
        }
        .sel-node.active .check {
            border-color: var(--accent);
            background: var(--accent);
            color: #fff;
        }
        .right-panel .sel-node.active .check {
            border-color: var(--accent2);
            background: var(--accent2);
        }

        .sel-node .node-dot {
            width: 8px;
            height: 8px;
            border-radius: 50%;
            flex-shrink: 0;
        }

        .sel-node.active {
            background: rgba(0, 179, 54, 0.08);
        }
        .right-panel .sel-node.active {
            background: rgba(59, 130, 246, 0.08);
        }

        .sel-node.search-hidden { display: none; }

        /* ── Center Map Area ── */
        .map-area {
            display: flex;
            flex-direction: column;
            overflow: hidden;
            background: var(--bg);
        }

        .map-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 10px 20px;
            background: var(--surface);
            border-bottom: 1px solid var(--border);
            flex-shrink: 0;
        }

        .map-stats {
            display: flex;
            gap: 20px;
            font-size: 12px;
            color: var(--text-muted);
        }
        .map-stats .stat-val { color: var(--accent); font-weight: 700; font-size: 14px; }
        .map-stats .stat-val.blue { color: var(--accent2); }

        /* ── Visual Graph (top half) ── */
        .viz-area {
            flex: 1;
            min-height: 0;
            position: relative;
            border-bottom: 1px solid var(--border);
        }
        .viz-area svg {
            width: 100%;
            height: 100%;
        }
        .viz-area .empty-viz {
            position: absolute;
            top: 50%; left: 50%;
            transform: translate(-50%, -50%);
            text-align: center;
            color: var(--text-muted);
        }
        .viz-area .empty-viz .icon { font-size: 40px; opacity: 0.25; margin-bottom: 8px; }
        .viz-area .empty-viz .hint { font-size: 12px; line-height: 1.5; max-width: 280px; }

        .viz-link {
            stroke: var(--border);
            stroke-width: 1.5;
            stroke-opacity: 0.4;
            fill: none;
            cursor: pointer;
            pointer-events: stroke;
            transition: all 0.2s;
        }
        .viz-link:hover {
            stroke: var(--accent2);
            stroke-opacity: 0.8;
            stroke-width: 3;
        }
        .viz-link.active {
            stroke: var(--accent2);
            stroke-opacity: 1;
            stroke-width: 3;
            filter: drop-shadow(0 0 6px var(--accent2-glow));
        }
        .viz-link.dimmed {
            stroke-opacity: 0.08;
        }
        .viz-node-circle {
            stroke: var(--bg);
            stroke-width: 2;
            cursor: pointer;
            transition: all 0.2s;
        }
        .viz-node-circle:hover {
            stroke: var(--text);
            stroke-width: 3;
        }
        .viz-node-circle.active {
            stroke: #fff;
            stroke-width: 3;
            filter: drop-shadow(0 0 10px currentColor);
        }
        .viz-node-circle.dimmed {
            opacity: 0.2;
        }
        .viz-node-label {
            fill: var(--text);
            font-size: 10px;
            text-anchor: middle;
            pointer-events: none;
            transition: opacity 0.2s;
        }
        .viz-node-label.dimmed { opacity: 0.15; }
        .viz-node-label-bg {
            fill: var(--bg);
            opacity: 0.75;
            transition: opacity 0.2s;
        }
        .viz-node-label-bg.dimmed { opacity: 0.15; }

        /* ── Port Table (bottom half) ── */
        .table-area {
            flex: 1;
            min-height: 0;
            overflow-y: auto;
            padding: 12px 16px;
        }

        .rel-group {
            transition: opacity 0.2s;
        }
        .rel-group.active .rel-group-header {
            background: var(--surface-3);
            box-shadow: inset 3px 0 0 var(--accent2);
        }
        .rel-group.dimmed {
            opacity: 0.2;
        }

        .map-empty {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100%;
            color: var(--text-muted);
            text-align: center;
            gap: 12px;
        }
        .map-empty .icon { font-size: 48px; opacity: 0.3; }
        .map-empty .hint { font-size: 13px; line-height: 1.6; max-width: 320px; }

        /* ── Relationship Groups ── */
        .rel-group {
            margin-bottom: 16px;
        }
        .rel-group-header {
            display: flex;
            align-items: center;
            gap: 8px;
            padding: 8px 12px;
            background: var(--surface);
            border-radius: 8px;
            margin-bottom: 6px;
            font-size: 13px;
            font-weight: 600;
        }
        .rel-group-header .rel-dot {
            width: 8px;
            height: 8px;
            border-radius: 50%;
            flex-shrink: 0;
        }
        .rel-group-header .rel-arrow {
            color: var(--text-muted);
            font-size: 14px;
        }
        .rel-group-header .rel-count {
            margin-left: auto;
            font-size: 10px;
            color: var(--text-muted);
            background: var(--surface-2);
            padding: 2px 8px;
            border-radius: 10px;
            font-weight: 400;
        }
        .rel-group-header .rel-doc-link {
            margin-left: 6px;
            font-size: 10px;
            color: var(--accent2);
            text-decoration: none;
            padding: 2px 8px;
            border-radius: 10px;
            border: 1px solid var(--accent2);
            opacity: 0.65;
            white-space: nowrap;
            transition: opacity 0.15s, background 0.15s;
        }
        .rel-group-header .rel-doc-link:hover {
            opacity: 1;
            background: var(--accent2-glow);
        }

        .rel-row {
            display: grid;
            grid-template-columns: 1fr auto 2fr;
            gap: 8px;
            padding: 5px 12px 5px 20px;
            font-size: 12px;
            border-bottom: 1px solid rgba(42,53,69,0.3);
            align-items: center;
        }
        .rel-row:last-child { border-bottom: none; }
        .rel-row .port-num {
            color: var(--accent);
            font-family: 'SF Mono', 'Fira Code', monospace;
            font-weight: 600;
            font-size: 11px;
        }
        .rel-row .proto {
            color: #f59e0b;
            font-size: 10px;
            font-weight: 600;
            min-width: 32px;
        }
        .rel-row .purpose {
            color: var(--text-muted);
            font-size: 11px;
        }


        /* ── Mode Tabs ── */
        .mode-tabs {
            display: flex;
            gap: 3px;
            background: var(--surface-2);
            border-radius: 8px;
            padding: 3px;
        }
        .mode-tab {
            padding: 5px 14px;
            font-size: 12px;
            border-radius: 6px;
            border: none;
            background: transparent;
            color: var(--text-muted);
            cursor: pointer;
            font-weight: 500;
            transition: all 0.15s;
        }
        .mode-tab:hover:not(.active) { color: var(--text); }
        .mode-tab.active { background: var(--surface-3); color: var(--text); }

        /* ── SP/PM visibility ── */
        body.sp-mode .pm-only { display: none !important; }
        body:not(.sp-mode) .sp-only { display: none !important; }

        /* Override right-panel blue active to green in SP mode */
        body.sp-mode .right-panel .sel-node.active { background: rgba(0,179,54,0.08); }
        body.sp-mode .right-panel .sel-node.active .check {
            border-color: var(--accent);
            background: var(--accent);
        }

        /* ── Server Planner Panels ── */
        .sp-panel {
            display: flex;
            flex-direction: column;
            height: 100%;
            overflow: hidden;
        }
        .sp-server-list {
            flex: 1;
            overflow-y: auto;
            padding: 8px;
            display: flex;
            flex-direction: column;
            gap: 8px;
        }
        .sp-add-bar {
            padding: 10px 12px;
            border-top: 1px solid var(--border);
            background: var(--surface);
            flex-shrink: 0;
        }
        .sp-add-btn {
            width: 100%;
            background: rgba(0,179,54,0.08);
            border: 1px dashed rgba(0,179,54,0.35);
            border-radius: 8px;
            color: var(--accent);
            font-size: 13px;
            padding: 8px;
            cursor: pointer;
            transition: all 0.15s;
            font-weight: 500;
        }
        .sp-add-btn:hover { background: rgba(0,179,54,0.18); border-color: var(--accent); }

        .sp-server-card {
            background: var(--surface);
            border: 1px solid var(--border);
            border-radius: 8px;
            overflow: hidden;
            cursor: pointer;
            transition: border-color 0.15s, box-shadow 0.15s;
        }
        .sp-server-card.active {
            border-color: var(--accent);
            box-shadow: 0 0 0 1px var(--accent);
        }
        .sp-server-card:hover:not(.active) { border-color: var(--text-muted); }
        .sp-server-head {
            display: flex;
            align-items: center;
            gap: 6px;
            padding: 8px 10px;
            background: var(--surface-2);
        }
        .sp-server-icon { font-size: 13px; flex-shrink: 0; }
        .sp-server-name-wrap { flex: 1; min-width: 0; }
        .sp-server-name {
            font-size: 13px;
            font-weight: 600;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            cursor: text;
            border-bottom: 1px solid transparent;
            transition: border-color 0.15s;
        }
        .sp-server-name:hover { border-color: var(--border); }
        .sp-server-name-input {
            background: transparent;
            border: none;
            border-bottom: 1px solid var(--accent);
            color: var(--text);
            font-size: 13px;
            font-weight: 600;
            outline: none;
            width: 100%;
        }
        .sp-server-del {
            background: none;
            border: none;
            color: var(--text-muted);
            cursor: pointer;
            font-size: 16px;
            line-height: 1;
            padding: 1px 4px;
            border-radius: 4px;
            transition: all 0.15s;
            flex-shrink: 0;
        }
        .sp-server-del:hover { color: #ef4444; background: rgba(239,68,68,0.12); }
        .sp-role-chips {
            padding: 6px 10px 8px;
            display: flex;
            flex-wrap: wrap;
            gap: 4px;
            min-height: 32px;
        }
        .sp-role-chip {
            font-size: 10px;
            padding: 2px 7px;
            border-radius: 12px;
            font-weight: 500;
            line-height: 1.6;
            white-space: nowrap;
        }
        .sp-empty-roles { font-size: 11px; color: var(--text-muted); font-style: italic; }
        .sp-role-header-label {
            flex: 1;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        .sp-no-server {
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100%;
            color: var(--text-muted);
            font-size: 12px;
            text-align: center;
            padding: 24px;
            line-height: 1.6;
        }
        .sp-pair-meta {
            font-size: 11px;
            padding: 3px 12px 2px 20px;
            opacity: 0.85;
        }
