/* Nord palette © 2016-present Sven Greb. MIT license: licenses/nord-MIT.txt */
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap');
:root{color-scheme:dark;--bg:#2e3440;--panel:#3b4252;--line:#4c566a;--text:#eceff4;--muted:#b8c2d3;--accent:#88c0d0;--mono:'JetBrains Mono','Cascadia Code','SFMono-Regular',Consolas,monospace}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:32px}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--mono);font-size:14px;line-height:1.85}a{color:inherit;text-decoration:none}a,button,a:hover{color:var(--accent)}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:6px}::selection{background:#5e81ac;color:white}.skip{position:fixed;top:-100px;left:20px;background:var(--accent);color:var(--bg);padding:10px;z-index:10}.skip:focus{top:10px}.sidebar{position:fixed;inset:0 auto 0 0;width:260px;padding:44px 32px;border-right:1px solid var(--line);display:flex;flex-direction:column;background:var(--bg);z-index:5}.brand{font-size:36px;font-weight:700;letter-spacing:-3px;width:max-content;line-height:1.2}.brand span{color:var(--accent)}.sidebar-name{margin:28px 0 46px;font-weight:600;font-size:14px}.sidebar-name span{display:block;font-size:10px;color:var(--muted);font-weight:400;margin-top:5px}nav{display:flex;flex-direction:column;gap:8px}nav a{font-size:12px;padding:10px 12px;margin-left:-12px;border-radius:6px;color:var(--muted);transition:background .2s}nav a span{font-size:10px;color:#9aa8bc;margin-right:14px}nav a.active{background:var(--panel);color:var(--text)}nav a.active span{color:var(--accent)}.resume-link{margin-top:36px;font-size:12px;display:flex;justify-content:space-between;border-top:1px solid var(--line);padding-top:20px}.resume-link span{color:var(--accent)}.sidebar-bottom{margin-top:auto;font-size:10px;color:var(--muted)}.status-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#a3be8c;margin-right:8px}.sidebar-bottom p{margin-top:20px;color:#97a5b9}main{margin-left:260px;max-width:1600px}.section{padding:72px clamp(32px,5.3vw,100px);scroll-margin-top:0}.intro{padding-top:36px;min-height:100vh;position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between}.section-top,.intro-footer,.project-meta{display:flex;justify-content:space-between;gap:20px;font-size:10px;letter-spacing:1.3px;color:var(--muted)}.section-top{padding-bottom:30px;border-bottom:1px solid var(--line)}.hero-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:42px;align-items:center;padding:60px 0 35px;z-index:1}.eyebrow{font-size:11px;letter-spacing:2px;color:var(--accent);margin:0 0 22px}h1{font-size:clamp(60px,6.7vw,110px);line-height:1.04;letter-spacing:-6px;margin:0 0 24px;font-weight:600}h1 span,.contact h2 span{color:var(--accent)}.hero-subtitle{font-size:clamp(17px,1.7vw,26px);line-height:1.55;letter-spacing:-.8px;margin-bottom:22px}.intro-text{max-width:480px;color:var(--muted);font-size:12px}.actions{display:flex;align-items:center;gap:24px;margin-top:30px;font-size:11px}.button{background:var(--accent);color:#242b36;padding:13px 18px;border-radius:6px;font-weight:600}.button:hover{background:#a4d1dd;color:#242b36}.button span{margin-left:15px}.text-link{color:var(--accent);font-size:12px}.portrait{margin:0;align-self:center}.portrait img{display:block;width:100%;height:clamp(320px,33vw,500px);object-fit:cover;object-position:50% 35%;border-radius:12px;filter:none}figcaption{font-size:10px;color:var(--muted);margin-top:12px;line-height:1.6}.portrait figcaption{display:flex;justify-content:space-between;gap:12px;font-size:9px}.intro-footer{border-top:1px solid var(--line);padding-top:22px;font-size:9px}.projects{background:#2b313d}.section-heading{margin-bottom:60px}.section-heading h2,h2{font-size:clamp(32px,3.7vw,54px);line-height:1.25;letter-spacing:-2px;font-weight:500;margin:0 0 24px}.section-heading>p:last-child{max-width:560px;color:var(--muted);font-size:12px}.project{border-top:1px solid var(--line);padding:26px 0 0;margin-bottom:60px}.project:last-child{margin-bottom:0}.project-meta{font-size:9px;margin-bottom:30px}.project-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:42px;align-items:center}.project h3{font-size:28px;letter-spacing:-1px;margin:0 0 14px;font-weight:500}.project-deck{font-size:16px;line-height:1.6;color:var(--text)!important}.project p{font-size:12px;color:var(--muted)}.project figure{margin:0;min-width:0}.project img{display:block;width:100%;border-radius:9px;object-fit:cover}.pcb{background:var(--panel);padding:20px}.contain{object-fit:contain!important;max-height:380px;background:var(--panel);padding:12px}.tags{display:flex;gap:7px;flex-wrap:wrap;margin-top:22px}.tags span{color:var(--muted);font-size:9px;border:1px solid var(--line);padding:3px 9px;border-radius:4px}.result{display:flex;align-items:center;gap:18px;margin:24px 0}.result strong{font-size:40px;font-weight:500;color:var(--accent);line-height:1}.result span{font-size:10px;color:var(--muted);line-height:1.6}.detail-content{padding:10px 0 30px}.two-columns{display:grid;grid-template-columns:1fr 1fr;gap:32px}h4{font-weight:500;font-size:12px;margin:0 0 10px}.gallery,.scope-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:24px 0}.gallery img{height:300px}.scope-grid{margin-top:32px}.scope-grid img{aspect-ratio:4/3;object-fit:cover}.before-dot{color:#d08770}.after-dot{color:#a3be8c}.zoom{display:block;cursor:zoom-in;border-radius:9px;overflow:hidden}.zoom img{transition:filter .2s}.zoom:hover img{filter:brightness(1.08)}.printer{height:360px;object-position:50% 42%}.signal-diagram{border:1px solid var(--line);border-radius:10px;padding:28px;text-align:center;font-size:11px;background:var(--bg)}.signal-diagram>span{font-size:9px;letter-spacing:1.2px;color:var(--accent)}.signal-diagram>b{display:block;font-weight:400;color:var(--accent);margin:7px}.signal-diagram>div:not(.signal-branches){border:1px solid var(--line);padding:12px;border-radius:5px}.signal-branches{display:grid;grid-template-columns:1fr 1fr;gap:12px}.signal-branches>div{border:1px solid var(--line);padding:18px 8px;border-radius:5px;background:var(--panel)}.signal-branches small{display:block;color:var(--muted);font-size:9px;margin-top:14px}.diagram-label{display:block;margin-top:24px}.timeline article{display:grid;grid-template-columns:180px 1fr;gap:24px;border-top:1px solid var(--line);padding:30px 0}.timeline-date{font-size:10px;color:var(--muted);padding-top:6px}.upcoming{display:block;width:max-content;font-size:8px;padding:1px 7px;border:1px solid #8fbcbb;border-radius:3px;color:#8fbcbb;margin-top:12px}.timeline h3,.education h3{font-size:20px;font-weight:500;letter-spacing:-.6px;margin:0 0 10px}.timeline h4{color:var(--accent);font-size:11px;margin:16px 0 8px}.timeline p,.education p,.skills p{font-size:12px;color:var(--muted);margin:8px 0}.education{display:grid;grid-template-columns:180px 1fr;gap:24px;border-top:1px solid var(--line);margin-top:16px;padding:30px 0}.education>span{font-size:10px;color:var(--accent)}.education h3{font-size:16px}.skills{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;border-top:1px solid var(--line);padding-top:30px;margin-top:10px}.skills h4{color:var(--accent)}.skills p{font-size:10px}.contact{background:var(--panel);padding-top:85px;padding-bottom:85px}.contact h2{font-size:clamp(32px,4vw,60px)}.contact>p:not(.eyebrow){color:var(--muted);font-size:12px}.email{display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:clamp(15px,2.4vw,34px);letter-spacing:-1px;padding:24px 0;border-bottom:1px solid #647189;margin-top:28px;color:var(--accent)}.contact-links{display:flex;gap:30px;font-size:11px;margin-top:24px}footer{padding:26px clamp(32px,5.3vw,100px);display:flex;gap:20px;justify-content:space-between;font-size:8px;color:var(--muted)}dialog{border:1px solid var(--line);border-radius:10px;background:#242b36;color:var(--text);max-width:94vw;max-height:94vh;padding:50px 20px 15px;overflow:auto}dialog::backdrop{background:#171d28ed}dialog img{display:block;max-width:85vw;max-height:74vh;object-fit:contain;margin:auto}dialog p{font-size:11px;text-align:center;color:var(--muted)}.close-lightbox{position:absolute;right:18px;top:12px;background:none;color:var(--text);border:0;font:12px var(--mono);padding:6px;cursor:pointer}body:has(dialog[open]){overflow:hidden}@media(min-width:1550px){main{margin-right:auto}.hero-grid{gap:70px}.hero-copy{max-width:550px}}@media(max-width:1100px){.sidebar{width:210px;padding:32px 24px}main{margin-left:210px}.hero-grid{gap:24px}h1{letter-spacing:-4px}.portrait figcaption{display:block}.portrait figcaption span{display:block}.actions{gap:16px;flex-wrap:wrap}.project-grid{gap:26px;grid-template-columns:1fr 1fr}.timeline article,.education{grid-template-columns:140px 1fr}.section-top{font-size:8px}.intro-footer{font-size:8px}.intro-footer>span{max-width:60%}}@media(max-width:760px){html{scroll-padding-top:90px}.sidebar{width:100%;height:auto;bottom:auto;display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:16px 20px;border-right:0;border-bottom:1px solid var(--line)}.brand{font-size:26px}.sidebar-name,.sidebar-bottom,.resume-link{display:none}nav{flex-direction:row;gap:2px}nav a{font-size:10px;padding:7px 9px;margin:0}nav a span{display:none}main{margin-left:0;padding-top:73px}.section{padding:48px 24px}.intro{min-height:auto;padding-top:20px}.section-top{font-size:8px;letter-spacing:.5px;padding-bottom:20px}.hero-grid{grid-template-columns:1fr 0.8fr;padding-top:38px;gap:20px;align-items:start}h1{font-size:60px;letter-spacing:-4px}.hero-subtitle{font-size:16px}.intro-text{font-size:11px}.portrait{align-self:start;margin-top:35px}.portrait img{height:260px;border-radius:8px}.portrait figcaption{font-size:8px}.hero-copy .actions{grid-column:1/-1}.actions{font-size:10px}.button{padding:11px 12px}.intro-footer{font-size:7px;letter-spacing:.5px}.section-heading h2{font-size:36px}.project-grid{grid-template-columns:1fr;gap:24px}.project h3{font-size:26px}.project-deck br{display:none}.result{margin-bottom:0}.project-grid figure{margin-top:0}.pcb{padding:15px}.scope-grid{gap:12px}.scope-grid figcaption{font-size:8px}.two-columns{grid-template-columns:1fr;gap:14px}.gallery img{height:220px}.timeline article,.education{grid-template-columns:1fr;gap:14px}.timeline-date{display:flex;align-items:center;gap:12px}.upcoming{margin:0}.timeline h3{font-size:20px}.skills{gap:14px}.skills p{font-size:9px}.skills h4{font-size:11px}.contact h2{font-size:37px}.email{font-size:20px}.contact-links{gap:20px;font-size:10px}footer{padding:24px;flex-wrap:wrap;font-size:8px}footer>span:nth-child(2){display:none}.section-heading{margin-bottom:40px}.project{margin-bottom:40px}}@media(max-width:450px){nav a{font-size:9px;padding:7px}.hero-grid{grid-template-columns:1fr;gap:26px}.hero-copy{display:contents}.eyebrow{margin-bottom:15px}.hero-copy>.eyebrow{margin:0}.hero-copy h1{margin:0;font-size:76px}.hero-copy .hero-subtitle{margin:0}.portrait{grid-row:4;margin:0}.portrait img{height:310px;object-position:50% 30%}.portrait figcaption{display:flex;font-size:8px}.intro-text{margin:0}.actions{margin:0}.hero-grid{padding-bottom:12px}.section-top>span:last-child{font-size:7px}.gallery{grid-template-columns:1fr}.scope-grid img{aspect-ratio:1.2}.skills{grid-template-columns:1fr}.skills p{font-size:11px}.email{font-size:16px}.contact h2{font-size:30px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important}}
/* Each destination has its own document and persistent page navigation. */
main{min-height:100vh;display:flex;flex-direction:column}main>footer{margin-top:auto}.page-title{font-size:clamp(32px,3.7vw,54px);line-height:1.25;letter-spacing:-2px;font-weight:500;margin:0 0 24px}.page-contact .contact{flex:1;min-height:calc(100vh - 75px);display:flex;flex-direction:column;justify-content:center}.page-contact .contact .page-title{font-size:clamp(32px,4vw,60px)}.page-intro .intro{min-height:calc(100vh - 75px)}.page-contact .email{width:100%}@media(max-width:760px){.page-intro .intro{min-height:calc(100vh - 145px)}.page-contact .contact{min-height:calc(100vh - 145px)}.page-title{font-size:36px}}@media(max-width:450px){.page-contact .contact .page-title{font-size:30px}}

.notices h2{font-size:22px;letter-spacing:-.5px;margin-top:40px}.notices p,.notices li{font-size:12px;color:var(--muted)}.notices a{color:var(--accent);text-decoration:underline}.license-text{white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.8 var(--mono);background:var(--panel);padding:24px;border-radius:8px;color:var(--muted)}

.project-details{margin-top:28px}.detail-heading{padding-top:20px;color:var(--accent);font-size:11px;margin-bottom:10px}

.timeline h3 a,.education h3 a{display:flex;align-items:center;gap:14px;color:var(--text)}
.timeline h3 a:hover,.education h3 a:hover{color:var(--accent)}
.experience-icon{width:36px;height:36px;flex:none;color:var(--accent)}
.education h3{font-size:20px;font-weight:500;color:var(--text)}
.page-intro .intro{justify-content:flex-start}
.page-intro .hero-grid{flex:1;align-content:center;padding-top:48px;padding-bottom:48px}
@media(max-width:760px){.experience-icon{width:30px;height:30px}.education h3{font-size:20px}}

#dash-pcb .pcb{width:100%;height:auto;max-height:380px;object-fit:contain;padding:0;background:none}
.organization-logo{width:52px;height:52px;object-fit:contain;flex:none;filter:brightness(0) saturate(100%) invert(80%) sepia(17%) saturate(665%) hue-rotate(149deg) brightness(92%) contrast(89%)}
.organization-logo.iem{filter:none}
.can-analysis{margin-top:22px}.can-analysis h4{font-size:14px;margin:28px 0 12px;color:var(--text)}

.analysis-table{width:100%;border-collapse:collapse;font-size:11px;margin:20px 0}.analysis-table th,.analysis-table td{text-align:left;border-bottom:1px solid var(--line);padding:10px 12px}.analysis-table th{color:var(--accent);font-weight:500}.analysis-table td{color:var(--muted)}
@media(max-width:760px){.organization-logo{width:40px;height:40px}.analysis-table th,.analysis-table td{padding:8px 5px;font-size:10px}}

.organization-logo.mortorq{width:96px;filter:grayscale(1) sepia(.25) hue-rotate(150deg) saturate(.6)}

.button-secondary{background:var(--panel);color:var(--text);border:1px solid var(--line);padding:12px 17px}.button-secondary:hover{background:var(--line);color:var(--text)}

.organization-logo,.organization-logo.iem,.organization-logo.mortorq{filter:none}


/* Keep original source images; the color grade is presentation-only CSS. */
.portrait img,.project img,
.zoom:hover img{filter:saturate(.65) brightness(1.08)}
#lightbox img{filter:none}
.organization-logo{filter:brightness(0) saturate(100%) invert(80%) sepia(17%) saturate(665%) hue-rotate(149deg) brightness(92%) contrast(89%)}
.organization-logo.iem{filter:none}
.organization-logo.illinois{filter:url(#illinois-nord)}
.organization-logo.mortorq{filter:grayscale(1) sepia(.25) hue-rotate(150deg) saturate(.6)}
.filter-definitions{position:absolute;overflow:hidden;pointer-events:none}


@media(max-width:760px){}

/* Baking follows the same project rhythm with a compact expandable gallery. */
.baking>p{max-width:680px}
.baking-gallery{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px 16px;margin-top:24px}
.baking-gallery figure{margin:0;min-width:0}
.baking-gallery img{display:block;width:100%;height:150px;object-fit:cover;border-radius:9px}
.baking-gallery figcaption{font-size:10px;margin-top:8px}
@media(max-width:760px){.baking-gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 12px}.baking-gallery img{height:130px}}
@media(max-width:380px){.baking-gallery img{height:105px}}

.organization-logo.spacex{filter:brightness(0) invert(1)}
.organization-logo.deere{filter:url(#deere-green)}
.organization-logo.mortorq{filter:url(#mortorq-orange)}

/* Baking thumbnail crops: first percentage = horizontal, second = vertical.
   0% = left/top, 50% = center, 100% = right/bottom.
   Add a matching class to an image in projects.html for its own crop rule. */
.baking-gallery .dessert-musketeers{object-position:50% 18%}
.baking-gallery .dessert-chocolate{object-position:50% 38%}
.dash-hero{max-height:380px;object-fit:cover}
.dash-schematics{margin-top:32px}.dash-schematics>h4{font-size:14px;color:var(--accent)}
#dash-pcb .system-diagram{margin:22px 0 30px}
#dash-pcb .system-diagram img{width:100%;height:auto;max-height:460px;object-fit:contain;background:#fff;padding:16px;filter:none}
.schematic-notes{margin:26px 0 12px}
#dash-pcb .schematic-gallery img{height:260px;object-fit:contain;background:#fff;filter:none}
@media(max-width:760px){#dash-pcb .schematic-gallery img{height:220px}}

.contact-links{flex-wrap:wrap}

/* Project narratives read vertically; supporting images remain paired. */
.page-projects .project-grid,.page-projects .two-columns{grid-template-columns:minmax(0,1fr)}
.page-projects .project-grid{gap:24px}
.page-projects .project-grid>figure{max-width:760px;width:100%}
.page-projects .project-grid>figure img{max-height:380px;object-fit:contain}
.page-projects .gallery,.page-projects .scope-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.credits-link{font-size:10px;color:var(--muted);margin-top:20px}
.math-inline{font-size:1.08em;color:var(--text)}
mjx-container{max-width:100%}
@media(max-width:760px){.credits-link{font-size:8px;margin:0;max-width:52px;line-height:1.4}}
@media(max-width:450px){.page-projects .gallery,.page-projects .scope-grid{grid-template-columns:minmax(0,1fr)}}

/* Filled photo frames: crop the original image without changing its proportions. */
.page-projects #voron .project-grid>figure,
.page-projects #analog-swerve .project-grid>figure{width:100%;max-width:none}
.page-projects #voron .zoom,
.page-projects #analog-swerve .zoom{display:block;width:100%;height:300px;overflow:hidden;padding:0;background:none}
.page-projects #voron .project-grid>figure .zoom,
.page-projects #analog-swerve .project-grid>figure .zoom{height:380px}
.page-projects #voron .zoom img,
.page-projects #analog-swerve .zoom img{display:block;width:100%;height:100%;max-width:none;max-height:none;object-fit:cover!important;padding:0;background:none}
.page-projects #analog-swerve .swerve-photo{object-position:50% 62%}
.page-projects #voron .printer{object-position:50% 42%}
#analog-swerve img.tracking-adc{object-position:50% 45%}
#analog-swerve img.servo-control{object-position:50% 58%}
#voron img.voron-motion{object-position:50% 55%}
#voron img.voron-wiring{object-position:50% 55%}
@media(max-width:760px){
 .page-projects #voron .zoom,.page-projects #analog-swerve .zoom{height:240px}
 .page-projects #voron .project-grid>figure .zoom,
 .page-projects #analog-swerve .project-grid>figure .zoom{height:300px}
}
