Exposing Swagger/OpenAPI documentation is primarily a risk if your API has underlying security flaws, as it gives attackers a precise roadmap to find them.
Those detail every endpoint, parameter, and data model, making it easier to discover and exploit vulnerabilities like broken access control or injection points.
While a perfectly secure API mitigates the danger, protecting your documentation is a critical layer of defense that forces attackers to work without a map.
Severity: info
Fingerprint: 5733ddf49ff49cd12ec8532c2ec8532c2ec8532c2ec8532c2ec8532c2ec8532c
Public Swagger UI/API detected at path: /swagger/index.html
Open service 35.185.44.232:443 · docs.lunalocate.com
2026-01-09 10:04
HTTP/1.1 302 Found Content-Type: text/html; charset=utf-8 Location: https://projects.gitlab.io/auth?domain=https://docs.lunalocate.com&root_namespace_id=&state=ceewbMWJ2QHC5N8zKkVHSA== Permissions-Policy: interest-cohort=() Set-Cookie: gitlab-pages=MTc2Nzk1MzA4NnxMQzd4X1BmVjNhU3ZhVHh4Y21zaE41Zk5UQUw1SVVfYmgyUjdXWGNyZnNVc0ZSN2ljRFNhUjVnNWhldmpQMmNlay14MFNxcm9OVWVuOW5OelZSSENkdXJTTVRTWWxGUW4zY0dkTU1hSlhBT3VNZG8wTWUtZ1lnWW03WGxISl9oZFAxcUZnWE9OQ3lUUzg5bklibkE0djdjWlFialM3X3lpVjZoTDZ1bGhtSWt6MzdfV05kMFZ3WFNTbzRKNWYxR1MxVTZqX1pFQUdWM1A3Z1FPMnZPQ25pV296Qll6RldLVEYwRlphNkYwam5ZdzB4WkVTdld2OFBwYWZfZlVtSUp5bHlVPXyPKgTnrhfGTDyC_amiFXO04_aI0ZDnXlYYTfE-u_oNjg==; Path=/auth; Expires=Fri, 09 Jan 2026 10:14:46 GMT; Max-Age=600; HttpOnly; Secure; SameSite=None Vary: Origin X-Request-Id: 01KEH3EDXTHPVVM9E08N0PH5A8 Date: Fri, 09 Jan 2026 10:04:46 GMT Content-Length: 147 Connection: close <a href="https://projects.gitlab.io/auth?domain=https://docs.lunalocate.com&root_namespace_id=&state=ceewbMWJ2QHC5N8zKkVHSA==">Found</a>.
Open service 35.185.44.232:443 · docs.lunalocate.com
2026-01-02 14:48
HTTP/1.1 200 OK
Cache-Control: max-age=600
Content-Length: 14656
Content-Type: text/html; charset=utf-8
Etag: "cd7fad1c9ad14c756cefa9ebe155bbd0fdc90a34435a40af19f5f17b6768c5bb"
Expires: Fri, 02 Jan 2026 14:58:59 UTC
Last-Modified: Wed, 27 Aug 2025 21:36:18 GMT
Permissions-Policy: interest-cohort=()
Vary: Origin
X-Request-Id: 01KDZJXT79QZWKA9J4VY4DA2D4
Date: Fri, 02 Jan 2026 14:48:59 GMT
Connection: close
Page title: Luna Locate API | Luna Locate Docs
<!DOCTYPE html><html lang="en" dir="ltr" data-has-hero class="astro-bguv2lll"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Luna Locate API | Luna Locate Docs</title><link rel="canonical" href="https://lunaxio.gitlab.io/"/><link rel="sitemap" href="/sitemap-index.xml"/><link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v3.6.3"/><meta name="generator" content="Starlight v0.13.1"/><meta property="og:title" content="Luna Locate API"/><meta property="og:type" content="article"/><meta property="og:url" content="https://lunaxio.gitlab.io/"/><meta property="og:locale" content="en"/><meta property="og:description" content="Get started working with the Luna Locate API"/><meta property="og:site_name" content="Luna Locate Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Luna Locate API"/><meta name="twitter:description" content="Get started working with the Luna Locate API"/><meta name="description" content="Get started working with the Luna Locate API"/><script>
window.StarlightThemeProvider = (() => {
const storedTheme =
typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
const theme =
storedTheme ||
(window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
return {
updatePickers(theme = storedTheme || 'auto') {
document.querySelectorAll('starlight-theme-select').forEach((picker) => {
const select = picker.querySelector('select');
if (select) select.value = theme;
/** @type {HTMLTemplateElement | null} */
const tmpl = document.querySelector(`#theme-icons`);
const newIcon = tmpl && tmpl.content.querySelector('.' + theme);
if (newIcon) {
const oldIcon = picker.querySelector('svg.label-icon');
if (oldIcon) {
oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes);
}
}
});
},
};
})();
</script><template id="theme-icons"><svg aria-hidden="true" class="light astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg> <svg aria-hidden="true" class="dark astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg> <svg aria-hidden="true" class="auto astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> </template><link rel="stylesheet" href="/_astro/index.9df14225.css" />
<style>svg:where(.astro-c6vsoqas){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em}
</style><script type="module" src="/_astro/hoisted.d699a405.js"></script><style>.card-grid:where(.astro-zntqmydn){display:grid;gap:1rem}.card-grid:where(.astro-znt
Open service 35.185.44.232:443 · docs.lunalocate.com
2025-12-22 17:01
HTTP/1.1 200 OK
Cache-Control: max-age=600
Content-Length: 14656
Content-Type: text/html; charset=utf-8
Etag: "cd7fad1c9ad14c756cefa9ebe155bbd0fdc90a34435a40af19f5f17b6768c5bb"
Expires: Mon, 22 Dec 2025 17:11:47 UTC
Last-Modified: Wed, 27 Aug 2025 21:36:18 GMT
Permissions-Policy: interest-cohort=()
Vary: Origin
X-Request-Id: 01KD3G52E7AGWEPK5A12SQQNS0
Date: Mon, 22 Dec 2025 17:01:47 GMT
Connection: close
Page title: Luna Locate API | Luna Locate Docs
<!DOCTYPE html><html lang="en" dir="ltr" data-has-hero class="astro-bguv2lll"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Luna Locate API | Luna Locate Docs</title><link rel="canonical" href="https://lunaxio.gitlab.io/"/><link rel="sitemap" href="/sitemap-index.xml"/><link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v3.6.3"/><meta name="generator" content="Starlight v0.13.1"/><meta property="og:title" content="Luna Locate API"/><meta property="og:type" content="article"/><meta property="og:url" content="https://lunaxio.gitlab.io/"/><meta property="og:locale" content="en"/><meta property="og:description" content="Get started working with the Luna Locate API"/><meta property="og:site_name" content="Luna Locate Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Luna Locate API"/><meta name="twitter:description" content="Get started working with the Luna Locate API"/><meta name="description" content="Get started working with the Luna Locate API"/><script>
window.StarlightThemeProvider = (() => {
const storedTheme =
typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
const theme =
storedTheme ||
(window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
return {
updatePickers(theme = storedTheme || 'auto') {
document.querySelectorAll('starlight-theme-select').forEach((picker) => {
const select = picker.querySelector('select');
if (select) select.value = theme;
/** @type {HTMLTemplateElement | null} */
const tmpl = document.querySelector(`#theme-icons`);
const newIcon = tmpl && tmpl.content.querySelector('.' + theme);
if (newIcon) {
const oldIcon = picker.querySelector('svg.label-icon');
if (oldIcon) {
oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes);
}
}
});
},
};
})();
</script><template id="theme-icons"><svg aria-hidden="true" class="light astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg> <svg aria-hidden="true" class="dark astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg> <svg aria-hidden="true" class="auto astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> </template><link rel="stylesheet" href="/_astro/index.9df14225.css" />
<style>svg:where(.astro-c6vsoqas){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em}
</style><script type="module" src="/_astro/hoisted.d699a405.js"></script><style>.card-grid:where(.astro-zntqmydn){display:grid;gap:1rem}.card-grid:where(.astro-znt
Open service 35.185.44.232:443 · docs.lunalocate.com
2025-12-20 17:33
HTTP/1.1 200 OK
Cache-Control: max-age=600
Content-Length: 14656
Content-Type: text/html; charset=utf-8
Etag: "cd7fad1c9ad14c756cefa9ebe155bbd0fdc90a34435a40af19f5f17b6768c5bb"
Expires: Sat, 20 Dec 2025 17:43:45 UTC
Last-Modified: Wed, 27 Aug 2025 21:36:18 GMT
Permissions-Policy: interest-cohort=()
Vary: Origin
X-Request-Id: 01KCYD6565G5D8VSGE023RKJVF
Date: Sat, 20 Dec 2025 17:33:45 GMT
Connection: close
Page title: Luna Locate API | Luna Locate Docs
<!DOCTYPE html><html lang="en" dir="ltr" data-has-hero class="astro-bguv2lll"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Luna Locate API | Luna Locate Docs</title><link rel="canonical" href="https://lunaxio.gitlab.io/"/><link rel="sitemap" href="/sitemap-index.xml"/><link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v3.6.3"/><meta name="generator" content="Starlight v0.13.1"/><meta property="og:title" content="Luna Locate API"/><meta property="og:type" content="article"/><meta property="og:url" content="https://lunaxio.gitlab.io/"/><meta property="og:locale" content="en"/><meta property="og:description" content="Get started working with the Luna Locate API"/><meta property="og:site_name" content="Luna Locate Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Luna Locate API"/><meta name="twitter:description" content="Get started working with the Luna Locate API"/><meta name="description" content="Get started working with the Luna Locate API"/><script>
window.StarlightThemeProvider = (() => {
const storedTheme =
typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
const theme =
storedTheme ||
(window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
return {
updatePickers(theme = storedTheme || 'auto') {
document.querySelectorAll('starlight-theme-select').forEach((picker) => {
const select = picker.querySelector('select');
if (select) select.value = theme;
/** @type {HTMLTemplateElement | null} */
const tmpl = document.querySelector(`#theme-icons`);
const newIcon = tmpl && tmpl.content.querySelector('.' + theme);
if (newIcon) {
const oldIcon = picker.querySelector('svg.label-icon');
if (oldIcon) {
oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes);
}
}
});
},
};
})();
</script><template id="theme-icons"><svg aria-hidden="true" class="light astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg> <svg aria-hidden="true" class="dark astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg> <svg aria-hidden="true" class="auto astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> </template><link rel="stylesheet" href="/_astro/index.9df14225.css" />
<style>svg:where(.astro-c6vsoqas){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em}
</style><script type="module" src="/_astro/hoisted.d699a405.js"></script><style>.card-grid:where(.astro-zntqmydn){display:grid;gap:1rem}.card-grid:where(.astro-znt
Open service 35.185.44.232:443 · docs.lunalocate.com
2025-12-19 06:33
HTTP/1.1 200 OK
Cache-Control: max-age=600
Content-Length: 14656
Content-Type: text/html; charset=utf-8
Etag: "cd7fad1c9ad14c756cefa9ebe155bbd0fdc90a34435a40af19f5f17b6768c5bb"
Expires: Fri, 19 Dec 2025 06:43:05 UTC
Last-Modified: Wed, 27 Aug 2025 21:36:18 GMT
Permissions-Policy: interest-cohort=()
Vary: Origin
X-Request-Id: 01KCTMZQWCTPF9X8X9JPYHQZ7G
Date: Fri, 19 Dec 2025 06:33:05 GMT
Connection: close
Page title: Luna Locate API | Luna Locate Docs
<!DOCTYPE html><html lang="en" dir="ltr" data-has-hero class="astro-bguv2lll"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Luna Locate API | Luna Locate Docs</title><link rel="canonical" href="https://lunaxio.gitlab.io/"/><link rel="sitemap" href="/sitemap-index.xml"/><link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v3.6.3"/><meta name="generator" content="Starlight v0.13.1"/><meta property="og:title" content="Luna Locate API"/><meta property="og:type" content="article"/><meta property="og:url" content="https://lunaxio.gitlab.io/"/><meta property="og:locale" content="en"/><meta property="og:description" content="Get started working with the Luna Locate API"/><meta property="og:site_name" content="Luna Locate Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Luna Locate API"/><meta name="twitter:description" content="Get started working with the Luna Locate API"/><meta name="description" content="Get started working with the Luna Locate API"/><script>
window.StarlightThemeProvider = (() => {
const storedTheme =
typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
const theme =
storedTheme ||
(window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
return {
updatePickers(theme = storedTheme || 'auto') {
document.querySelectorAll('starlight-theme-select').forEach((picker) => {
const select = picker.querySelector('select');
if (select) select.value = theme;
/** @type {HTMLTemplateElement | null} */
const tmpl = document.querySelector(`#theme-icons`);
const newIcon = tmpl && tmpl.content.querySelector('.' + theme);
if (newIcon) {
const oldIcon = picker.querySelector('svg.label-icon');
if (oldIcon) {
oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes);
}
}
});
},
};
})();
</script><template id="theme-icons"><svg aria-hidden="true" class="light astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg> <svg aria-hidden="true" class="dark astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg> <svg aria-hidden="true" class="auto astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> </template><link rel="stylesheet" href="/_astro/index.9df14225.css" />
<style>svg:where(.astro-c6vsoqas){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em}
</style><script type="module" src="/_astro/hoisted.d699a405.js"></script><style>.card-grid:where(.astro-zntqmydn){display:grid;gap:1rem}.card-grid:where(.astro-znt