/*
 * Define colors
 */

:root {
	--light-color-background: #ffffff;
	--light-color-background-secondary: #f8fafc;
	--light-color-background-navbar: #ffffff;
	--light-color-background-overlay: #0f172a1a;

	--light-color-accent: #dbe4ef;

	--light-color-text: #0f172a;
	--light-color-text-aside: #475569;

	--light-color-link: #2563eb;

	--light-color-warning-border: #f7ebba;
	--light-color-background-warning: #fff8c5;

	--light-color-alert-note: #0969da;
	--light-color-alert-tip: #1a7f37;
	--light-color-alert-important: #8250df;
	--light-color-alert-warning: #9a6700;
	--light-color-alert-caution: #cf222e;

	/* GitHub "Dark default" */
	--dark-color-background: #0d1117;
	--dark-color-background-secondary: #151b23;
	--dark-color-background-navbar: #010409;
	--dark-color-background-overlay: #21283066;

	--dark-color-accent: #383e48;

	--dark-color-text: #f0f6fc;
	--dark-color-text-aside: #9198a1;

	--dark-color-link: #4493f8;

	--dark-color-warning-border: #3a2d12;
	--dark-color-background-warning: #282215;

	--dark-color-alert-note: #1f6feb;
	--dark-color-alert-tip: #238636;
	--dark-color-alert-important: #8957e5;
	--dark-color-alert-warning: #9e6a03;
	--dark-color-alert-caution: #da3633;

	/* Link colors */
	--color-warning-text: var(--color-text);
	--color-contrast-text: var(--color-text);
	--color-icon-background: var(--color-background);
	--color-focus-outline: var(--color-link);
	--typedoc-radius-md: 0.75rem;
	--typedoc-radius-lg: 1rem;
	--typedoc-shadow: 0 1px 2px rgba(15, 23, 42, 0.04),
		0 14px 32px rgba(15, 23, 42, 0.06);
}

@media (prefers-color-scheme: light) {
	:root {
		--color-background-navbar: var(--light-color-background-navbar);
		--color-background-overlay: var(--light-color-background-overlay);
		--color-warning-border: var(--light-color-warning-border);
	}
}

@media (prefers-color-scheme: dark) {
	:root {
		--color-background-navbar: var(--dark-color-background-navbar);
		--color-background-overlay: var(--dark-color-background-overlay);
		--color-warning-border: var(--dark-color-warning-border);
	}
}

:root[data-theme='light'] {
	--color-background-navbar: var(--light-color-background-navbar);
	--color-background-overlay: var(--light-color-background-overlay);
	--color-warning-border: var(--light-color-warning-border);
}

:root[data-theme='dark'] {
	--color-background-navbar: var(--dark-color-background-navbar);
	--color-background-overlay: var(--dark-color-background-overlay);
	--color-warning-border: var(--dark-color-warning-border);
}

/*
 * Define fonts
 */

:root {
	--font-family-text:
		-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
	--font-family-code: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
}

body {
	font-family: var(--font-family-text);
}

/*
 * Links
 */

.tsd-accordion-details a,
.tsd-accordion a,
.tsd-page-toolbar a.title {
	color: var(--color-text);
	text-decoration: none;
}

.tsd-accordion-details a:hover,
.tsd-page-toolbar a.title:hover,
.tsd-accordion a:hover,
.tsd-anchor-icon {
	color: var(--color-text-aside);
}

.tsd-kind-class {
	color: var(--color-link);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.tsd-index-link,
.tsd-page-navigation a:hover {
	text-decoration: none;
}

.tsd-index-link:hover {
	text-decoration: underline;
	text-underline-offset: 3px;
}

a code,
.tsd-sources a,
.tsd-page-navigation a:hover {
	color: var(--color-link);
}

a.external[target='_blank'] {
	background-image: none;
	padding-right: 0px;
}

/*
 * Tables
 */

table {
	margin: 1em 0;
}

.tsd-typography th,
.tsd-typography td {
	padding: 8px;
	text-align: left;
}

.tsd-typography th {
	background-color: var(--color-background);
	color: var(--color-text);
}

.tsd-typography tr:nth-child(2n) {
	background-color: var(--color-background-code);
}

/*
 * Horizontal line
 */

.tsd-typography hr {
	color: var(--color-accent);
}

/*
 * Buttons
 */

button {
	background-color: var(--color-background-navbar);
	color: var(--color-text);
	border: 1px solid var(--color-accent);
	border-radius: 6px;
	padding: 8px 16px;
	cursor: pointer;
	transition: background-color 0.1s ease-in-out;
}

button:hover {
	background-color: var(--color-accent);
}

pre > button {
	background-color: transparent;
	transition: background-color 0.1s ease-in-out;
	border: none;
	opacity: 1;
	top: 8px;
	padding: 4px 8px;
}

/*
 * Checkbox
 */

.tsd-filter-input input[type='checkbox'],
.tsd-filter-input svg {
	width: 1em;
	height: 1em;
}

.tsd-filter-input svg {
	border-radius: 2px;
}

.tsd-checkbox-background {
	fill: var(--color-background);
	stroke: var(--color-accent);
	stroke-width: 6px;
}

input[type='checkbox']:checked ~ svg .tsd-checkbox-background {
	fill: var(--color-accent);
}

.tsd-checkbox-checkmark {
	color: var(--color-text);
}

/*
 * Select
 */

select {
	background-color: var(--color-background);
	border: 1px solid var(--color-accent);
	border-radius: 6px;
	padding: 8px;
	font-family: inherit;
}

/*
 * Code blocks
 */

code,
pre {
	border: none;
	border-radius: 6px;
	margin: 1em 0;
	background-color: var(--color-background-secondary);
	color: var(--color-text);
	font-family: var(--font-family-code);
}

code.tsd-tag {
	background-color: var(--color-accent);
	border: unset;
}

/*
 * Warnings
 */

.warning {
	border-style: solid;
	border-width: 1px;
	border-color: var(--color-warning-border);
	border-radius: 6px;
}

/*
 * Topbar
 */

.tsd-page-toolbar {
	background-color: var(--color-background-navbar);
	border-bottom-color: var(--color-accent);
}

.tsd-toolbar-contents a.title:hover {
	color: var(--color-text);
}

/*
 * Search
 */

#tsd-search-trigger {
	width: unset;
	border: unset;
	background-color: unset;
	transition: opacity 0.15s ease-in-out;
}

#tsd-search-trigger:hover {
	opacity: 1;
}

#tsd-search-input,
#tsd-search-input:focus-visible {
	background-color: transparent;
	border: 1px solid var(--color-focus-outline);
}

#tsd-search-status:not(:empty) {
	min-height: unset;
	padding-top: 1.5rem;
	padding-bottom: 0.5rem;
}

#tsd-search-results > li:is(:hover, [aria-selected='true']) {
	background-color: color-mix(in srgb, var(--color-text-aside), #0000 88%);
}

#tsd-search-results > li > a:hover {
	text-decoration: unset;
}

#tsd-overlay {
	background-color: var(--color-background-overlay);
}

/*
 * Baseboard
 */

footer {
	border-top-color: var(--color-accent);
}

/*
 * Side navigations
 */

.site-menu {
	padding: 1rem 0;
}

.tsd-navigation a {
	color: var(--color-text);
	border-radius: 6px;
	padding: 6px;
}

.tsd-navigation a,
.tsd-navigation a:hover {
	text-decoration: none;
}

.tsd-navigation a:hover:not(.current) {
	background-color: color-mix(in srgb, var(--color-text-aside), #0000 88%);
}

.tsd-navigation a.current {
	background-color: color-mix(in srgb, var(--color-text-aside), #0000 92%);
}

/*
 * Type definition groups
 */

.tsd-index-panel,
.tsd-member-group {
	background-color: var(--color-background);
	padding: 16px;
	border: 1px var(--color-accent) solid;
	border-radius: 6px;
}

.tsd-panel:not(.tsd-typography) > h1,
.tsd-panel:not(.tsd-typography) > h2,
.tsd-panel:not(.tsd-typography) > h3 {
	margin-top: 0px;
}

.tsd-panel-group.tsd-index-group details {
	margin: 0px;
}

.tsd-member-group .tsd-member:last-child {
	margin-bottom: 0px;
}

.tsd-signature {
	border: 1px solid var(--color-accent);
	border-radius: 6px;
}

.tsd-signatures .tsd-signature {
	border-color: var(--color-accent);
	border-radius: 0px;
}

.tsd-description .tsd-signatures .tsd-signature {
	border-radius: 6px;
}

.tsd-full-hierarchy:not(:last-child) {
	border-bottom: var(--color-accent);
}

/*
 * Typography (all markdown content)
 */

.tsd-typography {
	line-height: 1.5;
}

/* Underline plain links; TypeDoc adds classes to code refs and anchor icons */
.tsd-typography a:not([class]),
.tsd-typography a.external {
	text-decoration: underline;
}

.tsd-typography code {
	margin: 0;
}

.tsd-typography ul {
	list-style: disc;
}

.tsd-typography ul ul {
	list-style: circle;
}

.tsd-typography ul ul ul {
	list-style: square;
}

.tsd-typography ul,
.tsd-typography ol {
	padding-left: 32px;
}

.tsd-typography pre {
	padding: 16px;
	overflow: auto;
}

.tsd-typography strong {
	font-weight: 600;
}

/*
 * Typography headings (document pages only)
 *
 * Heading styles are scoped to .tsd-panel.tsd-typography to avoid affecting
 * JSDoc comment prose (.tsd-comment.tsd-typography) on API pages.
 */

/* Override heading margin for the first element (matches GitHub's markdown-body) */
.tsd-panel.tsd-typography > :first-child {
	margin-top: 0 !important;
}

.tsd-panel.tsd-typography h1,
.tsd-panel.tsd-typography h2,
.tsd-panel.tsd-typography h3,
.tsd-panel.tsd-typography h4,
.tsd-panel.tsd-typography h5,
.tsd-panel.tsd-typography h6 {
	margin-top: 24px;
	margin-bottom: 16px;
	font-weight: 600;
	line-height: 1.25;
}

.tsd-panel.tsd-typography h1 {
	font-size: 2em;
	padding-bottom: 0.3em;
	border-bottom: 1px solid var(--color-accent);
}

.tsd-panel.tsd-typography h2 {
	font-size: 1.5em;
	padding-bottom: 0.3em;
	border-bottom: 1px solid var(--color-accent);
}

.tsd-panel.tsd-typography h3 {
	font-size: 1.25em;
}

.tsd-panel.tsd-typography h4 {
	font-size: 1em;
}

.tsd-panel.tsd-typography h5 {
	font-size: 0.875em;
}

.tsd-panel.tsd-typography h6 {
	font-size: 0.85em;
	color: var(--color-text-aside);
}

.tsd-panel.tsd-typography > h1,
.tsd-panel.tsd-typography > h2,
.tsd-panel.tsd-typography > h3 {
	margin-left: 0;
	margin-right: 0;
	padding: 0;
}

.tsd-panel.tsd-typography > h1,
.tsd-panel.tsd-typography > h2 {
	padding-bottom: 0.3em;
}

/*
 * Footer
 */

footer p {
	font-size: 1rem;
	text-align: center;
	color: var(--color-text-aside);
}

/*
 * Fix collapsed margin
 */

.tsd-accordion-summary > h3 {
	margin-top: 0px;
	margin-bottom: 0px;
}

.tsd-page-navigation:not([open]) > .tsd-accordion-summary {
	margin-bottom: 0px;
}

/*
 * Fix collapse arrows position
 */

.tsd-accordion-summary svg {
	transition: transform 0.1s ease-in-out;
	margin-top: auto;
	margin-bottom: auto;
}

@layer typedoc {
	html,
	body {
		background-color: var(--color-background-secondary);
		color: var(--color-text);
	}

	.container {
		max-width: 80rem;
		padding-left: 1rem;
		padding-right: 1rem;
	}

	.tsd-page-toolbar {
		background: color-mix(
			in srgb,
			var(--color-background) 92%,
			var(--color-background-secondary) 8%
		);
		border-bottom: 1px solid var(--color-accent);
		backdrop-filter: blur(14px);
	}

	.container-main {
		gap: 1.5rem;
		padding-top: 2rem;
		padding-bottom: 2.5rem;
		align-items: start;
	}

	.col-content {
		min-width: 0;
	}

	.tsd-page-title,
	.tsd-panel.tsd-comment,
	.tsd-panel.tsd-member,
	.site-menu,
	.page-menu {
		background: var(--color-background);
		border: 1px solid var(--color-accent);
		border-radius: var(--typedoc-radius-lg);
		box-shadow: var(--typedoc-shadow);
	}

	.tsd-page-title,
	.tsd-panel.tsd-comment,
	.tsd-panel.tsd-member {
		padding: 1.5rem;
	}

	.tsd-page-title {
		margin-bottom: 1.5rem;
	}

	.tsd-panel.tsd-member {
		margin-bottom: 2.5rem;
	}

	.tsd-page-title > :first-child,
	.tsd-panel.tsd-comment > :first-child,
	.tsd-panel.tsd-member > :first-child {
		margin-top: 0;
	}

	.tsd-page-title .tsd-breadcrumb {
		margin-top: 0;
	}

	.col-sidebar .site-menu,
	.col-sidebar .page-menu {
		padding: 0.75rem;
		overflow: hidden;
	}

	.site-menu .tsd-navigation,
	.page-menu .tsd-navigation.settings,
	.page-menu .tsd-page-navigation {
		display: flex;
		flex-direction: column;
		gap: 0.25rem;
		min-width: 0;
	}

	.site-menu > .tsd-navigation {
		padding: 0.75rem;
	}

	.site-menu .tsd-navigation details,
	.page-menu .tsd-navigation.settings details,
	.page-menu .tsd-page-navigation details {
		margin: 0;
	}

	.site-menu .tsd-navigation > a,
	.site-menu .tsd-navigation .tsd-accordion-summary,
	.site-menu .tsd-navigation a,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary,
	.page-menu .tsd-page-navigation a,
	.page-menu .tsd-page-navigation .tsd-accordion-summary {
		width: 100%;
		max-width: 100%;
		min-width: 0;
		border-radius: var(--typedoc-radius-md);
		box-sizing: border-box;
	}

	.site-menu .tsd-navigation > a,
	.site-menu .tsd-navigation a,
	.site-menu .tsd-navigation .tsd-accordion-summary,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary,
	.page-menu .tsd-page-navigation a,
	.page-menu .tsd-page-navigation .tsd-accordion-summary {
		padding: 0.5rem 0.75rem;
		line-height: 1.35;
		overflow-wrap: anywhere;
		transition: background-color 0.15s ease, color 0.15s ease;
	}

	.page-menu .tsd-navigation.settings {
		margin-bottom: 0.75rem;
	}

	.page-menu .settings-label {
		display: block;
		padding: 0 0.75rem 0.25rem;
		color: var(--color-text-aside);
		font-size: 0.875rem;
		line-height: 1.35;
	}

	.site-menu .tsd-navigation .tsd-accordion-summary,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary,
	.page-menu .tsd-page-navigation .tsd-accordion-summary {
		display: flex;
		align-items: flex-start;
		justify-content: space-between;
		gap: 0.5rem;
		list-style: none;
		margin: 0;
	}

	.site-menu .tsd-navigation .tsd-accordion-summary::-webkit-details-marker,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary::-webkit-details-marker,
	.page-menu .tsd-page-navigation .tsd-accordion-summary::-webkit-details-marker {
		display: none;
	}

	.site-menu .tsd-accordion-summary > span,
	.site-menu .tsd-accordion-summary > h2,
	.site-menu .tsd-accordion-summary > h3,
	.site-menu .tsd-accordion-summary a,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary > span,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary > h2,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary > h3,
	.page-menu .tsd-accordion-summary a {
		flex: 1 1 auto;
		width: auto;
		min-width: 0;
	}

	.site-menu .tsd-accordion-summary > h2,
	.site-menu .tsd-accordion-summary > h3,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary > h2,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary > h3,
	.page-menu .tsd-page-navigation .tsd-accordion-summary > h2,
	.page-menu .tsd-page-navigation .tsd-accordion-summary > h3 {
		margin: 0;
		font-size: inherit;
		line-height: inherit;
	}

	.site-menu .tsd-accordion-summary a,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary a,
	.page-menu .tsd-accordion-summary a {
		padding: 0;
		border-radius: 0;
	}

	.site-menu .tsd-accordion-summary:hover,
	.page-menu .tsd-navigation.settings .tsd-accordion-summary:hover,
	.page-menu .tsd-accordion-summary:hover {
		background-color: color-mix(
			in srgb,
			var(--color-link) 8%,
			var(--color-background) 92%
		);
	}

	.site-menu .tsd-accordion-details,
	.page-menu .tsd-accordion-details {
		padding-top: 0.25rem;
	}

	.site-menu .tsd-small-nested-navigation {
		margin: 0.25rem 0 0 0.75rem;
		padding-left: 0.75rem;
		border-left: 1px solid color-mix(in srgb, var(--color-accent) 88%, var(--color-background) 12%);
	}

	.site-menu .tsd-small-nested-navigation > li > details {
		margin-left: -0.75rem;
	}

	.page-menu .tsd-page-navigation ul {
		margin: 0.25rem 0 0;
		padding-left: 1rem;
	}

	.page-menu .tsd-page-navigation-section > div {
		margin-left: 0.75rem;
		padding-left: 0.75rem;
		border-left: 1px solid color-mix(in srgb, var(--color-accent) 88%, var(--color-background) 12%);
	}

	.tsd-navigation a:hover:not(.current),
	.tsd-page-navigation a:hover:not(.current) {
		background-color: color-mix(
			in srgb,
			var(--color-link) 8%,
			var(--color-background) 92%
		);
		text-decoration: none;
	}

	.tsd-navigation a.current,
	.tsd-page-navigation a.current {
		background-color: color-mix(
			in srgb,
			var(--color-link) 12%,
			var(--color-background) 88%
		);
		color: var(--color-link);
		font-weight: 600;
	}

	.tsd-index-panel,
	.tsd-member-group {
		border-color: var(--color-accent);
		border-radius: var(--typedoc-radius-lg);
		box-shadow: var(--typedoc-shadow);
		padding: 1.25rem 1.5rem;
	}

	.tsd-signature {
		background: var(--color-background-secondary);
		border-color: var(--color-accent);
		border-radius: var(--typedoc-radius-md);
	}

	.tsd-signatures .tsd-signature {
		border-color: var(--color-accent);
	}

	.tsd-description .tsd-signatures .tsd-signature {
		background: var(--color-background-secondary);
		border-radius: var(--typedoc-radius-md);
	}

	.tsd-typography pre {
		border-radius: var(--typedoc-radius-md);
		background: var(--color-background-secondary);
	}

	#tsd-overlay {
		background-color: var(--color-background-overlay);
		display: flex !important;
		align-items: center !important;
		justify-content: center !important;
		padding: 1rem;
		box-sizing: border-box;
	}

	#tsd-search[open] {
		margin: 0 !important;
		margin-top: 0 !important;
		align-self: center !important;
		flex-shrink: 0 !important;
		max-height: min(calc(100vh - 2rem), calc(100dvh - 2rem)) !important;
		padding: 1rem;
		border: 1px solid var(--color-accent);
		border-radius: var(--typedoc-radius-lg);
		background: var(--color-background);
		box-shadow: var(--typedoc-shadow);
	}

	#tsd-search-input,
	#tsd-search-input:focus-visible {
		background-color: var(--color-background);
		border-color: var(--color-link);
		border-radius: var(--typedoc-radius-md);
	}

	#tsd-search-results > li {
		border-radius: var(--typedoc-radius-md);
	}

	footer {
		border-top-color: var(--color-accent);
	}

	html[data-embedded='true'] footer {
		display: none;
	}

	html[data-embedded='true'],
	html[data-embedded='true'] body {
		overflow: clip;
	}

	html[data-embedded='true'] .container-main {
		--dim-container-main-margin-y: 0rem;
		margin-top: 0;
		margin-bottom: 0;
		min-height: 0;
		padding-bottom: 1rem;
	}

	@media (min-width: 640px) {
		.container {
			padding-left: 1.5rem;
			padding-right: 1.5rem;
		}
	}

	@media (max-width: 769px) {
		.container-main {
			padding-top: 1rem;
			padding-bottom: 1.5rem;
			gap: 1rem;
		}

		.tsd-index-panel,
		.tsd-index-panel ul,
		.tsd-index-panel li,
		dt.tsd-member-summary,
		.tsd-member-summary-name {
			width: 100%;
			max-width: 100%;
			min-width: 0;
		}

		dt.tsd-member-summary,
		.tsd-member-summary-name {
			white-space: normal;
			overflow-wrap: anywhere;
			word-break: normal;
			hyphens: auto;
		}

		html[data-embedded='true'] .tsd-index-panel dt.tsd-member-summary,
		html[data-embedded='true'] .tsd-index-panel .tsd-member-summary-name,
		html[data-embedded='true'] .tsd-index-panel .tsd-member-summary-name a:not(.tsd-anchor-icon) {
			font-size: 0.8125rem;
			line-height: 1.45;
			overflow-wrap: break-word;
			word-break: normal;
			hyphens: manual;
		}

		.tsd-member-summary-name {
			display: grid;
			grid-template-columns: minmax(0, 1fr);
			align-items: start;
			gap: 0.25rem 0;
			padding-left: 0;
			padding-right: 0;
		}

		.tsd-member-summary-name > .tsd-anchor-icon,
		.tsd-member-summary-name > .tsd-kind-icon {
			display: none;
		}
	}

	/* Layout override: Remove right sidebar (site-menu) and expand content */
	.site-menu {
		display: none !important;
	}

	.synap-go-back-btn {
		display: inline-flex;
		align-items: center;
		margin-bottom: 2rem;
		padding: 0.5rem 1rem;
		background-color: var(--site-panel, #ffffff);
		border: 1px solid var(--site-border, #e1e4e8);
		border-radius: 0.5rem;
		color: var(--site-text-link, #0366d6);
		font-size: 0.875rem;
		font-weight: 500;
		text-decoration: none;
		transition: all 0.2s ease;
		cursor: pointer;
	}
	html[data-theme='dark'] .synap-go-back-btn {
		background-color: var(--site-panel, #1f2428);
		border-color: var(--site-border, #444d56);
	}
	.synap-go-back-btn:hover {
		background-color: var(--site-border, #e1e4e8);
	}
	html[data-theme='dark'] .synap-go-back-btn:hover {
		background-color: var(--site-border, #444d56);
	}

	/* Equalize border radiuses for sidebar */
	.page-menu, .page-menu .tsd-navigation, .page-menu .tsd-accordion-details {
		border-radius: 0.5rem !important;
	}

	@media (max-width: 1024px) {
		.container-main {
			grid-template-columns: minmax(0, 1fr) !important;
			grid-template-areas: "content" !important;
		}
	}

	/* Swap left/right sidebars: page-menu (TOC/Settings) → left, site-menu (nav) → right */
	@media (min-width: 1200px) {
		.container-main {
			grid-template-columns: 24rem minmax(0, 1fr) !important;
			grid-template-areas: "sidebar content" !important;
		}
		.page-menu {
			grid-area: sidebar;
			padding-left: 0;
			padding-right: 1.5rem;
			word-wrap: break-word;
			overflow-wrap: break-word; /* Prevent long words from stretching the sidebar */
		}
	}

	/* Prevent anchor links from hiding under the Next.js header in embedded mode */
	html[data-embedded='true'] {
		scroll-padding-top: 110px;
	}
	html[data-embedded='true'] :target,
	html[data-embedded='true'] [id] {
		scroll-margin-top: 110px;
	}

	/* Hide TypeDoc built-in theme toggle in embedded mode (theme is controlled by homepage props) */
	html[data-embedded='true'] .tsd-navigation.settings {
		display: none !important;
	}
}
