﻿    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    /* ========== 主题变量 ========== */
    :root,
    body[data-theme="dark"] {
      --bg-grad:
        radial-gradient(circle at 10% 10%, rgba(56, 189, 248, 0.08), transparent 25%),
        radial-gradient(circle at 90% 20%, rgba(129, 140, 248, 0.08), transparent 25%),
        radial-gradient(circle at 50% 90%, rgba(34, 211, 238, 0.06), transparent 28%),
        linear-gradient(135deg, #0f172a 0%, #020617 45%, #0f172a 100%);
      --text: #e6edf3;
      --text-secondary: #94a3b8;
      --text-muted: #64748b;
      --card-bg: rgba(15, 23, 42, 0.65);
      --header-bg: rgba(15, 23, 42, 0.55);
      --border: rgba(56, 189, 248, 0.12);
      --border-hover: rgba(56, 189, 248, 0.35);
      --accent: #38bdf8;
      --accent2: #818cf8;
      --accent3: #22d3ee;
      --accent-soft: rgba(56, 189, 248, 0.08);
      --accent-border: rgba(56, 189, 248, 0.18);
      --accent-text: #7dd3fc;
      --btn-text: #0f172a;
      --grid-color: rgba(56, 189, 248, 0.03);
      --particle: rgba(56, 189, 248, 0.35);
      --glow: 0 0 12px rgba(56, 189, 248, 0.45);
      --glow-hover: 0 0 18px rgba(56, 189, 248, 0.65);
      --card-glow: 0 0 18px rgba(56, 189, 248, 0.06);
      --card-glow-hover: 0 12px 28px rgba(56, 189, 248, 0.12);
      --title-glow: 0 0 10px rgba(56, 189, 248, 0.8);
      --header-glow: 0 0 25px rgba(56, 189, 248, 0.08);
      --header-orb: radial-gradient(circle, rgba(56, 189, 248, 0.18), transparent 70%);
      --card-img-grad:
        linear-gradient(135deg, rgba(56, 189, 248, 0.08), rgba(129, 140, 248, 0.08)),
        radial-gradient(circle at 20% 20%, rgba(56, 189, 248, 0.12), transparent 30%),
        radial-gradient(circle at 80% 80%, rgba(129, 140, 248, 0.12), transparent 30%);
      --card-img-text: rgba(56, 189, 248, 0.35);
      --neon-text: none;
    }

    body[data-theme="light"] {
      --bg-grad:
        radial-gradient(circle at 10% 10%, rgba(14, 165, 233, 0.10), transparent 25%),
        radial-gradient(circle at 90% 20%, rgba(99, 102, 241, 0.08), transparent 25%),
        radial-gradient(circle at 50% 90%, rgba(6, 182, 212, 0.08), transparent 28%),
        linear-gradient(135deg, #f8fafc 0%, #eef2ff 45%, #f0f9ff 100%);
      --text: #1e293b;
      --text-secondary: #475569;
      --text-muted: #94a3b8;
      --card-bg: rgba(255, 255, 255, 0.85);
      --header-bg: rgba(255, 255, 255, 0.75);
      --border: rgba(14, 165, 233, 0.15);
      --border-hover: rgba(14, 165, 233, 0.4);
      --accent: #0ea5e9;
      --accent2: #6366f1;
      --accent3: #06b6d4;
      --accent-soft: rgba(14, 165, 233, 0.08);
      --accent-border: rgba(14, 165, 233, 0.2);
      --accent-text: #0284c7;
      --btn-text: #ffffff;
      --grid-color: rgba(14, 165, 233, 0.05);
      --particle: rgba(14, 165, 233, 0.25);
      --glow: 0 4px 14px rgba(14, 165, 233, 0.25);
      --glow-hover: 0 6px 20px rgba(14, 165, 233, 0.4);
      --card-glow: 0 2px 12px rgba(15, 23, 42, 0.05);
      --card-glow-hover: 0 12px 28px rgba(14, 165, 233, 0.12);
      --title-glow: none;
      --header-glow: 0 4px 24px rgba(14, 165, 233, 0.08);
      --header-orb: radial-gradient(circle, rgba(14, 165, 233, 0.15), transparent 70%);
      --card-img-grad:
        linear-gradient(135deg, rgba(14, 165, 233, 0.06), rgba(99, 102, 241, 0.06)),
        radial-gradient(circle at 20% 20%, rgba(14, 165, 233, 0.1), transparent 30%),
        radial-gradient(circle at 80% 80%, rgba(99, 102, 241, 0.1), transparent 30%);
      --card-img-text: rgba(14, 165, 233, 0.4);
      --neon-text: none;
    }

    body[data-theme="cyber"] {
      --bg-grad:
        radial-gradient(circle at 10% 10%, rgba(34, 211, 238, 0.10), transparent 25%),
        radial-gradient(circle at 90% 20%, rgba(167, 139, 250, 0.10), transparent 25%),
        radial-gradient(circle at 50% 90%, rgba(244, 114, 182, 0.07), transparent 28%),
        linear-gradient(135deg, #050816 0%, #0a0618 45%, #050816 100%);
      --text: #f0f9ff;
      --text-secondary: #94a3b8;
      --text-muted: #64748b;
      --card-bg: rgba(10, 15, 35, 0.65);
      --header-bg: rgba(10, 15, 35, 0.55);
      --border: rgba(34, 211, 238, 0.18);
      --border-hover: rgba(34, 211, 238, 0.5);
      --accent: #22d3ee;
      --accent2: #a78bfa;
      --accent3: #f472b6;
      --accent-soft: rgba(34, 211, 238, 0.08);
      --accent-border: rgba(34, 211, 238, 0.25);
      --accent-text: #67e8f9;
      --btn-text: #050816;
      --grid-color: rgba(34, 211, 238, 0.04);
      --particle: rgba(34, 211, 238, 0.5);
      --glow: 0 0 16px rgba(34, 211, 238, 0.55), 0 0 30px rgba(167, 139, 250, 0.25);
      --glow-hover: 0 0 24px rgba(34, 211, 238, 0.8), 0 0 45px rgba(167, 139, 250, 0.45);
      --card-glow: 0 0 20px rgba(34, 211, 238, 0.08);
      --card-glow-hover: 0 0 35px rgba(34, 211, 238, 0.2), 0 12px 28px rgba(167, 139, 250, 0.15);
      --title-glow: 0 0 14px rgba(34, 211, 238, 0.8), 0 0 30px rgba(167, 139, 250, 0.4);
      --header-glow: 0 0 35px rgba(34, 211, 238, 0.12), inset 0 0 30px rgba(167, 139, 250, 0.04);
      --header-orb: radial-gradient(circle, rgba(34, 211, 238, 0.2), transparent 70%);
      --card-img-grad:
        linear-gradient(135deg, rgba(34, 211, 238, 0.08), rgba(167, 139, 250, 0.08)),
        radial-gradient(circle at 20% 20%, rgba(34, 211, 238, 0.15), transparent 30%),
        radial-gradient(circle at 80% 80%, rgba(244, 114, 182, 0.12), transparent 30%);
      --card-img-text: rgba(34, 211, 238, 0.45);
      --neon-text: 0 0 8px rgba(34, 211, 238, 0.5), 0 0 20px rgba(167, 139, 250, 0.25);
    }

    /* ========== 基础 ========== */
    body {
      font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
      color: var(--text);
      line-height: 1.6;
      min-height: 100vh;
      padding: 40px 20px;
      background: var(--bg-grad);
      background-attachment: fixed;
      transition: background 0.5s ease, color 0.4s ease;
      overflow-x: hidden;
    }

    #experienceWrap{
      display: none;
    }

    body::before {
      content: "";
      position: fixed;
      inset: 0;
      background-image:
        linear-gradient(var(--grid-color) 1px, transparent 1px),
        linear-gradient(90deg, var(--grid-color) 1px, transparent 1px);
      background-size: 60px 60px;
      pointer-events: none;
      z-index: 0;
      transition: background-image 0.5s ease;
    }

    /* 自定义滚动条 */
    ::-webkit-scrollbar { width: 8px; }
    ::-webkit-scrollbar-track { background: transparent; }
    ::-webkit-scrollbar-thumb {
      background: var(--accent);
      border-radius: 4px;
      opacity: 0.5;
    }
    ::-webkit-scrollbar-thumb:hover { opacity: 0.8; }

    ::selection {
      background: var(--accent);
      color: var(--btn-text);
    }

    /* 鼠标跟随光晕 */
    .cursor-glow {
      position: fixed;
      width: 500px;
      height: 500px;
      border-radius: 50%;
      background: radial-gradient(circle, var(--accent) 0%, transparent 65%);
      opacity: 0.07;
      pointer-events: none;
      z-index: 0;
      transform: translate(-50%, -50%);
      transition: opacity 0.3s ease, width 0.3s ease, height 0.3s ease;
      mix-blend-mode: screen;
      will-change: left, top;
    }

    body[data-theme="light"] .cursor-glow {
      opacity: 0.1;
      mix-blend-mode: multiply;
    }

    body[data-theme="cyber"] .cursor-glow {
      opacity: 0.13;
      width: 650px;
      height: 650px;
    }

    canvas#particleCanvas {
      position: fixed;
      inset: 0;
      pointer-events: none;
      z-index: 0;
    }

    .container {
      max-width: 1200px;
      margin: 0 auto;
      position: relative;
      z-index: 1;
    }

    /* ========== 滚动浮现动画 ========== */
    .reveal {
      opacity: 0;
      transform: translateY(36px);
      transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1),
                  transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
    }

    .reveal.in-view {
      opacity: 1;
      transform: none;
    }

    .top-bar.reveal { transition-delay: 0.05s; }
    .header.reveal { transition-delay: 0.15s; }
    .section-title.reveal { transition-delay: 0.1s; }
    .exp-card.reveal:nth-child(1) { transition-delay: 0s; }
    .exp-card.reveal:nth-child(2) { transition-delay: 0.12s; }
    .project-card.reveal:nth-child(1) { transition-delay: 0s; }
    .project-card.reveal:nth-child(2) { transition-delay: 0.12s; }
    .project-card.reveal:nth-child(3) { transition-delay: 0.24s; }
    .project-card.reveal:nth-child(4) { transition-delay: 0.36s; }
    .project-card.reveal:nth-child(5) { transition-delay: 0.48s; }
    .project-card.reveal:nth-child(6) { transition-delay: 0.6s; }
    .page-footer.reveal { transition-delay: 0.2s; }

    /* ========== 顶部栏 ========== */
    .top-bar {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 20px;
      gap: 12px;
      flex-wrap: wrap;
    }

    .theme-switcher {
      display: flex;
      align-items: center;
      gap: 6px;
      padding: 5px;
      border-radius: 12px;
      background: var(--card-bg);
      border: 1px solid var(--border);
      backdrop-filter: blur(12px);
      box-shadow: var(--card-glow);
    }

    .theme-btn {
      width: 38px;
      height: 38px;
      border: 1px solid transparent;
      border-radius: 8px;
      background: transparent;
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: all 0.25s ease;
      position: relative;
      color: var(--text-secondary);
    }

    .theme-btn:hover {
      background: var(--accent-soft);
      border-color: var(--accent-border);
      color: var(--accent);
    }

    .theme-btn.active {
      background: linear-gradient(135deg, var(--accent), var(--accent2));
      color: var(--btn-text);
      box-shadow: var(--glow);
      border-color: transparent;
    }

    .theme-btn svg {
      width: 18px;
      height: 18px;
      stroke: currentColor;
      fill: none;
      stroke-width: 2;
      stroke-linecap: round;
      stroke-linejoin: round;
    }

    .theme-btn .tooltip {
      position: absolute;
      bottom: -32px;
      left: 50%;
      transform: translateX(-50%) translateY(-4px);
      background: var(--card-bg);
      border: 1px solid var(--border);
      color: var(--text);
      font-size: 12px;
      padding: 4px 10px;
      border-radius: 6px;
      white-space: nowrap;
      opacity: 0;
      pointer-events: none;
      transition: all 0.2s ease;
      backdrop-filter: blur(10px);
      z-index: 10;
    }

    .theme-btn:hover .tooltip {
      opacity: 1;
      transform: translateX(-50%) translateY(0);
    }

    .pdf-link {
      text-decoration: none;
      background: linear-gradient(135deg, var(--accent), var(--accent2));
      color: var(--btn-text);
      padding: 10px 18px;
      border-radius: 8px;
      font-size: 14px;
      font-weight: 600;
      box-shadow: var(--glow);
      transition: 0.22s ease;
    }

    .pdf-link:hover {
      transform: translateY(-2px);
      box-shadow: var(--glow-hover);
    }

    /* ========== 头部 ========== */
    .header {
      text-align: center;
      margin-bottom: 70px;
      padding: 60px 20px;
      border-radius: 16px;
      background: var(--header-bg);
      border: 1px solid var(--border);
      box-shadow: var(--header-glow);
      backdrop-filter: blur(18px);
      position: relative;
      overflow: hidden;
      transition: background 0.4s ease, border-color 0.4s ease, box-shadow 0.4s ease;
      will-change: transform, opacity;
    }

    .header::before {
      content: "";
      position: absolute;
      width: 180px;
      height: 180px;
      background: var(--header-orb);
      top: -90px;
      right: -90px;
      transition: background 0.4s ease;
    }

    body[data-theme="cyber"] .header::after {
      content: "";
      position: absolute;
      width: 200px;
      height: 200px;
      background: radial-gradient(circle, rgba(34, 211, 238, 0.15), transparent 70%);
      bottom: -100px;
      left: -100px;
      animation: orbPulse 4s ease-in-out infinite;
    }

    @keyframes orbPulse {
      0%, 100% { opacity: 0.5; transform: scale(1); }
      50% { opacity: 1; transform: scale(1.2); }
    }

    .header h1 {
      font-size: 34px;
      margin-bottom: 12px;
      background: linear-gradient(90deg, var(--accent), var(--accent2), var(--accent3));
      background-size: 200% auto;
      -webkit-background-clip: text;
      background-clip: text;
      color: transparent;
      animation: shine 6s linear infinite;
      text-shadow: var(--neon-text);
      will-change: transform;
    }

    @keyframes shine {
      0% { background-position: 0% center; }
      100% { background-position: 200% center; }
    }

    .header p.desc {
      font-size: 16px;
      color: var(--text-secondary);
      max-width: 760px;
      margin: 0 auto 24px;
      line-height: 1.75;
      transition: color 0.4s ease;
      will-change: transform;
    }

    .tags-wrap {
      display: flex;
      flex-wrap: wrap;
      gap: 10px;
      justify-content: center;
      will-change: transform;
    }

    .tag {
      background: var(--accent-soft);
      border: 1px solid var(--accent-border);
      padding: 6px 14px;
      border-radius: 20px;
      font-size: 13px;
      color: var(--accent-text);
      letter-spacing: 0.5px;
      transition: all 0.3s ease;
      cursor: default;
    }

    .tag:hover {
      transform: translateY(-2px);
      background: var(--accent);
      color: var(--btn-text);
      box-shadow: var(--glow);
      border-color: transparent;
    }

    body[data-theme="cyber"] .tag {
      text-shadow: 0 0 6px rgba(34, 211, 238, 0.5);
    }

    /* ========== 工作经验 ========== */
    .exp-list {
      display: flex;
      flex-direction: column;
      gap: 24px;
      margin-bottom: 56px;
    }

    .exp-card {
      background: var(--card-bg);
      border: 1px solid var(--border);
      border-radius: 16px;
      padding: 24px 26px 22px;
      backdrop-filter: blur(20px);
      box-shadow: var(--card-glow);
      position: relative;
      overflow: hidden;
      transition: border-color 0.3s ease, box-shadow 0.3s ease;
    }

    .exp-card:hover {
      border-color: var(--border-hover);
      box-shadow: var(--card-glow-hover);
    }

    body[data-theme="cyber"] .exp-card:hover {
      border-color: var(--accent);
      box-shadow: 0 0 30px rgba(34, 211, 238, 0.3), 0 0 60px rgba(167, 139, 250, 0.15), 0 12px 28px rgba(0,0,0,0.3);
    }

    .exp-card::before {
      content: "";
      position: absolute;
      left: 0;
      top: 0;
      bottom: 0;
      width: 3px;
      background: linear-gradient(180deg, var(--accent), var(--accent2));
      transition: background 0.4s ease;
    }

    .exp-top {
      display: flex;
      justify-content: space-between;
      align-items: flex-start;
      gap: 12px;
      flex-wrap: wrap;
      margin-bottom: 16px;
    }

    .exp-title h3 {
      font-size: 18px;
      color: var(--text);
      margin-bottom: 4px;
      transition: color 0.4s ease;
    }

    body[data-theme="cyber"] .exp-title h3 {
      text-shadow: 0 0 8px rgba(34, 211, 238, 0.4);
    }

    .exp-company {
      font-size: 13px;
      color: var(--accent-text);
      transition: color 0.4s ease;
    }

    .exp-date {
      font-size: 13px;
      color: var(--text-muted);
      background: var(--accent-soft);
      border: 1px solid var(--accent-border);
      padding: 4px 12px;
      border-radius: 20px;
      white-space: nowrap;
      transition: all 0.3s ease;
    }

    .exp-card:hover .exp-date {
      border-color: var(--accent);
      color: var(--accent-text);
    }

    .exp-duty-title {
      font-size: 13px;
      font-weight: 600;
      color: var(--accent);
      letter-spacing: 1px;
      margin-bottom: 12px;
      padding-left: 10px;
      border-left: 3px solid var(--accent);
      transition: color 0.4s ease, border-color 0.4s ease;
    }

    .exp-duty-list {
      list-style: none;
      padding: 0;
      margin: 0;
      display: flex;
      flex-direction: column;
      gap: 10px;
    }

    .exp-duty-item {
      display: flex;
      align-items: flex-start;
      gap: 10px;
      font-size: 14px;
      line-height: 1.7;
      color: var(--text-secondary);
      transition: color 0.4s ease;
    }

    .exp-duty-item::before {
      content: "";
      flex-shrink: 0;
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: var(--accent);
      margin-top: 9px;
      box-shadow: var(--glow);
    }

    /* ========== 项目区 ========== */
    .section-title {
      font-size: 22px;
      margin-bottom: 28px;
      display: flex;
      align-items: center;
      gap: 12px;
      color: var(--text);
      transition: color 0.4s ease;
    }

    .section-title::before {
      content: "";
      width: 4px;
      height: 24px;
      border-radius: 2px;
      background: linear-gradient(180deg, var(--accent), var(--accent2));
      box-shadow: var(--title-glow);
      transition: all 0.4s ease;
    }

    .project-list {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
      gap: 28px;
    }

    .project-card {
      background: var(--card-bg);
      border: 1px solid var(--border);
      border-radius: 16px;
      overflow: hidden;
      display: flex;
      flex-direction: column;
      transition: transform 0.15s ease-out, box-shadow 0.3s ease, border-color 0.3s ease;
      backdrop-filter: blur(20px);
      box-shadow: var(--card-glow);
      position: relative;
      transform-style: preserve-3d;
      perspective: 1000px;
    }

    .project-card:hover {
      border-color: var(--border-hover);
      box-shadow: var(--card-glow-hover);
    }

    body[data-theme="cyber"] .project-card:hover {
      border-color: var(--accent);
      box-shadow: 0 0 30px rgba(34, 211, 238, 0.3), 0 0 60px rgba(167, 139, 250, 0.15), 0 12px 28px rgba(0,0,0,0.3);
    }

    /* 卡片高光层 */
    .card-shine {
      position: absolute;
      inset: 0;
      border-radius: 16px;
      background: radial-gradient(circle at var(--mx, 50%) var(--my, 50%), rgba(255,255,255,0.1), transparent 55%);
      pointer-events: none;
      opacity: 0;
      transition: opacity 0.3s ease;
      z-index: 2;
    }

    .project-card:hover .card-shine {
      opacity: 1;
    }

    /* 卡片分类标签 */
    .card-category {
      position: absolute;
      top: 14px;
      left: 14px;
      background: var(--card-bg);
      border: 1px solid var(--border);
      backdrop-filter: blur(10px);
      padding: 4px 12px;
      border-radius: 20px;
      font-size: 12px;
      color: var(--accent-text);
      z-index: 3;
      letter-spacing: 0.5px;
    }

    .card-img-wrap {
      width: 100%;
      height: 200px;
      background: var(--card-img-grad);
      display: flex;
      align-items: center;
      justify-content: center;
      position: relative;
      overflow: hidden;
      transition: background 0.4s ease;
    }

    .card-img-wrap::after {
      content: "Demo Preview";
      color: var(--card-img-text);
      font-size: 13px;
      letter-spacing: 1px;
      transition: color 0.4s ease;
      z-index: 1;
    }

    body[data-theme="cyber"] .card-img-wrap::after {
      text-shadow: 0 0 10px rgba(34, 211, 238, 0.6);
      animation: flicker 3s infinite;
    }

    @keyframes flicker {
      0%, 100% { opacity: 1; }
      92% { opacity: 1; }
      93% { opacity: 0.4; }
      94% { opacity: 1; }
      96% { opacity: 0.6; }
      97% { opacity: 1; }
    }

    .card-img-wrap img {
      width: 100%;
      height: 100%;
      object-fit: cover;
      display: block;
      transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
    }

    .project-card:hover .card-img-wrap img {
      transform: scale(1.06);
    }

    .card-body {
      padding: 22px;
      flex-grow: 1;
      display: flex;
      flex-direction: column;
      position: relative;
      z-index: 1;
    }

    .card-body h3 {
      margin-bottom: 10px;
      font-size: 18px;
      color: var(--text);
      transition: color 0.4s ease;
    }

    body[data-theme="cyber"] .card-body h3 {
      text-shadow: 0 0 8px rgba(34, 211, 238, 0.4);
    }

    .card-body .intro {
      color: var(--text-secondary);
      font-size: 14px;
      margin-bottom: 16px;
      flex-grow: 1;
      line-height: 1.7;
      white-space: pre-line;
      transition: color 0.4s ease;
    }

    .project-desc {
      color: var(--text-secondary);
      font-size: 14px;
      line-height: 1.75;
      margin-bottom: 18px;
      transition: color 0.4s ease;
    }

    .achievements-block {
      margin-bottom: 18px;
      flex-grow: 1;
    }

    .achievements-title {
      font-size: 13px;
      font-weight: 600;
      color: var(--accent);
      letter-spacing: 1px;
      margin-bottom: 12px;
      padding-left: 10px;
      border-left: 3px solid var(--accent);
      transition: color 0.4s ease, border-color 0.4s ease;
    }

    .achievements-list {
      list-style: none;
      padding: 0;
      margin: 0;
      display: flex;
      flex-direction: column;
      gap: 10px;
    }

    .achievement-item {
      display: flex;
      align-items: flex-start;
      gap: 10px;
      font-size: 13px;
      line-height: 1.65;
      color: var(--text-secondary);
      transition: color 0.4s ease;
    }

    .achievement-num {
      flex-shrink: 0;
      font-size: 11px;
      font-weight: 700;
      color: var(--accent-text);
      background: var(--accent-soft);
      border: 1px solid var(--accent-border);
      border-radius: 4px;
      padding: 2px 6px;
      margin-top: 1px;
      min-width: 28px;
      text-align: center;
      transition: all 0.3s ease;
    }

    .project-card:hover .achievement-num {
      background: var(--accent);
      color: var(--btn-text);
      border-color: transparent;
    }

    .achievement-text {
      flex: 1;
    }

    .tech-small {
      font-size: 13px;
      color: var(--text-muted);
      margin-bottom: 18px;
      transition: color 0.4s ease;
    }

    .btn-group {
      display: flex;
      gap: 10px;
    }

    a.btn {
      display: block;
      text-align: center;
      padding: 10px 14px;
      border-radius: 8px;
      text-decoration: none;
      font-size: 14px;
      font-weight: 500;
      line-height: 1.6;
      transition: 0.22s ease;
      color: #fff
    }

    button.btn {
      display: block;
      text-align: center;
      padding: 10px 14px;
      border-radius: 8px;
      font-size: 14px;
      font-weight: 500;
      font-family: inherit;
      line-height: 1.6;
      border: none;
      cursor: pointer;
      transition: 0.22s ease;
      color:#fff
    }

    .btn-preview {
      flex: 1;
      background: linear-gradient(135deg, var(--accent), var(--accent2));
      color: var(--btn-text);
      box-shadow: var(--glow);
      border: none;
      cursor: pointer;
      font-family: inherit;
    }

    .btn-preview:hover {
      box-shadow: var(--glow-hover);
    }

    /* ========== 媒体弹窗（图片 / 视频） ========== */
    .modal-overlay {
      position: fixed;
      inset: 0;
      z-index: 1000;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 24px;
      background: rgba(2, 6, 23, 0.82);
      backdrop-filter: blur(14px);
      -webkit-backdrop-filter: blur(14px);
      opacity: 0;
      visibility: hidden;
      transition: opacity 0.28s ease, visibility 0.28s ease;
    }

    .modal-overlay.show {
      opacity: 1;
      visibility: visible;
    }

    .modal-box {
      position: relative;
      max-width: min(98%, 100%);
      max-height: 92vh;
      background: var(--card-bg);
      border: 1px solid var(--border);
      border-radius: 16px;
      box-shadow: var(--card-glow-hover);
      overflow: hidden;
      transform: scale(0.94) translateY(10px);
      transition: transform 0.28s cubic-bezier(0.16, 1, 0.3, 1);
    }

    .modal-overlay.show .modal-box {
      transform: none;
    }

    .modal-close {
      position: absolute;
      top: 12px;
      right: 12px;
      z-index: 2;
      width: 36px;
      height: 36px;
      border-radius: 10px;
      border: 1px solid var(--border);
      background: var(--card-bg);
      backdrop-filter: blur(8px);
      color: var(--text-secondary);
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: all 0.22s ease;
    }

    .modal-close:hover {
      background: linear-gradient(135deg, var(--accent), var(--accent2));
      color: var(--btn-text);
      box-shadow: var(--glow);
      border-color: transparent;
    }

    .modal-close svg {
      width: 16px;
      height: 16px;
      stroke: currentColor;
      stroke-width: 2.4;
      fill: none;
      stroke-linecap: round;
      stroke-linejoin: round;
    }

    .modal-body img,
    .modal-body video {
      display: block;
      width: 100%;
      max-height: 88vh;
      object-fit: contain;
      background: #020617;
    }

    /* ========== 页脚 ========== */
    .page-footer {
      text-align: center;
      padding: 24px 0;
      color: var(--text-muted);
      font-size: 14px;
      transition: color 0.4s ease;
    }

    .page-footer a {
      color: var(--accent);
      text-decoration: none;
      transition: color 0.3s ease;
    }

    .page-footer a:hover {
      color: var(--accent2);
      text-decoration: underline;
    }

    /* 持续更新按钮 */
    .updating-wrap {
      text-align: center;
      padding: 56px 0 28px;
    }

    .updating-btn {
      display: inline-flex;
      align-items: center;
      gap: 10px;
      padding: 12px 32px;
      border: none;
      border-radius: 999px;
      cursor: pointer;
      font-size: 15px;
      font-weight: 600;
      letter-spacing: 1px;
      color: var(--btn-text);
      background: linear-gradient(135deg, var(--accent), var(--accent2));
      box-shadow: var(--glow);
      transition: transform 0.25s ease, box-shadow 0.25s ease;
    }

    .updating-btn:hover {
      transform: translateY(-2px);
      box-shadow: var(--glow-hover);
    }

    .updating-btn .pulse-dot {
      width: 9px;
      height: 9px;
      border-radius: 50%;
      background: var(--btn-text);
      opacity: 0.9;
      animation: pulseDot 1.6s ease-in-out infinite;
    }

    @keyframes pulseDot {
      0%, 100% { opacity: 1; transform: scale(1); }
      50% { opacity: 0.35; transform: scale(0.75); }
    }

    /* 酷炫模式扫描线 */
    body[data-theme="cyber"]::after {
      content: "";
      position: fixed;
      inset: 0;
      background: repeating-linear-gradient(
        0deg,
        transparent,
        transparent 2px,
        rgba(34, 211, 238, 0.015) 2px,
        rgba(34, 211, 238, 0.015) 4px
      );
      pointer-events: none;
      z-index: 0;
    }

    @media (max-width: 768px) {
      .project-list {
        grid-template-columns: 1fr;
      }

      .header h1 {
        font-size: 28px;
      }

      .top-bar {
        flex-direction: column-reverse;
        align-items: stretch;
      }

      .theme-switcher {
        justify-content: center;
      }

      .pdf-link {
        text-align: center;
      }

      .cursor-glow {
        display: none;
      }
    }
    /* ========== 移动端访问提示 ========== */
    .mobile-gate {
      position: fixed;
      inset: 0;
      z-index: 2000;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 24px;
      background: rgba(2, 6, 23, 0.82);
      backdrop-filter: blur(14px);
      -webkit-backdrop-filter: blur(14px);
      opacity: 0;
      visibility: hidden;
      transition: opacity 0.28s ease, visibility 0.28s ease;
    }

    .mobile-gate.show {
      opacity: 1;
      visibility: visible;
    }

    .gate-box {
      width: 100%;
      max-width: 400px;
      background: var(--card-bg);
      border: 1px solid var(--border);
      border-radius: 16px;
      box-shadow: var(--card-glow-hover);
      padding: 30px 26px 24px;
      text-align: center;
      transform: scale(0.94) translateY(10px);
      transition: transform 0.28s cubic-bezier(0.16, 1, 0.3, 1);
    }

    .mobile-gate.show .gate-box {
      transform: none;
    }

    /* 纯 CSS 绘制的显示器示意（无图片） */
    .gate-device {
      width: 150px;
      margin: 0 auto 22px;
    }

    .device-screen {
      height: 88px;
      border: 2px solid var(--accent-border);
      border-radius: 8px 8px 0 0;
      background: var(--card-img-grad);
      box-shadow: var(--glow);
      padding: 10px;
      display: flex;
      flex-direction: column;
      gap: 6px;
    }

    .screen-topbar {
      width: 40%;
      height: 6px;
      border-radius: 3px;
      background: var(--accent);
      opacity: 0.6;
    }

    .screen-hero {
      height: 26px;
      border-radius: 4px;
      background: var(--accent-soft);
      border: 1px solid var(--accent-border);
      display: flex;
      align-items: center;
      justify-content: center;
    }

    .screen-hero span {
      width: 55%;
      height: 4px;
      border-radius: 2px;
      background: var(--accent-border);
    }

    .screen-cards {
      flex: 1;
      display: flex;
      gap: 6px;
    }

    .screen-cards span {
      flex: 1;
      border-radius: 3px;
      background: var(--accent-soft);
      border: 1px solid var(--accent-border);
    }

    .device-neck {
      width: 18px;
      height: 12px;
      margin: 0 auto;
      background: var(--text-muted);
      opacity: 0.5;
    }

    .device-base {
      width: 74px;
      height: 4px;
      margin: 0 auto;
      border-radius: 2px;
      background: var(--text-muted);
      opacity: 0.5;
    }

    .gate-title {
      font-size: 20px;
      margin-bottom: 10px;
      background: linear-gradient(90deg, var(--accent), var(--accent2));
      -webkit-background-clip: text;
      background-clip: text;
      color: transparent;
      text-shadow: var(--neon-text);
    }

    .gate-desc {
      font-size: 14px;
      line-height: 1.7;
      color: var(--text-secondary);
      margin-bottom: 22px;
    }

    .gate-btns {
      display: flex;
      flex-direction: column;
      gap: 10px;
    }

    .gate-btn {
      display: block;
      width: 100%;
      padding: 12px 16px;
      border-radius: 10px;
      font-size: 15px;
      font-weight: 600;
      font-family: inherit;
      line-height: 1.5;
      cursor: pointer;
      transition: all 0.22s ease;
    }

    .gate-btn-primary {
      background: linear-gradient(135deg, var(--accent), var(--accent2));
      color: var(--btn-text);
      border: none;
      box-shadow: var(--glow);
    }

    .gate-btn-primary:hover {
      box-shadow: var(--glow-hover);
      transform: translateY(-2px);
    }

    .gate-btn-primary.copied {
      background: linear-gradient(135deg, var(--accent3), var(--accent));
    }

    .gate-btn-ghost {
      background: transparent;
      border: 1px solid var(--border);
      color: var(--text-secondary);
    }

    .gate-btn-ghost:hover {
      background: var(--accent-soft);
      border-color: var(--border-hover);
      color: var(--text);
    }

    .gate-tip {
      margin-top: 18px;
      font-size: 12px;
      line-height: 1.6;
      color: var(--text-muted);
    }
    /* ========== 移动端预览按钮禁用 ========== */
    .btn-preview-mobile {
      opacity: 0.55;
      cursor: default;
    }

    .btn-preview-mobile:hover,
    .btn-preview-mobile:active {
      box-shadow: var(--glow);
      transform: none;
      opacity: 0.55;
    }

    /* ========== 项目小 banner（纯 CSS 渐变生成，后续可替换为图片） ========== */
    .banner-wrap {
      position: relative;
      overflow: hidden;
      background:
        radial-gradient(circle at 16% 18%, hsla(var(--bh, 199), 90%, 60%, 0.20), transparent 42%),
        radial-gradient(circle at 88% 82%, hsla(calc(var(--bh, 199) + 55), 88%, 58%, 0.16), transparent 46%),
        linear-gradient(135deg, hsla(var(--bh, 199), 85%, 45%, 0.10), transparent 55%),
        var(--card-bg);
    }

    .banner-wrap::after {
      content: none;
    }

    .banner-wrap::before {
      content: "";
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
      height: 3px;
      background: linear-gradient(90deg, var(--accent), var(--accent2), transparent);
      opacity: 0.85;
    }

    .banner-grid {
      position: absolute;
      inset: 0;
      background-image:
        linear-gradient(hsla(var(--bh, 199), 90%, 70%, 0.07) 1px, transparent 1px),
        linear-gradient(90deg, hsla(var(--bh, 199), 90%, 70%, 0.07) 1px, transparent 1px);
      background-size: 26px 26px;
      pointer-events: none;
    }

    .banner-ring {
      position: absolute;
      width: 130px;
      height: 130px;
      right: -34px;
      top: -34px;
      border: 1px solid hsla(var(--bh, 199), 90%, 70%, 0.22);
      border-radius: 50%;
      pointer-events: none;
    }

    .banner-title {
      position: absolute;
      left: 18px;
      right: 18px;
      bottom: 16px;
      z-index: 1;
      font-size: 17px;
      font-weight: 700;
      line-height: 1.45;
      color: var(--text);
      text-align: left;
      text-shadow: var(--neon-text);
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
      overflow: hidden;
    }

    .banner-cat {
      position: absolute;
      right: 12px;
      top: 12px;
      z-index: 1;
      font-size: 11px;
      letter-spacing: 0.5px;
      color: var(--accent-text);
      background: var(--accent-soft);
      border: 1px solid var(--accent-border);
      padding: 3px 10px;
      border-radius: 20px;
    }

    /* ========== 移动端预览提示 Toast ========== */
    .mobile-tip-toast {
      position: fixed;
      left: 50%;
      bottom: 34px;
      transform: translateX(-50%) translateY(16px);
      z-index: 2200;
      display: flex;
      align-items: center;
      gap: 8px;
      padding: 12px 18px;
      border-radius: 12px;
      background: var(--card-bg);
      border: 1px solid var(--border);
      backdrop-filter: blur(14px);
      -webkit-backdrop-filter: blur(14px);
      box-shadow: var(--card-glow-hover);
      font-size: 14px;
      color: var(--text-secondary);
      white-space: nowrap;
      opacity: 0;
      visibility: hidden;
      transition: opacity 0.25s ease, visibility 0.25s ease, transform 0.25s ease;
    }

    .mobile-tip-toast.show {
      opacity: 1;
      visibility: visible;
      transform: translateX(-50%) translateY(0);
    }

    .mobile-tip-toast svg {
      width: 16px;
      height: 16px;
      stroke: var(--accent);
      fill: none;
      stroke-width: 2;
      stroke-linecap: round;
      stroke-linejoin: round;
      flex-shrink: 0;
    }
    /* ========== 项目 banner 图片（叠加标题） ========== */
    .banner-img-wrap {
      background: var(--card-bg);
    }

    .banner-img-wrap::after {
      content: "";
      position: absolute;
      inset: 0;
      background: linear-gradient(180deg, rgba(15, 23, 42, 0.03) 30%, rgba(15, 23, 42, 0.62) 100%);
    }

    .banner-img-wrap img {
      width: 100%;
      height: 100%;
      object-fit: cover;
      display: block;
    }

    .banner-img-wrap .banner-title {
      color: #fff;
      text-shadow: 0 2px 10px rgba(0, 0, 0, 0.65);
    }

    .banner-img-wrap .banner-cat {
      background: rgba(2, 6, 23, 0.5);
      border-color: rgba(255, 255, 255, 0.28);
      color: #fff;
      backdrop-filter: blur(6px);
      -webkit-backdrop-filter: blur(6px);
    }

    /* ========== 移动端预览提示 Toast（顶部展示，覆盖默认底部位置） ========== */
    .mobile-tip-toast {
      top: 30px;
      bottom: auto;
      transform: translateX(-50%) translateY(-16px);
    }

    .mobile-tip-toast.show {
      transform: translateX(-50%) translateY(0);
    }
