/* ========================================================================== Documentation Site CSS Theme A clean, minimal theme for documentation sites ========================================================================== */ /* ========================================================================== CSS Custom Properties (Variables) ========================================================================== */ :root { /* Colors - Light Mode */ --color-background: #ffffff; --color-sidebar-bg: #f8f9fa; --color-text: #24292f; --color-text-muted: #57606a; --color-primary: #0969da; --color-primary-hover: #0550ae; --color-border: #d0d7de; --color-code-bg: #f6f8fa; --color-code-border: #d0d7de; --color-table-header-bg: #f6f8fa; --color-blockquote-border: #d0d7de; --color-blockquote-bg: #f6f8fa; --color-hover-bg: #eaeef2; --color-active-bg: #ddf4ff; --color-active-border: #0969da; /* Layout */ --sidebar-width: 280px; --content-max-width: 800px; --sidebar-padding: 1.5rem; --content-padding: 2rem; /* Typography */ --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; --font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; --font-size-base: 16px; --font-size-small: 0.875rem; --font-size-smaller: 0.75rem; --line-height-base: 1.65; --line-height-heading: 1.25; /* Spacing */ --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-xxl: 3rem; /* Transitions */ --transition-fast: 150ms ease; --transition-normal: 250ms ease; } /* ========================================================================== Base Reset & Typography ========================================================================== */ *, *::before, *::after { box-sizing: border-box; } html { font-size: var(--font-size-base); scroll-behavior: smooth; } body { margin: 0; padding: 0; font-family: var(--font-family); font-size: 1rem; line-height: var(--line-height-base); color: var(--color-text); background-color: var(--color-background); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Headings */ h1, h2, h3, h4, h5, h6 { margin: var(--spacing-xxl) 0 var(--spacing-md); font-weight: 600; line-height: var(--line-height-heading); color: var(--color-text); } h1 { font-size: 2rem; padding-bottom: var(--spacing-md); border-bottom: 1px solid var(--color-border); } h2 { font-size: 1.5rem; padding-bottom: var(--spacing-sm); border-bottom: 1px solid var(--color-border); } h3 { font-size: 1.25rem; } h4 { font-size: 1.125rem; } h5 { font-size: 1rem; } h6 { font-size: var(--font-size-small); color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.05em; } /* First heading should not have top margin */ h1:first-child, h2:first-child, h3:first-child { margin-top: 0; } /* Paragraphs */ p { margin: var(--spacing-md) 0; } /* ========================================================================== Layout ========================================================================== */ .docs-container { display: flex; min-height: 100vh; } /* Sidebar Navigation */ .docs-sidebar { position: fixed; top: 0; left: 0; width: var(--sidebar-width); height: 100vh; background-color: var(--color-sidebar-bg); border-right: 1px solid var(--color-border); overflow-y: auto; padding: var(--sidebar-padding); z-index: 100; } .docs-sidebar-header { padding-bottom: var(--spacing-md); margin-bottom: var(--spacing-md); border-bottom: 1px solid var(--color-border); } .docs-sidebar-logo { font-size: 1.25rem; font-weight: 600; color: var(--color-text); text-decoration: none; } .docs-sidebar-logo:hover { color: var(--color-primary); } /* Main Content Area */ .docs-main { margin-left: var(--sidebar-width); flex: 1; min-width: 0; } .docs-content { max-width: var(--content-max-width); margin: 0 auto; padding: var(--content-padding); } /* ========================================================================== Navigation Sidebar ========================================================================== */ /* NavSidebarComponent styles */ .nav-sidebar { position: fixed; top: 0; left: 0; width: var(--sidebar-width); height: 100vh; background-color: var(--color-sidebar-bg); border-right: 1px solid var(--color-border); overflow-y: auto; padding: var(--sidebar-padding); z-index: 100; } .nav-section { margin-bottom: var(--spacing-md); } .nav-section-header { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: var(--spacing-sm) var(--spacing-md); font-family: var(--font-family); font-size: var(--font-size-small); font-weight: 600; color: var(--color-text); text-transform: uppercase; letter-spacing: 0.05em; cursor: pointer; background: none; border: none; border-radius: 4px; transition: background-color var(--transition-fast); } .nav-section-header:hover { background-color: var(--color-hover-bg); } .nav-section.expanded .nav-section-header { background-color: var(--color-hover-bg); } .nav-items { list-style: none; margin: 0; padding: 0; } .nav-item { display: block; padding: var(--spacing-sm) var(--spacing-md); color: var(--color-text-muted); text-decoration: none; font-size: var(--font-size-small); border-radius: 4px; border-left: 3px solid transparent; transition: all var(--transition-fast); } .nav-item:hover { color: var(--color-text); background-color: var(--color-hover-bg); text-decoration: none; } .nav-item.active { color: var(--color-primary); background-color: var(--color-active-bg); border-left-color: var(--color-active-border); font-weight: 500; } .docs-nav { list-style: none; margin: 0; padding: 0; } .docs-nav-section { margin-bottom: var(--spacing-md); } .docs-nav-section-title { display: flex; align-items: center; justify-content: space-between; padding: var(--spacing-sm) var(--spacing-md); font-size: var(--font-size-small); font-weight: 600; color: var(--color-text); text-transform: uppercase; letter-spacing: 0.05em; cursor: pointer; background: none; border: none; width: 100%; text-align: left; border-radius: 4px; transition: background-color var(--transition-fast); } .docs-nav-section-title:hover { background-color: var(--color-hover-bg); } .docs-nav-section-title::after { content: ""; display: inline-block; width: 6px; height: 6px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(-45deg); transition: transform var(--transition-fast); } .docs-nav-section.collapsed .docs-nav-section-title::after { transform: rotate(45deg); } .docs-nav-section.collapsed .docs-nav-items { display: none; } .docs-nav-items { list-style: none; margin: 0; padding: 0; } .docs-nav-item { margin: 0; } .docs-nav-link { display: block; padding: var(--spacing-sm) var(--spacing-md); color: var(--color-text-muted); text-decoration: none; font-size: var(--font-size-small); border-radius: 4px; border-left: 3px solid transparent; transition: all var(--transition-fast); } .docs-nav-link:hover { color: var(--color-text); background-color: var(--color-hover-bg); } .docs-nav-link.active { color: var(--color-primary); background-color: var(--color-active-bg); border-left-color: var(--color-active-border); font-weight: 500; } /* Nested navigation items */ .docs-nav-items .docs-nav-items { margin-left: var(--spacing-md); } .docs-nav-items .docs-nav-items .docs-nav-link { padding-left: var(--spacing-lg); font-size: calc(var(--font-size-small) - 0.0625rem); } /* ========================================================================== Links ========================================================================== */ a { color: var(--color-primary); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: var(--color-primary-hover); text-decoration: underline; } a:focus { outline: 2px solid var(--color-primary); outline-offset: 2px; } /* ========================================================================== Code Blocks ========================================================================== */ code { font-family: var(--font-family-mono); font-size: 0.9em; padding: var(--spacing-xs) var(--spacing-sm); background-color: var(--color-code-bg); border-radius: 4px; border: 1px solid var(--color-code-border); } /* Inline code */ p > code, li > code, td > code { font-size: 0.85em; } /* Block code */ pre { margin: var(--spacing-lg) 0; padding: var(--spacing-md); background-color: var(--color-code-bg); border: 1px solid var(--color-code-border); border-radius: 6px; overflow-x: auto; -webkit-overflow-scrolling: touch; } pre code { display: block; padding: 0; background: none; border: none; font-size: var(--font-size-small); line-height: 1.5; white-space: pre; } /* Code block with language indicator */ pre[data-lang] { position: relative; } pre[data-lang]::before { content: attr(data-lang); position: absolute; top: var(--spacing-sm); right: var(--spacing-sm); font-size: var(--font-size-smaller); color: var(--color-text-muted); text-transform: uppercase; font-family: var(--font-family); } /* Syntax highlighting base colors (for use with highlighters like Prism.js) */ .token.comment, .token.prolog, .token.doctype, .token.cdata { color: var(--color-text-muted); } .token.punctuation { color: var(--color-text); } .token.property, .token.tag, .token.boolean, .token.number, .token.constant, .token.symbol { color: #0550ae; } .token.selector, .token.attr-name, .token.string, .token.char, .token.builtin { color: #0a3069; } .token.operator, .token.entity, .token.url { color: #cf222e; } .token.atrule, .token.attr-value, .token.keyword { color: #cf222e; } .token.function, .token.class-name { color: #8250df; } .token.regex, .token.important, .token.variable { color: #953800; } /* ========================================================================== Tables ========================================================================== */ table { width: 100%; margin: var(--spacing-lg) 0; border-collapse: collapse; border-spacing: 0; font-size: var(--font-size-small); } th, td { padding: var(--spacing-sm) var(--spacing-md); text-align: left; border: 1px solid var(--color-border); } th { background-color: var(--color-table-header-bg); font-weight: 600; } tr:nth-child(even) { background-color: var(--color-code-bg); } table code { font-size: 0.9em; } /* ========================================================================== Lists ========================================================================== */ ul, ol { margin: var(--spacing-md) 0; padding-left: var(--spacing-xl); } li { margin: var(--spacing-xs) 0; } li > ul, li > ol { margin: var(--spacing-xs) 0; } /* Definition lists */ dl { margin: var(--spacing-lg) 0; } dt { font-weight: 600; margin-top: var(--spacing-md); } dd { margin: 0; padding-left: var(--spacing-xl); color: var(--color-text-muted); } /* ========================================================================== Blockquotes ========================================================================== */ blockquote { margin: var(--spacing-lg) 0; padding: var(--spacing-md) var(--spacing-lg); background-color: var(--color-blockquote-bg); border-left: 4px solid var(--color-blockquote-border); border-radius: 0 4px 4px 0; } blockquote p { margin: 0; } blockquote p + p { margin-top: var(--spacing-md); } blockquote code { background-color: rgba(0, 0, 0, 0.05); } /* ========================================================================== Horizontal Rules ========================================================================== */ hr { margin: var(--spacing-xxl) 0; padding: 0; border: none; border-top: 1px solid var(--color-border); } /* ========================================================================== Page Layout (for full-page components) ========================================================================== */ .page-container { display: flex; min-height: 100vh; } .main-content { margin-left: var(--sidebar-width); flex: 1; min-width: 0; } .doc-content { max-width: var(--content-max-width); margin: 0 auto; padding: var(--content-padding); } .doc-section { margin-bottom: var(--spacing-xxl); } /* ========================================================================== Home Page Styles ========================================================================== */ .home-hero { text-align: center; padding: var(--spacing-xxl) 0; margin-bottom: var(--spacing-xl); border-bottom: 1px solid var(--color-border); } .hero-title { font-size: 3rem; font-weight: 700; margin: 0 0 var(--spacing-sm); color: var(--color-text); border-bottom: none; padding-bottom: 0; } .hero-tagline { font-size: 1.25rem; color: var(--color-text-muted); margin: 0; } .intro { font-size: 1.125rem; line-height: 1.7; color: var(--color-text); } /* Quick Links Grid */ .quick-links { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-lg); margin: var(--spacing-lg) 0; } .quick-link-card { display: block; padding: var(--spacing-lg); background-color: var(--color-sidebar-bg); border: 1px solid var(--color-border); border-radius: 8px; text-decoration: none; transition: all var(--transition-fast); } .quick-link-card:hover { background-color: var(--color-hover-bg); border-color: var(--color-primary); text-decoration: none; } .quick-link-card h3 { margin: 0 0 var(--spacing-sm); font-size: 1.125rem; color: var(--color-primary); border-bottom: none; padding-bottom: 0; } .quick-link-card p { margin: 0; font-size: var(--font-size-small); color: var(--color-text-muted); line-height: 1.5; } /* Features List */ .features-list { list-style: none; padding: 0; margin: var(--spacing-lg) 0; } .features-list li { padding: var(--spacing-sm) 0; padding-left: var(--spacing-lg); position: relative; } .features-list li::before { content: "✓"; position: absolute; left: 0; color: var(--color-primary); font-weight: 600; } .features-list li strong { color: var(--color-text); } /* ========================================================================== Demo Host Component ========================================================================== */ .demo-host { margin: var(--spacing-xl) 0; } .demo-frame { border: 1px solid var(--color-border); border-radius: 6px; overflow: hidden; background-color: var(--color-background); } .demo-frame-header { display: flex; align-items: center; justify-content: space-between; padding: var(--spacing-sm) var(--spacing-md); background-color: var(--color-sidebar-bg); border-bottom: 1px solid var(--color-border); } .demo-frame-title { font-size: var(--font-size-small); font-weight: 600; color: var(--color-text); margin: 0; } .demo-frame-content { padding: var(--spacing-lg); } /* Demo toggle buttons */ .demo-toggle-group { display: flex; gap: var(--spacing-sm); } .demo-toggle-btn { padding: var(--spacing-xs) var(--spacing-sm); font-family: var(--font-family); font-size: var(--font-size-smaller); font-weight: 500; color: var(--color-text-muted); background-color: transparent; border: 1px solid var(--color-border); border-radius: 4px; cursor: pointer; transition: all var(--transition-fast); } .demo-toggle-btn:hover { color: var(--color-text); background-color: var(--color-hover-bg); } .demo-toggle-btn.active { color: var(--color-primary); background-color: var(--color-active-bg); border-color: var(--color-primary); } .demo-toggle-btn:focus { outline: 2px solid var(--color-primary); outline-offset: 2px; } /* Source code view */ .demo-source { margin-top: 0; border-top: 1px solid var(--color-border); border-radius: 0; } .demo-source pre { margin: 0; border: none; border-radius: 0; } /* ========================================================================== Utility Classes ========================================================================== */ /* Text utilities */ .text-muted { color: var(--color-text-muted); } .text-small { font-size: var(--font-size-small); } /* Spacing utilities */ .mt-0 { margin-top: 0; } .mt-1 { margin-top: var(--spacing-sm); } .mt-2 { margin-top: var(--spacing-md); } .mt-3 { margin-top: var(--spacing-lg); } .mt-4 { margin-top: var(--spacing-xl); } .mb-0 { margin-bottom: 0; } .mb-1 { margin-bottom: var(--spacing-sm); } .mb-2 { margin-bottom: var(--spacing-md); } .mb-3 { margin-bottom: var(--spacing-lg); } .mb-4 { margin-bottom: var(--spacing-xl); } /* ========================================================================== Responsive Design ========================================================================== */ /* Tablet and smaller */ @media (max-width: 1024px) { :root { --sidebar-width: 240px; --content-padding: 1.5rem; } } /* Mobile */ @media (max-width: 768px) { :root { --sidebar-width: 100%; --content-padding: 1rem; } .docs-sidebar { transform: translateX(-100%); transition: transform var(--transition-normal); width: 280px; max-width: 85vw; } .docs-sidebar.open { transform: translateX(0); } .nav-sidebar { transform: translateX(-100%); transition: transform var(--transition-normal); width: 280px; max-width: 85vw; } .nav-sidebar.open { transform: translateX(0); } .docs-main { margin-left: 0; } /* Mobile menu toggle */ .docs-menu-toggle { position: fixed; top: var(--spacing-md); left: var(--spacing-md); z-index: 101; display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; padding: 0; background-color: var(--color-background); border: 1px solid var(--color-border); border-radius: 6px; cursor: pointer; transition: background-color var(--transition-fast); } .docs-menu-toggle:hover { background-color: var(--color-hover-bg); } .docs-menu-toggle::before { content: ""; display: block; width: 18px; height: 2px; background-color: var(--color-text); box-shadow: 0 -5px 0 var(--color-text), 0 5px 0 var(--color-text); } /* Overlay when sidebar is open */ .docs-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); z-index: 99; opacity: 0; visibility: hidden; transition: opacity var(--transition-normal), visibility var(--transition-normal); } .docs-overlay.visible { opacity: 1; visibility: visible; } /* Adjust typography for mobile */ h1 { font-size: 1.75rem; } h2 { font-size: 1.35rem; } h3 { font-size: 1.15rem; } /* Scrollable tables on mobile */ table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; } /* Home page mobile adjustments */ .main-content { margin-left: 0; } .hero-title { font-size: 2rem; } .hero-tagline { font-size: 1rem; } .quick-links { grid-template-columns: 1fr; } } /* Hide mobile menu toggle on desktop */ @media (min-width: 769px) { .docs-menu-toggle, .docs-overlay { display: none; } } /* ========================================================================== Print Styles ========================================================================== */ @media print { .docs-sidebar, .nav-sidebar, .docs-menu-toggle, .docs-overlay { display: none !important; } .docs-main { margin-left: 0 !important; } .docs-content { max-width: none !important; padding: 0 !important; } a { color: var(--color-text) !important; text-decoration: underline; } pre, code { border: none !important; background-color: transparent !important; } }