/* The nav bar while a page loads, and the skeletons. Split from files.css so each sheet has one job. Tokens only. */
/* Navigation that answers at once (issue 56): a thin bar along the foot of the top bar after about 150 ms, then the destination's own frame with skeleton rows. */
.ab-top {
	position: relative;
}
.ab-navbar {
	position: absolute;
	left: 0;
	right: 0;
	bottom: -1px;
	height: 2px;
	overflow: hidden;
	pointer-events: none;
	opacity: 0;
	animation: ab-navbar-show 0s linear 150ms forwards;
}
.ab-navbar span {
	display: block;
	width: 40%;
	height: 100%;
	background: var(--ink);
	animation: ab-navbar-run 1.1s ease-in-out infinite;
}
@keyframes ab-navbar-show {
	to {
		opacity: 1;
	}
}
@keyframes ab-navbar-run {
	from {
		transform: translateX(-100%);
	}
	to {
		transform: translateX(250%);
	}
}
.ab-skel {
	pointer-events: none;
	user-select: none;
}
.ab-skel-bar,
.ab-skel-title {
	display: block;
	flex: none;
	height: 12px;
	border-radius: var(--radius);
	background: var(--wash);
	animation: ab-skel-pulse 1.4s ease-in-out infinite;
}
.ab-skel-title {
	width: 220px;
	max-width: 70%;
	height: 24px;
	margin: 0 0 var(--space-4);
}
.ab-skel-rows {
	border-radius: 8px;
	box-shadow: inset 0 0 0 1px var(--rule);
	overflow: hidden;
}
.ab-skel-row {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	height: 40px;
	padding: 0 var(--space-4);
	border-top: 1px solid var(--rule);
}
.ab-skel-row:first-child {
	border-top: 0;
}
.ab-full.ab-skel {
	display: flex;
	min-height: calc(100vh - 48px);
}
.ab-skel-side {
	display: flex;
	flex: none;
	flex-direction: column;
	gap: 14px;
	width: 260px;
	padding: var(--space-4);
	border-right: 1px solid var(--rule);
}
.ab-skel-side .ab-skel-bar {
	height: 10px;
}
.ab-skel-main {
	flex: 1;
	min-width: 0;
	padding: var(--space-4) var(--space-5, 24px);
}
.ab-skel-lines {
	display: flex;
	flex-direction: column;
	gap: 12px;
}
@keyframes ab-skel-pulse {
	50% {
		opacity: 0.55;
	}
}
.ab-load-note {
	position: fixed;
	top: 64px;
	left: 50%;
	z-index: 40;
	display: flex;
	align-items: center;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-4);
	border-radius: var(--radius);
	background: var(--surface);
	box-shadow: inset 0 0 0 1px var(--rule);
	color: var(--muted);
	font-size: 13px;
	transform: translateX(-50%);
}
/* A page that did not load: the skeleton is cleared and what failed stands in the page, left-aligned where the content would be. */
.ab-load-failed {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-3);
	margin: var(--space-4) 0;
	color: var(--ink);
	font-size: 14px;
}
.ab-load-failed p {
	margin: 0;
}
.ab-load-failed-frame {
	flex: 1;
	min-width: 0;
	padding: var(--space-4) var(--space-5, 24px);
}
/* The Issues page's skeleton: its strip, progress bar, filters and agents column. */
.ab-skel-strip {
	height: 44px;
	border-radius: 8px;
	box-shadow: inset 0 0 0 1px var(--rule);
}
.ab-skel-progress {
	display: flex;
	flex-direction: column;
	gap: var(--space-3);
}
.ab-skel-progress .segments {
	display: flex;
	gap: 4px;
}
.ab-skel-progress .segments .ab-skel-bar {
	flex: 1;
	height: 6px;
}
.ab-skel-filters {
	display: flex;
	gap: var(--space-4);
	margin-bottom: var(--space-3);
	padding-bottom: var(--space-2);
	border-bottom: 1px solid var(--rule);
}
.ab-issues-side .ab-skel-bar {
	margin-bottom: var(--space-2);
}
.ab-issues-side .ab-skel-row {
	height: 44px;
}
@media (prefers-reduced-motion: reduce) {
	.ab-navbar span {
		width: 100%;
		opacity: 0.5;
		animation: none;
	}
	.ab-skel-bar,
	.ab-skel-title {
		animation: none;
	}
}
@media (max-width: 720px) {
	.ab-skel-side {
		display: none;
	}
	.ab-load-note {
		right: var(--space-3);
		left: var(--space-3);
		flex-wrap: wrap;
		transform: none;
	}
}
.ab-skel-main .ab-file-path {
	margin-bottom: var(--space-4);
}
