/* Guide holding page — implements ui_kits/website/holding.html from the
   Guide Design System. Layout: header bar / centred main / footer with the
   phase-tint spine. Mobile-first values live in the base rules where the
   design defines a single-column flow; the desktop grid arrives at 900px. */

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

html {
	/* Stop iOS inflating type when a phone is rotated to landscape. */
	-webkit-text-size-adjust: 100%;
}

body.guide-holding {
	margin: 0;
	min-height: 100vh;
	background: var(--ink-900);
	color: var(--stone-050);
	font-family: var(--font-sans);
	line-height: var(--leading-body);
	font-synthesis-weight: none;
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
	overflow-wrap: break-word;
	display: grid;
	grid-template-rows: auto 1fr auto;
}

/* Dynamic viewport height: avoids the page jumping as mobile browser chrome
   shows and hides. Falls back to 100vh where dvh is unsupported. */
@supports (min-height: 100dvh) {
	body.guide-holding {
		min-height: 100dvh;
	}
}

body.guide-holding a {
	text-decoration: none;
}

body.guide-holding a:focus-visible {
	outline: 2px solid var(--signal-400);
	outline-offset: 3px;
}

/* Wordmark (design system component) */
.gd-wordmark {
	display: inline-flex;
	align-items: center;
	font-family: var(--font-wordmark);
	font-weight: var(--weight-medium);
	letter-spacing: var(--tracking-wordmark);
	line-height: 1;
	text-decoration: none;
	white-space: nowrap;
}

.gd-wordmark--inverse {
	color: var(--stone-050);
}

/* Header bar.
   The location line is kept on one line and allowed to drop onto its own row
   when it cannot sit beside the wordmark, rather than wrapping mid-phrase. */
.bar {
	padding: 28px 26px 0;
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: space-between;
	gap: 6px 24px;
}

.bar em {
	font-style: normal;
	font-family: var(--font-mono);
	font-size: 12px;
	letter-spacing: 0.04em;
	color: var(--ink-400);
	white-space: nowrap;
}

/* Wordmark size is set here rather than inline so it can scale with the
   viewport. */
.bar__mark {
	font-size: clamp(30px, 5.2vw, 42px);
}

.bar__nav {
	display: flex;
	align-items: baseline;
	gap: 24px;
}

.bar__link {
	position: relative;
	font-size: 15px;
	font-weight: var(--weight-medium);
	letter-spacing: 0.01em;
	color: var(--ink-300);
	border-bottom: 2px solid transparent;
	padding-bottom: 3px;
	transition: var(--transition-control);
}

.bar__link:hover,
.bar__link--on {
	color: var(--stone-050);
	border-bottom-color: var(--signal-400);
}

/* Comfortable touch target without shifting the underline. */
.bar__link::after {
	content: "";
	position: absolute;
	inset: -12px -8px;
}

.skip-link {
	position: absolute;
	left: -9999px;
	top: 0;
	padding: 10px 16px;
	background: var(--stone-050);
	color: var(--ink-900);
	font-size: 14px;
	font-weight: var(--weight-medium);
	z-index: 10;
}

.skip-link:focus {
	left: 8px;
	top: 8px;
}

/* Main */
.mid {
	padding: 40px 26px 48px;
	display: grid;
	grid-template-columns: 1fr;
	gap: 40px;
	align-content: center;
	align-items: start;
}

/* Type scales fluidly below the 900px breakpoint so there are no jumps
   between phone sizes; from 900px up the design's fixed steps take over. */
.guide-holding h1 {
	margin: 0;
	font-family: var(--font-display);
	font-weight: var(--weight-light);
	font-size: clamp(32px, 9vw, 46px);
	line-height: 1.06;
	letter-spacing: -0.032em;
	color: var(--stone-050);
	max-width: 17ch;
}

.guide-holding h1 strong {
	font-weight: var(--weight-semibold);
}

.guide-holding h1 em {
	font-style: normal;
	color: var(--signal-300);
}

.mid .intro p {
	margin: 26px 0 0;
	font-size: clamp(16.5px, 4.4vw, 20px);
	line-height: 1.56;
	color: var(--ink-200);
	max-width: 44ch;
}

.mid .intro p + p {
	margin-top: 18px;
}

.act {
	position: relative;
	display: inline-block;
	margin-top: 34px;
	font-size: clamp(17px, 4.6vw, 19px);
	font-weight: var(--weight-medium);
	color: var(--stone-050);
	border-bottom: 2px solid var(--signal-400);
	padding-bottom: 3px;
	transition: border-color var(--transition-control);
}

/* Extends the touch target to a comfortable size without moving the
   underline. */
.act::after {
	content: "";
	position: absolute;
	inset: -12px -8px;
}

.act:hover {
	border-bottom-color: var(--stone-050);
}

/* Side column: contact + stages */
.side {
	padding-top: 9px;
}

.side .lbl {
	display: block;
	font-size: 13px;
	font-weight: var(--weight-medium);
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--ink-400);
	margin-bottom: 9px;
}

.side .con {
	margin: 0 0 30px;
	font-family: var(--font-mono);
	font-size: 13.5px;
	line-height: 1.75;
	letter-spacing: 0.02em;
	color: var(--ink-200);
}

.side .con a {
	position: relative;
	display: inline-block;
	color: var(--ink-200);
	border-bottom: 1px solid var(--border-inverse);
}

.side .con a::after {
	content: "";
	position: absolute;
	inset: -12px -6px;
}

.side .con a:hover {
	color: var(--stone-050);
	border-bottom-color: var(--signal-400);
}

.st {
	list-style: none;
	margin: 0;
	padding: 0;
}

.st li {
	display: grid;
	grid-template-columns: 82px 1fr;
	gap: 12px;
	padding: 9px 0 9px 11px;
	border-top: 1px solid var(--border-inverse);
	position: relative;
}

.st li:last-child {
	border-bottom: 1px solid var(--border-inverse);
}

.st li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 9px;
	bottom: 9px;
	width: 2px;
	background: var(--tint, var(--signal-400));
}

.st b {
	font-size: 14.5px;
	font-weight: var(--weight-semibold);
	color: var(--stone-050);
	letter-spacing: -0.008em;
}

.st span {
	font-size: 13.5px;
	line-height: 1.42;
	color: var(--ink-300);
}

/* Footer */
.foot {
	padding: 0 26px;
}

.foot__in {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	align-items: baseline;
	gap: 8px;
	padding: 22px 0;
	font-family: var(--font-mono);
	font-size: 12px;
	letter-spacing: 0.03em;
	color: var(--ink-400);
	border-top: 1px solid var(--border-inverse);
}

.spine {
	display: flex;
	height: 4px;
}

.spine i {
	flex: 1;
}

/* Narrow phones: reclaim horizontal room from the page gutters. */
@media (max-width: 380px) {
	.bar {
		padding: 24px 20px 0;
	}

	.mid {
		padding: 32px 20px 40px;
	}

	.foot {
		padding: 0 20px;
	}
}

/* Tablet and up: two-column main, roomier chrome. From here the design's
   fixed type sizes and spacing apply exactly as drawn. */
@media (min-width: 900px) {
	.bar {
		padding: 40px 56px 0;
		gap: 32px;
	}

	.mid {
		padding: 56px;
		grid-template-columns: 1.6fr 1fr;
		gap: 48px;
	}

	.guide-holding h1 {
		font-size: 52px;
		line-height: 1;
	}

	.mid .intro p {
		margin-top: 32px;
		font-size: 20px;
	}

	.act {
		font-size: 19px;
	}

	.st li {
		gap: 14px;
	}

	.foot {
		padding: 0 56px;
	}

	.foot__in {
		flex-direction: row;
		gap: 32px;
	}
}

/* Desktop */
@media (min-width: 1100px) {
	.mid {
		padding: 72px 56px;
		grid-template-columns: 1.5fr 1fr;
		gap: 64px;
	}

	.guide-holding h1 {
		font-size: 66px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.act {
		transition: none;
	}
}

/* ---------------------------------------------------------------------------
   Insights (blog): index, archives and single posts. Shares the holding
   page's ink ground and type tokens so the two read as one site.
   --------------------------------------------------------------------------- */

.doc {
	padding: 40px 26px 56px;
}

.doc__in {
	max-width: 760px;
}

.doc .doc__title {
	margin: 0;
	font-family: var(--font-display);
	font-weight: var(--weight-light);
	font-size: clamp(32px, 7vw, 52px);
	line-height: 1.06;
	letter-spacing: -0.028em;
	color: var(--stone-050);
	max-width: 24ch;
}

.doc__standfirst {
	margin: 20px 0 0;
	font-size: clamp(16.5px, 4.2vw, 19px);
	line-height: 1.56;
	color: var(--ink-200);
	max-width: 46ch;
}

.doc__empty {
	margin: 40px 0 0;
	padding-top: 22px;
	border-top: 1px solid var(--border-inverse);
	color: var(--ink-300);
	font-size: 16px;
}

/* Post list */
.posts {
	list-style: none;
	margin: 40px 0 0;
	padding: 0;
	border-top: 1px solid var(--border-inverse);
}

.posts__item {
	border-bottom: 1px solid var(--border-inverse);
}

.posts__link {
	position: relative;
	display: block;
	padding: 22px 0 22px 14px;
}

/* Signal tick on hover, echoing the phase tints on the holding page. */
.posts__link::before {
	content: "";
	position: absolute;
	left: 0;
	top: 22px;
	bottom: 22px;
	width: 2px;
	background: var(--signal-400);
	opacity: 0;
	transition: opacity var(--duration-fast) var(--ease-out);
}

.posts__link:hover::before,
.posts__link:focus-visible::before {
	opacity: 1;
}

.posts__date {
	display: block;
	font-family: var(--font-mono);
	font-size: 12px;
	letter-spacing: 0.03em;
	color: var(--ink-400);
}

.posts__title {
	margin: 8px 0 0;
	font-family: var(--font-display);
	font-weight: var(--weight-regular);
	font-size: clamp(20px, 4.4vw, 26px);
	line-height: 1.2;
	letter-spacing: -0.018em;
	color: var(--stone-050);
}

.posts__excerpt {
	margin: 9px 0 0;
	font-size: 15.5px;
	line-height: 1.55;
	color: var(--ink-300);
	max-width: 58ch;
}

/* Single post */
.entry__head .posts__date {
	margin-bottom: 12px;
}

.entry__media {
	margin: 32px 0 0;
}

.entry__media img {
	display: block;
	max-width: 100%;
	height: auto;
}

.entry__back {
	margin: 48px 0 0;
	padding-top: 24px;
	border-top: 1px solid var(--border-inverse);
}

.entry__back .act {
	margin-top: 0;
}

/* Long-form copy */
.prose {
	margin-top: 32px;
	font-size: 17px;
	line-height: 1.7;
	color: var(--ink-200);
}

.prose > * {
	max-width: 68ch;
}

.prose p,
.prose ul,
.prose ol,
.prose blockquote,
.prose figure,
.prose pre {
	margin: 0 0 22px;
}

.prose h2,
.prose h3,
.prose h4 {
	font-family: var(--font-display);
	font-weight: var(--weight-medium);
	color: var(--stone-050);
	letter-spacing: -0.018em;
	line-height: 1.24;
	margin: 40px 0 14px;
}

.prose h2 {
	font-size: clamp(22px, 4.6vw, 28px);
}

.prose h3 {
	font-size: clamp(19px, 4vw, 22px);
}

.prose h4 {
	font-size: 18px;
}

.prose a {
	color: var(--stone-050);
	border-bottom: 1px solid var(--signal-400);
	transition: var(--transition-control);
}

.prose a:hover {
	border-bottom-color: var(--stone-050);
}

.prose strong {
	color: var(--stone-050);
	font-weight: var(--weight-semibold);
}

.prose ul,
.prose ol {
	padding-left: 22px;
}

.prose li {
	margin-bottom: 8px;
}

.prose blockquote {
	padding: 4px 0 4px 20px;
	border-left: 2px solid var(--signal-400);
	color: var(--stone-050);
	font-size: 19px;
	line-height: 1.55;
}

.prose blockquote p:last-child {
	margin-bottom: 0;
}

.prose code {
	font-family: var(--font-mono);
	font-size: 0.9em;
	color: var(--stone-050);
}

.prose pre {
	padding: 16px 18px;
	background: var(--ink-800);
	border: 1px solid var(--border-inverse);
	overflow-x: auto;
}

.prose pre code {
	font-size: 13.5px;
	line-height: 1.6;
}

.prose img {
	max-width: 100%;
	height: auto;
}

.prose hr {
	border: 0;
	border-top: 1px solid var(--border-inverse);
	margin: 36px 0;
}

/* Pagination */
.pager {
	margin-top: 32px;
	font-family: var(--font-mono);
	font-size: 13px;
	letter-spacing: 0.03em;
}

.pager .nav-links {
	display: flex;
	flex-wrap: wrap;
	gap: 8px 18px;
	align-items: baseline;
}

.pager a,
.pager .current {
	position: relative;
	display: inline-block;
	padding-bottom: 2px;
	color: var(--ink-300);
	border-bottom: 1px solid transparent;
}

.pager a:hover {
	color: var(--stone-050);
	border-bottom-color: var(--signal-400);
}

.pager .current {
	color: var(--stone-050);
	border-bottom-color: var(--signal-400);
}

@media (max-width: 380px) {
	.doc {
		padding: 32px 20px 48px;
	}
}

@media (min-width: 900px) {
	.doc {
		padding: 56px;
	}
}

@media (min-width: 1100px) {
	.doc {
		padding: 72px 56px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.posts__link::before,
	.bar__link,
	.prose a {
		transition: none;
	}
}
