/* ============================================================
   个人主页中心 · 原生 CSS（明暗双主题，变量驱动）
   ============================================================ */
:root{
  --bg:#faf7f5;
  --outside:#ffffff;
  --ink:#0a0a0a;
  --line:#000000;
  --muted:#666;
  --faint:rgba(0,0,0,.45);
  --nav-bg:rgba(250,247,245,.86);
  --pattern:rgba(0,0,0,.05);
  --pattern-hover:rgba(0,0,0,.12);
  --lens-bg:#050505;
  --lens-ink:#faf7f5;
  --lens-pattern:rgba(255,255,255,.12);
  --lens-pattern-hover:rgba(255,255,255,.32);
  --back-vignette:rgba(0,0,0,.8);
  --on-ink:#faf7f5;
  --on-ink-muted:rgba(250,247,245,.65);
  --accent:#ff6900;
  --nav-h:64px;
  --maxw:1440px;
  --font:"MiSans","MiSans VF","PingFang SC","HarmonyOS Sans SC","Microsoft YaHei","Noto Sans SC",system-ui,-apple-system,sans-serif;
  --ease-flip:cubic-bezier(.4,0,.2,1);
  --ease-out:cubic-bezier(.22,1,.36,1);
}
html[data-theme="dark"]{
  --bg:#101013;
  --outside:#0a0a0c;
  --ink:#f2efec;
  --line:#f2efec;
  --muted:#a3a09b;
  --faint:rgba(255,255,255,.5);
  --nav-bg:rgba(16,16,19,.86);
  --pattern:rgba(255,255,255,.06);
  --pattern-hover:rgba(255,255,255,.16);
  --lens-bg:#faf7f5;
  --lens-ink:#0a0a0a;
  --lens-pattern:rgba(0,0,0,.08);
  --lens-pattern-hover:rgba(0,0,0,.22);
  --back-vignette:rgba(0,0,0,.16);
  --on-ink:#101013;
  --on-ink-muted:rgba(16,16,19,.62);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:var(--font);background:var(--outside);color:var(--ink);-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
button{font-family:inherit;color:inherit}
.no-scroll{overflow:hidden}
::selection{background:var(--ink);color:var(--bg)}

/* ---------- 页面画框 ---------- */
.page{max-width:var(--maxw);margin:0 auto;background:var(--bg);border-left:1px solid var(--line);border-right:1px solid var(--line);min-height:100vh}
@media (max-width:1441px){.page{border-left:none;border-right:none}}

/* ---------- 导航 ---------- */
.nav{position:sticky;top:0;z-index:50;height:var(--nav-h);background:var(--nav-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid transparent;transition:border-color .3s}
.nav--scrolled{border-bottom-color:var(--line)}
.nav__inner{height:100%;padding:0 24px;display:flex;align-items:center}
.nav__logo{display:inline-flex;align-items:baseline;font-size:24px;font-weight:800;margin-right:30px;line-height:1}
.nav__logo-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);margin-left:4px}
.nav__links{display:flex;align-items:center;height:100%}
.nav__item{position:relative;display:flex;align-items:center;height:100%;padding:0 12px;margin:0 6px;font-size:15px;font-weight:500;white-space:nowrap}
.nav__item::after{content:"";position:absolute;left:12px;right:12px;bottom:12px;height:2.5px;background:var(--ink);transform:scaleX(0);transform-origin:0;transition:transform .3s}
.nav__item:hover::after{transform:scaleX(1)}
.nav__right{margin-left:auto;display:flex;align-items:center;gap:4px}
.nav__gh{font-size:14px;font-weight:500;padding:8px 10px;opacity:.85;transition:opacity .2s}
.nav__gh:hover{opacity:1;text-decoration:underline;text-underline-offset:4px}
.theme-toggle{width:38px;height:38px;display:flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;border-radius:50%;transition:background .2s}
.theme-toggle:hover{background:rgba(128,128,128,.14)}
.t-sun{display:none}
html[data-theme="dark"] .t-sun{display:block}
html[data-theme="dark"] .t-moon{display:none}
.nav__burger{display:none;width:42px;height:42px;align-items:center;justify-content:center;gap:4px;background:none;border:none;cursor:pointer}
.nav__burger i{width:5px;height:5px;border-radius:50%;background:var(--ink);transition:transform .25s}
.nav__burger.active i:nth-child(1){transform:translateX(13px)}
.nav__burger.active i:nth-child(3){transform:translateX(-13px)}
.nav-screen{position:fixed;inset:var(--nav-h) 0 0;z-index:49;background:var(--bg);padding:36px 28px;display:none;flex-direction:column}
.nav-screen.open{display:flex}
.nav-screen a{font-size:22px;font-weight:600;padding:16px 4px;border-bottom:1px solid color-mix(in srgb,var(--ink) 12%,transparent)}
@media (max-width:960px){.nav__links,.nav__gh{display:none}.nav__burger{display:inline-flex}}

/* ---------- Hero ---------- */
.hero{position:relative;height:calc(100vh - var(--nav-h));min-height:640px;border-bottom:1px solid var(--line);perspective:1600px;transform-origin:50% 100%;transition:transform .3s ease-out}
.hero__inner{position:relative;width:100%;height:100%;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transition:transform .8s var(--ease-flip)}
.hero.flipped .hero__inner{transform:rotateX(180deg);-webkit-transform:rotateX(180deg)}
.face{position:absolute;inset:0;overflow:hidden;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.face--front{display:flex;align-items:center;justify-content:center;background:var(--bg)}
.face--back{transform:rotateX(180deg);-webkit-transform:rotateX(180deg);background:var(--lens-bg);color:var(--lens-ink)}
@media (hover:hover){
  .hero:has(.crack-zone:hover){transform:perspective(1200px) rotateX(-2.5deg)}
}

/* 文字纹理 */
.pattern{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-start;overflow:hidden;user-select:none;-webkit-user-select:none}
.pattern__row{display:flex;flex-wrap:nowrap;white-space:nowrap;font-size:52px;font-weight:700;line-height:1.6;letter-spacing:.3em;color:var(--pattern)}
.pattern__row:nth-child(odd){margin-left:-2em}
.pattern__t{flex-shrink:0;cursor:default;transition:color .3s,text-shadow .3s}
.pattern__t:hover{color:var(--pattern-hover);text-shadow:0 0 20px var(--pattern-hover)}
.pattern--inverted .pattern__row{color:var(--lens-pattern)}
.pattern--inverted .pattern__t:hover{color:var(--lens-pattern-hover);text-shadow:0 0 20px var(--lens-pattern-hover)}
.pattern-fade{position:absolute;inset:0;z-index:1;pointer-events:none;background:radial-gradient(50% 45%,var(--bg) 0%,transparent 100%)}
.pattern-fade--dark{background:radial-gradient(45% 40%,var(--back-vignette) 0%,transparent 100%)}

.hero__center{position:relative;z-index:2;text-align:center;padding:0 20px}
.hero__title{font-size:clamp(42px,6.5vw,92px);font-weight:700;letter-spacing:.02em;animation:riseIn .9s .15s var(--ease-out) both}
.hero__sub{margin-top:20px;font-size:14px;letter-spacing:.4em;color:var(--faint);animation:riseIn .9s .35s var(--ease-out) both}
@keyframes riseIn{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}

/* 镜头（贪吃蛇式胶囊拖尾，几何由 SVG clipPath 提供） */
.lens-svg{position:absolute;width:0;height:0;overflow:hidden}
.lens{--lens-r:150px;position:absolute;inset:0;z-index:3;pointer-events:none;opacity:0;transition:opacity .35s}
.lens.on{opacity:1}
@media (max-width:768px){.lens{--lens-r:110px}}
.lens__layer{position:absolute;inset:0;background:var(--lens-bg);display:flex;align-items:center;justify-content:center;-webkit-clip-path:url(#lensClip);clip-path:url(#lensClip)}
.lens .lens__center{position:relative;z-index:2;color:var(--lens-ink)}
.lens .hero__avatar{border-color:color-mix(in srgb,var(--lens-ink) 80%,transparent)}
.lens .hero__sub{color:color-mix(in srgb,var(--lens-ink) 55%,transparent)}

.crack-zone{position:absolute;left:0;right:0;bottom:0;height:80px;z-index:20;cursor:pointer}
@media (hover:none),(pointer:coarse){.crack-zone{height:100%}}
/* 隐形翻面标识：正面上不可见，只有镜头（圆圈）扫过时在圈内显形 */
.flip-marker{
  position:absolute;left:0;right:0;bottom:36px;z-index:22;text-align:center;
  font-size:15px;font-weight:700;letter-spacing:.5em;text-indent:.5em;
  pointer-events:none;user-select:none;-webkit-user-select:none;
}
.flip-marker--front{color:transparent}
.flip-marker--lens{z-index:3;color:color-mix(in srgb,var(--lens-ink) 88%,transparent);animation:markerBreath 2.4s ease-in-out infinite}
@keyframes markerBreath{0%,100%{opacity:.55}50%{opacity:1}}
/* 触屏设备没有镜头，静态显示提示 */
@media (hover:none),(pointer:coarse){
  .flip-marker--front{color:var(--faint);font-size:12px;animation:hintPulse 2.6s ease-in-out infinite}
  .flip-marker--lens{display:none}
}
@keyframes hintPulse{0%,100%{opacity:.35}50%{opacity:.9}}

/* 背面：关于 */
.back__scroll{position:relative;z-index:2;height:100%;overflow-y:auto;display:flex;flex-direction:column;align-items:center;gap:40px;padding:9vh 24px 110px}
.about-card{width:100%;max-width:880px;background:rgba(255,255,255,.45);border:1px solid color-mix(in srgb,var(--lens-ink) 16%,transparent);border-radius:3px;padding:28px 32px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.about-card p{color:color-mix(in srgb,var(--lens-ink) 78%,transparent);font-size:16px;line-height:2}
.about-card p+p{margin-top:16px}
.about-card strong{color:var(--lens-ink);font-weight:600}
.about-card .sig{margin-top:24px;color:color-mix(in srgb,var(--lens-ink) 45%,transparent)}
.about-card a{color:var(--lens-ink);font-weight:600;text-decoration:underline;text-underline-offset:4px}
.about-label{position:absolute;z-index:3;left:0;right:0;bottom:24px;text-align:center;font-size:14px;font-weight:700;letter-spacing:.25em;text-transform:uppercase;color:color-mix(in srgb,var(--lens-ink) 85%,transparent);pointer-events:none;user-select:none}
@media (max-width:768px){
  .pattern__row{font-size:40px}
  .back__scroll{padding-top:7vh;gap:28px}
  .about-card{padding:20px 22px}
  .about-card p{font-size:14px;line-height:1.9}
}

/* ---------- 区块通用 ---------- */
.section{border:1px solid var(--line);margin-top:-1px;scroll-margin-top:calc(var(--nav-h) + 12px)}
.section-head{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;padding:46px 28px 32px;border-bottom:1px solid var(--line)}
.section-head h2{font-size:38px;font-weight:700}
.section-head .en{font-size:13px;letter-spacing:.3em;color:var(--faint);text-transform:uppercase}
.section-head p{width:100%;color:var(--muted);font-size:15px}
@media (max-width:768px){.section-head{padding:36px 18px 26px}.section-head h2{font-size:30px}}

/* 标签筛选 */
.chips{width:100%;display:flex;flex-wrap:wrap;gap:10px;margin-top:14px}
.chip{border:1px solid var(--line);border-radius:999px;padding:6px 16px;font-size:13px;cursor:pointer;background:transparent;transition:background .2s,color .2s}
.chip:hover,.chip.active{background:var(--ink);color:var(--on-ink)}

/* 行（笔记列表） */
.rows{display:block}
.row{display:flex;align-items:center;gap:24px;padding:26px 28px;background:var(--bg);border-bottom:1px solid var(--line);transition:background .2s,color .2s;cursor:pointer}
.rows .row:last-child{border-bottom:none}
.row.hidden{display:none}
.row__index{min-width:44px;font-size:14px;color:var(--faint);font-variant-numeric:tabular-nums;transition:color .2s}
.row__info{flex:1;min-width:0}
.row__info h3{font-size:21px;font-weight:600;line-height:1.5;transition:color .2s}
.row__info p{margin-top:6px;font-size:15px;color:var(--muted);transition:color .2s}
.row__arrow{font-size:22px;transition:color .2s}
.row__arrow span{display:inline-block;transition:transform .2s}
.row:hover{background:var(--ink)}
.row:hover .row__index,.row:hover .row__info h3,.row:hover .row__arrow{color:var(--on-ink)}
.row:hover .row__info p{color:var(--on-ink-muted)}
.row:hover .row__arrow span{transform:translateX(8px)}
@media (max-width:768px){.row{padding:20px 18px;gap:14px}.row__info h3{font-size:17px}.row__info p{font-size:13px}}

/* ---------- 项目卡片 ---------- */
.showcase{display:grid;grid-template-columns:repeat(3,1fr)}
.card{display:flex;flex-direction:column;background:var(--bg);cursor:pointer;transition:background .2s}
.card+.card{border-left:1px solid var(--line)}
.card__art{aspect-ratio:16/10;overflow:hidden;border-bottom:1px solid var(--line)}
.card__art svg{display:block;width:100%;height:100%;transform:scale(1.001);transition:transform .6s var(--ease-out)}
.card:hover .card__art svg{transform:scale(1.06)}
.card__info{padding:22px 24px 26px}
.card__info h3{font-size:20px;font-weight:600;transition:color .2s}
.card__info p{margin-top:8px;font-size:14px;color:var(--muted);transition:color .2s}
.card:hover{background:var(--ink)}
.card:hover h3{color:var(--on-ink)}
.card:hover .card__info p{color:var(--on-ink-muted)}
@media (max-width:900px){.showcase{grid-template-columns:1fr}.card+.card{border-left:none;border-top:1px solid var(--line)}}

/* ---------- 笔记页 ---------- */
.article{max-width:820px;margin:0 auto;padding:56px 24px 72px}
.article__head h1{font-size:clamp(30px,4.5vw,46px);font-weight:700;line-height:1.35}
.article__meta{margin-top:16px;font-size:14px;color:var(--faint);letter-spacing:.05em}
.article__body{margin-top:36px;border-top:1px solid var(--line);padding-top:36px}
.article__body p{font-size:17px;line-height:2.1;color:color-mix(in srgb,var(--ink) 88%,transparent);margin-bottom:20px}
.article__body h2{font-size:26px;font-weight:700;margin:40px 0 18px;padding-bottom:10px;border-bottom:1px solid color-mix(in srgb,var(--ink) 18%,transparent)}
.article__body ul,.article__body ol{padding-left:26px;margin-bottom:20px}
.article__body li{font-size:16px;line-height:2;color:color-mix(in srgb,var(--ink) 88%,transparent)}
.article__body code{background:color-mix(in srgb,var(--ink) 9%,transparent);padding:2px 7px;border-radius:5px;font-size:.88em}
.article__body a{font-weight:600;text-decoration:underline;text-underline-offset:4px}
.article__body blockquote{border-left:3px solid var(--accent);padding:4px 0 4px 18px;margin:0 0 20px;color:var(--muted)}
.article__foot{margin-top:48px}
.row--inline{border:1px solid var(--line);border-bottom:1px solid var(--line);justify-content:flex-start}

/* ---------- 滚动浮现 ---------- */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s var(--ease-out),transform .7s var(--ease-out)}
.reveal.visible{opacity:1;transform:none}

/* ---------- 页脚 ---------- */
.footer{border-top:1px solid var(--line);padding:30px 28px;text-align:center;font-size:13px;color:var(--faint);line-height:2}
.footer a{text-decoration:underline;text-underline-offset:3px}
.footer__beian{margin-top:6px;font-size:12px;letter-spacing:.02em}
.footer__beian a{text-decoration:none;color:inherit}
.footer__beian a:hover{text-decoration:underline}

/* ---------- 个人主页增强：头像 / 空状态 ---------- */
.hero__avatar{width:92px;height:92px;border-radius:50%;border:2px solid var(--ink);object-fit:cover;display:block;margin:0 auto 26px;animation:riseIn .9s .05s var(--ease-out) both}
.about-avatar{display:block;width:72px;height:72px;border-radius:50%;border:2px solid color-mix(in srgb,var(--lens-ink) 80%,transparent);object-fit:cover;margin:0 auto 20px}
.empty{padding:64px 24px;text-align:center;color:var(--muted);font-size:15px}
.empty a{font-weight:600;text-decoration:underline;text-underline-offset:4px}
.article__body img{max-width:100%}
.article__body hr{border:none;border-top:1px solid color-mix(in srgb,var(--ink) 20%,transparent);margin:32px 0}

/* ---------- 动效降级 ---------- */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .hero,.hero__inner{transition:none}
  .hero:has(.crack-zone:hover){transform:none}
  .hero__title,.hero__sub{animation:none}
  .flip-marker--lens{display:none}
  .flip-marker--front{color:var(--faint);animation:none}
  .lens,.lens-svg{display:none}
  .reveal{opacity:1;transform:none;transition:none}
}
