<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <link rel="stylesheet" href="/tiny-llm/assets/css/just-the-docs-default.css"> <link rel="stylesheet" href="/tiny-llm/assets/css/just-the-docs-head-nav.css" id="jtd-head-nav-stylesheet"> <style id="jtd-nav-activation"> .site-nav ul li a { background-image: none; } </style> <script src="/tiny-llm/assets/js/vendor/lunr.min.js"></script> <script src="/tiny-llm/assets/js/just-the-docs.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="/tiny-llm/assets/icons/icon-192x192.svg" type="image/x-icon"> <!-- Begin Jekyll SEO tag v2.8.0 --> <title>Tiny-LLM | Lightweight, efficient LLM inference with W8A16 quantization and KV Cache optimization</title> <meta name="generator" content="Jekyll v4.3.4" /> <meta property="og:title" content="Tiny-LLM" /> <meta name="author" content="LessUp Team" /> <meta property="og:locale" content="en" /> <meta name="description" content="High-Performance CUDA Inference Engine for LLMs" /> <meta property="og:description" content="High-Performance CUDA Inference Engine for LLMs" /> <link rel="canonical" href="https://lessup.github.io/tiny-llm/assets/css/just-the-docs-head-nav.css" /> <meta property="og:url" content="https://lessup.github.io/tiny-llm/assets/css/just-the-docs-head-nav.css" /> <meta property="og:site_name" content="Tiny-LLM" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="Tiny-LLM" /> <meta name="twitter:site" content="@lessup" /> <meta name="twitter:creator" content="@LessUp Team" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"LessUp Team"},"description":"High-Performance CUDA Inference Engine for LLMs","headline":"Tiny-LLM","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://lessup.github.io/tiny-llm/assets/images/logo.svg"},"name":"LessUp Team"},"url":"https://lessup.github.io/tiny-llm/assets/css/just-the-docs-head-nav.css"}</script> <!-- End Jekyll SEO tag --> <!-- ═══════════════════════════════════════════════════════════════ Tiny-LLM Custom Head - Advanced Features Features: PWA, Theme Toggle, Custom Fonts, Analytics ═══════════════════════════════════════════════════════════════ --> <!-- Open Graph / Facebook --> <meta property="og:type" content="website"> <meta property="og:url" content="https://lessup.github.io/tiny-llm/"> <meta property="og:title" content="Tiny-LLM"> <meta property="og:description" content="High-Performance CUDA Inference Engine for LLMs"> <meta property="og:image" content="https://lessup.github.io/tiny-llm/assets/images/og-image.png"> <!-- Twitter --> <meta property="twitter:card" content="summary_large_image"> <meta property="twitter:url" content="https://lessup.github.io/tiny-llm/"> <meta property="twitter:title" content="Tiny-LLM"> <meta property="twitter:description" content="High-Performance CUDA Inference Engine for LLMs"> <meta property="twitter:image" content="https://lessup.github.io/tiny-llm/assets/images/twitter-card.png"> <!-- Apple Touch Icons --> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="apple-mobile-web-app-title" content="Tiny-LLM"> <!-- Microsoft Tiles --> <meta name="msapplication-TileColor" content="#0d1117"> <!-- Preconnect for Performance --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet"> <!-- Theme Toggle Script (Inline for Performance) --> <script> (function() { const savedTheme = localStorage.getItem('theme'); const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches; const initialTheme = savedTheme || (systemDark ? 'dark' : 'light'); document.documentElement.setAttribute('data-theme', initialTheme); })(); </script> <!-- Structured Data: SoftwareApplication --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "Tiny-LLM", "description": "High-Performance CUDA Inference Engine for LLMs with W8A16 Quantization", "applicationCategory": "DeveloperApplication", "operatingSystem": "Linux", "programmingLanguage": ["C++", "CUDA"], "softwareVersion": "2.1.0", "license": "https://github.com/LessUp/tiny-llm/blob/master/LICENSE", "codeRepository": "https://github.com/LessUp/tiny-llm", "downloadUrl": "https://github.com/LessUp/tiny-llm/releases", "author": { "@type": "Organization", "name": "LessUp" }, "offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" } } </script> </head> <body> <a class="skip-to-main" href="#main-content">Skip to main content</a> <svg xmlns="http://www.w3.org/2000/svg" class="d-none"> <symbol id="svg-link" viewBox="0 0 24 24"> <title>Link</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE --> <symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link"> <title id="svg-external-link-title">(external link)</title> <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line> </symbol> <symbol id="svg-doc" viewBox="0 0 24 24"> <title>Document</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file"> <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline> </svg> </symbol> <symbol id="svg-search" viewBox="0 0 24 24"> <title>Search</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"> <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </symbol> <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md --> <symbol id="svg-copy" viewBox="0 0 16 16"> <title>Copy</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16"> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/> <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/> </svg> </symbol> <symbol id="svg-copied" viewBox="0 0 16 16"> <title>Copied</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16"> <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/> </svg> </symbol> </svg> <div class="side-bar"> <div class="site-header" role="banner"> <a href="/tiny-llm/" class="site-title lh-tight"> <div class="site-logo" role="img" aria-label="Tiny-LLM"></div> </a> <button id="menu-button" class="site-button btn-reset" aria-label="Toggle menu" aria-pressed="false"> <svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg> </button> </div> <nav aria-label="Main" id="site-nav" class="site-nav"> <ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in English Documentation — Tiny-LLM category" aria-pressed="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/tiny-llm/docs/en/README.html" class="nav-list-link">English Documentation — Tiny-LLM</a><ul class="nav-list"></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in 中文文档 — Tiny-LLM category" aria-pressed="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/tiny-llm/docs/zh/README.html" class="nav-list-link">中文文档 — Tiny-LLM</a><ul class="nav-list"></ul></li><li class="nav-list-item"><a href="/tiny-llm/" class="nav-list-link">Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/en/v2.0.1.html" class="nav-list-link">v2.0.1 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/zh/v2.0.1.html" class="nav-list-link">v2.0.1 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/en/QUICKSTART.html" class="nav-list-link">Quick Start — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/zh/QUICKSTART.html" class="nav-list-link">快速开始 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/" class="nav-list-link">Documentation — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/en/v2.0.0.html" class="nav-list-link">v2.0.0 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/zh/v2.0.0.html" class="nav-list-link">v2.0.0 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/en/ARCHITECTURE.html" class="nav-list-link">Architecture — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/zh/ARCHITECTURE.html" class="nav-list-link">架构设计 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/en/pages-enhancement.html" class="nav-list-link">GitHub Pages Enhancement — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/zh/pages-enhancement.html" class="nav-list-link">GitHub Pages 增强 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/en/API.html" class="nav-list-link">API Reference — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/zh/API.html" class="nav-list-link">API 参考 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/en/docs-ci-standardization.html" class="nav-list-link">Documentation & CI Standardization — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/zh/docs-ci-standardization.html" class="nav-list-link">文档与 CI 规范化 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/en/DEVELOPER.html" class="nav-list-link">Developer Guide — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/zh/DEVELOPER.html" class="nav-list-link">开发者指南 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/en/project-infrastructure.html" class="nav-list-link">Project Infrastructure — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/zh/project-infrastructure.html" class="nav-list-link">项目基础设施 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/en/BENCHMARKS.html" class="nav-list-link">Benchmarks — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/zh/BENCHMARKS.html" class="nav-list-link">性能基准 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/en/TROUBLESHOOTING.html" class="nav-list-link">Troubleshooting — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/docs/zh/TROUBLESHOOTING.html" class="nav-list-link">故障排除 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/CONTRIBUTING.html" class="nav-list-link">Contributing — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/index.zh.html" class="nav-list-link">更新日志 — Tiny-LLM</a></li><li class="nav-list-item"><a href="/tiny-llm/changelog/" class="nav-list-link">Changelog — Tiny-LLM</a></li></ul> <ul class="nav-list"><li class="nav-list-item external"> <a href="https://github.com/LessUp/tiny-llm" class="nav-list-link external" > GitHub <svg viewBox="0 0 24 24" aria-labelledby="svg-external-link-title"><use xlink:href="#svg-external-link"></use></svg> </a> </li><li class="nav-list-item external"> <a href="https://github.com/LessUp/tiny-llm/releases" class="nav-list-link external" > Releases <svg viewBox="0 0 24 24" aria-labelledby="svg-external-link-title"><use xlink:href="#svg-external-link"></use></svg> </a> </li></ul> </nav> <footer class="site-footer"> This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll. </footer> </div> <div class="main" id="top"> <div id="main-header" class="main-header"> <div class="search" role="search"> <div class="search-input-wrap"> <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search Tiny-LLM" aria-label="Search Tiny-LLM" autocomplete="off"> <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label> </div> <div id="search-results" class="search-results"></div> </div> <nav aria-label="Auxiliary" class="aux-nav"> <ul class="aux-nav-list"> <li class="aux-nav-list-item"> <a href="https://github.com/LessUp/tiny-llm" class="site-button" target="_blank" rel="noopener noreferrer" > GitHub </a> </li> <li class="aux-nav-list-item"> <a href="https://github.com/LessUp/tiny-llm/releases" class="site-button" target="_blank" rel="noopener noreferrer" > Releases </a> </li> </ul> </nav> </div> <div class="main-content-wrap"> <div id="main-content" class="main-content"> <main> <h.site-nav ul li a { background-image: linear-gradient(-90deg, rgb(31.6333333333, 30.8222222222, 34.8777777778) 0%, rgba(31.6333333333, 30.8222222222, 34.8777777778, 0.8) 80%, rgba(31.6333333333, 30.8222222222, 34.8777777778, 0) 100%); } </main> <hr> <footer> <p><a href="#top" id="back-to-top">Back to top</a></p> <!-- ═══════════════════════════════════════════════════════════════ Tiny-LLM Custom Footer - Theme Toggle & Updates ═══════════════════════════════════════════════════════════════ --> <!-- Theme Toggle Button --> <div class="theme-toggle"> <button id="theme-toggle-btn" aria-label="Toggle dark/light theme"> <span class="theme-icon-light" style="display: none;">☀️</span> <span class="theme-icon-dark">🌙</span> </button> </div> <!-- Quick Links Section --> <div class="footer-links"> <h4>Quick Links</h4> <div class="footer-grid"> <div> <h5>Documentation</h5> <ul> <li><a href="/tiny-llm/docs/en/QUICKSTART">Quick Start</a></li> <li><a href="/tiny-llm/docs/en/ARCHITECTURE">Architecture</a></li> <li><a href="/tiny-llm/docs/en/API">API Reference</a></li> </ul> </div> <div> <h5>Resources</h5> <ul> <li><a href="/tiny-llm/changelog/">Changelog</a></li> <li><a href="https://github.com/LessUp/tiny-llm/releases">Releases</a></li> <li><a href="/tiny-llm/docs/en/TROUBLESHOOTING">Troubleshooting</a></li> </ul> </div> <div> <h5>Community</h5> <ul> <li><a href="https://github.com/LessUp/tiny-llm">GitHub</a></li> <li><a href="/tiny-llm/CONTRIBUTING">Contributing</a></li> <li><a href="/tiny-llm/docs/en/DEVELOPER">Developer Guide</a></li> </ul> </div> </div> </div> <!-- PWA Update Notification --> <div id="update-notification" class="update-notification" style="display: none;"> <div class="update-content"> <span>📦 New version available!</span> <button id="update-app-btn">Update Now</button> <button id="dismiss-update-btn">Later</button> </div> </div> <!-- Theme Toggle Script --> <script> (function() { const toggleBtn = document.getElementById('theme-toggle-btn'); const lightIcon = document.querySelector('.theme-icon-light'); const darkIcon = document.querySelector('.theme-icon-dark'); // Check current theme function updateIcons() { const currentTheme = document.documentElement.getAttribute('data-theme') || 'dark'; if (currentTheme === 'dark') { lightIcon.style.display = 'none'; darkIcon.style.display = 'block'; } else { lightIcon.style.display = 'block'; darkIcon.style.display = 'none'; } } // Initial icon state updateIcons(); // Toggle handler toggleBtn.addEventListener('click', function() { const currentTheme = document.documentElement.getAttribute('data-theme') || 'dark'; const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; document.documentElement.setAttribute('data-theme', newTheme); localStorage.setItem('theme', newTheme); updateIcons(); }); // Listen for system theme changes window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) { if (!localStorage.getItem('theme')) { const newTheme = e.matches ? 'dark' : 'light'; document.documentElement.setAttribute('data-theme', newTheme); updateIcons(); } }); // PWA Update handling if ('serviceWorker' in navigator) { let refreshing = false; navigator.serviceWorker.addEventListener('message', function(event) { if (event.data.type === 'UPDATE_AVAILABLE') { showUpdateNotification(); } }); // Check for updates periodically setInterval(function() { navigator.serviceWorker.ready.then(function(registration) { registration.update(); }); }, 60000); // Check every minute function showUpdateNotification() { const notification = document.getElementById('update-notification'); notification.style.display = 'block'; document.getElementById('update-app-btn').addEventListener('click', function() { if (confirm('Update to latest version? The page will reload.')) { navigator.serviceWorker.ready.then(function(registration) { registration.waiting?.postMessage({ type: 'SKIP_WAITING' }); }); } }); document.getElementById('dismiss-update-btn').addEventListener('click', function() { notification.style.display = 'none'; }); } navigator.serviceWorker.addEventListener('controllerchange', function() { if (!refreshing) { refreshing = true; window.location.reload(); } }); } })(); </script> <style> .footer-links { margin-top: 2rem; padding-top: 2rem; border-top: 1px solid var(--color-border-primary); } .footer-links h4 { margin-bottom: 1rem; color: var(--color-text-primary); font-size: 1.1rem; } .footer-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1.5rem; } .footer-grid h5 { font-size: 0.9rem; color: var(--color-text-secondary); margin-bottom: 0.5rem; text-transform: uppercase; letter-spacing: 0.05em; } .footer-grid ul { list-style: none; padding: 0; margin: 0; } .footer-grid li { margin: 0.3rem 0; } .footer-grid a { color: var(--color-text-tertiary); font-size: 0.875rem; text-decoration: none; transition: color 0.2s; } .footer-grid a:hover { color: var(--color-text-link); } .theme-toggle { position: fixed; bottom: 2rem; right: 2rem; z-index: 1000; } .theme-toggle button { width: 50px; height: 50px; border-radius: 50%; background: var(--color-bg-elevated); border: 1px solid var(--color-border-primary); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); cursor: pointer; font-size: 1.5rem; transition: all 0.3s ease; display: flex; align-items: center; justify-content: center; } .theme-toggle button:hover { transform: scale(1.1); box-shadow: 0 0 20px rgba(88, 166, 255, 0.4); } .update-notification { position: fixed; bottom: 6rem; right: 2rem; background: var(--color-bg-elevated); border: 1px solid var(--color-brand-primary); border-radius: 8px; padding: 1rem 1.5rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4); z-index: 1001; animation: slideIn 0.3s ease; } .update-content { display: flex; align-items: center; gap: 1rem; font-size: 0.9rem; } .update-content button { padding: 0.4rem 1rem; border-radius: 4px; border: none; cursor: pointer; font-size: 0.85rem; transition: all 0.2s; } #update-app-btn { background: var(--color-brand-primary); color: white; } #update-app-btn:hover { background: var(--color-text-link-hover); } #dismiss-update-btn { background: transparent; color: var(--color-text-secondary); border: 1px solid var(--color-border-primary); } #dismiss-update-btn:hover { background: var(--color-bg-tertiary); } @keyframes slideIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 600px) { .footer-grid { grid-template-columns: 1fr; } .theme-toggle { bottom: 1rem; right: 1rem; } .theme-toggle button { width: 44px; height: 44px; font-size: 1.25rem; } .update-notification { left: 1rem; right: 1rem; bottom: 5rem; } } </style> </footer> </div> </div> <div class="search-overlay"></div> </div> <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.esm.min.mjs'; var config = {} ; mermaid.initialize(config); mermaid.run({ querySelector: '.language-mermaid', }); </script> </body> </html>
