:root{color-scheme:light;--paper:#f5f0e5;--ink:#30332e;--muted:#6d6b61;--accent:#4c706b;--blue:#426a8c;--red:#a34b3c;--page-width:640px;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif}:root[data-page-width=wide]{--page-width:960px}*{box-sizing:border-box}html{background:var(--paper);scroll-padding-top:2rem}body{color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;background:var(--paper);margin:0;font-size:16px;line-height:1.75}body:before{content:"";z-index:3;pointer-events:none;opacity:.055;mix-blend-mode:multiply;background:url(/paper-grain.svg);position:fixed;inset:0}::selection{color:#252e29;background:#d6e0d8}a{color:inherit;text-decoration:none}a,button{-webkit-tap-highlight-color:#d9d4c3}a:focus-visible{outline:2px solid var(--blue);outline-offset:5px;border-radius:1px}main:focus{outline:none}h1,h2,h3,p{margin:0}img,svg{max-width:100%}.site-shell{width:min(var(--page-width), calc(100% - 320px));margin-inline:auto;padding-top:96px}.site-header{pointer-events:none;justify-content:space-between;align-items:start;gap:24px;display:flex;position:fixed;inset:28px 36px auto}.site-identity,.site-header nav{pointer-events:auto}.wordmark{align-items:center;min-height:32px;font-size:16px;font-weight:600;line-height:1.75;display:inline-flex}.identity-note{color:var(--muted);margin-top:2px;font-size:12px;line-height:1.8}.signature-notes{width:94px;height:42px;margin:9px 0 15px -4px;display:block}.site-header nav{flex-direction:column;align-items:end;display:flex}.directory-label{color:var(--muted);font-size:12px;line-height:32px}.site-header nav a{min-height:44px;color:var(--muted);align-items:center;font-size:14px;display:inline-flex}.site-header nav a:hover,.site-header nav a[aria-current=page]{color:var(--ink);text-underline-offset:5px;text-decoration:underline 1px}.site-header .width-toggle{min-height:44px;color:var(--muted);font:12px/1.5 var(--sans);cursor:pointer;background:0 0;border:0;flex-shrink:0;justify-content:center;align-items:center;gap:7px;padding:0 4px;display:inline-flex}.site-header .width-toggle[hidden]{display:none}.site-header .width-toggle:hover{color:var(--ink)}.site-header .width-toggle[aria-pressed=true]{color:var(--accent)}.site-header .width-toggle:hover span,.site-header .width-toggle[aria-pressed=true] span{text-underline-offset:5px;text-decoration:underline}.site-header .width-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.site-content{min-width:0}.skip-link{z-index:5;background:var(--ink);color:var(--paper);padding:8px 16px;position:fixed;top:10px;left:16px;transform:translateY(-150%)}.skip-link:focus{transform:translateY(0)}.eyebrow{color:var(--muted);font-size:12px}.interests{flex-wrap:wrap;align-items:center;gap:14px;margin-top:8px;font-size:13px;display:flex}.interests a{align-items:center;gap:7px;min-height:44px;display:inline-flex}.interests a:hover{text-underline-offset:4px;text-decoration:underline}.music-interest{color:var(--muted)}.dota-interest{color:var(--red)}.interest-separator{color:#89816d}.home-section{margin-top:38px}.home-opening{margin-top:0}.home-opening h1{font-size:18px;font-weight:500;line-height:1.75}.home-section h2{font-size:16px;font-weight:500;line-height:1.75}.section-heading{justify-content:space-between;align-items:baseline;gap:20px;margin-bottom:15px;display:flex}.text-link{text-underline-offset:4px;align-items:center;gap:8px;min-height:44px;padding-block:5px;font-size:14px;text-decoration:underline 1px #9f9e90;display:inline-flex}.text-link:hover{color:var(--accent);text-decoration-color:currentColor}.quiet-link{min-height:32px;color:var(--muted);align-items:center;gap:7px;font-size:13px;display:inline-flex}.quiet-link:hover{color:var(--ink);text-underline-offset:4px;text-decoration:underline}.post-list{margin:0;padding:0;list-style:none}.post-list li+li{margin-top:27px}.post-list a{display:block}.post-list .post-title{text-wrap:pretty;text-underline-offset:5px;font-size:16px;font-weight:500;line-height:1.8;text-decoration:underline 1px #a8a79a}.post-list p{color:#595c54;margin-top:7px;font-size:16px;line-height:1.8}.post-list a:hover .post-title{color:var(--accent);text-decoration-color:currentColor}.home-work-list{margin:0;padding:0;list-style:none}.home-work-list li{font-size:16px;line-height:1.8}.home-work-list li+li{margin-top:12px}.home-work-list h3{font-size:inherit;font-weight:400;display:inline}.home-work-list h3 a{text-underline-offset:4px;text-decoration:underline #a8a79a}.home-work-list h3 a:hover{color:var(--accent)}.home-work-list li>span{color:#595c54}.beliefs h2{margin-bottom:16px}.beliefs p{font-size:16px;line-height:1.8}.beliefs p+p{margin-top:15px}.beliefs strong{font-weight:500}.beliefs a,.home-contact a{text-underline-offset:4px;text-decoration:underline #a8a79a}.beliefs a:hover,.home-contact a:hover{color:var(--accent)}.home-contact{margin-top:28px;font-size:16px;line-height:1.8}.home-contact a{min-height:44px;padding-block:6px;display:inline-block}.site-footer{color:var(--muted);flex-wrap:wrap;gap:24px;margin-top:43px;font-size:13px;display:flex}.site-footer a{align-items:center;gap:6px;min-height:44px;display:inline-flex}.site-footer a:hover{color:var(--ink);text-underline-offset:4px;text-decoration:underline}.preview-note{color:var(--muted);padding:7px 0 35px;font-size:11px}.page-intro{padding-bottom:30px}.page-intro h1{margin-bottom:12px;font-size:18px;font-weight:500;line-height:1.75}.page-intro>p{color:#595c54;font-size:16px;line-height:1.8}.back-link{margin-bottom:18px}.article-heading{margin-bottom:30px}.article-heading h1{text-wrap:pretty;margin:10px 0 13px;font-size:20px;font-weight:500;line-height:1.7}.article-description{color:#595c54;font-size:16px;line-height:1.8}.meta-divider{margin-inline:10px}.prose{overflow-wrap:anywhere;font-size:16px;line-height:1.8}.reading-page .prose{font-size:17px;line-height:1.9}.prose p+p{margin-top:1.1em}.prose h2{margin:1.6em 0 .65em;font-size:18px;font-weight:500;line-height:1.7}.prose h3{font-size:17px;font-weight:500}.prose blockquote{color:var(--accent);border-left:1px solid #aab7ab;margin:1.6rem 0;padding-left:20px}.prose a{text-underline-offset:4px;text-decoration:underline #a8a79a}.prose a:hover{color:var(--accent)}.article-footer{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 18px;margin-top:32px;display:flex}.article-footer>span{color:var(--muted);font-size:14px}.work-entry+.work-entry{margin-top:32px}.work-entry header{flex-wrap:wrap;align-items:baseline;gap:5px 15px;margin-bottom:11px;display:flex}.work-entry h2{font-size:16px;font-weight:500;line-height:1.8}.work-entry h2 a{text-underline-offset:4px;align-items:center;min-height:32px;text-decoration:underline #a8a79a;display:inline-flex}.work-entry h2 a:hover{color:var(--accent)}.work-meta{color:var(--muted);font-size:12px}.work-entry-copy h3{margin-bottom:7px;font-size:16px;font-weight:400;line-height:1.8}.work-entry-copy>p{color:#595c54;font-size:16px;line-height:1.8}.work-entry .text-link{margin-top:5px}.works-footnote{color:var(--muted);margin-top:27px;font-size:12px}.work-detail .prose>h2:first-child{margin-top:0}.project-question{color:var(--accent)}.prose .draft-disclosure{color:var(--muted);margin-top:25px;font-size:12px}.dota-dot{background:var(--red);vertical-align:middle;width:7px;height:7px;margin-right:4px;display:inline-block}.hello-section{margin-top:30px}.hello-section h2{margin-bottom:12px;font-size:18px;font-weight:500}.hello-section p{font-size:16px;line-height:1.8}.hello-section .text-link{margin-top:7px}.not-found{min-height:55vh}@media (width<=1100px){.site-shell{width:min(var(--page-width), calc(100% - 48px));padding-top:32px}.site-header{pointer-events:auto;align-items:center;gap:20px;padding:24px 24px 0;position:static}.site-identity{align-items:center;gap:10px;display:flex}.identity-note,.directory-label{display:none}.wordmark{min-height:44px}.signature-notes{width:66px;height:34px;margin:0}.site-header nav{flex-direction:row;gap:23px}.site-header nav a{font-size:14px}.home-section{margin-top:32px}.home-opening{margin-top:0}.section-heading{gap:12px}.quiet-link{min-height:44px}.post-list li+li{margin-top:26px}.home-work-list li+li{margin-top:15px}.site-footer{margin-top:33px}.page-intro{padding-bottom:28px}.article-heading h1{font-size:20px}}@media (width<=430px){.site-shell{width:calc(100% - 40px);padding-top:30px}.site-header{gap:12px;padding:18px 20px 0}.signature-notes{width:52px}.site-header nav{gap:19px}.post-list p,.beliefs p{line-height:1.8}.home-work-list h3{display:block}.home-work-list h3 a{align-items:center;min-height:40px;display:inline-flex}.work-dash{display:none}}@media (width<=370px){.site-shell{width:calc(100% - 32px)}.site-header{padding-inline:16px}.site-identity{gap:6px}.signature-notes{width:44px}.site-header nav{gap:15px}.site-header nav a{font-size:13px}.article-footer{flex-direction:column;align-items:start;gap:4px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important}}.portfolio-page .site-header{width:min(var(--page-width), calc(100% - 48px));pointer-events:auto;align-items:center;margin-inline:auto;padding:25px 0 0;position:static}.portfolio-page .site-identity{align-items:center;gap:10px;display:flex}.portfolio-page .signature-notes{width:60px;height:32px;margin:0}.portfolio-page .identity-note,.portfolio-page .directory-label{display:none}.portfolio-page .site-header nav{flex-direction:row;gap:25px}.portfolio-page .site-shell{width:min(var(--page-width), calc(100% - 48px));padding-top:36px}.portfolio-page button{font:inherit;color:inherit}.portfolio-page button:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.compact-intro{margin-bottom:20px}.compact-intro h1{color:var(--muted);font-size:13px;font-weight:400}.project-tabs{flex-wrap:wrap;gap:0 18px;margin-bottom:10px;display:flex}.project-tabs button{min-height:40px;color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border:0;padding:0;font-size:12px;position:relative}.project-tabs button:after{content:"";opacity:0;background:currentColor;height:1px;transition:opacity .15s;position:absolute;bottom:2px;left:0;right:0}.project-tabs button[aria-selected=true]{color:var(--ink)}.project-tabs button[aria-selected=true]:after{opacity:1}.project-tabs button:hover{color:var(--accent)}.project-panel{background:#faf7ee;border:1px solid #d3cebf;border-radius:9px;padding:0 8px 8px;box-shadow:0 3px 8px #3833280c}.project-panel[hidden]{display:none}.card-label{justify-content:space-between;align-items:center;gap:12px;min-height:51px;padding:6px 3px;display:flex}.card-heading>span{color:var(--muted);font-size:10px;line-height:1.5;display:block}.card-heading h2{font-size:13px;font-weight:500;line-height:1.6}.card-number{color:#8d897c;font-variant-numeric:tabular-nums;font-size:9px}.project-preview{cursor:zoom-in;background:#eae6db;border:1px solid #e0dacc;border-radius:4px;justify-content:center;align-items:center;width:100%;height:320px;padding:5px;display:flex;position:relative;overflow:hidden}.project-preview img{object-fit:contain;width:100%;height:100%;display:block}.project-preview.is-video{cursor:pointer;background:#111521;border-color:#242a36}.preview-action{color:var(--ink);background:#f5f0e5f5;border:1px solid #d8d3c5;border-radius:3px;align-items:center;gap:7px;padding:5px 9px;font-size:11px;line-height:1.7;transition:background .15s;display:flex;position:absolute;bottom:12px;right:12px}.project-preview:hover .preview-action{background:#fff}.video-duration{color:var(--muted);border-left:1px solid #d8d3c5;padding-left:7px}.project-caption[hidden]{display:none}.project-caption{justify-content:space-between;align-items:center;gap:8px 16px;min-height:44px;font-size:12px;display:flex}.project-caption p{color:#595c54;text-wrap:pretty;line-height:1.8}.project-caption>span,.project-caption a{color:var(--muted);white-space:nowrap;font-size:11px}.project-caption a{align-items:center;min-height:40px;display:inline-flex}.project-caption a:hover{text-underline-offset:4px;text-decoration:underline}.compact-writing{margin-top:25px}.compact-section-heading{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.compact-section-heading h2{color:var(--muted);font-size:13px;font-weight:500}.compact-section-heading>a{min-height:32px;color:var(--muted);align-items:center;font-size:11px;display:inline-flex}.writing-notes{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0;padding:0;list-style:none;display:grid}.writing-notes li{min-width:0}.writing-note{background:#faf7ee;border:1px solid #ded8ca;border-radius:3px;height:100%;min-height:126px;padding:13px 16px 24px;transition:transform .16s,border-color .16s,box-shadow .16s;display:block;position:relative;box-shadow:0 2px 3px #38332805}.note-category{color:var(--muted);font-size:10px;line-height:16px;display:block}.writing-note h3{text-wrap:balance;max-width:14em;margin-top:8px;font-size:15px;font-weight:500;line-height:1.6}.note-arrow{color:var(--muted);font-size:12px;line-height:1;position:absolute;bottom:9px;right:13px}.writing-note:hover,.writing-note:focus-visible{border-color:#aaa995;transform:translateY(-2px);box-shadow:0 4px 8px #3833280a}.writing-note:hover h3,.writing-note:focus-visible h3,.compact-section-heading>a:hover{color:var(--accent)}.portfolio-page .site-footer{margin-top:24px;font-size:12px}.portfolio-page .preview-note{font-size:10px}.switcher-fallback{color:var(--muted);font-size:12px}.switcher-fallback a{text-decoration:underline}.image-lightbox{background:var(--paper);width:min(1500px,100% - 40px);max-width:none;max-height:calc(100dvh - 40px);color:var(--ink);border:0;border-radius:6px;padding:52px 18px 14px}.image-lightbox::backdrop{backdrop-filter:blur(5px);background:#171b18d9}.image-lightbox img{object-fit:contain;width:100%;max-height:calc(100dvh - 150px);display:block}.image-lightbox p{text-align:center;color:var(--muted);margin-top:10px;font-size:12px}.close-lightbox{cursor:pointer;background:0 0;border:none;min-width:70px;min-height:40px;position:absolute;top:6px;right:16px;font-size:13px!important}.close-lightbox span{margin-left:9px;font-size:22px}@media (width>=701px){:root[data-page-width=wide] .project-preview{height:clamp(320px,50vw - 33px,480px)}}@media (width<=700px){.site-header .width-toggle{display:none}.portfolio-page .site-shell{padding-top:25px}.portfolio-page .site-header{padding-top:18px}.portfolio-page .site-header nav{gap:20px}.project-preview{height:280px}.project-tabs{gap:0 15px}.compact-writing{margin-top:18px}}@media (width<=430px){.portfolio-page .site-header,.portfolio-page .site-shell{width:calc(100% - 40px)}.portfolio-page .signature-notes{width:48px}.writing-notes{gap:10px}.writing-note{min-height:128px;padding:11px 12px 24px}.writing-note h3{font-size:13px;line-height:1.6}.project-tabs{gap:0 14px}.project-tabs button{font-size:11px}.project-preview{height:210px;padding:3px}.project-panel{border-radius:7px;padding:0 5px 5px}.card-label{gap:8px;min-height:45px;padding-block:5px}.card-heading>span{font-size:9px}.card-heading h2{font-size:12px}.preview-action{padding:3px 6px;font-size:10px;bottom:5px;right:5px}.project-caption{flex-direction:column;align-items:start;gap:0;font-size:11px}.project-caption>span,.project-caption a{font-size:10px}.project-caption a{min-height:32px}}@media (width<=370px){.portfolio-page .site-header,.portfolio-page .site-shell{width:calc(100% - 32px)}.portfolio-page .site-header nav{gap:15px}.portfolio-page .signature-notes{width:40px}}@media (width<=359px){.writing-notes{grid-template-columns:1fr;gap:8px}.writing-note{min-height:94px}.writing-note h3{max-width:none;margin-top:5px}}@media print{body{background:#fff}body:before,.site-header nav,.site-footer,.preview-note,.back-link{display:none}.site-shell,.portfolio-page .site-shell{width:100%;padding-top:0;display:block}.site-header,.portfolio-page .site-header{width:100%;margin-bottom:24px;padding:0;position:static}}.github-profile[data-astro-cid-4bpzijht]{width:32px;height:32px;color:var(--muted);vertical-align:middle;border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex}.github-profile[data-astro-cid-4bpzijht]:hover{color:var(--ink)}.github-profile[data-astro-cid-4bpzijht]:focus-visible{color:var(--ink);outline-offset:2px;outline:2px solid}.github-profile[data-astro-cid-4bpzijht] svg[data-astro-cid-4bpzijht]{display:block}
