﻿/**
 * Announcement bar, sticky header, desktop dropdown, mobile drawer.
 */

/* ---- announcement bar ---- */

.pl-announce {
	background: var(--pl-primary);
	color: var(--pl-on-primary);
	font-size: var(--pl-fs-xs);
	font-weight: 600;
}

.pl-announce__inner {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	min-height: 2.125rem;
	padding-block: 0.375rem;
	text-align: center;
}

/* A dark tint, since the bar's own text is now dark; a white tint would vanish. */
.pl-announce__code {
	display: inline-block;
	padding: 0.0625rem 0.375rem;
	border-radius: var(--pl-radius-sm);
	background: rgb(26 18 6 / 0.16);
	font-weight: 800;
	letter-spacing: 0.06em;
}

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

.pl-header {
	position: sticky;
	top: 0;
	z-index: var(--pl-z-header);
	width: 100%;
	background: rgb(255 255 255 / 0.95);
	backdrop-filter: saturate(180%) blur(10px);
	border-bottom: 1px solid var(--pl-border-light);
	transition: box-shadow var(--pl-dur) var(--pl-ease);
}

.pl-header.is-stuck { box-shadow: var(--pl-shadow); }

.pl-header__inner {
	display: flex;
	align-items: center;
	gap: var(--pl-space-4);
	min-height: var(--pl-header-h);
}

/* ---- logo ---- */

.pl-logo {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	flex: none;
	font-weight: 800;
	letter-spacing: 0.02em;
}

.pl-logo__mark { flex: none; width: 1.875rem; height: 1.875rem; }

/* Uploaded logo: height-constrained so tall or wide marks both sit right. */
.pl-logo__img {
	display: block;
	width: auto;
	max-width: 11rem;
	object-fit: contain;
}

/* On narrow phones the wordmark would crowd the icon row, so cap it harder
   and let the emblem carry the brand. */
@media (max-width: 23.5rem) {
	.pl-logo__img { max-width: 7.5rem; }
}

.pl-logo__text {
	font-size: 1.0625rem;
	line-height: 1;
	color: var(--pl-primary-ink);
}

.pl-logo__text em {
	font-style: normal;
	color: var(--pl-lime-brand);
}

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

.pl-nav { display: none; }

@media (min-width: 64rem) {
	.pl-nav {
		display: block;
		margin-inline: auto;
	}
}

.pl-nav__list {
	display: flex;
	align-items: center;
	gap: 0.25rem;
}

.pl-nav__item { position: relative; }

.pl-nav__group { display: inline-flex; align-items: center; }

.pl-nav__link {
	display: inline-flex;
	align-items: center;
	padding: 0.5rem 0.75rem;
	border-radius: var(--pl-radius);
	font-size: var(--pl-fs-sm);
	font-weight: 600;
	color: var(--pl-text-secondary);
}

.pl-nav__link:hover,
.pl-nav__item.is-current > .pl-nav__link,
.pl-nav__item.is-current > .pl-nav__group > .pl-nav__link {
	color: var(--pl-primary-ink);
}

.pl-nav__toggle {
	display: inline-flex;
	align-items: center;
	padding: 0.5rem 0.375rem 0.5rem 0;
	color: var(--pl-text-muted);
	border-radius: var(--pl-radius);
}

.pl-nav__toggle svg { transition: transform var(--pl-dur) var(--pl-ease); }
.pl-nav__toggle[aria-expanded="true"] svg { transform: rotate(180deg); }
.pl-nav__toggle:hover { color: var(--pl-primary-ink); }

.pl-nav__dropdown {
	position: absolute;
	top: calc(100% + 0.5rem);
	inset-inline-start: 0;
	min-width: 15rem;
	padding: 0.5rem;
	background: #fff;
	border: 1px solid var(--pl-border-light);
	border-radius: var(--pl-radius-lg);
	box-shadow: var(--pl-shadow-lg);
	opacity: 0;
	transform: translateY(-4px);
	transition: opacity var(--pl-dur) var(--pl-ease), transform var(--pl-dur) var(--pl-ease);
}

/* [hidden] is removed a frame before the transition so it can animate. */
.pl-nav__dropdown.is-open { opacity: 1; transform: none; }

.pl-nav__submenu > .pl-nav__item--child > .pl-nav__link {
	display: block;
	width: 100%;
	padding: 0.5rem 0.625rem;
	font-size: var(--pl-fs-sm);
	color: var(--pl-text-secondary);
}

.pl-nav__submenu > .pl-nav__item--child > .pl-nav__link:hover {
	background: var(--pl-bg-alt);
	color: var(--pl-primary-ink);
}

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

.pl-header__actions {
	display: flex;
	align-items: center;
	gap: 0.125rem;
	margin-inline-start: auto;
}

@media (min-width: 64rem) {
	.pl-header__actions { margin-inline-start: 0; }
}

.pl-iconbtn {
	position: relative;
	display: grid;
	place-items: center;
	width: 2.25rem;
	height: 2.25rem;
	border-radius: var(--pl-radius-full);
	color: var(--pl-text-secondary);
	transition: background-color var(--pl-dur-fast) var(--pl-ease), color var(--pl-dur-fast) var(--pl-ease);
}

.pl-iconbtn:hover { background: var(--pl-bg-alt); color: var(--pl-primary-ink); }

.pl-iconbtn__count {
	position: absolute;
	top: 0.125rem;
	inset-inline-end: 0.125rem;
	min-width: 1rem;
	height: 1rem;
	padding-inline: 0.1875rem;
	display: grid;
	place-items: center;
	border-radius: var(--pl-radius-full);
	background: var(--pl-lime-brand);
	color: #fff;
	font-size: 0.625rem;
	font-weight: 800;
	line-height: 1;
}

/* ---- search panel ----
   Sits as the last child of the header, so opening it drops a bar under the
   header row. Without these rules the form falls back to block layout and the
   icon, field, button and close control each land on their own line. */

.pl-search {
	background: var(--pl-bg-white);
	border-top: 1px solid var(--pl-border-light);
	box-shadow: var(--pl-shadow-sm);
}

.pl-search__inner { padding-block: var(--pl-space-4); }

.pl-search__form {
	position: relative;
	display: flex;
	align-items: center;
	gap: var(--pl-space-2);
}

/* Inside the field rather than beside it. pointer-events off so a click on the
   icon still lands on the input underneath. */
.pl-search__icon {
	position: absolute;
	inset-inline-start: 0.875rem;
	top: 50%;
	transform: translateY(-50%);
	display: inline-flex;
	color: var(--pl-text-muted);
	pointer-events: none;
}

.pl-search__field {
	flex: 1 1 auto;
	/* A flex item will not shrink below its content width without this. */
	min-width: 0;
	/* Clear of the icon: its offset plus its width plus breathing room. */
	padding-inline-start: 2.75rem;
}

/* stretch matches the button to the field's height, so the two line up whatever
   the input's padding works out to. */
.pl-search__submit {
	flex-shrink: 0;
	align-self: stretch;
	padding-inline: var(--pl-space-5);
}

/* Never hidden on small screens: on a touch device it is the only way to dismiss
   the panel, since Escape needs a keyboard. */
.pl-search__close { flex-shrink: 0; }

@media (max-width: 26rem) {
	.pl-search__submit { padding-inline: var(--pl-space-3); font-size: var(--pl-fs-xs); }
}

.pl-header__signin { display: none; }

@media (min-width: 40rem) {
	.pl-header__signin { display: inline-flex; margin-inline-start: 0.375rem; }
}

.pl-burger { display: inline-grid; }

@media (min-width: 64rem) {
	.pl-burger { display: none; }
}

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

.pl-drawer {
	position: fixed;
	inset: 0;
	z-index: var(--pl-z-drawer);
	display: grid;
	grid-template-columns: 1fr;
	pointer-events: none;
}

.pl-drawer[hidden] { display: none; }

.pl-drawer__scrim {
	position: absolute;
	inset: 0;
	background: rgb(15 23 42 / 0.45);
	opacity: 0;
	transition: opacity var(--pl-dur) var(--pl-ease);
}

.pl-drawer__panel {
	position: relative;
	margin-inline-start: auto;
	width: min(20rem, 86vw);
	height: 100%;
	background: #fff;
	box-shadow: var(--pl-shadow-lg);
	transform: translateX(100%);
	transition: transform var(--pl-dur-slow) var(--pl-ease);
	display: flex;
	flex-direction: column;
	overflow-y: auto;
	overscroll-behavior: contain;
}

.pl-drawer.is-open { pointer-events: auto; }
.pl-drawer.is-open .pl-drawer__scrim { opacity: 1; }
.pl-drawer.is-open .pl-drawer__panel { transform: none; }

.pl-drawer__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 1rem;
	border-bottom: 1px solid var(--pl-border-light);
}

.pl-drawer__body { padding: 0.75rem 1rem 1.5rem; }

.pl-drawer .pl-nav__list {
	flex-direction: column;
	align-items: stretch;
	gap: 0;
}

.pl-drawer .pl-nav__item { border-bottom: 1px solid var(--pl-border-light); }

.pl-drawer .pl-nav__group {
	display: flex;
	align-items: center;
	justify-content: space-between;
	width: 100%;
}

.pl-drawer .pl-nav__link {
	flex: 1;
	padding: 0.875rem 0.25rem;
	font-size: var(--pl-fs-body);
	color: var(--pl-text-primary);
}

.pl-drawer .pl-nav__toggle { padding: 0.875rem 0.5rem; }

.pl-drawer .pl-nav__dropdown {
	position: static;
	min-width: 0;
	padding: 0 0 0.5rem 0.75rem;
	border: 0;
	box-shadow: none;
	opacity: 1;
	transform: none;
	background: transparent;
}

.pl-drawer .pl-nav__item--child { border-bottom: 0; }

body.pl-drawer-open { overflow: hidden; }
