{"id":1638,"date":"2026-10-25T09:32:38","date_gmt":"2026-10-25T01:32:38","guid":{"rendered":"https:\/\/oasis.eng.buffalo.edu\/?page_id=1638"},"modified":"2026-10-25T09:46:35","modified_gmt":"2026-10-25T01:46:35","slug":"lab-teaching","status":"publish","type":"page","link":"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-teaching\/","title":{"rendered":"Lab Teaching"},"content":{"rendered":"\n<!-- OASIS site: 8-Lab-Teaching -- paste this whole file into one Elementor HTML widget -->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Public+Sans:wght@400;500;600;700&#038;family=Source+Serif+4:opsz,wght@8..60,500;8..60,600&#038;display=swap\" rel=\"stylesheet\">\n<style>\n:root{\n  --ink:#1B2E22; --forest:#24583A; --leaf:#3E8A56; --leaf-deep:#2C6B40;\n  --mint:#E4F2DE; --paper:#F4F9F1; --line:#D3E4CC; --muted:#4D6154; --white:#FFFFFF;\n  --ember:#B85A2A;\n  --serif:\"Source Serif 4\", Georgia, \"Times New Roman\", serif;\n  --sans:\"Public Sans\", \"Segoe UI\", Helvetica, Arial, sans-serif;\n}\n*{box-sizing:border-box}\nhtml,body{margin:0}\nhtml{scroll-padding-top:80px}\nbody{font-family:var(--sans);color:var(--ink);background:var(--white);font-size:17px;line-height:1.6}\na{color:var(--leaf-deep)}\na:focus-visible,button:focus-visible{outline:3px solid var(--ember);outline-offset:3px}\nimg{max-width:100%}\n.wrap{max-width:1140px;margin:0 auto;padding:0 24px}\n.measure{max-width:68ch}\n\n\/* header *\/\n.nav{background:var(--white);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}\n.nav .wrap{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:66px}\n.brand{display:flex;align-items:baseline;gap:10px;text-decoration:none;color:var(--ink)}\n.brand b{font-family:var(--serif);font-weight:600;font-size:1.45rem;letter-spacing:.03em;color:var(--forest)}\n.brand span{font-size:.8rem;color:var(--muted)}\n.nav ul{list-style:none;margin:0;padding:0;display:flex;gap:4px 18px;font-size:.93rem}\n.nav ul a{color:var(--ink);text-decoration:none;padding:6px 0;border-bottom:2px solid transparent}\n.nav ul a:hover{color:var(--leaf-deep)}\n.nav ul a[aria-current]{color:var(--leaf-deep);border-bottom-color:var(--leaf)}\n.menu-btn{display:none;background:none;border:1px solid var(--line);border-radius:6px;padding:6px 12px;font:600 .9rem var(--sans);color:var(--ink);cursor:pointer}\n\n\/* page heading band *\/\n.page-head{background:var(--mint);border-bottom:1px solid var(--line)}\n.page-head .wrap{padding-top:52px;padding-bottom:44px}\n.page-head h1{font-family:var(--serif);font-weight:600;font-size:clamp(2rem,4vw,2.8rem);line-height:1.15;margin:0 0 10px;color:var(--forest)}\n.page-head p{margin:0;color:var(--muted);max-width:62ch;font-size:1.05rem}\n\nsection{padding:68px 0}\n.tint{background:var(--paper)}\nh2{font-family:var(--serif);font-weight:600;font-size:clamp(1.55rem,2.6vw,2.05rem);line-height:1.2;margin:0 0 14px;color:var(--forest)}\nh3{font-size:1.08rem;margin:0 0 8px;line-height:1.35}\n.lead{font-size:1.08rem;color:var(--muted)}\n.sec-top{display:flex;justify-content:space-between;align-items:end;gap:20px;flex-wrap:wrap;margin-bottom:24px}\n.sec-top h2{margin:0}\n\n\/* buttons *\/\n.btn{display:inline-block;padding:10px 18px;border-radius:6px;font-weight:600;font-size:.95rem;text-decoration:none;border:1px solid transparent}\n.btn-primary{background:var(--leaf-deep);color:#fff}\n.btn-primary:hover{background:var(--forest)}\n.btn-line{border-color:var(--leaf);color:var(--leaf-deep);background:var(--white)}\n\n\/* hero *\/\n.hero video{display:block;width:100%;aspect-ratio:16\/9;max-height:74vh;object-fit:cover;background:var(--ink)}\n.hero-media{position:relative}\n.hero-media button{position:absolute;top:14px;right:14px;font:500 .85rem var(--sans);background:rgba(255,255,255,.88);color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:6px 12px;cursor:pointer}\n.hero-text{background:var(--mint);border-bottom:1px solid var(--line)}\n.hero-text .wrap{padding-top:40px;padding-bottom:44px;display:grid;grid-template-columns:1.3fr 1fr;gap:40px;align-items:end}\n.hero-text h1{font-family:var(--serif);font-weight:600;font-size:clamp(1.9rem,4.2vw,3rem);line-height:1.13;margin:0;color:var(--forest)}\n.hero-text p{margin:0;color:var(--muted);font-size:1.05rem}\n.cta{display:flex;gap:12px;margin-top:18px;flex-wrap:wrap}\n\n\/* hazard-to-household chain *\/\n.chain{list-style:none;margin:36px 0 0;padding:0;display:grid;grid-template-columns:repeat(4,1fr);gap:0}\n.chain li{position:relative;padding:26px 22px 4px 0}\n.chain li::before{content:\"\";position:absolute;top:0;left:0;right:0;height:6px;background:var(--c)}\n.chain li:not(:last-child)::after{content:\"\";position:absolute;top:-5px;right:-1px;border-left:12px solid var(--c);border-top:8px solid transparent;border-bottom:8px solid transparent}\n.chain .step{font-weight:700;font-size:.85rem;color:var(--c);display:block;margin-bottom:4px}\n.chain p{margin:0;font-size:.95rem;color:var(--muted)}\n.chain li:nth-child(1){--c:var(--ember)}\n.chain li:nth-child(2){--c:#8C7A2E}\n.chain li:nth-child(3){--c:var(--leaf)}\n.chain li:nth-child(4){--c:var(--forest)}\n\n\/* generic card grid *\/\n.grid{display:grid;gap:22px}\n.g2{grid-template-columns:repeat(2,1fr)}\n.g3{grid-template-columns:repeat(3,1fr)}\n.card{background:var(--white);border:1px solid var(--line);border-radius:10px;padding:24px}\n.card p{margin:0 0 10px;color:var(--muted);font-size:.95rem}\n.card p:last-child{margin-bottom:0}\n.meta{font-size:.84rem;color:var(--muted);margin:0 0 8px}\n.tag{display:inline-block;font-size:.76rem;font-weight:600;padding:2px 9px;border-radius:20px;background:var(--mint);color:var(--leaf-deep);margin:0 6px 8px 0}\n.tag.warm{background:#F7E7DC;color:#8A3E17}\n.tag.gold{background:#F3EDCF;color:#6B5A12}\n\n\/* slider *\/\n.slider{position:relative}\n.track{display:flex;gap:20px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;padding:4px 2px 18px;scrollbar-width:thin;scrollbar-color:var(--line) transparent}\n.slide{flex:0 0 calc((100% - 40px)\/3);scroll-snap-align:start;background:var(--white);border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column}\n.slide .pic{aspect-ratio:16\/9;background:var(--g,linear-gradient(135deg,#2C6B40,#8CC08E));position:relative}\n.slide .pic img{width:100%;height:100%;object-fit:cover;display:block}\n.slide .body{padding:18px 20px 20px;display:flex;flex-direction:column;flex:1}\n.slide h3{font-size:1.02rem;margin:0 0 6px}\n.slide p{margin:0 0 12px;font-size:.92rem;color:var(--muted)}\n.slide .more{margin-top:auto;font-weight:600;font-size:.9rem}\n.slide.fire .pic{--g:linear-gradient(135deg,#7A2E12,#C8662B 55%,#E8B04A)}\n.slide.sat .pic{--g:linear-gradient(135deg,#1E3D2B,#3E8A56 55%,#9ED3A4)}\n.slide.wind .pic{--g:linear-gradient(135deg,#2F5D6B,#5FA3A0 55%,#CDE8C4)}\n.slide.plain{border-top:5px solid var(--leaf)}\n.slide.plain.award{border-top-color:var(--ember)}\n.slide.plain.data{border-top-color:#8C7A2E}\n.ctrls{display:flex;gap:8px}\n.ctrls button{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:var(--white);color:var(--forest);font-size:1.1rem;cursor:pointer}\n.ctrls button:hover{background:var(--mint)}\n\n\/* people *\/\n.person{display:grid;grid-template-columns:120px 1fr;gap:20px;align-items:start}\n.person img{width:120px;height:120px;border-radius:50%;object-fit:cover;background:var(--mint);border:3px solid var(--mint)}\n.person h3{margin:0 0 2px}\n.role{font-size:.88rem;color:var(--leaf-deep);font-weight:600;margin:0 0 8px}\n\n\/* director *\/\n.dir-top{display:grid;grid-template-columns:260px 1fr;gap:40px;align-items:start}\n.dir-top img{width:100%;border-radius:10px;border:1px solid var(--line)}\n.links{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}\n.tl{list-style:none;margin:0;padding:0;border-left:2px solid var(--line)}\n.tl li{position:relative;padding:0 0 18px 22px}\n.tl li::before{content:\"\";position:absolute;left:-7px;top:6px;width:12px;height:12px;border-radius:50%;background:var(--leaf);border:2px solid var(--white)}\n.tl .when{font-size:.84rem;color:var(--muted)}\n.tl strong{display:block}\n\n\/* publications *\/\n.jump{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}\n.jump a{padding:6px 14px;border-radius:20px;border:1px solid var(--line);background:var(--white);text-decoration:none;font-size:.9rem;color:var(--forest)}\n.jump a:hover{background:var(--mint)}\n.pubs{list-style:none;margin:0;padding:0;counter-reset:none}\n.pubs li{padding:14px 0;border-top:1px solid var(--line);font-size:.95rem;display:grid;grid-template-columns:52px 1fr;gap:12px}\n.pubs .id{font-weight:700;color:var(--leaf-deep);font-size:.85rem;padding-top:2px}\n.pubs em{color:var(--ink)}\n\n\/* awards *\/\n.award-list{list-style:none;margin:0;padding:0}\n.award-list li{padding:14px 0;border-top:1px solid var(--line)}\n.award-list li:first-child{border-top:0;padding-top:0}\n.award-list .yr{font-weight:700;color:var(--ember);font-size:.85rem}\n.award-list strong{display:block}\n.award-list span.d{font-size:.9rem;color:var(--muted)}\n\n\/* join + footer *\/\n.join{display:grid;grid-template-columns:1.2fr 1fr;gap:48px}\naddress{font-style:normal;color:var(--muted)}\nfooter{background:var(--forest);color:#D9EBD6;padding:28px 0;font-size:.88rem}\nfooter .wrap{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}\nfooter a{color:#fff}\n\n@media (max-width:960px){\n  .slide{flex-basis:calc((100% - 20px)\/2)}\n  .g3{grid-template-columns:1fr 1fr}\n}\n@media (max-width:860px){\n  .menu-btn{display:block}\n  .nav ul{display:none;position:absolute;left:0;right:0;top:66px;background:var(--white);border-bottom:1px solid var(--line);flex-direction:column;padding:8px 24px 16px;gap:0}\n  .nav ul.open{display:flex}\n  .nav ul a{display:block;padding:10px 0}\n  .hero-text .wrap,.join,.dir-top{grid-template-columns:1fr;gap:20px}\n  .dir-top img{max-width:240px}\n  .chain{grid-template-columns:1fr 1fr;row-gap:12px}\n  .chain li:nth-child(2)::after{display:none}\n  .g2{grid-template-columns:1fr}\n  section{padding:52px 0}\n}\n@media (max-width:600px){\n  .slide{flex-basis:86%}\n  .g3,.chain{grid-template-columns:1fr}\n  .chain li::after{display:none}\n  .person{grid-template-columns:84px 1fr}\n  .person img{width:84px;height:84px}\n}\n@media (prefers-reduced-motion:reduce){.track{scroll-behavior:auto}}\n.person img,.dir-top img{color:transparent;font-size:0}\n\/* chain pictures *\/\n.chain li{padding-top:0}\n.chain li::before{top:auto}\n.chain-pic{position:relative;aspect-ratio:16\/10;border-radius:10px;overflow:hidden;margin:0 14px 22px 0;border:1px solid var(--line)}\n.chain-pic svg,.chain-pic img{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:cover}\n.chain li .step{position:relative;padding-top:20px}\n.chain li .step::before{content:\"\";position:absolute;top:0;left:0;right:-22px;height:6px;background:var(--c)}\n.chain li::before,.chain li::after{display:none}\n.chain li:not(:last-child) .step::after{content:\"\";position:absolute;top:-5px;right:-23px;border-left:12px solid var(--c);border-top:8px solid transparent;border-bottom:8px solid transparent}\n.chain li:last-child .step::before{right:0}\n@media (max-width:860px){.chain li:nth-child(2) .step::after{display:none}.chain li .step::before{right:0}}\n@media (max-width:600px){.chain li .step::after{display:none}.chain-pic{margin-right:0}}\n\/* news card illustrations *\/\n.slide .pic svg,.slide .pic img{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:cover}\n.track{scrollbar-width:none}\n.track::-webkit-scrollbar{display:none}\n\/* bigger OASIS *\/\n.brand b{font-size:2.1rem;line-height:1;letter-spacing:.06em}\n.nav .wrap{min-height:78px}\n.nav ul{font-size:.95rem}\n@media (max-width:860px){.nav ul{top:78px}.brand b{font-size:1.8rem}}\n.hero-text h1 .wordmark{display:block;font-size:clamp(4.5rem,13vw,9.5rem);line-height:.9;letter-spacing:.06em;color:var(--forest);margin-bottom:14px}\n.hero-text h1 .fullname{display:block;font-size:clamp(1.25rem,2.4vw,1.8rem);line-height:1.25;color:var(--leaf-deep);font-weight:500;max-width:22ch}\n.hero-text .wrap{align-items:center}\n\n\/* year tabs *\/\n.years{display:flex;flex-wrap:wrap;gap:8px}\n.years button{font:600 .95rem var(--sans);padding:8px 16px;border-radius:20px;border:1px solid var(--line);background:var(--white);color:var(--forest);cursor:pointer}\n.years button:hover{background:var(--mint)}\n.years button[aria-selected=\"true\"]{background:var(--leaf-deep);border-color:var(--leaf-deep);color:#fff}\n.year-label{display:flex;align-items:baseline;gap:14px;margin:30px 0 -34px}\n.year-label h2{margin:0;font-size:clamp(2rem,4vw,2.8rem)}\n.year-label span{color:var(--muted);font-size:.95rem}\n.slide[hidden]{display:none}\n.slide .pic{background:var(--g,linear-gradient(135deg,#2C6B40,#8CC08E))}\n@media (max-width:600px){.year-label{margin-bottom:8px}}\n\/* news categories *\/\n.cats{display:flex;gap:0;border-bottom:2px solid var(--line);margin-bottom:28px}\n.cats button{font:600 1.05rem var(--sans);padding:12px 22px;border:0;background:none;color:var(--muted);cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px}\n.cats button:hover{color:var(--forest)}\n.cats button[aria-selected=\"true\"]{color:var(--forest);border-bottom-color:var(--leaf-deep)}\n.place{font-size:.86rem !important;color:var(--leaf-deep) !important;font-weight:600;margin:-4px 0 12px !important}\n@media (max-width:600px){.cats button{padding:10px 12px;font-size:.95rem}}\n.slide .pic img.contain{object-fit:contain;background:#2458A6}\n.feature{display:grid;grid-template-columns:360px 1fr;gap:40px;align-items:center}\n.feature img{width:100%;border-radius:10px;border:1px solid var(--line)}\n@media (max-width:860px){.feature{grid-template-columns:1fr}.feature img{max-width:420px}}\n.slide .pic img.contain.dark{background:#4A2A17}\n\/* service cards with pictures *\/\n.card.svc{padding:0;overflow:hidden}\n.card.svc h3{padding:20px 24px 0}\n.card.svc p{padding:0 24px 22px}\n.svc-pic{aspect-ratio:16\/9;background:linear-gradient(135deg,#2C6B40,#8CC08E);position:relative}\n.svc-pic img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}\n.svc-pic.dark{background:#4A2A17}\n.svc-pic.dark img{object-fit:contain}\n.svc-pic.face img{object-position:50% 22%}\n\n\/* ================= dynamic, flowing layer ================= *\/\n\/* scroll progress *\/\n.progress{position:fixed;top:0;left:0;height:3px;width:100%;transform-origin:0 50%;transform:scaleX(0);background:linear-gradient(90deg,var(--ember),#E8B04A,var(--leaf));z-index:50}\n\n\/* glass nav that tightens on scroll *\/\n.nav{background:rgba(255,255,255,.86);backdrop-filter:saturate(1.4) blur(10px);-webkit-backdrop-filter:saturate(1.4) blur(10px);transition:box-shadow .3s}\n.nav .wrap{transition:min-height .3s}\n.nav.scrolled{box-shadow:0 6px 24px -14px rgba(27,46,34,.35)}\n.nav.scrolled .wrap{min-height:62px}\n.nav.scrolled .brand b{font-size:1.7rem}\n.brand b{transition:font-size .3s}\n.nav ul a{position:relative;border-bottom:0}\n.nav ul a::after{content:\"\";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--leaf);transform:scaleX(0);transform-origin:left;transition:transform .3s}\n.nav ul a:hover::after,.nav ul a[aria-current]::after{transform:scaleX(1)}\n\n\/* flowing, drifting color fields in heading bands *\/\n.page-head,.hero-text{position:relative;overflow:hidden;isolation:isolate}\n.page-head::before,.hero-text::before{content:\"\";position:absolute;inset:-40%;z-index:-1;\n  background:\n   radial-gradient(35% 45% at 20% 30%,rgba(62,138,86,.28),transparent 70%),\n   radial-gradient(30% 40% at 80% 20%,rgba(232,176,74,.22),transparent 70%),\n   radial-gradient(40% 50% at 60% 90%,rgba(95,163,160,.25),transparent 70%);\n  animation:drift 22s ease-in-out infinite alternate}\n@keyframes drift{0%{transform:translate(0,0) rotate(0)}50%{transform:translate(4%,-3%) rotate(6deg)}100%{transform:translate(-4%,3%) rotate(-5deg)}}\n\n\/* wave edges between sections *\/\n.page-head,.hero-text,.tint,.stats-band{--wave:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1440 60' preserveAspectRatio='none'%3E%3Cpath d='M0,0 L1440,0 L1440,30 C1200,62 960,4 720,28 C480,52 240,6 0,34 Z'\/%3E%3C\/svg%3E\")}\n.page-head,.hero-text{border-bottom:0;padding-bottom:30px;-webkit-mask:var(--wave) bottom\/100% 40px no-repeat,linear-gradient(#000,#000) top\/100% calc(100% - 39px) no-repeat;mask:var(--wave) bottom\/100% 40px no-repeat,linear-gradient(#000,#000) top\/100% calc(100% - 39px) no-repeat}\n.tint{position:relative;margin-top:-1px}\n.tint::before,.tint::after{content:\"\";position:absolute;left:0;right:0;height:40px;background:var(--paper);-webkit-mask:var(--wave) center\/100% 100% no-repeat;mask:var(--wave) center\/100% 100% no-repeat;pointer-events:none}\n.tint::before{top:-39px;transform:scaleY(-1)}\n.tint::after{bottom:-39px}\n.tint{z-index:1}\n\n\/* stats band *\/\n.stats-band{background:var(--forest);color:#fff;padding:44px 0 50px;position:relative}\n.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}\n.stats b{display:block;font-family:var(--serif);font-weight:600;font-size:clamp(2.2rem,4.5vw,3.4rem);line-height:1;color:#CFEBC6}\n.stats span{display:block;margin-top:8px;font-size:.95rem;color:#D9EBD6;max-width:22ch}\n@media (max-width:760px){.stats{grid-template-columns:1fr 1fr;row-gap:30px}}\n\n\/* cards: lift and slow image zoom *\/\n.card,.slide{transition:transform .35s cubic-bezier(.2,.7,.2,1),box-shadow .35s}\n.card:hover,.slide:hover{transform:translateY(-6px);box-shadow:0 18px 36px -22px rgba(27,46,34,.45)}\n.slide .pic img,.svc-pic img,.chain-pic img,.chain-pic svg{transition:transform 1.2s cubic-bezier(.2,.7,.2,1)}\n.slide:hover .pic img,.card.svc:hover .svc-pic img,.chain li:hover .chain-pic svg,.chain li:hover .chain-pic img{transform:scale(1.06)}\n.slide .pic,.svc-pic,.chain-pic{overflow:hidden}\n.btn{transition:transform .2s,background .2s,box-shadow .2s}\n.btn:hover{transform:translateY(-2px);box-shadow:0 8px 18px -10px rgba(27,46,34,.6)}\n\n\/* scroll reveal *\/\n.reveal{opacity:0;transform:translateY(26px);transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0s)}\n.reveal.in{opacity:1;transform:none}\n\/* chain bar draws itself *\/\n.chain li .step::before{transform:scaleX(0);transform-origin:left;transition:transform .7s cubic-bezier(.6,.1,.3,1);transition-delay:calc(var(--d,0s) + .2s)}\n.chain li.in .step::before,.chain li:not(.reveal) .step::before{transform:scaleX(1)}\n.chain li .step::after{opacity:0;transition:opacity .3s;transition-delay:calc(var(--d,0s) + .8s)}\n.chain li.in .step::after,.chain li:not(.reveal) .step::after{opacity:1}\n\n\/* hero wordmark shimmer on load *\/\n.hero-text h1 .wordmark{background:linear-gradient(100deg,var(--forest) 30%,var(--leaf) 45%,#8CC08E 50%,var(--leaf) 55%,var(--forest) 70%);background-size:300% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shine 3.5s ease-out .4s 1 both}\n@keyframes shine{from{background-position:100% 0}to{background-position:0 0}}\n\n\/* footer wave *\/\nfooter{position:relative;margin-top:60px;padding-top:34px}\n.footer-wave{position:absolute;left:0;right:0;top:-59px;width:100%;height:60px;display:block}\n.footer-wave path{fill:var(--forest)}\n\n@media (prefers-reduced-motion:reduce){\n  .page-head::before,.hero-text::before,.hero-text h1 .wordmark{animation:none}\n  .reveal{opacity:1;transform:none;transition:none}\n  .card,.slide,.slide .pic img,.btn{transition:none}\n  .card:hover,.slide:hover,.btn:hover{transform:none}\n  .progress{display:none}\n}\n\n\/* NSF RAPID spotlight *\/\n.rapid-head{display:grid;grid-template-columns:1.5fr 1fr;gap:40px;align-items:start;margin-bottom:34px}\n.rapid-head h2{font-size:clamp(1.7rem,3vw,2.4rem)}\n.facts{margin:0;display:grid;gap:14px;background:var(--mint);border-radius:12px;padding:22px 24px}\n.facts dt{font-size:.8rem;font-weight:700;color:var(--leaf-deep)}\n.facts dd{margin:2px 0 0;font-size:.98rem}\n.rapid-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:24px;align-items:start}\n.video-card video{width:100%;border-radius:12px;display:block;background:var(--ink);aspect-ratio:16\/9}\n.rapid-grid .card p{font-size:.93rem}\n.sub{font-family:var(--serif);font-weight:600;font-size:1.45rem;color:var(--forest);margin:48px 0 16px}\n.gallery{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:190px;gap:14px}\n.gallery .g{margin:0;position:relative;border-radius:12px;overflow:hidden;background:var(--mint)}\n.gallery .g.wide{grid-column:span 2;grid-row:span 2}\n.gallery .g.tall{grid-row:span 2}\n.gallery img{width:100%;height:100%;object-fit:cover;display:block;transition:transform 1.2s cubic-bezier(.2,.7,.2,1)}\n.gallery .g:hover img{transform:scale(1.05)}\n.gallery figcaption{position:absolute;left:0;right:0;bottom:0;padding:26px 14px 12px;font-size:.85rem;line-height:1.4;color:#fff;background:linear-gradient(transparent,rgba(20,38,28,.85))}\n@media (max-width:900px){.rapid-head,.rapid-grid{grid-template-columns:1fr}.gallery{grid-template-columns:1fr 1fr;grid-auto-rows:170px}}\n@media (max-width:520px){.gallery{grid-template-columns:1fr;grid-auto-rows:240px}.gallery .g.wide,.gallery .g.tall{grid-column:auto;grid-row:span 1}}\n.gallery .g.face img{object-position:50% 18%}\n.mods{grid-template-columns:repeat(4,1fr);margin-bottom:8px}\n.gallery.two{grid-template-columns:1fr 1fr;grid-auto-rows:auto}\n.gallery.two .g.wide{grid-column:auto;grid-row:auto;aspect-ratio:4\/3}\n@media (max-width:900px){.mods{grid-template-columns:1fr 1fr}}\n@media (max-width:520px){.mods,.gallery.two{grid-template-columns:1fr}}\n.doe-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:24px;align-items:start}\n.doe-grid .gallery.two .g.tall{grid-row:auto;aspect-ratio:3\/4}\n@media (max-width:900px){.doe-grid{grid-template-columns:1fr}}\n\n\/* awards feature with two photos *\/\n.feature-pics{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n.feature-pics img{width:100%;height:100%;aspect-ratio:3\/4;object-fit:cover;border-radius:10px;border:1px solid var(--line)}\n.feature{grid-template-columns:440px 1fr}\n@media (max-width:860px){.feature{grid-template-columns:1fr}}\n\n\/* interactive student awards *\/\n.chips{margin-bottom:26px}\n.sa-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}\n.sa{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;transition:transform .35s cubic-bezier(.2,.7,.2,1),box-shadow .35s,opacity .35s}\n.sa:hover{transform:translateY(-6px) rotate(-.4deg);box-shadow:0 20px 38px -22px rgba(27,46,34,.5)}\n.sa.hide{display:none}\n.sa.pop{animation:pop .45s cubic-bezier(.2,.7,.2,1) both}\n@keyframes pop{from{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:none}}\n.sa-pic{position:relative;aspect-ratio:4\/3;background:linear-gradient(135deg,#24583A,#8CC08E);overflow:hidden}\n.sa-pic img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s cubic-bezier(.2,.7,.2,1)}\n.sa-pic.face img{object-position:50% 20%}\n.sa:hover .sa-pic img{transform:scale(1.07)}\n.sa-pic .yr{position:absolute;top:10px;left:10px;background:rgba(255,255,255,.92);color:var(--ember);font-weight:700;font-size:.8rem;padding:3px 10px;border-radius:20px}\n.initials{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--serif);font-size:3rem;color:#E4F2DE}\n.sa-body{padding:16px 18px 18px}\n.sa .who{margin:0 0 4px;font-size:.82rem;font-weight:700;color:var(--leaf-deep)}\n.sa h3{font-size:1rem;margin:0 0 6px}\n.sa p{margin:0 0 6px;font-size:.9rem;color:var(--muted)}\n.sa .cap{font-style:italic;font-size:.84rem}\n@media (max-width:1000px){.sa-grid{grid-template-columns:repeat(3,1fr)}}\n@media (max-width:760px){.sa-grid{grid-template-columns:1fr 1fr}}\n@media (max-width:480px){.sa-grid{grid-template-columns:1fr}}\n\n\/* team: single current student, larger *\/\n.g1{grid-template-columns:1fr}\n.lead-person .person{grid-template-columns:200px 1fr;gap:32px;align-items:center;padding:28px}\n.lead-person .person img{width:200px;height:200px}\n@media (max-width:600px){.lead-person .person{grid-template-columns:1fr}.lead-person .person img{width:160px;height:160px}}\n\n\/* lab moments: flowing masonry *\/\n.moments{columns:4 240px;column-gap:16px;margin-top:22px}\n.moments figure{break-inside:avoid;margin:0 0 16px;position:relative;border-radius:12px;overflow:hidden;background:var(--mint)}\n.moments img{width:100%;display:block;transition:transform 1.2s cubic-bezier(.2,.7,.2,1)}\n.moments figure:hover img{transform:scale(1.05)}\n.moments figcaption{position:absolute;left:0;right:0;bottom:0;padding:28px 12px 10px;font-size:.84rem;line-height:1.4;color:#fff;background:linear-gradient(transparent,rgba(20,38,28,.85));opacity:0;transform:translateY(8px);transition:opacity .35s,transform .35s}\n.moments figure:hover figcaption,.moments figure:focus-within figcaption{opacity:1;transform:none}\n@media (hover:none){.moments figcaption{opacity:1;transform:none}}\n.chips{display:flex;flex-wrap:wrap;gap:8px}\n.chips button{font:600 .95rem var(--sans);padding:8px 16px;border-radius:20px;border:1px solid var(--line);background:var(--white);color:var(--forest);cursor:pointer;transition:background .2s,color .2s}\n.chips button:hover{background:var(--mint)}\n.chips button[aria-selected=\"true\"]{background:var(--leaf-deep);border-color:var(--leaf-deep);color:#fff}\n\n\/* flashing news bar *\/\n.flash{display:flex;align-items:center;gap:12px;justify-content:center;padding:9px 20px;background:linear-gradient(90deg,#7A2E12,#B85A2A,#D98A3A,#B85A2A,#7A2E12);background-size:300% 100%;animation:flow 9s linear infinite;color:#fff;text-decoration:none;font-size:.92rem;position:relative;z-index:21}\n.flash:hover .flash-more{text-decoration:underline}\n.flash-dot{width:9px;height:9px;border-radius:50%;background:#FFE7A8;box-shadow:0 0 0 0 rgba(255,231,168,.8);animation:ping 1.6s ease-out infinite;flex:none}\n.flash-tag{font-weight:700;font-size:.78rem;background:#fff;color:#8A3E17;border-radius:20px;padding:2px 10px;animation:blink 1.6s ease-in-out infinite;flex:none}\n.flash-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.flash-more{font-weight:700;flex:none;white-space:nowrap}\n@keyframes flow{to{background-position:300% 0}}\n@keyframes ping{0%{box-shadow:0 0 0 0 rgba(255,231,168,.8)}100%{box-shadow:0 0 0 12px rgba(255,231,168,0)}}\n@keyframes blink{0%,100%{opacity:1}50%{opacity:.55}}\n@media (max-width:700px){.flash{justify-content:flex-start;font-size:.85rem}.flash-more{display:none}}\n@media (prefers-reduced-motion:reduce){.flash,.flash-dot,.flash-tag{animation:none}}\n.pub-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-bottom:22px}\n.pub-stats div{background:var(--mint);border-radius:12px;padding:16px 18px}\n.pub-stats b{display:block;font-family:var(--serif);font-size:2rem;color:var(--forest);line-height:1}\n.pub-stats span{font-size:.88rem;color:var(--muted)}\n@media (max-width:760px){.pub-stats{grid-template-columns:1fr 1fr}}\n.lead-person.g2 .person{grid-template-columns:150px 1fr;gap:24px;align-items:start;padding:24px}\n.lead-person.g2 .person img{width:150px;height:150px}\n@media (max-width:860px){.lead-person.g2{grid-template-columns:1fr}}\n@media (max-width:600px){.lead-person.g2 .person{grid-template-columns:1fr}}\n\n\n\/* WordPress \/ Elementor Canvas: let the page run edge to edge *\/\nbody.elementor-template-canvas{margin:0}\nbody.elementor-template-canvas .elementor-section .elementor-container,\nbody.elementor-template-canvas .e-con,body.elementor-template-canvas .e-con-inner{max-width:100%!important;width:100%!important;padding:0!important;gap:0!important}\nbody.elementor-template-canvas .elementor-column-gap-default>.elementor-column>.elementor-element-populated,\nbody.elementor-template-canvas .elementor-widget-wrap{padding:0!important}\nbody.elementor-template-canvas .elementor-widget-html{width:100%}\n.admin-bar .nav{top:32px}@media(max-width:782px){.admin-bar .nav{top:46px}}\n<\/style>\n<div class=\"progress\" aria-hidden=\"true\"><\/div>\n<a class=\"flash\" href=\"https:\/\/www.buffalo.edu\/news\/releases\/2026\/09\/university-at-buffalo-national-science-foundation-wildfire-resilience.html\"><span class=\"flash-dot\" aria-hidden=\"true\"><\/span><span class=\"flash-tag\">New<\/span><span class=\"flash-text\">UB leads a $2 million NSF project, REKINDLE, to help communities prepare for the cascading disasters wildfires unleash<\/span><span class=\"flash-more\">Read more \u203a<\/span><\/a>\n<header class=\"nav\">\n  <div class=\"wrap\">\n    <a class=\"brand\" href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-home\/\"><b>OASIS<\/b><span>University at Buffalo<\/span><\/a>\n    <button class=\"menu-btn\" type=\"button\" aria-expanded=\"false\" aria-controls=\"menu\">Menu<\/button>\n    <nav aria-label=\"Main\"><ul id=\"menu\"><li><a href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-home\/\">About<\/a><\/li><li><a href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-news\/\">News<\/a><\/li><li><a href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-director\/\">Director<\/a><\/li><li><a href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-team\/\">Team<\/a><\/li><li><a href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-research\/\">Research<\/a><\/li><li><a href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-publications\/\">Publications<\/a><\/li><li><a href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-awards\/\">Awards<\/a><\/li><li><a href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-teaching\/\" aria-current=\"page\">Teaching<\/a><\/li><\/ul><\/nav>\n  <\/div>\n<\/header>\n<main>\n<div class=\"page-head\"><div class=\"wrap\"><h1>Teaching<\/h1><p>Courses in data analytics, predictive modeling and risk analysis.<\/p><\/div><\/div>\n<section><div class=\"wrap\"><h2>University at Buffalo<\/h2><div class=\"grid g2\" style=\"margin-top:20px\">\n<article class=\"card\"><span class=\"tag\">IE 600 \/ 670<\/span><h3>Data-driven Risk and Decision Analysis<\/h3><p>Research-paper seminar on data-driven risk analytics: Bayesian models, tree boosting, neural networks, time series and ensembles for risk-informed decisions.<\/p><p class=\"meta\" style=\"margin:0\"><strong>Spring 2020\u20132024 \u00b7 Instructor<\/strong><\/p><\/article>\n<article class=\"card\"><span class=\"tag\">IE 500 \/ 459<\/span><h3>Data Analytics and Predictive Modeling<\/h3><p>Modern predictive modeling beyond linear regression: additive models, trees, boosting, bagging and model averaging, for graduate and undergraduate students.<\/p><p class=\"meta\" style=\"margin:0\"><strong>Fall 2019\u20132021, Spring 2023, Fall 2023 \u00b7 Instructor<\/strong><\/p><\/article>\n<article class=\"card\"><span class=\"tag\">IE 322<\/span><h3>Analytics and Computing for Industrial Engineers<\/h3><p>Managing, analyzing and visualizing large data sets with R, using problems from manufacturing, service, healthcare and transportation.<\/p><p class=\"meta\" style=\"margin:0\"><strong>Fall 2021, Fall 2023 \u00b7 Instructor<\/strong><\/p><\/article>\n<article class=\"card\"><span class=\"tag\">IE 600<\/span><h3>Advanced Data Analytics and Predictive Modeling<\/h3><p>Bayesian networks, multi-level models, neural nets, support vector machines and more, with data-driven labs and projects.<\/p><p class=\"meta\" style=\"margin:0\"><strong>Spring 2019 \u00b7 Instructor<\/strong><\/p><\/article>\n<\/div><\/div><\/section>\n<section class=\"tint\"><div class=\"wrap\"><h2>Earlier teaching<\/h2><div class=\"grid g3\" style=\"margin-top:20px\">\n<article class=\"card\"><span class=\"tag gold\">CE 691 \u00b7 Purdue<\/span><h3>Graduate Seminar, Construction Engineering and Management<\/h3><p>Orientation to the CEM specialty and M.S.\/Ph.D. requirements.<\/p><p class=\"meta\" style=\"margin:0\"><strong>Spring 2018, Fall 2017 \u00b7 Co-instructor<\/strong><\/p><\/article>\n<article class=\"card\"><span class=\"tag gold\">CEM 201 \/ CE 222 \u00b7 Purdue<\/span><h3>Life Cycle Engineering of Construction Facilities<\/h3><p>Construction contracts, estimating, scheduling, cost, time, safety and quality. About 100 students.<\/p><p class=\"meta\" style=\"margin:0\"><strong>Spring 2016, Fall 2014 \u00b7 TA and co-instructor<\/strong><\/p><\/article>\n<article class=\"card\"><span class=\"tag gold\">CHEM 177 \u00b7 Iowa State<\/span><h3>General Chemistry<\/h3><p>Stoichiometry, equilibrium, thermochemistry, bonding and more. About 120 students.<\/p><p class=\"meta\" style=\"margin:0\"><strong>Fall 2010 \u00b7 Teaching assistant<\/strong><\/p><\/article>\n<\/div><\/div><\/section>\n<\/main>\n<footer><svg class=\"footer-wave\" viewBox=\"0 0 1440 80\" preserveAspectRatio=\"none\" aria-hidden=\"true\"><path d=\"M0,40 C240,90 480,0 720,30 C960,60 1200,10 1440,40 L1440,80 L0,80 Z\"\/><\/svg><div class=\"wrap\"><span>\u00a9 OASIS Lab \u00b7 Department of Industrial and Systems Engineering, University at Buffalo<\/span><span><a href=\"mailto:sayantim@buffalo.edu\">sayantim@buffalo.edu<\/a><\/span><\/div><\/footer>\n<script>\n(function(){\n  \/\/ mobile menu\n  var mb=document.querySelector('.menu-btn'), ul=document.querySelector('.nav ul');\n  if(mb&&ul){mb.addEventListener('click',function(){var o=ul.classList.toggle('open');mb.setAttribute('aria-expanded',o);});}\n  var reduce=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  \/\/ hero video\n  var v=document.getElementById('heroVideo'), b=document.getElementById('vidToggle');\n  if(v&&b){\n    var set=function(p){b.textContent=p?'Pause video':'Play video';};\n    if(!reduce){var pr=v.play(); if(pr&&pr.then){pr.then(function(){set(true)}).catch(function(){set(false)});}} else set(false);\n    b.addEventListener('click',function(){if(v.paused){v.play();set(true);}else{v.pause();set(false);}});\n  }\n  \/\/ sliders\n  document.querySelectorAll('.slider').forEach(function(s){\n    var t=s.querySelector('.track'), prev=s.querySelector('[data-dir=\"-1\"]'), next=s.querySelector('[data-dir=\"1\"]');\n    var step=function(){var c=t.querySelector('.slide');return c?c.getBoundingClientRect().width+20:300;};\n    var go=function(d){\n      var max=t.scrollWidth-t.clientWidth-4;\n      if(d>0&&t.scrollLeft>=max){t.scrollTo({left:0});}\n      else if(d<0&#038;&#038;t.scrollLeft<=0){t.scrollTo({left:t.scrollWidth});}\n      else t.scrollBy({left:d*step()});\n    };\n    if(prev)prev.addEventListener('click',function(){go(-1)});\n    if(next)next.addEventListener('click',function(){go(1)});\n    if(s.dataset.auto!==undefined&#038;&#038;!reduce){\n      var timer=null, start=function(){stop();timer=setInterval(function(){go(1)},5000)}, stop=function(){if(timer)clearInterval(timer)};\n      s.addEventListener('mouseenter',stop);s.addEventListener('mouseleave',start);\n      s.addEventListener('focusin',stop);s.addEventListener('focusout',start);\n      t.addEventListener('touchstart',stop,{passive:true});\n      start();\n    }\n  });\n})();\n(function(){\n  var tabs=document.querySelectorAll('.years button'); if(!tabs.length||!document.getElementById('yearNews')) return;\n  var slides=document.querySelectorAll('#yearNews .slide'), title=document.getElementById('yearTitle'), count=document.getElementById('yearCount'), track=document.querySelector('#yearNews .track');\n  function show(y){\n    var n=0;\n    slides.forEach(function(s){var on=(y==='all'||s.dataset.year===y); s.hidden=!on; if(on)n++;});\n    tabs.forEach(function(t){t.setAttribute('aria-selected',t.dataset.year===y?'true':'false');});\n    title.textContent = y==='all' ? 'All years' : y;\n    count.textContent = n+(n===1?' story':' stories');\n    track.scrollTo({left:0});\n  }\n  tabs.forEach(function(t){t.addEventListener('click',function(){show(t.dataset.year);});});\n  show(tabs[0].dataset.year);\n})();\n(function(){\n  var cats=document.querySelectorAll('.cats button'); if(!cats.length) return;\n  function show(c,push){\n    cats.forEach(function(b){b.setAttribute('aria-selected',b.dataset.cat===c?'true':'false');});\n    document.querySelectorAll('.cat-panel').forEach(function(p){p.hidden=p.id!==c;});\n    if(push) history.replaceState(null,'','#'+c);\n  }\n  cats.forEach(function(b){b.addEventListener('click',function(){show(b.dataset.cat,true);});});\n  var h=location.hash.replace('#','');\n  if(h==='events'||h==='announcements') show(h,false);\n})();\n(function(){\n  var reduce=window.matchMedia&#038;&#038;window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  var nav=document.querySelector('.nav'), bar=document.querySelector('.progress');\n  function onScroll(){\n    var y=window.scrollY||0;\n    if(nav) nav.classList.toggle('scrolled',y>40);\n    if(bar){var h=document.documentElement.scrollHeight-window.innerHeight; bar.style.transform='scaleX('+(h>0?Math.min(1,y\/h):0)+')';}\n  }\n  window.addEventListener('scroll',onScroll,{passive:true}); onScroll();\n  if(reduce||!('IntersectionObserver' in window)) return;\n\n  \/\/ scroll reveal with gentle stagger inside groups\n  var groups=['.gallery','.mods','.sa-grid','.moments','.facts','.rapid-grid','.chain','.grid','.stats','.pubs','.tl','.award-list','.jump','.years','.cats'];\n  var singles=document.querySelectorAll('main h2, main .lead, .feature, .dir-top > *, .join > *, .hero-text .wrap > *');\n  var items=[];\n  singles.forEach(function(el){items.push(el);});\n  groups.forEach(function(sel){\n    document.querySelectorAll(sel).forEach(function(g){\n      Array.prototype.forEach.call(g.children,function(c,i){c.style.setProperty('--d',Math.min(i,8)*0.09+'s');items.push(c);});\n    });\n  });\n  var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:.12,rootMargin:'0px 0px -40px 0px'});\n  items.forEach(function(el){\n    if(el.getBoundingClientRect().top<window.innerHeight*0.9){return;} \/\/ already in view: leave static\n    el.classList.add('reveal'); io.observe(el);\n  });\n\n  \/\/ count-up numbers\n  var nums=document.querySelectorAll('[data-count]');\n  var io2=new IntersectionObserver(function(es){es.forEach(function(e){\n    if(!e.isIntersecting) return; io2.unobserve(e.target);\n    var el=e.target,end=+el.dataset.count,pre=el.dataset.prefix||'',suf=el.dataset.suffix||'',t0=null;\n    function step(t){if(!t0)t0=t;var p=Math.min(1,(t-t0)\/1400),dec=(el.dataset.count.split('.')[1]||'').length,v=end*(1-Math.pow(1-p,3));el.textContent=pre+(dec?v.toFixed(dec):Math.round(v).toLocaleString('en-US'))+suf;if(p<1)requestAnimationFrame(step);}\n    requestAnimationFrame(step);\n  });},{threshold:.5});\n  nums.forEach(function(n){io2.observe(n);});\n})();\n(function(){\n  var chips=document.querySelectorAll('.chips button'); if(!chips.length) return;\n  var cards=document.querySelectorAll('.sa');\n  chips.forEach(function(c){c.addEventListener('click',function(){\n    var w=c.dataset.who;\n    chips.forEach(function(x){x.setAttribute('aria-selected',x===c?'true':'false');});\n    cards.forEach(function(k,i){\n      var on=(w==='all'||k.dataset.who===w);\n      k.classList.toggle('hide',!on); k.classList.remove('pop');\n      if(on){void k.offsetWidth; k.style.animationDelay=(i%8)*0.04+'s'; k.classList.add('pop');}\n    });\n  });});\n})();\n\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>NewUB leads a $2 million NSF project, REKINDLE, to help communities prepare for the cascading disasters wildfires unleashRead more \u203a OASISUniversity at Buffalo Menu About News Director Team Research Publications Awards Teaching Teaching Courses in data analytics, predictive modeling and risk analysis. University at Buffalo IE 600 \/ 670 Data-driven Risk and Decision Analysis Research-paper<\/p>\n<div class=\"clear\"><\/div>\n<p><a class=\"ReadMore\" href=\"https:\/\/oasis.eng.buffalo.edu\/index.php\/lab-teaching\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-1638","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/oasis.eng.buffalo.edu\/index.php\/wp-json\/wp\/v2\/pages\/1638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oasis.eng.buffalo.edu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/oasis.eng.buffalo.edu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/oasis.eng.buffalo.edu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oasis.eng.buffalo.edu\/index.php\/wp-json\/wp\/v2\/comments?post=1638"}],"version-history":[{"count":1,"href":"https:\/\/oasis.eng.buffalo.edu\/index.php\/wp-json\/wp\/v2\/pages\/1638\/revisions"}],"predecessor-version":[{"id":1639,"href":"https:\/\/oasis.eng.buffalo.edu\/index.php\/wp-json\/wp\/v2\/pages\/1638\/revisions\/1639"}],"wp:attachment":[{"href":"https:\/\/oasis.eng.buffalo.edu\/index.php\/wp-json\/wp\/v2\/media?parent=1638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}