:root{--ink:#202124;--paper:#ffffff;--green:#202124;--lime:#e8eeff;--line:#d5d9df;--muted:#59616d;font-family:Arial,"PingFang SC","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:80px}body{margin:0}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid #93b936;outline-offset:5px}.skip{position:fixed;left:20px;top:-80px;background:var(--lime);padding:15px;z-index:10}.skip:focus{top:12px}header{padding:26px 5%;display:flex;align-items:center;gap:30px;border-bottom:1px solid var(--line)}.brand{font-weight:800;font-size:25px;letter-spacing:-1px}.brand span{font:12px monospace;letter-spacing:.08em;margin-left:12px}nav{display:flex;gap:30px;margin-left:auto;font-size:14px}nav a:hover{color:#427443}#language{background:transparent;border:1px solid #aab3a9;border-radius:50%;height:38px;width:38px;font-size:13px}.hero{padding:34px 5% 0;background:var(--green);color:#f3f7ee}.eyebrow,.section-top,.hero-foot,.stack-label{display:flex;justify-content:space-between;gap:20px;font:12px/1.5 monospace;letter-spacing:.06em}.eyebrow{color:#c5d6ca}.hero-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:6%;align-items:center;padding:65px 0 70px}h1{font-size:clamp(43px,5.4vw,86px);font-weight:500;letter-spacing:-.055em;line-height:1.09;margin:0 0 30px}h1 em{font-family:Georgia,serif;font-weight:400;color:var(--lime)}.hero-copy{font-size:18px;line-height:1.9;color:#d4e1d6}.hero-links{display:flex;align-items:center;gap:30px;margin-top:32px;font-size:14px}.primary{background:var(--lime);color:#173121;padding:16px 23px;border-radius:3px}.hero-foot{padding:23px 0;border-top:1px solid #547163;color:#d2e0d4}.stack{border:1px solid #658371;border-radius:4px;transform:rotate(-3deg);transition:transform .4s;background:#1b4635}.stack:hover{transform:rotate(0)}.stack-label{padding:16px 22px;border-bottom:1px solid #658371;color:#d0ddcc}.layer{padding:15px 22px;border-bottom:1px solid #4c725b;display:grid;grid-template-columns:1fr auto;gap:7px}.layer:last-child{border:0}.layer small{grid-column:1/-1;color:#c0d4b8;font:12px monospace}.layer strong{font-size:23px;letter-spacing:-.03em;font-weight:500}.layer>span{font:12px/1.8 monospace;align-self:end;color:#c0d4b8}.section{padding:65px 5% 80px}.section-top{padding-bottom:25px;border-bottom:1px solid var(--line);color:var(--muted);margin-bottom:35px}h2{font-size:clamp(30px,3.2vw,48px);letter-spacing:-.025em;line-height:1.3;margin:0 0 25px;font-weight:600}.section-title{display:flex;justify-content:space-between;align-items:center;gap:20px}.section-title p{font-size:16px;color:var(--muted)}.projects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin-top:24px}.project{border:1px solid var(--line);background:white;padding:0;text-align:left;color:var(--ink);transition:transform .25s,border-color .25s}.project:hover{transform:translateY(-5px);border-color:#64886a}.project-cover{padding:28px;min-height:210px;display:flex;flex-direction:column;justify-content:space-between;background:#e8eeff}.project:nth-child(2) .project-cover{background:#202124;color:#ffffff}.project:nth-child(3) .project-cover{background:#e3e8f0}.project:nth-child(4) .project-cover{background:#f1f2f4}.project:nth-child(5) .project-cover{background:#e8eeff}.project:nth-child(6) .project-cover{background:#202124;color:#ffffff}.cover-top{display:flex;justify-content:space-between;font:12px monospace}.cover-word{font-size:clamp(34px,4.1vw,62px);font-weight:500;letter-spacing:-.04em;line-height:1.15;margin:22px 0}.cover-bottom{font:12px monospace;letter-spacing:.04em;opacity:.8}.project-info{padding:25px 28px 28px;position:relative}.project-info h3{font-size:22px;margin:0 35px 12px 0}.project-info p{font-size:16px;line-height:1.8;color:var(--muted);margin:0;min-height:58px}.arrow{position:absolute;right:28px;top:23px;font-size:26px}.tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px}.tags span{font:12px monospace;border:1px solid var(--line);padding:5px 8px;border-radius:3px}.open-source{background:#e9eee5}.opensource-grid{display:grid;grid-template-columns:1fr 1.2fr;gap:8%}.opensource-grid p{font-size:17px;line-height:1.8;color:var(--muted)}.opensource-grid>div>a{display:inline-block;margin-top:20px;border-bottom:1px solid;padding-bottom:5px}.pr-list>a{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:21px 0;border-bottom:1px solid #c2cec0}.pr-list>a:first-child{padding-top:0}.pr-list>a>span{font-size:21px}.pr-list small{display:block;font-size:12px;font-weight:400;color:var(--muted);margin-top:8px}.pr-list strong{font-size:52px;font-weight:500;line-height:1}.pr-list b{font:14px monospace;color:#345f42;text-align:right}.timeline{margin-top:36px}.time-row{display:grid;grid-template-columns:22% 1fr 24%;gap:30px;padding:30px 0;border-top:1px solid var(--line)}.time-row time{font:14px monospace;color:var(--muted)}.time-row h3{font-size:24px;margin:0 0 8px}.time-row p{font-size:16px;line-height:1.8;color:var(--muted);margin:8px 0 0}.time-row .role{font-size:14px;color:#365e43}.scope{font:13px/1.9 monospace;color:var(--muted);text-align:right}.about{background:#ecefea}.about-grid{display:grid;grid-template-columns:1fr 1.3fr;gap:9%}.about-grid p{font-size:17px;line-height:1.9;margin-top:0;color:#59616d}.education{border-top:1px solid #c5cfc3;margin-top:32px;padding-top:15px}.education h3{font-size:17px;margin:18px 0 7px}.education p{font-size:14px}.award{display:flex;gap:24px;border-top:1px solid #c5cfc3;padding-top:28px;margin-top:26px}.award>span{font:56px Georgia,serif;color:#416847}.award p{font-size:16px}.secondary{font-size:14px!important}.contact{background:#17261d;color:#eff6e8;padding:70px 5%}.contact>span{font:12px monospace;color:#c6d3bb}.contact h2{margin-top:24px;font-size:clamp(32px,5vw,65px)}.contact>a{display:inline-block;border-bottom:1px solid var(--lime);padding-bottom:10px;font-size:22px;color:var(--lime)}.contact p{margin-top:30px;color:#becbb6;font-size:14px}footer{display:flex;justify-content:space-between;gap:20px;padding:28px 5%;font:12px monospace}dialog{max-width:760px;width:calc(100% - 32px);max-height:88vh;overflow:auto;border:1px solid #aabbab;padding:36px;color:var(--ink);background:var(--paper);border-radius:4px}dialog::backdrop{background:#102317b8;backdrop-filter:blur(6px)}.dialog-top{display:flex;align-items:center;justify-content:space-between;font:12px monospace;margin-bottom:24px;color:var(--muted)}#close-dialog{border:0;background:#e7ecdf;width:38px;height:38px;border-radius:50%;font-size:25px}#detail-body p{font-size:17px;line-height:1.9}#detail-body a{display:inline-block;padding:10px 13px;margin:5px 7px 5px 0;border:1px solid #acc29f;border-radius:3px;font-size:14px;color:#345d3e}#detail-body .scope-note{font-size:14px;color:var(--muted);border-top:1px solid var(--line);padding-top:18px}@media(min-width:1600px){header,.hero,.section,.contact,footer{padding-left:calc((100% - 1440px)/2);padding-right:calc((100% - 1440px)/2)}}@media(max-width:1000px){.hero-grid{grid-template-columns:1.3fr 1fr;gap:30px}.layer{display:block}.layer strong,.layer span{display:block;margin-top:7px}.layer strong{font-size:20px}.brand span{display:none}.time-row{grid-template-columns:20% 1fr}.scope{display:none}}@media(max-width:680px){header{padding:20px 5%;gap:15px}nav{gap:15px;font-size:14px}nav a:nth-child(3){display:none}.hero-grid{grid-template-columns:1fr;padding:42px 0;gap:42px}h1{font-size:clamp(40px,10vw,65px)}.eyebrow span:last-child{display:none}.stack{transform:none}.layer{display:grid;grid-template-columns:1fr 1fr}.layer small{grid-column:1/-1}.hero-foot{flex-wrap:wrap;gap:10px}.section{padding-top:45px;padding-bottom:50px}.section-title{display:block}.projects,.opensource-grid,.about-grid{grid-template-columns:1fr}.opensource-grid,.about-grid{gap:28px}.project-cover{min-height:195px}.cover-word{font-size:42px}.time-row{grid-template-columns:1fr;gap:12px;padding:24px 0}.time-row h3{font-size:21px}.section-top>span:last-child{text-align:right}.pr-list>a>span{font-size:18px}dialog{padding:24px}.hero-copy{font-size:16px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important;animation:none!important}}
