:root{--charcoal: #242424;--mid-gray: #898989;--white: #ffffff;--light-gray: #f5f5f5;--ring: rgba(34, 42, 53, .08);--ring-soft: rgba(34, 42, 53, .05);--bg: var(--white);--fg: var(--charcoal);--fg-soft: var(--mid-gray);--surface: var(--white);--surface-soft: var(--light-gray);--display: "Cal Sans", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--body: "Inter", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--mono: "Roboto Mono", ui-monospace, monospace;--shadow-card: rgba(19, 19, 22, .7) 0px 1px 5px -4px, rgba(34, 42, 53, .08) 0px 0px 0px 1px, rgba(34, 42, 53, .05) 0px 4px 8px 0px}body[data-theme=dark]{--bg: #0e0e0e;--fg: #ededed;--fg-soft: #8a8a8a;--surface: #1a1a1a;--surface-soft: #222;--ring: rgba(255, 255, 255, .08);--ring-soft: rgba(255, 255, 255, .04);--shadow-card: rgba(0, 0, 0, .6) 0px 1px 5px -4px, rgba(255, 255, 255, .08) 0px 0px 0px 1px, rgba(0, 0, 0, .4) 0px 4px 8px 0px}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:var(--body);-webkit-font-smoothing:antialiased;transition:background .3s,color .3s}a{color:inherit}.shell{max-width:768px;margin:0 auto;padding:24px 20px 48px}.nav{display:flex;justify-content:space-between;align-items:center;padding:6px 0 24px}.back{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:12px;color:var(--fg-soft);text-decoration:none;padding:7px 11px;border-radius:7px;background:var(--surface);box-shadow:var(--shadow-card);transition:transform .15s}.back:hover{transform:translate(-2px);color:var(--fg)}.back svg{width:13px;height:13px}.top-toggles{display:flex;gap:6px}.tg-btn{width:32px;height:32px;border-radius:7px;background:var(--surface);color:var(--fg);border:none;cursor:pointer;box-shadow:var(--shadow-card);display:flex;align-items:center;justify-content:center;transition:transform .15s}.tg-btn:hover{transform:translateY(-1px)}.tg-btn svg{width:15px;height:15px}.tg-btn .sun,.tg-btn .moon{display:none}body[data-theme=light] .tg-btn .sun,body[data-theme=dark] .tg-btn .moon{display:block}header.top{margin-bottom:32px}header.top .eyebrow{font-family:var(--mono);font-size:11px;font-weight:500;color:var(--fg-soft);letter-spacing:.1em;text-transform:uppercase;margin-bottom:10px}header.top h1{font-family:var(--display);font-weight:400;font-size:64px;line-height:1.02;letter-spacing:-.02em;margin:0 0 8px}header.top .role{font-size:17px;color:var(--fg-soft);margin-bottom:20px}header.top .contacts{display:flex;flex-wrap:wrap;gap:10px;font-family:var(--mono);font-size:12px}header.top .contacts span{padding:5px 10px;border-radius:6px;background:var(--surface);box-shadow:var(--shadow-card)}section{margin-bottom:36px}.sec-head{display:flex;align-items:baseline;gap:14px;margin-bottom:18px}.sec-head .num{font-family:var(--mono);font-size:11px;font-weight:500;color:var(--fg-soft);letter-spacing:.08em}.sec-head h2{font-family:var(--display);font-weight:400;font-size:28px;margin:0;letter-spacing:.2px}.sec-head .line{flex:1;height:1px;background:var(--ring)}.profile p{font-size:15px;line-height:1.7;margin:0 0 12px;font-weight:300;letter-spacing:-.1px}.skills-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.sk{padding:16px;border-radius:10px;background:var(--surface);box-shadow:var(--shadow-card)}.sk .t{font-family:var(--mono);font-size:10px;font-weight:600;color:var(--fg-soft);text-transform:uppercase;letter-spacing:.12em;margin-bottom:10px}.sk .items{display:flex;flex-wrap:wrap;gap:5px}.sk .items span{font-size:12px;font-weight:500;padding:3px 9px;border-radius:9999px;background:var(--surface-soft)}.sk .items span.pri{background:var(--fg);color:var(--bg)}.work-item{display:grid;grid-template-columns:120px 1fr;gap:20px;padding:20px 0;border-top:1px solid var(--ring)}.work-item:first-child{border-top:none;padding-top:0}.work-item .when{font-family:var(--mono);font-size:12px;font-weight:500;color:var(--fg-soft);padding-top:4px}.work-item h3{font-family:var(--display);font-weight:400;font-size:22px;letter-spacing:.2px;margin:0 0 4px}.work-item .role{font-size:13px;color:var(--fg-soft);margin-bottom:6px}.work-item .work-summary{font-size:13px;color:var(--fg-soft);line-height:1.6;margin:0 0 10px;font-style:italic}.work-item ul{margin:0 0 10px;padding-left:18px}.work-item li{font-size:13.5px;line-height:1.65;font-weight:300;letter-spacing:-.05px;margin-bottom:4px}.work-skills{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.work-skills span{font-family:var(--mono);font-size:10px;font-weight:500;padding:2px 7px;border-radius:4px;background:var(--surface-soft);color:var(--fg-soft)}.proj-full{padding:20px;border-radius:12px;background:var(--surface);box-shadow:var(--shadow-card);margin-bottom:14px;scroll-margin-top:20px;transition:transform .2s,box-shadow .2s}.proj-full:hover{transform:translateY(-2px)}.proj-full .ph{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px;gap:10px;flex-wrap:wrap}.proj-full h3{font-family:var(--display);font-weight:400;font-size:20px;letter-spacing:.2px;margin:0}.proj-full .year{font-family:var(--mono);font-size:11px;color:var(--fg-soft)}.proj-full .org{font-size:12.5px;color:var(--fg-soft);margin-bottom:10px}.proj-full p{margin:0 0 10px;font-size:13.5px;line-height:1.65;font-weight:300;letter-spacing:-.05px}.proj-resp{margin:0 0 12px;padding-left:18px}.proj-resp li{font-size:13px;line-height:1.65;font-weight:300;letter-spacing:-.05px;margin-bottom:3px;color:var(--fg)}.proj-full .stack{display:flex;flex-wrap:wrap;gap:5px}.proj-full .stack span{font-family:var(--mono);font-size:10px;font-weight:500;padding:3px 8px;border-radius:4px;background:var(--surface-soft);letter-spacing:.04em}.more-projects{display:none;margin-top:0}.more-projects.open{display:block}.more-btn{display:flex;align-items:center;justify-content:center;width:100%;margin-top:14px;padding:10px 16px;background:none;border:1px dashed var(--ring);border-radius:8px;font-family:var(--mono);font-size:11px;color:var(--fg-soft);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.more-btn:hover{background:var(--surface-soft);color:var(--fg);border-color:var(--fg-soft)}.ed-row{display:flex;justify-content:space-between;align-items:baseline;padding:14px 0;border-top:1px solid var(--ring)}.ed-row:first-child{border-top:none;padding-top:0}.ed-row .t{font-family:var(--display);font-weight:400;font-size:17px;letter-spacing:.2px}.ed-row .d{font-family:var(--mono);font-size:12px;color:var(--fg-soft)}.reveal{opacity:0;transform:translateY(14px);transition:opacity .6s cubic-bezier(.2,.7,.2,1),transform .6s cubic-bezier(.2,.7,.2,1)}.reveal.in{opacity:1;transform:translateY(0)}.foot{margin-top:40px;padding:20px 4px 0;display:flex;justify-content:space-between;font-family:var(--mono);font-size:11px;color:var(--fg-soft);border-top:1px solid var(--ring);flex-wrap:wrap;gap:10px}@media(max-width:520px){.shell{padding:16px 14px 32px}header.top h1{font-size:48px}.skills-grid{grid-template-columns:1fr}.work-item{grid-template-columns:1fr;gap:6px}.work-item .when{padding-top:0}}.back-to-top{position:fixed;bottom:24px;right:24px;width:40px;height:40px;border-radius:50%;background:var(--fg);color:var(--bg);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;transform:translateY(10px);z-index:200;box-shadow:0 2px 12px #0000002e}.back-to-top.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.back-to-top:hover{opacity:.8}.back-to-top svg{width:18px;height:18px}@media print{.back-to-top{display:none}}@media print{.nav{display:none}body{background:#fff;color:#000}.shell{padding:0;max-width:100%}section{page-break-inside:avoid}.proj-full,.sk{box-shadow:none;border:1px solid #ddd}}
