﻿/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
for details on configuring this project to bundle and minify static web assets. */

/*
 * Responsive breakpoints (mobile-first)
 * --------------------------------------
 * This file is mobile-first: default rules target small viewports, and `@media
 * (min-width: …)` blocks scale up. Two breakpoints are used, matching Bootstrap 4's
 * sm and md tiers:
 *
 *   sm  →  @media (min-width: 576px)   small devices and up (landscape phones)
 *   md  →  @media (min-width: 768px)   medium devices and up (tablets, small desktops)
 *
 * CSS custom properties cannot be referenced inside @media queries (they're resolved
 * per-element, not at the query level), so the literals 576 and 768 must appear in
 * the queries themselves. Keep this file consistent: do not introduce new
 * `max-width` queries, and do not introduce additional breakpoint values without
 * updating this comment.
 *
 * Boundary note: at exactly 576px or 768px, the larger-tier rules apply. Bootstrap
 * itself uses 575.98 / 767.98 to avoid a 1px overlap; we accept the simpler integers.
 */

.theme-light {
	--color-primary: #0060df;
	--color-secondary: #fbfbfe;
	--color-dramatic: #ffffff;
	--color-gradientStart: #ffffff;
	--color-gradientEnd: #d4d4d4;
	--color-midGradientStart: #a8c3cd40;
	--color-midGradientEnd: #2a3c5766;
	--color-lowerGradientStart: #68808a66;
	--color-lowerGradientEnd: #bbc9bf00;
	--color-accent: #fd6f53;
	--font-color: #000000;
	--font-color-alt: #565656;
	--font-alert: #f91e1e;
	--font-warn: #c2bd0c;
}

.theme-dark {
	--color-primary: #19a669;
	--color-secondary: #010101;
	--color-dramatic: #000000;
	--color-gradientStart: #000000;
	--color-gradientEnd: #000d23;
	--color-midGradientStart: #1d5c7540;
	--color-midGradientEnd: #2a3c5766;
	--color-lowerGradientStart: #000000;
	--color-lowerGradientEnd: #bbc9bf00;
	--color-accent: #12cdea;
	--font-color: #ffffff;
	--font-color-alt: #b6b6b6;
	--font-alert: #d61818;
	--font-warn: #c2bd0c;
}

/* Sepia — a reader-only theme (set on <html> by reader-prefs.js only while reading). Warm,
   low-contrast palette tuned for long-form reading; mirrors the var set of the other themes. */
.theme-sepia {
	--color-primary: #8a5a2b;
	--color-secondary: #f4ecd8;
	--color-dramatic: #efe6cf;
	--color-gradientStart: #f4ecd8;
	--color-gradientEnd: #e7d8b5;
	--color-midGradientStart: #d8c39840;
	--color-midGradientEnd: #b9a07a66;
	--color-lowerGradientStart: #cdb88e66;
	--color-lowerGradientEnd: #f4ecd800;
	--color-accent: #b3702d;
	--font-color: #5b4636;
	--font-color-alt: #7a6753;
	--font-alert: #b3261e;
	--font-warn: #9a7b0a;
}

html {
	background: inherit !important;
	color: inherit !important;
}
body {
	background: var(--color-secondary);
	color: var(--font-color);
	font-family: 'Open Sans', sans-serif;
	background: -moz-radial-gradient(0% 100%, ellipse cover, var(--color-lowerGradientStart) 10%,var(--color-lowerGradientEnd) 40%),-moz-linear-gradient(top, var(--color-midGradientStart) 0%, var(--color-midGradientEnd) 100%), -moz-linear-gradient(-45deg, var(--color-gradientStart) 0%, var(--color-gradientEnd) 100%);
	background: -webkit-radial-gradient(0% 100%, ellipse cover, var(--color-lowerGradientStart) 10%,var(--color-lowerGradientEnd) 40%), -webkit-linear-gradient(top, var(--color-midGradientStart) 0%,var(--color-midGradientEnd) 100%), -webkit-linear-gradient(-45deg, var(--color-gradientStart) 0%,var(--color-gradientEnd) 100%);
	background: -o-radial-gradient(0% 100%, ellipse cover, var(--color-lowerGradientStart) 10%,var(--color-lowerGradientEnd) 40%), -o-linear-gradient(top, var(--color-midGradientStart) 0%,var(--color-midGradientEnd) 100%), -o-linear-gradient(-45deg, var(--color-gradientStart) 0%,var(--color-gradientEnd) 100%);
	background: -ms-radial-gradient(0% 100%, ellipse cover, var(--color-lowerGradientStart) 10%,var(--color-lowerGradientEnd) 40%), -ms-linear-gradient(top, var(--color-midGradientStart) 0%,var(--color-midGradientEnd) 100%), -ms-linear-gradient(-45deg, var(--color-gradientStart) 0%,var(--color-gradientEnd) 100%);
	background: -webkit-radial-gradient(0% 100%, ellipse cover, var(--color-lowerGradientStart) 10%,var(--color-lowerGradientEnd) 40%), linear-gradient(to bottom, var(--color-midGradientStart) 0%,var(--color-midGradientEnd) 100%), linear-gradient( 135deg, var(--color-gradientStart) 0%,var(--color-gradientEnd) 100%);
	margin-left: 0 !important;
	margin-right: 0 !important;
}

html header.site-header {
	position: fixed;
	z-index: 20;
	top: 0;
	width: 100%;
	margin: 0 !important;
}
.navbar {
	font-family: 'Open Sans', sans-serif;
	background-color: var(--color-secondary);
	color: var(--font-color);
	padding-top: 0.1rem;
	padding-bottom: .2rem;
	margin: 0;
}
	.navbar .nav-item {
		margin: 0;
	}
@media (min-width: 768px) {
	.navbar {
		padding-top: 0.2rem;
	}
}

.container {
	max-width: 95%;
}

body>div.container {
	padding-top: 55px;
}

a.navbar-brand {
	white-space: normal;
	text-align: center;
	word-break: break-all;
	text-decoration: none !important;
}

/* Provide sufficient contrast against white background */
a {
  color: #0366d6;
}

.btn-primary {
  color: #fff;
  background-color: #1b6ec2;
  border-color: #1861ac;
}

.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
	color: #fff;
	background-color: #1b6ec2;
	border-color: #1861ac;
}
.nav-link {
	padding: 0.25em 0.5em;
}
	.nav-link i {
		vertical-align: middle;
		line-height: 1.5em;
	}

#header_nav {
	flex-grow: 1;
	display: inline-flex !important;
	flex-direction: row-reverse !important;
	text-wrap: none;
}
.navbar-expand-sm .navbar-nav {
	flex-direction: row;
}

.small-hide { display: none; }
@media (min-width: 576px) { .small-hide { display: inherit; } }

#mainSearch {
	border-radius: 0.25em;
	line-height: 1em;
	width: 120px;
}
	#mainSearch i {
	}
.icon-inside {
	z-index: 3;
	position: relative;
	right: 25px;
	font-size: 1.1rem;
	top: 3px;
	color: #747373;
	line-height: 32px;
}
.all-link-container {
	font-size: 1.1rem;
}
@media (min-width: 576px) {
	.icon-inside {
		font-size: 1.37rem;
		top: auto;
	}

	.all-link-container {
		font-size: unset;
	}
}

.icon-center {
	min-width: 16px;
	text-align: center;
}
@media (min-width: 576px) {
	#mainSearch {
		width: auto;
	}
}

.navbar .dropdown {
	display: flex;
	align-items: center;
}
.navbar .dropdown-menu {
	right: 0;
	left: auto;
	top: 50px;
	position: absolute;
	background: var(--color-dramatic);
	padding: 8px;
	min-width: 20rem;
	font-size: 1.5rem;
}
#ClientUpdateAnchor.busy {
	color: goldenrod !important;
}
#ClientUpdateMenu li {
	white-space: nowrap;
	color: var(--font-color);
	width: 350px;
	max-width: 300px;
	font-size: 0.9em;
	text-overflow: ellipsis;
	overflow: hidden;
	margin-bottom: 5px;
}
	#ClientUpdateMenu li.job-task {
		list-style: disc inside;
		white-space: normal;
		word-break: break-word;
		text-overflow: inherit;
		overflow: inherit;
		padding-left: 2px;
	}
	#ClientUpdateMenu li.job-task:before {
		content: "";
		margin-left: -0.9rem;
	}
	#ClientUpdateMenu li a {
		text-decoration: none;
		color: var(--font-color);
	}
	#ClientUpdateMenu li a:hover {
		text-decoration: underline;
	}
@media (min-width: 576px) {
	#ClientUpdateMenu li {
		max-width: none;
	}
}


.flex-row {
	display: flex;
	flex-direction: column !important;
}
@media (min-width: 576px) { .flex-row { flex-direction: row !important; } }
.flex-column {
	flex: 1;
}

.links {
	text-align: left;
}
	.links .section-divider {
		margin-bottom: 8px;
		margin-top: 8px;
	}
@media (min-width: 576px) { .links { text-align: unset; } }
	.links a {
		margin-bottom: 10px;
		font-weight: bold;
	}


.border-round {
	border: 1px solid #ced4da;
	border-radius: 0.5em;
}


.font-selector {
	position: absolute;
	top: 5px;
	left: 15px;
	white-space: nowrap;
}
	.font-selector span {
		margin-left: 5px;
		cursor: pointer;
	}
		.font-selector span:hover {
			color: var(--color-primary);
		}
	.font-selector .f-small {
		font-size: 75%;
	}
	.font-selector .f-medium {
		font-size: 100%;
	}
	.font-selector .f-large {
		font-size: 115%;
	}
	.font-selector .f-extra-large {
		font-size: 130%;
	}
	.font-selector .selected {
		text-decoration: overline underline;
		text-underline-offset: 2px;
		font-weight: bold;
	}


.book-browse-container {
}
	.book-browse-container .link-container {
		font-weight: bold;
		display: flex;
		align-items: center;
	}
		.book-browse-container .link-container .scroll-buttons {
			margin-left: auto;
		}

	.book-browse-container img.lazy {
		background-color: var(--color-secondary);
		width: 180px;
		height: 270px;
	}
img.lazy {
	font-weight: 300;
	line-height: 2;
	text-align: center;
	display: block;
	position: relative;
}
	img.lazy:before {
		content: " ";
		display: block;
		position: absolute;
		top: -10px;
		left: 0;
		height: calc(100% + 10px);
		width: 100%;
		background-color: var(--color-secondary);
		border-radius: 5px;
	}
	img.lazy:after {
		content: "\f1c5" " " attr(alt);
		font-family: "Font Awesome 5 Free";
		font-family: inherit;
		font-weight: 900;
		font-size: 0.9em;
		opacity: 0.8;
		display: block;
		position: absolute;
		top: calc(50% - 1em);
		left: 0;
		width: 100%;
		text-align: center;
		color: var(--font-color);
	}


.scroller {
	display: flex;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	scroll-behavior: smooth;
	flex-direction: row;
	flex-wrap: wrap;
}
	.scroller.horizontal {
		flex-wrap: nowrap;
		overflow-y: hidden;
	}
	.scroller::-webkit-scrollbar {
		width: 20px;
	}
	.scroller::-webkit-scrollbar-track {
		background-color: transparent;
	}
	.scroller::-webkit-scrollbar-thumb {
		background-color: #d6dee1;
		border-radius: 20px;
		border: 3px solid transparent;
		background-clip: content-box;
	}
		.scroller::-webkit-scrollbar-thumb:hover {
			background-color: #a8bbbf;
		}

.scroller-not-found {
	text-align: center;
	line-height: 2em;
	font-size: 1.3em;
}
	.scroller-not-found i {
		vertical-align: middle;
	}

#browseitems {
	height: calc(100vh - 185px);
}

.virtual-scroll {
	height: 100%;
	min-width: 315px;
	overflow-y: auto;
	position: relative;
}

	.virtual-scroll img + i {
		display: none;
	}
	.virtual-scroll img[src=""], .virtual-scroll img[src="#"], .virtual-scroll img:not([src]) {
		display: none;
	}
		.virtual-scroll img[src=""] + i, .virtual-scroll img[src="#"] + i, .virtual-scroll img:not([src]) + i {
			display: inline-block;
		}

.virtual-scroll-content {
	width: 100%;
}

.has-seeker {
	float: left;
	width: calc(100% - 30px);
}
.seeker {
	float: right;
	width: 25px;
	height: 100%;
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: center;
	align-content: center;
	font-size: 0.8em;
}
	.seeker div {
		flex: 1;
	}
	.seeker a {
		text-decoration: none;
		color: var(--font-color);
		opacity: 0.6;
		vertical-align: middle
	}
		.seeker a:hover {
			opacity: 1;
		}
	.seeker span {
		opacity: 0.2;
	}
@media (min-width: 768px) {
	.seeker {
		font-size: unset;
	}
}

.scroller-item {
	scroll-snap-align: center;
	flex: 0 0 auto;
	margin-right: 17px;
	margin-bottom: 15px;
	position: relative;
	width: 149px;
	height: 300px;
	font-size: 16px;
}

.scroller-item img:hover {
	opacity: 0.7;
}

.scroller-item .favorite {
	position: absolute;
	z-index: 1;
	bottom: 0;
	left: 2px;
	font-size: 27px;
}
	.scroller-item .favorite:after {
		opacity: 0.5;
		content: "";
		position: absolute;
		bottom: -51%;
		left: -130%;
		transform: rotate( 45deg );
		z-index: -1;
		height: 150%;
		width: 300%;
		/* background-color: black; */
		background: linear-gradient(to top, black, transparent 95%);
		/* box-shadow: 0 -0.25rem 0.75rem 0px rgb(0 0 0 / 15%); */
	}
.scroller-item .read-progress {
	position: absolute;
	z-index: 1;
	left: 0;
	bottom: 0;
	background-color: goldenrod;
	height: 5px;
}

	.scroller-item .item-link {
		width: 149px;
		height: 223px;
		display: block;
		text-align: center;
		position: relative;
		overflow: hidden;
	}
	.scroller-item img {
		width: auto;
		height: 100%;
		width: 100%;
		cursor: pointer;
		display: block;
		border-radius: 0.25em;
	}
	.scroller-item .item-link i.fa-book {
		font-size: 135px;
	}
	.scroller-item .title {
		font-weight: bold;
		color: var(--font-color);
		font-size: 1.0em;
		max-width: 180px;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
		margin-top: 1px;
	}
		.scroller-item .title a {
			text-decoration: none;
			color: var(--font-color);
		}
			.scroller-item .title a:hover {
				text-decoration: underline;
				color: var(--font-color);
			}
	.scroller-item .sub-title {
		font-size: 1.0em;
		opacity: 0.7;
		max-width: 180px;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}
	/* "More like this, but ___" chip rows. Sit below a related-books strip; each chip is a
	   pill the user toggles to nudge the search vector toward (+) or away from (−) a genre.
	   Visual state: inactive = pale, active = filled. */
	.modifier-chips {
		margin: 8px 0 16px 0;
		display: flex;
		flex-wrap: wrap;
		gap: 10px 18px;
		align-items: baseline;
	}
	.modifier-chips.loading {
		opacity: 0.6;
		pointer-events: none;
	}
	/* modifier-chips.js adds .error when the refresh fetch fails (network drop, 5xx).
	   Subtle red underline on the chip strip is enough — no toast — because re-clicking the
	   chip naturally retries and clears the class. */
	.modifier-chips.error {
		border-bottom: 1px dotted #c33;
	}
	.modifier-chips .modifier-row {
		display: flex;
		flex-wrap: wrap;
		gap: 6px;
		align-items: center;
	}
	.modifier-chips .modifier-label {
		font-size: 0.85em;
		opacity: 0.7;
		min-width: 4em;
	}
	.modifier-chips .chip {
		font-size: 0.85em;
		padding: 3px 10px;
		border-radius: 999px;
		border: 1px solid var(--font-color);
		background: transparent;
		color: var(--font-color);
		cursor: pointer;
		opacity: 0.7;
		transition: opacity 0.1s, background 0.1s;
	}
	.modifier-chips .chip:hover {
		opacity: 1;
	}
	.modifier-chips .chip.active {
		/* Inverted text colour of the page — black-on-white in light, white-on-black in dark.
		   --color-secondary is the body background variable; using it for `color` here gives
		   the chip the same "selected pill" look in both themes. (The previous fallback was
		   `var(--bg-color, #fff)` but there is no --bg-color variable, so dark mode was
		   white-on-white.) */
		background: var(--font-color);
		color: var(--color-secondary);
		opacity: 1;
	}

	/* Why-related caption on related-books cards. Smaller and dimmer than sub-title; typically
	   "Shares X, Y" — keep it inline-ellipsis like the rest of the card metadata. The card grows
	   taller via the :has() rule below so the extra line doesn't overlap the next card. */
	.scroller-item .match-reason {
		font-size: 0.8em;
		opacity: 0.55;
		font-style: italic;
		max-width: 180px;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}
	/* Only the cards that actually carry a match-reason caption get the extra height — keeps
	   the rest of the home/search shelves flush at the original 300px. :has() narrows the
	   selector to the specific surface (related-books today; any future strip that opts in to
	   MatchReason will inherit the same growth). */
	.scroller-item:has(.match-reason) {
		height: 320px;
	}
		.scroller-item .sub-title a {
			text-decoration: none;
			color: var(--font-color);
		}
			.scroller-item .sub-title a:hover {
				text-decoration: underline;
				color: var(--font-color);
			}

	.scroller-item.item-read .item-link:before {
		content: "";
		position: absolute;
		top: -3%;
		right: -12%;
		transform: rotate( 45deg );
		z-index: 10;
		height: 10%;
		width: 30%;
		background-color: goldenrod;
	}
	.scroller-item.item-read .item-link:after {
		content: "L";
		position: absolute;
		transform: scaleX(-1) rotate( -40deg );
		top: -4px;
		right: 4px;
		z-index: 11;
		text-align: start;
		font-size: 65%;
		font-weight: bold;
	}

#offlineLibrary {
}
	#offlineLibrary .scroller .scroller-item {
		margin-bottom: 18px;
		height: 350px;
	}

.temp {
	width: 149px;
	height: 300px;
	border-radius: 0.5em;
	background-color: var(--color-secondary);
	text-align: center;
	display: flex;
	align-content: center;
	align-items: center;
	justify-content: center;
}


.favorite {
	color: goldenrod;
	cursor: pointer;
	transition: 0.1s;
	width: 25px;
	text-align: center;
}
	.favorite:hover {
		color: blue;
	}

	.favorite i {
		transition: 0.1s;
	}



@media (min-width: 576px) {
	.scroller-item, .temp {
		width: 180px;
		height: 329px;
		margin-right: 25px;
	}
	/* Matched +20px bump for match-reason cards at the wider breakpoint, paralleling the
	   base-size rule above. Keeps the caption from clipping into the next card. */
	.scroller-item:has(.match-reason) {
		height: 349px;
	}
		.scroller-item .item-link {
			width: 180px;
			height: 270px;
		}
		.scroller-item .title {
			font-size: 0.9em;
			margin-top: 5px;
		}
		.scroller-item .sub-title {
			font-size: 0.7em;
		}
		.scroller-item .item-link i.fa-book {
			font-size: 207px;
		}
		.scroller-item .favorite {
			font-size: 32px;
		}
	.favorite {
		width: 36px;
	}
	#browseitems {
		height: calc(100vh - 155px);
	}
	.scroller-item.item-read .item-link:after {
		font-size: 90%;
	}
}

#offlinePortal .scroller-item {
	height: 350px;
}




.book {

}
	.book .info {
		display: flex;
		flex-direction: row;
		flex-wrap: wrap;
	}
	.book .book-cover {
		flex: 2;
		min-width: 250px;
		display: flex;
		flex-direction: column;
	}
	.book .book-cover img {
		width: 100%;
	}
	/* Reserve the space the cover image will occupy and show a spinner until it loads.
	   The .book-cover flex item is stretched (by .info's flex row) to the height of the
	   adjacent .book-info, so .book-cover-image fills that container rather than guessing
	   the image's intrinsic size. */
	.book .book-cover-image {
		position: relative;
		width: 100%;
	}
	.book .book-cover-image.is-loading {
		flex: 1 1 auto;
		min-height: 250px;
	}
	.book .book-cover-image.is-loading img {
		visibility: hidden;
	}
	.book .book-cover-spinner {
		display: none;
		position: absolute;
		inset: 0;
		align-items: center;
		justify-content: center;
		font-size: 2.5em;
		color: var(--font-color-alt, currentColor);
	}
	.book .book-cover-image.is-loading .book-cover-spinner {
		display: flex;
	}
	.book .book-info {
		flex: 3;
		font-size: 1.2em;
	}
	.book .book-title {
		display: inline-flex;
		font-weight: bold;
	}
	.book .book-title .title-text {
		vertical-align: middle;
		margin-left: 20px;
		font-size: 1.2em;
	}
	.book .actions-row {
		display: flex;
		align-items: center;
		gap: 10px;
		margin-top: 5px;
	}
	.book .actions-row .book-info-btn {
		margin-left: auto;
	}
	.book .offline-toggle {
		margin-top: 5px;
	}
	.book .favorite i {
		vertical-align: middle;
	}
	.book .is-read i {
		vertical-align: middle;
		margin-left: 15px;
		margin-top: 2px;
	}
	.book .read a {
		position: relative;
		width: 100%;
	}
	.book .read-progress {
		position: absolute;
		z-index: 1;
		left: 0;
		bottom: 0;
		background-color: goldenrod;
		height: 5px;
	}
	.book .bookmarks {
		margin-top: 10px;
		margin-left: 15px;
	}
		.book .bookmarks a {
			text-decoration: none;
			color: var(--font-color);
		}
		.book .bookmarks a:hover {
			text-decoration: underline;
		}
	.book .book-detail {
		display: flex;
		align-items: flex-start;
	}
	.book .header {
		text-decoration: underline;
		white-space: nowrap;
		display: inline-block;
		flex: 1;
	}
	.book .value {
		display: inline-block;
		flex: 2;
	}
	.book .book-related {
		margin-top: 20px;
	}
.link-container a {
	text-decoration: none;
	font-weight: bold;
	color: var(--font-color);
	margin-right: 5px;
}
	.link-container a:hover {
		text-decoration: underline;
		color: var(--font-color);
	}
@media (min-width: 768px) {
	.book .book-cover img {
		width: 95%;
	}
	.book .value { flex: 4; }
	.book .read a {
		width: 300px;
	}
}


#BookInfoModalPopUp .modal-dialog {
	width: 90%;
	max-width: inherit;
}
#BookInfoModalPopUp .modal-content {
	background-color: var(--color-secondary);
	color: var(--font-color);
	border: 1px solid var(--font-color-alt);
}
#BookInfoModalPopUp .modal-header {
	border-bottom: 1px solid var(--font-color-alt);
}
#BookInfoModalPopUp .modal-footer {
	border-top: 1px solid var(--font-color-alt);
}
#BookInfoModalPopUp .modal-header .close {
	color: var(--font-color);
	text-shadow: none;
}
#BookInfoModalPopUp .book-detail {
	display: flex;
	align-items: flex-start;
	margin-bottom: 8px;
}
#BookInfoModalPopUp .book-detail .header {
	text-decoration: underline;
	white-space: nowrap;
	display: inline-block;
	flex: 1;
	font-weight: bold;
}
#BookInfoModalPopUp .book-detail .value {
	display: inline-block;
	flex: 4;
	word-break: break-all;
}
.modal-body .metadata-item:not(:first-child) {
}
.modal-body .metadata-item:not(:last-child) {
	border-bottom: 1px solid var(--font-color-alt);
	padding-bottom: 20px;
}
.modal-body .header {
	font-weight: bold;
}
.modal-body .metadata-controls {
	margin-bottom: 12px;
	padding-bottom: 12px;
	border-bottom: 1px solid var(--font-color-alt);
}
.modal-body .metadata-item.metadata-item-current {
	border-left: 3px solid var(--color-primary);
	padding-left: 8px;
}
.modal-body .metadata-action {
	margin-top: 6px;
}
.modal-body .metadata-edit-form {
	margin-top: 12px;
	padding-top: 12px;
	border-top: 1px solid var(--font-color-alt);
}
.modal-body .metadata-edit-form .form-group {
	margin-bottom: 8px;
}
.modal-body .metadata-edit-form label {
	display: block;
	margin-bottom: 2px;
	font-weight: 600;
}
.modal-body .metadata-edit-note {
	margin: 8px 0;
	font-size: 0.85em;
	color: var(--font-color-alt);
}
.modal-body .metadata-edit-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}
.modal-body .metadata-edit-actions .metadata-action {
	margin-top: 0;
}
.author-title .author-refresh-btn {
	margin-left: 8px;
	vertical-align: middle;
}


.fixed-link {
	position: fixed;
	font-size: 2.2em;
	top: 15%;
	left: 1%;
	text-align: center;
}
	.fixed-link h4 {
		font-size: 0.3em;
	}
	.fixed-link a {
		color: var(--color-primary) !important;
		text-decoration: none;
	}
	.fixed-link>div {
		font-size: 0.25em;
		margin-top: -6px;
		width: 100%;
	}
	.fixed-link.first {
	}
	.fixed-link.second {
		margin-top: 1.8em;
	}
	.fixed-link.third {
		margin-top: 3.6em;
	}


.book-content {
    font-size: 1.4em;
    line-height: 1.2em;
    margin-left: 15px;
    margin-right: 15px;
    word-break: break-word;
}
.book-content img {
    max-width: 99%;
    height: auto;
}
	.book-content .book-bookmark-nav {
		display: inline;
		opacity: 0;
		transition: 0.3s;
		font-weight: bold;
		position: relative;
		color: var(--color-primary);
	}
	.book-content .book-bookmark-nav a {
		position: absolute;
		top: -2px;
		right: 3px;
		cursor: inherit;
	}
	.book-content.bookmarks-show .book-bookmark-nav {
		opacity: 0.6;
	}
	.book-content.bookmarks-show .book-bookmark-nav:hover {
		opacity: 1;
	}
	.book-content.bookmarks-show .book-bookmark-nav a {
		cursor: pointer;
	}
.book-bookmark-nav.current-marker {
	opacity: 0.8;
}


.book-close {
	top: 60px;
	right: 13px;
	left: auto;
	opacity: 0.6;
}
	.book-close:hover {
		opacity: 1;
	}
.book-previous {
	top: 55%;
	left: 10px;
	opacity: 0.7;
	transition: 0.4s;
}
.book-next {
	top: 55%;
	left: auto;
	right: 10px;
	opacity: 0.7;
	transition: 0.4s;
}
	.book-previous:hover, .book-next:hover {
		opacity: 1;
	}

.book-bookmark-open {
	top: 30%;
	left: auto;
	right: 13px;
	font-size: 1.7em;
}
	.book-bookmark-open i.far {
		opacity: 0.5;
		transition: 0.4s;
	}
	.book-bookmark-open i.fas {
		opacity: 0.9;
		transition: 0.4s;
	}
	.book-bookmark-open i.far:hover, .book-bookmark-open i.fas:hover {
		opacity: 1;
	}
.book-bookmark-previous {
	top: calc(30% - 1.5em);
	left: auto;
	right: 18px;
	font-size: 1.3em;
	transition: 0.4s;
	opacity: 0.4;
}
.book-bookmark-next {
	top: calc(30% + 1.6em);
	left: auto;
	right: 18px;
	font-size: 1.3em;
	transition: 0.4s;
	opacity: 0.4;
}
.book-bookmark-previous:hover, .book-bookmark-next:hover {
	opacity: 0.9;
}

/* Image Mode toggle — top-left corner mirroring book-close (top-right). */
.book-rastermode-toggle {
	top: 60px;
	left: 13px;
	right: auto;
	font-size: 1.4em;
	opacity: 0.55;
	transition: 0.4s;
}
	.book-rastermode-toggle:hover { opacity: 1; }

/* Image Mode chapter rendering: each page is a single <img> wrapped in .pdf-page;
   stretch to the reading column width with vertical scrolling between pages. */
.pdf-rastermode { display: block; }
.pdf-rastermode .pdf-page {
	margin: 0 auto 2rem auto;
	max-width: 100%;
	text-align: center;
}
.pdf-rastermode .pdf-page img {
	max-width: 100%;
	height: auto;
	box-shadow: 0 1px 6px rgba(0, 0, 0, 0.25);
}

/* Reader-internal modal (used for the "Image Mode" tradeoffs explanation). Bootstrap's
   modal classes are styled in this file but the JS isn't loaded for the reader, so we
   build a backdrop ourselves and reuse .modal-content / .modal-header / .modal-body. */
.reader-modal-backdrop {
	position: fixed;
	top: 0; left: 0; right: 0; bottom: 0;
	background: rgba(0, 0, 0, 0.55);
	display: flex; align-items: center; justify-content: center;
	z-index: 1050;
}
.reader-modal {
	max-width: 32rem;
	width: 90%;
	/* Override .modal-content's hardcoded #fff/#212529 so the modal follows the
	   user's theme. The Bootstrap modal styles assume a white surface; the reader
	   sits on the active theme background and looks wrong against it otherwise. */
	background: var(--color-secondary);
	color: var(--font-color);
	border: 1px solid var(--font-color-alt);
	border-radius: .4rem;
	padding: 0;
	box-shadow: 0 4px 24px rgba(0, 0, 0, 0.4);
}
.reader-modal .modal-header {
	padding: 1rem 1.25rem .5rem 1.25rem;
	display: flex; align-items: center; justify-content: space-between;
	color: var(--font-color);
}
.reader-modal .modal-header h4 { margin: 0; font-size: 1.2rem; color: var(--font-color); }
.reader-modal .modal-header .close { color: var(--font-color); text-shadow: none; }
.reader-modal .modal-body { padding: .25rem 1.25rem 1rem 1.25rem; color: var(--font-color); }
.reader-modal .modal-body ul { margin-left: 1.25rem; }
.reader-modal .modal-body button {
	margin-right: .5rem;
	color: var(--font-color);
	background-color: transparent;
	border: 1px solid var(--font-color-alt);
}
.reader-modal .modal-body button:hover {
	background-color: var(--color-primary);
	border-color: var(--color-primary);
	color: var(--color-secondary);
}

.reader-toast {
	position: fixed;
	bottom: 2rem;
	left: 50%;
	transform: translateX(-50%);
	background: var(--color-dramatic);
	color: var(--font-color);
	border: 1px solid var(--font-color-alt);
	padding: .6rem 1rem;
	border-radius: .3rem;
	z-index: 1100;
	transition: opacity .4s ease-out;
}
.reader-toast.reader-toast-out { opacity: 0; }

@media (min-width: 768px) {
	.book-content {
		margin-left: 50px;
		margin-right: 50px;
	}
	.fixed-link {
		font-size: 3em;
	}
		.fixed-link > div {
			font-size: 0.2em;
			margin-top: -10px;
		}
	.book-bookmark-open {
		font-size: 2em;
	}
	.book-bookmark-previous, .book-bookmark-next {
		font-size: 1.2em;
	}
	.book-bookmark-next {
		top: calc(30% + 2.2em);
	}
	.book-rastermode-toggle {
		font-size: 1.6em;
	}
	.book-content img {
		max-width: none;
		height: auto;
	}
}


/* ============================================================
   Reader typography (applied to #mainBookContent by reader-prefs.js)
   The "normal"/"default" option in each group renders no class, so the base
   .book-content rules above are the baseline.
   ============================================================ */
.book-content.reader-font-serif { font-family: Georgia, "Times New Roman", serif; }
.book-content.reader-font-sans { font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }

.book-content.reader-size-small { font-size: 1.1em; }
.book-content.reader-size-large { font-size: 1.7em; }
.book-content.reader-size-xlarge { font-size: 2.0em; }

.book-content.reader-spacing-tight { line-height: 1.1em; }
.book-content.reader-spacing-loose { line-height: 1.8em; }

.book-content.reader-margin-narrow { margin-left: 5px; margin-right: 5px; }
.book-content.reader-margin-wide { margin-left: 30px; margin-right: 30px; }
@media (min-width: 768px) {
	.book-content.reader-margin-narrow { margin-left: 20px; margin-right: 20px; }
	.book-content.reader-margin-wide { margin-left: 120px; margin-right: 120px; }
}

/* ============================================================
   Highlights & notes (paragraph-level, anchored to bookmark markers)
   Tint vars default to light/sepia-friendly values; dark theme dims them.
   ============================================================ */
.book-content {
	--hl-yellow: rgba(255, 235, 59, 0.45);
	--hl-green: rgba(76, 175, 80, 0.38);
	--hl-blue: rgba(66, 165, 245, 0.38);
	--hl-pink: rgba(236, 64, 122, 0.32);
}
.theme-dark .book-content {
	--hl-yellow: rgba(255, 214, 0, 0.30);
	--hl-green: rgba(76, 175, 80, 0.30);
	--hl-blue: rgba(66, 165, 245, 0.30);
	--hl-pink: rgba(236, 64, 122, 0.30);
}
/* Highlights are inline spans wrapping each text run of a paragraph (one per text node, so
   italic/inline words are tinted too). No horizontal padding — adjacent runs must butt together
   seamlessly. box-decoration-break keeps the tint continuous across wrapped lines. */
.book-content .bk-hl {
	border-radius: 2px;
	padding: 0;
	-webkit-box-decoration-break: clone;
	box-decoration-break: clone;
}
.book-content .bk-hl-yellow { background-color: var(--hl-yellow); }
.book-content .bk-hl-green { background-color: var(--hl-green); }
.book-content .bk-hl-blue { background-color: var(--hl-blue); }
.book-content .bk-hl-pink { background-color: var(--hl-pink); }

/* A small dot on a marker that carries a note (the marker icon's title shows the text). */
.book-content .book-bookmark-nav.has-note a::after {
	content: "";
	position: absolute;
	top: -4px;
	right: -6px;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--color-accent);
}

/* Annotation editor (built in reader.js, reuses .reader-modal). Swatches use solid colors
   rather than the translucent tint vars since the modal sits outside .book-content. The
   selectors are intentionally specific (.reader-modal .modal-body button.ann-swatch-*) so they
   win over the generic `.reader-modal .modal-body button` background/border/hover rules above —
   otherwise the swatches render blank/transparent. */
.reader-modal .modal-body .ann-swatches { display: flex; gap: .5rem; margin-bottom: .75rem; }
.reader-modal .modal-body button.ann-swatch {
	width: 2rem;
	height: 2rem;
	border-radius: 50%;
	border: 2px solid var(--font-color-alt);
	cursor: pointer;
	padding: 0;
}
.reader-modal .modal-body button.ann-swatch.active { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.reader-modal .modal-body button.ann-swatch-none,
.reader-modal .modal-body button.ann-swatch-none:hover { background: transparent; color: var(--font-color); }
.reader-modal .modal-body button.ann-swatch-yellow,
.reader-modal .modal-body button.ann-swatch-yellow:hover { background: #ffe14d; }
.reader-modal .modal-body button.ann-swatch-green,
.reader-modal .modal-body button.ann-swatch-green:hover { background: #7fcf83; }
.reader-modal .modal-body button.ann-swatch-blue,
.reader-modal .modal-body button.ann-swatch-blue:hover { background: #6fb3f2; }
.reader-modal .modal-body button.ann-swatch-pink,
.reader-modal .modal-body button.ann-swatch-pink:hover { background: #f07aa6; }
.ann-note {
	width: 100%;
	background: var(--color-secondary);
	color: var(--font-color);
	border: 1px solid var(--font-color-alt);
	border-radius: .25rem;
	padding: .4rem;
	margin-bottom: .75rem;
}
.ann-actions { display: flex; gap: .5rem; flex-wrap: wrap; }

/* ============================================================
   Reading-settings control panel (reader-prefs.js)
   ============================================================ */
/* Left side, stacked beneath the image/text flip icon (.book-rastermode-toggle at top:60px).
   When the book isn't a PDF the flip icon is absent and this simply sits near the top-left. */
.book-readerprefs-toggle {
	top: 110px;
	left: 13px;
	right: auto;
	font-size: 1.4em;
	opacity: .55;
	transition: .4s;
}
.book-readerprefs-toggle:hover { opacity: 1; }
.reader-prefs-panel {
	position: fixed;
	top: 150px;
	left: 13px;
	right: auto;
	z-index: 1090;
	background: var(--color-secondary);
	color: var(--font-color);
	border: 1px solid var(--font-color-alt);
	border-radius: .4rem;
	padding: .75rem;
	box-shadow: 0 4px 24px rgba(0, 0, 0, 0.4);
	max-width: 18rem;
}
.reader-prefs-row { margin-bottom: .6rem; }
.reader-prefs-row:last-child { margin-bottom: 0; }
.reader-prefs-label { display: block; font-size: .8rem; opacity: .8; margin-bottom: .25rem; }
.reader-prefs-seg { display: flex; flex-wrap: wrap; gap: .25rem; }
.reader-prefs-opt {
	flex: 1 1 auto;
	min-width: 2.5rem;
	background: transparent;
	color: var(--font-color);
	border: 1px solid var(--font-color-alt);
	border-radius: .25rem;
	padding: .3rem .4rem;
	cursor: pointer;
	font-size: .85rem;
}
.reader-prefs-opt.active {
	background: var(--color-primary);
	border-color: var(--color-primary);
	color: var(--color-secondary);
}
@media (min-width: 768px) {
	.book-readerprefs-toggle { font-size: 1.6em; }
}

/* Book-detail bookmark list: highlight color swatch + note preview. */
.bookmark-swatch {
	display: inline-block;
	width: .75rem;
	height: .75rem;
	border-radius: 50%;
	margin-right: .35rem;
	vertical-align: middle;
	border: 1px solid var(--font-color-alt);
}
.bookmark-swatch-yellow { background: #ffe14d; }
.bookmark-swatch-green { background: #7fcf83; }
.bookmark-swatch-blue { background: #6fb3f2; }
.bookmark-swatch-pink { background: #f07aa6; }
.bookmark-note {
	font-size: .85rem;
	color: var(--font-color-alt);
	font-style: italic;
	margin: .1rem 0 .4rem 0;
	white-space: pre-wrap;
}


.book-nav {
	flex: 1;
}
	.book-nav a {
		font-size: 100% !important;
	}
	.book-nav .current-chapter {
		text-decoration: underline;
		color: var(--color-primary);
		font-weight: bold;
		font-size: 1.1em;
	}




.author {
}
	.author .author-title {
		display: inline-flex;
		font-weight: bold;
		margin-bottom: 30px;
	}
	.author .author-title .title-text {
		vertical-align: middle;
		margin-right: 20px;
		font-size: 1.2em;
	}
	.author .favorite i {
		vertical-align: middle;
	}



.clicker {
	cursor: pointer;
	width: 32px;
	padding-top: 5px;
	padding-bottom: 5px;
	vertical-align: middle;
	border-radius: 15px;
	background-color: inherit;
	transition-duration: 0.6s;
}
.clicker:hover {
	background-color: #a8bbbf;
	transition-duration: 0.6s;
}


.section-divider {
	margin-bottom: 30px;
}
.section-divider.short {
	width: 70%;
	margin-left: 15%;
}



#alerts {
	position: fixed;
	z-index: 100;
	bottom: 50px;
	right: 10px;
}
.toast {
	background-color: rgba(255,255,255,.95);
}
.toast-body {
	color: #000;
}

.data .title {
	font-weight: bold;
}
.data .error, .data .fatal {
	color: var(--font-alert);
}
.data .warning {
	color: var(--font-warn);
}
.data .information {
	font-style: italic;
}
.data .trace, .data .debug {
	opacity: 0.4;
}
.data .details {
	margin-left: 20px;
}

.logs-day-header {
	margin-top: 20px;
	margin-bottom: 12px;
}
.logs-day-header h5 {
	font-weight: 600;
	opacity: 0.85;
}
.logs-day-header .section-divider {
	margin-bottom: 8px;
}

.modal-wide {
	width: 80%;
}


.sub-nav {
	display: flex;
	flex-direction: column;
	margin-left: 0;
	margin-bottom: 30px;
}
	.sub-nav .nav-link {
		display: inline;
		text-decoration: none;
		white-space: nowrap;
	}
	.sub-nav .nav-item {
		margin-bottom: 5px;
	}
@media (min-width: 576px) {
	.sub-nav {
		display: block;
		margin-left: 40px;
	}
		.sub-nav .nav-item {
			margin-bottom: 0;
		}
}


.table {
	color: var(--font-color);
}
.table-striped > tbody > tr:nth-of-type(odd) {
	color: var(--font-color-alt);
}


/*********** font-awesome classes ***********/
.icon-small { font-size: 0.5em; }
.icon-medium { font-size: 1em; }
.icon-large { font-size: 1.5em; }
.icon-huge { font-size: 3em; }
.icon-comical { font-size: 10em; }




/*********** Login page ***********/
.login .btn-large { padding: 9px 14px; font-size: 15px; line-height: normal; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
.login .btn-block { width: 100%; display:block; }

.login * { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; -ms-box-sizing:border-box; -o-box-sizing:border-box; box-sizing:border-box; }

.login { 
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -150px 0 0 -150px;
  width:300px;
  height:300px;
}
.login h1 { color: #fff; text-shadow: 0 0 10px rgba(0,0,0,0.3); letter-spacing:1px; text-align:center; }

.login input { 
  width: 100%; 
  margin-bottom: 10px; 
  background: rgba(0,0,0,0.3);
  border: none;
  outline: none;
  padding: 10px;
  font-size: 13px;
  color: #fff;
  text-shadow: 1px 1px 1px rgba(0,0,0,0.3);
  border: 1px solid rgba(0,0,0,0.3);
  border-radius: 4px;
  box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2);
  -webkit-transition: box-shadow .5s ease;
  -moz-transition: box-shadow .5s ease;
  -o-transition: box-shadow .5s ease;
  -ms-transition: box-shadow .5s ease;
  transition: box-shadow .5s ease;
}
.login input:focus { box-shadow: inset 0 -5px 45px rgba(100,100,100,0.4), 0 1px 1px rgba(255,255,255,0.2); }




/*********** The sidepanel menu ***********/
.sidepanel {
	font-family: 'Open Sans', sans-serif;
	line-height: 2em;
	position: fixed;
	top: 0;
	left: 0;
	height: 100%;
	min-height: -webkit-fill-available;
	width: 0; /* 0 width - change this with JavaScript */
	z-index: 200; /* Stay on top */
	overflow: hidden; /* Disable scroll */
	padding-top: 50px; /* Place content 60px from the top */
	transition: 0.5s; /* 0.5 second transition effect to slide in the sidepanel */
	background: var(--color-secondary);
	color: var(--font-color);
	display: flex;
	flex-direction: column;
}
	.sidepanel.open {
		width: 250px;
	}

	/* The sidepanel links */
	.sidepanel a {
		color: var(--font-color);
		text-decoration: none;
		font-size: 140%;
		display: flex;
		align-items: center;
		transition: 0.3s;
	}
		.sidepanel a.center {
			justify-content: center;
		}
		.sidepanel a i {
			margin-right: 5px;
		}

		/* When you mouse over the navigation links, change their color */
		.sidepanel a:hover {
			color: var(--color-primary);
		}

	/* Position and style the close button (top right corner) */
	.sidepanel .closebtn {
		position: absolute;
		padding: 0;
		top: 4px;
		right: 20px;
		font-size: 36px;
	}

	.sidepanel .sidepanel-content {
		padding-left: 25px;
		white-space: nowrap;
		overflow-x: hidden;
		width: 100%;
		text-align: left;
	}
	.sidepanel .sidepanel-footer {
		line-height: 32px;
		width: 100%;
		text-align: center;
		white-space: nowrap;
		padding-bottom: 10px;
		margin-top: auto;
	}

.switch-container {
	display: flex;
	align-items: center;
	justify-content: flex-end;
	white-space: nowrap;
	margin-right: 15px;
}
/* Vertical breathing room between adjacent toggles (theme + force-offline today). */
.switch-container + .switch-container {
	margin-top: .75rem;
}


/*********** Style the button that is used to open the sidepanel ***********/
#openbtn {
	display: block;
	margin-right: 10px;
}
	#openbtn:hover {
		border-color: #888;
		transition: .8s;
	}



/*********** Modal styling ***********/
.modal-content {
	color: #212529;
}
.modal-content .modal-header {
}
.modal-content .modal-header .close {
	background-color: transparent;
	border: 0;
	color: var(--font-color);
	font-size: 1.5rem;
	font-weight: 700;
	line-height: 1;
	text-shadow: 0 1px 0 #fff;
}
.modal-content .modal-body button {
	border-color: rgba(0,0,0,.1);
	padding: .25rem .75rem;
	font-size: 1.25rem;
	/* line-height: 1; */
	background-color: transparent;
	border: 1px solid #c3c3c3;
	border-radius: .25rem;
	transition: box-shadow .15s ease-in-out;
	margin-top: 10px;
}
	.modal-content .modal-body button:hover {
		background-color: #c3c3c3;
	}


/* The switch - the box around the slider */
.switch {
	position: relative;
	display: inline-block;
	width: 60px;
	height: 34px;
}
	/* Hide default HTML checkbox */
	.switch input {
		opacity: 0;
		width: 0;
		height: 0;
	}
.switch-text {
	margin-right: 5px;
}

/* The slider */
.slider {
	position: absolute;
	cursor: pointer;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	background-color: #ccc;
	-webkit-transition: .4s;
	transition: .4s;
}
	.slider:before {
		position: absolute;
		content: "";
		height: 26px;
		width: 26px;
		left: 4px;
		bottom: 4px;
		background-color: white;
		-webkit-transition: .4s;
		transition: .4s;
	}

input:checked + .slider {
	background-color: #2196F3;
}

input:focus + .slider {
	box-shadow: 0 0 1px #2196F3;
}

input:checked + .slider:before {
	-webkit-transform: translateX(26px);
	-ms-transform: translateX(26px);
	transform: translateX(26px);
}

/* Rounded sliders */
.slider.round {
	border-radius: 34px;
}
	.slider.round:before {
		border-radius: 50%;
	} 


/* Sticky footer styles
-------------------------------------------------- */
html {
  font-size: 18px;
}
@media (min-width: 768px) {
  html {
    font-size: 16px;
  }
}

.border-top {
  border-top: 1px solid #e5e5e5;
}
.border-bottom {
  border-bottom: 1px solid #e5e5e5;
}

.box-shadow {
  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .15);
}

button.accept-policy {
  font-size: 1rem;
  line-height: inherit;
}

/* Sticky footer styles
-------------------------------------------------- */
html {
  position: relative;
  min-height: 100%;
}

body {
  /* Margin bottom by footer height */
  margin-bottom: 35px !important;
}
.footer {
	font-family: 'Open Sans', sans-serif;
	line-height: 1.5em;
	position: absolute;
	bottom: 0;
	width: 100%;
	white-space: nowrap;
	line-height: 35px; /* Vertically center the text there */
}


/***** light theme specifics *****/
.theme-light a.nav-link, .theme-light a.nav-link:hover, .theme-light a.navbar-brand, .theme-light a.navbar-brand:hover {
	color: #343a40 !important;
}
.theme-light .sidepanel {
	box-shadow: 0.25rem 0 0.75rem rgb(0 0 0 / .15)
}
	.theme-light .sidepanel a:hover {
		color: var(--color-primary) !important;
	}
.navbar .dropdown-menu {
	box-shadow: 0 0.25rem 0.5rem 0.5px rgb(0 0 0 / 10%);
}


/***** dark theme specifics *****/
.theme-dark .box-shadow {
	box-shadow: 0 0.25rem 0.75rem rgb(255 255 255 / .05)
}
.theme-dark a.nav-link, .theme-dark a.nav-link:hover, .theme-dark a.navbar-brand, .theme-dark a.navbar-brand:hover {
	color: #fff !important;
}
.theme-dark .navbar-toggler {
	border-color: rgba(255, 255, 255, .3);
}
.theme-dark .navbar-toggler-icon {
	background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}

.theme-dark .sidepanel {
	box-shadow: 0.25rem 0 0.75rem rgb(255 255 255 / .05)
}
	.theme-dark .sidepanel a:hover {
		color: var(--color-primary) !important;
	}
.navbar .dropdown-menu {
	box-shadow: 0 0.25rem 0.5rem 0.5px rgb(255 255 255 / 10%);
}

.theme-dark #openbtn {
	color: white;
}

	.theme-dark #openbtn:hover {
		border-color: #444;
	}

.table-striped > tbody > tr:nth-of-type(odd) {
	--bs-table-accent-bg: #aaaaaa0d;
}

/* Merge-authors admin modal — Bootstrap's .modal-content is hardcoded white;
   override so this modal follows the active theme like the rest of the page. */
#MergeModalPopUp .modal-content {
	background-color: var(--color-secondary);
	color: var(--font-color);
	border: 1px solid var(--font-color-alt);
}
#MergeModalPopUp .modal-header {
	border-bottom-color: var(--font-color-alt);
}
#MergeModalPopUp .modal-footer {
	border-top-color: var(--font-color-alt);
}
#MergeModalPopUp .modal-title,
#MergeModalPopUp .modal-body,
#MergeModalPopUp .modal-body label {
	color: var(--font-color);
}
#MergeModalPopUp .modal-body input[type="text"] {
	background-color: var(--color-dramatic);
	color: var(--font-color);
	border: 1px solid var(--font-color-alt);
	border-radius: .25rem;
	padding: .25rem .5rem;
}
#MergeModalPopUp .modal-body input[type="text"]:focus {
	outline: none;
	border-color: var(--color-primary);
}
#MergeModalPopUp .modal-header .close {
	color: var(--font-color);
	text-shadow: none;
}

/* Degraded-connection suggestion banner. Lives at the top of <body> in _Layout.cshtml.
   Sticky so it stays visible during scroll without shifting layout on initial paint, and
   z-indexed above Bootstrap's default content (nav lives at 1030+ in Bootstrap 5 too). */
#degradedConnectionBanner.degraded-banner {
	position: sticky;
	top: 0;
	z-index: 1030;
	margin: 0;
	border-radius: 0;
	display: flex;
	align-items: center;
	gap: .5rem;
	flex-wrap: wrap;
}
#degradedConnectionBanner .degraded-message {
	flex: 1 1 auto;
}
