/* roulang page: index */
:root {
      --primary: #0F172A;
      --primary-light: #1E293B;
      --accent: #059669;
      --accent-glow: #10B981;
      --cyan-bright: #06B6D4;
      --amber-warn: #F59E0B;
      --bg-slate: #F8FAFC;
      --border-color: #E2E8F0;
      --font-mono: 'JetBrains Mono', Menlo, Consolas, monospace;
    }
    
    html {
      scroll-behavior: smooth;
      font-family: system-ui, -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
    }

    .font-mono-val {
      font-family: var(--font-mono);
    }

    .grid-pattern {
      background-size: 32px 32px;
      background-image: 
        linear-gradient(to right, rgba(226, 232, 240, 0.4) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(226, 232, 240, 0.4) 1px, transparent 1px);
    }

    .dark-grid-pattern {
      background-size: 32px 32px;
      background-image: 
        linear-gradient(to right, rgba(255, 255, 255, 0.05) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
    }

    /* 按钮与卡片交互微动效 */
    .btn-action {
      transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    }
    .btn-action:hover {
      transform: translateY(-2px);
      box-shadow: 0 10px 20px -5px rgba(5, 150, 105, 0.3);
    }
    .btn-action:active {
      transform: scale(0.98);
    }

    .card-hover {
      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    }
    .card-hover:hover {
      transform: translateY(-4px);
      box-shadow: 0 12px 28px -6px rgba(15, 23, 42, 0.08);
      border-color: #CBD5E1;
    }

    /* Pulse 动效 */
    @keyframes pulse-ring {
      0% { transform: scale(0.95); opacity: 0.8; }
      50% { transform: scale(1.15); opacity: 0.3; }
      100% { transform: scale(0.95); opacity: 0.8; }
    }
    .node-pulse {
      animation: pulse-ring 2s infinite ease-in-out;
    }
