.site{--paper: #ffffff;--ink: #191919;--mute: #6e6e70;--rule: #e5e3df;--wine: #7a2f3b;--tint: #f6f1f1;--sand: #faf9f7;--serif: "Newsreader", Georgia, "Times New Roman", serif;--chrome: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;--k-html: #b5643c;--k-ipynb: #c08a2e;--k-pdf: var(--wine);--k-csv: #3f7a5e;--k-data: #3f7a5e;--k-zip: #5b4e86;--k-code: #5b4e86;--k-vid: #2a5d8f;background:var(--paper);color:var(--ink);font-family:var(--serif);font-size:17px;line-height:1.62;font-weight:400;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.site .wrap{max-width:880px;margin:0 auto;padding:50px 28px 0}.site main{padding-top:52px}.site main>:first-child{margin-top:0}.site a{color:var(--wine);text-decoration:none;border-bottom:1px solid rgba(122,47,59,.28);transition:border-color .15s ease,background-color .15s ease}.site a:hover{border-bottom-color:var(--wine)}.site .mast{display:flex;align-items:flex-start;justify-content:space-between;gap:32px;padding-bottom:18px;border-bottom:2px solid var(--ink)}.site .ident-name{font-family:var(--serif);font-size:38px;font-weight:500;letter-spacing:-.02em;line-height:1.1;margin:0}.site .ident-name a{color:var(--ink);border-bottom:none}.site .ident-role{font-family:var(--serif);font-style:italic;color:var(--wine);font-size:17px;margin:4px 0 0}.site .ident-affil{font-family:var(--chrome);font-size:12.5px;line-height:1.45;color:var(--mute);margin:3px 0 0;max-width:42ch}.site .mast-right{text-align:right;flex-shrink:0;padding-top:6px}.site .mast-contact{font-family:var(--chrome);font-size:12px;color:var(--mute);margin:0 0 10px;line-height:1.7}.site .mast-contact a{color:var(--mute);border-bottom-color:var(--rule)}.site .mast-contact a:hover{color:var(--wine);border-bottom-color:var(--wine)}.site .mast-contact .ci{width:.95em;height:.95em;vertical-align:-.12em;margin-right:.4em}.site .nav{font-family:var(--chrome);font-size:11.5px;font-weight:500;letter-spacing:.09em;text-transform:uppercase}.site .nav a{color:var(--ink);border-bottom:none;margin-left:16px}.site .nav a:first-child{margin-left:0}.site .nav a:hover,.site .nav a[aria-current=page]{color:var(--wine)}.site h2{display:flex;align-items:baseline;justify-content:space-between;gap:18px;font-family:var(--chrome);font-size:11.5px;font-weight:600;letter-spacing:.15em;text-transform:uppercase;color:var(--mute);margin:62px 0 24px;padding-bottom:7px;border-bottom:1px solid var(--rule)}.site h2 .meta{font-family:var(--chrome);font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:none;color:var(--wine);white-space:nowrap}.site h2 a{color:inherit;border-bottom:none}.site h2 a:hover{color:var(--wine)}.site h3{font-family:var(--serif);font-size:20px;font-weight:500;line-height:1.3;margin:0 0 4px}.site h4{font-family:var(--chrome);font-size:12px;font-weight:600;letter-spacing:.06em;color:var(--ink);margin:22px 0 8px}.site p{margin:0 0 15px}.site .lede p{font-size:17.5px}.site blockquote{margin:20px 0;padding:2px 0 2px 20px;border-left:2px solid var(--rule);color:var(--mute);font-style:italic}.site code{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,monospace;font-size:.86em;background:var(--sand);border:1px solid var(--rule);border-radius:2px;padding:.08em .32em}.site pre{font-size:13.5px;line-height:1.5;background:var(--sand);border:1px solid var(--rule);padding:14px 16px;overflow-x:auto;margin:20px 0}.site pre code{background:none;border:none;padding:0;font-size:inherit}.site hr{border:none;border-top:1px solid var(--rule);margin:34px 0}.site .timeline{border-top:1px solid var(--rule)}.site .row{display:grid;grid-template-columns:118px 1fr;gap:0 20px;padding:19px 0;border-bottom:1px solid var(--rule)}.site .row-key{font-family:var(--chrome);font-size:12.5px;font-weight:500;letter-spacing:.04em;color:var(--wine);padding-top:4px}.site .row-key .sub{display:block;color:var(--mute);font-weight:400;font-size:11.5px;letter-spacing:.02em;margin-top:2px}.site .course-shell{display:grid;grid-template-columns:128px 1fr;gap:0 36px;align-items:start}.site .course-main{min-width:0}.site .course-tabs{position:sticky;top:28px;display:flex;flex-direction:column;gap:2px;padding-top:6px;font-family:var(--chrome);font-size:12px;font-weight:500;letter-spacing:.05em}.site .course-tabs a{color:var(--mute);border-bottom:none;border-left:2px solid var(--rule);padding:6px 0 6px 12px}.site .course-tabs a:hover{color:var(--wine);border-left-color:var(--wine)}.site .course-tabs a[aria-current=page]{color:var(--ink);border-left-color:var(--wine)}@media (max-width: 720px){.site .course-shell{grid-template-columns:1fr}.site .course-tabs{position:static;flex-direction:row;flex-wrap:wrap;gap:0 18px;padding:0 0 14px;border-bottom:1px solid var(--rule)}.site .course-tabs a{border-left:none;padding:4px 0}}.site .announcements{border-top:1px solid var(--rule)}.site .announcements .ann{display:grid;grid-template-columns:118px 1fr;gap:0 20px;padding:14px 0;border-bottom:1px solid var(--rule)}.site .announcements .ann-date{font-family:var(--chrome);font-size:12.5px;font-weight:500;letter-spacing:.04em;color:var(--wine);margin:0;padding-top:3px}.site .announcements .ann-title{font-size:15px;margin:0 0 4px}.site .announcements .ann-body{min-width:0}.site .announcements .ann-body p{margin:0}.site .timeline.no-key .row{grid-template-columns:1fr}.site .row-body{min-width:0}.site .row-body p{margin:0 0 8px}.site .row-body>:last-child{margin-bottom:0}.site .row-title{font-family:var(--serif);font-size:18px;font-weight:500;line-height:1.32;margin:0 0 5px}.site .row-title a{color:var(--ink);border-bottom:none}.site .row-title a:hover{color:var(--wine)}.site .row-sub{font-family:var(--chrome);font-size:12.5px;color:var(--mute);margin:0 0 7px}.site .row-note{font-size:16px;color:var(--mute)}.site .research{max-width:74ch}.site .research p{margin-bottom:20px}.site .research p:last-child{margin-bottom:0}.site .research .run-in{font-weight:500;color:var(--ink)}.site .pill{display:inline-block;font-family:var(--chrome);font-size:9.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--wine);background:var(--tint);border:1px solid rgba(122,47,59,.16);border-radius:2px;padding:2px 6px;vertical-align:2px;white-space:nowrap}.site .tags{font-family:var(--chrome);font-size:11.5px;color:var(--mute)}.site .tags a{color:var(--mute);border-bottom-color:var(--rule);margin-right:10px}.site .tags a:hover{color:var(--wine)}.site .linkline{font-family:var(--chrome);font-size:12px;letter-spacing:.02em;margin:8px 0 0}.site .linkline a{margin-right:14px}.site .course-head{margin-bottom:6px}.site .course-code{font-family:var(--chrome);font-size:12.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--wine);margin:0 0 2px}.site .course-title{font-family:var(--serif);font-size:27px;font-weight:500;letter-spacing:-.01em;line-height:1.2;margin:0}.site .course-title a{color:var(--ink);border-bottom:none}.site .course-title a:hover{color:var(--wine)}.site .course-blurb{font-family:var(--serif);font-size:16.5px;color:var(--mute);margin:6px 0 0}.site .facts{display:grid;grid-template-columns:repeat(auto-fit, minmax(168px, 1fr));gap:14px 26px;margin:20px 0 8px;padding:16px 0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}.site .facts dt{font-family:var(--chrome);font-size:9.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);margin:0 0 3px}.site .facts dd{font-family:var(--chrome);font-size:13px;line-height:1.45;margin:0}.site .schedule{width:100%;border-collapse:collapse;margin:4px 0 8px}.site .schedule th{font-family:var(--chrome);font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);text-align:left;padding:0 10px 7px 0;border-bottom:1px solid var(--ink);white-space:nowrap}.site .schedule th:last-child{padding-right:0}.site .schedule td{vertical-align:top;padding:11px 10px 11px 0;border-bottom:1px solid var(--rule)}.site .schedule td:last-child{padding-right:0}.site .schedule tbody tr:hover{background:var(--sand)}.site .schedule .c-wk{width:36px;font-family:var(--chrome);font-size:12.5px;font-weight:500;color:var(--wine);font-variant-numeric:tabular-nums}.site .schedule .c-date{width:64px;font-family:var(--chrome);font-size:12px;color:var(--mute);white-space:nowrap}.site .schedule .c-topic{font-family:var(--serif);font-size:16px;line-height:1.45}.site .schedule .c-files{width:300px}.site .schedule .c-upd{width:84px;font-family:var(--chrome);font-size:11.5px;color:var(--mute);white-space:nowrap}.site .schedule .r-exam{background:#fbf4f5}.site .schedule .r-exam:hover{background:#f7ecee}.site .schedule .r-assignment{background:#f7f8f3}.site .schedule .r-assignment:hover{background:#f0f2e9}.site .schedule .row-label{display:inline-block;font-family:var(--chrome);font-size:9px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);border:1px solid var(--rule);border-radius:2px;padding:1px 5px;margin-right:7px;vertical-align:2px;background:var(--paper)}.site .schedule .topic-note{display:block;font-family:var(--chrome);font-size:11.5px;color:var(--mute);margin-top:3px}.site .f{display:inline-block;font-family:var(--chrome);font-size:11.5px;line-height:1.25;color:var(--ink);background:var(--paper);border:1px solid var(--rule);border-left:3px solid var(--mute);border-radius:2px;padding:3px 7px;margin:0 5px 5px 0;white-space:nowrap}.site .f:hover{background:var(--sand);border-color:var(--rule);border-left-color:currentColor}.site .f.k-html{border-left-color:var(--k-html)}.site .f.k-ipynb{border-left-color:var(--k-ipynb)}.site .f.k-pdf{border-left-color:var(--k-pdf)}.site .f.k-csv{border-left-color:var(--k-csv)}.site .f.k-data{border-left-color:var(--k-data)}.site .f.k-zip{border-left-color:var(--k-zip)}.site .f.k-code{border-left-color:var(--k-code)}.site .f.k-vid{border-left-color:var(--k-vid);color:var(--k-vid)}.site .files-empty{font-family:var(--chrome);font-size:11.5px;color:var(--mute)}.site .f-lg{font-size:12.5px;padding:6px 11px;margin-right:10px;white-space:normal}.site .profile-links{margin:26px 0 0}.site .grading{width:100%;border-collapse:collapse;margin:4px 0 8px;max-width:520px}.site .grading th{font-family:var(--chrome);font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);text-align:left;padding:0 10px 7px 0;border-bottom:1px solid var(--ink)}.site .grading th.num{text-align:right;padding-right:0}.site .grading td{font-family:var(--chrome);font-size:13px;padding:9px 10px 9px 0;border-bottom:1px solid var(--rule)}.site .grading td.num{text-align:right;padding-right:0;font-variant-numeric:tabular-nums;color:var(--wine)}.site .resources{list-style:none;padding:0;margin:0}.site .resources li{padding:11px 0;border-bottom:1px solid var(--rule);font-family:var(--chrome);font-size:13px}.site .resources li:first-child{border-top:1px solid var(--rule)}.site .resources .note{color:var(--mute);margin-left:8px}.site .vid-embed{margin:24px 0}.site .vid-embed iframe,.site .vid-embed video{width:100%;aspect-ratio:16/9;border:1px solid var(--rule);background:var(--sand);display:block}.site .vid-embed figcaption{font-family:var(--chrome);font-size:11.5px;color:var(--mute);margin-top:7px}.site .post-head{margin-bottom:26px}.site .post-title{font-family:var(--serif);font-size:31px;font-weight:500;letter-spacing:-.015em;line-height:1.18;margin:0 0 8px}.site .post-meta{font-family:var(--chrome);font-size:12px;color:var(--mute)}.site .prose ul,.site .prose ol{margin:0 0 15px;padding-left:22px}.site .prose li{margin-bottom:6px}.site .prose h2{margin-top:40px}.site .prose img{max-width:100%;height:auto;border:1px solid var(--rule)}.site .prose table{width:100%;border-collapse:collapse;font-family:var(--chrome);font-size:13px;margin:20px 0}.site .prose table th{text-align:left;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);border-bottom:1px solid var(--ink);padding:0 10px 7px 0}.site .prose table td{border-bottom:1px solid var(--rule);padding:9px 10px 9px 0}.site .foot{margin-top:76px;padding:22px 0 48px;border-top:2px solid var(--ink);font-family:var(--chrome);font-size:11.5px;color:var(--mute);display:flex;justify-content:space-between;align-items:baseline;gap:24px}.site .foot a{color:var(--mute);border-bottom-color:var(--rule)}.site .foot a:hover{color:var(--wine)}.site .foot .foot-links a{margin-right:14px}.site .foot .foot-note{text-align:right;max-width:46ch;line-height:1.5}.site .skip{position:absolute;left:-9999px}.site .skip:focus{left:12px;top:12px;background:var(--paper);border:1px solid var(--ink);padding:8px 12px;z-index:10}@media (max-width: 800px){.site{font-size:16.5px}.site .wrap{padding:28px 20px 0}.site main{padding-top:34px}.site .mast{flex-direction:column;gap:16px}.site .mast-right{text-align:left;padding-top:0}.site .nav a{margin:0 16px 0 0}.site .ident-name{font-size:31px}.site .schedule thead{position:absolute;left:-9999px}.site .schedule,.site .schedule tbody,.site .schedule tr,.site .schedule td{display:block;width:auto}.site .schedule tr{padding:12px 0;border-bottom:1px solid var(--rule)}.site .schedule td{border:none;padding:0 0 4px;width:auto}.site .schedule .c-wk,.site .schedule .c-date,.site .schedule .c-upd{display:inline-block;width:auto;margin-right:10px}.site .schedule .c-files{padding-top:6px}.site .schedule .r-exam,.site .schedule .r-assignment{padding-left:10px}.site .row{grid-template-columns:1fr;gap:4px}.site .announcements .ann{grid-template-columns:1fr;gap:4px}.site .row-key{padding-top:0}.site .row-key .sub{display:inline;margin-left:8px}.site .foot{flex-direction:column}.site .foot .foot-note{text-align:left}}@media print{.site{font-size:10.5pt;line-height:1.45;background:#fff;color:#000}.site .course-tabs{display:none}.site .course-shell{grid-template-columns:1fr}.site .wrap{max-width:none;padding:0}.site main{padding-top:18pt}.site .nav,.site .skip,.site .f,.site .files-empty,.site .profile-links,.site .vid-embed,.site .foot a{display:none !important}.site .schedule .c-files{display:none}.site a{color:#000;border-bottom:none}.site .mast{border-bottom-width:1.5pt}.site h2{break-after:avoid;page-break-after:avoid;margin-top:22pt}.site h3,.site .course-title,.site .post-title{break-after:avoid;page-break-after:avoid}.site .schedule tr,.site .grading tr,.site .row,.site .resources li{break-inside:avoid;page-break-inside:avoid}.site .schedule tbody tr:hover{background:none}.site .r-exam,.site .r-assignment{background:none !important;border-left:2pt solid #000;padding-left:6pt}.site .foot{border-top:.5pt solid #000;margin-top:24pt;padding-bottom:0}}