<!doctype html><html lang=en-GB><head><meta charset=utf-8><link crossorigin href=https://cloudcdn.pro rel=preconnect><meta content="width=device-width,initial-scale=1" name=viewport><title>Polaris Documentation</title><meta content="support@polaris.example.com (Polaris)" name=author><meta content="Documentation template for any developer tool, library, or API. Replace the content, keep the structure." name=description><meta content="docs, ssg, static site generator, rust, example" name=keywords><meta content="width=device-width,initial-scale=1,shrink-to-fit=no" name=viewport><meta content=ARIA name=accessibility><meta content=fullKeyboardControl name=accessibility><meta content=noFlashingHazard name=accessibility><meta content=yes name=apple-mobile-web-app-capable><meta name="mobile-web-app-capable" content="yes"><meta content=black-translucent name=apple-mobile-web-app-status-bar-style><meta content=Polaris name=apple-mobile-web-app-title><meta content="default-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self' ws://localhost:*; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; font-src 'self'; media-src 'self'; " http-equiv=Content-Security-Policy><link href=https://docs.polaris.example.com hreflang=en rel=alternate><link href=https://cloudcdn.pro/kaishi/v1/favicon.ico rel=icon type=image/x-icon><link href=https://cloudcdn.pro/kaishi/v1/icons/192x192.png rel=apple-touch-icon sizes=192x192><meta content="rgb(26, 58, 138)" name=theme-color><link href=/manifest.json rel=manifest><link href=/rss.xml rel=alternate type=application/rss+xml><style>:root{--vp-bg:#fff;--vp-bs:#f6f6f7;--vp-ba:#f6f6f7;--vp-t1:#3c3c43;--vp-t2:#3c3c43c7;--vp-t3:#545458;--vp-br:#1a3a8a;--vp-bl:#1e429f;--vp-bd:#3c3c431f;--vp-nh:64px}[data-theme=dark]{--vp-bg:#1b1b1f;--vp-bs:#202127;--vp-ba:#161618;--vp-t1:#fffff5db;--vp-t2:#ebebf599;--vp-t3:#a1a1aa;--vp-br:#a8b1ff;--vp-bl:#c3c9ff;--vp-bd:#5454597a}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--vp-bg:#1b1b1f;--vp-bs:#202127;--vp-ba:#161618;--vp-t1:#fffff5db;--vp-t2:#ebebf599;--vp-t3:#a1a1aa;--vp-br:#a8b1ff;--vp-bl:#c3c9ff;--vp-bd:#5454597a}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{color:var(--vp-t1);background:var(--vp-bg);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:16px;line-height:1.7}a{color:var(--vp-br);text-underline-offset:2px;text-decoration:underline}a:hover{color:var(--vp-bl)}img{max-width:100%;height:auto;display:block}h1,h2,h3,h4,h5,h6{color:var(--vp-t1);font-weight:600}h1{margin:1.5rem 0 1rem;font-size:clamp(1.75rem,4vw,2.5rem)}h2{border-bottom:1px solid var(--vp-bd);margin:2rem 0 .75rem;padding-bottom:.75rem;font-size:clamp(1.35rem,3vw,1.75rem)}h3{margin:1.5rem 0 .5rem;font-size:1.25rem}p{margin:.75rem 0}strong{font-weight:600}code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.875em}pre{background:var(--vp-bs);border:1px solid var(--vp-bd);color:var(--vp-t1);border-radius:8px;padding:1rem 1.25rem;overflow-x:auto}code{background:var(--vp-bs);border-radius:4px;padding:.15em .35em}pre code{background:0 0;padding:0}.skip-link{background:var(--vp-br);color:#fff;z-index:1000;border-radius:8px;padding:.5rem 1rem;font-weight:600;position:absolute;top:-100%;left:1rem}.skip-link:focus{outline:none;top:1rem}.nav{z-index:100;height:var(--vp-nh);background:var(--vp-bg);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--vp-bd);position:fixed;top:0;left:0;right:0}.nav-inner{height:var(--vp-nh);align-items:center;max-width:1376px;margin:0 auto;padding:0 24px;display:flex}.nav-brand{color:var(--vp-t1);flex-shrink:0;align-items:center;gap:8px;font-weight:600;text-decoration:none;display:flex}.nav-links a,.nav-item a,.footer-col a,.nav-brand,.skip-link,.btn-brand,.btn-alt,.btn-submit,.breadcrumb a,.lang-dropdown a,.mobile-menu a{text-decoration:none}.nav-brand img{width:28px;height:28px}.nav-search{border:1px solid var(--vp-bd);cursor:pointer;color:var(--vp-t3);background:0 0;border-radius:8px;align-items:center;gap:8px;margin-left:auto;margin-right:16px;padding:6px 14px;font-size:14px;display:flex}.nav-search:hover{border-color:var(--vp-br)}.nav-search svg{stroke:currentColor;stroke-width:2px;fill:none;width:16px;height:16px}.nav-search kbd{border:1px solid var(--vp-bd);background:var(--vp-bs);color:var(--vp-t3);border-radius:4px;margin-left:8px;padding:1px 5px;font-size:11px}.nav-links{align-items:center;gap:4px;display:flex}.nav-links a{color:var(--vp-t1);padding:4px 12px;font-size:14px;font-weight:500}.nav-links a:hover{color:var(--vp-br)}.nav-controls{flex-shrink:0;align-items:center;gap:8px;margin-left:16px;display:flex}.lang-btn{cursor:pointer;color:var(--vp-t2);background:0 0;border:none;align-items:center;padding:4px;display:flex;position:relative}.lang-btn svg{stroke:currentColor;stroke-width:1.5px;fill:none;width:20px;height:20px}.lang-dropdown{background:var(--vp-bg);border:1px solid var(--vp-bd);border-radius:8px;min-width:120px;padding:4px;display:none;position:absolute;top:calc(100% + 8px);right:0}.lang-dropdown.open{display:block}.lang-dropdown a{color:var(--vp-t1);border-radius:4px;padding:6px 12px;font-size:13px;display:block}.lang-dropdown a:hover{background:var(--vp-bs)}.theme-switch{background:var(--vp-bs);border:1px solid var(--vp-bd);cursor:pointer;border-radius:11px;flex-shrink:0;width:40px;height:22px;padding:0;position:relative}.theme-switch:before{content:"";background:var(--vp-t2);border-radius:50%;width:16px;height:16px;transition:transform .25s;position:absolute;top:2px;left:2px}[data-theme=dark] .theme-switch:before,.theme-switch.dark:before{transform:translate(18px)}.theme-switch .sun-svg,.theme-switch .moon-svg{width:14px;height:14px;stroke:var(--vp-t3);stroke-width:2px;fill:none;position:absolute;top:3px}.theme-switch .sun-svg{left:3px}.theme-switch .moon-svg{right:3px}.menu-toggle{border:1px solid var(--vp-bd);cursor:pointer;color:var(--vp-t1);background:0 0;border-radius:6px;padding:4px 6px;display:none}.menu-toggle svg{stroke:currentColor;stroke-width:2px;fill:none;width:20px;height:20px}.hero{padding:calc(var(--vp-nh) + 60px) 24px 80px;text-align:center;max-width:960px;margin:0 auto}.hero-name{background:linear-gradient(120deg,var(--vp-br) 30%,#41d1ff);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:1rem;font-size:clamp(2rem,5vw,3.5rem);font-weight:700;line-height:1.1}.hero-tagline{color:var(--vp-t2);max-width:560px;margin:0 auto 2rem;font-size:clamp(1rem,2vw,1.25rem);line-height:1.6}.hero-actions{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.btn-brand,.btn-alt,.btn-submit{cursor:pointer;border:none;border-radius:20px;align-items:center;padding:10px 24px;font-size:15px;display:inline-flex}.btn-brand,.btn-submit{color:#fff;background:#1a3a8a;font-weight:600}.btn-brand:hover,.btn-submit:hover{background:var(--vp-bl)}.btn-alt{color:var(--vp-t1);border:1px solid var(--vp-bd);background:0 0;font-weight:500}.btn-alt:hover{border-color:var(--vp-br)}.hero-banner{aspect-ratio:1440/398;contain:layout;border-radius:12px;max-width:720px;margin:2rem auto 0;overflow:hidden;box-shadow:0 8px 28px #0000001f}.hero-banner img{width:100%;height:auto;display:block}.content-wrap{max-width:740px;margin:0 auto;margin-top:var(--vp-nh);padding:48px 24px}.content{color:var(--vp-t1);font-size:16px;line-height:1.7}.content ul,.content ol{margin:.75rem 0;padding-left:1.25rem}.content li{margin:.25rem 0}.breadcrumb{color:var(--vp-t3);margin-bottom:24px;font-size:14px}.breadcrumb a{color:var(--vp-br)}.breadcrumb span{margin:0 6px}.article-meta{color:var(--vp-t2);align-items:center;gap:12px;margin-bottom:2rem;font-size:14px;display:flex}.footer{background:var(--vp-ba);padding:48px 24px 24px}.footer-inner{max-width:1152px;margin:0 auto}.footer-cols{grid-template-columns:repeat(3,1fr);gap:32px;margin-bottom:32px;display:grid}.footer-heading{color:var(--vp-t1);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px;font-size:14px;font-weight:700}.footer-col a{color:var(--vp-br);padding:3px 0;font-size:14px;text-decoration:underline;display:block}.footer-col a:hover{color:var(--vp-br)}.footer-bottom{border-top:1px solid var(--vp-bd);text-align:center;color:var(--vp-t3);padding-top:20px;font-size:13px}.form-card{background:var(--vp-bs);border:1px solid var(--vp-bd);border-radius:12px;max-width:520px;margin:2rem auto 0;padding:2rem}.form-group{flex-direction:column;gap:6px;margin-bottom:1.25rem;display:flex}.form-group label{color:var(--vp-t1);font-size:14px;font-weight:600}.form-group input,.form-group select,.form-group textarea{background:var(--vp-bg);color:var(--vp-t1);border:1px solid var(--vp-bd);border-radius:8px;padding:8px 12px;font-family:inherit;font-size:15px}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--vp-br);outline:2px solid var(--vp-br);outline-offset:1px}.form-group textarea{resize:vertical;min-height:120px}:focus-visible{outline:2px solid var(--vp-br);outline-offset:2px}.navbar-nav{align-items:center;gap:0;margin:0;padding:0;list-style:none;display:flex}.nav-item{display:inline-flex}.nav-item a{color:var(--vp-t1);text-transform:none;padding:4px 12px;font-size:14px;font-weight:500;text-decoration:none;display:block}.nav-item a:hover{color:var(--vp-br)}.nav-item a.text-uppercase{text-transform:none}.nav-item a.p-2{padding:4px 12px}.ms-auto{margin-left:auto}.mb-2,.mb-lg-0{margin-bottom:0}#ssg-search-btn{display:none!important}.content{overflow:hidden}.content img{border-radius:8px;max-width:100%;height:auto;margin:1.5rem 0;display:block}.content .img-fluid{border-radius:8px;max-width:100%;height:auto}.content .w-50{max-width:50%}.content .float-start{float:left;margin:0 1.5rem 1rem 0}.content .float-end{float:right;margin:0 0 1rem 1.5rem}.content .p-5{padding:0}.content .mb-3{margin-bottom:1rem}.content .fw-bold{font-weight:600}.content .text-danger{color:var(--vp-br)}.content .display-1{font-size:2rem;font-weight:600}.content:after{content:"";clear:both;display:table}.mobile-menu{display:none}@media (width<=768px){.nav-controls{margin-left:auto}.content .w-50{max-width:100%}.content .float-start,.content .float-end{float:none;margin:1rem 0}.nav-links,.nav-search,.navbar-nav{display:none}.menu-toggle{display:flex}.nav-controls .lang-btn{display:none}.mobile-menu{top:var(--vp-nh);background:var(--vp-bg);z-index:99;padding:24px;display:none;position:fixed;bottom:0;left:0;right:0;overflow-y:auto}.mobile-menu.open{display:block}.mobile-menu a,.mobile-menu .nav-item a{color:var(--vp-t1);border-bottom:1px solid var(--vp-bd);padding:10px 0;font-size:15px;display:block}.mobile-menu .navbar-nav,.mobile-menu .nav-item{display:block}.hero{padding:calc(var(--vp-nh) + 32px) 16px 48px}.hero-name{font-size:clamp(1.75rem,6vw,2.5rem)}.content-wrap{padding:32px 16px}.footer-cols{grid-template-columns:1fr;gap:24px}}</style> <link rel="alternate" type="application/atom+xml" title="Atom Feed" href="http://127.0.0.1:3003/atom.xml"/> <meta name="robots" content="max-snippet:-1, max-image-preview:large, max-video-preview:-1"> <meta name="description" content="Welcome Polaris is a documentation template you can clone, edit, and ship as the docs site for any developer tool, library, or API. The structure is">
<meta property="og:title" content="Polaris Documentation">
<meta property="og:description" content="Welcome Polaris is a documentation template you can clone, edit, and ship as the docs site for any developer tool, library, or API. The structure is">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Polaris Documentation">
<meta name="twitter:description" content="Welcome Polaris is a documentation template you can clone, edit, and ship as the docs site for any developer tool, library, or API. The structure is">
<link rel="canonical" href="http://127.0.0.1:3003/index.html">
<style>/* ssg-single-locale: hide lang */.lang-btn,.lang-dropdown,.mobile-lang{display:none!important}</style></head><body id=page-top itemscope itemtype=http://schema.org/WebPage><a class=skip-link href=#main>Skip to content</a><nav aria-label="Main navigation" class=nav id=mainNav itemscope itemtype=http://schema.org/SiteNavigationElement><div class=nav-inner><a class=nav-brand href=/> <img alt height=33 role=presentation width=100> <span itemprop=name>Polaris</span> </a><button aria-label=Search class=nav-search type=button><svg viewbox="0 0 24 24" aria-hidden=true><circle cx=11 cy=11 r=8 /><line x1=21 x2=16.65 y1=21 y2=16.65 /></svg> <span>Search</span> <kbd>⌘K</kbd></button><div class=nav-links id=navLinks><ul class="navbar-nav ms-auto mb-2 mb-lg-0"><li class=nav-item><a class="text-uppercase p-2" title="Navigation link for the Configuration page" aria-label=Configuration href=/configuration/index.html>Configuration</a></li><li class=nav-item><a class="text-uppercase p-2" title="Navigation link for the Contact page" aria-label=Contact href=/contact/index.html>Contact</a></li><li class=nav-item><a aria-label="Getting Started" class="text-uppercase p-2" title="Navigation link for the Getting Started page" href=/getting-started/index.html>Getting Started</a></li><li class=nav-item><a aria-label="Plugin Api" class="text-uppercase p-2" title="Navigation link for the Plugin Api page" href=/plugin-api/index.html>Plugin Api</a></li><li class=nav-item><a class="text-uppercase p-2" title="Navigation link for the Posts page" aria-label=Posts href=/posts/index.html>Posts</a></li><li class=nav-item><a class="text-uppercase p-2" title="Navigation link for the Tags page" aria-label=Tags href=/tags/index.html>Tags</a></li></ul></div><div class=nav-controls><div style=position:relative><button aria-label="Select language" class=lang-btn id=langToggle type=button><svg viewbox="0 0 24 24" aria-hidden=true><circle cx=12 cy=12 r=10 /><line x1=2 x2=22 y1=12 y2=12 /><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10A15.3 15.3 0 0 1 12 2z"/></svg></button> </div><button aria-label="Toggle dark mode" class=theme-switch id=themeToggle type=button><svg viewbox="0 0 24 24" aria-hidden=true class=sun-svg><circle cx=12 cy=12 r=4 /><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"/></svg> <svg viewbox="0 0 24 24" aria-hidden=true class=moon-svg><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg></button></div><button aria-label="Toggle navigation" aria-controls=mobileMenu aria-expanded=false class=menu-toggle type=button><svg viewbox="0 0 24 24" aria-hidden=true><line x1=3 x2=21 y1=6 y2=6 /><line x1=3 x2=21 y1=12 y2=12 /><line x1=3 x2=21 y1=18 y2=18 /></svg></button></div></nav><div aria-label="Mobile navigation" class=mobile-menu id=mobileMenu role=navigation><ul class="navbar-nav ms-auto mb-2 mb-lg-0"><li class=nav-item><a class="text-uppercase p-2" title="Navigation link for the Configuration page" aria-label=Configuration href=/configuration/index.html>Configuration</a></li><li class=nav-item><a class="text-uppercase p-2" title="Navigation link for the Contact page" aria-label=Contact href=/contact/index.html>Contact</a></li><li class=nav-item><a aria-label="Getting Started" class="text-uppercase p-2" title="Navigation link for the Getting Started page" href=/getting-started/index.html>Getting Started</a></li><li class=nav-item><a aria-label="Plugin Api" class="text-uppercase p-2" title="Navigation link for the Plugin Api page" href=/plugin-api/index.html>Plugin Api</a></li><li class=nav-item><a class="text-uppercase p-2" title="Navigation link for the Posts page" aria-label=Posts href=/posts/index.html>Posts</a></li><li class=nav-item><a class="text-uppercase p-2" title="Navigation link for the Tags page" aria-label=Tags href=/tags/index.html>Tags</a></li></ul></div><header class=hero><h1 class=hero-name>Polaris</h1><p class=hero-tagline>Polaris — a documentation template you can adapt.</p><div class=hero-actions><a class=btn-brand href=#main>Get started with Polaris</a><a class=btn-alt href=https://docs.polaris.example.com/>Explore Polaris features</a></div><div class=hero-banner><img alt="Polaris banner" fetchpriority=high height=398 width=1440></div></header><main aria-label="Main content" class=content-wrap id=main><div class=content><h2>Welcome</h2><p><strong>Polaris</strong> is a documentation template you can clone, edit, and ship as the docs site for any developer tool, library, or API. The structure is opinionated; the content is yours to replace.</p><h2>What's in this template</h2><ul><li><strong>Getting started</strong> — install + first run, in under a page</li><li><strong>Configuration reference</strong> — every option, in a single scannable table</li><li><strong>API reference</strong> — endpoint + method tables with examples</li><li><strong>Release notes</strong> — chronological changelog, surfaced via the <em>Posts</em> page</li><li><strong>Browse by topic</strong> — automatic tag aggregation across every page</li><li><strong>Contact</strong> — support routing for users who can't find an answer</li></ul><h2>How to use it</h2><ol><li>Clone this directory</li><li>Replace every page in <code>content/</code> with your own copy</li><li>Update brand colour, logo URL, and footer copyright in the frontmatter</li><li>Build with <code>cargo run --example docs</code></li><li>Deploy the contents of <code>examples/docs/public/</code> to any static host</li></ol><p>That's it. The plugins, sitemap, search index, and accessibility report all work without further configuration.</p></div></main><footer aria-label=Footer class=footer id=footer><div class=footer-inner><div class=footer-cols><div class=footer-col><p class=footer-heading>About</p><a href=/>Home</a><a href=/contact/index.html>Contact</a></div><div class=footer-col><p class=footer-heading>Resources</p><a href=/posts/index.html>Blog</a><a href=/rss.xml>RSS Feed</a></div><div class=footer-col><p class=footer-heading>Legal</p><a href=/privacy/index.html>Privacy</a></div></div><div class=footer-bottom>Copyright © 2024-2026 Polaris. All rights reserved.</div></div></footer><script type=application/ld+json> {"@context":"https://schema.org","@type":"BlogPosting","headline":"Polaris Documentation","datePublished":"2026-04-16T00:00:00+00:00","dateModified":"2026-04-16T00:00:00+00:00","description":"Documentation template for any developer tool, library, or API. Replace the content, keep the structure.","image":{"@type":"ImageObject","height":"2048","width":"2048","url":""},"mainEntityOfPage":{"@type":"WebPage","@id":"https://docs.polaris.example.com","name":"Polaris — a documentation template you can adapt."},"author":"support@polaris.example.com (Polaris)","copyrightHolder":{"@type":"Person","@id":"support@polaris.example.com (Polaris)"},"copyrightYear":"Copyright © 2024-2026 Polaris. All rights reserved.","creator":{"@type":"Person","@id":"support@polaris.example.com (Polaris)"},"inLanguage":"en-GB","name":"Polaris","publisher":{"@type":"Person","@id":"support@polaris.example.com (Polaris)"}} </script><script>(function(){var r=document.documentElement,sw=document.getElementById(`themeToggle`),lt=document.getElementById(`langToggle`),ld=document.getElementById(`langDropdown`),mt=document.querySelector(`.menu-toggle`),mm=document.getElementById(`mobileMenu`);function setTheme(v){r.setAttribute(`data-theme`,v),localStorage.setItem(`vitepress-theme-appearance`,v),v===`dark`?sw.classList.add(`dark`):sw.classList.remove(`dark`)}var saved=localStorage.getItem(`vitepress-theme-appearance`);saved?setTheme(saved):matchMedia(`(prefers-color-scheme:dark)`).matches&&setTheme(`dark`);var ns=document.querySelector(`.nav-search`);ns&&ns.addEventListener(`click`,function(){var b=document.getElementById(`ssg-search-btn`);if(b)b.click();else{var o=document.getElementById(`ssg-search-overlay`);if(o){o.classList.add(`active`);var inp=document.getElementById(`ssg-search-input`);inp&&(inp.value=``,inp.focus())}}}),sw.addEventListener(`click`,function(){setTheme(r.getAttribute(`data-theme`)===`dark`?`light`:`dark`)}),lt&<.addEventListener(`click`,function(e){e.stopPropagation(),ld.classList.toggle(`open`)}),document.addEventListener(`click`,function(){ld&&ld.classList.remove(`open`)}),mt&&mt.addEventListener(`click`,function(){var ex=this.getAttribute(`aria-expanded`)===`true`;this.setAttribute(`aria-expanded`,!ex),mm.classList.toggle(`open`)});var lp=location.pathname.match(/^\/(en|fr)\//);if(lp){var pfx=`/`+lp[1];document.querySelectorAll(`a[href^="/"]`).forEach(function(a){var h=a.getAttribute(`href`);h&&h.charAt(0)===`/`&&!/^\/(en|fr)\//.test(h)&&a.setAttribute(`href`,pfx+h)})}})();</script>
<!-- SSG Search Widget -->
<div id="ssg-search-widget">
<style>
/* ── Trigger button (always visible) ── */
#ssg-search-btn{position:fixed;top:16px;right:16px;z-index:9998;display:flex;align-items:center;gap:8px;padding:8px 16px;background:#fff;border:1px solid #d1d5db;border-radius:8px;cursor:pointer;font-family:-apple-system,system-ui,sans-serif;font-size:14px;color:#595960;box-shadow:0 1px 3px rgba(0,0,0,.08);transition:border-color .15s,box-shadow .15s}
#ssg-search-btn:hover{border-color:#595960;box-shadow:0 2px 6px rgba(0,0,0,.12)}
#ssg-search-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
#ssg-search-btn kbd{font-family:inherit;font-size:11px;padding:2px 6px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:4px;color:#595960;margin-left:4px}
/* ── Modal overlay ── */
#ssg-search-overlay{display:none;position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.5);align-items:flex-start;justify-content:center;padding-top:12vh}
#ssg-search-overlay.active{display:flex}
#ssg-search-box{background:#fff;border-radius:12px;width:92%;max-width:640px;box-shadow:0 25px 60px rgba(0,0,0,.3);overflow:hidden;font-family:-apple-system,system-ui,sans-serif}
#ssg-search-header{display:flex;align-items:center;padding:0 16px;border-bottom:1px solid #e5e7eb}
#ssg-search-header svg{width:20px;height:20px;stroke:#9ca3af;fill:none;stroke-width:2;flex-shrink:0}
#ssg-search-input{flex:1;padding:16px 12px;font-size:16px;border:none;outline:none;background:transparent}
#ssg-search-results{max-height:50vh;overflow-y:auto}
#ssg-sr-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
.ssg-result{display:block;padding:12px 20px;text-decoration:none;color:#111;border-bottom:1px solid #f3f4f6;transition:background .1s}
.ssg-result:hover,.ssg-result.active{background:#ecfdf5}
.ssg-result-title{font-weight:600;font-size:15px;margin-bottom:3px}
.ssg-result-snippet{font-size:13px;color:#595960;line-height:1.5}
.ssg-result-snippet mark{background:#fef08a;color:inherit;border-radius:2px;padding:0 2px}
.ssg-no-results{padding:32px 20px;text-align:center;color:#595960;font-size:14px}
.ssg-no-results[role="status"]{}
/* Forced-colours / Windows High Contrast Mode */
@media(forced-colors:active){
#ssg-search-btn{border:1px solid ButtonText}
#ssg-search-btn:focus{outline:2px solid Highlight}
#ssg-search-input{border:1px solid CanvasText}
#ssg-search-input:focus{outline:2px solid Highlight}
.ssg-result:focus,.ssg-result.active{outline:2px solid Highlight}
.ssg-result-snippet mark{background:Highlight;color:HighlightText}
}
.ssg-search-footer{display:flex;gap:16px;padding:10px 20px;font-size:12px;color:#595960;border-top:1px solid #e5e7eb;justify-content:flex-end}
.ssg-search-footer kbd{font-family:inherit;font-size:11px;padding:1px 5px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:3px}
/* ── Dark mode (media query + data-theme attribute) ── */
@media(prefers-color-scheme:dark){
:root:not([data-theme="light"]) #ssg-search-btn{background:#1f2937;border-color:#374151;color:#cccccf}
:root:not([data-theme="light"]) #ssg-search-btn:hover{border-color:#4b5563}
:root:not([data-theme="light"]) #ssg-search-btn kbd{background:#374151;border-color:#4b5563;color:#cccccf}
:root:not([data-theme="light"]) #ssg-search-box{background:#1f2937;color:#f9fafb}
:root:not([data-theme="light"]) #ssg-search-header{border-color:#374151}
:root:not([data-theme="light"]) #ssg-search-input{color:#f9fafb}
:root:not([data-theme="light"]) .ssg-result{color:#f9fafb;border-color:#374151}
:root:not([data-theme="light"]) .ssg-result:hover,:root:not([data-theme="light"]) .ssg-result.active{background:#374151}
:root:not([data-theme="light"]) .ssg-result-snippet{color:#cccccf}
:root:not([data-theme="light"]) .ssg-result-snippet mark{background:#854d0e;color:#fef08a}
:root:not([data-theme="light"]) .ssg-no-results{color:#cccccf}
:root:not([data-theme="light"]) .ssg-search-footer{border-color:#374151;color:#cccccf}
:root:not([data-theme="light"]) .ssg-search-footer kbd{background:#374151;border-color:#4b5563}
}
[data-theme="dark"] #ssg-search-btn{background:#1f2937;border-color:#374151;color:#cccccf}
[data-theme="dark"] #ssg-search-btn:hover{border-color:#4b5563}
[data-theme="dark"] #ssg-search-btn kbd{background:#374151;border-color:#4b5563;color:#cccccf}
[data-theme="dark"] #ssg-search-box{background:#1f2937;color:#f9fafb}
[data-theme="dark"] #ssg-search-header{border-color:#374151}
[data-theme="dark"] #ssg-search-input{color:#f9fafb}
[data-theme="dark"] .ssg-result{color:#f9fafb;border-color:#374151}
[data-theme="dark"] .ssg-result:hover,[data-theme="dark"] .ssg-result.active{background:#374151}
[data-theme="dark"] .ssg-result-snippet{color:#cccccf}
[data-theme="dark"] .ssg-result-snippet mark{background:#854d0e;color:#fef08a}
[data-theme="dark"] .ssg-no-results{color:#cccccf}
[data-theme="dark"] .ssg-search-footer{border-color:#374151;color:#cccccf}
[data-theme="dark"] .ssg-search-footer kbd{background:#374151;border-color:#4b5563}
</style>
<!-- Search trigger button -->
<button id="ssg-search-btn" type="button" aria-label="Search">
<svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
<span>Search</span>
<kbd>K</kbd>
</button>
<!-- Search modal -->
<div id="ssg-search-overlay" role="dialog" aria-label="Search">
<div id="ssg-search-box">
<div id="ssg-search-header">
<svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
<input id="ssg-search-input" type="search" placeholder="Search documentation..." autocomplete="off" aria-label="Search"/>
</div>
<div id="ssg-search-results" aria-live="polite"></div>
<div id="ssg-sr-status" role="status" aria-live="polite" aria-atomic="true"></div>
<div class="ssg-search-footer"><span><kbd>Esc</kbd> close</span><span><kbd>↑</kbd><kbd>↓</kbd> navigate</span><span><kbd>Enter</kbd> open</span></div>
</div>
</div>
<script>
(function(){
var idx=null,overlay=document.getElementById('ssg-search-overlay'),
input=document.getElementById('ssg-search-input'),
results=document.getElementById('ssg-search-results'),
btn=document.getElementById('ssg-search-btn'),active=-1,
lm=location.pathname.match(/^\/(en|fr|ar|bn|cs|de|es|ha|he|hi|id|it|ja|ko|nl|pl|pt|ro|ru|sv|th|tl|tr|uk|vi|yo|zh-tw|zh)\//),
lp=lm?'/'+lm[1]:'';
function load(){if(idx)return Promise.resolve();var sp=lm?'/'+lm[1]+'/search-index.json':'/search-index.json';return fetch(sp).then(function(r){return r.json()}).then(function(d){idx=d.entries||[]}).catch(function(){idx=[]})}
function open(){load().then(function(){overlay.classList.add('active');input.value='';results.innerHTML='';input.focus();active=-1})}
function close(){overlay.classList.remove('active');active=-1}
function highlight(text,q){if(!q)return esc(text);var re=new RegExp('('+q.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','gi');return esc(text).replace(re,'<mark>$1</mark>')}
function esc(s){var d=document.createElement('div');d.textContent=s;return d.innerHTML}
function snippet(content,q,len){len=len||150;if(!q)return esc(content.substring(0,len));var i=content.toLowerCase().indexOf(q.toLowerCase());if(i<0)return esc(content.substring(0,len));var s=Math.max(0,i-50),e=Math.min(content.length,i+len);var t=(s>0?'...':'')+content.substring(s,e)+(e<content.length?'...':'');return highlight(t,q)}
function search(q){if(!idx||!q){results.innerHTML='';return}q=q.trim();if(!q){results.innerHTML='';return}var ql=q.toLowerCase(),hits=[];
for(var i=0;i<idx.length&&hits.length<20;i++){var e=idx[i],s=0;if(e.title.toLowerCase().indexOf(ql)>=0)s+=10;if(e.content.toLowerCase().indexOf(ql)>=0)s+=5;for(var h=0;h<e.headings.length;h++){if(e.headings[h].toLowerCase().indexOf(ql)>=0){s+=3;break}}if(s>0)hits.push({entry:e,score:s})}
hits.sort(function(a,b){return b.score-a.score});
var sr=document.getElementById('ssg-sr-status');
if(!hits.length){results.innerHTML='<div class="ssg-no-results" role="status">No results for ““\'+esc(q)+\'””</div>';if(sr)sr.textContent='No results found';return}
var html='';for(var j=0;j<hits.length;j++){var e=hits[j].entry;html+='<a class="ssg-result" href="'+esc(lp+e.url)+'">'+'<div class="ssg-result-title">'+highlight(e.title,q)+'</div>'+'<div class="ssg-result-snippet">'+snippet(e.content,q)+'</div></a>'}
results.innerHTML=html;active=-1;if(sr)sr.textContent=hits.length+' result'+(hits.length===1?'':'s')+' found'}
function nav(dir){var items=results.querySelectorAll('.ssg-result');if(!items.length)return;if(active>=0&&items[active])items[active].classList.remove('active');active+=dir;if(active<0)active=items.length-1;if(active>=items.length)active=0;items[active].classList.add('active');items[active].scrollIntoView({block:'nearest'})}
btn.addEventListener('click',function(){open()});
input.addEventListener('input',function(){search(this.value)});
overlay.addEventListener('click',function(e){if(e.target===overlay)close()});
document.addEventListener('keydown',function(e){if((e.ctrlKey||e.metaKey)&&e.key==='k'){e.preventDefault();if(overlay.classList.contains('active'))close();else open()}
if(!overlay.classList.contains('active'))return;if(e.key==='Escape')close();if(e.key==='ArrowDown'){e.preventDefault();nav(1)}if(e.key==='ArrowUp'){e.preventDefault();nav(-1)}
if(e.key==='Enter'){e.preventDefault();var items=results.querySelectorAll('.ssg-result');if(active>=0&&items[active])window.location=items[active].href;else if(items[0])window.location=items[0].href}})
})();
</script>
</div>
</body></html>