:root{--text:var(--ink);--text-muted:var(--muted);--accent:var(--forest);--border:var(--rule);--bg:var(--paper);--bg-alt:#e9eee6;--text-primary:var(--ink);--text-secondary:var(--muted)}
[hidden],.hidden{display:none!important}.container{max-width:1280px;margin-inline:auto;padding-inline:var(--space)}.container--sm{max-width:930px}.page-header{padding:72px 0 48px;border-bottom:1px solid var(--rule)}.page-header .container{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:42px;align-items:end}.page-header h1{font-size:clamp(42px,5.2vw,72px);letter-spacing:-.035em;overflow-wrap:anywhere}.page-header-desc{font-size:clamp(19px,1.7vw,24px);line-height:1.45;max-width:42ch;color:var(--muted)}.section{padding:58px 0}.section+.section{border-top:1px solid var(--rule)}.section p{max-width:73ch}.section-title{font-size:clamp(28px,3vw,42px);letter-spacing:-.025em;margin-bottom:24px;max-width:30ch}.section h3{font-size:25px;margin-bottom:12px}.section-lead{font-size:21px;line-height:1.5;margin-bottom:30px;color:var(--muted)}.article-date{grid-column:1/-1;font-size:15px;color:var(--muted)}.page-header:has(.article-date) .container{grid-template-columns:1fr;gap:18px}.page-header:has(.article-date) h1{max-width:23ch}
.rich-text,.rich-content{max-width:73ch}.rich-text>*+*,.rich-content>*+*{margin-top:1em}.rich-content h2,.rich-text h2{font-size:32px;margin-top:1.7em}.rich-content h3{font-size:25px;margin-top:1.5em}.rich-content img{margin:28px 0;max-height:700px;object-fit:contain;object-position:left}.rich-content iframe{max-width:100%}.rich-content pre{overflow:auto}.rich-content table{display:block;overflow:auto}.text-muted,.meta-line,.profile-status,.profile-note,.project-status,.project-stack{color:var(--muted)}.meta-line,.profile-status,.project-status{font-size:15px;line-height:1.5}.meta-line{margin-bottom:20px}.profile-note{border-top:1px solid var(--rule);padding-top:24px;margin-top:32px;font-size:16px;max-width:80ch}.profile-kicker,.profile-status{font-size:15px;letter-spacing:0;text-transform:none}.profile-kicker{margin-bottom:16px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:12px;padding:11px 20px;min-height:46px;border:1px solid #71847a;border-radius:8px;background:transparent;color:var(--forest);text-decoration:none;font-size:16px;line-height:1.3;text-align:center}.btn:hover{background:#e0e9dc}.btn--primary{background:var(--forest);border-color:var(--forest);color:var(--paper)}.btn--primary:hover{background:#285b43}.btn:disabled,button:disabled{opacity:.55;cursor:default}.profile-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:28px}.text-action{display:inline-flex;align-items:center;gap:16px;margin-top:22px;text-decoration:underline}.card{padding:28px 0;border-bottom:1px solid var(--rule)}.card-label{font-size:15px;color:var(--muted);margin-bottom:12px}.card-title{font-size:32px;margin-bottom:18px}.project-card:first-of-type{border-top:1px solid var(--rule)}.project-card .card-label{margin-top:0}.project-card h2{font-size:30px;max-width:35ch}.split-panel{display:grid;grid-template-columns:1.4fr 1fr;gap:60px}.method-stack{border-top:1px solid var(--ink)}.method-stack>div{padding:18px 0;border-bottom:1px solid var(--rule);display:grid;grid-template-columns:110px 1fr;gap:24px}.method-stack strong{font-weight:400;color:var(--muted)}.grid-3,.skills-grid,.profile-skills,.profile-route-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:32px}.snapshot-card,.skill-group,.profile-route,.profile-skills>div{border-top:1px solid var(--rule);padding-top:20px;min-width:0}.skill-tags{line-height:1.85}.skill-tag{display:inline}.skill-tag:not(:last-child)::after{content:' · ';color:#768175}.timeline-item{display:grid;grid-template-columns:180px minmax(0,1fr);gap:38px;padding:28px 0;border-bottom:1px solid var(--rule)}.timeline-date{font-size:16px;color:var(--muted)}.timeline-content h3{font-size:26px}.timeline-content .org{display:block;color:var(--muted);margin:8px 0 12px}.timeline-content p{max-width:70ch}.badge{display:inline-block;font-size:14px;margin:14px 12px 0 0;color:var(--muted)}.cv-dl-bar{padding:0 0 30px;border-bottom:1px solid var(--ink)}.cv-dl-bar>p{margin-bottom:24px}.cv-section{padding-top:44px}.cv-section-title{font-size:32px;margin-bottom:12px}.profile-skills{grid-template-columns:1fr 1fr;margin-top:28px}.pub-filter{display:flex;gap:10px;flex-wrap:wrap;margin:28px 0 36px}.pub-filter-btn{border:1px solid var(--rule);background:var(--paper);padding:9px 16px;color:var(--ink);border-radius:6px}.pub-filter-btn.active{background:var(--forest);border-color:var(--forest);color:var(--paper)}.pub-item{padding:26px 0;border-bottom:1px solid var(--rule);max-width:90ch}.pub-authors,.pub-venue{font-size:16px;color:var(--muted)}.pub-title{font-size:23px;line-height:1.4;margin:10px 0}.pub-venue{font-style:italic}.pub-section-heading{font-size:24px;font-family:var(--serif);margin-top:36px}.pub-links{display:flex;gap:18px;flex-wrap:wrap;margin-top:18px}.pub-link{font-size:16px;color:var(--forest)}.pub-abstract{width:100%;font-size:17px;max-width:73ch}.pub-abstract summary{cursor:pointer;text-decoration:underline;text-underline-offset:.2em;margin-bottom:14px}.info-box{font-size:16px;padding-bottom:22px;border-bottom:1px solid var(--rule)}
.project-index{margin-top:44px}.project-entry{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:52px;padding:42px 0;border-top:1px solid var(--rule);align-items:start}.project-image{display:block;background:#e4e9e0;overflow:hidden}.project-image img{width:100%;height:auto;max-height:440px;object-fit:contain;transition:filter .35s cubic-bezier(.16,1,.3,1);filter:saturate(.85)}.project-entry:focus-within img,.project-entry:hover img{filter:saturate(1)}.project-entry-copy h2{font-size:38px;letter-spacing:-.03em;margin:12px 0 20px}.project-entry-copy h2 a{text-decoration:none}.project-entry-copy p+p{margin-top:18px}.project-stack{font-size:15px}.profile-textbook{display:grid;grid-template-columns:minmax(200px,.7fr) minmax(0,1.5fr);gap:64px;align-items:start;margin:38px 0}.profile-book-cover{width:100%;max-width:310px;height:auto;box-shadow:4px 10px 20px #102c2015}.profile-cover-link{display:inline-block}.profile-book-topics{padding-left:21px}.profile-book-topics li+li{margin-top:16px}.profile-book-list{list-style:none;padding:0;margin:42px 0 0;display:grid;grid-template-columns:1fr 1fr;gap:54px 48px}.profile-book-card{display:grid;grid-template-columns:minmax(110px,.7fr) minmax(0,1fr);gap:26px;padding-top:28px;border-top:1px solid var(--rule)}.profile-book-card h3{font-size:26px}.profile-book-card .profile-status{margin-top:15px}.profile-book-card>div>p:last-child{font-size:17px}.contact-grid{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:80px}.contact-block-title{font-size:25px;font-family:var(--serif);margin-bottom:24px}.contact-row{display:block;padding:18px 0;border-bottom:1px solid var(--rule);text-decoration:none}.cr-label{display:block;color:var(--muted);font-size:14px;margin-bottom:6px}.cr-value{overflow-wrap:anywhere}.form-group{margin-bottom:22px}.form-label{display:block;font-size:16px;margin-bottom:8px}.form-input,.form-textarea{display:block;width:100%;border:1px solid #8b9b8c;border-radius:4px;background:#fcfcf9;color:var(--ink);padding:12px 14px;font-size:18px}.form-textarea{min-height:200px;resize:vertical}.hp-field{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}.alert-ok,.alert-err{border:1px solid var(--rule);padding:18px 20px;margin-bottom:20px}.alert-err{color:#8d251a;background:#fbede7;border-color:#b96952}.alert-ok{background:#e5eddf}.mb-1{margin-bottom:20px}.mb-2{margin-bottom:32px}.mt-1{margin-top:20px}.mt-2{margin-top:32px}.mb-0{margin-bottom:0}
/* Interactive controls retain their task logic; photographs replace the old drawn face. */
.pdock-hero{padding:64px 0 50px;border-bottom:1px solid var(--rule)}.pdock-hero h1{font-size:clamp(38px,5vw,66px);max-width:19ch;letter-spacing:-.035em}.pdock-hero-lead{font-size:22px;max-width:65ch;margin-top:26px;color:var(--muted)}.pdock-hero-actions,.pdock-demo-controls{display:flex;gap:12px;flex-wrap:wrap;margin-top:24px}.pdock-btn{font:inherit;display:inline-flex;align-items:center;justify-content:center;padding:10px 18px;min-height:46px;border:1px solid #71847a;border-radius:6px;background:var(--paper);color:var(--forest);text-decoration:none}.pdock-btn-primary{background:var(--forest);color:var(--paper);border-color:var(--forest)}.pdock-demo-index{display:grid;grid-template-columns:1fr 1fr 1fr;gap:24px}.pdock-demo-tile{padding:22px 0;border-top:1px solid var(--rule);text-decoration:none}.pdock-demo-tile strong,.pdock-demo-tile em{display:block}.pdock-demo-tile>span{display:none}.pdock-demo-tile strong{font-family:var(--serif);font-size:24px}.pdock-demo-tile em{font-style:normal;color:var(--muted);font-size:16px;margin-top:12px}.pdock-lab-card{margin-top:32px;border:1px solid var(--rule);padding:28px;background:#eef1e9}.pdock-lab-header{display:flex;justify-content:space-between;gap:24px;margin-bottom:24px}.pdock-lab-header>div>span{display:block;color:var(--muted);font-size:16px;margin-top:8px}.pdock-lab-status{flex:none;font-size:15px}.pdock-lab-status b{display:block;font-variant-numeric:tabular-nums}.gaze-stage{display:grid;place-items:center;gap:18px;padding:24px;min-height:350px;background:var(--paper)}.gaze-face{width:240px;max-width:100%;aspect-ratio:1;position:relative}.gaze-face img{width:100%;height:100%;object-fit:cover}.gaze-face .gaze-direct{display:none}.gaze-face.is-direct .gaze-direct{display:block}.gaze-face.is-direct .gaze-averted{display:none}.gaze-cue{text-align:center;font-size:16px}.pdock-result-box{background:var(--pale);padding:18px;margin-top:20px}.pdock-result-box strong,.pdock-result-box span{display:block}.workflow-play-area{display:grid;grid-template-columns:1fr 1fr;gap:32px}.workflow-tile-bank,.workflow-sequence{display:flex;flex-direction:column;gap:10px;margin-top:20px;min-height:100px}.workflow-tile,.workflow-step{border:1px solid var(--rule);padding:14px;background:var(--paper);color:var(--ink);text-align:left;display:block;width:100%}.workflow-tile strong,.workflow-tile span,.workflow-step strong,.workflow-step span{display:block}.workflow-tile span,.workflow-step span{font-size:14px;color:var(--muted)}.workflow-tile.is-used{opacity:.5}.workflow-placeholder{font-size:16px;color:var(--muted)}.reader-demo-text{padding:30px;background:var(--paper);max-width:75ch}.pdock-btn.is-active{background:var(--forest);color:var(--paper)}.pdock-split{display:grid;grid-template-columns:1.5fr 1fr;gap:48px}.pdock-cta-card{padding:24px;background:var(--pale)}.pdock-cta-card>strong,.pdock-cta-card>span{display:block;margin-bottom:18px}
@media(max-width:900px){.page-header .container{grid-template-columns:1fr;gap:24px}.page-header{padding:44px 0 36px}.page-header-desc{max-width:55ch}.split-panel{grid-template-columns:1fr;gap:32px}.grid-3,.skills-grid,.profile-route-grid{grid-template-columns:1fr 1fr}.contact-grid{gap:36px}.project-entry{gap:30px}.profile-textbook{gap:36px}.profile-book-list{grid-template-columns:1fr}.pdock-demo-index{grid-template-columns:1fr}.pdock-split{grid-template-columns:1fr}.timeline-item{grid-template-columns:140px 1fr;gap:24px}}
@media(max-width:600px){.section{padding:34px 0}.section-title{margin-bottom:20px}.page-header h1{font-size:42px}.section-lead{font-size:19px}.grid-3,.skills-grid,.profile-route-grid,.profile-skills,.project-entry,.contact-grid,.workflow-play-area{grid-template-columns:1fr}.project-entry{padding:30px 0;gap:24px}.project-entry-copy h2{font-size:32px}.profile-textbook{grid-template-columns:1fr;gap:28px}.profile-textbook .profile-book-cover{max-width:230px}.profile-book-card{grid-template-columns:110px minmax(0,1fr);gap:20px}.profile-book-card h3{font-size:24px}.timeline-item{grid-template-columns:1fr;gap:12px;padding:24px 0}.timeline-date br{display:none}.timeline-date br::after{content:' – '}.timeline-content h3{font-size:24px}.contact-grid{gap:36px}.pdock-lab-card{padding:18px}.pdock-lab-header{flex-direction:column;gap:12px}.gaze-stage{padding:18px;min-height:310px}.method-stack>div{grid-template-columns:90px 1fr;gap:18px}.pub-title{font-size:21px}.cv-dl-bar>div{flex-direction:column;align-items:flex-start}.pub-filter-btn{font-size:15px}.rich-content h2{font-size:28px}.pdock-hero{padding:40px 0}.pdock-hero-lead{font-size:20px}}
/* Preserve Degree Margins' own notebook design while allowing long notes to wrap on phones. */
@media(max-width:600px){body[data-page="degree-margins"] .dm-toc-row{flex-wrap:wrap;gap:8px}body[data-page="degree-margins"] .dm-toc-note{white-space:normal;flex-basis:100%;overflow-wrap:anywhere}}
@media(prefers-reduced-motion:reduce){.project-image img{transition:none}}
@media(max-width:600px){.timeline-date br{display:initial}}
/* The forest sweep connects reading pages to the homepage without obscuring text. */
body.editorial:not(.home){background-color:var(--paper);background-image:url('../editorial/forest-sweep.svg');background-repeat:no-repeat;background-position:center 260px;background-size:100% 1100px}
body.editorial:not(.home) .masthead{margin:0;padding-inline:var(--space);background:var(--forest);color:var(--paper);border-color:#416a50}
body.editorial:not(.home) .masthead nav{color:var(--paper)}
.page-header,.pdock-hero{background:var(--forest);color:var(--paper);position:relative;isolation:isolate;overflow:hidden;border-bottom:0}
.page-header::before,.pdock-hero::before{content:'';position:absolute;inset:-30% -10%;z-index:-1;pointer-events:none;background:url('../editorial/forest-sweep.svg') center/cover;filter:brightness(2.8);opacity:.55;transform:rotate(180deg)}
.page-header-desc,.page-header .article-date,.pdock-hero-lead{color:#e0e9df}
.page-header h1{color:var(--paper)}
.pdock-hero .pdock-btn{background:var(--paper);color:var(--forest)}
.pdock-hero .pdock-btn-primary{background:#dce8d7;color:#153724;border-color:#dce8d7}
body[data-page="accesswhy"] .aw-page,body[data-page="holdfast"] .hf-page{background:transparent}
@media(max-width:760px){body.editorial:not(.home) .masthead{padding-block:18px}body.editorial:not(.home) .menu-toggle{border-color:#7f9988}body.editorial:not(.home){background-size:auto 900px;background-position:55% 330px}}
