/* Requested launch adjustments, kept separate from the established page layouts. */
::view-transition-new(root){animation:none}
html.history-arrival::view-transition-new(root){animation:portfolio-circle-in .95s cubic-bezier(.65,0,.25,1) both}
body.adaweb .av.case-study .av-hd-preview .av-laptop-screen{overscroll-behavior-y:auto}
/* The supplied standalone cup replaces the old two-part source crop. */
body.lunar-coffee .lc .lc-application-grid .app-floating img{
 position:static;left:auto;right:auto;top:auto;width:100%;max-width:100%;height:100%;object-fit:cover;transform:none;
}
@media(max-width:767px){
 body.lunar-coffee .lc .lc-application-grid .app-floating{aspect-ratio:auto}
 body.lunar-coffee .lc .lc-application-grid .app-floating img{height:auto}
}
@media(min-width:768px){
 body.diggit .dg-covers{row-gap:clamp(20px,1.354167vw,26px)}
 body.diggit .dg-covers>img:first-child{align-self:start}
 body.diggit .dg-covers>.dg-cover-note{align-self:end}
}

body.homepage .smiley .cat-speech{
 top:-18px;bottom:auto;padding:4px 7px;font-size:9px;line-height:1;
 opacity:0;visibility:hidden;
 transform:translateX(-50%) scale(.65);transform-origin:50% calc(100% + 6px);
 transition:transform .4s cubic-bezier(.22,1,.36,1),opacity .3s ease,visibility 0s .4s;
}
body.homepage .smiley[data-cat-speech="visible"] .cat-speech{
 opacity:1;visibility:visible;transform:translateX(-50%) scale(1);transition-delay:0s;
}
body.homepage .tired-bubble,body .footer-cat-speech{
 padding:8px 12px;font-size:14px;line-height:1.2;transform:scale(.65);
 visibility:hidden;transform-origin:50% 100%;transition:transform .4s cubic-bezier(.22,1,.36,1),opacity .3s ease,visibility 0s .4s;
}
body.homepage .tired-bubble.visible,body .footer-cat-speech.visible{visibility:visible;transform:scale(1);transition-delay:0s}
@media(max-width:700px),(hover:none),(pointer:coarse){
 body.homepage .smiley .cat-speech{top:-16px;padding:3px 5px;font-size:9px}
 body.homepage .tired-bubble,body .footer-cat-speech{padding:4px 7px;font-size:9px;line-height:1}
 body.homepage .case-hover-description,body.work-page .work-hover-description{
  font-size:var(--mobile-copy-font,14px)!important;
 }
 body.homepage .case-hover-description .card-copy-line,body.work-page .work-hover-description .card-copy-line{
  display:block;white-space:nowrap;
 }
 body.homepage .case-hover-description .card-copy-line+.card-copy-line::before,
 body.work-page .work-hover-description .card-copy-line+.card-copy-line::before{content:none}
 body.adaweb .av.case-study .av-laptop-screen{overflow:hidden;touch-action:pan-y;overscroll-behavior-y:auto}
}
/* Fresh exit timelines prevent an interrupted entrance jumping to its end. */
html body.unified-nav>header.site-header[data-shared-header].header-leaving:before{animation-name:launch-header-panel!important}
html body.unified-nav>header.site-header[data-shared-header].header-leaving .logo img{animation-name:launch-header-logo!important}
html body.unified-nav>header.site-header[data-shared-header].header-leaving :is(nav a,.cv-label,.cv-triangle){animation-name:launch-header-label!important}
html body.unified-nav>header.site-header[data-shared-header].header-leaving .menu-toggle{animation-name:launch-header-circle!important}
html body.unified-nav>header.site-header[data-shared-header].header-leaving :is(.logo,.header-cv):after{animation-name:launch-header-line!important}
@keyframes launch-header-panel{0%{opacity:0;transform:scale(.8);clip-path:inset(0 calc(100% - var(--logo-cell)) 0 0 round 20px)}20%,40%{opacity:1;transform:scale(1);clip-path:inset(0 calc(100% - var(--logo-cell)) 0 0 round 20px)}100%{opacity:1;transform:scale(1);clip-path:inset(0 round 20px)}}
@keyframes launch-header-logo{from{scale:.6;opacity:0}to{scale:1;opacity:1}}
@keyframes launch-header-label{from{clip-path:inset(0 0 100% 0);translate:0 110%;opacity:0}to{clip-path:inset(0);translate:0 0;opacity:1}}
@keyframes launch-header-circle{from{scale:0;opacity:0}to{scale:1;opacity:1}}
@keyframes launch-header-line{from{transform:scaleY(0)}to{transform:scaleY(1)}}
/* Restore the page width while still covered, before the circle uncovers it. */
body.intro-loading.intro-revealing{overflow:visible}
/* Existing multi-image artwork retains its crop grid; each tile zooms independently. */
body.case-page .launch-media-grid{position:relative;width:100%}
body.case-page .launch-media-tile{position:absolute;overflow:hidden}
body.case-page .launch-media-crop{position:absolute;inset:0;transform-origin:50% 50%}
/* Clip zoom inside the original footprint; layout dimensions never animate. */
@property --launch-zoom{syntax:'<number>';inherits:false;initial-value:1}
body.case-page .launch-zoom-frame{overflow:hidden}
body.case-page .launch-zoom-media{scale:calc(var(--media-base-scale,1) * var(--launch-zoom));transition:--launch-zoom .8s cubic-bezier(.22,1,.36,1)}
body.case-page .launch-zoom-inline{
 transform-origin:50% 50%;
 clip-path:inset(calc(50% - 50% / var(--launch-zoom)) round calc(var(--media-radius-tl,0px) / var(--launch-zoom)) calc(var(--media-radius-tr,0px) / var(--launch-zoom)) calc(var(--media-radius-br,0px) / var(--launch-zoom)) calc(var(--media-radius-bl,0px) / var(--launch-zoom)));
}
@media(hover:hover) and (pointer:fine){
 body.case-page .launch-zoom-frame:hover>.launch-zoom-media,body.case-page .launch-zoom-inline:hover{--launch-zoom:1.012}
 body.case-page .launch-zoom-frame:hover>.launch-zoom-media:not(.launch-preserve-crop),body.case-page .launch-zoom-inline:not(.launch-preserve-crop):hover{transform:var(--media-base-transform,none)!important}
 html body.case-page :hover>.launch-long-media{scale:var(--media-base-scale,1)!important}
 html body.case-page :hover>.launch-long-media:not(.launch-preserve-crop){transform:var(--media-base-transform,none)!important}
}
/* The reported Ada/Buckaroos brand conflicts use native scale transitions.
   Pin the old transform at rest as well as hover, so leaving cannot snap back. */
html body.case-page.launch-smooth-zoom .launch-zoom-frame>.launch-zoom-media{
 scale:var(--media-base-scale,1)!important;
 transition:scale .8s cubic-bezier(.22,1,.36,1)!important;
}
html body.case-page.launch-smooth-zoom .launch-zoom-media:not(.launch-preserve-crop){
 transform:var(--media-base-transform,none)!important;
}
html body.case-page.launch-smooth-zoom .launch-zoom-inline{
 transition:--launch-zoom .8s cubic-bezier(.22,1,.36,1)!important;
}
@media(hover:hover) and (pointer:fine){
 html body.case-page.launch-smooth-zoom .launch-zoom-frame:hover>.launch-zoom-media{
  scale:calc(var(--media-base-scale,1) * 1.012)!important;
 }
}
@media(prefers-reduced-motion:reduce){
 html body.unified-nav>header.site-header[data-shared-header].header-leaving:before,
 html body.unified-nav>header.site-header[data-shared-header].header-leaving *,
 html body.unified-nav>header.site-header[data-shared-header].header-leaving :is(.logo,.header-cv):after{animation-name:none!important}
 html.history-arrival::view-transition-new(root){animation:none}
 body.homepage .smiley .cat-speech,body.homepage .tired-bubble,body .footer-cat-speech{transition:none}
 html body.case-page.launch-smooth-zoom .launch-zoom-media,body.case-page .launch-zoom-media{transition:none!important}
 html body.case-page.launch-smooth-zoom .launch-zoom-frame:hover>.launch-zoom-media,body.case-page .launch-zoom-frame:hover>.launch-zoom-media,body.case-page .launch-zoom-inline:hover{--launch-zoom:1;scale:var(--media-base-scale,1)!important}
}

/* Ada overview and highlighted testimonial spacing: mobile only. */
@media(max-width:767px){
 body.adaweb .av.case-study .av-hd-preview .av-laptop-screen{overflow:hidden;touch-action:pan-y}
 html body.case-page.adaweb .av .av-two:has(>.av-testimonials-heading){row-gap:24px}
 html body.case-page.adaweb .av .av-testimonials-heading{margin-bottom:0!important}
}

/* Desktop header CV arrow only; no mobile or side-menu changes. */
@media(min-width:701px) and (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){
 html body.unified-nav>header.site-header .header-cv>.cv-triangle{transform:translateY(0);transition:transform .22s ease}
 html body.unified-nav>header.site-header .header-cv:hover>.cv-triangle{transform:translateY(3px)}
}
