@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');

:root {
    --deepseek-blue: #0066FF;
    --deepseek-light-blue: #4D94FF;
    --deepseek-dark-blue: #0052CC;
    --deepseek-purple: #5E17EB;
    --deepseek-light-purple: #8F6BFF;
    --deepseek-gradient: linear-gradient(135deg, #0066FF, #5E17EB);
}

body {
    font-family: 'Noto Sans SC', sans-serif;
}

/* 树形图容器样式 */
.tree-container {
    overflow: visible;
    background-color: transparent;
}

/* 连接线样式 */
.link {
    fill: none;
    stroke: #e2e8f0;
    stroke-width: 2px;
    transition: stroke 0.3s ease, stroke-width 0.3s ease, opacity 0.3s ease;
    opacity: 0.7;
    pointer-events: none;
    z-index: 1;
}

/* 连接点样式 */
.link-point {
    transition: fill 0.3s ease, r 0.3s ease;
    opacity: 0.8;
    cursor: pointer;
    pointer-events: all;
    z-index: 2;
}

.link-point:hover {
    r: 4;
    fill: var(--deepseek-light-blue);
    filter: drop-shadow(0 0 3px rgba(0, 102, 255, 0.5));
}

.link-point-source {
    fill: #dbeafe;
}

.link-point-target {
    fill: #e0e7ff;
}

/* 节点基础样式 */
.node {
    cursor: grab;
    will-change: transform;
    z-index: 10;
}

/* 节点卡片样式 */
.node-card {
    fill: white;
    stroke: #e2e8f0;
    stroke-width: 2px;
    filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.08));
    transition: stroke 0.3s ease, filter 0.3s ease, transform 0.3s ease;
    min-width: 180px;
    max-width: 320px;
    rx: 8;
    ry: 8;
    will-change: transform, filter;
    z-index: 10;
}

/* 节点内容容器 */
.node-content {
    overflow: visible;
    pointer-events: none;
    z-index: 20;
}

/* 节点悬停效果 */
.node:hover .node-card {
    stroke: var(--deepseek-blue);
    filter: drop-shadow(0 8px 16px rgba(0, 102, 255, 0.25));
    transform: translateY(-2px);
}

.node-hover .node-card {
    stroke: var(--deepseek-blue);
    filter: drop-shadow(0 8px 16px rgba(0, 102, 255, 0.25));
}

/* 连接线悬停效果 */
.node:hover + .link {
    stroke: var(--deepseek-blue);
    opacity: 1;
    stroke-width: 2.5px;
}

/* 拖拽时连接线效果 */
.node.dragging ~ .link, .node.dragging-related ~ .link {
    stroke: var(--deepseek-light-blue);
    stroke-width: 2.5px;
    opacity: 0.9;
}

/* 拖拽时连接点效果 */
.node.dragging ~ .link-point, .node.dragging-related ~ .link-point {
    fill: var(--deepseek-light-blue);
    r: 4;
}

/* 节点标签样式 */
.node-label {
    font-size: 15px;
    fill: #1e293b;
    dominant-baseline: middle;
    font-weight: 500;
    pointer-events: none;
    word-wrap: break-word;
    max-width: 200px;
}

/* 节点文本样式 */
.node-text {
    font-size: 13px;
    fill: #64748b;
    text-anchor: start;
    dominant-baseline: middle;
    max-width: 180px;
    word-wrap: break-word;
}

/* 不同层级节点的样式 */
.node-level-0 .node-card {
    stroke: var(--deepseek-blue);
    stroke-width: 2.5px;
    filter: drop-shadow(0 6px 12px rgba(0, 102, 255, 0.2));
}

.node-level-1 .node-card {
    stroke: var(--deepseek-light-blue);
    stroke-width: 2px;
}

.node-level-2 .node-card {
    stroke: var(--deepseek-purple);
    stroke-width: 1.5px;
}

.node-level-3 .node-card {
    stroke: var(--deepseek-light-purple);
    stroke-width: 1.5px;
}

/* 控制按钮样式优化 */
.control-btn {
    transition: all 0.3s ease;
    transform: translateY(0);
}

.control-btn:hover {
    transform: translateY(-2px);
}

/* 响应式调整 */
@media (max-width: 768px) {
    .node-card {
        min-width: 160px;
    }
    
    .node-label {
        font-size: 14px;
    }
}

/* 拖拽相关样式 */
.node.dragging {
    cursor: grabbing;
    opacity: 0.95;
    z-index: 100;
    will-change: transform;
}

.node.dragging .node-card {
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
    transform: scale(1.03);
    stroke: var(--deepseek-blue);
    stroke-width: 2.5px;
    will-change: transform, filter;
}

/* 拖拽关联节点样式 */
.node.dragging-related {
    opacity: 0.9;
    z-index: 90;
    will-change: transform;
}

.node.dragging-related .node-card {
    box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
    transform: scale(1.01);
    stroke: var(--deepseek-light-blue);
    will-change: transform, filter;
}

/* 对齐辅助线样式 */
.guide-line {
    stroke: var(--deepseek-blue);
    stroke-width: 1.5px;
    stroke-dasharray: 5, 5;
    pointer-events: none;
    opacity: 0.7;
}

.guide-line.horizontal {
    stroke: var(--deepseek-blue);
}

.guide-line.vertical {
    stroke: var(--deepseek-purple);
}

/* 重置消息样式 */
.reset-message {
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    font-weight: 500;
    background-color: var(--deepseek-blue);
    color: white;
    border-radius: 8px;
}

/* 连接线高亮样式 */
.link-highlighted {
    stroke: var(--deepseek-blue);
    stroke-width: 2.5px;
    opacity: 1;
    filter: drop-shadow(0 0 3px rgba(0, 102, 255, 0.3));
}

.link-point-highlighted {
    fill: var(--deepseek-blue);
    r: 4;
    filter: drop-shadow(0 0 3px rgba(0, 102, 255, 0.5));
} 