/* ==========================================================================
   Darling Visual Communications
   Built from DVCSite_2026_v1.pdf — a 586pt-wide artboard.

   Desktop (≥768px) is authored in comp units: --u is one point of the
   artboard, so `calc(var(--u) * 9)` is the comp's 9pt at any width and every
   offset below can be checked against the PDF directly. Type has px floors so
   it stays readable on small laptops.

   Mobile (<768px) has no comp. Every spacing token is restated in px there —
   never left in --u, which collapses on a phone (3vw is 12px at 390).
   ========================================================================== */

@font-face {
	font-family: "Univers Next";
	src: url("../fonts/univers-next-medium.woff2") format("woff2");
	font-weight: 500;
	font-style: normal;
	font-display: swap;
}
@font-face {
	font-family: "Univers Next";
	src: url("../fonts/univers-next-bold.woff2") format("woff2");
	font-weight: 700;
	font-style: normal;
	font-display: swap;
}
/* Only the button arrows are set in Suisse in the comp. */
@font-face {
	font-family: "Suisse Intl";
	src: url("../fonts/suisse-intl-bold.woff2") format("woff2");
	font-weight: 700;
	font-style: normal;
	font-display: swap;
}

:root {
	--ink: #191819;
	--grey: #7f8080;
	--faint: #d8d8d8;
	--line: #cccccc;
	--chip: #e8e8e8;
	--ph: #413f42;
	--bg: #fff;

	--sans: "Univers Next", "Helvetica Neue", Helvetica, Arial, sans-serif;
	--arrow: "Suisse Intl", var(--sans);

	--u: calc(100vw / 586);

	--fs-l: max(18px, calc(var(--u) * 9));
	--fs-s: max(12px, calc(var(--u) * 5.06));
	--fs-btn: max(10.5px, calc(var(--u) * 4.34));
	--lh-l: 1.21;
	--lh-s: 1.19;
	--ls: calc(var(--fs-s) * var(--lh-s)); /* one line of small text */

	--pad: calc(var(--u) * 7.6);
	--gap: calc(var(--u) * 3.5);
	--kv: calc(var(--u) * 48.7);          /* label column beside a list */
	--col: calc((100vw - 2 * var(--pad) - 3 * var(--gap)) / 4 + var(--gap)); /* column pitch */

	--nav-py: calc(var(--u) * 7.2);
	--top: calc(var(--u) * 62);           /* inner page: nav to first content */
	--sec: calc(var(--u) * 52);           /* between sections */
	--sec-in: calc(var(--u) * 7.3);       /* rule to section content */
	--btn-gap: calc(var(--u) * 3);
	--cap-gap: calc(var(--u) * 4.6);
	--row-gap: calc(var(--u) * 24.7);
	--stagger-gap: calc(var(--u) * 60);
	--foot-gap: calc(var(--u) * 60);

	/* Features card scale: comp units with a floor, so it never shrinks below ~300px. */
	--fu: max(var(--u), 2.15px);
}

*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	-webkit-text-size-adjust: 100%;
	text-size-adjust: 100%;
	scroll-padding-top: calc(var(--fs-s) * 1.3 + 2 * var(--nav-py));
}
@media (prefers-reduced-motion: no-preference) {
	html {
		scroll-behavior: smooth;
	}
}

body {
	margin: 0;
	background: var(--bg);
	color: var(--ink);
	font-family: var(--sans);
	font-weight: 500;
	font-size: var(--fs-s);
	line-height: var(--lh-s);
	letter-spacing: -0.01em; /* the comp's tracking, measured against its line widths */
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	font-feature-settings: "kern" 1;
	overflow-x: hidden;
}

h1,
h2,
h3,
p,
ul,
dl,
dd,
figure {
	margin: 0;
	padding: 0;
	font: inherit;
}
ul {
	list-style: none;
}
img {
	display: block;
	max-width: 100%;
	height: auto;
}
a {
	color: inherit;
	text-decoration: none;
	transition: color 0.2s ease, background-color 0.2s ease, opacity 0.2s ease;
}
button {
	font: inherit;
	color: inherit;
	background: none;
	border: 0;
	padding: 0;
	cursor: pointer;
}
:focus-visible {
	outline: 1px solid var(--ink);
	outline-offset: 2px;
}

.screen-reader-text {
	position: absolute !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
}
.u-skip {
	position: absolute;
	left: var(--pad);
	top: -100px;
	z-index: 100;
	padding: 8px 12px;
	background: var(--ink);
	color: #fff;
}
.u-skip:focus {
	top: 8px;
}

/* ---------------------------------------------------------------- type */

.t-l {
	font-size: var(--fs-l);
	line-height: var(--lh-l);
	letter-spacing: -0.02em;
}
.t-grey {
	color: var(--grey);
}
.t-ink {
	color: var(--ink);
}

.prose p + p,
.prose p + ul,
.prose ul + p {
	margin-top: var(--ls);
}
.prose a:not(.btn) {
	text-decoration: underline;
	text-underline-offset: 0.15em;
}
.prose a:not(.btn):hover {
	color: var(--grey);
}
.prose img {
	margin-block: var(--ls);
}

/* ---------------------------------------------------------------- grid */

.grid {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	column-gap: var(--gap);
	padding-inline: var(--pad);
}

/* The comp's rules start at the left margin and run off the right edge. */
.rule {
	margin-left: var(--pad);
	border-top: 1px solid var(--line);
}

.section {
	margin-top: var(--sec);
}
.section > .rule + .grid {
	padding-top: var(--sec-in);
}

/* A black label beside (or above) a grey list. */
.kv--side {
	display: grid;
	grid-template-columns: var(--kv) minmax(0, 1fr);
	align-items: start;
}
.kv__list {
	color: var(--grey);
}

/* ---------------------------------------------------------------- button */

.btn {
	display: inline-flex;
	align-items: center;
	gap: calc(var(--u) * 3);
	height: max(22px, calc(var(--u) * 10.3));
	padding: 0 max(5px, calc(var(--u) * 2.4));
	background: var(--chip);
	border-radius: max(2px, calc(var(--u) * 1));
	color: var(--ink);
	font-size: var(--fs-btn);
	font-weight: 700;
	line-height: 1;
	letter-spacing: -0.02em;
	white-space: nowrap;
	vertical-align: middle;
}
.btn__arrow {
	font-family: var(--arrow);
	font-size: 0.75em;
	line-height: 1;
}
a.btn:hover {
	background: var(--ink);
	color: #fff;
}
.btn--sm {
	height: max(18px, calc(var(--u) * 9));
	font-size: max(9.5px, calc(var(--u) * 3.77));
	gap: calc(var(--u) * 2.5);
	padding: 0 max(4px, calc(var(--u) * 2));
}

* + .btn,
.t-l + .btn {
	margin-top: var(--btn-gap);
}

/* ---------------------------------------------------------------- nav */

.nav {
	position: sticky;
	top: 0;
	z-index: 40;
	background: var(--bg);
}
/* Logged-in editors: stick below the fixed admin bar (32px, 46px under 783px). */
.admin-bar .nav {
	top: 32px;
}
@media (max-width: 782px) {
	.admin-bar .nav {
		top: 46px;
	}
}
/* Below 600px the admin bar scrolls away with the page instead of staying fixed. */
@media (max-width: 600px) {
	.admin-bar .nav {
		top: 0;
	}
}
.nav__list {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	column-gap: var(--gap);
	padding: var(--nav-py) var(--pad);
	font-weight: 700;
	line-height: 1.3;
}
/* Items 4 and 5 share the last column, one at each edge. Both are placed
   explicitly, or auto-placement would push item 4 to a second row. */
.nav__item:nth-child(4),
.nav__item:nth-child(5) {
	grid-column: 4;
	grid-row: 1;
}
.nav__item:nth-child(4) {
	justify-self: start;
}
.nav__item:nth-child(5) {
	justify-self: end;
}
.nav__link:hover {
	color: var(--grey);
}

/* ---------------------------------------------------------------- home */

.hero {
	padding: calc(var(--u) * 7) var(--pad) calc(var(--u) * 25);
}
.hero__intro {
	max-width: calc(var(--u) * 556);
}
.hero__intro .btn {
	margin: 0 0 0 calc(var(--u) * 1.5);
	vertical-align: calc(var(--u) * 0.6);
}

/* Four images in the comp's exact positions, in points from the page edge. */
.collage {
	position: relative;
	height: calc(var(--u) * 219.5);
	margin: calc(var(--u) * 24.7) calc(-1 * var(--pad)) 0;
}
.collage__item {
	position: absolute;
	z-index: 2;
	display: block;
	overflow: hidden;
	background: var(--ph);
}
.collage__item img,
.collage__item .ph {
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.collage__item--1 {
	left: calc(var(--u) * 297.6);
	top: 0;
	width: calc(var(--u) * 102);
	height: calc(var(--u) * 77.8);
}
.collage__item--2 {
	z-index: 1;
	left: calc(var(--u) * 187);
	top: calc(var(--u) * 70);
	width: calc(var(--u) * 166);
	height: calc(var(--u) * 113.8);
}
.collage__item--3 {
	left: calc(var(--u) * 123.5);
	top: calc(var(--u) * 141);
	width: calc(var(--u) * 71);
	height: calc(var(--u) * 69);
}
.collage__item--4 {
	left: calc(var(--u) * 331.6);
	top: calc(var(--u) * 127.5);
	width: calc(var(--u) * 116.4);
	height: calc(var(--u) * 92);
}
a.collage__item img {
	transition: transform 0.6s ease;
}
a.collage__item:hover img {
	transform: scale(1.03);
}

.home .services {
	margin-top: calc(var(--u) * 20);
}
.services__statement {
	grid-column: 1 / 3;
}
/* Each list sits on a column with its label hung in the gutter to the left. */
.services__list {
	margin-left: calc(-1 * var(--kv));
}

/* ---------------------------------------------------------------- home: 3D card carousel
   Motion adapted from Tom Miller's "Scrolling Card Carousel"
   (codepen.io/creativeocean/pen/vENbEBE, MIT). dvc.js sets each card's
   transform from scroll position; this file only places the stage. */

.hero--carousel {
	padding-bottom: calc(var(--u) * 12);
}

.stack {
	position: relative;
}
.stack.is-live {
	/* One screen to pin the stage, plus ~0.8 of a screen per card. */
	height: calc(var(--stack-n) * 80vh + 100vh);
}
.stack__stage {
	position: relative;
}
.stack.is-live .stack__stage {
	position: sticky;
	top: 0;
	height: 100vh;
	height: 100svh;
	overflow: hidden;
}
/* perspective reaches only direct children, so it lives on the deck that holds the cards. */
.stack.is-live .stack__deck {
	position: absolute;
	inset: 0;
	perspective: 300px;
}
.stack.is-live .stack__card {
	position: absolute;
	left: 50%;
	top: 50%;
	height: min(78vh, 620px);
	aspect-ratio: 2 / 3;
	overflow: hidden;
	background: var(--ph);
	/* The pen's pivot (999px below a 600px card, 100px back), as a share of the card. */
	transform-origin: 50% 166% -100px;
	transform: translate3d(-50%, -45%, -500px) rotateX(2deg);
	will-change: transform, opacity;
	backface-visibility: hidden;
}
.stack__card img,
.stack__card .ph {
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.stack__shade {
	position: absolute;
	inset: 0;
	background: radial-gradient(ellipse at 30% 20%, rgba(0, 0, 0, 0) 30%, #000 150%);
	opacity: 0.45;
	pointer-events: none;
}
.stack.is-live .stack__static-cap {
	display: none;
}
.stack__card .card__soon {
	z-index: 2;
}

/* The caption strip pinned to the foot of the stage; cards drop behind it. */
.stack__bar {
	display: none;
}
.stack.is-live .stack__bar {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 30;
	display: grid;
	align-items: end;
	padding-top: calc(var(--u) * 6);
	padding-bottom: calc(var(--u) * 7);
	background: var(--bg);
}
.stack__cap {
	margin: 0;
	transition: opacity 0.25s ease;
}
.stack__cap.is-swapping {
	opacity: 0;
}
.stack__count {
	grid-column: 3;
	color: var(--grey);
	font-variant-numeric: tabular-nums;
}
.stack__go {
	grid-column: 4;
	justify-self: end;
}
.stack__go .btn {
	margin: 0;
}

/* The Features card would sit on the caption bar: step aside while pinned. */
.is-stack-pinned .feat {
	opacity: 0;
	visibility: hidden;
	transform: translateY(8px);
	transition: opacity 0.3s ease, transform 0.3s ease, visibility 0s linear 0.3s;
}

/* Without JS or with reduced motion: a plain row of cards. */
.stack:not(.is-live) .stack__deck {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: var(--row-gap) var(--gap);
	padding: 0 var(--pad);
}
.stack:not(.is-live) .stack__card {
	display: block;
	position: relative;
}
/* Grid items stretch, which would make the live mode's height: 100% resolve
   and push the caption under the next row; size from the ratio alone. */
.stack:not(.is-live) .stack__card > img,
.stack:not(.is-live) .stack__card > .ph {
	height: auto;
	aspect-ratio: 2 / 3;
}
.stack:not(.is-live) .stack__deck {
	align-items: start;
}
.stack:not(.is-live) .stack__shade {
	display: none;
}

/* Staggered cards: home Work row and the Feed index. */
.stagger {
	row-gap: var(--stagger-gap);
	align-items: start;
}
.stagger-section > .rule + .grid {
	padding-top: calc(var(--u) * 12.3);
}
.card {
	display: block;
}
.card__media {
	position: relative;
	display: block;
	overflow: hidden;
	background: var(--ph);
}
.card__media img,
.card__media .ph,
.tile__media img,
.tile__media .ph {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.6s ease, opacity 0.3s ease;
}
a.card:hover .card__media img,
a.tile:hover .tile__media img {
	transform: scale(1.03);
}
/* Crops and widths from the comp's four card shapes (share of the column). */
.card--a .card__media { width: 65%;   aspect-ratio: 1 / 1; }
.card--b .card__media { width: 65.5%; aspect-ratio: 91.7 / 72.7; }
.card--c .card__media { width: 64.5%; aspect-ratio: 90.3 / 122.2; }
.card--d .card__media { width: 84%;   aspect-ratio: 117.7 / 72.7; }

.cap {
	display: block;
	margin-top: var(--cap-gap);
}
.cap > span {
	display: block;
}
.cap__sub {
	color: var(--grey);
}
.cap__meta {
	color: var(--faint);
}
a.card:hover .cap__title,
a.tile:hover .cap__title {
	color: var(--grey);
}

.card__soon {
	position: absolute;
	top: calc(var(--u) * 4.4);
	left: calc(var(--u) * 4);
	z-index: 1;
	margin: 0;
}

/* Journal and News */
.journal .grid {
	align-items: start;
}
.journal__head {
	grid-column: 1 / 3;
}
.journal__list {
	grid-column: 3 / 5;
	padding-top: calc(var(--u) * 1.2);
}
.entry {
	display: grid;
	grid-template-columns: calc(var(--u) * 52.3) minmax(0, calc(var(--u) * 212));
	column-gap: calc(var(--u) * 6);
	align-items: start;
}
.entry + .entry {
	margin-top: calc(var(--u) * 5);
}
.entry__thumb {
	display: block;
	position: relative;
	aspect-ratio: 1;
	overflow: hidden;
	background: var(--ph);
}
.entry__thumb img,
.entry__thumb .ph {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.entry__title a:hover {
	color: var(--grey);
}
.entry__text {
	color: var(--grey);
}
.entry__more {
	color: var(--grey);
	text-decoration: underline;
	text-underline-offset: 0.15em;
}
.entry__more:hover {
	color: var(--ink);
}

/* ---------------------------------------------------------------- filters (Work, Feed) */

.filters {
	padding-top: var(--top);
	align-items: start;
}
.filters__link {
	color: var(--grey);
}
.filters__link:hover,
.filters__link.is-active {
	color: var(--ink);
}

/* ---------------------------------------------------------------- Work index */

.projects {
	margin-top: calc(var(--u) * 45);
	row-gap: var(--row-gap);
	align-items: start;
	grid-auto-flow: row dense;
}
.tile {
	display: block;
}
.tile--l {
	grid-column: span 2;
}
.tile[hidden] {
	display: none;
}
.tile__media {
	position: relative;
	display: block;
	overflow: hidden;
	aspect-ratio: 140.5 / 179.5;
	background: #7f7f7f;
}
.tile .cap {
	margin-top: calc(var(--u) * 10);
}
.projects__empty {
	padding: var(--sec) var(--pad) 0;
}

/* ---------------------------------------------------------------- Feed index */

.feed .stagger {
	margin-top: calc(var(--u) * 45);
}
.feed__empty {
	padding: var(--sec) var(--pad) 0;
}
.pager--feed {
	padding: var(--sec) var(--pad) 0;
}

/* ---------------------------------------------------------------- project */

.project__head {
	padding: var(--top) var(--pad) 0;
}
.study {
	display: grid;
	row-gap: var(--gap);
	margin-top: calc(var(--u) * 4.5);
	padding-inline: var(--pad);
}
.study figure {
	overflow: hidden;
	background: var(--ph);
}
.study img {
	width: 100%;
}
.study__row--pair,
.study__row--text {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	column-gap: var(--gap);
}
.study__row--pair img {
	height: 100%;
	object-fit: cover;
}
.study__text {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	gap: var(--sec);
	padding-top: calc(var(--u) * 3);
}
.study__caption {
	max-width: calc(var(--u) * 145);
	color: var(--grey);
}
.study__statement {
	max-width: calc(var(--u) * 270);
}
.study__row--text.is-image-left .study__text {
	order: 2;
}

.project > .rule {
	margin-top: calc(var(--u) * 19);
}
.project__info {
	padding-top: calc(var(--u) * 8);
	align-items: start;
}
.project__meta > div + div {
	margin-top: var(--ls);
}
.project__meta dt {
	color: var(--ink);
}
.project__meta dd {
	color: var(--grey);
}
.project__body {
	grid-column: 3 / 5;
	max-width: calc(var(--u) * 280);
}

.pager {
	display: flex;
	flex-wrap: wrap;
	gap: calc(var(--u) * 2.6);
	margin-top: calc(var(--u) * 44);
}
.pager .btn {
	margin: 0;
}

/* Project and entry pages end close to the footer. */
.single .foot,
.page .foot:not(.studio ~ .foot) {
	margin-top: calc(var(--u) * 17);
}

/* ---------------------------------------------------------------- entry / page */

.article {
	align-items: start;
	padding-top: calc(var(--u) * 18);
}
.article__image {
	grid-column: 3 / 5;
	overflow: hidden;
	background: var(--ph);
}
/* The comp's landscape crop, whatever the photo's own shape. */
.article__image {
	aspect-ratio: 284 / 180;
}
.article__image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.article__head {
	grid-column: 1 / 3;
	grid-row: 2;
	margin-top: calc(var(--u) * 32);
	padding-right: var(--gap);
}
.article__head a:hover {
	color: var(--ink);
}
.article__head .t-grey:first-child {
	margin-bottom: calc(var(--u) * 1.5);
}
.article__body {
	grid-column: 3 / 5;
	grid-row: 2;
	margin-top: calc(var(--u) * 32);
	max-width: calc(var(--u) * 280);
}
.article--page {
	padding-top: var(--top);
}
.article--page .article__head,
.article--page .article__body {
	grid-row: 1;
	margin-top: 0;
}

/* ---------------------------------------------------------------- studio */

.studio__approach {
	position: relative;
	margin-top: calc(var(--u) * 27.7);
	padding-inline: var(--pad);
}
.studio__approach > .studio__label {
	position: absolute;
	top: calc(var(--u) * 0.5);
	left: var(--pad);
}
/* First line starts at column 2, the label sits in column 1. */
.studio__lede {
	text-indent: var(--col);
}
.caps {
	margin-top: calc(var(--u) * 84);
	padding-inline: 0;
	align-items: start;
}
.cap-col__heading {
	margin-top: calc(var(--u) * 2);
}
.cap-col__text {
	margin-top: calc(var(--u) * 3);
	padding-right: calc(var(--u) * 2);
}
.cap-col__list {
	margin-top: var(--ls);
}

.studio .section {
	margin-top: calc(var(--u) * 34);
}
.studio .section > .rule + .grid {
	padding-top: calc(var(--u) * 13);
}
.studio__clients .grid {
	align-items: start;
}
.clients__intro {
	grid-column: 1 / 3;
	padding-right: calc(var(--u) * 20);
}
.clients__intro .studio__label {
	margin-bottom: calc(var(--u) * 5.4);
}
.clients__note {
	max-width: calc(var(--u) * 205);
	margin-top: calc(var(--u) * 6.6);
}
.clients__note a,
.clients__note u {
	text-decoration: underline;
	text-underline-offset: 0.15em;
}
.clients__note a:hover {
	color: var(--ink);
}
.clients__groups {
	grid-column: 3 / 5;
	columns: 2;
	column-gap: var(--gap);
	padding-top: calc(var(--u) * 7);
}
.clients__name {
	break-after: avoid;
}
.clients__list + .clients__name {
	margin-top: var(--ls);
}
.studio__awards {
	margin-top: calc(var(--u) * 56) !important;
}
.studio__awards .grid {
	align-items: start;
}
.awards__statement {
	grid-column: 3 / 5;
	max-width: calc(var(--u) * 256);
	margin-top: calc(var(--u) * -2);
}
.studio ~ .foot {
	margin-top: calc(var(--u) * 47.5);
}

/* ---------------------------------------------------------------- footer */

.foot {
	display: flex;
	flex-direction: column;
	min-height: calc(var(--u) * 220);
	margin-top: var(--foot-gap);
}
.foot__top {
	padding-top: calc(var(--u) * 7);
	align-items: start;
}
.foot__cta {
	grid-column: 1 / 3;
}
.foot__col {
	font-style: normal;
}
.foot__col p + p {
	margin-top: var(--ls);
}
.foot__col,
.foot__copy,
.foot__social {
	color: var(--grey);
}
.foot a:not(.btn):hover {
	color: var(--ink);
}
.foot__bottom {
	margin-top: auto;
	padding-top: var(--sec);
	padding-bottom: calc(var(--u) * 5);
}
.foot__copy {
	grid-column: 1 / 3;
	padding-left: calc(var(--u) * 2.6);
}
.foot__social {
	grid-column: 3;
}

/* ---------------------------------------------------------------- Features card */

.feat {
	position: fixed;
	right: calc(var(--fu) * 6.9);
	bottom: calc(var(--fu) * 6.6);
	z-index: 50;
	width: calc(var(--fu) * 140.2);
	height: calc(var(--fu) * 47.3);
	background: var(--chip);
	color: var(--grey);
	font-size: calc(var(--fu) * 4);
	line-height: 1.2;
	box-shadow: 0 2px 18px rgba(25, 24, 25, 0.12);
	transition: opacity 0.3s ease, transform 0.3s ease;
}
.feat[hidden] {
	display: none;
}
.feat.is-closing {
	opacity: 0;
	transform: translateY(8px);
}
.feat__head {
	position: absolute;
	top: calc(var(--fu) * 3.7);
	left: calc(var(--fu) * 5.1);
	right: calc(var(--fu) * 5.1);
	display: grid;
	grid-template-columns: calc(var(--fu) * 33.6) calc(var(--fu) * 35.5) 1fr auto;
	align-items: center;
	color: #928e8f;
}
.feat__pager {
	display: inline-flex;
	gap: calc(var(--fu) * 2.4);
	align-items: center;
}
.feat__btn,
.feat__close {
	padding: 2px 3px;
	margin: -2px -3px;
	line-height: 1;
}
.feat__btn:hover,
.feat__close:hover {
	color: var(--ink);
}
.feat__close {
	margin-right: calc(var(--fu) * 11);
}
.feat__slides {
	position: absolute;
	inset: 0;
}
.feat__slide {
	position: absolute;
	inset: 0;
	display: block;
	color: #766f70;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.4s ease, visibility 0s linear 0.4s;
}
.feat__slide.is-active {
	opacity: 1;
	visibility: visible;
	transition-delay: 0s;
}
.feat__text {
	position: absolute;
	top: calc(var(--fu) * 22.4);
	left: calc(var(--fu) * 5.1);
	width: calc(var(--fu) * 95);
	display: -webkit-box;
	-webkit-line-clamp: 4;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
a.feat__slide:hover .feat__text {
	color: var(--ink);
}
.feat__thumb {
	position: absolute;
	right: calc(var(--fu) * 6.3);
	bottom: calc(var(--fu) * 5.8);
	width: calc(var(--fu) * 28.2);
	height: calc(var(--fu) * 27);
	overflow: hidden;
	background: var(--ph);
}
.feat__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* ---------------------------------------------------------------- placeholder */

.ph {
	display: block;
	width: 100%;
	aspect-ratio: 4 / 3;
	background: var(--ph);
}

/* ==========================================================================
   Tablet: the desktop grid still holds; only the dense blocks loosen.
   ========================================================================== */

@media (min-width: 768px) and (max-width: 1099px) {
	.caps {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		row-gap: calc(var(--u) * 40);
	}
	.cap-col__heading br {
		display: none;
	}
	.services__statement {
		padding-right: 24px;
	}
}

/* ==========================================================================
   Mobile. No comp exists for this — layout is single-column-first, with the
   two-up grids kept wherever the content is short enough to sit side by side.
   ========================================================================== */

@media (max-width: 767px) {
	:root {
		--fs-l: 20px;
		--fs-s: 13px;
		--fs-btn: 11px;
		--lh-s: 1.25;
		--lh-l: 1.2;

		--pad: 16px;
		--gap: 8px;
		--kv: 0px;

		--nav-py: 14px;
		--top: 40px;
		--sec: 48px;
		--sec-in: 14px;
		--btn-gap: 12px;
		--cap-gap: 8px;
		--row-gap: 28px;
		--stagger-gap: 32px;
		--foot-gap: 64px;

		--fu: calc((100vw - 24px) / 140.2);
	}

	.btn {
		gap: 8px;
	}

	/* Desktop line breaks in display text would strand single words here. */
	.t-l br {
		display: none;
	}

	.nav__list {
		display: flex;
		justify-content: space-between;
	}

	/* Home ------------------------------------------------------------- */
	.hero {
		padding: 16px var(--pad) 32px;
	}
	.hero__intro .btn {
		margin: 6px 0 0 4px;
		vertical-align: 1px;
	}
	.collage {
		height: 98vw;
		margin-top: 32px;
	}
	.collage__item--1 { left: 50vw; top: 0;    width: 36vw; height: 27vw; }
	.collage__item--2 { left: 8vw;  top: 21vw; width: 62vw; height: 42vw; }
	.collage__item--3 { left: 2vw;  top: 59vw; width: 30vw; height: 29vw; }
	.collage__item--4 { left: 46vw; top: 56vw; width: 50vw; height: 40vw; }

	.home .services {
		margin-top: 8px;
	}
	.hero--carousel {
		padding-bottom: 8px;
	}
	.stack.is-live .stack__card {
		height: min(64svh, 520px);
	}
	.stack.is-live .stack__bar {
		grid-template-columns: minmax(0, 1fr) auto;
		column-gap: 12px;
		padding-top: 12px;
		padding-bottom: 16px;
	}
	.stack__cap {
		grid-column: 1;
		grid-row: 1 / 3;
	}
	.stack__count {
		grid-column: 2;
		grid-row: 1;
		justify-self: end;
	}
	.stack__go {
		grid-column: 2;
		grid-row: 2;
		margin-top: 6px;
	}
	.stack:not(.is-live) .stack__deck {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.services .grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		row-gap: 32px;
	}
	.services__statement {
		grid-column: 1 / -1;
	}
	.services__list {
		margin-left: 0;
	}
	.kv--side {
		display: block;
	}
	.kv--side .kv__label {
		display: block;
		margin-bottom: 4px;
	}

	.stagger,
	.projects {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
	.stagger-section > .rule + .grid {
		padding-top: 16px;
	}
	.card .card__media {
		width: 100%;
	}

	.journal .grid {
		grid-template-columns: 1fr;
	}
	.journal__head,
	.journal__list {
		grid-column: 1;
	}
	.journal__list {
		margin-top: 28px;
		padding-top: 0;
	}
	.entry {
		grid-template-columns: 88px minmax(0, 1fr);
		column-gap: 12px;
	}
	.entry + .entry {
		margin-top: 20px;
	}

	/* Work / Feed indexes ---------------------------------------------- */
	.filters {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
	.projects,
	.feed .stagger {
		margin-top: 36px;
	}
	.tile .cap {
		margin-top: 8px;
	}
	.card__soon {
		top: 8px;
		left: 8px;
	}

	/* Project ---------------------------------------------------------- */
	.study {
		margin-top: 16px;
	}
	.study__row--text {
		grid-template-columns: 1fr;
		row-gap: 24px;
	}
	.study__row--text.is-image-left .study__text {
		order: 0;
	}
	.study__text {
		gap: 24px;
		padding: 8px 0;
	}
	.study__caption,
	.study__statement {
		max-width: none;
	}
	.project > .rule {
		margin-top: 32px;
	}
	.project__info {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		row-gap: 28px;
		padding-top: 14px;
	}
	.project__body {
		grid-column: 1 / -1;
		max-width: none;
	}
	.pager {
		margin-top: 32px;
		gap: 8px;
	}
	.single .foot,
	.page .foot:not(.studio ~ .foot) {
		margin-top: 48px;
	}

	/* Entry / page ----------------------------------------------------- */
	.article {
		grid-template-columns: 1fr;
		padding-top: 8px;
	}
	.article__image,
	.article__head,
	.article__body {
		grid-column: 1;
		grid-row: auto;
		max-width: none;
	}
	.article__head {
		margin-top: 24px;
		padding-right: 0;
	}
	.article__body {
		margin-top: 20px;
	}
	.article--page {
		padding-top: var(--top);
	}
	.article--page .article__head {
		margin-top: 0;
	}

	/* Studio ----------------------------------------------------------- */
	.studio__approach {
		margin-top: 32px;
	}
	.studio__approach > .studio__label {
		position: static;
		margin-bottom: 8px;
	}
	.studio__lede {
		text-indent: 0;
	}
	.caps {
		grid-template-columns: 1fr;
		row-gap: 36px;
		margin-top: 48px;
	}
	.cap-col__heading br {
		display: none;
	}
	.studio .section,
	.studio__awards {
		margin-top: 48px !important;
	}
	.studio .section > .rule + .grid {
		padding-top: 14px;
	}
	.studio__clients .grid,
	.studio__awards .grid {
		grid-template-columns: 1fr;
	}
	.clients__intro,
	.clients__groups,
	.awards__statement {
		grid-column: 1;
		padding-right: 0;
		max-width: none;
	}
	.clients__note {
		max-width: none;
		margin-top: 12px;
	}
	.clients__groups {
		margin-top: 28px;
		padding-top: 0;
	}
	.awards__label {
		order: 1;
		margin-bottom: 8px;
	}
	.awards__statement {
		order: 2;
		margin: 0 0 20px;
	}
	.awards__list {
		order: 3;
	}
	.studio ~ .foot {
		margin-top: 64px;
	}

	/* Footer ----------------------------------------------------------- */
	.foot {
		min-height: 0;
	}
	.foot__top {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		row-gap: 32px;
		padding-top: 14px;
	}
	.foot__cta {
		grid-column: 1 / -1;
	}
	.foot__bottom {
		grid-template-columns: 1fr;
		row-gap: 4px;
		padding-top: 48px;
		padding-bottom: 20px;
	}
	.foot__copy,
	.foot__social {
		grid-column: 1;
		padding-left: 0;
	}
	/* Leave room so the fixed Features card never covers the last lines. */
	.has-feat .foot__bottom {
		padding-bottom: calc(var(--fu) * 47.3 + 32px);
	}

	.feat {
		right: 12px;
		bottom: 12px;
	}
}

@media (min-width: 560px) and (max-width: 767px) {
	.caps {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		column-gap: 16px;
	}
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		transition-duration: 0.01ms !important;
	}
}

@media print {
	.nav,
	.feat {
		display: none !important;
	}
}
