/* DOMAIN: MOTION TOKENS — bounded effects, no perpetual animation loop. */
:root{--ease-out:cubic-bezier(.22,1,.36,1);--ease-in-out:cubic-bezier(.65,0,.35,1);--motion-fast:160ms;--motion-base:280ms;--motion-reveal:600ms}
.button{transition:background-color var(--motion-base),border-radius 360ms var(--ease-out),transform var(--motion-fast) var(--ease-out),box-shadow var(--motion-base)}
.button:is(:hover,:focus-visible){background:var(--blue);border-radius:100px;box-shadow:0 8px 24px #3b35f11a}
.button.blue:is(:hover,:focus-visible){background:#2822d3}
.button .icon{transition:transform var(--motion-base) var(--ease-out)}
.button:is(:hover,:focus-visible) .icon{transform:translate(2px,-2px)}
.button:active,.button.is-pressed{transform:scale(.97);box-shadow:none}
.site-header nav a{position:relative;padding-block:8px;transition:color 180ms}
.site-header nav a:after{content:"";position:absolute;bottom:0;left:0;right:0;height:1px;background:var(--blue);transform:scaleX(0);transform-origin:left;transition:transform 300ms var(--ease-out)}
.site-header nav a:is(:hover,:focus-visible,[aria-current="location"]){color:var(--blue)}
.site-header nav a:is(:hover,:focus-visible,[aria-current="location"]):after{transform:scaleX(1)}
.menu-toggle span{transition:transform 280ms var(--ease-out)}
.menu-toggle[aria-expanded="true"] span{transform:rotate(45deg)}

/* DOMAIN: FILE ACTIONS — native button focus retains table semantics. */
tbody tr{cursor:pointer}
tbody td{transition:background-color 240ms,border-color 240ms}
tbody tr:is(:hover,:focus-within) td{background:#f0f1ff;border-color:#bbb7ff}
tbody tr.is-pressed td{background:#dedbff}
tbody .file-link{min-height:44px;transition:color var(--motion-fast)}
tbody tr:is(:hover,:focus-within) .file-link{color:var(--blue)}
.file-icon{transition:transform 280ms var(--ease-out)}
tbody tr:is(:hover,:focus-within) .file-icon{transform:translateY(-3px)}
tbody tr.is-pressed .file-icon{transform:translateY(1px) scale(.94)}
.document-link{position:relative;isolation:isolate;transition:color 220ms;min-height:72px}
.document-link:before{content:"";position:absolute;inset:0 -16px;z-index:-1;background:linear-gradient(transparent,#ffffff12);opacity:0;transition:opacity 280ms}
.document-link:is(:hover,:focus-visible):before{opacity:1}
.document-link.is-pressed:before{background:#ffffff1c;opacity:1}
.document-link>span{transition:transform 280ms var(--ease-out)}
.document-link:is(:hover,:focus-visible)>span{transform:translateX(5px)}
.download-action{display:flex;align-items:center;gap:8px;min-height:24px;flex-shrink:0;overflow:hidden}
.download-caption{font-size:14px;max-width:0;opacity:0;white-space:nowrap;transition:opacity 180ms,transform 280ms var(--ease-out),max-width 280ms var(--ease-out);transform:translateX(-5px)}
.document-link:is(:hover,:focus-visible) .download-caption{max-width:80px;opacity:1;transform:none}
.document-link .download-icon{transition:transform 280ms var(--ease-out)}
.document-link:is(:hover,:focus-visible) .download-icon{transform:translateY(2px)}
.document-link.is-pressed .download-icon{transform:translateY(4px)}

/* DOMAIN: CARDS — match Figma image zoom, title color and download reveal. */
.news-card,.report{position:relative;cursor:pointer}
.news-image-clip{overflow:hidden;isolation:isolate}
.news-image{transition:transform 650ms var(--ease-out)}
.news-card h3,.news-card .category,.news-card .text-link{transition:color 260ms}
.news-card:is(:hover,:focus-within) .news-image{transform:scale(1.105)}
.news-card:is(:hover,:focus-within) h3{color:var(--blue)}
.news-card:is(:hover,:focus-within) .category,.news-card:is(:hover,:focus-within) .text-link{color:var(--ink)}
.news-card .text-link .icon{transition:transform 280ms var(--ease-out)}
.news-card:is(:hover,:focus-within) .text-link .icon{transform:translate(3px,-2px)}
.news-card.is-pressed .news-image{transform:scale(1.075)}
.report{transition:background-color 240ms}
.report:is(:hover,:focus-within){background:linear-gradient(#fff,#f7f8ff)}
.report-cover{transition:transform 400ms var(--ease-out);transform-origin:center bottom}
.report:is(:hover,:focus-within) .report-cover{transform:translateY(-4px)}
.report.is-pressed .report-cover{transform:translateY(-1px)}
.report .download{display:flex;align-items:center;gap:8px;min-width:101px;min-height:32px;text-align:left;transform:none}
.report .download-icon{opacity:0;transform:translateY(10px);transition:opacity 200ms,transform 320ms var(--ease-out)}
.report .download-caption{max-width:80px;color:var(--ink)}
.report:is(:hover,:focus-within) .download-icon,.report:is(:hover,:focus-within) .download-caption{opacity:1;transform:none}
.report.is-pressed{background:#eeedff}
.person .portrait{transition:filter 360ms}
.person:hover .portrait{filter:contrast(1.035)}
.person h3{transition:color 240ms}
.person:hover h3{color:var(--blue)}
.stock-fact:before{transition:opacity 350ms}
.stock-fact:hover:before{opacity:.18}

/* DOMAIN: LAYOUT TRANSITIONS — panel heights change only at interaction time. */
.results-panels{position:relative}
.result-tabs button{transition:background-color 220ms,color 220ms,box-shadow 220ms}
.result-tabs button:hover{color:var(--blue)}
.result-tabs button[aria-selected="true"]{color:#fff;box-shadow:0 3px 10px #3b35f122}
.faq-list details{transition:background-color 240ms;overflow:hidden}
.faq-list details:is(:hover,:focus-within){background:#202329}
.faq-list details[open]{background:#1b1e23}
.faq-list summary{position:relative}
.faq-toggle{transition:background-color 220ms,border-radius 280ms}
.faq-list summary:is(:hover,:focus-visible) .faq-toggle{border-radius:50%;background:#534dff}
.faq-arrow{transition:transform 300ms var(--ease-out)}
.faq-body{font-size:18px;line-height:26px;color:#d2d5dd;padding:24px 48px 0 0}
.faq-body p{margin:0}
.faq-list details:has(summary:active) .faq-toggle{transform:scale(.92)}
.footer-link{position:relative;transition:color 200ms,transform 250ms var(--ease-out)}
.footer-link:is(:hover,:focus-visible){transform:translateX(4px);color:#fff}
.social-link{transition:transform 250ms var(--ease-out)}
.social-link:is(:hover,:focus-visible){transform:translateY(-4px)}
.social-link:active{transform:translateY(-1px) scale(.95)}
.subscribe-form{transition:border-color 200ms,box-shadow 200ms}
.subscribe-form:focus-within{border-color:#fff;box-shadow:0 1px 0 #fff}
.subscribe-form input:focus-visible{outline:0}
.subscribe-form button{transition:transform 250ms var(--ease-out);min-width:32px;min-height:32px}
.subscribe-form button:is(:hover,:focus-visible){transform:translate(2px,-2px)}
.file-type-badge{display:inline-flex;padding:6px 10px;font-size:12px;letter-spacing:1px;background:#eeedff;color:var(--blue);margin:0 0 16px}
dialog[open]{animation:dialog-enter 280ms var(--ease-out)}
dialog[open]::backdrop{animation:backdrop-enter 180ms ease-out}
@keyframes dialog-enter{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
@keyframes backdrop-enter{from{opacity:0}to{opacity:1}}

/* DOMAIN: VIEWPORT MOTION — progressive enhancement; content stays visible. */
.hero{isolation:isolate;background-image:none}
.hero:before{content:"";position:absolute;inset:0;z-index:-1;background:var(--hero-art) center/100% 100% no-repeat;pointer-events:none}
@supports(animation-timeline:view()){
 @media(prefers-reduced-motion:no-preference){
  .hero:before{animation:hero-drift linear both;animation-timeline:view();animation-range:exit 0% exit 100%}
  @keyframes hero-drift{to{transform:translateY(48px) scale(1.06)}}
 }
}
@media(max-width:900px){.hero:before{background-size:cover;background-position:center bottom}}
@media(max-width:680px){.hero:before{background-size:auto 100%;background-position:56% bottom}.faq-body{font-size:16px;line-height:24px;padding-right:0}.document-link .download-caption{display:none}}
@media(hover:none){.report .download-icon,.report .download-caption{opacity:1;transform:none}.news-card:hover .news-image{transform:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.hero:before{transform:none!important}}

:root{--hero-art:url("assets/hero-artwork.webp")}
.arrow-states{position:relative;display:inline-flex;width:16px;height:16px}.arrow-states .hover-icon{position:absolute;inset:0;opacity:0;transition:opacity 200ms}.news-card:is(:hover,:focus-within) .arrow-states>.icon:first-child{opacity:0}.news-card:is(:hover,:focus-within) .hover-icon{opacity:1}

.faq-list summary[aria-expanded="false"] .faq-arrow{transform:rotate(-90deg)}
