/*
 * Legacy Peak Enterprise.
 *
 * The palette is lifted straight off the client's logo: a near-black ground, a
 * metallic gold that runs dark-to-pale across a gradient, and a cool silver for
 * the secondary voice. Nothing else is introduced. A logo that already commits
 * this hard to two metals does not need a third colour arguing with it.
 *
 * The brief asked for "luxury dark, but not too luxury". The line is held in the
 * type: Cinzel — an inscriptional Roman face, effectively caps-only — appears in
 * the wordmark, the eyebrow labels and the numerals, and nowhere else. Headings
 * are set in Instrument Sans. Setting them in Cinzel would have made every
 * heading on the site all-caps, which crosses from confident into wedding
 * stationery.
 *
 * Sections alternate between the base black and a marginally lighter panel, each
 * separated by a gold hairline. That is the entire structural rhythm.
 */

/* ---------------------------------------------------------------- tokens -- */

:root {
	--lp-black:       #0A0A0B;
	--lp-panel:       #101013;
	--lp-raise:       #16161A;
	--lp-well:        #08080A;

	--lp-gold:        #C9962E;
	--lp-gold-lt:     #E8C874;
	--lp-gold-pale:   #F2DFA0;
	--lp-gold-deep:   #8F6A1C;
	--lp-gold-metal:  linear-gradient(135deg, #8F6A1C 0%, #E8C874 42%, #C9962E 68%, #F2DFA0 100%);

	--lp-silver:      #C3C8CE;
	--lp-silver-dim:  #7C838B;

	--lp-text:        #E9E7E3;
	--lp-muted:       #9A9DA3;
	--lp-faint:       #6E7278;

	--lp-line:        rgba(201, 150, 46, .16);
	--lp-line-soft:   rgba(255, 255, 255, .07);

	--lp-display:     'Cinzel', 'Trajan Pro', 'Iowan Old Style', Georgia, serif;
	--lp-body:        'Instrument Sans', ui-sans-serif, -apple-system, 'Segoe UI', sans-serif;

	--lp-wrap:        1360px;
	--lp-gutter:      clamp(1.25rem, 4vw, 3.5rem);
	--lp-band:        clamp(4.5rem, 9vw, 8rem);

	/* The hero and the inner-page banner both slide up underneath the header by
	   exactly its height. Keeping that number in one place stops the two from
	   drifting apart the next time the masthead changes.
	 *
	   This is the AT-REST height, with the logo at full size. The header shrinks
	   on scroll, but the page loads at the top, so at-rest is the height the
	   negative margin has to clear. */
	--lp-header-h:    164px;

	/* The masthead interpolates between these two states. --lp-shrink is a
	   0-to-1 number theme.js writes on the header element each scroll frame, so
	   the collapse is continuous with the scroll rather than a jump at a
	   threshold. It is set on the header rather than on :root so a scroll only
	   invalidates the masthead's styles, not the whole document's. */
	--lp-bar-max:     164px;
	--lp-bar-min:     76px;
	--lp-logo-max:    136px;
	--lp-logo-min:    52px;
	--lp-shrink:      0;

	--lp-ease:        cubic-bezier(.22, .61, .36, 1);
}

@media (max-width: 1040px) {
	:root {
		--lp-header-h:  132px;
		--lp-bar-max:   132px;
		--lp-bar-min:   68px;
		--lp-logo-max:  112px;
		--lp-logo-min:  48px;
	}
}

/* ------------------------------------------------------------------ base -- */

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

html {
	scroll-behavior: smooth;
	/* The header is fixed, so an in-page anchor would otherwise land with its
	   heading tucked underneath it. */
	scroll-padding-top: 6rem;
	-webkit-text-size-adjust: 100%;
}

body {
	margin: 0;
	background: var(--lp-black);
	color: var(--lp-text);
	font-family: var(--lp-body);
	font-size: clamp(1rem, .97rem + .16vw, 1.0625rem);
	line-height: 1.7;
	font-weight: 400;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	overflow-x: hidden;
}

body.lpe-locked { overflow: hidden; }

img, svg { max-width: 100%; display: block; }

a { color: var(--lp-gold-lt); text-decoration: none; transition: color .2s var(--lp-ease); }
a:hover { color: var(--lp-gold-pale); }

h1, h2, h3, h4 {
	margin: 0;
	font-weight: 600;
	line-height: 1.12;
	letter-spacing: -.021em;
	text-wrap: balance;
}

h1 { font-size: clamp(2.3rem, 1.5rem + 3.4vw, 4.1rem); }
h2 { font-size: clamp(1.75rem, 1.25rem + 2.1vw, 2.75rem); }
h3 { font-size: clamp(1.15rem, 1.05rem + .45vw, 1.4rem); }

p { margin: 0 0 1.1em; }
p:last-child { margin-bottom: 0; }

ul, ol { margin: 0; padding: 0; list-style: none; }

:focus-visible {
	outline: 2px solid var(--lp-gold-lt);
	outline-offset: 3px;
	border-radius: 2px;
}

::selection { background: var(--lp-gold); color: #12100B; }

.lpe-sr {
	position: absolute;
	width: 1px; height: 1px;
	padding: 0; margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

.lpe-skip {
	position: absolute;
	top: -100px; left: 1rem;
	z-index: 200;
	padding: .75rem 1.25rem;
	background: var(--lp-gold);
	color: #12100B;
	font-weight: 600;
	transition: top .2s var(--lp-ease);
}
.lpe-skip:focus { top: 1rem; color: #12100B; }

/* --------------------------------------------------------------- layout -- */

.lpe-wrap {
	width: 100%;
	max-width: var(--lp-wrap);
	margin-inline: auto;
	padding-inline: var(--lp-gutter);
}

.lpe-wrap--narrow { max-width: 62rem; }

.lpe-main { display: block; }

.lpe-section {
	position: relative;
	padding-block: var(--lp-band);
}

/* The alternating band. A hairline rather than a hard edge, so the change in
   value reads as depth instead of as two stacked boxes. */
.lpe-section--panel {
	background: var(--lp-panel);
	border-block: 1px solid var(--lp-line);
}

.lpe-section--projects { background: var(--lp-well); border-block: 1px solid var(--lp-line); }

/* ------------------------------------------------------------- typography -- */

.lpe-eyebrow {
	display: inline-block;
	margin-bottom: 1.1rem;
	font-family: var(--lp-display);
	font-size: .72rem;
	font-weight: 600;
	letter-spacing: .22em;
	text-transform: uppercase;
	color: var(--lp-silver-dim);
}

.lpe-eyebrow--gold { color: var(--lp-gold-lt); }

/* The gold hairline that sits under a heading. Its own element rather than a
   pseudo-element so a template can place it deliberately. */
.lpe-rule {
	display: block;
	width: 68px;
	height: 2px;
	margin: 1.4rem 0 1.5rem;
	background: var(--lp-gold-metal);
	border-radius: 2px;
}

.lpe-head--center .lpe-rule,
.lpe-closer .lpe-rule,
.lpe-modal__head .lpe-rule { margin-inline: auto; }

.lpe-lede {
	font-size: clamp(1.05rem, 1rem + .35vw, 1.28rem);
	line-height: 1.62;
	color: var(--lp-muted);
	max-width: 54ch;
}

.lpe-head { max-width: 50rem; margin-bottom: clamp(2.5rem, 5vw, 3.75rem); }
.lpe-head--center { margin-inline: auto; text-align: center; }
.lpe-head--center .lpe-lede { margin-inline: auto; }

.lpe-prose { color: var(--lp-muted); }
.lpe-prose p { margin-bottom: 1.15em; }

.lpe-prose--editor { color: var(--lp-muted); }
.lpe-prose--editor h2,
.lpe-prose--editor h3 { color: var(--lp-text); margin: 2rem 0 .75rem; }
.lpe-prose--editor ul,
.lpe-prose--editor ol { margin: 0 0 1.2em 1.25rem; list-style: disc; }
.lpe-prose--editor ol { list-style: decimal; }
.lpe-prose--editor li { margin-bottom: .4em; }

.lpe-pull {
	margin: 2rem 0 0;
	padding-left: 1.4rem;
	border-left: 2px solid var(--lp-gold);
	font-size: clamp(1.05rem, 1rem + .3vw, 1.2rem);
	font-weight: 500;
	line-height: 1.5;
	color: var(--lp-text);
	font-style: normal;
}

/* --------------------------------------------------------------- buttons -- */

.lpe-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .5rem;
	padding: .95rem 1.75rem;
	border: 1px solid transparent;
	border-radius: 2px;
	background: var(--lp-gold-metal);
	color: #12100B;
	font-family: var(--lp-body);
	font-size: .875rem;
	font-weight: 600;
	letter-spacing: .06em;
	text-transform: uppercase;
	line-height: 1;
	cursor: pointer;
	transition: transform .2s var(--lp-ease), box-shadow .2s var(--lp-ease), filter .2s var(--lp-ease);
	-webkit-appearance: none;
	appearance: none;
}

.lpe-btn:hover {
	color: #12100B;
	transform: translateY(-2px);
	filter: brightness(1.07);
	box-shadow: 0 12px 30px -12px rgba(201, 150, 46, .55);
}

.lpe-btn:active { transform: translateY(0); }

.lpe-btn--ghost {
	background: transparent;
	border-color: rgba(201, 150, 46, .42);
	color: var(--lp-gold-lt);
}
.lpe-btn--ghost:hover {
	background: rgba(201, 150, 46, .09);
	border-color: var(--lp-gold-lt);
	color: var(--lp-gold-pale);
	box-shadow: none;
}

.lpe-btn--sm { padding: .7rem 1.15rem; font-size: .76rem; }
.lpe-btn--lg { padding:1.1rem 2.15rem; font-size: .92rem; }
.lpe-btn--block { display: flex; width: 100%; }

/* -------------------------------------------------------------- utility -- */

.lpe-utility {
	position: relative;
	z-index: 60;
	background: var(--lp-well);
	border-bottom: 1px solid var(--lp-line);
	font-size: .78rem;
}

.lpe-utility__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	min-height: 42px;
	padding-block: .4rem;
}

.lpe-utility__tagline {
	margin: 0;
	font-family: var(--lp-display);
	font-size: .7rem;
	letter-spacing: .17em;
	text-transform: uppercase;
	color: var(--lp-gold);
	white-space: nowrap;
}

.lpe-utility__list {
	display: flex;
	align-items: center;
	gap: 1.5rem;
	color: var(--lp-faint);
}

.lpe-utility__list a {
	display: inline-flex;
	align-items: center;
	gap: .45rem;
	color: var(--lp-muted);
}
.lpe-utility__list a:hover { color: var(--lp-gold-lt); }

/* The mark stays gold while the text beside it goes grey, so the bar reads as
   two labelled details rather than a row of undifferentiated links. It warms
   with the text on hover. */
.lpe-icon {
	flex-shrink: 0;
	color: var(--lp-gold);
	transition: color .2s var(--lp-ease);
}
.lpe-utility__list a:hover .lpe-icon { color: var(--lp-gold-lt); }

@media (max-width: 900px) {
	.lpe-utility__tagline { display: none; }
	.lpe-utility__inner { justify-content: center; }
	.lpe-utility__hours { display: none; }
}

@media (max-width: 520px) {
	.lpe-utility__list { gap: 1rem; font-size: .74rem; }
}

/* --------------------------------------------------------------- header -- */

.lpe-header {
	position: sticky;
	top: 0;
	/* Above the mobile drawer (90), below the enquiry modal (120).
	 *
	 * The burger animates into an X when the drawer opens — that is the close
	 * control. At z-index 80 the drawer's full-screen overlay painted straight
	 * over it, so the menu opened with no visible way out: the X was there,
	 * rendered, correctly labelled, and buried under an opaque panel. Anything
	 * that doubles as a close button has to outrank the thing it closes. */
	z-index: 100;
	/* A constant-height shell that never resizes.
	 *
	 * The header used to shrink itself, and because a sticky element still
	 * occupies its place in the document, losing 88px of header height shortened
	 * the page by 88px — dragging every section upward while the visitor was
	 * scrolling down. The scroll position could not hold still either: the
	 * browser kept correcting for a document changing length underneath it, so a
	 * scroll to 26px landed back at 0. It read as a stutter, and no transition
	 * duration could have fixed it, because the fault was layout and not timing.
	 *
	 * Only .lpe-header__bar moves now. The shell is click-through so the
	 * transparent space under the collapsed bar does not swallow clicks meant
	 * for the hero beneath it. */
	height: var(--lp-header-h);
	pointer-events: none;
}

.lpe-header__bar {
	pointer-events: auto;
	background: rgba(10, 10, 11, calc(.96 * var(--lp-shrink)));
	border-bottom: 1px solid rgba(201, 150, 46, calc(.16 * var(--lp-shrink)));
	backdrop-filter: blur(calc(16px * var(--lp-shrink)));
	-webkit-backdrop-filter: blur(calc(16px * var(--lp-shrink)));
}

.lpe-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	/* No transition: the value is already tied frame-by-frame to scroll
	   position, and easing on top of that lags a step behind the finger. */
	min-height: calc(var(--lp-bar-max) + (var(--lp-bar-min) - var(--lp-bar-max)) * var(--lp-shrink));
}

.lpe-brand { display: inline-flex; flex-shrink: 0; }

.lpe-logo { display: inline-flex; align-items: center; gap: .7rem; }

/* The logo is a tall, near-square lockup — a monogram over a wordmark over a
 * ribbon. Sized to fit a conventional 80px masthead all three tiers shrink
 * together and it becomes unreadable, so it starts at 136px, where the wordmark
 * is about 22px and "LEGACY PEAK" can actually be read. Below roughly 120px the
 * company name turns into texture.
 *
 * It then collapses to 52px as the visitor scrolls, by which point they have
 * seen it and the masthead's job is to stay out of the way. */
.lpe-logo__img {
	height: calc(var(--lp-logo-max) + (var(--lp-logo-min) - var(--lp-logo-max)) * var(--lp-shrink));
	width: auto;
}

.lpe-logo--footer .lpe-logo__img { height: 112px; }

/* The coded mark stands in for the real logo, so it has to carry the lockup on
   its own. At the 34px the SVG declares it reads as a smudge beside the type. */
.lpe-logo__mark { display: inline-flex; }
.lpe-logo__mark svg { width: 44px; height: 44px; }
.lpe-logo--footer .lpe-logo__mark svg { width: 52px; height: 52px; }

.lpe-logo__text { display: flex; flex-direction: column; line-height: 1; }

.lpe-logo__name {
	font-family: var(--lp-display);
	font-size: 1.18rem;
	font-weight: 600;
	letter-spacing: .1em;
	text-transform: uppercase;
	background: var(--lp-gold-metal);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.lpe-logo__sub {
	margin-top: .3rem;
	font-family: var(--lp-display);
	font-size: .6rem;
	letter-spacing: .3em;
	text-transform: uppercase;
	color: var(--lp-silver-dim);
}

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

.lpe-nav { margin-inline: auto; }

.lpe-nav__list { display: flex; align-items: center; gap: clamp(1rem, 2vw, 2rem); }

.lpe-nav__list a,
.lpe-nav__list li > a {
	position: relative;
	display: inline-block;
	padding-block: .4rem;
	font-size: .82rem;
	font-weight: 500;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--lp-text);
}

.lpe-nav__list a::after {
	content: '';
	position: absolute;
	left: 0; bottom: 0;
	width: 0; height: 1px;
	background: var(--lp-gold-metal);
	transition: width .25s var(--lp-ease);
}

.lpe-nav__list a:hover { color: var(--lp-gold-lt); }
.lpe-nav__list a:hover::after,
.lpe-nav__list .is-current > a::after,
.lpe-nav__list .current-menu-item > a::after { width: 100%; }

.lpe-nav__list .is-current > a,
.lpe-nav__list .current-menu-item > a { color: var(--lp-gold-lt); }

.lpe-header__actions { display: flex; align-items: center; gap: .75rem; flex-shrink: 0; }

.lpe-burger {
	display: none;
	padding: .6rem;
	background: none;
	border: 1px solid var(--lp-line);
	border-radius: 2px;
	cursor: pointer;
}

.lpe-burger__box { display: block; width: 20px; }
.lpe-burger__box i {
	display: block;
	height: 1.5px;
	background: var(--lp-gold-lt);
	transition: transform .25s var(--lp-ease), opacity .2s var(--lp-ease);
}
.lpe-burger__box i + i { margin-top: 4.5px; }

.lpe-burger[aria-expanded="true"] i:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.lpe-burger[aria-expanded="true"] i:nth-child(2) { opacity: 0; }
.lpe-burger[aria-expanded="true"] i:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

@media (max-width: 1040px) {
	.lpe-nav { display: none; }
	.lpe-burger { display: block; }
	.lpe-logo--footer .lpe-logo__img { height: 96px; }
}

@media (max-width: 620px) {
	.lpe-header__actions .lpe-btn { display: none; }
}

/* --------------------------------------------------------------- drawer -- */

.lpe-drawer {
	position: fixed;
	inset: 0;
	z-index: 90;
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 2.5rem;
	/* Clears the masthead, which now sits above this panel so its X stays
	   reachable. A flat 5rem let the first nav item slide underneath the logo. */
	padding: calc(var(--lp-header-h) + 2rem) var(--lp-gutter) 3rem;
	background: rgba(8, 8, 10, .97);
	backdrop-filter: blur(18px);
	-webkit-backdrop-filter: blur(18px);
	opacity: 0;
	visibility: hidden;
	transition: opacity .28s var(--lp-ease), visibility .28s var(--lp-ease);
}

.lpe-drawer[hidden] { display: flex; }
.lpe-drawer.is-open { opacity: 1; visibility: visible; }

.lpe-drawer__nav .lpe-nav__list {
	flex-direction: column;
	align-items: flex-start;
	gap: .35rem;
}

.lpe-drawer__nav .lpe-nav__list a {
	padding-block: .75rem;
	font-family: var(--lp-display);
	font-size: 1.5rem;
	letter-spacing: .07em;
}

.lpe-drawer__foot { display: flex; flex-direction: column; gap: 1.25rem; }

.lpe-drawer__call {
	font-family: var(--lp-display);
	font-size: 1.1rem;
	letter-spacing: .1em;
	text-align: center;
	color: var(--lp-gold-lt);
}

/* --------------------------------------------------------------- figures -- */

.lpe-figure {
	position: relative;
	margin: 0;
	overflow: hidden;
	border-radius: 3px;
	background: var(--lp-raise);
}

/* A light grade on every photograph.
 *
 * Stock exteriors are shot on bright days and come back with hard blue skies.
 * Dropped straight onto a near-black page they read as holes punched in it —
 * each one a different temperature, none of them belonging to the site. Pulling
 * saturation and brightness down a little and lifting contrast slightly settles
 * them into the same room without turning them muddy. It also quietly narrows
 * the gap between this stock and whatever the client eventually sends. */
.lpe-figure img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	filter: saturate(.82) brightness(.9) contrast(1.06);
}

/* The hero and banner have their own scrims doing much heavier work, so they
   opt out — grading them twice crushes the shadows. */
.lpe-figure--cover img { filter: saturate(.9) contrast(1.02); }

.lpe-figure--cover { position: absolute; inset: 0; border-radius: 0; }
.lpe-figure--cover img { width: 100%; height: 100%; }

.lpe-figure--tall { aspect-ratio: 4 / 5; }
.lpe-figure--wide { aspect-ratio: 16 / 10; }

/* A gold hairline inside the frame. Cheap, and it ties a photograph to the
   rest of the page without a heavy border. */
.lpe-figure:not(.lpe-figure--cover)::after {
	content: '';
	position: absolute;
	inset: 0;
	border: 1px solid var(--lp-line);
	border-radius: 3px;
	pointer-events: none;
}

/* The empty slot. Not a grey box — a dark panel carrying the mark and the
   filename it is waiting for, so it reads as deliberate and doubles as the
   shot list. */
.lpe-figure--empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: .9rem;
	min-height: 15rem;
	background:
		repeating-linear-gradient(
			135deg,
			transparent 0 12px,
			rgba(201, 150, 46, .035) 12px 24px
		),
		var(--lp-raise);
}

.lpe-figure__mark { opacity: .5; }

.lpe-figure__note {
	font-family: var(--lp-display);
	font-size: .68rem;
	letter-spacing: .2em;
	text-transform: uppercase;
	color: var(--lp-faint);
}

/* ------------------------------------------------------------------ hero -- */

.lpe-hero {
	position: relative;
	display: flex;
	align-items: center;
	min-height: clamp(34rem, 82vh, 48rem);
	/* The header is transparent over this, so the content needs to clear it. */
	/* The top value must clear the at-rest header (118px / 7.4rem) on every
	   viewport, so the minimum is set above it rather than at 7rem — on a short
	   laptop screen the vh term drops out and the heading slid under the logo. */
	padding-block: clamp(12rem, 19vh, 14.5rem) clamp(5rem, 10vh, 7rem);
	margin-top: calc(var(--lp-header-h) * -1);
	overflow: hidden;
}

.lpe-hero__media { position: absolute; inset: 0; z-index: 0; }

/* Two scrims, not one. A vertical wash keeps the top dark enough for the
   header, and a left-weighted wash keeps the column of text readable no matter
   what the photograph is doing on that side.
 *
 * The two multiply where they overlap, which is the trap: values that each look
 * reasonable alone stack to near-black over the left half and erase the
 * building entirely. These are tuned for the combined result — dark enough to
 * carry white text at the left, light enough at the right that the architecture
 * still reads. */
.lpe-hero__scrim {
	position: absolute;
	inset: 0;
	background:
		linear-gradient(to right, rgba(8, 8, 10, .86) 0%, rgba(8, 8, 10, .6) 44%, rgba(8, 8, 10, .14) 76%, rgba(8, 8, 10, .3) 100%),
		/* The vertical wash opens a clear band through the middle. The masthead
		   still needs cover at the very top, but a sunset sky is the best thing a
		   photograph like this has and a flat 72% turns it to brown mud. Fading
		   out by 22% lets the colour through where it actually lives. */
		linear-gradient(to bottom, rgba(8, 8, 10, .74) 0%, rgba(8, 8, 10, .3) 15%, rgba(8, 8, 10, 0) 30%, rgba(8, 8, 10, .1) 55%, rgba(8, 8, 10, .86) 100%);
}

/* A warm photograph is the whole point of this hero, so it keeps its saturation
   rather than taking the desaturating grade the inline figures get. */
.lpe-hero .lpe-figure--cover img { filter: saturate(1.02) contrast(1.03); }

/* Wide on purpose. At 46rem inside a centred wrap the hero copy sat as a narrow
   column floating in the middle of a large screen, which read as timid rather
   than composed. */
.lpe-hero__inner { position: relative; z-index: 2; max-width: 58rem; }

.lpe-hero__title { margin-bottom: 0; }

.lpe-hero__lede { max-width: 50ch; color: #C6C7CA; }

.lpe-hero__actions {
	display: flex;
	flex-wrap: wrap;
	gap: .9rem;
	margin-top: 2.25rem;
}

.lpe-hero__note {
	margin-top: 1.5rem;
	font-size: .84rem;
	color: var(--lp-faint);
}

.lpe-hero__ribbon {
	position: absolute;
	left: 0; right: 0; bottom: 0;
	z-index: 2;
	padding-block: .9rem;
	border-top: 1px solid var(--lp-line);
	background: rgba(8, 8, 10, .72);
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
	text-align: center;
}

.lpe-hero__ribbon span {
	font-family: var(--lp-display);
	font-size: .72rem;
	font-weight: 600;
	letter-spacing: .3em;
	text-transform: uppercase;
	background: var(--lp-gold-metal);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

@media (max-width: 620px) {
	.lpe-hero__ribbon span { font-size: .6rem; letter-spacing: .18em; }
}

/* ---------------------------------------------------------------- banner -- */

.lpe-banner {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: clamp(20rem, 46vh, 28rem);
	padding-block: clamp(11.5rem, 18vh, 13.5rem) clamp(2.5rem, 6vh, 4rem);
	margin-top: calc(var(--lp-header-h) * -1);
	overflow: hidden;
	background: var(--lp-well);
	border-bottom: 1px solid var(--lp-line);
}

.lpe-banner__media { position: absolute; inset: 0; z-index: 0; }

.lpe-banner__scrim {
	position: absolute;
	inset: 0;
	background:
		linear-gradient(to right, rgba(8, 8, 10, .93) 0%, rgba(8, 8, 10, .74) 55%, rgba(8, 8, 10, .5) 100%),
		linear-gradient(to bottom, rgba(8, 8, 10, .88) 0%, rgba(8, 8, 10, .4) 45%, rgba(8, 8, 10, .8) 100%);
}

.lpe-banner__inner { position: relative; z-index: 2; max-width: 60rem; }

.lpe-banner__lede { color: #C6C7CA; }

/* ----------------------------------------------------------------- split -- */

.lpe-split {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1.08fr);
	align-items: center;
	gap: clamp(2rem, 5vw, 4.5rem);
}

.lpe-split--reverse .lpe-split__media { order: 2; }
.lpe-split--reverse .lpe-split__body { order: 1; }

.lpe-split__body .lpe-lede { margin-bottom: 1.5rem; }
.lpe-split__body .lpe-btn { margin-top: 1.75rem; }

@media (max-width: 900px) {
	.lpe-split { grid-template-columns: 1fr; }
	.lpe-split--reverse .lpe-split__media,
	.lpe-split--reverse .lpe-split__body { order: initial; }
	.lpe-figure--tall { aspect-ratio: 16 / 11; }
}

/* ----------------------------------------------------------------- cards -- */

.lpe-cards {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 19rem), 1fr));
	gap: 1.25rem;
}

.lpe-card {
	position: relative;
	display: flex;
	flex-direction: column;
	padding: 2.25rem 1.85rem 2rem;
	background: var(--lp-raise);
	border: 1px solid var(--lp-line-soft);
	border-radius: 3px;
	color: inherit;
	overflow: hidden;
	transition: transform .28s var(--lp-ease), border-color .28s var(--lp-ease), background .28s var(--lp-ease);
}

/* The gold edge that lights up on hover. A pseudo-element rather than a border
   colour change, so the card does not shift by a pixel when it activates. */
.lpe-card::before {
	content: '';
	position: absolute;
	top: 0; left: 0;
	width: 100%; height: 2px;
	background: var(--lp-gold-metal);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform .35s var(--lp-ease);
}

.lpe-card:hover {
	transform: translateY(-4px);
	border-color: var(--lp-line);
	background: #1A1A1F;
	color: inherit;
}

.lpe-card:hover::before { transform: scaleX(1); }

.lpe-card__num {
	font-family: var(--lp-display);
	font-size: .78rem;
	font-weight: 600;
	letter-spacing: .2em;
	color: var(--lp-gold);
	margin-bottom: 1rem;
}

.lpe-card__title { margin-bottom: .7rem; color: var(--lp-text); }

.lpe-card__text { color: var(--lp-muted); font-size: .95rem; margin-bottom: 1.5rem; }

.lpe-card__link {
	margin-top: auto;
	font-size: .76rem;
	font-weight: 600;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--lp-gold-lt);
}

.lpe-card__link::after {
	content: ' \2192';
	display: inline-block;
	transition: transform .25s var(--lp-ease);
}

.lpe-card:hover .lpe-card__link::after { transform: translateX(4px); }

/* --------------------------------------------------------------- pillars -- */

/* Five items, and real gaps rather than the 1px-gap-over-a-background trick
 * used elsewhere.
 *
 * That trick draws hairlines cheaply, but it only works when the items fill the
 * grid exactly. Five pillars in a four-column auto-fit leaves one cell empty,
 * and the container background shows through it as a large grey panel that
 * looks like a broken card. With real gaps an incomplete row is simply empty
 * space. The explicit five-column rule then makes the common case a clean row.
 */
.lpe-pillars {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
	gap: 1.15rem;
}

@media (min-width: 1080px) {
	.lpe-pillars { grid-template-columns: repeat(5, 1fr); }
}

.lpe-pillar {
	padding: 2rem 1.5rem;
	background: var(--lp-black);
	border: 1px solid var(--lp-line-soft);
	border-radius: 3px;
	transition: background .28s var(--lp-ease), border-color .28s var(--lp-ease);
}

.lpe-section--panel .lpe-pillar { background: var(--lp-panel); }

.lpe-pillar:hover { background: var(--lp-raise); border-color: var(--lp-line); }

.lpe-pillar__title { margin-bottom: .7rem; color: var(--lp-text); }

.lpe-pillar__lead {
	margin-bottom: .6rem;
	font-size: .95rem;
	font-weight: 500;
	color: var(--lp-gold-lt);
}

.lpe-pillar__body { font-size: .92rem; color: var(--lp-muted); margin: 0; }

/* ----------------------------------------------------------------- steps -- */

.lpe-steps {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
	gap: 1.75rem;
	counter-reset: step;
}

.lpe-step { position: relative; padding-top: 2rem; border-top: 1px solid var(--lp-line); }

.lpe-step__num {
	display: block;
	margin-bottom: .9rem;
	font-family: var(--lp-display);
	font-size: 2.1rem;
	font-weight: 400;
	line-height: 1;
	background: var(--lp-gold-metal);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.lpe-step__title { margin-bottom: .5rem; }
.lpe-step__lead { font-size: .93rem; color: var(--lp-muted); margin: 0; }

/* ---------------------------------------------------------------- phases -- */

.lpe-phases { display: grid; gap: 1px; background: var(--lp-line-soft); border: 1px solid var(--lp-line-soft); }

.lpe-phase {
	display: grid;
	grid-template-columns: 6rem minmax(0, 1fr);
	gap: 1.5rem;
	padding: 2.25rem 2rem;
	background: var(--lp-black);
	transition: background .28s var(--lp-ease);
}

.lpe-phase:hover { background: var(--lp-panel); }

.lpe-phase__num {
	font-family: var(--lp-display);
	font-size: 2.4rem;
	font-weight: 400;
	line-height: 1;
	background: var(--lp-gold-metal);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.lpe-phase__title { margin-bottom: .45rem; }

.lpe-phase__lead {
	margin-bottom: .6rem;
	font-weight: 500;
	color: var(--lp-gold-lt);
}

.lpe-phase__text { color: var(--lp-muted); margin: 0; max-width: 62ch; }

@media (max-width: 620px) {
	.lpe-phase { grid-template-columns: 1fr; gap: .9rem; padding: 1.85rem 1.35rem; }
	.lpe-phase__num { font-size: 1.9rem; }
}

/* ---------------------------------------------------------------- values -- */

/* Nine values, so three columns divide exactly. Same reasoning as the pillars:
   real gaps, because an auto-fit that lands on four columns would leave three
   empty cells showing as grey panels. */
.lpe-values {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
	gap: 1.15rem;
}

@media (min-width: 900px) {
	.lpe-values { grid-template-columns: repeat(3, 1fr); }
}

.lpe-value {
	display: flex;
	align-items: baseline;
	gap: 1rem;
	padding: 1.5rem 1.4rem;
	background: var(--lp-black);
	border: 1px solid var(--lp-line-soft);
	border-radius: 3px;
	transition: background .25s var(--lp-ease), border-color .25s var(--lp-ease);
}

.lpe-section--panel .lpe-value { background: var(--lp-panel); }

.lpe-value:hover { background: var(--lp-raise); border-color: var(--lp-line); }

.lpe-value__num {
	font-family: var(--lp-display);
	font-size: .78rem;
	letter-spacing: .12em;
	color: var(--lp-gold);
	flex-shrink: 0;
}

.lpe-value__label { font-size: 1.02rem; font-weight: 500; color: var(--lp-text); }

/* ------------------------------------------------------------------- duo -- */

.lpe-duo {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
	gap: 1.25rem;
}

.lpe-duo__item {
	padding: clamp(2rem, 4vw, 3rem);
	background: var(--lp-black);
	border: 1px solid var(--lp-line);
	border-radius: 3px;
}

.lpe-duo__text {
	margin: 0;
	font-size: clamp(1.05rem, 1rem + .35vw, 1.22rem);
	line-height: 1.6;
	color: var(--lp-text);
}

/* ---------------------------------------------------------------- points -- */

.lpe-points {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
	gap: 1.25rem;
}

.lpe-point {
	padding: 2.25rem 1.85rem;
	background: var(--lp-black);
	border: 1px solid var(--lp-line-soft);
	border-left: 2px solid var(--lp-gold);
	border-radius: 3px;
}

.lpe-point__num {
	display: block;
	margin-bottom: .85rem;
	font-family: var(--lp-display);
	font-size: .76rem;
	letter-spacing: .2em;
	color: var(--lp-gold);
}

.lpe-point__title { margin-bottom: .6rem; }
.lpe-point__text { color: var(--lp-muted); font-size: .95rem; margin: 0; }

/* ----------------------------------------------------- projects / invite -- */

.lpe-comingsoon {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 1.25rem;
	max-width: 34rem;
	margin-inline: auto;
	padding: clamp(2.5rem, 5vw, 3.5rem);
	text-align: center;
	border: 1px solid var(--lp-line);
	border-radius: 3px;
	background:
		repeating-linear-gradient(
			135deg,
			transparent 0 14px,
			rgba(201, 150, 46, .03) 14px 28px
		),
		var(--lp-black);
}

.lpe-comingsoon__mark { opacity: .8; }

.lpe-comingsoon__text {
	margin: 0;
	font-family: var(--lp-display);
	font-size: .8rem;
	letter-spacing: .18em;
	text-transform: uppercase;
	color: var(--lp-muted);
}

.lpe-invite {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 1.5rem;
	text-align: center;
}

.lpe-invite__text { max-width: 42ch; color: var(--lp-muted); margin: 0; }

.lpe-project__title { margin: 1.25rem 0 .4rem; }
.lpe-project__meta {
	margin-bottom: .7rem;
	font-size: .78rem;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--lp-gold);
}
.lpe-project__text { color: var(--lp-muted); font-size: .95rem; }

/* ------------------------------------------------------------------ faqs -- */

.lpe-faqs { display: grid; gap: 1px; background: var(--lp-line-soft); border: 1px solid var(--lp-line-soft); }

.lpe-faq { background: var(--lp-black); }

.lpe-faq__q {
	padding: 1.5rem 3rem 1.5rem 1.75rem;
	position: relative;
	font-size: 1.05rem;
	font-weight: 500;
	color: var(--lp-text);
	cursor: pointer;
	list-style: none;
	transition: color .2s var(--lp-ease);
}

.lpe-faq__q::-webkit-details-marker { display: none; }
.lpe-faq__q:hover { color: var(--lp-gold-lt); }

/* The +/- indicator. Two bars, one of which rotates away when the panel opens. */
.lpe-faq__q::after,
.lpe-faq__q::before {
	content: '';
	position: absolute;
	right: 1.75rem;
	top: 50%;
	width: 12px;
	height: 1.5px;
	background: var(--lp-gold);
	transition: transform .25s var(--lp-ease);
}
.lpe-faq__q::before { transform: translateY(-50%) rotate(90deg); }
.lpe-faq__q::after { transform: translateY(-50%); }
.lpe-faq[open] .lpe-faq__q::before { transform: translateY(-50%) rotate(0deg); }

.lpe-faq__a {
	margin: 0;
	padding: 0 3rem 1.75rem 1.75rem;
	color: var(--lp-muted);
	max-width: 70ch;
}

/* ---------------------------------------------------------------- contact -- */

.lpe-contact {
	display: grid;
	grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
	gap: clamp(2rem, 5vw, 4rem);
	align-items: start;
}

@media (max-width: 900px) { .lpe-contact { grid-template-columns: 1fr; } }

.lpe-contact__form { min-width: 0; }
.lpe-contact__form .lpe-form { margin-top: 2rem; }

.lpe-contact__aside {
	display: grid;
	gap: 1px;
	background: var(--lp-line-soft);
	border: 1px solid var(--lp-line-soft);
	border-radius: 3px;
	overflow: hidden;
}

.lpe-contact__block { padding: 1.6rem 1.75rem; background: var(--lp-panel); }

.lpe-contact__heading {
	margin-bottom: .5rem;
	font-family: var(--lp-display);
	font-size: .66rem;
	letter-spacing: .22em;
	text-transform: uppercase;
	color: var(--lp-silver-dim);
}

.lpe-contact__big {
	display: inline-block;
	font-size: 1.15rem;
	font-weight: 500;
	color: var(--lp-text);
	word-break: break-word;
}
.lpe-contact__big:hover { color: var(--lp-gold-lt); }

.lpe-contact__note,
.lpe-contact__text { margin: .35rem 0 0; font-size: .9rem; color: var(--lp-muted); }

.lpe-contact__social { display: flex; gap: 1.25rem; }

.lpe-contact__seal {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: .75rem;
	padding: 2rem 1.75rem;
	text-align: center;
	background: var(--lp-well);
}

.lpe-contact__seal p {
	margin: 0;
	font-family: var(--lp-display);
	font-size: .68rem;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--lp-gold);
}

/* ------------------------------------------------------------------ form -- */

.lpe-form { display: grid; gap: 1.15rem; }

.lpe-field { display: grid; gap: .45rem; min-width: 0; }

.lpe-field__row {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
	gap: 1.15rem;
}

.lpe-field label {
	font-size: .78rem;
	font-weight: 500;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--lp-muted);
}

.lpe-field label span { color: var(--lp-gold); }

.lpe-field input,
.lpe-field select,
.lpe-field textarea {
	width: 100%;
	padding: .85rem 1rem;
	background: var(--lp-well);
	border: 1px solid var(--lp-line-soft);
	border-radius: 2px;
	color: var(--lp-text);
	font-family: var(--lp-body);
	font-size: 1rem;
	line-height: 1.5;
	transition: border-color .2s var(--lp-ease), background .2s var(--lp-ease);
	-webkit-appearance: none;
	appearance: none;
}

.lpe-field textarea { resize: vertical; min-height: 8rem; }

/* The native select arrow is drawn by the OS in a light colour that is
   invisible on this background, so appearance is stripped and the chevron is
   drawn here instead. */
.lpe-field select {
	background-image:
		linear-gradient(45deg, transparent 50%, var(--lp-gold) 50%),
		linear-gradient(135deg, var(--lp-gold) 50%, transparent 50%);
	background-position:
		calc(100% - 20px) calc(50% + 2px),
		calc(100% - 14px) calc(50% + 2px);
	background-size: 6px 6px, 6px 6px;
	background-repeat: no-repeat;
	padding-right: 2.75rem;
	cursor: pointer;
}

.lpe-field select option { background: var(--lp-panel); color: var(--lp-text); }

.lpe-field input:focus,
.lpe-field select:focus,
.lpe-field textarea:focus {
	border-color: var(--lp-gold);
	background: var(--lp-black);
	outline: none;
}

.lpe-field input::placeholder,
.lpe-field textarea::placeholder { color: var(--lp-faint); }

/* The honeypot. Off-screen rather than display:none — some bots skip fields
   that are explicitly hidden, and this one is meant to be filled in. */
.lpe-trap {
	position: absolute !important;
	left: -9999px !important;
	width: 1px; height: 1px;
	overflow: hidden;
}

.lpe-form__note { margin: 0; font-size: .9rem; min-height: 1.4em; }
.lpe-form__note.is-ok { color: var(--lp-gold-lt); }
.lpe-form__note.is-bad { color: #E0806E; }

.lpe-form.is-sending { opacity: .6; pointer-events: none; }

.lpe-alert {
	padding: 1rem 1.25rem;
	margin-bottom: 1.75rem;
	border-left: 2px solid var(--lp-gold);
	background: var(--lp-panel);
	font-size: .95rem;
}
.lpe-alert--ok { border-left-color: var(--lp-gold); color: var(--lp-gold-lt); }
.lpe-alert--bad { border-left-color: #E0806E; color: #E0806E; }

/* ----------------------------------------------------------------- modal -- */

.lpe-modal {
	position: fixed;
	inset: 0;
	z-index: 120;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--lp-gutter);
	opacity: 0;
	visibility: hidden;
	transition: opacity .25s var(--lp-ease), visibility .25s var(--lp-ease);
}

.lpe-modal[hidden] { display: flex; }
.lpe-modal.is-open { opacity: 1; visibility: visible; }

.lpe-modal__veil {
	position: absolute;
	inset: 0;
	background: rgba(6, 6, 8, .88);
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
}

.lpe-modal__panel {
	position: relative;
	width: 100%;
	max-width: 40rem;
	max-height: min(90vh, 52rem);
	overflow-y: auto;
	padding: clamp(1.75rem, 4vw, 2.75rem);
	background: var(--lp-panel);
	border: 1px solid var(--lp-line);
	border-radius: 3px;
	box-shadow: 0 40px 90px -30px rgba(0, 0, 0, .9);
	transform: translateY(14px) scale(.99);
	transition: transform .3s var(--lp-ease);
}

.lpe-modal.is-open .lpe-modal__panel { transform: translateY(0) scale(1); }

/* A gold cap on the panel, echoing the card hover edge. */
.lpe-modal__panel::before {
	content: '';
	position: absolute;
	top: 0; left: 0; right: 0;
	height: 2px;
	background: var(--lp-gold-metal);
}

.lpe-modal__close {
	position: absolute;
	top: .85rem; right: .85rem;
	width: 2.35rem; height: 2.35rem;
	display: flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: 1px solid transparent;
	border-radius: 2px;
	color: var(--lp-muted);
	font-size: 1.6rem;
	line-height: 1;
	cursor: pointer;
	transition: color .2s var(--lp-ease), border-color .2s var(--lp-ease);
}
.lpe-modal__close:hover { color: var(--lp-gold-lt); border-color: var(--lp-line); }

.lpe-modal__head { margin-bottom: 1.75rem; text-align: center; }
.lpe-modal__head h2 { font-size: clamp(1.4rem, 1.2rem + 1vw, 1.85rem); }
.lpe-modal__lede { margin: 0; font-size: .95rem; color: var(--lp-muted); }

/* ---------------------------------------------------------------- closer -- */

.lpe-closer {
	position: relative;
	padding-block: clamp(4rem, 8vw, 6.5rem);
	background: var(--lp-well);
	border-top: 1px solid var(--lp-line);
	text-align: center;
	overflow: hidden;
}

/* A faint gold bloom behind the heading, so the last band before the footer
   does not read as flat black. */
.lpe-closer::before {
	content: '';
	position: absolute;
	top: -40%; left: 50%;
	width: 46rem; height: 46rem;
	transform: translateX(-50%);
	background: radial-gradient(circle, rgba(201, 150, 46, .09) 0%, transparent 62%);
	pointer-events: none;
}

.lpe-closer__inner { position: relative; max-width: 44rem; margin-inline: auto; }
.lpe-closer__title { margin-bottom: 0; }
.lpe-closer .lpe-lede { margin-inline: auto; }

.lpe-closer__actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: .9rem;
	margin-top: 2.25rem;
}

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

.lpe-footer { background: var(--lp-black); border-top: 1px solid var(--lp-line); }

.lpe-footer__inner {
	display: grid;
	grid-template-columns: 1.5fr 1fr 1fr 1.2fr;
	gap: clamp(2rem, 4vw, 3.5rem);
	padding-block: clamp(3.5rem, 7vw, 5rem);
}

@media (max-width: 1000px) { .lpe-footer__inner { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px)  { .lpe-footer__inner { grid-template-columns: 1fr; } }

.lpe-footer__brand .lpe-logo { margin-bottom: 1.25rem; }

.lpe-footer__tagline {
	margin-bottom: .5rem;
	font-family: var(--lp-display);
	font-size: .72rem;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--lp-gold);
}

.lpe-footer__where { font-size: .88rem; color: var(--lp-faint); margin: 0; }

.lpe-footer__heading {
	margin-bottom: 1.1rem;
	font-family: var(--lp-display);
	font-size: .66rem;
	letter-spacing: .22em;
	text-transform: uppercase;
	color: var(--lp-silver-dim);
}

.lpe-footer__nav ul,
.lpe-footer__contact ul { display: grid; gap: .6rem; }

.lpe-footer__nav a,
.lpe-footer__contact a { font-size: .92rem; color: var(--lp-muted); }
.lpe-footer__nav a:hover,
.lpe-footer__contact a:hover { color: var(--lp-gold-lt); }

.lpe-footer__hours { font-size: .88rem; color: var(--lp-faint); }

.lpe-footer__social { display: flex; gap: 1.1rem; margin-top: 1.1rem; }
.lpe-footer__social a {
	display: inline-flex;
	align-items: center;
	gap: .45rem;
	font-size: .88rem;
}

.lpe-footer__legal {
	padding-top: 1.5rem;
	border-top: 1px solid var(--lp-line-soft);
}

.lpe-footer__legal ul {
	display: flex;
	flex-wrap: wrap;
	gap: .6rem 1.5rem;
}

.lpe-footer__legal a { font-size: .82rem; color: var(--lp-faint); }
.lpe-footer__legal a:hover { color: var(--lp-gold-lt); }

.lpe-footer__legal + .lpe-footer__base { border-top: 0; }

/* ------------------------------------------------- syndicated legal docs -- */

/* The legal pages are rendered by the BB Legal Docs Consumer plugin, whose
 * markup is fetched from brokerboost.com and is not ours to edit.
 *
 * It wraps every document in an inline `style="color: #000000"`. That is a
 * reasonable default for the light broker sites the plugin was written for and
 * catastrophic here: black text on a near-black page, a privacy policy that is
 * technically present and literally unreadable. Inline styles beat stylesheets,
 * so overriding it needs !important — one of the few places that is the correct
 * tool rather than a shortcut. */
.bb-legal-container,
.bb-legal-container * { color: var(--lp-muted) !important; }

.bb-legal-container { max-width: 70ch; }

.bb-legal-container h1,
.bb-legal-container h2,
.bb-legal-container h3,
.bb-legal-container strong,
.bb-legal-container b { color: var(--lp-text) !important; }

.bb-legal-container h2,
.bb-legal-container h3 { margin: 2.25rem 0 .75rem; line-height: 1.25; }

.bb-legal-container p,
.bb-legal-container li { margin-bottom: 1em; }

.bb-legal-container ul,
.bb-legal-container ol { margin: 0 0 1.25em 1.25rem; list-style: disc; }
.bb-legal-container ol { list-style: decimal; }

.bb-legal-container a { color: var(--lp-gold-lt) !important; text-decoration: underline; }
.bb-legal-container a:hover { color: var(--lp-gold-pale) !important; }

.bb-legal-container hr {
	border: 0;
	border-top: 1px solid var(--lp-line-soft);
	margin: 2rem 0;
}

.lpe-footer__base {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: .75rem;
	padding-block: 1.5rem;
	border-top: 1px solid var(--lp-line-soft);
	font-size: .82rem;
	color: var(--lp-faint);
}

.lpe-footer__base p { margin: 0; }
.lpe-footer__by a { color: var(--lp-silver-dim); }
.lpe-footer__by a:hover { color: var(--lp-gold-lt); }

/* ----------------------------------------------------------------- posts -- */

.lpe-posts { display: grid; gap: 2.5rem; }
.lpe-post { padding-bottom: 2.5rem; border-bottom: 1px solid var(--lp-line-soft); }
.lpe-post__date {
	font-family: var(--lp-display);
	font-size: .7rem;
	letter-spacing: .18em;
	text-transform: uppercase;
	color: var(--lp-gold);
}
.lpe-post__title { margin: .5rem 0 .75rem; }
.lpe-post__title a { color: var(--lp-text); }
.lpe-post__title a:hover { color: var(--lp-gold-lt); }
.lpe-post__excerpt { color: var(--lp-muted); margin: 0; }

.lpe-pagination { margin-top: 3rem; }
.lpe-pagination .nav-links { display: flex; gap: .75rem; flex-wrap: wrap; }
.lpe-pagination .page-numbers {
	padding: .5rem .9rem;
	border: 1px solid var(--lp-line-soft);
	color: var(--lp-muted);
	font-size: .88rem;
}
.lpe-pagination .page-numbers.current,
.lpe-pagination .page-numbers:hover { border-color: var(--lp-gold); color: var(--lp-gold-lt); }

/* ---------------------------------------------------------------- reveal -- */

/* Elements start slightly low and transparent, and theme.js adds .is-in when
   they enter the viewport.
 *
 * The hidden starting state is gated on html.js, which a one-line script in the
 * head sets. Without that gate a visitor with JavaScript blocked, or any crawler
 * that does not run it, gets a page where every section is permanently at
 * opacity 0 — technically present, visibly blank. Gating it the other way round
 * means the fallback is the safe one. */
@media (prefers-reduced-motion: no-preference) {
	html.js [data-lpe-reveal] {
		opacity: 0;
		transform: translateY(18px);
		transition: opacity .7s var(--lp-ease), transform .7s var(--lp-ease);
	}
	html.js [data-lpe-reveal].is-in { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }
	*, *::before, *::after {
		animation-duration: .01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .01ms !important;
	}
}

/* ------------------------------------------------------------------ misc -- */

@media (max-width: 620px) {
	.lpe-section { padding-block: clamp(3.25rem, 11vw, 4.5rem); }
	.lpe-card { padding: 1.85rem 1.4rem; }
	.lpe-pillar { padding: 1.85rem 1.4rem; }
	.lpe-contact__block { padding: 1.35rem 1.4rem; }
}

/* The admin bar is fixed on the front end and would otherwise sit on top of the
   sticky header for logged-in users. */
body.admin-bar .lpe-header { top: 32px; }
@media (max-width: 782px) { body.admin-bar .lpe-header { top: 46px; } }
