@hgdc/docs 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/docs.schema.json +59 -0
  2. package/package.json +1 -1
  3. package/src/core/config.ts +47 -1
  4. package/src/overrides/Header.astro +14 -2
  5. package/src/overrides/Sidebar.astro +11 -2
  6. package/src/overrides/SiteFooter.astro +67 -23
  7. package/src/overrides/sections.ts +5 -0
  8. package/src/styles/theme.css +114 -14
  9. package/template/.build/404.html +4 -4
  10. package/template/.build/_astro/common.D2jViLgF.css +3 -0
  11. package/template/.build/_hgdc/corpus.json +1 -1
  12. package/template/.build/demarrer/premiere-doc/index.html +5 -5
  13. package/template/.build/explications/donnees/index.html +5 -5
  14. package/template/.build/explications/fonctionnement/index.html +5 -5
  15. package/template/.build/guides/agents/index.html +5 -5
  16. package/template/.build/guides/assistant/index.html +5 -5
  17. package/template/.build/guides/composants/index.html +6 -6
  18. package/template/.build/guides/ecrire/index.html +5 -5
  19. package/template/.build/guides/navigation/index.html +5 -5
  20. package/template/.build/guides/publier/index.html +5 -5
  21. package/template/.build/guides/theme/index.html +5 -5
  22. package/template/.build/images/famille/account.svg +1 -0
  23. package/template/.build/images/famille/analytics.svg +1 -0
  24. package/template/.build/images/famille/docs.svg +1 -0
  25. package/template/.build/images/famille/host.svg +1 -0
  26. package/template/.build/images/famille/mail.svg +1 -0
  27. package/template/.build/images/famille/portal.svg +1 -0
  28. package/template/.build/images/famille/status.svg +1 -0
  29. package/template/.build/index.html +5 -5
  30. package/template/.build/llms-full.txt +4 -0
  31. package/template/.build/pagefind/fragment/fr-ch_1a9a1fc.pf_fragment +0 -0
  32. package/template/.build/pagefind/index/fr-ch_1c27d4e.pf_index +0 -0
  33. package/template/.build/pagefind/pagefind-entry.json +1 -1
  34. package/template/.build/pagefind/pagefind.fr-ch_6bf31b937df47.pf_meta +0 -0
  35. package/template/.build/reference/api-assistant/index.html +5 -5
  36. package/template/.build/reference/cli/index.html +5 -5
  37. package/template/.build/reference/docs-json/index.html +30 -6
  38. package/template/.build/reference/docs-json.md +4 -0
  39. package/template/.build/reference/mcp/index.html +5 -5
  40. package/template/node_modules/.vite/deps/_metadata.json +8 -8
  41. package/template/.build/_astro/common.BoKrWC_6.css +0 -3
  42. package/template/.build/pagefind/fragment/fr-ch_a4b68e2.pf_fragment +0 -0
  43. package/template/.build/pagefind/index/fr-ch_481c81a.pf_index +0 -0
  44. package/template/.build/pagefind/pagefind.fr-ch_46a632d8eba7e.pf_meta +0 -0
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang="fr-CH" dir="ltr" data-theme="dark" data-has-hero class="astro-mgylisfi"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><title>404 | Docs</title><style>:root{--sl-color-accent-low:#282041;--sl-color-accent:#aa73ff;--sl-color-accent-high:#e8b7ff;--hgdc-on-accent:#000000;}:root:not([data-hd-theme="dark"]){--sl-color-accent-low:#f1e9ff;--sl-color-accent:#7c3aed;--sl-color-accent-high:#4e00ae;--hgdc-on-accent:#ffffff;}</style><link rel="shortcut icon" href="/images/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v7.3.8"/><meta name="generator" content="Starlight v0.42.6"/><meta property="og:title" content="404"/><meta property="og:type" content="article"/><meta property="og:locale" content="fr-CH"/><meta property="og:description" content="Écrire une documentation en MDX, la publier avec Host et y brancher un assistant IA qui cite ses sources."/><meta property="og:site_name" content="Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Écrire une documentation en MDX, la publier avec Host et y brancher un assistant IA qui cite ses sources."/><link rel="alternate" type="text/markdown" href="/404.md"><link rel="describedby" type="text/markdown" href="/llms.txt"><script>
1
+ <!DOCTYPE html><html lang="fr-CH" dir="ltr" data-theme="dark" data-has-hero class="astro-usuo27fo"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><title>404 | Docs</title><style>:root{--sl-color-accent-low:#282041;--sl-color-accent:#aa73ff;--sl-color-accent-high:#e8b7ff;--hgdc-on-accent:#000000;}:root:not([data-hd-theme="dark"]){--sl-color-accent-low:#f1e9ff;--sl-color-accent:#7c3aed;--sl-color-accent-high:#4e00ae;--hgdc-on-accent:#ffffff;}</style><link rel="shortcut icon" href="/images/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v7.3.8"/><meta name="generator" content="Starlight v0.42.6"/><meta property="og:title" content="404"/><meta property="og:type" content="article"/><meta property="og:locale" content="fr-CH"/><meta property="og:description" content="Écrire une documentation en MDX, la publier avec Host et y brancher un assistant IA qui cite ses sources."/><meta property="og:site_name" content="Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Écrire une documentation en MDX, la publier avec Host et y brancher un assistant IA qui cite ses sources."/><link rel="alternate" type="text/markdown" href="/404.md"><link rel="describedby" type="text/markdown" href="/llms.txt"><script>
2
2
  ;(() => {
3
3
  let stored = null
4
4
  try {
@@ -11,6 +11,6 @@
11
11
  document.documentElement.dataset.hdTheme = theme
12
12
  window.StarlightThemeProvider = { updatePickers() {} }
13
13
  })()
14
- </script><link rel="stylesheet" href="/_astro/print.ehPL0gv-.css" media="print"><link rel="stylesheet" href="/_astro/common.BoKrWC_6.css"><style>@layer starlight.components{svg:where(.astro-kvkgfy7v){color:var(--sl-icon-color);font-size:var(--sl-icon-size,1em);width:1em;height:1em;overflow:visible}}
15
- @layer starlight.components{starlight-tabs:where(.astro-opkipegj){display:block}.tablist-wrapper:where(.astro-opkipegj){overflow-x:auto}:where(.astro-opkipegj)[role=tablist]{border-bottom:2px solid var(--sl-color-gray-5);padding:0;list-style:none;display:flex}.tab:where(.astro-opkipegj){display:flex}.tab:where(.astro-opkipegj)>:where(.astro-opkipegj)[role=tab]{--sl-tab-color-border:var(--sl-color-gray-5);line-height:var(--sl-line-height-headings);box-shadow:0 2px 0 var(--sl-tab-color-border);color:var(--sl-color-gray-3);outline-offset:var(--sl-outline-offset-inside);overflow-wrap:initial;align-items:center;gap:.5rem;padding:.275rem 1.25rem;text-decoration:none;display:flex}.tab:where(.astro-opkipegj) :where(.astro-opkipegj)[role=tab][aria-selected=true]{--sl-tab-color-border:var(--sl-color-text-accent);color:var(--sl-color-white);font-weight:600}.tablist-wrapper:where(.astro-opkipegj)~[role=tabpanel]{margin-top:1rem}}
16
- </style><script type="module" src="/_astro/page.cNngjUgL.js"></script></head><body class="astro-mgylisfi"><a class="sl-skip-link astro-hlhzrz26" href="#_top">Aller au contenu</a><div class="hd-page"><header class="hd-topbar"><div class="hd-header"><div class="hd-header__start"><button type="button" class="hd-icon-button hd-menu-button" popovertarget="starlight__sidebar" aria-label="Menu de la documentation" aria-controls="starlight__sidebar"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h16M4 12h16M4 17h10"></path></svg></button><a class="hd-brand" href="/"><span class="hd-brand__mark"><img class="hd-brand__light" src="/images/logo-clair.svg" alt="" width="24" height="24"><img class="hd-brand__dark" src="/images/logo-sombre.svg" alt="" width="24" height="24"></span><span class="hd-brand__name">Docs</span></a></div><nav class="hd-header__tabs" aria-label="Sections de la documentation"><a href="/" aria-current="page">Guides</a><a href="/reference/docs-json/">Référence</a><a href="/explications/fonctionnement/">Explications</a></nav><div class="hd-header__end"><hd-search data-base data-assistant><button type="button" class="hd-search-trigger" data-open aria-haspopup="dialog" aria-label="Rechercher (Ctrl K)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5-2 4 4"></path></svg><span class="hd-search-trigger__label">Rechercher</span><kbd class="hd-kbd" data-shortcut>Ctrl K</kbd></button><dialog class="hd-palette" aria-label="Rechercher dans la documentation"><div class="hd-palette__box"><div class="hd-palette__field"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5-2 4 4"></path></svg><input type="text" data-input placeholder="Rechercher dans la documentation" autocomplete="off" spellcheck="false" role="combobox" aria-expanded="false" aria-controls="hd-palette-results" aria-autocomplete="list"><button type="button" class="hd-kbd hd-kbd--button" data-close>Échap</button></div><div class="hd-palette__results" id="hd-palette-results" role="listbox" aria-label="Résultats" data-results></div><p class="hd-palette__status" data-status role="status">Tape un mot pour chercher dans les pages.</p><footer class="hd-palette__hints" aria-hidden="true"><span><kbd class="hd-kbd">↑</kbd><kbd class="hd-kbd">↓</kbd> Choisir</span><span><kbd class="hd-kbd">↵</kbd> Ouvrir</span><span><kbd class="hd-kbd">Échap</kbd> Fermer</span></footer></div></dialog></hd-search><script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.VKDD8r2I.js"></script><button type="button" class="hd-icon-button" data-hgdc-ask aria-label="Demander à l'assistant" title="Demander à l'assistant (Ctrl I)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 13.6 8a3 3 0 0 0 1.9 1.9L20 11.5l-4.5 1.6a3 3 0 0 0-1.9 1.9L12 19.5 10.4 15a3 3 0 0 0-1.9-1.9L4 11.5 8.5 9.9A3 3 0 0 0 10.4 8ZM19 3v3M20.5 4.5h-3"></path></svg></button><nav class="hd-header__links" aria-label="Liens"><a class="hd-pill hd-pill--ghost" href="https://hgdc.ch">HGDC</a><a class="hd-pill hd-pill--primary" href="https://docs.hgdc.ch">Console</a></nav><button type="button" class="hd-icon-button hd-theme-button" data-hd-theme-toggle aria-label="Passer au thème sombre"><svg class="hd-icon hd-theme-button__moon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg><svg class="hd-icon hd-theme-button__sun" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><script type="module">var e=`starlight-theme`,t=()=>{try{return localStorage.getItem(e)||`light`}catch{return`light`}},n=()=>matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`,r=t=>{try{localStorage.setItem(e,t)}catch{}let r=t===`auto`?n():t;document.documentElement.dataset.theme=r,document.documentElement.dataset.hdTheme=r,i()},i=()=>{let e=t(),n=document.documentElement.dataset.theme===`dark`;for(let e of document.querySelectorAll(`[data-hd-theme-toggle]`))e.setAttribute(`aria-label`,n?`Passer au thème clair`:`Passer au thème sombre`);for(let t of document.querySelectorAll(`[data-hd-theme-choice]`)){let n=t.dataset.hdThemeChoice===e;t.setAttribute(`aria-checked`,String(n)),t.tabIndex=n?0:-1}};for(let e of document.querySelectorAll(`[data-hd-theme-toggle]`))e.addEventListener(`click`,()=>r(document.documentElement.dataset.theme===`dark`?`light`:`dark`));for(let e of document.querySelectorAll(`.hd-theme-choice`)){let t=[...e.querySelectorAll(`[data-hd-theme-choice]`)];for(let e of t)e.addEventListener(`click`,()=>r(e.dataset.hdThemeChoice));e.addEventListener(`keydown`,e=>{let n=e.key===`ArrowRight`||e.key===`ArrowDown`?1:e.key===`ArrowLeft`||e.key===`ArrowUp`?-1:0;if(!n)return;e.preventDefault();let i=t.findIndex(e=>e.getAttribute(`aria-checked`)===`true`),a=t[(i+n+t.length)%t.length];r(a.dataset.hdThemeChoice),a.focus()})}matchMedia(`(prefers-color-scheme: light)`).addEventListener(`change`,()=>{t()===`auto`&&r(`auto`)}),i();</script></div></div></header><div class="hd-main-frame main-frame"><script type="module">var e=document.getElementById(`starlight__sidebar`),t=e?.querySelector(`sl-sidebar-state-persist`),n=`sl-sidebar-state`,r=()=>{let r=[],i=t?.dataset.hash||``;try{let e=sessionStorage.getItem(n),t=JSON.parse(e||`{}`);Array.isArray(t.open)&&t.hash===i&&(r=t.open)}catch{}return{hash:i,open:r,scroll:e?.scrollTop||0}},i=e=>{try{sessionStorage.setItem(n,JSON.stringify(e))}catch{}},a=()=>i(r()),o=(e,t)=>{let n=r();n.open[t]=e,i(n)};t?.addEventListener(`click`,e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`summary`)?.closest(`details`);if(!t)return;let n=t.querySelector(`sl-sidebar-restore`),r=parseInt(n?.dataset.index||``);isNaN(r)||o(!t.open,r)}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&a()});</script><div class="hd-columns"><div class="hd-columns__main main-pane"><main class="astro-mgylisfi" lang="fr-CH" dir="ltr"><div class="content-panel astro-lavu2imw"><div class="sl-container astro-lavu2imw"><div class="hero astro-i5xfpmlo"><div class="sl-flex stack astro-i5xfpmlo"><div class="sl-flex copy astro-i5xfpmlo"><h1 id="_top" data-page-title class="astro-i5xfpmlo">404</h1><div class="tagline astro-i5xfpmlo">Page non trouvée. Vérifiez l’URL ou essayez d’utiliser la barre de recherche.</div></div></div></div><div class="sl-markdown-content"></div><hgdc-feedback class="hgdc-feedback not-content" data-endpoint="https://docs.hgdc.ch/api/v1/feedback" data-project="jn7dj6vzkgs7n2d16kqjtb99yd8gbdw0" data-pagefind-ignore="true"><div data-step="ask"><p class="hgdc-feedback__question">Cette page t'a aidé ?</p><div class="hgdc-feedback__choices"><button type="button" data-helpful="true"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 10v11M15 5.9 14 10h5.8a2 2 0 0 1 1.9 2.5l-2.3 7A2 2 0 0 1 17.5 21H4a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1h2.8a2 2 0 0 0 1.8-1.1L12 2a3.1 3.1 0 0 1 3 3.9Z"></path></svg>Oui</button><button type="button" data-helpful="false"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M17 14V3M9 18.1 10 14H4.2a2 2 0 0 1-1.9-2.5l2.3-7A2 2 0 0 1 6.5 3H20a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1h-2.8a2 2 0 0 0-1.8 1.1L12 22a3.1 3.1 0 0 1-3-3.9Z"></path></svg>Non</button></div></div><form data-step="comment" hidden><label for="hgdc-feedback-comment">Qu'est-ce qui manquait ou pourrait être plus clair ? (facultatif)</label><textarea id="hgdc-feedback-comment" name="comment" rows="3" maxlength="1000"></textarea><div class="hgdc-feedback__choices"><button type="submit">Envoyer</button><button type="button" data-skip>Passer</button></div></form><p data-step="done" class="hgdc-feedback__done" role="status" hidden>Merci, c'est noté.</p></hgdc-feedback><script type="module" src="/_astro/Footer.astro_astro_type_script_index_0_lang.DzCnn3OT.js"></script></div></div></main><form class="hd-askbar" data-askbar data-pagefind-ignore><label class="sr-only" for="hd-askbar-input">Pose une question à l'assistant</label><input id="hd-askbar-input" data-askbar-input type="text" maxlength="1000" placeholder="Pose une question…" autocomplete="off"><kbd class="hd-kbd" data-shortcut aria-hidden="true">Ctrl I</kbd><button type="submit" class="hd-send" aria-label="Envoyer la question"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5m-6 6 6-6 6 6"></path></svg></button></form></div></div><footer class="hd-site-footer" data-pagefind-ignore><div class="hd-site-footer__row"><a class="hd-brand hd-brand--footer" href="/"><span class="hd-brand__mark"><img class="hd-brand__light" src="/images/logo-clair.svg" alt="" width="20" height="20" loading="lazy"><img class="hd-brand__dark" src="/images/logo-sombre.svg" alt="" width="20" height="20" loading="lazy"></span><span class="hd-brand__name">Docs</span></a></div><div class="hd-site-footer__row hd-site-footer__row--meta"><p>Écrire une documentation en MDX, la publier avec Host et y brancher un assistant IA qui cite ses sources.</p><div class="hd-theme-choice" role="radiogroup" aria-label="Thème"><button type="button" role="radio" aria-checked="false" data-hd-theme-choice="auto" aria-label="Système" title="Système"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Zm4 15h8m-4-3v3"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme-choice="light" aria-label="Clair" title="Clair"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme-choice="dark" aria-label="Sombre" title="Sombre"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg></button></div></div></footer></div><hgdc-assistant data-endpoint="https://docs.hgdc.ch/api/v1/ask" data-project="jn7dj6vzkgs7n2d16kqjtb99yd8gbdw0" data-name="Docs"><section class="hgdc-panel" role="dialog" aria-modal="false" aria-labelledby="hgdc-assistant-title" data-panel inert><div class="hgdc-panel__grip" aria-hidden="true"></div><header class="hgdc-panel__header"><h2 id="hgdc-assistant-title"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 13.6 8a3 3 0 0 0 1.9 1.9L20 11.5l-4.5 1.6a3 3 0 0 0-1.9 1.9L12 19.5 10.4 15a3 3 0 0 0-1.9-1.9L4 11.5 8.5 9.9A3 3 0 0 0 10.4 8ZM19 3v3M20.5 4.5h-3"></path></svg>Assistant</h2><div class="hgdc-panel__tools"><button type="button" class="hd-icon-button" data-reset aria-label="Nouvelle conversation" title="Nouvelle conversation" hidden><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 12a8 8 0 1 0 2.3-5.7M4 4v4h4"></path></svg></button><button type="button" class="hd-icon-button" data-close aria-label="Fermer l'assistant" title="Fermer (Échap)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"></path></svg></button></div></header><div class="hgdc-panel__body" data-log aria-live="polite"><div class="hgdc-empty" data-empty><p class="hgdc-empty__title">Pose ta question sur Docs.</p><p>Je cherche dans les pages de cette documentation et je cite mes sources. Si la réponse n'y est pas, je te le dis.</p></div></div><form class="hgdc-panel__form" data-form><label class="sr-only" for="hgdc-question">Ta question</label><textarea id="hgdc-question" data-input rows="1" maxlength="1000" placeholder="Pose une question…" required></textarea><button type="submit" class="hd-send" data-send aria-label="Envoyer la question"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5m-6 6 6-6 6 6"></path></svg></button></form><p class="hgdc-panel__note">Réponses générées par IA (Claude, d'Anthropic), à vérifier. Les questions sont conservées 90 jours pour améliorer cette documentation.</p></section></hgdc-assistant><script type="module" src="/_astro/Assistant.astro_astro_type_script_index_0_lang.C1pz7yK1.js"></script></div><script type="module">var e=class extends HTMLElement{connectedCallback(){let e=matchMedia(`(min-width: 50em)`),t=()=>{e.matches&&this.matches(`:popover-open`)&&this.hidePopover(),this.popover=e.matches?null:`auto`};t(),e.addEventListener(`change`,t),this.addEventListener(`toggle`,e=>{let t=e.newState===`open`;for(let e of document.querySelectorAll(`.hd-main-frame, .hd-askbar`))e.toggleAttribute(`inert`,t);document.documentElement.toggleAttribute(`data-hd-menu`,t)}),this.addEventListener(`click`,e=>{e.target.closest(`a`)&&this.matches(`:popover-open`)&&this.hidePopover()})}};customElements.define(`hd-sidebar-pane`,e);</script></body></html>
14
+ </script><link rel="stylesheet" href="/_astro/print.ehPL0gv-.css" media="print"><link rel="stylesheet" href="/_astro/common.D2jViLgF.css"><style>@layer starlight.components{svg:where(.astro-bemzhrvp){color:var(--sl-icon-color);font-size:var(--sl-icon-size,1em);width:1em;height:1em;overflow:visible}}
15
+ @layer starlight.components{starlight-tabs:where(.astro-hc7kf7b5){display:block}.tablist-wrapper:where(.astro-hc7kf7b5){overflow-x:auto}:where(.astro-hc7kf7b5)[role=tablist]{border-bottom:2px solid var(--sl-color-gray-5);padding:0;list-style:none;display:flex}.tab:where(.astro-hc7kf7b5){display:flex}.tab:where(.astro-hc7kf7b5)>:where(.astro-hc7kf7b5)[role=tab]{--sl-tab-color-border:var(--sl-color-gray-5);line-height:var(--sl-line-height-headings);box-shadow:0 2px 0 var(--sl-tab-color-border);color:var(--sl-color-gray-3);outline-offset:var(--sl-outline-offset-inside);overflow-wrap:initial;align-items:center;gap:.5rem;padding:.275rem 1.25rem;text-decoration:none;display:flex}.tab:where(.astro-hc7kf7b5) :where(.astro-hc7kf7b5)[role=tab][aria-selected=true]{--sl-tab-color-border:var(--sl-color-text-accent);color:var(--sl-color-white);font-weight:600}.tablist-wrapper:where(.astro-hc7kf7b5)~[role=tabpanel]{margin-top:1rem}}
16
+ </style><script type="module" src="/_astro/page.cNngjUgL.js"></script></head><body class="astro-usuo27fo"><a class="sl-skip-link astro-cinj7w7m" href="#_top">Aller au contenu</a><div class="hd-page"><header class="hd-topbar"><div class="hd-header"><div class="hd-header__start"><button type="button" class="hd-icon-button hd-menu-button" popovertarget="starlight__sidebar" aria-label="Menu de la documentation" aria-controls="starlight__sidebar"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h16M4 12h16M4 17h10"></path></svg></button><a class="hd-brand" href="/"><span class="hd-brand__mark"><img class="hd-brand__light" src="/images/logo-clair.svg" alt="" width="24" height="24"><img class="hd-brand__dark" src="/images/logo-sombre.svg" alt="" width="24" height="24"></span><span class="hd-brand__name">Docs</span></a></div><nav class="hd-header__tabs" aria-label="Sections de la documentation"><a href="/" aria-current="page">Guides</a><a href="/reference/docs-json/">Référence</a><a href="/explications/fonctionnement/">Explications</a></nav><div class="hd-header__end"><hd-search data-base data-assistant><button type="button" class="hd-search-trigger" data-open aria-haspopup="dialog" aria-label="Rechercher (Ctrl K)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5-2 4 4"></path></svg><span class="hd-search-trigger__label">Rechercher</span><kbd class="hd-kbd" data-shortcut>Ctrl K</kbd></button><dialog class="hd-palette" aria-label="Rechercher dans la documentation"><div class="hd-palette__box"><div class="hd-palette__field"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5-2 4 4"></path></svg><input type="text" data-input placeholder="Rechercher dans la documentation" autocomplete="off" spellcheck="false" role="combobox" aria-expanded="false" aria-controls="hd-palette-results" aria-autocomplete="list"><button type="button" class="hd-kbd hd-kbd--button" data-close>Échap</button></div><div class="hd-palette__results" id="hd-palette-results" role="listbox" aria-label="Résultats" data-results></div><p class="hd-palette__status" data-status role="status">Tape un mot pour chercher dans les pages.</p><footer class="hd-palette__hints" aria-hidden="true"><span><kbd class="hd-kbd">↑</kbd><kbd class="hd-kbd">↓</kbd> Choisir</span><span><kbd class="hd-kbd">↵</kbd> Ouvrir</span><span><kbd class="hd-kbd">Échap</kbd> Fermer</span></footer></div></dialog></hd-search><script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.VKDD8r2I.js"></script><button type="button" class="hd-icon-button" data-hgdc-ask aria-label="Demander à l'assistant" title="Demander à l'assistant (Ctrl I)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 13.6 8a3 3 0 0 0 1.9 1.9L20 11.5l-4.5 1.6a3 3 0 0 0-1.9 1.9L12 19.5 10.4 15a3 3 0 0 0-1.9-1.9L4 11.5 8.5 9.9A3 3 0 0 0 10.4 8ZM19 3v3M20.5 4.5h-3"></path></svg></button><nav class="hd-header__links" aria-label="Liens"><a class="hd-pill hd-pill--ghost" href="https://hgdc.ch">HGDC</a></nav><button type="button" class="hd-icon-button hd-theme-button" data-hd-theme-toggle aria-label="Passer au thème sombre"><svg class="hd-icon hd-theme-button__moon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg><svg class="hd-icon hd-theme-button__sun" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><script type="module">var e=`starlight-theme`,t=()=>{try{return localStorage.getItem(e)||`light`}catch{return`light`}},n=()=>matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`,r=t=>{try{localStorage.setItem(e,t)}catch{}let r=t===`auto`?n():t;document.documentElement.dataset.theme=r,document.documentElement.dataset.hdTheme=r,i()},i=()=>{let e=t(),n=document.documentElement.dataset.theme===`dark`;for(let e of document.querySelectorAll(`[data-hd-theme-toggle]`))e.setAttribute(`aria-label`,n?`Passer au thème clair`:`Passer au thème sombre`);for(let t of document.querySelectorAll(`[data-hd-theme-choice]`)){let n=t.dataset.hdThemeChoice===e;t.setAttribute(`aria-checked`,String(n)),t.tabIndex=n?0:-1}};for(let e of document.querySelectorAll(`[data-hd-theme-toggle]`))e.addEventListener(`click`,()=>r(document.documentElement.dataset.theme===`dark`?`light`:`dark`));for(let e of document.querySelectorAll(`.hd-theme-choice`)){let t=[...e.querySelectorAll(`[data-hd-theme-choice]`)];for(let e of t)e.addEventListener(`click`,()=>r(e.dataset.hdThemeChoice));e.addEventListener(`keydown`,e=>{let n=e.key===`ArrowRight`||e.key===`ArrowDown`?1:e.key===`ArrowLeft`||e.key===`ArrowUp`?-1:0;if(!n)return;e.preventDefault();let i=t.findIndex(e=>e.getAttribute(`aria-checked`)===`true`),a=t[(i+n+t.length)%t.length];r(a.dataset.hdThemeChoice),a.focus()})}matchMedia(`(prefers-color-scheme: light)`).addEventListener(`change`,()=>{t()===`auto`&&r(`auto`)}),i();</script><a class="hd-pill hd-pill--primary hd-app-button" href="https://docs.hgdc.ch">Ouvrir Docs<svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17 17 7M8 7h9v9"></path></svg></a></div></div></header><div class="hd-main-frame main-frame"><script type="module">var e=document.getElementById(`starlight__sidebar`),t=e?.querySelector(`sl-sidebar-state-persist`),n=`sl-sidebar-state`,r=()=>{let r=[],i=t?.dataset.hash||``;try{let e=sessionStorage.getItem(n),t=JSON.parse(e||`{}`);Array.isArray(t.open)&&t.hash===i&&(r=t.open)}catch{}return{hash:i,open:r,scroll:e?.scrollTop||0}},i=e=>{try{sessionStorage.setItem(n,JSON.stringify(e))}catch{}},a=()=>i(r()),o=(e,t)=>{let n=r();n.open[t]=e,i(n)};t?.addEventListener(`click`,e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`summary`)?.closest(`details`);if(!t)return;let n=t.querySelector(`sl-sidebar-restore`),r=parseInt(n?.dataset.index||``);isNaN(r)||o(!t.open,r)}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&a()});</script><div class="hd-columns"><div class="hd-columns__main main-pane"><main class="astro-usuo27fo" lang="fr-CH" dir="ltr"><div class="content-panel astro-354kzhd4"><div class="sl-container astro-354kzhd4"><div class="hero astro-hv5tv5qn"><div class="sl-flex stack astro-hv5tv5qn"><div class="sl-flex copy astro-hv5tv5qn"><h1 id="_top" data-page-title class="astro-hv5tv5qn">404</h1><div class="tagline astro-hv5tv5qn">Page non trouvée. Vérifiez l’URL ou essayez d’utiliser la barre de recherche.</div></div></div></div><div class="sl-markdown-content"></div><hgdc-feedback class="hgdc-feedback not-content" data-endpoint="https://docs.hgdc.ch/api/v1/feedback" data-project="jn7dj6vzkgs7n2d16kqjtb99yd8gbdw0" data-pagefind-ignore="true"><div data-step="ask"><p class="hgdc-feedback__question">Cette page t'a aidé ?</p><div class="hgdc-feedback__choices"><button type="button" data-helpful="true"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 10v11M15 5.9 14 10h5.8a2 2 0 0 1 1.9 2.5l-2.3 7A2 2 0 0 1 17.5 21H4a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1h2.8a2 2 0 0 0 1.8-1.1L12 2a3.1 3.1 0 0 1 3 3.9Z"></path></svg>Oui</button><button type="button" data-helpful="false"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M17 14V3M9 18.1 10 14H4.2a2 2 0 0 1-1.9-2.5l2.3-7A2 2 0 0 1 6.5 3H20a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1h-2.8a2 2 0 0 0-1.8 1.1L12 22a3.1 3.1 0 0 1-3-3.9Z"></path></svg>Non</button></div></div><form data-step="comment" hidden><label for="hgdc-feedback-comment">Qu'est-ce qui manquait ou pourrait être plus clair ? (facultatif)</label><textarea id="hgdc-feedback-comment" name="comment" rows="3" maxlength="1000"></textarea><div class="hgdc-feedback__choices"><button type="submit">Envoyer</button><button type="button" data-skip>Passer</button></div></form><p data-step="done" class="hgdc-feedback__done" role="status" hidden>Merci, c'est noté.</p></hgdc-feedback><script type="module" src="/_astro/Footer.astro_astro_type_script_index_0_lang.DzCnn3OT.js"></script></div></div></main><form class="hd-askbar" data-askbar data-pagefind-ignore><label class="sr-only" for="hd-askbar-input">Pose une question à l'assistant</label><input id="hd-askbar-input" data-askbar-input type="text" maxlength="1000" placeholder="Pose une question…" autocomplete="off"><kbd class="hd-kbd" data-shortcut aria-hidden="true">Ctrl I</kbd><button type="submit" class="hd-send" aria-label="Envoyer la question"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5m-6 6 6-6 6 6"></path></svg></button></form></div></div><footer class="hd-site-footer" data-pagefind-ignore><div class="hd-site-footer__top"><div class="hd-site-footer__about"><a class="hd-brand hd-brand--footer" href="/"><span class="hd-brand__mark"><img class="hd-brand__light" src="/images/logo-clair.svg" alt="" width="20" height="20" loading="lazy"><img class="hd-brand__dark" src="/images/logo-sombre.svg" alt="" width="20" height="20" loading="lazy"></span><span class="hd-brand__name">Docs</span></a><p class="hd-site-footer__lede">Écrire une documentation en MDX, la publier avec Host et y brancher un assistant IA qui cite ses sources.</p><a class="hd-pill hd-pill--ghost hd-site-footer__app" href="https://docs.hgdc.ch">Ouvrir Docs<svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17 17 7M8 7h9v9"></path></svg></a></div><nav class="hd-site-footer__columns" aria-label="Pied de page"><div class="hd-site-footer__column"><h2 class="hd-site-footer__heading" id="hd-footer-col-0">Documentation</h2><ul aria-labelledby="hd-footer-col-0"><li><a class="hd-site-footer__link" href="/"><span>Démarrer</span></a></li><li><a class="hd-site-footer__link" href="/guides/ecrire/"><span>Écrire une page</span></a></li><li><a class="hd-site-footer__link" href="/reference/docs-json/"><span>Référence de docs.json</span></a></li><li><a class="hd-site-footer__link" href="/reference/cli/"><span>CLI</span></a></li><li><a class="hd-site-footer__link" href="/reference/api-assistant/"><span>API de l&#39;assistant</span></a></li><li><a class="hd-site-footer__link" href="/llms.txt"><span>llms.txt</span></a></li></ul></div><div class="hd-site-footer__column"><h2 class="hd-site-footer__heading" id="hd-footer-col-1">Aide</h2><ul aria-labelledby="hd-footer-col-1"><li><a class="hd-site-footer__link" href="https://status.hgdc.ch/documentation"><span>État du service</span></a></li><li><a class="hd-site-footer__link" href="mailto:support@hgdc.ch"><span>Écrire au support</span></a></li><li><a class="hd-site-footer__link" href="https://hgdc.ch/.well-known/security.txt"><span>Signaler une faille</span></a></li></ul></div><div class="hd-site-footer__column"><h2 class="hd-site-footer__heading" id="hd-footer-col-2">La H Collection</h2><ul aria-labelledby="hd-footer-col-2"><li><a class="hd-site-footer__link" href="https://account.hgdc.ch"><img src="/images/famille/account.svg" alt="" width="18" height="18" loading="lazy"><span>Account</span></a></li><li><a class="hd-site-footer__link" href="https://host.hgdc.ch"><img src="/images/famille/host.svg" alt="" width="18" height="18" loading="lazy"><span>Host</span></a></li><li><a class="hd-site-footer__link" href="https://mail.hgdc.ch"><img src="/images/famille/mail.svg" alt="" width="18" height="18" loading="lazy"><span>Mail</span></a></li><li><a class="hd-site-footer__link" href="https://portal.hgdc.ch"><img src="/images/famille/portal.svg" alt="" width="18" height="18" loading="lazy"><span>Portal</span></a></li><li><a class="hd-site-footer__link" href="https://status.hgdc.ch"><img src="/images/famille/status.svg" alt="" width="18" height="18" loading="lazy"><span>Status</span></a></li><li><a class="hd-site-footer__link" href="https://analytics.hgdc.ch"><img src="/images/famille/analytics.svg" alt="" width="18" height="18" loading="lazy"><span>Analytics</span></a></li></ul></div><div class="hd-site-footer__column"><h2 class="hd-site-footer__heading" id="hd-footer-col-3">HGDC</h2><ul aria-labelledby="hd-footer-col-3"><li><a class="hd-site-footer__link" href="https://hgdc.ch"><span>L&#39;entreprise</span></a></li><li><a class="hd-site-footer__link" href="https://hgdc.ch/contact"><span>Contact</span></a></li><li><a class="hd-site-footer__link" href="https://hgdc.ch/mentions-legales"><span>Mentions légales</span></a></li><li><a class="hd-site-footer__link" href="https://hgdc.ch/confidentialite"><span>Confidentialité</span></a></li></ul></div></nav></div><div class="hd-site-footer__bottom"><p class="hd-site-footer__legal">© 2026 HGDC, Lausanne</p><div class="hd-theme-choice" role="radiogroup" aria-label="Thème"><button type="button" role="radio" aria-checked="false" data-hd-theme-choice="auto" aria-label="Système" title="Système"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Zm4 15h8m-4-3v3"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme-choice="light" aria-label="Clair" title="Clair"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme-choice="dark" aria-label="Sombre" title="Sombre"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg></button></div></div></footer></div><hgdc-assistant data-endpoint="https://docs.hgdc.ch/api/v1/ask" data-project="jn7dj6vzkgs7n2d16kqjtb99yd8gbdw0" data-name="Docs"><section class="hgdc-panel" role="dialog" aria-modal="false" aria-labelledby="hgdc-assistant-title" data-panel inert><div class="hgdc-panel__grip" aria-hidden="true"></div><header class="hgdc-panel__header"><h2 id="hgdc-assistant-title"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 13.6 8a3 3 0 0 0 1.9 1.9L20 11.5l-4.5 1.6a3 3 0 0 0-1.9 1.9L12 19.5 10.4 15a3 3 0 0 0-1.9-1.9L4 11.5 8.5 9.9A3 3 0 0 0 10.4 8ZM19 3v3M20.5 4.5h-3"></path></svg>Assistant</h2><div class="hgdc-panel__tools"><button type="button" class="hd-icon-button" data-reset aria-label="Nouvelle conversation" title="Nouvelle conversation" hidden><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 12a8 8 0 1 0 2.3-5.7M4 4v4h4"></path></svg></button><button type="button" class="hd-icon-button" data-close aria-label="Fermer l'assistant" title="Fermer (Échap)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"></path></svg></button></div></header><div class="hgdc-panel__body" data-log aria-live="polite"><div class="hgdc-empty" data-empty><p class="hgdc-empty__title">Pose ta question sur Docs.</p><p>Je cherche dans les pages de cette documentation et je cite mes sources. Si la réponse n'y est pas, je te le dis.</p></div></div><form class="hgdc-panel__form" data-form><label class="sr-only" for="hgdc-question">Ta question</label><textarea id="hgdc-question" data-input rows="1" maxlength="1000" placeholder="Pose une question…" required></textarea><button type="submit" class="hd-send" data-send aria-label="Envoyer la question"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5m-6 6 6-6 6 6"></path></svg></button></form><p class="hgdc-panel__note">Réponses générées par IA (Claude, d'Anthropic), à vérifier. Les questions sont conservées 90 jours pour améliorer cette documentation.</p></section></hgdc-assistant><script type="module" src="/_astro/Assistant.astro_astro_type_script_index_0_lang.C1pz7yK1.js"></script></div><script type="module">var e=class extends HTMLElement{connectedCallback(){let e=matchMedia(`(min-width: 50em)`),t=()=>{e.matches&&this.matches(`:popover-open`)&&this.hidePopover(),this.popover=e.matches?null:`auto`};t(),e.addEventListener(`change`,t),this.addEventListener(`toggle`,e=>{let t=e.newState===`open`;for(let e of document.querySelectorAll(`.hd-main-frame, .hd-askbar`))e.toggleAttribute(`inert`,t);document.documentElement.toggleAttribute(`data-hd-menu`,t)}),this.addEventListener(`click`,e=>{e.target.closest(`a`)&&this.matches(`:popover-open`)&&this.hidePopover()})}};customElements.define(`hd-sidebar-pane`,e);</script></body></html>
@@ -0,0 +1,3 @@
1
+ @font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-wght-normal.DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-ext-wght-normal.DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-wght-normal.CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-ext-wght-normal.DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-wght-normal.Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-wght-normal.BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-vietnamese-wght-normal.6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-ext-wght-normal.DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-wght-normal.BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--hd-font-sans:"Geist Variable", ui-sans-serif, system-ui, sans-serif;--hd-font-heading:"Inter Variable", ui-sans-serif, system-ui, sans-serif;--hd-font-mono:ui-monospace, "SFMono-Regular", "Cascadia Code", Consolas, monospace;--hd-ease-out:cubic-bezier(.23, 1, .32, 1);--hd-ease-drawer:cubic-bezier(.32, .72, 0, 1);--hd-nav-h:3.5rem;--hd-sidebar-w:17.5rem;--hd-toc-w:15.5rem;--hd-panel-w:26rem;--hd-content-w:45rem;--hd-gutter:1.25rem;color-scheme:dark;--hd-bg:oklch(14.5% 0 0);--hd-fg:oklch(98.5% 0 0);--hd-fg-2:oklch(87% 0 0);--hd-muted:oklch(20.5% 0 0);--hd-muted-2:oklch(26.9% 0 0);--hd-muted-fg:oklch(70.8% 0 0);--hd-border:oklch(100% 0 0/.1);--hd-border-strong:oklch(100% 0 0/.16);--hd-floating:oklch(20.5% 0 0);--hd-code-bg:oklch(17% 0 0);--hd-code-header:oklch(20% 0 0);--hd-hover:oklch(100% 0 0/.06);--hd-shadow:0 1px 2px oklch(0% 0 0/.3), 0 12px 32px -8px oklch(0% 0 0/.5);--hd-scroll-thumb:oklch(100% 0 0/.22);--hd-backdrop:oklch(0% 0 0/.55);--hd-primary:oklch(92.2% 0 0);--hd-primary-fg:oklch(20.5% 0 0);--hd-tone-note:oklch(72% .15 256);--hd-tone-info:oklch(70.8% 0 0);--hd-tone-tip:oklch(75% .14 156);--hd-tone-check:oklch(75% .14 156);--hd-tone-warning:oklch(82% .15 86);--hd-tone-danger:oklch(72% .19 22);--hd-accent:var(--sl-color-accent);--hd-accent-fg:var(--hgdc-on-accent,#fff);--hd-accent-soft:color-mix(in oklab, var(--hd-accent) 9%, transparent);--sl-font:var(--hd-font-sans);--sl-font-mono:var(--hd-font-mono);--sl-nav-height:var(--hd-nav-h);--sl-sidebar-width:var(--hd-sidebar-w);--sl-content-width:var(--hd-content-w);--sl-mobile-toc-height:0rem;--sl-color-bg:var(--hd-bg);--sl-color-bg-nav:var(--hd-bg);--sl-color-bg-sidebar:var(--hd-bg);--sl-color-hairline:var(--hd-border);--sl-color-hairline-light:var(--hd-border);--sl-color-hairline-shade:var(--hd-border);--sl-color-text:var(--hd-fg-2);--sl-color-text-accent:var(--hd-accent);--sl-color-white:var(--hd-fg);--sl-color-gray-1:oklch(92% 0 0);--sl-color-gray-2:oklch(82% 0 0);--sl-color-gray-3:var(--hd-muted-fg);--sl-color-gray-4:oklch(55% 0 0);--sl-color-gray-5:oklch(32% 0 0);--sl-color-gray-6:var(--hd-muted);--sl-color-black:var(--hd-bg);--sl-text-h1:2.25rem;--sl-text-h2:1.5rem;--sl-text-h3:1.1875rem;--sl-text-h4:1rem}:root:not([data-hd-theme=dark]){color-scheme:light;--hd-bg:oklch(100% 0 0);--hd-fg:oklch(14.5% 0 0);--hd-fg-2:oklch(30% 0 0);--hd-muted:oklch(97% 0 0);--hd-muted-2:oklch(94% 0 0);--hd-muted-fg:oklch(52% 0 0);--hd-border:oklch(92.2% 0 0);--hd-border-strong:oklch(87% 0 0);--hd-floating:oklch(100% 0 0);--hd-code-bg:oklch(100% 0 0);--hd-code-header:oklch(97.5% 0 0);--hd-hover:oklch(0% 0 0/.045);--hd-shadow:0 1px 2px oklch(0% 0 0/.05), 0 12px 32px -8px oklch(0% 0 0/.14);--hd-scroll-thumb:oklch(0% 0 0/.2);--hd-backdrop:oklch(0% 0 0/.3);--hd-primary:oklch(20.5% 0 0);--hd-primary-fg:oklch(98.5% 0 0);--hd-tone-note:oklch(50% .17 256);--hd-tone-info:oklch(45% 0 0);--hd-tone-tip:oklch(47% .12 155);--hd-tone-check:oklch(47% .12 155);--hd-tone-warning:oklch(50% .12 70);--hd-tone-danger:oklch(53% .21 27);--sl-color-gray-1:oklch(25% 0 0);--sl-color-gray-2:oklch(35% 0 0);--sl-color-gray-3:var(--hd-muted-fg);--sl-color-gray-4:oklch(65% 0 0);--sl-color-gray-5:oklch(87% 0 0);--sl-color-gray-6:var(--hd-muted);--sl-color-gray-7:oklch(98.5% 0 0)}html{background:var(--hd-bg);scroll-padding-top:calc(var(--hd-nav-h) + 1.5rem);scrollbar-width:thin;scrollbar-color:var(--hd-scroll-thumb) transparent;scroll-padding-bottom:5.5rem}body{background:var(--hd-bg);color:var(--hd-fg-2);font-family:var(--hd-font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:1rem}::selection{background:color-mix(in oklab, var(--hd-accent) 24%, transparent)}:focus-visible{outline:2px solid var(--hd-accent);outline-offset:2px}:where(.sidebar-pane,.hd-toc-scroll,.expressive-code pre,.hgdc-panel__body,.hd-palette__results,.hd-table){scrollbar-width:thin;scrollbar-color:transparent transparent;scrollbar-gutter:stable}:where(.sidebar-pane,.hd-toc-scroll,.expressive-code pre,.hgdc-panel__body,.hd-palette__results,.hd-table):is(:hover,:focus-within){scrollbar-color:var(--hd-scroll-thumb) transparent}:where(.sidebar-pane,.hd-toc-scroll,.expressive-code pre,.hgdc-panel__body,.hd-palette__results,.hd-table)::-webkit-scrollbar{width:6px;height:6px}:where(.sidebar-pane,.hd-toc-scroll,.expressive-code pre,.hgdc-panel__body,.hd-palette__results,.hd-table)::-webkit-scrollbar-thumb{background:0 0;border-radius:999px}:where(.sidebar-pane,.hd-toc-scroll,.expressive-code pre,.hgdc-panel__body,.hd-palette__results,.hd-table):is(:hover,:focus-within)::-webkit-scrollbar-thumb{background:var(--hd-scroll-thumb)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hd-icon{flex-shrink:0}.hd-kbd{border:1px solid var(--hd-border);background:var(--hd-bg);min-width:1.25rem;height:1.25rem;color:var(--hd-muted-fg);font:500 .6875rem/1 var(--hd-font-sans);white-space:nowrap;border-radius:.375rem;align-items:center;gap:.15rem;padding:0 .35rem;display:inline-flex}.hd-kbd--button{cursor:pointer}.hd-icon-button{width:2.25rem;height:2.25rem;color:var(--hd-muted-fg);cursor:pointer;transition:background-color .15s ease, color .15s ease, transform .16s var(--hd-ease-out);background:0 0;border:0;border-radius:999px;place-items:center;display:inline-grid}.hd-icon-button:hover{background:var(--hd-hover);color:var(--hd-fg)}.hd-icon-button:active{transform:scale(.95)}.hd-pill{height:2.25rem;font:500 .875rem/1 var(--hd-font-sans);white-space:nowrap;cursor:pointer;transition:background-color .15s ease, border-color .15s ease, transform .16s var(--hd-ease-out);border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:.375rem;padding:0 1rem;text-decoration:none;display:inline-flex}.hd-pill:active{transform:scale(.97)}.hd-pill--ghost{border-color:var(--hd-border);background:var(--hd-bg);color:var(--hd-fg)}.hd-pill--ghost:hover{background:var(--hd-muted)}.hd-pill--primary{background:var(--hd-accent);color:var(--hd-accent-fg)}.hd-pill--primary:hover{background:color-mix(in oklab, var(--hd-accent) 88%, var(--hd-fg))}.hd-topbar{z-index:30;height:var(--hd-nav-h);background:var(--hd-bg);border-bottom:1px solid var(--hd-border);padding:0 .75rem 0 .5rem;position:fixed;inset:0 0 auto}.hd-header{align-items:center;gap:.5rem;height:100%;display:flex}.hd-header__start{flex:auto;align-items:center;gap:.25rem;min-width:0;display:flex}.hd-header__tabs{display:none}.hd-header__end{flex:none;align-items:center;gap:.25rem;display:flex}.hd-header__links{display:none}.hd-app-button{gap:.25rem;height:2.25rem;margin-inline-start:.25rem;padding:0 .75rem 0 .875rem;font-size:.8125rem}@media (width<=29.99em){.hd-header:has(.hd-app-button) .hd-brand:has(.hd-brand__mark) .hd-brand__name{display:none}}@media (width>=50em){.hd-app-button{padding:0 .875rem 0 1rem;font-size:.875rem}}.hd-sidebar-app{align-self:stretch;height:2.75rem}.hd-brand{min-width:0;color:var(--hd-fg);border-radius:.75rem;align-items:center;gap:.625rem;padding:.375rem .5rem;text-decoration:none;display:inline-flex}.hd-brand__mark{flex-shrink:0;display:inline-grid}.hd-brand__mark img{grid-area:1/1;width:1.5rem;height:1.5rem}.hd-brand--footer .hd-brand__mark img{width:1.25rem;height:1.25rem}.hd-brand__dark,:root[data-hd-theme=dark] .hd-brand__light{visibility:hidden}:root[data-hd-theme=dark] .hd-brand__dark{visibility:visible}.hd-brand__name{font:600 1.0625rem/1 var(--hd-font-heading);letter-spacing:-.02em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hd-theme-button .hd-theme-button__sun,:root[data-hd-theme=dark] .hd-theme-button .hd-theme-button__moon{display:none}:root[data-hd-theme=dark] .hd-theme-button .hd-theme-button__sun{display:block}.hd-header .hd-theme-button{display:none}.hd-search-trigger{width:2.25rem;height:2.25rem;color:var(--hd-muted-fg);font:400 .875rem/1 var(--hd-font-sans);cursor:pointer;background:0 0;border:0;border-radius:999px;place-items:center;display:inline-grid}.hd-search-trigger:hover{background:var(--hd-hover);color:var(--hd-fg)}.hd-search-trigger__label,.hd-search-trigger .hd-kbd{display:none}@media (width>=50em){.hd-topbar{padding:0 1.25rem 0 .75rem}.hd-menu-button{display:none}.hd-header .hd-theme-button{display:inline-grid}.hd-search-trigger{border:1px solid var(--hd-border);background:var(--hd-bg);text-align:start;gap:.5rem;width:15rem;height:2.25rem;margin-inline-end:.25rem;padding:0 .375rem 0 .875rem;display:inline-flex}.hd-search-trigger:hover{border-color:var(--hd-border-strong);background:var(--hd-bg)}.hd-search-trigger__label{flex:1;display:block}.hd-search-trigger .hd-kbd{display:inline-flex}}@media (width>=64em){.hd-header{grid-template-columns:var(--hd-sidebar-w) 1fr auto;gap:0;display:grid}.hd-header__start{margin-inline-start:-.25rem}.hd-header__end{grid-column:3}.hd-header__tabs{align-items:center;gap:.25rem;min-width:0;padding-inline-start:1rem;display:flex}.hd-header__tabs a{color:var(--hd-muted-fg);font:500 .875rem/1 var(--hd-font-sans);white-space:nowrap;border-radius:999px;padding:.5rem .875rem;text-decoration:none;transition:background-color .15s,color .15s}.hd-header__tabs a:hover{color:var(--hd-fg)}.hd-header__tabs a[aria-current=page]{background:var(--hd-muted);color:var(--hd-fg)}.hd-header__links{align-items:center;gap:.5rem;margin-inline:.5rem .25rem;display:flex}}.hd-sidebar .sidebar-pane{z-index:40;background:var(--hd-bg);width:min(20rem,86vw);height:100dvh;color:inherit;overscroll-behavior:contain;box-shadow:var(--hd-shadow);transition:transform .32s var(--hd-ease-drawer), display .32s allow-discrete, overlay .32s allow-discrete;border:0;margin:0;padding:0;position:fixed;inset:0 auto 0 0;overflow-y:auto;transform:translate(-100%)}.hd-sidebar .sidebar-pane:popover-open{transform:none}@starting-style{.hd-sidebar .sidebar-pane:popover-open{transform:translate(-100%)}}.hd-sidebar .sidebar-pane::backdrop{background:var(--hd-backdrop);opacity:0;transition:opacity .32s ease, display .32s allow-discrete, overlay .32s allow-discrete}.hd-sidebar .sidebar-pane:popover-open::backdrop{opacity:1}@starting-style{.hd-sidebar .sidebar-pane:popover-open::backdrop{opacity:0}}.hd-sidebar__content{flex-direction:column;gap:1.25rem;min-height:100%;padding:1rem .75rem 2rem 1rem;display:flex}.hd-sidebar-head{justify-content:space-between;align-items:center;margin:-.25rem -.25rem 0 -.5rem;display:flex}@media (width>=50em){.hd-sidebar .sidebar-pane{inset:var(--hd-nav-h) auto 0 0;width:var(--hd-sidebar-w);height:auto;box-shadow:none;transition:none;display:block;transform:none}.hd-sidebar__content{padding:1.5rem 1rem 3rem 1.25rem}.hd-mobile-only{display:none!important}}.hd-nav{gap:1px;margin:0;padding:0;list-style:none;display:grid}.hd-nav--depth-0{gap:1.5rem}.hd-nav--depth-0>li:not(.hd-nav__group){margin-bottom:-1.5rem}.hd-nav--depth-0>li:not(.hd-nav__group)+li:not(.hd-nav__group){margin-top:calc(1px - 1.5rem)}.hd-nav__heading{color:var(--hd-fg);font:600 .8125rem/1.25rem var(--hd-font-heading);letter-spacing:-.005em;margin:0 0 .375rem;padding-inline:.75rem}.hd-nav--depth-2,.hd-nav--depth-3{border-inline-start:1px solid var(--hd-border);margin:1px 0 .25rem .75rem;padding-inline-start:.5rem}.hd-nav__link{min-height:2rem;color:var(--hd-muted-fg);font:400 .875rem/1.35 var(--hd-font-sans);cursor:pointer;border-radius:.75rem;align-items:center;gap:.5rem;padding:.3rem .75rem;text-decoration:none;list-style:none;transition:background-color .12s,color .12s;display:flex}.hd-nav__link::-webkit-details-marker{display:none}.hd-nav__link>span:first-child{flex:1;min-width:0}.hd-nav__link:hover{background:var(--hd-hover);color:var(--hd-fg)}.hd-nav__link[aria-current=page]{background:var(--hd-accent-soft);color:var(--hd-accent);font-weight:500}.hd-nav__chevron{color:var(--hd-muted-fg);transition:transform .2s var(--hd-ease-out)}.hd-nav__fold[open]>summary .hd-nav__chevron{transform:rotate(90deg)}.hd-badge{background:var(--hd-accent-soft);color:var(--hd-accent);font:600 .6875rem/1 var(--hd-font-sans);border-radius:999px;flex-shrink:0;padding:.125rem .4rem}.hd-sidebar-tabs{gap:1px;display:grid}.hd-sidebar-tabs a{color:var(--hd-fg-2);font:500 .875rem/1.2 var(--hd-font-sans);border-radius:.75rem;padding:.5rem .75rem;text-decoration:none}.hd-sidebar-tabs a[aria-current=page]{background:var(--hd-muted);color:var(--hd-fg)}.hd-version select{border:1px solid var(--hd-border);background:var(--hd-bg);width:100%;height:2.25rem;color:var(--hd-fg);font:500 .875rem var(--hd-font-sans);border-radius:.875rem;padding:0 .75rem}.hd-sidebar-footer{border-top:1px solid var(--hd-border);gap:1rem;margin-top:auto;padding-top:1rem;display:grid}.hd-sidebar-links{gap:.25rem;display:grid}.hd-sidebar-links a:not(.hd-pill){color:var(--hd-fg-2);padding:.5rem .75rem;font-size:.875rem;text-decoration:none}.hd-theme-choice{border:1px solid var(--hd-border);border-radius:999px;justify-self:start;gap:2px;padding:2px;display:inline-flex}.hd-theme-choice button{width:1.875rem;height:1.75rem;color:var(--hd-muted-fg);cursor:pointer;background:0 0;border:0;border-radius:999px;place-items:center;display:grid}.hd-theme-choice button:hover{color:var(--hd-fg)}.hd-theme-choice button[aria-checked=true]{background:var(--hd-muted-2);color:var(--hd-fg)}.hd-main-frame{padding-top:var(--hd-nav-h);transition:margin .32s var(--hd-ease-out)}@media (width>=50em){[data-has-sidebar] .hd-main-frame{margin-inline-start:var(--hd-sidebar-w)}}main{padding:0 0 2rem}.content-panel{padding:0 var(--hd-gutter)}.content-panel+.content-panel{border-top:0}.sl-container{max-width:var(--hd-content-w);margin-inline:auto}.hd-columns__toc{display:none}@media (width>=50em){:root{--hd-gutter:2.5rem}}@media (width>=72em){.hd-columns--toc{grid-template-columns:minmax(0, 1fr) var(--hd-toc-w);display:grid}.hd-columns__toc{display:block;position:relative}.hd-toc-scroll{top:var(--hd-nav-h);max-height:calc(100dvh - var(--hd-nav-h));padding:2.5rem 1.5rem 2rem .5rem;position:sticky;overflow-y:auto}}starlight-toc h2{color:var(--hd-fg);font:500 .8125rem/1.25rem var(--hd-font-heading);align-items:center;gap:.5rem;margin:0 0 .75rem;display:flex}starlight-toc h2:before{content:"";background:currentColor;width:1rem;height:1rem;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round'%3E%3Cpath d='M4 6h16M4 12h10M4 18h13'/%3E%3C/svg%3E") 50%/contain no-repeat}starlight-toc ul{margin:0;padding:0;list-style:none}starlight-toc ul ul{padding-inline-start:.75rem}starlight-toc a{color:var(--hd-muted-fg);font:400 .8125rem/1.4 var(--hd-font-sans);padding:.3rem 0;text-decoration:none;transition:color .12s;display:block}starlight-toc ul ul a{margin-inline-start:0;padding-inline-start:0}starlight-toc a:hover{color:var(--hd-fg)}starlight-toc a[aria-current=true]{color:var(--hd-accent);font-weight:500}starlight-toc a:focus-visible{outline:2px solid var(--hd-accent);outline-offset:2px;border-radius:.25rem}starlight-toc a .hd-method{display:none}.hd-title{padding-top:2rem}.hd-eyebrow{color:var(--hd-accent);font:500 .8125rem/1.25rem var(--hd-font-sans);margin:0 0 .5rem}.hd-title__row{flex-direction:column;gap:1rem;display:flex}.hd-title h1{color:var(--hd-fg);font:600 1.875rem/1.15 var(--hd-font-heading);letter-spacing:-.025em;text-wrap:balance;margin:0}.hd-lead{color:var(--hd-muted-fg);text-wrap:pretty;margin:.75rem 0 0;font-size:1.0625rem;line-height:1.6}.hd-title__row+.hd-lead{margin-top:.75rem}@media (width>=50em){.hd-title{padding-top:2.75rem}.hd-title__row{flex-direction:row;justify-content:space-between;align-items:flex-start;gap:1.5rem}.hd-title h1{font-size:2.25rem}.hd-lead{font-size:1.125rem}}.hd-page-actions{flex-shrink:0;order:2}.hd-title__row h1{order:1}@media (width<=49.99em){.hd-title__row{display:contents}.hd-title{flex-direction:column;display:flex}.hd-page-actions{order:3;margin-top:1rem}.hd-lead{order:2}.hd-eyebrow{order:0}}.hd-split{border:1px solid var(--hd-border);background:var(--hd-bg);border-radius:999px;align-items:stretch;height:2.125rem;display:inline-flex}.hd-split__main,.hd-split__more{color:var(--hd-fg);font:500 .8125rem/1 var(--hd-font-sans);cursor:pointer;background:0 0;border:0;align-items:center;gap:.4rem;transition:background-color .15s;display:inline-flex}.hd-split__main{border-radius:999px 0 0 999px;padding:0 .75rem 0 .875rem}.hd-split__more{border-inline-start:1px solid var(--hd-border);border-radius:0 999px 999px 0;height:100%;padding:0 .625rem 0 .5rem;list-style:none}.hd-split__more::-webkit-details-marker{display:none}.hd-split__main:hover,.hd-split__more:hover{background:var(--hd-muted)}.hd-split__main:active{transform:scale(.98)}.hd-menu{position:relative}.hd-menu__list{z-index:20;inset-inline-end:-1px;border:1px solid var(--hd-border);background:var(--hd-floating);width:17rem;box-shadow:var(--hd-shadow);transform-origin:100% 0;animation:hd-pop .15s var(--hd-ease-out);border-radius:1.25rem;gap:1px;margin:0;padding:.375rem;list-style:none;display:grid;position:absolute;top:calc(100% + .5rem)}@media (width<=49.99em){.hd-page-actions{position:relative}.hd-menu{position:static}.hd-menu__list{transform-origin:0 0;width:min(17rem,100%);inset-inline:0 auto}}.hd-menu__list :is(a,button){width:100%;color:var(--hd-muted-fg);font:inherit;text-align:start;cursor:pointer;background:0 0;border:0;border-radius:.875rem;align-items:flex-start;gap:.75rem;padding:.5rem .625rem;text-decoration:none;display:flex}.hd-menu__list .hd-icon{margin-top:.125rem}.hd-menu__list span{gap:.125rem;display:grid}.hd-menu__list strong{color:var(--hd-fg);font:500 .8125rem/1.3 var(--hd-font-sans)}.hd-menu__list small{font-size:.75rem;line-height:1.3}.hd-menu__list :is(a,button):hover{background:var(--hd-muted)}@keyframes hd-pop{0%{opacity:0;transform:scale(.97)translateY(-2px)}}.sl-markdown-content{color:var(--hd-fg-2);padding-top:2rem;font-size:1rem;line-height:1.75}.sl-markdown-content :is(h2,h3,h4,h5,h6){color:var(--hd-fg);font-family:var(--hd-font-heading);scroll-margin-top:calc(var(--hd-nav-h) + 1.5rem);font-weight:600}.sl-markdown-content h2{letter-spacing:-.02em;margin-top:2.75rem;font-size:1.5rem;line-height:1.3}.sl-markdown-content h3{letter-spacing:-.015em;margin-top:2rem;font-size:1.1875rem;line-height:1.4}.sl-markdown-content h4{margin-top:1.5rem;font-size:1rem}.sl-markdown-content :is(h2,h3,h4)+*{margin-top:.75rem}.sl-markdown-content :is(p,ul,ol,table,.hd-table,blockquote,figure,aside,details,.expressive-code)+:is(p,ul,ol,.hd-table,blockquote,figure,aside,details,.expressive-code,.hgdc-card-group,.hgdc-steps,starlight-tabs,hd-code-group){margin-top:1.25rem}.sl-markdown-content strong{color:var(--hd-fg);font-weight:600}.sl-markdown-content a:not(:where(.not-content *,.hgdc-card,.sl-anchor-link)){color:var(--hd-fg);text-decoration:underline;text-decoration-color:color-mix(in oklab, var(--hd-accent) 55%, transparent);text-underline-offset:.22em;font-weight:500;text-decoration-thickness:1px;transition:text-decoration-color .15s}.sl-markdown-content a:not(:where(.not-content *,.hgdc-card,.sl-anchor-link)):hover{text-decoration-color:var(--hd-accent);text-decoration-thickness:2px}.sl-markdown-content :is(ul,ol){padding-inline-start:1.375rem}.sl-markdown-content li+li{margin-top:.375rem}.sl-markdown-content li::marker{color:var(--hd-muted-fg)}.sl-markdown-content :not(pre)>code{border:1px solid var(--hd-border);background:var(--hd-muted);color:var(--hd-fg);font-family:var(--hd-font-mono);overflow-wrap:anywhere;border-radius:.45rem;padding:.125em .4em;font-size:.85em}.sl-markdown-content blockquote{border-inline-start:2px solid var(--hd-border-strong);color:var(--hd-muted-fg);margin-inline:0;padding-inline-start:1rem}.sl-markdown-content hr{border:0;border-top:1px solid var(--hd-border);margin-block:2.5rem}.sl-markdown-content .sl-anchor-link{color:var(--hd-muted-fg)}.sl-markdown-content .hd-table{border:1px solid var(--hd-border);border-radius:1rem;overflow-x:auto}.sl-markdown-content table{border-collapse:separate;border-spacing:0;border:0;width:100%;margin:0;font-size:.875rem;line-height:1.55;display:table}.sl-markdown-content :is(th,td){overflow-wrap:normal;border:0;border-bottom:1px solid var(--hd-border);text-align:start;vertical-align:top;min-width:7rem;padding:.625rem .875rem}.sl-markdown-content tr:last-child td{border-bottom:0}.sl-markdown-content th{background:var(--hd-muted);color:var(--hd-fg);white-space:nowrap;font-weight:600}.sl-markdown-content td:first-child code{white-space:nowrap}.sl-markdown-content img{border-radius:1rem}.hd-zoomable{cursor:zoom-in}.hd-zoom{cursor:zoom-out;max-width:min(92vw,80rem);max-height:92dvh;animation:hd-zoom-in .22s var(--hd-ease-out);background:0 0;border:0;border-radius:1rem;padding:0}.hd-zoom img{border-radius:1rem;max-width:100%;max-height:92dvh;display:block}.hd-zoom::backdrop{background:oklch(0% 0 0/.7)}@keyframes hd-zoom-in{0%{opacity:0;transform:scale(.96)}}.sl-markdown-content .hd-endpoint{border:1px solid var(--hd-border);background:var(--hd-muted);letter-spacing:0;border-radius:1rem;flex-wrap:wrap;align-items:center;gap:.625rem;margin-top:3rem;padding:.5rem .75rem .5rem .5rem;font-size:1rem;line-height:1.4;display:flex}.hd-method{--tone:var(--hd-tone-info);background:color-mix(in oklab, var(--tone) 14%, transparent);height:1.625rem;color:var(--tone);font:700 .75rem/1 var(--hd-font-mono);letter-spacing:.02em;border-radius:.5rem;align-items:center;padding:0 .5rem;display:inline-flex}.hd-method[data-method=get]{--tone:var(--hd-tone-tip)}.hd-method[data-method=post]{--tone:var(--hd-tone-note)}.hd-method:is([data-method=put],[data-method=patch]){--tone:var(--hd-tone-warning)}.hd-method[data-method=delete]{--tone:var(--hd-tone-danger)}.sl-markdown-content .hd-endpoint .hd-path{color:var(--hd-fg);font:500 .9375rem/1.4 var(--hd-font-mono);overflow-wrap:anywhere;background:0 0;border:0;padding:0}.hd-path__param{text-decoration:underline dotted var(--hd-accent);text-underline-offset:.25em;text-decoration-thickness:2px}.sl-markdown-content .expressive-code,.expressive-code .frame{position:relative}.expressive-code .frame.has-title .header,.expressive-code .frame.is-terminal .header{min-height:2.5rem}.expressive-code .frame .header .title{font-weight:500}.expressive-code .copy{display:none!important}.hd-code-actions{top:.375rem;z-index:2;background:var(--hd-code-bg);border-radius:999px;gap:.125rem;padding:.125rem;display:flex;position:absolute;inset-inline-end:.375rem}.frame.has-title .hd-code-actions,.frame.is-terminal .hd-code-actions{background:0 0}.hd-code-action{width:1.875rem;height:1.875rem;color:var(--hd-muted-fg);cursor:pointer;background:0 0;border:0;border-radius:999px;place-items:center;transition:background-color .12s,color .12s;display:grid}.hd-code-action:hover{background:var(--hd-hover);color:var(--hd-fg)}.expressive-code .frame:not(.has-title):not(.is-terminal) pre{padding-inline-end:6.5rem}.hd-code-active pre,.hd-code-active .header{border-color:var(--hd-accent)!important}.hd-report{border:1px solid var(--hd-border);background:var(--hd-floating);box-shadow:var(--hd-shadow);animation:hd-pop .16s var(--hd-ease-out);border-radius:1.25rem;gap:.625rem;margin-top:.5rem;padding:1rem;display:grid}.hd-report__title{color:var(--hd-fg);font:600 .9375rem/1.4 var(--hd-font-heading);margin:0}.hd-report__hint{color:var(--hd-muted-fg);font-size:.875rem;line-height:1.5;margin:0!important}.hd-report textarea,.hgdc-feedback textarea{border:1px solid var(--hd-border-strong);background:var(--hd-bg);width:100%;min-height:5rem;color:var(--hd-fg);font:400 1rem/1.5 var(--hd-font-sans);resize:vertical;border-radius:1rem;padding:.625rem .875rem;margin:0!important}.hd-report textarea:focus-visible,.hgdc-feedback textarea:focus-visible{border-color:var(--hd-accent);box-shadow:0 0 0 3px var(--hd-accent-soft);outline:none}.hd-report__actions{justify-content:flex-end;gap:.5rem;display:flex;margin:0!important}.hgdc-code-group{display:block}.hgdc-code-group:not([data-ready])>:not(:first-child){display:none}.hgdc-code-group[data-ready]{border:1px solid var(--hd-border);background:var(--hd-code-bg);border-radius:1rem;overflow:hidden}.hgdc-code-group[data-ready] .expressive-code{margin:0!important}.hgdc-code-group[data-ready] .expressive-code .frame pre,.hgdc-code-group[data-ready] .expressive-code .frame .header{border:0!important;border-radius:0!important}.hgdc-code-group[data-ready] .expressive-code .frame .header{display:none}.hgdc-code-group[data-ready] .hd-code-actions{background:0 0;top:-2.375rem}.hd-code-tabs{border-bottom:1px solid var(--hd-border);background:var(--hd-code-header);scrollbar-width:none;gap:.25rem;padding:0 7rem 0 .75rem;display:flex;overflow-x:auto}.hd-code-tabs button{height:2.5rem;color:var(--hd-muted-fg);font:500 .8125rem/1 var(--hd-font-sans);white-space:nowrap;cursor:pointer;background:0 0;border:0;padding:0 .5rem;position:relative}.hd-code-tabs button:hover,.hd-code-tabs button[aria-selected=true]{color:var(--hd-fg)}.hd-code-tabs button[aria-selected=true]:after{content:"";background:var(--hd-accent);border-radius:2px;height:2px;position:absolute;inset:auto .25rem -1px}.hd-code-tabs button:focus-visible{outline-offset:-2px}.hd-callout{--tone:var(--hd-tone-note);border:1px solid color-mix(in oklab, var(--tone) 22%, transparent);background:color-mix(in oklab, var(--tone) 7%, var(--hd-bg));color:var(--hd-fg-2);border-radius:1rem;gap:.75rem;padding:.875rem 1rem;font-size:.9375rem;line-height:1.65;display:flex}.hd-callout[data-tone=info]{--tone:var(--hd-tone-info);background:var(--hd-muted);border-color:var(--hd-border)}.hd-callout[data-tone=tip]{--tone:var(--hd-tone-tip)}.hd-callout[data-tone=check]{--tone:var(--hd-tone-check)}.hd-callout[data-tone=warning]{--tone:var(--hd-tone-warning)}.hd-callout[data-tone=danger]{--tone:var(--hd-tone-danger)}.hd-callout__icon{color:var(--tone);margin-top:.2rem}.hd-callout__body{flex:1;min-width:0;margin:0}.hd-callout__body>:first-child{margin-top:0}.hd-callout__body>*+*{margin-top:.5rem!important}.hd-callout__title{color:var(--hd-fg);margin:0;font-weight:600}.hgdc-steps{counter-reset:hgdc-step;margin:1.75rem 0 0;padding:0;list-style:none}.hgdc-step{counter-increment:hgdc-step;padding:0 0 1.5rem 2.75rem;position:relative}.hgdc-step+.hgdc-step{margin-top:0!important}.hgdc-step:before{content:counter(hgdc-step);border:1px solid var(--hd-border);background:var(--hd-muted);width:1.75rem;height:1.75rem;color:var(--hd-fg);font:600 .8125rem/1 var(--hd-font-heading);border-radius:999px;place-items:center;display:grid;position:absolute;inset:0 auto auto 0}.hgdc-step:not(:last-child):after{content:"";background:var(--hd-border);width:1px;position:absolute;inset:2.25rem auto .5rem .875rem}.hgdc-step__title{color:var(--hd-fg);font:600 1rem/1.5rem var(--hd-font-heading);letter-spacing:-.01em;margin:0;padding-top:.125rem}.hgdc-step__body{margin-top:.375rem!important}.hgdc-step__body>:last-child{margin-bottom:0}.hgdc-step__body>:first-child{margin-top:0}.hgdc-card-group{grid-template-columns:1fr;gap:1rem;margin-top:1.5rem;display:grid}@media (width>=40em){.hgdc-card-group{grid-template-columns:repeat(min(var(--hgdc-cols,2), 2), minmax(0, 1fr))}}@media (width>=64em){.hgdc-card-group{grid-template-columns:repeat(var(--hgdc-cols,2), minmax(0, 1fr))}}.hgdc-card{border:1px solid var(--hd-border);background:var(--hd-bg);color:var(--hd-muted-fg);transition:border-color .15s ease, background-color .15s ease, transform .16s var(--hd-ease-out);border-radius:1.25rem;flex-direction:column;gap:.375rem;padding:1.125rem 1.25rem 1.25rem;font-size:.9375rem;line-height:1.6;text-decoration:none;display:flex}.hgdc-card__title{color:var(--hd-fg);font:600 1rem/1.4 var(--hd-font-heading);letter-spacing:-.01em;justify-content:space-between;align-items:center;gap:.5rem;display:flex}.hgdc-card__arrow{color:var(--hd-muted-fg);opacity:0;transition:opacity .15s ease, transform .2s var(--hd-ease-out);transform:translate(-4px)}.hgdc-card__body>:first-child{margin-top:0}.hgdc-card__body>*+*{margin-top:.5rem!important}.hgdc-card__body img{border-radius:.5rem}.hgdc-card:has(.hgdc-card__body>img:first-child),.hgdc-card:has(.hgdc-card__body>p:first-child>img:first-child){flex-direction:column-reverse;justify-content:flex-end}a.hgdc-card:hover{border-color:var(--hd-border-strong);background:var(--hd-muted)}a.hgdc-card:hover .hgdc-card__arrow{opacity:1;transform:none}a.hgdc-card:active{transform:scale(.99)}.sl-markdown-content details.hgdc-accordion{padding-inline-start:0}.sl-markdown-content .hgdc-accordion>summary:before{display:none}.hgdc-accordion__body,.hgdc-step__body,.hgdc-card__body{margin-top:0}.hgdc-accordion{border:1px solid var(--hd-border);background:var(--hd-bg);border-radius:1rem}.hgdc-accordion summary{color:var(--hd-fg);font:500 .9375rem/1.4 var(--hd-font-sans);cursor:pointer;border-radius:1rem;align-items:center;gap:.625rem;padding:.875rem 1rem;list-style:none;display:flex}.hgdc-accordion summary::-webkit-details-marker{display:none}.hgdc-accordion summary:hover{background:var(--hd-hover)}.hgdc-accordion__chevron{color:var(--hd-muted-fg);transition:transform .2s var(--hd-ease-out)}.hgdc-accordion[open] .hgdc-accordion__chevron{transform:rotate(90deg)}.hgdc-accordion__body{padding:0 1rem 1rem 2.625rem}.hgdc-accordion__body>:first-child{margin-top:0}.hgdc-accordion-group{border:1px solid var(--hd-border);border-radius:1rem}.hgdc-accordion-group .hgdc-accordion{background:0 0;border:0;border-radius:0;margin:0!important}.hgdc-accordion-group .hgdc-accordion+.hgdc-accordion{border-top:1px solid var(--hd-border)}.hgdc-accordion-group .hgdc-accordion summary{border-radius:0}.hgdc-accordion-group .hgdc-accordion:first-child summary{border-radius:1rem 1rem 0 0}.hgdc-frame{border:1px solid var(--hd-border);background:var(--hd-muted);border-radius:1.25rem;margin-inline:0;padding:.5rem}.hgdc-frame :is(img,video){border-radius:.875rem;width:100%;display:block}.hgdc-frame figcaption{color:var(--hd-muted-fg);text-align:center;padding:.5rem .5rem .125rem;font-size:.8125rem}starlight-tabs .tablist-wrapper{border-bottom:1px solid var(--hd-border)}starlight-tabs [role=tablist]{gap:.5rem;border:0!important}starlight-tabs [role=tab]{color:var(--hd-muted-fg)!important;font:500 .875rem/1 var(--hd-font-sans)!important;border:0!important;border-bottom:2px solid #0000!important;margin:0!important;padding:.625rem .25rem!important}starlight-tabs [role=tab]:hover{color:var(--hd-fg)!important}starlight-tabs [role=tab][aria-selected=true]{border-bottom-color:var(--hd-accent)!important;color:var(--hd-fg)!important}starlight-tabs [role=tabpanel]{margin-top:1.25rem}.hgdc-feedback{border-top:1px solid var(--hd-border);margin-top:3.5rem;padding-top:1.5rem;display:block}.hgdc-feedback [hidden]{display:none!important}.hgdc-feedback [data-step=ask]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.hgdc-feedback__question,.hgdc-feedback label{color:var(--hd-fg);font:500 .875rem/1.4 var(--hd-font-sans);margin:0}.hgdc-feedback__choices{gap:.5rem;display:flex;margin:0!important}.hgdc-feedback button{border:1px solid var(--hd-border);background:var(--hd-bg);height:2rem;color:var(--hd-fg);font:500 .8125rem/1 var(--hd-font-sans);cursor:pointer;transition:background-color .15s ease, transform .16s var(--hd-ease-out);border-radius:999px;align-items:center;gap:.375rem;padding:0 .875rem;display:inline-flex}.hgdc-feedback button:hover{background:var(--hd-muted)}.hgdc-feedback button:active{transform:scale(.97)}.hgdc-feedback button[type=submit]{border-color:var(--hd-accent);background:var(--hd-accent);color:var(--hd-accent-fg)}.hgdc-feedback form{gap:.625rem;display:grid}.hgdc-feedback__done{color:var(--hd-muted-fg);margin:0;font-size:.875rem}.hd-pagination{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-top:2rem;display:grid}.hd-pagination__link{border:1px solid var(--hd-border);color:var(--hd-fg);border-radius:1rem;gap:.25rem;padding:.875rem 1.125rem;text-decoration:none;transition:border-color .15s,background-color .15s;display:grid}.hd-pagination__link--next{text-align:end;grid-column:2}.hd-pagination__link:hover{border-color:var(--hd-border-strong);background:var(--hd-muted)}.hd-pagination__hint{color:var(--hd-muted-fg);align-items:center;gap:.25rem;font-size:.8125rem;display:inline-flex}.hd-pagination__link--next .hd-pagination__hint{justify-content:flex-end}.hd-pagination__title{font:500 .9375rem/1.35 var(--hd-font-heading)}.hd-site-footer{margin:3rem var(--hd-gutter) 0;border-top:1px solid var(--hd-border);padding:2.5rem 0 2rem}.hd-site-footer__top{gap:2.5rem;display:grid}.hd-site-footer__about{align-content:start;justify-items:start;gap:.875rem;display:grid}.hd-site-footer__lede{max-width:22rem;color:var(--hd-muted-fg);margin:0;font-size:.875rem;line-height:1.55}.hd-site-footer__columns{grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem 1.5rem;display:grid}.hd-site-footer__heading{color:var(--hd-fg);font:600 .8125rem/1.3 var(--hd-font-heading);letter-spacing:-.005em;margin:0 0 .625rem}.hd-site-footer__column ul{margin:0;padding:0;list-style:none;display:grid}.hd-site-footer__link{min-height:2rem;color:var(--hd-muted-fg);align-items:center;gap:.5rem;font-size:.875rem;line-height:1.35;text-decoration:none;transition:color .15s;display:inline-flex}.hd-site-footer__link:hover{color:var(--hd-fg)}.hd-site-footer__link img{flex-shrink:0;width:1.125rem;height:1.125rem}.hd-site-footer__bottom{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-top:2.5rem;display:flex}.hd-site-footer__legal{color:var(--hd-muted-fg);margin:0;font-size:.8125rem}.hd-brand--footer{margin-inline-start:-.5rem}.hd-brand--footer .hd-brand__name{font-size:.9375rem}@media (width>=40em){.hd-site-footer__columns{grid-template-columns:repeat(auto-fit,minmax(max(8.5rem,30%),1fr))}}@media (width>=72em){.hd-site-footer__columns{grid-template-columns:repeat(auto-fit,minmax(8.5rem,1fr))}.hd-site-footer__top{grid-template-columns:minmax(12rem,15rem) minmax(0,1fr);gap:3rem}}.hd-socials{gap:.25rem;margin:0;padding:0;list-style:none;display:flex}.hd-palette{border:1px solid var(--hd-border);background:var(--hd-floating);width:min(40rem,100vw - 1.5rem);max-height:min(36rem,100dvh - 6rem);color:var(--hd-fg-2);box-shadow:var(--hd-shadow);border-radius:1.5rem;margin:min(12vh,7rem) auto auto;padding:0;overflow:hidden}.hd-palette::backdrop{background:var(--hd-backdrop)}.hd-palette[open] .hd-palette__box{max-height:inherit;flex-direction:column;display:flex}.hd-palette__field{border-bottom:1px solid var(--hd-border);color:var(--hd-muted-fg);align-items:center;gap:.75rem;padding:.875rem 1rem;display:flex}.hd-palette__field input{min-width:0;min-height:2.75rem;color:var(--hd-fg);font:400 1rem/1.5 var(--hd-font-sans);background:0 0;border:0;outline:none;flex:1}.hd-palette__field input::-webkit-search-cancel-button{display:none}.hd-palette__results{gap:1px;padding:.375rem;display:grid;overflow-y:auto}.hd-palette__results:empty{display:none}.hd-result{width:100%;color:inherit;font:inherit;text-align:start;cursor:pointer;background:0 0;border:0;border-radius:.875rem;gap:.75rem;padding:.625rem .75rem;text-decoration:none;display:flex}.hd-result[aria-selected=true]{background:var(--hd-muted)}.hd-result__icon{width:1.25rem;height:1.25rem;color:var(--hd-muted-fg);font:500 .875rem/1 var(--hd-font-mono);flex-shrink:0;place-items:center;margin-top:.0625rem;display:grid}.hd-result--page .hd-result__icon{background:currentColor;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8Zm0 0v5h5M9 13h6m-6 4h4'/%3E%3C/svg%3E") 50%/1.1rem no-repeat}.hd-result--ask .hd-result__icon{color:var(--hd-accent)}.hd-result__body{gap:.125rem;min-width:0;display:grid}.hd-result__title{color:var(--hd-fg);font:500 .9375rem/1.4 var(--hd-font-sans)}.hd-result__context{color:var(--hd-muted-fg);font-size:.75rem}.hd-result__excerpt{color:var(--hd-muted-fg);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.8125rem;line-height:1.5;display:-webkit-box;overflow:hidden}.hd-result__excerpt mark{color:var(--hd-accent);background:0 0;font-weight:500}.hd-palette__status{overflow-wrap:anywhere;color:var(--hd-muted-fg);margin:0;padding:1rem 1.25rem;font-size:.875rem;line-height:1.5}.hd-palette__results:not(:empty)+.hd-palette__status{clip:rect(0, 0, 0, 0);width:1px;height:1px;position:absolute;overflow:hidden}.hd-palette__hints{border-top:1px solid var(--hd-border);color:var(--hd-muted-fg);gap:1.25rem;padding:.625rem 1rem;font-size:.75rem;display:none}.hd-palette__hints span{align-items:center;gap:.25rem;display:inline-flex}@media (width>=50em){.hd-palette__hints{display:flex}}.hd-askbar{bottom:max(1rem, env(safe-area-inset-bottom,0px));z-index:10;width:min(var(--hd-content-w), calc(100% - 2 * var(--hd-gutter)));border:1px solid var(--hd-border-strong);background:var(--hd-floating);height:3.25rem;box-shadow:var(--hd-shadow);transition:opacity .2s ease, transform .3s var(--hd-ease-out), border-color .15s ease;border-radius:999px;align-items:center;gap:.5rem;margin:2rem auto 0;padding:0 .5rem 0 1.25rem;display:flex;position:sticky}.hd-askbar:focus-within{border-color:var(--hd-accent)}.hd-askbar input{min-width:0;height:100%;color:var(--hd-fg);font:400 1rem/1 var(--hd-font-sans);background:0 0;border:0;outline:none;flex:1}.hd-askbar input::placeholder{color:var(--hd-muted-fg)}:root[data-hgdc-assistant] .hd-askbar{opacity:0;pointer-events:none;transform:translateY(.5rem)}@media (width<=49.99em){.hd-askbar{bottom:max(.75rem, env(safe-area-inset-bottom,0px));height:3rem}.hd-askbar .hd-kbd{display:none}}.hd-send{background:var(--hd-accent);width:2.25rem;height:2.25rem;color:var(--hd-accent-fg);cursor:pointer;transition:opacity .15s ease, transform .16s var(--hd-ease-out);border:0;border-radius:999px;flex-shrink:0;place-items:center;display:grid}.hd-send:active{transform:scale(.94)}.hd-send:disabled{opacity:.4;cursor:default}hgdc-assistant{display:block}hgdc-assistant:before{content:"";z-index:44;background:var(--hd-backdrop);opacity:0;pointer-events:none;transition:opacity .3s;position:fixed;inset:0}.hgdc-panel{z-index:45;border:1px solid var(--hd-border);background:var(--hd-bg);height:min(88dvh,44rem);box-shadow:var(--hd-shadow);visibility:hidden;transition:transform .38s var(--hd-ease-drawer), visibility 0s linear .38s;border-bottom:0;border-radius:1.5rem 1.5rem 0 0;flex-direction:column;display:flex;position:fixed;inset:auto 0 0;transform:translateY(100%)}:root[data-hgdc-assistant] .hgdc-panel{visibility:visible;transition:transform .38s var(--hd-ease-drawer), visibility 0s;transform:none}@media (width<=49.99em){:root[data-hgdc-assistant] hgdc-assistant:before{opacity:1;pointer-events:auto}}.hgdc-panel__grip{background:var(--hd-border-strong);border-radius:999px;width:2.5rem;height:.3125rem;margin:.5rem auto 0}@media (width>=50em){.hgdc-panel{inset:var(--hd-nav-h) 0 0 auto;width:var(--hd-panel-w);border:0;border-inline-start:1px solid var(--hd-border);border-radius:0;height:auto;transform:translate(100%)}.hgdc-panel__grip{display:none}}@media (width>=50em) and (width<=63.99em){:root[data-hgdc-assistant] .hgdc-panel{box-shadow:var(--hd-shadow)}}@media (width>=64em){.hgdc-panel{box-shadow:none}:root[data-hgdc-assistant] .hd-main-frame{margin-inline-end:var(--hd-panel-w)}:root[data-hgdc-assistant] .hd-columns--toc{grid-template-columns:minmax(0,1fr) 0}:root[data-hgdc-assistant] .hd-columns__toc{visibility:hidden}}@media (prefers-reduced-motion:reduce){.hgdc-panel,:root[data-hgdc-assistant] .hgdc-panel,.hd-main-frame,.hd-sidebar .sidebar-pane{transition-duration:0s!important}.hd-askbar{transition:opacity .15s;transform:none!important}}.hgdc-panel__header{justify-content:space-between;align-items:center;gap:.5rem;padding:.625rem .75rem .625rem 1.25rem;display:flex}.hgdc-panel__header h2{color:var(--hd-fg);font:600 1rem/1.3 var(--hd-font-heading);align-items:center;gap:.5rem;margin:0;display:flex}.hgdc-panel__header h2 .hd-icon{color:var(--hd-accent)}.hgdc-panel__tools{gap:.125rem;display:flex}.hgdc-panel__tools [hidden]{display:none}.hgdc-panel__body{overscroll-behavior:contain;flex-direction:column;flex:1;gap:1rem;padding:.5rem 1.25rem 1rem;display:flex;overflow-y:auto}.hgdc-empty{color:var(--hd-muted-fg);text-align:center;margin:auto 0;padding:1rem 0;font-size:.875rem;line-height:1.6}.hgdc-empty[hidden]{display:none}.hgdc-empty p{margin:0}.hgdc-empty__title{color:var(--hd-fg);font:600 1rem/1.4 var(--hd-font-heading);margin-bottom:.375rem!important}.hgdc-msg{color:var(--hd-fg-2);overflow-wrap:anywhere;font-size:.9375rem;line-height:1.65}.hgdc-msg>:first-child{margin-top:0}.hgdc-msg :is(p,ul,ol,pre,h3){margin:.5rem 0 0}.hgdc-msg :is(ul,ol){padding-inline-start:1.25rem}.hgdc-msg h3{color:var(--hd-fg);font:600 .9375rem/1.4 var(--hd-font-heading)}.hgdc-msg pre{border:1px solid var(--hd-border);background:var(--hd-code-bg);border-radius:.875rem;padding:.75rem .875rem;overflow-x:auto}.hgdc-msg code{font-family:var(--hd-font-mono);font-size:.8125rem}.hgdc-msg :not(pre)>code{background:var(--hd-muted);border-radius:.375rem;padding:.1em .35em}.hgdc-msg a{color:var(--hd-fg);text-decoration-color:var(--hd-accent);text-underline-offset:.2em}.hgdc-msg--user{background:var(--hd-muted);max-width:85%;color:var(--hd-fg);border-radius:1.25rem 1.25rem .375rem;align-self:flex-end;padding:.5rem .875rem}.hgdc-msg--pending{color:var(--hd-muted-fg);animation:1.6s ease-in-out infinite hgdc-breathe}@keyframes hgdc-breathe{50%{opacity:.5}}@media (prefers-reduced-motion:reduce){.hgdc-msg--pending{animation:none}}.hgdc-msg--error p{color:var(--hd-tone-danger)}.hgdc-retry{border:1px solid var(--hd-border);background:var(--hd-bg);height:2rem;color:var(--hd-fg);font:500 .8125rem/1 var(--hd-font-sans);cursor:pointer;border-radius:999px;margin-top:.5rem;padding:0 .875rem}.hgdc-ref{background:var(--hd-accent-soft);min-width:1.125rem;height:1.125rem;font:600 .6875rem/1 var(--hd-font-sans);vertical-align:.15em;border-radius:999px;place-items:center;margin-inline:.125rem;padding:0 .25rem;display:inline-grid;color:var(--hd-accent)!important;text-decoration:none!important}.hgdc-sources__label{color:var(--hd-muted-fg);font:500 .75rem/1 var(--hd-font-sans);margin-top:.875rem!important}.hgdc-sources{gap:.375rem;list-style:none;display:grid;margin-top:.5rem!important;padding:0!important}.hgdc-sources a{border:1px solid var(--hd-border);color:var(--hd-fg);border-radius:.875rem;flex-wrap:wrap;align-items:baseline;gap:.375rem;padding:.5rem .75rem;font-size:.8125rem;text-decoration:none;display:flex}.hgdc-sources a:hover{background:var(--hd-muted)}.hgdc-sources__n{color:var(--hd-accent);font-weight:600}.hgdc-sources__section{color:var(--hd-muted-fg);flex-basis:100%;font-size:.75rem}.hgdc-panel__form{border:1px solid var(--hd-border-strong);background:var(--hd-bg);border-radius:1.5rem;align-items:flex-end;gap:.5rem;margin:0 .75rem;padding:.5rem .5rem .5rem 1rem;transition:border-color .15s;display:flex}.hgdc-panel__form:focus-within{border-color:var(--hd-accent)}.hgdc-panel__form textarea{min-height:2.25rem;max-height:10rem;color:var(--hd-fg);font:400 1rem/1.4 var(--hd-font-sans);resize:none;background:0 0;border:0;outline:none;flex:1;padding:.5rem 0}.hgdc-panel__note{color:var(--hd-muted-fg);text-align:center;margin:0;padding:.5rem 1.25rem .875rem;font-size:.6875rem;line-height:1.45}@media (pointer:coarse){.hd-pill,.hd-site-footer__link{min-height:2.75rem}.hd-theme-choice button{width:2.75rem;height:2.75rem}.hd-nav__link{min-height:2.75rem}.hd-icon-button,.hd-search-trigger{width:2.75rem;height:2.75rem}.hd-split{height:2.75rem}.hd-split__more{padding-inline:.75rem}.hd-brand,.hd-menu__list :is(a,button){min-height:2.75rem}.hd-kbd--button{justify-content:center;min-width:2.75rem;min-height:2.75rem}}@media print{.hd-topbar,.hd-sidebar,.hd-columns__toc,.hd-askbar,hgdc-assistant,.hd-site-footer,.hd-page-actions,.hgdc-feedback{display:none!important}.hd-main-frame{margin:0!important;padding:0!important}}@layer starlight.base{:root,::backdrop{--sl-color-white:#fff;--sl-color-gray-1:#edeef3;--sl-color-gray-2:#c1c3c8;--sl-color-gray-3:#888c96;--sl-color-gray-4:#555962;--sl-color-gray-5:#353841;--sl-color-gray-6:#23262f;--sl-color-black:#17181c;--sl-hue-orange:41;--sl-color-orange-low:hsl(var(--sl-hue-orange), 39%, 22%);--sl-color-orange:hsl(var(--sl-hue-orange), 82%, 63%);--sl-color-orange-high:hsl(var(--sl-hue-orange), 82%, 87%);--sl-hue-green:101;--sl-color-green-low:hsl(var(--sl-hue-green), 39%, 22%);--sl-color-green:hsl(var(--sl-hue-green), 82%, 63%);--sl-color-green-high:hsl(var(--sl-hue-green), 82%, 80%);--sl-hue-blue:234;--sl-color-blue-low:hsl(var(--sl-hue-blue), 54%, 20%);--sl-color-blue:hsl(var(--sl-hue-blue), 100%, 60%);--sl-color-blue-high:hsl(var(--sl-hue-blue), 100%, 87%);--sl-hue-purple:281;--sl-color-purple-low:hsl(var(--sl-hue-purple), 39%, 22%);--sl-color-purple:hsl(var(--sl-hue-purple), 82%, 63%);--sl-color-purple-high:hsl(var(--sl-hue-purple), 82%, 89%);--sl-hue-red:339;--sl-color-red-low:hsl(var(--sl-hue-red), 39%, 22%);--sl-color-red:hsl(var(--sl-hue-red), 82%, 63%);--sl-color-red-high:hsl(var(--sl-hue-red), 82%, 87%);--sl-color-accent-low:#17264f;--sl-color-accent:#3369ff;--sl-color-accent-high:#b3c7ff;--sl-color-text:var(--sl-color-gray-2);--sl-color-text-accent:var(--sl-color-accent-high);--sl-color-text-invert:var(--sl-color-accent-low);--sl-color-bg:var(--sl-color-black);--sl-color-bg-nav:var(--sl-color-gray-6);--sl-color-bg-sidebar:var(--sl-color-gray-6);--sl-color-bg-inline-code:var(--sl-color-gray-5);--sl-color-bg-accent:var(--sl-color-accent-high);--sl-color-hairline-light:var(--sl-color-gray-5);--sl-color-hairline:var(--sl-color-gray-6);--sl-color-hairline-shade:var(--sl-color-black);--sl-color-backdrop-overlay:#16181da8;--sl-shadow-sm:0px 1px 1px #0000001f, 0px 2px 1px #0000003d;--sl-shadow-md:0px 8px 4px #00000014, 0px 5px 2px #00000014, 0px 3px 2px #0000001f, 0px 1px 1px #00000026;--sl-shadow-lg:0px 25px 7px #00000008, 0px 16px 6px #0000001a, 0px 9px 5px #16181d54, 0px 4px 4px #000000bf, 0px 4px 2px #00000040;--sl-text-2xs:.75rem;--sl-text-xs:.8125rem;--sl-text-sm:.875rem;--sl-text-base:1rem;--sl-text-lg:1.125rem;--sl-text-xl:1.25rem;--sl-text-2xl:1.5rem;--sl-text-3xl:1.8125rem;--sl-text-4xl:2.1875rem;--sl-text-5xl:2.625rem;--sl-text-6xl:4rem;--sl-text-body:var(--sl-text-base);--sl-text-body-sm:var(--sl-text-xs);--sl-text-code:var(--sl-text-sm);--sl-text-code-sm:var(--sl-text-xs);--sl-text-h1:var(--sl-text-4xl);--sl-text-h2:var(--sl-text-3xl);--sl-text-h3:var(--sl-text-2xl);--sl-text-h4:var(--sl-text-xl);--sl-text-h5:var(--sl-text-lg);--sl-line-height:1.75;--sl-line-height-headings:1.2;--sl-font-system:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--sl-font-system-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--__sl-font:var(--sl-font,var(--sl-font-system)), var(--sl-font-system);--__sl-font-mono:var(--sl-font-mono,var(--sl-font-system-mono)), var(--sl-font-system-mono);--sl-nav-height:3.5rem;--sl-nav-pad-x:1rem;--sl-nav-pad-y:.75rem;--sl-mobile-toc-height:3rem;--sl-sidebar-width:18.75rem;--sl-sidebar-pad-x:1rem;--sl-content-width:45rem;--sl-content-pad-x:1rem;--sl-content-gap-y:1rem;--sl-main-pad:0 0 3vh 0;--sl-menu-button-size:2rem;--sl-nav-gap:var(--sl-content-pad-x);--sl-outline-offset-inside:-.1875rem;--sl-z-index-toc:4;--sl-z-index-menu:5;--sl-z-index-navbar:10;--sl-z-index-skiplink:20}:root[data-theme=light],[data-theme=light] ::backdrop{--sl-color-white:#17181c;--sl-color-gray-1:#23262f;--sl-color-gray-2:#353841;--sl-color-gray-3:#555962;--sl-color-gray-4:#888c96;--sl-color-gray-5:#c1c3c8;--sl-color-gray-6:#edeef3;--sl-color-gray-7:#f6f7f9;--sl-color-black:#fff;--sl-color-orange-high:hsl(var(--sl-hue-orange), 80%, 25%);--sl-color-orange:hsl(var(--sl-hue-orange), 90%, 60%);--sl-color-orange-low:hsl(var(--sl-hue-orange), 90%, 88%);--sl-color-green-high:hsl(var(--sl-hue-green), 80%, 22%);--sl-color-green:hsl(var(--sl-hue-green), 90%, 46%);--sl-color-green-low:hsl(var(--sl-hue-green), 85%, 90%);--sl-color-blue-high:hsl(var(--sl-hue-blue), 80%, 30%);--sl-color-blue:hsl(var(--sl-hue-blue), 90%, 60%);--sl-color-blue-low:hsl(var(--sl-hue-blue), 88%, 90%);--sl-color-purple-high:hsl(var(--sl-hue-purple), 90%, 30%);--sl-color-purple:hsl(var(--sl-hue-purple), 90%, 60%);--sl-color-purple-low:hsl(var(--sl-hue-purple), 80%, 90%);--sl-color-red-high:hsl(var(--sl-hue-red), 80%, 30%);--sl-color-red:hsl(var(--sl-hue-red), 90%, 60%);--sl-color-red-low:hsl(var(--sl-hue-red), 80%, 90%);--sl-color-accent-high:#0f1c8a;--sl-color-accent:#3d50f5;--sl-color-accent-low:#cfd4fc;--sl-color-text-accent:var(--sl-color-accent);--sl-color-text-invert:var(--sl-color-black);--sl-color-bg-nav:var(--sl-color-gray-7);--sl-color-bg-sidebar:var(--sl-color-bg);--sl-color-bg-inline-code:var(--sl-color-gray-6);--sl-color-bg-accent:var(--sl-color-accent);--sl-color-hairline-light:var(--sl-color-gray-6);--sl-color-hairline-shade:var(--sl-color-gray-6);--sl-color-backdrop-overlay:#545864a8;--sl-shadow-sm:0px 1px 1px #0000000f, 0px 2px 1px #0000000f;--sl-shadow-md:0px 8px 4px #00000008, 0px 5px 2px #00000008, 0px 3px 2px #0000000f, 0px 1px 1px #0000000f;--sl-shadow-lg:0px 25px 7px #00000003, 0px 16px 6px #00000008, 0px 9px 5px #16181d14, 0px 4px 4px #00000029, 0px 4px 2px #0000000a}@media (width>=50em){:root{--sl-nav-height:4rem;--sl-nav-pad-x:1.5rem;--sl-text-h1:var(--sl-text-5xl);--sl-text-h2:var(--sl-text-4xl);--sl-text-h3:var(--sl-text-3xl);--sl-text-h4:var(--sl-text-2xl)}}@media (width>=72rem){:root{--sl-content-pad-x:1.5rem;--sl-mobile-toc-height:0rem}}}@layer starlight.reset{*,:before,:after{box-sizing:border-box}*{margin:0}html{color-scheme:dark;accent-color:var(--sl-color-accent);-webkit-text-size-adjust:100%;text-size-adjust:100%}html[data-theme=light]{color-scheme:light}body{font-family:var(--__sl-font);line-height:var(--sl-line-height);-webkit-font-smoothing:antialiased;color:var(--sl-color-text);background-color:var(--sl-color-bg)}[lang]:where(:lang(zh),:lang(ja)){text-autospace:normal}[lang]:where(:not(:lang(zh),:lang(ja))){text-autospace:initial}pre,code,samp,kbd{text-autospace:no-autospace}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6,code{overflow-wrap:break-word}code{font-family:var(--__sl-font-mono)}}@layer starlight.core{.sl-banner:where(.astro-5l3j5psm){--__sl-banner-text:var(--sl-color-banner-text,var(--sl-color-text-invert));padding:var(--sl-nav-pad-y) var(--sl-nav-pad-x);background-color:var(--sl-color-banner-bg,var(--sl-color-bg-accent));color:var(--__sl-banner-text);line-height:var(--sl-line-height-headings);text-align:center;text-wrap:balance;box-shadow:var(--sl-shadow-sm)}.sl-banner:where(.astro-5l3j5psm) a{color:var(--__sl-banner-text)}.content-panel:where(.astro-354kzhd4){padding:1.5rem var(--sl-content-pad-x)}.content-panel:where(.astro-354kzhd4)+.content-panel:where(.astro-354kzhd4){border-top:1px solid var(--sl-color-hairline)}.sl-container:where(.astro-354kzhd4){max-width:var(--sl-content-width)}.sl-container:where(.astro-354kzhd4)>*+*{margin-top:1.5rem}@media (width>=72rem){.sl-container:where(.astro-354kzhd4){margin-inline:var(--sl-content-margin-inline,auto)}}p:where(.astro-3l2t6yg7){border:1px solid var(--sl-color-orange);background-color:var(--sl-color-orange-low);color:var(--sl-color-orange-high);width:max-content;max-width:100%;font-size:var(--sl-text-body-sm);line-height:var(--sl-line-height-headings);text-align:start;align-items:center;gap:.75em;padding:.75em 1em}.hero:where(.astro-hv5tv5qn){grid-template-columns:100%;align-items:center;gap:1rem;padding-bottom:1rem;display:grid}.hero:where(.astro-hv5tv5qn)>img:where(.astro-hv5tv5qn),.hero:where(.astro-hv5tv5qn)>.hero-html:where(.astro-hv5tv5qn){object-fit:contain;width:min(70%,20rem);height:auto;margin-inline:auto}.stack:where(.astro-hv5tv5qn){text-align:center;flex-direction:column;gap:clamp(1.5rem,1.5rem + 1vw,2rem)}.copy:where(.astro-hv5tv5qn){flex-direction:column;align-items:center;gap:1rem}.copy:where(.astro-hv5tv5qn)>:where(.astro-hv5tv5qn){max-width:50ch}h1:where(.astro-hv5tv5qn){font-size:clamp(var(--sl-text-3xl), calc(.25rem + 5vw), var(--sl-text-6xl));line-height:var(--sl-line-height-headings);color:var(--sl-color-white);font-weight:600}.tagline:where(.astro-hv5tv5qn){font-size:clamp(var(--sl-text-base), calc(.0625rem + 2vw), var(--sl-text-xl));color:var(--sl-color-gray-2)}.actions:where(.astro-hv5tv5qn){flex-wrap:wrap;justify-content:center;gap:1rem 2rem}@media (width>=50rem){.hero:where(.astro-hv5tv5qn){grid-template-columns:7fr 4fr;gap:3%;padding-block:clamp(2.5rem,1rem + 10vmin,10rem)}.hero:where(.astro-hv5tv5qn)>img:where(.astro-hv5tv5qn),.hero:where(.astro-hv5tv5qn)>.hero-html:where(.astro-hv5tv5qn){order:2;width:min(100%,25rem)}.stack:where(.astro-hv5tv5qn){text-align:start}.copy:where(.astro-hv5tv5qn){align-items:flex-start}.actions:where(.astro-hv5tv5qn){justify-content:flex-start}}ul:where(.astro-3qvjnafa){padding:0;list-style:none}a:where(.astro-3qvjnafa){--pad-inline:.5rem;padding-block:.25rem;padding-inline:calc(1rem * var(--depth) + var(--pad-inline)) var(--pad-inline);border-radius:.25rem;line-height:1.25;display:block}a:where(.astro-3qvjnafa)[aria-current=true]{color:var(--sl-color-text-accent)}.isMobile:where(.astro-3qvjnafa) a:where(.astro-3qvjnafa){--pad-inline:1rem;justify-content:space-between;gap:var(--pad-inline);border-top:1px solid var(--sl-color-gray-6);color:var(--sl-color-text);font-size:var(--sl-text-sm);outline-offset:var(--sl-outline-offset-inside);border-radius:0;padding-block:.5rem;text-decoration:none;display:flex}.isMobile:where(.astro-3qvjnafa):first-child>li:where(.astro-3qvjnafa):first-child>a:where(.astro-3qvjnafa){border-top:0}.isMobile:where(.astro-3qvjnafa) a:where(.astro-3qvjnafa)[aria-current=true],.isMobile:where(.astro-3qvjnafa) a:where(.astro-3qvjnafa)[aria-current=true]:hover,.isMobile:where(.astro-3qvjnafa) a:where(.astro-3qvjnafa)[aria-current=true]:focus{color:var(--sl-color-white);background-color:unset}.isMobile:where(.astro-3qvjnafa) a:where(.astro-3qvjnafa)[aria-current=true]:after{content:"";background-color:var(--sl-color-text-accent);flex-shrink:0;width:1rem;-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNCAxNCc+PHBhdGggZD0nTTEwLjkxNCA0LjIwNmEuNTgzLjU4MyAwIDAgMC0uODI4IDBMNS43NCA4LjU1NyAzLjkxNCA2LjcyNmEuNTk2LjU5NiAwIDAgMC0uODI4Ljg1N2wyLjI0IDIuMjRhLjU4My41ODMgMCAwIDAgLjgyOCAwbDQuNzYtNC43NmEuNTgzLjU4MyAwIDAgMCAwLS44NTdaJy8+PC9zdmc+Cg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNCAxNCc+PHBhdGggZD0nTTEwLjkxNCA0LjIwNmEuNTgzLjU4MyAwIDAgMC0uODI4IDBMNS43NCA4LjU1NyAzLjkxNCA2LjcyNmEuNTk2LjU5NiAwIDAgMC0uODI4Ljg1N2wyLjI0IDIuMjRhLjU4My41ODMgMCAwIDAgLjgyOCAwbDQuNzYtNC43NmEuNTgzLjU4MyAwIDAgMCAwLS44NTdaJy8+PC9zdmc+Cg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}a:where(.astro-cinj7w7m){clip:rect(0, 0, 0, 0);top:.75rem;position:fixed;inset-inline-start:.75rem}a:where(.astro-cinj7w7m):focus{clip:unset;z-index:var(--sl-z-index-skiplink);color:var(--sl-color-text-invert);background-color:var(--sl-color-text-accent);box-shadow:var(--sl-shadow-lg);padding:.5rem 1rem;text-decoration:none;display:block}}@layer starlight.content{.sl-markdown-content .sl-heading-wrapper{--sl-anchor-icon-size:.8275em;--sl-anchor-icon-gap:.25em;--sl-anchor-icon-space:calc(var(--sl-anchor-icon-size) + var(--sl-anchor-icon-gap));line-height:var(--sl-line-height-headings)}.sl-markdown-content .sl-heading-wrapper:has(>:first-child:is(.sr-only,[hidden])){display:contents}.sl-markdown-content :not(h1,h2,h3,h4,h5,h6,.sl-heading-wrapper)+.sl-heading-wrapper{margin-top:1.5em}.sl-markdown-content .sl-heading-wrapper.level-h1{font-size:var(--sl-text-h1)}.sl-markdown-content .sl-heading-wrapper.level-h2{font-size:var(--sl-text-h2)}.sl-markdown-content .sl-heading-wrapper.level-h3{font-size:var(--sl-text-h3)}.sl-markdown-content .sl-heading-wrapper.level-h4{font-size:var(--sl-text-h4)}.sl-markdown-content .sl-heading-wrapper.level-h5{font-size:var(--sl-text-h5)}.sl-markdown-content .sl-heading-wrapper.level-h6{font-size:var(--sl-text-h6)}.sl-markdown-content .sl-heading-wrapper>:first-child:not([hidden]){padding-inline-end:var(--sl-anchor-icon-space);display:inline}.sl-markdown-content .sl-anchor-link{-webkit-user-select:none;user-select:none;margin-inline-start:calc(-1 * var(--sl-anchor-icon-size));display:inline-flex;position:relative}.sl-markdown-content .sl-heading-wrapper:has(>:first-child:is(.sr-only,[hidden]))>.sl-anchor-link{display:none}.sl-markdown-content .sl-anchor-link:after{content:"";position:absolute;inset:-.25rem -.5rem}.sl-markdown-content .sl-anchor-icon>svg{width:var(--sl-anchor-icon-size);vertical-align:top;transform:translateY(calc((var(--sl-line-height-headings) * 1em - var(--sl-anchor-icon-size)) / 2));display:inline;overflow:visible}@media (hover:hover){.sl-markdown-content .sl-anchor-link{opacity:0}.sl-markdown-content .sl-anchor-link:focus,.sl-markdown-content .sl-heading-wrapper:hover .sl-anchor-link{opacity:1}}.sl-markdown-content :not(a,strong,em,del,span,input,code,br)+:not(a,strong,em,del,span,input,code,br,:where(.not-content *)),.sl-markdown-content :not(a,strong,em,del,span,input,code,br)+:is(astro-island,astro-slot)>:not(a,strong,em,del,span,input,code,br,:where(.not-content *)):first-child{margin-top:var(--sl-content-gap-y)}.sl-markdown-content :not(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6):not(:where(.not-content *)){margin-top:1.5em}.sl-markdown-content li+li:not(:where(.not-content *)),.sl-markdown-content dt+dt:not(:where(.not-content *)),.sl-markdown-content dt+dd:not(:where(.not-content *)),.sl-markdown-content dd+dd:not(:where(.not-content *)){margin-top:.25rem}.sl-markdown-content li:not(:where(.not-content *)){overflow-wrap:anywhere}.sl-markdown-content :is(ol,ul):has(>li>:not(a,strong,em,del,span,input,code,br,script,ol,ul))>li>:is(:last-child:not(a,strong,em,del,span,input,code,br,script,:where(.not-content *)),:not(script):has(~script:last-child):not(:has(~:not(script)))){margin-bottom:1.25rem}.sl-markdown-content dt:not(:where(.not-content *)){font-weight:700}.sl-markdown-content dd:not(:where(.not-content *)){padding-inline-start:1rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6):not(:where(.not-content *)){color:var(--sl-color-white);line-height:var(--sl-line-height-headings);font-weight:600}.sl-markdown-content :is(img,picture,video,canvas,svg,iframe):not(:where(.not-content *)){max-width:100%;height:auto;display:block}.sl-markdown-content h1:not(:where(.not-content *)){font-size:var(--sl-text-h1)}.sl-markdown-content h2:not(:where(.not-content *)){font-size:var(--sl-text-h2)}.sl-markdown-content h3:not(:where(.not-content *)){font-size:var(--sl-text-h3)}.sl-markdown-content h4:not(:where(.not-content *)){font-size:var(--sl-text-h4)}.sl-markdown-content h5:not(:where(.not-content *)){font-size:var(--sl-text-h5)}.sl-markdown-content h6:not(:where(.not-content *)){font-size:var(--sl-text-h6)}.sl-markdown-content a:not(:where(.not-content *)){color:var(--sl-color-text-accent)}.sl-markdown-content a:hover:not(:where(.not-content *)){color:var(--sl-color-white)}.sl-markdown-content code:not(:where(.not-content *)){background-color:var(--sl-color-bg-inline-code);font-size:var(--sl-text-code-sm);margin-block:-.125rem;padding:.125rem .375rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6) code{font-size:inherit}.sl-markdown-content pre:not(:where(.not-content *)){border:1px solid var(--sl-color-gray-5);font-size:var(--sl-text-code);tab-size:2;padding:.75rem 1rem}.sl-markdown-content pre code:not(:where(.not-content *)){all:unset;font-family:var(--__sl-font-mono)}.sl-markdown-content blockquote:not(:where(.not-content *)){border-inline-start:1px solid var(--sl-color-gray-5);padding-inline-start:1rem}.sl-markdown-content table:not(:where(.not-content *)){border-spacing:0;display:block;overflow:auto}.sl-markdown-content :is(th,td):not(:where(.not-content *)){border-bottom:1px solid var(--sl-color-gray-5);vertical-align:baseline;padding:.5rem 1rem}.sl-markdown-content :is(th:first-child,td:first-child):not(:where(.not-content *)){padding-inline-start:0}.sl-markdown-content :is(th:last-child,td:last-child):not(:where(.not-content *)){padding-inline-end:0}.sl-markdown-content th:not(:where(.not-content *)){color:var(--sl-color-white);font-weight:600}.sl-markdown-content th:not([align]):not(:where(.not-content *)){text-align:start}.sl-markdown-content .starlight-aside :is(th,td,hr,blockquote):not(:where(.not-content *)){border-color:var(--sl-color-gray-4)}@supports (border-color:color-mix(in srgb, var(--sl-color-asides-text-accent) 30%, transparent)
2
+ ){.sl-markdown-content .starlight-aside :is(th,td,hr,blockquote):not(:where(.not-content *)){border-color:color-mix(in srgb, var(--sl-color-asides-text-accent) 30%, transparent)}}@supports (border-color:color-mix(in srgb, var(--sl-color-asides-text-accent) 12%, transparent)
3
+ ){.sl-markdown-content .starlight-aside code:not(:where(.not-content *)){background-color:color-mix(in srgb, var(--sl-color-asides-text-accent) 12%, transparent)}}.sl-markdown-content hr:not(:where(.not-content *)){border:0;border-bottom:1px solid var(--sl-color-hairline)}.sl-markdown-content details:not(:where(.not-content *)){--sl-details-border-color:var(--sl-color-gray-5);--sl-details-border-color--hover:var(--sl-color-text-accent);border-inline-start:2px solid var(--sl-details-border-color);padding-inline-start:1rem}.sl-markdown-content details:not([open]):hover:not(:where(.not-content *)),.sl-markdown-content details:has(>summary:hover):not(:where(.not-content *)){border-color:var(--sl-details-border-color--hover)}.sl-markdown-content summary:not(:where(.not-content *)){color:var(--sl-color-white);cursor:pointer;margin-inline-start:-.5rem;padding-inline-start:.5rem;font-weight:600;display:block}.sl-markdown-content details[open]>summary:not(:where(.not-content *)){margin-bottom:1rem}.sl-markdown-content summary:not(:where(.not-content *))::marker,.sl-markdown-content summary:not(:where(.not-content *))::-webkit-details-marker{display:none}.sl-markdown-content summary:not(:where(.not-content *)):before{--sl-details-marker-size:1.25rem;content:"";height:var(--sl-details-marker-size);width:var(--sl-details-marker-size);margin-inline:calc((var(--sl-details-marker-size) / 4) * -1) .25rem;vertical-align:middle;background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.8 11.3 10.6 7a1 1 0 1 0-1.4 1.5l3.5 3.5-3.5 3.5a1 1 0 0 0 0 1.4 1 1 0 0 0 .7.3 1 1 0 0 0 .7-.3l4.2-4.2a1 1 0 0 0 0-1.4Z'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.8 11.3 10.6 7a1 1 0 1 0-1.4 1.5l3.5 3.5-3.5 3.5a1 1 0 0 0 0 1.4 1 1 0 0 0 .7.3 1 1 0 0 0 .7-.3l4.2-4.2a1 1 0 0 0 0-1.4Z'/%3E%3C/svg%3E%0A");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}@media (prefers-reduced-motion:no-preference){.sl-markdown-content summary:not(:where(.not-content *)):before{transition:transform .2s ease-in-out}}.sl-markdown-content details[open]>summary:not(:where(.not-content *)):before{transform:rotate(90deg)}[dir=rtl] .sl-markdown-content summary:not(:where(.not-content *)):before,.sl-markdown-content [dir=rtl] summary:not(:where(.not-content *)):before{transform:rotate(180deg)}.sl-markdown-content summary:not(:where(.not-content *)) p:only-child{display:inline}.sl-markdown-content .starlight-aside details:not(:where(.not-content *)){--sl-details-border-color:var(--sl-color-asides-border);--sl-details-border-color--hover:var(--sl-color-asides-text-accent)}}@layer starlight.components{.starlight-aside{border-inline-start:.25rem solid var(--sl-color-asides-border);color:var(--sl-color-white);padding:1rem}.starlight-aside--note{--sl-color-asides-text-accent:var(--sl-color-blue-high);--sl-color-asides-border:var(--sl-color-blue);background-color:var(--sl-color-blue-low)}.starlight-aside--tip{--sl-color-asides-text-accent:var(--sl-color-purple-high);--sl-color-asides-border:var(--sl-color-purple);background-color:var(--sl-color-purple-low)}.starlight-aside--caution{--sl-color-asides-text-accent:var(--sl-color-orange-high);--sl-color-asides-border:var(--sl-color-orange);background-color:var(--sl-color-orange-low)}.starlight-aside--danger{--sl-color-asides-text-accent:var(--sl-color-red-high);--sl-color-asides-border:var(--sl-color-red);background-color:var(--sl-color-red-low)}.starlight-aside__title{font-size:var(--sl-text-h5);font-weight:600;line-height:var(--sl-line-height-headings);color:var(--sl-color-asides-text-accent);align-items:center;gap:.5rem;display:flex}.starlight-aside__icon{width:1em;height:1em;font-size:1.333em;overflow:visible}.starlight-aside__title+.starlight-aside__content{margin-top:.5rem}.starlight-aside__content:empty{display:none}.starlight-aside__content a{color:var(--sl-color-asides-text-accent)}.sl-link-button:where(.astro-rzvexf2a){font-size:var(--sl-text-sm);outline-offset:.25rem;border:1px solid #0000;border-radius:999rem;align-items:center;gap:.5em;padding:.4375rem 1.125rem;line-height:1.1875;text-decoration:none;display:inline-flex}.sl-link-button:where(.astro-rzvexf2a).primary{background:var(--sl-color-text-accent);border-color:var(--sl-color-text-accent);color:var(--sl-color-black)}.sl-link-button:where(.astro-rzvexf2a).primary:hover{color:var(--sl-color-black)}.sl-link-button:where(.astro-rzvexf2a).secondary{border-color:inherit;color:var(--sl-color-white)}.sl-link-button:where(.astro-rzvexf2a).minimal{color:var(--sl-color-white);padding-inline:0}.sl-link-button:where(.astro-rzvexf2a) svg{flex-shrink:0}@media (width>=50rem){.sl-link-button:where(.astro-rzvexf2a){font-size:var(--sl-text-base);padding:.9375rem 1.25rem}}.sl-markdown-content .sl-link-button:where(.astro-rzvexf2a){margin-inline-end:1rem}.sl-markdown-content .sl-link-button:where(.astro-rzvexf2a):not(:where(p *)){margin-block:1rem}}@layer starlight.utils{.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.sl-hidden{display:none}.sl-flex{display:flex}.sl-block{display:block}@media (width>=50rem){.md\:sl-hidden{display:none}.md\:sl-flex{display:flex}.md\:sl-block{display:block}}@media (width>=72rem){.lg\:sl-hidden{display:none}.lg\:sl-flex{display:flex}.lg\:sl-block{display:block}}[data-theme=light] .light\:sl-hidden,[data-theme=dark] .dark\:sl-hidden{display:none}[dir=rtl] .rtl\:flip:not(:where([dir=rtl] [dir=ltr] *)){transform:matrix(-1,0,0,1,0,0)}}html:not([data-has-toc]){--sl-mobile-toc-height:0rem}html:not([data-has-sidebar]){--sl-content-width:67.5rem}html{scroll-padding-top:calc(1.5rem + var(--sl-nav-height) + var(--sl-mobile-toc-height))}main:where(.astro-usuo27fo){padding:var(--sl-main-pad)}@media (width>=50em){:where(.astro-usuo27fo)[data-has-sidebar]{--sl-content-inline-start:var(--sl-sidebar-width)}}@media (width>=72em){html{scroll-padding-top:calc(1.5rem + var(--sl-nav-height))}}
@@ -1 +1 @@
1
- {"format":1,"project":"jn7dj6vzkgs7n2d16kqjtb99yd8gbdw0","name":"Docs","language":"fr","builtAt":"2026-10-17T23:31:54.239Z","theme":{"primary":"#7c3aed","logo":"/images/logo-clair.svg"},"versions":[{"id":null,"label":null,"isDefault":true}],"pages":[{"path":"/demarrer/premiere-doc/","title":"Ta première doc en cinq minutes","description":"Créer le dossier, écrire docs.json et une page, puis voir le site en local.","version":null,"markdown":"Il te faut Node.js 22 ou plus récent, ou Bun. Tout le reste s’installe avec le paquet `@hgdc/docs`.\n\n1. **Créer le dossier**\n\n Un dépôt Git à part, ou un dossier `docs/` dans le dépôt de ton produit.\n\n ```bash\n mkdir docs && cd docs\n npm init -y\n npm install --save-dev @hgdc/docs\n ```\n\n2. **Écrire docs.json**\n\n À la racine du dossier. Seuls `name` et `navigation` sont obligatoires.\n\n ```json\n {\n \"name\": \"Documentation Acme\",\n \"colors\": { \"primary\": \"#0f766e\" },\n \"navigation\": {\n \"groups\": [{ \"group\": \"Démarrer\", \"pages\": [\"index\", \"installation\"] }]\n }\n }\n ```\n\n3. **Écrire les pages**\n\n Une page par entrée de la navigation : `index.mdx` et `installation.mdx`. Chaque page commence par un titre.\n\n ```mdx\n ---\n title: Installation\n description: Installer Acme en deux minutes.\n ---\n\n Lance la commande suivante :\n ```\n\n4. **Voir le site**\n\n Ajoute les scripts dans `package.json`, puis lance `npm run dev`.\n\n ```json\n {\n \"scripts\": {\n \"dev\": \"hgdc-docs dev\",\n \"build\": \"hgdc-docs build\"\n }\n }\n ```\n\n Le site s’ouvre sur `http://localhost:4321` et se recharge à chaque modification.\n\n> **Note**\n>\n> `hgdc-docs build` écrit le site dans `dist/`. Ajoute `dist/` et `.hgdc-docs/` à ton `.gitignore`.\n\n## Et ensuite\n\n- [Publier avec Host](/guides/publier/) pour mettre le site en ligne.\n- [Écrire en MDX](/guides/ecrire/) pour les titres, les liens, les images et le code.\n- [docs.json](/reference/docs-json/) pour toutes les options."},{"path":"/explications/donnees/","title":"Données et confidentialité","description":"Ce qui est stocké, où, combien de temps, et qui y accède.","version":null,"markdown":"## Ce qui est stocké\n\n| Donnée | Où | Durée |\n| ------------------------------------------------ | ------------------ | ------------------------------ |\n| Pages publiées, en Markdown, et passages indexés | Base de la console | Tant que le projet existe |\n| Questions des visiteurs, réponses, sources | Base de la console | 90 jours |\n| Consommation mensuelle de l’assistant | Base de la console | Tant que l’organisation existe |\n\nLa console ne stocke ni l’adresse IP ni l’identité des visiteurs. L’IP sert seulement, le temps de la requête, à limiter le nombre de questions par minute et par jour.\n\n## Qui traite quoi\n\n- **Le site** est servi par Host.\n- **La recherche du site** tourne dans le navigateur du visiteur : aucune requête ne part.\n- **Les embeddings** des passages et des questions sont calculés par Mistral AI, dans l’Union européenne.\n- **Les réponses** sont rédigées par Claude, le modèle d’Anthropic, appelé directement ou par OpenRouter. La question et les passages trouvés lui sont envoyés.\n\nSans clé d’embeddings, la recherche de l’assistant reste en plein texte : rien ne part chez Mistral.\n\n## Ce que voit l’assistant\n\nUniquement ce que ton site publie : il lit le corpus du site public. Une page qui n’est pas publiée n’existe pas pour lui. Il ne peut ni naviguer sur le web, ni agir : il lit des passages et écrit une réponse.\n\n## Supprimer\n\nSupprimer un projet dans la console efface son index, ses pages et son journal. Le site publié et ton dépôt ne sont pas touchés."},{"path":"/explications/fonctionnement/","title":"Comment ça marche","description":"Du push au site publié, puis à l'assistant qui répond.","version":null,"markdown":"Docs tient en trois pièces : un modèle de site, Host qui le publie, et la console qui l’indexe pour l’assistant.\n\n## 1. Le modèle de site\n\nLe paquet `@hgdc/docs` contient un site Astro Starlight complet. `hgdc-docs build` lit ton `docs.json`, prend tes pages MDX et construit un site statique. Rien ne tourne côté serveur : le site est rapide et ne tombe pas en panne avec la console.\n\nPendant le build, chaque page est aussi convertie en Markdown à partir du HTML final. Les composants sont donc déjà rendus : ce que lit un agent est exactement ce que voit un visiteur.\n\n## 2. La publication par Host\n\nHost lance le build dans GitHub Actions à chaque push, puis sert le dossier `dist/` sur ton domaine. La doc est une source comme une autre : préversion par branche, retour arrière, domaine.\n\n## 3. L’indexation par la console\n\nLa console relit `/_hgdc/corpus.json` sur le site publié : tous les quarts d’heure, ou quand tu cliques sur **Synchroniser**. Elle vérifie que le corpus porte bien l’identifiant du projet, puis :\n\n1. découpe chaque page en passages, un par section (titre `##` ou plus fin) ;\n2. compare avec l’index existant, passage par passage : seuls les passages nouveaux sont traités ;\n3. calcule leur représentation vectorielle (embedding), qui permet de retrouver une reformulation ;\n4. supprime les passages qui ne sont plus publiés.\n\nUn build identique au précédent ne change rien à l’index.\n\n## 4. La réponse\n\nUne question passe par deux recherches : par mots (les termes exacts, comme `docs.json`) et par sens (les reformulations). Les deux classements sont fusionnés, les six meilleurs passages sont donnés au modèle Claude, qui répond en citant ceux qu’il utilise.\n\n> **Note**\n>\n> L’index d’un projet est fermé aux autres : une recherche ne voit que les passages de son propre projet, vérifiés deux fois."},{"path":"/guides/agents/","title":"llms.txt et MCP","description":"Rendre la doc lisible par les outils d'IA, avec llms.txt, des pages en Markdown et un serveur MCP.","version":null,"markdown":"Les assistants de code et les agents lisent la documentation pour écrire du code juste. Docs leur donne trois portes d’entrée, sans rien à configurer.\n\n## llms.txt\n\nChaque site publie à sa racine :\n\n- `/llms.txt` : l’index de la doc au format [llmstxt.org](https://llmstxt.org), une ligne par page avec sa description, rangées par onglet et par groupe. Le même fichier répond aussi sur `/.well-known/llms.txt`.\n- `/llms-full.txt` : toute la doc en un seul fichier Markdown.\n\n## Une page en Markdown\n\nChaque page existe aussi en Markdown à la même adresse suivie de `.md` : `/guides/publier.md` pour `/guides/publier/`. Les pages l’annoncent dans leur `<head>` avec `rel=\"alternate\"`.\n\nEn haut de chaque page, **Copier pour un LLM** copie ce Markdown. Le menu à côté ouvre la page dans Claude ou ChatGPT, ou affiche le Markdown.\n\n## Serveur MCP\n\nChaque projet a un serveur MCP en lecture seule. L’adresse est dans l’aperçu du projet, dans la console :\n\n```text\nhttps://docs.hgdc.ch/mcp/<identifiant du projet>\n```\n\nDans Claude Code :\n\n```bash\nclaude mcp add --transport http acme-docs https://docs.hgdc.ch/mcp/<identifiant du projet>\n```\n\nDans Cursor (`.cursor/mcp.json`) :\n\n```json\n{ \"mcpServers\": { \"acme-docs\": { \"url\": \"https://docs.hgdc.ch/mcp/<identifiant du projet>\" } } }\n```\n\nDans VS Code (`.vscode/mcp.json`) :\n\n```json\n{ \"servers\": { \"acme-docs\": { \"type\": \"http\", \"url\": \"https://docs.hgdc.ch/mcp/<identifiant du projet>\" } } }\n```\n\nL’aperçu du projet donne ces lignes déjà remplies. Le serveur reste ouvert quand l’assistant du site est coupé : il ne fait que chercher, sans modèle.\n\nLe serveur propose trois outils :\n\n| Outil | Rôle |\n| ------------- | -------------------------------------------------------------------------------------------- |\n| `search_docs` | Cherche dans la doc et rend les passages les plus proches, avec l’adresse de chaque section. |\n| `get_page` | Rend une page complète en Markdown, à partir de son chemin. |\n| `list_pages` | Liste les pages avec leur titre et leur chemin. |\n\nLe détail du protocole est dans la [référence MCP](/reference/mcp/)."},{"path":"/guides/assistant/","title":"L'assistant IA","description":"Ce que fait l'assistant, d'où viennent ses réponses, et comment le régler.","version":null,"markdown":"L’assistant ajoute un bouton **Demander à l’IA** en bas à droite de chaque page, et `Ctrl I` l’ouvre au clavier. Le visiteur pose sa question ; l’assistant cherche dans ta doc et répond en quelques phrases, avec des renvois numérotés vers les sections utilisées.\n\n## D’où viennent les réponses\n\n1. La question est cherchée dans les pages publiées de ta doc, et seulement là.\n2. Les passages les plus proches sont donnés au modèle Claude, avec une consigne : répondre à partir de ces passages, citer chaque affirmation, ne rien inventer.\n3. Seuls les passages réellement cités deviennent des sources sous la réponse.\n\nSi rien dans la doc ne correspond, l’assistant répond qu’il ne trouve pas, sans appeler le modèle. Une réponse sans aucune source est traitée de la même façon.\n\n> **Les réponses restent générées par IA**\n>\n> Le widget le rappelle sous chaque échange. Une source citée se vérifie en un clic.\n\n## Activer et désactiver\n\nL’assistant est actif dès que `docs.json` porte l’identifiant `project` et que la console a indexé le site. Pour le couper :\n\n- dans la console, **Assistant › Assistant sur le site** (effet immédiat) ;\n- ou dans `docs.json`, `\"assistant\": { \"enabled\": false }` (au prochain build).\n\n## Quota\n\nChaque organisation dispose d’un nombre de questions par mois, toutes docs confondues : 500 dans l’offre de départ. La console affiche la consommation. Au-delà, l’assistant répond qu’il a atteint sa limite, et HGDC relève le plafond sur demande.\n\nPour éviter qu’un seul visiteur ou un script épuise le quota, chaque visiteur a droit à 6 questions par minute et 40 par jour, et chaque doc à 30 par minute et 200 par jour. HGDC relève le plafond journalier d’une doc sur demande.\n\n## Tester et lire le journal\n\nEn haut de la page **Assistant**, les 30 derniers jours : nombre de questions, part de réponses sourcées, et les **questions sans réponse**, regroupées et classées de la plus posée à la moins posée. Chacune ouvre le journal filtré : c’est la liste des pages à écrire.\n\n**Assistant › Tester l’assistant** pose une question comme un visiteur. Le **journal** garde les questions des 90 derniers jours avec leur état :\n\n| État | Ce que ça veut dire |\n| -------- | ----------------------------------------------------------------- |\n| Répondu | L’assistant a répondu en citant la doc. |\n| Hors doc | Rien dans la doc ne répond. Souvent une page à écrire. |\n| Erreur | Le modèle n’a pas répondu ; le visiteur a été invité à réessayer. |\n\nAu-dessus du journal, cherche une question par ses mots, ou filtre par état : **État › Hors doc** ne garde que les questions sans réponse. Les filtres restent dans l’adresse de la page : tu peux la garder en favori ou l’envoyer à un collègue.\n\n> **Astuce**\n>\n> Lis les questions « hors doc » une fois par semaine : c’est la liste des pages qui manquent, écrite par tes visiteurs."},{"path":"/guides/composants/","title":"Composants","description":"Encadrés, étapes, cartes, onglets et accordéons, disponibles dans chaque page sans import.","version":null,"markdown":"Ces composants s’utilisent directement dans une page `.mdx`, sans `import`. Ils portent les mêmes noms que chez Mintlify.\n\n## Encadrés\n\n> **Note**\n>\n> Une information utile à côté du texte.\n\n> **Astuce**\n>\n> Un conseil qui fait gagner du temps.\n\n> **Attention**\n>\n> Un piège à éviter.\n\n> **Danger**\n>\n> Une action qui détruit des données.\n\n```mdx\n<Note>Une information utile à côté du texte.</Note>\n<Tip title=\"Astuce\">Un conseil qui fait gagner du temps.</Tip>\n<Warning>Un piège à éviter.</Warning>\n<Danger>Une action qui détruit des données.</Danger>\n```\n\n`<Info>` et `<Check>` existent aussi. Chacun accepte un `title`.\n\n## Étapes\n\n1. **Installer**\n\n Ajoute le paquet.\n\n2. **Configurer**\n\n Écris `docs.json`.\n\n```mdx\n<Steps>\n <Step title=\"Installer\">Ajoute le paquet.</Step>\n <Step title=\"Configurer\">Écris `docs.json`.</Step>\n</Steps>\n```\n\n## Cartes\n\n[Avec un lien](/guides/publier/)\n\n[Toute la carte est cliquable.](/guides/publier/)\n\nSans lien\n\nPour présenter une idée.\n\n```mdx\n<CardGroup cols={2}>\n <Card title=\"Avec un lien\" href=\"/guides/publier/\">Toute la carte est cliquable.</Card>\n <Card title=\"Sans lien\">Pour présenter une idée.</Card>\n</CardGroup>\n```\n\n`cols` va de 1 à 4. Sur téléphone, les cartes passent l’une sous l’autre.\n\n## Onglets\n\n```bash\nnpm install --save-dev @hgdc/docs\n```\n\n```bash\nbun add --dev @hgdc/docs\n```\n\n```mdx\n<Tabs>\n <Tab title=\"npm\">…</Tab>\n <Tab title=\"Bun\">…</Tab>\n</Tabs>\n```\n\n## Accordéons\n\nFaut-il un compte HGDC pour écrire ?\n\nNon. Le site se construit sans compte. Le compte sert à la console : publication suivie et assistant.\n\nPuis-je garder mes composants Mintlify ?\n\nCeux de cette page, oui. Les autres s’affichent comme du texte : remplace-les ou écris-nous.\n\n```mdx\n<AccordionGroup>\n <Accordion title=\"Question\">Réponse.</Accordion>\n</AccordionGroup>\n```\n\n## Dans le Markdown publié\n\nChaque composant a une forme Markdown : un encadré devient une citation qui commence par son titre en gras, une étape devient un élément de liste numérotée. C’est cette forme que lisent l’assistant, `llms.txt` et les outils d’IA."},{"path":"/guides/ecrire/","title":"Écrire en MDX","description":"Titres, liens, images, code et métadonnées d'une page.","version":null,"markdown":"Chaque page est un fichier `.mdx` (ou `.md`) : du Markdown, plus des composants. Le chemin du fichier donne l’adresse de la page : `guides/publier.mdx` devient `/guides/publier/`.\n\n## Métadonnées\n\nLe haut de la page, entre deux lignes `---`, décrit la page.\n\n```mdx\n---\ntitle: Publier avec Host\nsidebarTitle: Publier\ndescription: Mettre la doc en ligne et brancher l'assistant.\n---\n```\n\n| Champ | Rôle |\n| -------------- | ---------------------------------------------------------------------------- |\n| `title` | Titre de la page, obligatoire. Aussi le titre de l’onglet du navigateur. |\n| `sidebarTitle` | Libellé plus court dans la barre latérale. |\n| `description` | Une phrase. Reprise par les moteurs de recherche, `llms.txt` et l’assistant. |\n\n## Titres et sections\n\nCommence les sections à `##`. Chaque titre reçoit une ancre (`#publier-avec-host`) : c’est elle que l’assistant cite dans ses sources. Un titre clair donne donc une source claire.\n\n> **Astuce**\n>\n> Une section par question qu’on te pose. L’assistant découpe la doc par titre : une section courte et nommée simplement est retrouvée plus souvent.\n\n## Liens\n\nLes liens internes s’écrivent avec le chemin de la page : `[Publier](/guides/publier/)`. Pour une section : `[le domaine](/guides/publier/#ton-domaine)`.\n\n## Images\n\nRange les images dans `images/`, `img/`, `logo/`, `assets/` ou `static/`, et cite-les avec un chemin qui commence par `/`. Seuls les médias de ces dossiers, le logo et le favicon de `docs.json`, et tout le dossier `public/` (servi à la racine) sont publiés : un fichier oublié ailleurs dans le dépôt ne part jamais en ligne.\n\n```mdx\n![Le tableau de bord](/images/tableau-de-bord.png)\n```\n\nPour une légende, entoure l’image d’un cadre :\n\n```mdx\n<Frame caption=\"Le tableau de bord après la première publication\">\n ![Le tableau de bord](/images/tableau-de-bord.png)\n</Frame>\n```\n\n## Code\n\nLes blocs de code sont colorés et ont un bouton Copier. Indique le langage après les trois accents graves :\n\n````mdx\n```bash\nnpm run build\n```\n````\n\n## Ce qui n’est pas publié\n\nLes fichiers qui commencent par `_` (comme `_brouillon.mdx`), `README.md`, `CHANGELOG.md` et les dossiers `node_modules`, `dist` ou cachés ne deviennent pas des pages."},{"path":"/guides/navigation/","title":"Navigation, onglets et versions","description":"Organiser les pages en groupes, en onglets et en versions dans docs.json.","version":null,"markdown":"La navigation se décrit dans `docs.json`, sous `navigation`. Choisis **une** forme : `pages`, `groups`, `tabs` ou `versions`.\n\n## Pages et groupes\n\nPour une petite doc, une liste de groupes suffit. Un groupe peut contenir d’autres groupes.\n\n```json\n{\n \"navigation\": {\n \"groups\": [\n { \"group\": \"Démarrer\", \"pages\": [\"index\", \"installation\"] },\n {\n \"group\": \"Guides\",\n \"pages\": [\"guides/facturer\", { \"group\": \"Avancé\", \"expanded\": false, \"pages\": [\"guides/webhooks\"] }]\n }\n ]\n }\n}\n```\n\nUne page s’écrit sans extension ni `/` au début : `guides/facturer` pour `guides/facturer.mdx`. Une page citée mais absente fait échouer le build, avec la liste de ce qui manque.\n\n## Onglets\n\nAu-delà d’une vingtaine de pages, sépare les grandes parties en onglets : guides, référence, explications. Les onglets s’affichent en haut de la barre latérale ; chacun a ses propres groupes.\n\n```json\n{\n \"navigation\": {\n \"tabs\": [\n { \"tab\": \"Guides\", \"groups\": [{ \"group\": \"Démarrer\", \"pages\": [\"index\"] }] },\n { \"tab\": \"Référence\", \"groups\": [{ \"group\": \"API\", \"pages\": [\"reference/api\"] }] }\n ]\n }\n}\n```\n\n> **Astuce**\n>\n> Cette doc suit le découpage Diataxis : des guides pour faire, une référence pour vérifier, des explications pour comprendre.\n\n## Versions\n\nQuand ton produit garde plusieurs versions en service, chacune peut avoir sa doc. Le visiteur passe de l’une à l’autre avec un menu en haut de la barre latérale.\n\n```json\n{\n \"navigation\": {\n \"versions\": [\n { \"version\": \"v2\", \"default\": true, \"groups\": [{ \"group\": \"Démarrer\", \"pages\": [\"index\"] }] },\n { \"version\": \"v1\", \"groups\": [{ \"group\": \"Démarrer\", \"pages\": [\"v1/index\"] }] }\n ]\n }\n}\n```\n\nLa version par défaut est celle que lisent l’assistant en priorité et l’index `llms.txt`. Les autres y figurent dans une section « Optional ».\n\n## Précédent et suivant\n\nEn bas de chaque page, les liens Précédent et Suivant suivent l’ordre de la navigation, sans sortir de l’onglet ouvert."},{"path":"/guides/publier/","title":"Publier avec Host","description":"Mettre la doc en ligne avec Host, activer Docs en un clic et brancher l'assistant.","version":null,"markdown":"Host construit ton site à chaque push et le sert depuis son serveur. La console `docs.hgdc.ch` relit ensuite le site publié pour indexer l’assistant.\n\n## Mettre la doc en ligne\n\n1. **Importer le dépôt**\n\n Dans Host, crée un projet à partir de ton dépôt GitHub. Host reconnaît une doc Docs (un `docs.json` et le paquet `@hgdc/docs` dans `package.json`) : il la construit avec `hgdc-docs build` et publie le dossier `dist/`. Aucun fichier de configuration à ajouter.\n\n2. **Fusionner la pull request de Host**\n\n Host propose une pull request qui ajoute son workflow de déploiement. Fusionne-la : la doc part en production.\n\n3. **Pousser**\n\n Chaque push sur la branche principale publie le site en production. Les autres branches ont leur préversion.\n\n## Activer Docs\n\n1. **Cliquer sur « Activer Docs »**\n\n Sur la vue d’ensemble du projet dans Host, la carte **Assistant et recherche avec Docs** propose **Activer Docs**. Host crée le projet dans la console, dans la même organisation. Il faut être admin de l’organisation, et la doc doit déjà être en production.\n\n2. **Publier une fois de plus**\n\n Pousse une modification. Ce build reçoit l’identifiant du projet de la console : le site le porte sans que tu le recopies dans `docs.json`.\n\n3. **Laisser faire**\n\n À chaque mise en production, Host prévient la console, qui relit `/_hgdc/corpus.json` et indexe les pages en quelques secondes. La carte de Host affiche **Docs est activé** et mène à la console. En plus, la console relit le site tous les quarts d’heure : un appel perdu se rattrape seul.\n\n> **Note**\n>\n> Le projet apparaît dans la console dès que tu t’y connectes avec ton compte HGDC. Ses réglages (domaines, assistant) s’y changent comme pour n’importe quel projet.\n\n## Ton domaine\n\nLe domaine se branche dans Host, comme pour n’importe quel site : Host annonce la nouvelle adresse à la console à la mise en production suivante. Si la doc répond sur plusieurs adresses (`docs.acme.ch` et `aide.acme.ch`), ajoute les autres dans **Réglages › Domaines** : l’assistant ne répond qu’aux pages servies par ces adresses.\n\n## Relier un projet existant\n\nLe dossier `dist/` est un site statique, il se dépose chez n’importe quel hébergeur. Hors de Host, ou pour un projet créé directement dans la console, relie la doc à la main.\n\n1. **Créer le projet dans la console**\n\n Sur `docs.hgdc.ch`, ouvre ton organisation, puis **Nouveau projet**. Donne l’adresse de production du site, par exemple `https://docs.acme.ch`.\n\n2. **Copier l'identifiant dans docs.json**\n\n La console affiche une ligne à copier. Ajoute-la dans `docs.json`, puis publie :\n\n ```json\n { \"project\": \"k57a8m2x9q4n1b3c5d7e9f0g2h4j6k8m\" }\n ```\n\n Sans cet identifiant, le site fonctionne mais l’assistant reste caché, et la console refuse d’indexer un site qui ne porte pas le sien.\n\n3. **Synchroniser**\n\n Clique sur **Synchroniser** dans l’aperçu du projet. La console lit `/_hgdc/corpus.json` sur ton site et indexe chaque page, puis relit le site tous les quarts d’heure.\n\n> **Adresse publique seulement**\n>\n> La console n’accepte qu’une adresse `https://` avec un nom de domaine public. Elle ne suit pas les redirections : donne l’adresse finale du site."},{"path":"/guides/theme/","title":"Thème et logo","description":"Poser ta couleur, ton logo et ton favicon dans docs.json.","version":null,"markdown":"Le site suit la DA de HGDC par défaut : gris neutres, coins arrondis, Inter pour le texte. Tu changes trois choses : la couleur, le logo et le favicon.\n\n## Couleur\n\n```json\n{ \"colors\": { \"primary\": \"#0f766e\" } }\n```\n\nLa couleur sert aux liens, à l’onglet actif et aux renvois de l’assistant. Sa teinte est gardée ; sa luminosité est ajustée pour que les liens restent lisibles (contraste de 4,5:1 au moins), en clair comme en sombre.\n\nPour une couleur différente en mode sombre, ajoute `\"dark\": \"#5eead4\"`.\n\n> **Note**\n>\n> Dans la console, **Réglages › Thème** montre l’effet d’une couleur en clair et en sombre, son contraste sur un fond blanc, et prépare la ligne à copier dans `docs.json`.\n\n## Logo\n\n```json\n{ \"logo\": { \"light\": \"/images/logo-clair.svg\", \"dark\": \"/images/logo-sombre.svg\" } }\n```\n\nLe chemin part de la racine du dossier de la doc. Un SVG carré ou large, de 32 pixels de haut environ, rend le mieux. Une seule image : `\"logo\": \"/images/logo.svg\"`.\n\n## Favicon\n\n```json\n{ \"favicon\": \"/images/favicon.svg\" }\n```\n\nSans favicon, le site n’en annonce pas d’autre que `/favicon.svg` s’il existe."},{"path":"/","title":"Bienvenue dans Docs","description":"Ta documentation en MDX, publiée par Host, avec recherche, llms.txt et un assistant IA qui cite ses sources.","version":null,"markdown":"Docs transforme un dossier de pages MDX en site de documentation. Tu écris dans ton dépôt Git, Host publie le site à chaque push, et la console `docs.hgdc.ch` branche un assistant qui répond à tes visiteurs à partir de ta doc, et de rien d’autre.\n\n[Ta première doc](/demarrer/premiere-doc/)\n\n[Un dossier, un fichier `docs.json` et une page : ton site tourne en local en cinq minutes.](/demarrer/premiere-doc/)\n\n[Publier avec Host](/guides/publier/)\n\n[Relie le dépôt à Host : chaque push met le site à jour.](/guides/publier/)\n\n[L'assistant IA](/guides/assistant/)\n\n[Il répond aux questions de tes visiteurs et cite les pages qu’il a utilisées.](/guides/assistant/)\n\n[Pour les agents](/guides/agents/)\n\n[`llms.txt`, une version Markdown de chaque page et un serveur MCP en lecture.](/guides/agents/)\n\n## Ce que tu obtiens\n\n- **Un site rapide et lisible** : navigation par onglets et groupes, versions, mode clair et sombre, mise en page pensée pour le téléphone.\n- **La recherche** : `Ctrl K` sur chaque page, sans service externe. L’index est construit avec le site.\n- **Tes couleurs** : une couleur dans `docs.json` suffit. Le contraste des liens est ajusté pour rester lisible.\n- **Un assistant sourcé** : il cherche dans tes pages, répond en quelques phrases et renvoie vers les sections exactes. S’il ne trouve rien, il le dit.\n- **Une doc lisible par les IA** : `llms.txt`, `llms-full.txt`, un bouton « Copier pour un LLM » et un serveur MCP.\n\n## Compatible avec Mintlify\n\nLe fichier `docs.json` reprend celui de Mintlify : nom, couleurs, logo, navigation en onglets, groupes et versions. Les composants les plus courants (`<Note>`, `<Steps>`, `<Card>`, `<Tabs>`…) fonctionnent sans import. Une doc Mintlify se reprend en général sans réécrire les pages.\n\n> **Tout reste en Suisse quand c'est possible**\n>\n> Le site est servi par Host. Les questions des visiteurs sont gardées 90 jours au plus. Voir [Données et confidentialité](/explications/donnees/)."},{"path":"/reference/api-assistant/","title":"API de l'assistant","description":"La requête que le widget envoie, la réponse et les codes d'erreur.","version":null,"markdown":"Le widget du site appelle une seule route. Tu peux l’appeler toi-même pour intégrer l’assistant dans ton application, depuis une page servie par une adresse déclarée dans la console.\n\n## Requête\n\n```http\nPOST https://docs.hgdc.ch/api/v1/ask\nContent-Type: application/json\nOrigin: https://docs.acme.ch\n```\n\n```json\n{\n \"project\": \"k57a8m2x9q4n1b3c5d7e9f0g2h4j6k8m\",\n \"question\": \"Comment publier ma doc ?\",\n \"page\": \"/guides/publier/\",\n \"previous\": [\"j97f2k8m1q4n6b3c5d7e9f0g2h4j6k8m\"]\n}\n```\n\n| Champ | Rôle |\n| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |\n| `project` | Identifiant du projet. |\n| `question` | 2 à 1 000 caractères. |\n| `page` | Chemin de la page ouverte. Ses passages sont légèrement favorisés. |\n| `previous` | Les `id` des réponses précédentes de la conversation, 3 au plus. L’assistant relit lui-même ce qu’il a répondu, dans les deux dernières heures. |\n\nL’en-tête `Origin` doit être l’adresse du site ou un des domaines déclarés dans **Réglages › Domaines**. Chaque visiteur a droit à 6 questions par minute et 40 par jour.\n\n## Réponse\n\n```json\n{\n \"id\": \"j97f…\",\n \"status\": \"answered\",\n \"answer\": \"Importe le dépôt dans Host[^1], puis synchronise le projet dans la console[^2].\",\n \"sources\": [\n { \"n\": 1, \"title\": \"Publier avec Host\", \"section\": \"Avec Host\", \"url\": \"https://docs.acme.ch/guides/publier/#avec-host\" },\n { \"n\": 2, \"title\": \"Publier avec Host\", \"section\": \"Relier la console\", \"url\": \"https://docs.acme.ch/guides/publier/#relier-la-console\" }\n ]\n}\n```\n\n`answer` est du Markdown simple ; `[^n]` renvoie à la source `n`. `status` vaut `no_answer` quand la doc ne répond pas : `sources` est alors vide.\n\n## Erreurs\n\n| Code HTTP | `error.code` | Quand |\n| --------- | -------------------- | --------------------------------------------------- |\n| 400 | `invalid_request` | Corps illisible ou question trop courte. |\n| 403 | `origin_not_allowed` | La page n’est pas servie par une adresse du projet. |\n| 403 | `assistant_disabled` | L’assistant est coupé dans la console. |\n| 404 | `project_not_found` | Identifiant inconnu. |\n| 409 | `not_indexed` | Le site n’a pas encore été synchronisé. |\n| 429 | `rate_limited` | Trop de questions en une minute. |\n| 429 | `quota_exceeded` | Le quota mensuel de l’organisation est atteint. |\n| 503 | `unavailable` | Le modèle ne répond pas. Réessayer plus tard. |\n\nChaque erreur porte aussi `error.message`, une phrase en français à montrer telle quelle."},{"path":"/reference/cli/","title":"La commande hgdc-docs","description":"Les commandes dev, build et preview, et les variables d'environnement du build.","version":null,"markdown":"`hgdc-docs` est installée avec le paquet `@hgdc/docs`. Elle se lance depuis le dossier de la doc, ou avec le chemin du dossier en argument.\n\n## Commandes\n\n| Commande | Effet |\n| ------------------- | ---------------------------------------------------------------------------------------------------------- |\n| `hgdc-docs dev` | Site local sur `http://localhost:4321`, rechargé à chaque modification. |\n| `hgdc-docs build` | Site statique dans `dist/`, avec la recherche, `llms.txt`, les pages Markdown et le corpus de l’assistant. |\n| `hgdc-docs preview` | Sert le dernier build, pour vérifier avant de pousser. |\n\nOptions : `--port 4000` change le port de `dev` et `preview`, `--help` affiche l’aide.\n\n## Variables d’environnement\n\n| Variable | Rôle |\n| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `HGDC_DOCS_SITE` | Adresse publique du site (`https://docs.acme.ch`). Rend les liens de `llms.txt` absolus et produit le sitemap. Sur Host, l’adresse de production est reprise seule. |\n| `HGDC_DOCS_OUT` | Dossier de sortie, `dist/` par défaut. |\n| `HGDC_DOCS_API` | API de l’assistant, `https://docs.hgdc.ch` par défaut. |\n\n## Ce que contient dist/\n\n| Fichier | Contenu |\n| --------------------------------------------------- | -------------------------------------------------------------- |\n| `index.html`, `<page>/index.html` | Les pages du site. |\n| `<page>.md` | Chaque page en Markdown. |\n| `llms.txt`, `llms-full.txt`, `.well-known/llms.txt` | L’index et la doc complète pour les agents. |\n| `pagefind/` | L’index de la recherche. |\n| `_hgdc/corpus.json` | Le contenu publié, lu par la console pour indexer l’assistant. |"},{"path":"/reference/docs-json/","title":"docs.json","description":"Tous les champs du fichier de configuration d'un site Docs.","version":null,"markdown":"`docs.json` vit à la racine du dossier de la doc. Il reprend le format de Mintlify : les champs que Docs ne gère pas sont acceptés et ignorés. Pour l’autocomplétion dans ton éditeur, ajoute `\"$schema\": \"https://docs.hgdc.ch/docs.schema.json\"`.\n\n## Champs\n\n| Champ | Type | Obligatoire | Rôle |\n| -------------------- | --------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `name` | texte | oui | Nom de la doc, en tête du site et dans `llms.txt`. 80 caractères au plus. |\n| `description` | texte | non | Une phrase de présentation. |\n| `navigation` | objet | oui | Pages, groupes, onglets ou versions. Voir [Navigation](/guides/navigation/). |\n| `project` | texte | non | Identifiant du projet dans la console. Active l’assistant et l’indexation. |\n| `language` | `fr`, `en`, `de`, `it` | non | Langue de l’interface du site. `fr` par défaut. |\n| `base` | texte | non | Sous-chemin où la doc est servie, par exemple `/docs` quand ton application la publie derrière un proxy (`https://app.acme.ch/docs`). Liens, images, recherche, `llms.txt` et pages `.md` le portent ; le site est écrit dans `dist/docs/`. Écris tes liens depuis la racine de la doc (`/guides/publier/`) : le sous-chemin est ajouté au build. |\n| `colors.primary` | couleur `#rrggbb` | non | Couleur des liens et des éléments actifs. |\n| `colors.dark` | couleur `#rrggbb` | non | La même, en mode sombre. |\n| `logo` | chemin, ou `{ light, dark }` | non | Logo affiché en tête. |\n| `favicon` | chemin | non | Icône de l’onglet du navigateur. |\n| `navbar.links` | liste de `{ label, href }` | non | Jusqu’à 5 liens dans la barre du haut (adresses complètes). |\n| `navbar.primary` | `{ label, href }` | non | Bouton mis en avant à droite de la barre du haut. |\n| `footer.socials` | objet | non | Liens vers tes réseaux : `linkedin`, `github`, `gitlab`, `x`, `youtube`, `instagram`, `facebook`, `discord`, `mastodon`, `bluesky`, `website`. |\n| `redirects` | liste de `{ source, destination, permanent }` | non | Anciennes adresses qui mènent aux nouvelles. `source` est un chemin du site (`/guides/ancien`), `destination` un chemin ou une adresse `https://`. `permanent: false` pour une redirection temporaire. 500 au plus. |\n| `assistant.enabled` | oui / non | non | `false` cache l’assistant du site. |\n| `assistant.endpoint` | adresse | non | API de l’assistant, à ne changer que pour un environnement de test. |\n\n## Navigation\n\nQuatre formes, une seule à la fois :\n\n| Forme | Exemple |\n| ---------- | --------------------------------------------------------- |\n| `pages` | `[\"index\", \"installation\"]` |\n| `groups` | `[{ \"group\": \"Démarrer\", \"pages\": [\"index\"] }]` |\n| `tabs` | `[{ \"tab\": \"Guides\", \"groups\": [...] }]` |\n| `versions` | `[{ \"version\": \"v2\", \"default\": true, \"groups\": [...] }]` |\n\nUn groupe accepte `expanded: false` pour être replié par défaut, et peut contenir des groupes.\n\n## Erreurs\n\nUn `docs.json` invalide fait échouer le build avec la liste des problèmes, par exemple :\n\n```text\ndocs.json invalide :\n- colors.primary : couleur attendue au format #rrggbb\n- navigation : utiliser une seule forme parmi versions, tabs, groups ou pages\n```"},{"path":"/reference/mcp/","title":"Serveur MCP","description":"Transport, méthodes et outils du serveur MCP en lecture d'un projet.","version":null,"markdown":"Le serveur suit le [Model Context Protocol](https://modelcontextprotocol.io), transport Streamable HTTP, sans session : chaque requête est indépendante.\n\n```text\nPOST https://docs.hgdc.ch/mcp/<identifiant du projet>\nContent-Type: application/json\nAccept: application/json, text/event-stream\n```\n\nIl répond en JSON (`application/json`), jamais en flux. `GET` et `DELETE` répondent 405. Versions du protocole acceptées : `2025-11-25`, `2025-06-18`, `2025-03-26`.\n\n## Méthodes\n\n| Méthode | Réponse |\n| ------------ | --------------------------------------------------------- |\n| `initialize` | Nom du serveur, capacités (`tools`) et consignes d’usage. |\n| `ping` | Objet vide. |\n| `tools/list` | Les trois outils ci-dessous. |\n| `tools/call` | Le résultat de l’outil, en texte. |\n\nUne notification (message sans `id`) reçoit un 202 sans corps.\n\n## Outils\n\n### search_docs\n\n| Paramètre | Type | Rôle |\n| --------- | -------------- | --------------------------------- |\n| `query` | texte | Question ou mots-clés. |\n| `limit` | entier, 1 à 10 | Nombre de passages, 5 par défaut. |\n\nRend les passages trouvés, chacun avec son titre, sa section, son adresse et son texte.\n\n### get_page\n\n| Paramètre | Type | Rôle |\n| --------- | ----- | ---------------------------------------------------------------- |\n| `path` | texte | Chemin de la page (`/guides/publier/`), ou son adresse complète. |\n\nRend la page en Markdown, précédée de son adresse.\n\n### list_pages\n\nSans paramètre. Rend la liste des pages publiées.\n\n## Limites\n\nLe serveur est public et en lecture seule : il ne donne accès qu’à ce que le site publie déjà. Chaque projet accepte 300 requêtes par minute, chaque visiteur 60. Au-delà, la réponse est un 429."}]}
1
+ {"format":1,"project":"jn7dj6vzkgs7n2d16kqjtb99yd8gbdw0","name":"Docs","language":"fr","builtAt":"2026-10-18T10:16:52.072Z","theme":{"primary":"#7c3aed","logo":"/images/logo-clair.svg"},"versions":[{"id":null,"label":null,"isDefault":true}],"pages":[{"path":"/demarrer/premiere-doc/","title":"Ta première doc en cinq minutes","description":"Créer le dossier, écrire docs.json et une page, puis voir le site en local.","version":null,"markdown":"Il te faut Node.js 22 ou plus récent, ou Bun. Tout le reste s’installe avec le paquet `@hgdc/docs`.\n\n1. **Créer le dossier**\n\n Un dépôt Git à part, ou un dossier `docs/` dans le dépôt de ton produit.\n\n ```bash\n mkdir docs && cd docs\n npm init -y\n npm install --save-dev @hgdc/docs\n ```\n\n2. **Écrire docs.json**\n\n À la racine du dossier. Seuls `name` et `navigation` sont obligatoires.\n\n ```json\n {\n \"name\": \"Documentation Acme\",\n \"colors\": { \"primary\": \"#0f766e\" },\n \"navigation\": {\n \"groups\": [{ \"group\": \"Démarrer\", \"pages\": [\"index\", \"installation\"] }]\n }\n }\n ```\n\n3. **Écrire les pages**\n\n Une page par entrée de la navigation : `index.mdx` et `installation.mdx`. Chaque page commence par un titre.\n\n ```mdx\n ---\n title: Installation\n description: Installer Acme en deux minutes.\n ---\n\n Lance la commande suivante :\n ```\n\n4. **Voir le site**\n\n Ajoute les scripts dans `package.json`, puis lance `npm run dev`.\n\n ```json\n {\n \"scripts\": {\n \"dev\": \"hgdc-docs dev\",\n \"build\": \"hgdc-docs build\"\n }\n }\n ```\n\n Le site s’ouvre sur `http://localhost:4321` et se recharge à chaque modification.\n\n> **Note**\n>\n> `hgdc-docs build` écrit le site dans `dist/`. Ajoute `dist/` et `.hgdc-docs/` à ton `.gitignore`.\n\n## Et ensuite\n\n- [Publier avec Host](/guides/publier/) pour mettre le site en ligne.\n- [Écrire en MDX](/guides/ecrire/) pour les titres, les liens, les images et le code.\n- [docs.json](/reference/docs-json/) pour toutes les options."},{"path":"/explications/donnees/","title":"Données et confidentialité","description":"Ce qui est stocké, où, combien de temps, et qui y accède.","version":null,"markdown":"## Ce qui est stocké\n\n| Donnée | Où | Durée |\n| ------------------------------------------------ | ------------------ | ------------------------------ |\n| Pages publiées, en Markdown, et passages indexés | Base de la console | Tant que le projet existe |\n| Questions des visiteurs, réponses, sources | Base de la console | 90 jours |\n| Consommation mensuelle de l’assistant | Base de la console | Tant que l’organisation existe |\n\nLa console ne stocke ni l’adresse IP ni l’identité des visiteurs. L’IP sert seulement, le temps de la requête, à limiter le nombre de questions par minute et par jour.\n\n## Qui traite quoi\n\n- **Le site** est servi par Host.\n- **La recherche du site** tourne dans le navigateur du visiteur : aucune requête ne part.\n- **Les embeddings** des passages et des questions sont calculés par Mistral AI, dans l’Union européenne.\n- **Les réponses** sont rédigées par Claude, le modèle d’Anthropic, appelé directement ou par OpenRouter. La question et les passages trouvés lui sont envoyés.\n\nSans clé d’embeddings, la recherche de l’assistant reste en plein texte : rien ne part chez Mistral.\n\n## Ce que voit l’assistant\n\nUniquement ce que ton site publie : il lit le corpus du site public. Une page qui n’est pas publiée n’existe pas pour lui. Il ne peut ni naviguer sur le web, ni agir : il lit des passages et écrit une réponse.\n\n## Supprimer\n\nSupprimer un projet dans la console efface son index, ses pages et son journal. Le site publié et ton dépôt ne sont pas touchés."},{"path":"/explications/fonctionnement/","title":"Comment ça marche","description":"Du push au site publié, puis à l'assistant qui répond.","version":null,"markdown":"Docs tient en trois pièces : un modèle de site, Host qui le publie, et la console qui l’indexe pour l’assistant.\n\n## 1. Le modèle de site\n\nLe paquet `@hgdc/docs` contient un site Astro Starlight complet. `hgdc-docs build` lit ton `docs.json`, prend tes pages MDX et construit un site statique. Rien ne tourne côté serveur : le site est rapide et ne tombe pas en panne avec la console.\n\nPendant le build, chaque page est aussi convertie en Markdown à partir du HTML final. Les composants sont donc déjà rendus : ce que lit un agent est exactement ce que voit un visiteur.\n\n## 2. La publication par Host\n\nHost lance le build dans GitHub Actions à chaque push, puis sert le dossier `dist/` sur ton domaine. La doc est une source comme une autre : préversion par branche, retour arrière, domaine.\n\n## 3. L’indexation par la console\n\nLa console relit `/_hgdc/corpus.json` sur le site publié : tous les quarts d’heure, ou quand tu cliques sur **Synchroniser**. Elle vérifie que le corpus porte bien l’identifiant du projet, puis :\n\n1. découpe chaque page en passages, un par section (titre `##` ou plus fin) ;\n2. compare avec l’index existant, passage par passage : seuls les passages nouveaux sont traités ;\n3. calcule leur représentation vectorielle (embedding), qui permet de retrouver une reformulation ;\n4. supprime les passages qui ne sont plus publiés.\n\nUn build identique au précédent ne change rien à l’index.\n\n## 4. La réponse\n\nUne question passe par deux recherches : par mots (les termes exacts, comme `docs.json`) et par sens (les reformulations). Les deux classements sont fusionnés, les six meilleurs passages sont donnés au modèle Claude, qui répond en citant ceux qu’il utilise.\n\n> **Note**\n>\n> L’index d’un projet est fermé aux autres : une recherche ne voit que les passages de son propre projet, vérifiés deux fois."},{"path":"/guides/agents/","title":"llms.txt et MCP","description":"Rendre la doc lisible par les outils d'IA, avec llms.txt, des pages en Markdown et un serveur MCP.","version":null,"markdown":"Les assistants de code et les agents lisent la documentation pour écrire du code juste. Docs leur donne trois portes d’entrée, sans rien à configurer.\n\n## llms.txt\n\nChaque site publie à sa racine :\n\n- `/llms.txt` : l’index de la doc au format [llmstxt.org](https://llmstxt.org), une ligne par page avec sa description, rangées par onglet et par groupe. Le même fichier répond aussi sur `/.well-known/llms.txt`.\n- `/llms-full.txt` : toute la doc en un seul fichier Markdown.\n\n## Une page en Markdown\n\nChaque page existe aussi en Markdown à la même adresse suivie de `.md` : `/guides/publier.md` pour `/guides/publier/`. Les pages l’annoncent dans leur `<head>` avec `rel=\"alternate\"`.\n\nEn haut de chaque page, **Copier pour un LLM** copie ce Markdown. Le menu à côté ouvre la page dans Claude ou ChatGPT, ou affiche le Markdown.\n\n## Serveur MCP\n\nChaque projet a un serveur MCP en lecture seule. L’adresse est dans l’aperçu du projet, dans la console :\n\n```text\nhttps://docs.hgdc.ch/mcp/<identifiant du projet>\n```\n\nDans Claude Code :\n\n```bash\nclaude mcp add --transport http acme-docs https://docs.hgdc.ch/mcp/<identifiant du projet>\n```\n\nDans Cursor (`.cursor/mcp.json`) :\n\n```json\n{ \"mcpServers\": { \"acme-docs\": { \"url\": \"https://docs.hgdc.ch/mcp/<identifiant du projet>\" } } }\n```\n\nDans VS Code (`.vscode/mcp.json`) :\n\n```json\n{ \"servers\": { \"acme-docs\": { \"type\": \"http\", \"url\": \"https://docs.hgdc.ch/mcp/<identifiant du projet>\" } } }\n```\n\nL’aperçu du projet donne ces lignes déjà remplies. Le serveur reste ouvert quand l’assistant du site est coupé : il ne fait que chercher, sans modèle.\n\nLe serveur propose trois outils :\n\n| Outil | Rôle |\n| ------------- | -------------------------------------------------------------------------------------------- |\n| `search_docs` | Cherche dans la doc et rend les passages les plus proches, avec l’adresse de chaque section. |\n| `get_page` | Rend une page complète en Markdown, à partir de son chemin. |\n| `list_pages` | Liste les pages avec leur titre et leur chemin. |\n\nLe détail du protocole est dans la [référence MCP](/reference/mcp/)."},{"path":"/guides/assistant/","title":"L'assistant IA","description":"Ce que fait l'assistant, d'où viennent ses réponses, et comment le régler.","version":null,"markdown":"L’assistant ajoute un bouton **Demander à l’IA** en bas à droite de chaque page, et `Ctrl I` l’ouvre au clavier. Le visiteur pose sa question ; l’assistant cherche dans ta doc et répond en quelques phrases, avec des renvois numérotés vers les sections utilisées.\n\n## D’où viennent les réponses\n\n1. La question est cherchée dans les pages publiées de ta doc, et seulement là.\n2. Les passages les plus proches sont donnés au modèle Claude, avec une consigne : répondre à partir de ces passages, citer chaque affirmation, ne rien inventer.\n3. Seuls les passages réellement cités deviennent des sources sous la réponse.\n\nSi rien dans la doc ne correspond, l’assistant répond qu’il ne trouve pas, sans appeler le modèle. Une réponse sans aucune source est traitée de la même façon.\n\n> **Les réponses restent générées par IA**\n>\n> Le widget le rappelle sous chaque échange. Une source citée se vérifie en un clic.\n\n## Activer et désactiver\n\nL’assistant est actif dès que `docs.json` porte l’identifiant `project` et que la console a indexé le site. Pour le couper :\n\n- dans la console, **Assistant › Assistant sur le site** (effet immédiat) ;\n- ou dans `docs.json`, `\"assistant\": { \"enabled\": false }` (au prochain build).\n\n## Quota\n\nChaque organisation dispose d’un nombre de questions par mois, toutes docs confondues : 500 dans l’offre de départ. La console affiche la consommation. Au-delà, l’assistant répond qu’il a atteint sa limite, et HGDC relève le plafond sur demande.\n\nPour éviter qu’un seul visiteur ou un script épuise le quota, chaque visiteur a droit à 6 questions par minute et 40 par jour, et chaque doc à 30 par minute et 200 par jour. HGDC relève le plafond journalier d’une doc sur demande.\n\n## Tester et lire le journal\n\nEn haut de la page **Assistant**, les 30 derniers jours : nombre de questions, part de réponses sourcées, et les **questions sans réponse**, regroupées et classées de la plus posée à la moins posée. Chacune ouvre le journal filtré : c’est la liste des pages à écrire.\n\n**Assistant › Tester l’assistant** pose une question comme un visiteur. Le **journal** garde les questions des 90 derniers jours avec leur état :\n\n| État | Ce que ça veut dire |\n| -------- | ----------------------------------------------------------------- |\n| Répondu | L’assistant a répondu en citant la doc. |\n| Hors doc | Rien dans la doc ne répond. Souvent une page à écrire. |\n| Erreur | Le modèle n’a pas répondu ; le visiteur a été invité à réessayer. |\n\nAu-dessus du journal, cherche une question par ses mots, ou filtre par état : **État › Hors doc** ne garde que les questions sans réponse. Les filtres restent dans l’adresse de la page : tu peux la garder en favori ou l’envoyer à un collègue.\n\n> **Astuce**\n>\n> Lis les questions « hors doc » une fois par semaine : c’est la liste des pages qui manquent, écrite par tes visiteurs."},{"path":"/guides/composants/","title":"Composants","description":"Encadrés, étapes, cartes, onglets et accordéons, disponibles dans chaque page sans import.","version":null,"markdown":"Ces composants s’utilisent directement dans une page `.mdx`, sans `import`. Ils portent les mêmes noms que chez Mintlify.\n\n## Encadrés\n\n> **Note**\n>\n> Une information utile à côté du texte.\n\n> **Astuce**\n>\n> Un conseil qui fait gagner du temps.\n\n> **Attention**\n>\n> Un piège à éviter.\n\n> **Danger**\n>\n> Une action qui détruit des données.\n\n```mdx\n<Note>Une information utile à côté du texte.</Note>\n<Tip title=\"Astuce\">Un conseil qui fait gagner du temps.</Tip>\n<Warning>Un piège à éviter.</Warning>\n<Danger>Une action qui détruit des données.</Danger>\n```\n\n`<Info>` et `<Check>` existent aussi. Chacun accepte un `title`.\n\n## Étapes\n\n1. **Installer**\n\n Ajoute le paquet.\n\n2. **Configurer**\n\n Écris `docs.json`.\n\n```mdx\n<Steps>\n <Step title=\"Installer\">Ajoute le paquet.</Step>\n <Step title=\"Configurer\">Écris `docs.json`.</Step>\n</Steps>\n```\n\n## Cartes\n\n[Avec un lien](/guides/publier/)\n\n[Toute la carte est cliquable.](/guides/publier/)\n\nSans lien\n\nPour présenter une idée.\n\n```mdx\n<CardGroup cols={2}>\n <Card title=\"Avec un lien\" href=\"/guides/publier/\">Toute la carte est cliquable.</Card>\n <Card title=\"Sans lien\">Pour présenter une idée.</Card>\n</CardGroup>\n```\n\n`cols` va de 1 à 4. Sur téléphone, les cartes passent l’une sous l’autre.\n\n## Onglets\n\n```bash\nnpm install --save-dev @hgdc/docs\n```\n\n```bash\nbun add --dev @hgdc/docs\n```\n\n```mdx\n<Tabs>\n <Tab title=\"npm\">…</Tab>\n <Tab title=\"Bun\">…</Tab>\n</Tabs>\n```\n\n## Accordéons\n\nFaut-il un compte HGDC pour écrire ?\n\nNon. Le site se construit sans compte. Le compte sert à la console : publication suivie et assistant.\n\nPuis-je garder mes composants Mintlify ?\n\nCeux de cette page, oui. Les autres s’affichent comme du texte : remplace-les ou écris-nous.\n\n```mdx\n<AccordionGroup>\n <Accordion title=\"Question\">Réponse.</Accordion>\n</AccordionGroup>\n```\n\n## Dans le Markdown publié\n\nChaque composant a une forme Markdown : un encadré devient une citation qui commence par son titre en gras, une étape devient un élément de liste numérotée. C’est cette forme que lisent l’assistant, `llms.txt` et les outils d’IA."},{"path":"/guides/ecrire/","title":"Écrire en MDX","description":"Titres, liens, images, code et métadonnées d'une page.","version":null,"markdown":"Chaque page est un fichier `.mdx` (ou `.md`) : du Markdown, plus des composants. Le chemin du fichier donne l’adresse de la page : `guides/publier.mdx` devient `/guides/publier/`.\n\n## Métadonnées\n\nLe haut de la page, entre deux lignes `---`, décrit la page.\n\n```mdx\n---\ntitle: Publier avec Host\nsidebarTitle: Publier\ndescription: Mettre la doc en ligne et brancher l'assistant.\n---\n```\n\n| Champ | Rôle |\n| -------------- | ---------------------------------------------------------------------------- |\n| `title` | Titre de la page, obligatoire. Aussi le titre de l’onglet du navigateur. |\n| `sidebarTitle` | Libellé plus court dans la barre latérale. |\n| `description` | Une phrase. Reprise par les moteurs de recherche, `llms.txt` et l’assistant. |\n\n## Titres et sections\n\nCommence les sections à `##`. Chaque titre reçoit une ancre (`#publier-avec-host`) : c’est elle que l’assistant cite dans ses sources. Un titre clair donne donc une source claire.\n\n> **Astuce**\n>\n> Une section par question qu’on te pose. L’assistant découpe la doc par titre : une section courte et nommée simplement est retrouvée plus souvent.\n\n## Liens\n\nLes liens internes s’écrivent avec le chemin de la page : `[Publier](/guides/publier/)`. Pour une section : `[le domaine](/guides/publier/#ton-domaine)`.\n\n## Images\n\nRange les images dans `images/`, `img/`, `logo/`, `assets/` ou `static/`, et cite-les avec un chemin qui commence par `/`. Seuls les médias de ces dossiers, le logo et le favicon de `docs.json`, et tout le dossier `public/` (servi à la racine) sont publiés : un fichier oublié ailleurs dans le dépôt ne part jamais en ligne.\n\n```mdx\n![Le tableau de bord](/images/tableau-de-bord.png)\n```\n\nPour une légende, entoure l’image d’un cadre :\n\n```mdx\n<Frame caption=\"Le tableau de bord après la première publication\">\n ![Le tableau de bord](/images/tableau-de-bord.png)\n</Frame>\n```\n\n## Code\n\nLes blocs de code sont colorés et ont un bouton Copier. Indique le langage après les trois accents graves :\n\n````mdx\n```bash\nnpm run build\n```\n````\n\n## Ce qui n’est pas publié\n\nLes fichiers qui commencent par `_` (comme `_brouillon.mdx`), `README.md`, `CHANGELOG.md` et les dossiers `node_modules`, `dist` ou cachés ne deviennent pas des pages."},{"path":"/guides/navigation/","title":"Navigation, onglets et versions","description":"Organiser les pages en groupes, en onglets et en versions dans docs.json.","version":null,"markdown":"La navigation se décrit dans `docs.json`, sous `navigation`. Choisis **une** forme : `pages`, `groups`, `tabs` ou `versions`.\n\n## Pages et groupes\n\nPour une petite doc, une liste de groupes suffit. Un groupe peut contenir d’autres groupes.\n\n```json\n{\n \"navigation\": {\n \"groups\": [\n { \"group\": \"Démarrer\", \"pages\": [\"index\", \"installation\"] },\n {\n \"group\": \"Guides\",\n \"pages\": [\"guides/facturer\", { \"group\": \"Avancé\", \"expanded\": false, \"pages\": [\"guides/webhooks\"] }]\n }\n ]\n }\n}\n```\n\nUne page s’écrit sans extension ni `/` au début : `guides/facturer` pour `guides/facturer.mdx`. Une page citée mais absente fait échouer le build, avec la liste de ce qui manque.\n\n## Onglets\n\nAu-delà d’une vingtaine de pages, sépare les grandes parties en onglets : guides, référence, explications. Les onglets s’affichent en haut de la barre latérale ; chacun a ses propres groupes.\n\n```json\n{\n \"navigation\": {\n \"tabs\": [\n { \"tab\": \"Guides\", \"groups\": [{ \"group\": \"Démarrer\", \"pages\": [\"index\"] }] },\n { \"tab\": \"Référence\", \"groups\": [{ \"group\": \"API\", \"pages\": [\"reference/api\"] }] }\n ]\n }\n}\n```\n\n> **Astuce**\n>\n> Cette doc suit le découpage Diataxis : des guides pour faire, une référence pour vérifier, des explications pour comprendre.\n\n## Versions\n\nQuand ton produit garde plusieurs versions en service, chacune peut avoir sa doc. Le visiteur passe de l’une à l’autre avec un menu en haut de la barre latérale.\n\n```json\n{\n \"navigation\": {\n \"versions\": [\n { \"version\": \"v2\", \"default\": true, \"groups\": [{ \"group\": \"Démarrer\", \"pages\": [\"index\"] }] },\n { \"version\": \"v1\", \"groups\": [{ \"group\": \"Démarrer\", \"pages\": [\"v1/index\"] }] }\n ]\n }\n}\n```\n\nLa version par défaut est celle que lisent l’assistant en priorité et l’index `llms.txt`. Les autres y figurent dans une section « Optional ».\n\n## Précédent et suivant\n\nEn bas de chaque page, les liens Précédent et Suivant suivent l’ordre de la navigation, sans sortir de l’onglet ouvert."},{"path":"/guides/publier/","title":"Publier avec Host","description":"Mettre la doc en ligne avec Host, activer Docs en un clic et brancher l'assistant.","version":null,"markdown":"Host construit ton site à chaque push et le sert depuis son serveur. La console `docs.hgdc.ch` relit ensuite le site publié pour indexer l’assistant.\n\n## Mettre la doc en ligne\n\n1. **Importer le dépôt**\n\n Dans Host, crée un projet à partir de ton dépôt GitHub. Host reconnaît une doc Docs (un `docs.json` et le paquet `@hgdc/docs` dans `package.json`) : il la construit avec `hgdc-docs build` et publie le dossier `dist/`. Aucun fichier de configuration à ajouter.\n\n2. **Fusionner la pull request de Host**\n\n Host propose une pull request qui ajoute son workflow de déploiement. Fusionne-la : la doc part en production.\n\n3. **Pousser**\n\n Chaque push sur la branche principale publie le site en production. Les autres branches ont leur préversion.\n\n## Activer Docs\n\n1. **Cliquer sur « Activer Docs »**\n\n Sur la vue d’ensemble du projet dans Host, la carte **Assistant et recherche avec Docs** propose **Activer Docs**. Host crée le projet dans la console, dans la même organisation. Il faut être admin de l’organisation, et la doc doit déjà être en production.\n\n2. **Publier une fois de plus**\n\n Pousse une modification. Ce build reçoit l’identifiant du projet de la console : le site le porte sans que tu le recopies dans `docs.json`.\n\n3. **Laisser faire**\n\n À chaque mise en production, Host prévient la console, qui relit `/_hgdc/corpus.json` et indexe les pages en quelques secondes. La carte de Host affiche **Docs est activé** et mène à la console. En plus, la console relit le site tous les quarts d’heure : un appel perdu se rattrape seul.\n\n> **Note**\n>\n> Le projet apparaît dans la console dès que tu t’y connectes avec ton compte HGDC. Ses réglages (domaines, assistant) s’y changent comme pour n’importe quel projet.\n\n## Ton domaine\n\nLe domaine se branche dans Host, comme pour n’importe quel site : Host annonce la nouvelle adresse à la console à la mise en production suivante. Si la doc répond sur plusieurs adresses (`docs.acme.ch` et `aide.acme.ch`), ajoute les autres dans **Réglages › Domaines** : l’assistant ne répond qu’aux pages servies par ces adresses.\n\n## Relier un projet existant\n\nLe dossier `dist/` est un site statique, il se dépose chez n’importe quel hébergeur. Hors de Host, ou pour un projet créé directement dans la console, relie la doc à la main.\n\n1. **Créer le projet dans la console**\n\n Sur `docs.hgdc.ch`, ouvre ton organisation, puis **Nouveau projet**. Donne l’adresse de production du site, par exemple `https://docs.acme.ch`.\n\n2. **Copier l'identifiant dans docs.json**\n\n La console affiche une ligne à copier. Ajoute-la dans `docs.json`, puis publie :\n\n ```json\n { \"project\": \"k57a8m2x9q4n1b3c5d7e9f0g2h4j6k8m\" }\n ```\n\n Sans cet identifiant, le site fonctionne mais l’assistant reste caché, et la console refuse d’indexer un site qui ne porte pas le sien.\n\n3. **Synchroniser**\n\n Clique sur **Synchroniser** dans l’aperçu du projet. La console lit `/_hgdc/corpus.json` sur ton site et indexe chaque page, puis relit le site tous les quarts d’heure.\n\n> **Adresse publique seulement**\n>\n> La console n’accepte qu’une adresse `https://` avec un nom de domaine public. Elle ne suit pas les redirections : donne l’adresse finale du site."},{"path":"/guides/theme/","title":"Thème et logo","description":"Poser ta couleur, ton logo et ton favicon dans docs.json.","version":null,"markdown":"Le site suit la DA de HGDC par défaut : gris neutres, coins arrondis, Inter pour le texte. Tu changes trois choses : la couleur, le logo et le favicon.\n\n## Couleur\n\n```json\n{ \"colors\": { \"primary\": \"#0f766e\" } }\n```\n\nLa couleur sert aux liens, à l’onglet actif et aux renvois de l’assistant. Sa teinte est gardée ; sa luminosité est ajustée pour que les liens restent lisibles (contraste de 4,5:1 au moins), en clair comme en sombre.\n\nPour une couleur différente en mode sombre, ajoute `\"dark\": \"#5eead4\"`.\n\n> **Note**\n>\n> Dans la console, **Réglages › Thème** montre l’effet d’une couleur en clair et en sombre, son contraste sur un fond blanc, et prépare la ligne à copier dans `docs.json`.\n\n## Logo\n\n```json\n{ \"logo\": { \"light\": \"/images/logo-clair.svg\", \"dark\": \"/images/logo-sombre.svg\" } }\n```\n\nLe chemin part de la racine du dossier de la doc. Un SVG carré ou large, de 32 pixels de haut environ, rend le mieux. Une seule image : `\"logo\": \"/images/logo.svg\"`.\n\n## Favicon\n\n```json\n{ \"favicon\": \"/images/favicon.svg\" }\n```\n\nSans favicon, le site n’en annonce pas d’autre que `/favicon.svg` s’il existe."},{"path":"/","title":"Bienvenue dans Docs","description":"Ta documentation en MDX, publiée par Host, avec recherche, llms.txt et un assistant IA qui cite ses sources.","version":null,"markdown":"Docs transforme un dossier de pages MDX en site de documentation. Tu écris dans ton dépôt Git, Host publie le site à chaque push, et la console `docs.hgdc.ch` branche un assistant qui répond à tes visiteurs à partir de ta doc, et de rien d’autre.\n\n[Ta première doc](/demarrer/premiere-doc/)\n\n[Un dossier, un fichier `docs.json` et une page : ton site tourne en local en cinq minutes.](/demarrer/premiere-doc/)\n\n[Publier avec Host](/guides/publier/)\n\n[Relie le dépôt à Host : chaque push met le site à jour.](/guides/publier/)\n\n[L'assistant IA](/guides/assistant/)\n\n[Il répond aux questions de tes visiteurs et cite les pages qu’il a utilisées.](/guides/assistant/)\n\n[Pour les agents](/guides/agents/)\n\n[`llms.txt`, une version Markdown de chaque page et un serveur MCP en lecture.](/guides/agents/)\n\n## Ce que tu obtiens\n\n- **Un site rapide et lisible** : navigation par onglets et groupes, versions, mode clair et sombre, mise en page pensée pour le téléphone.\n- **La recherche** : `Ctrl K` sur chaque page, sans service externe. L’index est construit avec le site.\n- **Tes couleurs** : une couleur dans `docs.json` suffit. Le contraste des liens est ajusté pour rester lisible.\n- **Un assistant sourcé** : il cherche dans tes pages, répond en quelques phrases et renvoie vers les sections exactes. S’il ne trouve rien, il le dit.\n- **Une doc lisible par les IA** : `llms.txt`, `llms-full.txt`, un bouton « Copier pour un LLM » et un serveur MCP.\n\n## Compatible avec Mintlify\n\nLe fichier `docs.json` reprend celui de Mintlify : nom, couleurs, logo, navigation en onglets, groupes et versions. Les composants les plus courants (`<Note>`, `<Steps>`, `<Card>`, `<Tabs>`…) fonctionnent sans import. Une doc Mintlify se reprend en général sans réécrire les pages.\n\n> **Tout reste en Suisse quand c'est possible**\n>\n> Le site est servi par Host. Les questions des visiteurs sont gardées 90 jours au plus. Voir [Données et confidentialité](/explications/donnees/)."},{"path":"/reference/api-assistant/","title":"API de l'assistant","description":"La requête que le widget envoie, la réponse et les codes d'erreur.","version":null,"markdown":"Le widget du site appelle une seule route. Tu peux l’appeler toi-même pour intégrer l’assistant dans ton application, depuis une page servie par une adresse déclarée dans la console.\n\n## Requête\n\n```http\nPOST https://docs.hgdc.ch/api/v1/ask\nContent-Type: application/json\nOrigin: https://docs.acme.ch\n```\n\n```json\n{\n \"project\": \"k57a8m2x9q4n1b3c5d7e9f0g2h4j6k8m\",\n \"question\": \"Comment publier ma doc ?\",\n \"page\": \"/guides/publier/\",\n \"previous\": [\"j97f2k8m1q4n6b3c5d7e9f0g2h4j6k8m\"]\n}\n```\n\n| Champ | Rôle |\n| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |\n| `project` | Identifiant du projet. |\n| `question` | 2 à 1 000 caractères. |\n| `page` | Chemin de la page ouverte. Ses passages sont légèrement favorisés. |\n| `previous` | Les `id` des réponses précédentes de la conversation, 3 au plus. L’assistant relit lui-même ce qu’il a répondu, dans les deux dernières heures. |\n\nL’en-tête `Origin` doit être l’adresse du site ou un des domaines déclarés dans **Réglages › Domaines**. Chaque visiteur a droit à 6 questions par minute et 40 par jour.\n\n## Réponse\n\n```json\n{\n \"id\": \"j97f…\",\n \"status\": \"answered\",\n \"answer\": \"Importe le dépôt dans Host[^1], puis synchronise le projet dans la console[^2].\",\n \"sources\": [\n { \"n\": 1, \"title\": \"Publier avec Host\", \"section\": \"Avec Host\", \"url\": \"https://docs.acme.ch/guides/publier/#avec-host\" },\n { \"n\": 2, \"title\": \"Publier avec Host\", \"section\": \"Relier la console\", \"url\": \"https://docs.acme.ch/guides/publier/#relier-la-console\" }\n ]\n}\n```\n\n`answer` est du Markdown simple ; `[^n]` renvoie à la source `n`. `status` vaut `no_answer` quand la doc ne répond pas : `sources` est alors vide.\n\n## Erreurs\n\n| Code HTTP | `error.code` | Quand |\n| --------- | -------------------- | --------------------------------------------------- |\n| 400 | `invalid_request` | Corps illisible ou question trop courte. |\n| 403 | `origin_not_allowed` | La page n’est pas servie par une adresse du projet. |\n| 403 | `assistant_disabled` | L’assistant est coupé dans la console. |\n| 404 | `project_not_found` | Identifiant inconnu. |\n| 409 | `not_indexed` | Le site n’a pas encore été synchronisé. |\n| 429 | `rate_limited` | Trop de questions en une minute. |\n| 429 | `quota_exceeded` | Le quota mensuel de l’organisation est atteint. |\n| 503 | `unavailable` | Le modèle ne répond pas. Réessayer plus tard. |\n\nChaque erreur porte aussi `error.message`, une phrase en français à montrer telle quelle."},{"path":"/reference/cli/","title":"La commande hgdc-docs","description":"Les commandes dev, build et preview, et les variables d'environnement du build.","version":null,"markdown":"`hgdc-docs` est installée avec le paquet `@hgdc/docs`. Elle se lance depuis le dossier de la doc, ou avec le chemin du dossier en argument.\n\n## Commandes\n\n| Commande | Effet |\n| ------------------- | ---------------------------------------------------------------------------------------------------------- |\n| `hgdc-docs dev` | Site local sur `http://localhost:4321`, rechargé à chaque modification. |\n| `hgdc-docs build` | Site statique dans `dist/`, avec la recherche, `llms.txt`, les pages Markdown et le corpus de l’assistant. |\n| `hgdc-docs preview` | Sert le dernier build, pour vérifier avant de pousser. |\n\nOptions : `--port 4000` change le port de `dev` et `preview`, `--help` affiche l’aide.\n\n## Variables d’environnement\n\n| Variable | Rôle |\n| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `HGDC_DOCS_SITE` | Adresse publique du site (`https://docs.acme.ch`). Rend les liens de `llms.txt` absolus et produit le sitemap. Sur Host, l’adresse de production est reprise seule. |\n| `HGDC_DOCS_OUT` | Dossier de sortie, `dist/` par défaut. |\n| `HGDC_DOCS_API` | API de l’assistant, `https://docs.hgdc.ch` par défaut. |\n\n## Ce que contient dist/\n\n| Fichier | Contenu |\n| --------------------------------------------------- | -------------------------------------------------------------- |\n| `index.html`, `<page>/index.html` | Les pages du site. |\n| `<page>.md` | Chaque page en Markdown. |\n| `llms.txt`, `llms-full.txt`, `.well-known/llms.txt` | L’index et la doc complète pour les agents. |\n| `pagefind/` | L’index de la recherche. |\n| `_hgdc/corpus.json` | Le contenu publié, lu par la console pour indexer l’assistant. |"},{"path":"/reference/docs-json/","title":"docs.json","description":"Tous les champs du fichier de configuration d'un site Docs.","version":null,"markdown":"`docs.json` vit à la racine du dossier de la doc. Il reprend le format de Mintlify : les champs que Docs ne gère pas sont acceptés et ignorés. Pour l’autocomplétion dans ton éditeur, ajoute `\"$schema\": \"https://docs.hgdc.ch/docs.schema.json\"`.\n\n## Champs\n\n| Champ | Type | Obligatoire | Rôle |\n| -------------------- | --------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `name` | texte | oui | Nom de la doc, en tête du site et dans `llms.txt`. 80 caractères au plus. |\n| `description` | texte | non | Une phrase de présentation. |\n| `navigation` | objet | oui | Pages, groupes, onglets ou versions. Voir [Navigation](/guides/navigation/). |\n| `project` | texte | non | Identifiant du projet dans la console. Active l’assistant et l’indexation. |\n| `language` | `fr`, `en`, `de`, `it` | non | Langue de l’interface du site. `fr` par défaut. |\n| `base` | texte | non | Sous-chemin où la doc est servie, par exemple `/docs` quand ton application la publie derrière un proxy (`https://app.acme.ch/docs`). Liens, images, recherche, `llms.txt` et pages `.md` le portent ; le site est écrit dans `dist/docs/`. Écris tes liens depuis la racine de la doc (`/guides/publier/`) : le sous-chemin est ajouté au build. |\n| `colors.primary` | couleur `#rrggbb` | non | Couleur des liens et des éléments actifs. |\n| `colors.dark` | couleur `#rrggbb` | non | La même, en mode sombre. |\n| `logo` | chemin, ou `{ light, dark }` | non | Logo affiché en tête. |\n| `favicon` | chemin | non | Icône de l’onglet du navigateur. |\n| `navbar.links` | liste de `{ label, href }` | non | Jusqu’à 5 liens dans la barre du haut (adresses complètes). |\n| `navbar.primary` | `{ label, href }` | non | Bouton mis en avant à droite de la barre du haut. |\n| `app.href` | adresse `https://` | non | Ton application. Ajoute un bouton « Ouvrir » suivi du nom du site à droite de la barre du haut, en tête du menu sur téléphone et dans le pied de page : sans lui, on ne peut pas revenir au produit depuis la doc. |\n| `app.label` | texte | non | Libellé de ce bouton, si « Ouvrir » suivi du nom ne convient pas. |\n| `footer.socials` | objet | non | Liens vers tes réseaux : `linkedin`, `github`, `gitlab`, `x`, `youtube`, `instagram`, `facebook`, `discord`, `mastodon`, `bluesky`, `website`. |\n| `footer.links` | liste de `{ header, items }` | non | Colonnes du pied de page, 6 au plus. Chaque lien `{ label, href, icon }` : `href` est un chemin de la doc (`/guides/publier/`), une adresse `https://` ou `mailto:` ; `icon`, facultative, une image de la doc (`/images/mail.svg`). |\n| `footer.copyright` | texte | non | Titulaire affiché après « © année » au bas du pied de page. Le nom du site par défaut. |\n| `redirects` | liste de `{ source, destination, permanent }` | non | Anciennes adresses qui mènent aux nouvelles. `source` est un chemin du site (`/guides/ancien`), `destination` un chemin ou une adresse `https://`. `permanent: false` pour une redirection temporaire. 500 au plus. |\n| `assistant.enabled` | oui / non | non | `false` cache l’assistant du site. |\n| `assistant.endpoint` | adresse | non | API de l’assistant, à ne changer que pour un environnement de test. |\n\n## Navigation\n\nQuatre formes, une seule à la fois :\n\n| Forme | Exemple |\n| ---------- | --------------------------------------------------------- |\n| `pages` | `[\"index\", \"installation\"]` |\n| `groups` | `[{ \"group\": \"Démarrer\", \"pages\": [\"index\"] }]` |\n| `tabs` | `[{ \"tab\": \"Guides\", \"groups\": [...] }]` |\n| `versions` | `[{ \"version\": \"v2\", \"default\": true, \"groups\": [...] }]` |\n\nUn groupe accepte `expanded: false` pour être replié par défaut, et peut contenir des groupes.\n\n## Erreurs\n\nUn `docs.json` invalide fait échouer le build avec la liste des problèmes, par exemple :\n\n```text\ndocs.json invalide :\n- colors.primary : couleur attendue au format #rrggbb\n- navigation : utiliser une seule forme parmi versions, tabs, groups ou pages\n```"},{"path":"/reference/mcp/","title":"Serveur MCP","description":"Transport, méthodes et outils du serveur MCP en lecture d'un projet.","version":null,"markdown":"Le serveur suit le [Model Context Protocol](https://modelcontextprotocol.io), transport Streamable HTTP, sans session : chaque requête est indépendante.\n\n```text\nPOST https://docs.hgdc.ch/mcp/<identifiant du projet>\nContent-Type: application/json\nAccept: application/json, text/event-stream\n```\n\nIl répond en JSON (`application/json`), jamais en flux. `GET` et `DELETE` répondent 405. Versions du protocole acceptées : `2025-11-25`, `2025-06-18`, `2025-03-26`.\n\n## Méthodes\n\n| Méthode | Réponse |\n| ------------ | --------------------------------------------------------- |\n| `initialize` | Nom du serveur, capacités (`tools`) et consignes d’usage. |\n| `ping` | Objet vide. |\n| `tools/list` | Les trois outils ci-dessous. |\n| `tools/call` | Le résultat de l’outil, en texte. |\n\nUne notification (message sans `id`) reçoit un 202 sans corps.\n\n## Outils\n\n### search_docs\n\n| Paramètre | Type | Rôle |\n| --------- | -------------- | --------------------------------- |\n| `query` | texte | Question ou mots-clés. |\n| `limit` | entier, 1 à 10 | Nombre de passages, 5 par défaut. |\n\nRend les passages trouvés, chacun avec son titre, sa section, son adresse et son texte.\n\n### get_page\n\n| Paramètre | Type | Rôle |\n| --------- | ----- | ---------------------------------------------------------------- |\n| `path` | texte | Chemin de la page (`/guides/publier/`), ou son adresse complète. |\n\nRend la page en Markdown, précédée de son adresse.\n\n### list_pages\n\nSans paramètre. Rend la liste des pages publiées.\n\n## Limites\n\nLe serveur est public et en lecture seule : il ne donne accès qu’à ce que le site publie déjà. Chaque projet accepte 300 requêtes par minute, chaque visiteur 60. Au-delà, la réponse est un 429."}]}