:root{--ink: #223348;--muted: #667585;--soft: rgba(63, 82, 101, .72);--page-background: radial-gradient(circle at 18% 16%, rgba(255, 255, 255, .9), transparent 28rem), radial-gradient(circle at 82% 70%, rgba(80, 109, 134, .45), transparent 30rem), linear-gradient(135deg, #edf2f5 0%, #d7e1e9 42%, #91a7ba 100%);--atmosphere: rgba(65, 91, 116, .34);--glass: rgba(246, 250, 252, .56);--glass-strong: rgba(255, 255, 255, .66);--line: rgba(255, 255, 255, .62);--line-soft: rgba(255, 255, 255, .46);--card-gradient: linear-gradient(135deg, var(--glass-strong), var(--glass));--shadow: 0 22px 70px rgba(39, 59, 80, .16);--shadow-hover: 0 28px 90px rgba(34, 52, 70, .22);--inset-highlight: inset 0 1px 0 rgba(255, 255, 255, .65);--focus-ring: rgba(50, 77, 104, .74);--nav-muted: rgba(34, 51, 72, .7);--nav-active: var(--ink);--frame-bg: rgba(203, 216, 225, .28);--tag-bg: rgba(239, 245, 248, .42);--tag-line: rgba(255, 255, 255, .54);--tag-text: rgba(55, 75, 94, .72);--pill-bg: rgba(236, 243, 247, .56);--pill-line: rgba(255, 255, 255, .62);--pill-text: rgba(34, 51, 72, .78);--icon-bg: rgba(191, 207, 220, .45);--icon-color: rgba(255, 255, 255, .92);--arrow: #40566b;--footer: rgba(247, 250, 252, .78);--footer-mobile: rgba(40, 58, 75, .68);--footer-hover: #ffffff;--modal-backdrop: rgba(206, 219, 228, .46);--modal-bg: linear-gradient(135deg, rgba(250, 253, 255, .78), rgba(232, 241, 247, .62));--modal-line: rgba(255, 255, 255, .66);--modal-shadow: 0 32px 110px rgba(32, 49, 67, .28);--modal-control-bg: rgba(239, 246, 249, .58);--modal-control-hover: rgba(255, 255, 255, .78);--copy: rgba(49, 68, 86, .88);--quote: rgba(85, 103, 119, .9);--link: rgba(43, 80, 111, .92);--ease-soft: cubic-bezier(.22, 1, .36, 1);--ease-press: cubic-bezier(.2, .8, .2, 1);--duration-fast: .18s;--duration-medium: .42s;color-scheme:light;color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-synthesis:none;line-height:1.5;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body{min-width:320px;min-height:100%;margin:0;overflow-x:hidden}body{background:var(--page-background)}body:after{position:fixed;right:-8vw;bottom:8vh;z-index:-1;width:56vw;height:24vw;border-radius:50%;background:var(--atmosphere);filter:blur(46px);content:""}@media(prefers-color-scheme:dark){:root{--ink: #eef4f7;--muted: #b8c7d1;--soft: rgba(202, 216, 225, .78);--page-background: radial-gradient(circle at 14% 12%, rgba(112, 138, 158, .24), transparent 28rem), radial-gradient(circle at 82% 72%, rgba(111, 137, 155, .24), transparent 30rem), linear-gradient(135deg, #151d22 0%, #202b32 47%, #526878 100%);--atmosphere: rgba(111, 137, 155, .22);--glass: rgba(36, 49, 58, .58);--glass-strong: rgba(70, 83, 91, .46);--line: rgba(220, 237, 246, .2);--line-soft: rgba(220, 237, 246, .16);--card-gradient: linear-gradient(135deg, rgba(78, 90, 98, .52), var(--glass));--shadow: 0 24px 78px rgba(0, 0, 0, .34);--shadow-hover: 0 30px 96px rgba(0, 0, 0, .46);--inset-highlight: inset 0 1px 0 rgba(255, 255, 255, .12);--focus-ring: rgba(181, 209, 224, .86);--nav-muted: rgba(223, 235, 241, .72);--nav-active: #f7fbfd;--frame-bg: rgba(145, 166, 179, .16);--tag-bg: rgba(201, 220, 230, .12);--tag-line: rgba(223, 238, 246, .18);--tag-text: rgba(216, 228, 235, .82);--pill-bg: rgba(34, 48, 56, .72);--pill-line: rgba(221, 237, 246, .22);--pill-text: rgba(236, 244, 248, .9);--icon-bg: rgba(170, 192, 205, .18);--icon-color: rgba(233, 244, 249, .94);--arrow: rgba(228, 240, 247, .82);--footer: rgba(225, 236, 242, .74);--footer-mobile: rgba(225, 236, 242, .74);--footer-hover: #ffffff;--modal-backdrop: rgba(10, 16, 20, .58);--modal-bg: linear-gradient(135deg, rgba(54, 69, 78, .86), rgba(25, 36, 43, .82));--modal-line: rgba(222, 238, 247, .2);--modal-shadow: 0 34px 120px rgba(0, 0, 0, .56);--modal-control-bg: rgba(201, 220, 230, .13);--modal-control-hover: rgba(227, 240, 247, .2);--copy: rgba(232, 241, 246, .9);--quote: rgba(200, 216, 225, .88);--link: rgba(178, 215, 235, .94);color-scheme:dark}}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--focus-ring);outline-offset:5px}.page-shell{width:min(calc(100% - 48px),1200px);min-height:100vh;margin:0 auto;padding:32px 0 28px;animation:fade-in .65s var(--ease-soft) both}.route-stage{animation:route-in var(--duration-medium) var(--ease-soft) both}.site-header,.nav-links,.card-title-row,.site-footer,.social-links{display:flex;align-items:center}.site-header{justify-content:space-between;gap:24px;min-height:64px}.logo{display:grid;flex:0 0 auto;width:52px;height:52px;place-items:center;border:1px solid var(--line);border-radius:50%;background:var(--frame-bg);overflow:hidden;line-height:0;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);transition:transform var(--duration-fast) var(--ease-press),border-color var(--duration-fast) ease,background var(--duration-fast) ease}.logo:hover,.logo:focus-visible{transform:translateY(-1px);border-color:var(--line)}.logo img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;border-radius:50%;object-fit:cover}.nav-links{justify-content:flex-end;gap:clamp(14px,4vw,50px);font-size:.94rem}.nav-links a{position:relative;padding:8px 0 14px;color:var(--nav-muted);transition:color var(--duration-fast) ease,transform var(--duration-fast) var(--ease-press)}.nav-links a:before{position:absolute;right:-10px;bottom:8px;left:-10px;height:1px;background:currentColor;content:"";opacity:0;transform:scaleX(.4);transition:opacity var(--duration-fast) ease,transform var(--duration-fast) var(--ease-soft)}.nav-links a:hover,.nav-links .active{color:var(--nav-active)}.nav-links a:hover{transform:translateY(-1px)}.nav-links .active:after{position:absolute;bottom:4px;left:50%;width:4px;height:4px;border-radius:50%;background:currentColor;content:"";transform:translate(-50%)}.nav-links a:hover:before{opacity:.34;transform:scaleX(1)}.hero{max-width:740px;padding:clamp(72px,11vw,124px) 0 clamp(38px,6vw,68px)}.hero h1,.resume-hero h1,.photos-hero h1,.card-title-row h2,.link-card strong,.photo-list-copy strong,.photo-modal-header h2,.resume-name,.resume-section-heading h2{margin:0;font-family:Georgia,Songti SC,STSong,serif;font-weight:400;letter-spacing:0}.hero h1,.resume-hero h1{font-size:clamp(3.1rem,7vw,5.8rem);line-height:1;overflow-wrap:break-word}.tagline{margin:20px 0 0;color:var(--soft);font-size:clamp(1rem,2vw,1.25rem)}.intro,.photo-card p,.link-card small{color:var(--muted)}.intro{margin:14px 0 0}.resume-page{padding-top:clamp(28px,5vw,56px)}.photos-page{padding-top:clamp(28px,5vw,54px)}.photos-content{transition:filter var(--duration-fast) ease,opacity var(--duration-fast) ease}.photos-page.modal-open .photos-content{filter:blur(10px);opacity:.74;pointer-events:none;-webkit-user-select:none;user-select:none}.resume-hero{max-width:780px;padding:clamp(42px,7vw,82px) 0 clamp(34px,5vw,58px)}.photos-hero{max-width:760px;padding:clamp(34px,6vw,72px) 0 clamp(30px,5vw,54px)}.photos-hero h1{color:var(--ink);font-size:clamp(2.35rem,5vw,4.25rem);line-height:1.08;overflow-wrap:break-word}.back-link{display:inline-flex;margin-bottom:clamp(24px,4vw,38px);color:var(--nav-muted);font-size:.9rem;transition:color var(--duration-fast) ease,transform var(--duration-fast) var(--ease-press)}.back-link:hover{color:var(--nav-active);transform:translate(-2px)}.resume-layout{display:grid;grid-template-columns:minmax(260px,.82fr) minmax(0,1.55fr);gap:20px;align-items:start}.resume-intro-card{min-height:330px;padding:32px}.resume-intro-card img{display:block;width:88px;height:88px;border:1px solid var(--line);border-radius:50%;box-shadow:0 16px 38px #273b5029;object-fit:cover}.resume-name{margin:26px 0 12px;color:var(--ink);font-size:clamp(1.34rem,2vw,1.7rem);line-height:1.18}.resume-intro-card p:not(.resume-name),.resume-section>p{color:var(--muted)}.resume-intro-card p:not(.resume-name){margin:0;max-width:28rem}.resume-contact-list{display:grid;gap:14px;margin:24px 0 0}.resume-contact-list div{display:grid;gap:4px;padding-top:14px;border-top:1px solid var(--line-soft)}.resume-contact-list dt{color:var(--soft);font-size:.74rem;letter-spacing:.12em;text-transform:uppercase}.resume-contact-list dd{margin:0;color:var(--ink);font-size:.95rem;overflow-wrap:anywhere}.resume-section-list{display:grid;gap:16px}.photos-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;align-items:stretch}.photo-list-card{width:100%;padding:14px 14px 20px;color:inherit;font:inherit;text-align:left;appearance:none;cursor:pointer;animation:card-rise .52s var(--ease-soft) both}.photo-list-image{position:relative;display:block;aspect-ratio:4 / 3;border:1px solid var(--line-soft);border-radius:20px;background:var(--frame-bg);overflow:hidden}.photo-list-image img,.photo-thumb img{display:block;width:100%;max-width:100%;height:100%;object-fit:cover}.photo-list-image.photo-fit-contain img,.photo-thumb.photo-fit-contain img{object-fit:contain}.photo-list-image .responsive-photo,.photo-thumb .responsive-photo{display:block;width:100%;height:100%}.photo-list-image img,.photo-thumb img{transition:transform var(--duration-medium) var(--ease-soft)}.photo-list-card:hover img,.photo-list-card:focus-visible img,.photo-card:hover .photo-thumb img,.photo-card:focus-visible .photo-thumb img{transform:scale(1.035)}.photo-list-card:active img,.photo-card:active .photo-thumb img{transform:scale(1.015)}.photo-list-copy{display:grid;gap:10px;padding:18px 4px 0}.photo-list-copy strong{color:var(--ink);font-size:clamp(1.15rem,1.8vw,1.42rem);line-height:1.22}.photo-list-meta,.photo-modal-date,.photo-modal-details{color:var(--soft);font-size:.82rem}.photo-list-meta{display:flex;flex-wrap:wrap;gap:8px 12px}.photo-list-summary{color:var(--muted);font-size:.92rem;line-height:1.7}.photo-tags{display:flex;flex-wrap:wrap;gap:8px}.photo-tags span{border:1px solid var(--tag-line);border-radius:999px;padding:5px 10px;background:var(--tag-bg);color:var(--tag-text);font-size:.72rem;line-height:1.1}.resume-section{padding:clamp(24px,3vw,34px)}.resume-section-heading{display:grid;grid-template-columns:auto auto minmax(0,1fr);gap:10px;align-items:baseline;margin-bottom:16px}.resume-section-heading span,.resume-section-heading p{color:var(--soft);font-size:.78rem;letter-spacing:.12em;text-transform:uppercase}.resume-section-heading p{margin:0}.resume-section-heading h2{justify-self:end;color:var(--ink);font-size:clamp(1.18rem,2vw,1.48rem)}.resume-section>p{max-width:62ch;margin:0;line-height:1.9}.card-layout{display:grid;grid-template-columns:minmax(0,2.1fr) minmax(280px,.95fr);gap:20px}.side-cards{display:grid;gap:20px}.glass-card{display:block;border:1px solid var(--line);border-radius:26px;background:var(--card-gradient);box-shadow:var(--shadow),var(--inset-highlight);-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px);transition:transform var(--duration-fast) var(--ease-press),border-color var(--duration-fast) ease,background var(--duration-fast) ease,box-shadow var(--duration-fast) ease;will-change:transform}.glass-card:hover,.glass-card:focus-visible{border-color:var(--line);box-shadow:var(--shadow-hover),var(--inset-highlight);transform:translateY(-4px)}.glass-card:active{transform:translateY(-1px) scale(.994)}.photo-card{min-height:390px;padding:clamp(22px,3vw,34px)}.card-title-row{justify-content:space-between;gap:18px;margin-bottom:22px}.card-title-row h2{color:var(--ink);font-size:clamp(1.22rem,2vw,1.55rem)}.card-title-row span{flex:0 0 auto;color:var(--soft);font-size:.9rem}.photo-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.photo-thumb{position:relative;display:block;aspect-ratio:3 / 4;min-height:198px;border:1px solid var(--line-soft);border-radius:13px;background:var(--frame-bg);box-shadow:inset 0 0 34px #1b2b3a24;overflow:hidden;transform:translateZ(0)}.photo-thumb-title{position:absolute;right:10px;bottom:10px;left:10px;max-width:calc(100% - 20px);border:1px solid var(--pill-line);border-radius:999px;padding:7px 10px;background:var(--pill-bg);color:var(--pill-text);font-size:.76rem;line-height:1.2;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;opacity:0;transform:translateY(6px);transition:opacity var(--duration-fast) ease,transform var(--duration-fast) var(--ease-soft);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.photo-thumb:hover .photo-thumb-title,.photo-card:focus-visible .photo-thumb-title{opacity:1;transform:translateY(0)}.photo-card p{margin:22px 0 0;font-size:.95rem}.link-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:20px;min-height:185px;padding:32px}.icon-circle{display:grid;width:66px;height:66px;place-items:center;border:1px solid var(--line);border-radius:50%;background:var(--icon-bg);color:var(--icon-color);transition:background var(--duration-fast) ease,transform var(--duration-fast) var(--ease-press)}.link-card:hover .icon-circle,.link-card:focus-visible .icon-circle{transform:translateY(-1px) scale(1.03)}.icon-circle svg{width:35px;height:35px;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:3}.link-card strong,.link-card small{display:block}.link-card strong{color:var(--ink);font-size:clamp(1.08rem,1.7vw,1.34rem);line-height:1.26}.link-card small{margin-top:8px;font-size:.92rem}.arrow{color:var(--arrow);transition:transform var(--duration-fast) var(--ease-soft)}.link-card:hover .arrow,.link-card:focus-visible .arrow{transform:translate(3px)}.site-footer{justify-content:center;gap:32px;padding-top:clamp(36px,6vw,58px);color:var(--footer);font-size:.88rem}.social-links{gap:18px}.social-links a{display:grid;width:30px;height:30px;place-items:center;border-radius:50%;color:inherit;transition:color var(--duration-fast) ease,transform var(--duration-fast) var(--ease-press)}.social-links a:hover{color:var(--footer-hover);transform:translateY(-2px)}.social-links svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7}.social-links a[aria-label="500px"] svg{width:34px}.social-links text{fill:currentColor;font:700 8px Inter,sans-serif;stroke:none}.social-links a[aria-label=GitHub] svg{fill:currentColor;stroke:none}.photo-modal-backdrop{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:clamp(14px,2.6vw,32px);background:var(--modal-backdrop);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);overflow:hidden;animation:modal-in var(--duration-fast) ease both}.photo-modal-backdrop.is-closing{pointer-events:none;animation:modal-out .22s ease both}.photo-modal{position:relative;width:min(100%,1180px);max-height:calc(100dvh - clamp(28px,5.2vw,64px));border:1px solid var(--modal-line);border-radius:30px;padding:clamp(24px,3.2vw,42px);background:var(--modal-bg);box-shadow:var(--modal-shadow),var(--inset-highlight);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px);animation:modal-panel-in .26s var(--ease-soft) both}.photo-modal-backdrop.is-closing .photo-modal{animation:modal-panel-out .22s ease both}.photo-modal-close{position:absolute;top:clamp(18px,2.6vw,30px);right:clamp(18px,2.6vw,30px);z-index:2;display:grid;width:38px;height:38px;place-items:center;border:1px solid var(--modal-line);border-radius:50%;background:var(--modal-control-bg);color:var(--soft);font:inherit;font-size:1.6rem;line-height:1;cursor:pointer;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);transition:background var(--duration-fast) ease,color var(--duration-fast) ease,transform var(--duration-fast) var(--ease-press)}.photo-modal-close:hover{background:var(--modal-control-hover);color:var(--ink);transform:rotate(4deg) scale(1.04)}.photo-modal-header{max-width:860px;padding-right:54px}.photo-modal-date{margin:0 0 14px}.photo-modal-header h2{color:var(--ink);font-size:clamp(2rem,5vw,3.45rem);line-height:1.08;overflow-wrap:break-word}.photo-modal-details{margin:16px 0 0}.photo-modal-header .photo-tags{margin-top:18px}.photo-markdown{max-width:76ch;margin-top:clamp(28px,4vw,42px);color:var(--copy);font-size:1rem;line-height:1.78}.photo-markdown p{margin:0 0 1.1em}.photo-markdown p:last-child{margin-bottom:0}.photo-markdown strong{color:var(--ink);font-weight:600}.photo-markdown a{color:var(--link);text-decoration:underline;text-underline-offset:.18em}.photo-markdown blockquote{margin:1.2em 0;border-left:2px solid var(--line);padding-left:1.1em;color:var(--quote)}.photo-markdown ul,.photo-markdown ol{padding-left:1.35em}.photo-modal-gallery{display:grid;gap:clamp(22px,4vw,34px);margin-top:clamp(32px,5vw,54px)}.photo-gallery-row{display:grid;gap:clamp(12px,2vw,18px);align-items:start;width:100%}.downloadable-photo{margin:0;min-width:0}.downloadable-photo-frame{position:relative;border:1px solid var(--line-soft);border-radius:22px;background:var(--frame-bg);overflow:hidden}.downloadable-photo-frame .responsive-photo{display:block;width:100%}.downloadable-photo img{display:block;width:100%;max-width:100%;height:auto;object-fit:contain}.photo-gallery-row .downloadable-photo-frame{aspect-ratio:var(--photo-aspect)}.photo-gallery-row .downloadable-photo img{height:100%}.downloadable-photo figcaption{margin-top:12px;color:var(--quote);font-size:.9rem;line-height:1.65}.download-original-link{position:absolute;right:14px;bottom:14px;border:1px solid var(--modal-line);border-radius:999px;padding:8px 12px;background:var(--modal-control-bg);color:var(--ink);font-size:.82rem;line-height:1;opacity:0;pointer-events:none;transform:translateY(6px);transition:opacity var(--duration-fast) ease,transform var(--duration-fast) var(--ease-soft),background var(--duration-fast) ease;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.download-original-link:hover{background:var(--modal-control-hover)}.downloadable-photo-frame:hover .download-original-link,.downloadable-photo-frame:focus-within .download-original-link{opacity:1;pointer-events:auto;transform:translateY(0)}@keyframes fade-in{0%{opacity:0;transform:translateY(8px)}}@keyframes route-in{0%{opacity:0;transform:translateY(10px)}}@keyframes card-rise{0%{opacity:0;transform:translateY(14px)}}@keyframes modal-in{0%{opacity:0}}@keyframes modal-out{to{opacity:0}}@keyframes modal-panel-in{0%{opacity:0;transform:translateY(14px) scale(.985)}}@keyframes modal-panel-out{to{opacity:0;transform:translateY(8px) scale(.99)}}.photo-list-card:nth-child(2){animation-delay:45ms}.photo-list-card:nth-child(3){animation-delay:90ms}.photo-list-card:nth-child(4){animation-delay:135ms}.photo-list-card:nth-child(5){animation-delay:.18s}.photo-list-card:nth-child(6){animation-delay:225ms}@media(max-width:900px){.page-shell{width:min(calc(100% - 36px),760px)}.card-layout,.resume-layout{grid-template-columns:1fr}.photos-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.resume-intro-card{min-height:auto}.link-card{min-height:148px}}@media(max-width:640px){.page-shell{width:min(calc(100% - 28px),100%);padding-top:20px}.logo{width:44px;height:44px;font-size:1.08rem}.nav-links{flex:1;justify-content:flex-end;gap:11px;font-size:.78rem;scrollbar-width:none}.nav-links::-webkit-scrollbar{display:none}.hero{padding:62px 0 34px}.hero h1,.resume-hero h1{font-size:clamp(2.45rem,10.8vw,3.25rem);line-height:1.08}.photos-hero h1{font-size:clamp(2.1rem,9vw,3rem)}.resume-page{padding-top:12px}.photos-page{padding-top:10px}.resume-hero,.photos-hero{padding:42px 0 30px}.resume-intro-card,.resume-section{padding:24px;border-radius:22px}.resume-section-heading{grid-template-columns:1fr;gap:4px}.resume-section-heading h2{justify-self:start}.card-title-row{display:grid;gap:8px}.photo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.photo-thumb{min-height:132px}.photos-grid{grid-template-columns:1fr;gap:16px}.photo-list-card{padding:12px 12px 18px;border-radius:22px}.photo-list-image{border-radius:17px}.photo-modal-backdrop{padding:10px}.photo-modal{width:100%;max-height:calc(100dvh - 20px);border-radius:24px;padding:20px}.photo-modal-close{top:16px;right:16px;width:36px;height:36px}.photo-modal-header{padding-right:44px}.photo-modal-header h2{font-size:clamp(1.9rem,10vw,2.65rem)}.downloadable-photo-frame{border-radius:18px}.photo-gallery-row{grid-template-columns:1fr!important}.download-original-link{right:10px;bottom:10px;opacity:.92;pointer-events:auto;transform:none}.link-card{grid-template-columns:auto minmax(0,1fr);min-height:138px;padding:24px}.arrow{display:none}.icon-circle{width:56px;height:56px}.site-footer{flex-direction:column;gap:14px;color:var(--footer-mobile)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.glass-card:hover,.glass-card:focus-visible,.logo:hover,.logo:focus-visible,.nav-links a:hover,.back-link:hover,.social-links a:hover{transform:none}.photo-list-card{animation-delay:0ms!important}}
