@font-face{font-family:quote;src:url(../media/quote_serif_sc-s.2ohzb6kcwf8cq.woff2)format("woff2");font-display:swap;font-weight:300}@font-face{font-family:quote Fallback;src:local(Arial);ascent-override:115.1%;descent-override:28.6%;line-gap-override:0.0%;size-adjust:100.0%}.blNbwW_className{font-family:quote,quote Fallback;font-weight:300}.blNbwW_variable{--font-quote:"quote", "quote Fallback"}
html[data-lang=en] .zh,html[data-lang=zh] .en{display:none}tipo-bar,.tipo-bar{--tipo-fg:#eef1ea;--tipo-muted:#8d998f;--tipo-line:#deeed626;--tipo-hover:#ffffff0f;--tipo-accent:#d7ebbd;--tipo-accent-bg:#cfe3b424;--tipo-lab:linear-gradient(100deg, #e1f0cb 10%, #a9cc8f 60%, #e3d4aa);box-sizing:border-box;width:100%;max-width:1680px;color:var(--tipo-fg);font:400 14px/1.2 var(--font-body,"DM Sans"), -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei UI", sans-serif;flex:none;align-items:center;gap:14px;margin:0 auto;padding:12px 24px;display:flex}tipo-bar[theme=light],.tipo-bar[data-theme=light]{--tipo-fg:#1f2620;--tipo-muted:#67706a;--tipo-line:#1f262029;--tipo-hover:#1f26200f;--tipo-accent:#34502b;--tipo-accent-bg:#34502b1c;--tipo-lab:linear-gradient(100deg, #3f6a33 10%, #5d8a45 60%, #8c6a2e)}tipo-bar *,.tipo-bar *{box-sizing:border-box}.tipo-home{min-height:44px;color:inherit;font:600 19px/1 var(--font-heading,"Space Grotesk"), "DM Sans", sans-serif;letter-spacing:-.04em;white-space:nowrap;flex:none;order:-3;align-items:center;gap:11px;text-decoration:none;display:inline-flex}.tipo-mark{filter:drop-shadow(0 0 12px #b0d29229);flex-shrink:0;width:34px;height:34px;transition:transform .4s cubic-bezier(.16,1,.3,1);display:block}.tipo-home:hover .tipo-mark{transform:rotate(-8deg)}.tipo-home:not(:has(+.tipo-crumb)){margin-right:auto}.tipo-word i{background:var(--tipo-lab);color:#0000;font:italic 400 1.2em/1 var(--font-serif,"Instrument Serif"), Georgia, serif;letter-spacing:-.01em;-webkit-background-clip:text;background-clip:text;padding:0 .08em .1em .02em}.tipo-crumb{color:var(--tipo-muted);letter-spacing:.04em;text-overflow:ellipsis;white-space:nowrap;order:-2;margin-right:auto;font-size:13px;overflow:hidden}.tipo-slash{opacity:.7;margin-right:.55em}html[data-lang=both] .tipo-crumb .en{opacity:.75;margin-left:.5em}.tipo-feedback{border:1px solid var(--tipo-line);height:40px;color:var(--tipo-muted);font:600 12.5px/1 var(--font-heading,"Space Grotesk"), "DM Sans", "PingFang SC", "Microsoft YaHei UI", sans-serif;letter-spacing:.03em;white-space:nowrap;-webkit-tap-highlight-color:transparent;border-radius:12px;flex:none;order:98;align-items:center;gap:7px;padding:0 13px 0 11px;text-decoration:none;transition:background .2s,color .2s;display:inline-flex}.tipo-feedback svg{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:17px;height:17px}.tipo-feedback:hover{background:var(--tipo-hover);color:var(--tipo-fg)}.tipo-feedback:focus-visible{outline:2px solid var(--tipo-accent);outline-offset:2px}html[data-lang=both] .tipo-feedback .en{display:none}.tipo-sr{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.tipo-lang{border:1px solid var(--tipo-line);border-radius:12px;flex:none;order:99;gap:2px;padding:3px;display:inline-flex}.tipo-lang button,.tipo-lang a{min-width:34px;height:32px;color:var(--tipo-muted);font:600 12.5px/1 var(--font-heading,"Space Grotesk"), "DM Sans", "PingFang SC", "Microsoft YaHei UI", sans-serif;letter-spacing:.03em;white-space:nowrap;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:0;border-radius:9px;place-items:center;margin:0;padding:0 9px;text-decoration:none;transition:background .2s,color .2s;display:inline-grid}.tipo-lang button:hover,.tipo-lang a:hover{background:var(--tipo-hover);color:var(--tipo-fg)}.tipo-lang button:focus-visible,.tipo-lang a:focus-visible{outline:2px solid var(--tipo-accent);outline-offset:2px}html[data-lang=zh] .tipo-lang [data-tipo-lang=zh],html[data-lang=en] .tipo-lang [data-tipo-lang=en],html[data-lang=both] .tipo-lang [data-tipo-lang=both]{background:var(--tipo-accent-bg);color:var(--tipo-accent)}@media (max-width:640px){tipo-bar,.tipo-bar{padding:max(8px, env(safe-area-inset-top)) 12px 8px;gap:10px}.tipo-home{gap:9px;margin-right:auto;font-size:17px}.tipo-mark{width:30px;height:30px}.tipo-crumb{display:none}.tipo-lang button,.tipo-lang a{min-width:30px;height:30px;padding:0 7px}.tipo-feedback{justify-content:center;width:38px;height:38px;padding:0}.tipo-feedback-label{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}}@media (max-width:420px){.tipo-word{display:none}}@media (max-width:400px){tipo-bar,.tipo-bar{gap:6px}.tipo-lang button,.tipo-lang a{min-width:28px;padding:0 5px}}@media (max-width:340px){tipo-bar,.tipo-bar{padding-right:max(8px, env(safe-area-inset-right));padding-left:max(8px, env(safe-area-inset-left));gap:4px}tipo-bar .top-actions,.tipo-bar .top-actions{gap:3px}.tipo-mark{width:28px;height:28px}.tipo-feedback{width:32px;height:32px}.tipo-lang{padding:2px}.tipo-lang button,.tipo-lang a{min-width:26px;padding:0 4px}}@media (max-height:520px){tipo-bar,.tipo-bar{padding-top:6px;padding-bottom:6px}.tipo-mark{width:28px;height:28px}}@media (prefers-reduced-motion:reduce){.tipo-mark,.tipo-feedback,.tipo-lang button,.tipo-lang a{transition:none}}
@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/space-grotesk-vietnamese-d699664b14.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/space-grotesk-latin-ext-054c266fbb.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/space-grotesk-latin-a0d054c4af.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:DM Sans;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/dm-sans-latin-ext-219b02c7d8.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/dm-sans-latin-468d56b6b2.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/instrument-serif-italic-latin-ext-a04fc7ed18.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/instrument-serif-italic-latin-6ee678c33f.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/instrument-serif-latin-ext-a8c4bd7cd7.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/instrument-serif-latin-60c06664b5.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk Fallback;src:local(Arial);ascent-override:89.71%;descent-override:26.62%;line-gap-override:0%;size-adjust:109.69%}@font-face{font-family:DM Sans Fallback;src:local(Arial);ascent-override:94.9%;descent-override:29.66%;line-gap-override:0%;size-adjust:104.53%}@font-face{font-family:Instrument Serif Fallback;src:local(Times New Roman);ascent-override:117.94%;descent-override:36.93%;line-gap-override:0%;size-adjust:83.94%}:root{--font-heading:"Space Grotesk", "Space Grotesk Fallback";--font-body:"DM Sans", "DM Sans Fallback";--font-serif:"Instrument Serif", "Instrument Serif Fallback"}
:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--background:#0a0d0b;--text:#eef1ea;--muted:#a5afa7;--quiet:#8d998f;--accent:#cfe3b4;--line:#2c382f;--hairline:#deeed617;--heading:var(--font-heading,"Space Grotesk"), Arial, sans-serif;--body:var(--font-body,"DM Sans"), "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Noto Sans SC", Arial, sans-serif;--serif:var(--font-serif,"Instrument Serif"), Georgia, serif;--mono:ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, monospace;--ease-out:cubic-bezier(.16, 1, .3, 1);--gutter:56px}*{box-sizing:border-box}body{isolation:isolate;background:var(--background);min-width:280px;color:var(--text);font:16px/1.5 var(--body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0;overflow-x:clip}::selection{background:var(--accent);color:var(--background)}a{color:inherit;text-decoration:none}button{font:inherit}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:6px}main{flex:1;padding:65px 0 86px}h1{font:500 clamp(24px, 6.2vw, 80px)/1.12 var(--heading);letter-spacing:-.065em;white-space:nowrap;margin:0}footer{border-top:1px solid var(--line);color:var(--quiet);justify-content:space-between;align-items:center;gap:20px;padding:24px 0 30px;font-size:11px;display:flex}@media (max-width:1000px){main{padding-top:55px}}@media (max-width:850px){main{padding:47px 0 53px}h1{letter-spacing:-.055em;font-size:clamp(24px,8.2vw,49px)}footer{padding:18px 0 22px;font-size:10px}}.backdrop{z-index:-1;pointer-events:none;position:fixed;inset:0;overflow:hidden}.aurora{will-change:transform;border-radius:50%;position:absolute}.aurora-a{background:radial-gradient(closest-side,#b0d29226,#b0d2920a 55%,#0000);width:70vmax;height:70vmax;animation:28s ease-in-out infinite alternate drift-a;top:-38vmax;right:-14vmax}.aurora-b{background:radial-gradient(closest-side,#68ac9e17,#0000);width:56vmax;height:56vmax;animation:34s ease-in-out infinite alternate drift-b;top:22vh;left:-30vmax}.aurora-c{background:radial-gradient(closest-side,#e2c4920f,#0000);width:48vmax;height:48vmax;animation:40s ease-in-out infinite alternate drift-c;bottom:-30vmax;right:4vw}.backdrop-grid{background-image:linear-gradient(#ffffff06 1px,#0000 1px),linear-gradient(90deg,#ffffff06 1px,#0000 1px);background-position:50% -1px;background-size:72px 72px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(75% 60% at 50% 0,#000 15%,#0000 72%);mask-image:radial-gradient(75% 60% at 50% 0,#000 15%,#0000 72%)}.backdrop-grain{opacity:.055;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");position:absolute;inset:0}@keyframes drift-a{to{transform:translate(-7vw,5vh)scale(1.1)}}@keyframes drift-b{to{transform:translate(8vw,-6vh)scale(1.15)}}@keyframes drift-c{to{transform:translate(-5vw,-4vh)scale(1.08)}}@keyframes rise{0%{opacity:0;transform:translateY(16px)}}@keyframes rise-in-place{0%{transform:translateY(16px)}}.site-shell{width:min(100% - var(--gutter) * 2, 1080px);flex-direction:column;min-height:100svh;margin:auto;display:flex}html[data-lang-stale] .site-shell{animation:4s step-end lang-stale}@keyframes lang-stale{0%,to{visibility:hidden}}.site-header{animation:rise-in-place .9s var(--ease-out) backwards;justify-content:space-between;align-items:center;gap:24px;padding:24px 0;display:flex}.brand{min-height:44px;font:600 20px var(--heading);letter-spacing:-.045em;align-items:center;gap:12px;display:inline-flex}.brand-word em{background:linear-gradient(100deg,#e1f0cb 10%,#a9cc8f 60%,#e3d4aa);color:#0000;font:italic 400 1.2em/1 var(--serif);letter-spacing:-.01em;-webkit-background-clip:text;background-clip:text;padding:0 .08em .1em .02em}.brand-mark{filter:drop-shadow(0 0 14px #b0d29229);width:40px;height:40px;transition:transform .7s var(--ease-out);flex-shrink:0;display:block}.brand:hover .brand-mark{transform:rotate(-12deg)scale(1.04)}.site-seal{filter:drop-shadow(0 6px 14px #0006);flex-shrink:0;width:38px;height:38px;display:block}.header-end{align-items:center;gap:14px;display:flex}.home-lang{--tipo-fg:var(--text);--tipo-muted:var(--quiet);--tipo-line:#deeed61f;--tipo-accent:var(--accent)}.home-about{height:40px;color:var(--muted);font:600 12.5px/1 var(--heading);letter-spacing:.03em;white-space:nowrap;border:1px solid #deeed61f;border-radius:12px;flex:none;align-items:center;padding:0 14px;transition:background .2s,color .2s;display:inline-flex}.home-about:hover{color:var(--text);background:#ffffff0f}.home-about:focus-visible{outline-offset:2px}.shelf-dot{background:#b6dd93;border-radius:50%;flex-shrink:0;width:6px;height:6px;box-shadow:0 0 10px #b0de8c73}.home-main{flex:1;padding:8px 0 96px}.shelf+.shelf{margin-top:40px}.shelf-heading{align-items:center;gap:18px;margin-bottom:16px;display:flex}.shelf-heading h2{font:500 15px var(--heading);letter-spacing:-.01em;white-space:nowrap;align-items:center;gap:11px;margin:0;display:inline-flex}.shelf-rule{background:linear-gradient(90deg,#deeed624,#deeed608);flex:1;height:1px}.bench-dot{border:1px solid #8d998f;border-radius:50%;flex-shrink:0;width:6px;height:6px}.projects{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;display:grid}[data-tone=sage]{--tone:#cfe3b4;--tone-rgb:207 227 180}[data-tone=mint]{--tone:#a8dcc6;--tone-rgb:168 220 198}[data-tone=sand]{--tone:#e3cca6;--tone-rgb:227 204 166}[data-tone=sky]{--tone:#b8cee3;--tone-rgb:184 206 227}[data-tone=lilac]{--tone:#d0c5e8;--tone-rgb:208 197 232}[data-tone=rose]{--tone:#efbcc3;--tone-rgb:239 188 195}[data-tone=sea]{--tone:#96d2e4;--tone-rgb:150 210 228}[data-tone=gold]{--tone:#f2d38f;--tone-rgb:242 211 143}[data-tone=silver]{--tone:#cfd6f2;--tone-rgb:207 214 242}.app-card{--scrim:6 9 7;isolation:isolate;aspect-ratio:4/3;background:radial-gradient(120% 95% at 50% -5%, rgb(var(--tone-rgb) / 15%), transparent 60%), radial-gradient(80% 60% at 50% 115%, rgb(var(--tone-rgb) / 6%), transparent 70%), linear-gradient(180deg, #121814, #0a0e0c);min-width:0;color:var(--tone);transition:transform .45s var(--ease-out), box-shadow .45s var(--ease-out);animation:rise .9s var(--ease-out) backwards;animation-delay:calc(var(--i,0) * 60ms + .24s);border-radius:22px;position:relative;overflow:hidden;box-shadow:0 30px 60px -34px #000000d9}.app-card[data-lead]{animation-name:rise-in-place}.app-card:before,.app-card:after{z-index:1;border-radius:inherit;content:"";opacity:0;pointer-events:none;transition:opacity .4s var(--ease-out);position:absolute;inset:0}.app-card:before{background:radial-gradient(420px circle at var(--mx,50%) var(--my,0%), rgb(var(--tone-rgb) / 13%), transparent 55%)}.app-card:after{z-index:3;background:radial-gradient(260px circle at var(--mx,50%) var(--my,0%), rgb(var(--tone-rgb) / 60%), transparent 65%);-webkit-mask-composite:xor;padding:1px;-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.app-art{width:100%;height:100%;transition:transform .8s var(--ease-out);display:block;position:absolute;inset:0}.app-link{--pad-x:18px;--pad-b:15px;z-index:2;padding:16px var(--pad-x) var(--pad-b);border-radius:inherit;flex-direction:column;justify-content:flex-end;display:flex;position:absolute;inset:0}.app-text{position:relative}.app-text:before{z-index:-1;inset:-48px calc(-1 * var(--pad-x)) calc(-1 * var(--pad-b));background:linear-gradient(0deg, rgb(var(--scrim) / 76%), rgb(var(--scrim) / 50%) calc(100% - 48px), transparent);content:"";pointer-events:none;position:absolute}.app-link:before{z-index:-1;border-radius:inherit;background:linear-gradient(0deg, rgb(var(--scrim) / 88%), rgb(var(--scrim) / 52%) 40%, transparent 76%);content:"";opacity:0;transition:opacity .45s var(--ease-out);position:absolute;inset:0}.app-link:focus-visible{outline:none}.app-card:has(.app-link:focus-visible){outline:2px solid var(--tone);outline-offset:4px}.app-name{color:#f4f7f0;font:500 19px/1.25 var(--heading);letter-spacing:-.03em;text-shadow:0 1px 16px #0009;margin:0}.app-name[lang=zh]{font-family:var(--body);letter-spacing:.04em;word-break:keep-all;font-weight:600}.app-reveal{transition:grid-template-rows .5s var(--ease-out);grid-template-rows:0fr;display:grid}.app-reveal>div{min-height:0;overflow:hidden}.app-detail{color:#d2dacb;opacity:0;transition:opacity .3s var(--ease-out), transform .5s var(--ease-out);margin:6px 0 0;font-size:13.5px;line-height:1.5;transform:translateY(6px)}.app-card:has(.app-link:focus-visible) .app-reveal{grid-template-rows:1fr}.app-card:has(.app-link:focus-visible) .app-detail{opacity:1;transform:none}.app-card:has(.app-link:focus-visible) .app-link:before{opacity:1}.app-note{color:rgb(var(--tone-rgb) / 92%);font:10.5px/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;opacity:0;transition:opacity .3s var(--ease-out);margin:7px 0 0}.app-card:has(.app-link:focus-visible) .app-note{opacity:1}.heart{z-index:4;color:#ffffffd6;min-width:34px;height:34px;font:600 12.5px/1 var(--body);font-variant-numeric:tabular-nums;cursor:pointer;-webkit-backdrop-filter:blur(12px)saturate(140%);backdrop-filter:blur(12px)saturate(140%);-webkit-tap-highlight-color:transparent;animation:heart-in .5s var(--ease-out) backwards;background:#080b095c;border:0;border-radius:999px;justify-content:center;align-items:center;gap:6px;padding:0 9px;transition:background .25s,color .25s;display:inline-flex;position:absolute;top:12px;right:12px}.heart:before{content:"";position:absolute;inset:-6px}.heart svg{fill:none;stroke:currentColor;stroke-width:1.9px;width:16px;height:16px;transition:transform .3s var(--ease-out);overflow:visible}.heart:hover{color:#fff;background:#080b0994}.heart:hover svg{transform:scale(1.12)}.heart:focus-visible{outline-offset:2px;outline:2px solid #fff}.heart[aria-pressed=true]{color:#ff6b81}.heart[aria-pressed=true] svg{fill:currentColor;animation:heart-pop .45s var(--ease-out)}.heart[data-failed] svg{animation:heart-shake .4s var(--ease-out)}.heart-count{color:#f4f7f0}.heart-note{z-index:4;color:#f4f7f0;max-width:calc(100% - 24px);font:500 12px/1.4 var(--body);pointer-events:none;border-radius:10px;position:absolute;top:52px;right:12px}.heart-note:not(:empty){-webkit-backdrop-filter:blur(12px)saturate(140%);backdrop-filter:blur(12px)saturate(140%);animation:heart-note-in .25s var(--ease-out);background:#080b09b8;padding:6px 10px}@keyframes heart-in{0%{opacity:0;transform:scale(.8)}}@keyframes heart-pop{40%{transform:scale(1.35)}}@keyframes heart-shake{25%{transform:translate(-2px)}50%{transform:translate(2px)}75%{transform:translate(-1px)}}@keyframes heart-note-in{0%{opacity:0;transform:translateY(-4px)}}.sr{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media (hover:hover){.app-card:hover{box-shadow:0 40px 70px -34px #000000e6, 0 24px 60px -36px rgb(var(--tone-rgb) / 35%);transform:translateY(-4px)}.app-card:hover:before,.app-card:hover:after{opacity:1}.app-card:hover .app-art{transform:scale(1.045)}.app-card:hover .app-link:before{opacity:1}.app-card:hover .app-reveal{grid-template-rows:1fr}.app-card:hover .app-detail{opacity:1;transition-delay:60ms;transform:none}.app-card:hover .app-note{opacity:1;transition-delay:.12s}}@media (hover:none){.app-card{-webkit-tap-highlight-color:transparent}.app-card:active{transition-duration:.12s;transform:scale(.98)}}.bench-grid{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:82px;gap:16px;display:grid}.bench-card{aspect-ratio:auto;min-height:0;animation-delay:calc(var(--i,0) * 50ms + .12s);border-radius:16px;align-items:center;padding:7px;display:flex;box-shadow:0 20px 40px -30px #000000d9}.bench-thumb{aspect-ratio:4/3;background:#00000038;border-radius:10px;flex:none;width:80px;position:relative;overflow:hidden}.bench-card .app-link{background:0 0;justify-content:center;padding:6px 12px 6px 100px}.bench-card .app-link:before{content:none}.bench-card .app-name{overflow-wrap:anywhere;text-shadow:none;font-size:15.5px;line-height:1.3}@media (hover:hover){.bench-card:hover{transform:translateY(-2px)}}.site-footer{color:var(--quiet);font:12px var(--body);border-top:0;padding:0;display:block}.footer-bar{border-top:1px solid var(--hairline);flex-wrap:wrap;align-items:center;gap:4px 24px;padding:18px 0 28px;display:flex}.footer-brand{min-height:44px;color:var(--text);font:600 15px var(--heading);letter-spacing:-.04em;white-space:nowrap;flex-shrink:0;align-items:center;gap:10px;display:inline-flex}.footer-mark{flex-shrink:0;display:block}.footer-note{font:11px/1 var(--mono);letter-spacing:.08em;white-space:nowrap;margin-left:auto}.footer-bar form{margin:0}.footer-action{min-width:44px;min-height:44px;color:var(--muted);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;justify-content:flex-end;align-items:center;gap:7px;padding:8px 0 8px 12px;transition:color .25s;display:inline-flex}.footer-action:hover{color:var(--text)}.footer-link{min-height:44px;color:var(--muted);white-space:nowrap;align-items:center;transition:color .25s;display:inline-flex}.footer-link:hover{color:var(--text)}.footer-link:focus-visible{outline-offset:2px}.skip-link{z-index:10;background:var(--accent);color:var(--background);border-radius:10px;padding:12px 16px;position:fixed;top:-80px;left:16px}.skip-link:focus{top:16px}@media (max-width:1000px){:root{--gutter:32px}.projects,.bench-grid{gap:12px}.app-card{border-radius:18px}.bench-card{border-radius:14px}.app-link{--pad-x:14px;--pad-b:12px;padding:13px var(--pad-x) var(--pad-b)}.app-name{font-size:16px}.app-detail{font-size:12.5px}.heart{gap:5px;min-width:30px;height:30px;padding:0 8px;font-size:11.5px;top:8px;right:8px}.heart svg{width:14px;height:14px}.heart-note{max-width:calc(100% - 16px);font-size:11.5px;top:44px;right:8px}.heart-note:not(:empty){padding:5px 8px}.bench-thumb{width:64px}.bench-card .app-link{padding-left:82px}.bench-card .app-name{font-size:14.5px}}@media (max-width:640px){:root{--gutter:20px}.site-header{gap:12px;padding:18px 0}.brand{gap:10px;font-size:18px}.brand-mark{width:36px;height:36px}.site-seal{width:30px;height:30px}.header-end{gap:8px}.home-about{height:38px;padding:0 11px}.home-main{padding:4px 0 72px}.shelf+.shelf{margin-top:32px}.shelf-heading{gap:14px;margin-bottom:12px}.shelf-heading h2{font-size:14px}.projects{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.app-card{border-radius:16px}.app-link{--pad-x:12px;--pad-b:9px;padding:10px var(--pad-x) var(--pad-b)}.app-text:before{background:linear-gradient(0deg, rgb(var(--scrim) / 80%), rgb(var(--scrim) / 56%) calc(100% - 40px), transparent);top:-40px}.app-name{font-size:15px;line-height:1.3}.app-name[lang=zh]{letter-spacing:.03em}.heart{top:6px;right:6px}.heart-note{max-width:calc(100% - 12px);top:42px;right:6px}.bench-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:74px;gap:8px}.bench-card{border-radius:13px;padding:6px}.bench-thumb{border-radius:8px;width:52px}.bench-card .app-link{padding:4px 8px 4px 66px}.bench-card .app-name{font-size:13.5px}.footer-bar{column-gap:18px;padding:14px 0 22px}.footer-note{flex-basis:100%;order:3;margin-left:0;padding-bottom:6px}.footer-note+.footer-link{margin-left:auto}}@media (max-width:374px){.site-seal{display:none}}@media (max-width:380px){.projects{gap:8px}.app-name{font-size:14px}.footer-bar{column-gap:14px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation:none!important}.app-card:hover,.app-card:active,.app-card:hover .app-art,.heart:hover svg,.brand:hover .brand-mark{transform:none}html[data-lang-stale] .site-shell{animation:4s step-end lang-stale!important}}
