: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:16px;font-size:13px}.job-summary{color:var(--ink-2);text-wrap:pretty;margin:0;font-size:15px;line-height:1.7}.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{margin:0 0 20px;padding:0}.stack-group{border-top:1px solid var(--rule-soft);grid-template-columns:118px minmax(0,1fr);gap:20px;padding:13px 0;display:grid}.stack-group:first-child{border-top:0;padding-top:0}.stack-group:last-child{padding-bottom:0}.stack-label{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);padding-top:2px;font-size:11px}.stack-items{text-wrap:pretty;margin:0;font-size:14px;line-height:1.65}.langs{color:var(--ink-3);margin-top:18px;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-group{grid-template-columns:minmax(0,1fr);gap:5px}.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,#certifications,.contact,.highlight,.entry,.job-head{break-inside:avoid}.rail{break-after:avoid}.stack{margin-bottom:14px}.stack-group{break-inside:avoid;padding:7px 0}.langs{margin-top:12px}.rail,.body{padding-top:12px;padding-bottom:12px}.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:10px}.job-summary{font-size:10.5pt}.highlights{gap:14px}.entry{padding:10px 0}.section-intro{margin-bottom:14px}a{color:var(--ink);border-bottom:0}}
