/* Text links on every page: on hover and keyboard focus the text, its icon and a hairline under the text turn accent; nothing moves.
   Only "all cases" keeps a permanent line (Figma). The header navigation keeps its own reveal line. */
:root { --link-gap:4px; }
.review-full,.team-link,.case-read,.footer-cell li a,.footer-email,.cases-all-title,.card-link,.article-next-step > a,.breadcrumbs a,.news-case-link {
  position:relative; text-decoration:none; color:inherit; transition:color 220ms ease;
}
:is(.review-full,.team-link,.case-read,.footer-cell li a,.footer-email,.cases-all-title,.card-link,.article-next-step > a,.breadcrumbs a,.news-case-link)::after {
  content:""; position:absolute; left:0; right:0; bottom:calc(-1 * var(--link-gap)); height:1px; background:currentColor;
  clip-path:inset(0 100% 0 0); transition:clip-path 220ms ease,background 220ms ease;
}
.cases-all .cases-all-title::after { clip-path:none; }
/* Tap targets taller than the text: anchor the line to the text box, not the control. */
/* Specificity beats the :is() list above, which inherits .article-next-step > a. */
.cases-v3 .case-read::after,.reviews .review-full::after { bottom:calc(50% - .6em - var(--link-gap)); }
.footer-cell li a { --link-gap:6px; }
.footer-social a { --link-gap:10px; }
.cases-all-title { --link-gap:6px; }
.article-next-step > a { --link-gap:8px; border-bottom:0; padding-bottom:0; }
:is(.review-full,.team-link,.case-read,.footer-cell li a,.footer-email,.card-link,.article-next-step > a,.breadcrumbs a,.news-case-link):is(:hover,:focus-visible)::after { clip-path:inset(0 0 0 0); }
:is(.review-full,.team-link,.case-read,.footer-cell li a,.footer-email,.card-link,.article-next-step > a,.breadcrumbs a,.news-case-link):is(:hover,:focus-visible),
.cases-all:is(:hover,:focus-visible),
:is(.nav > a,.nav-trigger):hover,.nav-services:focus-within .nav-trigger,.nav-services.is-open .nav-trigger { color:var(--color-accent); }
.cases-all { transition:color 220ms ease; }
.footer-request svg { transition:transform 220ms var(--motion-standard); }
.footer-request:is(:hover,:focus-visible) svg { transform:translateX(3px); }
.scroller-arrow { transition:background var(--duration-fast),opacity var(--duration-fast),transform 160ms var(--motion-standard); }
.scroller-arrow:active:not(:disabled) { transform:scale(.94); }
:is(.review-full,.team-link,.case-read,.cases-all,.scroller-arrow,.scroller-track,.team-badge,.footer-request,.footer-email,.footer-cell li a,.card-link,.article-next-step > a,.breadcrumbs a):focus-visible { outline:2px solid var(--color-accent); outline-offset:4px; border-radius:2px; }
:is(.scroller-arrow,.team-badge):focus-visible { border-radius:inherit; }
@media (prefers-reduced-motion:reduce) {
  :is(.review-full,.team-link,.case-read,.footer-cell li a,.footer-email,.card-link,.article-next-step > a,.breadcrumbs a,.news-case-link)::after { transition:none; }
}
