/*
 * Break-safe layout overrides.
 * Webflow remains the visual source of truth; these rules only add structural
 * safeguards that must stay consistent across canonical components.
 */

.v3--grid > *,
.v3--grid-col,
.v3--hero-slider__title-col,
.v3--home-intro-work-item,
.v3--home-intro-news-item {
	min-width: 0;
}

.v3--card-work-media-wrapper,
.v3--card-news-media-wrapper,
.v3--work-hero-billboard-media-wrapper {
	aspect-ratio: 16 / 9;
	width: 100%;
}

.v3--card-work-media-image,
.v3--card-news-media-image,
.v3--about-figure,
.v3--work-hero-billboard-media-wrapper img,
.v3--work-hero-billboard-media-wrapper video {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.v3--work-hero-billboard-media-wrapper {
	height: auto;
}

/*
 * Webflow gives canonical media a 200ms `transition: all`. Scroll motion writes
 * transform once per frame, so transform must stay direct while hover opacity
 * and filter states keep their authored transition.
 */
.v3--card-work-media-image.is-scroll-motion,
.v3--about-figure.is-scroll-motion {
	transition-property: opacity, filter;
}

/*
 * GSAP is the sole visual-motion owner. These selectors neutralize authored
 * CSS transitions/keyframes that would otherwise tween the same transforms.
 */
.v3--globalnav {
	backface-visibility: hidden;
	transition: none;
}

.v3--hero-slider__title,
.v3--hero-slider__title.is-init,
.v3--hero-slider__title.is-show,
.v3--hero-slider__title.is-hidden,
.v3--hero-slider__count-slash,
.v3--hero-slider__count-slash.is-animate,
.v3--hero-slider__nav-icon {
	animation: none;
	transition: none;
}

.v3--hero-slider__nav-icon {
	opacity: 0;
}
