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

        :root {
	    --bg-deep:    #eaf4fb;
	    --bg-base:    #f3f8fd;
	    --bg-surface: #ffffff;
	    --bg-raised:  #dceef9;
	    --border:     #b9d7ea;
	    --accent:     #3b82c4;
	    --accent-2:   #5bb6d6;
	    --accent-dim: #7aa9c7;
	    --text-hi:    #10324a;
	    --text-mid:   #4b6b84;
	    --text-lo:    #7f97ab;
	    --gold:       #d89b2b;
	    --gold-dim:   #b97b12;
        }

        body {
            font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
            background: var(--bg-base);
            color: var(--text-hi);
            height: 100vh;
            display: flex;
            flex-direction: column;
            overflow: hidden;
        }

        /* ── Header ─────────────────────────────────────────── */
        header {
            padding: 10px 18px;
            background: var(--bg-raised);
            border-bottom: 1px solid var(--border);
            display: flex;
            align-items: center;
            gap: 14px;
            flex-shrink: 0;
            z-index: 10;
        }

        .logo {
            font-size: 1rem;
            font-weight: 700;
            color: var(--accent);
            letter-spacing: -0.02em;
            white-space: nowrap;
            display: flex;
            align-items: center;
            gap: 6px;
        }

        .logo svg { flex-shrink: 0; }

        .url-row {
            flex: 1;
            display: flex;
            gap: 7px;
            align-items: center;
        }

        .url-label {
            font-size: 0.75rem;
            color: var(--text-lo);
            white-space: nowrap;
        }

        .url-input {
            flex: 1;
            padding: 7px 12px;
            background: var(--bg-base);
            border: 1px solid var(--border);
            border-radius: 6px;
            color: var(--text-hi);
            font-size: 0.82rem;
            font-family: 'JetBrains Mono', 'Cascadia Code', 'Consolas', monospace;
            outline: none;
            transition: border-color 0.2s;
            min-width: 0;
        }

        .url-input:focus { border-color: var(--accent); }
        .url-input::placeholder { color: var(--text-lo); }

        .btn {
            padding: 7px 16px;
            border: none;
            border-radius: 6px;
            cursor: pointer;
            font-size: 0.82rem;
            font-weight: 600;
            white-space: nowrap;
            transition: background 0.15s, opacity 0.15s;
        }

        .btn-primary {
            background: var(--accent);
            color: #fff;
        }

        .btn-primary:hover { background: var(--accent-2); }
        .btn-primary:disabled { background: var(--accent-dim); opacity: 0.5; cursor: not-allowed; }

        .btn-secondary {
            background: var(--bg-surface);
            color: var(--text-mid);
            border: 1px solid var(--border);
        }

        .btn-secondary:hover { background: var(--bg-raised); color: var(--text-hi); }

        /* ── Toolbar ─────────────────────────────────────────── */
        #toolbar {
            padding: 7px 18px;
            background: var(--bg-surface);
            border-bottom: 1px solid var(--border);
            display: none;
            align-items: center;
            gap: 14px;
            flex-shrink: 0;
            flex-wrap: wrap;
        }

        .tb-group {
            display: flex;
            align-items: center;
            gap: 7px;
        }

        .tb-label {
            font-size: 0.75rem;
            color: var(--text-lo);
            white-space: nowrap;
        }

        select {
            padding: 4px 8px;
            background: var(--bg-base);
            border: 1px solid var(--border);
            border-radius: 5px;
            color: var(--text-hi);
            font-size: 0.78rem;
            outline: none;
            cursor: pointer;
        }

        .toggle-btn {
            padding: 4px 10px;
            background: var(--bg-base);
            border: 1px solid var(--border);
            border-radius: 5px;
            color: var(--text-lo);
            cursor: pointer;
            font-size: 0.78rem;
            transition: all 0.15s;
            white-space: nowrap;
        }

        .toggle-btn.on {
            background: #1e1b4b;
            border-color: #4338ca;
            color: #a5b4fc;
        }

        .toggle-btn.on-gold {
            background: #1c1007;
            border-color: var(--gold-dim);
            color: var(--gold);
        }

        .toggle-btn.on-rose {
            background: #1c1007;
            border-color: #f472b6;
            color: #f472b6;
        }

        .search-wrap {
            position: relative;
            display: flex;
            align-items: center;
        }

        .search-icon {
            position: absolute;
            left: 8px;
            color: var(--text-lo);
            font-size: 0.8rem;
            pointer-events: none;
        }

        .search-input {
            padding: 4px 10px 4px 26px;
            background: var(--bg-base);
            border: 1px solid var(--border);
            border-radius: 5px;
            color: var(--text-hi);
            font-size: 0.78rem;
            width: 170px;
            outline: none;
            transition: border-color 0.2s;
        }

        .search-input:focus { border-color: var(--accent); }

        .icon-btn {
            padding: 4px 10px;
            background: var(--bg-base);
            border: 1px solid var(--border);
            border-radius: 5px;
            color: var(--text-mid);
            cursor: pointer;
            font-size: 0.78rem;
            transition: all 0.15s;
        }

        .icon-btn:hover { background: var(--bg-raised); color: var(--text-hi); }

        .stats-area {
            margin-left: auto;
            display: flex;
            gap: 6px;
        }

        .chip {
            padding: 2px 9px;
            background: var(--bg-base);
            border: 1px solid var(--border);
            border-radius: 20px;
            font-size: 0.73rem;
            color: var(--text-lo);
            white-space: nowrap;
        }

        .chip em {
            color: #a78bfa;
            font-style: normal;
            font-weight: 600;
        }

        /* ── Main layout ─────────────────────────────────────── */
        .main {
            flex: 1;
            display: flex;
            overflow: hidden;
            position: relative;
        }

        /* ── Graph ───────────────────────────────────────────── */
        #cy {
            flex: 1;
            background: var(--bg-deep);
            background-image:
                linear-gradient(rgba(99, 102, 241, 0.025) 1px, transparent 1px),
                linear-gradient(90deg, rgba(99, 102, 241, 0.025) 1px, transparent 1px);
            background-size: 40px 40px;
            position: relative;
        }

        /* ── Info Panel ──────────────────────────────────────── */
        .info-panel {
            width: 290px;
            background: var(--bg-surface);
            border-left: 1px solid var(--border);
            display: flex;
            flex-direction: column;
            overflow: hidden;
            flex-shrink: 0;
        }

        .info-header {
            padding: 10px 14px;
            border-bottom: 1px solid var(--border);
            font-size: 0.7rem;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.08em;
            color: var(--text-lo);
        }

        .info-body {
            padding: 14px;
            flex: 1;
            overflow-y: auto;
        }

        .info-empty {
            color: var(--text-lo);
            font-size: 0.82rem;
            text-align: center;
            padding-top: 50px;
            line-height: 1.8;
        }

        .node-name {
            font-size: 1.1rem;
            font-weight: 700;
            margin-bottom: 3px;
            word-break: break-word;
        }

        .node-uri {
            font-size: 0.68rem;
            color: var(--text-lo);
            font-family: monospace;
            word-break: break-all;
            margin-bottom: 12px;
        }

        .node-comment {
            font-size: 0.78rem;
            color: var(--text-mid);
            line-height: 1.55;
            padding: 8px 10px;
            background: var(--bg-base);
            border-radius: 6px;
            border-left: 3px solid var(--accent-dim);
            margin-bottom: 4px;
        }

        .section-title {
            font-size: 0.68rem;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.07em;
            color: var(--text-lo);
            margin-top: 13px;
            margin-bottom: 5px;
        }

        .pill {
            display: inline-block;
            padding: 2px 9px;
            border-radius: 12px;
            font-size: 0.73rem;
            margin: 2px;
            cursor: pointer;
            transition: opacity 0.15s;
            border: 1px solid transparent;
        }

        .pill:hover { opacity: 0.75; }

        .prop-row {
            display: flex;
            align-items: baseline;
            gap: 5px;
            font-size: 0.76rem;
            padding: 3px 8px;
            margin: 2px 0;
            background: var(--bg-base);
            border-radius: 4px;
        }

        .prop-name {
            color: var(--gold);
            font-weight: 500;
            flex-shrink: 0;
        }

        .prop-arr { color: var(--text-lo); }

        .prop-target {
            color: var(--text-mid);
            cursor: pointer;
            text-decoration: underline;
            text-decoration-color: transparent;
            transition: color 0.15s, text-decoration-color 0.15s;
        }

        .prop-target:hover {
            color: var(--text-hi);
            text-decoration-color: var(--text-mid);
        }

        /* ── Status bar ──────────────────────────────────────── */
        .statusbar {
            padding: 3px 18px;
            background: var(--bg-deep);
            border-top: 1px solid #131520;
            font-size: 0.72rem;
            color: var(--text-lo);
            display: flex;
            align-items: center;
            gap: 16px;
            flex-shrink: 0;
            min-height: 22px;
        }

        #statusText { flex: 1; }

        .legend {
            display: none;
            align-items: center;
            gap: 14px;
        }

        .leg-item {
            display: flex;
            align-items: center;
            gap: 5px;
            color: var(--text-lo);
        }

        .leg-line-solid {
            width: 22px;
            height: 2px;
            background: #475569;
        }

        .leg-line-dashed {
            width: 22px;
            height: 0;
            border-top: 2px dashed var(--gold);
        }

        .leg-line-dotted {
            width: 22px;
            height: 0;
            border-top: 2px dotted #059669;
        }

        /* ── Loading overlay ─────────────────────────────────── */
        #loadingOverlay {
            display: none;
            position: absolute;
            inset: 0;
            background: rgba(8, 10, 16, 0.88);
            flex-direction: column;
            align-items: center;
            justify-content: center;
            z-index: 50;
        }

        #loadingOverlay.visible { display: flex; }

        .spinner {
            width: 38px;
            height: 38px;
            border: 3px solid var(--border);
            border-top-color: var(--accent);
            border-radius: 50%;
            animation: spin 0.75s linear infinite;
        }

        @keyframes spin { to { transform: rotate(360deg); } }

        .loading-msg {
            margin-top: 14px;
            color: var(--text-mid);
            font-size: 0.88rem;
        }

        /* ── Toast ───────────────────────────────────────────── */
        #toast {
            position: fixed;
            bottom: 28px;
            left: 50%;
            transform: translateX(-50%) translateY(12px);
            background: #7f1d1d;
            border: 1px solid #991b1b;
            color: #fca5a5;
            padding: 9px 18px;
            border-radius: 8px;
            font-size: 0.82rem;
            opacity: 0;
            transition: opacity 0.25s, transform 0.25s;
            pointer-events: none;
            z-index: 999;
            max-width: 540px;
            text-align: center;
        }

        #toast.visible {
            opacity: 1;
            transform: translateX(-50%) translateY(0);
        }

        /* ── Welcome banner (inside cy before load) ──────────── */
        #welcome {
            position: absolute;
            inset: 0;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            pointer-events: none;
            z-index: 1;
        }

        .welcome-icon {
            font-size: 3rem;
            margin-bottom: 12px;
            opacity: 0.15;
        }

        .welcome-text {
            font-size: 0.9rem;
            color: var(--text-lo);
            text-align: center;
            line-height: 1.8;
            opacity: 0.6;
        }
 
