blob: ee042320313637f10d0d35e6aec1e5b8b49c667c [file] [edit]
/* ====================================================================== */
/* Sidebar search box */
/* ====================================================================== */
.search-box {
position: sticky;
top: 0;
z-index: 5;
background: inherit;
padding: 12px;
}
/* Dim the rest of the page while the search input is focused. */
.search-overlay {
position: fixed;
inset: var(--topbar-height) 0 0 0;
background: rgba(0, 0, 0, 0.5);
opacity: 0;
pointer-events: none;
z-index: 95;
transition: opacity 0.15s ease;
}
body.search-focused .search-overlay {
opacity: 1;
}
body.search-focused .left-sidebar {
z-index: 96;
}
body.search-focused .left-sidebar > :not(.search-box) {
opacity: 0.35;
transition: opacity 0.15s ease;
}
.search-box form {
position: relative;
display: flex;
align-items: center;
}
.search-box input[type="text"] {
flex: 1;
width: 100%;
box-sizing: border-box;
padding: 4px 60px 4px 12px;
font: inherit;
font-size: 13px;
border: 1px solid #555;
border-radius: 8px;
background: var(--bg-input);
color: var(--text);
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.search-box input[type="text"]:focus {
outline: none;
border-color: #7ab3d4;
box-shadow: 0 0 0 2px rgba(122, 179, 212, 0.3);
}
.search-kbd {
position: absolute;
right: 10px;
top: 0;
bottom: 0;
display: flex;
align-items: center;
gap: 3px;
pointer-events: none;
color: #999;
font-size: 10px;
transition: opacity 0.15s ease;
}
/* Hide the hint while the input is focused (redundant cue). */
body.search-focused .search-kbd {
opacity: 0;
}
.search-kbd kbd,
.shortcut-flyout-list kbd,
.article kbd {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 3px 5px 1px;
font-family: var(--font-body);
font-size: 10px;
font-weight: 500;
line-height: 1;
color: var(--kbd-text);
background: var(--kbd-bg);
border: 1px solid var(--kbd-border);
border-bottom-width: 1.5px;
border-radius: 3px;
}
/* Bigger pills: the '?' help flyout and the keyboard keys in prose /
tables on the "About this site" page (body content, not a hint). */
.shortcut-flyout-list kbd,
.article kbd {
padding: 4px 7px;
font-size: 12px;
vertical-align: baseline;
}
/* ====================================================================== */
/* Search results page */
/* ====================================================================== */
/* ---- Big search input (top of page) -------------------------------- */
.search-page-form {
position: relative;
display: flex;
align-items: stretch;
margin: 0 0 1.5em;
border: 1px solid var(--border);
border-radius: 4px;
background: var(--bg);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
transition: border-color 0.15s, box-shadow 0.15s;
}
.search-page-form:focus-within {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-ring);
}
.search-page-icon {
align-self: center;
padding: 0 0.4em 0 0.9em;
color: var(--text-muted);
font-size: 0.95rem;
}
.search-page-input {
flex: 1;
min-width: 0;
padding: 0.7em 0.4em;
font-size: 1.15rem;
font-family: var(--font-body);
color: var(--text);
background: transparent;
border: none;
outline: none;
box-sizing: border-box;
}
.search-page-btn {
flex-shrink: 0;
padding: 0 1.4em;
font-size: 0.95rem;
font-weight: 500;
color: var(--text-muted);
background: transparent;
border: none;
border-left: 1px solid var(--border);
cursor: pointer;
transition: color 0.15s, background 0.15s;
}
.search-page-btn:hover {
color: var(--accent);
background: var(--bg-key);
}
/* ---- Result cards -------------------------------------------------- */
/* "Search finished, found N pages..." strapline. */
p.search-summary {
font-size: 0.9em;
font-weight: 500;
margin: 0 0 1em 0;
color: var(--text-muted);
}
ul.search {
list-style: none;
margin: 0;
padding: 8px 0;
display: flex;
flex-direction: column;
gap: 8px;
}
ul.search > li {
list-style: none;
margin: 0;
padding: 12px 16px;
display: flex;
flex-wrap: wrap;
align-items: flex-start;
column-gap: 6px;
line-height: normal;
border: 1px solid var(--border);
border-radius: 6px;
background: var(--bg);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}
[data-theme="dark"] ul.search > li {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.35);
}
/* Compact card: link-only result with no description. */
ul.search > li:not(:has(> span)):not(:has(> p.context)) {
padding: 8px 16px;
}
ul.search > li > a,
ul.search > li > a:visited,
ul.search > li > a *,
ul.search > li > a:visited * {
flex: 1;
font-weight: bold;
color: var(--accent);
text-decoration: none;
}
ul.search > li > a:hover {
text-decoration: underline;
}
/* Description chip e.g. "(Python class, in API reference)" */
ul.search > li > span:not(.highlighted) {
font-size: 0.75em;
font-weight: 500;
color: var(--text-muted);
background: var(--bg-key);
border: 1px solid var(--border);
border-radius: 10px;
padding: 0.1em 0.55em;
align-self: center;
opacity: 0.85;
white-space: nowrap;
}
/* Context paragraph (snippet under the title), aligned with the
icon column. */
ul.search > li > p.context {
flex-basis: 100%;
margin: 0 0 0 28px;
font-size: 0.9em;
color: var(--text-muted);
line-height: 1.5;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
ul.search .highlighted,
ul.search > li > p.context .highlighted {
background: var(--bg-search-highlight);
padding: 0 2px;
border-radius: 2px;
}
/* Active row when navigating with ArrowUp / ArrowDown. */
ul.search > li.search-result-active {
background: var(--bg-key);
outline: none;
}
/* ---- Result icons via FontAwesome ::before ------------------------- */
/* Icon column. Page-specific glyph comes from --doc-icon (set per page
in doc-icons.css, shared with the sidebar); the kind fallback below
covers results whose target page has no icon. */
ul.search > li::before {
content: var(--doc-icon, "\f0f6"); /* generic doc */
font-family: var(--doc-icon-font, "Font Awesome 7 Free");
font-weight: var(--doc-icon-weight, 900);
font-size: 16px;
flex-shrink: 0;
margin-top: 4px;
margin-right: 2px;
width: 1.2em;
text-align: center;
color: var(--text-muted);
}
/* Fallbacks by Sphinx SearchResultKind, used only when the target page
has no --doc-icon. */
ul.search > li.kind-title::before { content: var(--doc-icon, "\f0c1"); } /* link */
ul.search > li.kind-object::before { content: var(--doc-icon, "\f085"); } /* cogs */
ul.search > li.kind-text::before { content: var(--doc-icon, "\f0f6"); } /* doc text */
ul.search > li.kind-index::before { content: var(--doc-icon, "\f097"); } /* bookmark */
/* Blog results get a "Blog >" breadcrumb prefix on the link itself. */
ul.search > li:has(> a[href^="blog/"]) > a::before,
ul.search > li:has(> a[href*="/blog/"]) > a::before {
content: "Blog > ";
}