/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;scroll-padding-top:28px}body{background:var(--page);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:15px;line-height:1.85;transition:background-color .25s,color .25s}a{color:inherit;text-decoration:none;transition:color .18s,background-color .18s,border-color .18s}button{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:5px;border-radius:3px}::selection{background:var(--accent);color:var(--button-ink)}h1,h2,h3,p{margin:0}h1,h2{font-family:var(--sans);font-weight:600}ul,dl,dd{margin:0;padding:0;list-style:none}}@layer components;@layer utilities{.contents{display:contents}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--page:#f7f9fb;--surface:#fff;--surface-hover:#fcfdff;--ink:#25313f;--muted:#637183;--faint:#69798a;--line:#e0e6ed;--accent:#46698a;--accent-hover:#355570;--accent-soft:#edf3f8;--accent-line:#b8cbdc;--button-ink:#fff;--sage-bg:#edf3f0;--sage-ink:#537767;--blue-bg:#edf2f8;--blue-ink:#526e92;--plum-bg:#f1eff7;--plum-ink:#78658d;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--mono:"SFMono-Regular", Consolas, "Liberation Mono", monospace}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--page:#171d25;--surface:#1d2530;--surface-hover:#232e3b;--ink:#e4eaf1;--muted:#a6b3c2;--faint:#9aaabd;--line:#303c4b;--accent:#a3bfdc;--accent-hover:#bdd4eb;--accent-soft:#253449;--accent-line:#4a637c;--button-ink:#172432;--sage-bg:#253630;--sage-ink:#a5c8b7;--blue-bg:#253448;--blue-ink:#a9c3e5;--plum-bg:#312d40;--plum-ink:#c1b4d7}.site-shell{width:min(100% - 64px,760px);margin-inline:auto}.skip-link{z-index:100;background:var(--ink);color:var(--page);padding:10px 18px;position:fixed;top:-80px;left:20px}.skip-link:focus{top:12px}.site-header{justify-content:space-between;align-items:center;gap:28px;padding-block:30px 8px;display:flex}.wordmark{font-family:var(--sans);letter-spacing:-.6px;font-size:24px;font-weight:650;line-height:1}.wordmark span,.project-links a:hover,.contact-links a:hover,.blog-link:hover{color:var(--accent)}.theme-toggle{border:1px solid var(--line);min-height:36px;color:var(--muted);cursor:pointer;background:0 0;border-radius:999px;justify-content:center;align-items:center;gap:7px;padding:5px 12px;font-size:12px;transition:border-color .18s,color .18s;display:inline-flex}.theme-toggle:hover{color:var(--accent);border-color:var(--accent-line)}.theme-toggle svg{width:15px;height:15px}.hero{padding-block:14px 0}.hero-role{color:var(--ink);font-size:14px}.hero-role span{color:var(--accent-line);padding-inline:8px}.hero-description{color:var(--muted);margin-top:14px;font-size:15px;line-height:1.95}.mobile-break{display:none}.content-section{padding-top:56px}.section-label{color:var(--faint);font:11px/1.5 var(--sans);letter-spacing:.06em;align-items:center;gap:16px;margin-bottom:20px;display:flex}.section-label:after{content:"";background:var(--line);flex:1;height:1px}.section-label-cn{letter-spacing:.15em;font-family:var(--sans)}h2{letter-spacing:0;font-size:24px;line-height:1.5}.about-copy{color:var(--muted);line-height:1.95}.about-copy p+p{margin-top:15px}.inline-link{color:var(--ink);text-decoration:underline;-webkit-text-decoration-color:var(--accent-line);-webkit-text-decoration-color:var(--accent-line);-webkit-text-decoration-color:var(--accent-line);text-decoration-color:var(--accent-line);text-underline-offset:5px}.inline-link:hover{color:var(--accent);-webkit-text-decoration-color:var(--accent);-webkit-text-decoration-color:var(--accent);-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.project-card{background:var(--surface);border:1px solid var(--line);border-radius:5px;flex-direction:column;padding:24px;transition:border-color .2s,background .2s;display:flex}.project-card:hover{background:var(--surface-hover);border-color:var(--accent-line)}.project-topline{justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;display:flex}.project-icon{background:var(--accent-soft);width:38px;height:38px;color:var(--accent);font:25px/1 var(--sans);border-radius:9px;place-items:center;display:grid}[data-tone=sage] .project-icon{background:var(--sage-bg);color:var(--sage-ink)}[data-tone=blue] .project-icon{background:var(--blue-bg);color:var(--blue-ink)}[data-tone=plum] .project-icon{background:var(--plum-bg);color:var(--plum-ink);font:17px/1 var(--mono)}.project-category{font:10px/1.5 var(--sans);color:var(--faint);letter-spacing:.04em}.project-card h3{letter-spacing:-.3px;font-size:17px;font-weight:600}.project-card p{color:var(--muted);margin-top:10px;font-size:13px;line-height:1.85}.tags{flex-wrap:wrap;gap:5px 7px;margin-block:18px 22px;display:flex}.tags li{font:11px/1.6 var(--sans);color:var(--muted);background:var(--page);border-radius:3px;padding:3px 7px}.project-links{border-top:1px solid var(--line);gap:20px;margin-top:auto;padding-top:15px;font-size:12px;display:flex}.project-links span{color:var(--accent);padding-left:4px}.skills-grid{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:38px;display:grid}.skill-group{border-bottom:1px solid var(--line);padding-block:18px}.skill-group:nth-child(-n+2){padding-top:0}.skill-group h3{align-items:center;gap:11px;font-size:14px;font-weight:500;display:flex}.skill-number{color:var(--accent);font:11px/1 var(--sans)}.skill-list{color:var(--muted);flex-wrap:wrap;gap:3px 0;margin-top:12px;font-size:12px;display:flex}.skill-list li:not(:last-child):after{content:"/";color:var(--accent-line);padding-inline:9px}.blog-entry{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px 24px;display:flex}.blog-entry p{color:var(--muted);font-size:14px}.blog-link{font-size:13px}.blog-link span{color:var(--accent);margin-left:6px}.blog-status{color:var(--faint);font-size:12px}.contact-links{color:var(--muted);flex-wrap:wrap;gap:8px 24px;font-size:13px;display:flex}.contact-links span{color:var(--accent)}.site-footer{padding-block:48px 32px}.site-footer p{color:var(--faint);font-size:11px}@media (width<=600px){.site-shell{width:calc(100% - 40px)}.site-header{gap:16px;padding-block:22px 6px}.theme-toggle{padding-inline:8px}.theme-toggle span{display:none}.hero{padding-top:12px}.hero-role{font-size:12px}.hero-role span{padding-inline:4px}.hero-description{font-size:14px}.mobile-break{display:inline}.content-section{padding-top:44px}h2{font-size:22px}.section-label{gap:12px;margin-bottom:18px;font-size:10px}.about-copy{font-size:14px}.project-grid{grid-template-columns:1fr;gap:14px}.project-card{padding:23px}.skills-grid{grid-template-columns:1fr}.skill-group:nth-child(2){padding-top:18px}.contact-links{gap:8px 18px}.site-footer{padding-block:36px 26px}}@media (width<=360px){.site-header{gap:11px}.mobile-break{display:inline}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}
