$border-width: 1px;
$border-radius: 5px;

.wc-block-components-express-checkout {
	margin: auto;
	position: relative;

	.wc-block-components-express-checkout__title-container {
		display: flex;
		flex-direction: row;
		left: 0;
		position: absolute;
		right: 0;
		top: -$border-radius;
		vertical-align: middle;

		// Pseudo-elements used to show the border before and after the title.
		&::before {
			border-left: $border-width solid currentColor;
			border-top: $border-width solid currentColor;
			border-radius: $border-radius 0 0 0;
			content: "";
			display: block;
			height: $border-radius - $border-width;
			margin-right: $gap-small;
			opacity: 0.3;
			pointer-events: none;
			width: #{$gap-larger - $gap-small - $border-width * 2};
		}

		&::after {
			border-right: $border-width solid currentColor;
			border-top: $border-width solid currentColor;
			border-radius: 0 $border-radius 0 0;
			content: "";
			display: block;
			height: $border-radius - $border-width;
			margin-left: $gap-small;
			opacity: 0.3;
			pointer-events: none;
			flex-grow: 1;
		}
	}

	.wc-block-components-express-checkout__title {
		flex-grow: 0;
		transform: translateY(-50%);
	}

	.wc-block-components-express-checkout__content {
		@include with-translucent-border(0 $border-width $border-width);
		margin-top: calc(0.75em + #{$border-radius});
		padding: em($gap-large) #{$gap-larger - $border-width} em($gap) #{$gap-larger - $border-width};

		&::after {
			border-radius: 0 0 $border-radius $border-radius;
		}

		> p {
			margin-bottom: em($gap);
		}
	}

	.wc-block-components-express-checkout-payment-event-buttons {
		list-style: none;
		display: flex;
		flex-direction: row;
		flex-wrap: wrap;
		width: 100%;
		padding: 0;
		margin: 0;
		overflow: hidden;
		> li {
			display: inline-block;
			margin: 0;
			width: 50%;
			> img {
				width: 100%;
				height: 48px;
			}
		}
		> li:nth-child(even) {
			padding-left: $gap-smaller;
		}
		> li:nth-child(odd) {
			padding-right: $gap-smaller;
		}
	}
}

.wc-block-card-elements {
	display: flex;
	width: 100%;
}

.wc-block-gateway-container {
	position: relative;
	margin-bottom: em($gap-large);
	white-space: nowrap;

	&.wc-card-number-element {
		flex-basis: 15em;
		flex-grow: 1;
		// Currently, min() CSS function calls need to be wrapped with unquote.
		min-width: unquote("min(15em, 60%)");
	}

	&.wc-card-expiry-element {
		flex-basis: 7em;
		margin-left: $gap-small;
		min-width: unquote("min(7em, calc(24% - #{$gap-small}))");
	}

	&.wc-card-cvc-element {
		flex-basis: 7em;
		margin-left: $gap-small;
		// Notice the min width ems value is smaller than flex-basis. That's because
		// by default we want it to have the same width as `expiry-element`, but
		// if available space is scarce, `cvc-element` should get smaller faster.
		min-width: unquote("min( 5em, calc(16% - #{$gap-small}))");
	}

	.wc-block-gateway-input {
		@include font-size(regular);
		line-height: 1.375; // =22px when font-size is 16px.
		background-color: #fff;
		padding: em($gap-small) 0 em($gap-small) $gap;
		border-radius: 4px;
		border: 1px solid $input-border-gray;
		width: 100%;
		font-family: inherit;
		margin: 0;
		box-sizing: border-box;
		height: 3em;
		color: $input-text-active;
		cursor: text;

		&:focus {
			background-color: #fff;
		}
	}

	&:focus {
		background-color: #fff;
	}

	label {
		@include reset-typography();
		@include font-size(regular);
		line-height: 1.375; // =22px when font-size is 16px.
		position: absolute;
		transform: translateY(0.75em);
		left: 0;
		top: 0;
		transform-origin: top left;
		color: $gray-50;
		transition: transform 200ms ease;
		margin: 0 0 0 #{$gap + 1px};
		overflow: hidden;
		text-overflow: ellipsis;
		max-width: calc(100% - #{$gap + $gap-smaller});
		cursor: text;

		@media screen and (prefers-reduced-motion: reduce) {
			transition: none;
		}
	}

	&.wc-inline-card-element {
		label {
			// $gap is the padding of the input box, 1.5em the width of the card
			// icon and $gap-smaller the space between the card
			// icon and the label.
			margin-left: calc(#{$gap + $gap-smaller} + 1.5em);
		}
		.wc-block-gateway-input.focused.empty,
		.wc-block-gateway-input:not(.empty) {
			& + label {
				margin-left: $gap;
				transform: translateY(#{$gap-smallest}) scale(0.75);
			}
		}
		& + .wc-block-components-validation-error {
			position: static;
			margin-top: -$gap-large;
		}
	}

	.wc-block-gateway-input.focused.empty,
	.wc-block-gateway-input:not(.empty) {
		padding: em($gap-large) 0 em($gap-smallest) $gap;
		& + label {
			transform: translateY(#{$gap-smallest}) scale(0.75);
		}
	}

	.wc-block-gateway-input.has-error {
		border-color: $error-red;
		&:focus {
			outline-color: $error-red;
		}
	}

	.wc-block-gateway-input.has-error + label {
		color: $error-red;
	}
}

// These elements have available space below, so we can display errors with a
// larger line height.
.is-medium,
.is-large {
	.wc-card-expiry-element,
	.wc-card-cvc-element {
		.wc-block-components-validation-error > p {
			line-height: 16px;
			padding-top: 4px;
		}
	}
}

.is-mobile,
.is-small {
	.wc-card-expiry-element,
	.wc-card-cvc-element {
		.wc-block-components-validation-error > p {
			min-height: 28px;
		}
	}
}

.wc-blocks-credit-card-images {
	padding-top: $gap-small;
	display: flex;

	.wc-blocks-credit-cart-icon {
		height: 18px;
		width: auto;
		margin-right: $gap-small;

		&:last-child {
			margin-right: 0;
		}
	}
}

.wc-block-components-checkout-payment-methods * {
	pointer-events: all; // Overrides parent disabled component in editor context
}

.is-mobile,
.is-small {
	.wc-block-card-elements {
		flex-wrap: wrap;
	}

	.wc-block-gateway-container.wc-card-number-element {
		flex-basis: 100%;
	}

	.wc-block-gateway-container.wc-card-expiry-element {
		flex-basis: calc(50% - #{$gap-smaller});
		margin-left: 0;
		margin-right: $gap-smaller;
	}

	.wc-block-gateway-container.wc-card-cvc-element {
		flex-basis: calc(50% - #{$gap-smaller});
		margin-left: $gap-smaller;
	}
}

.theme-twentynineteen {
	.wc-block-components-express-checkout__title::before {
		display: none;
	}
}

// For Twenty Twenty we need to increase specificity of the title.
.theme-twentytwenty {
	.wc-block-components-express-checkout .wc-block-components-express-checkout__title {
		padding-left: $gap-small;
		padding-right: $gap-small;
	}
}
