@import "https://fonts.googleapis.com/css2?family=Archivo:wght@800;900&family=JetBrains+Mono:wght@400;500;700&display=swap";
:root{--canvas:#fbfcfd;--surface-soft:#f3f6f9;--surface-card:#e8edf2;--ink:#201d1d;--charcoal:#302c2c;--body:#424245;--mute:#646262;--stone:#6e6e73;--ash:#9a9898;--hairline:#0f00001f;--hairline-strong:#646262;--hero:#13212c;--hero-elevated:#24313b;--hero-line:#959ba02e;--white:#eef6f8;--accent:#2a6fdb;--accent-deep:#2259af;--accent-dim:#2a6fdb24;--syn-str:#2157ab;--syn-key:#b9573e;--syn-num:#7a6f1f;--syn-com:#9a9898;--mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--display:"Archivo","Helvetica Neue", Helvetica, Arial, sans-serif;--col:960px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--canvas);color:var(--ink);font-family:var(--mono);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.5}a{color:inherit}::selection{background:var(--accent-dim)}.wrap{max-width:var(--col);margin:0 auto;padding:0 24px}nav.bar{z-index:50;-webkit-backdrop-filter:saturate(180%)blur(8px);backdrop-filter:saturate(180%)blur(8px);border-bottom:1px solid var(--hairline);background:#fdfcfcdb;position:sticky;top:0}.bar-inner{align-items:center;gap:20px;max-width:1100px;height:56px;margin:0 auto;padding:0 24px;display:flex}.mark{color:var(--ink);white-space:nowrap;align-items:center;gap:8px;font-weight:700;text-decoration:none;display:flex}.mark .blink{color:var(--accent);animation:1.1s step-end infinite blink}@keyframes blink{50%{opacity:0}}.navlinks{flex-wrap:wrap;gap:2px;margin-left:auto;display:flex}.navlinks a{color:var(--mute);white-space:nowrap;border-radius:4px;padding:8px 10px;font-size:14px;font-weight:500;text-decoration:none;transition:color .12s,background .12s}.navlinks a:hover{color:var(--ink);background:var(--surface-card)}.navlinks a.active{color:var(--ink)}.navlinks a.active:before{content:"[";color:var(--accent)}.navlinks a.active:after{content:"]";color:var(--accent)}.nav-cta{background:var(--ink);color:var(--canvas);font:inherit;white-space:nowrap;cursor:pointer;border:none;border-radius:4px;padding:7px 16px;font-size:14px;font-weight:500;text-decoration:none;transition:background .12s}.nav-cta:hover{background:#0f0000}.nav-toggle{display:none}.hero{background:var(--hero);color:var(--white);overflow:hidden}.hero-inner{max-width:1100px;margin:0 auto;padding:96px 24px 88px}.eyebrow{color:var(--accent);letter-spacing:.28em;text-transform:uppercase;align-items:center;gap:14px;margin-bottom:26px;font-size:15px;font-weight:500;display:flex}.eyebrow .dash{background:var(--accent);width:42px;height:2px;display:inline-block}.hero h1{font-family:var(--display);letter-spacing:-.02em;margin:0;font-size:clamp(64px,12.5vw,158px);font-weight:900;line-height:.92}.hero h1 .l1{color:var(--white);display:block}.hero h1 .l2{color:var(--accent);display:block}.hero-sub{color:#b6c6cf;max-width:620px;margin-top:34px;font-size:16px;line-height:1.6}.hero-sub b{color:var(--white);font-weight:500}.prompt{background:var(--hero-elevated);border:1px solid var(--hero-line);color:#cdd9df;border-radius:4px;flex-wrap:wrap;align-items:center;gap:12px;max-width:100%;margin-top:38px;padding:10px 16px;font-size:14px;display:inline-flex}.prompt .ps1{color:var(--accent)}.prompt .cmd{color:var(--white)}.prompt .ok{color:#30d158;align-items:center;gap:6px;display:inline-flex}.prompt .dot{background:#30d158;border-radius:50%;width:7px;height:7px;display:inline-block}.hints{color:#6f828c;flex-wrap:wrap;gap:22px;margin-top:32px;font-size:13px;display:flex}.hints kbd{color:var(--accent);font:inherit;background:0 0}section.block{padding-top:96px}section.block:last-of-type{padding-bottom:96px}.seclabel{align-items:center;gap:14px;margin-bottom:30px;display:flex}.seclabel .idx{color:var(--accent);white-space:nowrap;font-size:15px;font-weight:700}.seclabel h2{color:var(--ink);white-space:nowrap;margin:0;font-size:16px;font-weight:700}.seclabel .rule{background:var(--hairline);flex:1;height:1px}.seclabel .tag{color:var(--mute);white-space:nowrap;font-size:13px}p.lead{color:var(--body);max-width:680px;margin:0 0 16px}p.lead b{color:var(--ink);font-weight:500}.comment{color:var(--syn-com)}.about-grid{grid-template-columns:1fr 300px;align-items:start;gap:48px;display:grid}.meta{border:1px solid var(--hairline);border-radius:4px}.meta .row{border-bottom:1px solid var(--hairline);justify-content:space-between;gap:16px;padding:11px 16px;font-size:14px;display:flex}.meta .row:last-child{border-bottom:none}.meta .k{color:var(--mute)}.meta .v{color:var(--ink);text-align:right;font-weight:500}.meta .v .live{color:#30d158}.exp-row{border-bottom:1px solid var(--hairline)}.exp-head{cursor:pointer;width:100%;font:inherit;text-align:left;color:var(--ink);background:0 0;border:none;grid-template-columns:24px 1fr auto;align-items:baseline;gap:16px;padding:18px 0;display:grid}.exp-head:hover .role{color:var(--accent-deep)}.exp-head .tog{color:var(--accent);font-weight:700}.exp-head .role{font-weight:700;transition:color .12s}.exp-head .role .co{color:var(--mute);font-weight:400}.exp-head .when{color:var(--mute);white-space:nowrap;font-size:14px}.exp-body{padding:0 0 22px 40px;display:none}.exp-row.open .exp-body{display:block}.exp-body ul{margin:0 0 14px;padding:0;list-style:none}.exp-body li{color:var(--body);grid-template-columns:24px 1fr;gap:8px;padding:4px 0;display:grid}.exp-body li .b{color:var(--accent)}.stack-line{color:var(--stone);font-size:14px}.stack-line b{color:var(--charcoal);font-weight:500}.skills-grid{grid-template-columns:repeat(2,1fr);gap:40px 56px;display:grid}.skill-group h3{color:var(--ink);margin:0 0 12px;font-size:14px;font-weight:700}.skill-group h3 .pre{color:var(--accent)}.skill-list{flex-direction:column;gap:7px;display:flex}.skill-list .s{color:var(--body);grid-template-columns:26px 1fr auto;align-items:baseline;gap:8px;font-size:14px;display:grid}.skill-list .s .mk{color:var(--accent)}.skill-list .s .nm{color:var(--ink)}.skill-list .s .lv{color:var(--ash);letter-spacing:.04em;font-size:12px}.edu-row{border-bottom:1px solid var(--hairline);grid-template-columns:160px 1fr;gap:24px;padding:18px 0;display:grid}.edu-row .yr{color:var(--mute);font-size:14px}.edu-row .deg{color:var(--ink);font-weight:700}.edu-row .where{color:var(--body)}.edu-row .note{color:var(--stone);margin-top:4px;font-size:14px}.cert-head{color:var(--mute);margin:36px 0 14px;font-size:14px}.certs{grid-template-columns:repeat(2,1fr);gap:8px 40px;display:grid}.certs .c{color:var(--body);grid-template-columns:26px 1fr auto;align-items:baseline;gap:8px;font-size:14px;display:grid}.certs .c .mk{color:#30d158}.certs .c .nm{color:var(--ink)}.certs .c .dt{color:var(--ash);font-size:12px}.contact-grid{grid-template-columns:1fr 1fr;align-items:start;gap:48px;display:grid}.copyrow{border:1px solid var(--hairline);background:var(--surface-soft);border-radius:4px;align-items:center;gap:12px;margin-bottom:10px;padding:12px 14px;display:flex}.copyrow .ck{color:var(--accent);flex:none;width:78px;font-size:14px}.copyrow .cv{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:14px;overflow:hidden}.copyrow button{font:inherit;border:1px solid var(--hairline-strong);background:var(--canvas);color:var(--ink);cursor:pointer;border-radius:4px;flex:none;padding:4px 10px;font-size:12px;transition:background .12s,color .12s}.copyrow button:hover{background:var(--ink);color:var(--canvas)}.copyrow button.done{color:#07131f;background:#30d158;border-color:#30d158}form.msg label{color:var(--mute);margin:0 0 5px;font-size:13px;display:block}form.msg input,form.msg textarea{width:100%;font:inherit;background:var(--surface-soft);color:var(--ink);border:1px solid var(--hairline);border-radius:4px;margin-bottom:14px;padding:9px 12px;font-size:14px}form.msg input:focus,form.msg textarea:focus{background:var(--canvas);border-color:var(--ink);outline:none}form.msg textarea{resize:vertical;min-height:96px}form.msg button{font:inherit;background:var(--ink);color:var(--canvas);cursor:pointer;border:none;border-radius:4px;padding:9px 22px;font-size:14px;font-weight:500;transition:background .12s}form.msg button:hover{background:#0f0000}.code{border:1px solid var(--hairline);background:var(--surface-soft);border-radius:4px;overflow:hidden}.code .titlebar{border-bottom:1px solid var(--hairline);color:var(--mute);background:var(--surface-card);align-items:center;gap:8px;padding:9px 14px;font-size:13px;display:flex}.code .titlebar .dots{gap:6px;display:flex}.code .titlebar .dots i{border-radius:50%;width:10px;height:10px;display:inline-block}.code pre{color:var(--charcoal);margin:0;padding:18px 20px;font-size:14px;line-height:1.7;overflow-x:auto}.code .k{color:var(--syn-key)}.code .s{color:var(--syn-str)}.code .n{color:var(--syn-num)}.code .c{color:var(--syn-com)}.code .p{color:var(--mute)}.code .out{color:var(--accent-deep)}.colophon{grid-template-columns:1fr 1fr;gap:14px 48px;display:grid}.colophon .ln{color:var(--body);grid-template-columns:26px 1fr;gap:8px;padding:5px 0;font-size:14px;display:grid}.colophon .ln .mk{color:var(--accent)}.colophon .ln b{color:var(--ink);font-weight:500}.sec-toggle{cursor:pointer;font:inherit;color:var(--mute);white-space:nowrap;background:0 0;border:none;align-items:center;gap:10px;padding:0;display:inline-flex}.sec-toggle .tag{color:var(--mute);font-size:13px}.sec-toggle .tog{color:var(--accent);font-size:14px;font-weight:700}.sec-toggle:hover .tag{color:var(--ink)}.sec-collapse{display:none}#this-project.open .sec-collapse{display:block}footer{border-top:1px solid var(--hairline);margin-top:96px}.foot-links{grid-template-columns:repeat(5,1fr);display:grid}.foot-links a{color:var(--mute);text-align:center;border-right:1px solid var(--hairline);padding:22px 8px;font-size:14px;text-decoration:none;transition:color .12s,background .12s}.foot-links a:last-child{border-right:none}.foot-links a:hover{color:var(--ink);background:var(--surface-soft)}.foot-bottom{color:var(--mute);border-top:1px solid var(--hairline);flex-wrap:wrap;justify-content:space-between;gap:16px;padding:18px 0 40px;font-size:13px;display:flex}.foot-bottom .util{gap:18px;display:flex}.proj-top{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px 28px;margin-bottom:20px;display:flex}.proj-name{color:var(--ink);font-size:22px;font-weight:700;line-height:1.25}.proj-name .accent{color:var(--accent)}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{border:1px solid var(--hairline);color:var(--mute);white-space:nowrap;border-radius:4px;padding:4px 10px;font-size:13px}.chip b{color:var(--ink);font-weight:500}.phones{background:var(--surface-soft);border:1px solid var(--hairline);border-radius:4px;flex-wrap:wrap;justify-content:center;gap:28px;margin:24px 0 8px;padding:40px 24px;display:flex}.phone{flex:none;width:202px}.phone .device{background:var(--hero);border-radius:32px;padding:9px;position:relative;box-shadow:0 16px 36px #07131f38}.phone .screen{aspect-ratio:9/19.2;background:#edf1f4;border-radius:24px;position:relative;overflow:hidden}.phone .notch{background:var(--hero);z-index:3;border-radius:0 0 12px 12px;width:78px;height:20px;position:absolute;top:0;left:50%;transform:translate(-50%)}.phone .screen img{object-fit:cover;width:100%;height:100%;display:block}.phone .cap{text-align:center;color:var(--mute);margin-top:14px;font-size:12px}.phone .cap b{color:var(--ink);font-weight:500}.role{margin-top:40px}.role h3{color:var(--ink);margin:0 0 4px;font-size:14px;font-weight:700}.role h3 .pre{color:var(--accent)}.rolelist{grid-template-columns:1fr 1fr;gap:6px 48px;margin:16px 0 18px;display:grid}.rolelist .ln{color:var(--body);grid-template-columns:26px 1fr;gap:8px;padding:5px 0;font-size:14px;display:grid}.rolelist .ln .mk{color:var(--accent)}.rolelist .ln b{color:var(--ink);font-weight:500}.modal-overlay{z-index:100;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#07131f8c;justify-content:center;align-items:center;padding:24px;display:none;position:fixed;inset:0}.modal-overlay.show{display:flex}.modal{background:var(--canvas);border:1px solid var(--hairline-strong);border-radius:4px;flex-direction:column;width:100%;max-width:540px;max-height:86vh;display:flex;overflow:hidden;box-shadow:0 24px 60px #07131f59}.modal .titlebar{border-bottom:1px solid var(--hairline);color:var(--mute);background:var(--surface-card);white-space:nowrap;align-items:center;gap:8px;padding:10px 14px;font-size:13px;display:flex}.modal .titlebar .dots{gap:6px;display:flex}.modal .titlebar .dots i{border-radius:50%;width:10px;height:10px;display:inline-block}.modal .titlebar .x{color:var(--mute);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:4px;margin-left:auto;padding:2px 6px}.modal .titlebar .x:hover{background:var(--surface-soft);color:var(--ink)}.modal .mbody{padding:22px;overflow:auto}.modal .mbody p{color:var(--body);margin:0 0 18px;font-size:14px}.modal .mbody p .comment{color:var(--syn-com)}.filecard{border:1px solid var(--hairline);background:var(--surface-soft);border-radius:4px;align-items:center;gap:14px;padding:14px 16px;display:flex}.filecard .ic{background:var(--hero);width:40px;height:40px;color:var(--accent);border-radius:4px;flex:none;justify-content:center;align-items:center;font-size:13px;font-weight:700;display:flex}.filecard .fmeta{flex:1;min-width:0}.filecard .fname{color:var(--ink);font-size:14px;font-weight:500}.filecard .fsize{color:var(--mute);margin-top:2px;font-size:12px}.modal .actions{border-top:1px solid var(--hairline);gap:10px;padding:16px 22px;display:flex}.modal .actions .dl{font:inherit;background:var(--ink);color:var(--canvas);cursor:pointer;border:none;border-radius:4px;padding:9px 20px;font-size:14px;font-weight:500;transition:background .12s}.modal .actions .dl:hover{background:#0f0000}.modal .actions .ghost{font:inherit;background:var(--canvas);color:var(--ink);border:1px solid var(--hairline-strong);cursor:pointer;border-radius:4px;padding:9px 18px;font-size:14px}.modal .actions .ghost:hover{background:var(--surface-soft)}.navlinks .m-resume{display:none}@media (max-width:860px){.about-grid,.contact-grid,.skills-grid,.colophon,.rolelist{grid-template-columns:1fr}.about-grid{gap:32px}.certs{grid-template-columns:1fr}.hero-inner{padding:72px 22px 60px}section.block{padding-top:64px}section.block:last-of-type{padding-bottom:64px}footer{margin-top:64px}}@media (max-width:620px){.wrap{padding:0 18px}.bar-inner{gap:12px;padding:0 18px}.navlinks{background:var(--canvas);border-bottom:1px solid var(--hairline);flex-direction:column;gap:0;padding:6px 0;display:none;position:absolute;top:56px;left:0;right:0;box-shadow:0 12px 24px #07131f1a}.navlinks.show{display:flex}.navlinks a{border-radius:0;align-items:center;min-height:44px;padding:13px 18px;font-size:15px;display:flex}.navlinks a:hover{background:var(--surface-card)}.navlinks .m-resume{color:var(--accent);border-top:1px solid var(--hairline);margin-top:2px;display:flex}.nav-toggle{border:1px solid var(--hairline-strong);color:var(--ink);font:inherit;cursor:pointer;background:0 0;border-radius:4px;align-items:center;min-height:40px;margin-left:auto;padding:9px 14px;font-size:13px;display:inline-flex}.nav-cta{display:none}.hero-inner{padding:60px 18px 52px}.eyebrow{letter-spacing:.22em;margin-bottom:20px;font-size:13px}.hero h1{font-size:clamp(52px,15.5vw,108px)}.hero-sub{margin-top:26px;font-size:15px}.hints{gap:14px 20px;margin-top:26px}section.block{padding-top:54px}.seclabel{margin-bottom:24px}.exp-head{grid-template-columns:24px 1fr;min-height:44px;padding:16px 0}.exp-head .when{grid-column:2;margin-top:2px}.exp-body{padding-left:34px}.edu-row{grid-template-columns:1fr;gap:4px}.phones{flex-direction:column;align-items:center;gap:32px;padding:32px 18px}.phone{width:min(220px,72vw)}.copyrow{flex-wrap:wrap}.copyrow button{min-height:36px}.code pre{padding:16px;font-size:13px}.modal-overlay{padding:14px}.foot-links{grid-template-columns:1fr 1fr}.foot-links a{border-right:none;border-bottom:1px solid var(--hairline);justify-content:center;align-items:center;min-height:44px;display:flex}.foot-bottom{padding:18px 0 32px}}@media (max-width:400px){.hero h1{font-size:clamp(42px,13vw,52px)}.eyebrow{font-size:12px}.chips{gap:6px}.chip{font-size:12px}}
