:root{--bg: oklch(.155 .012 250);--bg-deep: oklch(.125 .012 250);--surface: oklch(.205 .014 250);--surface-2: oklch(.235 .014 250);--line: oklch(.32 .014 250 / .55);--line-soft: oklch(.3 .014 250 / .28);--fg: oklch(.94 .005 250);--fg-dim: oklch(.78 .008 250);--muted: oklch(.62 .012 250);--muted-2: oklch(.5 .012 250);--accent: oklch(.78 .13 220);--accent-2: oklch(.68 .13 220);--accent-ink: oklch(.18 .04 240);--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--pad-x: clamp(24px, 5vw, 72px);--max: 1180px;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-mono: "SF Mono", ui-monospace, Menlo, Consolas, monospace;--font-cjk: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif}body[data-theme=light]{--bg: oklch(.985 .004 90);--bg-deep: oklch(.965 .004 90);--surface: oklch(.995 .003 90);--surface-2: oklch(.96 .005 90);--line: oklch(.84 .008 250 / .9);--line-soft: oklch(.86 .008 250 / .55);--fg: oklch(.2 .012 250);--fg-dim: oklch(.32 .012 250);--muted: oklch(.48 .01 250);--muted-2: oklch(.58 .01 250);--accent: oklch(.55 .16 235);--accent-2: oklch(.48 .16 235);--accent-ink: oklch(.985 .005 90)}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-feature-settings:"ss01","cv11","tnum";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.6}:lang(zh-CN),:lang(zh),[lang^=zh],html[lang^=zh] body{font-family:var(--font-cjk)}body{transition:background .24s ease,color .24s ease}a{color:inherit;text-decoration:none}a:hover{color:var(--accent)}::selection{background:color-mix(in oklch,var(--accent) 35%,transparent);color:var(--fg)}#grid-bg{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background-image:linear-gradient(to right,var(--line-soft) 1px,transparent 1px),linear-gradient(to bottom,var(--line-soft) 1px,transparent 1px);background-size:64px 64px;-webkit-mask-image:radial-gradient(ellipse at 50% 30%,#000 30%,transparent 75%);mask-image:radial-gradient(ellipse at 50% 30%,#000 30%,transparent 75%);opacity:.45}.app{position:relative;z-index:1;max-width:var(--max);margin:0 auto;padding:clamp(28px,4vw,56px) var(--pad-x) 120px}.utility{position:fixed;top:18px;right:clamp(20px,4vw,40px);z-index:60;display:flex;gap:8px;align-items:center;background:color-mix(in oklch,var(--surface) 80%,transparent);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--line);border-radius:999px;padding:6px;font-family:var(--font-mono);font-size:11.5px}.utility button{background:transparent;border:0;color:var(--fg-dim);font-family:inherit;font-size:inherit;letter-spacing:.04em;padding:6px 12px;border-radius:999px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.utility button:hover{color:var(--fg)}.utility button.is-active{background:var(--accent);color:var(--accent-ink)}.utility .dot{width:6px;height:6px;border-radius:999px;background:currentColor;opacity:.7}section.section{padding:clamp(48px,7vw,96px) 0 0;scroll-margin-top:60px}.section-head{display:flex;align-items:baseline;gap:24px;margin-bottom:clamp(28px,4vw,48px);padding-bottom:14px;border-bottom:1px solid var(--line-soft)}.section-head .num{font-family:var(--font-mono);font-size:12px;letter-spacing:.14em;color:var(--muted);margin-right:-8px}.section-head .num:before{content:"§ ";opacity:.6}.section-head h2{font-family:var(--font-sans);font-weight:500;font-size:clamp(20px,2.2vw,28px);letter-spacing:-.01em;line-height:1.25;margin:0;white-space:nowrap;flex-shrink:0}:lang(zh) .section-head h2,[lang^=zh] .section-head h2{font-family:var(--font-cjk);font-weight:500}.section-head .hint{font-family:var(--font-mono);font-size:11.5px;color:var(--muted-2);margin-left:auto;letter-spacing:.02em}.identity{position:relative;padding-top:clamp(40px,5vw,70px)}.identity .meta-strip{display:flex;align-items:center;gap:14px;font-family:var(--font-mono);font-size:11.5px;letter-spacing:.14em;color:var(--muted);text-transform:uppercase;margin-bottom:clamp(18px,3vw,28px)}.identity .meta-strip .bracket{color:var(--accent)}.identity .meta-strip .pulse{width:8px;height:8px;border-radius:999px;background:var(--accent);box-shadow:0 0 color-mix(in oklch,var(--accent) 60%,transparent);animation:pulse 2.4s ease-out infinite}@keyframes pulse{0%{box-shadow:0 0 color-mix(in oklch,var(--accent) 60%,transparent)}60%{box-shadow:0 0 0 10px color-mix(in oklch,var(--accent) 0%,transparent)}to{box-shadow:0 0 0 0 transparent}}.identity .hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:clamp(28px,5vw,64px);align-items:end}.identity .name-block .signature{font-family:var(--font-mono);font-size:13px;color:var(--muted);letter-spacing:.02em;margin-bottom:14px}.identity .name-block .signature:before{content:"// ";color:var(--accent)}.identity .name{font-family:var(--font-cjk);font-weight:600;font-size:clamp(56px,9vw,120px);line-height:.96;letter-spacing:-.02em;margin:0 0 18px}.identity[lang=en] .name,body[data-lang=en] .identity .name{font-family:var(--font-sans);font-weight:500;letter-spacing:-.035em}.identity .title-line{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-family:var(--font-sans);font-size:clamp(16px,1.5vw,19px);color:var(--fg-dim);font-weight:400}:lang(zh) .identity .title-line,body[data-lang=zh] .identity .title-line{font-family:var(--font-cjk)}.identity .title-line .role{color:var(--fg);font-weight:500}.identity .title-line .sep{width:28px;height:1px;background:var(--line);display:inline-block}.identity .avatar{position:relative;width:clamp(120px,14vw,168px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 30% 28%,color-mix(in oklch,var(--accent) 18%,transparent) 0%,transparent 55%),var(--surface);border:1px solid var(--line);overflow:hidden;display:grid;place-items:center}.identity .avatar img{position:relative;z-index:1;width:100%;height:100%;object-fit:cover;display:block}.identity .avatar:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:inherit;border:1px dashed color-mix(in oklch,var(--accent) 35%,transparent);opacity:.4;animation:spin 22s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.identity .contacts{display:flex;flex-wrap:wrap;gap:8px;margin-top:clamp(28px,4vw,44px)}.chip{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg-dim);font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;line-height:1.4;transition:border-color .2s,color .2s,background .2s}.chip:hover{color:var(--fg);border-color:color-mix(in oklch,var(--accent) 50%,var(--line))}.chip .ico{color:var(--accent);display:inline-flex}.chip svg{display:block}.identity .highlights{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:18px;padding-top:18px;border-top:1px dashed var(--line-soft)}.identity .highlights .hl{font-family:var(--font-mono);font-size:12px;color:var(--muted);display:inline-flex;align-items:center;gap:8px}:lang(zh) .identity .highlights .hl,body[data-lang=zh] .identity .highlights .hl{font-family:var(--font-cjk)}.identity .highlights .hl:before{content:"";width:5px;height:5px;background:var(--accent);display:inline-block;transform:rotate(45deg)}.bio{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(360px,100%),1fr));gap:16px}.bio .stmt{border:1px solid var(--line-soft);border-left:2px solid color-mix(in oklch,var(--accent) 70%,var(--line));padding:18px 64px 18px 22px;background:color-mix(in oklch,var(--surface) 35%,transparent);border-radius:0 var(--r-md) var(--r-md) 0;font-size:15px;line-height:1.75;color:var(--fg-dim);position:relative}.bio .stmt .idx{position:absolute;top:14px;right:16px;font-family:var(--font-mono);font-size:11px;color:var(--muted-2);letter-spacing:.08em}.timeline{position:relative;display:grid;gap:4px}.timeline:before{content:"";position:absolute;left:142px;top:6px;bottom:6px;width:1px;background:var(--line-soft)}.t-row{display:grid;grid-template-columns:130px 32px 1fr auto;align-items:start;gap:0;padding:14px 0;border-bottom:1px solid var(--line-soft)}.t-row:last-child{border-bottom:0}.t-row .t-date{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.04em;color:var(--muted);padding-top:4px}.t-row .t-marker{position:relative;height:28px;display:flex;align-items:center;justify-content:center}.t-row .t-marker .pt{width:10px;height:10px;border-radius:50%;border:1.5px solid var(--accent);background:var(--bg);z-index:1}.t-row.first .t-marker .pt{background:var(--accent);box-shadow:0 0 0 4px color-mix(in oklch,var(--accent) 22%,transparent)}.t-row .t-body .role-co{font-size:16px;font-weight:500;color:var(--fg)}.t-row .t-body .co{color:var(--accent);font-weight:500;margin-left:4px}.t-row .t-body .co:before{content:"· ";color:var(--muted-2);margin-right:2px}.t-row .t-body .loc{font-family:var(--font-mono);font-size:11.5px;color:var(--muted-2);margin-top:4px;letter-spacing:.04em}.t-row .t-tenure{font-family:var(--font-mono);font-size:11px;color:var(--muted-2);letter-spacing:.04em;padding-top:6px;white-space:nowrap;min-width:72px;text-align:right}.tabs{display:flex;gap:4px;margin-bottom:28px;border-bottom:1px solid var(--line-soft);overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs button{background:transparent;border:0;color:var(--muted);font-family:var(--font-sans);font-size:13.5px;font-weight:500;letter-spacing:.01em;padding:10px 16px;margin-bottom:-1px;cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;position:relative;transition:color .2s}:lang(zh) .tabs button,body[data-lang=zh] .tabs button{font-family:var(--font-cjk)}.tabs button .ord{font-family:var(--font-mono);font-size:10.5px;color:var(--muted-2);margin-right:8px;letter-spacing:.08em}.tabs button:hover{color:var(--fg-dim)}.tabs button.is-active{color:var(--fg);border-bottom-color:var(--accent)}.tabs button.is-active .ord{color:var(--accent)}.project-grid{display:grid;gap:14px}.proj{border:1px solid var(--line-soft);background:color-mix(in oklch,var(--surface) 55%,transparent);border-radius:var(--r-lg);padding:22px 24px;transition:border-color .25s,transform .25s,background .25s}.proj:hover{border-color:color-mix(in oklch,var(--accent) 35%,var(--line));background:var(--surface)}.proj-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:8px}.proj-head .name{font-size:17px;font-weight:600;color:var(--fg);letter-spacing:-.005em;white-space:nowrap}.proj-head .pill{display:inline-flex;align-items:center;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;padding:2px 8px;text-transform:uppercase;border-radius:4px;background:color-mix(in oklch,var(--accent) 14%,transparent);color:var(--accent);border:1px solid color-mix(in oklch,var(--accent) 30%,transparent)}.proj-head .date{margin-left:auto;font-family:var(--font-mono);font-size:11.5px;color:var(--muted);letter-spacing:.04em}.proj .desc{color:var(--fg-dim);font-size:14px;line-height:1.75;margin:6px 0 14px}.proj .resp{position:relative;margin-top:12px;padding:12px 16px;background:color-mix(in oklch,var(--bg-deep) 50%,transparent);border:1px solid var(--line-soft);border-radius:var(--r-md);font-size:13.5px;line-height:1.75;color:var(--fg-dim)}.proj .resp .label{display:inline-block;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;color:var(--accent);text-transform:uppercase;margin-right:10px}.proj .resp .label:before{content:"▸ "}.skill-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));gap:14px}.skill-card{border:1px solid var(--line-soft);border-radius:var(--r-md);padding:14px 18px;background:color-mix(in oklch,var(--surface) 45%,transparent);display:flex;align-items:center;justify-content:space-between;gap:16px}.skill-card .name{font-family:var(--font-mono);font-size:13.5px;color:var(--fg);font-weight:500}.skill-card .name.cjk{font-family:var(--font-cjk);font-weight:500}.skill-card .level{display:flex;gap:4px;align-items:center;font-family:var(--font-mono);font-size:11px;color:var(--muted);letter-spacing:.04em}.level .bars{display:inline-flex;gap:3px;margin-right:10px}.level .bar{width:6px;height:14px;background:var(--line);border-radius:1px}.level .bar.on{background:var(--accent);box-shadow:0 0 6px color-mix(in oklch,var(--accent) 50%,transparent)}.meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:18px}.meta-card{border:1px solid var(--line-soft);border-radius:var(--r-md);padding:20px 22px;background:color-mix(in oklch,var(--surface) 45%,transparent)}.meta-card h3{font-size:13px;font-weight:500;color:var(--muted);letter-spacing:.14em;text-transform:uppercase;font-family:var(--font-mono);margin:0 0 14px}.meta-card h3 .ord{color:var(--accent);margin-right:6px}.meta-card .row+.row{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line-soft)}.meta-card .row .primary{font-size:15px;color:var(--fg);font-weight:500}.meta-card .row .secondary{font-size:13px;color:var(--fg-dim);margin-top:2px}.meta-card .row .tert{font-family:var(--font-mono);font-size:11px;color:var(--muted-2);margin-top:4px;letter-spacing:.04em}.meta-card .tags{display:flex;flex-wrap:wrap;gap:6px}.meta-card .tag{border:1px solid var(--line);border-radius:999px;padding:5px 12px;font-size:12.5px;color:var(--fg-dim)}.footer{margin-top:clamp(64px,8vw,96px);padding-top:28px;border-top:1px solid var(--line-soft);display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11.5px;color:var(--muted);letter-spacing:.04em;flex-wrap:wrap;gap:16px}body[data-density=compact]{--pad-x: clamp(20px, 4vw, 56px)}body[data-density=compact] section.section{padding-top:clamp(36px,5vw,64px)}body[data-density=compact] .bio .stmt{padding:14px 56px 14px 18px;font-size:14px}body[data-density=compact] .proj{padding:16px 20px}body[data-density=compact] .proj .desc{font-size:13px}body[data-density=compact] .proj .resp{padding:10px 14px;font-size:12.5px}body[data-density=compact] .t-row{padding:10px 0}@media(max-width:760px){.identity .hero{grid-template-columns:1fr;align-items:start}.identity .avatar{order:-1;width:88px}.timeline:before{left:0}.t-row{grid-template-columns:24px 1fr;row-gap:4px}.t-row .t-date{grid-column:2;font-size:11px;padding-top:0}.t-row .t-marker{grid-column:1;grid-row:1 / span 3;height:auto}.t-row .t-body{grid-column:2}.t-row .t-tenure{grid-column:2;padding-top:0}.proj-head .date{margin-left:0;width:100%}.section-head{flex-wrap:wrap;gap:14px}.section-head .hint{margin-left:0;flex-basis:100%}}@media print{@page{size:A4;margin:14mm}body{background:#fff!important;color:#111!important}body[data-theme=dark]{background:#fff!important}body[data-theme=dark] *{color:#111!important}#grid-bg,.utility,.tweaks-panel{display:none!important}.app{max-width:100%;padding:0}section.section{padding-top:18px;break-inside:avoid}.proj,.skill-card,.meta-card,.bio .stmt{border:1px solid #ccc!important;background:#fff!important;break-inside:avoid}.timeline:before{background:#aaa}.t-row .t-marker .pt{background:#fff;border-color:#333}.t-row.first .t-marker .pt{background:#333;box-shadow:none}.chip{background:#fff;border-color:#ccc}.proj-head .pill{background:#fff!important;border-color:#999!important;color:#333!important}.level .bar{background:#ddd}.level .bar.on{background:#333;box-shadow:none}.identity .avatar:after{display:none}a{color:#111!important}}
