| /* |
| * psutil-sphinx-theme: right sidebar (per-page TOC). |
| * |
| * Hidden below 1280px. Sticky inside its grid cell at wider widths. |
| * Sizes / spacing kept faithful to the previous psutil site. |
| */ |
| |
| .right-sidebar { |
| display: none; |
| } |
| |
| @media (max-width: 1279px) { |
| .topbar-toc-toggle { |
| display: none; |
| } |
| |
| body:has(.right-sidebar) .topbar-toc-toggle { |
| display: inline-flex; |
| } |
| |
| .right-sidebar { |
| display: block; |
| position: fixed; |
| top: var(--header-height); |
| right: 0; |
| z-index: 90; |
| width: var(--left-sidebar-width); |
| max-width: 85vw; |
| height: calc(100vh - var(--header-height)); |
| overflow-y: auto; |
| box-sizing: border-box; |
| padding: 16px; |
| background: var(--bg); |
| border-left: 1px solid var(--border); |
| transform: translateX(100%); |
| transition: transform 0.2s ease; |
| } |
| |
| body.toc-open .right-sidebar { |
| transform: translateX(0); |
| box-shadow: -4px 0 16px rgba(0, 0, 0, 0.35); |
| } |
| } |
| |
| @media (min-width: 1280px) { |
| .right-sidebar { |
| display: block; |
| position: sticky; |
| top: calc(var(--header-height) + 20px); |
| align-self: start; |
| max-height: calc(100vh - var(--header-height) - 36px); |
| overflow-y: auto; |
| padding: 0 16px; |
| margin-right: -24px; |
| border-left: 1px solid #ccc; |
| box-sizing: border-box; |
| font-size: 0.85rem; |
| line-height: 1.4; |
| } |
| |
| [data-theme="dark"] .right-sidebar { |
| border-left-color: #3a3a3a; |
| } |
| } |
| |
| /* ---- Title ("On this page") ---------------------------------------- */ |
| |
| .right-sidebar-title { |
| position: sticky; |
| top: 0; |
| z-index: 1; |
| background: var(--bg); |
| color: var(--text-muted); |
| font-size: 11px; |
| font-weight: 600; |
| text-transform: uppercase; |
| letter-spacing: 0.1em; |
| padding: 0 0 0.6rem 8px; |
| } |
| |
| /* {{ toc }} renders the H1 as the root <li> wrapping all sections. |
| Sphinx has no config to skip it; alternatives are a custom doctree |
| walker (Furo's approach) or this 2-rule CSS hide. */ |
| .right-sidebar > ul > li:first-child > a { |
| display: none; |
| } |
| .right-sidebar > ul > li:first-child > ul { |
| padding-left: 0; |
| } |
| |
| /* ---- List structure ------------------------------------------------ */ |
| |
| .right-sidebar ul, |
| .right-sidebar li { |
| list-style: none; |
| margin: 0; |
| padding: 0; |
| } |
| |
| .right-sidebar li { |
| margin: 4px 0; |
| font-size: 0.85rem; |
| line-height: 1.4; |
| } |
| |
| /* Nested uls don't add indent; indent is applied per-anchor instead, |
| so the active bar stays at column-edge regardless of depth. */ |
| .right-sidebar ul ul { |
| padding-left: 0; |
| } |
| |
| /* ---- Anchors ------------------------------------------------------- */ |
| |
| .right-sidebar a, |
| .right-sidebar a:visited { |
| display: block; |
| font-variant-numeric: tabular-nums; |
| padding: 0.2rem 8px; |
| margin: 0 6px 0 0; |
| color: var(--text-muted); |
| text-decoration: none; |
| overflow-wrap: anywhere; |
| } |
| |
| .right-sidebar a:hover { |
| color: var(--accent); |
| text-decoration: none; |
| } |
| |
| .right-sidebar a code { |
| font-weight: inherit; |
| background: none; |
| padding: 0; |
| color: inherit; |
| } |
| |
| /* H2 entries are emphasized; H3 styled as quiet group captions; H4 as items. */ |
| .right-sidebar > ul > li:first-child > ul > li > a { |
| font-size: 0.92rem; |
| font-weight: 600; |
| } |
| |
| /* Flat TOC: if only H2s, no H3+ anywhere) drop the bold. */ |
| .right-sidebar > ul > li:first-child > ul:not(:has(li > ul)) > li > a { |
| font-size: 0.85rem; |
| font-weight: 400; |
| } |
| |
| .right-sidebar > ul > li:first-child > ul > li + li { |
| margin-top: 0.5rem; |
| } |
| |
| .right-sidebar > ul > li:first-child > ul > li > ul > li:has(> ul) > a, |
| .right-sidebar |
| > ul > li:first-child |
| > ul > li > ul > li:has(> ul) |
| > a:visited { |
| font-weight: 600; |
| color: var(--text); |
| } |
| |
| /* Suppress the accent-blue hover flash on group rows (labels, not |
| primary navigation targets). */ |
| .right-sidebar > ul > li:first-child > ul > li > ul > li:has(> ul) > a:hover { |
| color: var(--text); |
| } |
| |
| .right-sidebar > ul > li:first-child > ul > li > ul > li:has(> ul) { |
| margin-top: 0.5rem; |
| } |
| |
| .right-sidebar > ul > li:first-child > ul > li > ul > li > ul > li > a { |
| font-size: 0.85rem; |
| font-weight: 400; |
| } |
| |
| .right-sidebar |
| > ul > li:first-child |
| > ul > li > ul > li > ul > li > ul > li > a { |
| font-size: 0.8rem; |
| font-weight: 400; |
| } |
| |
| /* Glossary TOC: populated by _ext/glossary_toc.py. */ |
| .right-sidebar ul.glossary-toc li { |
| margin: 2px 0; |
| } |
| .right-sidebar ul.glossary-toc a { |
| font-size: 0.85rem; |
| padding: 0.15rem 0 0.15rem 8px; |
| } |
| |
| .right-sidebar ul.blog-tags li { |
| margin: 2px 0; |
| } |
| |
| .right-sidebar ul.blog-tags a { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 0.6em; |
| font-size: 0.9rem; |
| padding: 0.15rem 0 0.15rem 8px; |
| } |
| |
| .right-sidebar .blog-tag-count { |
| flex: none; |
| min-width: 1.6em; |
| padding: 0.05em 0.5em; |
| border-radius: 999px; |
| background: var(--surface-raised); |
| color: var(--text-muted); |
| font-size: 0.75rem; |
| font-variant-numeric: tabular-nums; |
| text-align: center; |
| } |
| |
| /* ---- Active state (driven by js/right-toc.js) ---------------------- */ |
| |
| .right-sidebar li.scroll-current-leaf > a, |
| .right-sidebar li.scroll-current-leaf > a:visited { |
| color: var(--text); |
| background: var(--surface-raised); |
| border-radius: var(--border-radius); |
| } |