@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-wght-normal.DqGufNeO.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-ext-wght-normal.DlzME5K_.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-wght-normal.CkhJZR-_.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-ext-wght-normal.DO1Apj_S.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-wght-normal.Dx4kXJAl.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto Mono Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/roboto-mono-cyrillic-ext-wght-normal.BUDPrIko.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto Mono Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/roboto-mono-cyrillic-wght-normal.HUlVHixE.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto Mono Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/roboto-mono-greek-wght-normal.BJJTbwTT.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto Mono Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/roboto-mono-vietnamese-wght-normal.DlC-zuDL.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto Mono Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/roboto-mono-latin-ext-wght-normal.QAYlOegK.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto Mono Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/roboto-mono-latin-wght-normal.CZtBPCCa.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cal Sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/CalSans-Regular.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--charcoal: #242424;--midnight: #111111;--mid-gray: #898989;--white: #ffffff;--light-gray: #f5f5f5;--paper: #fafafa;--ring: rgba(34, 42, 53, .08);--ring-soft: rgba(34, 42, 53, .05);--bg: var(--white);--fg: var(--charcoal);--fg-soft: var(--mid-gray);--surface: var(--white);--surface-soft: var(--light-gray);--card-bg: var(--charcoal);--card-fg: var(--white);--card-fg-soft: rgba(255, 255, 255, .5);--card-fg-mid: rgba(255, 255, 255, .78);--card-divider: rgba(255, 255, 255, .12);--card-btn-bg: var(--white);--card-btn-fg: var(--charcoal);--card-ghost-border: rgba(255, 255, 255, .25);--card-ghost-hover: rgba(255, 255, 255, .08);--card-avatar-ring: rgba(255, 255, 255, .14);--shadow-card: rgba(19, 19, 22, .7) 0px 1px 5px -4px, rgba(34, 42, 53, .08) 0px 0px 0px 1px, rgba(34, 42, 53, .05) 0px 4px 8px 0px;--shadow-card-hover: rgba(19, 19, 22, .7) 0px 2px 8px -4px, rgba(34, 42, 53, .12) 0px 0px 0px 1px, rgba(34, 42, 53, .08) 0px 8px 20px 0px;--shadow-inset: rgba(255, 255, 255, .15) 0px 2px 0px inset;--display: "Cal Sans", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--body: "Inter Variable", "Inter", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--mono: "Roboto Mono Variable", "Roboto Mono", ui-monospace, monospace}body[data-theme=dark]{--bg: #0e0e0e;--fg: #ededed;--fg-soft: #8a8a8a;--surface: #1a1a1a;--surface-soft: #222;--ring: rgba(255, 255, 255, .08);--ring-soft: rgba(255, 255, 255, .04);--card-bg: #f5f5f5;--card-fg: #1a1a1a;--card-fg-soft: rgba(26, 26, 26, .55);--card-fg-mid: rgba(26, 26, 26, .75);--card-divider: rgba(26, 26, 26, .1);--card-btn-bg: #1a1a1a;--card-btn-fg: #f5f5f5;--card-ghost-border: rgba(26, 26, 26, .18);--card-ghost-hover: rgba(26, 26, 26, .06);--card-avatar-ring: rgba(26, 26, 26, .1);--shadow-card: rgba(0, 0, 0, .6) 0px 1px 5px -4px, rgba(255, 255, 255, .08) 0px 0px 0px 1px, rgba(0, 0, 0, .4) 0px 4px 8px 0px;--shadow-card-hover: rgba(0, 0, 0, .7) 0px 2px 8px -4px, rgba(255, 255, 255, .14) 0px 0px 0px 1px, rgba(0, 0, 0, .5) 0px 8px 20px 0px;--shadow-inset: rgba(0, 0, 0, .15) 0px 2px 0px inset}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:var(--body);-webkit-font-smoothing:antialiased;transition:background .3s,color .3s}a{color:inherit}#gameCanvas{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:.55}body[data-game=off] #gameCanvas{display:none}.shell{max-width:768px;margin:0 auto;padding:24px 20px 48px;position:relative;z-index:1}.reveal{opacity:0;transform:translateY(12px);transition:opacity .6s cubic-bezier(.2,.7,.2,1),transform .6s cubic-bezier(.2,.7,.2,1)}.reveal.in{opacity:1;transform:translateY(0)}.card{background:var(--card-bg);color:var(--card-fg);border-radius:16px;padding:32px 30px 30px;position:relative;overflow:hidden;box-shadow:var(--shadow-card);transition:background .3s,color .3s}.card-head{display:flex;align-items:center;gap:20px;margin-bottom:22px}.avatar{width:96px;height:96px;border-radius:50%;background:#fff;flex-shrink:0;order:2;position:relative;overflow:hidden;box-shadow:0 0 0 2px var(--card-avatar-ring),0 2px 8px #0003;animation:avFloat 4s ease-in-out infinite}@keyframes avFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.avatar{cursor:pointer}.avatar img{width:100%;height:100%;display:block;clip-path:circle(50% at 50% 50%);transition:transform .15s ease}.head-main{flex:1;min-width:0;order:1}@keyframes avatar-pop{0%{transform:scale(1)}40%{transform:scale(1.18)}to{transform:scale(1)}}@keyframes av-particle{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--tx),var(--ty)) scale(0);opacity:0}}.av-particle{position:fixed;width:8px;height:8px;border-radius:50%;pointer-events:none;z-index:9999;animation:av-particle .55s ease-out forwards}.topline{display:flex;align-items:center;justify-content:space-between;font-family:var(--mono);font-size:11px;font-weight:500;color:var(--card-fg-soft);letter-spacing:.08em;text-transform:uppercase;margin-bottom:10px}.topline .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#4ade80;margin-right:8px;box-shadow:0 0 0 3px #4ade8026;animation:pulse 2s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.card h1{font-family:var(--display);font-weight:400;font-size:52px;line-height:1.05;letter-spacing:-.02em;margin:0}.card h1 .char{display:inline-block;opacity:0;transform:translateY(14px);animation:charIn .5s cubic-bezier(.2,.7,.2,1) forwards}@keyframes charIn{to{opacity:1;transform:translateY(0)}}.card .role{margin-top:10px;font-family:var(--body);font-size:15px;font-weight:400;color:var(--card-fg-mid);line-height:1.4;letter-spacing:-.01em}.divider{height:1px;background:var(--card-divider);margin:24px 0 20px}.meta{display:grid;grid-template-columns:1fr 1fr;gap:18px 22px}.meta .k{font-family:var(--mono);font-size:10px;font-weight:500;color:var(--card-fg-soft);letter-spacing:.1em;text-transform:uppercase;margin-bottom:3px}.meta .v{font-size:14px;font-weight:500}.meta .v.mono{font-family:var(--mono);font-size:13px}.meta .v.copy{cursor:pointer;position:relative;display:inline-block;transition:opacity .15s}.meta .v.copy:hover{opacity:.75}.meta .v.copy.copied:after{content:"copied";position:absolute;left:0;top:-18px;font-family:var(--mono);font-size:10px;padding:2px 6px;background:#4ade80;color:#111;border-radius:3px;animation:pop 1.2s ease forwards}@keyframes pop{0%{opacity:0;transform:translateY(4px)}15%,70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.cta{margin-top:24px;display:flex;gap:10px}.btn{flex:1;padding:12px 18px;font-family:var(--body);font-weight:600;font-size:14px;border:none;cursor:pointer;border-radius:8px;transition:transform .15s,opacity .15s,box-shadow .15s;display:flex;align-items:center;justify-content:center;gap:8px;text-decoration:none}.btn:active{transform:scale(.97)}.btn.primary{background:var(--card-btn-bg);color:var(--card-btn-fg);box-shadow:var(--shadow-inset)}.btn.primary:hover{opacity:.9}.btn.ghost{background:transparent;color:currentColor;box-shadow:inset 0 0 0 1px var(--card-ghost-border)}.btn.ghost:hover{background:var(--card-ghost-hover)}.btn svg{width:15px;height:15px;flex-shrink:0}.panels{margin-top:22px}.panel{background:var(--surface);border-radius:12px;margin-bottom:10px;box-shadow:var(--shadow-card);overflow:hidden;transition:box-shadow .2s,transform .2s}.panel:hover{box-shadow:var(--shadow-card-hover);transform:translateY(-1px)}.panel-head{padding:16px 18px;display:flex;align-items:center;gap:14px;cursor:pointer;user-select:none}.panel-head .num{font-family:var(--mono);font-size:11px;font-weight:500;color:var(--fg-soft);letter-spacing:.08em;width:22px}.panel-head h2{font-family:var(--display);font-weight:400;font-size:19px;line-height:1.2;letter-spacing:.2px;margin:0;color:var(--fg);flex:1}.panel-head .count{font-family:var(--mono);font-size:11px;font-weight:500;color:var(--fg-soft)}.panel-head .chev{width:20px;height:20px;color:var(--fg-soft);transition:transform .3s cubic-bezier(.2,.7,.2,1)}.panel.open .panel-head .chev{transform:rotate(180deg)}.panel-body{max-height:0;overflow:hidden;transition:max-height .4s cubic-bezier(.2,.7,.2,1)}.panel.open .panel-body{max-height:4000px}.panel-body-inner{padding:18px 18px 20px;border-top:1px solid var(--ring)}.profile-body p{margin:0;font-family:var(--body);font-size:14px;line-height:1.7;color:var(--fg);font-weight:400;letter-spacing:-.1px}.avail{margin-top:16px;display:flex;gap:6px;flex-wrap:wrap}.avail span{font-size:12px;font-weight:500;padding:4px 12px;border-radius:9999px;background:var(--surface-soft);color:var(--fg);box-shadow:inset 0 0 0 1px var(--ring)}.skill-group{margin-bottom:16px}.skill-group:last-child{margin-bottom:0}.skill-group .t{font-family:var(--mono);font-size:10px;font-weight:500;color:var(--fg-soft);text-transform:uppercase;letter-spacing:.1em;margin-bottom:9px}.skill-group .items{display:flex;flex-wrap:wrap;gap:6px}.skill-group .items span{font-size:12.5px;font-weight:500;padding:4px 11px;border-radius:9999px;background:var(--surface);color:var(--fg);box-shadow:inset 0 0 0 1px var(--ring),0 1px 2px var(--ring-soft);transition:transform .15s,box-shadow .15s}.skill-group .items span:hover{transform:translateY(-2px)}.skill-group .items span.pri{background:var(--fg);color:var(--bg);box-shadow:var(--shadow-inset)}.work-item{display:grid;grid-template-columns:100px 1fr;gap:16px;padding:14px 0;border-top:1px solid var(--ring)}.work-item:first-child{border-top:none;padding-top:0}.work-item:last-child{padding-bottom:0}.work-item .when{font-family:var(--mono);font-size:11px;font-weight:500;color:var(--fg-soft);padding-top:2px}.work-item h3{font-family:var(--display);font-weight:400;font-size:16px;line-height:1.2;margin:0 0 3px;letter-spacing:.2px}.work-item .role{font-size:12.5px;color:var(--fg-soft);margin-bottom:7px}.work-item p{margin:0;font-size:12.5px;line-height:1.55;color:var(--fg);font-weight:300;letter-spacing:-.1px}.proj-list{display:flex;flex-direction:column;gap:10px}.proj{display:grid;grid-template-columns:64px 1fr auto;gap:14px;align-items:center;padding:12px;border-radius:10px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--ring);transition:box-shadow .15s,transform .15s;cursor:pointer;text-decoration:none;color:inherit}.proj:hover{box-shadow:inset 0 0 0 1px #222a3533,0 4px 12px var(--ring-soft);transform:translate(2px)}body[data-theme=dark] .proj:hover{box-shadow:inset 0 0 0 1px #fff3,0 4px 12px #0006}.proj .thumb{width:64px;height:48px;border-radius:6px;background:var(--surface-soft);background-image:repeating-linear-gradient(135deg,transparent 0 8px,rgba(0,0,0,.04) 8px 9px);display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:9px;font-weight:600;color:var(--fg-soft);flex-shrink:0;box-shadow:inset 0 0 0 1px var(--ring)}body[data-theme=dark] .proj .thumb{background-image:repeating-linear-gradient(135deg,transparent 0 8px,rgba(255,255,255,.04) 8px 9px)}.proj .info{min-width:0}.proj h3{font-family:var(--display);font-weight:400;font-size:15px;line-height:1.25;margin:0 0 3px;letter-spacing:.2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proj .pmeta{font-family:var(--mono);font-size:10px;font-weight:500;color:var(--fg-soft);letter-spacing:.04em;margin-bottom:4px}.proj .pstack{display:flex;flex-wrap:wrap;gap:4px}.proj .pstack span{font-family:var(--mono);font-size:9px;font-weight:500;padding:2px 6px;border-radius:3px;background:var(--surface-soft);color:var(--fg);letter-spacing:.03em}.proj .arrow{font-family:var(--mono);color:var(--fg-soft);font-size:14px;transition:transform .2s}.proj:hover .arrow{transform:translate(3px);color:var(--fg)}.see-all{display:block;text-align:center;margin-top:12px;padding:11px;font-family:var(--body);font-weight:500;font-size:13px;color:var(--fg);border-radius:8px;background:var(--surface-soft);text-decoration:none;transition:background .15s}.see-all:hover{background:var(--ring)}.ed-row{display:flex;justify-content:space-between;align-items:baseline;padding:11px 0;border-top:1px solid var(--ring)}.ed-row:first-child{border-top:none;padding-top:0}.ed-row .t{font-family:var(--display);font-weight:400;font-size:15px;letter-spacing:.2px}.ed-row .d{font-family:var(--mono);font-size:11px;color:var(--fg-soft)}.foot{margin-top:24px;padding:20px 4px 0;display:flex;justify-content:space-between;align-items:center;font-family:var(--mono);font-size:11px;color:var(--fg-soft);border-top:1px solid var(--ring);flex-wrap:wrap;gap:10px}.foot a{color:var(--fg);text-decoration:none}.foot a:hover{text-decoration:underline}.foot-lang-btn{background:none;border:none;padding:0;cursor:pointer;color:var(--fg);font:inherit}.foot-lang-btn:hover{text-decoration:underline}.top-toggles{position:fixed;top:14px;right:14px;z-index:30;display:flex;gap:6px}.tg-btn{width:34px;height:34px;border-radius:8px;background:var(--surface);color:var(--fg);border:none;cursor:pointer;box-shadow:var(--shadow-card);display:flex;align-items:center;justify-content:center;transition:transform .2s,box-shadow .2s}.tg-btn:hover{transform:translateY(-1px);box-shadow:var(--shadow-card-hover)}.tg-btn svg{width:16px;height:16px}.tg-btn .sun,.tg-btn .moon{display:none}body[data-theme=light] .tg-btn .sun,body[data-theme=dark] .tg-btn .moon{display:block}@media(max-width:520px){.shell{padding:16px 14px 32px}.card{padding:26px 22px 22px;border-radius:14px}.card h1{font-size:42px}.card-head{gap:14px}.avatar{width:72px;height:72px}.meta{grid-template-columns:1fr;gap:14px}.cta{flex-direction:column}.work-item{grid-template-columns:1fr;gap:6px}.work-item .when{padding-top:0}.proj{grid-template-columns:48px 1fr}.proj .thumb{width:48px;height:36px}.proj .arrow{display:none}}.tweaks{position:fixed;bottom:20px;right:20px;z-index:50;background:var(--surface);color:var(--fg);border-radius:12px;padding:16px 18px;width:240px;box-shadow:var(--shadow-card-hover);display:none}.tweaks.on{display:block}.tweaks h5{font-family:var(--display);font-weight:400;font-size:16px;margin:0 0 12px;letter-spacing:.2px;display:flex;justify-content:space-between;align-items:baseline}.tweaks h5 small{font-family:var(--mono);font-size:9px;color:var(--fg-soft);font-weight:400}.tweaks .tg{margin-bottom:12px}.tweaks .tl{font-family:var(--mono);font-size:9px;font-weight:500;color:var(--fg-soft);text-transform:uppercase;letter-spacing:.12em;margin-bottom:6px}.tweaks .tbtns{display:flex;gap:4px;flex-wrap:wrap}.tweaks .tbtn{flex:1;padding:6px 8px;font-family:var(--body);font-size:12px;font-weight:500;background:var(--surface);color:var(--fg);border:none;cursor:pointer;border-radius:6px;box-shadow:inset 0 0 0 1px var(--ring);min-width:60px}.tweaks .tbtn.on{background:var(--fg);color:var(--bg);box-shadow:var(--shadow-inset)}.game-hint{position:fixed;left:14px;bottom:14px;z-index:30;background:var(--surface);color:var(--fg-soft);padding:6px 10px;border-radius:8px;font-family:var(--mono);font-size:10px;box-shadow:var(--shadow-card);display:flex;align-items:center;gap:6px;transition:opacity .3s}.game-hint b{color:var(--fg);font-weight:600}.game-hint.faded{opacity:.3}.foot-right{display:flex;align-items:center;gap:8px}.foot-theme-btn{display:none;width:28px;height:28px;box-shadow:none;background:var(--surface)}@media(pointer:coarse){.game-hint,.top-toggles{display:none}.foot-theme-btn{display:flex}}body[data-density=compact] .card{padding:26px 24px 22px}body[data-density=compact] .card h1{font-size:42px}body[data-density=compact] .panel-head{padding:13px 16px}body[data-density=compact] .panel-body-inner{padding:14px 16px 16px}
