@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2c55a0e60120577a-s.0-dom-5bn10r2.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/9c72aa0f40e4eef8-s.1y4-pdgsjb-pw.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/ad66f9afd8947f86-s.3lvt2whj97whp.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5476f68d60460930-s.2uwcyprjm3xu3.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2bbe8d2671613f1f-s.0k62hbripvv8p.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:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/1bffadaabf893a1e-s.3-6t-g6q0vh0a.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.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:Inter Fallback;src:local(Arial);ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.0%;size-adjust:107.12%}.inter_c15e96cb-module__0bjUvq__className{font-family:Inter,Inter Fallback;font-style:normal}.inter_c15e96cb-module__0bjUvq__variable{--font-inter:"Inter", "Inter Fallback"}
@font-face{font-family:Petit Formal Script;font-style:normal;font-weight:400;font-display:swap;src:url(../media/4cf21e7b1a139386-s.2-nqhnqh3ei0g.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Petit Formal Script;font-style:normal;font-weight:400;font-display:swap;src:url(../media/28b509d3421c55f0-s.p.3mhro0g6zl0nm.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:Petit Formal Script Fallback;src:local(Arial);ascent-override:81.8%;descent-override:21.2%;line-gap-override:0.0%;size-adjust:121.36%}.petit_formal_script_78588c1f-module__o3H_ZG__className{font-family:Petit Formal Script,Petit Formal Script Fallback;font-style:normal;font-weight:400}.petit_formal_script_78588c1f-module__o3H_ZG__variable{--font-script:"Petit Formal Script", "Petit Formal Script Fallback"}
:root{--paper:#f2f4f5;--ink:#172026;--ink-2:#667179;--rule:#1720261f;--tint:#4665b414;--selection:#cfdbf2;--accent:#6986c8;--link-line:#1720263d;--edge:#17202624;--shadow:#1720260f;--glass:#f2f4f5db;--scrollbar:#c4ccd2;--dots:url(/mist-dots.png);--row:30px;--col:540px;--ease-out:cubic-bezier(.22, 1, .36, 1);--ease-spring:cubic-bezier(.34, 1.32, .64, 1)}:root[data-theme=dark]{--paper:#141311;--ink:#ebe6dc;--ink-2:#8f897f;--rule:#ebe6dc1f;--tint:#deceb014;--selection:#3d372c;--accent:#c8b793;--link-line:#ebe6dc3d;--edge:#ebe6dc24;--shadow:#0000004d;--glass:#141311db;--scrollbar:#3a3733;--dots:url(/bar-dots.png);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:var(--paper);-webkit-text-size-adjust:100%;scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:var(--scrollbar) transparent}body{background:var(--paper);color:var(--ink);font-family:-apple-system, BlinkMacSystemFont, "SF Pro Text", var(--font-inter), "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;font-feature-settings:"kern", "liga", "calt";line-break:strict;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:14px;line-height:1.7;overflow-x:clip}::selection{background:var(--selection)}a{color:inherit;-webkit-tap-highlight-color:transparent;text-decoration:none}:focus-visible{outline:1px solid var(--ink);outline-offset:4px;border-radius:3px}.skip{z-index:10;background:var(--paper);box-shadow:0 0 0 1px var(--rule);transition:transform .24s var(--ease-out);border-radius:6px;padding:6px 10px;position:fixed;top:12px;left:12px;transform:translateY(-160%)}.skip:focus-visible{transform:none}@keyframes rise{0%{opacity:0;filter:blur(4px);transform:translateY(8px)}}@keyframes fade{0%{opacity:0}}.rise{animation:rise .9s var(--ease-out) backwards;animation-delay:var(--d,0s)}.first{z-index:1;min-height:100svh;position:relative}.col{width:min(var(--col), calc(100% - 48px));margin-inline:auto;padding-top:64px}.name{font-family:var(--font-script), "Snell Roundhand", cursive;font-size:22px;font-weight:400;line-height:20px;transition:opacity .32s;display:inline-block}@media (hover:hover){.name:hover{opacity:.6}}.content{margin-top:72px;padding-bottom:56px}.menu{width:160px;margin-top:176px;position:relative}.menu-row{height:var(--row)}.menu-item{height:var(--row);line-height:var(--row);color:var(--ink-2);transition:transform .42s var(--ease-out), color .24s ease;display:block;transform:translate(0,0)}.menu-item[data-current]{color:var(--ink);transform:translate(12px)}@media (hover:hover){.menu-item:hover{color:var(--ink)}}.menu-item:focus-visible{color:var(--ink)}.menu-item:active{opacity:.6;transition-duration:80ms}.menu-dot{background:var(--ink);width:4px;height:4px;transition:transform .52s var(--ease-spring);pointer-events:none;will-change:transform;border-radius:50%;animation:.9s .24s backwards fade;position:absolute;top:0;left:0}.list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.projects{gap:18px}.u,.prose a,.project-includes a,.links a{--link-rest:transparent;background:linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat, linear-gradient(var(--link-rest), var(--link-rest)) 0 100% / 100% 1px no-repeat;-webkit-box-decoration-break:clone;box-decoration-break:clone;transition:background-size .38s var(--ease-out), color .24s ease;padding-bottom:1px}.prose a{--link-rest:var(--link-line)}.project-includes a,.links a{color:var(--ink-2)}@media (hover:hover){a:hover .u,.prose a:hover,.project-includes a:hover,.links a:hover{color:var(--ink);background-size:100% 1px,100% 1px}}a:focus-visible .u,.prose a:focus-visible,.project-includes a:focus-visible,.links a:focus-visible{color:var(--ink);background-size:100% 1px,100% 1px}.entry{align-items:center;gap:12px;width:fit-content;display:flex}.entry-body{display:block}.entry-head{letter-spacing:.01em;align-items:center;gap:6px;font-size:13px;font-weight:500;line-height:20px;display:flex}.project-mark{width:28px;height:28px;color:var(--accent);flex:none;justify-content:center;align-items:center;display:flex}.project-mark svg{fill:currentColor}.project-mark path{stroke:var(--paper);stroke-width:3.4px;stroke-linejoin:round}.project-icon{width:28px;height:28px;box-shadow:0 0 0 .5px var(--edge);border-radius:7px;flex:none}.entry-meta.dated{grid-template-columns:56px auto}.entry-meta{white-space:nowrap;color:var(--ink-2);letter-spacing:.01em;font-variant-numeric:tabular-nums;grid-template-columns:92px auto;align-items:center;column-gap:8px;font-size:12px;line-height:18px;display:grid}.tag{box-shadow:inset 0 0 0 1px var(--rule);color:var(--ink-2);letter-spacing:.02em;border-radius:4px;padding:0 5px;font-size:11px;font-weight:400;line-height:16px}.project-includes{color:var(--ink-2);letter-spacing:.01em;align-items:center;gap:10px;margin-left:6px;font-size:12px;font-weight:400;line-height:18px;display:flex}.stat{align-items:center;gap:5px;display:inline-flex}.stat svg{fill:none;stroke:currentColor;stroke-width:1.3px;stroke-linejoin:round}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.arrow{color:var(--ink-2);opacity:0;transition:opacity .26s ease, transform .42s var(--ease-out);font-size:12px;font-weight:400;transform:translate(-4px,1px)}.entry-main{display:block}@media (hover:hover){a.entry-main:hover .arrow,.project-includes:hover .arrow{opacity:1;transform:none}}.post-title{text-wrap:balance;margin:0;font-size:14px;font-weight:500}.post-date{color:var(--ink-2);font-variant-numeric:tabular-nums;margin:2px 0 28px;display:block}.post-bar-sentinel{height:0;display:block}.post-bar{z-index:5;opacity:0;transition:opacity .24s ease, transform .42s var(--ease-out);pointer-events:none;position:fixed;inset:12px 0 auto;transform:translateY(-6px)}.post-bar[data-shown]{opacity:1;transform:none}.post-bar-inner{width:min(calc(var(--col) + 24px), calc(100% - 24px));background:var(--glass);height:40px;box-shadow:0 0 0 1px var(--rule), 0 6px 20px var(--shadow);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:10px;grid-template-columns:1fr minmax(0,max-content) 1fr;align-items:center;column-gap:16px;margin-inline:auto;padding:0 12px;display:grid}.post-bar[data-shown] .post-bar-inner{pointer-events:auto}.post-bar-title{color:var(--ink);text-align:center;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;overflow:hidden}.post-bar-btn:last-child{justify-self:end}.post-bar-btn{white-space:nowrap;color:var(--ink-2);font:inherit;cursor:pointer;background:0 0;border:0;justify-self:start;align-items:center;gap:6px;margin:0 -6px;padding:4px 6px;font-size:13px;transition:color .24s;display:inline-flex}@media (hover:hover){.post-bar-btn:hover{color:var(--ink)}}.post-bar-btn:active{opacity:.6;transition-duration:80ms}.prose{line-height:1.9}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose p{text-wrap:pretty;margin:0 0 1.1em}.wave{transform-origin:70% 70%;animation:1.6s ease-in-out .7s both wave;display:inline-block}.wave:hover{animation:1.6s ease-in-out wave-again}@keyframes wave{0%,60%,to{transform:rotate(0)}10%,30%{transform:rotate(14deg)}20%{transform:rotate(-8deg)}40%{transform:rotate(-4deg)}50%{transform:rotate(10deg)}}@keyframes wave-again{0%,60%,to{transform:rotate(0)}10%,30%{transform:rotate(14deg)}20%{transform:rotate(-8deg)}40%{transform:rotate(-4deg)}50%{transform:rotate(10deg)}}.prose h2,.prose h3,.prose h4,.prose h5{margin:2.2em 0 .6em;font-size:14px;font-weight:500}.prose h4{margin-top:1.8em}.prose h5{color:var(--ink-2);margin-top:1.5em;font-weight:400}.prose strong{font-weight:500}.prose ul,.prose ol{margin:0 0 1.1em;padding-left:1.3em}.prose li{margin:.2em 0;padding-left:.2em}.prose li::marker{color:var(--ink-2)}.prose blockquote{color:var(--ink-2);margin:1.5em 0;padding:0}.prose blockquote p{margin:0}.prose hr{border:0;border-top:1px solid var(--rule);margin:2em 0}.prose img{border-radius:6px;max-width:100%;height:auto;margin:1.5em 0;display:block}.prose code{background:var(--tint);border-radius:4px;padding:.1em .35em;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12.5px}.prose pre{background:var(--tint);scrollbar-width:none;border-radius:8px;margin:1.5em 0;padding:14px 16px;line-height:1.7;overflow-x:auto}.prose pre::-webkit-scrollbar{display:none}.prose pre code{background:0 0;padding:0}.marks{justify-content:space-between;align-items:center;margin-top:26px;display:flex}.mark-list{color:var(--ink-2);align-items:center;gap:16px;margin:0;padding:0;list-style:none;display:flex}.mark-list li{outline-offset:3px;transition:color .24s;display:flex;position:relative}.mark-list li:after{content:attr(data-tip);background:var(--paper);box-shadow:0 0 0 1px var(--rule), 0 4px 12px var(--shadow);color:var(--ink);letter-spacing:.01em;white-space:nowrap;opacity:0;transition:opacity .18s ease, transform .32s var(--ease-out);pointer-events:none;border-radius:6px;padding:3px 8px;font-size:12px;line-height:18px;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%,4px)}.mark-list li:hover:after,.mark-list li:focus-visible:after{opacity:1;transform:translate(-50%)}.mark-list li:has(a:focus-visible):after{opacity:1;transform:translate(-50%)}.mark-list a{color:inherit;outline-offset:3px;display:flex}.mark-list svg{fill:currentColor}.mark-list img{object-fit:contain;display:block}:root[data-theme=dark] .mark-list img{filter:grayscale()invert()brightness(.72)sepia(.12);transition:filter .24s}:root[data-theme=dark] .mark-list img[src$="/ly.png"]{filter:grayscale()invert()contrast(.25)brightness(.95)sepia(.12)}@media (hover:hover){:root[data-theme=dark] .mark-list li:hover img{filter:grayscale()invert()brightness()sepia(.08)}:root[data-theme=dark] .mark-list li:hover img[src$="/ly.png"]{filter:grayscale()invert()contrast(.25)brightness(1.35)sepia(.08)}.mark-list li:hover{color:var(--ink)}}.links{gap:20px;margin:28px 0 0;padding:0;list-style:none;display:flex}.star{--heart:#e2556a;opacity:0;align-items:center;gap:4px;height:32px;margin:0 0 88px -7px;transition:opacity .4s;display:flex}.star[data-ready]{opacity:1}.star-btn{color:var(--ink-2);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:0;border-radius:8px;padding:7px;transition:color .24s;display:flex;position:relative}.star-btn:disabled{cursor:default}.star-heart{fill:#0000;stroke:currentColor;stroke-width:1.2px;stroke-linejoin:round;transition:fill .2s ease, stroke .2s ease, transform .42s var(--ease-spring);display:block;overflow:visible}@media (hover:hover){.star-btn:not(:disabled):hover{color:var(--ink)}.star-btn:not(:disabled):hover .star-heart{transform:scale(1.08)}}.star-btn:active .star-heart{transition-duration:.1s;transform:scale(.86)}.star-btn[aria-pressed=true]{color:var(--heart)}.star-btn[aria-pressed=true] .star-heart{fill:var(--heart)}.star-heart[data-pop]{animation:heart-pop .56s var(--ease-out)}@keyframes heart-pop{0%{transform:scale(.6)}40%{transform:scale(1.22)}70%{transform:scale(.94)}to{transform:scale(1)}}.star-burst{pointer-events:none;position:absolute;inset:0}.star-burst i{background:var(--heart);opacity:0;width:3px;height:3px;animation:heart-speck .62s var(--ease-out) 60ms;border-radius:50%;margin:-1.5px;position:absolute;top:50%;left:50%}.star-burst i:nth-child(2n){background:var(--accent)}@keyframes heart-speck{0%{opacity:1;transform:rotate(var(--a)) translate3d(6px, 0, 0) scale(1)}to{opacity:0;transform:rotate(var(--a)) translate3d(17px, 0, 0) scale(.4)}}.star-count{color:var(--ink-2);letter-spacing:.01em;font-variant-numeric:tabular-nums;opacity:0;transition:opacity .26s ease, transform .42s var(--ease-out);font-size:12px;transform:translate(-4px)}.star-count[data-shown]{opacity:1;transform:none}.head{justify-content:space-between;align-items:center;display:flex}.theme-toggle{width:28px;height:28px;color:var(--ink-2);cursor:pointer;opacity:.7;-webkit-tap-highlight-color:transparent;background:0 0;border:0;border-radius:8px;place-items:center;margin:-4px -7px -4px 0;padding:0;transition:color .24s,opacity .24s;display:grid}.theme-toggle svg{transform:rotate(calc(var(--turns) * 180deg));transition:transform .52s var(--ease-spring)}.theme-toggle path{opacity:.4}.theme-toggle{--turns:0}:root[data-theme=dark] .theme-toggle{--turns:1}@media (hover:hover){.theme-toggle:hover{color:var(--ink);opacity:1}}.photo{--peek:52svh;height:max(100svh,480px);max-height:1100px;margin-top:calc(var(--peek) * -1);pointer-events:none;opacity:0;transition:opacity 1.4s var(--ease-out), transform 1.6s var(--ease-out);position:relative;transform:translateY(28px);-webkit-mask-image:linear-gradient(#0000 0,#0000008c 30%,#000 65%);mask-image:linear-gradient(#0000 0,#0000008c 30%,#000 65%)}.photo[data-in]{opacity:1;transform:none}.photo:before,.photo:after,.photo>i{content:"";background:var(--dots) 50% 100% / cover no-repeat;position:absolute;inset:0}.photo:before{opacity:.5}.photo:after,.photo>i{opacity:0;animation:dots-breathe var(--dur) ease-in-out var(--delay) infinite;-webkit-mask-repeat:repeat;mask-repeat:repeat}.photo:after{--dur:9s;--delay:-3s;-webkit-mask-image:radial-gradient(closest-side,#000,#0000),radial-gradient(closest-side,#000,#0000);mask-image:radial-gradient(closest-side,#000,#0000),radial-gradient(closest-side,#000,#0000);-webkit-mask-position:0 0,40% 55%;mask-position:0 0,40% 55%;-webkit-mask-size:22% 19%,15% 27%;mask-size:22% 19%,15% 27%}.photo>i{--dur:13s;--delay:-9s;-webkit-mask-image:radial-gradient(closest-side,#000,#0000),radial-gradient(closest-side,#000,#0000);mask-image:radial-gradient(closest-side,#000,#0000),radial-gradient(closest-side,#000,#0000);-webkit-mask-position:22% 30%,75% 10%;mask-position:22% 30%,75% 10%;-webkit-mask-size:19% 24%,27% 17%;mask-size:19% 24%,27% 17%}@keyframes dots-breathe{0%,to{opacity:0}50%{opacity:1}}@keyframes page-enter{0%{opacity:0;filter:blur(3px);transform:translateY(6px)}}.page[data-enter]{animation:page-enter .42s var(--ease-out) both}::view-transition{pointer-events:none}@media (max-width:600px){.mark-list[data-align=end] li:after{left:auto;right:-8px;transform:translateY(4px)}.mark-list[data-align=end] li:hover:after,.mark-list[data-align=end] li:focus-visible:after{transform:none}.mark-list[data-align=end] li:has(a:focus-visible):after{transform:none}.col{padding-top:28px}.menu{margin-top:112px}.content{margin-top:56px}.photo{background-position:70% 100%}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.rise,.menu-dot,.photo:after,.photo>i,.wave,.wave:hover,.star-heart[data-pop],.star-burst i,.page[data-enter]{animation:none}.photo:before{opacity:.85}.menu-item,.menu-dot,.post-bar,.photo,.arrow,.u,.prose a,.project-includes a,.links a,.name,.star,.star-heart,.star-count,.theme-toggle svg{transition-duration:.01ms}.photo{opacity:1;transform:none}::view-transition-old(*){animation-duration:.01ms!important;animation-delay:0s!important}::view-transition-new(*){animation-duration:.01ms!important;animation-delay:0s!important}::view-transition-group(*){animation-duration:.01ms!important;animation-delay:0s!important}}
