﻿html{font-family:"Inter","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-weight:400;font-feature-settings:"ccmp","calt","ss01","ss07","ss08","pnum";font-size:var(--text-size);line-height:var(--line-height);background-color:var(--bg-color);color:var(--text-color)}p,ul,ol,dl,blockquote,aside{margin-top:0;margin-bottom:1em}li:last-child p:last-child,li:last-child ul:last-child,li:last-child ol:last-child,li:last-child dl:last-child,li:last-child blockquote:last-child,li:last-child aside:last-child{margin-bottom:0}blockquote{font-style:italic}blockquote em{font-style:normal}blockquote>p:last-child{margin-bottom:0}pre,code,.prog,tt{font-family:"Hack",monospace;font-weight:400}i,em{font-style:italic}i em,em em{font-style:normal}pre code{display:block;padding:1ex 1em;line-height:1.2rem;font-size:.8rem;background-color:var(--shade-bg-color);overflow-x:auto;color:var(--text-color)}code{background-color:var(--shade-bg-color);color:var(--code-color);padding:0 2pt}sup{font-size:80%}.footnote-ref sup{font-size:inherit;vertical-align:inherit;font-feature-settings:"sups"}strong{font-weight:600}mark{font-weight:500;color:var(--accent-cyan);background:var(--yellow-bg)}h1{font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-weight:500;font-size:var(--h1-size);margin-top:calc(var(--line-height)*.95);margin-bottom:1ex}.main h1{color:var(--accent-magenta)}h2{font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-size:1rem;font-weight:600;text-transform:uppercase;letter-spacing:3px;margin-bottom:0;margin-top:0}.main h2{color:var(--accent-cyan)}h3{font-family:"Inter","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-size:1rem;font-weight:500;font-style:italic;letter-spacing:normal;margin-bottom:0}main h3{color:var(--accent-purple)}section.level4{padding-left:1ex}h4{font-family:"Inter","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-size:1rem;font-weight:400;margin:var(--line-height) 0 0}.main h4{color:var(--muted-purple)}.has-backlink h1{margin-bottom:0}aside{padding:0 1em}aside.footnotes{padding:unset}.callout{padding:1ex 1em;margin:1em;font-size:.85em;line-height:1.6em;background-color:var(--shade-bg-color);--box-color: var(--text-color);--header-color: var(--text-color);--shadow-color: var(--inv-bg-color);border-radius:4px}.callout>:last-child{margin-bottom:0}.callout>.header{font-weight:600;color:var(--header-color)}.callout.cyan{--box-color: var(--accent-cyan);--header-color: var(--accent-cyan);--shadow-color: color-mix(in oklab, var(--box-color), var(--inv-bg-color));border-left:solid 8px var(--box-color);background-color:color-mix(in oklab, var(--box-color) 25%, var(--bg-color))}.callout.blue,.callout.note{--box-color: var(--accent-blue);--header-color: var(--accent-blue);--shadow-color: color-mix(in oklab, var(--box-color), var(--inv-bg-color));border-left:solid 8px var(--box-color);background-color:color-mix(in oklab, var(--box-color) 25%, var(--bg-color))}.callout.green,.callout.tip{--box-color: var(--accent-green);--header-color: var(--accent-green);--shadow-color: color-mix(in oklab, var(--box-color), var(--inv-bg-color));border-left:solid 8px var(--box-color);background-color:color-mix(in oklab, var(--box-color) 25%, var(--bg-color))}.callout.orange,.callout.warning{--box-color: var(--accent-orange);--header-color: var(--accent-orange);--shadow-color: color-mix(in oklab, var(--box-color), var(--inv-bg-color));border-left:solid 8px var(--box-color);background-color:color-mix(in oklab, var(--box-color) 25%, var(--bg-color))}.callout.yellow,.callout.cite-box{--box-color: var(--accent-yellow);--header-color: var(--accent-yellow);--shadow-color: color-mix(in oklab, var(--box-color), var(--inv-bg-color));border-left:solid 8px var(--box-color);background-color:color-mix(in oklab, var(--box-color) 25%, var(--bg-color))}.callout.purple{--box-color: var(--accent-purple);--header-color: var(--accent-purple);--shadow-color: color-mix(in oklab, var(--box-color), var(--inv-bg-color));border-left:solid 8px var(--box-color);background-color:color-mix(in oklab, var(--box-color) 25%, var(--bg-color))}.callout.magenta,.callout.tldr{--box-color: var(--accent-magenta);--header-color: var(--accent-magenta);--shadow-color: color-mix(in oklab, var(--box-color), var(--inv-bg-color));border-left:solid 8px var(--box-color);background-color:color-mix(in oklab, var(--box-color) 25%, var(--bg-color))}@media print{.callout.note{background-color:#e0e5f2}}details{background-color:var(--shade-bg-color);padding:.5ex 1ex;margin-bottom:1em}summary p{display:inline;margin:0}summary{cursor:pointer}details.notes{padding-left:1.3em}details.notes summary::marker{color:var(--muted-purple)}details.notes summary{font-family:"Inter","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-size:1rem;font-weight:500;font-style:italic;letter-spacing:normal;margin-bottom:0;color:var(--accent-purple);list-style-position:outside}details.section{background-color:var(--bg-color)}details.section summary::marker{color:var(--muted-cyan)}details.section summary{list-style-position:outside;margin-left:-1ex}section.level1>details.section summary{font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-size:1rem;font-weight:600;text-transform:uppercase;letter-spacing:3px;margin-bottom:0;margin-top:0}section.level2>details.section summary{font-family:"Inter","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-size:1rem;font-weight:500;font-style:italic;letter-spacing:normal;margin-bottom:0}details.listitem{background-color:var(--bg-color);padding:0 0 0 1em;margin-bottom:0}details.listitem summary{list-style-position:outside}details.listitem summary::marker{color:var(--accent-cyan)}details.listitem:last-child{margin-bottom:1em}address{margin-bottom:1em;padding-left:2em;font-style:normal}@counter-style fnlist{system:extends decimal;suffix:" "}.footnotes{border-top:solid 1px #000;font-size:.8rem;line-height:1.3}.footnotes hr{display:none}.footnotes ol{list-style:fnlist}.footnotes li::marker{font-feature-settings:"sups"}ul,ol{padding-left:1.5em}ul ul,ol ul{list-style:"⁃ "}ul.bare,ol.bare{padding-left:0}ul.bare li,ol.bare li{display:block}ul{list-style:"🙚 "}ul.emoji{list-style:none;padding-left:0}dt{font-weight:500}li{margin-top:0}.checklist>ul{list-style:"▢ ";padding-left:1.5em}ul.sitelinks{font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum"}a.uri{font-family:"Hack",monospace;font-style:normal}a:link{text-decoration-style:dotted;color:var(--link-base-color)}a:visited{text-decoration-style:dotted;color:var(--link-visited-color)}a:hover{text-decoration-style:solid}a:active{text-decoration-style:solid;color:var(--color-link-active-color)}a.footnoteRef:link,a.footnoteRef:visited,a.footnote-ref:link,a.footnote-ref:visited{color:var(--text-color);text-decoration:none}a.footnoteRef:active,a.footnoteRef:hover,a.footnote-ref:active,a.footnote-ref:hover{text-decoration:underline}a.footnote{text-decoration:none}a.footnote:hover,a.footnote:active{text-decoration:underline}a.hidden{text-decoration:none}a.hidden:link,a.hidden:visited{color:var(--text-color);text-decoration:none}a.hidden:hover{text-decoration:underline;text-decoration-style:dotted}a.button{font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";padding:.5ex 1ex;margin:1ex;background-color:var(--muted-purple)}a.button:link,a.button:visited{color:var(--inv-text-color)}a.video::before{content:"🎞 "}m|mtext{font-family:"GFS Neohellenic Math";color:var(--accent-orange)}m|math{font-family:"GFS Neohellenic Math";color:var(--accent-orange)}.icon{display:inline-block;height:1em;width:1em;vertical-align:baseline;margin-right:.5ex;position:relative;top:3px}.icon.ai{transform:translate(0, 0.07em)}.icon svg{height:100%;fill:currentColor}.sitelinks i[class^=icon-]{color:var(--accent-red)}.sitelinks .icon svg{fill:var(--accent-red)}.jawn-title{color:var(--accent-cyan);font-weight:500}em.highlight{font-weight:600;font-style:normal}em.highlight.s1{color:var(--accent-purple)}em.highlight.s2{color:var(--accent-orange)}em.highlight.s3{color:var(--accent-green)}.hl-red{color:var(--accent-red)}.hl-orange{color:var(--accent-orange)}.hl-yellow{color:var(--accent-yellow)}.hl-green{color:var(--accent-green)}.hl-cyan{color:var(--accent-cyan)}.hl-blue{color:var(--accent-blue)}.hl-purple{color:var(--accent-purple)}.hl-magenta{color:var(--accent-magenta)}.nav.back{font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;margin-left:1em;margin-bottom:.67em}@media print{.nav.back{display:none}}.center{text-align:center}.nodisplay{display:none}.read-more{text-align:right;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif}.read-more a::before{content:"⮕ "}@media(prefers-color-scheme: dark){img.invertible{filter:invert(100%)}}*{box-sizing:border-box}:root{--text-size: 11pt;--line-height: calc(var(--text-size) * 1.6);--h1-size: 1.2rem;--paragraph-spacing: 1em}@media(min-width: 900px){:root{--text-size: 18px;--h1-size: 1.4rem}}:root{--bg-color: oklch(98.07% 0.02 106.52deg);--shade-bg-color: #e7e6e2;--text-color: #030303;--dim-color: #464645;--faint-color: #93938f;--inv-bg-color: #030303;--inv-text-color: #bfbebb;--yellow-bg: #e3e651;--accent-red: #a43a37;--muted-red: #d24d49;--accent-orange: #83592b;--muted-orange: #a87339;--accent-yellow: #67680a;--muted-yellow: #858610;--accent-green: #207723;--muted-green: #2c9930;--accent-cyan: #1b7172;--muted-cyan: #259193;--accent-blue: #2f59c9;--muted-blue: #4977ec;--accent-purple: #7e36bd;--muted-purple: #9f51e6;--accent-magenta: #963294;--muted-magenta: #c042bd;--link-base-color: var(--accent-blue);--link-active-color: var(--accent-orange);--link-visited-color: var(--accent-purple);--refkey-color: var(--muted-purple);--error-color: var(--accent-red);--code-color: var(--accent-orange)}@media(prefers-color-scheme: dark){:root:not(*:has(.main.bookstyle)){--bg-color: #030303;--shade-bg-color: #161514;--text-color: #bfbebb;--dim-color: #646361;--faint-color: #2d2d2c;--inv-bg-color: oklch(98.07% 0.02 106.52deg);--inv-text-color: #030303;--yellow-bg: #303002;--muted-red: #792926;--accent-red: #e65551;--muted-orange: #60401d;--accent-orange: #c38643;--muted-yellow: #4a4b05;--accent-yellow: #9a9c14;--muted-green: #155618;--accent-green: #33b239;--muted-cyan: #105253;--accent-cyan: #2ca9ab;--muted-blue: #0c2eb9;--accent-blue: #6891ef;--muted-purple: #5c258c;--accent-purple: #ae75eb;--muted-magenta: #6e226c;--accent-magenta: #e651e3}}.author.me{font-weight:600}.student{color:var(--accent-green);text-decoration:dashed underline}.advisee{color:var(--accent-orange);text-decoration:solid underline}.author::after{position:relative;top:-0.5em;font-size:75%;color:var(--text-color);text-decoration:none;font-weight:normal}.cv .author.presenter::after{content:"†"}.cv .author.undergrad::after{content:"§"}.cv .author.undergrad.presenter::after{content:"†§"}.citation{padding-left:1em;text-indent:-1em}.citation .year{font-weight:600;color:var(--accent-magenta)}.citation .pub-title,.citation .venue{font-style:italic;color:var(--accent-purple)}.citation .publication a{color:var(--text-color);text-decoration:none;text-decoration-line:underline;text-decoration-style:dotted}.citation .publication a:hover{text-decoration:underline;text-decoration-style:solid}.citation .title abbr.acro,.citation .pub-title abbr.acro{text-transform:none;font-variant:none;letter-spacing:0}.citation .title{font-weight:500;color:var(--accent-cyan)}.citation .title::before{content:"“"}.citation .title::after{content:"”"}.citation a.id{font-feature-settings:"ccmp","calt","ss01","ss07","ss08","pnum","ss02"}.citation a.doi{word-break:keep-all}.citation .volume{font-weight:500}.cite-stats{display:none}.cite-stats.google{display:inline}.cite-options[data-cite-source] .cite-stats{display:none}.cite-options[data-cite-source=semantic] .cite-stats.semantic{display:inline}.cite-options[data-cite-source=google] .cite-stats.google{display:inline}.cite-container .label,.cite-container .yearblock{display:none;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"pnum","lnum","smcp","ccmp","calt","pnum"}.citelist{margin-bottom:1em}.citelist .citation{counter-increment:citelist}.citelist[data-key-prefix]{--key-prefix: attr(data-key-prefix)}@media(min-width: 900px){div.citelist.show-years .citation{padding-left:3em;text-indent:-3em}div.citelist.show-years .citation::before{content:attr(year) " ";font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"tnum","lnum"}}@media print{div.citelist.show-years .citation{padding-left:3em;text-indent:-3em}div.citelist.show-years .citation::before{content:attr(year) " ";font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"tnum","lnum"}div.citelist.show-years .citation[data-key-prefix]::before{content:attr(data-key-prefix) counter(citelist) " "}}ol.citelist li.hcounted{font-weight:bold}ol.citelist li.hcounted .citation{font-weight:normal}p.citation{margin-bottom:1ex}@media(min-width: 900px){.cite-container{position:relative}}.alert{color:var(--muted-red)}:root{--text-size: 11pt;--line-height: 15pt}abbr{text-decoration:none !important}.courseno{font-variant-caps:all-small-caps;letter-spacing:1.5pt}.pref{font-weight:400;font-feature-settings:"ccmp","calt","ss01","ss07","ss08","pnum";color:var(--refkey-color)}h1{margin-top:var(--line-height);margin-bottom:1ex;padding:0;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-size:1rem;font-weight:600;text-transform:uppercase;text-align:center;line-height:var(--line-height);letter-spacing:.25em;border-bottom:none}main{clear:both}main h1::before{content:"🙘 "}main h1::after{content:" 🙚"}aside{clear:both}h2{text-transform:uppercase;letter-spacing:2pt;font-size:1rem;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-weight:600;color:var(--accent-magenta)}h2 .cat-meta{letter-spacing:normal;font-weight:300}h2 .cat-meta.count{color:var(--muted-orange)}h2 .cat-meta.funds{color:var(--muted-green)}ul{padding-left:1em;margin-left:0}ul ul{padding-left:1em}ul li{list-style-type:"‣ "}ul li li{list-style-type:"⁃ "}li p{padding-left:0}header{margin-bottom:1em;padding-top:1ex;text-align:center}header h1{margin-bottom:0;border:0;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-weight:500;text-align:center;font-size:1.4rem;text-transform:none;letter-spacing:0}header h2{margin:1ex 0 0;padding:0;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";text-transform:uppercase;font-size:1rem;font-weight:400;letter-spacing:.25em}header address{width:100%;font-style:normal;padding:0}header address.columns{display:flex;flex-direction:row;justify-content:space-between}header address .email{font-family:"Inter","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-size:1em}header address .column{padding:0}header address .column:first-child{width:60%;text-align:left;padding-right:0;float:left}header address .column:last-child{width:38%;text-align:right;padding-left:0;float:right}header address ul li{list-style:none}.citelist.labeled .cite-container{display:flex;flex-direction:row}.citelist.labeled .cite-container .label{display:block;text-align:center;width:1in;flex-shrink:0;flex-grow:0}.citelist.labeled .cite-container .citation{flex-grow:1}.linkid[data-link=nsf-par]{display:none}.altmetric-badge{display:none !important}h2+section h3{margin-top:0}dl{margin-top:0;padding-left:0}dl dt{vertical-align:baseline;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-weight:400;font-style:normal;margin:0;box-sizing:content-box;float:left;clear:left;text-align:right;width:9em}dl dd{box-sizing:content-box;margin-left:0;padding-left:10em}html a:link,html a:visited{color:var(--text-color);text-decoration:underline;text-decoration-style:dotted}@media print{html a:link,html a:visited{text-decoration:none}}html a.raw{font-family:"Hack",monospace}strong{font-weight:600}body{max-width:7in;margin:0 auto}.hang-list{padding-left:2em}.hang-list li{list-style:none;text-indent:-1em}#references{page-break-before:always}#teaching table{margin:0 auto 1em auto}#teaching table td,#teaching table th{padding:0 1ex}#teaching table th:nth-child(3){text-align:left}#teaching table td:nth-child(1){width:.4in}#teaching table td:nth-child(2){width:1.5in}#teaching table td:nth-child(3){font-style:italic;width:2.5in}#teaching table td:nth-child(4){width:.6in}#teaching table .eval{height:.8em}.pub-footnote{display:none}.apt-title,.log-list .role{font-weight:500;color:var(--accent-blue)}.apt-affil,.log-list .venue{font-style:italic;color:var(--accent-purple)}.log-list .title{color:var(--accent-cyan)}.log-list.title-italic .title{font-style:italic}.project-name{color:var(--accent-cyan);font-weight:500}.log-list>dl dt{font-family:"Inter","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","ss01","ss07","ss08","pnum";font-weight:500;text-align:right;width:6em}.log-list>dl dd{padding-left:7em}.highlight{background-color:#ff0}@page{counter-increment:page;size:letter;margin:1in;@top-left{font-size:9pt;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-weight:300;content:"Michael D. Ekstrand, Ph.D"}@top-right{font-size:9pt;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-weight:300;content:"Curriculum Vitae"}@bottom-center{font-size:9pt;font-family:"Space Grotesk","Noto Sans Symbols","Noto Sans Symbols2",sans-serif;font-feature-settings:"ccmp","calt","pnum";font-weight:300;content:"Page " counter(page) " of " counter(pages)}}@page :first{@top-left{content:none}@top-right{content:none}}@media print{:root{--bg-color: white;--text-color: black}html{font-size:10pt;line-height:13pt}h1{page-break-after:avoid}h2{page-break-after:avoid}dt{page-break-after:avoid}.noprint{display:none}header{padding-top:0}ul{margin-left:1em}ul.hang-list{padding-left:1em}.pub-footnote{float:footnote;display:block;border-top:solid var(--text-color) .75pt;font-size:.85rem;margin:0}::footnote-call{content:""}::footnote-marker{content:""}}