
        /* Xiang 个人网站样式表 v1.8.6
         * 深色主题：暗色背景 + 浅色文字 + 毛玻璃效果 + 动态渐变点缀
         *       Canvas 星空背景、自定义光标、滚动渐显、卡片 3D 倾斜、响应式布局 */
        /* ---- CSS 变量定义 ---- */
        /* 这些变量定义了全站使用的颜色和间距，确保样式一致性 */
        :root {
            --bg: #090a0d;
            --paper: #14161b;
            --paper-strong: #1b1e25;
            --ink: #f5f1e8;
            --muted: #a6a093;
            --line: rgba(245, 241, 232, 0.13);
            --blue: #7894ff;
            --red: #ff735d;
            --green: #62c89d;
            --gold: #d7a84f;
            --shadow: 0 28px 86px rgba(0, 0, 0, 0.46);
            --radius: 8px;
            --card-bg: rgba(20, 22, 27, 0.76);
            --hover-bg: rgba(245, 241, 232, 0.1);
            --glass-bg: rgba(20, 22, 27, 0.2);
            --glass-nav: rgba(18, 18, 24, 0.45);
            --glass-blur-nav: blur(48px) saturate(2) brightness(1.08);
            --glass-blur-card: blur(64px) saturate(2) brightness(1.08);
            --glass-blur: blur(20px);
        }

        /* ---- 全局盒模型和基础样式重置 ---- */
        * {
            box-sizing: border-box;
        }

        /* 为所有元素启用 border-box，简化宽高计算 */
        html {
            scroll-behavior: smooth;
        }

        /* ---- 页面根元素基础 ---- */
        /* 深色背景 + 微软雅黑优先 + 平滑滚动过渡 */
        /* 跨浏览器字体栈确保各平台显示一致 */
        body {
            margin: 0;
            color: var(--ink);
            animation: pageIn 0.8s ease;
            cursor: none;
            background: var(--bg);
            font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
            line-height: 1.65;
            letter-spacing: 0;
        }

        /* 强制所有可交互元素的光标为自定义样式 */
        a, button, input, textarea, select,
        .button, .nav-links a, .contact-list a,
        .menu-toggle, .work-link, .brand {
            cursor: none;
        }

        /* 手机端菜单打开时禁止页面滚动 */
        body.menu-open {
            overflow: hidden;
        }

        /* 重置链接样式颜色继承父元素 */
        a {
            color: inherit;
            text-decoration: none;
        }

        /* 图片和画布默认块级显示，防止底部间隙 */
        img,
        svg,
        canvas {
            display: block;
            max-width: 100%;
        }

        /* ---- 导航栏 ---- */
        /* 固定在页面顶部，初始状态透明 */
        /* pointer-events: none 使导航栏不阻挡下方内容，子元素单独启用 */
        .site-header {
            position: fixed;
            top: 18px;
            left: 0;
            right: 0;
            z-index: 20;
            pointer-events: none;
            transition: transform 400ms cubic-bezier(.4,0,.2,1);
        }
        .header-hidden {
            transform: translateY(-140%) !important;
        }

        /* 导航栏内部容器 — "胶囊"形状：半透明背景 + 圆角 + 毛玻璃效果 */
        .nav-shell {
            width: min(1120px, calc(100% - 32px));
            margin: 0 auto;
            padding: 9px;
            display: flex;
            align-items: center;
            justify-content: space-between;
            gap: 14px;
            background: rgba(20, 22, 27, 0.4);
            border: none;
            border-radius: 999px;
            box-shadow:
                0 8px 40px rgba(0, 0, 0, 0.25),
                0 1px 0 rgba(255, 255, 255, 0.04) inset;
            -webkit-backdrop-filter: var(--glass-blur-nav);
            backdrop-filter: var(--glass-blur-nav);
            pointer-events: auto;
        }

        /* 左侧品牌标识区域包含 logo + "主站"文字链接 */
        .brand {
            display: inline-flex;
            align-items: center;
            gap: 10px;
            padding: 7px 13px 7px 8px;
            font-weight: 750;
        }

        /* logo 圆形图标：深色底 + 浅色底中圆形里显示 "X" 字母 */
        .brand-mark {
            width: 30px;
            height: 30px;
            display: grid;
            place-items: center;
            color: var(--bg);
            background: var(--ink);
            border-radius: 50%;
            font-size: 0.78rem;
            letter-spacing: 0.02em;
        }

        /* 右侧导航链接水平排列，均匀分布在品牌标识右侧 */
        .nav-links {
            display: flex;
            align-items: center;
            gap: 4px;
        }

        /* 导航链接的基础颜色继承 + 圆角样式 */
        .nav-links a {
            padding: 8px 12px;
            color: var(--muted);
            border-radius: 999px;
            font-size: 0.92rem;
            transition: color 240ms ease, background 240ms ease, transform 240ms ease;
        }

        /* 鼠标悬停/当前活跃链接的高亮颜色 + 微微上移 */
        .nav-links a:hover,
        .nav-links a.is-active {
            color: var(--ink);
            background: var(--hover-bg);
            transform: translateY(-1px);
        }

        /* ---- 手机端汉堡菜单按钮 ---- */
        /* 默认隐藏，小屏时用网格布局居中显示一个圆角按钮 */
        .menu-toggle {
            display: none;
            width: 40px;
            height: 40px;
            place-items: center;
            border: 0;
            border-radius: 50%;
            color: var(--ink);
            background: var(--hover-bg);
            cursor: none;
        }

        /* 按钮图标由一条线段 + 两个伪元素（上下横线）组成 */
        .menu-toggle span,
        .menu-toggle span::before,
        .menu-toggle span::after {
            width: 17px;
            height: 2px;
            display: block;
            position: relative;
            background: currentColor;
            border-radius: 99px;
            transition: transform 240ms ease, opacity 240ms ease;
        }

        .menu-toggle span::before,
        .menu-toggle span::after {
            content: "";
            position: absolute;
            left: 0;
        }

        .menu-toggle span::before {
            top: -6px;
        }

        .menu-toggle span::after {
            top: 6px;
        }

        /* 菜单打开时顶部线段隐藏，两条伪元素旋转成 "X" 形状 */
        .menu-open .menu-toggle span {
            background: transparent;
        }

        .menu-open .menu-toggle span::before {
            transform: translateY(6px) rotate(45deg);
        }

        .menu-open .menu-toggle span::after {
            transform: translateY(-6px) rotate(-45deg);
        }

        /* ---- 主内容区域 ---- */
        /* overflow: hidden 防止子元素溢出产生横向滚动条 */
        /* 初始 opacity:0，加载完成后通过 .main-visible 类触发淡入 */
        main {
            overflow: hidden;
            opacity: 0;
            transition: opacity 0.8s cubic-bezier(0.22, 1, 0.36, 1);
        }
        main.main-visible {
            opacity: 1;
        }

        /* ---- 全局板块通用样式 ---- */
        .section {
            padding: 104px 0;
            position: relative;
            isolation: isolate;
            overflow: hidden;
        }

        /* 每个板块顶部和底部渐变边缘，避免硬切分界线 */
        .section::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            mask-image: linear-gradient(to bottom, transparent 0%, #000 100px, #000 calc(100% - 100px), transparent 100%);
            -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 100px, #000 calc(100% - 100px), transparent 100%);
        }

        .section > .wrap {
            position: relative;
            z-index: 1;
        }

        /* ---- #now 当前状态板块 ---- */
        /* #now 区域内嵌 Canvas 星空背景，由 galaxy.js 控制 */
        /* 图片采用小尺寸模型 + 毛玻璃背景 + 透明度过渡 */
        /* 移动端降级策略：减少粒子数约 35% 的性能损耗 */
        /* 3D 倾斜效果的幅度约为普通卡片的 35%，避免过度晃动 */
        #now {
            background: #090a0d;
            position: relative;
            min-height: 500px;
        }
        #now-canvas {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 0;
            pointer-events: none;
        }
        #now .wrap {
            position: relative;
            z-index: 1;
        }

        /* ---- #now 板块卡片样式 ---- */
        /* 状态卡片和事实卡片共用毛玻璃背景 + 内阴影高光 */
        #now .status-card,
        #now .fact {
            background: rgba(20, 22, 27, 0.4);
            -webkit-backdrop-filter: blur(20px) saturate(1.5);
            backdrop-filter: blur(20px) saturate(1.5);
            border: none;
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.18),
                inset 0 -1px 0 rgba(255, 255, 255, 0.06),
                0 8px 32px rgba(0, 0, 0, 0.3);
        }
        #now .status-card::after,
        #now .fact::after {
            content: "";
            position: absolute;
            inset: 0;
            border-radius: inherit;
            pointer-events: none;
            z-index: 0;
            background:
                linear-gradient(135deg, rgba(255,255,255,0.14) 0%, transparent 50%),
                linear-gradient(315deg, rgba(255,255,255,0.06) 0%, transparent 40%);
        }
        #now .status-card.reveal.is-visible:hover,
        #now .fact.reveal.is-visible:hover {
              border: none;
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.22),
                inset 0 -1px 0 rgba(255, 255, 255, 0.08),
                0 12px 40px rgba(0, 0, 0, 0.35);
        }
        #now .status-card,
        #now .fact {
            transform-style: preserve-3d;
        }

        /* ---- #resume 经历时间线板块 ---- */
        #resume {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0c0a08 0%, #0f0d0a 50%, #0c0a08 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        #resume::before {
            background:
                linear-gradient(90deg, rgba(245, 241, 232, 0.12) 0.5px, transparent 0.5px),
                linear-gradient(0deg, rgba(245, 241, 232, 0.10) 0.5px, transparent 0.5px),
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.06) 1px, transparent 1px),
                radial-gradient(ellipse at 85% 75%, rgba(120, 148, 255, 0.18) 0%, transparent 60%);
            background-size: 40px 40px, 40px 40px, 40px 40px, auto;
        }
        #resume::after {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(2.5px 2.5px at 15% 25%, rgba(215, 168, 79, 0.3), transparent),
                radial-gradient(3px 3px at 75% 65%, rgba(215, 168, 79, 0.42), transparent),
                radial-gradient(2px 2px at 45% 80%, rgba(245, 241, 232, 0.32), transparent),
                radial-gradient(2.5px 2.5px at 90% 15%, rgba(215, 168, 79, 0.45), transparent);
            background-size: 300px 260px;
            animation: driftWarm 22s ease-in-out infinite alternate;
        }

        /* ---- #education 教育板块 ---- */
        #education {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #080a0e 0%, #0a0c11 50%, #080a0e 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        #education::before {
            background:
                linear-gradient(90deg, rgba(245, 241, 232, 0.07) 1px, transparent 1px),
                linear-gradient(0deg, rgba(245, 241, 232, 0.07) 1px, transparent 1px),
                radial-gradient(ellipse at 12% 14%, rgba(98, 200, 157, 0.28) 0%, transparent 68%);
            background-size: 48px 48px, 48px 48px, auto;
        }
        #education::after {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(2px 2px at 15% 40%, rgba(98, 200, 157, 0.28), transparent),
                radial-gradient(3px 3px at 40% 20%, rgba(98, 200, 157, 0.42), transparent),
                radial-gradient(2px 2px at 30% 75%, rgba(245, 241, 232, 0.3), transparent),
                radial-gradient(2.5px 2.5px at 55% 55%, rgba(98, 200, 157, 0.45), transparent);
            background-size: 280px 240px;
            animation: driftCool 20s ease-in-out infinite alternate;
        }

        /* ---- #skills 技能板块 ---- */
        #skills {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0d0b08 0%, #0f0d0a 50%, #0d0b08 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        #skills::before {
            background: none;
        }
        #skills::after {
            background: none;
        }
        #skills-smoke-canvas {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 0;
            pointer-events: none;
            will-change: contents;
        }
        #skills,
        #skills * {
            cursor: none;
        }
        .cursor-dot,
        .cursor-expand,
        .cursor-ring {
            transition: opacity 300ms ease;
        }
        body.skills-cursor-hide .cursor-dot,
        body.skills-cursor-hide .cursor-expand,
        body.skills-cursor-hide .cursor-ring {
            opacity: 0 !important;
            transform: scale(0) !important;
        }
        /* ---- #portfolio 作品展示板块 ---- */
        #portfolio {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                #050507;
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        #portfolio::before {
            background:
                radial-gradient(ellipse at 50% 0%, rgba(245, 241, 232, 0.05) 0%, transparent 60%),
                radial-gradient(ellipse at 50% 50%, rgba(110, 100, 200, 0.26) 0%, transparent 65%);
        }
        #portfolio::after {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(2.5px 2.5px at 20% 15%, rgba(130, 120, 220, 0.4), transparent),
                radial-gradient(3px 3px at 55% 45%, rgba(110, 100, 200, 0.35), transparent),
                radial-gradient(2px 2px at 80% 70%, rgba(245, 241, 232, 0.28), transparent),
                radial-gradient(2.5px 2.5px at 40% 90%, rgba(130, 120, 220, 0.32), transparent);
            background-size: 320px 200px;
            animation: driftDim 26s ease-in-out infinite alternate;
        }

        /* ---- #projects 项目板块 ---- */
        #projects {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0b0a08 0%, #0d0c0a 50%, #0b0a08 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        #projects::before {
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.05) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 10% 16%, rgba(98, 200, 157, 0.28) 0%, transparent 66%);
            background-size: 24px 24px, auto;
        }
        #projects::after {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(2px 2px at 22% 35%, rgba(98, 200, 157, 0.28), transparent),
                radial-gradient(3px 3px at 68% 55%, rgba(98, 200, 157, 0.4), transparent),
                radial-gradient(2px 2px at 45% 80%, rgba(245, 241, 232, 0.3), transparent),
                radial-gradient(2.5px 2.5px at 88% 25%, rgba(98, 200, 157, 0.44), transparent);
            background-size: 270px 230px;
            animation: driftGreen 19s ease-in-out infinite alternate;
        }

        /* ---- #testimonials 评价板块 ---- */
        #testimonials {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #07090d 0%, #090b10 50%, #07090d 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        #testimonials::before {
            background:
                radial-gradient(ellipse at 50% 30%, rgba(120, 148, 255, 0.12) 0%, transparent 55%);
            background-size: auto;
        }
        #testimonials::after {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(2px 2px at 30% 25%, rgba(120, 148, 255, 0.28), transparent),
                radial-gradient(1.5px 1.5px at 70% 60%, rgba(120, 148, 255, 0.2), transparent),
                radial-gradient(2.5px 2.5px at 50% 85%, rgba(245, 241, 232, 0.15), transparent),
                radial-gradient(2px 2px at 15% 65%, rgba(120, 148, 255, 0.24), transparent);
            background-size: 250px 270px;
            animation: driftBlue 21s ease-in-out infinite alternate;
        }

        /* ---- #contact 联系板块 ---- */
        #contact {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0a0808 0%, #0d0a09 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        #contact::before {
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.045) 1.5px, transparent 1.5px),
                radial-gradient(ellipse at 85% 75%, rgba(200, 70, 90, 0.28) 0%, transparent 66%);
            background-size: 48px 48px, auto;
        }
        #contact::after {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(3px 3px at 25% 40%, rgba(200, 70, 90, 0.42), transparent),
                radial-gradient(2.5px 2.5px at 70% 20%, rgba(200, 70, 90, 0.38), transparent),
                radial-gradient(2px 2px at 50% 75%, rgba(245, 241, 232, 0.3), transparent),
                radial-gradient(2.5px 2.5px at 85% 60%, rgba(200, 70, 90, 0.4), transparent);
            background-size: 290px 250px;
            animation: driftRed 23s ease-in-out infinite alternate;
        }

        /* .wrap 容器最大宽度限制为 1120px，水平居中 */
        .wrap {
            width: min(1120px, calc(100% - 40px));
            margin: 0 auto;
        }

        /* ---- Hero 主视觉区域 ---- */
        /* 占位高度与最小高度，保证板块有足够的视觉空间 */
        .hero {
            min-height: 100vh;
            padding: 132px 0 70px;
            display: grid;
            align-items: end;
            position: relative;
            overflow: hidden;
            background: #090a0d;
        }
        .hero #galaxy-canvas {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 0;
        }
        .hero > .wrap {
            position: relative;
            z-index: 1;
        }

        /* ---- Hero 底部渐变遮罩 ---- */
        /* 底部 34% 高度的渐变，从透明过渡到背景色，使 Hero 与下方板块自然衔接 */
        .hero::after {
            content: "";
            position: absolute;
            inset: auto 0 0;
            height: 34%;
            background: linear-gradient(180deg, transparent, rgba(9, 10, 13, 0.96));
            pointer-events: none;
        }

        /* ---- Hero 网格布局 ---- */
        /* 单列网格，垂直对齐到底部，间距随视口宽度自适应 */
        .hero-grid {
            position: relative;
            z-index: 1;
            display: grid;
            grid-template-columns: 1fr;
            gap: clamp(34px, 5vw, 74px);
            align-items: end;
        }

        /* ---- 排版基础 ---- */
        h1,
        h2,
        h3,
        p {
            margin-top: 0;
        }

        /* Hero 问候语 */
        .hero-greeting {
            margin-bottom: 0;
            color: var(--muted);
            font-size: clamp(1.4rem, 3vw, 2.6rem);
            font-weight: 700;
            line-height: 1.2;
            letter-spacing: 0.02em;
        }

        /* 标题层级样式 */
        h1 {
            max-width: 850px;
            margin-bottom: 28px;
            font-family: 'Roboto Flex', Inter, ui-sans-serif, system-ui, sans-serif;
            font-weight: 700;
            font-size: clamp(5.5rem, 14vw, 14rem);
            line-height: 0.88;
            letter-spacing: -0.02em;
        }

        /* Hero 标题默认隐藏 — 问候语动画结束后通过 .hero-fade-in 淡入显示 */
        .hero h1 {
            opacity: 0;
        }

        /* TextPressure 激活状态 — 问候语动画结束后添加，flex 布局 + gap 控制字符间距 */
        .text-pressure-active {
            display: flex;
            gap: 0.04em;
        }

        /* Hero 标题淡入动画 — 问候语动画结束后触发 */
        .hero-fade-in {
            animation: heroFadeIn 0.8s ease forwards;
        }

        @keyframes heroFadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }

        /* 标题层级样式 */
        h2 {
            margin-bottom: 20px;
            font-size: clamp(2.35rem, 5vw, 5.4rem);
            line-height: 0.95;
            letter-spacing: 0;
        }

        /* 标题层级样式 */
        h3 {
            margin-bottom: 10px;
            font-size: clamp(1.25rem, 2vw, 1.75rem);
            line-height: 1.16;
        }

        /* 副标题文本 */
        .lead {
            max-width: 660px;
            color: var(--muted);
            font-size: clamp(1.08rem, 2vw, 1.35rem);
        }

        /* ---- 按钮样式 ---- */
        .hero-actions {
            display: flex;
            flex-wrap: wrap;
            gap: 12px;
            align-items: center;
        }

        /* 主按钮「看作品」实底背景 + 浅色文字 + 悬停阴影 */
        .button {
            min-height: 44px;
            padding: 10px 16px;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: 9px;
            border: 1px solid var(--ink);
            border-radius: 999px;
            color: var(--paper);
            background: var(--ink);
            font-weight: 720;
            transition: transform 240ms ease, box-shadow 240ms ease, background 240ms ease, color 240ms ease;
        }

        .button:hover {
            transform: translateY(-3px);
            box-shadow: 0 10px 30px rgba(0,0,0,0.25);
        }

        /* 次按钮「联系」透明背景 + 继承文字颜色 */
        .button.secondary {
            color: var(--ink);
            background: transparent;
        }

        /* ---- 板块通用标题布局 ---- */
        /* 每个板块左侧小标签「Now」右侧大标题，构成两列网格 */
        .section-head {
            display: grid;
            grid-template-columns: minmax(160px, 0.38fr) minmax(0, 0.62fr);
            gap: clamp(24px, 5vw, 76px);
            align-items: end;
            margin-bottom: 54px;
        }

        /* 板块小标签 — 大写加宽字母间距，灰色调文字 */
        .section-kicker {
            margin: 0;
            color: var(--muted);
            font-size: 0.78rem;
            font-weight: 780;
            letter-spacing: 0.12em;
            text-transform: uppercase;
        }

        /* ---- 关于区域布局 — 未来可选扩展 ---- */
        .about-layout {
            display: grid;
            grid-template-columns: minmax(0, 0.72fr) minmax(280px, 0.28fr);
            gap: 28px;
        }

        /* 个人陈述卡片 — 毛玻璃背景 + 柔和阴影 + 阴影边框 */
        .statement {
            padding: clamp(26px, 5vw, 54px);
            border: 1px solid var(--line);
            border-radius: var(--radius);
            background: var(--glass-bg);
            -webkit-backdrop-filter: var(--glass-blur);
            backdrop-filter: var(--glass-blur);
            box-shadow: 0 10px 30px rgba(0,0,0,0.25);
            transition: transform 300ms ease, box-shadow 300ms ease, border-color 300ms ease;
        }

        .statement:hover {
            border-color: rgba(245, 241, 232, 0.25);
            box-shadow: 0 10px 30px rgba(0,0,0,0.25);
        }

        .statement p:last-child {
            margin-bottom: 0;
        }

        /* 悬停时斜角渐变高光增加质感 */
        .fact-list {
            display: grid;
            gap: 12px;
        }

        /* 技能列表 — 横向滚动条样式 */
        .fact {
            position: relative;
            overflow: hidden;
            padding: 20px;
            border: 1px solid var(--line);
            border-radius: var(--radius);
            background: var(--glass-bg);
            -webkit-backdrop-filter: var(--glass-blur);
            backdrop-filter: var(--glass-blur);
            transition: transform 300ms ease, box-shadow 300ms ease, border-color 300ms ease;
        }

        .fact:hover {
              border: none;
            box-shadow: 0 10px 30px rgba(0,0,0,0.25);
        }

        .fact span {
            display: block;
            margin-bottom: 6px;
            color: var(--muted);
            font-size: 0.78rem;
            font-weight: 780;
            letter-spacing: 0.1em;
            text-transform: uppercase;
        }

        /* 卡片英文补充小字 — 紧跟主值下方，作为中英文换行展示 */
        /* 与上方 .fact span 标签呼应：同为 muted 色，但更小更轻，避免与主值 strong 抢视觉 */
        .fact-en {
            display: block;
            color: var(--muted);
            font-size: 0.72rem;
            font-weight: 500;
            font-style: normal;
            letter-spacing: 0.02em;
            line-height: 1.4;
            opacity: 0.78;
        }


        /* ---- 当前状态板块的卡片样式 ---- */
        .status-grid,
        .project-grid {
            display: grid;
            gap: 14px;
        }

        .status-grid {
            grid-template-columns: 1.15fr 0.85fr;
            align-items: stretch;
        }

        /* 状态卡片 — 目标方向毛玻璃背景 + 边框微光 */
        .status-card,
        .project-card {
            position: relative;
            overflow: hidden;
            border: 1px solid var(--line);
            border-radius: var(--radius);
            background: var(--glass-bg);
            -webkit-backdrop-filter: var(--glass-blur);
            backdrop-filter: var(--glass-blur);
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.22);
        }

        /* 状态卡片文字 — 显示当前专注的学校、专业等 */
        .status-card {
            min-height: 340px;
            padding: clamp(24px, 4vw, 46px);
            display: grid;
            align-content: space-between;
            transition: transform 300ms ease, box-shadow 300ms ease, border-color 300ms ease;
        }

        .status-card:hover {
            border-color: rgba(245, 241, 232, 0.25);
            box-shadow: 0 10px 30px rgba(0,0,0,0.25);
        }

        /* 图片较小的焦点式 — 用于突出学校或专业 */
        .status-card::before,
        .project-card::before {
            content: "";
            position: absolute;
            inset: 0;
            background: linear-gradient(to bottom, rgba(0,0,0,0.45) 0%, rgba(0,0,0,0.05) 30%, rgba(0,0,0,0.05) 70%, rgba(0,0,0,0.5) 100%);
            z-index: -2;
            pointer-events: none;
        }

        /* 项目卡片图片 — 16:9 比例，悬停时轻微放大 */
        .project-img {
            position: relative;
            inset: auto;
            z-index: 1;
            width: 100%;
            height: auto;
            aspect-ratio: 16 / 9;
            object-fit: cover;
            object-position: center;
            transition: transform 520ms ease;
        }

        .project-card:hover .project-img {
            transform: scale(1.05);
        }

        /* 项目卡片遮罩 — 悬停时通过 .dim 类触发径向暗化 */
        .project-card::after {
            content: "";
            position: absolute;
            inset: 0;
            background: radial-gradient(ellipse at center, rgba(0, 0, 0, 0.35) 0%, rgba(0, 0, 0, 0.85) 100%);
            z-index: 2;
            pointer-events: none;
            transition: opacity 520ms ease;
            opacity: 0;
        }

        .project-card.dim::after {
            opacity: 1;
        }

        .status-card > *,
        .project-card > * {
            position: relative;
            z-index: 1;
        }

        .status-card strong {
            display: block;
            max-width: 760px;
            font-size: clamp(2rem, 5vw, 4.8rem);
            line-height: 0.98;
            letter-spacing: 0;
        }

        .status-card p,
        .project-card p {
            color: var(--muted);
        }

        /* 悬停小卡片 — 学校和专业信息 */
        .status-mini {
            display: grid;
            grid-template-columns: repeat(2, minmax(0, 1fr));
            gap: 14px;
        }

        .status-mini .fact {
            min-height: 163px;
            display: flex;
            flex-direction: column;
        }

        /* 中文主值：margin-top:auto 占据剩余空间，把主值与英文小字推至卡片底部紧贴 */
        /* margin-bottom:4px 拉近与英文的距离，使中英文换行更紧凑 */
        .status-mini .fact strong {
            margin-top: auto;
            margin-bottom: 4px;
        }

        /* ---- 项目卡片网格（#projects 板块） ---- */
        /* 4 列网格 + 3D 透视，卡片带旋转倾斜效果 */
        .project-grid {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            gap: 0;
            perspective: 1000px;
        }

        /* 项目卡片 — 渐变背景 + 多层阴影 + 3D 倾斜过渡 */
        .project-card {
            min-height: 160px;
            padding: 0;
            display: grid;
            grid-template-rows: auto 1fr;
            align-content: stretch;
            gap: 0;
            margin: 0 -4.5%;
            background:
                linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.025)),
                rgba(20, 22, 27, 0.64);
            transition: transform 450ms cubic-bezier(.25, .46, .45, .94), 
                        border-color 450ms cubic-bezier(.25, .46, .45, .94), 
                        box-shadow 450ms cubic-bezier(.25, .46, .45, .94),
                        mask-image 450ms cubic-bezier(.25, .46, .45, .94),
                        -webkit-mask-image 450ms cubic-bezier(.25, .46, .45, .94),
                        z-index 0ms;
            box-shadow: 
                0 0 6px rgba(170, 195, 175, 0.12),
                0 4px 20px rgba(0, 0, 0, 0.4),
                0 8px 40px rgba(0, 0, 0, 0.3),
                8px 0 30px rgba(0, 0, 0, 0.5),
                15px 0 60px rgba(0, 0, 0, 0.35),
                0 0 0 1px rgba(170, 195, 175, 0.15);
            overflow: hidden;
        }

        /* 项目卡片层级 — 前 4 张和后 4 张对称分布，营造堆叠效果 */
        .project-card:nth-child(1) { z-index: 4; }
        .project-card:nth-child(2) { z-index: 3; }
        .project-card:nth-child(3) { z-index: 2; }
        .project-card:nth-child(4) { z-index: 1; }
        .project-card:nth-child(5) { z-index: 4; }
        .project-card:nth-child(6) { z-index: 3; }
        .project-card:nth-child(7) { z-index: 2; }
        .project-card:nth-child(8) { z-index: 1; }

        /* 逐级透明度 — 第一个可见，最后一个半透明 */

        .project-card::before {
            z-index: 0;
            background:
                linear-gradient(180deg, transparent 0 42%, rgba(9, 10, 13, 0.44) 43% 100%),
                linear-gradient(135deg, rgba(170, 195, 175, 0.15), transparent 35%),
                radial-gradient(ellipse at 20% 20%, rgba(98, 200, 157, 0.08), transparent 60%);
        }

        /* ---- 项目卡片渐显动画（#projects 板块） ---- */
        /* 卡片进入视口时从下方上移 + 透明度过渡 */
        .project-card.reveal.is-visible {
            transform: translateY(0) rotateY(-12deg);
            transform-origin: center center;
        }

        /* 第 5 张及以后的卡片默认倾斜角度与第一行保持一致 */
        .project-card:nth-child(n+5).reveal.is-visible {
            transform: translateY(0) rotateY(-12deg);
        }
        /* 项目卡片悬停 — 提升层级 + 放大 + 多层绿色光晕阴影 */
        .project-card:hover {
            z-index: 10;
            transform: translateY(-10px) rotateY(0deg) scale(1.04);
            border-color: rgba(170, 195, 175, 0.55);
            box-shadow:
                0 0 8px rgba(170, 195, 175, 0.6),
                0 0 20px rgba(170, 195, 175, 0.5),
                0 0 40px rgba(170, 195, 175, 0.4),
                0 0 70px rgba(170, 195, 175, 0.28),
                0 0 110px rgba(170, 195, 175, 0.18),
                0 0 160px rgba(170, 195, 175, 0.10),
                0 0 220px rgba(98, 200, 157, 0.06),
                0 14px 52px rgba(0, 0, 0, 0.5),
                0 28px 90px rgba(0, 0, 0, 0.38),
                14px 0 56px rgba(0, 0, 0, 0.58),
                28px 0 110px rgba(0, 0, 0, 0.42);
        }

        /* 项目卡片标签 — 底部对齐的圆角胶囊 */
        .project-card .tag {
            margin-top: auto;
            width: fit-content;
            padding: 5px 18px;
            color: var(--ink);
            background: var(--accent);
            border-radius: 999px;
            font-size: 0.76rem;
            font-weight: 800;
            align-self: end;
        }

        .project-card > div {
            align-self: stretch;
            min-height: 0;
            padding: 18px;
            display: flex;
            flex-direction: column;
            gap: 10px;
        }

        .project-card h3 {
            margin-bottom: 0;
            font-size: clamp(1.02rem, 1.35vw, 1.28rem);
            line-height: 1.24;
        }

        .project-card p {
            margin-bottom: 0;
            max-width: none;
            line-height: 1.52;
            overflow-wrap: anywhere;
        }

        /* ---- 时间线样式（#resume 经历板块） ---- */
        .timeline {
            display: grid;
            gap: 14px;
        }

        /* 时间线单项 — 左侧日期 + 右侧内容，毛玻璃卡片 */
        .timeline-item {
            padding: 24px;
            display: grid;
            grid-template-columns: 180px minmax(0, 1fr);
            gap: 28px;
            position: relative;
            overflow: hidden;
            border: none;
            border-radius: var(--radius);
            background: rgba(18, 18, 24, 0.45);
            -webkit-backdrop-filter: var(--glass-blur-nav);
            backdrop-filter: var(--glass-blur-nav);
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.18),
                inset 0 -1px 0 rgba(255, 255, 255, 0.06),
                0 18px 54px rgba(0, 0, 0, 0.24);
            transition: transform 300ms ease, box-shadow 300ms ease;
        }

        .timeline-item::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            background:
                linear-gradient(120deg, rgba(255, 255, 255, 0.16), transparent 34%),
                radial-gradient(circle at 12% 18%, rgba(120, 148, 255, 0.12), transparent 34%);
            pointer-events: none;
        }

        .timeline-item > * {
            position: relative;
            z-index: 2;
        }

        /* 时间线单项悬停 — 增强内阴影高光 */
        .timeline-item:hover {
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.22),
                inset 0 -1px 0 rgba(255, 255, 255, 0.08),
                0 10px 30px rgba(0,0,0,0.25);
        }

        /* 时间线日期文本 — 灰色调小字号 */
        .date {
            color: var(--muted);
            font-size: 0.88rem;
            font-weight: 720;
        }

        /* 时间线角色标签 — 绿色大写强调 */
        .role {
            margin-bottom: 10px;
            color: var(--green);
            font-size: 0.88rem;
            font-weight: 760;
            text-transform: uppercase;
        }

        .timeline-item p {
            margin-bottom: 0;
            color: var(--muted);
        }

        /* ---- 技能网格（#skills 板块） ---- */
        /* 7 列网格布局，每个技能卡片最小宽度 92px */
        .skills-grid {
            display: grid;
            grid-template-columns: repeat(7, minmax(92px, 1fr));
            gap: 10px;
        }

        /* 技能卡片 — 毛玻璃背景 + 悬停提升层级 */
        .skill {
            min-height: 136px;
            position: relative;
            overflow: visible;
            border: 1px solid var(--line);
            border-radius: var(--radius);
            background: var(--glass-bg);
            -webkit-backdrop-filter: var(--glass-blur);
            backdrop-filter: var(--glass-blur);
        }
        .skill:hover { z-index: 3; }
        .skill-content {
            position: relative;
            z-index: 1;
            width: 100%;
            height: 100%;
            padding: 14px;
            display: grid;
            align-content: end;
            overflow: hidden;
            border-radius: inherit;
        }

        /* 技能卡片底部填充条 — 根据 --level 变量显示技能等级 */
        .skill-content::before {
            content: "";
            position: absolute;
            left: 0;
            right: 0;
            bottom: 0;
            height: var(--level);
            background: linear-gradient(180deg, var(--skill-color, rgba(200, 175, 55, var(--glow-low, 0.12))), var(--skill-color-top, rgba(200, 175, 55, var(--glow-high, 0.38))));
            transform: scaleY(0);
            transform-origin: bottom;
            transition: transform 950ms cubic-bezier(.2, .8, .2, 1);
        }

        .skill-content.is-visible::before {
            transform: scaleY(1);
        }

        .skill strong,
        .skill span {
            position: relative;
            z-index: 1;
        }

        .skill span {
            color: var(--muted);
            font-size: 0.8rem;
        }
        /* ---- 技能卡片图标弹出层 ---- */
        /* 固定定位的图标容器，通过 JS 移动到悬停的技能卡片上方 */
        .skill-icons {
            position: fixed;
            left: -9999px;
            top: -9999px;
            display: flex;
            justify-content: flex-start;
            gap: 10px;
            pointer-events: none;
            z-index: 2147483647;
            transform: translate(0, 0);
            transition: transform 520ms cubic-bezier(0.22, 1.0, 0.36, 1.0);
        }
        .skill-icon {
            width: 44px;
            height: 44px;
            border-radius: 10px;
            object-fit: contain;
            opacity: 0;
            transform: scale(0);
            transform-origin: center bottom;
            transition:
                opacity 320ms cubic-bezier(0.34, 1.56, 0.64, 1),
                transform 480ms cubic-bezier(0.22, 1.0, 0.36, 1.0);
        }
        .skill-icon.pop-in {
            opacity: 1;
            transform: scale(1);
        }
        /* ---- 摄影作品网格（#portfolio 板块） ---- */
        /* 4 列网格布局，展示摄影作品卡片 */
        .work-grid {
            display: grid;
            grid-template-columns: repeat(4, minmax(0, 1fr));
            gap: 14px;
        }

        /* 摄影作品卡片 — 背景图 + 毛玻璃 + 悬停蓝色光晕 */
        .work {
            min-height: 330px;
            padding: 18px;
            display: grid;
            align-content: space-between;
            overflow: hidden;
            position: relative;
            border: 1px solid var(--line);
            border-radius: var(--radius);
            color: var(--ink);
            background: var(--glass-bg);
            -webkit-backdrop-filter: var(--glass-blur);
            backdrop-filter: var(--glass-blur);
            isolation: isolate;
            transition: transform 300ms ease, box-shadow 300ms ease, border-color 300ms ease;
        }

        /* 作品卡片渐变遮罩 — 顶部和底部加深，突出文字可读性 */
        .work::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: -2;
            background:
                linear-gradient(to bottom, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.18) 18%, transparent 34%, transparent 66%, rgba(0,0,0,0.18) 82%, rgba(0,0,0,0.56) 100%),
                radial-gradient(ellipse at top, rgba(255,255,255,0.08), transparent 36%),
                radial-gradient(ellipse at bottom, rgba(0,0,0,0.24), transparent 38%);
            transform: scale(1.04);
            transition: transform 520ms ease;
        }

        /* 作品背景图 — 悬停时轻微放大 */
        .work-img {
            position: absolute;
            inset: 0;
            z-index: -3;
            width: 100%;
            height: 100%;
            object-fit: cover;
            object-position: center;
            transition: transform 520ms ease;
        }

        .work:hover .work-img {
            transform: scale(1.05);
        }

        /* 作品卡片 GlareHover 光晕扫过层 — 移植自 React Bits GlareHover 组件 */
        /* 悬停时一道斜向白色光带从左上扫向右下，增强卡片质感；置于图片之上、文字之下以保持可读性 */
        .work::after {
            content: "";
            position: absolute;
            inset: 0;
            z-index: -1;
            pointer-events: none;
            background: linear-gradient(
                -30deg,
                hsla(0, 0%, 0%, 0) 60%,
                rgba(255, 255, 255, 0.3) 70%,
                hsla(0, 0%, 0%, 0),
                hsla(0, 0%, 0%, 0) 100%
            );
            background-size:
                275% 275%,
                100% 100%;
            background-repeat: no-repeat;
            background-position:
                -100% -100%,
                0 0;
            transition: background-position 550ms ease;
        }

        /* 悬停时光带移动到对角，形成扫过动画 */
        .work:hover::after {
            background-position:
                100% 100%,
                0 0;
        }


        .work > * {
            pointer-events: none;
        }
        .work > div {
            text-shadow: 0 2px 12px rgba(0, 0, 0, 0.68), 0 1px 2px rgba(0, 0, 0, 0.64);
        }

        .work > div:first-of-type,
        .work > div:last-of-type {
            filter: drop-shadow(0 6px 14px rgba(0, 0, 0, 0.34));
        }

        /* 作品卡片悬停 — 基础阴影效果 */
        .work:hover {
            box-shadow: 0 10px 30px rgba(0,0,0,0.25);
        }

        .work:hover::before {
            transform: scale(1);
        }

        /* 作品卡片渐显完成状态 */
        .work.reveal.is-visible {
            transform: translateY(0);
            transform-origin: center center;
        }

        /* 作品卡片悬停 — 蓝色光晕 + 上移 + 多层阴影 */
        .work:hover {
            z-index: 2;
            transform: translateY(-4px);
            box-shadow:
                0 0 12px rgba(120, 148, 255, 0.35),
                0 0 28px rgba(120, 148, 255, 0.28),
                0 0 50px rgba(120, 148, 255, 0.20),
                0 0 80px rgba(120, 148, 255, 0.12),
                0 0 120px rgba(120, 148, 255, 0.06),
                0 10px 30px rgba(0,0,0,0.25);
        }

        .work time,
        .work .place {
            color: rgba(255, 253, 248, 0.72);
            font-size: 0.86rem;
            font-weight: 720;
        }

        .work p {
            color: rgba(255, 253, 248, 0.76);
        }

        /* ---- Antigravity 反重力粒子环背景（#testimonials 板块） ---- */
        /* 绝对定位覆盖整个 section，视觉上位于评价卡片下方 */
        .antigravity-stage {
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
        }
        .antigravity-stage canvas {
            display: block;
            width: 100% !important;
            height: 100% !important;
        }

        /* ---- 评价轮播条（#testimonials 板块） ---- */
        /* 多对评价卡片水平排列，通过 JS 控制切换 */
        .quote-strip {
            position: relative;
            padding-bottom: 40px;
        }
        .quote-strip .quote-pair {
            display: flex;
            gap: 14px;
            width: 100%;
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            /* 毛玻璃常显：opacity 始终为 1，避免祖先 opacity<1 破坏 .quote 的 backdrop-filter。
               非活动 pair 以 scale+translate 后退至活动 pair 背后（活动 pair 更大且上浮，完全遮挡非活动 pair），切换时呈现缩放上浮的丝滑过渡。 */
            transform: scale(0.92) translateY(6px);
            pointer-events: none;
            z-index: 1;
            transition: transform 520ms cubic-bezier(0.22, 1, 0.36, 1);
        }
        .quote-strip .quote-pair.pair-active {
            transform: scale(1) translateY(0) !important;
            pointer-events: auto;
            z-index: 2;
        }
        .quote-strip .quote-pair.pair-active .quote {
            opacity: 1 !important;
            transform: none !important;
        }
        /* pair-hidden-* 类仅作语义占位，隐藏由基础规则 transform 后退 + z-index 承担 */
        .quote-strip .quote-pair.pair-hidden-left {
            pointer-events: none;
        }
        .quote-strip .quote-pair.pair-hidden-right {
            pointer-events: none;
        }
        .quote-strip .quote {
            flex: 1 1 0;
            min-width: 0;
        }
        .quote-dots {
            position: absolute;
            bottom: 8px;
            left: 50%;
            transform: translateX(-50%);
            display: flex;
            gap: 12px;
            z-index: 5;
        }
        .quote-dot {
            width: 8px;
            height: 8px;
            border-radius: 50%;
            background: rgba(245, 241, 232, 0.2);
            border: none;
            padding: 0;
            cursor: pointer;
            transition: background 300ms ease, transform 300ms ease;
        }
        .quote-dot.dot-active {
            background: rgba(245, 241, 232, 0.85);
            transform: scale(1.3);
        }
        .quote-dot:hover {
            background: rgba(245, 241, 232, 0.5);
        }

        /* 评价卡片 — 毛玻璃背景 + 悬停边框高亮 */
        .quote {
            position: relative;
            overflow: hidden;
            padding: clamp(24px, 4vw, 38px);
            border: 1px solid var(--line);
            border-radius: var(--radius);
            background: var(--glass-bg);
            -webkit-backdrop-filter: var(--glass-blur);
            backdrop-filter: var(--glass-blur);
            box-shadow: 0 18px 54px rgba(0, 0, 0, 0.2);
            transition: transform 300ms ease, box-shadow 300ms ease, border-color 300ms ease;
        }

        .quote:hover {
            border-color: rgba(245, 241, 232, 0.25);
            box-shadow: 0 10px 30px rgba(0,0,0,0.25);
        }

        .quote p {
            color: var(--muted);
        }

        .quote footer {
            margin-top: 24px;
            color: var(--ink);
            font-weight: 760;
        }

        .quote footer span {
            display: block;
            color: var(--muted);
            font-weight: 520;
        }

        /* ---- 联系区域样式 ---- */
        /* ASCII 文字效果容器 + 下方社交链接 */
        .contact-band {
            display: grid;
            grid-template-columns: minmax(0, 0.9fr) minmax(280px, 0.38fr);
            gap: 28px;
            align-items: end;
        }

        /* ASCII 效果容器：承载 Three.js 渲染的 ASCII 文字
         * 高度随文字放大而增大，容纳 hello/world 两行 */
        .contact-ascii {
            position: relative;
            width: 100%;
            height: clamp(13rem, 34vw, 27rem);
            min-height: 220px;
            overflow: hidden;
        }

        /* ASCII 容器内的 <pre> 字符层：渐变彩色文字 + 差值混合 */
        .contact-ascii pre {
            margin: 0;
            user-select: none;
            padding: 0;
            line-height: 1em;
            text-align: left;
            position: absolute;
            left: 0;
            top: 0;
            background-image: radial-gradient(circle, #ff6188 0%, #fc9867 50%, #ffd866 100%);
            background-attachment: fixed;
            -webkit-text-fill-color: transparent;
            -webkit-background-clip: text;
            background-clip: text;
            z-index: 9;
            mix-blend-mode: difference;
        }

        /* ASCII 容器内的采样画布：像素化渲染保证字符清晰 */
        .contact-ascii canvas {
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            image-rendering: optimizeSpeed;
            image-rendering: -moz-crisp-edges;
            image-rendering: -o-crisp-edges;
            image-rendering: -webkit-optimize-contrast;
            image-rendering: optimize-contrast;
            image-rendering: crisp-edges;
            image-rendering: pixelated;
        }

        /* 社交链接列表样式 */
        .contact-list {
            display: grid;
            gap: 10px;
        }

        /* 社交链接 — 悬停时光标下移 + 左侧边框高亮 + 阴影 */
        .contact-list a {
            padding: 16px 0;
            display: flex;
            justify-content: space-between;
            gap: 20px;
            border-bottom: 1px solid var(--line);
            color: var(--muted);
            transition: color 220ms ease, padding-left 220ms ease;
        }

        .contact-list a:hover {
            padding-left: 10px;
            color: var(--ink);
        }

        /* ---- 页脚 ---- */
        /* 评价来源 + 模型名称标注 */
        .footer {
            padding: 28px 0;
            color: var(--muted);
            font-size: 0.85rem;
            border-top: 1px solid var(--line);
            position: relative;
            overflow: hidden;
            background:
                linear-gradient(to bottom, #090a0d, transparent 60px),
                linear-gradient(180deg, #08070a 0%, #0a090c 100%);
            background-position: top, 0 0;
            background-size: 100% 60px, auto;
        }

        .footer::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            mask-image: linear-gradient(to bottom, transparent 0%, #000 60px);
            -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 60px);
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.035) 1px, transparent 1px),
                radial-gradient(ellipse at 50% 50%, rgba(120, 148, 255, 0.06) 0%, transparent 60%);
            background-size: 40px 40px, auto;
        }

        .footer::after {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            mask-image: linear-gradient(to bottom, transparent 0%, #000 60px);
            -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 60px);
            background:
                radial-gradient(1.5px 1.5px at 30% 50%, rgba(120, 148, 255, 0.2), transparent),
                radial-gradient(1px 1px at 70% 40%, rgba(245, 241, 232, 0.12), transparent),
                radial-gradient(1.5px 1.5px at 50% 70%, rgba(120, 148, 255, 0.16), transparent);
            background-size: 200px 60px;
            animation: driftDim 28s ease-in-out infinite alternate;
        }

        .footer .wrap {
            position: relative;
            z-index: 1;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            gap: 12px;
        }

        .footer a {
            text-decoration: underline;
            text-underline-offset: 4px;
        }

        /* ---- 滚动渐显动画 ---- */
        /* 元素初始状态为透明 + 下移 26px，进入视口后通过 .is-visible 类触发上移淡入 */
        .reveal {
            opacity: 0;
            transform: translateY(26px);
            transition: opacity 760ms ease, transform 760ms cubic-bezier(.2, .8, .2, 1);
        }

        /* 渐显激活状态 — 由 IntersectionObserver 添加 */
        .reveal.is-visible {
            opacity: 1;
            transform: translateY(0);
        }

        /* ---- 页面入场动画 ---- */
        @keyframes pageIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }

        /* ---- 滚动进度条 ---- */
        /* 固定在页面顶部的进度条，宽度随滚动位置变化 */
        .scroll-progress {
            position: fixed;
            top: 0;
            left: 0;
            height: 3px;
            background: linear-gradient(90deg, var(--blue), var(--red));
            z-index: 999;
            transition: width 80ms linear;
            pointer-events: none;
        }

        /* ---- 自定义光标系统 ---- */
        /* 三层光标：圆点(dot) + 扩展圆(expand) + 外环(ring)，通过 JS 控制状态切换 */
        .cursor-dot {
            width: 14px;
            height: 14px;
            border-radius: 50%;
            background: var(--ink);
            position: fixed;
            pointer-events: none;
            z-index: 10000;
            transition: transform 200ms cubic-bezier(.2,.8,.2,1), width 200ms ease, height 200ms ease;
            mix-blend-mode: difference;
        }

        .cursor-dot.hover {
            opacity: 0;
        }

        .cursor-expand {
            position: fixed;
            width: 108px;
            height: 108px;
            border-radius: 50%;
            background: var(--ink);
            pointer-events: none;
            z-index: 9998;
            opacity: 0;
            transform: translate(-50%, -50%) scale(0);
            transition: transform 0.35s cubic-bezier(.2,.8,.2,1), opacity 0.35s ease;
            mix-blend-mode: difference;
        }

        .cursor-expand.hover {
            opacity: 1;
            transform: translate(-50%, -50%) scale(1);
        }

        .cursor-ring {
            width: 32px;
            height: 32px;
            border: 1.5px solid rgba(245, 241, 232, 0.4);
            border-radius: 50%;
            position: fixed;
            pointer-events: none;
            z-index: 9999;
            transition: width 300ms ease, height 300ms ease, border-color 300ms ease, margin-left 300ms ease, margin-top 300ms ease;
        }

        .cursor-ring.hover {
            width: 56px;
            height: 56px;
            margin-left: -12px;
            margin-top: -12px;
            border-color: rgba(245, 241, 232, 0.15);
        }

        /* ---- Hero 标题字符 span（供 TextPressure 逐字测量与变形）----
           打字机动画已移除，字符默认可见，仅保留 inline-block 供可变字体变形 */
        .hero-char {
            display: inline-block;
        }

        /* ---- Hero 问候语模糊渐显动画（BlurText 效果，direction=top）----
           移植自 React Bits BlurText 组件（JS+CSS 变体），适配为原生 CSS 关键帧。
           动画三阶段对应组件的 from / to[0] / to[1] 快照：
             起始：blur(10px) opacity 0 translateY(-50px)  —— 从上方模糊淡入
             中间：blur(5px)  opacity 0.5 translateY(5px)   —— 模糊收窄、半透、微过冲
             结束：blur(0px)  opacity 1   translateY(0)     —— 清晰定格
           times=[0,0.5,1]，totalDuration=0.7s，easing=linear（组件默认 t=>t） */
        .hero-greeting-word {
            display: inline-block;
            opacity: 0;
            will-change: transform, filter, opacity;
            animation: blurTextIn 0.7s linear forwards;
        }

        @keyframes blurTextIn {
            0%   { filter: blur(10px); opacity: 0;   transform: translateY(-50px); }
            50%  { filter: blur(5px);  opacity: 0.5; transform: translateY(5px); }
            100% { filter: blur(0px);  opacity: 1;   transform: translateY(0); }
        }

        /* ---- 联系板块标题渐变流动动画 ---- */
        @keyframes gradientFlow {
            0%, 100% { background-position: 0% 50%; }
            50% { background-position: 100% 50%; }
        }


        /* ---- 时间线光标透镜效果 ---- */
        /* 悬停时间线项时显示的放大镜效果，使用 mix-blend-mode 反色显示 */
        .timeline-cursor-lens {
            position: absolute;
            left: 50%;
            top: 50%;
            width: 108px;
            height: 108px;
            border-radius: 50%;
            background: var(--ink);
            pointer-events: none;
            opacity: 0;
            z-index: 3;
            transform: translate(-50%, -50%) scale(0) translateZ(26px);
            mix-blend-mode: difference;
            transition: opacity 0.35s cubic-bezier(.2,.8,.2,1), transform 0.35s cubic-bezier(.2,.8,.2,1);
        }

        .timeline-item.is-lens-active .timeline-cursor-lens,
        #now .status-card.is-lens-active .timeline-cursor-lens,
        #now .fact.is-lens-active .timeline-cursor-lens {
            opacity: 1;
            transform: translate(-50%, -50%) scale(1) translateZ(26px);
        }

        /* 光标透镜激活时隐藏默认光标 */
        body.lens-active .cursor-dot,
        body.lens-active .cursor-ring,
        body.lens-active .cursor-expand {
            opacity: 0 !important;
            transform: scale(0) !important;
        }

        /* ---- 时间线样式 ---- */
        .timeline .timeline-item.reveal,
        #education .timeline-item.reveal {
            opacity: 0;
            transform: translateY(60px) scale(0.92);
            transition:
                opacity 900ms cubic-bezier(.22, 1, .36, 1),
                transform 900ms cubic-bezier(.22, 1, .36, 1);
        }

        .timeline .timeline-item.reveal.is-visible,
        #education .timeline-item.reveal.is-visible {
            opacity: 1;
            transform: translateY(0) scale(1);
        }

        /* ---- 当前状态板块卡片 ---- */
        #now .status-card.reveal,
        #now .fact.reveal {
            opacity: 0;
            transform: scale(0.5);
            transition:
                opacity 1350ms cubic-bezier(.175, .885, .32, 1.275),
                transform 1350ms cubic-bezier(.175, .885, .32, 1.275);
        }

        #now .status-card.reveal.is-visible,
        #now .fact.reveal.is-visible {
            opacity: 1;
            transform: scale(1);
        }

        .statement,
        .fact,
        .status-card,
        .project-card,
        .timeline-item,
        .skill,
        .work,
        .quote {
            transform-style: preserve-3d;
        }

        /* ---- 按钮悬停涟漪效果 ---- */
        /* 按钮定位为相对 + 溢出隐藏，为涟漪动画提供容器 */
        .button {
            position: relative;
            overflow: hidden;
        }

        /* 涟漪元素 — 点击按钮时由 JS 创建，从点击位置扩散 */
        .ripple {
            position: absolute;
            border-radius: 50%;
            background: rgba(0,0,0,0.2);
            transform: scale(0);
            animation: rippleOut 600ms ease-out forwards;
            pointer-events: none;
        }

        @keyframes rippleOut {
            to { transform: scale(4); opacity: 0; }
        }

        /* ---- 板块背景粒子漂移动画 ---- */
        /* 各板块 ::after 伪元素使用不同方向的漂移动画，营造星空流动感 */
        @keyframes driftWarm {
            0% { background-position: 0 0, 0 0; }
            100% { background-position: -35px 25px, 0 0; }
        }
        @keyframes driftCool {
            0% { background-position: 0 0, 0 0; }
            100% { background-position: 30px 35px, 0 0; }
        }
        @keyframes driftGold {
            0% { background-position: 0 0, 0 0; }
            100% { background-position: -25px -40px, 0 0; }
        }
        @keyframes driftDim {
            0% { background-position: 0 0, 0 0; }
            100% { background-position: 20px 15px, 0 0; }
        }
        @keyframes driftGreen {
            0% { background-position: 0 0, 0 0; }
            100% { background-position: -30px 20px, 0 0; }
        }
        @keyframes driftBlue {
            0% { background-position: 0 0, 0 0; }
            100% { background-position: 25px -25px, 0 0; }
        }
        @keyframes driftRed {
            0% { background-position: 0 0, 0 0; }
            100% { background-position: -20px 30px, 0 0; }
        }

        /* ---- 二级页面（项目详情页）通用样式 ---- */
        /* 固定全屏覆盖 + 滚动容器，通过 .is-active 类控制显隐 */
        .sub-page {
            position: fixed;
            inset: 0;
            z-index: 100;
            overflow-y: auto;
            opacity: 0;
            visibility: hidden;
            transition: opacity 0.45s ease, visibility 0.45s ease;
        }

        .sub-page.is-active {
            opacity: 1;
            visibility: visible;
        }

        body.sub-page-open > main,
        body.sub-page-open > .site-header,
        body.sub-page-open > .footer {
            display: none;
        }

        .sub-page-inner {
            min-height: 100vh;
            animation: subPageIn 0.5s ease both;
        }

        @keyframes subPageIn {
            from { opacity: 0; transform: translateY(20px); }
            to { opacity: 1; transform: translateY(0); }
        }

        .sub-back {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            margin-bottom: 32px;
            color: var(--muted);
            font-size: 0.92rem;
            font-weight: 600;
            transition: color 220ms ease, padding-left 220ms ease;
        }

        .sub-back:hover {
            color: var(--ink);
            padding-left: 6px;
        }

        .sub-hero {
            padding: 160px 0 80px;
            position: relative;
            overflow: hidden;
        }

        .sub-hero::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
        }

        .sub-hero .wrap {
            position: relative;
            z-index: 1;
        }

        .sub-title {
            font-size: clamp(2.8rem, 7vw, 6.5rem);
            line-height: 0.92;
            margin-bottom: 16px;
        }

        .sub-lead {
            color: var(--muted);
            font-size: clamp(1rem, 2vw, 1.3rem);
        }

        .sub-content {
            padding: 60px 0 100px;
        }

        .sub-intro {
            margin-bottom: 48px;
        }

        .sub-intro h2 {
            margin-bottom: 16px;
            font-size: clamp(1.8rem, 3.5vw, 3rem);
        }

        .sub-intro p {
            color: var(--muted);
            max-width: 720px;
            font-size: 1.05rem;
            line-height: 1.7;
        }

        .sub-stats {
            display: grid;
            grid-template-columns: repeat(3, minmax(0, 1fr));
            gap: 14px;
            margin-bottom: 56px;
        }

        .sub-stat {
            padding: 28px 24px;
            border: 1px solid var(--line);
            border-radius: var(--radius);
            background: var(--glass-bg);
            text-align: center;
        }

        .sub-stat-num {
            font-size: clamp(2rem, 4vw, 3.2rem);
            font-weight: 800;
            line-height: 1;
            margin-bottom: 8px;
        }

        .sub-stat-label {
            color: var(--muted);
            font-size: 0.85rem;
            font-weight: 600;
            text-transform: uppercase;
            letter-spacing: 0.08em;
        }

        .sub-section {
            margin-bottom: 56px;
        }

        .sub-section h2 {
            margin-bottom: 24px;
            font-size: clamp(1.8rem, 3.5vw, 3rem);
        }

        .sub-roles {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
            gap: 14px;
        }

        .sub-role-card {
            padding: 24px;
            border: 1px solid var(--line);
            border-radius: var(--radius);
            background: var(--glass-bg);
            transition: border-color 300ms ease, box-shadow 300ms ease;
        }

        .sub-role-card:hover {
            border-color: rgba(245, 241, 232, 0.25);
            box-shadow: 0 10px 30px rgba(0,0,0,0.25);
        }

        .sub-role-card h3 {
            font-size: 1.15rem;
            margin-bottom: 8px;
        }

        .sub-role-card p {
            color: var(--muted);
            font-size: 0.92rem;
            line-height: 1.55;
            margin-bottom: 0;
        }

        .sub-award {
            margin-bottom: 56px;
        }

        .sub-award-badge {
            display: flex;
            align-items: center;
            gap: 24px;
            padding: 32px;
            border: 1px solid rgba(98, 200, 157, 0.35);
            border-radius: var(--radius);
            background: rgba(98, 200, 157, 0.06);
        }

        .sub-award-icon {
            font-size: 3.2rem;
            line-height: 1;
        }

        .sub-award-info h3 {
            font-size: 1.3rem;
            margin-bottom: 6px;
            color: var(--green);
        }

        .sub-award-info p {
            color: var(--muted);
            font-size: 0.92rem;
            margin-bottom: 0;
        }

        .sub-cta {
            margin-top: 48px;
        }

        /* ACC 项目详情页样式 — 暖色调 */
        .sub-hero--acc {
            background:
                linear-gradient(180deg, #090a0d, transparent 120px),
                linear-gradient(180deg, #0d0808 0%, #120a08 50%, #0d0808 100%);
        }

        .sub-hero--acc::before {
            background:
                linear-gradient(90deg, rgba(245, 241, 232, 0.06) 1px, transparent 1px),
                linear-gradient(0deg, rgba(245, 241, 232, 0.06) 1px, transparent 1px),
                radial-gradient(ellipse at 30% 60%, rgba(255, 115, 93, 0.22) 0%, transparent 60%);
            background-size: 48px 48px, 48px 48px, auto;
        }

        .sub-content--acc {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0d0808 0%, #100a08 50%, #0d0808 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }

        .sub-content--acc::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.04) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 80% 30%, rgba(255, 115, 93, 0.18) 0%, transparent 60%);
            background-size: 24px 24px, auto;
        }

        /* ACC 项目页统计数字 — 红色 */
        #page-acc .sub-stat-num { color: var(--red); }

        /* F1 项目详情页样式 — 红色调 */
        .sub-hero--f1 {
            background:
                linear-gradient(180deg, #090a0d, transparent 120px),
                linear-gradient(180deg, #080d0a 0%, #0a110d 50%, #080d0a 100%);
        }

        .sub-hero--f1::before {
            background:
                radial-gradient(ellipse at 70% 40%, rgba(98, 200, 157, 0.22) 0%, transparent 60%);
        }

        .sub-content--f1 {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #080d0a 0%, #0a120d 50%, #080d0a 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }

        .sub-content--f1::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.04) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 20% 70%, rgba(98, 200, 157, 0.16) 0%, transparent 60%);
            background-size: 24px 24px, auto;
        }

        /* F1 项目页统计数字 — 绿色 */
        #page-f1 .sub-stat-num { color: var(--green); }

        /* AI 项目详情页样式 — 紫色调 */
        .sub-hero--ai {
            background:
                linear-gradient(180deg, #090a0d, transparent 120px),
                linear-gradient(180deg, #080a10 0%, #0a0e16 50%, #080a10 100%);
        }
        .sub-hero--ai::before {
            background:
                radial-gradient(circle at 2px 2px, rgba(120, 148, 255, 0.18) 1px, transparent 1px),
                radial-gradient(ellipse at 50% 50%, rgba(120, 148, 255, 0.2) 0%, transparent 55%);
            background-size: 32px 32px, auto;
        }
        .sub-content--ai {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #080a10 0%, #0a0e16 50%, #080a10 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        .sub-content--ai::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.04) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 60% 30%, rgba(120, 148, 255, 0.16) 0%, transparent 60%);
            background-size: 24px 24px, auto;
        }
        #page-ai .sub-stat-num { color: var(--blue); }

        /* Bilibili 项目详情页样式 — B站粉色 */
        .sub-hero--bilibili {
            background:
                linear-gradient(180deg, #090a0d, transparent 120px),
                linear-gradient(180deg, #0a0a10 0%, #100a14 50%, #0a0a10 100%);
        }
        .sub-hero--bilibili::before {
            background:
                radial-gradient(ellipse at 40% 60%, rgba(251, 114, 157, 0.18) 0%, transparent 55%);
        }
        .sub-content--bilibili {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0a0a10 0%, #100a14 50%, #0a0a10 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        .sub-content--bilibili::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.04) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 70% 50%, rgba(251, 114, 157, 0.14) 0%, transparent 60%);
            background-size: 24px 24px, auto;
        }
        #page-bilibili .sub-stat-num { color: #fb7299; }

        /* BJI Phone 项目详情页样式 — 橙色调 */
        .sub-hero--bji {
            background:
                linear-gradient(180deg, #090a0d, transparent 120px),
                linear-gradient(180deg, #0d0b06 0%, #140f08 50%, #0d0b06 100%);
        }
        .sub-hero--bji::before {
            background:
                radial-gradient(circle at 1px 1px, rgba(215, 168, 79, 0.15) 1px, transparent 1px),
                radial-gradient(ellipse at 60% 40%, rgba(215, 168, 79, 0.2) 0%, transparent 55%);
            background-size: 28px 28px, auto;
        }
        .sub-content--bji {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0d0b06 0%, #140f08 50%, #0d0b06 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        .sub-content--bji::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.04) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 30% 70%, rgba(215, 168, 79, 0.14) 0%, transparent 60%);
            background-size: 24px 24px, auto;
        }
        #page-bji .sub-stat-num { color: var(--gold); }

        /* 游戏本项目详情页样式 — 绿色调 */
        .sub-hero--xianyu {
            background:
                linear-gradient(180deg, #090a0d, transparent 120px),
                linear-gradient(180deg, #0d0a06 0%, #14100a 50%, #0d0a06 100%);
        }
        .sub-hero--xianyu::before {
            background:
                radial-gradient(ellipse at 70% 50%, rgba(255, 140, 0, 0.2) 0%, transparent 55%);
        }
        .sub-content--xianyu {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0d0a06 0%, #14100a 50%, #0d0a06 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        .sub-content--xianyu::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.04) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 50% 40%, rgba(255, 140, 0, 0.14) 0%, transparent 60%);
            background-size: 24px 24px, auto;
        }
        #page-xianyu .sub-stat-num { color: #ff8c00; }

        /* 定格动画项目详情页样式 — 暖黄 + 照片墙 */
        .sub-hero--stopmotion {
            background:
                linear-gradient(180deg, #090a0d, transparent 120px),
                linear-gradient(180deg, #0d0809 0%, #140a0c 50%, #0d0809 100%);
        }
        .sub-hero--stopmotion::before {
            background:
                radial-gradient(ellipse at 40% 60%, rgba(255, 115, 93, 0.2) 0%, transparent 55%);
        }
        .sub-content--stopmotion {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0d0809 0%, #140a0c 50%, #0d0809 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        .sub-content--stopmotion::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.04) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 70% 30%, rgba(255, 115, 93, 0.14) 0%, transparent 60%);
            background-size: 24px 24px, auto;
        }
        #page-stop-motion .sub-stat-num { color: var(--red); }

        /* 游戏本项目详情页样式 — 暖橙色调 */
        .sub-hero--gamebook {
            background:
                linear-gradient(180deg, #090a0d, transparent 120px),
                linear-gradient(180deg, #0a080e 0%, #100a16 50%, #0a080e 100%);
        }
        .sub-hero--gamebook::before {
            background:
                radial-gradient(circle at 2px 2px, rgba(168, 85, 247, 0.15) 1px, transparent 1px),
                radial-gradient(ellipse at 50% 50%, rgba(168, 85, 247, 0.2) 0%, transparent 55%);
            background-size: 30px 30px, auto;
        }
        .sub-content--gamebook {
            background:
                linear-gradient(to bottom, #090a0d, transparent 100px),
                linear-gradient(to top, #090a0d, transparent 100px),
                linear-gradient(180deg, #0a080e 0%, #100a16 50%, #0a080e 100%);
            background-position: top, bottom, 0 0;
            background-size: 100% 100px, 100% 100px, auto;
        }
        .sub-content--gamebook::before {
            content: "";
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            background:
                radial-gradient(circle at 1px 1px, rgba(245, 241, 232, 0.04) 0.8px, transparent 0.8px),
                radial-gradient(ellipse at 30% 60%, rgba(168, 85, 247, 0.14) 0%, transparent 60%);
            background-size: 24px 24px, auto;
        }
        #page-gamebook .sub-stat-num { color: #a855f7; }

        .sub-content .wrap {
            position: relative;
            z-index: 1;
        }

        @media (max-width: 720px) {
            .sub-hero {
                padding: 130px 0 50px;
            }

            .sub-stats {
                grid-template-columns: 1fr;
            }

            .sub-roles {
                grid-template-columns: 1fr;
            }

            .sub-award-badge {
                flex-direction: column;
                text-align: center;
            }

            .sub-content {
                padding: 40px 0 70px;
            }
        }

        /* ---- 触摸设备适配 ---- */
        /* 隐藏自定义光标，恢复默认光标，禁用动画以节省性能 */
        @media (pointer: coarse) {
            .cursor-dot, .cursor-ring { display: none !important; }
            body, a, button { cursor: auto !important; }
            .section::before, .section::after { animation: none !important; }
        }
        /* ---- 触摸设备禁用毛玻璃效果 ---- */
        /* backdrop-filter 在移动端性能开销大，直接禁用 */
        @media (pointer: coarse) {
            .nav-shell,
            .statement,
            .fact,
            .status-card,
            .project-card,
            .timeline-item,
            .skill,
            .work,
            .quote {
                -webkit-backdrop-filter: none !important;
                backdrop-filter: none !important;
            }
        }

        /* ---- 降低动效偏好适配 ---- */
        /* 用户系统设置「减少动画」时，禁用所有动画和过渡 */
        @media (prefers-reduced-motion: reduce) {
            *,
            *::before,
            *::after {
                scroll-behavior: auto !important;
                animation-duration: 1ms !important;
                transition-duration: 1ms !important;
            }
        }

        /* ---- 响应式 — 平板断点 960px ---- */
        /* 双列布局降级为单列，作品网格改为 2 列 */
        @media (max-width: 960px) {
            .hero-grid,
            .about-layout,
            .section-head,
            .contact-band,
            .status-grid {
                grid-template-columns: 1fr;
            }

            .work-grid {
                grid-template-columns: repeat(2, minmax(0, 1fr));
            }

            .project-grid {
                grid-template-columns: repeat(4, 1fr);
                gap: 0;
            }

            .skills-grid {
                grid-template-columns: repeat(3, minmax(0, 1fr));
            }

            .hero {
                min-height: auto;
                padding-bottom: 54px;
            }

        }

        /* ---- 响应式 — 手机断点 720px ---- */
        /* 显示汉堡菜单按钮，导航链接改为下拉面板，单列布局 */
        @media (max-width: 720px) {
            .site-header {
                top: 10px;
            }

            .nav-shell {
                width: min(100% - 20px, 1120px);
                padding: 7px;
                align-items: flex-start;
                border-radius: 22px;
            }

            .brand {
                min-height: 40px;
                padding-right: 10px;
            }

            .menu-toggle {
                display: grid;
                flex: 0 0 auto;
            }

            .nav-links {
                position: absolute;
                top: 62px;
                left: 12px;
                right: 12px;
                padding: 10px;
                display: grid;
                gap: 2px;
                border: 1px solid var(--line);
                border-radius: 20px;
                background: rgba(14, 16, 21, 0.96);
                box-shadow: 0 10px 30px rgba(0,0,0,0.25);
                opacity: 0;
                transform: translateY(-12px);
                pointer-events: none;
                transition: opacity 240ms ease, transform 240ms ease;
            }

            .menu-open .nav-links {
                opacity: 1;
                transform: translateY(0);
                pointer-events: auto;
            }

            .nav-links a {
                padding: 13px 14px;
                font-size: 1rem;
            }

            .hero {
                padding-top: 102px;
            }

            h1 {
                font-size: clamp(4.5rem, 22vw, 8rem);
            }

            .hero-greeting {
                font-size: clamp(1.2rem, 5vw, 1.8rem);
            }

            h2 {
                font-size: clamp(2.1rem, 11vw, 3.9rem);
            }

            .lead {
                font-size: 1.06rem;
            }

            .hero-actions {
                align-items: stretch;
            }

            .button {
                width: 100%;
            }

            .profile-panel,
            .statement,
            .status-card,
            .project-card,
            .timeline-item,
            .quote {
                padding: 20px;
            }

            .status-card {
                min-height: 260px;
            }

            .status-card strong {
                font-size: clamp(2rem, 12vw, 3.4rem);
            }

            .timeline-item {
                grid-template-columns: 1fr;
                gap: 8px;
            }

            .work-grid,
            .quote-strip,
            .status-mini {
                grid-template-columns: 1fr;
            }

            .project-grid {
                grid-template-columns: 1fr;
                gap: 12px;
            }

            .project-card {
                margin: 0;
            }

            .skills-grid {
                grid-template-columns: repeat(2, minmax(0, 1fr));
            }

            .section {
                padding: 70px 0;
            }

            .work {
                min-height: 260px;
            }

            .contact-ascii {
                height: clamp(9rem, 36vw, 16rem);
            }

            .contact-list a {
                gap: 12px;
                overflow-wrap: anywhere;
            }
        }

        /* ---- 响应式 — 小屏手机断点 420px ---- */
        /* 所有布局改为单列，缩小内边距和最小高度 */
        @media (max-width: 420px) {
            .wrap {
                width: min(100% - 24px, 1120px);
            }

            .skills-grid {
                grid-template-columns: 1fr;
            }

            .hero-grid {
                gap: 26px;
            }

            .skill {
                min-height: 104px;
            }

            .project-card,
            .work {
                min-height: 184px;
            }

            .footer .wrap {
                display: grid;
            }
        }




/* ---- 摄影作品悬浮信息卡片（Android 16 超圆角风格） ---- */
/* 鼠标悬停摄影作品时显示在左下角的设备信息卡片，由 cam-info.js 控制 */
.cam-info-card {
    position: fixed;
    bottom: 36px;
    left: 16px;
    z-index: 1000;
    padding: 16px 24px;
    background: rgba(255, 255, 255, 0.95);
    color: #1a1a1a;
    font-family: Inter, ui-sans-serif, system-ui, sans-serif;
    font-size: 0.88rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    line-height: 1.3;
    /* Android 16 超圆角 */
    border-radius: 28px;
    box-shadow:
        0 2px 8px rgba(0, 0, 0, 0.15),
        0 8px 32px rgba(0, 0, 0, 0.12),
        0 16px 56px rgba(0, 0, 0, 0.08);
    backdrop-filter: blur(40px) saturate(1.8);
    -webkit-backdrop-filter: blur(40px) saturate(1.8);
    border: 1px solid rgba(255, 255, 255, 0.6);
    pointer-events: none;
    transform: translateY(120%) scale(0.8);
    opacity: 0;
    transition: transform 400ms cubic-bezier(0.34, 1.56, 0.64, 1),
                opacity 320ms ease;
}
.cam-info-card.is-visible {
    transform: translateY(0) scale(1);
    opacity: 1;
}
.cam-info-card .cam-icon {
    display: inline-block;
    margin-right: 8px;
    font-size: 1em;
}
.cam-info-card .cam-spec {
    display: flex;
    align-items: center;
    gap: 6px;
}
.cam-info-card .cam-spec span {
    opacity: 0.5;
}


/* ---- 页面加载动画 ---- */
/* 全屏白色遮罩 + 10 个灰色方块从顶部坠落回弹，加载完成后淡出隐藏 */
.loader-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 9999;
    background: #ffffff;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: opacity 0.8s cubic-bezier(0.22, 1, 0.36, 1), visibility 0.8s cubic-bezier(0.22, 1, 0.36, 1);
}
.loader-overlay.hidden {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}
/* 加载方块容器 — 水平居中排列 */
.loader-blocks {
    display: flex;
    gap: 6px;
        align-items: center; /* 垂直居中对齐加载方块 */
    height: 54px;
    justify-content: center;
}
/* 单个加载方块 — 从浅到深的灰色渐变，逐个延迟坠落 */
.loader-block {
    width: 48px;
    height: 48px;
    border-radius: 6px;
    opacity: 0;
    transform: translateY(-120vh);
        /* 动画效果：方块从顶部坠落，撞到底部回弹后静止 */
    animation: blockDrop 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}
.loader-block:nth-child(2)  { background: #eaeaea; animation-delay: 0.08s; }
.loader-block:nth-child(3)  { background: #d5d5d5; animation-delay: 0.16s; }
.loader-block:nth-child(4)  { background: #bfbfbf; animation-delay: 0.24s; }
.loader-block:nth-child(5)  { background: #a8a8a8; animation-delay: 0.32s; }
.loader-block:nth-child(6)  { background: #8f8f8f; animation-delay: 0.40s; }
.loader-block:nth-child(7)  { background: #737373; animation-delay: 0.48s; }
.loader-block:nth-child(8)  { background: #555555; animation-delay: 0.56s; }
.loader-block:nth-child(9)  { background: #363636; animation-delay: 0.64s; }
.loader-block:nth-child(10) { background: #181818; animation-delay: 0.72s; }

/* 方块坠落动画关键帧 — 从顶部坠落，撞底回弹两次后静止 */
@keyframes blockDrop {
    0% {
        opacity: 1;
        transform: translateY(-120vh);
    }
    60% {
        opacity: 1;
        transform: translateY(0);
    }
    72% {
        transform: translateY(-32px);
    }
    82% {
        transform: translateY(0);
    }
    90% {
        transform: translateY(-10px);
    }
    96% {
        transform: translateY(0);
    }
    100% {
        opacity: 1;
        transform: translateY(0);
    }
}

/* ---- 加载动画结束 ---- */

/* ---- 触摸设备恢复默认光标 ---- */
/* 移动端不显示自定义光标，恢复系统默认指针 */
@media (pointer: coarse) {
    body,
    a, button, input, textarea, select,
    .button, .nav-links a, .contact-list a,
    .menu-toggle, .work-link, .brand {
        cursor: auto !important;
    }
}

/* ---- 移动端访问提示遮罩 ---- */
/* 在小屏设备上隐藏整站内容，仅显示「请在 PC 端打开页面」提示 */
/* 风格与主页面统一：深色背景 + 浅色文字 + 毛玻璃 + 简约高级 */
.mobile-notice {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 9999;
    background: var(--bg);
    color: var(--ink);
    align-items: center;
    justify-content: center;
    padding: 32px;
    text-align: center;
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
    animation: mobileNoticeIn 0.6s ease;
}

/* 遮罩内容容器：限制最大宽度，保持阅读节奏 */
.mobile-notice__inner {
    max-width: 360px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 22px;
}

/* 顶部品牌标识 — 与主页导航保持一致的圆形 X 徽标 */
.mobile-notice__mark {
    width: 56px;
    height: 56px;
    display: grid;
    place-items: center;
    color: var(--bg);
    background: var(--ink);
    border-radius: 50%;
    font-size: 1.4rem;
    font-weight: 800;
    letter-spacing: 0.02em;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
}

/* 主提示标题：克制、克黑底白字对比 */
.mobile-notice__title {
    margin: 0;
    font-size: 1.32rem;
    font-weight: 700;
    letter-spacing: 0.01em;
    line-height: 1.4;
}

/* 副标题：使用 --muted 灰色，与主页次要文字一致 */
.mobile-notice__sub {
    margin: 0;
    color: var(--muted);
    font-size: 0.9rem;
    line-height: 1.6;
    letter-spacing: 0.01em;
}

/* 装饰性分割线 — 极细，与主页 --line 风格一致 */
.mobile-notice__line {
    width: 40px;
    height: 1px;
    background: var(--line);
    margin: 4px 0;
}

/* 英文小标签：呼应主页 section-kicker 的排版语言 */
.mobile-notice__kicker {
    color: var(--muted);
    font-size: 0.72rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    margin: 0;
}

/* 进入动画：淡入 + 轻微上浮，与主页 reveal 风格统一 */
@keyframes mobileNoticeIn {
    from { opacity: 0; transform: translateY(8px); }
    to { opacity: 1; transform: translateY(0); }
}

/* ---- 移动端断点：≤768px 显示提示遮罩，隐藏页面正文 ---- */
@media (max-width: 768px) {
    /* 显示遮罩 */
    .mobile-notice {
        display: flex;
    }
    /* 隐藏页面所有正常内容（body 直接子元素中非遮罩层） */
    body > *:not(.mobile-notice) {
        display: none !important;
    }
    /* 禁用页面滚动 */
    body {
        overflow: hidden !important;
        position: fixed !important;
        width: 100%;
        height: 100%;
    }
}
