@font-face{font-family:Iosevka;src:url('assets/fonts/iosevka-latin-400-normal.woff2') format('woff2');font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:Iosevka;src:url('assets/fonts/iosevka-latin-400-italic.woff2') format('woff2');font-style:italic;font-weight:400;font-display:swap}
@font-face{font-family:Iosevka;src:url('assets/fonts/iosevka-latin-600-normal.woff2') format('woff2');font-style:normal;font-weight:600;font-display:swap}
@font-face{font-family:Iosevka;src:url('assets/fonts/iosevka-latin-700-normal.woff2') format('woff2');font-style:normal;font-weight:700;font-display:swap}
@font-face{font-family:Iosevka;src:url('assets/fonts/iosevka-latin-700-italic.woff2') format('woff2');font-style:italic;font-weight:700;font-display:swap}
:root{color-scheme:dark;--bg:#1e1e1e;--panel:#252526;--border:#454545;--text:#e4e4e4;--muted:#b5b5b5;--focus:#dadada}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:2rem}body{margin:0;background:var(--bg);color:var(--text);font-family:Iosevka,monospace;font-size:18px;line-height:1.65;font-synthesis:none}a{color:inherit;text-underline-offset:5px}a:hover{color:white}a:focus-visible,summary:focus-visible{outline:2px solid var(--focus);outline-offset:6px}button,input{font:inherit}.skip{position:absolute;left:1rem;top:-5rem;background:#fff;color:#111;padding:.5rem}.skip:focus{top:1rem;z-index:10}
.site-header,main,.site-footer{width:min(1160px,calc(100% - 48px));margin:auto}.site-header{display:flex;justify-content:space-between;align-items:center;gap:1.5rem;padding:28px 0;border-bottom:1px solid var(--border)}.brand{font-weight:700;text-decoration:none;letter-spacing:.03em}.site-header nav{display:flex;gap:1.5rem;flex-wrap:wrap;font-size:16px}.site-header nav a{text-decoration:none;color:var(--muted)}.site-header nav a[aria-current]{color:white;text-decoration:underline}
.intro{padding:80px 0 48px;max-width:850px}.eyebrow,.project-label{font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.12em;font-size:13px}h1{font-size:clamp(42px,6vw,72px);font-weight:700;line-height:1.08;letter-spacing:-.025em;margin:16px 0 28px}h1 em{font-weight:700}p{margin:0 0 1.1rem}h2{font-weight:700;font-size:clamp(27px,3vw,38px);line-height:1.18;margin:12px 0 24px;letter-spacing:-.015em}h3{font-weight:700;font-style:italic;font-size:21px;line-height:1.3;margin:28px 0 12px}strong{font-weight:700}em{font-style:italic}.intro p:not(.eyebrow){max-width:72ch;color:var(--muted)}.contact-links{display:flex;gap:1.5rem;margin-top:24px;flex-wrap:wrap;font-size:16px}
.project-index{border-top:1px solid var(--border);border-bottom:1px solid var(--border);display:grid;grid-template-columns:repeat(3,1fr);gap:16px 28px;padding:24px 0;margin-bottom:48px;font-size:16px}.project-index a{text-decoration:none}.project-index a:hover{text-decoration:underline}.project-index span{color:#9d9d9d;padding-right:10px}.project-collection{display:grid;gap:32px}.project-card{border:1px solid var(--border);background:var(--panel);border-radius:6px;padding:clamp(22px,4vw,48px);scroll-margin-top:24px}.project-card>p,.project-card details p{max-width:83ch}.project-tools{display:flex;flex-wrap:wrap;gap:8px;list-style:none;padding:0;margin:20px 0 28px}.project-tools li{border:1px solid #535353;border-radius:3px;padding:3px 10px;font-size:14px;color:#ccc}.metrics{display:flex;gap:48px;flex-wrap:wrap;margin:28px 0}.metrics strong{display:block;font-size:32px;line-height:1.2}.metrics span{font-size:14px;color:var(--muted)}
figure{margin:28px 0}figure img{display:block;width:100%;height:auto;border-radius:3px;background:#fff}.map-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.map-grid figure{margin:12px 0}.main-map{max-width:740px;margin-inline:auto}.project-figures{display:grid;gap:12px}figcaption,.project-credit{font-size:14px;color:var(--muted);line-height:1.6;margin-top:12px}.figure-link{display:block}.figure-link:hover img{outline:1px solid #aaa}.figure-link:focus-visible{outline-offset:5px}details{border-top:1px solid var(--border);margin-top:28px;padding-top:12px}summary{font-weight:600;font-size:17px;cursor:pointer;padding:12px 0}details[open] summary{margin-bottom:16px}li{margin-bottom:.4rem}ol{padding-left:24px}.note{border-left:2px solid #777;padding-left:18px;color:var(--muted);font-size:16px}.about{padding:72px 0 48px;max-width:850px}.about p{color:var(--muted)}.site-footer{border-top:1px solid var(--border);padding:28px 0 40px;display:flex;justify-content:space-between;gap:16px;font-size:14px;color:var(--muted)}
@media(max-width:700px){.site-header,main,.site-footer{width:calc(100% - 32px)}.site-header{align-items:flex-start;flex-direction:column;gap:16px}.site-header nav{gap:20px}.intro{padding:48px 0 32px}.project-index{grid-template-columns:1fr 1fr;font-size:15px;gap:16px}.map-grid{grid-template-columns:1fr}.project-card{padding:22px 18px}body{font-size:17px}.metrics{gap:24px}.site-footer{flex-wrap:wrap}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* Dynamic meteorology: original scientific animations and plot gallery. */
.animation-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 24px}.animation-figure{min-width:0;margin:0 0 16px}.animation-figure h3{font-size:19px;min-height:2.6em}.animation-controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:12px;font-size:14px}.animation-controls button{background:#383838;color:#eee;border:1px solid #777;border-radius:3px;padding:6px 12px;cursor:pointer;font:inherit}.animation-controls button:hover{background:#484848}.animation-controls button:focus-visible{outline:2px solid white;outline-offset:4px}.animation-controls [hidden]{display:none}@media(max-width:800px){.animation-grid{grid-template-columns:1fr}.animation-figure h3{min-height:0}}
