:root{--bg: #FAFAF7;--panel: #FFFFFF;--ink: #1A1A1A;--muted: #6B6B6B;--rule: #E5E5E0;--accent: #1E3A5F;--accent-soft: #EEF1F5;--tag-bg: #F0EFEA;--display: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;--sans: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--accent);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--accent) 30%,transparent);transition:border-color .12s ease}a:hover{border-bottom-color:var(--accent)}a.plain{border-bottom:none}.shell{display:grid;grid-template-columns:360px 1fr;gap:0;max-width:1440px;margin:0 auto;min-height:100vh}aside.sidebar{position:sticky;top:0;align-self:start;height:100vh;padding:80px 48px;border-right:1px solid var(--rule);display:flex;flex-direction:column}.me .name{font-family:var(--display);font-weight:600;font-size:38px;letter-spacing:-.02em;line-height:1.05;margin:0 0 10px}.me .role{font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);margin:0 0 24px}.me .blurb{font-size:15px;color:var(--ink);margin:0 0 36px;line-height:1.55}nav.side-nav{margin-top:auto;display:flex;flex-direction:column;gap:4px;padding-bottom:32px}nav.side-nav a{font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);padding:6px 0;border-bottom:none;display:flex;align-items:center;gap:12px}nav.side-nav a:before{content:"";width:18px;height:1px;background:var(--rule);transition:width .16s ease,background .16s ease}nav.side-nav a:hover,nav.side-nav a.active{color:var(--ink)}nav.side-nav a:hover:before,nav.side-nav a.active:before{width:36px;background:var(--accent)}.side-contact{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}.side-contact a{color:var(--muted);border-bottom-color:var(--rule)}.side-contact a:hover{color:var(--ink);border-bottom-color:var(--ink)}.side-social{display:flex;gap:14px;margin-top:14px;font-family:var(--mono);font-size:12px;letter-spacing:.04em}main{padding:80px 72px;max-width:1080px}section{padding:56px 0;border-top:1px solid var(--rule)}section:first-child{padding-top:0;border-top:none}section:last-child{padding-bottom:0}.section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:36px}.section-head h2{font-family:var(--display);font-weight:600;font-size:30px;letter-spacing:-.01em;margin:0}.section-head .num{font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:.14em;color:var(--accent)}.hero h1{font-family:var(--display);font-weight:600;font-size:clamp(36px,5.2vw,64px);line-height:1.08;letter-spacing:-.025em;margin:-.18em 0 28px}.hero h1 .accent{color:var(--accent);font-weight:600;font-size:clamp(22px,3.2vw,38px);letter-spacing:-.015em}.hero .lede{font-size:22px;line-height:1.45;color:var(--ink);max-width:760px;margin:0 0 40px}.hero .now-tag{display:inline-flex;align-items:center;gap:10px;font-family:var(--mono);font-size:12px;letter-spacing:.08em;color:var(--muted);padding:8px 14px;background:var(--accent-soft);border-radius:999px}.hero .now-tag:before{content:"";width:8px;height:8px;background:#2bae66;border-radius:50%;box-shadow:0 0 0 3px #2bae662e}.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:48px}.about-grid p{margin:0 0 14px;font-size:16px}.about-grid p:last-child{margin-bottom:0}.roles{list-style:none;padding:0;margin:0}.roles li{display:grid;grid-template-columns:120px 1fr 1fr;gap:32px;padding:26px 0;border-bottom:1px solid var(--rule);transition:background .16s ease}.roles li:last-child{border-bottom:none}.roles li:hover{background:#1e3a5f06}.roles .date{font-family:var(--mono);font-size:12px;color:var(--muted);padding-top:4px;letter-spacing:.04em}.roles .role-title{font-family:var(--display);font-size:20px;font-weight:600;margin:0 0 4px;letter-spacing:-.01em}.roles .company{font-size:14px;color:var(--muted);margin:0}.roles .summary{font-size:15px;color:var(--ink);margin:0}.portfolio-intro{font-size:16px;color:var(--muted);max-width:640px;margin:0 0 40px}.tier-head{font-family:var(--mono);font-size:13px;font-weight:500;color:var(--muted);text-transform:uppercase;letter-spacing:.14em;margin:0 0 24px}.project-grid+.tier-head{margin-top:56px}.project-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:36px 32px}.project{display:flex;flex-direction:column}.project .thumb-wrap{position:relative;overflow:hidden;background:#eeede6;border:1px solid var(--rule);aspect-ratio:16 / 10}.project .thumb-wrap img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .4s ease}.project:hover .thumb-wrap img{transform:scale(1.03)}.project .thumb-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--muted);font-family:var(--mono);font-size:12px;letter-spacing:.04em}.project .head{display:flex;justify-content:space-between;align-items:baseline;margin:16px 0 4px;gap:16px}.project h3{font-family:var(--display);font-weight:600;font-size:22px;letter-spacing:-.01em;margin:0}.project .year{font-family:var(--mono);font-size:12px;color:var(--muted)}.project .tags{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}.project .tags span{font-family:var(--mono);font-size:11px;color:var(--muted);background:var(--tag-bg);padding:3px 8px;border-radius:2px}.project p{margin:0 0 12px;font-size:14.5px;color:var(--ink)}.project .visit{margin-top:auto;font-family:var(--mono);font-size:12px;letter-spacing:.04em}.project .visit.archived{color:var(--muted);border-bottom:none;cursor:default}.freelance-intro{display:flex;justify-content:space-between;align-items:end;gap:32px;margin-bottom:32px}.freelance-intro p{max-width:540px;font-size:16px;margin:0}.availability{display:inline-flex;align-items:center;gap:10px;font-family:var(--mono);font-size:12px;color:var(--muted);letter-spacing:.08em;white-space:nowrap}.availability:before{content:"";width:8px;height:8px;background:#2bae66;border-radius:50%}.freelance-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.freelance-grid figure{margin:0}.freelance-grid img{width:100%;aspect-ratio:4 / 3;object-fit:cover;border:1px solid var(--rule);background:#eeede6;display:block;transition:border-color .16s ease}.freelance-grid a.plain:hover img{border-color:var(--accent)}.freelance-grid figcaption{font-family:var(--mono);font-size:11px;color:var(--muted);margin-top:8px;display:flex;justify-content:space-between}.stack-grid{display:grid;grid-template-columns:200px 1fr;gap:18px 32px;align-items:baseline}.stack-grid .kicker{font-family:var(--mono);font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;padding-top:4px}.stack-grid .row{font-size:16px;padding-bottom:16px;border-bottom:1px solid var(--rule)}.stack-grid .row:last-child{border-bottom:none}.contact-card{background:var(--panel);border:1px solid var(--rule);padding:40px;display:grid;grid-template-columns:1fr auto;gap:40px;align-items:center}.contact-card h3{font-family:var(--display);font-weight:600;font-size:28px;margin:0 0 8px;letter-spacing:-.01em}.contact-card p{margin:0;color:var(--muted);font-size:15px}.contact-card .cta{display:inline-flex;align-items:center;gap:10px;font-family:var(--display);font-weight:500;font-size:17px;background:var(--accent);color:#fff;padding:14px 24px;border:1px solid var(--accent);border-bottom:1px solid var(--accent);transition:background .16s ease}.contact-card .cta:hover{background:#15293f}.contact-cta-group{display:flex;align-items:stretch;gap:10px}.copy-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:108px;background:transparent;color:var(--ink);border:1px solid var(--rule);padding:0 16px;font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:border-color .16s ease,color .16s ease,background .16s ease}.copy-btn:hover{border-color:var(--accent);color:var(--accent)}.copy-btn svg{width:14px;height:14px}.copy-btn.copied{color:#2bae66;border-color:#2bae66}.site-footer{padding:32px 0 0;border-top:1px solid var(--rule);margin-top:56px;font-family:var(--mono);font-size:12px;color:var(--muted);display:flex;justify-content:space-between}@media (max-width: 1280px){.shell{grid-template-columns:320px 1fr}aside.sidebar{padding:64px 36px}main{padding:64px 56px}.me .name{font-size:34px}}@media (max-width: 1024px){.shell{grid-template-columns:1fr}aside.sidebar{position:sticky;top:0;z-index:10;height:auto;border-right:none;border-bottom:1px solid var(--rule);background:var(--bg);padding:20px 40px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:32px}.me{display:flex;align-items:baseline;gap:16px}.me .name{font-size:26px;margin:0}.me .role{margin:0}.me .blurb{display:none}nav.side-nav{margin:0;padding:0;flex-direction:row;gap:22px;justify-content:center}nav.side-nav a{padding:0}nav.side-nav a:before{display:none}nav.side-nav a:hover,nav.side-nav a.active{color:var(--accent)}.side-contact{font-size:13px;align-items:flex-end}.side-social{margin-top:4px}main{padding:56px 40px;max-width:100%}}@media (max-width: 860px){aside.sidebar{grid-template-columns:1fr auto;padding:16px 28px;gap:16px}nav.side-nav{display:none}main{padding:48px 28px}.about-grid{grid-template-columns:1fr;gap:18px}.project-grid{grid-template-columns:1fr;gap:32px}.freelance-grid{grid-template-columns:repeat(3,1fr)}.roles li{grid-template-columns:110px 1fr;gap:18px}.roles li .summary{grid-column:1 / -1}}@media (max-width: 640px){aside.sidebar{padding:14px 20px}.me{flex-direction:column;align-items:flex-start;gap:2px}.side-contact{display:none}main{padding:36px 20px}.hero .lede{font-size:18px}.section-head{margin-bottom:24px}.section-head h2{font-size:24px}.stack-grid{grid-template-columns:1fr;gap:2px}.stack-grid .kicker{padding-top:12px}.stack-grid .row{padding-bottom:10px;font-size:15px}.roles li{grid-template-columns:1fr;gap:4px;padding:20px 0}.roles .date{padding-top:0}.roles .role-title{font-size:19px}.freelance-grid{grid-template-columns:repeat(2,1fr);gap:12px}.freelance-intro{flex-direction:column;align-items:flex-start;gap:10px}.contact-card{grid-template-columns:1fr;gap:20px;padding:28px}.contact-card h3{font-size:22px}.contact-card .cta{font-size:17px;padding:12px 18px;justify-content:center}.site-footer{flex-direction:column;gap:6px}}@media (max-width: 380px){aside.sidebar{padding:12px 16px}main{padding:28px 16px}.me .name{font-size:22px}.freelance-grid{grid-template-columns:1fr}}
