/* Shared, reversible disclosure and press states. Native details remain usable without JS. */
.disclosure-body{display:flow-root;min-width:0}
:root .research-details{margin-top:20px}
:root .research-details>summary{display:flex;align-items:center;justify-content:center;min-height:56px;width:calc(100% + 56px);margin:0 -28px;padding:14px 28px;border:0;border-top:1px solid var(--line);border-radius:0;list-style:none;background:transparent;color:var(--green);cursor:pointer;transition:background-color 180ms ease,color 180ms ease}
:root .research-details>summary::-webkit-details-marker{display:none}
:root .research-details>summary>span{display:grid;place-items:center;width:28px;height:28px;border:0;background:transparent;transition:transform 460ms cubic-bezier(.4,0,.2,1)}
:root .research-details>summary svg{width:24px;height:24px}
:root .research-details>summary[aria-expanded=true]>span{transform:rotate(45deg)}
:root .research-details>summary:is(:hover,:focus-visible){background:color-mix(in srgb,var(--green) 9%,transparent)}
:root .research-details>summary:active{background:color-mix(in srgb,var(--green) 16%,transparent)}
:root .research-details>summary:focus-visible{outline:2px solid var(--green);outline-offset:-4px}
:root .research-details>.disclosure-body{padding-top:16px}
:root :is(.project,.current-project,.cv-publication,.cv-timeline-entry,.cv-skills>li){transition:background-color 280ms ease,box-shadow 280ms ease,border-color 280ms ease}
:root :is(.project,.current-project,.cv-publication).details-expanded{background:color-mix(in srgb,var(--green) 7%,var(--past-surface,var(--cv-container)))}
:root[data-theme=dark] :is(.project,.current-project,.cv-publication).details-expanded{background:color-mix(in srgb,var(--green) 10%,#202c24)}
:root :is(.cv-timeline-entry,.cv-skills>li).details-expanded{background:color-mix(in srgb,var(--green) 5%,transparent)}
:root :is(button,[role=button],summary){transition:background-color 180ms ease,color 180ms ease,filter 180ms ease}
:root :is(button,[role=button]):not(:disabled):hover{filter:brightness(.95)}
:root :is(button,[role=button]):not(:disabled):active{filter:brightness(.88)}
:root .cv-document summary:is(:hover,:focus-visible){background:color-mix(in srgb,var(--green) 8%,transparent)}
:root .cv-document summary:active{background:color-mix(in srgb,var(--green) 14%,transparent)}
@media(max-width:640px){:root .research-details>summary{width:calc(100% + 48px);margin-inline:-24px;padding-inline:24px}}
@media(prefers-reduced-motion:reduce){:root :is(summary,summary>span,button,[role=button],.project,.current-project,.cv-publication,.cv-timeline-entry,.cv-skills>li){transition:none}}
html[data-motion=reduce] :is(summary,summary>span,button,[role=button],.project,.current-project,.cv-publication,.cv-timeline-entry,.cv-skills>li){transition:none}

:root .research-grid>.project>.project-body{padding-bottom:0}
:root .research-details>.disclosure-body{padding-bottom:28px}
@media(prefers-reduced-motion:no-preference){
 html:not([data-motion=reduce]) :is(.research-masonry>article,.cv-publication):active{translate:0 -1px}
}

/* One edge-to-edge divider; the close rotation follows intent during reversal. */
:root .research-details{border-top:0}
:root .research-details>summary[aria-expanded=false]>span{transform:rotate(0)}
@media print{
 .disclosure-body{display:block!important;overflow:visible!important;height:auto!important}
 details::details-content{content-visibility:visible!important;height:auto!important;overflow:visible!important}
 details{height:auto!important;overflow:visible!important}
}

/* Moving sheets must not enlarge the document or trigger viewport rescaling. */
html,body{overflow-x:clip}
:root .research-masonry>article{position:relative;isolation:isolate;overflow:hidden}
:root .research-masonry>article::after{content:"";position:absolute;inset:0;z-index:2;border-radius:inherit;pointer-events:none;background:var(--green);opacity:0;transition:opacity 220ms ease}
:root .research-masonry>.current-project::after{background:#a48abb}
@media(hover:hover){:root .research-masonry>article:hover::after{opacity:.035}}
:root .research-masonry>article:active::after{opacity:.09}
:root .research-masonry>.pending-ack::after{opacity:.12}
:root .research-masonry>.pending-ack .project-meta{color:#8a639f}
:root[data-theme=dark] .research-masonry>.pending-ack .project-meta{color:#dec4f2}
:root .research-masonry .project-meta{transition:color 220ms ease}
:root .model-project .model-card-preview:focus-visible{outline-offset:-4px;border-radius:inherit}
:root .research-details>summary>span{width:40px;height:40px;border:1px solid transparent;border-radius:50%;transition:transform 460ms cubic-bezier(.4,0,.2,1),border-color 220ms ease,background-color 220ms ease}
:root .research-details>summary[aria-expanded=true]>span{border-color:currentColor;background:color-mix(in srgb,var(--green) 7%,transparent)}
:root .research-details>summary{min-height:64px;padding-block:11px}
html[data-motion=reduce] .research-masonry>article::after{transition:none}
@media(prefers-reduced-motion:reduce){:root .research-masonry>article::after{transition:none}}

/* Use our tonal press state instead of the browser's blue delegated-click flash. */
:root .research-masonry>article,:root .research-masonry>article *,:root .model-morph{ -webkit-tap-highlight-color:transparent }
:root .model-project.model-press{background:color-mix(in srgb,var(--green) 8%,#f0edf6)}
:root[data-theme=dark] .model-project.model-press{background:color-mix(in srgb,var(--green) 10%,#292632)}
:root .research-masonry>.model-project.model-press::after{opacity:.07}

/* Empty contact-card space shares the expand/shrink action, without native tap flash. */
:root .shared-contact-card,:root .shared-contact-card *{-webkit-tap-highlight-color:transparent}

/* The complete media preview is one target; its action cue mirrors hover and press. */
:root :is(.research-film,.model-card-preview){cursor:pointer;touch-action:manipulation}
:root :is(.research-film,.model-card-preview) .play-label{transition:background-color 180ms ease,color 180ms ease,filter 180ms ease,transform 180ms ease;pointer-events:none}
:root .film-preview:has(.research-film):is(:hover,:focus-within) .play-label,
:root .model-project .current-figure:is(:hover,:focus-within) .play-label{background:var(--button-bg);color:var(--button-fg);filter:brightness(.92);transform:translateY(-1px)}
:root .film-preview:has(.research-film):active .play-label,
:root .model-project .current-figure:active .play-label,
:root .model-project.model-press .play-label,
:root .media-press-cue{background:var(--button-bg);color:var(--button-fg);filter:brightness(.84);transform:scale(.97);box-shadow:none}
:root .media-activating::after{opacity:.08}
:root .media-press-cue{z-index:3;pointer-events:none;animation:media-cue-release 320ms ease-out forwards}
@keyframes media-cue-release{0%,40%{opacity:1}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){:root :is(.research-film,.model-card-preview) .play-label,:root .media-press-cue{transition:none;animation:none;transform:none}}
html[data-motion=reduce] :is(.research-film,.model-card-preview) .play-label,html[data-motion=reduce] .media-press-cue{transition:none;animation:none;transform:none}

/* The whole disclosure is full bleed, including its animation clipping boundary. */
:root .shared-contact-card figcaption::before{display:none}
:root .research-details{--study-inset:28px;width:calc(100% + var(--study-inset)*2);margin-inline:calc(-1 * var(--study-inset))}
:root .research-details>summary{width:100%;margin-inline:0;padding-inline:var(--study-inset);border-radius:0 0 27px 27px;transition:background-color 180ms ease,color 180ms ease,border-radius 460ms cubic-bezier(.4,0,.2,1)}
:root .research-details>summary[aria-expanded=true]{border-radius:0}
:root .research-details>.disclosure-body{padding-inline:var(--study-inset)}
@media(max-width:640px){:root .research-details{--study-inset:24px}:root .research-details>summary{border-radius:0 0 23px 23px}:root .research-details>summary[aria-expanded=true]{border-radius:0}}
@media(prefers-reduced-motion:reduce){:root .research-details>summary{transition:none}}
html[data-motion=reduce] .research-details>summary{transition:none}
