@import url("https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Inter:wght@400;500&family=Caveat:wght@500&display=swap");*,:after,:before{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f4f1ec;--bg-card:#fff;--bg-cell:#dde9df;--text:#1b2a2a;--text-muted:#545e54;--accent:#2d6a4f;--accent-hover:#1f4a37;--sage:#2d6a4f;--border:rgba(27,42,42,.08);--border-med:rgba(27,42,42,.14);--cell-border:#b8c4ba;--font-display:"Lora",Georgia,serif;--font-body:"Inter",system-ui,sans-serif;--font-handwrite:"Caveat",cursive}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}.nav{position:-webkit-sticky;position:sticky;top:0;z-index:10;background:var(--bg);border-bottom:.5px solid var(--border);padding:1.25rem 2.5rem;display:flex;justify-content:space-between;align-items:center}.nav-name{font-family:var(--font-display);font-size:18px;font-weight:600;letter-spacing:-.01em}.nav-links{display:flex;gap:1.75rem;list-style:none}.nav-links a{font-size:13px;color:var(--text-muted);transition:color .15s}.nav-links a:hover{color:var(--accent)}.nav-links a.active{color:var(--accent);font-weight:500}.container{max-width:900px;margin:0 auto;padding:0 2.5rem}.section{padding:4rem 0}.section+.section{border-top:.5px solid var(--border)}.section-eyebrow{font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin-bottom:.75rem}.section-title{font-family:var(--font-display);font-size:28px;font-weight:500;letter-spacing:-.01em;margin-bottom:2rem}.hero{padding:4rem 0 3rem;display:grid;grid-template-columns:1fr 1fr;grid-gap:4rem;gap:4rem;align-items:center}.hero-heading{font-family:var(--font-display);font-size:48px;font-weight:300;line-height:1.1;letter-spacing:-.02em;margin-bottom:1rem}.hero-heading em{font-style:italic;color:var(--accent)}.hero-bio{font-size:15px;line-height:1.7;color:var(--text-muted);margin-bottom:1.5rem}.hero-links{display:flex;gap:.625rem;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-family:var(--font-body);padding:7px 16px;border-radius:20px;border:.5px solid var(--border-med);color:var(--text-muted);background:transparent;cursor:pointer;transition:border-color .15s,color .15s;text-decoration:none}.btn:hover{color:var(--accent)}.btn-primary,.btn:hover{border-color:var(--accent)}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:#fff}.crossword-wrap{display:flex;flex-direction:column;gap:1rem;align-items:center}.cw-grid{display:grid;grid-template-columns:repeat(5,52px);grid-template-rows:repeat(5,52px);grid-gap:3px;gap:3px;padding:0;background:#f4f1ec;border-radius:4px}.cw-cell{width:52px;height:52px;background:linear-gradient(135deg,#1f3a2e,#2a4a3a);border:.5px solid #14271e;display:flex;align-items:center;justify-content:center;font-family:var(--font-handwrite);font-size:28px;font-weight:700;color:#f4f1ec;text-shadow:0 0 1px hsla(38,27%,94%,.4);position:relative}.cw-cell.black{background:var(--text);border-color:var(--text)}.cw-given{font-weight:700;color:#f4f1ec}.cw-input{width:100%;height:100%;border:none;background:transparent;text-align:center;font-family:var(--font-handwrite);font-size:28px;font-weight:400;color:#f4f1ec;text-shadow:0 0 1px hsla(38,27%,94%,.4);caret-color:#f4f1ec;outline:none;text-transform:uppercase;padding:0}.cw-input:focus{background:hsla(38,27%,94%,.08)}@keyframes cw-pop{0%{background:linear-gradient(135deg,#1f3a2e,#2a4a3a);transform:scale(1)}40%{background:linear-gradient(135deg,#2d5a3e,#3a5a4a);transform:scale(1.08)}to{background:linear-gradient(135deg,#1f3a2e,#2a4a3a);transform:scale(1)}}.cw-correct{animation:cw-pop .4s ease both}.cw-correct .cw-input{background:transparent;font-weight:500}.cw-solved-msg{font-size:12px;font-weight:500;letter-spacing:.06em;color:var(--accent);opacity:0;transform:translateY(4px);transition:opacity .3s ease,transform .3s ease;height:18px}.cw-solved-msg.visible{opacity:1;transform:translateY(0)}.cw-num{position:absolute;top:2px;left:2px;font-size:7px;font-weight:500;font-family:var(--font-body);color:hsla(38,27%,94%,.55);line-height:1}.cw-clues{display:grid;grid-template-columns:1fr 1fr;grid-gap:.5rem 1.5rem;gap:.5rem 1.5rem;font-size:12px}.cw-clue-label{font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:4px}.cw-clue{color:var(--text-muted);line-height:1.6}.cw-clue strong{color:var(--accent)}.projects-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:1rem;gap:1rem}.proj-card{background:var(--bg-card);border:.5px solid var(--border-med);border-radius:12px;padding:1.25rem;display:block;transition:border-color .15s,transform .15s}.proj-card:hover{border-color:var(--accent);transform:translateY(-1px)}.proj-tag{display:inline-block;font-size:10px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;padding:2px 8px;border-radius:10px;margin-bottom:.625rem;color:var(--text-muted);background:var(--bg-cell)}.proj-tag.freelance{color:#8b5a2b;background:#f5e6d3}.proj-tag.opensource{color:#2d5a7b;background:#d9e5f0}.proj-tag.personal{color:#2d6a4f;background:#dde9df}.proj-name{font-family:var(--font-display);font-size:17px;font-weight:500;letter-spacing:-.01em;margin-bottom:.375rem}.proj-desc{font-size:13px;color:var(--text-muted);line-height:1.5}.exp-item{display:grid;grid-template-columns:150px 1fr;grid-gap:1.5rem;gap:1.5rem;padding:1.5rem 0;border-bottom:.5px solid var(--border)}.exp-item:last-child{border-bottom:none}.exp-date{font-size:12px;color:var(--text-muted);padding-top:2px}.exp-role{font-size:15px;font-weight:500;margin-bottom:2px}.exp-company{font-family:var(--font-display);font-size:13px;color:var(--accent);margin-bottom:.625rem}.exp-bullets{list-style:none;display:flex;flex-direction:column;gap:4px}.exp-bullets li{font-size:13px;color:var(--text-muted);line-height:1.6;padding-left:1rem;position:relative}.exp-bullets li:before{content:"—";position:absolute;left:0;color:var(--cell-border)}.skills-section-label{font-size:11px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.5rem}.skills-row+.skills-section-label,.skills-section-label+.skills-section-label{margin-top:1rem}.skills-row{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:.25rem}.skill-pill{font-size:12px;padding:4px 12px;border-radius:20px;background:var(--bg-cell);color:var(--text-muted)}.skill-pill.strong{background:#dde9df;color:#2d6a4f}.footer{border-top:.5px solid var(--border);padding:2rem 2.5rem;text-align:center;font-size:13px;color:var(--text-muted)}.footer a{color:var(--accent)}.resume-header{padding:3rem 0 2rem;border-bottom:.5px solid var(--border);margin-bottom:2rem}.resume-header h1{font-family:var(--font-display);font-size:40px;font-weight:600;letter-spacing:-.01em;margin-bottom:.5rem}.resume-header p{font-size:15px;color:var(--text-muted);max-width:560px;line-height:1.7}.resume-contacts{display:flex;gap:1.25rem;margin-top:1rem;flex-wrap:wrap}.resume-contacts a{font-size:13px;color:var(--accent);display:flex;align-items:center;gap:4px}.resume-section{margin-bottom:2.5rem}.resume-section-title{font-family:var(--font-display);font-size:20px;font-weight:500;letter-spacing:-.01em;margin-bottom:1.25rem;padding-bottom:.5rem;border-bottom:.5px solid var(--border)}.resume-exp-item{margin-bottom:1.5rem}.resume-exp-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:2px}.resume-exp-role{font-size:15px;font-weight:500}.resume-exp-date{font-size:12px;color:var(--text-muted)}.resume-exp-company{font-size:13px;color:var(--accent);font-family:var(--font-display);margin-bottom:.5rem}.resume-skills-grid{display:grid;grid-template-columns:100px 1fr;grid-gap:.625rem 1.5rem;gap:.625rem 1.5rem;font-size:13px}.resume-skills-label{color:var(--text-muted);font-weight:500;padding-top:1px}.resume-skills-value{color:var(--text);line-height:1.6}.resume-reference{background:var(--bg-card);border:.5px solid var(--border-med);border-radius:12px;padding:1.25rem 1.5rem;font-size:14px;line-height:1.7;color:var(--text-muted);font-style:italic}.resume-reference cite{display:block;font-style:normal;font-weight:500;font-size:13px;color:var(--text);margin-top:.75rem}.resume-reference cite span{font-weight:400;color:var(--text-muted)}@media (max-width:680px){.nav{padding:1rem 1.25rem}.container{padding:0 1.25rem}.hero{grid-template-columns:1fr;padding:2.5rem 0 2rem;gap:2rem}.hero-heading{font-size:36px}.crossword-wrap{align-items:center}.exp-item,.projects-grid{grid-template-columns:1fr}.exp-item{gap:.25rem}.resume-header h1{font-size:28px}.resume-exp-header{flex-direction:column;gap:2px}.resume-skills-grid{grid-template-columns:1fr}}.print-btn-wrap{position:fixed;bottom:2rem;right:2rem;z-index:20}@media print{@page{margin:.5in}.footer,.nav,.no-print{display:none!important}body{background:#fff;color:#000;font-size:10px;line-height:1.4}.container{max-width:100%;padding:0}.resume-header{padding:0 0 .5rem;margin-bottom:.5rem}.resume-header h1{font-size:20px;margin-bottom:.2rem}.resume-header p{font-size:10px;margin-bottom:.3rem}.resume-contacts{margin-top:.3rem;gap:.75rem}.resume-contacts a{font-size:10px}.resume-section{margin-bottom:.6rem}.resume-section-title{font-size:12px;margin-bottom:.4rem;padding-bottom:.2rem}.resume-exp-item{margin-bottom:.5rem}.resume-exp-date,.resume-exp-role{font-size:10px}.resume-exp-company{font-size:10px;margin-bottom:.2rem}.exp-bullets li{font-size:10px;line-height:1.4}.resume-skills-grid{font-size:10px;gap:.25rem 1rem}.resume-reference{font-size:10px;padding:.5rem .75rem;line-height:1.4}a{color:#000;text-decoration:none}}