@font-face{font-family:JuliaMono;src:url(../vendor/juliamono/JuliaMono-Regular.woff2)format('woff2');font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:JuliaMono;src:url(../vendor/juliamono/JuliaMono-Bold.woff2)format('woff2');font-style:normal;font-weight:700;font-display:swap}@font-face{font-family:JuliaMono;src:url(../vendor/juliamono/JuliaMono-RegularItalic.woff2)format('woff2');font-style:italic;font-weight:400;font-display:swap}@font-face{font-family:JuliaMono;src:url(../vendor/juliamono/JuliaMono-BoldItalic.woff2)format('woff2');font-style:italic;font-weight:700;font-display:swap}:root{color-scheme:light;--night-paper:#1c1c1e;--night-surface:#252527;--night-raised:#2c2c2e;--night-ink:#f5f5f7;--night-muted:#a1a1a6;--night-link:#64a8ff;--night-on-accent:#101a2b;--night-marker:#a3d977;--night-notice:#e8bd70;--night-syntax:#c3a2f5;--night-rule:#48484d;--night-shadow:#00000066;--paper:#f5f5f7;--surface:#ffffff;--raised:#ffffff;--ink:#1d1d1f;--muted:#626269;--link:#0066cc;--on-accent:#ffffff;--marker:#356a28;--notice:#805600;--syntax:#7442ad;--rule:#d2d2d7;--shadow:#0000001a;--radius-control:10px;--radius-panel:16px;--radius-small:8px;--panel-shadow:0 12px 32px -16px var(--shadow), 0 2px 6px var(--shadow);--column:49rem;--gutter:clamp(1rem, 4vw, 2rem);--mono:JuliaMono, ui-monospace, monospace;--header-height:5.25rem;font-family:-apple-system,BlinkMacSystemFont,system-ui,segoe ui,sans-serif;font-size:100%;font-synthesis:none;scrollbar-gutter:stable;scroll-padding-top:calc(var(--header-height) + 1.5rem)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--paper:var(--night-paper);--surface:var(--night-surface);--raised:var(--night-raised);--ink:var(--night-ink);--muted:var(--night-muted);--link:var(--night-link);--on-accent:var(--night-on-accent);--marker:var(--night-marker);--notice:var(--night-notice);--syntax:var(--night-syntax);--rule:var(--night-rule);--shadow:var(--night-shadow)}}:root[data-theme=dark]{color-scheme:dark;--paper:var(--night-paper);--surface:var(--night-surface);--raised:var(--night-raised);--ink:var(--night-ink);--muted:var(--night-muted);--link:var(--night-link);--on-accent:var(--night-on-accent);--marker:var(--night-marker);--notice:var(--night-notice);--syntax:var(--night-syntax);--rule:var(--night-rule);--shadow:var(--night-shadow)}*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;background:var(--paper);color:var(--ink);font-size:1.0625rem;line-height:1.65;overflow-wrap:anywhere}button,input,select,textarea,table{font:inherit}h1,h2,h3,h4,h5,h6,strong,b,th{font-weight:650}h1,h2,h3,h4,h5,h6{line-height:1.25;text-wrap:balance}h1{font-size:clamp(2rem,1.6rem + 1.5vw,2.5rem);font-weight:700;letter-spacing:-.035em;margin:0 0 1.5rem}h2{font-size:1.625rem;letter-spacing:-.02em;margin:3rem 0 1.25rem}h3{font-size:1.25rem;letter-spacing:-.01em;margin:2rem 0 .75rem}h4,h5,h6{font-size:1.0625rem;margin:1.5rem 0 .75rem}small,figcaption{font-size:.9375rem}p,ul,ol,dl{margin:0 0 1rem}ul,ol{padding-left:1.5rem}a{color:var(--link);text-underline-offset:.2em;text-decoration-thickness:1px;text-decoration-color:color-mix(in srgb,currentColor 60%,transparent)}a:visited{color:var(--link)}a:hover{text-decoration-color:initial;text-decoration-thickness:2px}:where(a,button,summary,input,select,textarea,[tabindex]):focus-visible{outline:3px solid var(--link);outline-offset:4px}main:focus-visible{outline-offset:-3px}::selection{background:var(--link);color:var(--on-accent)}.shell{width:calc(100% - var(--gutter) * 2);max-width:var(--column);margin-inline:auto}.site-main{flex:1;min-width:0}.site-main>.shell{padding-block:clamp(2rem,5vw,3.5rem)4rem}.skip{position:fixed;top:-8rem;left:1rem;z-index:10;padding:.6rem 1rem;background:var(--raised);border:1px solid var(--rule);border-radius:var(--radius-control);box-shadow:var(--panel-shadow)}.skip:focus{top:1rem}.preview-bar{width:calc(100% - var(--gutter) * 2);max-width:var(--column);margin:1rem auto 0;padding:.375rem .875rem;color:var(--notice);background:color-mix(in srgb,var(--notice) 6%,var(--paper));border-left:2px solid;border-radius:var(--radius-small);font-size:.875rem}.site-header{position:sticky;top:0;z-index:5;flex-shrink:0;background:var(--paper);border-bottom:1px solid var(--rule)}@supports(backdrop-filter:blur(16px)){.site-header{background:color-mix(in srgb,var(--paper) 92%,transparent);backdrop-filter:blur(16px)}}.site-header[data-flow]{position:static}.header-inner{display:grid;grid-template-columns:minmax(0,1fr)auto;gap:1rem;align-items:center;padding-block:.875rem}:is(button,.button,.main-nav a,.language-nav a,.section-nav a,.section-links a,.publication-links a,.publication summary){display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:2.75rem;max-width:100%;padding:.625rem 1rem;border:1px solid var(--rule);border-radius:var(--radius-control);background-color:var(--raised);color:var(--ink);box-shadow:0 1px 3px var(--shadow);font-size:1rem;font-weight:600;line-height:1.25;text-decoration:none;cursor:pointer}:is(button,.button,.language-nav a,.section-nav a,.section-links a,.publication-links a,.publication summary):hover{color:var(--link);border-color:color-mix(in srgb,var(--link) 60%,var(--rule));background-color:color-mix(in srgb,var(--link) 7%,var(--raised));box-shadow:0 3px 8px var(--shadow)}:is(button,.button,.main-nav a,.language-nav a,.section-nav a,.section-links a,.publication-links a,.publication summary):active{box-shadow:inset 0 2px 4px var(--shadow)}.button>span,.download-link>span{min-width:0}.action-icon{width:1.125rem;height:1.125rem;flex:0 0 1.125rem}.main-nav,.header-switch{display:flex;flex-wrap:wrap;gap:.375rem;width:fit-content;max-width:100%;min-width:0;padding:.25rem;border:1px solid var(--rule);border-radius:calc(var(--radius-control) + 5px);background:color-mix(in srgb,var(--ink) 5%,var(--paper))}.main-nav a{flex:0 0 8.25rem;padding-inline:.5rem;color:var(--muted);border-color:transparent;background-color:transparent;box-shadow:none;text-align:center}.main-nav a:hover{color:var(--ink);background-color:var(--raised)}.main-nav [aria-current]{color:var(--ink);background-color:var(--raised);border-color:var(--rule);font-weight:700;box-shadow:0 1px 4px var(--shadow)}.main-nav [aria-current]:hover{color:var(--ink);background-color:var(--raised);border-color:var(--rule);box-shadow:0 2px 6px var(--shadow)}.header-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.125rem}.header-switch :is(a,button){padding-inline:.375rem;gap:.375rem;color:var(--muted);border-color:transparent;background-color:transparent;box-shadow:none;text-align:center}.header-switch :is(a,button):hover{color:var(--ink);border-color:transparent;background-color:var(--raised);box-shadow:none}.header-switch :is([aria-current],[aria-pressed=true]){color:var(--ink);background-color:var(--raised);border-color:var(--rule);font-weight:700;box-shadow:0 1px 4px var(--shadow)}.header-switch :is([aria-current],[aria-pressed=true]):hover{border-color:var(--rule);box-shadow:0 2px 6px var(--shadow)}.button.button--primary{color:var(--on-accent);background-color:var(--link);border-color:var(--link);font-weight:700;box-shadow:0 3px 9px color-mix(in srgb,var(--link) 25%,transparent),inset 0 1px #ffffff24}.button.button--primary:hover{color:var(--on-accent);background-color:color-mix(in srgb,var(--link) 90%,var(--ink));box-shadow:0 4px 14px color-mix(in srgb,var(--link) 32%,transparent),inset 0 1px #ffffff24}.header-tools{display:flex;flex-wrap:wrap;justify-content:end;width:13rem;max-width:100%;gap:.5rem;align-items:center;justify-self:end}.language-nav{width:6.25rem;flex:none}.theme-switch{width:6.25rem;flex:none}.theme-switch[hidden]{display:grid!important;visibility:hidden}.theme-icon{display:block;width:1.25rem;height:1.25rem;flex:none}.section-nav{margin:1.75rem 0 2rem}.section-nav ul{display:flex;flex-wrap:wrap;gap:.625rem;list-style:none;padding:0;margin:0}.section-nav a{color:var(--link);background-color:color-mix(in srgb,var(--link) 8%,var(--raised));border-color:var(--rule)}.section-nav a:hover{background-color:color-mix(in srgb,var(--link) 10%,var(--raised))}.section-links{display:flex;flex-wrap:wrap;gap:.625rem 1rem;margin:1.25rem 0}.breadcrumbs{display:flex;flex-wrap:wrap;gap:.5ch 1ch;margin:0 0 1.75rem;color:var(--muted);font-size:.9375rem}.page-heading{margin-bottom:1.75rem}.page-heading h1{margin-bottom:.75rem}.page-heading .lead{font-size:1.25rem;font-weight:600;margin-bottom:.5rem}.prose{min-width:0}.prose>:first-child{margin-top:0}.muted,.small,.official-title,.eyebrow{color:var(--muted)}.small,.eyebrow,.official-title{font-size:.9375rem}.eyebrow{font-weight:600;margin-bottom:.75rem}.course-meeting{padding:1rem 1.25rem;margin:1.5rem 0 0;border:1px solid var(--rule);border-radius:var(--radius-panel);background:var(--surface);box-shadow:var(--panel-shadow)}.course-resources{border-top:1px solid var(--rule);margin-top:3rem}.page>.office-hours{margin-top:3rem;padding:1.5rem;border:1px solid var(--rule);border-radius:var(--radius-panel);background:var(--surface);box-shadow:var(--panel-shadow)}.page>.office-hours h3{margin-top:0}.class-list{list-style:none;padding:0;margin:1rem 0;border:1px solid var(--rule);background:var(--surface);border-radius:var(--radius-panel);box-shadow:var(--panel-shadow)}.class-list>li{padding:1.5rem;display:grid;grid-template-columns:minmax(0,1fr)minmax(13rem,.8fr);gap:1rem 2rem}.class-list>li+li{border-top:1px solid var(--rule)}.class-list>li:first-child{border-top-left-radius:calc(var(--radius-panel) - 1px);border-top-right-radius:calc(var(--radius-panel) - 1px)}.class-list>li:last-child{border-bottom-left-radius:calc(var(--radius-panel) - 1px);border-bottom-right-radius:calc(var(--radius-panel) - 1px)}.class-list>li:has(.office-hours){display:block;background:color-mix(in srgb,var(--marker) 4%,var(--surface))}.class-list .office-hours{display:grid;grid-template-columns:minmax(0,1fr)minmax(13rem,.8fr);gap:1rem 2rem}.class-list .office-hours>p{grid-column:1/-1;margin:0}.class-list h3{margin:0 0 .375rem;font-size:1.1875rem}.course-name{display:block;color:var(--muted);font-size:1rem}.class-schedule{font-size:1rem}.meeting-time,.meeting-place{display:block}.meeting-time{font-variant-numeric:tabular-nums}.meeting-time strong{margin-left:.5ch;white-space:nowrap}.meeting-place{color:var(--muted);font-size:.9375rem;margin-top:.25rem}.page-list{padding:0;list-style:none}.page-list li{padding:1.25rem 0;border-bottom:1px solid var(--rule)}.page-list>li>a{font-weight:600}.page-list p{color:var(--muted);margin:.375rem 0 0}.tag,.draft-label,.notice{color:var(--notice);background:color-mix(in srgb,var(--notice) 5%,var(--surface));border:1px solid color-mix(in srgb,var(--notice) 40%,var(--rule));border-radius:var(--radius-small)}.tag{display:inline-block;padding:.125rem .5rem;font-size:.875rem}.draft-label{width:fit-content;padding:.25rem .625rem;font-size:.9375rem}.notice{padding:.875rem 1rem;margin:1.25rem 0}.publication-year{display:flex;gap:.625rem;align-items:center;color:var(--muted);font-size:1.0625rem;font-variant-numeric:tabular-nums;margin:2rem 0 .25rem}.publication-year::before{content:'';width:0;height:0;flex-shrink:0;border-top:.25em solid transparent;border-bottom:.25em solid transparent;border-left:.4em solid}.publication{padding:1.5rem 0;border-bottom:1px solid var(--rule)}.publication h4{margin:0 0 .625rem;font-size:1.125rem;line-height:1.45;text-wrap:pretty}.authors,.venue{color:var(--muted);margin-bottom:.375rem;font-size:1rem}.venue{font-size:.9375rem}.publication-actions{display:flex;flex-wrap:wrap;align-items:start;gap:.5rem;margin-top:1rem}.publication-links{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;padding:0;margin:0}.publication-links a,.publication summary{font-size:.9375rem}.publication summary{display:list-item;list-style-position:inside}.publication-actions details{min-width:0;max-width:100%}.publication-actions details[open]{flex-basis:100%}summary{width:fit-content;color:var(--link);cursor:pointer;text-decoration:underline;text-underline-offset:.2em;padding-block:.375rem}details pre{margin-top:.75rem}.toc{padding:1.25rem 1.5rem;border:1px solid var(--rule);background:var(--surface);border-radius:var(--radius-panel);box-shadow:var(--panel-shadow);margin:0 0 2rem}.toc ul{margin:.5rem 0 0}.welcome-terminal{border:1px solid var(--rule);background:var(--raised);margin:2rem 0 1.5rem;border-radius:var(--radius-panel);box-shadow:var(--panel-shadow);font-family:var(--mono);font-size:1rem;font-variant-ligatures:none}.terminal-chrome{display:flex;gap:.5rem;align-items:center;height:2.75rem;padding-inline:1.25rem;border-bottom:1px solid var(--rule);background:color-mix(in srgb,var(--ink) 3%,var(--surface));border-radius:calc(var(--radius-panel) - 1px)calc(var(--radius-panel) - 1px)0 0;user-select:none;pointer-events:none}.terminal-chrome span{width:.75rem;height:.75rem;border-radius:50%;background:#ff5f57;box-shadow:inset 0 0 0 1px #00000014}.terminal-chrome span:nth-child(2){background:#febc2e}.terminal-chrome span:nth-child(3){background:#28c840}.terminal-body{display:grid;grid-template-columns:1ch minmax(0,1fr);align-items:start;gap:1ch;min-height:10rem;padding:clamp(1.25rem,4vw,2rem)}.terminal-prompt{color:var(--marker);font-weight:700}.intro{min-width:0}.intro>:last-child{margin-bottom:0}.is-typing{position:relative}.is-typing .typewriter-source{opacity:0}.typewriter-output{position:absolute;inset:0;user-select:none}.typewriter-output::after{content:'▌';position:absolute;color:var(--marker)}@media(prefers-reduced-motion:no-preference){.main-nav a,.language-nav a,button,.button,.section-nav a,.section-links a,.publication-links a,.publication summary,.download-link{transition:background-color 160ms ease,border-color 160ms ease,color 160ms ease,box-shadow 160ms ease}}@media(prefers-reduced-motion:reduce),print{.is-typing .typewriter-source{opacity:1}.typewriter-output{display:none}}.code-scroll,.table-scroll{max-width:100%;overflow-x:auto;margin:1.5rem 0;overscroll-behavior-x:contain}pre,code{font-family:var(--mono);font-size:.9375rem;font-variant-ligatures:none}pre{padding:1rem 1.25rem;border:1px solid var(--rule);background:var(--surface);border-radius:var(--radius-small);margin:0;overflow-x:auto;white-space:pre}.prose :not(pre)>code{color:var(--syntax);background:var(--surface);border-radius:.25rem;padding:.125em .25em}table{border-collapse:collapse;min-width:16rem;font-variant-numeric:tabular-nums}th,td{text-align:left;padding:.625rem 1rem;border-bottom:1px solid var(--rule)}th{background:var(--surface);font-weight:650}.table-scroll p{margin:0}blockquote{margin:1.5rem 0;padding-left:1.25rem;border-left:3px solid var(--marker)}hr{border:0;border-top:1px solid var(--rule);margin:2rem 0}.prose ul:has(.download-link){display:grid;gap:.75rem;list-style:none;padding:0}.prose ul:has(.download-link)>li{min-width:0}.download-link{display:flex;align-items:center;gap:.875rem;width:100%;min-height:3.5rem;padding:1rem 1.25rem;color:var(--link);background-color:var(--raised);border:1px solid var(--rule);border-radius:var(--radius-control);box-shadow:0 2px 6px var(--shadow);font-weight:600;text-decoration:none}.download-link:hover{background-color:color-mix(in srgb,var(--link) 7%,var(--raised));border-color:var(--link);box-shadow:0 4px 12px var(--shadow)}.download-link:active{box-shadow:inset 0 2px 4px var(--shadow)}figure{margin:2rem 0}figure img{display:block;max-width:100%;height:auto}figcaption{color:var(--muted);margin-top:.875rem}figcaption p{margin:0}mjx-container{color:var(--ink)}mjx-container[jax] a{color:var(--link)!important;text-decoration:underline}mjx-container[display=true]{display:block!important;overflow-x:auto;overflow-y:hidden;max-width:100%;min-width:0!important;padding:.5rem .2rem;overscroll-behavior-x:contain}.chroma{color:var(--ink);background:var(--surface)}.chroma .k,.chroma .kn,.chroma .kd,.chroma .kt{color:var(--syntax);font-weight:700}.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sd{color:var(--marker)}.chroma .c,.chroma .c1,.chroma .cm,.chroma .cp{color:var(--muted);font-style:italic}.chroma .mi,.chroma .mf,.chroma .mh{color:var(--notice)}.chroma .nb,.chroma .nf,.chroma .nc{color:var(--link)}.site-footer{display:grid;grid-template-columns:minmax(0,1fr)auto;gap:1rem 2rem;border-top:1px solid var(--rule);padding-block:1.75rem;color:var(--muted);font-size:.9375rem}.site-footer strong{display:inline-block;color:var(--ink);font-size:1rem;margin-bottom:.375rem}@media(max-width:46rem){:root{--header-height:9.5rem}.header-inner{grid-template-columns:minmax(0,1fr);gap:.5rem;padding-block:.625rem}.header-tools{width:12.75rem;gap:.25rem}.main-nav{width:100%}.main-nav a{flex:1 0 min(100%,5rem);min-height:3.875rem;padding-inline:0;font-size:.9375rem}}@media(max-width:40rem){.site-main>.shell{padding-block:2rem 3rem}.class-list>li,.class-list .office-hours{grid-template-columns:minmax(0,1fr);gap:.75rem}.class-list>li{padding:1.25rem}.site-footer{grid-template-columns:minmax(0,1fr)}.toc,.notice{padding:1rem}}@media(max-height:30rem){:root{--header-height:0px}.site-header{position:static}}@media print{:root,:root[data-theme],:root:not([data-theme]){color-scheme:light;--paper:#ffffff;--surface:#ffffff;--raised:#ffffff;--ink:#000000;--muted:#000000;--link:#000000;--on-accent:#000000;--marker:#000000;--notice:#000000;--syntax:#000000;--rule:#000000;--shadow:transparent}*{box-shadow:none!important;text-shadow:none!important}.terminal-chrome{background:#fff}.terminal-chrome span,.terminal-chrome span:nth-child(2),.terminal-chrome span:nth-child(3){background:#000}.button.button--primary,.download-link,.publication-links a,.publication summary{color:#000;background:#fff;border-color:#000}.shell{width:100%;max-width:none}:root{scroll-padding:0;scrollbar-gutter:auto}body{display:block;min-height:0}.site-main>.shell{width:100%;padding:0}.site-header,.site-footer,.preview-bar,.skip,.toc,.breadcrumbs,.section-links,.section-nav{display:none!important}.page,.welcome{padding:0}.notice,.tag,.draft-label,.class-list>li:has(.office-hours){background:#fff}h1,h2,h3,h4,h5,h6,figcaption{break-after:avoid}figure,.class-list li,.welcome-terminal{break-inside:avoid}.code-scroll,.table-scroll,pre{overflow:visible;max-width:100%}pre{white-space:pre-wrap;overflow-wrap:anywhere}mjx-container[display=true]{overflow:visible!important}thead{display:table-header-group}}