/* =========================================================
 * Tech Resolve — Project Proposal Portal
 * Version: 1.0.0
 * ======================================================= */


/* =========================================================
 * Section
 * ======================================================= */

.tr-proposal {
	position: relative;

	padding:
		42px
		0
		78px;

	background:
		#f4f8f5;
}


.tr-proposal__shell {
	width: min(
		calc(100% - (var(--tr-gutter) * 2)),
		var(--tr-container-wide)
	);

	margin-inline: auto;
}


/* =========================================================
 * Panel
 * ======================================================= */

.tr-proposal__panel {
	position: relative;
	isolation: isolate;

	display: grid;

	grid-template-columns:
		minmax(0, 1.12fr)
		minmax(340px, 0.7fr);

	align-items: center;

	gap:
		clamp(40px, 7vw, 115px);

	min-height: 430px;

	padding:
		clamp(48px, 5vw, 74px)
		clamp(42px, 5.5vw, 86px);

	overflow: hidden;

	border:
		1px solid rgba(255, 255, 255, 0.08);

	border-radius:
		clamp(30px, 3vw, 44px);

	background:
		linear-gradient(
			120deg,
			#07120f 0%,
			#081820 48%,
			#0a1020 100%
		);

	box-shadow:
		0 42px 105px rgba(5, 21, 16, 0.24),
		inset 0 1px 0 rgba(255, 255, 255, 0.06);
}


/* =========================================================
 * Background
 * ======================================================= */

.tr-proposal__background {
	position: absolute;
	z-index: -3;

	inset: 0;

	overflow: hidden;

	pointer-events: none;
}


.tr-proposal__grid {
	position: absolute;

	top: -20%;
	right: -6%;

	width: 68%;
	height: 130%;

	background-image:
		linear-gradient(
			rgba(255, 255, 255, 0.035) 1px,
			transparent 1px
		),
		linear-gradient(
			90deg,
			rgba(255, 255, 255, 0.035) 1px,
			transparent 1px
		);

	background-size:
		42px
		42px;

	mask-image:
		radial-gradient(
			ellipse at center,
			#000,
			transparent 73%
		);

	transform:
		perspective(700px)
		rotateY(-16deg)
		rotateZ(-4deg);
}


/* =========================================================
 * Glows
 * ======================================================= */

.tr-proposal__glow {
	position: absolute;

	border-radius: 50%;
}


.tr-proposal__glow--green {
	top: -260px;
	left: 15%;

	width: 560px;
	height: 560px;

	background:
		radial-gradient(
			circle,
			rgba(25, 224, 120, 0.11),
			transparent 70%
		);
}


.tr-proposal__glow--cyan {
	right: -190px;
	bottom: -280px;

	width: 620px;
	height: 620px;

	background:
		radial-gradient(
			circle,
			rgba(20, 215, 232, 0.09),
			transparent 70%
		);
}


.tr-proposal__glow--violet {
	right: 12%;
	bottom: -360px;

	width: 540px;
	height: 540px;

	background:
		radial-gradient(
			circle,
			rgba(135, 87, 255, 0.08),
			transparent 70%
		);
}


/* =========================================================
 * Beam
 * ======================================================= */

.tr-proposal__beam {
	position: absolute;

	top: 52%;
	left: 47%;

	width: 48%;
	height: 1px;

	background:
		linear-gradient(
			90deg,
			transparent,
			rgba(25, 224, 120, 0.24),
			rgba(20, 215, 232, 0.28),
			transparent
		);

	transform:
		rotate(-10deg);

	box-shadow:
		0 0 16px rgba(20, 215, 232, 0.10);
}


/* =========================================================
 * Content
 * ======================================================= */

.tr-proposal__content {
	position: relative;
	z-index: 10;

	max-width: 760px;
}


/* =========================================================
 * Eyebrow
 * ======================================================= */

.tr-proposal__eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 11px;

	margin-bottom: 19px;

	color:
		rgba(176, 255, 218, 0.78);

	font-size:
		clamp(10px, 0.72vw, 12px);

	font-weight: 820;

	letter-spacing:
		0.15em;
}


.tr-proposal__eyebrow-dot {
	position: relative;

	width: 7px;
	height: 7px;

	flex:
		0
		0
		7px;

	border-radius: 50%;

	background:
		var(--tr-green);

	box-shadow:
		0 0 15px rgba(25, 224, 120, 0.60);
}


.tr-proposal__eyebrow-dot::before {
	content: "";

	position: absolute;

	inset: -6px;

	border:
		1px solid rgba(25, 224, 120, 0.22);

	border-radius: inherit;

	animation:
		tr-proposal-dot-pulse
		2.2s
		ease-out
		infinite;
}


@keyframes tr-proposal-dot-pulse {

	from {
		opacity: 0.7;

		transform:
			scale(0.55);
	}

	to {
		opacity: 0;

		transform:
			scale(1.65);
	}

}


/* =========================================================
 * Title
 * ======================================================= */

.tr-proposal__title {
	max-width: 760px;

	margin:
		0
		0
		19px;

	color:
		#f5faf8;

	font-size:
		clamp(42px, 4.3vw, 68px);

	font-weight: 790;

	line-height:
		1.01;

	letter-spacing:
		-0.052em;

	text-wrap: balance;
}


/* =========================================================
 * Description
 * ======================================================= */

.tr-proposal__description {
	max-width: 655px;

	margin: 0;

	color:
		rgba(214, 228, 223, 0.64);

	font-size:
		clamp(14px, 1vw, 17px);

	line-height:
		1.7;
}


/* =========================================================
 * Micro Line
 * ======================================================= */

.tr-proposal__micro-line {
	display: flex;
	align-items: center;
	gap: 7px;

	margin-top: 31px;
}


.tr-proposal__micro-line span {
	display: block;

	height: 3px;

	border-radius: 20px;

	background:
		rgba(255, 255, 255, 0.13);
}


.tr-proposal__micro-line span:nth-child(1) {
	width: 56px;

	background:
		var(--tr-green);

	box-shadow:
		0 0 12px rgba(25, 224, 120, 0.20);
}


.tr-proposal__micro-line span:nth-child(2) {
	width: 24px;
}


.tr-proposal__micro-line span:nth-child(3) {
	width: 9px;
}


/* =========================================================
 * Portal
 * ======================================================= */

.tr-proposal__portal {
	position: absolute;
	z-index: 4;

	top: 50%;
	right:
		clamp(85px, 11vw, 175px);

	width: 330px;
	height: 330px;

	transform:
		translateY(-50%);

	pointer-events: none;
}


.tr-proposal__orbit {
	position: absolute;

	top: 50%;
	left: 50%;

	border-radius: 50%;

	transform:
		translate(-50%, -50%);
}


/* =========================================================
 * Outer Orbit
 * ======================================================= */

.tr-proposal__orbit--outer {
	width: 320px;
	height: 320px;

	border:
		1px solid rgba(25, 224, 120, 0.13);

	animation:
		tr-proposal-spin
		23s
		linear
		infinite;
}


.tr-proposal__orbit--outer::before {
	content: "";

	position: absolute;

	inset: 26px;

	border:
		1px dashed rgba(20, 215, 232, 0.10);

	border-radius: 50%;
}


/* =========================================================
 * Middle Orbit
 * ======================================================= */

.tr-proposal__orbit--middle {
	width: 240px;
	height: 240px;

	border:
		1px solid rgba(20, 215, 232, 0.14);

	animation:
		tr-proposal-spin-reverse
		17s
		linear
		infinite;
}


/* =========================================================
 * Inner Orbit
 * ======================================================= */

.tr-proposal__orbit--inner {
	width: 165px;
	height: 165px;

	border:
		1px solid rgba(135, 87, 255, 0.12);

	box-shadow:
		inset 0 0 45px rgba(25, 224, 120, 0.035),
		0 0 55px rgba(20, 215, 232, 0.03);
}


@keyframes tr-proposal-spin {

	to {
		transform:
			translate(-50%, -50%)
			rotate(360deg);
	}

}


@keyframes tr-proposal-spin-reverse {

	to {
		transform:
			translate(-50%, -50%)
			rotate(-360deg);
	}

}


/* =========================================================
 * Orbit Point
 * ======================================================= */

.tr-proposal__orbit-point {
	position: absolute;

	top: 11%;
	left: 21%;

	width: 8px;
	height: 8px;

	border-radius: 50%;

	background:
		var(--tr-green);

	box-shadow:
		0 0 15px rgba(25, 224, 120, 0.70);
}


.tr-proposal__orbit--middle
.tr-proposal__orbit-point {
	top: auto;
	left: auto;
	right: 10%;
	bottom: 25%;

	background:
		var(--tr-spectrum-cyan);

	box-shadow:
		0 0 15px rgba(20, 215, 232, 0.60);
}


/* =========================================================
 * Portal Core
 * ======================================================= */

.tr-proposal__portal-core {
	position: absolute;

	top: 50%;
	left: 50%;

	display: grid;
	place-items: center;

	width: 112px;
	height: 112px;

	border:
		1px solid rgba(255, 255, 255, 0.08);

	border-radius: 50%;

	background:
		linear-gradient(
			145deg,
			#0c2921,
			#071716
		);

	box-shadow:
		0 28px 65px rgba(0, 0, 0, 0.30),
		0 0 45px rgba(25, 224, 120, 0.08),
		inset 0 1px 0 rgba(255, 255, 255, 0.06);

	transform:
		translate(-50%, -50%);
}


.tr-proposal__portal-icon {
	display: grid;
	place-items: center;

	width: 55px;
	height: 55px;

	border:
		1px solid rgba(25, 224, 120, 0.18);

	border-radius: 17px;

	background:
		linear-gradient(
			145deg,
			rgba(25, 224, 120, 0.13),
			rgba(20, 215, 232, 0.045)
		);

	color:
		var(--tr-green);

	animation:
		tr-proposal-core-float
		4.8s
		ease-in-out
		infinite;
}


.tr-proposal__portal-icon svg {
	width: 27px;
	height: 27px;
}


@keyframes tr-proposal-core-float {

	0%,
	100% {
		translate:
			0
			-3px;
	}

	50% {
		translate:
			0
			5px;
	}

}


/* =========================================================
 * Signals
 * ======================================================= */

.tr-proposal__signal {
	position: absolute;

	width: 5px;
	height: 5px;

	border-radius: 50%;

	background:
		var(--tr-green);

	box-shadow:
		0 0 13px rgba(25, 224, 120, 0.65);
}


.tr-proposal__signal--one {
	top: 19%;
	right: 4%;
}


.tr-proposal__signal--two {
	right: 14%;
	bottom: 9%;

	background:
		var(--tr-spectrum-cyan);

	box-shadow:
		0 0 13px rgba(20, 215, 232, 0.55);
}


.tr-proposal__signal--three {
	bottom: 17%;
	left: 5%;

	background:
		var(--tr-spectrum-violet);

	box-shadow:
		0 0 13px rgba(135, 87, 255, 0.50);
}


/* =========================================================
 * Action
 * ======================================================= */

.tr-proposal__action {
	position: relative;
	z-index: 20;

	display: flex;
	align-items: center;
	justify-content: flex-end;
}


/* =========================================================
 * Button
 * ======================================================= */

.tr-proposal__button {
	--tr-proposal-button-x: 50%;
	--tr-proposal-button-y: 50%;

	position: relative;
	isolation: isolate;

	display: inline-flex;
	align-items: center;
	justify-content: space-between;

	gap: 20px;

	min-width: 250px;
	min-height: 64px;

	padding:
		0
		11px
		0
		25px;

	overflow: hidden;

	border:
		1px solid rgba(61, 247, 152, 0.46);

	border-radius: 18px;

	background:
		linear-gradient(
			135deg,
			#22ea83,
			#0bc96a
		);

	color:
		#03170d;

	font-size: 14px;
	font-weight: 780;

	text-decoration: none;

	box-shadow:
		0 18px 45px rgba(15, 211, 106, 0.20),
		0 0 0 8px rgba(25, 224, 120, 0.025),
		inset 0 1px 0 rgba(255, 255, 255, 0.28);

	transform-style:
		preserve-3d;

	will-change:
		transform;

	transition:
		transform 160ms ease-out,
		box-shadow 320ms ease,
		filter 300ms ease;
}


.tr-proposal__button::before {
	content: "";

	position: absolute;
	z-index: 0;

	inset: 0;

	background:
		radial-gradient(
			110px circle at
			var(--tr-proposal-button-x)
			var(--tr-proposal-button-y),
			rgba(255, 255, 255, 0.46),
			rgba(255, 255, 255, 0.10) 38%,
			transparent 72%
		);

	opacity: 0;

	transition:
		opacity 220ms ease;
}


.tr-proposal__button:hover::before {
	opacity: 1;
}


.tr-proposal__button:hover {
	color:
		#021209;

	filter:
		brightness(1.04)
		saturate(1.07);

	box-shadow:
		0 25px 58px rgba(15, 211, 106, 0.28),
		0 0 42px rgba(25, 224, 120, 0.12),
		0 0 0 10px rgba(25, 224, 120, 0.035),
		inset 0 1px 0 rgba(255, 255, 255, 0.32);
}


.tr-proposal__button-label,
.tr-proposal__button-icon {
	position: relative;
	z-index: 2;
}


.tr-proposal__button-icon {
	display: grid;
	place-items: center;

	width: 42px;
	height: 42px;

	flex:
		0
		0
		42px;

	border-radius: 13px;

	background:
		rgba(1, 35, 17, 0.13);

	transition:
		transform 350ms var(--tr-ease),
		background 300ms ease;
}


.tr-proposal__button-icon svg {
	width: 18px;
	height: 18px;
}


.tr-proposal__button:hover
.tr-proposal__button-icon {
	transform:
		translateX(4px)
		rotate(-5deg);

	background:
		rgba(1, 35, 17, 0.19);
}


/* =========================================================
 * Spectrum Ribbon
 * ======================================================= */

.tr-proposal__spectrum {
	position: absolute;
	z-index: -1;

	right: -5%;
	bottom: -54px;
	left: 19%;

	height: 145px;

	overflow: hidden;

	pointer-events: none;
}


.tr-proposal__wave {
	position: absolute;

	right: -5%;
	left: 0;

	height: 80px;

	border-radius: 50%;

	filter:
		blur(16px);

	transform:
		rotate(-4deg)
		skewX(-20deg);
}


.tr-proposal__wave--one {
	bottom: 0;

	background:
		linear-gradient(
			90deg,
			transparent 0%,
			rgba(25, 224, 120, 0.30) 24%,
			rgba(20, 215, 232, 0.27) 55%,
			rgba(135, 87, 255, 0.25) 77%,
			transparent 100%
		);

	opacity: 0.70;
}


.tr-proposal__wave--two {
	bottom: -23px;

	background:
		linear-gradient(
			90deg,
			transparent,
			rgba(20, 215, 232, 0.19),
			rgba(135, 87, 255, 0.23),
			rgba(239, 84, 189, 0.12),
			transparent
		);

	transform:
		rotate(5deg)
		skewX(18deg);

	opacity: 0.56;
}


/* =========================================================
 * Entrance
 * ======================================================= */

.tr-has-proposal-js
.tr-proposal__content,
.tr-has-proposal-js
.tr-proposal__portal,
.tr-has-proposal-js
.tr-proposal__action {
	opacity: 0;
}


.tr-has-proposal-js
.tr-proposal__content {
	transform:
		translateY(24px);
}


.tr-has-proposal-js
.tr-proposal__portal {
	transform:
		translateY(-47%)
		scale(0.93);
}


.tr-has-proposal-js
.tr-proposal__action {
	transform:
		translateX(25px);
}


.tr-has-proposal-js
.tr-proposal.is-inview
.tr-proposal__content,
.tr-has-proposal-js
.tr-proposal.is-inview
.tr-proposal__portal,
.tr-has-proposal-js
.tr-proposal.is-inview
.tr-proposal__action {
	opacity: 1;

	transition:
		opacity 850ms ease,
		transform 950ms var(--tr-ease);
}


.tr-has-proposal-js
.tr-proposal.is-inview
.tr-proposal__content {
	transform:
		translateY(0);
}


.tr-has-proposal-js
.tr-proposal.is-inview
.tr-proposal__portal {
	transform:
		translateY(-50%)
		scale(1);

	transition-delay:
		120ms;
}


.tr-has-proposal-js
.tr-proposal.is-inview
.tr-proposal__action {
	transform:
		translateX(0);

	transition-delay:
		220ms;
}


/* =========================================================
 * Tablet
 * ======================================================= */

@media (max-width: 1050px) {

	.tr-proposal__panel {
		grid-template-columns:
			minmax(0, 1fr)
			260px;

		gap: 35px;
	}


	.tr-proposal__portal {
		right: 20px;

		width: 270px;
		height: 270px;
	}


	.tr-proposal__orbit--outer {
		width: 265px;
		height: 265px;
	}


	.tr-proposal__orbit--middle {
		width: 205px;
		height: 205px;
	}


	.tr-proposal__orbit--inner {
		width: 145px;
		height: 145px;
	}


	.tr-proposal__button {
		min-width: 220px;
	}

}


/* =========================================================
 * Mobile
 * ======================================================= */

@media (max-width: 720px) {

	.tr-proposal {
		padding:
			26px
			0
			54px;
	}


	.tr-proposal__shell {
		width:
			calc(100% - 24px);
	}


	.tr-proposal__panel {
		display: block;

		min-height: 0;

		padding:
			42px
			22px
			35px;

		border-radius: 27px;
	}


	.tr-proposal__title {
		font-size:
			clamp(37px, 10.5vw, 50px);
	}


	.tr-proposal__description {
		font-size: 15px;
	}


	.tr-proposal__micro-line {
		margin-top: 23px;
	}


	.tr-proposal__portal {
		position: relative;

		top: auto;
		right: auto;

		width: 250px;
		height: 250px;

		margin:
			25px
			auto
			-95px;

		transform: none !important;

		opacity: 0.52 !important;
	}


	.tr-proposal__orbit--outer {
		width: 245px;
		height: 245px;
	}


	.tr-proposal__orbit--middle {
		width: 185px;
		height: 185px;
	}


	.tr-proposal__orbit--inner {
		width: 135px;
		height: 135px;
	}


	.tr-proposal__portal-core {
		width: 94px;
		height: 94px;
	}


	.tr-proposal__portal-icon {
		width: 48px;
		height: 48px;
	}


	.tr-proposal__action {
		position: relative;

		margin-top: 38px;

		transform: none !important;

		opacity: 1 !important;
	}


	.tr-proposal__button {
		width: 100%;

		min-width: 0;

		justify-content:
			space-between;
	}


	.tr-proposal__grid {
		width: 120%;

		right: -50%;
	}


	.tr-proposal__spectrum {
		left: 0;
	}

}


/* =========================================================
 * Reduced Motion
 * ======================================================= */

@media (prefers-reduced-motion: reduce) {

	.tr-proposal__eyebrow-dot::before,
	.tr-proposal__orbit,
	.tr-proposal__portal-icon {
		animation: none;
	}


	.tr-has-proposal-js
	.tr-proposal__content,
	.tr-has-proposal-js
	.tr-proposal__portal,
	.tr-has-proposal-js
	.tr-proposal__action {
		opacity: 1;

		transform: none;

		transition: none;
	}

}