:root{--bg:#f2f2f0;--ink:#131313;--ink-2:#4c4c48;--ink-3:#7c7c76;--rule:#c9c9c4;--rule-soft:#dededa;--accent:#d8341f;--sans:"Archivo", "PingFang TC", "Noto Sans TC", system-ui, sans-serif;--mono:"Space Mono", ui-monospace, SFMono-Regular, monospace;--rail:132px;--gutter:44px;--measure:620px}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-feature-settings:"tnum" 1;margin:0;line-height:1.5}a{color:var(--accent);border-bottom:1px solid var(--accent);text-decoration:none}a:hover{color:#a5240f;border-bottom-color:#a5240f}.page{width:100%;max-width:900px;margin:0 auto}.row{grid-template-columns:var(--rail) minmax(0, 1fr);border-bottom:1px solid var(--rule);display:grid}.row:last-child{border-bottom:0}.rail{padding:32px 0 32px var(--gutter)}.rail-num,.rail-label{font-family:var(--mono);letter-spacing:.1em;color:var(--ink-3);font-size:10px}.rail-label{text-transform:uppercase;color:var(--ink);margin-top:4px}.body{padding:32px var(--gutter) 32px 0}.topbar{border-bottom:2px solid var(--ink)}.topbar .rail,.topbar .body{padding-top:12px;padding-bottom:12px}.topbar .rail{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;font-size:10px}.nav{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);flex-wrap:wrap;gap:26px;font-size:10px;display:flex}.nav a{color:inherit;border-bottom:0}.nav a:hover{color:var(--accent)}.nav .nav-cv{color:var(--accent);margin-left:auto}.hero .rail,.hero .body{padding-top:44px;padding-bottom:44px}.hero-name{letter-spacing:-.02em;margin:0;font-size:clamp(30px,4vw,36px);font-weight:700;line-height:1.1}.hero-alt{color:var(--ink-3);letter-spacing:.01em;margin-top:5px;font-size:15px}.hero-title{letter-spacing:-.015em;color:var(--accent);margin-top:20px;font-size:24px;font-weight:700;line-height:1.2}.hero-stack{font-family:var(--mono);letter-spacing:.04em;color:var(--ink-3);margin-top:10px;font-size:12px}.hero-summary{max-width:var(--measure);color:#333330;text-wrap:pretty;margin:22px 0 0;font-size:18px;line-height:1.6}.stats{border-top:1px solid var(--rule);grid-template-columns:repeat(4,minmax(0,1fr));gap:20px;margin-top:30px;padding-top:18px;display:grid}.stat-label{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin-bottom:6px;font-size:9px}.stat-value{font-size:15px;line-height:1.45}.stat-value.is-accent{color:var(--accent)}.about p{max-width:var(--measure);text-wrap:pretty;margin:0;font-size:19px;line-height:1.72}.about p+p{color:var(--ink-2);margin-top:16px}.job-head{justify-content:space-between;align-items:baseline;gap:20px;margin-bottom:6px;display:flex}.job-title{letter-spacing:-.015em;font-size:24px;font-weight:700}.job-dates{font-family:var(--mono);color:var(--ink-3);white-space:nowrap;font-size:12px}.job-meta{color:var(--ink-3);margin-bottom:26px;font-size:13px}.highlights{flex-direction:column;gap:22px;display:flex}.highlight{grid-template-columns:26px minmax(0,1fr);gap:14px;display:grid}.highlight-num{font-family:var(--mono);color:var(--accent);padding-top:4px;font-size:11px}.highlight-title{margin-bottom:6px;font-size:16px;font-weight:600}.highlight-detail{color:var(--ink-2);text-wrap:pretty;font-size:15px;line-height:1.7}.stack{background:var(--rule);border:1px solid var(--rule);grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin-bottom:18px;display:grid}.stack li{background:var(--bg);padding:14px 12px;font-size:13px;list-style:none}.stack{margin-top:0;padding:0}.stack li.is-soft{color:var(--ink-3)}.langs{color:var(--ink-3);font-size:13px}.section-intro{color:var(--ink-3);max-width:560px;margin:0 0 22px;font-size:14px;line-height:1.6}.entry{border-top:1px solid var(--rule-soft);grid-template-columns:118px minmax(0,1fr);gap:20px;padding:20px 0;display:grid}.entry:first-of-type{border-top:0;padding-top:0}.entry-dates{font-family:var(--mono);color:var(--ink-3);font-size:12px;line-height:1.5}.entry-title{margin-bottom:5px;font-size:16px;font-weight:600}.entry-detail{color:var(--ink-2);text-wrap:pretty;font-size:14px;line-height:1.65}.contact .rail,.contact .body{padding-top:40px;padding-bottom:56px}.contact-links{flex-wrap:wrap;align-items:center;gap:22px;font-size:15px;display:flex}.contact-links .sep{color:var(--rule)}@media screen and (width<=760px){:root{--gutter:20px}.row{grid-template-columns:minmax(0,1fr)}.rail{padding:24px var(--gutter) 0;align-items:baseline;gap:10px;display:flex}.rail-label{margin-top:0}.body{padding:12px var(--gutter) 28px}.topbar .rail{padding-bottom:0}.topbar .body{padding-top:10px;padding-bottom:12px}.hero .rail{padding-top:28px}.hero .body{padding-top:8px;padding-bottom:32px}.hero-alt{font-size:14px}.hero-title{margin-top:16px;font-size:21px}.stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.hero-summary,.about p{font-size:17px}.job-head{flex-direction:column;gap:4px}.job-title{font-size:21px}.stack{grid-template-columns:repeat(2,minmax(0,1fr))}.entry{grid-template-columns:minmax(0,1fr);gap:8px}.entry-dates br{display:none}.contact .body{padding-bottom:40px}}@media print{:root{--bg:#fff;--gutter:0;--rail:108px}body{font-size:10.5pt}.row.topbar,.nav,.is-pdf{display:none}.row{break-inside:auto;border-bottom-color:#ddd;display:block}.rail{float:left;width:var(--rail)}.body{margin-left:var(--rail)}.row:after{content:"";clear:both;display:table}#stack,#background,#education,.contact,.highlight,.entry,.job-head{break-inside:avoid}.rail{break-after:avoid}.stack{background:0 0;border-width:1px 0 0 1px;gap:0}.stack li{border-right:1px solid var(--rule);border-bottom:1px solid var(--rule)}.rail,.body{padding-top:14px;padding-bottom:14px}.hero .rail,.hero .body{padding-top:0;padding-bottom:18px}.contact .rail,.contact .body{padding-top:14px;padding-bottom:0}.hero-name{margin-bottom:0;font-size:17pt}.hero-alt{margin-top:2px;font-size:9.5pt}.hero-title{margin-top:9px;font-size:12.5pt}.hero-stack{margin-top:4px;font-size:8pt}.hero-summary{margin-top:12px;font-size:11pt}.stats{margin-top:16px;padding-top:12px}.about p{font-size:11pt}.about p+p{margin-top:10px}.job-meta{margin-bottom:16px}.highlights{gap:14px}.entry{padding:12px 0}.section-intro{margin-bottom:14px}a{color:var(--ink);border-bottom:0}.stack li{background:#fff}}
