@font-face{font-family:'DM Sans';src:url(fonts/dm-sans-latin-wght-normal.woff2) format('woff2');font-weight:100 1000;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'DM Sans';src:url(fonts/dm-sans-latin-ext-wght-normal.woff2) format('woff2');font-weight:100 1000;font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'IBM Plex Mono';src:url(fonts/ibm-plex-mono-latin-400-normal.woff2) format('woff2');font-weight:400;font-display:swap}@font-face{font-family:'IBM Plex Mono';src:url(fonts/ibm-plex-mono-latin-500-normal.woff2) format('woff2');font-weight:500;font-display:swap}
:root{--paper:#f2f0e9;--ink:#202822;--muted:#68716a;--line:#d2d5ca;--teal:#254d43;--lime:#d2e992;--dark:#142d2a;--serif:Georgia,'Times New Roman',serif;--sans:'DM Sans',Arial,sans-serif;--mono:'IBM Plex Mono',monospace}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}a,button{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible{outline:3px solid #7b8e35;outline-offset:6px}button{color:inherit}::selection{background:var(--lime);color:var(--ink)}[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.skip{position:fixed;top:-80px;left:16px;background:var(--ink);color:white;padding:15px;z-index:10}.skip:focus{top:12px}.header{height:108px;display:flex;align-items:center;justify-content:space-between;max-width:1440px;padding:0 64px;margin:auto;border-bottom:1px solid var(--line)}.wordmark{display:flex;align-items:center;font-family:var(--serif);font-size:48px;letter-spacing:-4px;font-weight:bold;line-height:1}.logo-dot{color:#75883e}.wordmark-name{font-family:var(--sans);letter-spacing:0;font-size:14px;font-weight:650;margin-left:24px;line-height:1.5}.wordmark-name small{display:block;font-size:10px;font-weight:400;color:var(--muted)}nav{display:flex;align-items:center;gap:30px;font-size:13px}nav a{padding:10px 0}nav a:hover,.text-link:hover{color:#658135}.nav-contact{border-bottom:1px solid var(--ink);margin-left:15px}.nav-contact span{margin-left:16px}main{max-width:1440px;margin:auto}.hero{padding:46px 64px 0}.hero-eyebrow{display:flex;justify-content:space-between;align-items:center}.eyebrow,.mono{font-family:var(--mono);font-size:10px;letter-spacing:.07em;line-height:1.6}.eyebrow{display:inline-flex;gap:10px;align-items:center}.eyebrow i{height:7px;width:7px;background:#718f40;border-radius:100%}.hero-eyebrow>.mono{color:var(--muted)}h1,h2,h3,p{margin-top:0}h1,h2{letter-spacing:-.065em;font-weight:450}h1{font-size:clamp(68px,8.5vw,123px);line-height:1.03;margin:40px 0 34px;position:relative}em{font-family:var(--serif);font-weight:400;letter-spacing:-.065em}h1 em{color:var(--teal)}.hero-star{position:absolute;right:9%;bottom:3%;font-size:112px;font-family:var(--sans);color:var(--teal);font-weight:400}.hero-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:46px;padding-right:4px}.hero-bottom p{color:#566158;font-size:16px;line-height:1.65;margin:0}.hero-actions{display:flex;flex-direction:column;align-items:flex-start;gap:15px;padding-right:70px}.button{border:1px solid transparent;padding:15px 23px;display:inline-flex;align-items:center;justify-content:space-between;gap:30px;font-size:12px;line-height:1.4;transition:background .2s,transform .2s}.button:hover{transform:translateY(-2px)}.button.dark{background:var(--ink);color:var(--paper)}.button.dark:hover{background:var(--teal)}.button.outline{border-color:var(--line)}.small-note{font-size:10px;color:var(--muted);line-height:1.65}.hero-instrument{background:var(--dark);color:#cbd7cc;position:relative;overflow:hidden;min-height:290px}.instrument-caption,.instrument-footer{display:flex;align-items:center;justify-content:space-between;padding:23px 27px;position:relative;z-index:1}.instrument-caption>span:last-child{font-size:11px;color:#99afa4}.instrument-footer{padding-top:10px;border-top:1px solid #314c44}.instrument-footer>.mono{font-size:8px;color:#849c90}.instrument-button{background:none;border:0;color:var(--lime);font-size:11px;padding:8px 0}.instrument-button span{margin-left:15px}.hero-viz{height:180px}.hero-viz svg{width:100%;height:100%}.hero-edge{transition:opacity .3s ease-out}.hero-labels{transition:opacity .3s ease-out}.hero-node{transition:opacity .2s}.hero-node.hero-dim{opacity:.25}.hero-modes{display:flex;gap:18px}.hero-modes .instrument-button{color:#99afa4;border-bottom:1px solid transparent;padding:6px 0}.hero-modes .instrument-button[aria-pressed="true"]{color:var(--lime);border-bottom-color:var(--lime)}.hero-modes .instrument-button:hover{color:var(--lime)}.section{padding:100px 64px}.section-top{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:40px}.section-top h2{margin:22px 0 0}h2{font-size:62px;line-height:1.08;margin-bottom:28px}.section-top>p,.section-top>div>p{font-size:13px;line-height:1.8;color:var(--muted);margin-bottom:5px}.filters{display:flex;gap:8px;border-top:1px solid var(--line);padding:21px 0 29px}.filters button{border:1px solid var(--line);border-radius:24px;padding:9px 17px;font-size:11px;background:transparent}.filters button.active,.filters button:hover{background:var(--ink);color:var(--paper);border-color:var(--ink)}sup{font-size:8px;margin-left:5px}.project-grid{display:grid;grid-template-columns:1fr 1fr;gap:50px 30px}.project-card:nth-child(even){padding-top:55px}.project-preview{height:310px;background:var(--dark);position:relative;overflow:hidden}.graphic{height:100%;width:100%;overflow:hidden}.graphic svg{width:100%;height:100%;overflow:visible;transition:transform .7s}.project-link:hover .graphic svg{transform:scale(1.035)}
.graphic.metro .metro-halo{transform-box:fill-box;transform-origin:center}
.project-link:is(:hover,:focus-visible) .metro-halo{animation:dashboard-halo 2.4s ease-in-out infinite}.preview-label{position:absolute;bottom:17px;left:20px;font-family:var(--mono);font-size:7px;letter-spacing:.04em;color:#9db3a7}.open-project{position:absolute;right:18px;top:18px;width:30px;height:30px;border-radius:50%;border:1px solid #5d7569;color:#d9e6d5;display:grid;place-items:center;transition:background .2s}.project-link:hover .open-project{background:var(--lime);color:var(--dark)}.project-meta{display:flex;justify-content:space-between;font-family:var(--mono);font-size:9px;color:var(--muted);padding:22px 0 13px}.project-card h3{font-size:28px;font-weight:450;letter-spacing:-.04em;margin-bottom:12px}.project-card p{font-size:12px;color:var(--muted);line-height:1.7;max-width:400px;margin-bottom:14px}.project-name{font-size:10px;display:flex;gap:18px;align-items:center}.project-card:has(.graphic.light-dashboard) .project-preview{background:#e4e5dc}.project-card:has(.graphic.light-dashboard) .preview-label{color:#667168}.project-card:has(.graphic.matrix) .project-preview{background:#e2e5d9}.project-card:has(.graphic.matrix) .preview-label{color:#667168}.project-card:has(.graphic.light-dashboard) .open-project,.project-card:has(.graphic.matrix) .open-project{color:var(--teal);border-color:#8d9d8e}.approach{background:#e7e9df;display:grid;grid-template-columns:1fr 1fr;gap:75px;padding-bottom:0}.approach-sticky{position:sticky;top:40px;align-self:start;padding-bottom:40px}.approach h2{font-size:47px;margin-top:24px}.approach-sticky #story-viz{height:250px;max-width:440px}.approach-sticky svg{width:100%;height:100%}.story-caption{color:var(--muted);font-size:8px}.story-steps article{min-height:430px;padding:85px 0 60px;border-top:1px solid #c8cec0;display:flex;flex-direction:column;justify-content:center}.story-steps h3{font-size:32px;line-height:1.2;letter-spacing:-.045em;font-weight:450;margin:24px 0 20px}.story-steps p{font-size:13px;line-height:1.85;color:var(--muted);max-width:350px}.story-steps .mono{color:#567052}.text-link{font-size:11px;display:inline-flex;align-items:center;gap:28px;border-bottom:1px solid var(--line);padding:12px 0}.paper{display:grid;grid-template-columns:160px 1fr 120px 24px;gap:20px;border-top:1px solid var(--line);padding:30px 0;align-items:center}.paper:last-child{border-bottom:1px solid var(--line)}.paper .mono{font-size:9px;color:var(--muted)}.paper h3{font-size:18px;font-weight:450;letter-spacing:-.025em;line-height:1.4;margin:0}.paper-type{font-size:10px;color:var(--muted)}.paper>span:last-child{font-size:23px;transition:transform .2s}.paper:hover>span:last-child{transform:translate(3px,-3px)}.experiment{background:var(--dark);color:var(--paper);display:grid;grid-template-columns:1fr 1.2fr;gap:70px}.experiment h2{font-size:49px;margin-top:22px}.experiment p{font-size:13px;line-height:1.8;color:#b0c0b4;max-width:330px}.experiment .small-note{font-size:10px;color:#8da595}.experiment .text-link{border-color:#53695c}.explorer{border:1px solid #496055;padding:22px;background:#1c3731;align-self:center}.explorer-top{display:flex;align-items:center;justify-content:space-between;gap:10px}.explorer-top .mono{font-size:8px}.demo-pill{border:1px solid #627b62;color:var(--lime);font-family:var(--mono);font-size:6px;letter-spacing:.06em;padding:5px 7px;border-radius:3px}.demo-filters{display:flex;gap:7px;margin:24px 0}.demo-filters button{padding:7px 9px;border:1px solid #496055;background:transparent;color:#b0c0b4;border-radius:3px;font-size:9px}.demo-filters button.active{background:var(--lime);color:var(--dark);border-color:var(--lime)}.explorer-count{display:flex;align-items:center;gap:16px}.explorer-count strong{font-size:51px;letter-spacing:-.06em;font-weight:450;color:var(--lime)}.explorer-count>span{font-size:10px;line-height:1.8}.explorer-count>span span{font-size:8px;color:#a1b5a5}#demo-chart{width:100%;display:block}#demo-chart rect{transition:height .3s,y .3s}.demo-records{border-top:1px solid #496055}.demo-row{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid #385347;font-family:var(--mono);font-size:8px;color:#a9bdad}.demo-row b{font-weight:400;color:var(--paper)}.about{display:grid;grid-template-columns:1.05fr 1fr;gap:70px}.about h2{font-size:47px;margin-top:24px}.about-body{padding-top:36px}.about-body p{font-size:13px;line-height:1.85;color:var(--muted)}.about-body .about-lead{font-size:22px;line-height:1.5;color:var(--ink);letter-spacing:-.035em}.capabilities{display:flex;flex-wrap:wrap;gap:8px;padding:13px 0 25px}.capabilities span{font-size:9px;border:1px solid var(--line);padding:8px 11px}.cv-links{display:flex;flex-wrap:wrap;gap:10px}.contact{border-top:1px solid var(--line);position:relative;padding-top:65px;padding-bottom:80px}.contact h2{font-size:85px;margin:30px 0}.contact h2 em{color:var(--teal)}.contact-email{font-size:20px;letter-spacing:-.03em;border-bottom:1px solid var(--ink);padding-bottom:12px;display:inline-flex;gap:75px}.contact-location{font-size:10px;color:var(--muted);position:absolute;right:64px;bottom:82px}footer{max-width:1440px;margin:auto;display:grid;grid-template-columns:70px 1fr 1fr 1fr;align-items:center;gap:30px;padding:40px 64px;border-top:1px solid var(--line);font-size:10px;line-height:1.8;color:var(--muted)}.footer-mark{font: bold 40px var(--serif);letter-spacing:-4px;color:var(--ink)}footer>div{display:flex;gap:22px}.copyright{text-align:right;font-size:9px}.case-page{padding:45px 64px 0}.back-link{font-size:12px;color:var(--muted)}.case-heading{padding-top:50px;max-width:1000px}.case-heading h1{font-size:85px;line-height:1.05;margin:24px 0}.case-heading>p{max-width:650px;color:var(--muted);font-size:20px;line-height:1.6}.case-facts{display:grid;grid-template-columns:1fr 1fr 1fr;border-top:1px solid var(--line);padding:28px 0;gap:35px;margin-top:40px}.case-facts p{font-size:12px;line-height:1.7;margin:10px 0 0;color:var(--muted)}.case-visual{height:480px;position:relative;background:var(--dark);overflow:hidden}.case-visual .graphic{max-width:900px;margin:auto}.fact-strip{display:grid;grid-template-columns:repeat(3,1fr);padding:38px 0;border-bottom:1px solid var(--line)}.fact-strip div{display:flex;gap:15px;align-items:center;justify-content:center;border-right:1px solid var(--line)}.fact-strip div:last-child{border:0}.fact-strip strong{font-size:34px;font-weight:450;letter-spacing:-.045em}.fact-strip span{font-size:10px;color:var(--muted)}.case-body{max-width:720px;margin:0 auto;padding:30px 0 70px}.case-body section{padding:42px 0;border-bottom:1px solid var(--line)}.case-body h2{font-size:38px;margin:17px 0 20px}.case-body p{font-size:16px;line-height:1.9;color:#5d685e}.case-body .text-link{margin-left:20px}.next-project{background:#e5e8dc;padding:45px;margin:0 -64px;display:flex;flex-direction:column;gap:25px}.next-project>a{font-size:43px;letter-spacing:-.045em;display:flex;justify-content:space-between}.case-page .preview-label{font-size:8px}.map .track{stroke-dasharray:6 5}.project-link:hover .track{animation:track 4s linear infinite}@keyframes track{to{stroke-dashoffset:-60}}@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation-duration:.25s}
@media(min-width:1600px){body{border-left:1px solid var(--line);border-right:1px solid var(--line);max-width:1440px;margin:auto}}
@media(max-width:1000px){.header{padding:0 32px}.hero{padding:35px 32px 0}.section{padding:75px 32px}.hero-actions{padding-right:0}.hero-star{right:5%;font-size:90px}.section-top p br{display:none}.section-top>p,.section-top>div:last-child{max-width:280px}h2{font-size:50px}.project-preview{height:260px}.project-card h3{font-size:24px}.approach{gap:35px;padding-bottom:0}.approach h2,.about h2{font-size:38px}.experiment{gap:30px}.experiment h2{font-size:40px}.paper{grid-template-columns:120px 1fr 90px 20px;gap:12px}.paper h3{font-size:16px}.about{gap:35px}.contact-location{right:32px}.case-page{padding:36px 32px 0}.case-heading h1{font-size:70px}.next-project{margin:0 -32px}footer{padding:35px 32px;gap:20px}footer>div{gap:12px}}
@media(max-width:700px){html{scroll-padding-top:24px}.header{height:82px;padding:0 22px}.wordmark{font-size:40px}.wordmark-name{margin-left:15px;font-size:11px}.wordmark-name small{display:none}nav{gap:17px;font-size:11px}.nav-contact{margin-left:0}.nav-contact span{display:none}nav a[href='/#research']{display:none}.hero{padding:28px 22px 0}.hero-eyebrow>.mono{display:none}.hero h1{font-size:clamp(51px,10.7vw,75px);margin:30px 0;letter-spacing:-.07em}.hero-star{font-size:58px;right:1%;bottom:4%}.hero-bottom{display:block;margin-bottom:30px}.hero-bottom p{font-size:14px}.hero-actions{margin-top:24px;gap:13px}.button{padding:13px 18px}.instrument-caption,.instrument-footer{padding:16px}.instrument-caption>span:last-child{display:none}.hero-viz{height:145px}.hero-instrument{min-height:225px}.instrument-footer>.mono{font-size:6px;max-width:90px}.instrument-button{font-size:9px}.instrument-button span{margin-left:5px}.section{padding:65px 22px}h2{font-size:43px}.section-top{display:block;margin-bottom:25px}.section-top h2{margin-top:18px}.section-top>p,.section-top>div:last-child{max-width:none;margin-top:22px}.section-top p br{display:none}.filters{gap:7px;flex-wrap:wrap;padding:18px 0 25px}.filters button{padding:8px 12px;font-size:10px}.project-grid{grid-template-columns:1fr;gap:34px}.project-card:nth-child(even){padding-top:0}.project-preview{height:270px}.project-card h3{font-size:27px}.project-card p{font-size:13px}.project-meta{padding-top:18px}.approach{display:block;padding-bottom:0}.approach-sticky{position:relative;top:auto;padding-bottom:25px}.approach h2{font-size:40px}.approach-sticky #story-viz{height:200px;margin:auto}.story-steps article{min-height:0;padding:32px 0}.story-steps h3{font-size:28px;margin-top:18px}.story-steps h3 br{display:none}.story-steps p{max-width:none}.paper{grid-template-columns:1fr 20px;gap:12px;padding:25px 0}.paper .mono{grid-column:1}.paper h3{grid-column:1;font-size:18px}.paper h3 br{display:none}.paper-type{grid-column:1}.paper>span:last-child{grid-column:2;grid-row:2}.experiment{display:block}.experiment h2{font-size:43px}.experiment-intro p{max-width:none}.explorer{margin-top:30px;padding:17px}.explorer-top .mono{font-size:7px}.demo-filters{gap:6px}.demo-filters button{font-size:8px;padding:7px 8px}.about{display:block}.about h2{font-size:41px}.about-body{padding-top:0}.about-body p{font-size:14px}.about-body .about-lead{font-size:23px}.contact h2{font-size:59px}.contact-email{font-size:18px;gap:35px}.contact-location{position:static;display:block;margin-top:30px;font-size:9px}footer{padding:30px 22px;grid-template-columns:50px 1fr;gap:20px}footer>div{grid-column:1/3;justify-content:space-between;order:3}.copyright{text-align:left;font-size:8px;grid-column:2}.footer-mark{align-self:start;grid-row:1/3}.case-page{padding:28px 22px 0}.case-heading{padding-top:35px}.case-heading h1{font-size:54px}.case-heading>p{font-size:18px}.case-facts{grid-template-columns:1fr;gap:20px;margin-top:30px}.case-facts p{margin-top:4px}.case-visual{height:300px}.case-page .preview-label{font-size:6px;right:15px;left:15px}.fact-strip{padding:25px 0;gap:12px}.fact-strip div{display:block;padding-right:10px}.fact-strip strong{font-size:28px;display:block}.fact-strip span{font-size:8px}.case-body{padding:10px 0 40px}.case-body section{padding:30px 0}.case-body h2{font-size:34px}.case-body p{font-size:15px}.case-body .text-link{margin:15px 0 0}.next-project{padding:30px 22px;margin:0 -22px}.next-project>a{font-size:32px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}

.year-filters{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 18px}.year-filters button,.demo-more,#demo-reset{border:1px solid #60796a;background:transparent;color:#c8d9bd;padding:9px 10px;font-size:10px;min-height:36px}.year-filters button.active{background:#d2e992;color:#142d2a;border-color:#d2e992}.demo-selection-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;font-size:10px;color:#c8d9bd}.demo-more{margin-top:15px;width:100%}.demo-empty{font-size:12px}.demo-records{max-height:340px;overflow:auto}.year-filters button:hover,.demo-more:hover,#demo-reset:hover{border-color:#d2e992}button[hidden]{display:none}

/* Scannable case studies and direct manipulation of linked views. */
.project-card .project-role{font-size:11px;color:var(--ink);margin:0 0 16px}
.project-role>span{color:var(--muted);margin-right:7px}
.case-nav{display:flex;flex-wrap:wrap;gap:8px 20px;padding:0 0 24px;font-size:12px}
.case-nav a{border-bottom:1px solid var(--line);padding:8px 0}
.case-nav a:hover{border-color:var(--teal);color:var(--teal)}
.case-body section{scroll-margin-top:28px}
.case-body section:focus-visible{outline:2px solid var(--teal);outline-offset:10px}
.demo-guide{border-top:1px solid #496055;padding:20px 0 10px;margin-top:24px}
.demo-guide>div{display:flex;flex-wrap:wrap;gap:7px;margin:12px 0}
.demo-guide button{border:1px solid #60796a;background:transparent;color:#c8d9bd;padding:10px;font-size:11px;min-height:40px}
.demo-guide button[aria-pressed="true"]{background:var(--lime);border-color:var(--lime);color:var(--dark)}
.experiment #demo-guide-note{min-height:6em;font-size:12px}
.experiment .chart-help{font-size:10px;max-width:none;margin:8px 0 16px}
.demo-bar{cursor:pointer;outline:none}
.demo-bar .bar-hit{stroke:transparent;stroke-width:2;rx:3}
.demo-bar:hover .bar-hit{stroke:#789267}
.demo-bar:focus-visible .bar-hit{stroke:var(--lime)}
#demo-chart .bar-value{pointer-events:none;transition:height .25s ease-out,y .25s ease-out,fill .15s ease-out}
.demo-bar text{pointer-events:none}
.demo-filters button,.year-filters button{min-height:40px}
.project-link:focus-visible .open-project{background:var(--lime);color:var(--dark)}
.project-link:focus-visible{outline-offset:8px}
@media(prefers-reduced-motion:reduce){
 .hero-node,.hero-edge,.hero-group-labels,#demo-chart .bar-value{transition:none!important}
}

/* Standalone MDIR dashboard, embedded without portfolio style coupling. */
.dashboard-study{margin:30px 0 55px;scroll-margin-top:24px}.dashboard-study-heading{display:flex;align-items:center;justify-content:space-between;gap:28px;margin-bottom:22px}.dashboard-study-heading h2{font-size:clamp(24px,3vw,38px);margin:10px 0}.dashboard-study-heading p{font-size:13px;max-width:660px;line-height:1.7}.dashboard-study-heading .button{white-space:nowrap;flex-shrink:0}.dashboard-frame{display:block;width:100%;height:900px;border:1px solid #d3ddd7;border-radius:8px;background:#f4f6f5}.dashboard-frame:focus-visible{outline:3px solid #254d43;outline-offset:5px}.experiment-intro>.text-link{display:table;margin-top:12px}@media(max-width:760px){.dashboard-study-heading{display:block}.dashboard-study-heading .button{margin-top:16px}.dashboard-frame{height:1000px}}

/* Motion inside the incident thumbnail follows the linked views it depicts. */
.graphic.dashboard .dashboard-trend{stroke-dasharray:210}
.graphic.dashboard .dashboard-halo,.graphic.dashboard .dashboard-endpoint{transform-box:fill-box;transform-origin:center}
.graphic.dashboard .dashboard-endpoint,.graphic.dashboard .dashboard-current rect,.graphic.dashboard .dashboard-points circle{transition:transform .5s ease,fill .5s ease,stroke .5s ease}
.project-link:is(:hover,:focus-visible) .dashboard-link{animation:track 4s linear infinite}
.project-link:is(:hover,:focus-visible) .dashboard-halo{animation:dashboard-halo 2.4s ease-in-out infinite}
.project-link:is(:hover,:focus-visible) .dashboard-trend{animation:dashboard-trace .9s ease-out both}
.project-link:is(:hover,:focus-visible) .dashboard-endpoint{transform:scale(1.45)}
.project-link:is(:hover,:focus-visible) .dashboard-points circle:nth-child(3){fill:#d2e992;stroke:#d2e992}
.project-link:is(:hover,:focus-visible) .dashboard-current rect{fill:#ecf4b4}
.project-link:is(:hover,:focus-visible) .dashboard-current rect:nth-child(2){transition-delay:.13s}
@keyframes dashboard-halo{50%{opacity:.35;transform:scale(1.2)}}
@keyframes dashboard-trace{from{stroke-dashoffset:210}to{stroke-dashoffset:0}}
.project-card:has(.graphic.light-dashboard) .project-preview{background:var(--dark)}
.project-card:has(.graphic.light-dashboard) .preview-label{color:#9db3a7}
.project-card:has(.graphic.light-dashboard) .open-project{color:#d9e6d5;border-color:#5d7569}
.project-card:has(.graphic.light-dashboard) .project-link:is(:hover,:focus-visible) .open-project{color:var(--dark)}

/* MDIR mirrors project 03: light sage, forest and muted olive. */
.project-card:has(.graphic.light-dashboard) .project-preview{background:#e2e5d9}
.project-card:has(.graphic.light-dashboard) .preview-label{color:#667168}
.project-card:has(.graphic.light-dashboard) .open-project{color:var(--teal);border-color:#8d9d8e}
.project-card:has(.graphic.light-dashboard) .project-link:is(:hover,:focus-visible) .open-project{background:#a7b66f;color:#173b37}
.project-link:is(:hover,:focus-visible) .dashboard-points circle:nth-child(3){fill:#416b55;stroke:#416b55}
.project-link:is(:hover,:focus-visible) .dashboard-current rect{fill:#a7b66f}

/* Card styles follow the illustration (light or dark), not the card's position; backgrounds run past the
   illustration's edges so any frame shape is filled. */
/* Screens of a project's running application (invented data), a column of captioned figures. */
.case-screens{margin:30px 0 55px;scroll-margin-top:24px}.case-screens figure{margin:0 0 34px}.case-screens img{display:block;width:100%;height:auto;border:1px solid var(--line);background:#fff}.case-screens a:focus-visible img{outline:3px solid var(--teal);outline-offset:3px}.case-screens figcaption{font-size:13px;line-height:1.6;color:var(--muted);margin-top:10px;max-width:720px}

/* Hero: both actions together; the about section's experience and education as a scannable record. */
.hero-buttons{display:flex;flex-wrap:wrap;gap:10px}.experience{margin:6px 0 28px}.experience>.mono{display:block;font-size:9px;color:var(--muted);margin:18px 0 6px}.experience ol{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}.experience li{display:grid;grid-template-columns:86px 1fr;gap:2px 14px;padding:9px 0;border-bottom:1px solid var(--line);font-size:13px}.experience li span{font-family:var(--mono);font-size:10px;color:var(--muted);grid-row:span 2;padding-top:2px}.experience li b{font-weight:500;color:var(--ink)}.experience li em{font:400 12px var(--sans);letter-spacing:0;color:var(--muted)}

/* Research: focus areas, then the full record as compact rows. */
.research-links{display:flex;flex-wrap:wrap;gap:6px 18px}.focus{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin:10px 0 46px}.focus>div{border-top:2px solid var(--ink);padding-top:12px}.focus .mono{font-size:8px;color:var(--muted)}.focus h3{font-size:17px;font-weight:500;letter-spacing:-.02em;margin:8px 0 6px}.focus p{font-size:12px;line-height:1.6;color:var(--muted);margin:0}.pub-group{margin-bottom:40px}.pub-head{display:flex;justify-content:space-between;align-items:baseline;gap:30px;margin-bottom:8px}.pub-head .mono{font-size:9px;color:var(--muted);white-space:nowrap}.pub-head p{font-size:12px;color:var(--muted);max-width:620px;margin:0;text-align:right}.pubs{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}.pub{display:grid;grid-template-columns:70px 1fr 130px;gap:18px;padding:16px 0;border-bottom:1px solid var(--line);align-items:baseline}.pub .mono{font-size:10px;color:var(--muted)}.pub h3{font-size:16px;font-weight:450;letter-spacing:-.02em;line-height:1.4;margin:0 0 4px}.pub h3 a{color:inherit;text-decoration:none;border-bottom:1px solid var(--line)}.pub h3 a:hover,.pub h3 a:focus-visible{border-color:var(--teal);color:var(--teal)}.pub p{font-size:12px;line-height:1.6;color:var(--muted);margin:0}.pub p b{color:var(--ink);font-weight:500}.pub-type{font-size:10px;color:var(--muted);text-align:right}@media(max-width:900px){.focus{grid-template-columns:1fr 1fr}.pub{grid-template-columns:52px 1fr}.pub-type{grid-column:2;text-align:left}.pub-head{display:block}.pub-head p{text-align:left;margin-top:6px}}
/* Presentations: the list and its controls on the left, the map larger on the right, in the section's dark teal. */
.presentations{grid-template-columns:minmax(0,.85fr) minmax(0,1.3fr);align-items:start}.presentations .explorer{align-self:start;position:sticky;top:24px}.g-research{--c:#d2e992}.g-cuiis{--c:#7fc3a7}.g-policy{--c:#e3c27a}.pres-groups{flex-wrap:wrap}.pres-groups sup{font-size:7px;margin-left:2px}.pres-groups .sw{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;background:var(--c)}.pres-hint{font-size:11px!important;color:#8da595!important;margin:-8px 0 14px}.pres-reset{background:none;border:0;border-bottom:1px solid var(--lime);color:var(--lime);font-size:11px;padding:0;margin-left:6px;cursor:pointer}.pres-list{list-style:none;margin:0;padding:0;border-top:1px solid #496055;max-width:none}.pres-list li{display:grid;grid-template-columns:54px 1fr;gap:12px;padding:10px 0 10px 12px;border-bottom:1px solid #2f4a42;border-left:3px solid var(--c);font-size:12px}.pres-list .mono{font-size:9px;color:var(--c)}.pres-list b{display:block;font-weight:500;color:var(--paper);line-height:1.45}.pres-list li span:not(.mono){display:block;color:#a1b5a5;font-size:11px;line-height:1.5;margin-top:2px}.pres-map{margin:16px 0 8px}.pres-map svg{width:100%;height:auto;display:block}.pres-map .sea{fill:#16302b}.pres-map .graticule{fill:none;stroke:#28453d;stroke-width:.5}.pres-map .land{fill:#23413a;stroke:#16302b;stroke-width:.7;transition:fill .25s}.pres-map .land.visited{fill:#33584a}.pres-map .land.visited.on{fill:#4a7a62}.pres-map .inset-box{fill:#16302b;stroke:#496055}.pres-map .inset-label{fill:#849c90;font:500 7px var(--mono);letter-spacing:.08em}.pres-dot{cursor:pointer;transition:opacity .25s}.pres-dot.off{opacity:.22}.pres-dot circle:not(.ring),.pres-dot path{stroke:#16302b;stroke-width:1}.pres-dot .ring{fill:none;stroke:var(--paper);stroke-width:1.2;opacity:0;transition:opacity .2s}.pres-dot.sel .ring,.pres-dot.hl .ring{opacity:1}.pres-dot text{fill:#e6efe0;font:600 7.5px var(--mono);letter-spacing:.05em;paint-order:stroke;stroke:#16302b;stroke-width:3px;stroke-linejoin:round}.pres-source{font-size:9px!important;color:#7f9b8b!important;margin:0;max-width:none!important}@media(max-width:900px){.presentations{grid-template-columns:1fr}.presentations .explorer{position:static}}
/* The typed headline: one word on one line, the line's height kept while it empties; a caret blinks after it. */
.typed.rotating{display:block;min-height:1.03em;white-space:nowrap}.type-word.em{font-family:var(--serif);font-style:italic;font-weight:400;color:var(--teal)}.type-word::after{content:'';display:inline-block;width:.05em;height:.78em;margin-left:.05em;vertical-align:-.04em;background:var(--teal);animation:caret .9s steps(1) infinite}.typed.paused .type-word::after{animation:none}@keyframes caret{50%{opacity:0}}.hero-eyebrow-end{display:flex;align-items:center;gap:18px}.type-pause{background:none;border:1px solid var(--line);border-radius:3px;padding:5px 9px;font:500 9px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);cursor:pointer}.type-pause:hover,.type-pause:focus-visible{color:var(--ink);border-color:var(--muted)}
/* Hover motion for cards 04 and 05, in the spirit of 01–03: Trig's agents propose in turn down to your decision;
   the survey matrix ripples column by column. Reduced motion turns both off (see the rule above). */
.graphic.trig .trig-contour,.graphic.trig .trig-you,.graphic.matrix .matrix-dot{transform-box:fill-box;transform-origin:center}
.graphic.trig .trig-contour{transition:transform .6s ease}
.graphic.trig .trig-step,.graphic.trig .trig-light{transition:fill .35s ease,stroke .35s ease;transition-delay:calc(var(--d)*.16s)}
.project-link:is(:hover,:focus-visible) .trig-contour{transform:scale(1.06)}
.project-link:is(:hover,:focus-visible) .trig-step{fill:#24493f;stroke:#cfdf94}
.project-link:is(:hover,:focus-visible) .trig-light{fill:#cfdf94}
.project-link:is(:hover,:focus-visible) .trig-decide{animation:trig-decide 1.6s .7s ease-in-out infinite}
.project-link:is(:hover,:focus-visible) .trig-link{animation:track 3s linear infinite}
.project-link:is(:hover,:focus-visible) .trig-you{animation:dashboard-halo 2.4s ease-in-out infinite}
@keyframes trig-decide{50%{fill:#ecf4b4;stroke:#ecf4b4}}
.project-link:is(:hover,:focus-visible) .matrix-dot{animation:matrix-wave 1.8s ease-in-out infinite;animation-delay:calc(var(--d)*.12s)}
@keyframes matrix-wave{0%,100%{transform:scale(1)}40%{transform:scale(1.28)}}
/* 404 page */
.not-found{min-height:60vh;padding:120px 0 90px;max-width:760px}.not-found h1{margin:26px 0 22px}.not-found p{font-size:17px;line-height:1.7;color:var(--muted);margin-bottom:30px}
