Add scrollable container rules for .mermaid-diagram in mobile media query. SVG diagrams now scroll horizontally within their container instead of extending the page width and obscuring the hamburger menu.
637 lines
10 KiB
CSS
637 lines
10 KiB
CSS
/* sukr docs — clean documentation theme */
|
|
|
|
:root {
|
|
--bg: #0d1117;
|
|
--bg-sidebar: #161b22;
|
|
--fg: #c9d1d9;
|
|
--fg-muted: #8b949e;
|
|
--accent: #58a6ff;
|
|
--accent-hover: #79b8ff;
|
|
--border: #30363d;
|
|
--code-bg: #1f2428;
|
|
--success: #3fb950;
|
|
}
|
|
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html {
|
|
font-size: 16px;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
body {
|
|
font-family:
|
|
-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
|
|
background: var(--bg);
|
|
color: var(--fg);
|
|
display: grid;
|
|
grid-template-columns: 260px 1fr;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
/* Sidebar */
|
|
.sidebar {
|
|
background: var(--bg-sidebar);
|
|
border-right: 1px solid var(--border);
|
|
padding: 2rem 1.5rem;
|
|
position: sticky;
|
|
top: 0;
|
|
height: 100vh;
|
|
overflow-y: auto;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.sidebar header {
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
.sidebar .logo {
|
|
font-size: 1.5rem;
|
|
font-weight: 700;
|
|
color: var(--accent);
|
|
text-decoration: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.sidebar .logo-img {
|
|
width: 32px;
|
|
height: 32px;
|
|
}
|
|
|
|
.sidebar .tagline {
|
|
display: block;
|
|
font-size: 0.875rem;
|
|
color: var(--fg-muted);
|
|
margin-top: 0.25rem;
|
|
}
|
|
|
|
.sidebar nav {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.25rem;
|
|
}
|
|
|
|
.sidebar nav a {
|
|
color: var(--fg);
|
|
text-decoration: none;
|
|
padding: 0.5rem 0.75rem;
|
|
border-radius: 6px;
|
|
transition:
|
|
background 0.15s,
|
|
color 0.15s;
|
|
}
|
|
|
|
.sidebar nav a:hover {
|
|
background: var(--border);
|
|
}
|
|
|
|
.sidebar nav a.active {
|
|
background: var(--accent);
|
|
color: var(--bg);
|
|
}
|
|
|
|
.sidebar .nav-children {
|
|
margin-left: 1rem;
|
|
padding-left: 0.5rem;
|
|
border-left: 1px solid var(--border);
|
|
display: none;
|
|
flex-direction: column;
|
|
gap: 0.25rem;
|
|
}
|
|
|
|
.sidebar .nav-children.expanded {
|
|
display: flex;
|
|
}
|
|
|
|
.sidebar .nav-children a {
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
/* Anchor navigation (TOC in sidebar) */
|
|
.sidebar .nav-anchors {
|
|
margin-left: 1rem;
|
|
padding-left: 0.5rem;
|
|
border-left: 1px solid var(--border);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.125rem;
|
|
margin-top: 0.25rem;
|
|
margin-bottom: 0.25rem;
|
|
}
|
|
|
|
.sidebar .nav-anchors .anchor-link {
|
|
font-size: 0.8rem;
|
|
color: var(--fg-muted);
|
|
padding: 0.125rem 0;
|
|
}
|
|
|
|
.sidebar .nav-anchors .anchor-link:hover {
|
|
color: var(--accent);
|
|
}
|
|
|
|
/* Indent anchors by heading level */
|
|
.sidebar .nav-anchors .level-3 {
|
|
margin-left: 0.5rem;
|
|
}
|
|
|
|
.sidebar .nav-anchors .level-4 {
|
|
margin-left: 1rem;
|
|
}
|
|
|
|
.sidebar .nav-anchors .level-5 {
|
|
margin-left: 1.5rem;
|
|
}
|
|
|
|
.sidebar .nav-anchors .level-6 {
|
|
margin-left: 2rem;
|
|
}
|
|
|
|
.sidebar-footer {
|
|
margin-top: auto;
|
|
padding-top: 1rem;
|
|
border-top: 1px solid var(--border);
|
|
font-size: 0.75rem;
|
|
color: var(--fg-muted);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.25rem;
|
|
}
|
|
|
|
.sidebar-footer a {
|
|
color: var(--fg-muted);
|
|
}
|
|
|
|
.sidebar-footer a:hover {
|
|
color: var(--accent);
|
|
}
|
|
|
|
/* Main content */
|
|
main {
|
|
padding: 3rem 4rem;
|
|
max-width: 900px;
|
|
}
|
|
|
|
h1 {
|
|
font-size: 2.25rem;
|
|
margin-bottom: 1rem;
|
|
color: var(--fg);
|
|
}
|
|
|
|
h2 {
|
|
font-size: 1.5rem;
|
|
margin: 2rem 0 1rem;
|
|
padding-bottom: 0.5rem;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
|
|
h3 {
|
|
font-size: 1.25rem;
|
|
margin: 1.5rem 0 0.75rem;
|
|
}
|
|
|
|
/* Heading anchor links (¶) - hover reveal for deep-linking */
|
|
.heading-anchor {
|
|
visibility: hidden;
|
|
margin-left: 0.5em;
|
|
font-size: 0.75em;
|
|
color: var(--fg-muted);
|
|
text-decoration: none;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.heading-anchor:hover {
|
|
color: var(--accent);
|
|
opacity: 1;
|
|
}
|
|
|
|
/* Show anchor on heading hover */
|
|
h1:hover .heading-anchor,
|
|
h2:hover .heading-anchor,
|
|
h3:hover .heading-anchor,
|
|
h4:hover .heading-anchor,
|
|
h5:hover .heading-anchor,
|
|
h6:hover .heading-anchor {
|
|
visibility: visible;
|
|
}
|
|
|
|
/* Highlight heading when :target (clicked anchor) */
|
|
h1:target,
|
|
h2:target,
|
|
h3:target,
|
|
h4:target,
|
|
h5:target,
|
|
h6:target {
|
|
scroll-margin-top: 1rem;
|
|
padding-left: 0.5rem;
|
|
border-left: 3px solid var(--accent);
|
|
}
|
|
|
|
/* Always show pilcrow on targeted heading */
|
|
h1:target .heading-anchor,
|
|
h2:target .heading-anchor,
|
|
h3:target .heading-anchor,
|
|
h4:target .heading-anchor,
|
|
h5:target .heading-anchor,
|
|
h6:target .heading-anchor {
|
|
visibility: visible;
|
|
color: var(--accent);
|
|
}
|
|
|
|
p {
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.lead {
|
|
font-size: 1.125rem;
|
|
color: var(--fg-muted);
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
a {
|
|
color: var(--accent);
|
|
}
|
|
|
|
a:hover {
|
|
color: var(--accent-hover);
|
|
}
|
|
|
|
/* KaTeX display math - local overrides */
|
|
.katex-display {
|
|
margin: 1rem 0;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
/* Fallback: constrain radical SVG when CDN blocked */
|
|
.hide-tail svg {
|
|
max-width: 100% !important;
|
|
}
|
|
|
|
/* Code */
|
|
code {
|
|
font-family:
|
|
ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, monospace;
|
|
font-size: 0.875em;
|
|
background: var(--code-bg);
|
|
padding: 0.2em 0.4em;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
pre {
|
|
background: var(--code-bg);
|
|
padding: 1rem;
|
|
border-radius: 8px;
|
|
overflow-x: auto;
|
|
margin: 1rem 0;
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
pre code {
|
|
background: none;
|
|
padding: 0;
|
|
}
|
|
|
|
/* Syntax highlighting (tree-sitter classes)
|
|
* Dracula-inspired color scheme with full coverage
|
|
* All colors chosen to work well on dark backgrounds
|
|
*/
|
|
|
|
/* Keywords: control flow, declarations - Pink */
|
|
.hl-keyword {
|
|
color: #ff79c6;
|
|
}
|
|
|
|
/* Strings and literals - Yellow */
|
|
.hl-string,
|
|
.hl-string-special {
|
|
color: #f1fa8c;
|
|
}
|
|
|
|
.hl-string-escape {
|
|
color: #ffb86c;
|
|
}
|
|
|
|
.hl-string-special-path,
|
|
.hl-string-special-uri {
|
|
color: #8be9fd;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
/* Functions and methods - Green */
|
|
.hl-function,
|
|
.hl-function-builtin {
|
|
color: #50fa7b;
|
|
}
|
|
|
|
/* Comments - Muted blue-gray */
|
|
.hl-comment {
|
|
color: #6272a4;
|
|
font-style: italic;
|
|
}
|
|
|
|
/* Numbers and constants - Purple */
|
|
.hl-number,
|
|
.hl-constant,
|
|
.hl-constant-builtin {
|
|
color: #bd93f9;
|
|
}
|
|
|
|
/* Operators - Pink (same as keywords for visual consistency) */
|
|
.hl-operator {
|
|
color: #ff79c6;
|
|
}
|
|
|
|
/* Punctuation - Subtle muted */
|
|
.hl-punctuation,
|
|
.hl-punctuation-bracket,
|
|
.hl-punctuation-delimiter {
|
|
color: var(--fg-muted);
|
|
}
|
|
|
|
.hl-punctuation-special {
|
|
color: #ff79c6;
|
|
}
|
|
|
|
/* Types - Cyan */
|
|
.hl-type,
|
|
.hl-type-builtin {
|
|
color: #8be9fd;
|
|
}
|
|
|
|
/* Variables - Light foreground */
|
|
.hl-variable {
|
|
color: var(--fg);
|
|
}
|
|
|
|
.hl-variable-builtin {
|
|
color: #ffb86c;
|
|
}
|
|
|
|
.hl-variable-parameter {
|
|
color: #ffb86c;
|
|
font-style: italic;
|
|
}
|
|
|
|
/* Properties and attributes - Cyan */
|
|
.hl-property,
|
|
.hl-attribute {
|
|
color: #8be9fd;
|
|
}
|
|
|
|
/* Constructors - Green */
|
|
.hl-constructor {
|
|
color: #50fa7b;
|
|
}
|
|
|
|
/* HTML/XML tags - Pink */
|
|
.hl-tag {
|
|
color: #ff79c6;
|
|
}
|
|
|
|
/* Embedded/escape content - Orange */
|
|
.hl-embedded,
|
|
.hl-escape {
|
|
color: #ffb86c;
|
|
}
|
|
|
|
/* Markdown-specific text highlighting */
|
|
.hl-text-title {
|
|
color: #ff79c6;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.hl-text-literal {
|
|
color: #8be9fd;
|
|
}
|
|
|
|
.hl-text-uri {
|
|
color: #8be9fd;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.hl-text-reference {
|
|
color: #bd93f9;
|
|
}
|
|
|
|
/* Section navigation */
|
|
.section-nav {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.75rem;
|
|
margin-top: 1.5rem;
|
|
}
|
|
|
|
.section-link {
|
|
display: block;
|
|
padding: 1rem;
|
|
background: var(--bg-sidebar);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
text-decoration: none;
|
|
transition: border-color 0.15s;
|
|
}
|
|
|
|
.section-link:hover {
|
|
border-color: var(--accent);
|
|
}
|
|
|
|
.section-link strong {
|
|
display: block;
|
|
color: var(--fg);
|
|
margin-bottom: 0.25rem;
|
|
}
|
|
|
|
.section-link span {
|
|
font-size: 0.875rem;
|
|
color: var(--fg-muted);
|
|
}
|
|
|
|
/* Lists */
|
|
ul,
|
|
ol {
|
|
margin: 1rem 0;
|
|
padding-left: 1.5rem;
|
|
}
|
|
|
|
li {
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
/* Tables */
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 1rem 0;
|
|
}
|
|
|
|
th,
|
|
td {
|
|
padding: 0.75rem;
|
|
text-align: left;
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
th {
|
|
background: var(--bg-sidebar);
|
|
}
|
|
|
|
/* Navigation toggle (hidden by default) */
|
|
.nav-toggle {
|
|
display: none;
|
|
}
|
|
|
|
.hamburger {
|
|
display: none;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
width: 24px;
|
|
height: 18px;
|
|
cursor: pointer;
|
|
padding: 0;
|
|
user-select: none;
|
|
}
|
|
|
|
.hamburger span {
|
|
display: block;
|
|
width: 100%;
|
|
height: 2px;
|
|
background: var(--fg);
|
|
border-radius: 1px;
|
|
transition:
|
|
transform 0.3s ease,
|
|
opacity 0.3s ease;
|
|
transform-origin: center;
|
|
}
|
|
|
|
/* Responsive */
|
|
@media (max-width: 768px) {
|
|
html {
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
body {
|
|
grid-template-columns: 1fr;
|
|
max-width: 100vw;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.sidebar {
|
|
position: static;
|
|
height: auto;
|
|
border-right: none;
|
|
border-bottom: 1px solid var(--border);
|
|
padding: 1rem 1.5rem;
|
|
}
|
|
|
|
.sidebar header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.sidebar .tagline {
|
|
display: none;
|
|
}
|
|
|
|
/* Position hamburger on right side of header */
|
|
.sidebar header {
|
|
position: relative;
|
|
}
|
|
|
|
.hamburger {
|
|
display: flex;
|
|
position: absolute;
|
|
right: 0;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
}
|
|
|
|
.sidebar nav {
|
|
flex-direction: column;
|
|
padding-top: 0;
|
|
margin-top: 0;
|
|
border-top: 1px solid var(--border);
|
|
max-height: 0;
|
|
overflow: hidden;
|
|
opacity: 0;
|
|
transition:
|
|
max-height 0.3s ease,
|
|
opacity 0.3s ease,
|
|
margin-top 0.3s ease,
|
|
padding-top 0.3s ease;
|
|
}
|
|
|
|
/* Show nav when checkbox is checked - checkbox is inside header now */
|
|
.sidebar:has(.nav-toggle:checked) nav {
|
|
max-height: calc(100vh - 161px);
|
|
/* Viewport-relative, account for header */
|
|
overflow-y: auto;
|
|
/* Enable internal scrolling when content exceeds height */
|
|
opacity: 1;
|
|
margin-top: 1rem;
|
|
padding-top: 1rem;
|
|
}
|
|
|
|
/* Hamburger → X morph animation */
|
|
.nav-toggle:checked ~ .hamburger span:nth-child(1) {
|
|
transform: translateY(8px) rotate(45deg);
|
|
}
|
|
|
|
.nav-toggle:checked ~ .hamburger span:nth-child(2) {
|
|
opacity: 0;
|
|
}
|
|
|
|
.nav-toggle:checked ~ .hamburger span:nth-child(3) {
|
|
transform: translateY(-8px) rotate(-45deg);
|
|
}
|
|
|
|
.sidebar-footer {
|
|
display: none;
|
|
}
|
|
|
|
main {
|
|
padding: 1.5rem 1rem;
|
|
max-width: 100%;
|
|
}
|
|
|
|
pre {
|
|
max-width: calc(100vw - 2rem);
|
|
}
|
|
|
|
/* Make tables scrollable on mobile */
|
|
table {
|
|
display: block;
|
|
overflow-x: auto;
|
|
white-space: nowrap;
|
|
max-width: calc(100vw - 2rem);
|
|
}
|
|
|
|
/* Allow inline code to wrap */
|
|
code {
|
|
word-break: break-all;
|
|
}
|
|
|
|
td code {
|
|
white-space: normal;
|
|
}
|
|
|
|
/* Make mermaid diagrams scrollable on mobile */
|
|
.mermaid-diagram {
|
|
overflow-x: auto;
|
|
max-width: calc(100vw - 2rem);
|
|
}
|
|
|
|
.mermaid-diagram svg {
|
|
display: block;
|
|
max-width: none;
|
|
/* Allow SVG to be wider than container */
|
|
}
|
|
}
|