/**
 * Portal: request form + serial directory (mobile-first, responsive).
 */

:root {
	--gcp-brand: #383839;
	--gcp-brand-hover: #1f1f20;
	--gcp-brand-text: #ffffff;
	--gcp-brand-border: #1f1f20;
}

.gcp-portal-catalog,
.gcp-portal-request {
	box-sizing: border-box;
	max-width: 42rem;
	margin-left: auto;
	margin-right: auto;
	padding-left: max(1rem, env(safe-area-inset-left));
	padding-right: max(1rem, env(safe-area-inset-right));
	padding-bottom: 2rem;
}

.gcp-portal-catalog *,
.gcp-portal-request * {
	box-sizing: border-box;
}

.gcp-portal-notice {
	padding: 0.75rem 1rem;
	border-radius: 6px;
	margin-bottom: 1.25rem;
	font-size: clamp(0.9375rem, 2.5vw, 1rem);
	line-height: 1.45;
}

.gcp-portal-success {
	background: #ecf7ed;
	border: 1px solid #46b450;
	color: #1e4620;
}

.gcp-portal-error {
	background: #fcf0f1;
	border: 1px solid #dc3232;
	color: #5c1a1a;
}

.gcp-portal-form label {
	display: block;
	margin-bottom: 0.35rem;
	font-size: clamp(0.9375rem, 2.5vw, 1rem);
}

/* 16px+ on inputs avoids iOS zoom on focus */
.gcp-portal-form input.widefat {
	width: 100%;
	max-width: 100%;
	padding: 0.65rem 0.75rem;
	font-size: 1rem;
	line-height: 1.4;
	border-radius: 6px;
	border: 1px solid #c3c4c7;
	-webkit-appearance: none;
	appearance: none;
}

.gcp-portal-form .description {
	display: block;
	font-size: 0.875rem;
	opacity: 0.85;
	margin-top: 0.35rem;
	line-height: 1.4;
}

.gcp-portal-form .button.button-primary,
.gcp-portal-request-btn {
	display: inline-block;
	min-height: 48px;
	padding: 0.65rem 1.25rem;
	font-size: 1rem;
	line-height: 1.3;
	border-radius: 6px;
	cursor: pointer;
	-webkit-tap-highlight-color: rgba(0, 0, 0, 0.08);
	text-align: center;
	text-decoration: none;
	background: var(--gcp-brand) !important;
	border: 1px solid var(--gcp-brand-border) !important;
	color: var(--gcp-brand-text) !important;
	box-shadow: none !important;
	transition: background-color 0.15s ease, transform 0.05s ease;
}

.gcp-portal-form .button.button-primary:hover,
.gcp-portal-form .button.button-primary:focus-visible,
.gcp-portal-request-btn:hover,
.gcp-portal-request-btn:focus-visible {
	background: var(--gcp-brand-hover) !important;
	color: var(--gcp-brand-text) !important;
	border-color: var(--gcp-brand-border) !important;
	outline: none;
}

.gcp-portal-form .button.button-primary:active,
.gcp-portal-request-btn:active {
	transform: translateY(1px);
}

.gcp-portal-form .button.button-primary {
	width: 100%;
	max-width: 100%;
	margin-top: 0.5rem;
}

/* Directory */
.gcp-portal-intro {
	margin-bottom: 1rem;
	font-size: clamp(0.9375rem, 2.6vw, 1rem);
	line-height: 1.5;
}

.gcp-portal-filter-wrap {
	margin-bottom: 1rem;
}

.gcp-portal-serial-filter {
	width: 100%;
	max-width: 100%;
	padding: 0.65rem 0.75rem;
	font-size: 1rem;
	line-height: 1.4;
	border-radius: 6px;
	border: 1px solid #c3c4c7;
	-webkit-appearance: none;
	appearance: none;
}

.gcp-portal-table-wrap {
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	margin: 0 -0.25rem;
	padding: 0 0.25rem;
}

.gcp-portal-serial-table {
	width: 100%;
	min-width: 280px;
	border-collapse: collapse;
	font-size: clamp(0.875rem, 2.4vw, 0.95rem);
}

.gcp-portal-serial-table th,
.gcp-portal-serial-table td {
	padding: 0.65rem 0.75rem;
	text-align: left;
	border-bottom: 1px solid rgba(0, 0, 0, 0.08);
	vertical-align: middle;
}

.gcp-portal-serial-table th {
	font-weight: 600;
	background: rgba(0, 0, 0, 0.03);
	white-space: nowrap;
}

.gcp-portal-serial-table code {
	font-size: inherit;
	word-break: break-all;
}

.gcp-portal-manual {
	margin-top: 1.5rem;
	font-size: clamp(0.875rem, 2.4vw, 0.95rem);
	line-height: 1.45;
}

.gcp-portal-manual a {
	word-break: break-word;
}

.gcp-portal-back {
	margin-bottom: 1rem;
	font-size: clamp(0.9375rem, 2.5vw, 1rem);
}

.gcp-portal-back a {
	display: inline-block;
	padding: 0.35rem 0;
	min-height: 44px;
	line-height: 1.4;
	-webkit-tap-highlight-color: rgba(0, 0, 0, 0.06);
}

.gcp-portal-prefill-serial {
	margin-bottom: 1rem;
}

.gcp-portal-prefill-serial code {
	font-size: clamp(1rem, 2.8vw, 1.05rem);
	word-break: break-all;
}

/* Narrow screens: card rows instead of horizontal scroll */
@media (max-width: 639px) {
	.gcp-portal-table-wrap {
		overflow-x: visible;
		margin: 0;
		padding: 0;
	}

	.gcp-portal-serial-table thead {
		position: absolute;
		width: 1px;
		height: 1px;
		padding: 0;
		margin: -1px;
		overflow: hidden;
		clip: rect(0, 0, 0, 0);
		white-space: nowrap;
		border: 0;
	}

	.gcp-portal-serial-table tbody tr {
		display: block;
		margin-bottom: 1rem;
		border: 1px solid rgba(0, 0, 0, 0.1);
		border-radius: 10px;
		overflow: hidden;
		background: #fff;
		box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
	}

	.gcp-portal-serial-table tbody td {
		display: flex;
		align-items: flex-start;
		justify-content: space-between;
		gap: 0.75rem;
		padding: 0.75rem 1rem;
		border-bottom: 1px solid rgba(0, 0, 0, 0.06);
		text-align: right;
		font-size: 0.9375rem;
		line-height: 1.4;
	}

	.gcp-portal-serial-table tbody td:last-child {
		border-bottom: none;
	}

	.gcp-portal-serial-table tbody td::before {
		content: attr(data-label);
		font-weight: 600;
		text-align: left;
		flex: 0 1 40%;
		min-width: 0;
		padding-right: 0.5rem;
	}

	.gcp-portal-serial-table tbody td .gcp-portal-cell-value {
		flex: 1;
		min-width: 0;
		text-align: right;
		word-break: break-word;
		overflow-wrap: anywhere;
	}

	.gcp-portal-row-action {
		flex-direction: column;
		align-items: stretch !important;
		text-align: center !important;
	}

	.gcp-portal-row-action::before {
		width: 100%;
		flex: none !important;
		text-align: left !important;
		padding-right: 0 !important;
		margin-bottom: 0.5rem;
	}

	.gcp-portal-request-btn {
		display: block;
		width: 100%;
	}
}

@media (min-width: 640px) {
	.gcp-portal-serial-table .gcp-portal-request-btn {
		white-space: nowrap;
	}
}

/* ---------- Branded login form + signed-in panel ---------- */

.gcp-portal-login-wrap {
	box-sizing: border-box;
	max-width: 26rem;
	margin: 2rem auto;
	padding-left: max(1rem, env(safe-area-inset-left));
	padding-right: max(1rem, env(safe-area-inset-right));
}

.gcp-portal-login-wrap * {
	box-sizing: border-box;
}

.gcp-portal-login-card {
	background: #fff;
	border: 1px solid #e2e4e7;
	border-radius: 10px;
	box-shadow: 0 4px 18px rgba(15, 23, 42, 0.06);
	padding: 1.75rem 1.5rem;
}

.gcp-portal-login-logo {
	text-align: center;
	margin: 0 0 1rem;
}

.gcp-portal-login-logo img {
	max-width: 160px;
	max-height: 90px;
	height: auto;
	width: auto;
	display: inline-block;
}

.gcp-portal-login-title {
	margin: 0 0 0.25rem;
	text-align: center;
	font-size: clamp(1.15rem, 3vw, 1.4rem);
	font-weight: 700;
}

.gcp-portal-login-subtitle {
	margin: 0 0 1.25rem;
	text-align: center;
	color: #52606d;
	font-size: 0.9375rem;
}

.gcp-portal-login-form p {
	margin: 0 0 0.9rem;
}

.gcp-portal-login-form label {
	display: block;
	margin-bottom: 0.35rem;
	font-size: 0.9375rem;
}

.gcp-portal-login-form input[type="text"],
.gcp-portal-login-form input[type="password"] {
	width: 100%;
	padding: 0.7rem 0.85rem;
	border: 1px solid #c6ccd2;
	border-radius: 6px;
	font-size: 1rem;
	background: #fff;
}

.gcp-portal-login-form input[type="text"]:focus,
.gcp-portal-login-form input[type="password"]:focus {
	outline: 2px solid var(--gcp-brand);
	outline-offset: 1px;
	border-color: var(--gcp-brand);
}

.gcp-portal-login-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 0.5rem;
	font-size: 0.9rem;
}

.gcp-portal-login-remember {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	color: #3d4751;
}

.gcp-portal-login-lost {
	color: var(--gcp-brand);
	text-decoration: none;
}

.gcp-portal-login-lost:hover,
.gcp-portal-login-lost:focus {
	text-decoration: underline;
}

.gcp-portal-login-submit,
.gcp-portal-login-form .button.button-primary {
	width: 100%;
	padding: 0.75rem 1rem;
	font-size: 1rem;
	font-weight: 600;
	border-radius: 6px;
	background: var(--gcp-brand) !important;
	color: var(--gcp-brand-text) !important;
	border: 1px solid var(--gcp-brand-border) !important;
	box-shadow: none !important;
}

.gcp-portal-login-submit:hover,
.gcp-portal-login-submit:focus-visible,
.gcp-portal-login-form .button.button-primary:hover,
.gcp-portal-login-form .button.button-primary:focus-visible {
	background: var(--gcp-brand-hover) !important;
	color: var(--gcp-brand-text) !important;
	border-color: var(--gcp-brand-border) !important;
	outline: none;
}

.gcp-portal-login-help {
	margin: 1.25rem 0 0;
	text-align: center;
	font-size: 0.9rem;
	color: #52606d;
}

.gcp-portal-login-help a {
	color: var(--gcp-brand);
}

.gcp-portal-signed-in {
	box-sizing: border-box;
	max-width: 30rem;
	margin: 1.5rem auto;
	padding: 1.25rem 1.25rem 1rem;
	border: 1px solid var(--gcp-brand-border);
	border-radius: 10px;
	background: var(--gcp-brand);
	color: var(--gcp-brand-text);
}

.gcp-portal-signed-in-greeting strong,
.gcp-portal-signed-in-cooler {
	color: var(--gcp-brand-text);
}

.gcp-portal-signed-in * {
	box-sizing: border-box;
}

.gcp-portal-signed-in-greeting,
.gcp-portal-signed-in-cooler {
	margin: 0 0 0.4rem;
	font-size: 0.95rem;
}

.gcp-portal-signed-in-cooler code {
	background: #fff;
	border: 1px solid #dce3ea;
	padding: 0.1rem 0.45rem;
	border-radius: 4px;
	font-size: 0.9rem;
}

.gcp-portal-signed-in-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin: 0.75rem 0 0;
}

.gcp-portal-signed-in-actions .button {
	padding: 0.55rem 1rem;
	border-radius: 6px;
	background: #ffffff !important;
	color: var(--gcp-brand) !important;
	border: 1px solid #ffffff !important;
	box-shadow: none !important;
}

.gcp-portal-signed-in-actions .button:hover,
.gcp-portal-signed-in-actions .button:focus-visible {
	background: #f1f1f2 !important;
	color: var(--gcp-brand-hover) !important;
	outline: none;
}

.gcp-portal-existing-user {
	margin: 1.25rem auto 0;
	text-align: center;
	font-size: 0.95rem;
	color: #52606d;
	max-width: 42rem;
}

.gcp-portal-existing-user a {
	color: var(--gcp-brand);
	text-decoration: none;
	font-weight: 600;
}

.gcp-portal-existing-user a:hover,
.gcp-portal-existing-user a:focus {
	text-decoration: underline;
}

/* ---------- Multi-cooler picker ---------- */

.gcp-portal-picker {
	box-sizing: border-box;
	max-width: 34rem;
	margin: 1.5rem auto;
	padding-left: max(1rem, env(safe-area-inset-left));
	padding-right: max(1rem, env(safe-area-inset-right));
}

.gcp-portal-picker * {
	box-sizing: border-box;
}

.gcp-portal-picker-header {
	margin: 0 0 0.9rem;
	font-size: 0.95rem;
	color: #3d4751;
}

.gcp-portal-picker-list {
	list-style: none;
	margin: 0 0 1rem;
	padding: 0;
	border: 1px solid #dce3ea;
	border-radius: 10px;
	overflow: hidden;
	background: #fff;
}

.gcp-portal-picker-item {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	padding: 0.85rem 1rem;
}

.gcp-portal-picker-item + .gcp-portal-picker-item {
	border-top: 1px solid #eef2f6;
}

.gcp-portal-picker-item-main {
	flex: 1;
	display: flex;
	flex-direction: column;
	gap: 0.15rem;
	min-width: 0;
}

.gcp-portal-picker-serial code {
	background: #f4f7fa;
	border: 1px solid #e1e7ed;
	padding: 0.1rem 0.5rem;
	border-radius: 4px;
	font-size: 0.95rem;
}

.gcp-portal-picker-size {
	color: #52606d;
	font-size: 0.85rem;
}

.gcp-portal-picker-open {
	padding: 0.5rem 1rem;
	border-radius: 6px;
	white-space: nowrap;
	background: var(--gcp-brand) !important;
	color: var(--gcp-brand-text) !important;
	border: 1px solid var(--gcp-brand-border) !important;
	box-shadow: none !important;
}

.gcp-portal-picker-open:hover,
.gcp-portal-picker-open:focus-visible {
	background: var(--gcp-brand-hover) !important;
	color: var(--gcp-brand-text) !important;
	outline: none;
}

.gcp-portal-picker-actions {
	display: flex;
	gap: 0.5rem;
	flex-wrap: wrap;
	justify-content: space-between;
	margin: 0;
}

.gcp-portal-picker-actions .button {
	padding: 0.55rem 1rem;
	border-radius: 6px;
	background: var(--gcp-brand) !important;
	color: var(--gcp-brand-text) !important;
	border: 1px solid var(--gcp-brand-border) !important;
	box-shadow: none !important;
}

.gcp-portal-picker-actions .button:hover,
.gcp-portal-picker-actions .button:focus-visible {
	background: var(--gcp-brand-hover) !important;
	color: var(--gcp-brand-text) !important;
	outline: none;
}

.gcp-portal-additional-note {
	background: #eef6ff;
	border: 1px solid #c8dcf6;
	color: #1e4274;
	padding: 0.65rem 0.85rem;
	border-radius: 6px;
	margin: 0 0 1rem;
	font-size: 0.92rem;
}

@media (max-width: 480px) {
	.gcp-portal-picker-item {
		flex-wrap: wrap;
	}
	.gcp-portal-picker-open {
		flex: 1;
		text-align: center;
	}
	.gcp-portal-picker-actions .button {
		flex: 1;
		text-align: center;
	}
}



/* ---------- Public gate: login OR request access ---------- */

.gcp-portal-gate {
	box-sizing: border-box;
	max-width: 62rem;
	margin: 1.5rem auto 2rem;
	padding: 0 max(1rem, env(safe-area-inset-left));
}

.gcp-portal-gate * {
	box-sizing: border-box;
}

.gcp-portal-gate-header {
	text-align: center;
	margin: 0 auto 1.25rem;
	max-width: 34rem;
}

.gcp-portal-gate-logo {
	margin: 0 0 0.6rem;
}

.gcp-portal-gate-logo img {
	max-width: 200px;
	max-height: 100px;
	height: auto;
	width: auto;
	display: inline-block;
}

.gcp-portal-gate-title {
	margin: 0 0 0.25rem;
	font-size: clamp(1.35rem, 3.2vw, 1.75rem);
	font-weight: 700;
	color: #0f172a;
	line-height: 1.2;
}

.gcp-portal-gate-subtitle {
	margin: 0;
	color: #52606d;
	font-size: 0.95rem;
	line-height: 1.5;
}

/* -- Body layout: stacked on mobile, two columns on desktop -- */

.gcp-portal-gate-body {
	display: flex;
	flex-direction: column;
	gap: 0;
	max-width: 30rem;
	margin: 0 auto;
}

.gcp-portal-gate-section {
	margin: 0;
}

.gcp-portal-gate-section-title {
	margin: 0 0 0.25rem;
	font-size: 1.05rem;
	font-weight: 700;
	color: #0f172a;
}

.gcp-portal-gate-section-hint {
	margin: 0 0 0.9rem;
	font-size: 0.9rem;
	color: #52606d;
	line-height: 1.5;
}

/* The gate renders the login card without its own margin — override the
   built-in .gcp-portal-login-wrap spacing so the stacking looks right. */
.gcp-portal-gate .gcp-portal-login-wrap {
	margin: 0;
	max-width: 100%;
	padding: 0;
	height: 100%;
}

.gcp-portal-gate .gcp-portal-login-card {
	box-shadow: 0 2px 10px rgba(15, 23, 42, 0.04);
	height: 100%;
}

/* Request card matches the login card visually so the gate feels cohesive. */
.gcp-portal-gate-request {
	background: #ffffff;
	border: 1px solid #e2e4e7;
	border-radius: 10px;
	box-shadow: 0 2px 10px rgba(15, 23, 42, 0.04);
	padding: 1.25rem 1.25rem 0.25rem;
	height: 100%;
}

.gcp-portal-gate .gcp-portal-request {
	padding: 0;
	max-width: 100%;
	margin: 0;
}

/* Mobile divider: horizontal rule with centered label. */
.gcp-portal-gate-divider {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	margin: 1.1rem 0;
	color: #64748b;
	font-size: 0.82rem;
	text-transform: uppercase;
	letter-spacing: 0.08em;
}

.gcp-portal-gate-divider::before,
.gcp-portal-gate-divider::after {
	content: "";
	flex: 1;
	height: 1px;
	background: #e2e8f0;
}

.gcp-portal-gate-divider span {
	white-space: nowrap;
}

/* -- Desktop: side-by-side (≥ 900px, accommodates tablets in landscape) -- */

@media (min-width: 900px) {
	.gcp-portal-gate-body {
		display: grid;
		grid-template-columns: 1fr 3rem 1fr;
		align-items: stretch;
		max-width: 62rem;
		gap: 0;
	}

	.gcp-portal-gate-login,
	.gcp-portal-gate-request {
		min-width: 0;
	}

	/* Vertical divider: line on top and bottom with "or" centered. */
	.gcp-portal-gate-divider {
		flex-direction: column;
		align-items: center;
		justify-content: center;
		margin: 0;
		padding: 0;
		height: 100%;
		min-height: 200px;
	}

	.gcp-portal-gate-divider::before,
	.gcp-portal-gate-divider::after {
		width: 1px;
		height: auto;
		flex: 1;
		min-height: 2.5rem;
	}

	.gcp-portal-gate-divider span {
		padding: 0.4rem 0;
		background: transparent;
		color: #64748b;
	}

	/* Slightly roomier header at this width. */
	.gcp-portal-gate-header {
		margin-bottom: 1.75rem;
		max-width: 40rem;
	}
}
