@font-face{font-family:"Helvetica";font-style:normal;font-weight:normal;font-display:swap;src:url("../fonts/helvetica/Helvetica.woff2") format("woff2"),url("../fonts/helvetica/Helvetica.woff") format("woff"),url("../fonts/helvetica/Helvetica.ttf") format("truetype")}@font-face{font-family:"EB Garamond";font-style:italic;font-weight:normal;font-display:swap;src:url("../fonts/eb-garamond/EBGaramond08-Italic.woff2") format("woff2"),url("../fonts/eb-garamond/EBGaramond08-Italic.woff") format("woff"),url("../fonts/eb-garamond/EBGaramond08-Italic.ttf") format("truetype")}@font-face{font-family:"EB Garamond";font-style:normal;font-weight:normal;font-display:swap;src:url("../fonts/eb-garamond/EBGaramond08-Regular.woff2") format("woff2"),url("../fonts/eb-garamond/EBGaramond08-Regular.woff") format("woff"),url("../fonts/eb-garamond/EBGaramond08-Regular.ttf") format("truetype")}@font-face{font-family:"Pagella";font-style:normal;font-weight:normal;font-display:swap;src:url("../fonts/TeX-Gyre-Pagella/texgyrepagella-regular.otf") format("opentype")}@font-face{font-family:"Pagella";font-style:normal;font-weight:800;font-display:swap;src:url("../fonts/TeX-Gyre-Pagella/texgyrepagella-bold.otf") format("opentype")}@font-face{font-family:"Pagella";font-style:italic;font-weight:normal;font-display:swap;src:url("../fonts/TeX-Gyre-Pagella/texgyrepagella-italic.otf") format("opentype")}@font-face{font-family:"Pagella";font-style:italic;font-weight:800;font-display:swap;src:url("../fonts/TeX-Gyre-Pagella/texgyrepagella-bolditalic.otf") format("opentype")}@font-face{font-family:"Fern";font-style:normal;font-weight:normal;font-display:swap;src:url("../fonts/fern/fern.woff2") format("woff2")}@font-face{font-family:"Fern";font-style:italic;font-weight:normal;font-display:swap;src:url("../fonts/fern/fernitalic.woff2") format("woff2")}@font-face{font-family:"Warbler";font-style:normal;font-weight:normal;font-display:swap;src:url("../fonts/fern/warbler.woff2") format("woff2")}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.2em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.highlight table td{padding:5px}.highlight table pre{margin:0}div.highlight{background:#e6f3ff;padding:0.8rem;line-height:1.35;margin:1rem 0}pre.highlight{margin:0}.highlight .gl{color:#000707;padding-right:1rem}.highlight .c,.highlight .ch,.highlight .cd,.highlight .cm,.highlight .cpf,.highlight .c1,.highlight .cs{color:#006c6c;font-style:italic}.highlight .cp{color:#920241;font-weight:bold}.highlight .err{color:#f3ffff;background-color:#f22700}.highlight .gr{color:#f22700;font-weight:bold;font-style:italic}.highlight .k,.highlight .kd,.highlight .kv{color:#19003a;font-weight:bold}.highlight .o,.highlight .ow{color:#4c48fe;font-weight:bold}.highlight .p,.highlight .pi{color:#4c48fe}.highlight .gd{color:#f22700}.highlight .gi{color:#007500}.highlight .ge{font-style:italic}.highlight .gs{font-weight:bold}.highlight .gt{color:#000000;background-color:#d8d9ff}.highlight .kc{color:#007500;font-weight:bold}.highlight .kn{color:#007500;font-weight:bold}.highlight .kp{color:#007500;font-weight:bold}.highlight .kr{color:#007500;font-weight:bold}.highlight .gh{color:#007500;font-weight:bold}.highlight .gu{color:#007500;font-weight:bold}.highlight .kt{color:#920241;font-weight:bold}.highlight .no{color:#920241;font-weight:bold}.highlight .nc{color:#920241;font-weight:bold}.highlight .nd{color:#920241;font-weight:bold}.highlight .nn{color:#920241;font-weight:bold}.highlight .bp{color:#920241;font-weight:bold}.highlight .ne{color:#920241;font-weight:bold}.highlight .nl{color:#840084;font-weight:bold}.highlight .nt{color:#840084;font-weight:bold}.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .il,.highlight .mo,.highlight .mx{color:#007500;font-weight:bold}.highlight .ld{color:#007500;font-weight:bold}.highlight .ss{color:#007500}.highlight .s,.highlight .sb,.highlight .dl,.highlight .sd,.highlight .s2,.highlight .sh,.highlight .sx,.highlight .sr,.highlight .s1{color:#7c0000;font-weight:bold}.highlight .sa{color:#19003a;font-weight:bold}.highlight .se{color:#840084;font-weight:bold}.highlight .sc{color:#840084;font-weight:bold}.highlight .si{color:#840084;font-weight:bold}.highlight .nb{font-weight:bold}.highlight .ni{color:#999999;font-weight:bold}.highlight .w{color:#BBBBBB}.highlight .go{color:#19003a}.highlight .nf,.highlight .fm{color:#ff0089}.highlight .py{color:#ff0089}.highlight .na{color:#ff0089}.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#ff0089;font-weight:bold}@media (max-width: 700px){pre.highlight{white-space:pre-wrap;word-break:break-word;overflow-x:hidden}div.highlight{padding:0.8rem}}.sidenote-number,.marginnote-toggle{cursor:pointer;vertical-align:super;font-size:0.8rem;font-weight:700;color:#b0225e;line-height:1;margin-left:2px}.sidenote-number:hover,.marginnote-toggle:hover{color:#6a8e00}.sidenote,.marginnote{position:relative;float:right;clear:right;width:40%;margin-right:-45%;margin-top:0.2rem;margin-bottom:1rem;font-size:0.82rem;line-height:1.45;color:#333;font-variant-numeric:oldstyle-nums;background:transparent;padding:0;overflow:visible;word-break:normal;word-wrap:normal}.sidenote p,.marginnote p{margin:0 0 0.5rem 0}.sidenote p:first-child,.marginnote p:first-child{margin-top:0}.sidenote code,.marginnote code{background:rgba(176,34,94,0.08);color:#8c1e56;padding:2px 4px;border-radius:3px;font-size:0.9em}.sidenote sup.sidenote-num{font-size:0.72em;line-height:0;vertical-align:super;font-weight:700;color:#b0225e;margin-right:0.2em}.sidenote .katex-display,.marginnote .katex-display,.sidenote .MathJax_Display,.marginnote .MathJax_Display,.sidenote .math,.marginnote .math{display:block;max-width:none;overflow-x:auto;overflow-y:visible;-webkit-overflow-scrolling:touch;margin:0.45rem 0 !important;text-align:left !important}.sidenote .katex,.marginnote .katex,.sidenote .MathJax,.marginnote .MathJax{overflow:visible !important}.footnotes{display:none !important}main h1,main h2,main h3,main h4,article h1,article h2,article h3,article h4{position:relative;margin-left:-1.1rem;padding-left:1.1rem;border-left:1px solid rgba(0,0,0,0.06);line-height:1.2}@media (max-width: 1200px){.sidenote,.marginnote{float:none;clear:none;width:100%;margin:1.5rem 0 0.9rem;margin-right:0;display:none}.sidenote.active,.marginnote.active{display:block}.sidenote-number.active+.sidenote,.marginnote-toggle.active+.marginnote{display:block}.marginnote-toggle{display:inline}main h1,main h2,main h3,main h4,article h1,article h2,article h3,article h4{margin-left:0;padding-left:0;border-left:none}}@media (min-width: 1201px){.marginnote-toggle{display:none}}.projects-container{max-width:880px;margin:4rem auto;padding:0 20px;font-family:"Georgia", "EB Garamond", serif;color:#222222;line-height:1.65;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.page-description{color:#6b7766;font-style:italic;margin:0 0 2rem 0;font-size:1.05rem}.project-filters{display:flex;gap:0.6rem;justify-content:center;margin-bottom:2.25rem;padding-bottom:1rem;border-bottom:1px solid rgba(34,34,34,0.06)}.filter-btn{font-family:"EB Garamond", serif;font-size:0.9rem;background:#ffffff;border:1px solid rgba(34,34,34,0.08);color:#4c5b49;padding:0.38rem 0.85rem;margin:0;border-radius:6px;cursor:pointer;transition:all 160ms ease;box-shadow:none;letter-spacing:0.01em}.filter-btn:hover{background:rgba(76,91,73,0.04);border-color:rgba(76,91,73,0.12);color:#2f3f32}.filter-btn.active{background:#33402f;color:#f7f6f2;border-color:rgba(51,64,47,0.9);box-shadow:0 3px 10px rgba(32,38,32,0.06)}.projects-list{display:block;margin-top:1.75rem;display:flex;flex-direction:column;gap:2.25rem}.project-entry{background:#ffffff;border:1px solid rgba(34,34,34,0.04);border-radius:10px;padding:1.75rem 2rem;box-shadow:0 6px 18px rgba(15,18,15,0.03);transition:transform 180ms ease, box-shadow 180ms ease;overflow:visible}.project-entry:hover{transform:translateY(-3px);box-shadow:0 10px 28px rgba(12,16,12,0.06)}.project-header{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:0.85rem;flex-wrap:wrap}.project-title{font-family:"Helvetica Neue", "Helvetica", Arial, sans-serif;font-size:1.4rem;font-weight:700;color:#111111;margin:0;letter-spacing:-0.01em;padding-left:0;border:none}.project-meta{display:flex;gap:0.75rem;align-items:center;flex-shrink:0}.project-date{font-family:"EB Garamond", serif;font-size:0.92rem;color:#7a856f;font-style:italic;opacity:0.95}.project-status{font-family:"Helvetica Neue", "Helvetica", Arial, sans-serif;font-size:0.72rem;text-transform:uppercase;padding:0.28rem 0.56rem;border-radius:6px;letter-spacing:0.07em;font-weight:600;border:1px solid rgba(34,34,34,0.06);background:rgba(34,34,34,0.02);color:#4f5d48}.project-description{margin:0.35rem 0 1.1rem 0;color:#222222;font-size:1rem;font-family:math;line-height:1.7;max-width:66ch;text-rendering:optimizeLegibility}.project-technologies{display:flex;gap:0.5rem;flex-wrap:wrap;margin-top:0.35rem}.tech-tag{font-family:"Inconsolata", monospace;font-size:0.78rem;color:#486044;background:rgba(72,96,68,0.06);border:1px solid rgba(72,96,68,0.12);padding:0.26rem 0.56rem;border-radius:6px;line-height:1}.project-links{margin-top:1rem;display:flex;gap:0.6rem;align-items:center}.project-link{font-family:"EB Garamond", serif;font-size:0.9rem;color:#33402f;text-decoration:none;padding:0.35rem 0.7rem;border-radius:6px;border:1px solid rgba(51,64,47,0.12);background:rgba(51,64,47,0.03);transition:background 140ms ease, color 140ms ease, transform 140ms ease}.project-link:hover{background:#33402f;color:#f8f7f3;transform:translateY(-1px)}.project-entry::before{content:"";display:block;position:absolute;left:0;top:0.75rem;bottom:0.75rem;width:4px;border-radius:4px;background:linear-gradient(180deg, rgba(51,64,47,0.9), rgba(77,97,76,0.6));opacity:0.06;pointer-events:none}.project-entry{position:relative;padding-left:2.25rem}@media (max-width: 880px){.projects-container{padding:0 18px}.project-entry{padding:1.4rem 1.4rem;padding-left:1.8rem}.project-title{font-size:1.25rem}.project-description{font-size:0.98rem;max-width:60ch}}@media (max-width: 600px){.project-filters{justify-content:flex-start;flex-wrap:wrap;gap:0.45rem}.filter-btn{padding:0.32rem 0.6rem;font-size:0.85rem;border-radius:5px}.project-header{flex-direction:column;align-items:flex-start;gap:0.45rem}.project-entry{padding-left:1rem}.project-entry::before{left:0.5rem;top:0.6rem;bottom:0.6rem;width:3px;opacity:0.05}.project-description{max-width:100%}}.project-hidden{display:none !important;opacity:0 !important;transform:translateY(8px) !important}.reading-container{margin-top:2rem}.page-description{color:#6e7f68;font-style:italic;margin-bottom:3rem;font-size:1.1rem}.reading-filters{text-align:center;padding-bottom:2rem}.reading-filters .filter-btn{font-family:"EB Garamond", serif;font-size:0.9rem;background:none;border:1px solid #d0d5cc;color:#6e7f68;padding:0.5rem 1.2rem;margin:0.4rem;border-radius:3px;cursor:pointer;transition:all 0.2s ease}.reading-filters .filter-btn:hover{border-color:#8fbc8f;color:#556b2f}.reading-filters .filter-btn.active{background-color:#556b2f;border-color:#556b2f;color:#f5f3ef}.books-grid{max-width:100%}.book-card{margin-bottom:2rem;padding:0;background:none;box-shadow:none;opacity:1;transform:translateY(0);transition:opacity 0.15s ease-out, transform 0.15s ease-out;display:flex;gap:2rem;align-items:flex-start}.book-card:hover{transform:none;box-shadow:none}.book-cover{width:152px;height:210px;flex-shrink:0;border-radius:4px;overflow:hidden;box-shadow:0 4px 16px rgba(0,0,0,0.15),0 2px 8px rgba(0,0,0,0.1);background-color:#f0f2ee;float:none;margin:0}.book-cover img{width:100%;height:100%;display:block}.book-cover-placeholder{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:1rem;background:linear-gradient(145deg, #556b2f, #6b8e23);color:#f5f3ef}.book-title-short{font-family:"EB Garamond", serif;font-size:0.9rem;font-weight:600;line-height:1.2;margin-bottom:0.5rem;display:block}.book-author-short{font-family:"EB Garamond", serif;font-size:0.75rem;font-style:italic;opacity:0.8}.book-info{margin:auto;flex:1;min-width:0}.book-title{font-family:"Helvetica", sans-serif;font-size:1.4rem;font-weight:600;color:#2b2b2b;margin:0 0 0.5rem 0;line-height:1.3}.book-author{font-family:"EB Garamond", serif;font-size:1.1rem;font-style:italic;color:#6e7f68;margin:0 0 0.3rem 0}.book-year{font-family:"EB Garamond", serif;font-size:0.9rem;color:#8a9a84;font-style:italic;margin-bottom:1rem;display:block}.book-meta{display:flex;align-items:center;gap:1.5rem;margin:1rem 0 1.5rem 0;flex-wrap:wrap}.book-status{font-family:"Helvetica", sans-serif;font-size:0.75rem;padding:0.3rem 0.7rem;border-radius:3px;text-transform:uppercase;letter-spacing:0.3px;font-weight:500}.status-completed{background-color:rgba(85,107,47,0.1);color:#556b2f}.status-reading{background-color:rgba(46,139,87,0.1);color:#2e8b57}.status-want-to-read{background-color:rgba(210,105,30,0.1);color:#d2691e}.book-rating{display:flex;align-items:center;gap:0.1rem}.star{color:#d0d5cc;font-size:1rem;line-height:1}.star.filled{color:#d2691e}.book-description{font-family:"EB Garamond", serif;font-size:1rem;line-height:1.6;color:#2b2b2b;margin:1.5rem 0}.book-notes{font-family:"EB Garamond", serif;font-size:0.95rem;line-height:1.6;color:#6e7f68;font-style:italic;margin:1.5rem 0;padding:1.2rem;border-left:3px solid #8fbc8f;background-color:rgba(240,242,238,0.4);border-radius:0 4px 4px 0}.book-links{display:flex;gap:1.2rem;margin-top:1.5rem}.book-link{font-family:"EB Garamond", serif;font-size:0.9rem;color:#2e8b57;text-decoration:none;padding:0.4rem 0.8rem;border:1px solid #2e8b57;border-radius:3px;transition:all 0.2s ease}.book-link:hover{background-color:#2e8b57;color:#f5f3ef;text-decoration:none}@media (max-width: 650px){.book-card{flex-direction:column;gap:1.5rem;margin-bottom:3rem}.book-cover{width:120px;height:180px;align-self:center}.reading-filters{text-align:left}.reading-filters .filter-btn{font-size:0.8rem;padding:0.4rem 0.9rem;margin:0.2rem 0.2rem 0.2rem 0}.book-title{font-size:1.2rem}.book-author{font-size:1rem}.book-description,.book-notes{font-size:0.95rem}.book-links{flex-wrap:wrap}}@media (max-width: 400px){.book-card{gap:1rem;margin-bottom:2.5rem}.book-cover{width:100px;height:150px}.book-meta{flex-direction:column;align-items:flex-start;gap:0.8rem}}.resume-container{width:120%;left:-10%;position:relative;margin:2rem auto;padding:2rem;background-color:#fff;border:1px solid #e0e4dc;border-radius:4px;box-shadow:0 4px 16px rgba(0,0,0,0.05);font-family:"Pagella", serif;line-height:1.3;color:#2b2b2b}.resume-header{text-align:center}.resume-name{font-family:"Pagella", serif;font-size:1.9rem;font-weight:500;letter-spacing:1.5px;text-transform:uppercase;font-variant:small-caps;margin:0 0 0.4rem 0;color:#111}.resume-contact{font-size:0.92rem;color:#444;font-style:italic}.resume-contact a{color:#333;text-decoration:none}.resume-contact a:hover{text-decoration:underline}.contact-separator{margin:0 8px;color:#777}.resume-section{margin-bottom:0.5rem}.section-title{font-family:"Pagella", serif;font-size:1.5rem;font-weight:500;font-variant:small-caps;margin:0 0 0.6rem 0;color:#111;border-bottom:1px solid #000;padding:0.25rem 0}.resume-entry{margin-bottom:1rem}.resume-entry:last-child{margin-bottom:0}.entry-header{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;margin-bottom:0.15rem}.entry-title{font-weight:600;font-size:1rem;color:#111;margin:0;display:inline-block}.entry-organization{font-style:italic;font-size:0.95rem;color:#444;margin:0}.entry-date{font-size:0.9rem;color:#444;font-style:italic;white-space:nowrap;margin-left:auto}.edu-flex{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap}.entry-location{font-size:0.9rem;color:#444;font-style:italic;margin:0.1rem 0 0 0}.edu-location{line-height:1.5;padding-left:5px;font-size:0.9rem;color:#444;font-style:italic;margin:0.1rem 0 0 0}.edu-left{flex:1 1 auto}.edu-right{flex:0 0 auto;text-align:right}.edu-right .entry-date{font-size:0.9rem;font-style:italic;color:#444;margin-bottom:0.2rem}.edu-right .gpa{display:block;font-weight:600;font-size:0.9rem;color:#111}.entry-content{margin-top:0.25rem}.entry-content ul{margin:0.25rem 0 0 0;padding-left:1.1rem;list-style-type:circle}.entry-content li{margin-bottom:0.35rem;font-size:0.93rem;line-height:1.35}.entry-content li:last-child{margin-bottom:0}.coursework-line{font-size:0.9rem;color:#2b2b2b;margin:0.25rem 0}.coursework-asterisk{color:#a33;font-weight:600}.skills-grid{display:grid;grid-template-columns:auto 1fr;gap:0.25rem 0.8rem;margin-top:0.4rem}.skill-category{font-weight:600;color:#111;font-size:0.95rem;white-space:nowrap}.skill-items{font-size:0.95rem;color:#2b2b2b}.gpa{font-weight:600;color:#111}@media print{.resume-container{box-shadow:none;border:none;padding:0;margin:0;max-width:none}body{font-size:11pt;line-height:1.3}.resume-name{font-size:14pt}.section-title{font-size:11pt}.entry-content li{font-size:10pt}}@media (max-width: 650px){.resume-container{margin:1rem;padding:1.2rem}.resume-name{font-size:1.6rem;letter-spacing:1px}.entry-header{flex-direction:column;align-items:flex-start}.entry-date{margin-left:0;margin-top:0.2rem}.skills-grid{grid-template-columns:1fr;gap:0.2rem}.skill-category{font-weight:600;margin-top:0.4rem}.skill-category:first-child{margin-top:0}}.toc-index{position:fixed;top:3rem;margin-left:-5em;left:auto;right:auto;transform:translateX(-100%);width:20rem;max-height:80vh;overflow-y:auto;background:#fff;border:1px solid #e6e6e6;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.06);padding:1rem;z-index:100;font-family:'Pagella', serif}@media (max-width: 1600px){.toc-index{display:none}}.toc-small{display:none}@media (max-width: 1600px){.toc-small{display:block}}.toc-header{font-size:0.9rem;font-weight:700;color:#2f5233;margin-bottom:0.75rem;border-bottom:1px solid #cfcfcf;padding-bottom:0.5rem;text-transform:uppercase;letter-spacing:0.5px}.toc-list{list-style:none;padding:0;margin:0;font-size:0.85rem;line-height:1.5}.toc-link{display:block;text-decoration:none;color:#2f7d32;padding:0.3rem 0.5rem;transition:color 0.3s ease, background 0.3s ease, border-left-color 0.3s ease;border-left:3px solid transparent;border-radius:4px}.toc-link:hover{color:#d35400;border-left-color:#e67e22;background:#fff7f0}.toc-link.active{color:#1b5e20;border-left-color:#2e7d32;font-weight:600;background:#f1f8f4}.toc-h1{font-weight:600;margin-top:0.5rem}.toc-h2{padding-left:1rem;font-weight:500}.toc-h3{padding-left:1.5rem;font-size:0.8rem}.toc-h4{padding-left:2rem;font-size:0.75rem}.toc-h5{padding-left:2.5rem;font-size:0.7rem}.toc-h6{padding-left:3rem;font-size:0.7rem}.toc-index::-webkit-scrollbar{width:4px}.toc-index::-webkit-scrollbar-thumb{background:#b5cdb7;border-radius:2px}.toc-index::-webkit-scrollbar-thumb:hover{background:#8eb98f}@property --bg-angle{inherits:false;initial-value:0deg;syntax:"<angle>"}@keyframes spin{to{--bg-angle: 360deg}}#page-loader{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:rgba(245,243,239,0.95);backdrop-filter:blur(2px);transition:opacity 320ms ease, visibility 320ms ease;opacity:1;visibility:visible}#page-loader.hidden{opacity:0;visibility:hidden;pointer-events:none}#page-loader .loader-inner{display:flex;align-items:center;gap:.8rem}#page-loader .loader-dot{display:inline-block;width:0.9rem;height:0.9rem;border-radius:50%;background:#002e08;transform-origin:center;animation:loader-bounce 900ms cubic-bezier(0.2, 0.9, 0.3, 1) infinite}#page-loader .loader-line{width:3rem;height:0.12rem;border-radius:0.06rem;background:rgba(0,46,8,0.18);overflow:hidden;position:relative}#page-loader .loader-line::before{content:"";position:absolute;left:-40%;top:0;height:100%;width:40%;background:linear-gradient(to right, rgba(0,46,8,0.24), rgba(0,46,8,0.05));animation:loader-sweep 900ms cubic-bezier(0.2, 0.9, 0.3, 1) infinite}@keyframes loader-bounce{0%{transform:translateY(0)}50%{transform:translateY(-6px) scale(1.05)}100%{transform:translateY(0)}}@keyframes loader-sweep{0%{left:-40%;opacity:.9}50%{left:50%;opacity:.7}100%{left:120%;opacity:.0}}@media (prefers-reduced-motion: reduce){#page-loader .loader-dot,#page-loader .loader-line::before{animation:none}}html{font-family:"Fern", "Source Serif Pro", "Source Serif", Georgia, serif;font-size:1.08rem;line-height:1.329;font-variation-settings:"opsz" 12;background:#fcfcf7;min-height:100%}a.hl{color:#002e08;text-decoration:none;background:rgba(201,232,201,0.5);padding:0 .11em;border-radius:0.15rem;transition:background cubic-bezier(0.19, 1, 0.22, 1) 0.1666s}a.hl:hover{background:rgba(148,209,148,0.75);text-decoration:none;color:#002e08}.highlighted{background-color:#fff3a6;padding:0 2px;border-radius:3px;transition:background-color 0.2s ease-in-out}.highlighted:hover{background-color:#ffe870}.about-block{margin:2.2rem auto;color:#000000;line-height:1.55}.about-block .header{text-align:center;text-transform:uppercase;letter-spacing:0.12em;font-size:0.95rem;margin:0 0 1.4rem;color:#333;font-weight:600}.about-block .edu-entry{margin:1.4rem 0}.about-block .edu-entry .edu-row{display:flex;align-items:flex-start;gap:1rem}.about-block .edu-entry .degree{font-weight:700;font-size:1.08rem;margin-bottom:0.18rem;color:#111}.about-block .edu-entry .institution{font-size:0.98rem;margin-bottom:0.15rem}.about-block .edu-entry .meta{font-size:0.92rem;margin-bottom:0.3rem}.about-block .edu-entry>.note{margin-top:0.75rem;font-size:0.9rem;color:#222;display:block;background:rgba(0,46,8,0.03);padding:0.28rem 0.4rem;border-radius:0.12rem;width:100%;box-sizing:border-box}.about-block .edu-entry .edu-main{flex:1 1 auto;min-width:0}.about-block .edu-entry .edu-logo-wrap{flex:0 0 72px;display:flex;align-items:flex-start;justify-content:flex-end;padding-left:0.6rem;margin-top:2px}.about-block .edu-entry .edu-logo{display:block;width:100%;height:auto;object-fit:contain}@media (max-width: 720px){.about-block .edu-entry .edu-logo-wrap{display:none}}.about-block .pub-list{list-style-position:inside;counter-reset:pub-counter;margin:0;padding:0}.about-block .pub-entry{margin:1.2rem 0;padding-left:0}.about-block .pub-citation{font-size:1rem;color:#111;margin-bottom:0.2rem}.about-block .pub-citation strong{font-weight:700}.about-block .pub-venue{color:#555;font-style:normal;margin-left:0.15rem}.about-block .pub-meta{color:#6b6b6b;font-size:0.92rem;display:flex;gap:0.6rem;align-items:center}.about-block .pub-links .pub-link{color:inherit;text-decoration:none;font-weight:600;padding:0 .18rem;border-radius:0.12rem;background:rgba(0,46,8,0.04);transition:background 160ms ease}.about-block .pub-links .pub-link:hover{background:rgba(0,46,8,0.12)}.about-block a.hl{color:#002e08;text-decoration:none;background:rgba(201,232,201,0.5);padding:0 .11em;border-radius:0.12rem;transition:background 160ms cubic-bezier(0.19, 1, 0.22, 1)}.about-block a.hl:hover{background:rgba(148,209,148,0.75)}.about-block .pub-list li{list-style:none;margin-left:0}@media (max-width: 720px){.about-block .publications{padding:0 1rem;max-width:100%}.about-block .pub-meta{flex-wrap:wrap;gap:0.4rem}.about-block .pub-list li{margin-left:0rem}}a.hl{color:#002e08;text-decoration:none;background:rgba(201,232,201,0.5);padding:0 .11em;border-radius:0.15rem;transition:background cubic-bezier(0.19, 1, 0.22, 1) 0.1666s}a.hl:hover{background:rgba(148,209,148,0.75)}body{max-width:800px;min-height:100%;margin:0 auto;padding:20px;counter-reset:figure;color:#2b2b2b}figure{margin:0;text-align:center}figure img{box-shadow:0 2px 5px rgba(0,0,0,0.1);border-radius:4px;width:100%}figure img:first-child:nth-last-child(2),figure a:first-child:nth-last-child(2) img{max-width:100%}figure img:first-child:nth-last-child(3),figure img:first-child:nth-last-child(3) ~ img,figure a:first-child:nth-last-child(3) img,figure a:first-child:nth-last-child(3) ~ a img{max-width:45%}figure img:first-child:nth-last-child(4),figure img:first-child:nth-last-child(4) ~ img,figure a:first-child:nth-last-child(4) img,figure a:first-child:nth-last-child(4) ~ a img{max-width:30%}figure.gallery img{max-width:30%}figure figcaption::before{counter-increment:figure;content:"Figure " counter(figure) ": ";font-style:italic}figure figcaption,figure figcaption a{color:#6e7f68}noscript{background-color:lightpink}h1,h2,h3,h4,h5,h6{font-family:"Helvetica", sans-serif}h1{font-size:1.5rem}h1 time{font-size:1rem;display:inline-block}h2{font-size:1.3rem}h3{font-size:1.1rem}a{color:#2e8b57;transition:color 0.3s ease, text-decoration 0.3s ease}a:hover{color:#d2691e;text-decoration:underline}ul{list-style-type:"❧ "}.horizontal ul{padding:0}.horizontal nav ul::before{content:"[site navigation] ";font-style:italic;margin-right:10px}.horizontal li{display:inline}.horizontal nav li+li::before{content:" // "}.horizontal nav,.horizontal nav a{color:gray}.bread-crumbs,.bread-crumbs a{color:gray}.bread-crumbs li+li::before{content:" → "}.bread-crumbs ul::before{content:"[this page]";font-style:italic;margin-right:10px}time{color:gray;font-style:italic;font-family:"EB Garamond", serif;font-weight:normal}code,tt{font-family:"Inconsolata", monospace;font-size:0.9em}hr{border:none;border-top:2px solid #556b2f}hr.fancy{border:none;text-align:center;height:1em}hr.fancy::after{content:"☙ ❧";padding:0 4px;position:relative;font-family:"EB Garamond", serif;color:#556b2f}blockquote{margin:16px 0;padding:25px 40px;border-left:3px solid #556b2f;background-color:#f4f7f2}.sidenote blockquote{padding:5px 14px}blockquote cite::before{content:"— "}dt{font-style:italic}dd{margin-left:40px}abbr{cursor:help;text-decoration:underline dotted}abbr::after{content:"[?]";color:gray;vertical-align:top}kbd{font-family:"Inconsolata", monospace;font-size:0.8em;padding:2px;background-color:#f0f4f1;border:1px solid #556b2f;border-radius:3px}.math{font-size:1em}.katex{font-size:1em}span.katex>math[display="block"],span.katex>.katex-html[display="block"],.katex-display{display:block !important;box-sizing:border-box !important;max-width:100% !important;overflow-x:auto !important;overflow-y:hidden !important;-webkit-overflow-scrolling:touch !important;white-space:nowrap !important;word-break:normal !important;word-wrap:normal !important;text-align:center}span.katex>math[display="block"]>*,span.katex>.katex-html[display="block"]>*{display:inline-block !important;white-space:nowrap !important}span.katex:not(:has(>math[display="block"])){display:inline-block !important;white-space:normal !important}span.katex math,span.katex math[mstyle],span.katex .katex-html,span.katex .katex-html>*{display:inline-block !important;white-space:nowrap !important}span.katex.katex-scrollable{position:relative}span.katex.katex-scrollable::after{content:"";pointer-events:none;position:absolute;right:0;top:0;bottom:0;width:2.4rem;background:linear-gradient(to right, rgba(255,255,255,0), rgba(255,255,255,0.95));mix-blend-mode:normal}mtd{text-align:left}span.cn{font-family:"Sim Kai", serif;vertical-align:text-top}a span.cn{vertical-align:baseline}.segment-table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-family:"Segoe UI", Roboto, sans-serif;font-size:0.6rem;text-align:center;background:#fafafa;border:1px solid #ddd;border-radius:8px;overflow:hidden;table-layout:fixed}.segment-table caption{font-weight:600;text-align:left;padding:0.75rem 1rem;background:#f0f2f5;border-bottom:1px solid #ddd;font-size:1rem}.segment-table .vertical{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;font-size:0.65rem;letter-spacing:0.1rem}.segment-table tr td{height:2rem}.segment-table thead{background:#f7f9fc}.segment-table thead th{padding:0.2rem;font-weight:600;border:1px solid #ddd}.segment-table tbody td{padding:0.2rem;border:1px solid #ddd;font-weight:500;background:#fff}.segment-table tr:hover td{background:#f9f9f9}.segment-table td[colspan="13"]{background:#fdfdfd}.segment-table td[colspan="2"]{background:#fdfdfd}table.content-listing{border-collapse:separate;border-spacing:0 4px;width:100%}table.content-listing td{border:1px solid black;padding:5px}table.content-listing td:first-child,table.content-listing td:first-child time{background:black;color:white;font-style:normal;font-family:"Helvetica", sans-serif;font-size:10pt}.latex-logo sub,.latex-logo sup{text-transform:uppercase}.latex-logo sup{vertical-align:-0.5ex;font-size:0.8em;margin-left:-0.4em;margin-right:-0.15em}.latex-logo sub{vertical-align:-0.1ex;margin-left:-0.1667em;margin-right:-0.125em}.latex-logo,.latex-logo sub{font-size:1em}a.footnote-ref{text-decoration:none}.comment{border:1px solid black;margin-bottom:5px}.comment .header{background-color:moccasin;color:black;padding:10px;font-style:normal;border-bottom:1px dotted black}.admin-comment .header{background-color:powderblue}.admin-comment .poster::after{content:" (admin)";color:lightcoral}.comment .body{padding:10px;white-space:pre-line}#comments form{border:2px solid black;padding-left:10px;padding-right:10px;padding-bottom:10px;margin-top:20px}#comments form .field{margin-top:10px}#comment-content{display:float;width:95%}#comments .submission{text-align:center}#comments input[type=submit]{background-color:#6b8e23;border:1px solid #556b2f;color:#f5f3ef;padding:5px;margin-top:10px}#comments input[type=submit]:hover,#comments input[type=submit]:focus{background-color:#556b2f}.coursework-section{margin:3rem 0 2rem 0}.coursework-table{width:100%;border-collapse:collapse;margin:2rem 0;font-size:0.95rem;border-radius:4px;overflow:hidden;box-shadow:0 12px 48px rgba(85,107,47,0.06),0 4px 16px rgba(85,107,47,0.04),inset 0 11px 0 rgba(255,255,255,0.4)}.coursework-section .category-header{color:#2b2b2b;font-family:"EB Garamond", serif;font-weight:700;font-size:1.2rem;text-align:center;padding:0.7rem;border-bottom:0;background:linear-gradient(145deg, #fefffe, #f5f7f3);border-radius:0px;position:relative}.coursework-table th{color:#4a5d42;font-family:"Fern", serif;font-weight:600;font-size:1rem;text-align:left;padding:0.7rem;border-bottom:1px solid #f0f2ee;text-shadow:1px 1px 0px rgba(255,255,255,0.8),0px 1px 1px rgba(85,107,47,0.15);position:relative}.coursework-table .category-subname td{padding:0.7rem;font-weight:700;background:linear-gradient(145deg, #fefffe, #f5f7f3)}.coursework-table th:first-child{width:17%}.coursework-table th:nth-child(2){width:53%}.coursework-table th:nth-child(3){width:30%}.course-row{border-bottom:1px solid #f0f2ee;transition:background-color 0.3s ease;cursor:pointer;position:relative}.course-row:hover{background-color:rgba(139,188,143,0.06)}.course-row.active{background-color:rgba(139,188,143,0.08)}.course-row:last-of-type{border-bottom:none}.course-tooltip{position:absolute;top:-35px;left:50%;transform:translateX(-50%);background-color:rgba(43,43,43,0.7);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:white;padding:8px 14px;border-radius:6px;font-size:0.75rem;font-family:"Helvetica", sans-serif;white-space:nowrap;z-index:1000;display:none;pointer-events:none;border:1px solid rgba(255,255,255,0.1)}.course-tooltip::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:rgba(43,43,43,0.7)}.coursework-table td{padding:0.9rem 0.7rem;vertical-align:middle;color:#2b2b2b}.course-code{font-family:"Sim Kai", serif;font-weight:500;font-size:0.85rem;color:#556b2f}.course-title{font-family:"Fern", serif;font-style:italic;font-size:1rem;line-height:1.3;color:#2b2b2b;letter-spacing:-0.01em;font-weight:400}.course-semester{font-family:"Fern", serif;font-style:italic;font-size:0.9rem;color:#6e7f68}.course-instructor{font-family:"EB Garamond", serif;font-size:0.9rem;color:#6e7f68}.course-details{display:none}.course-details.active{animation:slideDown 0.4s ease-out}tr .course-description-wrapper{padding:0}.course-description{padding:1rem;background-color:rgba(139,188,143,0.02);border-left:3px solid #8fbc8f}.course-description p{font-family:"EB Garamond", serif;font-size:0.95rem;line-height:1.4;color:#2b2b2b;margin:0}.course-description .tb{margin:0 0 1rem}.course-tags{display:flex;flex-wrap:wrap;gap:0.5rem}.tag{font-family:"Helvetica", sans-serif;font-size:0.75rem;color:#556b2f;background-color:rgba(85,107,47,0.1);padding:0.2rem 0.5rem;border-radius:3px;text-transform:uppercase;letter-spacing:0.3px}@keyframes slideDown{from{opacity:0;max-height:0}to{opacity:1;max-height:300px}}.coursework-table+.coursework-table{margin-top:2.5rem}@media (max-width: 650px){.coursework-table{font-size:0.9rem}.category-header{padding:0.8rem 0 0.4rem 0;font-size:1.1rem}.coursework-table th{padding:0.6rem 0;font-size:0.9rem}.coursework-table td{padding:0.8rem 0}.course-code{font-size:0.8rem}.course-title{font-size:0.95rem}.course-semester,.course-instructor{font-size:0.85rem}.course-description{padding:0.8rem;padding-left:0.8rem}.course-tooltip{font-size:0.7rem;padding:4px 8px}}@media (max-width: 480px){.coursework-table,.coursework-table thead,.coursework-table tbody,.coursework-table th,.coursework-table td,.coursework-table tr{display:block}.coursework-section{margin-top:1rem}.coursework-table thead tr th{display:none}.coursework-table thead tr .category-header{display:block !important;width:100%}.course-row{border:1px solid #e0e4dc;padding:1rem;border-radius:4px;background-color:#fafbf9}.course-details{border:none;margin-bottom:1rem}.coursework-table td{border:none;padding:0;position:relative;text-align:left}.course-description{padding:1rem;border-radius:4px}.course-tooltip{display:none !important}}table.results,.results table{border-collapse:collapse;width:100%;margin:1.5rem auto 2rem;font-size:0.9rem;font-family:"Helvetica";line-height:1.4;table-layout:auto}table.results{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}table.results th,table.results td,.results table th,.results table td{white-space:nowrap;border:1px solid #ccc;padding:6px 10px;text-align:right}table.results th:first-child,.results table th:first-child{text-align:center;font-weight:600}table.results td:first-child,.results table td:first-child{font-weight:600;text-align:center}table.results thead th,.results table thead th{background:#fdfdfd;font-weight:600}table.results tbody tr:nth-child(even),.results table tbody tr:nth-child(even){background:#fcfcfc}@media (max-width: 740px){table.results{font-size:0.86rem}table.results th,table.results td{padding:6px 8px}}.highlight table td{padding:5px}.highlight table pre{margin:0}div.highlight{background:#e6f3ff;padding:0.8rem;line-height:1.35;margin:1rem 0}pre.highlight{margin:0}.highlight .gl{color:#000707;padding-right:1rem}.highlight .c,.highlight .ch,.highlight .cd,.highlight .cm,.highlight .cpf,.highlight .c1,.highlight .cs{color:#006c6c;font-style:italic}.highlight .cp{color:#920241;font-weight:bold}.highlight .err{color:#f3ffff;background-color:#f22700}.highlight .gr{color:#f22700;font-weight:bold;font-style:italic}.highlight .k,.highlight .kd,.highlight .kv{color:#19003a;font-weight:bold}.highlight .o,.highlight .ow{color:#4c48fe;font-weight:bold}.highlight .p,.highlight .pi{color:#4c48fe}.highlight .gd{color:#f22700}.highlight .gi{color:#007500}.highlight .ge{font-style:italic}.highlight .gs{font-weight:bold}.highlight .gt{color:#000000;background-color:#d8d9ff}.highlight .kc{color:#007500;font-weight:bold}.highlight .kn{color:#007500;font-weight:bold}.highlight .kp{color:#007500;font-weight:bold}.highlight .kr{color:#007500;font-weight:bold}.highlight .gh{color:#007500;font-weight:bold}.highlight .gu{color:#007500;font-weight:bold}.highlight .kt{color:#920241;font-weight:bold}.highlight .no{color:#920241;font-weight:bold}.highlight .nc{color:#920241;font-weight:bold}.highlight .nd{color:#920241;font-weight:bold}.highlight .nn{color:#920241;font-weight:bold}.highlight .bp{color:#920241;font-weight:bold}.highlight .ne{color:#920241;font-weight:bold}.highlight .nl{color:#840084;font-weight:bold}.highlight .nt{color:#840084;font-weight:bold}.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .il,.highlight .mo,.highlight .mx{color:#007500;font-weight:bold}.highlight .ld{color:#007500;font-weight:bold}.highlight .ss{color:#007500}.highlight .s,.highlight .sb,.highlight .dl,.highlight .sd,.highlight .s2,.highlight .sh,.highlight .sx,.highlight .sr,.highlight .s1{color:#7c0000;font-weight:bold}.highlight .sa{color:#19003a;font-weight:bold}.highlight .se{color:#840084;font-weight:bold}.highlight .sc{color:#840084;font-weight:bold}.highlight .si{color:#840084;font-weight:bold}.highlight .nb{font-weight:bold}.highlight .ni{color:#999999;font-weight:bold}.highlight .w{color:#BBBBBB}.highlight .go{color:#19003a}.highlight .nf,.highlight .fm{color:#ff0089}.highlight .py{color:#ff0089}.highlight .na{color:#ff0089}.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#ff0089;font-weight:bold}@media (max-width: 700px){pre.highlight{white-space:pre-wrap;word-break:break-word;overflow-x:hidden}div.highlight{padding:0.8rem}}
