        /* ── Research Map ── */
        #research-map-section {
            margin-bottom: 28px;
        }

        #research-map {
            position: relative;
            border: 1px solid var(--line);
            border-radius: 8px;
            background: var(--paper);
            overflow: hidden;
        }

        #research-map svg {
            display: block;
            width: 100%;
        }

        .rm-node {
            cursor: pointer;
        }

        .rm-node circle {
            transition: filter 0.15s, stroke-width 0.15s;
        }

        .rm-node:hover circle {
            filter: brightness(1.12) drop-shadow(0 0 5px rgba(0,0,0,0.2));
        }

        .rm-node-active circle {
            stroke: #333;
            stroke-width: 3px;
            filter: drop-shadow(0 0 6px rgba(0,0,0,0.25));
        }

        .rm-node text {
            pointer-events: none;
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            font-size: 10px;
            font-weight: 700;
            fill: #fff;
            text-anchor: middle;
            dominant-baseline: central;
            user-select: none;
        }

        .rm-edge {
            stroke: #d0d0d0;
            stroke-width: 1.5;
            stroke-opacity: 0.5;
            transition: stroke 0.15s, stroke-opacity 0.15s;
        }

        .rm-edge-active {
            stroke: #888 !important;
            stroke-width: 2.5 !important;
            stroke-opacity: 1 !important;
        }

        .rm-tooltip {
            position: absolute;
            background: #fff;
            border: 1px solid var(--line);
            border-radius: 10px;
            padding: 16px 20px 14px;
            box-shadow: 0 6px 24px rgba(0,0,0,0.13);
            max-width: 320px;
            min-width: 200px;
            z-index: 10;
            font-size: 0.88em;
            line-height: 1.55;
            animation: rmFadeIn 0.15s ease;
        }

        @keyframes rmFadeIn {
            from { opacity: 0; transform: translateY(4px); }
            to { opacity: 1; transform: translateY(0); }
        }

        .rm-tooltip-title {
            font-weight: 700;
            margin-bottom: 2px;
            color: #222;
            font-size: 0.95em;
            padding-right: 22px;
        }

        .rm-tooltip-venue {
            font-size: 0.8em;
            color: #999;
            margin-bottom: 8px;
        }

        .rm-tooltip-tldr {
            color: #555;
            font-size: 0.9em;
        }

        .rm-tooltip-resources {
            display: flex;
            flex-wrap: wrap;
            gap: 16px;
            margin-top: 12px;
        }

        .rm-tooltip-close {
            position: absolute;
            top: 10px;
            right: 14px;
            cursor: pointer;
            font-size: 16px;
            color: #bbb;
            background: none;
            border: none;
            padding: 0;
            line-height: 1;
        }

        .rm-tooltip-close:hover {
            color: #333;
        }

        .rm-legend {
            display: flex;
            flex-wrap: wrap;
            gap: 14px;
            margin-top: 10px;
            padding: 0 2px;
        }

        .rm-legend-item {
            display: flex;
            align-items: center;
            gap: 5px;
            font-size: 0.72em;
            color: #777;
        }

        .rm-legend-dot {
            width: 9px;
            height: 9px;
            border-radius: 50%;
            flex-shrink: 0;
        }

        @media screen and (max-width: 600px) {
            .rm-tooltip {
                max-width: 240px;
                min-width: 160px;
                font-size: 0.82em;
            }
        }

#research-map { margin-top: 20px; }
.rm-node:focus-visible circle { stroke: var(--ink); stroke-width: 3px; }
