/**
 * QueryFeedz Knowledge Base — front end.
 *
 * Tokens come from the settings screen as custom properties on :root; this file
 * only consumes them, so recolouring the knowledge base never means editing CSS.
 */

/*
 * Token defaults live on :root, NOT on .qfkb.
 *
 * The settings screen injects its own `:root{...}` block immediately after this
 * file. Same selector, same specificity, so source order decides and the saved
 * values win. Declaring these on .qfkb instead would shadow them for the whole
 * subtree — an element's own custom property always beats an inherited one —
 * and every setting would silently do nothing.
 */
:root {
	--qfkb-bg: #ffffff;
	--qfkb-bg-soft: #f8fafc;
	--qfkb-page-bg: #f1f3f4;
	--qfkb-border: #e2e8f0;
	--qfkb-text: #0f172a;
	--qfkb-text-soft: #475569;
	--qfkb-accent: #2563eb;
	--qfkb-accent-soft: #eff6ff;
	--qfkb-success: #16a34a;
	--qfkb-highlight: #f59e0b;
	--qfkb-radius: 0px;
	--qfkb-font: inherit;
	--qfkb-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
	--qfkb-font-size: 16px;
	--qfkb-line: 1.7;
	--qfkb-gap: 36px;
	--qfkb-content: 72fr;
	--qfkb-aside: 28fr;
	--qfkb-max: 1240px;
	--qfkb-section-gap: 34px;
	--qfkb-sticky-top: 24px;

	--qfkb-code-bg: #0f172a;
	--qfkb-code-text: #e2e8f0;
	--qfkb-code-border: #1e293b;
	--qfkb-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}

.qfkb {
	box-sizing: border-box;
	color: var(--qfkb-text);
	background: var(--qfkb-bg);
	/* `inherit` by default: the theme's typography flows straight through. */
	font-family: var(--qfkb-font, inherit);
	font-size: var(--qfkb-font-size);
	font-weight: 400;
	line-height: var(--qfkb-line);
	-webkit-font-smoothing: antialiased;
}

/*
 * "Follow the theme" gets a literal declaration rather than a var() carrying the
 * keyword `inherit`, so the result never depends on how a browser treats a
 * CSS-wide keyword produced by substitution. Same specificity as .qfkb, declared
 * after it, so it wins on source order.
 */
.qfkb--font-theme {
	font-family: inherit;
}

.qfkb *,
.qfkb *::before,
.qfkb *::after {
	box-sizing: inherit;
}

/* --------------------------------------------------------------------------
 * Dark mode
 * ----------------------------------------------------------------------- */

.qfkb--theme-dark {
	--qfkb-bg: #0b1120;
	--qfkb-bg-soft: #111a2e;
	--qfkb-page-bg: #060b14;
	--qfkb-border: #1f2c44;
	--qfkb-text: #e6edf7;
	--qfkb-text-soft: #97a6bf;
	--qfkb-accent: #60a5fa;
	--qfkb-accent-soft: #15233d;
	--qfkb-code-bg: #060b16;
	--qfkb-code-text: #dce6f5;
	--qfkb-code-border: #1c2942;
	--qfkb-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
}

@media (prefers-color-scheme: dark) {
	.qfkb--theme-auto {
		--qfkb-bg: #0b1120;
		--qfkb-bg-soft: #111a2e;
		--qfkb-page-bg: #060b14;
		--qfkb-border: #1f2c44;
		--qfkb-text: #e6edf7;
		--qfkb-text-soft: #97a6bf;
		--qfkb-accent: #60a5fa;
		--qfkb-accent-soft: #15233d;
		--qfkb-code-bg: #060b16;
		--qfkb-code-text: #dce6f5;
		--qfkb-code-border: #1c2942;
		--qfkb-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
	}
}

/* --------------------------------------------------------------------------
 * Shell and columns
 * ----------------------------------------------------------------------- */

.qfkb__shell {
	max-width: var(--qfkb-max);
	margin: 0 auto;
	padding: 28px 20px 72px;
}

/*
 * Boxed: the entry sits on a panel over a tinted page, the way a documentation
 * site frames its content. `background-color` rather than the `background`
 * shorthand, so the optional dot texture underneath survives.
 */
.qfkb--boxed {
	background-color: var(--qfkb-page-bg);
	padding: 26px 18px 46px;
}

.qfkb--boxed .qfkb__shell {
	background-color: var(--qfkb-bg);
	border: 1px solid var(--qfkb-border);
	padding: 34px 38px 60px;
}

.qfkb--boxed .qfkb-crumbs {
	margin-top: -6px;
}

.qfkb--grid .qfkb__shell {
	background-image: radial-gradient(currentColor 0.5px, transparent 0.5px);
	background-size: 22px 22px;
	background-position: -1px -1px;
	background-repeat: no-repeat;
	background-attachment: local;
	color: var(--qfkb-border);
}

.qfkb--grid .qfkb__shell > * {
	color: var(--qfkb-text);
}

.qfkb__columns {
	display: grid;
	grid-template-columns: minmax(0, var(--qfkb-content)) minmax(240px, var(--qfkb-aside));
	gap: var(--qfkb-gap);
	align-items: start;
}

.qfkb__columns--solo,
.qfkb--content-only .qfkb__columns {
	grid-template-columns: minmax(0, 1fr);
}

.qfkb--sidebar-content .qfkb__columns {
	grid-template-columns: minmax(240px, var(--qfkb-aside)) minmax(0, var(--qfkb-content));
}

.qfkb--sidebar-content .qfkb__main {
	order: 2;
}

.qfkb--sidebar-content .qfkb__aside {
	order: 1;
}

.qfkb__main {
	min-width: 0;
}

.qfkb--measured .qfkb-prose,
.qfkb--measured .qfkb-hero__lede {
	max-width: var(--qfkb-reading, 100%);
}

.qfkb__aside {
	min-width: 0;
}

.qfkb--sticky-aside .qfkb__aside-inner {
	position: sticky;
	top: var(--qfkb-sticky-top);
	max-height: calc(100vh - var(--qfkb-sticky-top) - 16px);
	overflow-y: auto;
	overscroll-behavior: contain;
	scrollbar-width: thin;
	display: flex;
	flex-direction: column;
	gap: 22px;
}

/*
 * The sticky column is the ONLY scroll container in the sidebar. A widget that
 * scrolls on its own gets min-height:0 as a flex item and collapses to nothing
 * once the other widgets fill the capped column — which is what silently ate
 * the table of contents.
 */
.qfkb__aside-inner > * {
	flex: 0 0 auto;
	min-height: 0;
}

.qfkb__aside-inner {
	display: flex;
	flex-direction: column;
	gap: 22px;
}

/* --------------------------------------------------------------------------
 * Breadcrumbs — a terminal-ish path
 * ----------------------------------------------------------------------- */

.qfkb-crumbs {
	margin: 0 0 22px;
	padding-bottom: 14px;
	border-bottom: 1px solid var(--qfkb-border);
}

.qfkb-crumbs__list {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px;
	margin: 0;
	padding: 0;
	list-style: none;
	font-family: var(--qfkb-mono);
	font-size: 0.78em;
	letter-spacing: 0.01em;
}

.qfkb-crumbs__item {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin: 0;
}

.qfkb-crumbs__link {
	color: var(--qfkb-text-soft);
	text-decoration: none;
	border-bottom: 1px solid transparent;
}

.qfkb-crumbs__link:hover,
.qfkb-crumbs__link:focus-visible {
	color: var(--qfkb-accent);
	border-bottom-color: currentColor;
}

.qfkb-crumbs__sep {
	color: var(--qfkb-border);
}

.qfkb-crumbs__current {
	color: var(--qfkb-text);
	font-weight: 600;
}

/* --------------------------------------------------------------------------
 * Hero
 * ----------------------------------------------------------------------- */

.qfkb-hero {
	margin: 0 0 28px;
}

.qfkb-hero__chips {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-bottom: 14px;
}

.qfkb-chip {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	padding: 3px 10px 3px 8px;
	border: 1px solid var(--qfkb-border);
	border-radius: 0;
	background: var(--qfkb-accent-soft);
	color: var(--qfkb-text-soft);
	font-family: var(--qfkb-mono);
	font-size: 0.72em;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	text-decoration: none;
	transition: border-color 0.15s ease, color 0.15s ease;
}

a.qfkb-chip:hover,
a.qfkb-chip:focus-visible {
	border-color: var(--qfkb-accent);
	color: var(--qfkb-accent);
}

.qfkb-chip__icon {
	width: 12px;
	height: 12px;
	opacity: 0.7;
}

.qfkb-hero__title {
	margin: 0 0 14px;
	font-size: clamp(1.9rem, 1.35rem + 1.7vw, 2.6rem);
	line-height: 1.16;
	letter-spacing: -0.021em;
	font-weight: 700;
	color: var(--qfkb-text);
}

.qfkb-hero__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px 18px;
	margin-bottom: 18px;
	font-family: var(--qfkb-mono);
	font-size: 0.75em;
	color: var(--qfkb-text-soft);
}

.qfkb-meta {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

.qfkb-meta__icon {
	width: 13px;
	height: 13px;
	opacity: 0.65;
}

.qfkb-meta__label {
	text-transform: uppercase;
	letter-spacing: 0.06em;
	opacity: 0.72;
}

.qfkb-meta__value {
	color: var(--qfkb-text);
}

.qfkb-hero__lede {
	margin: 0 0 22px;
	padding-left: 16px;
	border-left: 2px solid var(--qfkb-accent);
}

.qfkb-hero__lede p {
	margin: 0;
	font-size: 1.08em;
	line-height: 1.6;
	color: var(--qfkb-text-soft);
}

.qfkb-hero__figure {
	margin: 0 0 8px;
	border: 1px solid var(--qfkb-border);
	border-radius: var(--qfkb-radius);
	overflow: hidden;
	background: var(--qfkb-bg-soft);
}

.qfkb-hero__image {
	display: block;
	width: 100%;
	height: auto;
}

.qfkb-hero__caption {
	margin: 0;
	padding: 8px 12px;
	border-top: 1px solid var(--qfkb-border);
	font-family: var(--qfkb-mono);
	font-size: 0.74em;
	color: var(--qfkb-text-soft);
}

/* --------------------------------------------------------------------------
 * Article body
 * ----------------------------------------------------------------------- */

.qfkb-prose {
	margin-top: 26px;
}

.qfkb-prose > * {
	margin-top: 0;
	margin-bottom: 1.05em;
}

.qfkb-prose > *:last-child {
	margin-bottom: 0;
}

.qfkb-prose h2,
.qfkb-prose h3,
.qfkb-prose h4 {
	margin-top: 1.9em;
	margin-bottom: 0.6em;
	line-height: 1.28;
	letter-spacing: -0.014em;
	color: var(--qfkb-text);
	scroll-margin-top: calc(var(--qfkb-sticky-top) + 12px);
}

.qfkb-prose h2 {
	font-size: 1.45em;
	padding-bottom: 0.38em;
	border-bottom: 1px solid var(--qfkb-border);
}

.qfkb-prose h3 {
	font-size: 1.16em;
}

.qfkb-prose h4 {
	font-size: 1.02em;
	color: var(--qfkb-text-soft);
	text-transform: uppercase;
	letter-spacing: 0.05em;
	font-family: var(--qfkb-mono);
}

.qfkb-prose p {
	color: var(--qfkb-text);
}

.qfkb-prose a {
	color: var(--qfkb-accent);
	text-decoration: underline;
	text-underline-offset: 2px;
	text-decoration-thickness: 1px;
}

.qfkb-prose a:hover {
	text-decoration-thickness: 2px;
}

.qfkb-prose ul,
.qfkb-prose ol {
	padding-left: 1.35em;
}

.qfkb-prose li {
	margin-bottom: 0.42em;
}

.qfkb-prose li::marker {
	color: var(--qfkb-text-soft);
	font-family: var(--qfkb-mono);
	font-size: 0.92em;
}

.qfkb-prose blockquote {
	margin-left: 0;
	margin-right: 0;
	padding: 2px 0 2px 18px;
	border-left: 2px solid var(--qfkb-border);
	color: var(--qfkb-text-soft);
	font-style: normal;
}

.qfkb-prose blockquote p:last-child {
	margin-bottom: 0;
}

.qfkb-prose :not(pre) > code {
	padding: 0.12em 0.38em;
	border: 1px solid var(--qfkb-border);
	border-radius: 1px;
	background: var(--qfkb-bg-soft);
	font-family: var(--qfkb-mono);
	font-size: 0.86em;
	color: var(--qfkb-text);
	word-break: break-word;
}

.qfkb-prose pre {
	position: relative;
	margin: 1.4em 0;
	padding: 16px 18px;
	border: 1px solid var(--qfkb-code-border);
	border-radius: var(--qfkb-radius);
	background: var(--qfkb-code-bg);
	color: var(--qfkb-code-text);
	overflow-x: auto;
	font-family: var(--qfkb-mono);
	font-size: 0.84em;
	line-height: 1.65;
	tab-size: 2;
}

.qfkb-prose pre code {
	padding: 0;
	border: 0;
	background: none;
	color: inherit;
	font-size: inherit;
}

.qfkb-prose pre[class*="language-"]::before {
	content: attr(data-qfkb-lang);
	position: absolute;
	top: 0;
	right: 0;
	padding: 3px 9px;
	border-left: 1px solid var(--qfkb-code-border);
	border-bottom: 1px solid var(--qfkb-code-border);
	border-bottom-left-radius: 6px;
	font-size: 0.72em;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--qfkb-text-soft);
	opacity: 0.85;
}

.qfkb-prose table,
.qfkb-table {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.94em;
}

.qfkb-prose figure.wp-block-table,
.qfkb-table-wrap {
	margin: 1.4em 0;
	overflow-x: auto;
	border: 1px solid var(--qfkb-border);
	border-radius: var(--qfkb-radius);
}

.qfkb-prose th,
.qfkb-table th {
	padding: 9px 13px;
	text-align: left;
	background: var(--qfkb-bg-soft);
	border-bottom: 1px solid var(--qfkb-border);
	font-family: var(--qfkb-mono);
	font-size: 0.82em;
	font-weight: 600;
	letter-spacing: 0.035em;
	text-transform: uppercase;
	color: var(--qfkb-text-soft);
	white-space: nowrap;
}

.qfkb-prose td,
.qfkb-table td {
	padding: 9px 13px;
	border-bottom: 1px solid var(--qfkb-border);
	vertical-align: top;
}

.qfkb-prose tr:last-child td,
.qfkb-table tr:last-child td {
	border-bottom: 0;
}

.qfkb-prose img {
	max-width: 100%;
	height: auto;
	border-radius: var(--qfkb-radius);
}

.qfkb-prose figure {
	margin-left: 0;
	margin-right: 0;
}

.qfkb-prose figcaption {
	margin-top: 7px;
	font-family: var(--qfkb-mono);
	font-size: 0.76em;
	color: var(--qfkb-text-soft);
}

.qfkb-prose hr {
	height: 0;
	margin: 2.2em 0;
	border: 0;
	border-top: 1px dashed var(--qfkb-border);
}

/* Anchor affordance on headings. */
.qfkb-anchor {
	display: inline-flex;
	align-items: center;
	margin-left: 8px;
	padding: 0;
	border: 0;
	background: none;
	color: var(--qfkb-border);
	cursor: pointer;
	opacity: 0;
	transition: opacity 0.15s ease, color 0.15s ease;
	font-family: var(--qfkb-mono);
	font-size: 0.72em;
	line-height: 1;
}

.qfkb-prose h2:hover .qfkb-anchor,
.qfkb-prose h3:hover .qfkb-anchor,
.qfkb-anchor:focus-visible {
	opacity: 1;
	color: var(--qfkb-accent);
}

/* Copy button on code blocks. */
.qfkb-copy {
	position: absolute;
	top: 8px;
	right: 8px;
	padding: 3px 9px;
	border: 1px solid var(--qfkb-code-border);
	border-radius: 0;
	background: rgba(148, 163, 184, 0.12);
	color: var(--qfkb-code-text);
	font-family: var(--qfkb-mono);
	font-size: 11px;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	cursor: pointer;
	opacity: 0;
	transition: opacity 0.15s ease, background-color 0.15s ease;
}

.qfkb-codewrap {
	position: relative;
}

.qfkb-codewrap:hover .qfkb-copy,
.qfkb-copy:focus-visible {
	opacity: 1;
}

.qfkb-copy:hover {
	background: rgba(148, 163, 184, 0.22);
}

.qfkb-copy[data-copied="1"] {
	color: var(--qfkb-success);
	border-color: var(--qfkb-success);
}

/* --------------------------------------------------------------------------
 * Table of contents
 * ----------------------------------------------------------------------- */

.qfkb-toc {
	border-radius: 0;
	background: var(--qfkb-bg);
}

/* Desktop: a flat documentation rail rather than a card. */
.qfkb-toc--aside {
	border: 0;
	padding: 0;
	box-shadow: none;
}

.qfkb-toc__heading,
.qfkb-toc__summary {
	display: flex;
	align-items: center;
	gap: 7px;
	margin: 0 0 10px;
	font-family: var(--qfkb-mono);
	font-size: 0.74em;
	font-weight: 600;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--qfkb-text-soft);
}

.qfkb-toc__icon {
	width: 13px;
	height: 13px;
}

.qfkb-toc__list {
	margin: 0;
	padding: 0;
	list-style: none;
	border-left: 3px solid var(--qfkb-accent);
}

.qfkb-toc__item {
	margin: 0;
}

.qfkb-toc__item[data-level="3"] .qfkb-toc__link {
	padding-left: 30px;
}

.qfkb-toc__item[data-level="4"] .qfkb-toc__link {
	padding-left: 46px;
}

.qfkb-toc__link {
	display: flex;
	align-items: baseline;
	gap: 8px;
	padding: 6px 10px 6px 14px;
	color: var(--qfkb-text-soft);
	font-size: 0.87em;
	line-height: 1.45;
	text-decoration: none;
	transition: color 0.15s ease, background-color 0.15s ease;
}

.qfkb-toc__link:hover {
	color: var(--qfkb-text);
	background: var(--qfkb-bg-soft);
}

.qfkb-toc__link.is-active {
	color: var(--qfkb-accent);
	background: var(--qfkb-accent-soft);
	font-weight: 600;
}

.qfkb-toc__num {
	flex: none;
	font-family: var(--qfkb-mono);
	font-size: 0.82em;
	opacity: 0.6;
}

.qfkb-toc__dash {
	flex: none;
	width: 10px;
	height: 1px;
	margin-top: 0.62em;
	background: currentColor;
	opacity: 0.35;
}

.qfkb-toc__text {
	min-width: 0;
}

.qfkb-toc--inline {
	display: none;
	margin: 22px 0 6px;
	padding: 12px 14px;
	border: 1px solid var(--qfkb-border);
	border-radius: 0;
}

.qfkb-toc--inline .qfkb-toc__summary {
	margin: 0;
	cursor: pointer;
	list-style: none;
}

.qfkb-toc--inline[open] .qfkb-toc__summary {
	margin-bottom: 10px;
}

.qfkb-toc--inline .qfkb-toc__summary::-webkit-details-marker {
	display: none;
}

.qfkb-toc__count {
	margin-left: auto;
	padding: 1px 7px;
	border: 1px solid var(--qfkb-border);
	border-radius: 0;
	font-size: 0.92em;
}

/* --------------------------------------------------------------------------
 * Sidebar widgets
 * ----------------------------------------------------------------------- */

.qfkb-widget {
	padding: 14px 16px;
	border: 1px solid var(--qfkb-border);
	border-left: 3px solid var(--qfkb-accent);
	border-radius: 0;
	background: var(--qfkb-accent-soft);
}

.qfkb-widget__label {
	display: flex;
	align-items: center;
	gap: 7px;
	margin: 0 0 10px;
	font-family: var(--qfkb-mono);
	font-size: 0.72em;
	font-weight: 600;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--qfkb-text-soft);
}

.qfkb-widget__label::before {
	content: "//";
	opacity: 0.45;
}

.qfkb-widget__icon {
	width: 13px;
	height: 13px;
	opacity: 0.7;
}

.qfkb-linklist {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 2px;
}

.qfkb-linklist__item {
	margin: 0;
}

.qfkb-linklist__item a,
.qfkb-linklist__item span {
	display: block;
	padding: 4px 0;
	color: var(--qfkb-text-soft);
	font-size: 0.9em;
	line-height: 1.45;
	text-decoration: none;
	border-bottom: 1px dotted transparent;
}

.qfkb-linklist__item a:hover,
.qfkb-linklist__item a:focus-visible {
	color: var(--qfkb-accent);
	border-bottom-color: currentColor;
}

.qfkb-linklist--jump .qfkb-linklist__item a::before {
	content: "# ";
	font-family: var(--qfkb-mono);
	opacity: 0.45;
}

/* --------------------------------------------------------------------------
 * Dynamic sections
 * ----------------------------------------------------------------------- */

.qfkb-section {
	margin-top: var(--qfkb-section-gap);
	padding-top: var(--qfkb-section-gap);
	border-top: 1px solid var(--qfkb-border);
	scroll-margin-top: calc(var(--qfkb-sticky-top) + 12px);
}

.qfkb-section--aside {
	margin-top: 0;
	padding: 14px 16px;
	border: 1px solid var(--qfkb-border);
	border-left: 3px solid var(--qfkb-accent);
	border-radius: 0;
	background: var(--qfkb-accent-soft);
}

.qfkb-section__head {
	margin-bottom: 16px;
}

.qfkb-section__title {
	display: flex;
	align-items: center;
	gap: 9px;
	margin: 0;
	font-size: 1.4em;
	line-height: 1.25;
	letter-spacing: -0.015em;
	font-weight: 700;
}

.qfkb-section--aside .qfkb-section__title {
	font-family: var(--qfkb-mono);
	font-size: 0.72em;
	font-weight: 600;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--qfkb-text-soft);
}

.qfkb-section__icon {
	width: 17px;
	height: 17px;
	flex: none;
	color: var(--qfkb-accent);
}

.qfkb-section--aside .qfkb-section__icon {
	width: 13px;
	height: 13px;
}

.qfkb-section__desc {
	margin: 7px 0 0;
	color: var(--qfkb-text-soft);
	font-size: 0.94em;
}

/* Cards / grid */

.qfkb-cards,
.qfkb-grid {
	display: grid;
	gap: 14px;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}

.qfkb-cards[data-columns="1"],
.qfkb-grid[data-columns="1"] {
	grid-template-columns: minmax(0, 1fr);
}

.qfkb-card {
	position: relative;
	padding: 16px 18px 16px 18px;
	border: 1px solid var(--qfkb-border);
	border-radius: var(--qfkb-radius);
	background: var(--qfkb-bg);
	box-shadow: var(--qfkb-shadow);
	transition: border-color 0.15s ease;
}

.qfkb-card:hover {
	border-color: var(--qfkb-accent);
}

.qfkb-card__index {
	position: absolute;
	top: 12px;
	right: 14px;
	font-family: var(--qfkb-mono);
	font-size: 0.72em;
	letter-spacing: 0.05em;
	color: var(--qfkb-border);
}

.qfkb-card__title {
	margin: 0 44px 8px 0;
	font-size: 1.02em;
	line-height: 1.35;
	font-weight: 650;
}

.qfkb-card__body {
	color: var(--qfkb-text-soft);
	font-size: 0.94em;
}

.qfkb-card__body p {
	margin: 0 0 0.7em;
}

.qfkb-card__body p:last-child {
	margin-bottom: 0;
}

.qfkb-card__meta {
	margin: 10px 0 0;
	font-family: var(--qfkb-mono);
	font-size: 0.78em;
	color: var(--qfkb-text-soft);
}

.qfkb-grid .qfkb-card {
	padding: 13px 15px;
}

/* Accordion */

.qfkb-accordion {
	border: 1px solid var(--qfkb-border);
	border-radius: var(--qfkb-radius);
	overflow: hidden;
	background: var(--qfkb-bg);
}

.qfkb-accordion__item + .qfkb-accordion__item {
	border-top: 1px solid var(--qfkb-border);
}

.qfkb-accordion__heading {
	margin: 0;
	font-size: 1em;
}

.qfkb-accordion__trigger {
	display: flex;
	align-items: center;
	gap: 12px;
	width: 100%;
	padding: 13px 16px;
	border: 0;
	background: none;
	color: var(--qfkb-text);
	font-family: inherit;
	font-size: 0.98em;
	font-weight: 600;
	line-height: 1.45;
	text-align: left;
	cursor: pointer;
	transition: background-color 0.15s ease;
}

.qfkb-accordion__trigger:hover {
	background: var(--qfkb-bg-soft);
}

.qfkb-accordion__label {
	flex: 1 1 auto;
	min-width: 0;
}

.qfkb-accordion__icon {
	flex: none;
	width: 16px;
	height: 16px;
	color: var(--qfkb-text-soft);
	transition: transform 0.2s ease, color 0.2s ease;
}

.qfkb-accordion__trigger[aria-expanded="true"] {
	color: var(--qfkb-accent);
}

.qfkb-accordion__trigger[aria-expanded="true"] .qfkb-accordion__icon {
	transform: rotate(180deg);
	color: var(--qfkb-accent);
}

.qfkb-accordion__panel {
	padding: 0 16px 15px;
	color: var(--qfkb-text-soft);
	font-size: 0.95em;
}

.qfkb-accordion__panel[hidden] {
	display: none;
}

.qfkb-accordion__body p {
	margin: 0 0 0.75em;
}

.qfkb-accordion__body p:last-child {
	margin-bottom: 0;
}

/* Lists, steps, key-value */

.qfkb-list {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.qfkb-list__item {
	position: relative;
	padding-left: 20px;
	color: var(--qfkb-text-soft);
}

.qfkb-list__item::before {
	content: "›";
	position: absolute;
	left: 4px;
	top: -1px;
	color: var(--qfkb-accent);
	font-family: var(--qfkb-mono);
}

.qfkb-list__title {
	display: block;
	color: var(--qfkb-text);
	font-weight: 600;
}

.qfkb-steps {
	margin: 0;
	padding: 0;
	list-style: none;
	counter-reset: qfkb-step;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.qfkb-steps__item {
	position: relative;
	padding-left: 44px;
	counter-increment: qfkb-step;
}

.qfkb-steps__item::before {
	content: counter(qfkb-step, decimal-leading-zero);
	position: absolute;
	left: 0;
	top: 0;
	width: 30px;
	height: 30px;
	display: grid;
	place-items: center;
	border: 1px solid var(--qfkb-border);
	border-radius: 0;
	background: var(--qfkb-bg-soft);
	font-family: var(--qfkb-mono);
	font-size: 0.78em;
	color: var(--qfkb-accent);
}

.qfkb-steps__title {
	margin: 4px 0 6px;
	font-size: 1.02em;
}

.qfkb-steps__body {
	color: var(--qfkb-text-soft);
	font-size: 0.95em;
}

.qfkb-kv {
	margin: 0;
	border: 1px solid var(--qfkb-border);
	border-radius: var(--qfkb-radius);
	overflow: hidden;
}

.qfkb-kv__row {
	display: grid;
	grid-template-columns: minmax(120px, 30%) minmax(0, 1fr);
}

.qfkb-kv__row + .qfkb-kv__row {
	border-top: 1px solid var(--qfkb-border);
}

.qfkb-kv__key {
	margin: 0;
	padding: 9px 13px;
	background: var(--qfkb-bg-soft);
	font-family: var(--qfkb-mono);
	font-size: 0.8em;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	color: var(--qfkb-text-soft);
}

.qfkb-kv__value {
	margin: 0;
	padding: 9px 13px;
	font-size: 0.95em;
}

.qfkb-kv--compact {
	border: 0;
	border-radius: 0;
}

.qfkb-kv--compact .qfkb-kv__row {
	grid-template-columns: minmax(0, 1fr) auto;
	gap: 10px;
	padding: 5px 0;
	border-top: 0;
}

.qfkb-kv--compact .qfkb-kv__row + .qfkb-kv__row {
	border-top: 1px dotted var(--qfkb-border);
}

.qfkb-kv--compact .qfkb-kv__key,
.qfkb-kv--compact .qfkb-kv__value {
	padding: 0;
	background: none;
}

.qfkb-kv--compact .qfkb-kv__value {
	font-family: var(--qfkb-mono);
	font-size: 0.82em;
	color: var(--qfkb-text);
	text-align: right;
}

.qfkb-callout {
	padding: 14px 16px;
	border: 1px solid var(--qfkb-border);
	border-left: 3px solid var(--qfkb-highlight);
	border-radius: var(--qfkb-radius);
	background: var(--qfkb-bg-soft);
	color: var(--qfkb-text-soft);
}

.qfkb-callout p:last-child {
	margin-bottom: 0;
}

/* Related terms + posts */

.qfkb-terms {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.qfkb-terms__item {
	margin: 0;
}

.qfkb-term {
	display: inline-flex;
	align-items: center;
	padding: 5px 11px;
	border: 1px solid var(--qfkb-border);
	border-radius: 0;
	background: var(--qfkb-bg);
	color: var(--qfkb-text-soft);
	font-family: var(--qfkb-mono);
	font-size: 0.82em;
	text-decoration: none;
	transition: border-color 0.15s ease, color 0.15s ease;
}

.qfkb-term--linked::before {
	content: "→";
	margin-right: 7px;
	color: var(--qfkb-accent);
	opacity: 0.75;
}

a.qfkb-term:hover,
a.qfkb-term:focus-visible {
	border-color: var(--qfkb-accent);
	color: var(--qfkb-accent);
}

.qfkb-related {
	display: grid;
	gap: 12px;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}

.qfkb-related__card {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 6px;
	padding: 14px 40px 14px 16px;
	border: 1px solid var(--qfkb-border);
	border-radius: var(--qfkb-radius);
	background: var(--qfkb-bg);
	text-decoration: none;
	transition: border-color 0.15s ease, background-color 0.15s ease;
}

.qfkb-related__card:hover {
	border-color: var(--qfkb-accent);
	background: var(--qfkb-bg-soft);
}

.qfkb-related__title {
	color: var(--qfkb-text);
	font-weight: 650;
	line-height: 1.35;
}

.qfkb-related__excerpt {
	color: var(--qfkb-text-soft);
	font-size: 0.88em;
	line-height: 1.5;
}

.qfkb-related__go {
	position: absolute;
	top: 15px;
	right: 14px;
	color: var(--qfkb-border);
	transition: color 0.15s ease, transform 0.15s ease;
}

.qfkb-related__card:hover .qfkb-related__go {
	color: var(--qfkb-accent);
	transform: translateX(2px);
}

/* --------------------------------------------------------------------------
 * Focus, motion, print
 * ----------------------------------------------------------------------- */

.qfkb a:focus-visible,
.qfkb button:focus-visible,
.qfkb summary:focus-visible {
	outline: 2px solid var(--qfkb-accent);
	outline-offset: 2px;
	border-radius: 0;
}

@media (prefers-reduced-motion: reduce) {
	.qfkb * {
		transition: none !important;
		animation: none !important;
		scroll-behavior: auto !important;
	}
}

/* --------------------------------------------------------------------------
 * Responsive
 * ----------------------------------------------------------------------- */

@media (max-width: 1024px) {
	.qfkb__columns {
		grid-template-columns: minmax(0, 1fr);
	}

	.qfkb--sidebar-content .qfkb__main,
	.qfkb--sidebar-content .qfkb__aside {
		order: initial;
	}

	.qfkb__aside {
		margin-top: 8px;
	}

	.qfkb__aside .qfkb-toc--aside {
		display: none;
	}

	.qfkb-toc--inline {
		display: block;
	}

	.qfkb--sticky-aside .qfkb__aside-inner {
		position: static;
		max-height: none;
		overflow: visible;
	}

	.qfkb--sticky-mobile .qfkb__aside-inner {
		position: sticky;
		top: var(--qfkb-sticky-top);
	}
}

@media (max-width: 640px) {
	.qfkb__shell {
		padding: 20px 16px 56px;
	}

	.qfkb--boxed {
		padding: 0;
	}

	.qfkb--boxed .qfkb__shell {
		border-left: 0;
		border-right: 0;
		padding: 22px 16px 48px;
	}

	.qfkb-cards,
	.qfkb-grid,
	.qfkb-related {
		grid-template-columns: minmax(0, 1fr);
	}

	.qfkb-kv__row {
		grid-template-columns: minmax(0, 1fr);
	}

	.qfkb-kv__key {
		border-bottom: 1px solid var(--qfkb-border);
	}

	.qfkb-hero__meta {
		gap: 4px 14px;
	}
}

@media print {
	.qfkb__aside,
	.qfkb-toc--inline,
	.qfkb-copy,
	.qfkb-anchor {
		display: none !important;
	}

	.qfkb__columns {
		grid-template-columns: minmax(0, 1fr);
	}
}
