static/shared: fix for dropdown to not autoopen when receive focus.

also added fix for content activated by mouse dismissible using ESC key.
https://screencast.googleplex.com/cast/NTg0NzA1ODk1ODI1NDA4MHw1YTMxMTc2ZC02NQ

Change-Id: I89a803151fb94d44e3a7d9fdc583248c29b8fae4
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/517215
kokoro-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
Auto-Submit: Jamal Carvalho <jamal@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Run-TryBot: Jamal Carvalho <jamal@golang.org>
diff --git a/static/frontend/about/about.min.css.map b/static/frontend/about/about.min.css.map
index 950784d..aacf72e 100644
--- a/static/frontend/about/about.min.css.map
+++ b/static/frontend/about/about.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["about.css"],
   "sourcesContent": ["/*\n * Copyright 2022 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.about-Wrapper ul {\n  list-style-type: disc;\n  padding-left: 2em;\n}\n\n.about-Wrapper li {\n  margin: 0.5em 0;\n}\n\n.about-Wrapper b {\n  font-weight: bold;\n}\n\na.btn {\n  background: var(--color-button);\n  border-radius: 0.3125rem;\n  color: var(--white);\n  display: block;\n  font-size: 1rem;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1rem;\n  margin-top: 1rem;\n  padding: 0.625rem;\n  text-align: center;\n  text-decoration: none;\n}\n\n.about-Content {\n  grid-area: content;\n  padding: 0;\n}\n\n.about-Content ul {\n  overflow-wrap: break-word;\n}\n\n.about-Content h1 {\n  font-size: 2.25rem;\n  font-weight: 400;\n  line-height: 2rem;\n}\n\n.about-Content h2 {\n  font-size: 1.5rem;\n  font-weight: 400;\n  line-height: 2rem;\n}\n\n.about-Content h3 {\n  font-size: 1.125rem;\n  font-weight: 400;\n  line-height: 2rem;\n}\n\n.about-Content p {\n  font-size: 0.875rem;\n  font-weight: 400;\n  line-height: 1.5rem;\n}\n\n.about-Wrapper {\n  display: grid;\n  gap: var(--gap);\n  grid-template-areas: 'content';\n  margin: 2rem auto 0;\n  max-width: 110rem;\n  padding: 0 var(--gutter);\n}\n\n.Sidebar {\n  display: none;\n  grid-area: Sidebar;\n  margin-top: 6rem;\n}\n\n.Sidebar a {\n  width: 7.5rem;\n}\n\n.Sidebar h4 {\n  font-size: 1rem;\n  font-style: normal;\n  font-weight: 500;\n  line-height: 1.5rem;\n}\n\n.Sidebar p,\n.Sidebar-faq .link {\n  font-size: 0.875rem;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5rem;\n}\n\n.Sidebar-faq h4 {\n  font-size: 0.813rem;\n  margin-bottom: 0.375rem;\n  margin-top: 1.25rem;\n}\n\n.Sidebar-faq p {\n  margin-bottom: 0.625rem;\n  margin-top: 0;\n}\n\n.Sidebar-socialLinks {\n  align-items: center;\n  display: flex;\n}\n\n.Sidebar-socialLinks a {\n  display: flex;\n  margin-right: 0.675rem;\n  width: unset;\n}\n\n.LeftNav-columns {\n  display: flex;\n}\n\n.LeftNav-sidebar {\n  display: none;\n  grid-area: LeftNav-sidebar;\n  height: 100vh;\n  overflow: auto;\n  padding: 0;\n  position: sticky;\n  top: 0;\n}\n\n.LeftNav {\n  display: flex;\n  flex-direction: column;\n}\n\n.LeftNav a {\n  align-items: center;\n  display: flex;\n  padding-bottom: 0.675rem;\n  padding-top: 0.675rem;\n  text-decoration: none;\n}\n\n.LeftNav a span {\n  color: var(--color-text-subtle);\n  flex: 30;\n  font-size: 1rem;\n  font-style: normal;\n  font-weight: 500;\n  line-height: 1.5rem;\n  margin: 0 0.75rem;\n}\n\n.LeftNav .LeftSubnav a span {\n  font-size: 0.875rem;\n  font-weight: 400;\n}\n\n.LeftSubnav a {\n  padding-left: 1rem;\n}\n\n.LeftNav a.active,\n.LeftNav a:hover,\n.LeftNav a:active,\n.LeftNav a:focus {\n  background: var(--color-background-info);\n}\n\n.LeftNav a.active span,\n.LeftNav a:hover span,\n.LeftNav a:active span,\n.LeftNav a:focus span {\n  color: var(--color-text);\n}\n\n.LeftNav ul.LeftSubnav li a.active,\n.LeftNav ul.LeftSubnav li a:hover,\n.LeftNav ul.LeftSubnav li a:active,\n.LeftNav ul.LeftSubnav li a:focus {\n  background: var(--color-background-accented);\n}\n\n.LeftSubnav {\n  list-style: none;\n  margin-bottom: unset;\n  margin-top: unset;\n  padding: unset;\n}\n\n.LeftSubnav img {\n  flex: 1;\n  visibility: hidden;\n}\n\n.LeftSubnav a.active img,\n.LeftSubnav a:hover img,\n.LeftSubnav a:focus img,\n.LeftSubnav a:active img {\n  visibility: visible;\n}\n\nul.LeftSubnav {\n  padding-left: unset;\n}\n\n.LeftSubnav li {\n  list-style: none;\n  margin: unset;\n}\n\n@media (min-width: 50rem) {\n  .about-Wrapper {\n    grid-template-areas: 'LeftNav-sidebar content';\n    grid-template-columns: 1fr 3fr;\n    margin-top: 3rem;\n  }\n\n  .about-Content {\n    padding: 0;\n  }\n\n  .LeftNav-sidebar {\n    display: block;\n  }\n}\n@media only screen and (min-width: 90rem) {\n  .about-Wrapper {\n    grid-template-areas: 'LeftNav-sidebar content Sidebar';\n    grid-template-columns: 1.5fr 4fr 1.5fr;\n  }\n\n  .Sidebar {\n    display: block;\n  }\n}\n"],
-  "mappings": "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",
+  "mappings": ";;;;;AAMA,kBACE,qBACA,iBAGF,kBAXA,cAeA,iBACE,gBAGF,MACE,+BApBF,uBAsBE,mBACA,cACA,eACA,kBACA,gBACA,iBACA,gBA5BF,gBA8BE,kBACA,qBAGF,eACE,kBAnCF,UAuCA,kBACE,yBAGF,kBACE,kBACA,gBACA,iBAGF,kBACE,iBACA,gBACA,iBAGF,kBACE,mBACA,gBACA,iBAGF,iBACE,kBACA,gBACA,mBAGF,eACE,aACA,eACA,8BAtEF,mBAwEE,iBACA,wBAGF,SACE,aACA,kBACA,gBAGF,WACE,aAGF,YACE,eACA,kBACA,gBACA,mBAGF,8BAEE,kBACA,kBACA,gBACA,mBAGF,gBACE,kBACA,sBACA,mBAGF,eACE,sBACA,aAGF,qBACE,mBACA,aAGF,uBACE,aACA,qBACA,YAGF,iBACE,aAGF,iBACE,aACA,0BACA,aACA,cAnIF,UAqIE,gBACA,MAGF,SACE,aACA,sBAGF,WACE,mBACA,aACA,uBACA,oBACA,qBAGF,gBACE,+BACA,QACA,eACA,kBACA,gBACA,mBA5JF,gBAgKA,4BACE,kBACA,gBAGF,cACE,kBAGF,sEAIE,wCAGF,0FAIE,wBAGF,0IAIE,4CAGF,YACE,gBACA,oBACA,iBACA,cAGF,gBACE,OACA,kBAGF,kGAIE,mBAGF,cACE,mBAGF,eACE,gBACA,aAGF,0BACE,eACE,8CACA,8BACA,gBAGF,eAjOF,UAqOE,iBACE,eAGJ,0CACE,eACE,sDACA,sCAGF,SACE",
   "names": []
 }
diff --git a/static/frontend/about/index.js b/static/frontend/about/index.js
index b888a98..4c6f1a0 100644
--- a/static/frontend/about/index.js
+++ b/static/frontend/about/index.js
@@ -1,4 +1,4 @@
-var M=async function(){if(!["/about"].includes(window.location.pathname))return;let f="h2, h3, h4",i=".LeftNav a",l=document.querySelector(".LeftNav"),c=document.querySelector(".go-Content"),u=!1;function r(t="",o={},...n){if(!t)throw new Error("Provide `type` to create document element.");let a=Object.assign(document.createElement(t),o);return n.forEach(e=>{typeof e=="string"?a.appendChild(document.createTextNode(e)):Array.isArray(e)?e.forEach(s=>a.appendChild(s)):e instanceof HTMLElement&&a.appendChild(e)}),a}function v(){return new Promise((t,o)=>{let n=[],a=[];if(!c||!l)return o(".SiteContent not found.");if(l instanceof HTMLElement&&!l?.dataset?.hydrate)return t(!0);for(let e of c.querySelectorAll(f))if(e instanceof HTMLElement&&!e?.dataset?.ignore)switch(e.tagName){case"H2":n=[...n,{id:e.id,label:e?.dataset?.title?e.dataset.title:e.textContent??""}];break;case"H3":case"H4":n[n.length-1]?.subnav?n[n.length-1].subnav&&n[n.length-1].subnav?.push({id:e.id,label:e?.dataset?.title?e.dataset.title:e.textContent??""}):n[n.length-1].subnav=[{id:e.id,label:e?.dataset?.title?e.dataset.title:e.textContent??""}];break}for(let e of n){let s=r("a",{href:"#"+e.id},r("span",{},e.label));if(a=[...a,s],e?.subnav){let m=[];for(let b of e.subnav){let H=r("li",{},r("a",{href:"#"+b.id},r("img",{src:"/static/frontend/about/dot.svg",width:"5",height:"5"}),r("span",{},b.label)));m=[...m,H]}let y=r("ul",{className:"LeftSubnav"},m);a=[...a,y]}}return a.forEach(e=>l.appendChild(e)),t(!0)})}function g(){return new Promise(t=>{if(!document.querySelectorAll(i))return t(!0);for(let o of document.querySelectorAll(i))if(o instanceof HTMLAnchorElement&&o.href===location.href){d(o);break}t(!0)})}function L(){return new Promise(t=>{if(!document.querySelectorAll(i))return t(!0);for(let o of document.querySelectorAll(i))o.classList.remove("active");t(!0)})}function d(t){t instanceof HTMLAnchorElement&&L().then(()=>{t.classList.add("active");let o=t?.parentNode?.parentNode;o instanceof HTMLElement&&o?.classList?.contains("LeftSubnav")&&o.previousElementSibling?.classList.add("active")})}function p(){h();let t=document.querySelector('[href="'+location.hash+'"]');t instanceof HTMLAnchorElement&&d(t)}function h(){u=!0,setTimeout(()=>{u=!1},200)}function E(){if(window.addEventListener("hashchange",p),c?.querySelectorAll(f)){let t=n=>{if(!u&&Array.isArray(n)&&n.length>0){for(let a of n)if(a.isIntersecting&&a.target instanceof HTMLElement){let{id:e}=a.target,s=document.querySelector('[href="#'+e+'"]');s instanceof HTMLAnchorElement&&d(s);break}}},o=new IntersectionObserver(t,{threshold:0,rootMargin:"0px 0px -50% 0px"});for(let n of c.querySelectorAll(f))n instanceof HTMLElement&&!n?.dataset?.ignore&&o.observe(n)}}try{await v(),await g(),location.hash&&h(),E()}catch(t){t instanceof Error?console.error(t.message):console.error(t)}};export{M as initJumpLinks};
+var O=async function(){if(!["/about"].includes(window.location.pathname))return;let d="h2, h3, h4",u=".LeftNav a",i=document.querySelector(".LeftNav"),c=document.querySelector(".go-Content"),h=!1;function a(t="",r={},...o){if(!t)throw new Error("Provide `type` to create document element.");let n=Object.assign(document.createElement(t),r);return o.forEach(s=>{typeof s=="string"?n.appendChild(document.createTextNode(s)):Array.isArray(s)?s.forEach(l=>n.appendChild(l)):s instanceof HTMLElement&&n.appendChild(s)}),n}function T(){return new Promise((t,r)=>{var s,l,f,L,v,E,p,y,H,A;let o=[],n=[];if(!c||!i)return r(".SiteContent not found.");if(i instanceof HTMLElement&&!((s=i==null?void 0:i.dataset)!=null&&s.hydrate))return t(!0);for(let e of c.querySelectorAll(d))if(e instanceof HTMLElement&&!((l=e==null?void 0:e.dataset)!=null&&l.ignore))switch(e.tagName){case"H2":o=[...o,{id:e.id,label:(f=e==null?void 0:e.dataset)!=null&&f.title?e.dataset.title:(L=e.textContent)!=null?L:""}];break;case"H3":case"H4":(v=o[o.length-1])!=null&&v.subnav?o[o.length-1].subnav&&((A=o[o.length-1].subnav)==null||A.push({id:e.id,label:(y=e==null?void 0:e.dataset)!=null&&y.title?e.dataset.title:(H=e.textContent)!=null?H:""})):o[o.length-1].subnav=[{id:e.id,label:(E=e==null?void 0:e.dataset)!=null&&E.title?e.dataset.title:(p=e.textContent)!=null?p:""}];break}for(let e of o){let C=a("a",{href:"#"+e.id},a("span",{},e.label));if(n=[...n,C],e!=null&&e.subnav){let b=[];for(let M of e.subnav){let x=a("li",{},a("a",{href:"#"+M.id},a("img",{src:"/static/frontend/about/dot.svg",width:"5",height:"5"}),a("span",{},M.label)));b=[...b,x]}let N=a("ul",{className:"LeftSubnav"},b);n=[...n,N]}}return n.forEach(e=>i.appendChild(e)),t(!0)})}function S(){return new Promise(t=>{if(!document.querySelectorAll(u))return t(!0);for(let r of document.querySelectorAll(u))if(r instanceof HTMLAnchorElement&&r.href===location.href){m(r);break}t(!0)})}function k(){return new Promise(t=>{if(!document.querySelectorAll(u))return t(!0);for(let r of document.querySelectorAll(u))r.classList.remove("active");t(!0)})}function m(t){t instanceof HTMLAnchorElement&&k().then(()=>{var o,n,s;t.classList.add("active");let r=(o=t==null?void 0:t.parentNode)==null?void 0:o.parentNode;r instanceof HTMLElement&&((n=r==null?void 0:r.classList)!=null&&n.contains("LeftSubnav"))&&((s=r.previousElementSibling)==null||s.classList.add("active"))})}function w(){g();let t=document.querySelector('[href="'+location.hash+'"]');t instanceof HTMLAnchorElement&&m(t)}function g(){h=!0,setTimeout(()=>{h=!1},200)}function q(){var t;if(window.addEventListener("hashchange",w),c!=null&&c.querySelectorAll(d)){let r=n=>{if(!h&&Array.isArray(n)&&n.length>0){for(let s of n)if(s.isIntersecting&&s.target instanceof HTMLElement){let{id:l}=s.target,f=document.querySelector('[href="#'+l+'"]');f instanceof HTMLAnchorElement&&m(f);break}}},o=new IntersectionObserver(r,{threshold:0,rootMargin:"0px 0px -50% 0px"});for(let n of c.querySelectorAll(d))n instanceof HTMLElement&&!((t=n==null?void 0:n.dataset)!=null&&t.ignore)&&o.observe(n)}}try{await T(),await S(),location.hash&&g(),q()}catch(t){t instanceof Error?console.error(t.message):console.error(t)}};export{O as initJumpLinks};
 /**
  * @license
  * Copyright 2022 The Go Authors. All rights reserved.
diff --git a/static/frontend/about/index.js.map b/static/frontend/about/index.js.map
index 01e0676..7cd2888 100644
--- a/static/frontend/about/index.js.map
+++ b/static/frontend/about/index.js.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["index.ts"],
   "sourcesContent": ["/**\n * @license\n * Copyright 2022 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Left Navigation.\n */\nexport const initJumpLinks = async function () {\n  const pagesWithJumpLinks = ['/about'];\n  if (!pagesWithJumpLinks.includes(window.location.pathname)) {\n    // stop the file from doing anything else if the page doesn't have jumplinks\n    return;\n  }\n\n  // these might be generated or not so don't grab references to the elements until actually need them.\n  const titles = 'h2, h3, h4';\n  const nav = '.LeftNav a';\n  // these are always in the dom so we can get them now and throw errors if they're not.\n  const leftNav = document.querySelector('.LeftNav');\n  const siteContent = document.querySelector('.go-Content');\n  let isObserverDisabled = false;\n\n  /**\n   * El function\n   * @example el('h1', {className: 'title'}, 'Welcome to the site');\n   * @example el('ul', {className: 'list'}, el('li', {}, 'Item one'), el('li', {}, 'Item two'), el('li', {}, 'Item three'));\n   * @example el('img', {src: '/url.svg'});\n   */\n  function el(\n    type = '',\n    props: { [key: string]: string } = {},\n    ...children: (HTMLElement | HTMLElement[] | string | undefined)[]\n  ) {\n    // Error, no type declared.\n    if (!type) {\n      throw new Error('Provide `type` to create document element.');\n    }\n\n    // Create element with optional attribute props\n    const docEl = Object.assign(document.createElement(type), props);\n\n    // Children: array containing strings or elements\n    children.forEach(child => {\n      if (typeof child === 'string') {\n        docEl.appendChild(document.createTextNode(child));\n      } else if (Array.isArray(child)) {\n        child.forEach(c => docEl.appendChild(c));\n      } else if (child instanceof HTMLElement) {\n        docEl.appendChild(child);\n      }\n    });\n\n    return docEl;\n  }\n  /**  Build Nav if data hydrate is present. */\n  function buildNav() {\n    return new Promise((resolve, reject) => {\n      let navItems: { id: string; label: string; subnav?: { id: string; label: string }[] }[] = [];\n      let elements: HTMLElement[] = [];\n\n      if (!siteContent || !leftNav) {\n        return reject('.SiteContent not found.');\n      }\n      if (leftNav instanceof HTMLElement && !leftNav?.dataset?.hydrate) {\n        return resolve(true);\n      }\n\n      for (const title of siteContent.querySelectorAll(titles)) {\n        if (title instanceof HTMLElement && !title?.dataset?.ignore) {\n          switch (title.tagName) {\n            case 'H2':\n              navItems = [\n                ...navItems,\n                {\n                  id: title.id,\n                  label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                },\n              ];\n              break;\n\n            case 'H3':\n            case 'H4':\n              if (!navItems[navItems.length - 1]?.subnav) {\n                navItems[navItems.length - 1].subnav = [\n                  {\n                    id: title.id,\n                    label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                  },\n                ];\n              } else if (navItems[navItems.length - 1].subnav) {\n                navItems[navItems.length - 1].subnav?.push({\n                  id: title.id,\n                  label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                });\n              }\n              break;\n          }\n        }\n      }\n\n      for (const navItem of navItems) {\n        const link = el('a', { href: '#' + navItem.id }, el('span', {}, navItem.label));\n        elements = [...elements, link];\n        if (navItem?.subnav) {\n          let subLinks: HTMLElement[] = [];\n          for (const subnavItem of navItem.subnav) {\n            const subItem = el(\n              'li',\n              {},\n              el(\n                'a',\n                { href: '#' + subnavItem.id },\n                el('img', { src: '/static/frontend/about/dot.svg', width: '5', height: '5' }),\n                el('span', {}, subnavItem.label)\n              )\n            );\n            subLinks = [...subLinks, subItem];\n          }\n          const list = el('ul', { className: 'LeftSubnav' }, subLinks);\n          elements = [...elements, list];\n        }\n      }\n\n      elements.forEach(element => leftNav.appendChild(element));\n\n      return resolve(true);\n    });\n  }\n  /**\n   * Set the correct active element.\n   */\n  function setNav() {\n    return new Promise(resolve => {\n      if (!document.querySelectorAll(nav)) return resolve(true);\n      for (const a of document.querySelectorAll(nav)) {\n        if (a instanceof HTMLAnchorElement && a.href === location.href) {\n          setElementActive(a);\n          break;\n        }\n      }\n      resolve(true);\n    });\n  }\n  /** resetNav: removes all .active from nav elements */\n  function resetNav() {\n    return new Promise(resolve => {\n      if (!document.querySelectorAll(nav)) return resolve(true);\n      for (const a of document.querySelectorAll(nav)) {\n        a.classList.remove('active');\n      }\n      resolve(true);\n    });\n  }\n  /** setElementActive: controls resetting nav and highlighting the appropriate nav items */\n  function setElementActive(element: HTMLAnchorElement) {\n    if (element instanceof HTMLAnchorElement) {\n      resetNav().then(() => {\n        element.classList.add('active');\n        const parent = element?.parentNode?.parentNode;\n        if (parent instanceof HTMLElement && parent?.classList?.contains('LeftSubnav')) {\n          parent.previousElementSibling?.classList.add('active');\n        }\n      });\n    }\n  }\n  /** setLinkManually: disables observer and selects the clicked nav item. */\n  function setLinkManually() {\n    delayObserver();\n    const link = document.querySelector('[href=\"' + location.hash + '\"]');\n    if (link instanceof HTMLAnchorElement) {\n      setElementActive(link);\n    }\n  }\n  /** delayObserver: Quick on off switch for intersection observer. */\n  function delayObserver() {\n    isObserverDisabled = true;\n    setTimeout(() => {\n      isObserverDisabled = false;\n    }, 200);\n  }\n  /** observeSections: kicks off observation of titles as well as manual clicks with hashchange */\n  function observeSections() {\n    window.addEventListener('hashchange', setLinkManually);\n\n    if (siteContent?.querySelectorAll(titles)) {\n      const callback: IntersectionObserverCallback = entries => {\n        if (!isObserverDisabled && Array.isArray(entries) && entries.length > 0) {\n          for (const entry of entries) {\n            if (entry.isIntersecting && entry.target instanceof HTMLElement) {\n              const { id } = entry.target;\n              const link = document.querySelector('[href=\"#' + id + '\"]');\n              if (link instanceof HTMLAnchorElement) {\n                setElementActive(link);\n              }\n              break;\n            }\n          }\n        }\n      };\n      // rootMargin is important when multiple sections are in the observable area **on page load**.\n      // they will still be highlighted on scroll because of the root margin.\n      const ob = new IntersectionObserver(callback, {\n        threshold: 0,\n        rootMargin: '0px 0px -50% 0px',\n      });\n      for (const title of siteContent.querySelectorAll(titles)) {\n        if (title instanceof HTMLElement && !title?.dataset?.ignore) {\n          ob.observe(title);\n        }\n      }\n    }\n  }\n\n  try {\n    await buildNav();\n    await setNav();\n    if (location.hash) {\n      delayObserver();\n    }\n    observeSections();\n  } catch (e) {\n    if (e instanceof Error) {\n      console.error(e.message);\n    } else {\n      console.error(e);\n    }\n  }\n};\n"],
-  "mappings": "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",
-  "names": ["initJumpLinks", "titles", "nav", "leftNav", "siteContent", "isObserverDisabled", "el", "type", "props", "children", "docEl", "child", "c", "buildNav", "resolve", "reject", "navItems", "elements", "title", "navItem", "link", "subLinks", "subnavItem", "subItem", "list", "element", "setNav", "a", "setElementActive", "resetNav", "parent", "setLinkManually", "delayObserver", "observeSections", "callback", "entries", "entry", "id", "ob", "e"]
+  "mappings": "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",
+  "names": ["initJumpLinks", "titles", "nav", "leftNav", "siteContent", "isObserverDisabled", "el", "type", "props", "children", "docEl", "child", "c", "buildNav", "resolve", "reject", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "navItems", "elements", "title", "navItem", "link", "subLinks", "subnavItem", "subItem", "list", "element", "setNav", "a", "setElementActive", "resetNav", "parent", "setLinkManually", "delayObserver", "observeSections", "callback", "entries", "entry", "id", "ob", "e"]
 }
diff --git a/static/frontend/badge/badge.min.css.map b/static/frontend/badge/badge.min.css.map
index 8cfe288..c67be9e 100644
--- a/static/frontend/badge/badge.min.css.map
+++ b/static/frontend/badge/badge.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["badge.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.Badge label,\n.Badge input {\n  width: 100%;\n}\n\n.Badge-badgeIcon {\n  height: 1.25rem;\n  width: 5.625rem;\n}\n\n.Badge-snippetContainer {\n  background-color: var(--color-background-accented);\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  margin-top: 1rem;\n  padding: 1rem;\n}\n\n.Badge-gopherLanding {\n  height: 12.25rem;\n  text-align: center;\n}\n\n.Badge-gopherLanding img {\n  height: 7.8125rem;\n  width: auto;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,MAAM,MACP,CADC,MACM,MACL,MAAO,IACT,CAEA,CAAC,gBACC,OAAQ,QACR,MAAO,QACT,CAEA,CAAC,uBACC,iBAAkB,IAAI,6BACtB,QAAS,KACT,eAAgB,OAChB,IAAK,KACL,WAAY,KArBd,QAsBW,IACX,CAEA,CAAC,oBACC,OAAQ,SACR,WAAY,MACd,CAEA,CALC,oBAKoB,IACnB,OAAQ,UACR,MAAO,IACT",
+  "mappings": ";;;;;AAMA,0BAEE,WAGF,iBACE,eACA,eAGF,wBACE,kDACA,aACA,sBACA,SACA,gBArBF,aAyBA,qBACE,gBACA,kBAGF,yBACE,iBACA",
   "names": []
 }
diff --git a/static/frontend/error/error.min.css.map b/static/frontend/error/error.min.css.map
index 7d2bb85..30f9517 100644
--- a/static/frontend/error/error.min.css.map
+++ b/static/frontend/error/error.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["error.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.Error-message {\n  text-align: center;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,cACC,WAAY,MACd",
+  "mappings": ";;;;;AAMA,eACE",
   "names": []
 }
diff --git a/static/frontend/fetch/fetch.js b/static/frontend/fetch/fetch.js
index 056d259..962bd86 100644
--- a/static/frontend/fetch/fetch.js
+++ b/static/frontend/fetch/fetch.js
@@ -1,4 +1,4 @@
-var a=document.querySelector(".js-fetchButton");a&&a.addEventListener("click",e=>{e.preventDefault(),l()});async function l(){let e=document.querySelector(".js-fetchMessage"),t=document.querySelector(".js-fetchMessageSecondary"),o=document.querySelector(".js-fetchButton"),n=document.querySelector(".js-fetchLoading");if(!(e&&t&&o&&n))return;e.textContent=`Fetching ${e.dataset.path}`,t.textContent="Feel free to navigate away and check back later, we\u2019ll keep working on it!",o.style.display="none",n.style.display="block";let c=await fetch(`/fetch${window.location.pathname}`,{method:"POST"});if(c.ok){window.location.reload();return}let s=await c.text();n.style.display="none",t.textContent="";let r=new DOMParser().parseFromString(s,"text/html");e.innerText=r.documentElement.textContent??""}
+var s=document.querySelector(".js-fetchButton");s&&s.addEventListener("click",e=>{e.preventDefault(),i()});async function i(){var a;let e=document.querySelector(".js-fetchMessage"),t=document.querySelector(".js-fetchMessageSecondary"),o=document.querySelector(".js-fetchButton"),n=document.querySelector(".js-fetchLoading");if(!(e&&t&&o&&n))return;e.textContent=`Fetching ${e.dataset.path}`,t.textContent="Feel free to navigate away and check back later, we\u2019ll keep working on it!",o.style.display="none",n.style.display="block";let c=await fetch(`/fetch${window.location.pathname}`,{method:"POST"});if(c.ok){window.location.reload();return}let r=await c.text();n.style.display="none",t.textContent="";let l=new DOMParser().parseFromString(r,"text/html");e.innerText=(a=l.documentElement.textContent)!=null?a:""}
 /*!
  * @license
  * Copyright 2020 The Go Authors. All rights reserved.
diff --git a/static/frontend/fetch/fetch.js.map b/static/frontend/fetch/fetch.js.map
index ea6cd0f..597858b 100644
--- a/static/frontend/fetch/fetch.js.map
+++ b/static/frontend/fetch/fetch.js.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["fetch.ts"],
   "sourcesContent": ["/*!\n * @license\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nconst fetchButton = document.querySelector('.js-fetchButton');\nif (fetchButton) {\n  fetchButton.addEventListener('click', e => {\n    e.preventDefault();\n    fetchPath();\n  });\n}\n\nasync function fetchPath() {\n  const fetchMessageEl = document.querySelector<HTMLHeadingElement>('.js-fetchMessage');\n  const fetchMessageSecondary = document.querySelector<HTMLParagraphElement>(\n    '.js-fetchMessageSecondary'\n  );\n  const fetchButton = document.querySelector<HTMLButtonElement>('.js-fetchButton');\n  const fetchLoading = document.querySelector<HTMLDivElement>('.js-fetchLoading');\n  if (!(fetchMessageEl && fetchMessageSecondary && fetchButton && fetchLoading)) {\n    return;\n  }\n  fetchMessageEl.textContent = `Fetching ${fetchMessageEl.dataset.path}`;\n  fetchMessageSecondary.textContent =\n    'Feel free to navigate away and check back later, we\u2019ll keep working on it!';\n  fetchButton.style.display = 'none';\n  fetchLoading.style.display = 'block';\n\n  const response = await fetch(`/fetch${window.location.pathname}`, { method: 'POST' });\n  if (response.ok) {\n    window.location.reload();\n    return;\n  }\n  const responseText = await response.text();\n  fetchLoading.style.display = 'none';\n  fetchMessageSecondary.textContent = '';\n  const responseTextParsedDOM = new DOMParser().parseFromString(responseText, 'text/html');\n  fetchMessageEl.innerText = responseTextParsedDOM.documentElement.textContent ?? '';\n}\n\nexport {};\n"],
-  "mappings": "AAOA,IAAMA,EAAc,SAAS,cAAc,iBAAiB,EACxDA,GACFA,EAAY,iBAAiB,QAAS,GAAK,CACzC,EAAE,eAAe,EACjBC,EAAU,CACZ,CAAC,EAGH,eAAeA,GAAY,CACzB,IAAMC,EAAiB,SAAS,cAAkC,kBAAkB,EAC9EC,EAAwB,SAAS,cACrC,2BACF,EACMH,EAAc,SAAS,cAAiC,iBAAiB,EACzEI,EAAe,SAAS,cAA8B,kBAAkB,EAC9E,GAAI,EAAEF,GAAkBC,GAAyBH,GAAeI,GAC9D,OAEFF,EAAe,YAAc,YAAYA,EAAe,QAAQ,IAAI,GACpEC,EAAsB,YACpB,kFACFH,EAAY,MAAM,QAAU,OAC5BI,EAAa,MAAM,QAAU,QAE7B,IAAMC,EAAW,MAAM,MAAM,SAAS,OAAO,SAAS,QAAQ,GAAI,CAAE,OAAQ,MAAO,CAAC,EACpF,GAAIA,EAAS,GAAI,CACf,OAAO,SAAS,OAAO,EACvB,MACF,CACA,IAAMC,EAAe,MAAMD,EAAS,KAAK,EACzCD,EAAa,MAAM,QAAU,OAC7BD,EAAsB,YAAc,GACpC,IAAMI,EAAwB,IAAI,UAAU,EAAE,gBAAgBD,EAAc,WAAW,EACvFJ,EAAe,UAAYK,EAAsB,gBAAgB,aAAe,EAClF",
-  "names": ["fetchButton", "fetchPath", "fetchMessageEl", "fetchMessageSecondary", "fetchLoading", "response", "responseText", "responseTextParsedDOM"]
+  "mappings": "AAOA,IAAMA,EAAc,SAAS,cAAc,iBAAiB,EACxDA,GACFA,EAAY,iBAAiB,QAAS,GAAK,CACzC,EAAE,eAAe,EACjBC,EAAU,CACZ,CAAC,EAGH,eAAeA,GAAY,CAf3B,IAAAC,EAgBE,IAAMC,EAAiB,SAAS,cAAkC,kBAAkB,EAC9EC,EAAwB,SAAS,cACrC,2BACF,EACMJ,EAAc,SAAS,cAAiC,iBAAiB,EACzEK,EAAe,SAAS,cAA8B,kBAAkB,EAC9E,GAAI,EAAEF,GAAkBC,GAAyBJ,GAAeK,GAC9D,OAEFF,EAAe,YAAc,YAAYA,EAAe,QAAQ,OAChEC,EAAsB,YACpB,kFACFJ,EAAY,MAAM,QAAU,OAC5BK,EAAa,MAAM,QAAU,QAE7B,IAAMC,EAAW,MAAM,MAAM,SAAS,OAAO,SAAS,WAAY,CAAE,OAAQ,MAAO,CAAC,EACpF,GAAIA,EAAS,GAAI,CACf,OAAO,SAAS,OAAO,EACvB,OAEF,IAAMC,EAAe,MAAMD,EAAS,KAAK,EACzCD,EAAa,MAAM,QAAU,OAC7BD,EAAsB,YAAc,GACpC,IAAMI,EAAwB,IAAI,UAAU,EAAE,gBAAgBD,EAAc,WAAW,EACvFJ,EAAe,WAAYD,EAAAM,EAAsB,gBAAgB,cAAtC,KAAAN,EAAqD,EAClF",
+  "names": ["fetchButton", "fetchPath", "_a", "fetchMessageEl", "fetchMessageSecondary", "fetchLoading", "response", "responseText", "responseTextParsedDOM"]
 }
diff --git a/static/frontend/fetch/fetch.min.css.map b/static/frontend/fetch/fetch.min.css.map
index 83bdfd8..729058b 100644
--- a/static/frontend/fetch/fetch.min.css.map
+++ b/static/frontend/fetch/fetch.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["fetch.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.Fetch-button {\n  align-self: center;\n}\n@keyframes blink {\n  0% {\n    opacity: 0.2;\n  }\n\n  20% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0.2;\n  }\n}\n\n.Fetch-dot {\n  animation-duration: 1.4s;\n  animation-fill-mode: both;\n  animation-iteration-count: infinite;\n  animation-name: blink;\n  background-color: var(--color-brand-primary);\n  border-radius: 50%;\n  display: inline-block;\n  height: 0.5rem;\n  width: 0.5rem;\n}\n\n.Fetch-loading {\n  display: none;\n  text-align: center;\n}\n\n.Fetch-loading:nth-child(2) {\n  animation-delay: 0.2s;\n}\n\n.Fetch-loading:nth-child(3) {\n  animation-delay: 0.4s;\n}\n\n.Fetch-message,\n.Fetch-messageSecondary {\n  text-align: center;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,aACC,WAAY,MACd,CACA,WAAW,MACT,GACE,QAAS,EACX,CAEA,IACE,QAAS,CACX,CAEA,GACE,QAAS,EACX,CACF,CAEA,CAAC,UACC,mBAAoB,KACpB,oBAAqB,KACrB,0BAA2B,SAC3B,eAAgB,MAChB,iBAAkB,IAAI,uBA5BxB,cA6BiB,IACf,QAAS,aACT,OAAQ,MACR,MAAO,KACT,CAEA,CAAC,cACC,QAAS,KACT,WAAY,MACd,CAEA,CALC,aAKa,cACZ,gBAAiB,GACnB,CAEA,CATC,aASa,cACZ,gBAAiB,GACnB,CAEA,CAAC,cACD,CAAC,uBACC,WAAY,MACd",
+  "mappings": ";;;;;AAMA,cACE,kBAEF,oBAEI,eAIA,aAIA,YAIJ,WACE,wBACA,yBACA,mCACA,qBACA,4CA5BF,kBA8BE,qBACA,aACA,YAGF,eACE,aACA,kBAGF,4BACE,oBAGF,4BACE,oBAGF,uCAEE",
   "names": []
 }
diff --git a/static/frontend/frontend.js b/static/frontend/frontend.js
index 85c10f9..4c4c6bc 100644
--- a/static/frontend/frontend.js
+++ b/static/frontend/frontend.js
@@ -1,4 +1,4 @@
-function q(){let n=document.querySelector(".js-header");document.querySelectorAll(".js-desktop-menu-hover").forEach(s=>{s.addEventListener("mouseenter",r=>{let i=r.target,t=document.querySelector(".forced-open");t&&t!==s&&(t.blur(),t.classList.remove("forced-open")),i.focus(),i.blur()});let c=r=>{let t=r.target?.classList.contains("forced-open"),a=r.currentTarget;t?(a.removeEventListener("blur",()=>a.classList.remove("forced-open")),a.classList.remove("forced-open"),a.classList.add("forced-closed"),a.blur(),a?.parentNode?.addEventListener("mouseout",()=>{a.classList.remove("forced-closed")})):(a.classList.remove("forced-closed"),a.classList.add("forced-open"),a.focus(),a.addEventListener("blur",()=>a.classList.remove("forced-open")),a?.parentNode?.removeEventListener("mouseout",()=>{a.classList.remove("forced-closed")}))};s.addEventListener("click",c)}),document.querySelectorAll(".Header-menuItem").forEach(s=>{s.addEventListener("keyup",c=>{let r=c;r.key==="Escape"&&r.target?.blur()})});let l=document.querySelectorAll(".js-headerMenuButton");l.forEach(s=>{s.addEventListener("click",c=>{c.preventDefault();let r=n?.classList.contains("is-active");r?h(n):y(n),s.setAttribute("aria-expanded",r?"true":"false")})}),document.querySelector(".js-scrim")?.addEventListener("click",s=>{s.preventDefault(),document.querySelectorAll(".go-NavigationDrawer-submenuItem.is-active").forEach(r=>h(r)),h(n),l.forEach(r=>{r.setAttribute("aria-expanded",n?.classList.contains("is-active")?"true":"false")})});let f=s=>{if(!s)return[];let c=Array.from(s.querySelectorAll(":scope > .go-NavigationDrawer-nav > .go-NavigationDrawer-list > .go-NavigationDrawer-listItem > a, :scope > .go-NavigationDrawer-nav > .go-NavigationDrawer-list > .go-NavigationDrawer-listItem > .go-Header-socialIcons > a")||[]),r=s.querySelector(".go-NavigationDrawer-header > a");return r&&c.unshift(r),c},g=s=>{if(s)return s.classList.contains("go-NavigationDrawer-submenuItem")},h=s=>{if(!s)return;let c=f(s);s.classList.remove("is-active"),s.closest(".go-NavigationDrawer-listItem")?.querySelector(":scope > a")?.focus(),c?.forEach(i=>i?.setAttribute("tabindex","-1")),c&&c[0]&&(c[0].removeEventListener("keydown",p(s)),c[c.length-1].removeEventListener("keydown",v(s))),s===n&&l&&l[0]?.focus()},y=s=>{let c=f(s);s.classList.add("is-active"),c.forEach(r=>r.setAttribute("tabindex","0")),c[0].focus(),c[0].addEventListener("keydown",p(s)),c[c.length-1].addEventListener("keydown",v(s))},p=s=>c=>{c.key==="Tab"&&c.shiftKey&&(c.preventDefault(),h(s))},v=s=>c=>{c.key==="Tab"&&!c.shiftKey&&(c.preventDefault(),h(s))},T=s=>{let c=g(s),r=f(s);s.addEventListener("keyup",i=>{i.key==="Escape"&&h(s)}),r.forEach(i=>{let t=i.closest("li");if(t&&t.classList.contains("js-mobile-subnav-trigger")){let a=t.querySelector(".go-NavigationDrawer-submenuItem");i.addEventListener("click",()=>{y(a)})}}),c&&(h(s),s?.querySelector(".go-NavigationDrawer-header")?.addEventListener("click",i=>{i.preventDefault(),h(s)}))};document.querySelectorAll(".go-NavigationDrawer").forEach(s=>T(s)),h(n)}function N(){let n=document.querySelector(".js-searchForm"),e=document.querySelector(".js-expandSearch"),o=n?.querySelector("input"),l=document.querySelector(".js-headerLogo"),u=document.querySelector(".js-headerMenuButton");e?.addEventListener("click",()=>{n?.classList.add("go-SearchForm--expanded"),l?.classList.add("go-Header-logo--hidden"),u?.classList.add("go-Header-navOpen--hidden"),o?.focus()}),document?.addEventListener("click",f=>{n?.contains(f.target)||(n?.classList.remove("go-SearchForm--expanded"),l?.classList.remove("go-Header-logo--hidden"),u?.classList.remove("go-Header-navOpen--hidden"))})}var S=class{constructor(e){this.el=e;this.setActive=e=>{this.activeIndex=(e+this.slides.length)%this.slides.length,this.el.setAttribute("data-slide-index",String(this.activeIndex));for(let o of this.dots)o.classList.remove("go-Carousel-dot--active");this.dots[this.activeIndex].classList.add("go-Carousel-dot--active");for(let o of this.slides)o.setAttribute("aria-hidden","true");this.slides[this.activeIndex].removeAttribute("aria-hidden"),this.liveRegion.textContent="Slide "+(this.activeIndex+1)+" of "+this.slides.length};this.slides=Array.from(e.querySelectorAll(".go-Carousel-slide")),this.dots=[],this.liveRegion=document.createElement("div"),this.activeIndex=Number(e.getAttribute("data-slide-index")??0),this.initSlides(),this.initArrows(),this.initDots(),this.initLiveRegion()}initSlides(){for(let[e,o]of this.slides.entries())e!==this.activeIndex&&o.setAttribute("aria-hidden","true")}initArrows(){let e=document.createElement("ul");e.classList.add("go-Carousel-arrows"),e.innerHTML=`
+function P(){let t=document.querySelector(".js-header");document.querySelectorAll(".js-desktop-menu-hover").forEach(a=>{a.addEventListener("mouseenter",c=>{let l=c.target,s=document.querySelector(".forced-open");s&&s!==a&&(s.blur(),s.classList.remove("forced-open")),l.classList.remove("forced-closed"),l.classList.add("forced-open")});let u=c=>{var f,p;let l=c.target,s=l==null?void 0:l.classList.contains("forced-open"),o=c.currentTarget;s?(o.removeEventListener("blur",()=>o.classList.remove("forced-open")),o.classList.remove("forced-open"),o.classList.add("forced-closed"),o.blur(),(f=o==null?void 0:o.parentNode)==null||f.addEventListener("mouseout",()=>{o.classList.remove("forced-closed")})):(o.classList.remove("forced-closed"),o.classList.add("forced-open"),o.focus(),o.addEventListener("blur",()=>o.classList.remove("forced-open")),(p=o==null?void 0:o.parentNode)==null||p.removeEventListener("mouseout",()=>{o.classList.remove("forced-closed")})),o.focus()};a.addEventListener("click",u),a.addEventListener("focus",c=>{let l=c.target;l.classList.add("forced-closed"),l.classList.remove("forced-open")});let d=c=>{let l=c,s=c.target;if(l.key==="Escape"){let o=document.querySelector(".forced-open");o&&(o.classList.remove("forced-open"),o.blur(),o.classList.add("forced-closed"),s==null||s.focus())}};document.addEventListener("keydown",d)});let n=document.querySelectorAll(".js-headerMenuButton");n.forEach(a=>{a.addEventListener("click",u=>{u.preventDefault();let d=t==null?void 0:t.classList.contains("is-active");d?v(t):w(t),a.setAttribute("aria-expanded",d?"true":"false")})});let i=document.querySelector(".js-scrim");i==null||i.addEventListener("click",a=>{a.preventDefault(),document.querySelectorAll(".go-NavigationDrawer-submenuItem.is-active").forEach(d=>v(d)),v(t),n.forEach(d=>{d.setAttribute("aria-expanded",t!=null&&t.classList.contains("is-active")?"true":"false")})});let r=a=>{if(!a)return[];let u=Array.from(a.querySelectorAll(":scope > .go-NavigationDrawer-nav > .go-NavigationDrawer-list > .go-NavigationDrawer-listItem > a, :scope > .go-NavigationDrawer-nav > .go-NavigationDrawer-list > .go-NavigationDrawer-listItem > .go-Header-socialIcons > a")||[]),d=a.querySelector(".go-NavigationDrawer-header > a");return d&&u.unshift(d),u},h=a=>{if(a)return a.classList.contains("go-NavigationDrawer-submenuItem")},v=a=>{var c,l;if(!a)return;let u=r(a);a.classList.remove("is-active");let d=(c=a.closest(".go-NavigationDrawer-listItem"))==null?void 0:c.querySelector(":scope > a");d==null||d.focus(),u==null||u.forEach(s=>s==null?void 0:s.setAttribute("tabindex","-1")),u&&u[0]&&(u[0].removeEventListener("keydown",M(a)),u[u.length-1].removeEventListener("keydown",L(a))),a===t&&n&&((l=n[0])==null||l.focus())},w=a=>{let u=r(a);a.classList.add("is-active"),u.forEach(d=>d.setAttribute("tabindex","0")),u[0].focus(),u[0].addEventListener("keydown",M(a)),u[u.length-1].addEventListener("keydown",L(a))},M=a=>u=>{u.key==="Tab"&&u.shiftKey&&(u.preventDefault(),v(a))},L=a=>u=>{u.key==="Tab"&&!u.shiftKey&&(u.preventDefault(),v(a))},b=a=>{var c;let u=h(a),d=r(a);a.addEventListener("keyup",l=>{l.key==="Escape"&&v(a)}),d.forEach(l=>{let s=l.closest("li");if(s&&s.classList.contains("js-mobile-subnav-trigger")){let o=s.querySelector(".go-NavigationDrawer-submenuItem");l.addEventListener("click",()=>{w(o)})}}),u&&(v(a),(c=a==null?void 0:a.querySelector(".go-NavigationDrawer-header"))==null||c.addEventListener("click",l=>{l.preventDefault(),v(a)}))};document.querySelectorAll(".go-NavigationDrawer").forEach(a=>b(a)),v(t)}function U(){let t=document.querySelector(".js-searchForm"),e=document.querySelector(".js-expandSearch"),n=t==null?void 0:t.querySelector("input"),i=document.querySelector(".js-headerLogo"),r=document.querySelector(".js-headerMenuButton");e==null||e.addEventListener("click",()=>{t==null||t.classList.add("go-SearchForm--expanded"),i==null||i.classList.add("go-Header-logo--hidden"),r==null||r.classList.add("go-Header-navOpen--hidden"),n==null||n.focus()}),document==null||document.addEventListener("click",h=>{t!=null&&t.contains(h.target)||(t==null||t.classList.remove("go-SearchForm--expanded"),i==null||i.classList.remove("go-Header-logo--hidden"),r==null||r.classList.remove("go-Header-navOpen--hidden"))})}var k=class{constructor(e){this.el=e;this.setActive=e=>{this.activeIndex=(e+this.slides.length)%this.slides.length,this.el.setAttribute("data-slide-index",String(this.activeIndex));for(let n of this.dots)n.classList.remove("go-Carousel-dot--active");this.dots[this.activeIndex].classList.add("go-Carousel-dot--active");for(let n of this.slides)n.setAttribute("aria-hidden","true");this.slides[this.activeIndex].removeAttribute("aria-hidden"),this.liveRegion.textContent="Slide "+(this.activeIndex+1)+" of "+this.slides.length};var n;this.slides=Array.from(e.querySelectorAll(".go-Carousel-slide")),this.dots=[],this.liveRegion=document.createElement("div"),this.activeIndex=Number((n=e.getAttribute("data-slide-index"))!=null?n:0),this.initSlides(),this.initArrows(),this.initDots(),this.initLiveRegion()}initSlides(){for(let[e,n]of this.slides.entries())e!==this.activeIndex&&n.setAttribute("aria-hidden","true")}initArrows(){var n,i;let e=document.createElement("ul");e.classList.add("go-Carousel-arrows"),e.innerHTML=`
       <li>
         <button class="go-Carousel-prevSlide" aria-label="Go to previous slide">
           <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_left_gm_grey_24dp.svg" alt="">
@@ -9,7 +9,7 @@
           <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt="">
         </button>
       </li>
-    `,e.querySelector(".go-Carousel-prevSlide")?.addEventListener("click",()=>this.setActive(this.activeIndex-1)),e.querySelector(".go-Carousel-nextSlide")?.addEventListener("click",()=>this.setActive(this.activeIndex+1)),this.el.append(e)}initDots(){let e=document.createElement("ul");e.classList.add("go-Carousel-dots");for(let o=0;o<this.slides.length;o++){let l=document.createElement("li"),u=document.createElement("button");u.classList.add("go-Carousel-dot"),o===this.activeIndex&&u.classList.add("go-Carousel-dot--active"),u.innerHTML=`<span class="go-Carousel-obscured">Slide ${o+1}</span>`,u.addEventListener("click",()=>this.setActive(o)),l.append(u),e.append(l),this.dots.push(u)}this.el.append(e)}initLiveRegion(){this.liveRegion.setAttribute("aria-live","polite"),this.liveRegion.setAttribute("aria-atomic","true"),this.liveRegion.setAttribute("class","go-Carousel-obscured"),this.liveRegion.textContent=`Slide ${this.activeIndex+1} of ${this.slides.length}`,this.el.appendChild(this.liveRegion)}};var k=class{constructor(e){this.el=e;this.data=e.dataset.toCopy??e.innerText,!this.data&&e.parentElement?.classList.contains("go-InputGroup")&&(this.data=(this.data||e.parentElement?.querySelector("input")?.value)??""),e.addEventListener("click",o=>this.handleCopyClick(o))}handleCopyClick(e){e.preventDefault();let o=1e3;if(!navigator.clipboard){this.showTooltipText("Unable to copy",o);return}navigator.clipboard.writeText(this.data).then(()=>{this.showTooltipText("Copied!",o)}).catch(()=>{this.showTooltipText("Unable to copy",o)})}showTooltipText(e,o){this.el.setAttribute("data-tooltip",e),setTimeout(()=>this.el.setAttribute("data-tooltip",""),o)}};var H=class{constructor(e){this.el=e;document.addEventListener("click",o=>{this.el.contains(o.target)||this.el.removeAttribute("open")})}};var A=class{constructor(e){this.el=e;this.el.addEventListener("change",o=>{let l=o.target,u=l.value;l.value.startsWith("/")||(u="/"+u),window.location.href=u})}};var x=class{constructor(e){this.el=e;window.dialogPolyfill&&window.dialogPolyfill.registerDialog(e),this.init()}init(){let e=document.querySelector(`[aria-controls="${this.el.id}"]`);e&&e.addEventListener("click",()=>{this.el.showModal?this.el.showModal():this.el.setAttribute("opened","true"),this.el.querySelector("input")?.focus()});for(let o of this.el.querySelectorAll("[data-modal-close]"))o.addEventListener("click",()=>{this.el.close?this.el.close():this.el.removeAttribute("opened")})}};function I(n,e,o,l){window.dataLayer??=[],typeof n=="string"?window.dataLayer.push({event:n,event_category:e,event_action:o,event_label:l}):window.dataLayer.push(n)}function D(n){window.dataLayer??=[],window.dataLayer.push(n)}var C=class{constructor(){this.handlers={},document.addEventListener("keydown",e=>this.handleKeyPress(e))}on(e,o,l,u){return this.handlers[e]??=new Set,this.handlers[e].add({description:o,callback:l,...u}),this}handleKeyPress(e){for(let o of this.handlers[e.key.toLowerCase()]??new Set){if(o.target&&o.target!==e.target)return;let l=e.target;if(!o.target&&(l?.tagName==="INPUT"||l?.tagName==="SELECT"||l?.tagName==="TEXTAREA")||l?.isContentEditable||o.withMeta&&!(e.ctrlKey||e.metaKey)||!o.withMeta&&(e.ctrlKey||e.metaKey))return;I("keypress","hotkeys",`${e.key} pressed`,o.description),o.callback(e)}}},M=new C;function j(){let n=document.querySelector(".JumpDialog"),e=n?.querySelector(".JumpDialog-body"),o=n?.querySelector(".JumpDialog-list"),l=n?.querySelector(".JumpDialog-input"),u=document.querySelector(".js-documentation"),f;function g(){let i=[];if(u){for(let t of u.querySelectorAll("[data-kind]"))i.push(h(t));for(let t of i)t.link.addEventListener("click",function(){n?.close()});return i.sort(function(t,a){return t.lower.localeCompare(a.lower)}),i}}function h(i){let t=document.createElement("a"),a=i.getAttribute("id");t.setAttribute("href","#"+a),t.setAttribute("tabindex","-1"),t.setAttribute("data-gtmc","jump to link");let d=i.getAttribute("data-kind");return{link:t,name:a??"",kind:d??"",lower:a?.toLowerCase()??""}}let y,p=-1;function v(i){for(y=i,f||(f=g()),T(-1);o?.firstChild;)o.firstChild.remove();if(i){let t=i.toLowerCase(),a=[],d=[],L=[],w=(m,E,b)=>m.name.substring(0,E)+"<b>"+m.name.substring(E,b)+"</b>"+m.name.substring(b);for(let m of f??[]){let E=m.name.toLowerCase();if(E===t)m.link.innerHTML=w(m,0,m.name.length),a.push(m);else if(E.startsWith(t))m.link.innerHTML=w(m,0,i.length),d.push(m);else{let b=E.indexOf(t);b>-1&&(m.link.innerHTML=w(m,b,b+i.length),L.push(m))}}for(let m of a.concat(d).concat(L))o?.appendChild(m.link)}else{if(!f||f.length===0){let t=document.createElement("i");t.innerHTML="There are no symbols on this page.",o?.appendChild(t)}for(let t of f??[])t.link.innerHTML=t.name+" <i>"+t.kind+"</i>",o?.appendChild(t.link)}e&&(e.scrollTop=0),f?.length&&o&&o.children.length>0&&T(0)}function T(i){let t=o?.children;if(!(!t||!e)){if(p>=0&&t[p].classList.remove("JumpDialog-active"),i>=t.length&&(i=t.length-1),i>=0){t[i].classList.add("JumpDialog-active");let a=t[i].offsetTop-t[0].offsetTop,d=a+t[i].clientHeight;a<e.scrollTop?e.scrollTop=a:d>e.scrollTop+e.clientHeight&&(e.scrollTop=d-e.clientHeight)}p=i}}function s(i){if(p<0)return;let t=p+i;t<0&&(t=0),T(t)}l?.addEventListener("keyup",function(){l.value.toUpperCase()!=y.toUpperCase()&&v(l.value)}),l?.addEventListener("keydown",function(i){switch(i.which){case 38:s(-1),i.preventDefault();break;case 40:s(1),i.preventDefault();break;case 13:p>=0&&o&&(o.children[p].click(),i.preventDefault());break}});let c=document.querySelector(".ShortcutsDialog");M.on("f","open jump to modal",i=>{n?.open||c?.open||(i.preventDefault(),l&&(l.value=""),n?.showModal?.(),l?.focus(),v(""))}).on("?","open shortcuts modal",()=>{n?.open||c?.open||c?.showModal?.()});let r=document.querySelector(".js-jumpToInput");r&&r.addEventListener("click",()=>{l&&(l.value=""),v(""),!(n?.open||c?.open)&&(n?.showModal?.(),l?.focus())}),document.querySelector(".js-openShortcuts")?.addEventListener("click",()=>{c?.showModal?.()})}var O=async function(){if(!["/about"].includes(window.location.pathname))return;let e="h2, h3, h4",o=".LeftNav a",l=document.querySelector(".LeftNav"),u=document.querySelector(".go-Content"),f=!1;function g(r="",i={},...t){if(!r)throw new Error("Provide `type` to create document element.");let a=Object.assign(document.createElement(r),i);return t.forEach(d=>{typeof d=="string"?a.appendChild(document.createTextNode(d)):Array.isArray(d)?d.forEach(L=>a.appendChild(L)):d instanceof HTMLElement&&a.appendChild(d)}),a}function h(){return new Promise((r,i)=>{let t=[],a=[];if(!u||!l)return i(".SiteContent not found.");if(l instanceof HTMLElement&&!l?.dataset?.hydrate)return r(!0);for(let d of u.querySelectorAll(e))if(d instanceof HTMLElement&&!d?.dataset?.ignore)switch(d.tagName){case"H2":t=[...t,{id:d.id,label:d?.dataset?.title?d.dataset.title:d.textContent??""}];break;case"H3":case"H4":t[t.length-1]?.subnav?t[t.length-1].subnav&&t[t.length-1].subnav?.push({id:d.id,label:d?.dataset?.title?d.dataset.title:d.textContent??""}):t[t.length-1].subnav=[{id:d.id,label:d?.dataset?.title?d.dataset.title:d.textContent??""}];break}for(let d of t){let L=g("a",{href:"#"+d.id},g("span",{},d.label));if(a=[...a,L],d?.subnav){let w=[];for(let E of d.subnav){let b=g("li",{},g("a",{href:"#"+E.id},g("img",{src:"/static/frontend/about/dot.svg",width:"5",height:"5"}),g("span",{},E.label)));w=[...w,b]}let m=g("ul",{className:"LeftSubnav"},w);a=[...a,m]}}return a.forEach(d=>l.appendChild(d)),r(!0)})}function y(){return new Promise(r=>{if(!document.querySelectorAll(o))return r(!0);for(let i of document.querySelectorAll(o))if(i instanceof HTMLAnchorElement&&i.href===location.href){v(i);break}r(!0)})}function p(){return new Promise(r=>{if(!document.querySelectorAll(o))return r(!0);for(let i of document.querySelectorAll(o))i.classList.remove("active");r(!0)})}function v(r){r instanceof HTMLAnchorElement&&p().then(()=>{r.classList.add("active");let i=r?.parentNode?.parentNode;i instanceof HTMLElement&&i?.classList?.contains("LeftSubnav")&&i.previousElementSibling?.classList.add("active")})}function T(){s();let r=document.querySelector('[href="'+location.hash+'"]');r instanceof HTMLAnchorElement&&v(r)}function s(){f=!0,setTimeout(()=>{f=!1},200)}function c(){if(window.addEventListener("hashchange",T),u?.querySelectorAll(e)){let r=t=>{if(!f&&Array.isArray(t)&&t.length>0){for(let a of t)if(a.isIntersecting&&a.target instanceof HTMLElement){let{id:d}=a.target,L=document.querySelector('[href="#'+d+'"]');L instanceof HTMLAnchorElement&&v(L);break}}},i=new IntersectionObserver(r,{threshold:0,rootMargin:"0px 0px -50% 0px"});for(let t of u.querySelectorAll(e))t instanceof HTMLElement&&!t?.dataset?.ignore&&i.observe(t)}}try{await h(),await y(),location.hash&&s(),c()}catch(r){r instanceof Error?console.error(r.message):console.error(r)}};window.addEventListener("load",()=>{for(let n of document.querySelectorAll(".js-clipboard"))new k(n);for(let n of document.querySelectorAll(".js-modal"))new x(n);for(let n of document.querySelectorAll(".js-tooltip"))new H(n);for(let n of document.querySelectorAll(".js-selectNav"))new A(n);for(let n of document.querySelectorAll(".js-carousel"))new S(n);for(let n of document.querySelectorAll(".js-toggleTheme"))n.addEventListener("click",()=>{_()});document.querySelector(".js-gtmID")?.dataset.gtmid&&window.dataLayer?D(function(){J()}):J(),q(),N(),j(),O(),K()});M.on("/","focus search",n=>{let e=Array.from(document.querySelectorAll(".js-searchFocus")).pop();e&&!window.navigator.userAgent.includes("Firefox")&&(n.preventDefault(),e.focus())});M.on("y","set canonical url",()=>{let n=document.querySelector(".js-canonicalURLPath")?.dataset.canonicalUrlPath;if(n&&n!==""){let e=window.location.hash;e&&(n+=e),window.history.replaceState(null,"",n)}});(function(){I({"gtm.start":new Date().getTime(),event:"gtm.js"})})();function J(){let n=new URLSearchParams(window.location.search),e=n.get("utm_source");if(e!=="gopls"&&e!=="godoc"&&e!=="pkggodev")return;let o=new URL(window.location.href);n.delete("utm_source"),o.search=n.toString(),window.history.replaceState(null,"",o.toString())}function _(){let n="dark",e=document.documentElement.getAttribute("data-theme");e==="dark"?n="light":e==="light"&&(n="auto");let o="";location.hostname.endsWith("go.dev")&&(o="domain=.go.dev;"),document.documentElement.setAttribute("data-theme",n),document.cookie=`prefers-color-scheme=${n};${o}path=/;max-age=31536000;`}function K(){if(!document.cookie.match(/cookie-consent=true/)){let e=document.querySelector(".js-cookieNotice"),o=e?.querySelector("button");e?.classList.add("Cookie-notice--visible"),o?.addEventListener("click",()=>{let l="";location.hostname.endsWith("go.dev")&&(l="domain=.go.dev;"),document.cookie=`cookie-consent=true;${l}path=/;max-age=31536000`,e?.remove()})}}
+    `,(n=e.querySelector(".go-Carousel-prevSlide"))==null||n.addEventListener("click",()=>this.setActive(this.activeIndex-1)),(i=e.querySelector(".go-Carousel-nextSlide"))==null||i.addEventListener("click",()=>this.setActive(this.activeIndex+1)),this.el.append(e)}initDots(){let e=document.createElement("ul");e.classList.add("go-Carousel-dots");for(let n=0;n<this.slides.length;n++){let i=document.createElement("li"),r=document.createElement("button");r.classList.add("go-Carousel-dot"),n===this.activeIndex&&r.classList.add("go-Carousel-dot--active"),r.innerHTML=`<span class="go-Carousel-obscured">Slide ${n+1}</span>`,r.addEventListener("click",()=>this.setActive(n)),i.append(r),e.append(i),this.dots.push(r)}this.el.append(e)}initLiveRegion(){this.liveRegion.setAttribute("aria-live","polite"),this.liveRegion.setAttribute("aria-atomic","true"),this.liveRegion.setAttribute("class","go-Carousel-obscured"),this.liveRegion.textContent=`Slide ${this.activeIndex+1} of ${this.slides.length}`,this.el.appendChild(this.liveRegion)}};var A=class{constructor(e){this.el=e;var n,i,r,h,v;this.data=(n=e.dataset.toCopy)!=null?n:e.innerText,!this.data&&((i=e.parentElement)!=null&&i.classList.contains("go-InputGroup"))&&(this.data=(v=this.data||((h=(r=e.parentElement)==null?void 0:r.querySelector("input"))==null?void 0:h.value))!=null?v:""),e.addEventListener("click",w=>this.handleCopyClick(w))}handleCopyClick(e){e.preventDefault();let n=1e3;if(!navigator.clipboard){this.showTooltipText("Unable to copy",n);return}navigator.clipboard.writeText(this.data).then(()=>{this.showTooltipText("Copied!",n)}).catch(()=>{this.showTooltipText("Unable to copy",n)})}showTooltipText(e,n){this.el.setAttribute("data-tooltip",e),setTimeout(()=>this.el.setAttribute("data-tooltip",""),n)}};var x=class{constructor(e){this.el=e;document.addEventListener("click",n=>{this.el.contains(n.target)||this.el.removeAttribute("open")})}};var C=class{constructor(e){this.el=e;this.el.addEventListener("change",n=>{let i=n.target,r=i.value;i.value.startsWith("/")||(r="/"+r),window.location.href=r})}};var q=class{constructor(e){this.el=e;window.dialogPolyfill&&window.dialogPolyfill.registerDialog(e),this.init()}init(){let e=document.querySelector(`[aria-controls="${this.el.id}"]`);e&&e.addEventListener("click",()=>{var n;this.el.showModal?this.el.showModal():this.el.setAttribute("opened","true"),(n=this.el.querySelector("input"))==null||n.focus()});for(let n of this.el.querySelectorAll("[data-modal-close]"))n.addEventListener("click",()=>{this.el.close?this.el.close():this.el.removeAttribute("opened")})}};function I(t,e,n,i){var r;(r=window.dataLayer)!=null||(window.dataLayer=[]),typeof t=="string"?window.dataLayer.push({event:t,event_category:e,event_action:n,event_label:i}):window.dataLayer.push(t)}function W(t){var e;(e=window.dataLayer)!=null||(window.dataLayer=[]),window.dataLayer.push(t)}var O=class{constructor(){this.handlers={},document.addEventListener("keydown",e=>this.handleKeyPress(e))}on(e,n,i,r){var h,v;return(v=(h=this.handlers)[e])!=null||(h[e]=new Set),this.handlers[e].add({description:n,callback:i,...r}),this}handleKeyPress(e){var n;for(let i of(n=this.handlers[e.key.toLowerCase()])!=null?n:new Set){if(i.target&&i.target!==e.target)return;let r=e.target;if(!i.target&&((r==null?void 0:r.tagName)==="INPUT"||(r==null?void 0:r.tagName)==="SELECT"||(r==null?void 0:r.tagName)==="TEXTAREA")||r!=null&&r.isContentEditable||i.withMeta&&!(e.ctrlKey||e.metaKey)||!i.withMeta&&(e.ctrlKey||e.metaKey))return;I("keypress","hotkeys",`${e.key} pressed`,i.description),i.callback(e)}}},H=new O;function $(){var l;let t=document.querySelector(".JumpDialog"),e=t==null?void 0:t.querySelector(".JumpDialog-body"),n=t==null?void 0:t.querySelector(".JumpDialog-list"),i=t==null?void 0:t.querySelector(".JumpDialog-input"),r=document.querySelector(".js-documentation"),h;function v(){let s=[];if(r){for(let o of r.querySelectorAll("[data-kind]"))s.push(w(o));for(let o of s)o.link.addEventListener("click",function(){t==null||t.close()});return s.sort(function(o,f){return o.lower.localeCompare(f.lower)}),s}}function w(s){var E;let o=document.createElement("a"),f=s.getAttribute("id");o.setAttribute("href","#"+f),o.setAttribute("tabindex","-1"),o.setAttribute("data-gtmc","jump to link");let p=s.getAttribute("data-kind");return{link:o,name:f!=null?f:"",kind:p!=null?p:"",lower:(E=f==null?void 0:f.toLowerCase())!=null?E:""}}let M,L=-1;function b(s){for(M=s,h||(h=v()),a(-1);n!=null&&n.firstChild;)n.firstChild.remove();if(s){let o=s.toLowerCase(),f=[],p=[],E=[],S=(g,y,T)=>g.name.substring(0,y)+"<b>"+g.name.substring(y,T)+"</b>"+g.name.substring(T);for(let g of h!=null?h:[]){let y=g.name.toLowerCase();if(y===o)g.link.innerHTML=S(g,0,g.name.length),f.push(g);else if(y.startsWith(o))g.link.innerHTML=S(g,0,s.length),p.push(g);else{let T=y.indexOf(o);T>-1&&(g.link.innerHTML=S(g,T,T+s.length),E.push(g))}}for(let g of f.concat(p).concat(E))n==null||n.appendChild(g.link)}else{if(!h||h.length===0){let o=document.createElement("i");o.innerHTML="There are no symbols on this page.",n==null||n.appendChild(o)}for(let o of h!=null?h:[])o.link.innerHTML=o.name+" <i>"+o.kind+"</i>",n==null||n.appendChild(o.link)}e&&(e.scrollTop=0),h!=null&&h.length&&n&&n.children.length>0&&a(0)}function a(s){let o=n==null?void 0:n.children;if(!(!o||!e)){if(L>=0&&o[L].classList.remove("JumpDialog-active"),s>=o.length&&(s=o.length-1),s>=0){o[s].classList.add("JumpDialog-active");let f=o[s].offsetTop-o[0].offsetTop,p=f+o[s].clientHeight;f<e.scrollTop?e.scrollTop=f:p>e.scrollTop+e.clientHeight&&(e.scrollTop=p-e.clientHeight)}L=s}}function u(s){if(L<0)return;let o=L+s;o<0&&(o=0),a(o)}i==null||i.addEventListener("keyup",function(){i.value.toUpperCase()!=M.toUpperCase()&&b(i.value)}),i==null||i.addEventListener("keydown",function(s){switch(s.which){case 38:u(-1),s.preventDefault();break;case 40:u(1),s.preventDefault();break;case 13:L>=0&&n&&(n.children[L].click(),s.preventDefault());break}});let d=document.querySelector(".ShortcutsDialog");H.on("f","open jump to modal",s=>{var o;t!=null&&t.open||d!=null&&d.open||(s.preventDefault(),i&&(i.value=""),(o=t==null?void 0:t.showModal)==null||o.call(t),i==null||i.focus(),b(""))}).on("?","open shortcuts modal",()=>{var s;t!=null&&t.open||d!=null&&d.open||(s=d==null?void 0:d.showModal)==null||s.call(d)});let c=document.querySelector(".js-jumpToInput");c&&c.addEventListener("click",()=>{var s;i&&(i.value=""),b(""),!(t!=null&&t.open||d!=null&&d.open)&&((s=t==null?void 0:t.showModal)==null||s.call(t),i==null||i.focus())}),(l=document.querySelector(".js-openShortcuts"))==null||l.addEventListener("click",()=>{var s;(s=d==null?void 0:d.showModal)==null||s.call(d)})}var G=async function(){if(!["/about"].includes(window.location.pathname))return;let e="h2, h3, h4",n=".LeftNav a",i=document.querySelector(".LeftNav"),r=document.querySelector(".go-Content"),h=!1;function v(c="",l={},...s){if(!c)throw new Error("Provide `type` to create document element.");let o=Object.assign(document.createElement(c),l);return s.forEach(f=>{typeof f=="string"?o.appendChild(document.createTextNode(f)):Array.isArray(f)?f.forEach(p=>o.appendChild(p)):f instanceof HTMLElement&&o.appendChild(f)}),o}function w(){return new Promise((c,l)=>{var f,p,E,S,g,y,T,J,R,_;let s=[],o=[];if(!r||!i)return l(".SiteContent not found.");if(i instanceof HTMLElement&&!((f=i==null?void 0:i.dataset)!=null&&f.hydrate))return c(!0);for(let m of r.querySelectorAll(e))if(m instanceof HTMLElement&&!((p=m==null?void 0:m.dataset)!=null&&p.ignore))switch(m.tagName){case"H2":s=[...s,{id:m.id,label:(E=m==null?void 0:m.dataset)!=null&&E.title?m.dataset.title:(S=m.textContent)!=null?S:""}];break;case"H3":case"H4":(g=s[s.length-1])!=null&&g.subnav?s[s.length-1].subnav&&((_=s[s.length-1].subnav)==null||_.push({id:m.id,label:(J=m==null?void 0:m.dataset)!=null&&J.title?m.dataset.title:(R=m.textContent)!=null?R:""})):s[s.length-1].subnav=[{id:m.id,label:(y=m==null?void 0:m.dataset)!=null&&y.title?m.dataset.title:(T=m.textContent)!=null?T:""}];break}for(let m of s){let V=v("a",{href:"#"+m.id},v("span",{},m.label));if(o=[...o,V],m!=null&&m.subnav){let N=[];for(let K of m.subnav){let z=v("li",{},v("a",{href:"#"+K.id},v("img",{src:"/static/frontend/about/dot.svg",width:"5",height:"5"}),v("span",{},K.label)));N=[...N,z]}let X=v("ul",{className:"LeftSubnav"},N);o=[...o,X]}}return o.forEach(m=>i.appendChild(m)),c(!0)})}function M(){return new Promise(c=>{if(!document.querySelectorAll(n))return c(!0);for(let l of document.querySelectorAll(n))if(l instanceof HTMLAnchorElement&&l.href===location.href){b(l);break}c(!0)})}function L(){return new Promise(c=>{if(!document.querySelectorAll(n))return c(!0);for(let l of document.querySelectorAll(n))l.classList.remove("active");c(!0)})}function b(c){c instanceof HTMLAnchorElement&&L().then(()=>{var s,o,f;c.classList.add("active");let l=(s=c==null?void 0:c.parentNode)==null?void 0:s.parentNode;l instanceof HTMLElement&&((o=l==null?void 0:l.classList)!=null&&o.contains("LeftSubnav"))&&((f=l.previousElementSibling)==null||f.classList.add("active"))})}function a(){u();let c=document.querySelector('[href="'+location.hash+'"]');c instanceof HTMLAnchorElement&&b(c)}function u(){h=!0,setTimeout(()=>{h=!1},200)}function d(){var c;if(window.addEventListener("hashchange",a),r!=null&&r.querySelectorAll(e)){let l=o=>{if(!h&&Array.isArray(o)&&o.length>0){for(let f of o)if(f.isIntersecting&&f.target instanceof HTMLElement){let{id:p}=f.target,E=document.querySelector('[href="#'+p+'"]');E instanceof HTMLAnchorElement&&b(E);break}}},s=new IntersectionObserver(l,{threshold:0,rootMargin:"0px 0px -50% 0px"});for(let o of r.querySelectorAll(e))o instanceof HTMLElement&&!((c=o==null?void 0:o.dataset)!=null&&c.ignore)&&s.observe(o)}}try{await w(),await M(),location.hash&&u(),d()}catch(c){c instanceof Error?console.error(c.message):console.error(c)}};window.addEventListener("load",()=>{var t;for(let e of document.querySelectorAll(".js-clipboard"))new A(e);for(let e of document.querySelectorAll(".js-modal"))new q(e);for(let e of document.querySelectorAll(".js-tooltip"))new x(e);for(let e of document.querySelectorAll(".js-selectNav"))new C(e);for(let e of document.querySelectorAll(".js-carousel"))new k(e);for(let e of document.querySelectorAll(".js-toggleTheme"))e.addEventListener("click",()=>{Y()});(t=document.querySelector(".js-gtmID"))!=null&&t.dataset.gtmid&&window.dataLayer?W(function(){B()}):B(),P(),U(),$(),G(),Z()});H.on("/","focus search",t=>{let e=Array.from(document.querySelectorAll(".js-searchFocus")).pop();e&&!window.navigator.userAgent.includes("Firefox")&&(t.preventDefault(),e.focus())});H.on("y","set canonical url",()=>{var e;let t=(e=document.querySelector(".js-canonicalURLPath"))==null?void 0:e.dataset.canonicalUrlPath;if(t&&t!==""){let n=window.location.hash;n&&(t+=n),window.history.replaceState(null,"",t)}});(function(){I({"gtm.start":new Date().getTime(),event:"gtm.js"})})();function B(){let t=new URLSearchParams(window.location.search),e=t.get("utm_source");if(e!=="gopls"&&e!=="godoc"&&e!=="pkggodev")return;let n=new URL(window.location.href);t.delete("utm_source"),n.search=t.toString(),window.history.replaceState(null,"",n.toString())}function Y(){let t="dark",e=document.documentElement.getAttribute("data-theme");e==="dark"?t="light":e==="light"&&(t="auto");let n="";location.hostname.endsWith("go.dev")&&(n="domain=.go.dev;"),document.documentElement.setAttribute("data-theme",t),document.cookie=`prefers-color-scheme=${t};${n}path=/;max-age=31536000;`}function Z(){if(!document.cookie.match(/cookie-consent=true/)){let e=document.querySelector(".js-cookieNotice"),n=e==null?void 0:e.querySelector("button");e==null||e.classList.add("Cookie-notice--visible"),n==null||n.addEventListener("click",()=>{let i="";location.hostname.endsWith("go.dev")&&(i="domain=.go.dev;"),document.cookie=`cookie-consent=true;${i}path=/;max-age=31536000`,e==null||e.remove()})}}
 /**
  * @license
  * Copyright 2021 The Go Authors. All rights reserved.
diff --git a/static/frontend/frontend.js.map b/static/frontend/frontend.js.map
index cb08d2c..a2c3058 100644
--- a/static/frontend/frontend.js.map
+++ b/static/frontend/frontend.js.map
@@ -1,7 +1,7 @@
 {
   "version": 3,
   "sources": ["../shared/header/header.ts", "../shared/carousel/carousel.ts", "../shared/clipboard/clipboard.ts", "../shared/tooltip/tooltip.ts", "../shared/outline/select.ts", "../shared/modal/modal.ts", "../shared/analytics/analytics.ts", "../shared/keyboard/keyboard.ts", "../shared/jump/jump.ts", "about/index.ts", "frontend.ts"],
-  "sourcesContent": ["/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nexport function registerHeaderListeners(): void {\n  const header = document.querySelector('.js-header') as HTMLElement;\n\n  // Desktop menu hover state\n  const menuItemHovers = document.querySelectorAll('.js-desktop-menu-hover');\n  menuItemHovers.forEach(menuItemHover => {\n    // when user clicks on the dropdown menu item on desktop or mobile,\n    // force the menu to stay open until the user clicks off of it.\n    menuItemHover.addEventListener('mouseenter', e => {\n      const target = e.target as HTMLElement;\n      const forced = document.querySelector('.forced-open') as HTMLElement;\n      if (forced && forced !== menuItemHover) {\n        forced.blur();\n        forced.classList.remove('forced-open');\n      }\n      // prevents menus that have been tabbed into from staying open\n      // when you hover over another menu\n      target.focus();\n      target.blur();\n    });\n\n    const toggleForcedOpen = (e: Event) => {\n      const target = e.target as HTMLElement;\n      const isForced = target?.classList.contains('forced-open');\n      const currentTarget = e.currentTarget as HTMLElement;\n      if (isForced) {\n        currentTarget.removeEventListener('blur', () =>\n          currentTarget.classList.remove('forced-open')\n        );\n        currentTarget.classList.remove('forced-open');\n        currentTarget.classList.add('forced-closed');\n        currentTarget.blur();\n        currentTarget?.parentNode?.addEventListener('mouseout', () => {\n          currentTarget.classList.remove('forced-closed');\n        });\n      } else {\n        currentTarget.classList.remove('forced-closed');\n        currentTarget.classList.add('forced-open');\n        currentTarget.focus();\n        currentTarget.addEventListener('blur', () => currentTarget.classList.remove('forced-open'));\n        currentTarget?.parentNode?.removeEventListener('mouseout', () => {\n          currentTarget.classList.remove('forced-closed');\n        });\n      }\n    };\n    menuItemHover.addEventListener('click', toggleForcedOpen);\n  });\n\n  // ensure desktop submenus are closed when esc is pressed\n  const headerItems = document.querySelectorAll('.Header-menuItem');\n  headerItems.forEach(header => {\n    header.addEventListener('keyup', e => {\n      const event = e as KeyboardEvent;\n      if (event.key === 'Escape') {\n        (event.target as HTMLElement)?.blur();\n      }\n    });\n  });\n\n  // Mobile menu subnav menus\n  const headerbuttons = document.querySelectorAll('.js-headerMenuButton');\n  headerbuttons.forEach(button => {\n    button.addEventListener('click', e => {\n      e.preventDefault();\n      const isActive = header?.classList.contains('is-active');\n      if (isActive) {\n        handleNavigationDrawerInactive(header);\n      } else {\n        handleNavigationDrawerActive(header);\n      }\n      button.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n    });\n  });\n\n  const scrim = document.querySelector('.js-scrim');\n  scrim?.addEventListener('click', e => {\n    e.preventDefault();\n\n    // find any active submenus and close them\n    const activeSubnavs = document.querySelectorAll('.go-NavigationDrawer-submenuItem.is-active');\n    activeSubnavs.forEach(subnav => handleNavigationDrawerInactive(subnav as HTMLElement));\n\n    handleNavigationDrawerInactive(header);\n\n    headerbuttons.forEach(button => {\n      button.setAttribute(\n        'aria-expanded',\n        header?.classList.contains('is-active') ? 'true' : 'false'\n      );\n    });\n  });\n\n  const getNavigationDrawerMenuItems = (navigationDrawer: HTMLElement): HTMLElement[] => {\n    if (!navigationDrawer) {\n      return [];\n    }\n\n    const menuItems = Array.from(\n      navigationDrawer.querySelectorAll(\n        ':scope > .go-NavigationDrawer-nav > .go-NavigationDrawer-list > .go-NavigationDrawer-listItem > a, :scope > .go-NavigationDrawer-nav > .go-NavigationDrawer-list > .go-NavigationDrawer-listItem > .go-Header-socialIcons > a'\n      ) || []\n    );\n\n    const anchorEl = navigationDrawer.querySelector('.go-NavigationDrawer-header > a');\n    if (anchorEl) {\n      menuItems.unshift(anchorEl);\n    }\n    return menuItems as HTMLElement[];\n  };\n\n  const getNavigationDrawerIsSubnav = (navigationDrawer: HTMLElement) => {\n    if (!navigationDrawer) {\n      return;\n    }\n    return navigationDrawer.classList.contains('go-NavigationDrawer-submenuItem');\n  };\n\n  const handleNavigationDrawerInactive = (navigationDrawer: HTMLElement) => {\n    if (!navigationDrawer) {\n      return;\n    }\n    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);\n    navigationDrawer.classList.remove('is-active');\n    const parentMenuItem = navigationDrawer\n      .closest('.go-NavigationDrawer-listItem')\n      ?.querySelector(':scope > a') as HTMLElement;\n    parentMenuItem?.focus();\n    menuItems?.forEach(item => item?.setAttribute('tabindex', '-1'));\n    if (menuItems && menuItems[0]) {\n      menuItems[0].removeEventListener('keydown', handleMenuItemTabLeftFactory(navigationDrawer));\n      menuItems[menuItems.length - 1].removeEventListener(\n        'keydown',\n        handleMenuItemTabRightFactory(navigationDrawer)\n      );\n    }\n\n    if (navigationDrawer === header) {\n      headerbuttons && (headerbuttons[0] as HTMLElement)?.focus();\n    }\n  };\n\n  const handleNavigationDrawerActive = (navigationDrawer: HTMLElement) => {\n    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);\n\n    navigationDrawer.classList.add('is-active');\n    menuItems.forEach(item => item.setAttribute('tabindex', '0'));\n    menuItems[0].focus();\n\n    menuItems[0].addEventListener('keydown', handleMenuItemTabLeftFactory(navigationDrawer));\n    menuItems[menuItems.length - 1].addEventListener(\n      'keydown',\n      handleMenuItemTabRightFactory(navigationDrawer)\n    );\n  };\n\n  const handleMenuItemTabLeftFactory = (navigationDrawer: HTMLElement) => {\n    return (e: KeyboardEvent) => {\n      if (e.key === 'Tab' && e.shiftKey) {\n        e.preventDefault();\n        handleNavigationDrawerInactive(navigationDrawer);\n      }\n    };\n  };\n\n  const handleMenuItemTabRightFactory = (navigationDrawer: HTMLElement) => {\n    return (e: KeyboardEvent) => {\n      if (e.key === 'Tab' && !e.shiftKey) {\n        e.preventDefault();\n        handleNavigationDrawerInactive(navigationDrawer);\n      }\n    };\n  };\n\n  const prepMobileNavigationDrawer = (navigationDrawer: HTMLElement) => {\n    const isSubnav = getNavigationDrawerIsSubnav(navigationDrawer);\n    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);\n    navigationDrawer.addEventListener('keyup', e => {\n      if (e.key === 'Escape') {\n        handleNavigationDrawerInactive(navigationDrawer);\n      }\n    });\n\n    menuItems.forEach(item => {\n      const parentLi = item.closest('li');\n      if (parentLi && parentLi.classList.contains('js-mobile-subnav-trigger')) {\n        const submenu = parentLi.querySelector('.go-NavigationDrawer-submenuItem') as HTMLElement;\n        item.addEventListener('click', () => {\n          handleNavigationDrawerActive(submenu);\n        });\n      }\n    });\n    if (isSubnav) {\n      handleNavigationDrawerInactive(navigationDrawer);\n      navigationDrawer\n        ?.querySelector('.go-NavigationDrawer-header')\n        ?.addEventListener('click', e => {\n          e.preventDefault();\n          handleNavigationDrawerInactive(navigationDrawer);\n        });\n    }\n  };\n\n  document\n    .querySelectorAll('.go-NavigationDrawer')\n    .forEach(drawer => prepMobileNavigationDrawer(drawer as HTMLElement));\n\n  handleNavigationDrawerInactive(header);\n}\n\nexport function registerSearchFormListeners(): void {\n  const searchForm = document.querySelector('.js-searchForm');\n  const expandSearch = document.querySelector('.js-expandSearch');\n  const input = searchForm?.querySelector('input');\n  const headerLogo = document.querySelector('.js-headerLogo');\n  const menuButton = document.querySelector('.js-headerMenuButton');\n  expandSearch?.addEventListener('click', () => {\n    searchForm?.classList.add('go-SearchForm--expanded');\n    headerLogo?.classList.add('go-Header-logo--hidden');\n    menuButton?.classList.add('go-Header-navOpen--hidden');\n    input?.focus();\n  });\n  document?.addEventListener('click', e => {\n    if (!searchForm?.contains(e.target as Node)) {\n      searchForm?.classList.remove('go-SearchForm--expanded');\n      headerLogo?.classList.remove('go-Header-logo--hidden');\n      menuButton?.classList.remove('go-Header-navOpen--hidden');\n    }\n  });\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Carousel Controller adds event listeners, accessibility enhancements, and\n * control elements to a carousel component.\n */\nexport class CarouselController {\n  /**\n   * slides is a collection of slides in the carousel.\n   */\n  private slides: HTMLLIElement[];\n  /**\n   * dots is a collection of dot navigation controls, added to the carousel\n   * by this controller.\n   */\n  private dots: HTMLElement[];\n  /**\n   * liveRegion is a visually hidden element that notifies assitive devices\n   * of visual changes to the carousel. They are added to the carousel by\n   * this controller.\n   */\n  private liveRegion: HTMLElement;\n  /**\n   * activeIndex is the 0-index of the currently active slide.\n   */\n  private activeIndex: number;\n\n  constructor(private el: HTMLElement) {\n    this.slides = Array.from(el.querySelectorAll('.go-Carousel-slide'));\n    this.dots = [];\n    this.liveRegion = document.createElement('div');\n    this.activeIndex = Number(el.getAttribute('data-slide-index') ?? 0);\n\n    this.initSlides();\n    this.initArrows();\n    this.initDots();\n    this.initLiveRegion();\n  }\n\n  private initSlides() {\n    for (const [i, v] of this.slides.entries()) {\n      if (i === this.activeIndex) continue;\n      v.setAttribute('aria-hidden', 'true');\n    }\n  }\n\n  private initArrows() {\n    const arrows = document.createElement('ul');\n    arrows.classList.add('go-Carousel-arrows');\n    arrows.innerHTML = `\n      <li>\n        <button class=\"go-Carousel-prevSlide\" aria-label=\"Go to previous slide\">\n          <img class=\"go-Icon\" height=\"24\" width=\"24\" src=\"/static/shared/icon/arrow_left_gm_grey_24dp.svg\" alt=\"\">\n        </button>\n      </li>\n      <li>\n        <button class=\"go-Carousel-nextSlide\" aria-label=\"Go to next slide\">\n          <img class=\"go-Icon\" height=\"24\" width=\"24\" src=\"/static/shared/icon/arrow_right_gm_grey_24dp.svg\" alt=\"\">\n        </button>\n      </li>\n    `;\n    arrows\n      .querySelector('.go-Carousel-prevSlide')\n      ?.addEventListener('click', () => this.setActive(this.activeIndex - 1));\n    arrows\n      .querySelector('.go-Carousel-nextSlide')\n      ?.addEventListener('click', () => this.setActive(this.activeIndex + 1));\n    this.el.append(arrows);\n  }\n\n  private initDots() {\n    const dots = document.createElement('ul');\n    dots.classList.add('go-Carousel-dots');\n    for (let i = 0; i < this.slides.length; i++) {\n      const li = document.createElement('li');\n      const button = document.createElement('button');\n      button.classList.add('go-Carousel-dot');\n      if (i === this.activeIndex) {\n        button.classList.add('go-Carousel-dot--active');\n      }\n      button.innerHTML = `<span class=\"go-Carousel-obscured\">Slide ${i + 1}</span>`;\n      button.addEventListener('click', () => this.setActive(i));\n      li.append(button);\n      dots.append(li);\n      this.dots.push(button);\n    }\n    this.el.append(dots);\n  }\n\n  private initLiveRegion() {\n    this.liveRegion.setAttribute('aria-live', 'polite');\n    this.liveRegion.setAttribute('aria-atomic', 'true');\n    this.liveRegion.setAttribute('class', 'go-Carousel-obscured');\n    this.liveRegion.textContent = `Slide ${this.activeIndex + 1} of ${this.slides.length}`;\n    this.el.appendChild(this.liveRegion);\n  }\n\n  private setActive = (index: number) => {\n    this.activeIndex = (index + this.slides.length) % this.slides.length;\n    this.el.setAttribute('data-slide-index', String(this.activeIndex));\n    for (const d of this.dots) {\n      d.classList.remove('go-Carousel-dot--active');\n    }\n    this.dots[this.activeIndex].classList.add('go-Carousel-dot--active');\n    for (const s of this.slides) {\n      s.setAttribute('aria-hidden', 'true');\n    }\n    this.slides[this.activeIndex].removeAttribute('aria-hidden');\n    this.liveRegion.textContent = 'Slide ' + (this.activeIndex + 1) + ' of ' + this.slides.length;\n  };\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This class decorates an element to copy arbitrary data attached via a data-\n * attribute to the clipboard.\n */\nexport class ClipboardController {\n  /**\n   * The data to be copied to the clipboard.\n   */\n  private data: string;\n\n  /**\n   * @param el The element that will trigger copying text to the clipboard. The text is\n   * expected to be within its data-to-copy attribute.\n   */\n  constructor(private el: HTMLButtonElement) {\n    this.data = el.dataset['toCopy'] ?? el.innerText;\n    // if data-to-copy is empty and the button is part of an input group\n    // capture the value of the input.\n    if (!this.data && el.parentElement?.classList.contains('go-InputGroup')) {\n      this.data = (this.data || el.parentElement?.querySelector('input')?.value) ?? '';\n    }\n    el.addEventListener('click', e => this.handleCopyClick(e));\n  }\n\n  /**\n   * Handles when the primary element is clicked.\n   */\n  handleCopyClick(e: MouseEvent): void {\n    e.preventDefault();\n    const TOOLTIP_SHOW_DURATION_MS = 1000;\n\n    // This API is not available on iOS.\n    if (!navigator.clipboard) {\n      this.showTooltipText('Unable to copy', TOOLTIP_SHOW_DURATION_MS);\n      return;\n    }\n    navigator.clipboard\n      .writeText(this.data)\n      .then(() => {\n        this.showTooltipText('Copied!', TOOLTIP_SHOW_DURATION_MS);\n      })\n      .catch(() => {\n        this.showTooltipText('Unable to copy', TOOLTIP_SHOW_DURATION_MS);\n      });\n  }\n\n  /**\n   * Shows the given text in a tooltip for a specified amount of time, in milliseconds.\n   */\n  showTooltipText(text: string, durationMs: number): void {\n    this.el.setAttribute('data-tooltip', text);\n    setTimeout(() => this.el.setAttribute('data-tooltip', ''), durationMs);\n  }\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * ToolTipController handles closing tooltips on external clicks.\n */\nexport class ToolTipController {\n  constructor(private el: HTMLDetailsElement) {\n    document.addEventListener('click', e => {\n      const insideTooltip = this.el.contains(e.target as Element);\n      if (!insideTooltip) {\n        this.el.removeAttribute('open');\n      }\n    });\n  }\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { TreeNavController } from './tree.js';\n\nexport class SelectNavController {\n  constructor(private el: Element) {\n    this.el.addEventListener('change', e => {\n      const target = e.target as HTMLSelectElement;\n      let href = target.value;\n      if (!target.value.startsWith('/')) {\n        href = '/' + href;\n      }\n      window.location.href = href;\n    });\n  }\n}\n\nexport function makeSelectNav(tree: TreeNavController): HTMLLabelElement {\n  const label = document.createElement('label');\n  label.classList.add('go-Label');\n  label.setAttribute('aria-label', 'Menu');\n  const select = document.createElement('select');\n  select.classList.add('go-Select', 'js-selectNav');\n  label.appendChild(select);\n  const outline = document.createElement('optgroup');\n  outline.label = 'Outline';\n  select.appendChild(outline);\n  const groupMap: Record<string, HTMLOptGroupElement> = {};\n  let group: HTMLOptGroupElement;\n  for (const t of tree.treeitems) {\n    if (Number(t.depth) > 4) continue;\n    if (t.groupTreeitem) {\n      group = groupMap[t.groupTreeitem.label];\n      if (!group) {\n        group = groupMap[t.groupTreeitem.label] = document.createElement('optgroup');\n        group.label = t.groupTreeitem.label;\n        select.appendChild(group);\n      }\n    } else {\n      group = outline;\n    }\n    const o = document.createElement('option');\n    o.label = t.label;\n    o.textContent = t.label;\n    o.value = (t.el as HTMLAnchorElement).href.replace(window.location.origin, '').replace('/', '');\n    group.appendChild(o);\n  }\n  tree.addObserver(t => {\n    const hash = (t.el as HTMLAnchorElement).hash;\n    const value = select.querySelector<HTMLOptionElement>(`[value$=\"${hash}\"]`)?.value;\n    if (value) {\n      select.value = value;\n    }\n  }, 50);\n  return label;\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\ninterface Window {\n  dialogPolyfill?: {\n    registerDialog: (el: HTMLDialogElement) => void;\n  };\n}\n\ndeclare const window: Window;\n\n/**\n * ModalController registers a dialog element with the polyfill if\n * necessary for the current browser, add adds event listeners to\n * close and open modals.\n */\nexport class ModalController {\n  constructor(private el: HTMLDialogElement) {\n    if (window.dialogPolyfill) {\n      window.dialogPolyfill.registerDialog(el);\n    }\n    this.init();\n  }\n\n  init() {\n    const button = document.querySelector<HTMLButtonElement>(`[aria-controls=\"${this.el.id}\"]`);\n    if (button) {\n      button.addEventListener('click', () => {\n        if (this.el.showModal) {\n          this.el.showModal();\n        } else {\n          this.el.setAttribute('opened', 'true');\n        }\n        this.el.querySelector('input')?.focus();\n      });\n    }\n    for (const btn of this.el.querySelectorAll<HTMLButtonElement>('[data-modal-close]')) {\n      btn.addEventListener('click', () => {\n        if (this.el.close) {\n          this.el.close();\n        } else {\n          this.el.removeAttribute('opened');\n        }\n      });\n    }\n  }\n}\n", "interface TagManagerEvent {\n  /**\n   * event is the name of the event, used to filter events in\n   * Google Analytics.\n   */\n  event: string;\n\n  /**\n   * event_category is a name that you supply as a way to group objects\n   * that to analyze. Typically, you will use the same category name\n   * multiple times over related UI elements (buttons, links, etc).\n   */\n  event_category?: string;\n\n  /**\n   * event_action is used to name the type of event or interaction you\n   * want to measure for a particular web object. For example, with a\n   * single \"form\" category, you can analyze a number of specific events\n   * with this parameter, such as: form entered, form submitted.\n   */\n  event_action?: string;\n\n  /**\n   * event_label provide additional information for events that you want\n   * to analyze, such as the text label of a link.\n   */\n  event_label?: string;\n\n  /**\n   * gtm.start is used to initialize Google Tag Manager.\n   */\n  'gtm.start'?: number;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ndeclare global {\n  interface Window {\n    dataLayer?: (TagManagerEvent | VoidFunction)[];\n    ga?: unknown;\n  }\n}\n\n/**\n * track sends events to Google Tag Manager.\n */\nexport function track(\n  event: string | TagManagerEvent,\n  category?: string,\n  action?: string,\n  label?: string\n): void {\n  window.dataLayer ??= [];\n  if (typeof event === 'string') {\n    window.dataLayer.push({\n      event,\n      event_category: category,\n      event_action: action,\n      event_label: label,\n    });\n  } else {\n    window.dataLayer.push(event);\n  }\n}\n\n/**\n * func adds functions to run sequentionally after\n * Google Tag Manager is ready.\n */\nexport function func(fn: () => void): void {\n  window.dataLayer ??= [];\n  window.dataLayer.push(fn);\n}\n", "/*!\n * @license\n * Copyright 2019-2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { track } from '../analytics/analytics';\n\n/**\n * Options are keyhandler callback options.\n */\ninterface Options {\n  /**\n   * target is the element the key event should filter on. The\n   * default target is the document.\n   */\n  target?: Element;\n\n  /**\n   * withMeta specifies if the event callback should fire when\n   * the key is pressed with a meta key (ctrl, alt, etc). By\n   * default meta keypresses are ignored.\n   */\n  withMeta?: boolean;\n}\n\n/**\n * KeyHandler is the config for a keyboard event callback.\n */\ninterface KeyHandler extends Options {\n  description: string;\n  callback: (e: KeyboardEvent) => void;\n}\n\n/**\n * KeyboardController controls event callbacks for sitewide\n * keyboard events. Multiple callbacks can be registered for\n * a single key and by default the controller ignores events\n * for text input targets.\n */\nclass KeyboardController {\n  handlers: Record<string, Set<KeyHandler>>;\n\n  constructor() {\n    this.handlers = {};\n    document.addEventListener('keydown', e => this.handleKeyPress(e));\n  }\n\n  /**\n   * on registers keyboard event callbacks.\n   * @param key the key to register.\n   * @param description name of the event.\n   * @param callback event callback.\n   * @param options set target and withMeta options to override the default behaviors.\n   */\n  on(key: string, description: string, callback: (e: KeyboardEvent) => void, options?: Options) {\n    this.handlers[key] ??= new Set();\n    this.handlers[key].add({ description, callback, ...options });\n    return this;\n  }\n\n  private handleKeyPress(e: KeyboardEvent) {\n    for (const handler of this.handlers[e.key.toLowerCase()] ?? new Set()) {\n      if (handler.target && handler.target !== e.target) {\n        return;\n      }\n      const t = e.target as HTMLElement | null;\n      if (\n        !handler.target &&\n        (t?.tagName === 'INPUT' || t?.tagName === 'SELECT' || t?.tagName === 'TEXTAREA')\n      ) {\n        return;\n      }\n      if (t?.isContentEditable) {\n        return;\n      }\n      if (\n        (handler.withMeta && !(e.ctrlKey || e.metaKey)) ||\n        (!handler.withMeta && (e.ctrlKey || e.metaKey))\n      ) {\n        return;\n      }\n      track('keypress', 'hotkeys', `${e.key} pressed`, handler.description);\n      handler.callback(e);\n    }\n  }\n}\n\nexport const keyboard = new KeyboardController();\n", "/*!\n * @license\n * Copyright 2019-2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n// This file implements the behavior of the \"jump to symbol\" dialog for Go\n// package documentation, as well as the simple dialog that displays keyboard\n// shortcuts.\n\n// The DOM for the dialogs is at the bottom of static/frontend/unit/main/_modals.tmpl.\n// The CSS is in static/frontend/unit/main/_modals.css.\n\n// The dialog is activated by pressing the 'f' key. It presents a list\n// (#JumpDialog-list) of all Go symbols displayed in the documentation.\n// Entering text in the dialog's text box (#JumpDialog-filter) restricts the\n// list to symbols containing the text. Clicking on an symbol jumps to\n// its documentation.\n\n// This code is based on\n// https://go.googlesource.com/gddo/+/refs/heads/master/gddo-server/assets/site.js.\n// It was modified to remove the dependence on jquery and bootstrap.\n\nimport { keyboard } from '../keyboard/keyboard';\n\nexport function initModals(): void {\n  const jumpDialog = document.querySelector<HTMLDialogElement>('.JumpDialog');\n  const jumpBody = jumpDialog?.querySelector<HTMLDivElement>('.JumpDialog-body');\n  const jumpList = jumpDialog?.querySelector<HTMLDivElement>('.JumpDialog-list');\n  const jumpFilter = jumpDialog?.querySelector<HTMLInputElement>('.JumpDialog-input');\n  const doc = document.querySelector<HTMLDivElement>('.js-documentation');\n\n  interface JumpListItem {\n    link: HTMLAnchorElement;\n    name: string;\n    kind: string;\n    lower: string;\n  }\n\n  let jumpListItems: JumpListItem[] | undefined; // All the symbols in the doc; computed only once.\n\n  // collectJumpListItems returns a list of items, one for each symbol in the\n  // documentation on the current page.\n  //\n  // It uses the data-kind attribute generated in the documentation HTML to find\n  // the symbols and their id attributes.\n  //\n  // If there are no data-kind attributes, then we have older doc; fall back to\n  // a less precise method.\n  function collectJumpListItems() {\n    const items = [];\n    if (!doc) return;\n    for (const el of doc.querySelectorAll('[data-kind]')) {\n      items.push(newJumpListItem(el));\n    }\n\n    // Clicking on any of the links closes the dialog.\n    for (const item of items) {\n      item.link.addEventListener('click', function () {\n        jumpDialog?.close();\n      });\n    }\n    // Sort case-insensitively by symbol name.\n    items.sort(function (a, b) {\n      return a.lower.localeCompare(b.lower);\n    });\n    return items;\n  }\n\n  // newJumpListItem creates a new item for the DOM element el.\n  // An item is an object with:\n  // - name: the element's id (which is the symbol name)\n  // - kind: the element's kind (function, variable, etc.),\n  // - link: a link ('a' tag) to the element\n  // - lower: the name in lower case, just for sorting\n  function newJumpListItem(el: Element): JumpListItem {\n    const a = document.createElement('a');\n    const name = el.getAttribute('id');\n    a.setAttribute('href', '#' + name);\n    a.setAttribute('tabindex', '-1');\n    a.setAttribute('data-gtmc', 'jump to link');\n    const kind = el.getAttribute('data-kind');\n    return {\n      link: a,\n      name: name ?? '',\n      kind: kind ?? '',\n      lower: name?.toLowerCase() ?? '', // for sorting\n    };\n  }\n\n  let lastFilterValue: string; // The last contents of the filter text box.\n  let activeJumpItem = -1; // The index of the currently active item in the list.\n\n  // updateJumpList sets the elements of the dialog list to\n  // everything whose name contains filter.\n  function updateJumpList(filter: string) {\n    lastFilterValue = filter;\n    if (!jumpListItems) {\n      jumpListItems = collectJumpListItems();\n    }\n    setActiveJumpItem(-1);\n\n    // Remove all children from list.\n    while (jumpList?.firstChild) {\n      jumpList.firstChild.remove();\n    }\n\n    if (filter) {\n      // A filter is set. We treat the filter as a substring that can appear in\n      // an item name (case insensitive), and find the following matches - in\n      // order of priority:\n      //\n      // 1. Exact matches (the filter matches the item's name exactly)\n      // 2. Prefix matches (the item's name starts with filter)\n      // 3. Infix matches (the filter is a substring of the item's name)\n      const filterLowerCase = filter.toLowerCase();\n\n      const exactMatches = [];\n      const prefixMatches = [];\n      const infixMatches = [];\n\n      // makeLinkHtml creates the link name HTML for a list item. item is the DOM\n      // item. item.name.substr(boldStart, boldEnd) will be bolded.\n      const makeLinkHtml = (item: JumpListItem, boldStart: number, boldEnd: number) => {\n        return (\n          item.name.substring(0, boldStart) +\n          '<b>' +\n          item.name.substring(boldStart, boldEnd) +\n          '</b>' +\n          item.name.substring(boldEnd)\n        );\n      };\n\n      for (const item of jumpListItems ?? []) {\n        const nameLowerCase = item.name.toLowerCase();\n\n        if (nameLowerCase === filterLowerCase) {\n          item.link.innerHTML = makeLinkHtml(item, 0, item.name.length);\n          exactMatches.push(item);\n        } else if (nameLowerCase.startsWith(filterLowerCase)) {\n          item.link.innerHTML = makeLinkHtml(item, 0, filter.length);\n          prefixMatches.push(item);\n        } else {\n          const index = nameLowerCase.indexOf(filterLowerCase);\n          if (index > -1) {\n            item.link.innerHTML = makeLinkHtml(item, index, index + filter.length);\n            infixMatches.push(item);\n          }\n        }\n      }\n\n      for (const item of exactMatches.concat(prefixMatches).concat(infixMatches)) {\n        jumpList?.appendChild(item.link);\n      }\n    } else {\n      if (!jumpListItems || jumpListItems.length === 0) {\n        const msg = document.createElement('i');\n        msg.innerHTML = 'There are no symbols on this page.';\n        jumpList?.appendChild(msg);\n      }\n      // No filter set; display all items in their existing order.\n      for (const item of jumpListItems ?? []) {\n        item.link.innerHTML = item.name + ' <i>' + item.kind + '</i>';\n        jumpList?.appendChild(item.link);\n      }\n    }\n\n    if (jumpBody) {\n      jumpBody.scrollTop = 0;\n    }\n    if (jumpListItems?.length && jumpList && jumpList.children.length > 0) {\n      setActiveJumpItem(0);\n    }\n  }\n\n  // Set the active jump item to n.\n  function setActiveJumpItem(n: number) {\n    const cs = jumpList?.children as HTMLCollectionOf<HTMLElement> | null | undefined;\n    if (!cs || !jumpBody) {\n      return;\n    }\n    if (activeJumpItem >= 0) {\n      cs[activeJumpItem].classList.remove('JumpDialog-active');\n    }\n    if (n >= cs.length) {\n      n = cs.length - 1;\n    }\n    if (n >= 0) {\n      cs[n].classList.add('JumpDialog-active');\n\n      // Scroll so the active item is visible.\n      // For some reason cs[n].scrollIntoView() doesn't behave as I'd expect:\n      // it moves the entire dialog box in the viewport.\n\n      // Get the top and bottom of the active item relative to jumpBody.\n      const activeTop = cs[n].offsetTop - cs[0].offsetTop;\n      const activeBottom = activeTop + cs[n].clientHeight;\n      if (activeTop < jumpBody.scrollTop) {\n        // Off the top; scroll up.\n        jumpBody.scrollTop = activeTop;\n      } else if (activeBottom > jumpBody.scrollTop + jumpBody.clientHeight) {\n        // Off the bottom; scroll down.\n        jumpBody.scrollTop = activeBottom - jumpBody.clientHeight;\n      }\n    }\n    activeJumpItem = n;\n  }\n\n  // Increment the activeJumpItem by delta.\n  function incActiveJumpItem(delta: number) {\n    if (activeJumpItem < 0) {\n      return;\n    }\n    let n = activeJumpItem + delta;\n    if (n < 0) {\n      n = 0;\n    }\n    setActiveJumpItem(n);\n  }\n\n  // Pressing a key in the filter updates the list (if the filter actually changed).\n  jumpFilter?.addEventListener('keyup', function () {\n    if (jumpFilter.value.toUpperCase() != lastFilterValue.toUpperCase()) {\n      updateJumpList(jumpFilter.value);\n    }\n  });\n\n  // Pressing enter in the filter selects the first element in the list.\n  jumpFilter?.addEventListener('keydown', function (event) {\n    const upArrow = 38;\n    const downArrow = 40;\n    const enterKey = 13;\n    switch (event.which) {\n      case upArrow:\n        incActiveJumpItem(-1);\n        event.preventDefault();\n        break;\n      case downArrow:\n        incActiveJumpItem(1);\n        event.preventDefault();\n        break;\n      case enterKey:\n        if (activeJumpItem >= 0) {\n          if (jumpList) {\n            (jumpList.children[activeJumpItem] as HTMLElement).click();\n            event.preventDefault();\n          }\n        }\n        break;\n    }\n  });\n\n  const shortcutsDialog = document.querySelector<HTMLDialogElement>('.ShortcutsDialog');\n\n  // - Pressing 'f' or 'F' opens the jump-to-symbol dialog.\n  // - Pressing '?' opens up the shortcut dialog.\n  // Ignore a keypress if a dialog is already open, or if it is pressed on a\n  // component that wants to consume it.\n  keyboard\n    .on('f', 'open jump to modal', e => {\n      if (jumpDialog?.open || shortcutsDialog?.open) {\n        return;\n      }\n      e.preventDefault();\n      if (jumpFilter) {\n        jumpFilter.value = '';\n      }\n      jumpDialog?.showModal?.();\n      jumpFilter?.focus();\n      updateJumpList('');\n    })\n    .on('?', 'open shortcuts modal', () => {\n      if (jumpDialog?.open || shortcutsDialog?.open) {\n        return;\n      }\n      shortcutsDialog?.showModal?.();\n    });\n\n  const jumpOutlineInput = document.querySelector('.js-jumpToInput');\n  if (jumpOutlineInput) {\n    jumpOutlineInput.addEventListener('click', () => {\n      if (jumpFilter) {\n        jumpFilter.value = '';\n      }\n      updateJumpList('');\n      if (jumpDialog?.open || shortcutsDialog?.open) {\n        return;\n      }\n      jumpDialog?.showModal?.();\n      jumpFilter?.focus();\n    });\n  }\n\n  document.querySelector('.js-openShortcuts')?.addEventListener('click', () => {\n    shortcutsDialog?.showModal?.();\n  });\n}\n", "/**\n * @license\n * Copyright 2022 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Left Navigation.\n */\nexport const initJumpLinks = async function () {\n  const pagesWithJumpLinks = ['/about'];\n  if (!pagesWithJumpLinks.includes(window.location.pathname)) {\n    // stop the file from doing anything else if the page doesn't have jumplinks\n    return;\n  }\n\n  // these might be generated or not so don't grab references to the elements until actually need them.\n  const titles = 'h2, h3, h4';\n  const nav = '.LeftNav a';\n  // these are always in the dom so we can get them now and throw errors if they're not.\n  const leftNav = document.querySelector('.LeftNav');\n  const siteContent = document.querySelector('.go-Content');\n  let isObserverDisabled = false;\n\n  /**\n   * El function\n   * @example el('h1', {className: 'title'}, 'Welcome to the site');\n   * @example el('ul', {className: 'list'}, el('li', {}, 'Item one'), el('li', {}, 'Item two'), el('li', {}, 'Item three'));\n   * @example el('img', {src: '/url.svg'});\n   */\n  function el(\n    type = '',\n    props: { [key: string]: string } = {},\n    ...children: (HTMLElement | HTMLElement[] | string | undefined)[]\n  ) {\n    // Error, no type declared.\n    if (!type) {\n      throw new Error('Provide `type` to create document element.');\n    }\n\n    // Create element with optional attribute props\n    const docEl = Object.assign(document.createElement(type), props);\n\n    // Children: array containing strings or elements\n    children.forEach(child => {\n      if (typeof child === 'string') {\n        docEl.appendChild(document.createTextNode(child));\n      } else if (Array.isArray(child)) {\n        child.forEach(c => docEl.appendChild(c));\n      } else if (child instanceof HTMLElement) {\n        docEl.appendChild(child);\n      }\n    });\n\n    return docEl;\n  }\n  /**  Build Nav if data hydrate is present. */\n  function buildNav() {\n    return new Promise((resolve, reject) => {\n      let navItems: { id: string; label: string; subnav?: { id: string; label: string }[] }[] = [];\n      let elements: HTMLElement[] = [];\n\n      if (!siteContent || !leftNav) {\n        return reject('.SiteContent not found.');\n      }\n      if (leftNav instanceof HTMLElement && !leftNav?.dataset?.hydrate) {\n        return resolve(true);\n      }\n\n      for (const title of siteContent.querySelectorAll(titles)) {\n        if (title instanceof HTMLElement && !title?.dataset?.ignore) {\n          switch (title.tagName) {\n            case 'H2':\n              navItems = [\n                ...navItems,\n                {\n                  id: title.id,\n                  label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                },\n              ];\n              break;\n\n            case 'H3':\n            case 'H4':\n              if (!navItems[navItems.length - 1]?.subnav) {\n                navItems[navItems.length - 1].subnav = [\n                  {\n                    id: title.id,\n                    label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                  },\n                ];\n              } else if (navItems[navItems.length - 1].subnav) {\n                navItems[navItems.length - 1].subnav?.push({\n                  id: title.id,\n                  label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                });\n              }\n              break;\n          }\n        }\n      }\n\n      for (const navItem of navItems) {\n        const link = el('a', { href: '#' + navItem.id }, el('span', {}, navItem.label));\n        elements = [...elements, link];\n        if (navItem?.subnav) {\n          let subLinks: HTMLElement[] = [];\n          for (const subnavItem of navItem.subnav) {\n            const subItem = el(\n              'li',\n              {},\n              el(\n                'a',\n                { href: '#' + subnavItem.id },\n                el('img', { src: '/static/frontend/about/dot.svg', width: '5', height: '5' }),\n                el('span', {}, subnavItem.label)\n              )\n            );\n            subLinks = [...subLinks, subItem];\n          }\n          const list = el('ul', { className: 'LeftSubnav' }, subLinks);\n          elements = [...elements, list];\n        }\n      }\n\n      elements.forEach(element => leftNav.appendChild(element));\n\n      return resolve(true);\n    });\n  }\n  /**\n   * Set the correct active element.\n   */\n  function setNav() {\n    return new Promise(resolve => {\n      if (!document.querySelectorAll(nav)) return resolve(true);\n      for (const a of document.querySelectorAll(nav)) {\n        if (a instanceof HTMLAnchorElement && a.href === location.href) {\n          setElementActive(a);\n          break;\n        }\n      }\n      resolve(true);\n    });\n  }\n  /** resetNav: removes all .active from nav elements */\n  function resetNav() {\n    return new Promise(resolve => {\n      if (!document.querySelectorAll(nav)) return resolve(true);\n      for (const a of document.querySelectorAll(nav)) {\n        a.classList.remove('active');\n      }\n      resolve(true);\n    });\n  }\n  /** setElementActive: controls resetting nav and highlighting the appropriate nav items */\n  function setElementActive(element: HTMLAnchorElement) {\n    if (element instanceof HTMLAnchorElement) {\n      resetNav().then(() => {\n        element.classList.add('active');\n        const parent = element?.parentNode?.parentNode;\n        if (parent instanceof HTMLElement && parent?.classList?.contains('LeftSubnav')) {\n          parent.previousElementSibling?.classList.add('active');\n        }\n      });\n    }\n  }\n  /** setLinkManually: disables observer and selects the clicked nav item. */\n  function setLinkManually() {\n    delayObserver();\n    const link = document.querySelector('[href=\"' + location.hash + '\"]');\n    if (link instanceof HTMLAnchorElement) {\n      setElementActive(link);\n    }\n  }\n  /** delayObserver: Quick on off switch for intersection observer. */\n  function delayObserver() {\n    isObserverDisabled = true;\n    setTimeout(() => {\n      isObserverDisabled = false;\n    }, 200);\n  }\n  /** observeSections: kicks off observation of titles as well as manual clicks with hashchange */\n  function observeSections() {\n    window.addEventListener('hashchange', setLinkManually);\n\n    if (siteContent?.querySelectorAll(titles)) {\n      const callback: IntersectionObserverCallback = entries => {\n        if (!isObserverDisabled && Array.isArray(entries) && entries.length > 0) {\n          for (const entry of entries) {\n            if (entry.isIntersecting && entry.target instanceof HTMLElement) {\n              const { id } = entry.target;\n              const link = document.querySelector('[href=\"#' + id + '\"]');\n              if (link instanceof HTMLAnchorElement) {\n                setElementActive(link);\n              }\n              break;\n            }\n          }\n        }\n      };\n      // rootMargin is important when multiple sections are in the observable area **on page load**.\n      // they will still be highlighted on scroll because of the root margin.\n      const ob = new IntersectionObserver(callback, {\n        threshold: 0,\n        rootMargin: '0px 0px -50% 0px',\n      });\n      for (const title of siteContent.querySelectorAll(titles)) {\n        if (title instanceof HTMLElement && !title?.dataset?.ignore) {\n          ob.observe(title);\n        }\n      }\n    }\n  }\n\n  try {\n    await buildNav();\n    await setNav();\n    if (location.hash) {\n      delayObserver();\n    }\n    observeSections();\n  } catch (e) {\n    if (e instanceof Error) {\n      console.error(e.message);\n    } else {\n      console.error(e);\n    }\n  }\n};\n", "/**\n * @license\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { registerHeaderListeners, registerSearchFormListeners } from 'static/shared/header/header';\nimport { CarouselController } from 'static/shared/carousel/carousel';\nimport { ClipboardController } from 'static/shared/clipboard/clipboard';\nimport { ToolTipController } from 'static/shared/tooltip/tooltip';\nimport { SelectNavController } from 'static/shared/outline/select';\nimport { ModalController } from 'static/shared/modal/modal';\nimport { initModals } from 'static/shared/jump/jump';\n\nimport { keyboard } from 'static/shared/keyboard/keyboard';\nimport * as analytics from 'static/shared/analytics/analytics';\nimport { initJumpLinks } from './about/index';\n\nwindow.addEventListener('load', () => {\n  for (const el of document.querySelectorAll<HTMLButtonElement>('.js-clipboard')) {\n    new ClipboardController(el);\n  }\n\n  for (const el of document.querySelectorAll<HTMLDialogElement>('.js-modal')) {\n    new ModalController(el);\n  }\n\n  for (const t of document.querySelectorAll<HTMLDetailsElement>('.js-tooltip')) {\n    new ToolTipController(t);\n  }\n\n  for (const el of document.querySelectorAll<HTMLSelectElement>('.js-selectNav')) {\n    new SelectNavController(el);\n  }\n\n  for (const el of document.querySelectorAll<HTMLSelectElement>('.js-carousel')) {\n    new CarouselController(el);\n  }\n\n  for (const el of document.querySelectorAll('.js-toggleTheme')) {\n    el.addEventListener('click', () => {\n      toggleTheme();\n    });\n  }\n\n  if (document.querySelector<HTMLElement>('.js-gtmID')?.dataset.gtmid && window.dataLayer) {\n    analytics.func(function () {\n      removeUTMSource();\n    });\n  } else {\n    removeUTMSource();\n  }\n\n  registerHeaderListeners();\n  registerSearchFormListeners();\n  initModals();\n  initJumpLinks();\n  registerCookieNotice();\n});\n\n// Pressing '/' focuses the search box\nkeyboard.on('/', 'focus search', e => {\n  const searchInput = Array.from(\n    document.querySelectorAll<HTMLInputElement>('.js-searchFocus')\n  ).pop();\n  // Favoring the Firefox quick find feature over search input\n  // focus. See: https://github.com/golang/go/issues/41093.\n  if (searchInput && !window.navigator.userAgent.includes('Firefox')) {\n    e.preventDefault();\n    searchInput.focus();\n  }\n});\n\n// Pressing 'y' changes the browser URL to the canonical URL\n// without triggering a reload.\nkeyboard.on('y', 'set canonical url', () => {\n  let canonicalURLPath = document.querySelector<HTMLDivElement>('.js-canonicalURLPath')?.dataset[\n    'canonicalUrlPath'\n  ];\n  if (canonicalURLPath && canonicalURLPath !== '') {\n    const fragment = window.location.hash;\n    if (fragment) {\n      canonicalURLPath += fragment;\n    }\n    window.history.replaceState(null, '', canonicalURLPath);\n  }\n});\n\n/**\n * setupGoogleTagManager initializes Google Tag Manager.\n */\n(function setupGoogleTagManager() {\n  analytics.track({\n    'gtm.start': new Date().getTime(),\n    event: 'gtm.js',\n  });\n})();\n\n/**\n * removeUTMSource removes the utm_source GET parameter if present.\n * This is done using JavaScript, so that the utm_source is still\n * captured by Google Analytics.\n */\nfunction removeUTMSource() {\n  const urlParams = new URLSearchParams(window.location.search);\n  const utmSource = urlParams.get('utm_source');\n  if (utmSource !== 'gopls' && utmSource !== 'godoc' && utmSource !== 'pkggodev') {\n    return;\n  }\n\n  /** Strip the utm_source query parameter and replace the URL. **/\n  const newURL = new URL(window.location.href);\n  urlParams.delete('utm_source');\n  newURL.search = urlParams.toString();\n  window.history.replaceState(null, '', newURL.toString());\n}\n\n/**\n * toggleTheme switches the preferred color scheme between auto, light, and dark.\n */\nfunction toggleTheme() {\n  let nextTheme = 'dark';\n  const theme = document.documentElement.getAttribute('data-theme');\n  if (theme === 'dark') {\n    nextTheme = 'light';\n  } else if (theme === 'light') {\n    nextTheme = 'auto';\n  }\n  let domain = '';\n  if (location.hostname.endsWith('go.dev')) {\n    domain = 'domain=.go.dev;';\n  }\n  document.documentElement.setAttribute('data-theme', nextTheme);\n  document.cookie = `prefers-color-scheme=${nextTheme};${domain}path=/;max-age=31536000;`;\n}\n\n/**\n * registerCookieNotice makes the cookie notice visible and adds listeners to dismiss it\n * if it has not yet been acknowledge by the user.\n */\nfunction registerCookieNotice() {\n  const themeCookie = document.cookie.match(/cookie-consent=true/);\n  if (!themeCookie) {\n    const notice = document.querySelector('.js-cookieNotice');\n    const button = notice?.querySelector('button');\n    notice?.classList.add('Cookie-notice--visible');\n    button?.addEventListener('click', () => {\n      let domain = '';\n      if (location.hostname.endsWith('go.dev')) {\n        // Apply the cookie to *.go.dev.\n        domain = 'domain=.go.dev;';\n      }\n      document.cookie = `cookie-consent=true;${domain}path=/;max-age=31536000`;\n      notice?.remove();\n    });\n  }\n}\n"],
-  "mappings": "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",
-  "names": ["registerHeaderListeners", "header", "menuItemHover", "e", "target", "forced", "toggleForcedOpen", "isForced", "currentTarget", "event", "headerbuttons", "button", "isActive", "handleNavigationDrawerInactive", "handleNavigationDrawerActive", "subnav", "getNavigationDrawerMenuItems", "navigationDrawer", "menuItems", "anchorEl", "getNavigationDrawerIsSubnav", "item", "handleMenuItemTabLeftFactory", "handleMenuItemTabRightFactory", "prepMobileNavigationDrawer", "isSubnav", "parentLi", "submenu", "drawer", "registerSearchFormListeners", "searchForm", "expandSearch", "input", "headerLogo", "menuButton", "CarouselController", "el", "index", "d", "s", "i", "v", "arrows", "dots", "li", "button", "ClipboardController", "el", "e", "TOOLTIP_SHOW_DURATION_MS", "text", "durationMs", "ToolTipController", "el", "e", "SelectNavController", "el", "e", "target", "href", "ModalController", "el", "button", "btn", "track", "event", "category", "action", "label", "func", "fn", "KeyboardController", "key", "description", "callback", "options", "handler", "t", "track", "keyboard", "initModals", "jumpDialog", "jumpBody", "jumpList", "jumpFilter", "doc", "jumpListItems", "collectJumpListItems", "items", "el", "newJumpListItem", "item", "a", "b", "name", "kind", "lastFilterValue", "activeJumpItem", "updateJumpList", "filter", "setActiveJumpItem", "filterLowerCase", "exactMatches", "prefixMatches", "infixMatches", "makeLinkHtml", "boldStart", "boldEnd", "nameLowerCase", "index", "msg", "n", "cs", "activeTop", "activeBottom", "incActiveJumpItem", "delta", "event", "shortcutsDialog", "keyboard", "e", "jumpOutlineInput", "initJumpLinks", "titles", "nav", "leftNav", "siteContent", "isObserverDisabled", "el", "type", "props", "children", "docEl", "child", "c", "buildNav", "resolve", "reject", "navItems", "elements", "title", "navItem", "link", "subLinks", "subnavItem", "subItem", "list", "element", "setNav", "a", "setElementActive", "resetNav", "parent", "setLinkManually", "delayObserver", "observeSections", "callback", "entries", "entry", "id", "ob", "e", "el", "ClipboardController", "ModalController", "t", "ToolTipController", "SelectNavController", "CarouselController", "toggleTheme", "func", "removeUTMSource", "registerHeaderListeners", "registerSearchFormListeners", "initModals", "initJumpLinks", "registerCookieNotice", "keyboard", "e", "searchInput", "canonicalURLPath", "fragment", "track", "urlParams", "utmSource", "newURL", "nextTheme", "theme", "domain", "notice", "button"]
+  "sourcesContent": ["/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nexport function registerHeaderListeners(): void {\n  const header = document.querySelector('.js-header') as HTMLElement;\n\n  // Desktop menu hover state\n  const menuItemHovers = document.querySelectorAll('.js-desktop-menu-hover');\n  menuItemHovers.forEach(menuItemHover => {\n    // when user clicks on the dropdown menu item on desktop or mobile,\n    // force the menu to stay open until the user clicks off of it.\n    menuItemHover.addEventListener('mouseenter', e => {\n      const target = e.target as HTMLElement;\n      const forced = document.querySelector('.forced-open') as HTMLElement;\n      if (forced && forced !== menuItemHover) {\n        forced.blur();\n        forced.classList.remove('forced-open');\n      }\n      // prevents menus that have been tabbed into from staying open\n      // when you hover over another menu\n      target.classList.remove('forced-closed');\n      target.classList.add('forced-open');\n    });\n\n    const toggleForcedOpen = (e: Event) => {\n      const target = e.target as HTMLElement;\n      const isForced = target?.classList.contains('forced-open');\n      const currentTarget = e.currentTarget as HTMLElement;\n      if (isForced) {\n        currentTarget.removeEventListener('blur', () =>\n          currentTarget.classList.remove('forced-open')\n        );\n        currentTarget.classList.remove('forced-open');\n        currentTarget.classList.add('forced-closed');\n        currentTarget.blur();\n        currentTarget?.parentNode?.addEventListener('mouseout', () => {\n          currentTarget.classList.remove('forced-closed');\n        });\n      } else {\n        currentTarget.classList.remove('forced-closed');\n        currentTarget.classList.add('forced-open');\n        currentTarget.focus();\n        currentTarget.addEventListener('blur', () => currentTarget.classList.remove('forced-open'));\n        currentTarget?.parentNode?.removeEventListener('mouseout', () => {\n          currentTarget.classList.remove('forced-closed');\n        });\n      }\n      currentTarget.focus();\n    };\n    menuItemHover.addEventListener('click', toggleForcedOpen);\n    menuItemHover.addEventListener('focus', e => {\n      const target = e.target as HTMLElement;\n      target.classList.add('forced-closed');\n      target.classList.remove('forced-open');\n    });\n\n    // ensure desktop submenus are closed when esc is pressed\n    const closeSubmenuOnEsc = (e: Event) => {\n      const event = e as KeyboardEvent;\n      const target = e.target as HTMLElement;\n      if (event.key === 'Escape') {\n        const forcedOpenItem = document.querySelector('.forced-open') as HTMLElement;\n        if (forcedOpenItem) {\n          forcedOpenItem.classList.remove('forced-open');\n          forcedOpenItem.blur();\n          forcedOpenItem.classList.add('forced-closed');\n          target?.focus();\n        }\n      }\n    };\n    document.addEventListener('keydown', closeSubmenuOnEsc);\n  });\n\n  // Mobile menu subnav menus\n  const headerbuttons = document.querySelectorAll('.js-headerMenuButton');\n  headerbuttons.forEach(button => {\n    button.addEventListener('click', e => {\n      e.preventDefault();\n      const isActive = header?.classList.contains('is-active');\n      if (isActive) {\n        handleNavigationDrawerInactive(header);\n      } else {\n        handleNavigationDrawerActive(header);\n      }\n      button.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n    });\n  });\n\n  const scrim = document.querySelector('.js-scrim');\n  scrim?.addEventListener('click', e => {\n    e.preventDefault();\n\n    // find any active submenus and close them\n    const activeSubnavs = document.querySelectorAll('.go-NavigationDrawer-submenuItem.is-active');\n    activeSubnavs.forEach(subnav => handleNavigationDrawerInactive(subnav as HTMLElement));\n\n    handleNavigationDrawerInactive(header);\n\n    headerbuttons.forEach(button => {\n      button.setAttribute(\n        'aria-expanded',\n        header?.classList.contains('is-active') ? 'true' : 'false'\n      );\n    });\n  });\n\n  const getNavigationDrawerMenuItems = (navigationDrawer: HTMLElement): HTMLElement[] => {\n    if (!navigationDrawer) {\n      return [];\n    }\n\n    const menuItems = Array.from(\n      navigationDrawer.querySelectorAll(\n        ':scope > .go-NavigationDrawer-nav > .go-NavigationDrawer-list > .go-NavigationDrawer-listItem > a, :scope > .go-NavigationDrawer-nav > .go-NavigationDrawer-list > .go-NavigationDrawer-listItem > .go-Header-socialIcons > a'\n      ) || []\n    );\n\n    const anchorEl = navigationDrawer.querySelector('.go-NavigationDrawer-header > a');\n    if (anchorEl) {\n      menuItems.unshift(anchorEl);\n    }\n    return menuItems as HTMLElement[];\n  };\n\n  const getNavigationDrawerIsSubnav = (navigationDrawer: HTMLElement) => {\n    if (!navigationDrawer) {\n      return;\n    }\n    return navigationDrawer.classList.contains('go-NavigationDrawer-submenuItem');\n  };\n\n  const handleNavigationDrawerInactive = (navigationDrawer: HTMLElement) => {\n    if (!navigationDrawer) {\n      return;\n    }\n    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);\n    navigationDrawer.classList.remove('is-active');\n    const parentMenuItem = navigationDrawer\n      .closest('.go-NavigationDrawer-listItem')\n      ?.querySelector(':scope > a') as HTMLElement;\n    parentMenuItem?.focus();\n    menuItems?.forEach(item => item?.setAttribute('tabindex', '-1'));\n    if (menuItems && menuItems[0]) {\n      menuItems[0].removeEventListener('keydown', handleMenuItemTabLeftFactory(navigationDrawer));\n      menuItems[menuItems.length - 1].removeEventListener(\n        'keydown',\n        handleMenuItemTabRightFactory(navigationDrawer)\n      );\n    }\n\n    if (navigationDrawer === header) {\n      headerbuttons && (headerbuttons[0] as HTMLElement)?.focus();\n    }\n  };\n\n  const handleNavigationDrawerActive = (navigationDrawer: HTMLElement) => {\n    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);\n\n    navigationDrawer.classList.add('is-active');\n    menuItems.forEach(item => item.setAttribute('tabindex', '0'));\n    menuItems[0].focus();\n\n    menuItems[0].addEventListener('keydown', handleMenuItemTabLeftFactory(navigationDrawer));\n    menuItems[menuItems.length - 1].addEventListener(\n      'keydown',\n      handleMenuItemTabRightFactory(navigationDrawer)\n    );\n  };\n\n  const handleMenuItemTabLeftFactory = (navigationDrawer: HTMLElement) => {\n    return (e: KeyboardEvent) => {\n      if (e.key === 'Tab' && e.shiftKey) {\n        e.preventDefault();\n        handleNavigationDrawerInactive(navigationDrawer);\n      }\n    };\n  };\n\n  const handleMenuItemTabRightFactory = (navigationDrawer: HTMLElement) => {\n    return (e: KeyboardEvent) => {\n      if (e.key === 'Tab' && !e.shiftKey) {\n        e.preventDefault();\n        handleNavigationDrawerInactive(navigationDrawer);\n      }\n    };\n  };\n\n  const prepMobileNavigationDrawer = (navigationDrawer: HTMLElement) => {\n    const isSubnav = getNavigationDrawerIsSubnav(navigationDrawer);\n    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);\n    navigationDrawer.addEventListener('keyup', e => {\n      if (e.key === 'Escape') {\n        handleNavigationDrawerInactive(navigationDrawer);\n      }\n    });\n\n    menuItems.forEach(item => {\n      const parentLi = item.closest('li');\n      if (parentLi && parentLi.classList.contains('js-mobile-subnav-trigger')) {\n        const submenu = parentLi.querySelector('.go-NavigationDrawer-submenuItem') as HTMLElement;\n        item.addEventListener('click', () => {\n          handleNavigationDrawerActive(submenu);\n        });\n      }\n    });\n    if (isSubnav) {\n      handleNavigationDrawerInactive(navigationDrawer);\n      navigationDrawer\n        ?.querySelector('.go-NavigationDrawer-header')\n        ?.addEventListener('click', e => {\n          e.preventDefault();\n          handleNavigationDrawerInactive(navigationDrawer);\n        });\n    }\n  };\n\n  document\n    .querySelectorAll('.go-NavigationDrawer')\n    .forEach(drawer => prepMobileNavigationDrawer(drawer as HTMLElement));\n\n  handleNavigationDrawerInactive(header);\n}\n\nexport function registerSearchFormListeners(): void {\n  const searchForm = document.querySelector('.js-searchForm');\n  const expandSearch = document.querySelector('.js-expandSearch');\n  const input = searchForm?.querySelector('input');\n  const headerLogo = document.querySelector('.js-headerLogo');\n  const menuButton = document.querySelector('.js-headerMenuButton');\n  expandSearch?.addEventListener('click', () => {\n    searchForm?.classList.add('go-SearchForm--expanded');\n    headerLogo?.classList.add('go-Header-logo--hidden');\n    menuButton?.classList.add('go-Header-navOpen--hidden');\n    input?.focus();\n  });\n  document?.addEventListener('click', e => {\n    if (!searchForm?.contains(e.target as Node)) {\n      searchForm?.classList.remove('go-SearchForm--expanded');\n      headerLogo?.classList.remove('go-Header-logo--hidden');\n      menuButton?.classList.remove('go-Header-navOpen--hidden');\n    }\n  });\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Carousel Controller adds event listeners, accessibility enhancements, and\n * control elements to a carousel component.\n */\nexport class CarouselController {\n  /**\n   * slides is a collection of slides in the carousel.\n   */\n  private slides: HTMLLIElement[];\n  /**\n   * dots is a collection of dot navigation controls, added to the carousel\n   * by this controller.\n   */\n  private dots: HTMLElement[];\n  /**\n   * liveRegion is a visually hidden element that notifies assitive devices\n   * of visual changes to the carousel. They are added to the carousel by\n   * this controller.\n   */\n  private liveRegion: HTMLElement;\n  /**\n   * activeIndex is the 0-index of the currently active slide.\n   */\n  private activeIndex: number;\n\n  constructor(private el: HTMLElement) {\n    this.slides = Array.from(el.querySelectorAll('.go-Carousel-slide'));\n    this.dots = [];\n    this.liveRegion = document.createElement('div');\n    this.activeIndex = Number(el.getAttribute('data-slide-index') ?? 0);\n\n    this.initSlides();\n    this.initArrows();\n    this.initDots();\n    this.initLiveRegion();\n  }\n\n  private initSlides() {\n    for (const [i, v] of this.slides.entries()) {\n      if (i === this.activeIndex) continue;\n      v.setAttribute('aria-hidden', 'true');\n    }\n  }\n\n  private initArrows() {\n    const arrows = document.createElement('ul');\n    arrows.classList.add('go-Carousel-arrows');\n    arrows.innerHTML = `\n      <li>\n        <button class=\"go-Carousel-prevSlide\" aria-label=\"Go to previous slide\">\n          <img class=\"go-Icon\" height=\"24\" width=\"24\" src=\"/static/shared/icon/arrow_left_gm_grey_24dp.svg\" alt=\"\">\n        </button>\n      </li>\n      <li>\n        <button class=\"go-Carousel-nextSlide\" aria-label=\"Go to next slide\">\n          <img class=\"go-Icon\" height=\"24\" width=\"24\" src=\"/static/shared/icon/arrow_right_gm_grey_24dp.svg\" alt=\"\">\n        </button>\n      </li>\n    `;\n    arrows\n      .querySelector('.go-Carousel-prevSlide')\n      ?.addEventListener('click', () => this.setActive(this.activeIndex - 1));\n    arrows\n      .querySelector('.go-Carousel-nextSlide')\n      ?.addEventListener('click', () => this.setActive(this.activeIndex + 1));\n    this.el.append(arrows);\n  }\n\n  private initDots() {\n    const dots = document.createElement('ul');\n    dots.classList.add('go-Carousel-dots');\n    for (let i = 0; i < this.slides.length; i++) {\n      const li = document.createElement('li');\n      const button = document.createElement('button');\n      button.classList.add('go-Carousel-dot');\n      if (i === this.activeIndex) {\n        button.classList.add('go-Carousel-dot--active');\n      }\n      button.innerHTML = `<span class=\"go-Carousel-obscured\">Slide ${i + 1}</span>`;\n      button.addEventListener('click', () => this.setActive(i));\n      li.append(button);\n      dots.append(li);\n      this.dots.push(button);\n    }\n    this.el.append(dots);\n  }\n\n  private initLiveRegion() {\n    this.liveRegion.setAttribute('aria-live', 'polite');\n    this.liveRegion.setAttribute('aria-atomic', 'true');\n    this.liveRegion.setAttribute('class', 'go-Carousel-obscured');\n    this.liveRegion.textContent = `Slide ${this.activeIndex + 1} of ${this.slides.length}`;\n    this.el.appendChild(this.liveRegion);\n  }\n\n  private setActive = (index: number) => {\n    this.activeIndex = (index + this.slides.length) % this.slides.length;\n    this.el.setAttribute('data-slide-index', String(this.activeIndex));\n    for (const d of this.dots) {\n      d.classList.remove('go-Carousel-dot--active');\n    }\n    this.dots[this.activeIndex].classList.add('go-Carousel-dot--active');\n    for (const s of this.slides) {\n      s.setAttribute('aria-hidden', 'true');\n    }\n    this.slides[this.activeIndex].removeAttribute('aria-hidden');\n    this.liveRegion.textContent = 'Slide ' + (this.activeIndex + 1) + ' of ' + this.slides.length;\n  };\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This class decorates an element to copy arbitrary data attached via a data-\n * attribute to the clipboard.\n */\nexport class ClipboardController {\n  /**\n   * The data to be copied to the clipboard.\n   */\n  private data: string;\n\n  /**\n   * @param el The element that will trigger copying text to the clipboard. The text is\n   * expected to be within its data-to-copy attribute.\n   */\n  constructor(private el: HTMLButtonElement) {\n    this.data = el.dataset['toCopy'] ?? el.innerText;\n    // if data-to-copy is empty and the button is part of an input group\n    // capture the value of the input.\n    if (!this.data && el.parentElement?.classList.contains('go-InputGroup')) {\n      this.data = (this.data || el.parentElement?.querySelector('input')?.value) ?? '';\n    }\n    el.addEventListener('click', e => this.handleCopyClick(e));\n  }\n\n  /**\n   * Handles when the primary element is clicked.\n   */\n  handleCopyClick(e: MouseEvent): void {\n    e.preventDefault();\n    const TOOLTIP_SHOW_DURATION_MS = 1000;\n\n    // This API is not available on iOS.\n    if (!navigator.clipboard) {\n      this.showTooltipText('Unable to copy', TOOLTIP_SHOW_DURATION_MS);\n      return;\n    }\n    navigator.clipboard\n      .writeText(this.data)\n      .then(() => {\n        this.showTooltipText('Copied!', TOOLTIP_SHOW_DURATION_MS);\n      })\n      .catch(() => {\n        this.showTooltipText('Unable to copy', TOOLTIP_SHOW_DURATION_MS);\n      });\n  }\n\n  /**\n   * Shows the given text in a tooltip for a specified amount of time, in milliseconds.\n   */\n  showTooltipText(text: string, durationMs: number): void {\n    this.el.setAttribute('data-tooltip', text);\n    setTimeout(() => this.el.setAttribute('data-tooltip', ''), durationMs);\n  }\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * ToolTipController handles closing tooltips on external clicks.\n */\nexport class ToolTipController {\n  constructor(private el: HTMLDetailsElement) {\n    document.addEventListener('click', e => {\n      const insideTooltip = this.el.contains(e.target as Element);\n      if (!insideTooltip) {\n        this.el.removeAttribute('open');\n      }\n    });\n  }\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { TreeNavController } from './tree.js';\n\nexport class SelectNavController {\n  constructor(private el: Element) {\n    this.el.addEventListener('change', e => {\n      const target = e.target as HTMLSelectElement;\n      let href = target.value;\n      if (!target.value.startsWith('/')) {\n        href = '/' + href;\n      }\n      window.location.href = href;\n    });\n  }\n}\n\nexport function makeSelectNav(tree: TreeNavController): HTMLLabelElement {\n  const label = document.createElement('label');\n  label.classList.add('go-Label');\n  label.setAttribute('aria-label', 'Menu');\n  const select = document.createElement('select');\n  select.classList.add('go-Select', 'js-selectNav');\n  label.appendChild(select);\n  const outline = document.createElement('optgroup');\n  outline.label = 'Outline';\n  select.appendChild(outline);\n  const groupMap: Record<string, HTMLOptGroupElement> = {};\n  let group: HTMLOptGroupElement;\n  for (const t of tree.treeitems) {\n    if (Number(t.depth) > 4) continue;\n    if (t.groupTreeitem) {\n      group = groupMap[t.groupTreeitem.label];\n      if (!group) {\n        group = groupMap[t.groupTreeitem.label] = document.createElement('optgroup');\n        group.label = t.groupTreeitem.label;\n        select.appendChild(group);\n      }\n    } else {\n      group = outline;\n    }\n    const o = document.createElement('option');\n    o.label = t.label;\n    o.textContent = t.label;\n    o.value = (t.el as HTMLAnchorElement).href.replace(window.location.origin, '').replace('/', '');\n    group.appendChild(o);\n  }\n  tree.addObserver(t => {\n    const hash = (t.el as HTMLAnchorElement).hash;\n    const value = select.querySelector<HTMLOptionElement>(`[value$=\"${hash}\"]`)?.value;\n    if (value) {\n      select.value = value;\n    }\n  }, 50);\n  return label;\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\ninterface Window {\n  dialogPolyfill?: {\n    registerDialog: (el: HTMLDialogElement) => void;\n  };\n}\n\ndeclare const window: Window;\n\n/**\n * ModalController registers a dialog element with the polyfill if\n * necessary for the current browser, add adds event listeners to\n * close and open modals.\n */\nexport class ModalController {\n  constructor(private el: HTMLDialogElement) {\n    if (window.dialogPolyfill) {\n      window.dialogPolyfill.registerDialog(el);\n    }\n    this.init();\n  }\n\n  init() {\n    const button = document.querySelector<HTMLButtonElement>(`[aria-controls=\"${this.el.id}\"]`);\n    if (button) {\n      button.addEventListener('click', () => {\n        if (this.el.showModal) {\n          this.el.showModal();\n        } else {\n          this.el.setAttribute('opened', 'true');\n        }\n        this.el.querySelector('input')?.focus();\n      });\n    }\n    for (const btn of this.el.querySelectorAll<HTMLButtonElement>('[data-modal-close]')) {\n      btn.addEventListener('click', () => {\n        if (this.el.close) {\n          this.el.close();\n        } else {\n          this.el.removeAttribute('opened');\n        }\n      });\n    }\n  }\n}\n", "interface TagManagerEvent {\n  /**\n   * event is the name of the event, used to filter events in\n   * Google Analytics.\n   */\n  event: string;\n\n  /**\n   * event_category is a name that you supply as a way to group objects\n   * that to analyze. Typically, you will use the same category name\n   * multiple times over related UI elements (buttons, links, etc).\n   */\n  event_category?: string;\n\n  /**\n   * event_action is used to name the type of event or interaction you\n   * want to measure for a particular web object. For example, with a\n   * single \"form\" category, you can analyze a number of specific events\n   * with this parameter, such as: form entered, form submitted.\n   */\n  event_action?: string;\n\n  /**\n   * event_label provide additional information for events that you want\n   * to analyze, such as the text label of a link.\n   */\n  event_label?: string;\n\n  /**\n   * gtm.start is used to initialize Google Tag Manager.\n   */\n  'gtm.start'?: number;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ndeclare global {\n  interface Window {\n    dataLayer?: (TagManagerEvent | VoidFunction)[];\n    ga?: unknown;\n  }\n}\n\n/**\n * track sends events to Google Tag Manager.\n */\nexport function track(\n  event: string | TagManagerEvent,\n  category?: string,\n  action?: string,\n  label?: string\n): void {\n  window.dataLayer ??= [];\n  if (typeof event === 'string') {\n    window.dataLayer.push({\n      event,\n      event_category: category,\n      event_action: action,\n      event_label: label,\n    });\n  } else {\n    window.dataLayer.push(event);\n  }\n}\n\n/**\n * func adds functions to run sequentionally after\n * Google Tag Manager is ready.\n */\nexport function func(fn: () => void): void {\n  window.dataLayer ??= [];\n  window.dataLayer.push(fn);\n}\n", "/*!\n * @license\n * Copyright 2019-2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { track } from '../analytics/analytics';\n\n/**\n * Options are keyhandler callback options.\n */\ninterface Options {\n  /**\n   * target is the element the key event should filter on. The\n   * default target is the document.\n   */\n  target?: Element;\n\n  /**\n   * withMeta specifies if the event callback should fire when\n   * the key is pressed with a meta key (ctrl, alt, etc). By\n   * default meta keypresses are ignored.\n   */\n  withMeta?: boolean;\n}\n\n/**\n * KeyHandler is the config for a keyboard event callback.\n */\ninterface KeyHandler extends Options {\n  description: string;\n  callback: (e: KeyboardEvent) => void;\n}\n\n/**\n * KeyboardController controls event callbacks for sitewide\n * keyboard events. Multiple callbacks can be registered for\n * a single key and by default the controller ignores events\n * for text input targets.\n */\nclass KeyboardController {\n  handlers: Record<string, Set<KeyHandler>>;\n\n  constructor() {\n    this.handlers = {};\n    document.addEventListener('keydown', e => this.handleKeyPress(e));\n  }\n\n  /**\n   * on registers keyboard event callbacks.\n   * @param key the key to register.\n   * @param description name of the event.\n   * @param callback event callback.\n   * @param options set target and withMeta options to override the default behaviors.\n   */\n  on(key: string, description: string, callback: (e: KeyboardEvent) => void, options?: Options) {\n    this.handlers[key] ??= new Set();\n    this.handlers[key].add({ description, callback, ...options });\n    return this;\n  }\n\n  private handleKeyPress(e: KeyboardEvent) {\n    for (const handler of this.handlers[e.key.toLowerCase()] ?? new Set()) {\n      if (handler.target && handler.target !== e.target) {\n        return;\n      }\n      const t = e.target as HTMLElement | null;\n      if (\n        !handler.target &&\n        (t?.tagName === 'INPUT' || t?.tagName === 'SELECT' || t?.tagName === 'TEXTAREA')\n      ) {\n        return;\n      }\n      if (t?.isContentEditable) {\n        return;\n      }\n      if (\n        (handler.withMeta && !(e.ctrlKey || e.metaKey)) ||\n        (!handler.withMeta && (e.ctrlKey || e.metaKey))\n      ) {\n        return;\n      }\n      track('keypress', 'hotkeys', `${e.key} pressed`, handler.description);\n      handler.callback(e);\n    }\n  }\n}\n\nexport const keyboard = new KeyboardController();\n", "/*!\n * @license\n * Copyright 2019-2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n// This file implements the behavior of the \"jump to symbol\" dialog for Go\n// package documentation, as well as the simple dialog that displays keyboard\n// shortcuts.\n\n// The DOM for the dialogs is at the bottom of static/frontend/unit/main/_modals.tmpl.\n// The CSS is in static/frontend/unit/main/_modals.css.\n\n// The dialog is activated by pressing the 'f' key. It presents a list\n// (#JumpDialog-list) of all Go symbols displayed in the documentation.\n// Entering text in the dialog's text box (#JumpDialog-filter) restricts the\n// list to symbols containing the text. Clicking on an symbol jumps to\n// its documentation.\n\n// This code is based on\n// https://go.googlesource.com/gddo/+/refs/heads/master/gddo-server/assets/site.js.\n// It was modified to remove the dependence on jquery and bootstrap.\n\nimport { keyboard } from '../keyboard/keyboard';\n\nexport function initModals(): void {\n  const jumpDialog = document.querySelector<HTMLDialogElement>('.JumpDialog');\n  const jumpBody = jumpDialog?.querySelector<HTMLDivElement>('.JumpDialog-body');\n  const jumpList = jumpDialog?.querySelector<HTMLDivElement>('.JumpDialog-list');\n  const jumpFilter = jumpDialog?.querySelector<HTMLInputElement>('.JumpDialog-input');\n  const doc = document.querySelector<HTMLDivElement>('.js-documentation');\n\n  interface JumpListItem {\n    link: HTMLAnchorElement;\n    name: string;\n    kind: string;\n    lower: string;\n  }\n\n  let jumpListItems: JumpListItem[] | undefined; // All the symbols in the doc; computed only once.\n\n  // collectJumpListItems returns a list of items, one for each symbol in the\n  // documentation on the current page.\n  //\n  // It uses the data-kind attribute generated in the documentation HTML to find\n  // the symbols and their id attributes.\n  //\n  // If there are no data-kind attributes, then we have older doc; fall back to\n  // a less precise method.\n  function collectJumpListItems() {\n    const items = [];\n    if (!doc) return;\n    for (const el of doc.querySelectorAll('[data-kind]')) {\n      items.push(newJumpListItem(el));\n    }\n\n    // Clicking on any of the links closes the dialog.\n    for (const item of items) {\n      item.link.addEventListener('click', function () {\n        jumpDialog?.close();\n      });\n    }\n    // Sort case-insensitively by symbol name.\n    items.sort(function (a, b) {\n      return a.lower.localeCompare(b.lower);\n    });\n    return items;\n  }\n\n  // newJumpListItem creates a new item for the DOM element el.\n  // An item is an object with:\n  // - name: the element's id (which is the symbol name)\n  // - kind: the element's kind (function, variable, etc.),\n  // - link: a link ('a' tag) to the element\n  // - lower: the name in lower case, just for sorting\n  function newJumpListItem(el: Element): JumpListItem {\n    const a = document.createElement('a');\n    const name = el.getAttribute('id');\n    a.setAttribute('href', '#' + name);\n    a.setAttribute('tabindex', '-1');\n    a.setAttribute('data-gtmc', 'jump to link');\n    const kind = el.getAttribute('data-kind');\n    return {\n      link: a,\n      name: name ?? '',\n      kind: kind ?? '',\n      lower: name?.toLowerCase() ?? '', // for sorting\n    };\n  }\n\n  let lastFilterValue: string; // The last contents of the filter text box.\n  let activeJumpItem = -1; // The index of the currently active item in the list.\n\n  // updateJumpList sets the elements of the dialog list to\n  // everything whose name contains filter.\n  function updateJumpList(filter: string) {\n    lastFilterValue = filter;\n    if (!jumpListItems) {\n      jumpListItems = collectJumpListItems();\n    }\n    setActiveJumpItem(-1);\n\n    // Remove all children from list.\n    while (jumpList?.firstChild) {\n      jumpList.firstChild.remove();\n    }\n\n    if (filter) {\n      // A filter is set. We treat the filter as a substring that can appear in\n      // an item name (case insensitive), and find the following matches - in\n      // order of priority:\n      //\n      // 1. Exact matches (the filter matches the item's name exactly)\n      // 2. Prefix matches (the item's name starts with filter)\n      // 3. Infix matches (the filter is a substring of the item's name)\n      const filterLowerCase = filter.toLowerCase();\n\n      const exactMatches = [];\n      const prefixMatches = [];\n      const infixMatches = [];\n\n      // makeLinkHtml creates the link name HTML for a list item. item is the DOM\n      // item. item.name.substr(boldStart, boldEnd) will be bolded.\n      const makeLinkHtml = (item: JumpListItem, boldStart: number, boldEnd: number) => {\n        return (\n          item.name.substring(0, boldStart) +\n          '<b>' +\n          item.name.substring(boldStart, boldEnd) +\n          '</b>' +\n          item.name.substring(boldEnd)\n        );\n      };\n\n      for (const item of jumpListItems ?? []) {\n        const nameLowerCase = item.name.toLowerCase();\n\n        if (nameLowerCase === filterLowerCase) {\n          item.link.innerHTML = makeLinkHtml(item, 0, item.name.length);\n          exactMatches.push(item);\n        } else if (nameLowerCase.startsWith(filterLowerCase)) {\n          item.link.innerHTML = makeLinkHtml(item, 0, filter.length);\n          prefixMatches.push(item);\n        } else {\n          const index = nameLowerCase.indexOf(filterLowerCase);\n          if (index > -1) {\n            item.link.innerHTML = makeLinkHtml(item, index, index + filter.length);\n            infixMatches.push(item);\n          }\n        }\n      }\n\n      for (const item of exactMatches.concat(prefixMatches).concat(infixMatches)) {\n        jumpList?.appendChild(item.link);\n      }\n    } else {\n      if (!jumpListItems || jumpListItems.length === 0) {\n        const msg = document.createElement('i');\n        msg.innerHTML = 'There are no symbols on this page.';\n        jumpList?.appendChild(msg);\n      }\n      // No filter set; display all items in their existing order.\n      for (const item of jumpListItems ?? []) {\n        item.link.innerHTML = item.name + ' <i>' + item.kind + '</i>';\n        jumpList?.appendChild(item.link);\n      }\n    }\n\n    if (jumpBody) {\n      jumpBody.scrollTop = 0;\n    }\n    if (jumpListItems?.length && jumpList && jumpList.children.length > 0) {\n      setActiveJumpItem(0);\n    }\n  }\n\n  // Set the active jump item to n.\n  function setActiveJumpItem(n: number) {\n    const cs = jumpList?.children as HTMLCollectionOf<HTMLElement> | null | undefined;\n    if (!cs || !jumpBody) {\n      return;\n    }\n    if (activeJumpItem >= 0) {\n      cs[activeJumpItem].classList.remove('JumpDialog-active');\n    }\n    if (n >= cs.length) {\n      n = cs.length - 1;\n    }\n    if (n >= 0) {\n      cs[n].classList.add('JumpDialog-active');\n\n      // Scroll so the active item is visible.\n      // For some reason cs[n].scrollIntoView() doesn't behave as I'd expect:\n      // it moves the entire dialog box in the viewport.\n\n      // Get the top and bottom of the active item relative to jumpBody.\n      const activeTop = cs[n].offsetTop - cs[0].offsetTop;\n      const activeBottom = activeTop + cs[n].clientHeight;\n      if (activeTop < jumpBody.scrollTop) {\n        // Off the top; scroll up.\n        jumpBody.scrollTop = activeTop;\n      } else if (activeBottom > jumpBody.scrollTop + jumpBody.clientHeight) {\n        // Off the bottom; scroll down.\n        jumpBody.scrollTop = activeBottom - jumpBody.clientHeight;\n      }\n    }\n    activeJumpItem = n;\n  }\n\n  // Increment the activeJumpItem by delta.\n  function incActiveJumpItem(delta: number) {\n    if (activeJumpItem < 0) {\n      return;\n    }\n    let n = activeJumpItem + delta;\n    if (n < 0) {\n      n = 0;\n    }\n    setActiveJumpItem(n);\n  }\n\n  // Pressing a key in the filter updates the list (if the filter actually changed).\n  jumpFilter?.addEventListener('keyup', function () {\n    if (jumpFilter.value.toUpperCase() != lastFilterValue.toUpperCase()) {\n      updateJumpList(jumpFilter.value);\n    }\n  });\n\n  // Pressing enter in the filter selects the first element in the list.\n  jumpFilter?.addEventListener('keydown', function (event) {\n    const upArrow = 38;\n    const downArrow = 40;\n    const enterKey = 13;\n    switch (event.which) {\n      case upArrow:\n        incActiveJumpItem(-1);\n        event.preventDefault();\n        break;\n      case downArrow:\n        incActiveJumpItem(1);\n        event.preventDefault();\n        break;\n      case enterKey:\n        if (activeJumpItem >= 0) {\n          if (jumpList) {\n            (jumpList.children[activeJumpItem] as HTMLElement).click();\n            event.preventDefault();\n          }\n        }\n        break;\n    }\n  });\n\n  const shortcutsDialog = document.querySelector<HTMLDialogElement>('.ShortcutsDialog');\n\n  // - Pressing 'f' or 'F' opens the jump-to-symbol dialog.\n  // - Pressing '?' opens up the shortcut dialog.\n  // Ignore a keypress if a dialog is already open, or if it is pressed on a\n  // component that wants to consume it.\n  keyboard\n    .on('f', 'open jump to modal', e => {\n      if (jumpDialog?.open || shortcutsDialog?.open) {\n        return;\n      }\n      e.preventDefault();\n      if (jumpFilter) {\n        jumpFilter.value = '';\n      }\n      jumpDialog?.showModal?.();\n      jumpFilter?.focus();\n      updateJumpList('');\n    })\n    .on('?', 'open shortcuts modal', () => {\n      if (jumpDialog?.open || shortcutsDialog?.open) {\n        return;\n      }\n      shortcutsDialog?.showModal?.();\n    });\n\n  const jumpOutlineInput = document.querySelector('.js-jumpToInput');\n  if (jumpOutlineInput) {\n    jumpOutlineInput.addEventListener('click', () => {\n      if (jumpFilter) {\n        jumpFilter.value = '';\n      }\n      updateJumpList('');\n      if (jumpDialog?.open || shortcutsDialog?.open) {\n        return;\n      }\n      jumpDialog?.showModal?.();\n      jumpFilter?.focus();\n    });\n  }\n\n  document.querySelector('.js-openShortcuts')?.addEventListener('click', () => {\n    shortcutsDialog?.showModal?.();\n  });\n}\n", "/**\n * @license\n * Copyright 2022 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Left Navigation.\n */\nexport const initJumpLinks = async function () {\n  const pagesWithJumpLinks = ['/about'];\n  if (!pagesWithJumpLinks.includes(window.location.pathname)) {\n    // stop the file from doing anything else if the page doesn't have jumplinks\n    return;\n  }\n\n  // these might be generated or not so don't grab references to the elements until actually need them.\n  const titles = 'h2, h3, h4';\n  const nav = '.LeftNav a';\n  // these are always in the dom so we can get them now and throw errors if they're not.\n  const leftNav = document.querySelector('.LeftNav');\n  const siteContent = document.querySelector('.go-Content');\n  let isObserverDisabled = false;\n\n  /**\n   * El function\n   * @example el('h1', {className: 'title'}, 'Welcome to the site');\n   * @example el('ul', {className: 'list'}, el('li', {}, 'Item one'), el('li', {}, 'Item two'), el('li', {}, 'Item three'));\n   * @example el('img', {src: '/url.svg'});\n   */\n  function el(\n    type = '',\n    props: { [key: string]: string } = {},\n    ...children: (HTMLElement | HTMLElement[] | string | undefined)[]\n  ) {\n    // Error, no type declared.\n    if (!type) {\n      throw new Error('Provide `type` to create document element.');\n    }\n\n    // Create element with optional attribute props\n    const docEl = Object.assign(document.createElement(type), props);\n\n    // Children: array containing strings or elements\n    children.forEach(child => {\n      if (typeof child === 'string') {\n        docEl.appendChild(document.createTextNode(child));\n      } else if (Array.isArray(child)) {\n        child.forEach(c => docEl.appendChild(c));\n      } else if (child instanceof HTMLElement) {\n        docEl.appendChild(child);\n      }\n    });\n\n    return docEl;\n  }\n  /**  Build Nav if data hydrate is present. */\n  function buildNav() {\n    return new Promise((resolve, reject) => {\n      let navItems: { id: string; label: string; subnav?: { id: string; label: string }[] }[] = [];\n      let elements: HTMLElement[] = [];\n\n      if (!siteContent || !leftNav) {\n        return reject('.SiteContent not found.');\n      }\n      if (leftNav instanceof HTMLElement && !leftNav?.dataset?.hydrate) {\n        return resolve(true);\n      }\n\n      for (const title of siteContent.querySelectorAll(titles)) {\n        if (title instanceof HTMLElement && !title?.dataset?.ignore) {\n          switch (title.tagName) {\n            case 'H2':\n              navItems = [\n                ...navItems,\n                {\n                  id: title.id,\n                  label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                },\n              ];\n              break;\n\n            case 'H3':\n            case 'H4':\n              if (!navItems[navItems.length - 1]?.subnav) {\n                navItems[navItems.length - 1].subnav = [\n                  {\n                    id: title.id,\n                    label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                  },\n                ];\n              } else if (navItems[navItems.length - 1].subnav) {\n                navItems[navItems.length - 1].subnav?.push({\n                  id: title.id,\n                  label: title?.dataset?.title ? title.dataset.title : title.textContent ?? '',\n                });\n              }\n              break;\n          }\n        }\n      }\n\n      for (const navItem of navItems) {\n        const link = el('a', { href: '#' + navItem.id }, el('span', {}, navItem.label));\n        elements = [...elements, link];\n        if (navItem?.subnav) {\n          let subLinks: HTMLElement[] = [];\n          for (const subnavItem of navItem.subnav) {\n            const subItem = el(\n              'li',\n              {},\n              el(\n                'a',\n                { href: '#' + subnavItem.id },\n                el('img', { src: '/static/frontend/about/dot.svg', width: '5', height: '5' }),\n                el('span', {}, subnavItem.label)\n              )\n            );\n            subLinks = [...subLinks, subItem];\n          }\n          const list = el('ul', { className: 'LeftSubnav' }, subLinks);\n          elements = [...elements, list];\n        }\n      }\n\n      elements.forEach(element => leftNav.appendChild(element));\n\n      return resolve(true);\n    });\n  }\n  /**\n   * Set the correct active element.\n   */\n  function setNav() {\n    return new Promise(resolve => {\n      if (!document.querySelectorAll(nav)) return resolve(true);\n      for (const a of document.querySelectorAll(nav)) {\n        if (a instanceof HTMLAnchorElement && a.href === location.href) {\n          setElementActive(a);\n          break;\n        }\n      }\n      resolve(true);\n    });\n  }\n  /** resetNav: removes all .active from nav elements */\n  function resetNav() {\n    return new Promise(resolve => {\n      if (!document.querySelectorAll(nav)) return resolve(true);\n      for (const a of document.querySelectorAll(nav)) {\n        a.classList.remove('active');\n      }\n      resolve(true);\n    });\n  }\n  /** setElementActive: controls resetting nav and highlighting the appropriate nav items */\n  function setElementActive(element: HTMLAnchorElement) {\n    if (element instanceof HTMLAnchorElement) {\n      resetNav().then(() => {\n        element.classList.add('active');\n        const parent = element?.parentNode?.parentNode;\n        if (parent instanceof HTMLElement && parent?.classList?.contains('LeftSubnav')) {\n          parent.previousElementSibling?.classList.add('active');\n        }\n      });\n    }\n  }\n  /** setLinkManually: disables observer and selects the clicked nav item. */\n  function setLinkManually() {\n    delayObserver();\n    const link = document.querySelector('[href=\"' + location.hash + '\"]');\n    if (link instanceof HTMLAnchorElement) {\n      setElementActive(link);\n    }\n  }\n  /** delayObserver: Quick on off switch for intersection observer. */\n  function delayObserver() {\n    isObserverDisabled = true;\n    setTimeout(() => {\n      isObserverDisabled = false;\n    }, 200);\n  }\n  /** observeSections: kicks off observation of titles as well as manual clicks with hashchange */\n  function observeSections() {\n    window.addEventListener('hashchange', setLinkManually);\n\n    if (siteContent?.querySelectorAll(titles)) {\n      const callback: IntersectionObserverCallback = entries => {\n        if (!isObserverDisabled && Array.isArray(entries) && entries.length > 0) {\n          for (const entry of entries) {\n            if (entry.isIntersecting && entry.target instanceof HTMLElement) {\n              const { id } = entry.target;\n              const link = document.querySelector('[href=\"#' + id + '\"]');\n              if (link instanceof HTMLAnchorElement) {\n                setElementActive(link);\n              }\n              break;\n            }\n          }\n        }\n      };\n      // rootMargin is important when multiple sections are in the observable area **on page load**.\n      // they will still be highlighted on scroll because of the root margin.\n      const ob = new IntersectionObserver(callback, {\n        threshold: 0,\n        rootMargin: '0px 0px -50% 0px',\n      });\n      for (const title of siteContent.querySelectorAll(titles)) {\n        if (title instanceof HTMLElement && !title?.dataset?.ignore) {\n          ob.observe(title);\n        }\n      }\n    }\n  }\n\n  try {\n    await buildNav();\n    await setNav();\n    if (location.hash) {\n      delayObserver();\n    }\n    observeSections();\n  } catch (e) {\n    if (e instanceof Error) {\n      console.error(e.message);\n    } else {\n      console.error(e);\n    }\n  }\n};\n", "/**\n * @license\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { registerHeaderListeners, registerSearchFormListeners } from 'static/shared/header/header';\nimport { CarouselController } from 'static/shared/carousel/carousel';\nimport { ClipboardController } from 'static/shared/clipboard/clipboard';\nimport { ToolTipController } from 'static/shared/tooltip/tooltip';\nimport { SelectNavController } from 'static/shared/outline/select';\nimport { ModalController } from 'static/shared/modal/modal';\nimport { initModals } from 'static/shared/jump/jump';\n\nimport { keyboard } from 'static/shared/keyboard/keyboard';\nimport * as analytics from 'static/shared/analytics/analytics';\nimport { initJumpLinks } from './about/index';\n\nwindow.addEventListener('load', () => {\n  for (const el of document.querySelectorAll<HTMLButtonElement>('.js-clipboard')) {\n    new ClipboardController(el);\n  }\n\n  for (const el of document.querySelectorAll<HTMLDialogElement>('.js-modal')) {\n    new ModalController(el);\n  }\n\n  for (const t of document.querySelectorAll<HTMLDetailsElement>('.js-tooltip')) {\n    new ToolTipController(t);\n  }\n\n  for (const el of document.querySelectorAll<HTMLSelectElement>('.js-selectNav')) {\n    new SelectNavController(el);\n  }\n\n  for (const el of document.querySelectorAll<HTMLSelectElement>('.js-carousel')) {\n    new CarouselController(el);\n  }\n\n  for (const el of document.querySelectorAll('.js-toggleTheme')) {\n    el.addEventListener('click', () => {\n      toggleTheme();\n    });\n  }\n\n  if (document.querySelector<HTMLElement>('.js-gtmID')?.dataset.gtmid && window.dataLayer) {\n    analytics.func(function () {\n      removeUTMSource();\n    });\n  } else {\n    removeUTMSource();\n  }\n\n  registerHeaderListeners();\n  registerSearchFormListeners();\n  initModals();\n  initJumpLinks();\n  registerCookieNotice();\n});\n\n// Pressing '/' focuses the search box\nkeyboard.on('/', 'focus search', e => {\n  const searchInput = Array.from(\n    document.querySelectorAll<HTMLInputElement>('.js-searchFocus')\n  ).pop();\n  // Favoring the Firefox quick find feature over search input\n  // focus. See: https://github.com/golang/go/issues/41093.\n  if (searchInput && !window.navigator.userAgent.includes('Firefox')) {\n    e.preventDefault();\n    searchInput.focus();\n  }\n});\n\n// Pressing 'y' changes the browser URL to the canonical URL\n// without triggering a reload.\nkeyboard.on('y', 'set canonical url', () => {\n  let canonicalURLPath = document.querySelector<HTMLDivElement>('.js-canonicalURLPath')?.dataset[\n    'canonicalUrlPath'\n  ];\n  if (canonicalURLPath && canonicalURLPath !== '') {\n    const fragment = window.location.hash;\n    if (fragment) {\n      canonicalURLPath += fragment;\n    }\n    window.history.replaceState(null, '', canonicalURLPath);\n  }\n});\n\n/**\n * setupGoogleTagManager initializes Google Tag Manager.\n */\n(function setupGoogleTagManager() {\n  analytics.track({\n    'gtm.start': new Date().getTime(),\n    event: 'gtm.js',\n  });\n})();\n\n/**\n * removeUTMSource removes the utm_source GET parameter if present.\n * This is done using JavaScript, so that the utm_source is still\n * captured by Google Analytics.\n */\nfunction removeUTMSource() {\n  const urlParams = new URLSearchParams(window.location.search);\n  const utmSource = urlParams.get('utm_source');\n  if (utmSource !== 'gopls' && utmSource !== 'godoc' && utmSource !== 'pkggodev') {\n    return;\n  }\n\n  /** Strip the utm_source query parameter and replace the URL. **/\n  const newURL = new URL(window.location.href);\n  urlParams.delete('utm_source');\n  newURL.search = urlParams.toString();\n  window.history.replaceState(null, '', newURL.toString());\n}\n\n/**\n * toggleTheme switches the preferred color scheme between auto, light, and dark.\n */\nfunction toggleTheme() {\n  let nextTheme = 'dark';\n  const theme = document.documentElement.getAttribute('data-theme');\n  if (theme === 'dark') {\n    nextTheme = 'light';\n  } else if (theme === 'light') {\n    nextTheme = 'auto';\n  }\n  let domain = '';\n  if (location.hostname.endsWith('go.dev')) {\n    domain = 'domain=.go.dev;';\n  }\n  document.documentElement.setAttribute('data-theme', nextTheme);\n  document.cookie = `prefers-color-scheme=${nextTheme};${domain}path=/;max-age=31536000;`;\n}\n\n/**\n * registerCookieNotice makes the cookie notice visible and adds listeners to dismiss it\n * if it has not yet been acknowledge by the user.\n */\nfunction registerCookieNotice() {\n  const themeCookie = document.cookie.match(/cookie-consent=true/);\n  if (!themeCookie) {\n    const notice = document.querySelector('.js-cookieNotice');\n    const button = notice?.querySelector('button');\n    notice?.classList.add('Cookie-notice--visible');\n    button?.addEventListener('click', () => {\n      let domain = '';\n      if (location.hostname.endsWith('go.dev')) {\n        // Apply the cookie to *.go.dev.\n        domain = 'domain=.go.dev;';\n      }\n      document.cookie = `cookie-consent=true;${domain}path=/;max-age=31536000`;\n      notice?.remove();\n    });\n  }\n}\n"],
+  "mappings": "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",
+  "names": ["registerHeaderListeners", "header", "menuItemHover", "e", "target", "forced", "toggleForcedOpen", "_a", "_b", "isForced", "currentTarget", "closeSubmenuOnEsc", "event", "forcedOpenItem", "headerbuttons", "button", "isActive", "handleNavigationDrawerInactive", "handleNavigationDrawerActive", "scrim", "subnav", "getNavigationDrawerMenuItems", "navigationDrawer", "menuItems", "anchorEl", "getNavigationDrawerIsSubnav", "parentMenuItem", "item", "handleMenuItemTabLeftFactory", "handleMenuItemTabRightFactory", "prepMobileNavigationDrawer", "isSubnav", "parentLi", "submenu", "drawer", "registerSearchFormListeners", "searchForm", "expandSearch", "input", "headerLogo", "menuButton", "CarouselController", "el", "index", "d", "s", "_a", "i", "v", "_b", "arrows", "dots", "li", "button", "ClipboardController", "el", "_a", "_b", "_c", "_d", "_e", "e", "TOOLTIP_SHOW_DURATION_MS", "text", "durationMs", "ToolTipController", "el", "e", "SelectNavController", "el", "e", "target", "href", "ModalController", "el", "button", "_a", "btn", "track", "event", "category", "action", "label", "_a", "func", "fn", "KeyboardController", "key", "description", "callback", "options", "_a", "_b", "handler", "t", "track", "keyboard", "initModals", "_a", "jumpDialog", "jumpBody", "jumpList", "jumpFilter", "doc", "jumpListItems", "collectJumpListItems", "items", "el", "newJumpListItem", "item", "a", "b", "name", "kind", "lastFilterValue", "activeJumpItem", "updateJumpList", "filter", "setActiveJumpItem", "filterLowerCase", "exactMatches", "prefixMatches", "infixMatches", "makeLinkHtml", "boldStart", "boldEnd", "nameLowerCase", "index", "msg", "n", "cs", "activeTop", "activeBottom", "incActiveJumpItem", "delta", "event", "shortcutsDialog", "keyboard", "e", "jumpOutlineInput", "initJumpLinks", "titles", "nav", "leftNav", "siteContent", "isObserverDisabled", "el", "type", "props", "children", "docEl", "child", "c", "buildNav", "resolve", "reject", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "navItems", "elements", "title", "navItem", "link", "subLinks", "subnavItem", "subItem", "list", "element", "setNav", "a", "setElementActive", "resetNav", "parent", "setLinkManually", "delayObserver", "observeSections", "callback", "entries", "entry", "id", "ob", "e", "_a", "el", "ClipboardController", "ModalController", "t", "ToolTipController", "SelectNavController", "CarouselController", "toggleTheme", "func", "removeUTMSource", "registerHeaderListeners", "registerSearchFormListeners", "initModals", "initJumpLinks", "registerCookieNotice", "keyboard", "e", "searchInput", "canonicalURLPath", "fragment", "track", "urlParams", "utmSource", "newURL", "nextTheme", "theme", "domain", "notice", "button"]
 }
diff --git a/static/frontend/frontend.min.css b/static/frontend/frontend.min.css
index b48fd6a..81aaf86 100644
--- a/static/frontend/frontend.min.css
+++ b/static/frontend/frontend.min.css
@@ -3,7 +3,7 @@
  * Use of this source code is governed by a BSD-style
  * license that can be found in the LICENSE file.
  */
-html,body,button,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,hr,input,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,dialog,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}*,:before,:after{box-sizing:border-box}body{color:var(--color-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:1rem;line-height:normal}h1{font-size:1.5rem}h2{font-size:1.375rem}h3{font-size:1.25rem}h4{font-size:1.125rem}h5{font-size:1rem}h6{font-size:.875rem}h1,h2,h3,h4{font-weight:600;line-height:1.25em;word-break:break-word}h5,h6{font-weight:500;line-height:1.3em;word-break:break-word}hr{border:none;border-bottom:var(--border);margin:0;width:100%}p{font-size:1rem;line-height:1.5rem;max-width:60rem}strong{font-weight:600}.go-textSubtle{color:var(--color-text-subtle)}.go-textTitle{font-size:1.125rem;font-weight:600;line-height:1.25rem}.go-textLabel{font-size:.875rem;font-weight:600;line-height:1rem}.go-textPagination{font-size:.875rem;line-height:1rem}code,pre,textarea.code{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.875rem;line-height:1.5em}pre,textarea.code{background-color:var(--color-background-accented);border:var(--border);border-radius:var(--border-radius);color:var(--color-text);overflow-x:auto;padding:.625rem;tab-size:4;white-space:pre}button,input,select,textarea{font:inherit}a,a:link,a:visited{color:var(--color-brand-primary);text-decoration:none}a:hover,a:focus{color:var(--color-brand-primary);text-decoration:underline}a:hover>*{text-decoration:underline}button:focus:not([disabled]){border-color:var(--color-brand-primary);box-shadow:var(--focus-box-shadow);outline:transparent}.go-Button{align-items:center;background-color:var(--color-button);border:.0625rem solid transparent;border-radius:var(--border-radius);color:var(--color-button-text);cursor:pointer;display:inline-flex;font-weight:500;gap:.25rem}.go-Button:not(.go-Button--inline){padding:.5rem}.go-Button--accented{background-color:var(--color-button-accented);color:var(--color-button-accented-text)}.go-Button--inverted,.go-Button--text,.go-Button--inline{background-color:var(--color-button-inverted);color:var(--color-button-inverted-text)}.go-Button--inline{background-color:transparent}.go-Button--inverted{border:var(--border)}.go-Button:hover{box-shadow:var(--focus-box-shadow);filter:contrast(.95)}.go-Button--inline:hover{box-shadow:none;text-decoration:underline var(--color-button-inverted-text)}.go-Button:focus{filter:contrast(.95)}.go-Button--inverted:focus{border-color:var(--color-button-inverted-text)}.go-Button:active{box-shadow:none;filter:contrast(.85)}.go-Button:disabled{background-color:var(--color-button-disabled);box-shadow:none;color:var(--color-button-text-disabled);cursor:initial;filter:none;text-decoration:none}.go-Button--accented:disabled{background-color:var(--color-button-accented-disabled);color:var(--color-button-accented-text-disabled)}.go-Button--inverted:disabled,.go-Button--text:disabled,.go-Button--inline:disabled{background-color:var(--color-button-inverted-disabled);color:var(--color-button-inverted-text-disabled)}.go-Button--inline:disabled{background-color:transparent}.go-Breadcrumb ol{line-height:1.5rem;white-space:initial}.go-Breadcrumb li{align-items:center;color:var(--color-text-subtle);display:inline-flex;font-size:.875rem}.go-Breadcrumb li:not(:last-child):after{content:">";padding:0 .5rem}.go-Breadcrumb li:last-child>a{color:var(--color-text-subtle)}.go-Breadcrumb li>.go-Clipboard{margin:0 .5rem}.go-Carousel{align-items:center;display:flex;flex-direction:column;position:relative;text-align:center}.go-Carousel-slide{margin:.5rem 3rem}.go-Carousel-slide[aria-hidden]{display:none}.go-Carousel-prevSlide{left:0}.go-Carousel-nextSlide{right:0}.go-Carousel-prevSlide,.go-Carousel-nextSlide{background-color:transparent;border-radius:var(--border-radius);font-size:1.5rem;height:2.75rem;margin-top:-.7rem;opacity:0;position:absolute;top:50%;width:2.75rem}.go-Carousel-prevSlide:hover,.go-Carousel-nextSlide:hover{background-color:var(--color-background-accented);cursor:pointer}.go-Carousel:hover .go-Carousel-prevSlide,.go-Carousel:hover .go-Carousel-nextSlide,.go-Carousel:focus-within .go-Carousel-prevSlide,.go-Carousel:focus-within .go-Carousel-nextSlide{opacity:1}.go-Carousel-dots{display:flex;font-size:.4375rem;gap:.5rem}.go-Carousel-dot{background-color:var(--color-border);border-radius:2rem;height:.4375rem;margin-top:1rem;width:.4375rem}.go-Carousel-dot--active,.go-Carousel-dot:hover{background-color:var(--color-text-subtle);outline:.125rem solid var(--color-text)}.go-Carousel-dot:focus{outline:.063rem solid var(--color-text)!important}.go-Carousel-dot--active:focus{outline:.188rem solid var(--color-text)!important}.go-Carousel-obscured{border:0;clip:rect(0 0 0 0);height:.0625rem;margin:-.0625rem;overflow:hidden;padding:0;position:absolute;width:.0625rem}.go-Chip{background:var(--color-button);border:.0625rem solid var(--color-button);border-radius:1.25rem;color:var(--color-button-text);font-size:.75rem;padding:.125rem .625rem}.go-Chip--accented{background:var(--color-button-accented);border:.0625rem solid var(--color-button-accented);color:var(--color-button-accented-text)}.go-Chip--inverted{background:var(--color-button-inverted);border:var(--border);color:var(--color-text)}.go-Chip--highlighted{background:var(--color-background-highlighted-link);border-color:var(--color-background-highlighted-link);color:var(--color-brand-primary)}.go-Chip--alert{background:var(--pink);border:.0625rem solid var(--pink);color:var(--color-text-inverted)}.go-Chip--vuln{background:var(--pink-light);border:.0625rem solid var(--pink-light);color:var(--color-text-inverted)}.go-Chip--subtle{background-color:var(--color-background-accented);border-color:transparent;color:var(--color-text-subtle)}.go-Clipboard{position:relative}.go-Clipboard:before{background-color:var(--color-background-inverted);border-radius:var(--border-radius);color:var(--color-text-inverted);content:attr(data-tooltip);display:block;font-size:.9em;left:calc(100% + .125rem);padding:.25rem .3rem;position:absolute;text-transform:uppercase;top:.125rem;white-space:nowrap;z-index:1000}.go-Clipboard:after{border-bottom:.25rem solid transparent;border-left:0;border-right:.25rem solid var(--color-background-inverted);border-top:.25rem solid transparent;content:"";display:block;position:absolute;right:-.125rem;top:.5625rem;z-index:1000}.go-Clipboard:not([data-tooltip]):before,.go-Clipboard:not([data-tooltip]):after,.go-Clipboard[data-tooltip=""]:before,.go-Clipboard[data-tooltip=""]:after{display:none}:root{--gray-1: #202224;--gray-2: #3e4042;--gray-3: #555759;--gray-4: #6e7072;--gray-5: #848688;--gray-6: #aaacae;--gray-7: #c6c8ca;--gray-8: #dcdee0;--gray-9: #f0f1f2;--gray-10: #f8f8f8;--turq-light: #5dc9e2;--turq-med: #50b7e0;--turq-dark: #007d9c;--turq-bright: #00769c;--blue: #bfeaf4;--blue-light: #f2fafd;--black: #000;--green: #3a6e11;--green-light: #5fda64;--pink: #c85e7a;--pink-light: #fdecf1;--purple: #542c7d;--slate: #253443;--white: #fff;--yellow: #fceea5;--yellow-light: #fff8cc;--color-brand-primary: var(--turq-dark);--color-background: var(--white);--color-background-inverted: var(--slate);--color-background-accented: var(--gray-10);--color-background-highlighted: var(--blue);--color-background-highlighted-link: var(--blue-light);--color-background-info: var(--gray-9);--color-background-warning: var(--yellow-light);--color-background-alert: var(--pink-light);--color-border: var(--gray-7);--color-text: var(--gray-1);--color-text-subtle: var(--gray-4);--color-text-link: var(--turq-dark);--color-text-inverted: var(--white);--color-code-comment: var(--green);--color-bright-text-link: var(--turq-bright);--color-input: var(--color-background);--color-input-text: var(--color-text);--color-button: var(--turq-dark);--color-button-disabled: var(--gray-9);--color-button-text: var(--white);--color-button-text-disabled: var(--gray-3);--color-button-inverted: var(--color-background);--color-button-inverted-disabled: var(--color-background);--color-button-inverted-text: var(--color-brand-primary);--color-button-inverted-text-disabled: var(--color-text-subtle);--color-button-accented: var(--yellow);--color-button-accented-disabled: var(--gray-9);--color-button-accented-text: var(--gray-1);--color-button-accented-text-disabled: var(--gray-3)}[data-theme=dark]{--color-brand-primary: var(--turq-med);--color-background: var(--gray-1);--color-background-accented: var(--gray-2);--color-background-highlighted: var(--gray-2);--color-background-highlighted-link: var(--gray-2);--color-background-info: var(--gray-3);--color-background-warning: var(--yellow);--color-background-alert: var(--pink);--color-border: var(--gray-4);--color-text: var(--gray-9);--color-text-link: var(--turq-med);--color-text-subtle: var(--gray-7);--color-code-comment: var(--green-light);--color-bright-text-link: var(--turq-med)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--color-brand-primary: var(--turq-med);--color-background: var(--gray-1);--color-background-accented: var(--gray-2);--color-background-highlighted: var(--gray-2);--color-background-highlighted-link: var(--gray-2);--color-background-info: var(--gray-3);--color-background-warning: var(--yellow);--color-background-alert: var(--pink);--color-border: var(--gray-4);--color-text: var(--gray-9);--color-text-link: var(--turq-med);--color-text-subtle: var(--gray-7);--color-code-comment: var(--green-light)}}.go-Footer{background-color:var(--color-background-inverted);color:var(--color-text-inverted);font-size:.875rem;width:100%}[data-local=true] .go-Footer{display:none}.go-Footer-links{display:flex;flex-wrap:wrap;justify-content:space-between;margin:auto;max-width:75.75rem;padding:2rem 1.5rem 2.625rem}.go-Footer-linkColumn{flex:0 0 9.5rem}.go-Footer .go-Footer-link{color:var(--color-text-inverted);display:flex;flex:1;font-size:.875rem;line-height:2rem}.go-Footer .go-Footer-link--primary{font-size:1.125rem;line-height:1.75rem;margin-bottom:.5rem;margin-top:.75rem}.go-Footer-listItem p{color:var(--color-text-inverted);font-size:.875rem}.go-Footer-bottom{align-items:center;border-top:var(--border);display:flex;margin:0 1.5rem;min-height:4.125rem}.go-Footer-gopher{align-self:flex-end;height:3.147rem;width:5rem}.go-Footer-listRow{display:flex;flex:1;flex-wrap:wrap;list-style:none;margin:0;padding:0;text-align:center}.go-Footer-listItem{align-items:center;display:flex;flex:1 100%;justify-content:center;margin:.4rem 0;padding:0 1rem}.go-Footer-listItem a:link,.go-Footer-listItem a:visited{color:var(--color-text-inverted)}.go-Footer-listItem .go-Button--text{background-color:transparent;font-size:1rem;margin:-.5rem 0}.go-Footer-listItem [data-value]{display:none}[data-theme=auto] .go-Footer-listItem [data-value=auto],:root:not([data-theme]) .go-Footer-listItem [data-value=auto]{display:initial}[data-theme=dark] .go-Footer-listItem [data-value=dark],[data-theme=light] .go-Footer-listItem [data-value=light]{display:initial}.go-Footer-toggleTheme,.go-Footer-keyboard{margin:0 0 .5rem}.go-Footer-googleLogo{align-self:flex-end;height:1.5rem;margin-bottom:1.3rem;text-align:right}.go-Footer-googleLogoImg{height:1.5rem;width:4.529rem}@media only screen and (min-width: 52rem){.go-Footer-listItem{flex:initial}.go-Footer-listItem+.go-Footer-listItem{border-left:var(--border)}.go-Footer-toggleTheme{margin:0 0 0 -.5rem}.go-Footer-keyboard{margin:0}}select:focus:not([disabled]),input:focus:not([disabled]){border-color:var(--color-brand-primary);box-shadow:var(--focus-box-shadow);outline:transparent;z-index:2}input::placeholder{color:var(--color-text-subtle)}.go-Form{align-items:start;display:flex;flex-direction:column;gap:1rem}.go-Label{display:flex;flex-direction:column;gap:.5rem}.go-Label--inline{align-items:center;flex-direction:row}.go-Label legend{margin-bottom:.5rem}.go-Label--inline legend{float:left;margin-bottom:0}.go-Input,.go-Select{background:var(--color-input);border:var(--border);border-radius:var(--border-radius);color:var(--color-input-text)}.go-Input{padding:.4063rem .5rem}.go-Select{appearance:none;background:url(/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg) right no-repeat;background-color:var(--color-background);background-position:right center;border-radius:var(--border-radius);margin:0;padding:.3438rem 1.25rem .3438rem .5rem}.go-InputGroup{display:flex}.go-InputGroup .go-Input{flex:1}.go-InputGroup>:not(:first-child,:last-child){border-radius:0;margin-left:-.0625rem}.go-InputGroup>:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.go-InputGroup>:last-child{border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-.0625rem}.go-InputGroup>*:hover,.go-InputGroup>*:focus{z-index:1}.go-ShortcutKey{display:flex;position:relative}.go-ShortcutKey .go-Input{flex-grow:1}.go-ShortcutKey:after{align-self:center;background-color:var(--color-background-accented);border-radius:.5rem;color:var(--gray-6);content:attr(data-shortcut);content:attr(data-shortcut) / attr(data-shortcut-alt);display:none;font-size:.75rem;padding:.0625rem 0;position:absolute;right:.75rem;text-align:center;width:1.5rem;z-index:1}@media only screen and (min-width: 52rem){.go-ShortcutKey:after{display:initial}}.go-GopherMessage img{display:block;height:15rem;margin:0 auto;padding:1.25rem 0;width:15rem}.go-GopherMessage p{font-weight:600;margin:auto;text-align:center}.go-Banner{background-color:var(--gray-1);display:none}.go-Banner-inner{align-items:center;display:flex;justify-content:space-between;margin:0 auto;min-height:2.5rem;padding:.5rem var(--gutter)}.Site--wide .go-Banner-inner{max-width:98rem}.go-Banner--full .go-Banner-inner{max-width:unset}.go-Banner-message{color:var(--white);margin-right:1.25rem}.go-Banner-action:link,.go-Banner-action:visited{color:var(--white);text-decoration:underline;white-space:nowrap}@media only screen and (min-width: 52rem){.go-Banner{display:block}}.go-Header{background:#007d9c;border-bottom:none;box-shadow:0 .0625rem .125rem #ababab4d;top:0;width:100%;z-index:20}.go-Header-inner{margin:0 auto;padding:0 var(--gutter)}.Site--wide .go-Header-inner{max-width:98rem}.go-Header--full .go-Header-inner{max-width:initial}.go-Header-nav{align-items:center;display:flex;height:3.5rem;justify-content:space-between}.go-Header-rightContent{align-items:center;display:flex;height:100%;justify-content:flex-end;width:100%}.go-Header-rightContent form{flex-grow:1}.go-Header-inner--dark{border-bottom:none;color:var(--white)}.go-Header-logo{display:block;height:2rem;margin-right:2.25rem;width:5.125rem}.go-Header-logo--hidden{display:none}.go-Header-menuItem{display:none;position:relative}.go-Header-menu{align-items:stretch;display:flex;height:100%;list-style:none;margin:0;padding:0}[data-local=true] .go-Header-menu{display:none}.go-Header-submenu{background:transparent;background-color:var(--color-background);border:.0625rem solid #007d9d;border-width:0 .0625rem .0625rem;color:var(--color-text);display:none;flex-flow:column wrap;list-style-type:none;margin-top:3.5rem;opacity:0;padding:1.5rem 1.5rem 0;position:absolute;transition:all .2s ease;visibility:hidden}.go-Header-menuItem:hover>.js-desktop-menu-hover:not(.forced-closed)~.go-Header-submenu,.go-Header-menuItem:focus-within>.js-desktop-menu-hover:not(.forced-closed)~.go-Header-submenu{display:flex;opacity:1;visibility:visible}.go-Header-menuItem .go-Header-submenuItem a:link,.go-Header-menuItem .go-Header-submenuItem a:visited{align-items:baseline;border-bottom:none;color:var(--color-text-link);display:inline-flex;font-weight:400;margin:0;margin-bottom:-.125rem;padding:0}.go-Header-menuItem .go-Icon{filter:brightness(0%) saturate(100%) invert(100%);font-size:1.25rem}.go-Header-menuItem .go-Header-submenuItem .go-Icon,.go-NavigationDrawer-listItem .go-Icon{filter:brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(162deg) brightness(71%) contrast(177%)}.go-Header-submenu .go-Header-submenuItem i{font-size:.75rem;margin-left:.25rem;transform:translateY(.1rem)}.go-Header-menu .go-Header-submenu--why{left:-.0625rem;width:18.5rem}.go-Header-menu .go-Header-submenu--docs{height:20.78rem;left:-12rem;width:37.25rem}.go-Header-menu .go-Header-submenu--community{height:18.4rem;right:-.0625rem;width:37.25rem}.go-Header-socialIcons{display:flex;flex-wrap:wrap}.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon{display:inline-flex;flex:0 1 auto;width:auto}.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon:not(:last-child){margin-right:.75rem}@media only screen and (min-width: 65rem){.go-Header-menuItem{align-items:stretch;display:inline-flex;flex:none}.go-Header-menu{justify-content:flex-end}.go-Header-navOpen{display:none}}.go-Header-menuItem .js-desktop-menu-hover img{pointer-events:none}.go-Header-menuItem a:link,.go-Header-menuItem a:visited{align-items:center;border-bottom:.1875rem solid transparent;border-top:.1875rem solid transparent;color:var(--color-text);display:inline-flex;padding:0 1.5rem;text-align:center;text-decoration:none;width:100%}.go-Header-menuItem--active a:link,.go-Header-menuItem--active a:visited{border-bottom-color:var(--turq-med);font-weight:700}.go-Header-menuItem a:hover{border-bottom-color:var(--white)}.go-Header-menuItem:hover>a:not(.forced-closed).js-desktop-menu-hover,.go-Header-menuItem:focus-within>a:not(.forced-closed).js-desktop-menu-hover{background:var(--white);border-color:var(--white);color:var(--color-text-link)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .go-Header-menuItem:hover>a:not(.forced-closed).js-desktop-menu-hover .go-Icon,:root:not([data-theme=light]) .go-Header-menuItem:focus-within>a:not(.forced-closed).js-desktop-menu-hover .go-Icon{filter:brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(158deg) brightness(83%) contrast(157%)}:root:not([data-theme=light]) .go-Header-submenuItem .go-Icon:not(.go-Icon--accented){filter:brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(163deg) brightness(80%) contrast(157%)}}.go-NavigationDrawer-listItem>div:not(.go-NavigationDrawer),.go-NavigationDrawer-listItem a:link,.go-NavigationDrawer-listItem a:visited{display:block;margin:0 1rem;padding:.5rem}.go-NavigationDrawer-listItem>span{color:var(--gray-2)}.go-Header-inner--dark .go-Header-menuItem a:link,.go-Header-inner--dark .go-Header-menuItem a:visited{color:var(--white)}.go-NavigationDrawer-listItem.go-NavigationDrawer-hasSubnav>a i{float:right}.go-Header-inner--dark .go-Header-menuItem .go-Header-submenuItem{color:var(--color-text-link)}.go-Header-inner--dark .go-Header-menuItem .js-desktop-menu-hover.is-expanded{background-color:var(--white);color:var(--color-text-link)}.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:link,.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:visited{align-items:baseline;color:var(--color-text-link);display:inline-flex;margin-bottom:-.125rem;width:auto}.go-Header-submenu .go-Header-submenuItem a:link,.go-Header-submenu .go-Header-submenuItem a:visited{border-bottom:none;font-weight:400;margin:0;padding:0}.go-Header-submenu .go-Header-submenuItem a:focus{text-decoration:underline!important}.go-Header-inner--dark .go-Header-menuItem:hover>a:not(.forced-closed).js-desktop-menu-hover,.go-Header-inner--dark .go-Header-menuItem:focus-within>a:not(.forced-closed).js-desktop-menu-hover{background:var(--color-background);border-color:var(--color-background)}.go-Header-submenu p{max-width:15.5rem}.go-Header-submenu a:link:hover,.go-Header-submenu a:visited:hover{border-bottom:.125rem solid var(--turq-dark);text-decoration:none}.go-Header-submenu a:link:hover>*,.go-Header-submenu a:visited:hover>*{text-decoration:none}.go-Header-submenu .go-Header-submenuItem{line-height:1;padding-bottom:1.5rem}.go-Header-submenu .go-Header-submenuItem p{color:var(--color-text-subtle);font-size:.875rem;margin-top:.55rem}.go-Header-inner--dark .go-Header-submenu .go-Header-submenuItem p{color:var(--color-text-subtle)}.go-Header-navOpen{background:no-repeat center/2rem url(/images/menu-24px.svg);border:none;height:2.5rem;margin-left:1rem;width:2.5rem}.go-Header-navOpen--hidden{display:none}.go-Header-navOpen--white{background:no-repeat center/2rem url(/static/shared/icon/menu_gm_grey_24dp.svg);filter:brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%)}.go-SearchForm--expanded{flex-grow:1}.go-SearchForm-form{display:none}.go-SearchForm-form:after{right:2.75rem}.go-SearchForm--expanded .go-SearchForm-form{display:flex}.go-SearchForm-expandSearch{appearance:none;background:none;font-size:1.5rem}.go-SearchForm--expanded .go-SearchForm-expandSearch{display:none}@media only screen and (min-width: 32rem){.go-Header-rightContent{width:100%}.go-SearchForm{flex:1}.go-SearchForm-form{display:flex}.go-SearchForm-expandSearch{display:none}.go-Header-logo--hidden{display:initial}}.go-NavigationDrawer{background:var(--color-background);height:100%;left:auto;max-width:27rem;position:fixed;right:0;top:0;transform:translate(100%);transition:transform .1s ease-in-out;width:85%;z-index:30}@media only screen and (min-width: 65rem){.go-NavigationDrawer{display:none}}.go-NavigationDrawer.is-active{transform:translate(0)}.go-NavigationDrawer-header{border-bottom:.0625rem solid #eee;margin-bottom:.5rem}.go-NavigationDrawer-submenuItem{width:100%}.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header{align-items:center;color:var(--color-text-link);display:flex;font-size:1.375rem;justify-content:flex-start;min-height:4.0625rem;padding:.5rem .5rem .5rem 1.5rem}.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header>a{display:flex;margin-left:0}.go-NavigationDrawer-logo{display:block;height:2rem;margin:1rem;width:5.125rem}.go-NavigationDrawer-list{list-style:none;margin:0;padding:0}.go-NavigationDrawer-listItem{color:var(--color-text-subtle);font-size:1.125rem;margin:0 .5rem}.go-NavigationDrawer-listItem--active{background-color:var(--blue);border-radius:.4rem}.go-NavigationDrawer-listItem .material-icons{color:var(--color-brand-primary);display:inline-block;margin-right:.5rem;text-decoration:none;vertical-align:sub}@media only screen and (max-width: 57.7rem){.go-NavigationDrawer-listItem .go-Header-socialIcons{padding:.5rem 0}.go-NavigationDrawer-listItem a.go-Header-socialIcon{display:inline-block;margin:0;padding:0 .5rem}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .go-NavigationDrawer-listItem .go-Icon:not(.go-Icon--accented){filter:brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(163deg) brightness(80%) contrast(157%)}}}.go-NavigationDrawer-scrim{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:20}.go-NavigationDrawer.is-active+.go-NavigationDrawer-scrim{background-color:var(--gray-1);display:block;opacity:.32}.skip-to-content-link{background:var(--color-background);border-radius:.375rem;clip:rect(0 0 0 0);color:var(--color-text);font-weight:500;left:8%;margin:.313rem;overflow:hidden;position:absolute;top:.75rem}.skip-to-content-link:focus{clip:unset;z-index:1}.depsdev-Icon{height:1.125em;vertical-align:text-bottom;width:auto}.go-Icon{filter:none;height:1.125em;vertical-align:text-bottom;width:auto}.go-Icon--accented{filter:brightness(0) invert(45%) sepia(94%) saturate(6735%) hue-rotate(176deg) brightness(94%) contrast(101%)}.go-Icon--inverted{filter:brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%);@media (forced-colors: active) and (prefers-color-scheme: light){filter:brightness(500%) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%)}}[data-theme=dark] .go-Icon:not(.go-Icon--accented){filter:brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%)}[data-theme=dark] .go-Icon--accented{filter:brightness(0) invert(69%) sepia(46%) saturate(466%) hue-rotate(153deg) brightness(90%) contrast(88%)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .go-Icon:not(.go-Icon--accented){filter:brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%)}:root:not([data-theme=light]) .go-Icon--accented{filter:brightness(0) invert(57%) sepia(63%) saturate(4864%) hue-rotate(160deg) brightness(100%) contrast(101%)}}.go-Message{color:var(--color-text);font-size:.875rem;line-height:1.5rem;padding:.25rem .5rem;width:100%}.go-Message--notice{background-color:var(--color-background-info)}.go-Message--warning{background-color:var(--color-background-warning);color:var(--gray-1)}.go-Message--alert{background-color:var(--color-background-alert)}.go-Message>.go-Icon{vertical-align:text-top}[data-theme=dark] .go-Message a:not(:hover){color:var(--color-text);text-decoration:underline}[data-theme=dark] .go-Message--warning .go-Icon{filter:none}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .go-Message--warning .go-Icon{filter:none}}dialog{position:absolute;left:0;right:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;margin:auto;border:solid;padding:1em;background:white;color:#000;display:block}dialog:not([open]){display:none}dialog+.backdrop{position:fixed;inset:0;background:rgba(0,0,0,.1)}._dialog_overlay{position:fixed;inset:0}dialog.fixed{position:fixed;top:50%;transform:translateY(-50%)}.go-Modal{background:var(--color-background);border:var(--border);border-radius:var(--border-radius);bottom:0;box-shadow:var(--box-shadow);color:var(--color-text);display:flex;flex-direction:column;gap:1rem;max-height:100%;max-width:100%;position:fixed;top:0}.go-Modal>form{display:contents}.go-Modal--small{width:20rem}.go-Modal--md{width:30rem}.go-Modal--lg{width:40rem}.go-Modal-header{display:flex;justify-content:space-between}.go-Modal-header h2{font-size:1.15rem;line-height:1.25rem}.go-Modal-body{flex-grow:1;min-height:2rem;min-width:18rem}.go-Modal-actions{text-align:right}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){.go-Modal{padding-bottom:0}}}.go-Tree{--js-tree-height: 0;display:flex;flex-direction:column}.go-Tree ul{list-style:none;padding-left:0}.go-Tree li:last-of-type{padding-bottom:.25rem}.go-Tree a+ul{display:none}.go-Tree a[aria-expanded=true]+ul[role=group]{display:block}.go-Tree a[aria-level="1"]+ul[role=group]{max-height:calc(100vh - var(--js-tree-height, 0) - var(--js-sticky-header-height, 3.5rem) - 5rem);overflow-y:auto;padding:.5rem .25rem 0}.go-Tree a{color:var(--color-text-subtle);display:block;line-height:1.5rem;overflow:hidden;padding:.125rem 0 .125rem 1.25rem;position:relative;text-overflow:ellipsis;user-select:none;white-space:nowrap}.go-Tree>li>a,.go-Tree a[aria-level="1"]{display:block;font-size:1rem;font-weight:500;line-height:2.5rem;padding:0 1rem}.go-Tree a:focus,.go-Tree a:hover{text-decoration:underline;z-index:1}.go-Tree a[aria-selected=true]{color:var(--color-text);font-weight:500}.go-Tree a[aria-level="1"][aria-selected=true],.go-Tree a[aria-level="1"][aria-expanded=true]{background-color:var(--color-background-accented)}.go-Tree a[aria-level="3"][aria-expanded=true]{margin-bottom:.375em}.go-Tree a[aria-level="2"]{margin-bottom:.25rem;position:relative}.go-Tree a[aria-level="3"]{padding-left:2.5rem}.go-Tree a[aria-level="4"]{border-left:.125rem solid var(--color-background-accented);margin-left:2.5rem;padding-left:.5rem}.go-Tree a[aria-selected=true][aria-level="2"]:not([aria-expanded]):before,.go-Tree a[aria-selected=true][aria-level="3"]:not([aria-expanded]):before{background-color:var(--color-brand-primary);border-radius:50%;content:"";display:block;height:.3125rem;left:.4688rem;position:absolute;top:.75rem;width:.3125rem}.go-Tree a[aria-expanded][aria-owns][aria-level="2"]:before,.go-Tree a[aria-expanded][aria-owns][aria-level="3"]:before{border-bottom:.25rem solid transparent;border-left:.25rem solid var(--color-border);border-right:0;border-top:.25rem solid transparent;content:"";display:block;height:0;left:.5rem;position:absolute;top:.625rem;transition:transform .1s linear;width:0}.go-Tree a[aria-expanded=true][aria-level="2"]:before,.go-Tree a[aria-expanded=true][aria-level="3"]:before{transform:rotate(90deg)}.go-Tree a[aria-expanded][aria-level="3"]:not([empty]):before,.go-Tree a[aria-selected][aria-level="3"]:not([empty]):before{left:1.5rem;top:.75rem}.go-Tree a[aria-selected=true][aria-level="4"]{border-left:.125rem solid var(--color-brand-primary)}.go-TabNav{margin:0 0 .5rem}.go-TabNav ul{display:flex;gap:2rem}.go-TabNav li{border-bottom:.25rem transparent solid;display:flex;font-size:1rem;height:2.375rem;padding:0 .25rem}.go-TabNav li[aria-current],.go-TabNav li:hover{border-color:var(--color-brand-primary)}.go-TabNav a{align-items:center;color:var(--color-text-subtle);display:inline-flex}.go-TabNav li:hover a{text-decoration:none}.go-TabNav li[aria-current] a{color:var(--color-text)}.go-Tooltip{border-radius:var(--border-radius);cursor:pointer;display:inline-block;position:relative}.go-Tooltip>summary{list-style:none}.go-Tooltip>summary::-webkit-details-marker,.go-Tooltip>summary::marker{display:none}.go-Tooltip>summary>img{vertical-align:text-bottom}.go-Tooltip p{background:var(--color-background) 80%;border:var(--border);border-radius:var(--border-radius);color:var(--color-text);font-size:.75rem;letter-spacing:.0187rem;line-height:1rem;padding:.5rem;position:absolute;top:1.5rem;white-space:normal;width:12rem;z-index:100}:root{--gutter: 1.5rem;--gap: 1rem;--scroll-margin: calc( var(--js-sticky-header-height, 3.5rem) + var(--js-sticky-nav-height, 0) + 2rem );--border: .0625rem solid var(--color-border);--border-radius: .25rem;--box-shadow: 0 0 .375rem 0 rgb(0 0 0 / 25%);--focus-box-shadow: 0 0 .0625rem .0625rem rgb(0 112 210 / 60%)}[data-theme=dark]{--box-shadow: 0 .3125rem .9375rem rgb(0 0 0 / 45%)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--box-shadow: 0 .3125rem .9375rem rgb(0 0 0 / 45%)}}@media (min-width: 50rem){:root{--gap: 2rem;--scroll-margin: calc( var(--js-sticky-header-height, 3.5rem) + var(--js-sticky-nav-height, 0) + 1rem )}}*:target{scroll-margin-top:var(--scroll-margin)}body{background-color:var(--color-background);display:flex;flex-direction:column;min-height:100vh;min-width:23.5rem;-webkit-overflow-scrolling:touch}.go-Container{display:flex;flex-direction:column;flex-grow:1;height:100%;margin-bottom:5rem}.go-Content{display:flex;flex-flow:column;gap:1rem;margin:0 auto;max-width:63rem;min-height:32rem;padding:2rem var(--gutter);width:100%}.go-Content--center{justify-content:center;margin:auto}.JumpDialog-body{height:12rem;overflow-y:auto}.JumpDialog-list{display:flex;flex-direction:column}.JumpDialog-input{width:100%}.JumpDialog a{padding:.25rem;text-decoration:none}.JumpDialog .JumpDialog-active{background-color:var(--color-brand-primary);color:var(--white)}.ShortcutsDialog-key{text-align:right}.ShortcutsDialog table{padding:0 1rem}.ShortcutsDialog td{padding-bottom:.5rem;padding-left:.5rem}.ShortcutsDialog-theme span{display:none}[data-theme=light] .ShortcutsDialog-themeLight,[data-theme=dark] .ShortcutsDialog-themeDark,[data-theme=""] .ShortcutsDialog-themeAuto,[data-theme=auto] .ShortcutsDialog-themeAuto{display:initial}.Cookie-notice{align-items:center;background-color:var(--color-background);border-top:var(--border);bottom:0;color:var(--color-text);display:none;gap:1rem;justify-content:center;left:0;padding:1rem;position:fixed;right:0;z-index:100}.Cookie-notice--visible{display:flex}
+html,body,button,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,hr,input,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,dialog,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}*,:before,:after{box-sizing:border-box}body{color:var(--color-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:1rem;line-height:normal}h1{font-size:1.5rem}h2{font-size:1.375rem}h3{font-size:1.25rem}h4{font-size:1.125rem}h5{font-size:1rem}h6{font-size:.875rem}h1,h2,h3,h4{font-weight:600;line-height:1.25em;word-break:break-word}h5,h6{font-weight:500;line-height:1.3em;word-break:break-word}hr{border:none;border-bottom:var(--border);margin:0;width:100%}p{font-size:1rem;line-height:1.5rem;max-width:60rem}strong{font-weight:600}.go-textSubtle{color:var(--color-text-subtle)}.go-textTitle{font-size:1.125rem;font-weight:600;line-height:1.25rem}.go-textLabel{font-size:.875rem;font-weight:600;line-height:1rem}.go-textPagination{font-size:.875rem;line-height:1rem}code,pre,textarea.code{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.875rem;line-height:1.5em}pre,textarea.code{background-color:var(--color-background-accented);border:var(--border);border-radius:var(--border-radius);color:var(--color-text);overflow-x:auto;padding:.625rem;tab-size:4;white-space:pre}button,input,select,textarea{font:inherit}a,a:link,a:visited{color:var(--color-brand-primary);text-decoration:none}a:hover,a:focus{color:var(--color-brand-primary);text-decoration:underline}a:hover>*{text-decoration:underline}button:focus:not([disabled]){border-color:var(--color-brand-primary);box-shadow:var(--focus-box-shadow);outline:transparent}.go-Button{align-items:center;background-color:var(--color-button);border:.0625rem solid transparent;border-radius:var(--border-radius);color:var(--color-button-text);cursor:pointer;display:inline-flex;font-weight:500;gap:.25rem}.go-Button:not(.go-Button--inline){padding:.5rem}.go-Button--accented{background-color:var(--color-button-accented);color:var(--color-button-accented-text)}.go-Button--inverted,.go-Button--text,.go-Button--inline{background-color:var(--color-button-inverted);color:var(--color-button-inverted-text)}.go-Button--inline{background-color:transparent}.go-Button--inverted{border:var(--border)}.go-Button:hover{box-shadow:var(--focus-box-shadow);filter:contrast(.95)}.go-Button--inline:hover{box-shadow:none;text-decoration:underline var(--color-button-inverted-text)}.go-Button:focus{filter:contrast(.95)}.go-Button--inverted:focus{border-color:var(--color-button-inverted-text)}.go-Button:active{box-shadow:none;filter:contrast(.85)}.go-Button:disabled{background-color:var(--color-button-disabled);box-shadow:none;color:var(--color-button-text-disabled);cursor:initial;filter:none;text-decoration:none}.go-Button--accented:disabled{background-color:var(--color-button-accented-disabled);color:var(--color-button-accented-text-disabled)}.go-Button--inverted:disabled,.go-Button--text:disabled,.go-Button--inline:disabled{background-color:var(--color-button-inverted-disabled);color:var(--color-button-inverted-text-disabled)}.go-Button--inline:disabled{background-color:transparent}.go-Breadcrumb ol{line-height:1.5rem;white-space:initial}.go-Breadcrumb li{align-items:center;color:var(--color-text-subtle);display:inline-flex;font-size:.875rem}.go-Breadcrumb li:not(:last-child):after{content:">";padding:0 .5rem}.go-Breadcrumb li:last-child>a{color:var(--color-text-subtle)}.go-Breadcrumb li>.go-Clipboard{margin:0 .5rem}.go-Carousel{align-items:center;display:flex;flex-direction:column;position:relative;text-align:center}.go-Carousel-slide{margin:.5rem 3rem}.go-Carousel-slide[aria-hidden]{display:none}.go-Carousel-prevSlide{left:0}.go-Carousel-nextSlide{right:0}.go-Carousel-prevSlide,.go-Carousel-nextSlide{background-color:transparent;border-radius:var(--border-radius);font-size:1.5rem;height:2.75rem;margin-top:-.7rem;opacity:0;position:absolute;top:50%;width:2.75rem}.go-Carousel-prevSlide:hover,.go-Carousel-nextSlide:hover{background-color:var(--color-background-accented);cursor:pointer}.go-Carousel:hover .go-Carousel-prevSlide,.go-Carousel:hover .go-Carousel-nextSlide,.go-Carousel:focus-within .go-Carousel-prevSlide,.go-Carousel:focus-within .go-Carousel-nextSlide{opacity:1}.go-Carousel-dots{display:flex;font-size:.4375rem;gap:.5rem}.go-Carousel-dot{background-color:var(--color-border);border-radius:2rem;height:.4375rem;margin-top:1rem;width:.4375rem}.go-Carousel-dot--active,.go-Carousel-dot:hover{background-color:var(--color-text-subtle);outline:.125rem solid var(--color-text)}.go-Carousel-dot:focus{outline:.063rem solid var(--color-text)!important}.go-Carousel-dot--active:focus{outline:.188rem solid var(--color-text)!important}.go-Carousel-obscured{border:0;clip:rect(0 0 0 0);height:.0625rem;margin:-.0625rem;overflow:hidden;padding:0;position:absolute;width:.0625rem}.go-Chip{background:var(--color-button);border:.0625rem solid var(--color-button);border-radius:1.25rem;color:var(--color-button-text);font-size:.75rem;padding:.125rem .625rem}.go-Chip--accented{background:var(--color-button-accented);border:.0625rem solid var(--color-button-accented);color:var(--color-button-accented-text)}.go-Chip--inverted{background:var(--color-button-inverted);border:var(--border);color:var(--color-text)}.go-Chip--highlighted{background:var(--color-background-highlighted-link);border-color:var(--color-background-highlighted-link);color:var(--color-brand-primary)}.go-Chip--alert{background:var(--pink);border:.0625rem solid var(--pink);color:var(--color-text-inverted)}.go-Chip--vuln{background:var(--pink-light);border:.0625rem solid var(--pink-light);color:var(--color-text-inverted)}.go-Chip--subtle{background-color:var(--color-background-accented);border-color:transparent;color:var(--color-text-subtle)}.go-Clipboard{position:relative}.go-Clipboard:before{background-color:var(--color-background-inverted);border-radius:var(--border-radius);color:var(--color-text-inverted);content:attr(data-tooltip);display:block;font-size:.9em;left:calc(100% + .125rem);padding:.25rem .3rem;position:absolute;text-transform:uppercase;top:.125rem;white-space:nowrap;z-index:1000}.go-Clipboard:after{border-bottom:.25rem solid transparent;border-left:0;border-right:.25rem solid var(--color-background-inverted);border-top:.25rem solid transparent;content:"";display:block;position:absolute;right:-.125rem;top:.5625rem;z-index:1000}.go-Clipboard:not([data-tooltip]):before,.go-Clipboard:not([data-tooltip]):after,.go-Clipboard[data-tooltip=""]:before,.go-Clipboard[data-tooltip=""]:after{display:none}:root{--gray-1: #202224;--gray-2: #3e4042;--gray-3: #555759;--gray-4: #6e7072;--gray-5: #848688;--gray-6: #aaacae;--gray-7: #c6c8ca;--gray-8: #dcdee0;--gray-9: #f0f1f2;--gray-10: #f8f8f8;--turq-light: #5dc9e2;--turq-med: #50b7e0;--turq-dark: #007d9c;--turq-bright: #00769c;--blue: #bfeaf4;--blue-light: #f2fafd;--black: #000;--green: #3a6e11;--green-light: #5fda64;--pink: #c85e7a;--pink-light: #fdecf1;--purple: #542c7d;--slate: #253443;--white: #fff;--yellow: #fceea5;--yellow-light: #fff8cc;--color-brand-primary: var(--turq-dark);--color-background: var(--white);--color-background-inverted: var(--slate);--color-background-accented: var(--gray-10);--color-background-highlighted: var(--blue);--color-background-highlighted-link: var(--blue-light);--color-background-info: var(--gray-9);--color-background-warning: var(--yellow-light);--color-background-alert: var(--pink-light);--color-border: var(--gray-7);--color-text: var(--gray-1);--color-text-subtle: var(--gray-4);--color-text-link: var(--turq-dark);--color-text-inverted: var(--white);--color-code-comment: var(--green);--color-bright-text-link: var(--turq-bright);--color-input: var(--color-background);--color-input-text: var(--color-text);--color-button: var(--turq-dark);--color-button-disabled: var(--gray-9);--color-button-text: var(--white);--color-button-text-disabled: var(--gray-3);--color-button-inverted: var(--color-background);--color-button-inverted-disabled: var(--color-background);--color-button-inverted-text: var(--color-brand-primary);--color-button-inverted-text-disabled: var(--color-text-subtle);--color-button-accented: var(--yellow);--color-button-accented-disabled: var(--gray-9);--color-button-accented-text: var(--gray-1);--color-button-accented-text-disabled: var(--gray-3)}[data-theme=dark]{--color-brand-primary: var(--turq-med);--color-background: var(--gray-1);--color-background-accented: var(--gray-2);--color-background-highlighted: var(--gray-2);--color-background-highlighted-link: var(--gray-2);--color-background-info: var(--gray-3);--color-background-warning: var(--yellow);--color-background-alert: var(--pink);--color-border: var(--gray-4);--color-text: var(--gray-9);--color-text-link: var(--turq-med);--color-text-subtle: var(--gray-7);--color-code-comment: var(--green-light);--color-bright-text-link: var(--turq-med)}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--color-brand-primary: var(--turq-med);--color-background: var(--gray-1);--color-background-accented: var(--gray-2);--color-background-highlighted: var(--gray-2);--color-background-highlighted-link: var(--gray-2);--color-background-info: var(--gray-3);--color-background-warning: var(--yellow);--color-background-alert: var(--pink);--color-border: var(--gray-4);--color-text: var(--gray-9);--color-text-link: var(--turq-med);--color-text-subtle: var(--gray-7);--color-code-comment: var(--green-light)}}.go-Footer{background-color:var(--color-background-inverted);color:var(--color-text-inverted);font-size:.875rem;width:100%}[data-local=true] .go-Footer{display:none}.go-Footer-links{display:flex;flex-wrap:wrap;justify-content:space-between;margin:auto;max-width:75.75rem;padding:2rem 1.5rem 2.625rem}.go-Footer-linkColumn{flex:0 0 9.5rem}.go-Footer .go-Footer-link{color:var(--color-text-inverted);display:flex;flex:1;font-size:.875rem;line-height:2rem}.go-Footer .go-Footer-link--primary{font-size:1.125rem;line-height:1.75rem;margin-bottom:.5rem;margin-top:.75rem}.go-Footer-listItem p{color:var(--color-text-inverted);font-size:.875rem}.go-Footer-bottom{align-items:center;border-top:var(--border);display:flex;margin:0 1.5rem;min-height:4.125rem}.go-Footer-gopher{align-self:flex-end;height:3.147rem;width:5rem}.go-Footer-listRow{display:flex;flex:1;flex-wrap:wrap;list-style:none;margin:0;padding:0;text-align:center}.go-Footer-listItem{align-items:center;display:flex;flex:1 100%;justify-content:center;margin:.4rem 0;padding:0 1rem}.go-Footer-listItem a:link,.go-Footer-listItem a:visited{color:var(--color-text-inverted)}.go-Footer-listItem .go-Button--text{background-color:transparent;font-size:1rem;margin:-.5rem 0}.go-Footer-listItem [data-value]{display:none}[data-theme=auto] .go-Footer-listItem [data-value=auto],:root:not([data-theme]) .go-Footer-listItem [data-value=auto]{display:initial}[data-theme=dark] .go-Footer-listItem [data-value=dark],[data-theme=light] .go-Footer-listItem [data-value=light]{display:initial}.go-Footer-toggleTheme,.go-Footer-keyboard{margin:0 0 .5rem}.go-Footer-googleLogo{align-self:flex-end;height:1.5rem;margin-bottom:1.3rem;text-align:right}.go-Footer-googleLogoImg{height:1.5rem;width:4.529rem}@media only screen and (min-width: 52rem){.go-Footer-listItem{flex:initial}.go-Footer-listItem+.go-Footer-listItem{border-left:var(--border)}.go-Footer-toggleTheme{margin:0 0 0 -.5rem}.go-Footer-keyboard{margin:0}}select:focus:not([disabled]),input:focus:not([disabled]){border-color:var(--color-brand-primary);box-shadow:var(--focus-box-shadow);outline:transparent;z-index:2}input::placeholder{color:var(--color-text-subtle)}.go-Form{align-items:start;display:flex;flex-direction:column;gap:1rem}.go-Label{display:flex;flex-direction:column;gap:.5rem}.go-Label--inline{align-items:center;flex-direction:row}.go-Label legend{margin-bottom:.5rem}.go-Label--inline legend{float:left;margin-bottom:0}.go-Input,.go-Select{background:var(--color-input);border:var(--border);border-radius:var(--border-radius);color:var(--color-input-text)}.go-Input{padding:.4063rem .5rem}.go-Select{appearance:none;background:url(/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg) right no-repeat;background-color:var(--color-background);background-position:right center;border-radius:var(--border-radius);margin:0;padding:.3438rem 1.25rem .3438rem .5rem}.go-InputGroup{display:flex}.go-InputGroup .go-Input{flex:1}.go-InputGroup>:not(:first-child,:last-child){border-radius:0;margin-left:-.0625rem}.go-InputGroup>:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.go-InputGroup>:last-child{border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-.0625rem}.go-InputGroup>*:hover,.go-InputGroup>*:focus{z-index:1}.go-ShortcutKey{display:flex;position:relative}.go-ShortcutKey .go-Input{flex-grow:1}.go-ShortcutKey:after{align-self:center;background-color:var(--color-background-accented);border-radius:.5rem;color:var(--gray-6);content:attr(data-shortcut);content:attr(data-shortcut) / attr(data-shortcut-alt);display:none;font-size:.75rem;padding:.0625rem 0;position:absolute;right:.75rem;text-align:center;width:1.5rem;z-index:1}@media only screen and (min-width: 52rem){.go-ShortcutKey:after{display:initial}}.go-GopherMessage img{display:block;height:15rem;margin:0 auto;padding:1.25rem 0;width:15rem}.go-GopherMessage p{font-weight:600;margin:auto;text-align:center}.go-Banner{background-color:var(--gray-1);display:none}.go-Banner-inner{align-items:center;display:flex;justify-content:space-between;margin:0 auto;min-height:2.5rem;padding:.5rem var(--gutter)}.Site--wide .go-Banner-inner{max-width:98rem}.go-Banner--full .go-Banner-inner{max-width:unset}.go-Banner-message{color:var(--white);margin-right:1.25rem}.go-Banner-action:link,.go-Banner-action:visited{color:var(--white);text-decoration:underline;white-space:nowrap}@media only screen and (min-width: 52rem){.go-Banner{display:block}}.go-Header{background:#007d9c;border-bottom:none;box-shadow:0 .0625rem .125rem #ababab4d;top:0;width:100%;z-index:20}.go-Header-inner{margin:0 auto;padding:0 var(--gutter)}.Site--wide .go-Header-inner{max-width:98rem}.go-Header--full .go-Header-inner{max-width:initial}.go-Header-nav{align-items:center;display:flex;height:3.5rem;justify-content:space-between}.go-Header-rightContent{align-items:center;display:flex;height:100%;justify-content:flex-end;width:100%}.go-Header-rightContent form{flex-grow:1}.go-Header-inner--dark{border-bottom:none;color:var(--white)}.go-Header-logo{display:block;height:2rem;margin-right:2.25rem;width:5.125rem}.go-Header-logo--hidden{display:none}.go-Header-menuItem{display:none;position:relative}.go-Header-menu{align-items:stretch;display:flex;height:100%;list-style:none;margin:0;padding:0}[data-local=true] .go-Header-menu{display:none}.go-Header-submenu{background:transparent;background-color:var(--color-background);border:.0625rem solid #007d9d;border-width:0 .0625rem .0625rem;color:var(--color-text);display:none;flex-flow:column wrap;list-style-type:none;margin-top:3.5rem;opacity:0;padding:1.5rem 1.5rem 0;position:absolute;transition:all .2s ease;visibility:hidden}.go-Header-menuItem:hover>.js-desktop-menu-hover:not(.forced-closed)~.go-Header-submenu,.go-Header-menuItem:focus-within>.js-desktop-menu-hover:not(.forced-closed)~.go-Header-submenu{display:flex;opacity:1;visibility:visible}.go-Header-menuItem .go-Header-submenuItem a:link,.go-Header-menuItem .go-Header-submenuItem a:visited{align-items:baseline;border-bottom:none;color:var(--color-text-link);display:inline-flex;font-weight:400;margin:0;margin-bottom:-.125rem;padding:0}.go-Header-menuItem .go-Icon{filter:brightness(0%) saturate(100%) invert(100%);font-size:1.25rem}.go-Header-menuItem .go-Header-submenuItem .go-Icon,.go-NavigationDrawer-listItem .go-Icon{filter:brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(162deg) brightness(71%) contrast(177%)}.go-Header-submenu .go-Header-submenuItem i{font-size:.75rem;margin-left:.25rem;transform:translateY(.1rem)}.go-Header-menu .go-Header-submenu--why{left:-.0625rem;width:18.5rem}.go-Header-menu .go-Header-submenu--docs{height:20.78rem;left:-12rem;width:37.25rem}.go-Header-menu .go-Header-submenu--community{height:18.4rem;right:-.0625rem;width:37.25rem}.go-Header-socialIcons{display:flex;flex-wrap:wrap}.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon{display:inline-flex;flex:0 1 auto;width:auto}.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon:not(:last-child){margin-right:.75rem}@media only screen and (min-width: 65rem){.go-Header-menuItem{align-items:stretch;display:inline-flex;flex:none}.go-Header-menu{justify-content:flex-end}.go-Header-navOpen{display:none}}.go-Header-menuItem .js-desktop-menu-hover img{pointer-events:none}.go-Header-menuItem a:link,.go-Header-menuItem a:visited{align-items:center;border-bottom:.1875rem solid transparent;border-top:.1875rem solid transparent;color:var(--color-text);display:inline-flex;padding:0 1.5rem;text-align:center;text-decoration:none;width:100%}.go-Header-menuItem--active a:link,.go-Header-menuItem--active a:visited{border-bottom-color:var(--turq-med);font-weight:700}.go-Header-menuItem a:hover{border-bottom-color:var(--white)}.go-Header-menuItem:hover>a:not(.forced-closed).js-desktop-menu-hover,.go-Header-menuItem:focus-within>a:not(.forced-closed).js-desktop-menu-hover{background:var(--white);border-color:var(--white);color:var(--color-text-link)}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .go-Header-menuItem:hover>a:not(.forced-closed).js-desktop-menu-hover .go-Icon,:root:not([data-theme="light"]) .go-Header-menuItem:focus-within>a:not(.forced-closed).js-desktop-menu-hover .go-Icon{filter:brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(158deg) brightness(83%) contrast(157%)}:root:not([data-theme="light"]) .go-Header-submenuItem .go-Icon:not(.go-Icon--accented){filter:brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(163deg) brightness(80%) contrast(157%)}}.go-NavigationDrawer-listItem>div:not(.go-NavigationDrawer),.go-NavigationDrawer-listItem a:link,.go-NavigationDrawer-listItem a:visited{display:block;margin:0 1rem;padding:.5rem}.go-NavigationDrawer-listItem>span{color:var(--gray-2)}.go-Header-inner--dark .go-Header-menuItem a:link,.go-Header-inner--dark .go-Header-menuItem a:visited{color:var(--white)}.go-NavigationDrawer-listItem.go-NavigationDrawer-hasSubnav>a i{float:right}.go-Header-inner--dark .go-Header-menuItem .go-Header-submenuItem{color:var(--color-text-link)}.go-Header-inner--dark .go-Header-menuItem .js-desktop-menu-hover.is-expanded{background-color:var(--white);color:var(--color-text-link)}.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:link,.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:visited{align-items:baseline;color:var(--color-text-link);display:inline-flex;margin-bottom:-.125rem;width:auto}.go-Header-submenu .go-Header-submenuItem a:link,.go-Header-submenu .go-Header-submenuItem a:visited{border-bottom:none;font-weight:400;margin:0;padding:0}.go-Header-submenu .go-Header-submenuItem a:focus{text-decoration:underline!important}.go-Header-inner--dark .go-Header-menuItem:hover>a:not(.forced-closed).js-desktop-menu-hover,.go-Header-inner--dark .go-Header-menuItem:focus-within>a:not(.forced-closed).js-desktop-menu-hover{background:var(--color-background);border-color:var(--color-background)}.go-Header-submenu p{max-width:15.5rem}.go-Header-submenu a:link:hover,.go-Header-submenu a:visited:hover{border-bottom:.125rem solid var(--turq-dark);text-decoration:none}.go-Header-submenu a:link:hover>*,.go-Header-submenu a:visited:hover>*{text-decoration:none}.go-Header-submenu .go-Header-submenuItem{line-height:1;padding-bottom:1.5rem}.go-Header-submenu .go-Header-submenuItem p{color:var(--color-text-subtle);font-size:.875rem;margin-top:.55rem}.go-Header-inner--dark .go-Header-submenu .go-Header-submenuItem p{color:var(--color-text-subtle)}.go-Header-navOpen{background:no-repeat center/2rem url(/images/menu-24px.svg);border:none;height:2.5rem;margin-left:1rem;width:2.5rem}.go-Header-navOpen--hidden{display:none}.go-Header-navOpen--white{background:no-repeat center/2rem url(/static/shared/icon/menu_gm_grey_24dp.svg);filter:brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%)}.go-SearchForm--expanded{flex-grow:1}.go-SearchForm-form{display:none}.go-SearchForm-form:after{right:2.75rem}.go-SearchForm--expanded .go-SearchForm-form{display:flex}.go-SearchForm-expandSearch{appearance:none;background:none;font-size:1.5rem}.go-SearchForm--expanded .go-SearchForm-expandSearch{display:none}@media only screen and (min-width: 32rem){.go-Header-rightContent{width:100%}.go-SearchForm{flex:1}.go-SearchForm-form{display:flex}.go-SearchForm-expandSearch{display:none}.go-Header-logo--hidden{display:initial}}.go-NavigationDrawer{background:var(--color-background);height:100%;left:auto;max-width:27rem;position:fixed;right:0;top:0;transform:translate(100%);transition:transform .1s ease-in-out;width:85%;z-index:30}@media only screen and (min-width: 65rem){.go-NavigationDrawer{display:none}}.go-NavigationDrawer.is-active{transform:translate(0)}.go-NavigationDrawer-header{border-bottom:.0625rem solid #eee;margin-bottom:.5rem}.go-NavigationDrawer-submenuItem{width:100%}.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header{align-items:center;color:var(--color-text-link);display:flex;font-size:1.375rem;justify-content:flex-start;min-height:4.0625rem;padding:.5rem .5rem .5rem 1.5rem}.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header>a{display:flex;margin-left:0}.go-NavigationDrawer-logo{display:block;height:2rem;margin:1rem;width:5.125rem}.go-NavigationDrawer-list{list-style:none;margin:0;padding:0}.go-NavigationDrawer-listItem{color:var(--color-text-subtle);font-size:1.125rem;margin:0 .5rem}.go-NavigationDrawer-listItem--active{background-color:var(--blue);border-radius:.4rem}.go-NavigationDrawer-listItem .material-icons{color:var(--color-brand-primary);display:inline-block;margin-right:.5rem;text-decoration:none;vertical-align:sub}@media only screen and (max-width: 57.7rem){.go-NavigationDrawer-listItem .go-Header-socialIcons{padding:.5rem 0}.go-NavigationDrawer-listItem a.go-Header-socialIcon{display:inline-block;margin:0;padding:0 .5rem}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .go-NavigationDrawer-listItem .go-Icon:not(.go-Icon--accented){filter:brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(163deg) brightness(80%) contrast(157%)}}}.go-NavigationDrawer-scrim{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:20}.go-NavigationDrawer.is-active+.go-NavigationDrawer-scrim{background-color:var(--gray-1);display:block;opacity:.32}.skip-to-content-link{background:var(--color-background);border-radius:.375rem;clip:rect(0 0 0 0);color:var(--color-text);font-weight:500;left:8%;margin:.313rem;overflow:hidden;position:absolute;top:.75rem}.skip-to-content-link:focus{clip:unset;z-index:1}.depsdev-Icon{height:1.125em;vertical-align:text-bottom;width:auto}.go-Icon{filter:none;height:1.125em;vertical-align:text-bottom;width:auto}.go-Icon--accented{filter:brightness(0) invert(45%) sepia(94%) saturate(6735%) hue-rotate(176deg) brightness(94%) contrast(101%)}.go-Icon--inverted{filter:brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%);@media (forced-colors: active) and (prefers-color-scheme: light){filter:brightness(500%) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%)}}[data-theme=dark] .go-Icon:not(.go-Icon--accented){filter:brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%)}[data-theme=dark] .go-Icon--accented{filter:brightness(0) invert(69%) sepia(46%) saturate(466%) hue-rotate(153deg) brightness(90%) contrast(88%)}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .go-Icon:not(.go-Icon--accented){filter:brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg) brightness(103%) contrast(107%)}:root:not([data-theme="light"]) .go-Icon--accented{filter:brightness(0) invert(57%) sepia(63%) saturate(4864%) hue-rotate(160deg) brightness(100%) contrast(101%)}}.go-Message{color:var(--color-text);font-size:.875rem;line-height:1.5rem;padding:.25rem .5rem;width:100%}.go-Message--notice{background-color:var(--color-background-info)}.go-Message--warning{background-color:var(--color-background-warning);color:var(--gray-1)}.go-Message--alert{background-color:var(--color-background-alert)}.go-Message>.go-Icon{vertical-align:text-top}[data-theme=dark] .go-Message a:not(:hover){color:var(--color-text);text-decoration:underline}[data-theme=dark] .go-Message--warning .go-Icon{filter:none}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .go-Message--warning .go-Icon{filter:none}}dialog{position:absolute;left:0;right:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;margin:auto;border:solid;padding:1em;background:white;color:#000;display:block}dialog:not([open]){display:none}dialog+.backdrop{position:fixed;inset:0;background:rgba(0,0,0,.1)}._dialog_overlay{position:fixed;inset:0}dialog.fixed{position:fixed;top:50%;transform:translateY(-50%)}.go-Modal{background:var(--color-background);border:var(--border);border-radius:var(--border-radius);bottom:0;box-shadow:var(--box-shadow);color:var(--color-text);display:flex;flex-direction:column;gap:1rem;max-height:100%;max-width:100%;position:fixed;top:0}.go-Modal>form{display:contents}.go-Modal--small{width:20rem}.go-Modal--md{width:30rem}.go-Modal--lg{width:40rem}.go-Modal-header{display:flex;justify-content:space-between}.go-Modal-header h2{font-size:1.15rem;line-height:1.25rem}.go-Modal-body{flex-grow:1;min-height:2rem;min-width:18rem}.go-Modal-actions{text-align:right}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){.go-Modal{padding-bottom:0}}}.go-Tree{--js-tree-height: 0;display:flex;flex-direction:column}.go-Tree ul{list-style:none;padding-left:0}.go-Tree li:last-of-type{padding-bottom:.25rem}.go-Tree a+ul{display:none}.go-Tree a[aria-expanded=true]+ul[role=group]{display:block}.go-Tree a[aria-level="1"]+ul[role=group]{max-height:calc(100vh - var(--js-tree-height, 0) - var(--js-sticky-header-height, 3.5rem) - 5rem);overflow-y:auto;padding:.5rem .25rem 0}.go-Tree a{color:var(--color-text-subtle);display:block;line-height:1.5rem;overflow:hidden;padding:.125rem 0 .125rem 1.25rem;position:relative;text-overflow:ellipsis;user-select:none;white-space:nowrap}.go-Tree>li>a,.go-Tree a[aria-level="1"]{display:block;font-size:1rem;font-weight:500;line-height:2.5rem;padding:0 1rem}.go-Tree a:focus,.go-Tree a:hover{text-decoration:underline;z-index:1}.go-Tree a[aria-selected=true]{color:var(--color-text);font-weight:500}.go-Tree a[aria-level="1"][aria-selected=true],.go-Tree a[aria-level="1"][aria-expanded=true]{background-color:var(--color-background-accented)}.go-Tree a[aria-level="3"][aria-expanded=true]{margin-bottom:.375em}.go-Tree a[aria-level="2"]{margin-bottom:.25rem;position:relative}.go-Tree a[aria-level="3"]{padding-left:2.5rem}.go-Tree a[aria-level="4"]{border-left:.125rem solid var(--color-background-accented);margin-left:2.5rem;padding-left:.5rem}.go-Tree a[aria-selected=true][aria-level="2"]:not([aria-expanded]):before,.go-Tree a[aria-selected=true][aria-level="3"]:not([aria-expanded]):before{background-color:var(--color-brand-primary);border-radius:50%;content:"";display:block;height:.3125rem;left:.4688rem;position:absolute;top:.75rem;width:.3125rem}.go-Tree a[aria-expanded][aria-owns][aria-level="2"]:before,.go-Tree a[aria-expanded][aria-owns][aria-level="3"]:before{border-bottom:.25rem solid transparent;border-left:.25rem solid var(--color-border);border-right:0;border-top:.25rem solid transparent;content:"";display:block;height:0;left:.5rem;position:absolute;top:.625rem;transition:transform .1s linear;width:0}.go-Tree a[aria-expanded=true][aria-level="2"]:before,.go-Tree a[aria-expanded=true][aria-level="3"]:before{transform:rotate(90deg)}.go-Tree a[aria-expanded][aria-level="3"]:not([empty]):before,.go-Tree a[aria-selected][aria-level="3"]:not([empty]):before{left:1.5rem;top:.75rem}.go-Tree a[aria-selected=true][aria-level="4"]{border-left:.125rem solid var(--color-brand-primary)}.go-TabNav{margin:0 0 .5rem}.go-TabNav ul{display:flex;gap:2rem}.go-TabNav li{border-bottom:.25rem transparent solid;display:flex;font-size:1rem;height:2.375rem;padding:0 .25rem}.go-TabNav li[aria-current],.go-TabNav li:hover{border-color:var(--color-brand-primary)}.go-TabNav a{align-items:center;color:var(--color-text-subtle);display:inline-flex}.go-TabNav li:hover a{text-decoration:none}.go-TabNav li[aria-current] a{color:var(--color-text)}.go-Tooltip{border-radius:var(--border-radius);cursor:pointer;display:inline-block;position:relative}.go-Tooltip>summary{list-style:none}.go-Tooltip>summary::-webkit-details-marker,.go-Tooltip>summary::marker{display:none}.go-Tooltip>summary>img{vertical-align:text-bottom}.go-Tooltip p{background:var(--color-background) 80%;border:var(--border);border-radius:var(--border-radius);color:var(--color-text);font-size:.75rem;letter-spacing:.0187rem;line-height:1rem;padding:.5rem;position:absolute;top:1.5rem;white-space:normal;width:12rem;z-index:100}:root{--gutter: 1.5rem;--gap: 1rem;--scroll-margin: calc( var(--js-sticky-header-height, 3.5rem) + var(--js-sticky-nav-height, 0) + 2rem );--border: .0625rem solid var(--color-border);--border-radius: .25rem;--box-shadow: 0 0 .375rem 0 rgb(0 0 0 / 25%);--focus-box-shadow: 0 0 .0625rem .0625rem rgb(0 112 210 / 60%)}[data-theme=dark]{--box-shadow: 0 .3125rem .9375rem rgb(0 0 0 / 45%)}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--box-shadow: 0 .3125rem .9375rem rgb(0 0 0 / 45%)}}@media (min-width: 50rem){:root{--gap: 2rem;--scroll-margin: calc( var(--js-sticky-header-height, 3.5rem) + var(--js-sticky-nav-height, 0) + 1rem )}}*:target{scroll-margin-top:var(--scroll-margin)}body{background-color:var(--color-background);display:flex;flex-direction:column;min-height:100vh;min-width:23.5rem;-webkit-overflow-scrolling:touch}.go-Container{display:flex;flex-direction:column;flex-grow:1;height:100%;margin-bottom:5rem}.go-Content{display:flex;flex-flow:column;gap:1rem;margin:0 auto;max-width:63rem;min-height:32rem;padding:2rem var(--gutter);width:100%}.go-Content--center{justify-content:center;margin:auto}.JumpDialog-body{height:12rem;overflow-y:auto}.JumpDialog-list{display:flex;flex-direction:column}.JumpDialog-input{width:100%}.JumpDialog a{padding:.25rem;text-decoration:none}.JumpDialog .JumpDialog-active{background-color:var(--color-brand-primary);color:var(--white)}.ShortcutsDialog-key{text-align:right}.ShortcutsDialog table{padding:0 1rem}.ShortcutsDialog td{padding-bottom:.5rem;padding-left:.5rem}.ShortcutsDialog-theme span{display:none}[data-theme=light] .ShortcutsDialog-themeLight,[data-theme=dark] .ShortcutsDialog-themeDark,[data-theme=""] .ShortcutsDialog-themeAuto,[data-theme=auto] .ShortcutsDialog-themeAuto{display:initial}.Cookie-notice{align-items:center;background-color:var(--color-background);border-top:var(--border);bottom:0;color:var(--color-text);display:none;gap:1rem;justify-content:center;left:0;padding:1rem;position:fixed;right:0;z-index:100}.Cookie-notice--visible{display:flex}
 /*!
  * http://meyerweb.com/eric/tools/css/reset/
  * v2.0 | 20110126
diff --git a/static/frontend/frontend.min.css.map b/static/frontend/frontend.min.css.map
index 9001aef..91155eb 100644
--- a/static/frontend/frontend.min.css.map
+++ b/static/frontend/frontend.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["../shared/reset.css", "../shared/typography/typography.css", "../shared/button/button.css", "../shared/breadcrumb/breadcrumb.css", "../shared/carousel/carousel.css", "../shared/chip/chip.css", "../shared/clipboard/clipboard.css", "../shared/color/color.css", "../shared/footer/footer.css", "../shared/form/form.css", "../shared/gopher/gopher.css", "../shared/header/header.css", "../shared/icon/icon.css", "../shared/message/message.css", "../../third_party/dialog-polyfill/dialog-polyfill.css", "../shared/modal/modal.css", "../shared/outline/tree.css", "../shared/tabnav/tabnav.css", "../shared/tooltip/tooltip.css", "../shared/shared.css", "_modals.css", "frontend.css"],
   "sourcesContent": ["/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/*!\n * http://meyerweb.com/eric/tools/css/reset/\n * v2.0 | 20110126\n * License: none (public domain)\n */\n\nhtml,\nbody,\nbutton,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\ninput,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\ndialog,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo {\n  border: 0;\n  font: inherit;\n  font-size: 100%;\n  margin: 0;\n  padding: 0;\n  vertical-align: baseline;\n}\n\n/* HTML5 display-role reset for older browsers */\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\nsection {\n  display: block;\n}\n\nbody {\n  line-height: 1;\n}\n\nol,\nul {\n  list-style: none;\n}\n\nblockquote,\nq {\n  quotes: none;\n}\n\nblockquote::before,\nblockquote::after,\nq::before,\nq::after {\n  content: '';\n  content: none;\n}\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nbody {\n  color: var(--color-text);\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif,\n    'Apple Color Emoji', 'Segoe UI Emoji';\n  font-size: 1rem;\n  line-height: normal;\n}\n\nh1 {\n  font-size: 1.5rem;\n}\n\nh2 {\n  font-size: 1.375rem;\n}\n\nh3 {\n  font-size: 1.25rem;\n}\n\nh4 {\n  font-size: 1.125rem;\n}\n\nh5 {\n  font-size: 1rem;\n}\n\nh6 {\n  font-size: 0.875rem;\n}\n\nh1,\nh2,\nh3,\nh4 {\n  font-weight: 600;\n  line-height: 1.25em;\n  word-break: break-word;\n}\n\nh5,\nh6 {\n  font-weight: 500;\n  line-height: 1.3em;\n  word-break: break-word;\n}\n\nhr {\n  border: none;\n  border-bottom: var(--border);\n  margin: 0;\n  width: 100%;\n}\n\np {\n  font-size: 1rem;\n  line-height: 1.5rem;\n  max-width: 60rem;\n}\n\nstrong {\n  font-weight: 600;\n}\n\n.go-textSubtle {\n  color: var(--color-text-subtle);\n}\n\n.go-textTitle {\n  font-size: 1.125rem;\n  font-weight: 600;\n  line-height: 1.25rem;\n}\n\n.go-textLabel {\n  font-size: 0.875rem;\n  font-weight: 600;\n  line-height: 1rem;\n}\n\n.go-textPagination {\n  font-size: 0.875rem;\n  line-height: 1rem;\n}\n\ncode,\npre,\ntextarea.code {\n  font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\n  font-size: 0.875rem;\n  line-height: 1.5em;\n}\n\npre,\ntextarea.code {\n  background-color: var(--color-background-accented);\n  border: var(--border);\n  border-radius: var(--border-radius);\n  color: var(--color-text);\n  overflow-x: auto;\n  padding: 0.625rem;\n  tab-size: 4;\n  white-space: pre;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n  font: inherit;\n}\n\na,\na:link,\na:visited {\n  color: var(--color-brand-primary);\n  text-decoration: none;\n}\n\na:hover,\na:focus {\n  color: var(--color-brand-primary);\n  text-decoration: underline;\n}\n\na:hover > * {\n  text-decoration: underline;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nbutton:focus:not([disabled]) {\n  border-color: var(--color-brand-primary);\n  box-shadow: var(--focus-box-shadow);\n  outline: transparent;\n}\n\n.go-Button {\n  align-items: center;\n  background-color: var(--color-button);\n  border: 0.0625rem solid transparent;\n  border-radius: var(--border-radius);\n  color: var(--color-button-text);\n  cursor: pointer;\n  display: inline-flex;\n  font-weight: 500;\n  gap: 0.25rem;\n}\n\n.go-Button:not(.go-Button--inline) {\n  padding: 0.5rem;\n}\n\n.go-Button--accented {\n  background-color: var(--color-button-accented);\n  color: var(--color-button-accented-text);\n}\n\n.go-Button--inverted,\n.go-Button--text,\n.go-Button--inline {\n  background-color: var(--color-button-inverted);\n  color: var(--color-button-inverted-text);\n}\n\n.go-Button--inline {\n  background-color: transparent;\n}\n\n.go-Button--inverted {\n  border: var(--border);\n}\n\n.go-Button:hover {\n  box-shadow: var(--focus-box-shadow);\n  filter: contrast(0.95);\n}\n\n.go-Button--inline:hover {\n  box-shadow: none;\n  text-decoration: underline var(--color-button-inverted-text);\n}\n\n.go-Button:focus {\n  filter: contrast(0.95);\n}\n\n.go-Button--inverted:focus {\n  border-color: var(--color-button-inverted-text);\n}\n\n.go-Button:active {\n  box-shadow: none;\n  filter: contrast(0.85);\n}\n\n.go-Button:disabled {\n  background-color: var(--color-button-disabled);\n  box-shadow: none;\n  color: var(--color-button-text-disabled);\n  cursor: initial;\n  filter: none;\n  text-decoration: none;\n}\n\n.go-Button--accented:disabled {\n  background-color: var(--color-button-accented-disabled);\n  color: var(--color-button-accented-text-disabled);\n}\n\n.go-Button--inverted:disabled,\n.go-Button--text:disabled,\n.go-Button--inline:disabled {\n  background-color: var(--color-button-inverted-disabled);\n  color: var(--color-button-inverted-text-disabled);\n}\n\n.go-Button--inline:disabled {\n  background-color: transparent;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Breadcrumb ol {\n  line-height: 1.5rem;\n  white-space: initial;\n}\n\n.go-Breadcrumb li {\n  align-items: center;\n  color: var(--color-text-subtle);\n  display: inline-flex;\n  font-size: 0.875rem;\n}\n\n.go-Breadcrumb li:not(:last-child)::after {\n  content: '>';\n  padding: 0 0.5rem;\n}\n\n.go-Breadcrumb li:last-child > a {\n  color: var(--color-text-subtle);\n}\n\n.go-Breadcrumb li > .go-Clipboard {\n  margin: 0 0.5rem;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Carousel {\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  text-align: center;\n}\n\n.go-Carousel-slide {\n  margin: 0.5rem 3rem;\n}\n\n.go-Carousel-slide[aria-hidden] {\n  display: none;\n}\n\n.go-Carousel-prevSlide {\n  left: 0;\n}\n\n.go-Carousel-nextSlide {\n  right: 0;\n}\n\n.go-Carousel-prevSlide,\n.go-Carousel-nextSlide {\n  background-color: transparent;\n  border-radius: var(--border-radius);\n  font-size: 1.5rem;\n  height: 2.75rem;\n  margin-top: -0.7rem;\n  opacity: 0;\n  position: absolute;\n  top: 50%;\n  width: 2.75rem;\n}\n\n.go-Carousel-prevSlide:hover,\n.go-Carousel-nextSlide:hover {\n  background-color: var(--color-background-accented);\n  cursor: pointer;\n}\n\n.go-Carousel:hover .go-Carousel-prevSlide,\n.go-Carousel:hover .go-Carousel-nextSlide,\n.go-Carousel:focus-within .go-Carousel-prevSlide,\n.go-Carousel:focus-within .go-Carousel-nextSlide {\n  opacity: 1;\n}\n\n.go-Carousel-dots {\n  display: flex;\n  font-size: 0.4375rem;\n  gap: 0.5rem;\n}\n\n.go-Carousel-dot {\n  background-color: var(--color-border);\n  border-radius: 2rem;\n  height: 0.4375rem;\n  margin-top: 1rem;\n  width: 0.4375rem;\n}\n\n.go-Carousel-dot--active,\n.go-Carousel-dot:hover {\n  background-color: var(--color-text-subtle);\n  outline: 0.125rem solid var(--color-text);\n}\n\n.go-Carousel-dot:focus {\n  outline: 0.063rem solid var(--color-text) !important;\n}\n\n.go-Carousel-dot--active:focus {\n  outline: 0.188rem solid var(--color-text) !important;\n}\n\n.go-Carousel-obscured {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 0.0625rem;\n  margin: -0.0625rem;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 0.0625rem;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Chip {\n  background: var(--color-button);\n  border: 0.0625rem solid var(--color-button);\n  border-radius: 1.25rem;\n  color: var(--color-button-text);\n  font-size: 0.75rem;\n  padding: 0.125rem 0.625rem;\n}\n\n.go-Chip--accented {\n  background: var(--color-button-accented);\n  border: 0.0625rem solid var(--color-button-accented);\n  color: var(--color-button-accented-text);\n}\n\n.go-Chip--inverted {\n  background: var(--color-button-inverted);\n  border: var(--border);\n  color: var(--color-text);\n}\n\n.go-Chip--highlighted {\n  background: var(--color-background-highlighted-link);\n  border-color: var(--color-background-highlighted-link);\n  color: var(--color-brand-primary);\n}\n\n.go-Chip--alert {\n  background: var(--pink);\n  border: 0.0625rem solid var(--pink);\n  color: var(--color-text-inverted);\n}\n\n.go-Chip--vuln {\n  background: var(--pink-light);\n  border: 0.0625rem solid var(--pink-light);\n  color: var(--color-text-inverted);\n}\n\n.go-Chip--subtle {\n  background-color: var(--color-background-accented);\n  border-color: transparent;\n  color: var(--color-text-subtle);\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Clipboard {\n  position: relative;\n}\n\n.go-Clipboard::before {\n  background-color: var(--color-background-inverted);\n  border-radius: var(--border-radius);\n  color: var(--color-text-inverted);\n  content: attr(data-tooltip);\n  display: block;\n  font-size: 0.9em;\n  left: calc(100% + 0.125rem);\n  padding: 0.25rem 0.3rem;\n  position: absolute;\n  text-transform: uppercase;\n  top: 0.125rem;\n  white-space: nowrap;\n  z-index: 1000;\n}\n\n.go-Clipboard::after {\n  border-bottom: 0.25rem solid transparent;\n  border-left: 0;\n  border-right: 0.25rem solid var(--color-background-inverted);\n  border-top: 0.25rem solid transparent;\n  content: '';\n  display: block;\n  position: absolute;\n  right: -0.125rem;\n  top: 0.5625rem;\n  z-index: 1000;\n}\n\n.go-Clipboard:not([data-tooltip])::before,\n.go-Clipboard:not([data-tooltip])::after,\n.go-Clipboard[data-tooltip='']::before,\n.go-Clipboard[data-tooltip='']::after {\n  display: none;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n:root {\n  /* Colors */\n  --gray-1: #202224;\n  --gray-2: #3e4042;\n  --gray-3: #555759;\n  --gray-4: #6e7072;\n  --gray-5: #848688;\n  --gray-6: #aaacae;\n  --gray-7: #c6c8ca;\n  --gray-8: #dcdee0;\n  --gray-9: #f0f1f2;\n  --gray-10: #f8f8f8;\n  --turq-light: #5dc9e2;\n  --turq-med: #50b7e0;\n  --turq-dark: #007d9c;\n  --turq-bright: #00769c;\n  --blue: #bfeaf4;\n  --blue-light: #f2fafd;\n  --black: #000;\n  --green: #3a6e11;\n  --green-light: #5fda64;\n  --pink: #c85e7a;\n  --pink-light: #fdecf1;\n  --purple: #542c7d;\n  --slate: #253443; /* Footer background. */\n  --white: #fff;\n  --yellow: #fceea5;\n  --yellow-light: #fff8cc;\n\n  /* Color Intents */\n  --color-brand-primary: var(--turq-dark);\n  --color-background: var(--white);\n  --color-background-inverted: var(--slate);\n  --color-background-accented: var(--gray-10);\n  --color-background-highlighted: var(--blue);\n  --color-background-highlighted-link: var(--blue-light);\n  --color-background-info: var(--gray-9);\n  --color-background-warning: var(--yellow-light);\n  --color-background-alert: var(--pink-light);\n  --color-border: var(--gray-7);\n  --color-text: var(--gray-1);\n  --color-text-subtle: var(--gray-4);\n  --color-text-link: var(--turq-dark);\n  --color-text-inverted: var(--white);\n  --color-code-comment: var(--green);\n  --color-bright-text-link: var(--turq-bright);\n\n  /* Interactive Colors */\n  --color-input: var(--color-background);\n  --color-input-text: var(--color-text);\n  --color-button: var(--turq-dark);\n  --color-button-disabled: var(--gray-9);\n  --color-button-text: var(--white);\n  --color-button-text-disabled: var(--gray-3);\n  --color-button-inverted: var(--color-background);\n  --color-button-inverted-disabled: var(--color-background);\n  --color-button-inverted-text: var(--color-brand-primary);\n  --color-button-inverted-text-disabled: var(--color-text-subtle);\n  --color-button-accented: var(--yellow);\n  --color-button-accented-disabled: var(--gray-9);\n  --color-button-accented-text: var(--gray-1);\n  --color-button-accented-text-disabled: var(--gray-3);\n}\n\n[data-theme='dark'] {\n  --color-brand-primary: var(--turq-med);\n  --color-background: var(--gray-1);\n  --color-background-accented: var(--gray-2);\n  --color-background-highlighted: var(--gray-2);\n  --color-background-highlighted-link: var(--gray-2);\n  --color-background-info: var(--gray-3);\n  --color-background-warning: var(--yellow);\n  --color-background-alert: var(--pink);\n  --color-border: var(--gray-4);\n  --color-text: var(--gray-9);\n  --color-text-link: var(--turq-med);\n  --color-text-subtle: var(--gray-7);\n  --color-code-comment: var(--green-light);\n  --color-bright-text-link: var(--turq-med);\n}\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme='light']) {\n    --color-brand-primary: var(--turq-med);\n    --color-background: var(--gray-1);\n    --color-background-accented: var(--gray-2);\n    --color-background-highlighted: var(--gray-2);\n    --color-background-highlighted-link: var(--gray-2);\n    --color-background-info: var(--gray-3);\n    --color-background-warning: var(--yellow);\n    --color-background-alert: var(--pink);\n    --color-border: var(--gray-4);\n    --color-text: var(--gray-9);\n    --color-text-link: var(--turq-med);\n    --color-text-subtle: var(--gray-7);\n    --color-code-comment: var(--green-light);\n  }\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Footer {\n  background-color: var(--color-background-inverted);\n  color: var(--color-text-inverted);\n  font-size: 0.875rem;\n  width: 100%;\n}\n\n[data-local='true'] .go-Footer {\n  display: none;\n}\n\n.go-Footer-links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  margin: auto;\n  max-width: 75.75rem;\n  padding: 2rem 1.5rem 2.625rem;\n}\n\n.go-Footer-linkColumn {\n  flex: 0 0 9.5rem;\n}\n\n.go-Footer .go-Footer-link {\n  color: var(--color-text-inverted);\n  display: flex;\n  flex: 1;\n  font-size: 0.875rem;\n  line-height: 2rem;\n}\n\n.go-Footer .go-Footer-link--primary {\n  font-size: 1.125rem;\n  line-height: 1.75rem;\n  margin-bottom: 0.5rem;\n  margin-top: 0.75rem;\n}\n\n.go-Footer-listItem p {\n  color: var(--color-text-inverted);\n  font-size: 0.875rem;\n}\n\n.go-Footer-bottom {\n  align-items: center;\n  border-top: var(--border);\n  display: flex;\n  margin: 0 1.5rem;\n  min-height: 4.125rem;\n}\n\n.go-Footer-gopher {\n  align-self: flex-end;\n  height: 3.147rem;\n  width: 5rem;\n}\n\n.go-Footer-listRow {\n  display: flex;\n  flex: 1;\n  flex-wrap: wrap;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  text-align: center;\n}\n\n.go-Footer-listItem {\n  align-items: center;\n  display: flex;\n  flex: 1 100%;\n  justify-content: center;\n  margin: 0.4rem 0;\n  padding: 0 1rem;\n}\n\n.go-Footer-listItem a:link,\n.go-Footer-listItem a:visited {\n  color: var(--color-text-inverted);\n}\n\n.go-Footer-listItem .go-Button--text {\n  background-color: transparent;\n  font-size: 1rem;\n  margin: -0.5rem 0;\n}\n\n.go-Footer-listItem [data-value] {\n  display: none;\n}\n\n[data-theme='auto'] .go-Footer-listItem [data-value='auto'],\n:root:not([data-theme]) .go-Footer-listItem [data-value='auto'] {\n  display: initial;\n}\n\n[data-theme='dark'] .go-Footer-listItem [data-value='dark'] {\n  display: initial;\n}\n\n[data-theme='light'] .go-Footer-listItem [data-value='light'] {\n  display: initial;\n}\n\n.go-Footer-toggleTheme,\n.go-Footer-keyboard {\n  margin: 0 0 0.5rem;\n}\n\n.go-Footer-googleLogo {\n  align-self: flex-end;\n  height: 1.5rem;\n  margin-bottom: 1.3rem;\n  text-align: right;\n}\n\n.go-Footer-googleLogoImg {\n  height: 1.5rem;\n  width: 4.529rem;\n}\n\n@media only screen and (min-width: 52rem) {\n  .go-Footer-listItem {\n    flex: initial;\n  }\n\n  .go-Footer-listItem + .go-Footer-listItem {\n    border-left: var(--border);\n  }\n\n  .go-Footer-toggleTheme {\n    margin: 0 0 0 -0.5rem;\n  }\n\n  .go-Footer-keyboard {\n    margin: 0;\n  }\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nselect:focus:not([disabled]),\ninput:focus:not([disabled]) {\n  border-color: var(--color-brand-primary);\n  box-shadow: var(--focus-box-shadow);\n  outline: transparent;\n  z-index: 2;\n}\n\ninput::placeholder {\n  color: var(--color-text-subtle);\n}\n\n.go-Form {\n  align-items: start;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n\n.go-Label {\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n}\n\n.go-Label--inline {\n  align-items: center;\n  flex-direction: row;\n}\n\n.go-Label legend {\n  margin-bottom: 0.5rem;\n}\n\n.go-Label--inline legend {\n  float: left;\n  margin-bottom: 0;\n}\n\n.go-Input,\n.go-Select {\n  background: var(--color-input);\n  border: var(--border);\n  border-radius: var(--border-radius);\n  color: var(--color-input-text);\n}\n\n.go-Input {\n  padding: 0.4063rem 0.5rem;\n}\n\n.go-Select {\n  appearance: none;\n  background: url('/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg') right no-repeat;\n  background-color: var(--color-background);\n  background-position: right center;\n  border-radius: var(--border-radius);\n  margin: 0;\n  padding: 0.3438rem 1.25rem 0.3438rem 0.5rem;\n}\n\n.go-InputGroup {\n  display: flex;\n}\n\n.go-InputGroup .go-Input {\n  flex: 1;\n}\n\n.go-InputGroup > :not(:first-child, :last-child) {\n  border-radius: 0;\n  margin-left: -0.0625rem;\n}\n\n.go-InputGroup > :first-child {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.go-InputGroup > :last-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n  margin-left: -0.0625rem;\n}\n\n.go-InputGroup > *:hover,\n.go-InputGroup > *:focus {\n  z-index: 1;\n}\n\n.go-ShortcutKey {\n  display: flex;\n  position: relative;\n}\n\n.go-ShortcutKey .go-Input {\n  flex-grow: 1;\n}\n\n.go-ShortcutKey::after {\n  align-self: center;\n  background-color: var(--color-background-accented);\n  border-radius: 0.5rem;\n  color: var(--gray-6);\n  content: attr(data-shortcut);\n  content: attr(data-shortcut) / attr(data-shortcut-alt);\n  display: none;\n  font-size: 0.75rem;\n  padding: 0.0625rem 0;\n  position: absolute;\n  right: 0.75rem;\n  text-align: center;\n  width: 1.5rem;\n  z-index: 1;\n}\n@media only screen and (min-width: 52rem) {\n  .go-ShortcutKey::after {\n    display: initial;\n  }\n}\n", "/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-GopherMessage img {\n  display: block;\n  height: 15rem;\n  margin: 0 auto;\n  padding: 1.25rem 0;\n  width: 15rem;\n}\n\n.go-GopherMessage p {\n  font-weight: 600;\n  margin: auto;\n  text-align: center;\n}\n", "/* stylelint-disable no-descending-specificity */\n\n/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Banner {\n  background-color: var(--gray-1);\n\n  /**\n   * Only show on wide viewports so the\n   * text never wraps or gets cut off.\n   */\n  display: none;\n}\n\n.go-Banner-inner {\n  align-items: center;\n  display: flex;\n  justify-content: space-between;\n  margin: 0 auto;\n  min-height: 2.5rem;\n  padding: 0.5rem var(--gutter);\n}\n\n.Site--wide .go-Banner-inner {\n  max-width: 98rem;\n}\n\n.go-Banner--full .go-Banner-inner {\n  max-width: unset;\n}\n\n.go-Banner-message {\n  color: var(--white);\n  margin-right: 1.25rem;\n}\n\n.go-Banner-action:link,\n.go-Banner-action:visited {\n  color: var(--white);\n  text-decoration: underline;\n  white-space: nowrap;\n}\n@media only screen and (min-width: 52rem) {\n  .go-Banner {\n    display: block;\n  }\n}\n\n.go-Header {\n  background: #007d9c;\n  border-bottom: none;\n  box-shadow: 0 0.0625rem 0.125rem rgb(171 171 171 / 30%);\n  top: 0;\n  width: 100%;\n  z-index: 20;\n}\n\n.go-Header-inner {\n  margin: 0 auto;\n  padding: 0 var(--gutter);\n}\n\n.Site--wide .go-Header-inner {\n  max-width: 98rem;\n}\n\n.go-Header--full .go-Header-inner {\n  max-width: initial;\n}\n\n.go-Header-nav {\n  align-items: center;\n  display: flex;\n  height: 3.5rem;\n  justify-content: space-between;\n}\n\n.go-Header-rightContent {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  justify-content: flex-end;\n  width: 100%;\n}\n\n.go-Header-rightContent form {\n  flex-grow: 1;\n}\n\n.go-Header-inner--dark {\n  border-bottom: none;\n  color: var(--white);\n}\n\n.go-Header-logo {\n  display: block;\n  height: 2rem;\n  margin-right: 2.25rem;\n  width: 5.125rem;\n}\n\n.go-Header-logo--hidden {\n  display: none;\n}\n\n.go-Header-menuItem {\n  display: none;\n  position: relative;\n}\n\n.go-Header-menu {\n  align-items: stretch;\n  display: flex;\n  height: 100%;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n[data-local='true'] .go-Header-menu {\n  display: none;\n}\n\n.go-Header-submenu {\n  background: transparent;\n  background-color: var(--color-background);\n  border: 0.0625rem solid #007d9d;\n  border-width: 0 0.0625rem 0.0625rem;\n  color: var(--color-text);\n  display: none;\n  flex-flow: column wrap;\n  list-style-type: none;\n  margin-top: 3.5rem;\n  opacity: 0;\n  padding: 1.5rem 1.5rem 0;\n  position: absolute;\n  transition: all 0.2s ease;\n  visibility: hidden;\n}\n\n.go-Header-menuItem:hover > .js-desktop-menu-hover:not(.forced-closed) ~ .go-Header-submenu,\n.go-Header-menuItem:focus-within > .js-desktop-menu-hover:not(.forced-closed) ~ .go-Header-submenu {\n  display: flex;\n  opacity: 1;\n  visibility: visible;\n}\n\n.go-Header-menuItem .go-Header-submenuItem a:link,\n.go-Header-menuItem .go-Header-submenuItem a:visited {\n  align-items: baseline;\n  border-bottom: none;\n  color: var(--color-text-link);\n  display: inline-flex;\n  font-weight: 400;\n  margin: 0;\n  margin-bottom: -0.125rem;\n  padding: 0;\n}\n\n.go-Header-menuItem .go-Icon {\n  filter: brightness(0%) saturate(100%) invert(100%);\n  font-size: 1.25rem;\n}\n\n.go-Header-menuItem .go-Header-submenuItem .go-Icon,\n.go-NavigationDrawer-listItem .go-Icon {\n  filter: brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(162deg)\n    brightness(71%) contrast(177%);\n}\n\n.go-Header-submenu .go-Header-submenuItem i {\n  font-size: 0.75rem;\n  margin-left: 0.25rem;\n  transform: translateY(0.1rem); /* to get bottom alignment w/ text  */\n}\n\n.go-Header-menu .go-Header-submenu--why {\n  left: -0.0625rem;\n  width: 18.5rem;\n}\n\n.go-Header-menu .go-Header-submenu--docs {\n  height: 20.78rem;\n  left: -12rem;\n  width: 37.25rem;\n}\n\n.go-Header-menu .go-Header-submenu--community {\n  height: 18.4rem;\n  right: -0.0625rem;\n  width: 37.25rem;\n}\n\n.go-Header-socialIcons {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon {\n  display: inline-flex;\n  flex: 0 1 auto;\n  width: auto;\n}\n\n.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon:not(:last-child) {\n  margin-right: 0.75rem;\n}\n@media only screen and (min-width: 65rem) {\n  .go-Header-menuItem {\n    align-items: stretch;\n    display: inline-flex;\n    flex: none;\n  }\n\n  .go-Header-menu {\n    justify-content: flex-end;\n  }\n\n  .go-Header-navOpen {\n    display: none;\n  }\n}\n\n.go-Header-menuItem .js-desktop-menu-hover img {\n  pointer-events: none;\n}\n\n.go-Header-menuItem a:link,\n.go-Header-menuItem a:visited {\n  align-items: center;\n  border-bottom: 0.1875rem solid transparent;\n  border-top: 0.1875rem solid transparent; /* To ensure the text remains centered. */\n  color: var(--color-text);\n  display: inline-flex;\n  padding: 0 1.5rem;\n  text-align: center;\n  text-decoration: none;\n  width: 100%;\n}\n\n.go-Header-menuItem--active a:link,\n.go-Header-menuItem--active a:visited {\n  border-bottom-color: var(--turq-med);\n  font-weight: bold;\n}\n\n.go-Header-menuItem a:hover {\n  border-bottom-color: var(--white);\n}\n\n.go-Header-menuItem:hover > a:not(.forced-closed).js-desktop-menu-hover,\n.go-Header-menuItem:focus-within > a:not(.forced-closed).js-desktop-menu-hover {\n  background: var(--white);\n  border-color: var(--white);\n  color: var(--color-text-link);\n}\n\n/* Need to get around icon.css color management */\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme='light'])\n    .go-Header-menuItem:hover\n    > a:not(.forced-closed).js-desktop-menu-hover\n    .go-Icon,\n  :root:not([data-theme='light'])\n    .go-Header-menuItem:focus-within\n    > a:not(.forced-closed).js-desktop-menu-hover\n    .go-Icon {\n    filter: brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(158deg)\n      brightness(83%) contrast(157%);\n  }\n\n  :root:not([data-theme='light']) .go-Header-submenuItem .go-Icon:not(.go-Icon--accented) {\n    filter: brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(163deg)\n      brightness(80%) contrast(157%);\n  }\n}\n\n.go-NavigationDrawer-listItem > div:not(.go-NavigationDrawer),\n.go-NavigationDrawer-listItem a:link,\n.go-NavigationDrawer-listItem a:visited {\n  display: block;\n  margin: 0 1rem;\n  padding: 0.5rem;\n}\n\n.go-NavigationDrawer-listItem > span {\n  color: var(--gray-2);\n}\n\n.go-Header-inner--dark .go-Header-menuItem a:link,\n.go-Header-inner--dark .go-Header-menuItem a:visited {\n  color: var(--white);\n}\n\n.go-NavigationDrawer-listItem.go-NavigationDrawer-hasSubnav > a i {\n  float: right;\n}\n\n.go-Header-inner--dark .go-Header-menuItem .go-Header-submenuItem {\n  color: var(--color-text-link);\n}\n\n.go-Header-inner--dark .go-Header-menuItem .js-desktop-menu-hover.is-expanded {\n  background-color: var(--white);\n  color: var(--color-text-link);\n}\n\n.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:link,\n.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:visited {\n  align-items: baseline;\n  color: var(--color-text-link);\n  display: inline-flex;\n  margin-bottom: -0.125rem;\n  width: auto;\n}\n\n.go-Header-submenu .go-Header-submenuItem a:link,\n.go-Header-submenu .go-Header-submenuItem a:visited {\n  border-bottom: none;\n  font-weight: 400;\n  margin: 0;\n  padding: 0;\n}\n\n.go-Header-submenu .go-Header-submenuItem a:focus {\n  text-decoration: underline !important;\n}\n\n.go-Header-inner--dark .go-Header-menuItem:hover > a:not(.forced-closed).js-desktop-menu-hover,\n.go-Header-inner--dark\n  .go-Header-menuItem:focus-within\n  > a:not(.forced-closed).js-desktop-menu-hover {\n  background: var(--color-background);\n  border-color: var(--color-background);\n}\n\n.go-Header-submenu p {\n  max-width: 15.5rem;\n}\n\n.go-Header-submenu a:link:hover,\n.go-Header-submenu a:visited:hover {\n  border-bottom: 0.125rem solid var(--turq-dark);\n  text-decoration: none;\n}\n\n.go-Header-submenu a:link:hover > *,\n.go-Header-submenu a:visited:hover > * {\n  text-decoration: none;\n}\n\n.go-Header-submenu .go-Header-submenuItem {\n  line-height: 1;\n  padding-bottom: 1.5rem;\n}\n\n.go-Header-submenu .go-Header-submenuItem p {\n  color: var(--color-text-subtle);\n  font-size: 0.875rem;\n  margin-top: 0.55rem;\n}\n\n.go-Header-inner--dark .go-Header-submenu .go-Header-submenuItem p {\n  color: var(--color-text-subtle);\n}\n\n.go-Header-navOpen {\n  background: no-repeat center/2rem url('/images/menu-24px.svg');\n  border: none;\n  height: 2.5rem;\n  margin-left: 1rem;\n  width: 2.5rem;\n}\n\n.go-Header-navOpen--hidden {\n  display: none;\n}\n\n.go-Header-navOpen--white {\n  background: no-repeat center/2rem url('/static/shared/icon/menu_gm_grey_24dp.svg');\n  filter: brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg)\n    brightness(103%) contrast(107%);\n}\n\n.go-SearchForm--expanded {\n  flex-grow: 1;\n}\n\n.go-SearchForm-form {\n  display: none;\n}\n\n.go-SearchForm-form::after {\n  right: 2.75rem;\n}\n\n.go-SearchForm--expanded .go-SearchForm-form {\n  display: flex;\n}\n\n.go-SearchForm-expandSearch {\n  appearance: none;\n  background: none;\n  font-size: 1.5rem;\n}\n\n.go-SearchForm--expanded .go-SearchForm-expandSearch {\n  display: none;\n}\n\n@media only screen and (min-width: 32rem) {\n  .go-Header-rightContent {\n    width: 100%;\n  }\n\n  .go-SearchForm {\n    flex: 1;\n  }\n\n  .go-SearchForm-form {\n    display: flex;\n  }\n\n  .go-SearchForm-expandSearch {\n    display: none;\n  }\n\n  .go-Header-logo--hidden {\n    display: initial;\n  }\n}\n\n.go-NavigationDrawer {\n  background: var(--color-background);\n  height: 100%;\n  left: auto;\n  max-width: 27rem;\n  position: fixed;\n  right: 0;\n  top: 0;\n  transform: translateX(100%);\n  transition: transform 100ms ease-in-out;\n  width: 85%;\n  z-index: 30;\n}\n@media only screen and (min-width: 65rem) {\n  .go-NavigationDrawer {\n    display: none;\n  }\n}\n\n.go-NavigationDrawer.is-active {\n  transform: translateX(0);\n}\n\n.go-NavigationDrawer-header {\n  border-bottom: 0.0625rem solid #eee;\n  margin-bottom: 0.5rem;\n}\n\n.go-NavigationDrawer-submenuItem {\n  width: 100%;\n}\n\n.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header {\n  align-items: center;\n  color: var(--color-text-link);\n  display: flex;\n  font-size: 1.375rem;\n  justify-content: flex-start;\n  min-height: 4.0625rem;\n  padding: 0.5rem;\n  padding-left: 1.5rem;\n}\n\n.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header > a {\n  display: flex;\n  margin-left: 0;\n}\n\n.go-NavigationDrawer-logo {\n  display: block;\n  height: 2rem;\n  margin: 1rem;\n  width: 5.125rem;\n}\n\n.go-NavigationDrawer-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n.go-NavigationDrawer-listItem {\n  color: var(--color-text-subtle);\n  font-size: 1.125rem;\n  margin: 0 0.5rem;\n}\n\n.go-NavigationDrawer-listItem--active {\n  background-color: var(--blue);\n  border-radius: 0.4rem;\n}\n\n.go-NavigationDrawer-listItem .material-icons {\n  color: var(--color-brand-primary);\n  display: inline-block;\n  margin-right: 0.5rem;\n  text-decoration: none;\n  vertical-align: sub;\n}\n@media only screen and (max-width: 57.7rem) {\n  .go-NavigationDrawer-listItem .go-Header-socialIcons {\n    padding: 0.5rem 0;\n  }\n\n  .go-NavigationDrawer-listItem a.go-Header-socialIcon {\n    display: inline-block;\n    margin: 0;\n    padding: 0 0.5rem;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    :root:not([data-theme='light']) .go-NavigationDrawer-listItem .go-Icon:not(.go-Icon--accented) {\n      filter: brightness(0) saturate(100%) invert(60%) sepia(97%) saturate(125%) hue-rotate(163deg)\n        brightness(80%) contrast(157%);\n    }\n  }\n}\n\n.go-NavigationDrawer-scrim {\n  display: none;\n  height: 100%;\n  left: 0;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 20;\n}\n\n.go-NavigationDrawer.is-active + .go-NavigationDrawer-scrim {\n  background-color: var(--gray-1);\n  display: block;\n  opacity: 0.32;\n}\n\n.skip-to-content-link {\n  background: var(--color-background);\n  border-radius: 0.375rem;\n  clip: rect(0 0 0 0);\n  color: var(--color-text);\n  font-weight: 500;\n  left: 8%;\n  margin: 0.313rem;\n  overflow: hidden;\n  position: absolute;\n  top: 0.75rem;\n}\n\n.skip-to-content-link:focus {\n  clip: unset;\n  z-index: 1;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.depsdev-Icon {\n  height: 1.125em;\n  vertical-align: text-bottom;\n  width: auto;\n}\n\n.go-Icon {\n  filter: none;\n  height: 1.125em;\n  vertical-align: text-bottom;\n  width: auto;\n}\n\n.go-Icon--accented {\n  filter: brightness(0) invert(45%) sepia(94%) saturate(6735%) hue-rotate(176deg) brightness(94%)\n    contrast(101%);\n}\n\n.go-Icon--inverted {\n  filter: brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg)\n    brightness(103%) contrast(107%);\n  @media (forced-colors: active) and (prefers-color-scheme: light) {\n    filter: brightness(500%) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg)\n      brightness(103%) contrast(107%);\n  }\n}\n\n[data-theme='dark'] .go-Icon:not(.go-Icon--accented) {\n  filter: brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg)\n    brightness(103%) contrast(107%);\n}\n\n[data-theme='dark'] .go-Icon--accented {\n  filter: brightness(0) invert(69%) sepia(46%) saturate(466%) hue-rotate(153deg) brightness(90%)\n    contrast(88%);\n}\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme='light']) .go-Icon:not(.go-Icon--accented) {\n    filter: brightness(0) saturate(100%) invert(100%) sepia(97%) saturate(13%) hue-rotate(245deg)\n      brightness(103%) contrast(107%);\n  }\n\n  :root:not([data-theme='light']) .go-Icon--accented {\n    filter: brightness(0) invert(57%) sepia(63%) saturate(4864%) hue-rotate(160deg) brightness(100%)\n      contrast(101%);\n  }\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Message {\n  color: var(--color-text);\n  font-size: 0.875rem;\n  line-height: 1.5rem;\n  padding: 0.25rem 0.5rem;\n  width: 100%;\n}\n\n.go-Message--notice {\n  background-color: var(--color-background-info);\n}\n\n.go-Message--warning {\n  background-color: var(--color-background-warning);\n  color: var(--gray-1);\n}\n\n.go-Message--alert {\n  background-color: var(--color-background-alert);\n}\n\n.go-Message > .go-Icon {\n  vertical-align: text-top;\n}\n\n[data-theme='dark'] .go-Message a:not(:hover) {\n  color: var(--color-text);\n  text-decoration: underline;\n}\n\n[data-theme='dark'] .go-Message--warning .go-Icon {\n  filter: none;\n}\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme='light']) .go-Message--warning .go-Icon {\n    filter: none;\n  }\n}\n", "dialog {\n  position: absolute;\n  left: 0; right: 0;\n  width: -moz-fit-content;\n  width: -webkit-fit-content;\n  width: fit-content;\n  height: -moz-fit-content;\n  height: -webkit-fit-content;\n  height: fit-content;\n  margin: auto;\n  border: solid;\n  padding: 1em;\n  background: white;\n  color: black;\n  display: block;\n}\n\ndialog:not([open]) {\n  display: none;\n}\n\ndialog + .backdrop {\n  position: fixed;\n  top: 0; right: 0; bottom: 0; left: 0;\n  background: rgba(0,0,0,0.1);\n}\n\n._dialog_overlay {\n  position: fixed;\n  top: 0; right: 0; bottom: 0; left: 0;\n}\n\ndialog.fixed {\n  position: fixed;\n  top: 50%;\n  transform: translate(0, -50%);\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n@import url('../../../third_party/dialog-polyfill/dialog-polyfill.css');\n\n.go-Modal {\n  background: var(--color-background);\n  border: var(--border);\n  border-radius: var(--border-radius);\n  bottom: 0;\n  box-shadow: var(--box-shadow);\n  color: var(--color-text);\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  max-height: 100%;\n  max-width: 100%;\n  position: fixed;\n  top: 0;\n}\n\n.go-Modal > form {\n  display: contents;\n}\n\n.go-Modal--small {\n  width: 20rem;\n}\n\n.go-Modal--md {\n  width: 30rem;\n}\n\n.go-Modal--lg {\n  width: 40rem;\n}\n\n.go-Modal-header {\n  display: flex;\n  justify-content: space-between;\n}\n\n.go-Modal-header h2 {\n  font-size: 1.15rem;\n  line-height: 1.25rem;\n}\n\n.go-Modal-body {\n  flex-grow: 1;\n  min-height: 2rem;\n  min-width: 18rem;\n}\n\n.go-Modal-actions {\n  text-align: right;\n}\n\n/* Safari only */\n@media not all and (min-resolution: 0.001dpcm) {\n  @supports (-webkit-appearance: none) {\n    .go-Modal {\n      padding-bottom: 0;\n    }\n  }\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Tree {\n  --js-tree-height: 0;\n\n  display: flex;\n  flex-direction: column;\n}\n\n.go-Tree ul {\n  list-style: none;\n  padding-left: 0;\n}\n\n.go-Tree li:last-of-type {\n  padding-bottom: 0.25rem;\n}\n\n.go-Tree a + ul {\n  display: none;\n}\n\n.go-Tree a[aria-expanded='true'] + ul[role='group'] {\n  display: block;\n}\n\n.go-Tree a[aria-level='1'] + ul[role='group'] {\n  max-height: calc(\n    100vh - var(--js-tree-height, 0) - var(--js-sticky-header-height, 3.5rem) - 5rem\n  );\n  overflow-y: auto;\n  padding: 0.5rem 0.25rem 0;\n}\n\n.go-Tree a {\n  color: var(--color-text-subtle);\n  display: block;\n  line-height: 1.5rem;\n  overflow: hidden;\n  padding: 0.125rem 0 0.125rem 1.25rem;\n  position: relative;\n  text-overflow: ellipsis;\n  user-select: none;\n  white-space: nowrap;\n}\n\n.go-Tree > li > a,\n.go-Tree a[aria-level='1'] {\n  display: block;\n  font-size: 1rem;\n  font-weight: 500;\n  line-height: 2.5rem;\n  padding: 0 1rem;\n}\n\n.go-Tree a:focus,\n.go-Tree a:hover {\n  text-decoration: underline;\n  z-index: 1;\n}\n\n.go-Tree a[aria-selected='true'] {\n  color: var(--color-text);\n  font-weight: 500;\n}\n\n.go-Tree a[aria-level='1'][aria-selected='true'],\n.go-Tree a[aria-level='1'][aria-expanded='true'] {\n  background-color: var(--color-background-accented);\n}\n\n.go-Tree a[aria-level='3'][aria-expanded='true'] {\n  margin-bottom: 0.375em;\n}\n\n.go-Tree a[aria-level='2'] {\n  margin-bottom: 0.25rem;\n  position: relative;\n}\n\n.go-Tree a[aria-level='3'] {\n  padding-left: 2.5rem;\n}\n\n.go-Tree a[aria-level='4'] {\n  border-left: 0.125rem solid var(--color-background-accented);\n  margin-left: 2.5rem;\n  padding-left: 0.5rem;\n}\n\n.go-Tree a[aria-selected='true'][aria-level='2']:not([aria-expanded])::before,\n.go-Tree a[aria-selected='true'][aria-level='3']:not([aria-expanded])::before {\n  background-color: var(--color-brand-primary);\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 0.3125rem;\n  left: 0.4688rem;\n  position: absolute;\n  top: 0.75rem;\n  width: 0.3125rem;\n}\n\n.go-Tree a[aria-expanded][aria-owns][aria-level='2']::before,\n.go-Tree a[aria-expanded][aria-owns][aria-level='3']::before {\n  border-bottom: 0.25rem solid transparent;\n  border-left: 0.25rem solid var(--color-border);\n  border-right: 0;\n  border-top: 0.25rem solid transparent;\n  content: '';\n  display: block;\n  height: 0;\n  left: 0.5rem;\n  position: absolute;\n  top: 0.625rem;\n  transition: transform 0.1s linear;\n  width: 0;\n}\n\n.go-Tree a[aria-expanded='true'][aria-level='2']::before,\n.go-Tree a[aria-expanded='true'][aria-level='3']::before {\n  transform: rotate(90deg);\n}\n\n.go-Tree a[aria-expanded][aria-level='3']:not([empty])::before,\n.go-Tree a[aria-selected][aria-level='3']:not([empty])::before {\n  left: 1.5rem;\n  top: 0.75rem;\n}\n\n.go-Tree a[aria-selected='true'][aria-level='4'] {\n  border-left: 0.125rem solid var(--color-brand-primary);\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-TabNav {\n  margin: 0 0 0.5rem;\n}\n\n.go-TabNav ul {\n  display: flex;\n  gap: 2rem;\n}\n\n.go-TabNav li {\n  border-bottom: 0.25rem transparent solid;\n  display: flex;\n  font-size: 1rem;\n  height: 2.375rem;\n  padding: 0 0.25rem;\n}\n\n.go-TabNav li[aria-current] {\n  border-color: var(--color-brand-primary);\n}\n\n.go-TabNav li:hover {\n  border-color: var(--color-brand-primary);\n}\n\n.go-TabNav a {\n  align-items: center;\n  color: var(--color-text-subtle);\n  display: inline-flex;\n}\n\n.go-TabNav li:hover a {\n  text-decoration: none;\n}\n\n.go-TabNav li[aria-current] a {\n  color: var(--color-text);\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.go-Tooltip {\n  border-radius: var(--border-radius);\n  cursor: pointer;\n  display: inline-block;\n  position: relative;\n}\n\n.go-Tooltip > summary {\n  list-style: none;\n}\n\n.go-Tooltip > summary::-webkit-details-marker,\n.go-Tooltip > summary::marker {\n  display: none;\n}\n\n.go-Tooltip > summary > img {\n  vertical-align: text-bottom;\n}\n\n.go-Tooltip p {\n  background: var(--color-background) 80%;\n  border: var(--border);\n  border-radius: var(--border-radius);\n  color: var(--color-text);\n  font-size: 0.75rem;\n  letter-spacing: 0.0187rem;\n  line-height: 1rem;\n  padding: 0.5rem;\n  position: absolute;\n  top: 1.5rem;\n  white-space: normal;\n  width: 12rem;\n  z-index: 100;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n@import url('./reset.css');\n\n/**\n * Typography should be imported first in the list below to ensure expected\n * CSS rule inheritance on text elements.\n */\n@import url('./typography/typography.css');\n@import url('./button/button.css');\n@import url('./breadcrumb/breadcrumb.css');\n@import url('./carousel/carousel.css');\n@import url('./chip/chip.css');\n@import url('./clipboard/clipboard.css');\n@import url('./color/color.css');\n@import url('./footer/footer.css');\n@import url('./form/form.css');\n@import url('./gopher/gopher.css');\n@import url('./header/header.css');\n@import url('./icon/icon.css');\n@import url('./message/message.css');\n@import url('./modal/modal.css');\n@import url('./outline/tree.css');\n@import url('./tabnav/tabnav.css');\n@import url('./tooltip/tooltip.css');\n\n:root {\n  /* Padding at the left and right of the viewport. */\n  --gutter: 1.5rem;\n\n  /* Margin between containers in the grid layout. */\n  --gap: 1rem;\n\n  /* The margin placed above elements scrolled to by clicking hash links. */\n  --scroll-margin: calc(\n    var(--js-sticky-header-height, 3.5rem) + var(--js-sticky-nav-height, 0) + 2rem\n  );\n\n  /* Default styles for page elements. */\n  --border: 0.0625rem solid var(--color-border);\n  --border-radius: 0.25rem;\n  --box-shadow: 0 0 0.375rem 0 rgb(0 0 0 / 25%);\n  --focus-box-shadow: 0 0 0.0625rem 0.0625rem rgb(0 112 210 / 60%);\n}\n\n[data-theme='dark'] {\n  --box-shadow: 0 0.3125rem 0.9375rem rgb(0 0 0 / 45%);\n}\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme='light']) {\n    --box-shadow: 0 0.3125rem 0.9375rem rgb(0 0 0 / 45%);\n  }\n}\n@media (min-width: 50rem) {\n  :root {\n    --gap: 2rem;\n    --scroll-margin: calc(\n      var(--js-sticky-header-height, 3.5rem) + var(--js-sticky-nav-height, 0) + 1rem\n    );\n  }\n}\n\n*:target {\n  scroll-margin-top: var(--scroll-margin);\n}\n\nbody {\n  background-color: var(--color-background);\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n  min-width: 23.5rem;\n\n  /**\n   * This is used to programatically detect whether overflow needs to be altered\n   * to prevent jitter when focusing within fixed elements on iOS.\n   * It also must be set to 'touch' for the fix to work.\n   */\n  -webkit-overflow-scrolling: touch;\n}\n\n.go-Container {\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  height: 100%;\n  margin-bottom: 5rem;\n}\n\n.go-Content {\n  display: flex;\n  flex-flow: column;\n  gap: 1rem;\n  margin: 0 auto;\n  max-width: 63rem;\n  min-height: 32rem;\n  padding: 2rem var(--gutter);\n  width: 100%;\n}\n\n.go-Content--center {\n  justify-content: center;\n  margin: auto;\n}\n", "/*!\n* Copyright 2021 The Go Authors. All rights reserved.\n* Use of this source code is governed by a BSD-style\n* license that can be found in the LICENSE file.\n*/\n\n.JumpDialog-body {\n  height: 12rem;\n  overflow-y: auto;\n}\n\n.JumpDialog-list {\n  display: flex;\n  flex-direction: column;\n}\n\n.JumpDialog-input {\n  width: 100%;\n}\n\n.JumpDialog a {\n  padding: 0.25rem;\n  text-decoration: none;\n}\n\n.JumpDialog .JumpDialog-active {\n  background-color: var(--color-brand-primary);\n  color: var(--white);\n}\n\n.ShortcutsDialog-key {\n  text-align: right;\n}\n\n.ShortcutsDialog table {\n  padding: 0 1rem;\n}\n\n.ShortcutsDialog td {\n  padding-bottom: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.ShortcutsDialog-theme span {\n  display: none;\n}\n\n[data-theme='light'] .ShortcutsDialog-themeLight {\n  display: initial;\n}\n\n[data-theme='dark'] .ShortcutsDialog-themeDark {\n  display: initial;\n}\n\n[data-theme=''] .ShortcutsDialog-themeAuto,\n[data-theme='auto'] .ShortcutsDialog-themeAuto {\n  display: initial;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n@import url('../shared/shared.css');\n@import url('_modals.css');\n\n.Cookie-notice {\n  align-items: center;\n  background-color: var(--color-background);\n  border-top: var(--border);\n  bottom: 0;\n  color: var(--color-text);\n  display: none;\n  gap: 1rem;\n  justify-content: center;\n  left: 0;\n  padding: 1rem;\n  position: fixed;\n  right: 0;\n  z-index: 100;\n}\n\n.Cookie-notice--visible {\n  display: flex;\n}\n"],
-  "mappings": ";;;;;AAYA,KACA,KACA,OACA,IACA,KACA,OACA,OACA,OACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,MACA,EACA,WACA,IACA,EACA,KACA,QACA,QACA,IACA,KACA,KACA,IACA,IACA,OACA,GACA,IACA,IACA,IACA,EACA,EACA,KACA,MACA,OACA,OACA,IACA,IACA,GACA,IACA,EACA,EACA,EACA,OACA,GACA,GACA,GACA,GACA,GACA,GACA,SACA,KACA,MACA,OACA,MACA,QACA,MACA,MACA,MACA,GACA,GACA,GACA,QACA,MACA,OACA,QACA,MACA,OACA,WACA,OACA,OACA,OACA,KACA,IACA,OACA,KACA,QACA,QACA,KACA,KACA,MACA,MACE,OAAQ,EACR,KAAM,QACN,UAAW,KAnGb,OAoGU,EApGV,QAqGW,EACT,eAAgB,QAClB,CAGA,QACA,MACA,QACA,WACA,OACA,OACA,OACA,OACA,KACA,IACA,QACE,QAAS,KACX,CAEA,KACE,YAAa,CACf,CAEA,GACA,GACE,WAAY,IACd,CAEA,WACA,EACE,OAAQ,IACV,CAEA,UAAU,QACV,UAAU,OACV,CAAC,QACD,CAAC,OACC,QAAS,GACT,QAAS,IACX,CAEA,MACE,gBAAiB,SACjB,eAAgB,CAClB,CAEA,EACA,QACA,OACE,WAAY,UACd,CCjJA,KACE,MAAO,IAAI,cACX,YAAa,aAAa,CAAE,kBAAkB,CAAE,QAAU,CAAE,SAAS,CAAE,KAAK,CAAE,UAAU,CACtF,mBAAmB,CAAE,iBACvB,UAAW,KACX,YAAa,MACf,CAEA,GACE,UAAW,MACb,CAEA,GACE,UAAW,QACb,CAEA,GACE,UAAW,OACb,CAEA,GACE,UAAW,QACb,CAEA,GACE,UAAW,IACb,CAEA,GACE,UAAW,OACb,CAEA,GACA,GACA,GACA,GACE,YAAa,IACb,YAAa,OACb,WAAY,UACd,CAEA,GACA,GACE,YAAa,IACb,YAAa,MACb,WAAY,UACd,CAEA,GACE,OAAQ,KACR,cAAe,IAAI,UAxDrB,OAyDU,EACR,MAAO,IACT,CAEA,EACE,UAAW,KAC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",
+  "mappings": ";;;;;AAYA,kbAqFE,SACA,aACA,eAnGF,mBAsGE,wBAIF,8EAWE,cAGF,KACE,cAGF,MAEE,gBAGF,aAEE,YAGF,oDAIE,WACA,aAGF,MACE,yBACA,iBAGF,iBAGE,sBChJF,KACE,wBACA,sHAEA,eACA,mBAGF,GACE,iBAGF,GACE,mBAGF,GACE,kBAGF,GACE,mBAGF,GACE,eAGF,GACE,kBAGF,YAIE,gBACA,mBACA,sBAGF,MAEE,gBACA,kBACA,sBAGF,GACE,YACA,4BAxDF,SA0DE,WAGF,EACE,eACA,mBACA,gBAGF,OACE,gBAGF,eACE,+BAGF,cACE,mBACA,gBACA,oBAGF,cACE,kBACA,gBACA,iBAGF,mBACE,kBACA,iBAGF,uBAGE,oEACA,kBACA,kBAGF,kBAEE,kDACA,qBACA,mCACA,wBACA,gBA1GF,gBA4GE,WACA,gBAGF,6BAIE,aAGF,mBAGE,iCACA,qBAGF,gBAEE,iCACA,0BAGF,UACE,0BC/HF,6BACE,wCACA,mCACA,oBAGF,WACE,mBACA,qCACA,kCACA,mCACA,+BACA,eACA,oBACA,gBACA,WAGF,mCAxBA,cA4BA,qBACE,8CACA,wCAGF,yDAGE,8CACA,wCAGF,mBACE,6BAGF,qBACE,qBAGF,iBACE,mCACA,qBAGF,yBACE,gBACA,4DAGF,iBACE,qBAGF,2BACE,+CAGF,kBACE,gBACA,qBAGF,oBACE,8CACA,gBACA,wCACA,eACA,YACA,qBAGF,8BACE,uDACA,iDAGF,oFAGE,uDACA,iDAGF,4BACE,6BCvFF,kBACE,mBACA,oBAGF,kBACE,mBACA,+BACA,oBACA,kBAGF,yCACE,YAnBF,gBAuBA,+BACE,+BAGF,gCA3BA,eCMA,aACE,mBACA,aACA,sBACA,kBACA,kBAGF,mBAdA,kBAkBA,gCACE,aAGF,uBACE,OAGF,uBACE,QAGF,8CAEE,6BACA,mCACA,iBACA,eACA,kBACA,UACA,kBACA,QACA,cAGF,0DAEE,kDACA,eAGF,sLAIE,UAGF,kBACE,aACA,mBACA,UAGF,iBACE,qCA/DF,mBAiEE,gBACA,gBACA,eAGF,gDAEE,0CACA,wCAGF,uBACE,kDAGF,+BACE,kDAGF,sBACE,SACA,mBACA,gBAvFF,iBAyFE,gBAzFF,UA2FE,kBACA,eCtFF,SACE,+BACA,0CARF,sBAUE,+BACA,iBAXF,wBAeA,mBACE,wCACA,mDACA,wCAGF,mBACE,wCACA,qBACA,wBAGF,sBACE,oDACA,sDACA,iCAGF,gBACE,uBACA,kCACA,iCAGF,eACE,6BACA,wCACA,iCAGF,iBACE,kDACA,yBACA,+BC1CF,cACE,kBAGF,qBACE,kDACA,mCACA,iCACA,2BACA,cACA,eACA,0BAjBF,qBAmBE,kBACA,yBACA,YACA,mBACA,aAGF,oBACE,uCACA,cACA,2DACA,oCACA,WACA,cACA,kBACA,eACA,aACA,aAGF,4JAIE,aCrCF,MAEE,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,sBACA,oBACA,qBACA,uBACA,gBACA,sBACA,cACA,iBACA,uBACA,gBACA,sBACA,kBACA,iBACA,cACA,kBACA,wBAGA,wCACA,iCACA,0CACA,4CACA,4CACA,uDACA,uCACA,gDACA,4CACA,8BACA,4BACA,mCACA,oCACA,oCACA,mCACA,6CAGA,uCACA,sCACA,iCACA,uCACA,kCACA,4CACA,iDACA,0DACA,yDACA,gEACA,uCACA,gDACA,4CACA,qDAGF,kBACE,uCACA,kCACA,2CACA,8CACA,mDACA,uCACA,0CACA,sCACA,8BACA,4BACA,mCACA,mCACA,yCACA,0CAEF,oCACE,gCACE,uCACA,kCACA,2CACA,8CACA,mDACA,uCACA,0CACA,sCACA,8BACA,4BACA,mCACA,mCACA,0CC9FJ,WACE,kDACA,iCACA,kBACA,WAGF,6BACE,aAGF,iBACE,aACA,eACA,8BApBF,YAsBE,mBAtBF,6BA0BA,sBACE,gBAGF,2BACE,iCACA,aACA,OACA,kBACA,iBAGF,oCACE,mBACA,oBACA,oBACA,kBAGF,sBACE,iCACA,kBAGF,kBACE,mBACA,yBACA,aArDF,gBAuDE,oBAGF,kBACE,oBACA,gBACA,WAGF,mBACE,aACA,OACA,eACA,gBApEF,mBAuEE,kBAGF,oBACE,mBACA,aACA,YACA,uBA9EF,8BAmFA,yDAEE,iCAGF,qCACE,6BACA,eA1FF,gBA8FA,iCACE,aAGF,sHAEE,gBAGF,kHACE,gBAOF,2CA/GA,iBAoHA,sBACE,oBACA,cACA,qBACA,iBAGF,yBACE,cACA,eAGF,0CACE,oBACE,aAGF,wCACE,0BAGF,uBAzIF,oBA6IE,oBA7IF,UCMA,yDAEE,wCACA,mCACA,oBACA,UAGF,mBACE,+BAGF,SACE,kBACA,aACA,sBACA,SAGF,UACE,aACA,sBACA,UAGF,kBACE,mBACA,mBAGF,iBACE,oBAGF,yBACE,WACA,gBAGF,qBAEE,8BACA,qBACA,mCACA,8BAGF,UArDA,uBAyDA,WACE,gBACA,qFACA,yCACA,iCACA,mCA9DF,iDAmEA,eACE,aAGF,yBACE,OAGF,8CA3EA,gBA6EE,sBAGF,4BACE,6BACA,0BAGF,2BACE,4BACA,yBACA,sBAGF,8CAEE,UAGF,gBACE,aACA,kBAGF,0BACE,YAGF,sBACE,kBACA,kDA3GF,oBA6GE,oBACA,4BACA,sDACA,aACA,iBAjHF,mBAmHE,kBACA,aACA,kBACA,aACA,UAEF,0CACE,sBACE,iBCrHJ,sBACE,cACA,aARF,gCAWE,YAGF,oBACE,gBAfF,YAiBE,kBCTF,WACE,+BAMA,aAGF,iBACE,mBACA,aACA,8BArBF,cAuBE,kBACA,4BAGF,6BACE,gBAGF,kCACE,gBAGF,mBACE,mBACA,qBAGF,iDAEE,mBACA,0BACA,mBAEF,0CACE,WACE,eAIJ,WACE,mBACA,mBACA,wCACA,MACA,WACA,WAGF,iBA7DA,cA+DE,wBAGF,6BACE,gBAGF,kCACE,kBAGF,eACE,mBACA,aACA,cACA,8BAGF,wBACE,mBACA,aACA,YACA,yBACA,WAGF,6BACE,YAGF,uBACE,mBACA,mBAGF,gBACE,cACA,YACA,qBACA,eAGF,wBACE,aAGF,oBACE,aACA,kBAGF,gBACE,oBACA,aACA,YACA,gBAtHF,mBA2HA,kCACE,aAGF,mBACE,uBACA,yCACA,8BACA,iCACA,wBACA,aACA,sBACA,qBACA,kBACA,UAzIF,wBA2IE,kBACA,wBACA,kBAGF,uLAEE,aACA,UACA,mBAGF,uGAEE,qBACA,mBACA,6BACA,oBACA,gBA7JF,SA+JE,uBA/JF,UAmKA,6BACE,kDACA,kBAGF,2FAEE,4HAIF,4CACE,iBACA,mBACA,4BAGF,wCACE,eACA,cAGF,yCACE,gBACA,YACA,eAGF,8CACE,eACA,gBACA,eAGF,uBACE,aACA,eAGF,iEACE,oBACA,cACA,WAGF,kFACE,oBAEF,0CACE,oBACE,oBACA,oBACA,UAGF,gBACE,yBAGF,mBACE,cAIJ,+CACE,oBAGF,yDAEE,mBACA,yCACA,sCACA,wBACA,oBA7OF,iBA+OE,kBACA,qBACA,WAGF,yEAEE,oCACA,gBAGF,4BACE,iCAGF,mJAEE,wBACA,0BACA,6BAIF,oCACE,qOAQE,4HAIF,wFACE,6HAKJ,yIAGE,cA5RF,4BAiSA,mCACE,oBAGF,uGAEE,mBAGF,gEACE,YAGF,kEACE,6BAGF,8EACE,8BACA,6BAGF,6IAEE,qBACA,6BACA,oBACA,uBACA,WAGF,qGAEE,mBACA,gBAnUF,mBAwUA,kDACE,oCAGF,iMAIE,mCACA,qCAGF,qBACE,kBAGF,mEAEE,6CACA,qBAGF,uEAEE,qBAGF,0CACE,cACA,sBAGF,4CACE,+BACA,kBACA,kBAGF,mEACE,+BAGF,mBACE,4DACA,YACA,cACA,iBACA,aAGF,2BACE,aAGF,0BACE,gFACA,6HAIF,yBACE,YAGF,oBACE,aAGF,0BACE,cAGF,6CACE,aAGF,4BACE,gBACA,gBACA,iBAGF,qDACE,aAGF,0CACE,wBACE,WAGF,eACE,OAGF,oBACE,aAGF,4BACE,aAGF,wBACE,iBAIJ,qBACE,mCACA,YACA,UACA,gBACA,eACA,QACA,MACA,0BACA,qCACA,UACA,WAEF,0CACE,qBACE,cAIJ,+BACE,uBAGF,4BACE,kCACA,oBAGF,iCACE,WAGF,6DACE,mBACA,6BACA,aACA,mBACA,2BACA,qBA1dF,iCA+dA,+DACE,aACA,cAGF,0BACE,cACA,YAteF,YAweE,eAGF,0BACE,gBA5eF,mBAifA,8BACE,+BACA,mBAnfF,eAufA,sCACE,6BAxfF,oBA4fA,8CACE,iCACA,qBACA,mBACA,qBACA,mBAEF,4CACE,qDApgBF,gBAwgBE,qDACE,qBAzgBJ,yBA8gBE,oCACE,+FACE,8HAMN,2BACE,aACA,YACA,OACA,eACA,MACA,WACA,WAGF,0DACE,+BACA,cACA,YAGF,sBACE,mCAviBF,sBAyiBE,mBACA,wBACA,gBACA,QA5iBF,eA8iBE,gBACA,kBACA,WAGF,4BACE,WACA,UC/iBF,cACE,eACA,2BACA,WAGF,SACE,YACA,eACA,2BACA,WAGF,mBACE,8GAIF,mBACE,6HAEA,iEACE,iIAKJ,mDACE,6HAIF,qCACE,4GAGF,oCACE,iEACE,6HAIF,mDACE,gHC3CJ,YACE,wBACA,kBACA,mBATF,qBAWE,WAGF,oBACE,8CAGF,qBACE,iDACA,oBAGF,mBACE,+CAGF,qBACE,wBAGF,4CACE,wBACA,0BAGF,gDACE,YAEF,oCACE,8DACE,aCzCJ,OACE,kBACA,OAAS,QACT,uBACA,0BACA,kBACA,wBACA,2BACA,mBARF,YAUE,aAVF,YAYE,iBACA,WACA,cAGF,mBACE,aAGF,iBACE,eAtBF,QAwBE,0BAGF,iBACE,eA5BF,QAgCA,aACE,eACA,QACA,2BC3BF,UACE,mCACA,qBACA,mCACA,SACA,6BACA,wBACA,aACA,sBACA,SACA,gBACA,eACA,eACA,MAGF,eACE,iBAGF,iBACE,YAGF,cACE,YAGF,cACE,YAGF,iBACE,aACA,8BAGF,oBACE,kBACA,oBAGF,eACE,YACA,gBACA,gBAGF,kBACE,iBAIF,8CACE,qCACE,UACE,mBC1DN,SACE,oBAEA,aACA,sBAGF,YACE,gBACA,eAGF,yBACE,sBAGF,cACE,aAGF,8CACE,cAGF,0CACE,kGAGA,gBAlCF,uBAsCA,WACE,+BACA,cACA,mBACA,gBA1CF,kCA4CE,kBACA,uBACA,iBACA,mBAGF,yCAEE,cACA,eACA,gBACA,mBAvDF,eA2DA,kCAEE,0BACA,UAGF,+BACE,wBACA,gBAGF,8FAEE,kDAGF,+CACE,qBAGF,2BACE,qBACA,kBAGF,2BACE,oBAGF,2BACE,2DACA,mBACA,mBAGF,sJAEE,4CAhGF,kBAkGE,WACA,cACA,gBACA,cACA,kBACA,WACA,eAGF,wHAEE,uCACA,6CACA,eACA,oCACA,WACA,cACA,SACA,WACA,kBACA,YACA,gCACA,QAGF,4GAEE,wBAGF,4HAEE,YACA,WAGF,+CACE,qDCjIF,WANA,iBAUA,cACE,aACA,SAGF,cACE,uCACA,aACA,eACA,gBAnBF,iBAuBA,gDACE,wCAOF,aACE,mBACA,+BACA,oBAGF,sBACE,qBAGF,8BACE,wBCpCF,YACE,mCACA,eACA,qBACA,kBAGF,oBACE,gBAGF,wEAEE,aAGF,wBACE,2BAGF,cACE,uCACA,qBACA,mCACA,wBACA,iBACA,wBACA,iBAjCF,cAmCE,kBACA,WACA,mBACA,YACA,YCTF,MAEE,iBAGA,YAGA,wGAKA,6CACA,wBACA,6CACA,+DAGF,kBACE,mDAEF,oCACE,gCACE,oDAGJ,0BACE,MACE,YACA,yGAMJ,SACE,uCAGF,KACE,yCACA,aACA,sBACA,iBACA,kBAOA,iCAGF,cACE,aACA,sBACA,YACA,YACA,mBAGF,YACE,aACA,iBACA,SAhGF,cAkGE,gBACA,iBACA,2BACA,WAGF,oBACE,uBAzGF,YCMA,iBACE,aACA,gBAGF,iBACE,aACA,sBAGF,kBACE,WAGF,cApBA,eAsBE,qBAGF,+BACE,4CACA,mBAGF,qBACE,iBAGF,uBAlCA,eAsCA,oBACE,qBACA,mBAGF,4BACE,aAGF,oLACE,gBCvCF,eACE,mBACA,yCACA,yBACA,SACA,wBACA,aACA,SACA,uBACA,OAlBF,aAoBE,eACA,QACA,YAGF,wBACE",
   "names": []
 }
diff --git a/static/frontend/homepage/homepage.min.css b/static/frontend/homepage/homepage.min.css
index 345602b..3b063f0 100644
--- a/static/frontend/homepage/homepage.min.css
+++ b/static/frontend/homepage/homepage.min.css
@@ -3,7 +3,7 @@
  * Use of this source code is governed by a BSD-style
  * license that can be found in the LICENSE file.
  */
-.go-SearchForm{display:none}.Homepage-logo{border-radius:var(--border-radius);display:block;height:10rem;margin:3.125rem auto;width:auto}[data-theme=dark] .Homepage-logo{mix-blend-mode:difference}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .Homepage-logo{mix-blend-mode:difference}}@media only screen and (min-width: 52rem){.Homepage{margin:2rem auto}.Homepage-logo{margin:3.5rem auto}}.Homepage-search{--border-radius: .5rem;height:3rem;margin:2.5rem auto 0;max-width:45.0625rem;position:relative;width:100%}.Homepage-search:before{background:url(/static/shared/icon/search_gm_grey_24dp.svg) left no-repeat;content:"";height:3rem;left:.75rem;position:absolute;width:1.5rem;z-index:3}.Homepage-search .go-Select,.Homepage-search .go-Input{padding-left:2.5rem}.Homepage-search--symbol .go-Input{border-bottom-right-radius:var(--border-radius);border-top-right-radius:var(--border-radius);padding-left:2.5rem}.Homepage-search .go-Button{justify-content:center;width:7.375rem}.Homepage-search--symbol .go-Button{display:none}@media only screen and (min-width: 30rem){.Homepage-search--symbol .go-Input{border-bottom-right-radius:0;border-top-right-radius:0}.Homepage-search--symbol .go-Button{display:inline-flex}}.Homepage-closeIcon{background:var(--color-input);border-bottom:var(--border);border-color:var(--color-brand-primary);border-left:0;border-top:var(--border);color:var(--color-button);cursor:pointer;display:inline-block;font-weight:700;padding-left:.5rem;padding-right:.5rem}.Homepage-closeIcon:hover,.Homepage-closeIcon:focus,.Homepage-closeIcon:focus-within,.Homepage-closeIcon:active{border-left:0!important}.Homepage-search--input:hover,.Homepage-search--input:focus,.Homepage-search--input:focus-within,.Homepage-search--input:active{border-right:0!important}input[type=search]::-webkit-search-decoration{display:none}.Homepage-tips{margin:auto;max-width:45.0625rem;width:100%}[data-local=true] .Homepage-tips{display:none}.Homepage-examples{align-items:center;display:flex;flex-direction:column;font-size:.875rem;gap:.5rem 1rem;justify-content:space-between;margin:0 auto;max-width:45.0625rem;white-space:nowrap;width:inherit}@media only screen and (min-width: 52rem){.Homepage-examples{flex-direction:row}}.Homepage-examplesTitle{color:var(--color-text-subtle);font-weight:500;text-transform:uppercase}.Homepage-examplesList{display:flex;flex-grow:1;flex-wrap:wrap;gap:.5rem 2rem}a.Homepage-helpLink{align-items:center;display:inline-flex;font-size:1em;font-weight:initial;margin-left:.5rem;white-space:nowrap}.Homepage-helpLink img{height:1rem;margin-left:.25rem;position:relative;top:.1875rem;width:1rem}.Homepage-modules{margin:auto;max-width:45.0625rem;width:100%}.Homepage-modules-header{color:var(--color-text);font-weight:700}.Homepage-modules ul{list-style:circle;padding:0 1.5rem}.Homepage-modules ul>li{font-size:1rem;line-height:1.75rem}.Questions{background:var(--color-background-accented);color:var(--color-text);display:flex;padding-bottom:1rem;padding-top:.5rem}.Questions-header{color:var(--color-text);font-weight:700;margin:1rem 0}.Questions-content{flex-grow:1;margin:0 auto;max-width:75.75rem;padding:0 1.5rem}.Questions-content a{color:var(--color-bright-text-link)}.Questions-content ul{list-style:none;padding-inline-start:0}.Questions-content ul>li{font-size:.875rem;line-height:1.75rem}
+.go-SearchForm{display:none}.Homepage-logo{border-radius:var(--border-radius);display:block;height:10rem;margin:3.125rem auto;width:auto}[data-theme=dark] .Homepage-logo{mix-blend-mode:difference}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .Homepage-logo{mix-blend-mode:difference}}@media only screen and (min-width: 52rem){.Homepage{margin:2rem auto}.Homepage-logo{margin:3.5rem auto}}.Homepage-search{--border-radius: .5rem;height:3rem;margin:2.5rem auto 0;max-width:45.0625rem;position:relative;width:100%}.Homepage-search:before{background:url(/static/shared/icon/search_gm_grey_24dp.svg) left no-repeat;content:"";height:3rem;left:.75rem;position:absolute;width:1.5rem;z-index:3}.Homepage-search .go-Select,.Homepage-search .go-Input{padding-left:2.5rem}.Homepage-search--symbol .go-Input{border-bottom-right-radius:var(--border-radius);border-top-right-radius:var(--border-radius);padding-left:2.5rem}.Homepage-search .go-Button{justify-content:center;width:7.375rem}.Homepage-search--symbol .go-Button{display:none}@media only screen and (min-width: 30rem){.Homepage-search--symbol .go-Input{border-bottom-right-radius:0;border-top-right-radius:0}.Homepage-search--symbol .go-Button{display:inline-flex}}.Homepage-closeIcon{background:var(--color-input);border-bottom:var(--border);border-color:var(--color-brand-primary);border-left:0;border-top:var(--border);color:var(--color-button);cursor:pointer;display:inline-block;font-weight:700;padding-left:.5rem;padding-right:.5rem}.Homepage-closeIcon:hover,.Homepage-closeIcon:focus,.Homepage-closeIcon:focus-within,.Homepage-closeIcon:active{border-left:0!important}.Homepage-search--input:hover,.Homepage-search--input:focus,.Homepage-search--input:focus-within,.Homepage-search--input:active{border-right:0!important}input[type=search]::-webkit-search-decoration{display:none}.Homepage-tips{margin:auto;max-width:45.0625rem;width:100%}[data-local=true] .Homepage-tips{display:none}.Homepage-examples{align-items:center;display:flex;flex-direction:column;font-size:.875rem;gap:.5rem 1rem;justify-content:space-between;margin:0 auto;max-width:45.0625rem;white-space:nowrap;width:inherit}@media only screen and (min-width: 52rem){.Homepage-examples{flex-direction:row}}.Homepage-examplesTitle{color:var(--color-text-subtle);font-weight:500;text-transform:uppercase}.Homepage-examplesList{display:flex;flex-grow:1;flex-wrap:wrap;gap:.5rem 2rem}a.Homepage-helpLink{align-items:center;display:inline-flex;font-size:1em;font-weight:initial;margin-left:.5rem;white-space:nowrap}.Homepage-helpLink img{height:1rem;margin-left:.25rem;position:relative;top:.1875rem;width:1rem}.Homepage-modules{margin:auto;max-width:45.0625rem;width:100%}.Homepage-modules-header{color:var(--color-text);font-weight:700}.Homepage-modules ul{list-style:circle;padding:0 1.5rem}.Homepage-modules ul>li{font-size:1rem;line-height:1.75rem}.Questions{background:var(--color-background-accented);color:var(--color-text);display:flex;padding-bottom:1rem;padding-top:.5rem}.Questions-header{color:var(--color-text);font-weight:700;margin:1rem 0}.Questions-content{flex-grow:1;margin:0 auto;max-width:75.75rem;padding:0 1.5rem}.Questions-content a{color:var(--color-bright-text-link)}.Questions-content ul{list-style:none;padding-inline-start:0}.Questions-content ul>li{font-size:.875rem;line-height:1.75rem}
 /*!
  * Copyright 2020 The Go Authors. All rights reserved.
  * Use of this source code is governed by a BSD-style
diff --git a/static/frontend/homepage/homepage.min.css.map b/static/frontend/homepage/homepage.min.css.map
index 35a0605..2ac924b 100644
--- a/static/frontend/homepage/homepage.min.css.map
+++ b/static/frontend/homepage/homepage.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["homepage.css"],
   "sourcesContent": ["/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/* Hide the search form in the header. */\n.go-SearchForm {\n  display: none;\n}\n\n.Homepage-logo {\n  border-radius: var(--border-radius);\n  display: block;\n  height: 10rem;\n  margin: 3.125rem auto;\n  width: auto;\n}\n\n[data-theme='dark'] .Homepage-logo {\n  mix-blend-mode: difference;\n}\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme='light']) .Homepage-logo {\n    mix-blend-mode: difference;\n  }\n}\n@media only screen and (min-width: 52rem) {\n  .Homepage {\n    margin: 2rem auto;\n  }\n\n  .Homepage-logo {\n    margin: 3.5rem auto;\n  }\n}\n\n.Homepage-search {\n  --border-radius: 0.5rem;\n\n  height: 3rem;\n  margin: 2.5rem auto 0;\n  max-width: 45.0625rem;\n  position: relative;\n  width: 100%;\n}\n\n.Homepage-search::before {\n  background: url('/static/shared/icon/search_gm_grey_24dp.svg') left no-repeat;\n  content: '';\n  height: 3rem;\n  left: 0.75rem;\n  position: absolute;\n  width: 1.5rem;\n  z-index: 3;\n}\n\n.Homepage-search .go-Select {\n  padding-left: 2.5rem;\n}\n\n.Homepage-search .go-Input {\n  padding-left: 2.5rem;\n}\n\n.Homepage-search--symbol .go-Input {\n  border-bottom-right-radius: var(--border-radius);\n  border-top-right-radius: var(--border-radius);\n  padding-left: 2.5rem;\n}\n\n.Homepage-search .go-Button {\n  justify-content: center;\n  width: 7.375rem;\n}\n\n.Homepage-search--symbol .go-Button {\n  display: none;\n}\n@media only screen and (min-width: 30rem) {\n  .Homepage-search--symbol .go-Input {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0;\n  }\n\n  .Homepage-search--symbol .go-Button {\n    display: inline-flex;\n  }\n}\n\n.Homepage-closeIcon {\n  background: var(--color-input);\n  border-bottom: var(--border);\n  border-color: var(--color-brand-primary);\n  border-left: 0;\n  border-top: var(--border);\n  color: var(--color-button);\n  cursor: pointer;\n  display: inline-block;\n  font-weight: bold;\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.Homepage-closeIcon:hover,\n.Homepage-closeIcon:focus,\n.Homepage-closeIcon:focus-within,\n.Homepage-closeIcon:active {\n  border-left: 0 !important;\n}\n\n.Homepage-search--input:hover,\n.Homepage-search--input:focus,\n.Homepage-search--input:focus-within,\n.Homepage-search--input:active {\n  border-right: 0 !important;\n}\n\ninput[type='search']::-webkit-search-decoration {\n  display: none;\n}\n\n.Homepage-tips {\n  margin: auto;\n  max-width: 45.0625rem;\n  width: 100%;\n}\n\n[data-local='true'] .Homepage-tips {\n  display: none;\n}\n\n.Homepage-examples {\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  font-size: 0.875rem;\n  gap: 0.5rem 1rem;\n  justify-content: space-between;\n  margin: 0 auto;\n  max-width: 45.0625rem;\n  white-space: nowrap;\n  width: inherit;\n}\n@media only screen and (min-width: 52rem) {\n  .Homepage-examples {\n    flex-direction: row;\n  }\n}\n\n.Homepage-examplesTitle {\n  color: var(--color-text-subtle);\n  font-weight: 500;\n  text-transform: uppercase;\n}\n\n.Homepage-examplesList {\n  display: flex;\n  flex-grow: 1;\n  flex-wrap: wrap;\n  gap: 0.5rem 2rem;\n}\n\na.Homepage-helpLink {\n  align-items: center;\n  display: inline-flex;\n  font-size: 1em;\n  font-weight: initial;\n  margin-left: 0.5rem;\n  white-space: nowrap;\n}\n\n.Homepage-helpLink img {\n  height: 1rem;\n  margin-left: 0.25rem;\n  position: relative;\n  top: 0.1875rem;\n  width: 1rem;\n}\n\n.Homepage-modules {\n  margin: auto;\n  max-width: 45.0625rem;\n  width: 100%;\n}\n\n.Homepage-modules-header {\n  color: var(--color-text);\n  font-weight: bold;\n}\n\n.Homepage-modules ul {\n  list-style: circle;\n  padding: 0 1.5rem;\n}\n\n.Homepage-modules ul > li {\n  font-size: 1rem;\n  line-height: 1.75rem;\n}\n\n.Questions {\n  background: var(--color-background-accented);\n  color: var(--color-text);\n  display: flex;\n  padding-bottom: 1rem;\n  padding-top: 0.5rem;\n}\n\n.Questions-header {\n  color: var(--color-text);\n  font-weight: bold;\n  margin: 1rem 0;\n}\n\n.Questions-content {\n  flex-grow: 1;\n  margin: 0 auto;\n  max-width: 75.75rem;\n  padding: 0 1.5rem;\n}\n\n.Questions-content a {\n  color: var(--color-bright-text-link);\n}\n\n.Questions-content ul {\n  list-style: none;\n  padding-inline-start: 0;\n}\n\n.Questions-content ul > li {\n  font-size: 0.875rem;\n  line-height: 1.75rem;\n}\n"],
-  "mappings": "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",
+  "mappings": ";;;;;AAOA,eACE,aAGF,eACE,mCACA,cACA,aAdF,qBAgBE,WAGF,iCACE,0BAEF,oCACE,+CACE,2BAGJ,0CACE,UA5BF,iBAgCE,eAhCF,oBAqCA,iBACE,uBAEA,YAxCF,qBA0CE,qBACA,kBACA,WAGF,wBACE,2EACA,WACA,YACA,YACA,kBACA,aACA,UAGF,uDACE,oBAOF,mCACE,gDACA,6CACA,oBAGF,4BACE,uBACA,eAGF,oCACE,aAEF,0CACE,mCACE,6BACA,0BAGF,oCACE,qBAIJ,oBACE,8BACA,4BACA,wCACA,cACA,yBACA,0BACA,eACA,qBACA,gBACA,mBACA,oBAGF,gHAIE,wBAGF,gIAIE,yBAGF,8CACE,aAGF,eA1HA,YA4HE,qBACA,WAGF,iCACE,aAGF,mBACE,mBACA,aACA,sBACA,kBACA,eACA,8BA1IF,cA4IE,qBACA,mBACA,cAEF,0CACE,mBACE,oBAIJ,wBACE,+BACA,gBACA,yBAGF,uBACE,aACA,YACA,eACA,eAGF,oBACE,mBACA,oBACA,cACA,oBACA,kBACA,mBAGF,uBACE,YACA,mBACA,kBACA,aACA,WAGF,kBApLA,YAsLE,qBACA,WAGF,yBACE,wBACA,gBAGF,qBACE,kBAhMF,iBAoMA,wBACE,eACA,oBAGF,WACE,4CACA,wBACA,aACA,oBACA,kBAGF,kBACE,wBACA,gBAnNF,cAuNA,mBACE,YAxNF,cA0NE,mBA1NF,iBA8NA,qBACE,oCAGF,sBACE,gBACA,uBAGF,yBACE,kBACA",
   "names": []
 }
diff --git a/static/frontend/search-help/search-help.min.css.map b/static/frontend/search-help/search-help.min.css.map
index 8c59305..6bfed81 100644
--- a/static/frontend/search-help/search-help.min.css.map
+++ b/static/frontend/search-help/search-help.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["search-help.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.SearchHelp-list {\n  line-height: 1.5rem;\n  list-style: disc;\n  padding-left: 1.5rem;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,gBACC,YAAa,OACb,WAAY,KACZ,aAAc,MAChB",
+  "mappings": ";;;;;AAMA,iBACE,mBACA,gBACA",
   "names": []
 }
diff --git a/static/frontend/search/search.css b/static/frontend/search/search.css
index f961422..0f18255 100644
--- a/static/frontend/search/search.css
+++ b/static/frontend/search/search.css
@@ -93,10 +93,7 @@
   color: var(--color-text-subtle);
   display: flex;
   flex-direction: column;
-  gap: 1rem;
-  justify-content: space-between;
-  line-height: 1.5rem;
-  margin: -0.25rem 0 0.25rem;
+  gap: 0.3rem;
 }
 @media only screen and (min-width: 64rem) {
   .SearchResults-summary {
@@ -105,11 +102,6 @@
   }
 }
 
-.SearchResults-summary h1 {
-  font-size: inherit;
-  font-weight: inherit;
-}
-
 .SearchResults-emptyContentMessage {
   text-align: center;
 }
diff --git a/static/frontend/search/search.js b/static/frontend/search/search.js
index 7f4bdb8..34ab314 100644
--- a/static/frontend/search/search.js
+++ b/static/frontend/search/search.js
@@ -1,4 +1,4 @@
-var s=document.querySelector(".js-siteHeader"),o=document.createElement("div");s?.prepend(o);var c=new IntersectionObserver(([t])=>{if(t.intersectionRatio<1)for(let e of document.querySelectorAll('[class^="SearchResults-header"'))e.setAttribute("data-fixed","true");else for(let e of document.querySelectorAll('[class^="SearchResults-header"'))e.removeAttribute("data-fixed")},{threshold:1,rootMargin:`${3.5*16*3}px`});c.observe(o);var r=document.querySelector(".js-searchHeader");r?.addEventListener("dblclick",t=>{let e=t.target;(e===r||e===r.lastElementChild)&&(window.getSelection()?.removeAllRanges(),window.scrollTo({top:0,behavior:"smooth"}))});
+var o=document.querySelector(".js-siteHeader"),n=document.createElement("div");o==null||o.prepend(n);var c=new IntersectionObserver(([r])=>{if(r.intersectionRatio<1)for(let e of document.querySelectorAll('[class^="SearchResults-header"'))e.setAttribute("data-fixed","true");else for(let e of document.querySelectorAll('[class^="SearchResults-header"'))e.removeAttribute("data-fixed")},{threshold:1,rootMargin:`${3.5*16*3}px`});c.observe(n);var t=document.querySelector(".js-searchHeader");t==null||t.addEventListener("dblclick",r=>{var s;let e=r.target;(e===t||e===t.lastElementChild)&&((s=window.getSelection())==null||s.removeAllRanges(),window.scrollTo({top:0,behavior:"smooth"}))});
 /**
  * @license
  * Copyright 2020 The Go Authors. All rights reserved.
diff --git a/static/frontend/search/search.js.map b/static/frontend/search/search.js.map
index fcc2363..113ad5a 100644
--- a/static/frontend/search/search.js.map
+++ b/static/frontend/search/search.js.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["search.ts"],
   "sourcesContent": ["/**\n * @license\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nconst headerHeight = 3.5;\n\n// Append a div above the site header to use for the sticky header transition.\nconst siteHeader = document.querySelector('.js-siteHeader');\nconst headerSentinel = document.createElement('div');\nsiteHeader?.prepend(headerSentinel);\n\n/**\n * headerObserver watches the headerSentinel. When the headerSentinel is out of view a\n * callback function transitions the search results header in to the sticky position.\n */\nconst headerObserver = new IntersectionObserver(\n  ([e]) => {\n    if (e.intersectionRatio < 1) {\n      for (const x of document.querySelectorAll('[class^=\"SearchResults-header\"')) {\n        x.setAttribute('data-fixed', 'true');\n      }\n    } else {\n      for (const x of document.querySelectorAll('[class^=\"SearchResults-header\"')) {\n        x.removeAttribute('data-fixed');\n      }\n    }\n  },\n  { threshold: 1, rootMargin: `${headerHeight * 16 * 3}px` }\n);\nheaderObserver.observe(headerSentinel);\n\n// Add an event listener to scroll to the top of the page when the whitespace on the\n// header is double clicked.\nconst searchHeader = document.querySelector('.js-searchHeader');\nsearchHeader?.addEventListener('dblclick', e => {\n  const target = e.target;\n  if (target === searchHeader || target === searchHeader.lastElementChild) {\n    window.getSelection()?.removeAllRanges();\n    window.scrollTo({ top: 0, behavior: 'smooth' });\n  }\n});\n\nexport {};\n"],
-  "mappings": "AAUA,IAAMA,EAAa,SAAS,cAAc,gBAAgB,EACpDC,EAAiB,SAAS,cAAc,KAAK,EACnDD,GAAY,QAAQC,CAAc,EAMlC,IAAMC,EAAiB,IAAI,qBACzB,CAAC,CAACC,CAAC,IAAM,CACP,GAAIA,EAAE,kBAAoB,EACxB,QAAWC,KAAK,SAAS,iBAAiB,gCAAgC,EACxEA,EAAE,aAAa,aAAc,MAAM,MAGrC,SAAWA,KAAK,SAAS,iBAAiB,gCAAgC,EACxEA,EAAE,gBAAgB,YAAY,CAGpC,EACA,CAAE,UAAW,EAAG,WAAY,GAAG,IAAe,GAAK,CAAC,IAAK,CAC3D,EACAF,EAAe,QAAQD,CAAc,EAIrC,IAAMI,EAAe,SAAS,cAAc,kBAAkB,EAC9DA,GAAc,iBAAiB,WAAYF,GAAK,CAC9C,IAAMG,EAASH,EAAE,QACbG,IAAWD,GAAgBC,IAAWD,EAAa,oBACrD,OAAO,aAAa,GAAG,gBAAgB,EACvC,OAAO,SAAS,CAAE,IAAK,EAAG,SAAU,QAAS,CAAC,EAElD,CAAC",
-  "names": ["siteHeader", "headerSentinel", "headerObserver", "e", "x", "searchHeader", "target"]
+  "mappings": "AAUA,IAAMA,EAAa,SAAS,cAAc,gBAAgB,EACpDC,EAAiB,SAAS,cAAc,KAAK,EACnDD,GAAA,MAAAA,EAAY,QAAQC,GAMpB,IAAMC,EAAiB,IAAI,qBACzB,CAAC,CAACC,CAAC,IAAM,CACP,GAAIA,EAAE,kBAAoB,EACxB,QAAWC,KAAK,SAAS,iBAAiB,gCAAgC,EACxEA,EAAE,aAAa,aAAc,MAAM,MAGrC,SAAWA,KAAK,SAAS,iBAAiB,gCAAgC,EACxEA,EAAE,gBAAgB,YAAY,CAGpC,EACA,CAAE,UAAW,EAAG,WAAY,GAAG,IAAe,GAAK,KAAM,CAC3D,EACAF,EAAe,QAAQD,CAAc,EAIrC,IAAMI,EAAe,SAAS,cAAc,kBAAkB,EAC9DA,GAAA,MAAAA,EAAc,iBAAiB,WAAYF,GAAK,CArChD,IAAAG,EAsCE,IAAMC,EAASJ,EAAE,QACbI,IAAWF,GAAgBE,IAAWF,EAAa,qBACrDC,EAAA,OAAO,aAAa,IAApB,MAAAA,EAAuB,kBACvB,OAAO,SAAS,CAAE,IAAK,EAAG,SAAU,QAAS,CAAC,EAElD",
+  "names": ["siteHeader", "headerSentinel", "headerObserver", "e", "x", "searchHeader", "_a", "target"]
 }
diff --git a/static/frontend/search/search.min.css b/static/frontend/search/search.min.css
index 7cbe498..295d67f 100644
--- a/static/frontend/search/search.min.css
+++ b/static/frontend/search/search.min.css
@@ -3,5 +3,5 @@
  * Use of this source code is governed by a BSD-style
  * license that can be found in the LICENSE file.
  */
-.go-SearchForm{display:none}.SearchSnippet-sub .go-Chip:hover{background-color:var(--color-background-highlighted)}.SearchResults{font-size:.875rem;padding-top:.75rem}.SearchResults-header{margin:.5rem 0 0}.SearchResults-header[data-fixed]{background-color:var(--color-background-accented);border-bottom:var(--border);height:3.5rem;position:sticky;top:0}.SearchResults-headerContent{align-items:center;display:flex;gap:.5rem;height:100%;margin:auto;max-width:63rem;padding:.5rem var(--gutter)}.SearchResults-headerLogo{--logo-height: 1.75rem;--logo-width: calc(var(--logo-height) / .3768);align-items:center;display:flex;margin-right:-.5rem;opacity:0;transition:opacity .25s ease-in-out,width .25s ease-out;visibility:hidden;width:0}.SearchResults-headerLogo[data-fixed]{margin-right:.5rem;opacity:1;visibility:visible;width:var(--logo-width)}.SearchResults-headerLogo img{height:var(--logo-height);margin:-1rem 0;width:var(--logo-width)}.SearchResults-search{flex-grow:1;max-width:31.5rem}.SearchResults-search:after{right:2.75rem}.SearchResults-tabs{border-bottom:var(--border)}[data-local=true] .SearchResults-tabs{display:none}.SearchResults-tabs nav{margin:auto;max-width:63rem;padding:0 var(--gutter)}.SearchResults-summary{color:var(--color-text-subtle);display:flex;flex-direction:column;gap:1rem;justify-content:space-between;line-height:1.5rem;margin:-.25rem 0 .25rem}@media only screen and (min-width: 64rem){.SearchResults-summary{align-items:baseline;flex-direction:row}}.SearchResults-summary h1{font-size:inherit;font-weight:inherit}.SearchResults-emptyContentMessage{text-align:center}.SearchResults-divider{margin-bottom:2.5rem}.SearchSnippet{display:flex;flex-direction:column;gap:.375rem;padding:0 0 2.75rem}.SearchSnippet h2{font-size:1.25rem;font-weight:400}.SearchSnippet:last-of-type{padding:0 0 1rem}.SearchSnippet-synopsis{-webkit-box-orient:vertical;display:box;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.SearchSnippet-infoLabel{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin-top:-.0625rem}.SearchSnippet-sub{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem}.SearchSnippet-symbolCode{font-size:.75rem;margin:.25rem 0}.SearchSnippet-sub a[data-hidden]{display:none}.SearchSnippet-sub a{color:var(--color-text-subtle)}.SearchSnippet-sub a:hover{color:var(--color-brand-primary)}.SearchSnippet-headerContainer{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem}.SearchSnippet-header-path{color:var(--color-text-subtle)}.SearchSnippet-symbolKind{color:var(--color-text)}.SearchPagination{height:1.5rem}
+.go-SearchForm{display:none}.SearchSnippet-sub .go-Chip:hover{background-color:var(--color-background-highlighted)}.SearchResults{font-size:.875rem;padding-top:.75rem}.SearchResults-header{margin:.5rem 0 0}.SearchResults-header[data-fixed]{background-color:var(--color-background-accented);border-bottom:var(--border);height:3.5rem;position:sticky;top:0}.SearchResults-headerContent{align-items:center;display:flex;gap:.5rem;height:100%;margin:auto;max-width:63rem;padding:.5rem var(--gutter)}.SearchResults-headerLogo{--logo-height: 1.75rem;--logo-width: calc(var(--logo-height) / .3768);align-items:center;display:flex;margin-right:-.5rem;opacity:0;transition:opacity .25s ease-in-out,width .25s ease-out;visibility:hidden;width:0}.SearchResults-headerLogo[data-fixed]{margin-right:.5rem;opacity:1;visibility:visible;width:var(--logo-width)}.SearchResults-headerLogo img{height:var(--logo-height);margin:-1rem 0;width:var(--logo-width)}.SearchResults-search{flex-grow:1;max-width:31.5rem}.SearchResults-search:after{right:2.75rem}.SearchResults-tabs{border-bottom:var(--border)}[data-local=true] .SearchResults-tabs{display:none}.SearchResults-tabs nav{margin:auto;max-width:63rem;padding:0 var(--gutter)}.SearchResults-summary{color:var(--color-text-subtle);display:flex;flex-direction:column;gap:.3rem}@media only screen and (min-width: 64rem){.SearchResults-summary{align-items:baseline;flex-direction:row}}.SearchResults-emptyContentMessage{text-align:center}.SearchResults-divider{margin-bottom:2.5rem}.SearchSnippet{display:flex;flex-direction:column;gap:.375rem;padding:0 0 2.75rem}.SearchSnippet h2{font-size:1.25rem;font-weight:400}.SearchSnippet:last-of-type{padding:0 0 1rem}.SearchSnippet-synopsis{-webkit-box-orient:vertical;display:box;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.SearchSnippet-infoLabel{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin-top:-.0625rem}.SearchSnippet-sub{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem}.SearchSnippet-symbolCode{font-size:.75rem;margin:.25rem 0}.SearchSnippet-sub a[data-hidden]{display:none}.SearchSnippet-sub a{color:var(--color-text-subtle)}.SearchSnippet-sub a:hover{color:var(--color-brand-primary)}.SearchSnippet-headerContainer{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem}.SearchSnippet-header-path{color:var(--color-text-subtle)}.SearchSnippet-symbolKind{color:var(--color-text)}.SearchPagination{height:1.5rem}
 /*# sourceMappingURL=search.min.css.map */
diff --git a/static/frontend/search/search.min.css.map b/static/frontend/search/search.min.css.map
index 22b7c1f..7c4e757 100644
--- a/static/frontend/search/search.min.css.map
+++ b/static/frontend/search/search.min.css.map
@@ -1,7 +1,7 @@
 {
   "version": 3,
   "sources": ["search.css"],
-  "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/* Hide the search form in the header. */\n.go-SearchForm {\n  display: none;\n}\n\n.SearchSnippet-sub .go-Chip:hover {\n  background-color: var(--color-background-highlighted);\n}\n\n.SearchResults {\n  font-size: 0.875rem;\n  padding-top: 0.75rem;\n}\n\n.SearchResults-header {\n  margin: 0.5rem 0 0;\n}\n\n.SearchResults-header[data-fixed] {\n  background-color: var(--color-background-accented);\n  border-bottom: var(--border);\n  height: 3.5rem;\n  position: sticky;\n  top: 0;\n}\n\n.SearchResults-headerContent {\n  align-items: center;\n  display: flex;\n  gap: 0.5rem;\n  height: 100%;\n  margin: auto;\n  max-width: 63rem;\n  padding: 0.5rem var(--gutter);\n}\n\n.SearchResults-headerLogo {\n  --logo-height: 1.75rem;\n  --logo-width: calc(var(--logo-height) / 0.3768);\n\n  align-items: center;\n  display: flex;\n  margin-right: -0.5rem;\n  opacity: 0;\n  transition: opacity 0.25s ease-in-out, width 0.25s ease-out;\n  visibility: hidden;\n  width: 0;\n}\n\n.SearchResults-headerLogo[data-fixed] {\n  margin-right: 0.5rem;\n  opacity: 1;\n  visibility: visible;\n  width: var(--logo-width);\n}\n\n.SearchResults-headerLogo img {\n  height: var(--logo-height);\n  margin: -1rem 0;\n  width: var(--logo-width);\n}\n\n.SearchResults-search {\n  flex-grow: 1;\n  max-width: 31.5rem;\n}\n\n.SearchResults-search::after {\n  right: 2.75rem;\n}\n\n.SearchResults-tabs {\n  border-bottom: var(--border);\n}\n\n[data-local='true'] .SearchResults-tabs {\n  display: none;\n}\n\n.SearchResults-tabs nav {\n  margin: auto;\n  max-width: 63rem;\n  padding: 0 var(--gutter);\n}\n\n.SearchResults-summary {\n  color: var(--color-text-subtle);\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  justify-content: space-between;\n  line-height: 1.5rem;\n  margin: -0.25rem 0 0.25rem;\n}\n@media only screen and (min-width: 64rem) {\n  .SearchResults-summary {\n    align-items: baseline;\n    flex-direction: row;\n  }\n}\n\n.SearchResults-summary h1 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n.SearchResults-emptyContentMessage {\n  text-align: center;\n}\n\n.SearchResults-divider {\n  margin-bottom: 2.5rem;\n}\n\n.SearchSnippet {\n  display: flex;\n  flex-direction: column;\n  gap: 0.375rem;\n  padding: 0 0 2.75rem;\n}\n\n.SearchSnippet h2 {\n  font-size: 1.25rem;\n  font-weight: 400;\n}\n\n.SearchSnippet:last-of-type {\n  padding: 0 0 1rem;\n}\n\n.SearchSnippet-synopsis {\n  -webkit-box-orient: vertical;\n  display: box;\n  -webkit-line-clamp: 2;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.SearchSnippet-infoLabel {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem 1rem;\n  margin-top: -0.0625rem;\n}\n\n.SearchSnippet-sub {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n}\n\n.SearchSnippet-symbolCode {\n  font-size: 0.75rem;\n  margin: 0.25rem 0;\n}\n\n.SearchSnippet-sub a[data-hidden] {\n  display: none;\n}\n\n.SearchSnippet-sub a {\n  color: var(--color-text-subtle);\n}\n\n.SearchSnippet-sub a:hover {\n  color: var(--color-brand-primary);\n}\n\n.SearchSnippet-headerContainer {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n}\n\n.SearchSnippet-header-path {\n  color: var(--color-text-subtle);\n}\n\n.SearchSnippet-symbolKind {\n  color: var(--color-text);\n}\n\n.SearchPagination {\n  height: 1.5rem;\n}\n"],
-  "mappings": ";;;;;AAOA,CAAC,cACC,QAAS,IACX,CAEA,CAAC,kBAAkB,CAAC,OAAO,OACzB,iBAAkB,IAAI,+BACxB,CAEA,CAAC,cACC,UAAW,QACX,YAAa,MACf,CAEA,CAAC,qBApBD,OAqBU,MAAO,EAAE,CACnB,CAEA,CAJC,oBAIoB,CAAC,YACpB,iBAAkB,IAAI,6BACtB,cAAe,IAAI,UACnB,OAAQ,OACR,SAAU,OACV,IAAK,CACP,CAEA,CAAC,4BACC,YAAa,OACb,QAAS,KACT,IAAK,MACL,OAAQ,KApCV,OAqCU,KACR,UAAW,MACX,QAAS,MAAO,IAAI,SACtB,CAEA,CAAC,yBACC,eAAe,QACf,cAAc,KAAK,IAAI,eAAe,EAAE,OAExC,YAAa,OACb,QAAS,KACT,aAAc,OACd,QAAS,EACT,WAAY,QAAQ,KAAM,WAAW,CAAE,MAAM,KAAM,SACnD,WAAY,OACZ,MAAO,CACT,CAEA,CAbC,wBAawB,CAAC,YACxB,aAAc,MACd,QAAS,EACT,WAAY,QACZ,MAAO,IAAI,aACb,CAEA,CApBC,yBAoByB,IACxB,OAAQ,IAAI,eA/Dd,OAgEU,MAAM,EACd,MAAO,IAAI,aACb,CAEA,CAAC,qBACC,UAAW,EACX,UAAW,OACb,CAEA,CALC,oBAKoB,OACnB,MAAO,OACT,CAEA,CAAC,mBACC,cAAe,IAAI,SACrB,CAEA,CAAC,iBAAmB,CAJnB,mBAKC,QAAS,IACX,CAEA,CARC,mBAQmB,IArFpB,OAsFU,KACR,UAAW,MACX,QAAS,EAAE,IAAI,SACjB,CAEA,CAAC,sBACC,MAAO,IAAI,qBACX,QAAS,KACT,eAAgB,OAChB,IAAK,KACL,gBAAiB,cACjB,YAAa,OAjGf,OAkGU,QAAS,EAAE,MACrB,CACA,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,OACjC,CAVD,sBAWG,YAAa,SACb,eAAgB,GAClB,CACF,CAEA,CAhBC,sBAgBsB,GACrB,UAAW,QACX,YAAa,OACf,CAEA,CAAC,kCACC,WAAY,MACd,CAEA,CAAC,sBACC,cAAe,MACjB,CAEA,CAAC,cACC,QAAS,KACT,eAAgB,OAChB,IAAK,QA3HP,QA4HW,EAAE,EAAE,OACf,CAEA,CAPC,cAOc,GACb,UAAW,QACX,YAAa,GACf,CAEA,CAZC,aAYa,cApId,QAqIW,EAAE,EAAE,IACf,CAEA,CAAC,uBACC,mBAAoB,SACpB,QAAS,IACT,mBAAoB,EACpB,SAAU,OACV,cAAe,QACjB,CAEA,CAAC,wBACC,QAAS,KACT,UAAW,KACX,IAAK,MAAO,KACZ,WAAY,SACd,CAEA,CA5IC,kBA6IC,YAAa,OACb,QAAS,KACT,UAAW,KACX,IAAK,KACP,CAEA,CAAC,yBACC,UAAW,OA/Jb,OAgKU,OAAQ,CAClB,CAEA,CAxJC,kBAwJkB,CAAC,CAAC,aACnB,QAAS,IACX,CAEA,CA5JC,kBA4JkB,EACjB,MAAO,IAAI,oBACb,CAEA,CAhKC,kBAgKkB,CAAC,OAClB,MAAO,IAAI,sBACb,CAEA,CAAC,8BACC,YAAa,OACb,QAAS,KACT,UAAW,KACX,IAAK,KACP,CAEA,CAAC,0BACC,MAAO,IAAI,oBACb,CAEA,CAAC,yBACC,MAAO,IAAI,aACb,CAEA,CAAC,iBACC,OAAQ,MACV",
+  "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/* Hide the search form in the header. */\n.go-SearchForm {\n  display: none;\n}\n\n.SearchSnippet-sub .go-Chip:hover {\n  background-color: var(--color-background-highlighted);\n}\n\n.SearchResults {\n  font-size: 0.875rem;\n  padding-top: 0.75rem;\n}\n\n.SearchResults-header {\n  margin: 0.5rem 0 0;\n}\n\n.SearchResults-header[data-fixed] {\n  background-color: var(--color-background-accented);\n  border-bottom: var(--border);\n  height: 3.5rem;\n  position: sticky;\n  top: 0;\n}\n\n.SearchResults-headerContent {\n  align-items: center;\n  display: flex;\n  gap: 0.5rem;\n  height: 100%;\n  margin: auto;\n  max-width: 63rem;\n  padding: 0.5rem var(--gutter);\n}\n\n.SearchResults-headerLogo {\n  --logo-height: 1.75rem;\n  --logo-width: calc(var(--logo-height) / 0.3768);\n\n  align-items: center;\n  display: flex;\n  margin-right: -0.5rem;\n  opacity: 0;\n  transition: opacity 0.25s ease-in-out, width 0.25s ease-out;\n  visibility: hidden;\n  width: 0;\n}\n\n.SearchResults-headerLogo[data-fixed] {\n  margin-right: 0.5rem;\n  opacity: 1;\n  visibility: visible;\n  width: var(--logo-width);\n}\n\n.SearchResults-headerLogo img {\n  height: var(--logo-height);\n  margin: -1rem 0;\n  width: var(--logo-width);\n}\n\n.SearchResults-search {\n  flex-grow: 1;\n  max-width: 31.5rem;\n}\n\n.SearchResults-search::after {\n  right: 2.75rem;\n}\n\n.SearchResults-tabs {\n  border-bottom: var(--border);\n}\n\n[data-local='true'] .SearchResults-tabs {\n  display: none;\n}\n\n.SearchResults-tabs nav {\n  margin: auto;\n  max-width: 63rem;\n  padding: 0 var(--gutter);\n}\n\n.SearchResults-summary {\n  color: var(--color-text-subtle);\n  display: flex;\n  flex-direction: column;\n  gap: 0.3rem;\n}\n@media only screen and (min-width: 64rem) {\n  .SearchResults-summary {\n    align-items: baseline;\n    flex-direction: row;\n  }\n}\n\n.SearchResults-emptyContentMessage {\n  text-align: center;\n}\n\n.SearchResults-divider {\n  margin-bottom: 2.5rem;\n}\n\n.SearchSnippet {\n  display: flex;\n  flex-direction: column;\n  gap: 0.375rem;\n  padding: 0 0 2.75rem;\n}\n\n.SearchSnippet h2 {\n  font-size: 1.25rem;\n  font-weight: 400;\n}\n\n.SearchSnippet:last-of-type {\n  padding: 0 0 1rem;\n}\n\n.SearchSnippet-synopsis {\n  -webkit-box-orient: vertical;\n  display: box;\n  -webkit-line-clamp: 2;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.SearchSnippet-infoLabel {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem 1rem;\n  margin-top: -0.0625rem;\n}\n\n.SearchSnippet-sub {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n}\n\n.SearchSnippet-symbolCode {\n  font-size: 0.75rem;\n  margin: 0.25rem 0;\n}\n\n.SearchSnippet-sub a[data-hidden] {\n  display: none;\n}\n\n.SearchSnippet-sub a {\n  color: var(--color-text-subtle);\n}\n\n.SearchSnippet-sub a:hover {\n  color: var(--color-brand-primary);\n}\n\n.SearchSnippet-headerContainer {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n}\n\n.SearchSnippet-header-path {\n  color: var(--color-text-subtle);\n}\n\n.SearchSnippet-symbolKind {\n  color: var(--color-text);\n}\n\n.SearchPagination {\n  height: 1.5rem;\n}\n"],
+  "mappings": ";;;;;AAOA,eACE,aAGF,kCACE,qDAGF,eACE,kBACA,mBAGF,sBApBA,iBAwBA,kCACE,kDACA,4BACA,cACA,gBACA,MAGF,6BACE,mBACA,aACA,UACA,YApCF,YAsCE,gBACA,4BAGF,0BACE,uBACA,+CAEA,mBACA,aACA,oBACA,UACA,wDACA,kBACA,QAGF,sCACE,mBACA,UACA,mBACA,wBAGF,8BACE,0BA/DF,eAiEE,wBAGF,sBACE,YACA,kBAGF,4BACE,cAGF,oBACE,4BAGF,sCACE,aAGF,wBArFA,YAuFE,gBACA,wBAGF,uBACE,+BACA,aACA,sBACA,UAEF,0CACE,uBACE,qBACA,oBAIJ,mCACE,kBAGF,uBACE,qBAGF,eACE,aACA,sBACA,YAnHF,oBAuHA,kBACE,kBACA,gBAGF,4BA5HA,iBAgIA,wBACE,4BACA,YACA,qBACA,gBACA,uBAGF,yBACE,aACA,eACA,eACA,qBAGF,mBACE,mBACA,aACA,eACA,UAGF,0BACE,iBAvJF,gBA2JA,kCACE,aAGF,qBACE,+BAGF,2BACE,iCAGF,+BACE,mBACA,aACA,eACA,UAGF,2BACE,+BAGF,0BACE,wBAGF,kBACE",
   "names": []
 }
diff --git a/static/frontend/search/search.tmpl b/static/frontend/search/search.tmpl
index 1251ba3..235105b 100644
--- a/static/frontend/search/search.tmpl
+++ b/static/frontend/search/search.tmpl
@@ -40,11 +40,9 @@
 {{end}}
 
 {{define "search_symbol"}}
-  <div class="SearchResults-summary">
-    <h1>
+  <div class="SearchResults-summary" role="heading" aria-level="1">
       Showing <strong>{{len $.Results}}</strong> matching {{.SearchModeSymbol}}s.
       <a href="/search-help">Search help</a>
-    </h1>
   </div>
   {{if eq (len .Results) 0}}
     {{template "search_no_results" .}}
@@ -89,10 +87,8 @@
 {{end}}
 
 {{define "search_package"}}
-  <div class="SearchResults-summary">
-    <h1>
-      Showing <strong>{{len .Results}}</strong> modules with matching packages. <a href="/search-help">Search help</a>
-    </h1>
+  <div class="SearchResults-summary" role="heading" aria-level="1">
+    Showing <strong>{{len .Results}}</strong> modules with matching packages. <a href="/search-help">Search help</a>
   </div>
   {{if eq (len .Results) 0}}
     {{template "search_no_results" .}}
diff --git a/static/frontend/styleguide/styleguide.js b/static/frontend/styleguide/styleguide.js
index c27a51e..1f82f80 100644
--- a/static/frontend/styleguide/styleguide.js
+++ b/static/frontend/styleguide/styleguide.js
@@ -1,4 +1,4 @@
-var d=class{constructor(e){this.el=e;this.setActive=e=>{this.activeIndex=(e+this.slides.length)%this.slides.length,this.el.setAttribute("data-slide-index",String(this.activeIndex));for(let t of this.dots)t.classList.remove("go-Carousel-dot--active");this.dots[this.activeIndex].classList.add("go-Carousel-dot--active");for(let t of this.slides)t.setAttribute("aria-hidden","true");this.slides[this.activeIndex].removeAttribute("aria-hidden"),this.liveRegion.textContent="Slide "+(this.activeIndex+1)+" of "+this.slides.length};this.slides=Array.from(e.querySelectorAll(".go-Carousel-slide")),this.dots=[],this.liveRegion=document.createElement("div"),this.activeIndex=Number(e.getAttribute("data-slide-index")??0),this.initSlides(),this.initArrows(),this.initDots(),this.initLiveRegion()}initSlides(){for(let[e,t]of this.slides.entries())e!==this.activeIndex&&t.setAttribute("aria-hidden","true")}initArrows(){let e=document.createElement("ul");e.classList.add("go-Carousel-arrows"),e.innerHTML=`
+var h=class{constructor(e){this.el=e;this.setActive=e=>{this.activeIndex=(e+this.slides.length)%this.slides.length,this.el.setAttribute("data-slide-index",String(this.activeIndex));for(let t of this.dots)t.classList.remove("go-Carousel-dot--active");this.dots[this.activeIndex].classList.add("go-Carousel-dot--active");for(let t of this.slides)t.setAttribute("aria-hidden","true");this.slides[this.activeIndex].removeAttribute("aria-hidden"),this.liveRegion.textContent="Slide "+(this.activeIndex+1)+" of "+this.slides.length};var t;this.slides=Array.from(e.querySelectorAll(".go-Carousel-slide")),this.dots=[],this.liveRegion=document.createElement("div"),this.activeIndex=Number((t=e.getAttribute("data-slide-index"))!=null?t:0),this.initSlides(),this.initArrows(),this.initDots(),this.initLiveRegion()}initSlides(){for(let[e,t]of this.slides.entries())e!==this.activeIndex&&t.setAttribute("aria-hidden","true")}initArrows(){var t,i;let e=document.createElement("ul");e.classList.add("go-Carousel-arrows"),e.innerHTML=`
       <li>
         <button class="go-Carousel-prevSlide" aria-label="Go to previous slide">
           <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_left_gm_grey_24dp.svg" alt="">
@@ -9,21 +9,21 @@
           <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt="">
         </button>
       </li>
-    `,e.querySelector(".go-Carousel-prevSlide")?.addEventListener("click",()=>this.setActive(this.activeIndex-1)),e.querySelector(".go-Carousel-nextSlide")?.addEventListener("click",()=>this.setActive(this.activeIndex+1)),this.el.append(e)}initDots(){let e=document.createElement("ul");e.classList.add("go-Carousel-dots");for(let t=0;t<this.slides.length;t++){let i=document.createElement("li"),s=document.createElement("button");s.classList.add("go-Carousel-dot"),t===this.activeIndex&&s.classList.add("go-Carousel-dot--active"),s.innerHTML=`<span class="go-Carousel-obscured">Slide ${t+1}</span>`,s.addEventListener("click",()=>this.setActive(t)),i.append(s),e.append(i),this.dots.push(s)}this.el.append(e)}initLiveRegion(){this.liveRegion.setAttribute("aria-live","polite"),this.liveRegion.setAttribute("aria-atomic","true"),this.liveRegion.setAttribute("class","go-Carousel-obscured"),this.liveRegion.textContent=`Slide ${this.activeIndex+1} of ${this.slides.length}`,this.el.appendChild(this.liveRegion)}};var c=class{constructor(e){this.el=e;this.el.addEventListener("change",t=>{let i=t.target,s=i.value;i.value.startsWith("/")||(s="/"+s),window.location.href=s})}};function h(r){let e=document.createElement("label");e.classList.add("go-Label"),e.setAttribute("aria-label","Menu");let t=document.createElement("select");t.classList.add("go-Select","js-selectNav"),e.appendChild(t);let i=document.createElement("optgroup");i.label="Outline",t.appendChild(i);let s={},l;for(let n of r.treeitems){if(Number(n.depth)>4)continue;n.groupTreeitem?(l=s[n.groupTreeitem.label],l||(l=s[n.groupTreeitem.label]=document.createElement("optgroup"),l.label=n.groupTreeitem.label,t.appendChild(l))):l=i;let a=document.createElement("option");a.label=n.label,a.textContent=n.label,a.value=n.el.href.replace(window.location.origin,"").replace("/",""),l.appendChild(a)}return r.addObserver(n=>{let a=n.el.hash,m=t.querySelector(`[value$="${a}"]`)?.value;m&&(t.value=m)},50),e}var o=class{constructor(e){this.el=e;this.handleResize=()=>{this.el.style.setProperty("--js-tree-height","100vh"),this.el.style.setProperty("--js-tree-height",this.el.clientHeight+"px")};this.treeitems=[],this.firstChars=[],this.firstTreeitem=null,this.lastTreeitem=null,this.observerCallbacks=[],this.init()}init(){this.handleResize(),window.addEventListener("resize",this.handleResize),this.findTreeItems(),this.updateVisibleTreeitems(),this.observeTargets(),this.firstTreeitem&&(this.firstTreeitem.el.tabIndex=0)}observeTargets(){this.addObserver(i=>{this.expandTreeitem(i),this.setSelected(i)});let e=new Map,t=new IntersectionObserver(i=>{for(let s of i)e.set(s.target.id,s.isIntersecting||s.intersectionRatio===1);for(let[s,l]of e)if(l){let n=this.treeitems.find(a=>a.el?.href.endsWith(`#${s}`));if(n)for(let a of this.observerCallbacks)a(n);break}},{threshold:1,rootMargin:"-60px 0px 0px 0px"});for(let i of this.treeitems.map(s=>s.el.getAttribute("href")))if(i){let s=i.replace(window.location.origin,"").replace("/","").replace("#",""),l=document.getElementById(s);l&&t.observe(l)}}addObserver(e,t=200){this.observerCallbacks.push(p(e,t))}setFocusToNextItem(e){let t=null;for(let i=e.index+1;i<this.treeitems.length;i++){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToPreviousItem(e){let t=null;for(let i=e.index-1;i>-1;i--){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToParentItem(e){e.groupTreeitem&&this.setFocusToItem(e.groupTreeitem)}setFocusToFirstItem(){this.firstTreeitem&&this.setFocusToItem(this.firstTreeitem)}setFocusToLastItem(){this.lastTreeitem&&this.setFocusToItem(this.lastTreeitem)}setSelected(e){for(let t of this.el.querySelectorAll('[aria-expanded="true"]'))t!==e.el&&(t.nextElementSibling?.contains(e.el)||t.setAttribute("aria-expanded","false"));for(let t of this.el.querySelectorAll("[aria-selected]"))t!==e.el&&t.setAttribute("aria-selected","false");e.el.setAttribute("aria-selected","true"),this.updateVisibleTreeitems(),this.setFocusToItem(e,!1)}expandTreeitem(e){let t=e;for(;t;)t.isExpandable&&t.el.setAttribute("aria-expanded","true"),t=t.groupTreeitem;this.updateVisibleTreeitems()}expandAllSiblingItems(e){for(let t of this.treeitems)t.groupTreeitem===e.groupTreeitem&&t.isExpandable&&this.expandTreeitem(t)}collapseTreeitem(e){let t=null;e.isExpanded()?t=e:t=e.groupTreeitem,t&&(t.el.setAttribute("aria-expanded","false"),this.updateVisibleTreeitems(),this.setFocusToItem(t))}setFocusByFirstCharacter(e,t){let i,s;t=t.toLowerCase(),i=e.index+1,i===this.treeitems.length&&(i=0),s=this.getIndexFirstChars(i,t),s===-1&&(s=this.getIndexFirstChars(0,t)),s>-1&&this.setFocusToItem(this.treeitems[s])}findTreeItems(){let e=(t,i)=>{let s=i,l=t.firstElementChild;for(;l;)(l.tagName==="A"||l.tagName==="SPAN")&&(s=new u(l,this,i),this.treeitems.push(s),this.firstChars.push(s.label.substring(0,1).toLowerCase())),l.firstElementChild&&e(l,s),l=l.nextElementSibling};e(this.el,null),this.treeitems.map((t,i)=>t.index=i)}updateVisibleTreeitems(){this.firstTreeitem=this.treeitems[0];for(let e of this.treeitems){let t=e.groupTreeitem;for(e.isVisible=!0;t&&t.el!==this.el;)t.isExpanded()||(e.isVisible=!1),t=t.groupTreeitem;e.isVisible&&(this.lastTreeitem=e)}}setFocusToItem(e,t=!0){e.el.tabIndex=0,t&&e.el.focus();for(let i of this.treeitems)i!==e&&(i.el.tabIndex=-1)}getIndexFirstChars(e,t){for(let i=e;i<this.firstChars.length;i++)if(this.treeitems[i].isVisible&&t===this.firstChars[i])return i;return-1}},u=class{constructor(e,t,i){e.tabIndex=-1,this.el=e,this.groupTreeitem=i,this.label=e.textContent?.trim()??"",this.tree=t,this.depth=(i?.depth||0)+1,this.index=0;let s=e.parentElement;s?.tagName.toLowerCase()==="li"&&s?.setAttribute("role","none"),e.setAttribute("aria-level",this.depth+""),e.getAttribute("aria-label")&&(this.label=e?.getAttribute("aria-label")?.trim()??""),this.isExpandable=!1,this.isVisible=!1,this.isInGroup=!!i;let l=e.nextElementSibling;for(;l;){if(l.tagName.toLowerCase()=="ul"){let n=`${i?.label??""} nav group ${this.label}`.replace(/[\W_]+/g,"_");e.setAttribute("aria-owns",n),e.setAttribute("aria-expanded","false"),l.setAttribute("role","group"),l.setAttribute("id",n),this.isExpandable=!0;break}l=l.nextElementSibling}this.init()}init(){this.el.tabIndex=-1,this.el.getAttribute("role")||this.el.setAttribute("role","treeitem"),this.el.addEventListener("keydown",this.handleKeydown.bind(this)),this.el.addEventListener("click",this.handleClick.bind(this)),this.el.addEventListener("focus",this.handleFocus.bind(this)),this.el.addEventListener("blur",this.handleBlur.bind(this))}isExpanded(){return this.isExpandable?this.el.getAttribute("aria-expanded")==="true":!1}isSelected(){return this.el.getAttribute("aria-selected")==="true"}handleClick(e){e.target!==this.el&&e.target!==this.el.firstElementChild||(this.isExpandable&&(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),e.stopPropagation()),this.tree.setSelected(this))}handleFocus(){let e=this.el;this.isExpandable&&(e=e.firstElementChild??e),e.classList.add("focus")}handleBlur(){let e=this.el;this.isExpandable&&(e=e.firstElementChild??e),e.classList.remove("focus")}handleKeydown(e){if(e.altKey||e.ctrlKey||e.metaKey)return;let t=!1;switch(e.key){case" ":case"Enter":this.isExpandable?(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),t=!0):e.stopPropagation(),this.tree.setSelected(this);break;case"ArrowUp":this.tree.setFocusToPreviousItem(this),t=!0;break;case"ArrowDown":this.tree.setFocusToNextItem(this),t=!0;break;case"ArrowRight":this.isExpandable&&(this.isExpanded()?this.tree.setFocusToNextItem(this):this.tree.expandTreeitem(this)),t=!0;break;case"ArrowLeft":this.isExpandable&&this.isExpanded()?(this.tree.collapseTreeitem(this),t=!0):this.isInGroup&&(this.tree.setFocusToParentItem(this),t=!0);break;case"Home":this.tree.setFocusToFirstItem(),t=!0;break;case"End":this.tree.setFocusToLastItem(),t=!0;break;default:e.key.length===1&&e.key.match(/\S/)&&(e.key=="*"?this.tree.expandAllSiblingItems(this):this.tree.setFocusByFirstCharacter(this,e.key),t=!0);break}t&&(e.stopPropagation(),e.preventDefault())}};function p(r,e){let t;return(...i)=>{let s=()=>{t=null,r(...i)};t&&clearTimeout(t),t=setTimeout(s,e)}}window.addEventListener("load",()=>{let r=document.querySelector(".js-tree");if(r){let t=new o(r),i=h(t);document.querySelector(".js-mainNavMobile")?.appendChild(i)}let e=document.querySelector(".Outline .js-tree");if(e){let t=new o(e),i=h(t);document.querySelector(".Outline .js-select")?.appendChild(i)}for(let t of document.querySelectorAll(".js-toggleTheme"))t.addEventListener("click",i=>{let s=i.currentTarget.getAttribute("data-value");document.documentElement.setAttribute("data-theme",String(s))});for(let t of document.querySelectorAll(".js-toggleLayout"))t.addEventListener("click",i=>{let s=i.currentTarget.getAttribute("data-value");document.documentElement.setAttribute("data-layout",String(s))});for(let t of document.querySelectorAll(".js-selectNav"))new c(t);for(let t of document.querySelectorAll(".js-carousel"))new d(t)});customElements.define("go-color",class extends HTMLElement{constructor(){super(),this.style.setProperty("display","contents");let r=this.id;this.removeAttribute("id"),this.innerHTML=`
-        <div style="--color: var(${r});" class="GoColor-circle"></div>
+    `,(t=e.querySelector(".go-Carousel-prevSlide"))==null||t.addEventListener("click",()=>this.setActive(this.activeIndex-1)),(i=e.querySelector(".go-Carousel-nextSlide"))==null||i.addEventListener("click",()=>this.setActive(this.activeIndex+1)),this.el.append(e)}initDots(){let e=document.createElement("ul");e.classList.add("go-Carousel-dots");for(let t=0;t<this.slides.length;t++){let i=document.createElement("li"),s=document.createElement("button");s.classList.add("go-Carousel-dot"),t===this.activeIndex&&s.classList.add("go-Carousel-dot--active"),s.innerHTML=`<span class="go-Carousel-obscured">Slide ${t+1}</span>`,s.addEventListener("click",()=>this.setActive(t)),i.append(s),e.append(i),this.dots.push(s)}this.el.append(e)}initLiveRegion(){this.liveRegion.setAttribute("aria-live","polite"),this.liveRegion.setAttribute("aria-atomic","true"),this.liveRegion.setAttribute("class","go-Carousel-obscured"),this.liveRegion.textContent=`Slide ${this.activeIndex+1} of ${this.slides.length}`,this.el.appendChild(this.liveRegion)}};var u=class{constructor(e){this.el=e;this.el.addEventListener("change",t=>{let i=t.target,s=i.value;i.value.startsWith("/")||(s="/"+s),window.location.href=s})}};function m(l){let e=document.createElement("label");e.classList.add("go-Label"),e.setAttribute("aria-label","Menu");let t=document.createElement("select");t.classList.add("go-Select","js-selectNav"),e.appendChild(t);let i=document.createElement("optgroup");i.label="Outline",t.appendChild(i);let s={},r;for(let n of l.treeitems){if(Number(n.depth)>4)continue;n.groupTreeitem?(r=s[n.groupTreeitem.label],r||(r=s[n.groupTreeitem.label]=document.createElement("optgroup"),r.label=n.groupTreeitem.label,t.appendChild(r))):r=i;let a=document.createElement("option");a.label=n.label,a.textContent=n.label,a.value=n.el.href.replace(window.location.origin,"").replace("/",""),r.appendChild(a)}return l.addObserver(n=>{var d;let a=n.el.hash,o=(d=t.querySelector(`[value$="${a}"]`))==null?void 0:d.value;o&&(t.value=o)},50),e}var c=class{constructor(e){this.el=e;this.handleResize=()=>{this.el.style.setProperty("--js-tree-height","100vh"),this.el.style.setProperty("--js-tree-height",this.el.clientHeight+"px")};this.treeitems=[],this.firstChars=[],this.firstTreeitem=null,this.lastTreeitem=null,this.observerCallbacks=[],this.init()}init(){this.handleResize(),window.addEventListener("resize",this.handleResize),this.findTreeItems(),this.updateVisibleTreeitems(),this.observeTargets(),this.firstTreeitem&&(this.firstTreeitem.el.tabIndex=0)}observeTargets(){this.addObserver(i=>{this.expandTreeitem(i),this.setSelected(i)});let e=new Map,t=new IntersectionObserver(i=>{for(let s of i)e.set(s.target.id,s.isIntersecting||s.intersectionRatio===1);for(let[s,r]of e)if(r){let n=this.treeitems.find(a=>{var o;return(o=a.el)==null?void 0:o.href.endsWith(`#${s}`)});if(n)for(let a of this.observerCallbacks)a(n);break}},{threshold:1,rootMargin:"-60px 0px 0px 0px"});for(let i of this.treeitems.map(s=>s.el.getAttribute("href")))if(i){let s=i.replace(window.location.origin,"").replace("/","").replace("#",""),r=document.getElementById(s);r&&t.observe(r)}}addObserver(e,t=200){this.observerCallbacks.push(g(e,t))}setFocusToNextItem(e){let t=null;for(let i=e.index+1;i<this.treeitems.length;i++){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToPreviousItem(e){let t=null;for(let i=e.index-1;i>-1;i--){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToParentItem(e){e.groupTreeitem&&this.setFocusToItem(e.groupTreeitem)}setFocusToFirstItem(){this.firstTreeitem&&this.setFocusToItem(this.firstTreeitem)}setFocusToLastItem(){this.lastTreeitem&&this.setFocusToItem(this.lastTreeitem)}setSelected(e){var t;for(let i of this.el.querySelectorAll('[aria-expanded="true"]'))i!==e.el&&((t=i.nextElementSibling)!=null&&t.contains(e.el)||i.setAttribute("aria-expanded","false"));for(let i of this.el.querySelectorAll("[aria-selected]"))i!==e.el&&i.setAttribute("aria-selected","false");e.el.setAttribute("aria-selected","true"),this.updateVisibleTreeitems(),this.setFocusToItem(e,!1)}expandTreeitem(e){let t=e;for(;t;)t.isExpandable&&t.el.setAttribute("aria-expanded","true"),t=t.groupTreeitem;this.updateVisibleTreeitems()}expandAllSiblingItems(e){for(let t of this.treeitems)t.groupTreeitem===e.groupTreeitem&&t.isExpandable&&this.expandTreeitem(t)}collapseTreeitem(e){let t=null;e.isExpanded()?t=e:t=e.groupTreeitem,t&&(t.el.setAttribute("aria-expanded","false"),this.updateVisibleTreeitems(),this.setFocusToItem(t))}setFocusByFirstCharacter(e,t){let i,s;t=t.toLowerCase(),i=e.index+1,i===this.treeitems.length&&(i=0),s=this.getIndexFirstChars(i,t),s===-1&&(s=this.getIndexFirstChars(0,t)),s>-1&&this.setFocusToItem(this.treeitems[s])}findTreeItems(){let e=(t,i)=>{let s=i,r=t.firstElementChild;for(;r;)(r.tagName==="A"||r.tagName==="SPAN")&&(s=new p(r,this,i),this.treeitems.push(s),this.firstChars.push(s.label.substring(0,1).toLowerCase())),r.firstElementChild&&e(r,s),r=r.nextElementSibling};e(this.el,null),this.treeitems.map((t,i)=>t.index=i)}updateVisibleTreeitems(){this.firstTreeitem=this.treeitems[0];for(let e of this.treeitems){let t=e.groupTreeitem;for(e.isVisible=!0;t&&t.el!==this.el;)t.isExpanded()||(e.isVisible=!1),t=t.groupTreeitem;e.isVisible&&(this.lastTreeitem=e)}}setFocusToItem(e,t=!0){e.el.tabIndex=0,t&&e.el.focus();for(let i of this.treeitems)i!==e&&(i.el.tabIndex=-1)}getIndexFirstChars(e,t){for(let i=e;i<this.firstChars.length;i++)if(this.treeitems[i].isVisible&&t===this.firstChars[i])return i;return-1}},p=class{constructor(e,t,i){var n,a,o,d,f;e.tabIndex=-1,this.el=e,this.groupTreeitem=i,this.label=(a=(n=e.textContent)==null?void 0:n.trim())!=null?a:"",this.tree=t,this.depth=((i==null?void 0:i.depth)||0)+1,this.index=0;let s=e.parentElement;(s==null?void 0:s.tagName.toLowerCase())==="li"&&(s==null||s.setAttribute("role","none")),e.setAttribute("aria-level",this.depth+""),e.getAttribute("aria-label")&&(this.label=(d=(o=e==null?void 0:e.getAttribute("aria-label"))==null?void 0:o.trim())!=null?d:""),this.isExpandable=!1,this.isVisible=!1,this.isInGroup=!!i;let r=e.nextElementSibling;for(;r;){if(r.tagName.toLowerCase()=="ul"){let b=`${(f=i==null?void 0:i.label)!=null?f:""} nav group ${this.label}`.replace(/[\W_]+/g,"_");e.setAttribute("aria-owns",b),e.setAttribute("aria-expanded","false"),r.setAttribute("role","group"),r.setAttribute("id",b),this.isExpandable=!0;break}r=r.nextElementSibling}this.init()}init(){this.el.tabIndex=-1,this.el.getAttribute("role")||this.el.setAttribute("role","treeitem"),this.el.addEventListener("keydown",this.handleKeydown.bind(this)),this.el.addEventListener("click",this.handleClick.bind(this)),this.el.addEventListener("focus",this.handleFocus.bind(this)),this.el.addEventListener("blur",this.handleBlur.bind(this))}isExpanded(){return this.isExpandable?this.el.getAttribute("aria-expanded")==="true":!1}isSelected(){return this.el.getAttribute("aria-selected")==="true"}handleClick(e){e.target!==this.el&&e.target!==this.el.firstElementChild||(this.isExpandable&&(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),e.stopPropagation()),this.tree.setSelected(this))}handleFocus(){var t;let e=this.el;this.isExpandable&&(e=(t=e.firstElementChild)!=null?t:e),e.classList.add("focus")}handleBlur(){var t;let e=this.el;this.isExpandable&&(e=(t=e.firstElementChild)!=null?t:e),e.classList.remove("focus")}handleKeydown(e){if(e.altKey||e.ctrlKey||e.metaKey)return;let t=!1;switch(e.key){case" ":case"Enter":this.isExpandable?(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),t=!0):e.stopPropagation(),this.tree.setSelected(this);break;case"ArrowUp":this.tree.setFocusToPreviousItem(this),t=!0;break;case"ArrowDown":this.tree.setFocusToNextItem(this),t=!0;break;case"ArrowRight":this.isExpandable&&(this.isExpanded()?this.tree.setFocusToNextItem(this):this.tree.expandTreeitem(this)),t=!0;break;case"ArrowLeft":this.isExpandable&&this.isExpanded()?(this.tree.collapseTreeitem(this),t=!0):this.isInGroup&&(this.tree.setFocusToParentItem(this),t=!0);break;case"Home":this.tree.setFocusToFirstItem(),t=!0;break;case"End":this.tree.setFocusToLastItem(),t=!0;break;default:e.key.length===1&&e.key.match(/\S/)&&(e.key=="*"?this.tree.expandAllSiblingItems(this):this.tree.setFocusByFirstCharacter(this,e.key),t=!0);break}t&&(e.stopPropagation(),e.preventDefault())}};function g(l,e){let t;return(...i)=>{let s=()=>{t=null,l(...i)};t&&clearTimeout(t),t=setTimeout(s,e)}}window.addEventListener("load",()=>{var t,i;let l=document.querySelector(".js-tree");if(l){let s=new c(l),r=m(s);(t=document.querySelector(".js-mainNavMobile"))==null||t.appendChild(r)}let e=document.querySelector(".Outline .js-tree");if(e){let s=new c(e),r=m(s);(i=document.querySelector(".Outline .js-select"))==null||i.appendChild(r)}for(let s of document.querySelectorAll(".js-toggleTheme"))s.addEventListener("click",r=>{let n=r.currentTarget.getAttribute("data-value");document.documentElement.setAttribute("data-theme",String(n))});for(let s of document.querySelectorAll(".js-toggleLayout"))s.addEventListener("click",r=>{let n=r.currentTarget.getAttribute("data-value");document.documentElement.setAttribute("data-layout",String(n))});for(let s of document.querySelectorAll(".js-selectNav"))new u(s);for(let s of document.querySelectorAll(".js-carousel"))new h(s)});customElements.define("go-color",class extends HTMLElement{constructor(){var e;super(),this.style.setProperty("display","contents");let l=this.id;this.removeAttribute("id"),this.innerHTML=`
+        <div style="--color: var(${l});" class="GoColor-circle"></div>
         <span>
-          <div id="${r}" class="go-textLabel GoColor-title">${r.replace("--color-","").replaceAll("-"," ")}</div>
-          <pre class="StringifyElement-markup">var(${r})</pre>
+          <div id="${l}" class="go-textLabel GoColor-title">${l.replace("--color-","").replaceAll("-"," ")}</div>
+          <pre class="StringifyElement-markup">var(${l})</pre>
         </span>
-      `,this.querySelector("pre")?.addEventListener("click",()=>{navigator.clipboard.writeText(`var(${r})`)})}});customElements.define("go-icon",class extends HTMLElement{constructor(){super(),this.style.setProperty("display","contents");let r=this.getAttribute("name");this.innerHTML=`<p id="icon-${r}" class="go-textLabel GoIcon-title">${r.replaceAll("_"," ")}</p>
+      `,(e=this.querySelector("pre"))==null||e.addEventListener("click",()=>{navigator.clipboard.writeText(`var(${l})`)})}});customElements.define("go-icon",class extends HTMLElement{constructor(){super(),this.style.setProperty("display","contents");let l=this.getAttribute("name");this.innerHTML=`<p id="icon-${l}" class="go-textLabel GoIcon-title">${l.replaceAll("_"," ")}</p>
         <stringify-el>
-          <img class="go-Icon" height="24" width="24" src="/static/shared/icon/${r}_gm_grey_24dp.svg" alt="">
+          <img class="go-Icon" height="24" width="24" src="/static/shared/icon/${l}_gm_grey_24dp.svg" alt="">
         </stringify-el>
-      `}});customElements.define("clone-el",class extends HTMLElement{constructor(){super(),this.style.setProperty("display","contents");let r=this.getAttribute("selector");if(!r)return;let e="    "+document.querySelector(r)?.outerHTML;this.innerHTML=`
+      `}});customElements.define("clone-el",class extends HTMLElement{constructor(){var t;super(),this.style.setProperty("display","contents");let l=this.getAttribute("selector");if(!l)return;let e="    "+((t=document.querySelector(l))==null?void 0:t.outerHTML);this.innerHTML=`
         <stringify-el collapsed>${e}</stringify-el>
-      `}});customElements.define("stringify-el",class extends HTMLElement{constructor(){super(),this.style.setProperty("display","contents");let r=this.innerHTML,e=this.id?` id="${this.id}"`:"";this.removeAttribute("id");let t='<pre class="StringifyElement-markup">'+b(f(r))+"</pre>";this.hasAttribute("collapsed")&&(t=`<details class="StringifyElement-details"><summary>Markup</summary>${t}</details>`),this.innerHTML=`<span${e}>${r}</span>${t}`,this.querySelector("pre")?.addEventListener("click",()=>{navigator.clipboard.writeText(r)})}});function f(r){return r.split(`
+      `}});customElements.define("stringify-el",class extends HTMLElement{constructor(){var i;super(),this.style.setProperty("display","contents");let l=this.innerHTML,e=this.id?` id="${this.id}"`:"";this.removeAttribute("id");let t='<pre class="StringifyElement-markup">'+v(T(l))+"</pre>";this.hasAttribute("collapsed")&&(t=`<details class="StringifyElement-details"><summary>Markup</summary>${t}</details>`),this.innerHTML=`<span${e}>${l}</span>${t}`,(i=this.querySelector("pre"))==null||i.addEventListener("click",()=>{navigator.clipboard.writeText(l)})}});function T(l){return l.split(`
 `).reduce((e,t)=>{if(e.result.length===0){let i=t.indexOf("<");e.start=i===-1?0:i}return t=t.slice(e.start),t&&e.result.push(t),e},{result:[],start:0}).result.join(`
-`)}function b(r){return r?.replaceAll("<","&lt;")?.replaceAll(">","&gt;")}
+`)}function v(l){var e;return(e=l==null?void 0:l.replaceAll("<","&lt;"))==null?void 0:e.replaceAll(">","&gt;")}
 /**
  * @license
  * Copyright 2021 The Go Authors. All rights reserved.
diff --git a/static/frontend/styleguide/styleguide.js.map b/static/frontend/styleguide/styleguide.js.map
index 8627072..a933ff7 100644
--- a/static/frontend/styleguide/styleguide.js.map
+++ b/static/frontend/styleguide/styleguide.js.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["../../shared/carousel/carousel.ts", "../../shared/outline/select.ts", "../../shared/outline/tree.ts", "styleguide.ts"],
   "sourcesContent": ["/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Carousel Controller adds event listeners, accessibility enhancements, and\n * control elements to a carousel component.\n */\nexport class CarouselController {\n  /**\n   * slides is a collection of slides in the carousel.\n   */\n  private slides: HTMLLIElement[];\n  /**\n   * dots is a collection of dot navigation controls, added to the carousel\n   * by this controller.\n   */\n  private dots: HTMLElement[];\n  /**\n   * liveRegion is a visually hidden element that notifies assitive devices\n   * of visual changes to the carousel. They are added to the carousel by\n   * this controller.\n   */\n  private liveRegion: HTMLElement;\n  /**\n   * activeIndex is the 0-index of the currently active slide.\n   */\n  private activeIndex: number;\n\n  constructor(private el: HTMLElement) {\n    this.slides = Array.from(el.querySelectorAll('.go-Carousel-slide'));\n    this.dots = [];\n    this.liveRegion = document.createElement('div');\n    this.activeIndex = Number(el.getAttribute('data-slide-index') ?? 0);\n\n    this.initSlides();\n    this.initArrows();\n    this.initDots();\n    this.initLiveRegion();\n  }\n\n  private initSlides() {\n    for (const [i, v] of this.slides.entries()) {\n      if (i === this.activeIndex) continue;\n      v.setAttribute('aria-hidden', 'true');\n    }\n  }\n\n  private initArrows() {\n    const arrows = document.createElement('ul');\n    arrows.classList.add('go-Carousel-arrows');\n    arrows.innerHTML = `\n      <li>\n        <button class=\"go-Carousel-prevSlide\" aria-label=\"Go to previous slide\">\n          <img class=\"go-Icon\" height=\"24\" width=\"24\" src=\"/static/shared/icon/arrow_left_gm_grey_24dp.svg\" alt=\"\">\n        </button>\n      </li>\n      <li>\n        <button class=\"go-Carousel-nextSlide\" aria-label=\"Go to next slide\">\n          <img class=\"go-Icon\" height=\"24\" width=\"24\" src=\"/static/shared/icon/arrow_right_gm_grey_24dp.svg\" alt=\"\">\n        </button>\n      </li>\n    `;\n    arrows\n      .querySelector('.go-Carousel-prevSlide')\n      ?.addEventListener('click', () => this.setActive(this.activeIndex - 1));\n    arrows\n      .querySelector('.go-Carousel-nextSlide')\n      ?.addEventListener('click', () => this.setActive(this.activeIndex + 1));\n    this.el.append(arrows);\n  }\n\n  private initDots() {\n    const dots = document.createElement('ul');\n    dots.classList.add('go-Carousel-dots');\n    for (let i = 0; i < this.slides.length; i++) {\n      const li = document.createElement('li');\n      const button = document.createElement('button');\n      button.classList.add('go-Carousel-dot');\n      if (i === this.activeIndex) {\n        button.classList.add('go-Carousel-dot--active');\n      }\n      button.innerHTML = `<span class=\"go-Carousel-obscured\">Slide ${i + 1}</span>`;\n      button.addEventListener('click', () => this.setActive(i));\n      li.append(button);\n      dots.append(li);\n      this.dots.push(button);\n    }\n    this.el.append(dots);\n  }\n\n  private initLiveRegion() {\n    this.liveRegion.setAttribute('aria-live', 'polite');\n    this.liveRegion.setAttribute('aria-atomic', 'true');\n    this.liveRegion.setAttribute('class', 'go-Carousel-obscured');\n    this.liveRegion.textContent = `Slide ${this.activeIndex + 1} of ${this.slides.length}`;\n    this.el.appendChild(this.liveRegion);\n  }\n\n  private setActive = (index: number) => {\n    this.activeIndex = (index + this.slides.length) % this.slides.length;\n    this.el.setAttribute('data-slide-index', String(this.activeIndex));\n    for (const d of this.dots) {\n      d.classList.remove('go-Carousel-dot--active');\n    }\n    this.dots[this.activeIndex].classList.add('go-Carousel-dot--active');\n    for (const s of this.slides) {\n      s.setAttribute('aria-hidden', 'true');\n    }\n    this.slides[this.activeIndex].removeAttribute('aria-hidden');\n    this.liveRegion.textContent = 'Slide ' + (this.activeIndex + 1) + ' of ' + this.slides.length;\n  };\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { TreeNavController } from './tree.js';\n\nexport class SelectNavController {\n  constructor(private el: Element) {\n    this.el.addEventListener('change', e => {\n      const target = e.target as HTMLSelectElement;\n      let href = target.value;\n      if (!target.value.startsWith('/')) {\n        href = '/' + href;\n      }\n      window.location.href = href;\n    });\n  }\n}\n\nexport function makeSelectNav(tree: TreeNavController): HTMLLabelElement {\n  const label = document.createElement('label');\n  label.classList.add('go-Label');\n  label.setAttribute('aria-label', 'Menu');\n  const select = document.createElement('select');\n  select.classList.add('go-Select', 'js-selectNav');\n  label.appendChild(select);\n  const outline = document.createElement('optgroup');\n  outline.label = 'Outline';\n  select.appendChild(outline);\n  const groupMap: Record<string, HTMLOptGroupElement> = {};\n  let group: HTMLOptGroupElement;\n  for (const t of tree.treeitems) {\n    if (Number(t.depth) > 4) continue;\n    if (t.groupTreeitem) {\n      group = groupMap[t.groupTreeitem.label];\n      if (!group) {\n        group = groupMap[t.groupTreeitem.label] = document.createElement('optgroup');\n        group.label = t.groupTreeitem.label;\n        select.appendChild(group);\n      }\n    } else {\n      group = outline;\n    }\n    const o = document.createElement('option');\n    o.label = t.label;\n    o.textContent = t.label;\n    o.value = (t.el as HTMLAnchorElement).href.replace(window.location.origin, '').replace('/', '');\n    group.appendChild(o);\n  }\n  tree.addObserver(t => {\n    const hash = (t.el as HTMLAnchorElement).hash;\n    const value = select.querySelector<HTMLOptionElement>(`[value$=\"${hash}\"]`)?.value;\n    if (value) {\n      select.value = value;\n    }\n  }, 50);\n  return label;\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * TreeNavController is the navigation tree component of the documentation page.\n * It adds accessiblity attributes to a tree, observes the heading elements\n * focus the topmost link for headings visible on the page, and implements the\n * WAI-ARIA Treeview Design Pattern with full\n * [keyboard support](https://www.w3.org/TR/wai-aria-practices/examples/treeview/treeview-2/treeview-2a.html#kbd_label).\n */\nexport class TreeNavController {\n  treeitems: TreeItem[];\n\n  /**\n   * firstChars is the first character of each treeitem in the same order\n   * as this.treeitems. We use this array to set focus by character when\n   * navigating the tree with a keyboard.\n   */\n  private firstChars: string[];\n  private firstTreeitem: TreeItem | null;\n  private lastTreeitem: TreeItem | null;\n  private observerCallbacks: ((t: TreeItem) => void)[];\n\n  constructor(private el: HTMLElement) {\n    this.treeitems = [];\n    this.firstChars = [];\n    this.firstTreeitem = null;\n    this.lastTreeitem = null;\n    this.observerCallbacks = [];\n    this.init();\n  }\n\n  private init(): void {\n    this.handleResize();\n    window.addEventListener('resize', this.handleResize);\n    this.findTreeItems();\n    this.updateVisibleTreeitems();\n    this.observeTargets();\n    if (this.firstTreeitem) {\n      this.firstTreeitem.el.tabIndex = 0;\n    }\n  }\n\n  private handleResize = (): void => {\n    this.el.style.setProperty('--js-tree-height', '100vh');\n    this.el.style.setProperty('--js-tree-height', this.el.clientHeight + 'px');\n  };\n\n  private observeTargets() {\n    this.addObserver(treeitem => {\n      this.expandTreeitem(treeitem);\n      this.setSelected(treeitem);\n      // TODO: Fix scroll issue in https://golang.org/issue/47450.\n      // treeitem.el.scrollIntoView({ block: 'nearest' });\n    });\n\n    const targets = new Map<string, boolean>();\n    const observer = new IntersectionObserver(\n      entries => {\n        for (const entry of entries) {\n          targets.set(entry.target.id, entry.isIntersecting || entry.intersectionRatio === 1);\n        }\n        for (const [id, isIntersecting] of targets) {\n          if (isIntersecting) {\n            const active = this.treeitems.find(t =>\n              (t.el as HTMLAnchorElement)?.href.endsWith(`#${id}`)\n            );\n            if (active) {\n              for (const fn of this.observerCallbacks) {\n                fn(active);\n              }\n            }\n            break;\n          }\n        }\n      },\n      {\n        threshold: 1.0,\n        rootMargin: '-60px 0px 0px 0px',\n      }\n    );\n\n    for (const href of this.treeitems.map(t => t.el.getAttribute('href'))) {\n      if (href) {\n        const id = href.replace(window.location.origin, '').replace('/', '').replace('#', '');\n        const target = document.getElementById(id);\n        if (target) {\n          observer.observe(target);\n        }\n      }\n    }\n  }\n\n  addObserver(fn: (t: TreeItem) => void, delay = 200): void {\n    this.observerCallbacks.push(debounce(fn, delay));\n  }\n\n  setFocusToNextItem(currentItem: TreeItem): void {\n    let nextItem = null;\n    for (let i = currentItem.index + 1; i < this.treeitems.length; i++) {\n      const ti = this.treeitems[i];\n      if (ti.isVisible) {\n        nextItem = ti;\n        break;\n      }\n    }\n    if (nextItem) {\n      this.setFocusToItem(nextItem);\n    }\n  }\n\n  setFocusToPreviousItem(currentItem: TreeItem): void {\n    let prevItem = null;\n    for (let i = currentItem.index - 1; i > -1; i--) {\n      const ti = this.treeitems[i];\n      if (ti.isVisible) {\n        prevItem = ti;\n        break;\n      }\n    }\n    if (prevItem) {\n      this.setFocusToItem(prevItem);\n    }\n  }\n\n  setFocusToParentItem(currentItem: TreeItem): void {\n    if (currentItem.groupTreeitem) {\n      this.setFocusToItem(currentItem.groupTreeitem);\n    }\n  }\n\n  setFocusToFirstItem(): void {\n    this.firstTreeitem && this.setFocusToItem(this.firstTreeitem);\n  }\n\n  setFocusToLastItem(): void {\n    this.lastTreeitem && this.setFocusToItem(this.lastTreeitem);\n  }\n\n  setSelected(currentItem: TreeItem): void {\n    for (const l1 of this.el.querySelectorAll('[aria-expanded=\"true\"]')) {\n      if (l1 === currentItem.el) continue;\n      if (!l1.nextElementSibling?.contains(currentItem.el)) {\n        l1.setAttribute('aria-expanded', 'false');\n      }\n    }\n    for (const l1 of this.el.querySelectorAll('[aria-selected]')) {\n      if (l1 !== currentItem.el) {\n        l1.setAttribute('aria-selected', 'false');\n      }\n    }\n    currentItem.el.setAttribute('aria-selected', 'true');\n    this.updateVisibleTreeitems();\n    this.setFocusToItem(currentItem, false);\n  }\n\n  expandTreeitem(treeitem: TreeItem): void {\n    let currentItem: TreeItem | null = treeitem;\n    while (currentItem) {\n      if (currentItem.isExpandable) {\n        currentItem.el.setAttribute('aria-expanded', 'true');\n      }\n      currentItem = currentItem.groupTreeitem;\n    }\n    this.updateVisibleTreeitems();\n  }\n\n  expandAllSiblingItems(currentItem: TreeItem): void {\n    for (const ti of this.treeitems) {\n      if (ti.groupTreeitem === currentItem.groupTreeitem && ti.isExpandable) {\n        this.expandTreeitem(ti);\n      }\n    }\n  }\n\n  collapseTreeitem(currentItem: TreeItem): void {\n    let groupTreeitem = null;\n\n    if (currentItem.isExpanded()) {\n      groupTreeitem = currentItem;\n    } else {\n      groupTreeitem = currentItem.groupTreeitem;\n    }\n\n    if (groupTreeitem) {\n      groupTreeitem.el.setAttribute('aria-expanded', 'false');\n      this.updateVisibleTreeitems();\n      this.setFocusToItem(groupTreeitem);\n    }\n  }\n\n  setFocusByFirstCharacter(currentItem: TreeItem, char: string): void {\n    let start: number, index: number;\n    char = char.toLowerCase();\n\n    // Get start index for search based on position of currentItem\n    start = currentItem.index + 1;\n    if (start === this.treeitems.length) {\n      start = 0;\n    }\n\n    // Check remaining slots in the menu\n    index = this.getIndexFirstChars(start, char);\n\n    // If not found in remaining slots, check from beginning\n    if (index === -1) {\n      index = this.getIndexFirstChars(0, char);\n    }\n\n    // If match was found...\n    if (index > -1) {\n      this.setFocusToItem(this.treeitems[index]);\n    }\n  }\n\n  private findTreeItems() {\n    const findItems = (el: HTMLElement, group: TreeItem | null) => {\n      let ti = group;\n      let curr = el.firstElementChild as HTMLElement;\n      while (curr) {\n        if (curr.tagName === 'A' || curr.tagName === 'SPAN') {\n          ti = new TreeItem(curr, this, group);\n          this.treeitems.push(ti);\n          this.firstChars.push(ti.label.substring(0, 1).toLowerCase());\n        }\n        if (curr.firstElementChild) {\n          findItems(curr, ti);\n        }\n        curr = curr.nextElementSibling as HTMLElement;\n      }\n    };\n    findItems(this.el as HTMLElement, null);\n    this.treeitems.map((ti, idx) => (ti.index = idx));\n  }\n\n  private updateVisibleTreeitems(): void {\n    this.firstTreeitem = this.treeitems[0];\n\n    for (const ti of this.treeitems) {\n      let parent = ti.groupTreeitem;\n      ti.isVisible = true;\n      while (parent && parent.el !== this.el) {\n        if (!parent.isExpanded()) {\n          ti.isVisible = false;\n        }\n        parent = parent.groupTreeitem;\n      }\n      if (ti.isVisible) {\n        this.lastTreeitem = ti;\n      }\n    }\n  }\n\n  private setFocusToItem(treeitem: TreeItem, focusEl = true) {\n    treeitem.el.tabIndex = 0;\n    if (focusEl) {\n      treeitem.el.focus();\n    }\n    for (const ti of this.treeitems) {\n      if (ti !== treeitem) {\n        ti.el.tabIndex = -1;\n      }\n    }\n  }\n\n  private getIndexFirstChars(startIndex: number, char: string): number {\n    for (let i = startIndex; i < this.firstChars.length; i++) {\n      if (this.treeitems[i].isVisible && char === this.firstChars[i]) {\n        return i;\n      }\n    }\n    return -1;\n  }\n}\n\nclass TreeItem {\n  el: HTMLElement;\n  groupTreeitem: TreeItem | null;\n  label: string;\n  isExpandable: boolean;\n  isVisible: boolean;\n  depth: number;\n  index: number;\n\n  private tree: TreeNavController;\n  private isInGroup: boolean;\n\n  constructor(el: HTMLElement, treeObj: TreeNavController, group: TreeItem | null) {\n    el.tabIndex = -1;\n    this.el = el;\n    this.groupTreeitem = group;\n    this.label = el.textContent?.trim() ?? '';\n    this.tree = treeObj;\n    this.depth = (group?.depth || 0) + 1;\n    this.index = 0;\n\n    const parent = el.parentElement;\n    if (parent?.tagName.toLowerCase() === 'li') {\n      parent?.setAttribute('role', 'none');\n    }\n    el.setAttribute('aria-level', this.depth + '');\n    if (el.getAttribute('aria-label')) {\n      this.label = el?.getAttribute('aria-label')?.trim() ?? '';\n    }\n\n    this.isExpandable = false;\n    this.isVisible = false;\n    this.isInGroup = !!group;\n\n    let curr = el.nextElementSibling;\n    while (curr) {\n      if (curr.tagName.toLowerCase() == 'ul') {\n        const groupId = `${group?.label ?? ''} nav group ${this.label}`.replace(/[\\W_]+/g, '_');\n        el.setAttribute('aria-owns', groupId);\n        el.setAttribute('aria-expanded', 'false');\n        curr.setAttribute('role', 'group');\n        curr.setAttribute('id', groupId);\n        this.isExpandable = true;\n        break;\n      }\n\n      curr = curr.nextElementSibling;\n    }\n    this.init();\n  }\n\n  private init() {\n    this.el.tabIndex = -1;\n    if (!this.el.getAttribute('role')) {\n      this.el.setAttribute('role', 'treeitem');\n    }\n    this.el.addEventListener('keydown', this.handleKeydown.bind(this));\n    this.el.addEventListener('click', this.handleClick.bind(this));\n    this.el.addEventListener('focus', this.handleFocus.bind(this));\n    this.el.addEventListener('blur', this.handleBlur.bind(this));\n  }\n\n  isExpanded() {\n    if (this.isExpandable) {\n      return this.el.getAttribute('aria-expanded') === 'true';\n    }\n\n    return false;\n  }\n\n  isSelected() {\n    return this.el.getAttribute('aria-selected') === 'true';\n  }\n\n  private handleClick(event: MouseEvent) {\n    // only process click events that directly happened on this treeitem\n    if (event.target !== this.el && event.target !== this.el.firstElementChild) {\n      return;\n    }\n    if (this.isExpandable) {\n      if (this.isExpanded() && this.isSelected()) {\n        this.tree.collapseTreeitem(this);\n      } else {\n        this.tree.expandTreeitem(this);\n      }\n      event.stopPropagation();\n    }\n    this.tree.setSelected(this);\n  }\n\n  private handleFocus() {\n    let el = this.el;\n    if (this.isExpandable) {\n      el = (el.firstElementChild as HTMLElement) ?? el;\n    }\n    el.classList.add('focus');\n  }\n\n  private handleBlur() {\n    let el = this.el;\n    if (this.isExpandable) {\n      el = (el.firstElementChild as HTMLElement) ?? el;\n    }\n    el.classList.remove('focus');\n  }\n\n  private handleKeydown(event: KeyboardEvent) {\n    if (event.altKey || event.ctrlKey || event.metaKey) {\n      return;\n    }\n\n    let captured = false;\n    switch (event.key) {\n      case ' ':\n      case 'Enter':\n        if (this.isExpandable) {\n          if (this.isExpanded() && this.isSelected()) {\n            this.tree.collapseTreeitem(this);\n          } else {\n            this.tree.expandTreeitem(this);\n          }\n          captured = true;\n        } else {\n          event.stopPropagation();\n        }\n        this.tree.setSelected(this);\n        break;\n\n      case 'ArrowUp':\n        this.tree.setFocusToPreviousItem(this);\n        captured = true;\n        break;\n\n      case 'ArrowDown':\n        this.tree.setFocusToNextItem(this);\n        captured = true;\n        break;\n\n      case 'ArrowRight':\n        if (this.isExpandable) {\n          if (this.isExpanded()) {\n            this.tree.setFocusToNextItem(this);\n          } else {\n            this.tree.expandTreeitem(this);\n          }\n        }\n        captured = true;\n        break;\n\n      case 'ArrowLeft':\n        if (this.isExpandable && this.isExpanded()) {\n          this.tree.collapseTreeitem(this);\n          captured = true;\n        } else {\n          if (this.isInGroup) {\n            this.tree.setFocusToParentItem(this);\n            captured = true;\n          }\n        }\n        break;\n\n      case 'Home':\n        this.tree.setFocusToFirstItem();\n        captured = true;\n        break;\n\n      case 'End':\n        this.tree.setFocusToLastItem();\n        captured = true;\n        break;\n\n      default:\n        if (event.key.length === 1 && event.key.match(/\\S/)) {\n          if (event.key == '*') {\n            this.tree.expandAllSiblingItems(this);\n          } else {\n            this.tree.setFocusByFirstCharacter(this, event.key);\n          }\n          captured = true;\n        }\n        break;\n    }\n\n    if (captured) {\n      event.stopPropagation();\n      event.preventDefault();\n    }\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction debounce<T extends (...args: any[]) => any>(func: T, wait: number) {\n  let timeout: ReturnType<typeof setTimeout> | null;\n  return (...args: Parameters<T>) => {\n    const later = () => {\n      timeout = null;\n      func(...args);\n    };\n    if (timeout) {\n      clearTimeout(timeout);\n    }\n    timeout = setTimeout(later, wait);\n  };\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { CarouselController } from '../../shared/carousel/carousel';\nimport { SelectNavController, makeSelectNav } from '../../shared/outline/select';\nimport { TreeNavController } from '../../shared/outline/tree';\n\nwindow.addEventListener('load', () => {\n  const tree = document.querySelector<HTMLElement>('.js-tree');\n  if (tree) {\n    const treeCtrl = new TreeNavController(tree);\n    const select = makeSelectNav(treeCtrl);\n    document.querySelector('.js-mainNavMobile')?.appendChild(select);\n  }\n\n  const guideTree = document.querySelector<HTMLElement>('.Outline .js-tree');\n  if (guideTree) {\n    const treeCtrl = new TreeNavController(guideTree);\n    const select = makeSelectNav(treeCtrl);\n    document.querySelector('.Outline .js-select')?.appendChild(select);\n  }\n\n  for (const el of document.querySelectorAll('.js-toggleTheme')) {\n    el.addEventListener('click', e => {\n      const value = (e.currentTarget as HTMLButtonElement).getAttribute('data-value');\n      document.documentElement.setAttribute('data-theme', String(value));\n    });\n  }\n  for (const el of document.querySelectorAll('.js-toggleLayout')) {\n    el.addEventListener('click', e => {\n      const value = (e.currentTarget as HTMLButtonElement).getAttribute('data-value');\n      document.documentElement.setAttribute('data-layout', String(value));\n    });\n  }\n\n  for (const el of document.querySelectorAll<HTMLSelectElement>('.js-selectNav')) {\n    new SelectNavController(el);\n  }\n\n  for (const el of document.querySelectorAll<HTMLSelectElement>('.js-carousel')) {\n    new CarouselController(el);\n  }\n});\n\ncustomElements.define(\n  'go-color',\n  class extends HTMLElement {\n    constructor() {\n      super();\n      this.style.setProperty('display', 'contents');\n      // The current version of TypeScript is not aware of String.replaceAll.\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const name = this.id as any;\n      this.removeAttribute('id');\n      this.innerHTML = `\n        <div style=\"--color: var(${name});\" class=\"GoColor-circle\"></div>\n        <span>\n          <div id=\"${name}\" class=\"go-textLabel GoColor-title\">${name\n        .replace('--color-', '')\n        .replaceAll('-', ' ')}</div>\n          <pre class=\"StringifyElement-markup\">var(${name})</pre>\n        </span>\n      `;\n      this.querySelector('pre')?.addEventListener('click', () => {\n        navigator.clipboard.writeText(`var(${name})`);\n      });\n    }\n  }\n);\n\ncustomElements.define(\n  'go-icon',\n  class extends HTMLElement {\n    constructor() {\n      super();\n      this.style.setProperty('display', 'contents');\n      // The current version of TypeScript is not aware of String.replaceAll.\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const name = this.getAttribute('name') as any;\n      this.innerHTML = `<p id=\"icon-${name}\" class=\"go-textLabel GoIcon-title\">${name.replaceAll(\n        '_',\n        ' '\n      )}</p>\n        <stringify-el>\n          <img class=\"go-Icon\" height=\"24\" width=\"24\" src=\"/static/shared/icon/${name}_gm_grey_24dp.svg\" alt=\"\">\n        </stringify-el>\n      `;\n    }\n  }\n);\n\ncustomElements.define(\n  'clone-el',\n  class extends HTMLElement {\n    constructor() {\n      super();\n      this.style.setProperty('display', 'contents');\n      const selector = this.getAttribute('selector');\n      if (!selector) return;\n      const html = '    ' + document.querySelector(selector)?.outerHTML;\n      this.innerHTML = `\n        <stringify-el collapsed>${html}</stringify-el>\n      `;\n    }\n  }\n);\n\ncustomElements.define(\n  'stringify-el',\n  class extends HTMLElement {\n    constructor() {\n      super();\n      this.style.setProperty('display', 'contents');\n      const html = this.innerHTML;\n      const idAttr = this.id ? ` id=\"${this.id}\"` : '';\n      this.removeAttribute('id');\n      let markup = `<pre class=\"StringifyElement-markup\">` + escape(trim(html)) + `</pre>`;\n      if (this.hasAttribute('collapsed')) {\n        markup = `<details class=\"StringifyElement-details\"><summary>Markup</summary>${markup}</details>`;\n      }\n      this.innerHTML = `<span${idAttr}>${html}</span>${markup}`;\n      this.querySelector('pre')?.addEventListener('click', () => {\n        navigator.clipboard.writeText(html);\n      });\n    }\n  }\n);\n\n/**\n * trim removes excess indentation from html markup by\n * measuring the number of spaces in the first line of\n * the given string and removing that number of spaces\n * from the beginning of each line.\n */\nfunction trim(html: string) {\n  return html\n    .split('\\n')\n    .reduce<{ result: string[]; start: number }>(\n      (acc, val) => {\n        if (acc.result.length === 0) {\n          const start = val.indexOf('<');\n          acc.start = start === -1 ? 0 : start;\n        }\n        val = val.slice(acc.start);\n        if (val) {\n          acc.result.push(val);\n        }\n        return acc;\n      },\n      { result: [], start: 0 }\n    )\n    .result.join('\\n');\n}\n\nfunction escape(html: string) {\n  // The current version of TypeScript is not aware of String.replaceAll.\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return (html as any)?.replaceAll('<', '&lt;')?.replaceAll('>', '&gt;');\n}\n"],
-  "mappings": "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",
-  "names": ["CarouselController", "el", "index", "d", "s", "i", "v", "arrows", "dots", "li", "button", "SelectNavController", "el", "e", "target", "href", "makeSelectNav", "tree", "label", "select", "outline", "groupMap", "group", "t", "o", "hash", "value", "TreeNavController", "el", "treeitem", "targets", "observer", "entries", "entry", "id", "isIntersecting", "active", "t", "fn", "href", "target", "delay", "debounce", "currentItem", "nextItem", "ti", "prevItem", "l1", "groupTreeitem", "char", "start", "index", "findItems", "group", "curr", "TreeItem", "idx", "parent", "focusEl", "startIndex", "treeObj", "groupId", "event", "captured", "func", "wait", "timeout", "args", "later", "tree", "treeCtrl", "TreeNavController", "select", "makeSelectNav", "guideTree", "el", "e", "value", "SelectNavController", "CarouselController", "name", "selector", "html", "idAttr", "markup", "escape", "trim", "acc", "val", "start"]
+  "mappings": "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",
+  "names": ["CarouselController", "el", "index", "d", "s", "_a", "i", "v", "_b", "arrows", "dots", "li", "button", "SelectNavController", "el", "e", "target", "href", "makeSelectNav", "tree", "label", "select", "outline", "groupMap", "group", "t", "o", "_a", "hash", "value", "TreeNavController", "el", "treeitem", "targets", "observer", "entries", "entry", "id", "isIntersecting", "active", "t", "_a", "fn", "href", "target", "delay", "debounce", "currentItem", "nextItem", "ti", "prevItem", "l1", "groupTreeitem", "char", "start", "index", "findItems", "group", "curr", "TreeItem", "idx", "parent", "focusEl", "startIndex", "treeObj", "_b", "_c", "_d", "_e", "groupId", "event", "captured", "func", "wait", "timeout", "args", "later", "_a", "_b", "tree", "treeCtrl", "TreeNavController", "select", "makeSelectNav", "guideTree", "el", "e", "value", "SelectNavController", "CarouselController", "name", "selector", "html", "idAttr", "markup", "escape", "trim", "acc", "val", "start"]
 }
diff --git a/static/frontend/styleguide/styleguide.min.css.map b/static/frontend/styleguide/styleguide.min.css.map
index 4c26a35..ea84cfa 100644
--- a/static/frontend/styleguide/styleguide.min.css.map
+++ b/static/frontend/styleguide/styleguide.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["../unit/main/_meta.css", "styleguide.css"],
   "sourcesContent": ["/*!\n* Copyright 2019-2020 The Go Authors. All rights reserved.\n* Use of this source code is governed by a BSD-style\n* license that can be found in the LICENSE file.\n*/\n\n.UnitMeta {\n  display: grid;\n  gap: 1rem 2rem;\n  grid-template-columns: max-content auto;\n  white-space: nowrap;\n}\n\n.UnitMeta-details,\n.UnitMeta-links {\n  display: flex;\n  flex-flow: wrap;\n  flex-direction: row;\n  gap: 1rem 2rem;\n}\n\n.UnitMeta-repo {\n  align-items: center;\n  display: flex;\n  overflow: hidden;\n}\n\n.UnitMeta-repo a {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n@media (min-width: 50rem) {\n  .UnitMeta {\n    grid-template-columns: max-content auto;\n  }\n\n  .UnitMeta-details,\n  .UnitMeta-links {\n    flex-direction: row;\n  }\n}\n@media (min-width: 112rem) {\n  :root[data-layout='responsive'] .UnitMeta {\n    grid-template-columns: 100%;\n  }\n\n  :root[data-layout='responsive'] .UnitMeta-details,\n  :root[data-layout='responsive'] .UnitMeta-links {\n    flex-direction: column;\n    white-space: nowrap;\n  }\n}\n\n.UnitMeta-detailsLearn {\n  width: 100%;\n}\n@media (min-width: 50rem) {\n  .UnitMeta-detailsLearn {\n    width: initial;\n  }\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n@import url('../unit/main/_meta.css');\n\n.StyleGuide {\n  background-color: var(--color-background);\n}\n\n.StyleGuide > section {\n  align-items: center;\n  display: grid;\n  gap: 1rem 2rem;\n  grid-template-columns: 100%;\n  margin-bottom: 1rem;\n}\n\n.StyleGuide > section > header {\n  border-bottom: var(--border);\n  grid-column: 1/-1;\n  margin-bottom: 1rem;\n  padding-bottom: 1rem;\n}\n\n.StyleGuide > section > h2 {\n  grid-column: 1/-1;\n  width: max-content;\n}\n\n.StyleGuide > section > hr {\n  grid-column: 1/-1;\n}\n\n.StyleGuide > section > h3 {\n  grid-column: 1/-1;\n  margin: 1rem 0;\n}\n\n.StyleGuide > section > p {\n  grid-column: 1/-1;\n}\n\n.StyleGuide .Color,\n.StyleGuide .ColorIntent {\n  grid-template-columns: repeat(auto-fit, 5rem [col-start] minmax(12rem, auto) [col-end]);\n}\n\n.StyleGuide .Outline {\n  align-items: flex-start;\n}\n\n.StyleGuide .Outline > span {\n  margin-top: 0.5rem;\n}\n@media (min-width: 80rem) {\n  .StyleGuide .Icon {\n    grid-template-columns: 10rem 8rem auto;\n  }\n\n  .StyleGuide .Typography,\n  .StyleGuide .Button,\n  .StyleGuide .Carousel,\n  .StyleGuide .Form,\n  .StyleGuide .Modal,\n  .StyleGuide .Message,\n  .StyleGuide .Breadcrumb,\n  .StyleGuide .Chip,\n  .StyleGuide .Tooltip,\n  .StyleGuide .Outline,\n  .StyleGuide .Clipboard {\n    grid-template-columns: 20rem auto;\n  }\n}\n@media (min-width: 112rem) {\n  .StyleGuide .Icon {\n    grid-template-columns: 10rem auto 50%;\n  }\n\n  .StyleGuide .Typography,\n  .StyleGuide .Button,\n  .StyleGuide .Carousel,\n  .StyleGuide .Form,\n  .StyleGuide .Modal,\n  .StyleGuide .Message,\n  .StyleGuide .Breadcrumb,\n  .StyleGuide .Chip,\n  .StyleGuide .Tooltip,\n  .StyleGuide .Outline,\n  .StyleGuide .Clipboard {\n    grid-template-columns: auto 50%;\n  }\n}\n\n.StringifyElement {\n  align-items: baseline;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  padding: 0.25rem;\n}\n\n.ElementMarkup > pre,\n.StringifyElement-markup {\n  color: var(--color-text-subtle);\n  font-size: 0.875rem;\n  margin-top: 0.5rem;\n  max-width: 100%;\n  padding-left: 2rem;\n  position: relative;\n}\n\n.ElementMarkup > pre::before,\n.StringifyElement-markup::before {\n  background: url('/static/shared/icon/content_copy_gm_grey_24dp.svg');\n  background-repeat: no-repeat;\n  background-size: contain;\n  content: ' ';\n  left: 0.5rem;\n  padding-left: 1rem;\n  position: absolute;\n  width: 1rem;\n}\n\n.StringifyElement-markup:active {\n  filter: contrast(0.9);\n}\n\n.StringifyElement-details {\n  color: var(--color-text-subtle);\n  font-size: 0.8125rem;\n  overflow-x: auto;\n}\n\n.GoColor-circle {\n  background-color: var(--color);\n  border: var(--border);\n  border-radius: 2rem;\n  height: 3rem;\n  margin: auto;\n  margin-bottom: 0.5rem;\n  width: 3rem;\n}\n\n.GoIcon-title,\n.GoColor-title {\n  text-transform: capitalize;\n}\n\n.go-Main-navDesktop a + ul {\n  text-transform: capitalize;\n}\n\n.MainHeader-toggle {\n  display: flex;\n}\n"],
-  "mappings": "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",
+  "mappings": ";;;;;AAMA,UACE,aACA,cACA,uCACA,mBAGF,kCAEE,aACA,eACA,mBACA,cAGF,eACE,mBACA,aACA,gBAGF,iBACE,gBACA,uBAEF,0BACE,UACE,uCAGF,kCAEE,oBAGJ,2BACE,wCACE,2BAGF,8FAEE,sBACA,oBAIJ,uBACE,WAEF,0BACE,uBACE,eClDJ,YACE,yCAGF,oBACE,mBACA,aACA,cACA,2BACA,mBAGF,2BACE,4BACA,iBACA,mBACA,oBAGF,uBACE,iBACA,kBAGF,uBACE,iBAGF,uBACE,iBArCF,cAyCA,sBACE,iBAGF,4CAEE,qFAGF,qBACE,uBAGF,0BACE,iBAEF,0BACE,kBACE,sCAGF,uOAWE,kCAGJ,2BACE,kBACE,qCAGF,uOAWE,gCAIJ,kBACE,qBACA,aACA,sBACA,SApGF,eAwGA,4CAEE,+BACA,kBACA,iBACA,eACA,kBACA,kBAGF,0DAEE,kEACA,4BACA,wBACA,YACA,WACA,kBACA,kBACA,WAGF,gCACE,oBAGF,0BACE,+BACA,mBACA,gBAGF,gBACE,8BACA,qBA1IF,mBA4IE,YA5IF,YA8IE,oBACA,WAGF,6BAEE,0BAGF,yBACE,0BAGF,mBACE",
   "names": []
 }
diff --git a/static/frontend/subrepo/subrepo.min.css.map b/static/frontend/subrepo/subrepo.min.css.map
index 4aad82e..20d1a64 100644
--- a/static/frontend/subrepo/subrepo.min.css.map
+++ b/static/frontend/subrepo/subrepo.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["subrepo.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.SubRepo-links {\n  line-height: 1.5rem;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,cACC,YAAa,MACf",
+  "mappings": ";;;;;AAMA,eACE",
   "names": []
 }
diff --git a/static/frontend/unit/importedby/importedby.min.css.map b/static/frontend/unit/importedby/importedby.min.css.map
index 9e5cb9d..ea88528 100644
--- a/static/frontend/unit/importedby/importedby.min.css.map
+++ b/static/frontend/unit/importedby/importedby.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["importedby.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.ImportedBy-heading {\n  margin-bottom: 1rem;\n}\n\n.ImportedBy-list {\n  list-style: none;\n  padding: 0;\n}\n\n.ImportedBy .Pagination-nav,\n.ImportedBy .Pagination-navInner {\n  justify-content: flex-start;\n}\n\n.ImportedBy-details {\n  margin: 0.5rem 0;\n}\n\n.ImportedBy-detailsContent {\n  margin-left: 2.5rem;\n}\n\n.ImportedBy-detailsIndent {\n  margin-bottom: 0.5rem;\n  margin-left: 1.1rem;\n  margin-top: 0.5rem;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,mBACC,cAAe,IACjB,CAEA,CAAC,gBACC,WAAY,KAXd,QAYW,CACX,CAEA,CAAC,WAAW,CAAC,eACb,CADC,WACW,CAAC,oBACX,gBAAiB,UACnB,CAEA,CAAC,mBApBD,OAqBU,MAAO,CACjB,CAEA,CAAC,0BACC,YAAa,MACf,CAEA,CAAC,yBACC,cAAe,MACf,YAAa,OACb,WAAY,KACd",
+  "mappings": ";;;;;AAMA,oBACE,mBAGF,iBACE,gBAXF,UAeA,6DAEE,2BAGF,oBApBA,eAwBA,2BACE,mBAGF,0BACE,oBACA,mBACA",
   "names": []
 }
diff --git a/static/frontend/unit/imports/imports.min.css.map b/static/frontend/unit/imports/imports.min.css.map
index eab9be7..050a960 100644
--- a/static/frontend/unit/imports/imports.min.css.map
+++ b/static/frontend/unit/imports/imports.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["imports.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.Imports-listItem {\n  line-height: 1.125rem;\n}\n\n.Imports-list {\n  margin: 1rem 0;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,iBACC,YAAa,QACf,CAEA,CAAC,aAVD,OAWU,KAAK,CACf",
+  "mappings": ";;;;;AAMA,kBACE,qBAGF,cAVA",
   "names": []
 }
diff --git a/static/frontend/unit/licenses/licenses.min.css.map b/static/frontend/unit/licenses/licenses.min.css.map
index 7299a20..fba8c28 100644
--- a/static/frontend/unit/licenses/licenses.min.css.map
+++ b/static/frontend/unit/licenses/licenses.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["licenses.css"],
   "sourcesContent": ["/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.License {\n  margin-bottom: 1rem;\n}\n\n.License > h2 {\n  margin-bottom: 1rem;\n}\n\n.License > p {\n  margin-bottom: 0.5rem;\n}\n\n.License-contents {\n  border: var(--border);\n  border-radius: 0.1875rem;\n  font-size: 0.875rem;\n  line-height: 1.375rem;\n  margin: 0;\n  overflow-x: auto;\n  padding: 1.5rem;\n  tab-size: 4;\n}\n\n.License-source {\n  font-size: 0.875rem;\n  padding-top: 0.5rem;\n}\n\n.Disclaimer-link {\n  font-style: italic;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,QACC,cAAe,IACjB,CAEA,CAJC,OAIQ,CAAE,GACT,cAAe,IACjB,CAEA,CARC,OAQQ,CAAE,EACT,cAAe,KACjB,CAEA,CAAC,iBACC,OAAQ,IAAI,UAnBd,cAoBiB,SACf,UAAW,QACX,YAAa,SAtBf,OAuBU,EACR,WAAY,KAxBd,QAyBW,OACT,SAAU,CACZ,CAEA,CAAC,eACC,UAAW,QACX,YAAa,KACf,CAEA,CAAC,gBACC,WAAY,MACd",
+  "mappings": ";;;;;AAMA,SACE,mBAGF,YACE,mBAGF,WACE,oBAGF,kBACE,qBAnBF,uBAqBE,kBACA,qBAtBF,SAwBE,gBAxBF,eA0BE,WAGF,gBACE,kBACA,kBAGF,iBACE",
   "names": []
 }
diff --git a/static/frontend/unit/main/main.js b/static/frontend/unit/main/main.js
index 9c97010..199d846 100644
--- a/static/frontend/unit/main/main.js
+++ b/static/frontend/unit/main/main.js
@@ -1,9 +1,9 @@
-var o={PLAY_HREF:".js-exampleHref",PLAY_CONTAINER:".js-exampleContainer",EXAMPLE_INPUT:".Documentation-exampleCode",EXAMPLE_OUTPUT:".Documentation-exampleOutput",EXAMPLE_ERROR:".Documentation-exampleError",PLAY_BUTTON:".Documentation-examplePlayButton",SHARE_BUTTON:".Documentation-exampleShareButton",FORMAT_BUTTON:".Documentation-exampleFormatButton",RUN_BUTTON:".Documentation-exampleRunButton"},T=class{constructor(e){this.exampleEl=e;this.exampleEl=e,this.anchorEl=e.querySelector("a"),this.errorEl=e.querySelector(o.EXAMPLE_ERROR),this.playButtonEl=e.querySelector(o.PLAY_BUTTON),this.shareButtonEl=e.querySelector(o.SHARE_BUTTON),this.formatButtonEl=e.querySelector(o.FORMAT_BUTTON),this.runButtonEl=e.querySelector(o.RUN_BUTTON),this.inputEl=this.makeTextArea(e.querySelector(o.EXAMPLE_INPUT)),this.outputEl=e.querySelector(o.EXAMPLE_OUTPUT),this.playButtonEl?.addEventListener("click",()=>this.handleShareButtonClick()),this.shareButtonEl?.addEventListener("click",()=>this.handleShareButtonClick()),this.formatButtonEl?.addEventListener("click",()=>this.handleFormatButtonClick()),this.runButtonEl?.addEventListener("click",()=>this.handleRunButtonClick()),this.inputEl&&(this.resize(),this.inputEl.addEventListener("keyup",()=>this.resize()),this.inputEl.addEventListener("keydown",t=>this.onKeydown(t)))}makeTextArea(e){let t=document.createElement("textarea");return t.classList.add("Documentation-exampleCode","code"),t.spellcheck=!1,t.value=e?.textContent??"",e?.parentElement?.replaceChild(t,e),t}getAnchorHash(){return this.anchorEl?.hash}expand(){this.exampleEl.open=!0}resize(){if(this.inputEl?.value){let e=(this.inputEl.value.match(/\n/g)||[]).length;this.inputEl.style.height=`${(20+e*20+12+2)/16}rem`}}onKeydown(e){e.key==="Tab"&&(document.execCommand("insertText",!1,"	"),e.preventDefault())}setInputText(e){this.inputEl&&(this.inputEl.value=e)}setOutputText(e){this.outputEl&&(this.outputEl.textContent=e)}appendToOutputText(e){this.outputEl&&(this.outputEl.textContent+=e)}setOutputHTML(e){this.outputEl&&(this.outputEl.innerHTML=e)}setErrorText(e){this.errorEl&&(this.errorEl.textContent=e),this.setOutputText("An error has occurred\u2026")}getCodeWithModFile(){let e=this.inputEl?.value??"",t=document.querySelector(".js-playgroundVars")?.dataset??{};return t.modulepath!=="std"&&(e=e.concat(`
+var d={PLAY_HREF:".js-exampleHref",PLAY_CONTAINER:".js-exampleContainer",EXAMPLE_INPUT:".Documentation-exampleCode",EXAMPLE_OUTPUT:".Documentation-exampleOutput",EXAMPLE_ERROR:".Documentation-exampleError",PLAY_BUTTON:".Documentation-examplePlayButton",SHARE_BUTTON:".Documentation-exampleShareButton",FORMAT_BUTTON:".Documentation-exampleFormatButton",RUN_BUTTON:".Documentation-exampleRunButton"},b=class{constructor(e){this.exampleEl=e;var t,i,s,r;this.exampleEl=e,this.anchorEl=e.querySelector("a"),this.errorEl=e.querySelector(d.EXAMPLE_ERROR),this.playButtonEl=e.querySelector(d.PLAY_BUTTON),this.shareButtonEl=e.querySelector(d.SHARE_BUTTON),this.formatButtonEl=e.querySelector(d.FORMAT_BUTTON),this.runButtonEl=e.querySelector(d.RUN_BUTTON),this.inputEl=this.makeTextArea(e.querySelector(d.EXAMPLE_INPUT)),this.outputEl=e.querySelector(d.EXAMPLE_OUTPUT),(t=this.playButtonEl)==null||t.addEventListener("click",()=>this.handleShareButtonClick()),(i=this.shareButtonEl)==null||i.addEventListener("click",()=>this.handleShareButtonClick()),(s=this.formatButtonEl)==null||s.addEventListener("click",()=>this.handleFormatButtonClick()),(r=this.runButtonEl)==null||r.addEventListener("click",()=>this.handleRunButtonClick()),this.inputEl&&(this.resize(),this.inputEl.addEventListener("keyup",()=>this.resize()),this.inputEl.addEventListener("keydown",l=>this.onKeydown(l)))}makeTextArea(e){var i,s;let t=document.createElement("textarea");return t.classList.add("Documentation-exampleCode","code"),t.spellcheck=!1,t.value=(i=e==null?void 0:e.textContent)!=null?i:"",(s=e==null?void 0:e.parentElement)==null||s.replaceChild(t,e),t}getAnchorHash(){var e;return(e=this.anchorEl)==null?void 0:e.hash}expand(){this.exampleEl.open=!0}resize(){var e;if((e=this.inputEl)!=null&&e.value){let t=(this.inputEl.value.match(/\n/g)||[]).length;this.inputEl.style.height=`${(20+t*20+12+2)/16}rem`}}onKeydown(e){e.key==="Tab"&&(document.execCommand("insertText",!1,"	"),e.preventDefault())}setInputText(e){this.inputEl&&(this.inputEl.value=e)}setOutputText(e){this.outputEl&&(this.outputEl.textContent=e)}appendToOutputText(e){this.outputEl&&(this.outputEl.textContent+=e)}setOutputHTML(e){this.outputEl&&(this.outputEl.innerHTML=e)}setErrorText(e){this.errorEl&&(this.errorEl.textContent=e),this.setOutputText("An error has occurred\u2026")}getCodeWithModFile(){var i,s,r,l;let e=(s=(i=this.inputEl)==null?void 0:i.value)!=null?s:"",t=(l=(r=document.querySelector(".js-playgroundVars"))==null?void 0:r.dataset)!=null?l:{};return t.modulepath!=="std"&&(e=e.concat(`
 -- go.mod --
 module play.ground
 
 require ${t.modulepath} ${t.version}
-`)),e}handleShareButtonClick(){let e="https://play.golang.org/p/";this.setOutputText("Waiting for remote server\u2026"),fetch("/play/share",{method:"POST",body:this.getCodeWithModFile()}).then(t=>t.text()).then(t=>{let i=e+t;this.setOutputHTML(`<a href="${i}">${i}</a>`),window.open(i)}).catch(t=>{this.setErrorText(t)})}handleFormatButtonClick(){this.setOutputText("Waiting for remote server\u2026");let e=new FormData;e.append("body",this.inputEl?.value??""),fetch("/play/fmt",{method:"POST",body:e}).then(t=>t.json()).then(({Body:t,Error:i})=>{this.setOutputText(i||"Done."),t&&(this.setInputText(t),this.resize())}).catch(t=>{this.setErrorText(t)})}handleRunButtonClick(){this.setOutputText("Waiting for remote server\u2026"),fetch("/play/compile",{method:"POST",body:JSON.stringify({body:this.getCodeWithModFile(),version:2})}).then(e=>e.json()).then(async({Events:e,Errors:t})=>{this.setOutputText(t||"");for(let i of e||[])this.appendToOutputText(i.Message),await new Promise(s=>setTimeout(s,i.Delay/1e6))}).catch(e=>{this.setErrorText(e)})}};function v(){let l=location.hash.match(/^#(example-.*)$/);if(l){let i=document.getElementById(l[1]);i&&(i.open=!0)}let e=[...document.querySelectorAll(o.PLAY_HREF)],t=i=>e.find(s=>s.hash===i.getAnchorHash());for(let i of document.querySelectorAll(o.PLAY_CONTAINER)){let s=new T(i),r=t(s);r?r.addEventListener("click",()=>{s.expand()}):console.warn("example href not found")}}var c=class{constructor(e){this.el=e;this.el.addEventListener("change",t=>{let i=t.target,s=i.value;i.value.startsWith("/")||(s="/"+s),window.location.href=s})}};function x(l){let e=document.createElement("label");e.classList.add("go-Label"),e.setAttribute("aria-label","Menu");let t=document.createElement("select");t.classList.add("go-Select","js-selectNav"),e.appendChild(t);let i=document.createElement("optgroup");i.label="Outline",t.appendChild(i);let s={},r;for(let a of l.treeitems){if(Number(a.depth)>4)continue;a.groupTreeitem?(r=s[a.groupTreeitem.label],r||(r=s[a.groupTreeitem.label]=document.createElement("optgroup"),r.label=a.groupTreeitem.label,t.appendChild(r))):r=i;let n=document.createElement("option");n.label=a.label,n.textContent=a.label,n.value=a.el.href.replace(window.location.origin,"").replace("/",""),r.appendChild(n)}return l.addObserver(a=>{let n=a.el.hash,g=t.querySelector(`[value$="${n}"]`)?.value;g&&(t.value=g)},50),e}var m=class{constructor(e){this.el=e;this.handleResize=()=>{this.el.style.setProperty("--js-tree-height","100vh"),this.el.style.setProperty("--js-tree-height",this.el.clientHeight+"px")};this.treeitems=[],this.firstChars=[],this.firstTreeitem=null,this.lastTreeitem=null,this.observerCallbacks=[],this.init()}init(){this.handleResize(),window.addEventListener("resize",this.handleResize),this.findTreeItems(),this.updateVisibleTreeitems(),this.observeTargets(),this.firstTreeitem&&(this.firstTreeitem.el.tabIndex=0)}observeTargets(){this.addObserver(i=>{this.expandTreeitem(i),this.setSelected(i)});let e=new Map,t=new IntersectionObserver(i=>{for(let s of i)e.set(s.target.id,s.isIntersecting||s.intersectionRatio===1);for(let[s,r]of e)if(r){let a=this.treeitems.find(n=>n.el?.href.endsWith(`#${s}`));if(a)for(let n of this.observerCallbacks)n(a);break}},{threshold:1,rootMargin:"-60px 0px 0px 0px"});for(let i of this.treeitems.map(s=>s.el.getAttribute("href")))if(i){let s=i.replace(window.location.origin,"").replace("/","").replace("#",""),r=document.getElementById(s);r&&t.observe(r)}}addObserver(e,t=200){this.observerCallbacks.push(C(e,t))}setFocusToNextItem(e){let t=null;for(let i=e.index+1;i<this.treeitems.length;i++){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToPreviousItem(e){let t=null;for(let i=e.index-1;i>-1;i--){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToParentItem(e){e.groupTreeitem&&this.setFocusToItem(e.groupTreeitem)}setFocusToFirstItem(){this.firstTreeitem&&this.setFocusToItem(this.firstTreeitem)}setFocusToLastItem(){this.lastTreeitem&&this.setFocusToItem(this.lastTreeitem)}setSelected(e){for(let t of this.el.querySelectorAll('[aria-expanded="true"]'))t!==e.el&&(t.nextElementSibling?.contains(e.el)||t.setAttribute("aria-expanded","false"));for(let t of this.el.querySelectorAll("[aria-selected]"))t!==e.el&&t.setAttribute("aria-selected","false");e.el.setAttribute("aria-selected","true"),this.updateVisibleTreeitems(),this.setFocusToItem(e,!1)}expandTreeitem(e){let t=e;for(;t;)t.isExpandable&&t.el.setAttribute("aria-expanded","true"),t=t.groupTreeitem;this.updateVisibleTreeitems()}expandAllSiblingItems(e){for(let t of this.treeitems)t.groupTreeitem===e.groupTreeitem&&t.isExpandable&&this.expandTreeitem(t)}collapseTreeitem(e){let t=null;e.isExpanded()?t=e:t=e.groupTreeitem,t&&(t.el.setAttribute("aria-expanded","false"),this.updateVisibleTreeitems(),this.setFocusToItem(t))}setFocusByFirstCharacter(e,t){let i,s;t=t.toLowerCase(),i=e.index+1,i===this.treeitems.length&&(i=0),s=this.getIndexFirstChars(i,t),s===-1&&(s=this.getIndexFirstChars(0,t)),s>-1&&this.setFocusToItem(this.treeitems[s])}findTreeItems(){let e=(t,i)=>{let s=i,r=t.firstElementChild;for(;r;)(r.tagName==="A"||r.tagName==="SPAN")&&(s=new E(r,this,i),this.treeitems.push(s),this.firstChars.push(s.label.substring(0,1).toLowerCase())),r.firstElementChild&&e(r,s),r=r.nextElementSibling};e(this.el,null),this.treeitems.map((t,i)=>t.index=i)}updateVisibleTreeitems(){this.firstTreeitem=this.treeitems[0];for(let e of this.treeitems){let t=e.groupTreeitem;for(e.isVisible=!0;t&&t.el!==this.el;)t.isExpanded()||(e.isVisible=!1),t=t.groupTreeitem;e.isVisible&&(this.lastTreeitem=e)}}setFocusToItem(e,t=!0){e.el.tabIndex=0,t&&e.el.focus();for(let i of this.treeitems)i!==e&&(i.el.tabIndex=-1)}getIndexFirstChars(e,t){for(let i=e;i<this.firstChars.length;i++)if(this.treeitems[i].isVisible&&t===this.firstChars[i])return i;return-1}},E=class{constructor(e,t,i){e.tabIndex=-1,this.el=e,this.groupTreeitem=i,this.label=e.textContent?.trim()??"",this.tree=t,this.depth=(i?.depth||0)+1,this.index=0;let s=e.parentElement;s?.tagName.toLowerCase()==="li"&&s?.setAttribute("role","none"),e.setAttribute("aria-level",this.depth+""),e.getAttribute("aria-label")&&(this.label=e?.getAttribute("aria-label")?.trim()??""),this.isExpandable=!1,this.isVisible=!1,this.isInGroup=!!i;let r=e.nextElementSibling;for(;r;){if(r.tagName.toLowerCase()=="ul"){let a=`${i?.label??""} nav group ${this.label}`.replace(/[\W_]+/g,"_");e.setAttribute("aria-owns",a),e.setAttribute("aria-expanded","false"),r.setAttribute("role","group"),r.setAttribute("id",a),this.isExpandable=!0;break}r=r.nextElementSibling}this.init()}init(){this.el.tabIndex=-1,this.el.getAttribute("role")||this.el.setAttribute("role","treeitem"),this.el.addEventListener("keydown",this.handleKeydown.bind(this)),this.el.addEventListener("click",this.handleClick.bind(this)),this.el.addEventListener("focus",this.handleFocus.bind(this)),this.el.addEventListener("blur",this.handleBlur.bind(this))}isExpanded(){return this.isExpandable?this.el.getAttribute("aria-expanded")==="true":!1}isSelected(){return this.el.getAttribute("aria-selected")==="true"}handleClick(e){e.target!==this.el&&e.target!==this.el.firstElementChild||(this.isExpandable&&(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),e.stopPropagation()),this.tree.setSelected(this))}handleFocus(){let e=this.el;this.isExpandable&&(e=e.firstElementChild??e),e.classList.add("focus")}handleBlur(){let e=this.el;this.isExpandable&&(e=e.firstElementChild??e),e.classList.remove("focus")}handleKeydown(e){if(e.altKey||e.ctrlKey||e.metaKey)return;let t=!1;switch(e.key){case" ":case"Enter":this.isExpandable?(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),t=!0):e.stopPropagation(),this.tree.setSelected(this);break;case"ArrowUp":this.tree.setFocusToPreviousItem(this),t=!0;break;case"ArrowDown":this.tree.setFocusToNextItem(this),t=!0;break;case"ArrowRight":this.isExpandable&&(this.isExpanded()?this.tree.setFocusToNextItem(this):this.tree.expandTreeitem(this)),t=!0;break;case"ArrowLeft":this.isExpandable&&this.isExpanded()?(this.tree.collapseTreeitem(this),t=!0):this.isInGroup&&(this.tree.setFocusToParentItem(this),t=!0);break;case"Home":this.tree.setFocusToFirstItem(),t=!0;break;case"End":this.tree.setFocusToLastItem(),t=!0;break;default:e.key.length===1&&e.key.match(/\S/)&&(e.key=="*"?this.tree.expandAllSiblingItems(this):this.tree.setFocusByFirstCharacter(this,e.key),t=!0);break}t&&(e.stopPropagation(),e.preventDefault())}};function C(l,e){let t;return(...i)=>{let s=()=>{t=null,l(...i)};t&&clearTimeout(t),t=setTimeout(s,e)}}var p=class{constructor(e,t){this.table=e;this.toggleAll=t;this.expandAllItems=()=>{this.toggles.map(e=>e.setAttribute("aria-expanded","true")),this.update()};this.collapseAllItems=()=>{this.toggles.map(e=>e.setAttribute("aria-expanded","false")),this.update()};this.update=()=>{this.updateVisibleItems(),setTimeout(()=>this.updateGlobalToggle())};this.rows=Array.from(e.querySelectorAll("[data-aria-controls]")),this.toggles=Array.from(this.table.querySelectorAll("[aria-expanded]")),this.setAttributes(),this.attachEventListeners(),this.update()}setAttributes(){for(let e of["data-aria-controls","data-aria-labelledby","data-id"])this.table.querySelectorAll(`[${e}]`).forEach(t=>{t.setAttribute(e.replace("data-",""),t.getAttribute(e)??""),t.removeAttribute(e)})}attachEventListeners(){this.rows.forEach(e=>{e.addEventListener("click",t=>{this.handleToggleClick(t)})}),this.toggleAll?.addEventListener("click",()=>{this.expandAllItems()}),document.addEventListener("keydown",e=>{(e.ctrlKey||e.metaKey)&&e.key==="f"&&this.expandAllItems()})}handleToggleClick(e){let t=e.currentTarget;t?.hasAttribute("aria-expanded")||(t=this.table.querySelector(`button[aria-controls="${t?.getAttribute("aria-controls")}"]`));let i=t?.getAttribute("aria-expanded")==="true";t?.setAttribute("aria-expanded",i?"false":"true"),e.stopPropagation(),this.update()}updateVisibleItems(){this.rows.map(e=>{let t=e?.getAttribute("aria-expanded")==="true";e?.getAttribute("aria-controls")?.trimEnd().split(" ")?.map(s=>{let r=document.getElementById(`${s}`);t?(r?.classList.add("visible"),r?.classList.remove("hidden")):(r?.classList.add("hidden"),r?.classList.remove("visible"))})})}updateGlobalToggle(){if(!this.toggleAll)return;this.rows.some(t=>t.hasAttribute("aria-expanded"))&&(this.toggleAll.style.display="block"),this.toggles.some(t=>t.getAttribute("aria-expanded")==="false")?(this.toggleAll.innerText="Expand all",this.toggleAll.onclick=this.expandAllItems,this.toggleAll.setAttribute("aria-label","Expand all directories"),this.toggleAll.setAttribute("aria-live","polite")):(this.toggleAll.innerText="Collapse all",this.toggleAll.onclick=this.collapseAllItems,this.toggleAll.setAttribute("aria-label","Collapse all directories"),this.toggleAll.setAttribute("aria-live","polite"))}};v();var u=document.querySelector(".js-expandableTable");if(u){let l=new p(u,document.querySelector(".js-expandAllDirectories"));window.location.search.includes("expand-directories")&&l.expandAllItems();let e=document.querySelector(".js-showInternalDirectories");e&&(document.querySelector(".UnitDirectories-internal")&&(e.style.display="block",e.setAttribute("aria-label","Show Internal Directories"),e.setAttribute("aria-describedby","showInternal-description")),e.addEventListener("click",()=>{u.classList.contains("UnitDirectories-showInternal")?(u.classList.remove("UnitDirectories-showInternal"),e.innerText="Show internal",e.setAttribute("aria-label","Show Internal Directories"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-describedby","showInternal-description")):(u.classList.add("UnitDirectories-showInternal"),e.innerText="Hide internal",e.setAttribute("aria-label","Hide Internal Directories"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-describedby","hideInternal-description"))})),document.querySelector('html[data-local="true"]')&&e?.click()}var y=document.querySelector(".js-tree");if(y){let l=new m(y),e=x(l),t=document.querySelector(".js-mainNavMobile");t&&t.firstElementChild&&t?.replaceChild(e,t.firstElementChild),e.firstElementChild&&new c(e.firstElementChild)}var h=document.querySelector(".js-readme"),b=document.querySelector(".js-readmeContent"),A=document.querySelector(".js-readmeOutline"),f=document.querySelectorAll(".js-readmeExpand"),L=document.querySelector(".js-readmeCollapse"),S=document.querySelector(".DocNavMobile-select");h&&b&&A&&f.length&&L&&(h.clientHeight>320&&(h?.classList.remove("UnitReadme--expanded"),h?.classList.add("UnitReadme--toggle")),window.location.hash.includes("readme")&&d(),S?.addEventListener("change",l=>{l.target.value.startsWith("readme-")&&d()}),f.forEach(l=>l.addEventListener("click",e=>{e.preventDefault(),d(),h.scrollIntoView()})),L.addEventListener("click",l=>{l.preventDefault(),h.classList.remove("UnitReadme--expanded"),f[1]&&f[1].scrollIntoView({block:"center"})}),b.addEventListener("keyup",()=>{d()}),b.addEventListener("click",()=>{d()}),A.addEventListener("click",()=>{d()}),document.addEventListener("keydown",l=>{(l.ctrlKey||l.metaKey)&&l.key==="f"&&d()}));function d(){history.replaceState(null,"",`${location.pathname}#section-readme`),h?.classList.add("UnitReadme--expanded")}function I(){if(!location.hash)return;let e=document.getElementById(location.hash.slice(1))?.parentElement?.parentElement;e?.nodeName==="DETAILS"&&(e.open=!0)}I();window.addEventListener("hashchange",()=>I());document.querySelectorAll(".js-buildContextSelect").forEach(l=>{l.addEventListener("change",e=>{window.location.search=`?GOOS=${e.target.value}`})});
+`)),e}handleShareButtonClick(){let e="https://play.golang.org/p/";this.setOutputText("Waiting for remote server\u2026"),fetch("/play/share",{method:"POST",body:this.getCodeWithModFile()}).then(t=>t.text()).then(t=>{let i=e+t;this.setOutputHTML(`<a href="${i}">${i}</a>`),window.open(i)}).catch(t=>{this.setErrorText(t)})}handleFormatButtonClick(){var t,i;this.setOutputText("Waiting for remote server\u2026");let e=new FormData;e.append("body",(i=(t=this.inputEl)==null?void 0:t.value)!=null?i:""),fetch("/play/fmt",{method:"POST",body:e}).then(s=>s.json()).then(({Body:s,Error:r})=>{this.setOutputText(r||"Done."),s&&(this.setInputText(s),this.resize())}).catch(s=>{this.setErrorText(s)})}handleRunButtonClick(){this.setOutputText("Waiting for remote server\u2026"),fetch("/play/compile",{method:"POST",body:JSON.stringify({body:this.getCodeWithModFile(),version:2})}).then(e=>e.json()).then(async({Events:e,Errors:t})=>{this.setOutputText(t||"");for(let i of e||[])this.appendToOutputText(i.Message),await new Promise(s=>setTimeout(s,i.Delay/1e6))}).catch(e=>{this.setErrorText(e)})}};function L(){let n=location.hash.match(/^#(example-.*)$/);if(n){let i=document.getElementById(n[1]);i&&(i.open=!0)}let e=[...document.querySelectorAll(d.PLAY_HREF)],t=i=>e.find(s=>s.hash===i.getAnchorHash());for(let i of document.querySelectorAll(d.PLAY_CONTAINER)){let s=new b(i),r=t(s);r?r.addEventListener("click",()=>{s.expand()}):console.warn("example href not found")}}var p=class{constructor(e){this.el=e;this.el.addEventListener("change",t=>{let i=t.target,s=i.value;i.value.startsWith("/")||(s="/"+s),window.location.href=s})}};function I(n){let e=document.createElement("label");e.classList.add("go-Label"),e.setAttribute("aria-label","Menu");let t=document.createElement("select");t.classList.add("go-Select","js-selectNav"),e.appendChild(t);let i=document.createElement("optgroup");i.label="Outline",t.appendChild(i);let s={},r;for(let l of n.treeitems){if(Number(l.depth)>4)continue;l.groupTreeitem?(r=s[l.groupTreeitem.label],r||(r=s[l.groupTreeitem.label]=document.createElement("optgroup"),r.label=l.groupTreeitem.label,t.appendChild(r))):r=i;let a=document.createElement("option");a.label=l.label,a.textContent=l.label,a.value=l.el.href.replace(window.location.origin,"").replace("/",""),r.appendChild(a)}return n.addObserver(l=>{var c;let a=l.el.hash,h=(c=t.querySelector(`[value$="${a}"]`))==null?void 0:c.value;h&&(t.value=h)},50),e}var f=class{constructor(e){this.el=e;this.handleResize=()=>{this.el.style.setProperty("--js-tree-height","100vh"),this.el.style.setProperty("--js-tree-height",this.el.clientHeight+"px")};this.treeitems=[],this.firstChars=[],this.firstTreeitem=null,this.lastTreeitem=null,this.observerCallbacks=[],this.init()}init(){this.handleResize(),window.addEventListener("resize",this.handleResize),this.findTreeItems(),this.updateVisibleTreeitems(),this.observeTargets(),this.firstTreeitem&&(this.firstTreeitem.el.tabIndex=0)}observeTargets(){this.addObserver(i=>{this.expandTreeitem(i),this.setSelected(i)});let e=new Map,t=new IntersectionObserver(i=>{for(let s of i)e.set(s.target.id,s.isIntersecting||s.intersectionRatio===1);for(let[s,r]of e)if(r){let l=this.treeitems.find(a=>{var h;return(h=a.el)==null?void 0:h.href.endsWith(`#${s}`)});if(l)for(let a of this.observerCallbacks)a(l);break}},{threshold:1,rootMargin:"-60px 0px 0px 0px"});for(let i of this.treeitems.map(s=>s.el.getAttribute("href")))if(i){let s=i.replace(window.location.origin,"").replace("/","").replace("#",""),r=document.getElementById(s);r&&t.observe(r)}}addObserver(e,t=200){this.observerCallbacks.push(M(e,t))}setFocusToNextItem(e){let t=null;for(let i=e.index+1;i<this.treeitems.length;i++){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToPreviousItem(e){let t=null;for(let i=e.index-1;i>-1;i--){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToParentItem(e){e.groupTreeitem&&this.setFocusToItem(e.groupTreeitem)}setFocusToFirstItem(){this.firstTreeitem&&this.setFocusToItem(this.firstTreeitem)}setFocusToLastItem(){this.lastTreeitem&&this.setFocusToItem(this.lastTreeitem)}setSelected(e){var t;for(let i of this.el.querySelectorAll('[aria-expanded="true"]'))i!==e.el&&((t=i.nextElementSibling)!=null&&t.contains(e.el)||i.setAttribute("aria-expanded","false"));for(let i of this.el.querySelectorAll("[aria-selected]"))i!==e.el&&i.setAttribute("aria-selected","false");e.el.setAttribute("aria-selected","true"),this.updateVisibleTreeitems(),this.setFocusToItem(e,!1)}expandTreeitem(e){let t=e;for(;t;)t.isExpandable&&t.el.setAttribute("aria-expanded","true"),t=t.groupTreeitem;this.updateVisibleTreeitems()}expandAllSiblingItems(e){for(let t of this.treeitems)t.groupTreeitem===e.groupTreeitem&&t.isExpandable&&this.expandTreeitem(t)}collapseTreeitem(e){let t=null;e.isExpanded()?t=e:t=e.groupTreeitem,t&&(t.el.setAttribute("aria-expanded","false"),this.updateVisibleTreeitems(),this.setFocusToItem(t))}setFocusByFirstCharacter(e,t){let i,s;t=t.toLowerCase(),i=e.index+1,i===this.treeitems.length&&(i=0),s=this.getIndexFirstChars(i,t),s===-1&&(s=this.getIndexFirstChars(0,t)),s>-1&&this.setFocusToItem(this.treeitems[s])}findTreeItems(){let e=(t,i)=>{let s=i,r=t.firstElementChild;for(;r;)(r.tagName==="A"||r.tagName==="SPAN")&&(s=new v(r,this,i),this.treeitems.push(s),this.firstChars.push(s.label.substring(0,1).toLowerCase())),r.firstElementChild&&e(r,s),r=r.nextElementSibling};e(this.el,null),this.treeitems.map((t,i)=>t.index=i)}updateVisibleTreeitems(){this.firstTreeitem=this.treeitems[0];for(let e of this.treeitems){let t=e.groupTreeitem;for(e.isVisible=!0;t&&t.el!==this.el;)t.isExpanded()||(e.isVisible=!1),t=t.groupTreeitem;e.isVisible&&(this.lastTreeitem=e)}}setFocusToItem(e,t=!0){e.el.tabIndex=0,t&&e.el.focus();for(let i of this.treeitems)i!==e&&(i.el.tabIndex=-1)}getIndexFirstChars(e,t){for(let i=e;i<this.firstChars.length;i++)if(this.treeitems[i].isVisible&&t===this.firstChars[i])return i;return-1}},v=class{constructor(e,t,i){var l,a,h,c,y;e.tabIndex=-1,this.el=e,this.groupTreeitem=i,this.label=(a=(l=e.textContent)==null?void 0:l.trim())!=null?a:"",this.tree=t,this.depth=((i==null?void 0:i.depth)||0)+1,this.index=0;let s=e.parentElement;(s==null?void 0:s.tagName.toLowerCase())==="li"&&(s==null||s.setAttribute("role","none")),e.setAttribute("aria-level",this.depth+""),e.getAttribute("aria-label")&&(this.label=(c=(h=e==null?void 0:e.getAttribute("aria-label"))==null?void 0:h.trim())!=null?c:""),this.isExpandable=!1,this.isVisible=!1,this.isInGroup=!!i;let r=e.nextElementSibling;for(;r;){if(r.tagName.toLowerCase()=="ul"){let A=`${(y=i==null?void 0:i.label)!=null?y:""} nav group ${this.label}`.replace(/[\W_]+/g,"_");e.setAttribute("aria-owns",A),e.setAttribute("aria-expanded","false"),r.setAttribute("role","group"),r.setAttribute("id",A),this.isExpandable=!0;break}r=r.nextElementSibling}this.init()}init(){this.el.tabIndex=-1,this.el.getAttribute("role")||this.el.setAttribute("role","treeitem"),this.el.addEventListener("keydown",this.handleKeydown.bind(this)),this.el.addEventListener("click",this.handleClick.bind(this)),this.el.addEventListener("focus",this.handleFocus.bind(this)),this.el.addEventListener("blur",this.handleBlur.bind(this))}isExpanded(){return this.isExpandable?this.el.getAttribute("aria-expanded")==="true":!1}isSelected(){return this.el.getAttribute("aria-selected")==="true"}handleClick(e){e.target!==this.el&&e.target!==this.el.firstElementChild||(this.isExpandable&&(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),e.stopPropagation()),this.tree.setSelected(this))}handleFocus(){var t;let e=this.el;this.isExpandable&&(e=(t=e.firstElementChild)!=null?t:e),e.classList.add("focus")}handleBlur(){var t;let e=this.el;this.isExpandable&&(e=(t=e.firstElementChild)!=null?t:e),e.classList.remove("focus")}handleKeydown(e){if(e.altKey||e.ctrlKey||e.metaKey)return;let t=!1;switch(e.key){case" ":case"Enter":this.isExpandable?(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),t=!0):e.stopPropagation(),this.tree.setSelected(this);break;case"ArrowUp":this.tree.setFocusToPreviousItem(this),t=!0;break;case"ArrowDown":this.tree.setFocusToNextItem(this),t=!0;break;case"ArrowRight":this.isExpandable&&(this.isExpanded()?this.tree.setFocusToNextItem(this):this.tree.expandTreeitem(this)),t=!0;break;case"ArrowLeft":this.isExpandable&&this.isExpanded()?(this.tree.collapseTreeitem(this),t=!0):this.isInGroup&&(this.tree.setFocusToParentItem(this),t=!0);break;case"Home":this.tree.setFocusToFirstItem(),t=!0;break;case"End":this.tree.setFocusToLastItem(),t=!0;break;default:e.key.length===1&&e.key.match(/\S/)&&(e.key=="*"?this.tree.expandAllSiblingItems(this):this.tree.setFocusByFirstCharacter(this,e.key),t=!0);break}t&&(e.stopPropagation(),e.preventDefault())}};function M(n,e){let t;return(...i)=>{let s=()=>{t=null,n(...i)};t&&clearTimeout(t),t=setTimeout(s,e)}}var T=class{constructor(e,t){this.table=e;this.toggleAll=t;this.expandAllItems=()=>{this.toggles.map(e=>e.setAttribute("aria-expanded","true")),this.update()};this.collapseAllItems=()=>{this.toggles.map(e=>e.setAttribute("aria-expanded","false")),this.update()};this.update=()=>{this.updateVisibleItems(),setTimeout(()=>this.updateGlobalToggle())};this.rows=Array.from(e.querySelectorAll("[data-aria-controls]")),this.toggles=Array.from(this.table.querySelectorAll("[aria-expanded]")),this.setAttributes(),this.attachEventListeners(),this.update()}setAttributes(){for(let e of["data-aria-controls","data-aria-labelledby","data-id"])this.table.querySelectorAll(`[${e}]`).forEach(t=>{var i;t.setAttribute(e.replace("data-",""),(i=t.getAttribute(e))!=null?i:""),t.removeAttribute(e)})}attachEventListeners(){var e;this.rows.forEach(t=>{t.addEventListener("click",i=>{this.handleToggleClick(i)})}),(e=this.toggleAll)==null||e.addEventListener("click",()=>{this.expandAllItems()}),document.addEventListener("keydown",t=>{(t.ctrlKey||t.metaKey)&&t.key==="f"&&this.expandAllItems()})}handleToggleClick(e){let t=e.currentTarget;t!=null&&t.hasAttribute("aria-expanded")||(t=this.table.querySelector(`button[aria-controls="${t==null?void 0:t.getAttribute("aria-controls")}"]`));let i=(t==null?void 0:t.getAttribute("aria-expanded"))==="true";t==null||t.setAttribute("aria-expanded",i?"false":"true"),e.stopPropagation(),this.update()}updateVisibleItems(){this.rows.map(e=>{var s;let t=(e==null?void 0:e.getAttribute("aria-expanded"))==="true",i=(s=e==null?void 0:e.getAttribute("aria-controls"))==null?void 0:s.trimEnd().split(" ");i==null||i.map(r=>{let l=document.getElementById(`${r}`);t?(l==null||l.classList.add("visible"),l==null||l.classList.remove("hidden")):(l==null||l.classList.add("hidden"),l==null||l.classList.remove("visible"))})})}updateGlobalToggle(){if(!this.toggleAll)return;this.rows.some(t=>t.hasAttribute("aria-expanded"))&&(this.toggleAll.style.display="block"),this.toggles.some(t=>t.getAttribute("aria-expanded")==="false")?(this.toggleAll.innerText="Expand all",this.toggleAll.onclick=this.expandAllItems,this.toggleAll.setAttribute("aria-label","Expand all directories"),this.toggleAll.setAttribute("aria-live","polite")):(this.toggleAll.innerText="Collapse all",this.toggleAll.onclick=this.collapseAllItems,this.toggleAll.setAttribute("aria-label","Collapse all directories"),this.toggleAll.setAttribute("aria-live","polite"))}};L();var m=document.querySelector(".js-expandableTable");if(m){let n=new T(m,document.querySelector(".js-expandAllDirectories"));window.location.search.includes("expand-directories")&&n.expandAllItems();let e=document.querySelector(".js-showInternalDirectories");e&&(document.querySelector(".UnitDirectories-internal")&&(e.style.display="block",e.setAttribute("aria-label","Show Internal Directories"),e.setAttribute("aria-describedby","showInternal-description")),e.addEventListener("click",()=>{m.classList.contains("UnitDirectories-showInternal")?(m.classList.remove("UnitDirectories-showInternal"),e.innerText="Show internal",e.setAttribute("aria-label","Show Internal Directories"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-describedby","showInternal-description")):(m.classList.add("UnitDirectories-showInternal"),e.innerText="Hide internal",e.setAttribute("aria-label","Hide Internal Directories"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-describedby","hideInternal-description"))})),document.querySelector('html[data-local="true"]')&&(e==null||e.click())}var C=document.querySelector(".js-tree");if(C){let n=new f(C),e=I(n),t=document.querySelector(".js-mainNavMobile");t&&t.firstElementChild&&(t==null||t.replaceChild(e,t.firstElementChild)),e.firstElementChild&&new p(e.firstElementChild)}var o=document.querySelector(".js-readme"),x=document.querySelector(".js-readmeContent"),S=document.querySelector(".js-readmeOutline"),E=document.querySelectorAll(".js-readmeExpand"),w=document.querySelector(".js-readmeCollapse"),g=document.querySelector(".DocNavMobile-select");o&&x&&S&&E.length&&w&&(o.clientHeight>320&&(o==null||o.classList.remove("UnitReadme--expanded"),o==null||o.classList.add("UnitReadme--toggle")),window.location.hash.includes("readme")&&u(),g==null||g.addEventListener("change",n=>{n.target.value.startsWith("readme-")&&u()}),E.forEach(n=>n.addEventListener("click",e=>{e.preventDefault(),u(),o.scrollIntoView()})),w.addEventListener("click",n=>{n.preventDefault(),o.classList.remove("UnitReadme--expanded"),E[1]&&E[1].scrollIntoView({block:"center"})}),x.addEventListener("keyup",()=>{u()}),x.addEventListener("click",()=>{u()}),S.addEventListener("click",()=>{u()}),document.addEventListener("keydown",n=>{(n.ctrlKey||n.metaKey)&&n.key==="f"&&u()}));function u(){history.replaceState(null,"",`${location.pathname}#section-readme`),o==null||o.classList.add("UnitReadme--expanded")}function k(){var t;if(!location.hash)return;let n=document.getElementById(location.hash.slice(1)),e=(t=n==null?void 0:n.parentElement)==null?void 0:t.parentElement;(e==null?void 0:e.nodeName)==="DETAILS"&&(e.open=!0)}k();window.addEventListener("hashchange",()=>k());document.querySelectorAll(".js-buildContextSelect").forEach(n=>{n.addEventListener("change",e=>{window.location.search=`?GOOS=${e.target.value}`})});
 /*!
  * @license
  * Copyright 2021 The Go Authors. All rights reserved.
diff --git a/static/frontend/unit/main/main.js.map b/static/frontend/unit/main/main.js.map
index a4f7928..4810cdd 100644
--- a/static/frontend/unit/main/main.js.map
+++ b/static/frontend/unit/main/main.js.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["../../../shared/playground/playground.ts", "../../../shared/outline/select.ts", "../../../shared/outline/tree.ts", "../../../shared/table/table.ts", "main.ts"],
   "sourcesContent": ["/*!\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n// This file implements the playground implementation of the documentation\n// page. The playground involves a \"play\" button that allows you to open up\n// a new link to play.golang.org using the example code.\n\n// The CSS is in static/frontend/unit/main/_doc.css\n\n/**\n * CSS classes used by PlaygroundExampleController\n */\nconst PlayExampleClassName = {\n  PLAY_HREF: '.js-exampleHref',\n  PLAY_CONTAINER: '.js-exampleContainer',\n  EXAMPLE_INPUT: '.Documentation-exampleCode',\n  EXAMPLE_OUTPUT: '.Documentation-exampleOutput',\n  EXAMPLE_ERROR: '.Documentation-exampleError',\n  PLAY_BUTTON: '.Documentation-examplePlayButton',\n  SHARE_BUTTON: '.Documentation-exampleShareButton',\n  FORMAT_BUTTON: '.Documentation-exampleFormatButton',\n  RUN_BUTTON: '.Documentation-exampleRunButton',\n};\n\n/**\n * This controller enables playground examples to expand their dropdown or\n * generate shareable Go Playground URLs.\n */\nexport class PlaygroundExampleController {\n  /**\n   * The anchor tag used to identify the container with an example href.\n   * There is only one in an example container div.\n   */\n  private readonly anchorEl: HTMLAnchorElement | null;\n\n  /**\n   * The error element\n   */\n  private readonly errorEl: Element | null;\n\n  /**\n   * Buttons that redirect to an example's playground, this element\n   * only exists in executable examples.\n   */\n  private readonly playButtonEl: Element | null;\n  private readonly shareButtonEl: Element | null;\n\n  /**\n   * Button that formats the code in an example's playground.\n   */\n  private readonly formatButtonEl: Element | null;\n\n  /**\n   * Button that runs the code in an example's playground, this element\n   * only exists in executable examples.\n   */\n  private readonly runButtonEl: Element | null;\n\n  /**\n   * The executable code of an example.\n   */\n  private readonly inputEl: HTMLTextAreaElement | null;\n\n  /**\n   * The output of the given example code. This only exists if the\n   * author of the package provides an output for this example.\n   */\n  private readonly outputEl: Element | null;\n\n  /**\n   * @param exampleEl The div that contains playground content for the given example.\n   */\n  constructor(private readonly exampleEl: HTMLDetailsElement) {\n    this.exampleEl = exampleEl;\n    this.anchorEl = exampleEl.querySelector('a');\n    this.errorEl = exampleEl.querySelector(PlayExampleClassName.EXAMPLE_ERROR);\n    this.playButtonEl = exampleEl.querySelector(PlayExampleClassName.PLAY_BUTTON);\n    this.shareButtonEl = exampleEl.querySelector(PlayExampleClassName.SHARE_BUTTON);\n    this.formatButtonEl = exampleEl.querySelector(PlayExampleClassName.FORMAT_BUTTON);\n    this.runButtonEl = exampleEl.querySelector(PlayExampleClassName.RUN_BUTTON);\n    this.inputEl = this.makeTextArea(exampleEl.querySelector(PlayExampleClassName.EXAMPLE_INPUT));\n    this.outputEl = exampleEl.querySelector(PlayExampleClassName.EXAMPLE_OUTPUT);\n\n    // This is legacy listener to be replaced the listener for shareButtonEl.\n    this.playButtonEl?.addEventListener('click', () => this.handleShareButtonClick());\n    this.shareButtonEl?.addEventListener('click', () => this.handleShareButtonClick());\n    this.formatButtonEl?.addEventListener('click', () => this.handleFormatButtonClick());\n    this.runButtonEl?.addEventListener('click', () => this.handleRunButtonClick());\n\n    if (!this.inputEl) return;\n\n    this.resize();\n    this.inputEl.addEventListener('keyup', () => this.resize());\n    this.inputEl.addEventListener('keydown', e => this.onKeydown(e));\n  }\n\n  /**\n   * Replace the pre element with a textarea. The examples are initially rendered\n   * as pre elements so they're fully visible when JS is disabled.\n   */\n  makeTextArea(el: Element | null): HTMLTextAreaElement {\n    const t = document.createElement('textarea');\n    t.classList.add('Documentation-exampleCode', 'code');\n    t.spellcheck = false;\n    t.value = el?.textContent ?? '';\n    el?.parentElement?.replaceChild(t, el);\n    return t;\n  }\n\n  /**\n   * Retrieve the hash value of the anchor element.\n   */\n  getAnchorHash(): string | undefined {\n    return this.anchorEl?.hash;\n  }\n\n  /**\n   * Expands the current playground example.\n   */\n  expand(): void {\n    this.exampleEl.open = true;\n  }\n\n  /**\n   * Resizes the input element to accommodate the amount of text present.\n   */\n  private resize(): void {\n    if (this.inputEl?.value) {\n      const numLineBreaks = (this.inputEl.value.match(/\\n/g) || []).length;\n      // min-height + lines x line-height + padding + border\n      this.inputEl.style.height = `${(20 + numLineBreaks * 20 + 12 + 2) / 16}rem`;\n    }\n  }\n\n  /**\n   * Handler to override keyboard behavior in the playground's\n   * textarea element.\n   *\n   * Tab key inserts tabs into the example playground instead of\n   * switching to the next interactive element.\n   * @param e input element keyboard event.\n   */\n  private onKeydown(e: KeyboardEvent) {\n    if (e.key === 'Tab') {\n      document.execCommand('insertText', false, '\\t');\n      e.preventDefault();\n    }\n  }\n\n  /**\n   * Changes the text of the example's input box.\n   */\n  private setInputText(output: string) {\n    if (this.inputEl) {\n      this.inputEl.value = output;\n    }\n  }\n\n  /**\n   * Changes the text of the example's output box.\n   */\n  private setOutputText(output: string) {\n    if (this.outputEl) {\n      this.outputEl.textContent = output;\n    }\n  }\n\n  /**\n   * Appends to the text of the example's output box.\n   */\n  private appendToOutputText(output: string) {\n    if (this.outputEl) {\n      this.outputEl.textContent += output;\n    }\n  }\n\n  private setOutputHTML(output: string) {\n    if (this.outputEl) {\n      this.outputEl.innerHTML = output;\n    }\n  }\n\n  /**\n   * Sets the error message text and overwrites\n   * output box to indicate a failed response.\n   */\n  private setErrorText(err: string) {\n    if (this.errorEl) {\n      this.errorEl.textContent = err;\n    }\n    this.setOutputText('An error has occurred\u2026');\n  }\n\n  private getCodeWithModFile(): string {\n    let codeWithModFile = this.inputEl?.value ?? '';\n    const moduleVars = document.querySelector<HTMLDivElement>('.js-playgroundVars')?.dataset ?? {};\n    if (moduleVars.modulepath !== 'std') {\n      codeWithModFile = codeWithModFile.concat(`\n-- go.mod --\nmodule play.ground\n\nrequire ${moduleVars.modulepath} ${moduleVars.version}\n`);\n    }\n\n    return codeWithModFile;\n  }\n\n  /**\n   * Opens a new window to play.golang.org using the\n   * example snippet's code in the playground.\n   */\n  private handleShareButtonClick() {\n    const PLAYGROUND_BASE_URL = 'https://play.golang.org/p/';\n\n    this.setOutputText('Waiting for remote server\u2026');\n\n    fetch('/play/share', {\n      method: 'POST',\n      body: this.getCodeWithModFile(),\n    })\n      .then(res => res.text())\n      .then(shareId => {\n        const href = PLAYGROUND_BASE_URL + shareId;\n        this.setOutputHTML(`<a href=\"${href}\">${href}</a>`);\n        window.open(href);\n      })\n      .catch(err => {\n        this.setErrorText(err);\n      });\n  }\n\n  /**\n   * Runs gofmt on the example snippet in the playground.\n   */\n  private handleFormatButtonClick() {\n    this.setOutputText('Waiting for remote server\u2026');\n    const body = new FormData();\n    body.append('body', this.inputEl?.value ?? '');\n\n    fetch('/play/fmt', {\n      method: 'POST',\n      body: body,\n    })\n      .then(res => res.json())\n      .then(({ Body, Error }) => {\n        this.setOutputText(Error || 'Done.');\n        if (Body) {\n          this.setInputText(Body);\n          this.resize();\n        }\n      })\n      .catch(err => {\n        this.setErrorText(err);\n      });\n  }\n\n  /**\n   * Runs the code snippet in the example playground.\n   */\n  private handleRunButtonClick() {\n    this.setOutputText('Waiting for remote server\u2026');\n\n    fetch('/play/compile', {\n      method: 'POST',\n      body: JSON.stringify({ body: this.getCodeWithModFile(), version: 2 }),\n    })\n      .then(res => res.json())\n      .then(async ({ Events, Errors }) => {\n        this.setOutputText(Errors || '');\n        for (const e of Events || []) {\n          this.appendToOutputText(e.Message);\n          await new Promise(resolve => setTimeout(resolve, e.Delay / 1000000));\n        }\n      })\n      .catch(err => {\n        this.setErrorText(err);\n      });\n  }\n}\n\nexport function initPlaygrounds(): void {\n  const exampleHashRegex = location.hash.match(/^#(example-.*)$/);\n  if (exampleHashRegex) {\n    const exampleHashEl = document.getElementById(exampleHashRegex[1]) as HTMLDetailsElement;\n    if (exampleHashEl) {\n      exampleHashEl.open = true;\n    }\n  }\n\n  // We use a spread operator to convert a nodelist into an array of elements.\n  const exampleHrefs = [\n    ...document.querySelectorAll<HTMLAnchorElement>(PlayExampleClassName.PLAY_HREF),\n  ];\n\n  /**\n   * Sometimes exampleHrefs and playContainers are in different order, so we\n   * find an exampleHref from a common hash.\n   * @param playContainer - playground container\n   */\n  const findExampleHash = (playContainer: PlaygroundExampleController) =>\n    exampleHrefs.find(ex => {\n      return ex.hash === playContainer.getAnchorHash();\n    });\n\n  for (const el of document.querySelectorAll(PlayExampleClassName.PLAY_CONTAINER)) {\n    // There should be the same amount of hrefs referencing examples as example containers.\n    const playContainer = new PlaygroundExampleController(el as HTMLDetailsElement);\n    const exampleHref = findExampleHash(playContainer);\n    if (exampleHref) {\n      exampleHref.addEventListener('click', () => {\n        playContainer.expand();\n      });\n    } else {\n      console.warn('example href not found');\n    }\n  }\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nimport { TreeNavController } from './tree.js';\n\nexport class SelectNavController {\n  constructor(private el: Element) {\n    this.el.addEventListener('change', e => {\n      const target = e.target as HTMLSelectElement;\n      let href = target.value;\n      if (!target.value.startsWith('/')) {\n        href = '/' + href;\n      }\n      window.location.href = href;\n    });\n  }\n}\n\nexport function makeSelectNav(tree: TreeNavController): HTMLLabelElement {\n  const label = document.createElement('label');\n  label.classList.add('go-Label');\n  label.setAttribute('aria-label', 'Menu');\n  const select = document.createElement('select');\n  select.classList.add('go-Select', 'js-selectNav');\n  label.appendChild(select);\n  const outline = document.createElement('optgroup');\n  outline.label = 'Outline';\n  select.appendChild(outline);\n  const groupMap: Record<string, HTMLOptGroupElement> = {};\n  let group: HTMLOptGroupElement;\n  for (const t of tree.treeitems) {\n    if (Number(t.depth) > 4) continue;\n    if (t.groupTreeitem) {\n      group = groupMap[t.groupTreeitem.label];\n      if (!group) {\n        group = groupMap[t.groupTreeitem.label] = document.createElement('optgroup');\n        group.label = t.groupTreeitem.label;\n        select.appendChild(group);\n      }\n    } else {\n      group = outline;\n    }\n    const o = document.createElement('option');\n    o.label = t.label;\n    o.textContent = t.label;\n    o.value = (t.el as HTMLAnchorElement).href.replace(window.location.origin, '').replace('/', '');\n    group.appendChild(o);\n  }\n  tree.addObserver(t => {\n    const hash = (t.el as HTMLAnchorElement).hash;\n    const value = select.querySelector<HTMLOptionElement>(`[value$=\"${hash}\"]`)?.value;\n    if (value) {\n      select.value = value;\n    }\n  }, 50);\n  return label;\n}\n", "/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * TreeNavController is the navigation tree component of the documentation page.\n * It adds accessiblity attributes to a tree, observes the heading elements\n * focus the topmost link for headings visible on the page, and implements the\n * WAI-ARIA Treeview Design Pattern with full\n * [keyboard support](https://www.w3.org/TR/wai-aria-practices/examples/treeview/treeview-2/treeview-2a.html#kbd_label).\n */\nexport class TreeNavController {\n  treeitems: TreeItem[];\n\n  /**\n   * firstChars is the first character of each treeitem in the same order\n   * as this.treeitems. We use this array to set focus by character when\n   * navigating the tree with a keyboard.\n   */\n  private firstChars: string[];\n  private firstTreeitem: TreeItem | null;\n  private lastTreeitem: TreeItem | null;\n  private observerCallbacks: ((t: TreeItem) => void)[];\n\n  constructor(private el: HTMLElement) {\n    this.treeitems = [];\n    this.firstChars = [];\n    this.firstTreeitem = null;\n    this.lastTreeitem = null;\n    this.observerCallbacks = [];\n    this.init();\n  }\n\n  private init(): void {\n    this.handleResize();\n    window.addEventListener('resize', this.handleResize);\n    this.findTreeItems();\n    this.updateVisibleTreeitems();\n    this.observeTargets();\n    if (this.firstTreeitem) {\n      this.firstTreeitem.el.tabIndex = 0;\n    }\n  }\n\n  private handleResize = (): void => {\n    this.el.style.setProperty('--js-tree-height', '100vh');\n    this.el.style.setProperty('--js-tree-height', this.el.clientHeight + 'px');\n  };\n\n  private observeTargets() {\n    this.addObserver(treeitem => {\n      this.expandTreeitem(treeitem);\n      this.setSelected(treeitem);\n      // TODO: Fix scroll issue in https://golang.org/issue/47450.\n      // treeitem.el.scrollIntoView({ block: 'nearest' });\n    });\n\n    const targets = new Map<string, boolean>();\n    const observer = new IntersectionObserver(\n      entries => {\n        for (const entry of entries) {\n          targets.set(entry.target.id, entry.isIntersecting || entry.intersectionRatio === 1);\n        }\n        for (const [id, isIntersecting] of targets) {\n          if (isIntersecting) {\n            const active = this.treeitems.find(t =>\n              (t.el as HTMLAnchorElement)?.href.endsWith(`#${id}`)\n            );\n            if (active) {\n              for (const fn of this.observerCallbacks) {\n                fn(active);\n              }\n            }\n            break;\n          }\n        }\n      },\n      {\n        threshold: 1.0,\n        rootMargin: '-60px 0px 0px 0px',\n      }\n    );\n\n    for (const href of this.treeitems.map(t => t.el.getAttribute('href'))) {\n      if (href) {\n        const id = href.replace(window.location.origin, '').replace('/', '').replace('#', '');\n        const target = document.getElementById(id);\n        if (target) {\n          observer.observe(target);\n        }\n      }\n    }\n  }\n\n  addObserver(fn: (t: TreeItem) => void, delay = 200): void {\n    this.observerCallbacks.push(debounce(fn, delay));\n  }\n\n  setFocusToNextItem(currentItem: TreeItem): void {\n    let nextItem = null;\n    for (let i = currentItem.index + 1; i < this.treeitems.length; i++) {\n      const ti = this.treeitems[i];\n      if (ti.isVisible) {\n        nextItem = ti;\n        break;\n      }\n    }\n    if (nextItem) {\n      this.setFocusToItem(nextItem);\n    }\n  }\n\n  setFocusToPreviousItem(currentItem: TreeItem): void {\n    let prevItem = null;\n    for (let i = currentItem.index - 1; i > -1; i--) {\n      const ti = this.treeitems[i];\n      if (ti.isVisible) {\n        prevItem = ti;\n        break;\n      }\n    }\n    if (prevItem) {\n      this.setFocusToItem(prevItem);\n    }\n  }\n\n  setFocusToParentItem(currentItem: TreeItem): void {\n    if (currentItem.groupTreeitem) {\n      this.setFocusToItem(currentItem.groupTreeitem);\n    }\n  }\n\n  setFocusToFirstItem(): void {\n    this.firstTreeitem && this.setFocusToItem(this.firstTreeitem);\n  }\n\n  setFocusToLastItem(): void {\n    this.lastTreeitem && this.setFocusToItem(this.lastTreeitem);\n  }\n\n  setSelected(currentItem: TreeItem): void {\n    for (const l1 of this.el.querySelectorAll('[aria-expanded=\"true\"]')) {\n      if (l1 === currentItem.el) continue;\n      if (!l1.nextElementSibling?.contains(currentItem.el)) {\n        l1.setAttribute('aria-expanded', 'false');\n      }\n    }\n    for (const l1 of this.el.querySelectorAll('[aria-selected]')) {\n      if (l1 !== currentItem.el) {\n        l1.setAttribute('aria-selected', 'false');\n      }\n    }\n    currentItem.el.setAttribute('aria-selected', 'true');\n    this.updateVisibleTreeitems();\n    this.setFocusToItem(currentItem, false);\n  }\n\n  expandTreeitem(treeitem: TreeItem): void {\n    let currentItem: TreeItem | null = treeitem;\n    while (currentItem) {\n      if (currentItem.isExpandable) {\n        currentItem.el.setAttribute('aria-expanded', 'true');\n      }\n      currentItem = currentItem.groupTreeitem;\n    }\n    this.updateVisibleTreeitems();\n  }\n\n  expandAllSiblingItems(currentItem: TreeItem): void {\n    for (const ti of this.treeitems) {\n      if (ti.groupTreeitem === currentItem.groupTreeitem && ti.isExpandable) {\n        this.expandTreeitem(ti);\n      }\n    }\n  }\n\n  collapseTreeitem(currentItem: TreeItem): void {\n    let groupTreeitem = null;\n\n    if (currentItem.isExpanded()) {\n      groupTreeitem = currentItem;\n    } else {\n      groupTreeitem = currentItem.groupTreeitem;\n    }\n\n    if (groupTreeitem) {\n      groupTreeitem.el.setAttribute('aria-expanded', 'false');\n      this.updateVisibleTreeitems();\n      this.setFocusToItem(groupTreeitem);\n    }\n  }\n\n  setFocusByFirstCharacter(currentItem: TreeItem, char: string): void {\n    let start: number, index: number;\n    char = char.toLowerCase();\n\n    // Get start index for search based on position of currentItem\n    start = currentItem.index + 1;\n    if (start === this.treeitems.length) {\n      start = 0;\n    }\n\n    // Check remaining slots in the menu\n    index = this.getIndexFirstChars(start, char);\n\n    // If not found in remaining slots, check from beginning\n    if (index === -1) {\n      index = this.getIndexFirstChars(0, char);\n    }\n\n    // If match was found...\n    if (index > -1) {\n      this.setFocusToItem(this.treeitems[index]);\n    }\n  }\n\n  private findTreeItems() {\n    const findItems = (el: HTMLElement, group: TreeItem | null) => {\n      let ti = group;\n      let curr = el.firstElementChild as HTMLElement;\n      while (curr) {\n        if (curr.tagName === 'A' || curr.tagName === 'SPAN') {\n          ti = new TreeItem(curr, this, group);\n          this.treeitems.push(ti);\n          this.firstChars.push(ti.label.substring(0, 1).toLowerCase());\n        }\n        if (curr.firstElementChild) {\n          findItems(curr, ti);\n        }\n        curr = curr.nextElementSibling as HTMLElement;\n      }\n    };\n    findItems(this.el as HTMLElement, null);\n    this.treeitems.map((ti, idx) => (ti.index = idx));\n  }\n\n  private updateVisibleTreeitems(): void {\n    this.firstTreeitem = this.treeitems[0];\n\n    for (const ti of this.treeitems) {\n      let parent = ti.groupTreeitem;\n      ti.isVisible = true;\n      while (parent && parent.el !== this.el) {\n        if (!parent.isExpanded()) {\n          ti.isVisible = false;\n        }\n        parent = parent.groupTreeitem;\n      }\n      if (ti.isVisible) {\n        this.lastTreeitem = ti;\n      }\n    }\n  }\n\n  private setFocusToItem(treeitem: TreeItem, focusEl = true) {\n    treeitem.el.tabIndex = 0;\n    if (focusEl) {\n      treeitem.el.focus();\n    }\n    for (const ti of this.treeitems) {\n      if (ti !== treeitem) {\n        ti.el.tabIndex = -1;\n      }\n    }\n  }\n\n  private getIndexFirstChars(startIndex: number, char: string): number {\n    for (let i = startIndex; i < this.firstChars.length; i++) {\n      if (this.treeitems[i].isVisible && char === this.firstChars[i]) {\n        return i;\n      }\n    }\n    return -1;\n  }\n}\n\nclass TreeItem {\n  el: HTMLElement;\n  groupTreeitem: TreeItem | null;\n  label: string;\n  isExpandable: boolean;\n  isVisible: boolean;\n  depth: number;\n  index: number;\n\n  private tree: TreeNavController;\n  private isInGroup: boolean;\n\n  constructor(el: HTMLElement, treeObj: TreeNavController, group: TreeItem | null) {\n    el.tabIndex = -1;\n    this.el = el;\n    this.groupTreeitem = group;\n    this.label = el.textContent?.trim() ?? '';\n    this.tree = treeObj;\n    this.depth = (group?.depth || 0) + 1;\n    this.index = 0;\n\n    const parent = el.parentElement;\n    if (parent?.tagName.toLowerCase() === 'li') {\n      parent?.setAttribute('role', 'none');\n    }\n    el.setAttribute('aria-level', this.depth + '');\n    if (el.getAttribute('aria-label')) {\n      this.label = el?.getAttribute('aria-label')?.trim() ?? '';\n    }\n\n    this.isExpandable = false;\n    this.isVisible = false;\n    this.isInGroup = !!group;\n\n    let curr = el.nextElementSibling;\n    while (curr) {\n      if (curr.tagName.toLowerCase() == 'ul') {\n        const groupId = `${group?.label ?? ''} nav group ${this.label}`.replace(/[\\W_]+/g, '_');\n        el.setAttribute('aria-owns', groupId);\n        el.setAttribute('aria-expanded', 'false');\n        curr.setAttribute('role', 'group');\n        curr.setAttribute('id', groupId);\n        this.isExpandable = true;\n        break;\n      }\n\n      curr = curr.nextElementSibling;\n    }\n    this.init();\n  }\n\n  private init() {\n    this.el.tabIndex = -1;\n    if (!this.el.getAttribute('role')) {\n      this.el.setAttribute('role', 'treeitem');\n    }\n    this.el.addEventListener('keydown', this.handleKeydown.bind(this));\n    this.el.addEventListener('click', this.handleClick.bind(this));\n    this.el.addEventListener('focus', this.handleFocus.bind(this));\n    this.el.addEventListener('blur', this.handleBlur.bind(this));\n  }\n\n  isExpanded() {\n    if (this.isExpandable) {\n      return this.el.getAttribute('aria-expanded') === 'true';\n    }\n\n    return false;\n  }\n\n  isSelected() {\n    return this.el.getAttribute('aria-selected') === 'true';\n  }\n\n  private handleClick(event: MouseEvent) {\n    // only process click events that directly happened on this treeitem\n    if (event.target !== this.el && event.target !== this.el.firstElementChild) {\n      return;\n    }\n    if (this.isExpandable) {\n      if (this.isExpanded() && this.isSelected()) {\n        this.tree.collapseTreeitem(this);\n      } else {\n        this.tree.expandTreeitem(this);\n      }\n      event.stopPropagation();\n    }\n    this.tree.setSelected(this);\n  }\n\n  private handleFocus() {\n    let el = this.el;\n    if (this.isExpandable) {\n      el = (el.firstElementChild as HTMLElement) ?? el;\n    }\n    el.classList.add('focus');\n  }\n\n  private handleBlur() {\n    let el = this.el;\n    if (this.isExpandable) {\n      el = (el.firstElementChild as HTMLElement) ?? el;\n    }\n    el.classList.remove('focus');\n  }\n\n  private handleKeydown(event: KeyboardEvent) {\n    if (event.altKey || event.ctrlKey || event.metaKey) {\n      return;\n    }\n\n    let captured = false;\n    switch (event.key) {\n      case ' ':\n      case 'Enter':\n        if (this.isExpandable) {\n          if (this.isExpanded() && this.isSelected()) {\n            this.tree.collapseTreeitem(this);\n          } else {\n            this.tree.expandTreeitem(this);\n          }\n          captured = true;\n        } else {\n          event.stopPropagation();\n        }\n        this.tree.setSelected(this);\n        break;\n\n      case 'ArrowUp':\n        this.tree.setFocusToPreviousItem(this);\n        captured = true;\n        break;\n\n      case 'ArrowDown':\n        this.tree.setFocusToNextItem(this);\n        captured = true;\n        break;\n\n      case 'ArrowRight':\n        if (this.isExpandable) {\n          if (this.isExpanded()) {\n            this.tree.setFocusToNextItem(this);\n          } else {\n            this.tree.expandTreeitem(this);\n          }\n        }\n        captured = true;\n        break;\n\n      case 'ArrowLeft':\n        if (this.isExpandable && this.isExpanded()) {\n          this.tree.collapseTreeitem(this);\n          captured = true;\n        } else {\n          if (this.isInGroup) {\n            this.tree.setFocusToParentItem(this);\n            captured = true;\n          }\n        }\n        break;\n\n      case 'Home':\n        this.tree.setFocusToFirstItem();\n        captured = true;\n        break;\n\n      case 'End':\n        this.tree.setFocusToLastItem();\n        captured = true;\n        break;\n\n      default:\n        if (event.key.length === 1 && event.key.match(/\\S/)) {\n          if (event.key == '*') {\n            this.tree.expandAllSiblingItems(this);\n          } else {\n            this.tree.setFocusByFirstCharacter(this, event.key);\n          }\n          captured = true;\n        }\n        break;\n    }\n\n    if (captured) {\n      event.stopPropagation();\n      event.preventDefault();\n    }\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction debounce<T extends (...args: any[]) => any>(func: T, wait: number) {\n  let timeout: ReturnType<typeof setTimeout> | null;\n  return (...args: Parameters<T>) => {\n    const later = () => {\n      timeout = null;\n      func(...args);\n    };\n    if (timeout) {\n      clearTimeout(timeout);\n    }\n    timeout = setTimeout(later, wait);\n  };\n}\n", "/*!\n * @license\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Controller for a table element with expandable rows. Adds event listeners to\n * a toggle within a table row that controls visiblity of additional related\n * rows in the table.\n *\n * @example\n * ```typescript\n * import {ExpandableRowsTableController} from '/static/js/table';\n *\n * const el = document .querySelector<HTMLTableElement>('.js-myTableElement')\n * new ExpandableRowsTableController(el));\n * ```\n */\nexport class ExpandableRowsTableController {\n  private rows: HTMLTableRowElement[];\n  private toggles: HTMLButtonElement[];\n\n  /**\n   * Create a table controller.\n   * @param table - The table element to which the controller binds.\n   */\n  constructor(private table: HTMLTableElement, private toggleAll?: HTMLButtonElement | null) {\n    this.rows = Array.from(table.querySelectorAll<HTMLTableRowElement>('[data-aria-controls]'));\n    this.toggles = Array.from(this.table.querySelectorAll('[aria-expanded]'));\n    this.setAttributes();\n    this.attachEventListeners();\n    this.update();\n  }\n\n  /**\n   * setAttributes sets data-aria-* and data-id attributes to regular\n   * html attributes as a workaround for limitations from safehtml.\n   */\n  private setAttributes() {\n    for (const a of ['data-aria-controls', 'data-aria-labelledby', 'data-id']) {\n      this.table.querySelectorAll(`[${a}]`).forEach(t => {\n        t.setAttribute(a.replace('data-', ''), t.getAttribute(a) ?? '');\n        t.removeAttribute(a);\n      });\n    }\n  }\n\n  private attachEventListeners() {\n    this.rows.forEach(t => {\n      t.addEventListener('click', e => {\n        this.handleToggleClick(e);\n      });\n    });\n    this.toggleAll?.addEventListener('click', () => {\n      this.expandAllItems();\n    });\n\n    document.addEventListener('keydown', e => {\n      if ((e.ctrlKey || e.metaKey) && e.key === 'f') {\n        this.expandAllItems();\n      }\n    });\n  }\n\n  private handleToggleClick(e: MouseEvent) {\n    let target = e.currentTarget as HTMLTableRowElement | null;\n    if (!target?.hasAttribute('aria-expanded')) {\n      target = this.table.querySelector(\n        `button[aria-controls=\"${target?.getAttribute('aria-controls')}\"]`\n      );\n    }\n    const isExpanded = target?.getAttribute('aria-expanded') === 'true';\n    target?.setAttribute('aria-expanded', isExpanded ? 'false' : 'true');\n    e.stopPropagation();\n    this.update();\n  }\n\n  expandAllItems = (): void => {\n    this.toggles.map(t => t.setAttribute('aria-expanded', 'true'));\n    this.update();\n  };\n\n  private collapseAllItems = () => {\n    this.toggles.map(t => t.setAttribute('aria-expanded', 'false'));\n    this.update();\n  };\n\n  private update = () => {\n    this.updateVisibleItems();\n    setTimeout(() => this.updateGlobalToggle());\n  };\n\n  private updateVisibleItems() {\n    this.rows.map(t => {\n      const isExpanded = t?.getAttribute('aria-expanded') === 'true';\n      const rowIds = t?.getAttribute('aria-controls')?.trimEnd().split(' ');\n      rowIds?.map(id => {\n        const target = document.getElementById(`${id}`);\n        if (isExpanded) {\n          target?.classList.add('visible');\n          target?.classList.remove('hidden');\n        } else {\n          target?.classList.add('hidden');\n          target?.classList.remove('visible');\n        }\n      });\n    });\n  }\n\n  private updateGlobalToggle() {\n    if (!this.toggleAll) return;\n    if (this.rows.some(t => t.hasAttribute('aria-expanded'))) {\n      this.toggleAll.style.display = 'block';\n    }\n    const someCollapsed = this.toggles.some(el => el.getAttribute('aria-expanded') === 'false');\n    if (someCollapsed) {\n      this.toggleAll.innerText = 'Expand all';\n      this.toggleAll.onclick = this.expandAllItems;\n      this.toggleAll.setAttribute('aria-label', 'Expand all directories');\n      this.toggleAll.setAttribute('aria-live', 'polite');\n    } else {\n      this.toggleAll.innerText = 'Collapse all';\n      this.toggleAll.onclick = this.collapseAllItems;\n      this.toggleAll.setAttribute('aria-label', 'Collapse all directories');\n      this.toggleAll.setAttribute('aria-live', 'polite');\n    }\n  }\n}\n", "import { initPlaygrounds } from 'static/shared/playground/playground';\nimport { SelectNavController, makeSelectNav } from 'static/shared/outline/select';\nimport { TreeNavController } from 'static/shared/outline/tree';\nimport { ExpandableRowsTableController } from 'static/shared/table/table';\n\ninitPlaygrounds();\n\nconst directories = document.querySelector<HTMLTableElement>('.js-expandableTable');\nif (directories) {\n  const table = new ExpandableRowsTableController(\n    directories,\n    document.querySelector<HTMLButtonElement>('.js-expandAllDirectories')\n  );\n  // Expand directories on page load with expand-directories query param.\n  if (window.location.search.includes('expand-directories')) {\n    table.expandAllItems();\n  }\n\n  const internalToggle = document.querySelector<HTMLButtonElement>('.js-showInternalDirectories');\n  if (internalToggle) {\n    if (document.querySelector('.UnitDirectories-internal')) {\n      internalToggle.style.display = 'block';\n      internalToggle.setAttribute('aria-label', 'Show Internal Directories');\n      internalToggle.setAttribute('aria-describedby', 'showInternal-description');\n    }\n    internalToggle.addEventListener('click', () => {\n      if (directories.classList.contains('UnitDirectories-showInternal')) {\n        directories.classList.remove('UnitDirectories-showInternal');\n        internalToggle.innerText = 'Show internal';\n        internalToggle.setAttribute('aria-label', 'Show Internal Directories');\n        internalToggle.setAttribute('aria-live', 'polite');\n        internalToggle.setAttribute('aria-describedby', 'showInternal-description');\n      } else {\n        directories.classList.add('UnitDirectories-showInternal');\n        internalToggle.innerText = 'Hide internal';\n        internalToggle.setAttribute('aria-label', 'Hide Internal Directories');\n        internalToggle.setAttribute('aria-live', 'polite');\n        internalToggle.setAttribute('aria-describedby', 'hideInternal-description');\n      }\n    });\n  }\n  if (document.querySelector('html[data-local=\"true\"]')) {\n    internalToggle?.click();\n  }\n}\n\nconst treeEl = document.querySelector<HTMLElement>('.js-tree');\nif (treeEl) {\n  const treeCtrl = new TreeNavController(treeEl);\n  const select = makeSelectNav(treeCtrl);\n  const mobileNav = document.querySelector('.js-mainNavMobile');\n  if (mobileNav && mobileNav.firstElementChild) {\n    mobileNav?.replaceChild(select, mobileNav.firstElementChild);\n  }\n  if (select.firstElementChild) {\n    new SelectNavController(select.firstElementChild);\n  }\n}\n\n/**\n * Event handlers for expanding and collapsing the readme section.\n */\nconst readme = document.querySelector('.js-readme');\nconst readmeContent = document.querySelector('.js-readmeContent');\nconst readmeOutline = document.querySelector('.js-readmeOutline');\nconst readmeExpand = document.querySelectorAll('.js-readmeExpand');\nconst readmeCollapse = document.querySelector('.js-readmeCollapse');\nconst mobileNavSelect = document.querySelector<HTMLSelectElement>('.DocNavMobile-select');\nif (readme && readmeContent && readmeOutline && readmeExpand.length && readmeCollapse) {\n  if (readme.clientHeight > 320) {\n    readme?.classList.remove('UnitReadme--expanded');\n    readme?.classList.add('UnitReadme--toggle');\n  }\n  if (window.location.hash.includes('readme')) {\n    expandReadme();\n  }\n  mobileNavSelect?.addEventListener('change', e => {\n    if ((e.target as HTMLSelectElement).value.startsWith('readme-')) {\n      expandReadme();\n    }\n  });\n  readmeExpand.forEach(el =>\n    el.addEventListener('click', e => {\n      e.preventDefault();\n      expandReadme();\n      readme.scrollIntoView();\n    })\n  );\n  readmeCollapse.addEventListener('click', e => {\n    e.preventDefault();\n    readme.classList.remove('UnitReadme--expanded');\n    if (readmeExpand[1]) {\n      readmeExpand[1].scrollIntoView({ block: 'center' });\n    }\n  });\n  readmeContent.addEventListener('keyup', () => {\n    expandReadme();\n  });\n  readmeContent.addEventListener('click', () => {\n    expandReadme();\n  });\n  readmeOutline.addEventListener('click', () => {\n    expandReadme();\n  });\n  document.addEventListener('keydown', e => {\n    if ((e.ctrlKey || e.metaKey) && e.key === 'f') {\n      expandReadme();\n    }\n  });\n}\n\n/**\n * expandReadme expands the readme and adds the section-readme hash to the\n * URL so it stays expanded when navigating back from an external link.\n */\nfunction expandReadme() {\n  history.replaceState(null, '', `${location.pathname}#section-readme`);\n  readme?.classList.add('UnitReadme--expanded');\n}\n\n/**\n * Expand details items that are focused. This will expand\n * deprecated symbols when they are navigated to from the index\n * or a direct link.\n */\nfunction openDeprecatedSymbol() {\n  if (!location.hash) return;\n  const heading = document.getElementById(location.hash.slice(1));\n  const grandParent = heading?.parentElement?.parentElement as HTMLDetailsElement | null;\n  if (grandParent?.nodeName === 'DETAILS') {\n    grandParent.open = true;\n  }\n}\nopenDeprecatedSymbol();\nwindow.addEventListener('hashchange', () => openDeprecatedSymbol());\n\n/**\n * Listen for changes in the build context dropdown.\n */\ndocument.querySelectorAll('.js-buildContextSelect').forEach(el => {\n  el.addEventListener('change', e => {\n    window.location.search = `?GOOS=${(e.target as HTMLSelectElement).value}`;\n  });\n});\n"],
-  "mappings": "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",
-  "names": ["PlayExampleClassName", "PlaygroundExampleController", "exampleEl", "e", "el", "numLineBreaks", "output", "err", "codeWithModFile", "moduleVars", "PLAYGROUND_BASE_URL", "res", "shareId", "href", "body", "Body", "Error", "Events", "Errors", "resolve", "initPlaygrounds", "exampleHashRegex", "exampleHashEl", "exampleHrefs", "findExampleHash", "playContainer", "ex", "exampleHref", "SelectNavController", "el", "e", "target", "href", "makeSelectNav", "tree", "label", "select", "outline", "groupMap", "group", "t", "o", "hash", "value", "TreeNavController", "el", "treeitem", "targets", "observer", "entries", "entry", "id", "isIntersecting", "active", "t", "fn", "href", "target", "delay", "debounce", "currentItem", "nextItem", "ti", "prevItem", "l1", "groupTreeitem", "char", "start", "index", "findItems", "group", "curr", "TreeItem", "idx", "parent", "focusEl", "startIndex", "treeObj", "groupId", "event", "captured", "func", "wait", "timeout", "args", "later", "ExpandableRowsTableController", "table", "toggleAll", "t", "a", "e", "target", "isExpanded", "id", "el", "initPlaygrounds", "directories", "table", "ExpandableRowsTableController", "internalToggle", "treeEl", "treeCtrl", "TreeNavController", "select", "makeSelectNav", "mobileNav", "SelectNavController", "readme", "readmeContent", "readmeOutline", "readmeExpand", "readmeCollapse", "mobileNavSelect", "expandReadme", "e", "el", "openDeprecatedSymbol", "grandParent"]
+  "mappings": "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",
+  "names": ["PlayExampleClassName", "PlaygroundExampleController", "exampleEl", "_a", "_b", "_c", "_d", "e", "el", "numLineBreaks", "output", "err", "codeWithModFile", "moduleVars", "PLAYGROUND_BASE_URL", "res", "shareId", "href", "body", "Body", "Error", "Events", "Errors", "resolve", "initPlaygrounds", "exampleHashRegex", "exampleHashEl", "exampleHrefs", "findExampleHash", "playContainer", "ex", "exampleHref", "SelectNavController", "el", "e", "target", "href", "makeSelectNav", "tree", "label", "select", "outline", "groupMap", "group", "t", "o", "_a", "hash", "value", "TreeNavController", "el", "treeitem", "targets", "observer", "entries", "entry", "id", "isIntersecting", "active", "t", "_a", "fn", "href", "target", "delay", "debounce", "currentItem", "nextItem", "ti", "prevItem", "l1", "groupTreeitem", "char", "start", "index", "findItems", "group", "curr", "TreeItem", "idx", "parent", "focusEl", "startIndex", "treeObj", "_b", "_c", "_d", "_e", "groupId", "event", "captured", "func", "wait", "timeout", "args", "later", "ExpandableRowsTableController", "table", "toggleAll", "t", "a", "_a", "e", "target", "isExpanded", "rowIds", "id", "el", "initPlaygrounds", "directories", "table", "ExpandableRowsTableController", "internalToggle", "treeEl", "treeCtrl", "TreeNavController", "select", "makeSelectNav", "mobileNav", "SelectNavController", "readme", "readmeContent", "readmeOutline", "readmeExpand", "readmeCollapse", "mobileNavSelect", "expandReadme", "e", "el", "openDeprecatedSymbol", "_a", "heading", "grandParent"]
 }
diff --git a/static/frontend/unit/main/main.min.css.map b/static/frontend/unit/main/main.min.css.map
index 40fd0d2..2fc759e 100644
--- a/static/frontend/unit/main/main.min.css.map
+++ b/static/frontend/unit/main/main.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["_build-context.css", "_directories.css", "_doc.css", "_files.css", "_meta.css", "_outline.css", "_readme_gen.css", "_readme.css", "main.css"],
   "sourcesContent": ["/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.UnitBuildContext-titleContext label,\n.UnitBuildContext-singleContext {\n  color: var(--color-text-subtle);\n  font-size: 0.875rem;\n}\n\n.UnitBuildContext-singleContext {\n  padding: 0.35rem 0;\n}\n\n.UnitBuildContext-titleContext select {\n  border-color: var(--color-border);\n  color: var(--color-text-subtle);\n  margin-left: 0.25rem;\n  min-width: 6rem;\n}\n\n.UnitBuildContext-titleContext option {\n  color: var(--color-text-subtle);\n}\n\n.UnitBuildContext-link {\n  display: none;\n}\n@media only screen and (min-width: 30rem) {\n  .UnitBuildContext-link {\n    display: initial;\n  }\n}\n\n.UnitDoc .UnitBuildContext-titleContext {\n  position: relative;\n}\n\n.UnitDoc .UnitBuildContext-titleContext label,\n.UnitDoc .UnitBuildContext-singleContext {\n  bottom: 0.875rem;\n  position: absolute;\n  right: 0;\n}\n", "/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.UnitDirectories {\n  margin-bottom: 2rem;\n}\n\n.UnitDirectories h2 a.UnitDirectories-idLink,\n.UnitDirectories summary a {\n  opacity: 0;\n}\n\n.UnitDirectories h2:hover a,\n.UnitDirectories summary:focus a {\n  opacity: 1;\n}\n\n.UnitDirectories-title {\n  border-bottom: var(--border);\n  font-size: 1.375rem;\n  margin: 0.5rem 0 0;\n  padding-bottom: 1rem;\n}\n\n.UnitDirectories-title img {\n  margin: auto 1rem auto 0;\n}\n\n.UnitDirectories-table {\n  border-collapse: collapse;\n  height: 0;\n  table-layout: auto;\n  width: 100%;\n}\n\n.UnitDirectories-table--tree {\n  margin-top: -2rem;\n}\n\n.UnitDirectories-tableHeader {\n  background-color: var(--color-background-accented);\n}\n\n.UnitDirectories-tableHeader--tree {\n  visibility: hidden;\n}\n\n.UnitDirectories td {\n  border-bottom: var(--border);\n  max-width: 32rem;\n  min-width: 12rem;\n  padding: 0.25rem 1rem;\n  vertical-align: middle;\n  word-break: break-word;\n}\n\n.UnitDirectories th {\n  padding: 0.5rem 1rem;\n  text-align: left;\n}\n\n.UnitDirectories tr.hidden {\n  display: none;\n}\n\n.UnitDirectories tr[aria-controls] {\n  cursor: pointer;\n}\n\n.UnitDirectories tr[aria-controls]:hover {\n  background-color: var(--color-background-accented);\n}\n\n.UnitDirectories th.UnitDirectories-toggleHead {\n  font-size: 0;\n  max-width: 0.625rem;\n  padding: 0;\n  width: 0.625rem;\n}\n\n.UnitDirectories td.UnitDirectories-toggleCell,\nth.UnitDirectories-toggleCell {\n  background-color: var(--background);\n  border: var(--white);\n  max-width: 0.625rem;\n  padding: 0;\n  width: 0.625rem;\n}\n\n.UnitDirectories-toggleButton {\n  font-size: 1.25rem;\n  left: -0.75rem;\n  margin: 0 0 -1rem -0.875rem;\n  padding: 0;\n  position: absolute;\n  vertical-align: top;\n}\n\n.UnitDirectories-subSpacer {\n  border-right: var(--border);\n  display: inline;\n  margin-right: 0.875rem;\n  width: 0.0625rem;\n}\n\n.UnitDirectories-toggleButton[aria-expanded='true'] img {\n  transform: rotate(90deg);\n}\n\n.UnitDirectories-pathCell {\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  line-height: 1.75rem;\n  word-break: break-all;\n}\n\n.UnitDirectories-pathCell > div {\n  position: relative;\n}\n\n.UnitDirectories-subdirectory {\n  border-left: var(--border);\n  display: flex;\n  flex-direction: column;\n  margin-left: 0.375rem;\n  padding: 0.5rem 1rem;\n}\n\n.UnitDirectories-internal {\n  display: none;\n}\n\n.UnitDirectories-showInternal .UnitDirectories-internal {\n  display: table-row;\n}\n\n.UnitDirectories-mobileSynopsis {\n  display: none;\n  line-height: 1.25rem;\n  margin-top: 0.25rem;\n  word-break: keep-all;\n}\n@media only screen and (max-width: 52rem) {\n  .UnitDirectories-mobileSynopsis {\n    display: initial;\n  }\n\n  .UnitDirectories-table th.UnitDirectories-desktopSynopsis,\n  .UnitDirectories-table td.UnitDirectories-desktopSynopsis {\n    display: none;\n  }\n}\n\n.UnitDirectories-toggles {\n  position: relative;\n}\n\n.UnitDirectories-toggleButtons {\n  bottom: 1rem;\n  display: flex;\n  gap: 1rem;\n  position: absolute;\n  right: 0;\n}\n\n.UnitDirectories-toggleButtons button {\n  background-color: transparent;\n  border: none;\n  color: var(--color-brand-primary);\n  cursor: pointer;\n  display: none;\n  font-size: 0.875rem;\n  text-decoration: none;\n}\n\n.UnitDirectories-badge {\n  border: 0.0625rem solid var(--color-text-subtle);\n  border-radius: 0.125rem;\n  font-size: 0.6875rem;\n  font-weight: 500;\n  line-height: 1rem;\n  margin-left: 0.5rem;\n  margin-top: 0.125rem;\n  padding: 0 0.35rem;\n  text-align: center;\n}\n", "/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/* stylelint-disable no-descending-specificity */\n.UnitDoc {\n  margin-bottom: 2rem;\n  word-break: break-word;\n}\n\n.UnitDoc h2 a.UnitDoc-idLink,\n.UnitDoc summary a {\n  opacity: 0;\n}\n\n.UnitDoc h2:hover a,\n.UnitDoc summary:focus a {\n  opacity: 1;\n}\n\n.UnitDoc-title {\n  border-bottom: var(--border);\n  padding-bottom: 1rem;\n}\n\n.UnitDoc-title img {\n  margin: auto 1rem auto 0;\n}\n\n.UnitDoc-emptySection {\n  background-color: var(--color-background-accented);\n  color: var(--color-text-subtle);\n  height: 12.25rem;\n  margin-top: 1.5rem;\n  text-align: center;\n}\n\n.UnitDoc-emptySection img {\n  height: 7.8125rem;\n  width: auto;\n}\n\n.Documentation .UnitDoc-emptySection p {\n  margin: 1rem auto;\n}\n\n.UnitDoc .Documentation h4 {\n  margin-top: 1.5rem;\n}\n\n.Documentation {\n  display: block;\n}\n\n.Documentation p {\n  margin: 1rem 0;\n}\n\n.Documentation h2,\n.Documentation h3 {\n  margin-top: 1.5rem;\n}\n\n.Documentation a:hover {\n  text-decoration: underline;\n}\n\n.Documentation h2 a,\n.Documentation h3 a,\n.Documentation h4 a.Documentation-idLink,\n.Documentation summary a {\n  opacity: 0;\n}\n\n.Documentation a:focus {\n  opacity: 1;\n}\n\n.Documentation h3 a.Documentation-source {\n  opacity: 1;\n}\n\n.Documentation h2:hover a,\n.Documentation h3:hover a,\n.Documentation h4:hover a,\n.Documentation summary:hover a,\n.Documentation summary:focus a {\n  opacity: 1;\n}\n\n.Documentation ul {\n  line-height: 1.5rem;\n  list-style: none;\n  padding-left: 0;\n}\n\n.Documentation ul ul {\n  padding-left: 2em;\n}\n\n.Documentation .Documentation-bulletList {\n  list-style: disc;\n  margin-bottom: 1rem;\n  padding-left: 2rem;\n}\n\n.Documentation .Documentation-numberList {\n  list-style: decimal;\n  margin-bottom: 1rem;\n  padding-left: 2rem;\n}\n\n.Documentation pre + pre {\n  margin-top: 0.625rem;\n}\n\n.Documentation .Documentation-declarationLink + pre {\n  border-radius: 0 0 0.3em 0.3em;\n  border-top: var(--border);\n  margin-top: 0;\n}\n\n.Documentation pre .comment {\n  color: var(--color-code-comment);\n}\n\n.Documentation-toc,\n.Documentation-overview,\n.Documentation-index,\n.Documentation-examples {\n  padding-bottom: 0;\n}\n\n.Documentation-empty {\n  color: var(--color-text-subtle);\n  margin-top: -0.5rem;\n}\n@media only screen and (min-width: 64rem) {\n  .Documentation-toc {\n    margin-left: 2rem;\n    white-space: nowrap;\n  }\n\n  .Documentation-toc-columns {\n    columns: 2;\n  }\n}\n\n.Documentation-toc:empty {\n  display: none;\n}\n\n.Documentation-tocItem {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.Documentation-tocItem--constants,\n.Documentation-tocItem--funcsAndTypes,\n.Documentation-tocItem--functions,\n.Documentation-tocItem--types,\n.Documentation-tocItem--variables,\n.Documentation-tocItem--notes {\n  display: none;\n}\n\n.Documentation-overviewHeader,\n.Documentation-indexHeader,\n.Documentation-constantsHeader,\n.Documentation-variablesHeader,\n.Documentation-examplesHeader,\n.Documentation-filesHeader,\n.Documentation-functionHeader,\n.Documentation-typeHeader,\n.Documentation-typeMethodHeader,\n.Documentation-typeFuncHeader {\n  margin-bottom: 0.5rem;\n}\n\n.Documentation-function h4,\n.Documentation-type h4,\n.Documentation-typeFunc h4,\n.Documentation-typeMethod h4 {\n  align-items: baseline;\n  display: flex;\n  justify-content: space-between;\n}\n\n.Documentation-sinceVersion {\n  color: var(--color-text-subtle);\n  font-size: 0.9375rem;\n  font-weight: 400;\n}\n\n.Documentation-constants br:last-of-type,\n.Documentation-variables br:last-of-type {\n  display: none;\n}\n\n.Documentation-build {\n  color: var(--color-text-subtle);\n  padding-top: 1.5rem;\n  text-align: right;\n}\n\n.Documentation-declaration pre {\n  scroll-padding-top: calc(var(--js-sticky-header-height, 3.5rem) + 3.75rem);\n}\n@media only screen and (min-width: 64rem) {\n  .Documentation-declaration pre {\n    scroll-padding-top: calc(var(--js-sticky-header-height, 3.5rem) + 0.75rem);\n  }\n}\n\n.Documentation-declaration + .Documentation-declaration {\n  margin-top: 0.625rem;\n}\n\n.Documentation-declarationLink {\n  background-color: var(--color-background-accented);\n  border: var(--border);\n  border-bottom: none;\n  border-radius: 0.3em 0.3em 0 0;\n  display: block;\n  font-size: 0.75rem;\n  line-height: 0.5rem;\n  padding: 0.375rem;\n  text-align: right;\n}\n\n.Documentation-exampleButtonsContainer {\n  align-items: center;\n  display: flex;\n  justify-content: flex-end;\n  margin-top: 0.5rem;\n}\n\n.Documentation-examplePlayButton {\n  background-color: var(--white);\n  border: 0.15rem solid var(--turq-med);\n  color: var(--turq-med);\n  cursor: pointer;\n  flex-shrink: 0;\n  height: 2.5rem;\n  width: 4.125rem;\n}\n\n.Documentation-exampleRunButton,\n.Documentation-exampleShareButton,\n.Documentation-exampleFormatButton {\n  border: 0.0625rem solid var(--turq-dark);\n  border-radius: 0.25rem;\n  cursor: pointer;\n  height: 2rem;\n  margin-left: 0.5rem;\n  padding: 0 1rem;\n}\n\n.Documentation-exampleRunButton {\n  background-color: var(--turq-dark);\n  color: var(--white);\n}\n\n.Documentation-exampleShareButton,\n.Documentation-exampleFormatButton {\n  background-color: var(--white);\n  color: var(--turq-dark);\n}\n\n.Documentation-exampleDetails {\n  margin-top: 1rem;\n}\n\n.Documentation-exampleDetailsBody pre {\n  border-radius: 0 0 0.3rem 0.3rem;\n  margin-bottom: 1rem;\n  margin-top: -0.25rem;\n}\n\n.Documentation-exampleDetailsBody textarea {\n  height: 100%;\n  outline: none;\n  overflow-x: auto;\n  resize: none;\n  white-space: pre;\n  width: 100%;\n}\n\n/**\n * We add another selector here to these two classes to increase CSS specificity,\n * the selector .Documentation pre + pre overrides .Documentation-exampleCode\n * and .Documentation-exampleOutput by itself and would replace the styles.\n */\n.Documentation-exampleDetailsBody .Documentation-exampleCode {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  margin: 0;\n}\n\n.Documentation-exampleDetailsBody .Documentation-exampleOutput {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  margin: 0 0 0.5rem;\n}\n\n.Documentation-exampleDetailsHeader {\n  color: var(--color-brand-primary);\n  cursor: pointer;\n  margin-bottom: 2rem;\n  outline: none;\n  text-decoration: none;\n}\n\n.Documentation-exampleOutputLabel {\n  color: var(--color-text-subtle);\n}\n\n.Documentation-exampleError {\n  color: var(--pink);\n  margin-right: 0.4rem;\n  padding-right: 0.5rem;\n}\n\n/* See https://golang.org/issue/43368 for context. */\n.Documentation-function pre,\n.Documentation-typeFunc pre,\n.Documentation-typeMethod pre {\n  white-space: pre-wrap;\n  word-break: break-all;\n  word-wrap: break-word;\n}\n\n.Documentation-indexDeprecated {\n  margin-left: 0.5rem;\n}\n\n.Documentation-deprecatedBody {\n  color: var(--color-text-subtle);\n  font-size: 0.87rem;\n  font-weight: 400;\n  margin-left: 0.25rem;\n  margin-right: 0.5rem;\n}\n\n.Documentation-deprecatedTag {\n  background-color: var(--color-border);\n  border-radius: 0.125rem;\n  color: var(--color-text-inverted);\n  font-size: 0.75rem;\n  font-weight: normal;\n  line-height: 1.375;\n  padding: 0.125rem 0.25rem;\n  text-transform: uppercase;\n  vertical-align: middle;\n}\n\n.Documentation-deprecatedTitle {\n  align-items: center;\n  display: flex;\n  gap: 0.5rem;\n}\n\n.Documentation-deprecatedDetails {\n  color: var(--color-text-subtle);\n}\n\n.Documentation-deprecatedDetails a {\n  color: var(--color-text-subtle);\n}\n\n.Documentation-deprecatedDetails[open] {\n  color: var(--color-text);\n}\n\n.Documentation-deprecatedDetails[open] a {\n  color: var(--color-brand-primary);\n}\n\n.Documentation-deprecatedDetails .Documentation-deprecatedBody::after {\n  color: var(--color-brand-primary);\n  content: 'Show';\n}\n\n.Documentation-deprecatedDetails[open] .Documentation-deprecatedBody::after {\n  color: var(--color-brand-primary);\n  content: 'Hide';\n}\n\n.Documentation-deprecatedDetails > summary {\n  list-style: none;\n  opacity: 1;\n}\n\n.Documentation-deprecatedDetails .Documentation-source {\n  opacity: 1;\n}\n\n.Documentation-deprecatedItemBody {\n  padding: 1rem 1rem 0.5rem;\n}\n\n.Documentation-deprecatedMessage {\n  align-items: center;\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n", "/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.UnitFiles {\n  margin-bottom: 2rem;\n}\n\n.UnitFiles-titleLink {\n  position: relative;\n}\n\n.UnitFiles-titleLink a {\n  bottom: 1rem;\n  font-size: 0.875rem;\n  position: absolute;\n  right: 0;\n}\n\n.UnitFiles-titleLink a::after {\n  background-image: url('/static/shared/icon/launch_gm_grey_24dp.svg');\n  background-repeat: no-repeat;\n  background-size: 0.875rem 1.25rem;\n  content: '';\n  display: inline-block;\n  height: 1rem;\n  left: 0.3125rem;\n  position: relative;\n  top: 0.125rem;\n  width: 1rem;\n}\n\n.UnitFiles h2 a.UnitFiles-idLink,\n.UnitFiles summary a {\n  opacity: 0;\n}\n\n.UnitFiles h2:hover a,\n.UnitFiles summary:focus a {\n  opacity: 1;\n}\n\n.UnitFiles-title {\n  border-bottom: var(--border);\n  font-size: 1.375rem;\n  margin: 0.5rem 0 0;\n  padding-bottom: 1rem;\n}\n\n.UnitFiles-title img {\n  margin: auto 1rem auto 0;\n}\n\n.UnitFiles-fileList {\n  columns: 12.5rem 5;\n  line-height: 1.5rem;\n  list-style: none;\n  margin-top: 1rem;\n  padding-left: 0;\n  word-break: break-all;\n}\n", "/*!\n* Copyright 2019-2020 The Go Authors. All rights reserved.\n* Use of this source code is governed by a BSD-style\n* license that can be found in the LICENSE file.\n*/\n\n.UnitMeta {\n  display: grid;\n  gap: 1rem 2rem;\n  grid-template-columns: max-content auto;\n  white-space: nowrap;\n}\n\n.UnitMeta-details,\n.UnitMeta-links {\n  display: flex;\n  flex-flow: wrap;\n  flex-direction: row;\n  gap: 1rem 2rem;\n}\n\n.UnitMeta-repo {\n  align-items: center;\n  display: flex;\n  overflow: hidden;\n}\n\n.UnitMeta-repo a {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n@media (min-width: 50rem) {\n  .UnitMeta {\n    grid-template-columns: max-content auto;\n  }\n\n  .UnitMeta-details,\n  .UnitMeta-links {\n    flex-direction: row;\n  }\n}\n@media (min-width: 112rem) {\n  :root[data-layout='responsive'] .UnitMeta {\n    grid-template-columns: 100%;\n  }\n\n  :root[data-layout='responsive'] .UnitMeta-details,\n  :root[data-layout='responsive'] .UnitMeta-links {\n    flex-direction: column;\n    white-space: nowrap;\n  }\n}\n\n.UnitMeta-detailsLearn {\n  width: 100%;\n}\n@media (min-width: 50rem) {\n  .UnitMeta-detailsLearn {\n    width: initial;\n  }\n}\n", "/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.UnitOutline-jumpTo {\n  display: flex;\n  margin-bottom: 1rem;\n}\n\n.UnitOutline-jumpTo button {\n  align-items: center;\n  background-color: var(--color-background);\n  border: var(--border);\n  border-radius: 0.25rem;\n  color: var(--color-text-subtle);\n  cursor: pointer;\n  height: 2rem;\n  padding-left: 1rem;\n  text-align: left;\n  width: 100%;\n}\n\n.UnitOutline-jumpTo button:hover:not([disabled]) {\n  border-color: var(--color-border);\n}\n\n.UnitOutline-jumpToInput:disabled {\n  background-color: var(--gray-9);\n}\n", "/*!\n* Copyright 2019-2020 The Go Authors. All rights reserved.\n* Use of this source code is governed by a BSD-style\n* license that can be found in the LICENSE file.\n*/\n\n/* ---------- */\n/*\n/* The CSS classes below are generated using devtools/cmd/css/main.go\n/* If the generated CSS already exists, the file is overwritten\n/*\n/* ---------- */\n\n.Overview-readmeContent details {\n  display: block;\n}\n.Overview-readmeContent summary {\n  display: list-item;\n}\n.Overview-readmeContent a {\n  background-color: initial;\n}\n.Overview-readmeContent a:active,\n.Overview-readmeContent a:hover {\n  outline-width: 0;\n}\n.Overview-readmeContent strong {\n  font-weight: inherit;\n  font-weight: bolder;\n}\n.Overview-readmeContent h3 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n.Overview-readmeContent img {\n  border-style: none;\n}\n.Overview-readmeContent code,\n.Overview-readmeContent kbd,\n.Overview-readmeContent pre {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n.Overview-readmeContent hr {\n  box-sizing: initial;\n  height: 0;\n  overflow: visible;\n}\n.Overview-readmeContent input {\n  font: inherit;\n  margin: 0;\n}\n.Overview-readmeContent input {\n  overflow: visible;\n}\n.Overview-readmeContent [type='checkbox'] {\n  box-sizing: border-box;\n  padding: 0;\n}\n.Overview-readmeContent * {\n  box-sizing: border-box;\n}\n.Overview-readmeContent input {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n.Overview-readmeContent a {\n  color: var(--color-brand-primary);\n  text-decoration: none;\n}\n.Overview-readmeContent a:hover {\n  text-decoration: underline;\n}\n.Overview-readmeContent strong {\n  font-weight: 600;\n}\n.Overview-readmeContent hr {\n  height: 0;\n  margin: 0.9375rem 0;\n  overflow: hidden;\n  background: transparent;\n  border: 0;\n  border-bottom: var(--border);\n}\n.Overview-readmeContent hr:after,\n.Overview-readmeContent hr:before {\n  display: table;\n  content: '';\n}\n.Overview-readmeContent hr:after {\n  clear: both;\n}\n.Overview-readmeContent table {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\n.Overview-readmeContent td,\n.Overview-readmeContent th {\n  padding: 0;\n}\n.Overview-readmeContent details summary {\n  cursor: pointer;\n}\n.Overview-readmeContent kbd {\n  display: inline-block;\n  padding: 0.1875rem 0.3125rem;\n  font: 0.6875rem SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n  line-height: 0.625rem;\n  color: #444d56;\n  vertical-align: middle;\n  background-color: var(--color-background-accented);\n  border: var(--border);\n  border-radius: 0.1875rem;\n  box-shadow: inset 0 -0.0625rem 0 var(--border);\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4,\n.Overview-readmeContent h5,\n.Overview-readmeContent h6,\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.Overview-readmeContent h3 {\n  font-size: 2rem;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4 {\n  font-weight: 600;\n}\n.Overview-readmeContent h4 {\n  font-size: 1.5rem;\n}\n.Overview-readmeContent h5 {\n  font-size: 1.25rem;\n}\n.Overview-readmeContent h5,\n.Overview-readmeContent h6 {\n  font-weight: 600;\n}\n.Overview-readmeContent h6 {\n  font-size: 1rem;\n}\n.Overview-readmeContent div[aria-level='7'] {\n  font-size: 0.875rem;\n}\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n  font-weight: 600;\n}\n.Overview-readmeContent div[aria-level='8'] {\n  font-size: 0.75rem;\n}\n.Overview-readmeContent p {\n  margin-top: 0;\n  margin-bottom: 0.625rem;\n}\n.Overview-readmeContent blockquote {\n  margin: 0;\n}\n.Overview-readmeContent ol,\n.Overview-readmeContent ul {\n  padding-left: 0;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.Overview-readmeContent ol ol,\n.Overview-readmeContent ul ol {\n  list-style-type: lower-roman;\n}\n.Overview-readmeContent ol ol ol,\n.Overview-readmeContent ol ul ol,\n.Overview-readmeContent ul ol ol,\n.Overview-readmeContent ul ul ol {\n  list-style-type: lower-alpha;\n}\n.Overview-readmeContent dd {\n  margin-left: 0;\n}\n.Overview-readmeContent code,\n.Overview-readmeContent pre {\n  font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n  font-size: 0.75rem;\n}\n.Overview-readmeContent pre {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.Overview-readmeContent input::-webkit-inner-spin-button,\n.Overview-readmeContent input::-webkit-outer-spin-button {\n  margin: 0;\n  -webkit-appearance: none;\n  appearance: none;\n}\n.Overview-readmeContent :checked + .radio-label {\n  position: relative;\n  z-index: 1;\n  border-color: var(--color-brand-primary);\n}\n.Overview-readmeContent hr {\n  border-bottom-color: var(--color-border);\n}\n.Overview-readmeContent kbd {\n  display: inline-block;\n  padding: 0.1875rem 0.3125rem;\n  font: 0.6875rem SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n  line-height: 0.625rem;\n  color: #444d56;\n  vertical-align: middle;\n  background-color: var(--color-background-accented);\n  border: var(--border);\n  border-radius: 0.1875rem;\n  box-shadow: inset 0 -0.0625rem 0 var(--color-border);\n}\n.Overview-readmeContent a:not([href]) {\n  color: inherit;\n  text-decoration: none;\n}\n.Overview-readmeContent blockquote,\n.Overview-readmeContent details,\n.Overview-readmeContent dl,\n.Overview-readmeContent ol,\n.Overview-readmeContent p,\n.Overview-readmeContent pre,\n.Overview-readmeContent table,\n.Overview-readmeContent ul {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n.Overview-readmeContent hr {\n  height: 0.25em;\n  padding: 0;\n  margin: 1.5rem 0;\n  background-color: var(--color-border);\n  border: 0;\n}\n.Overview-readmeContent blockquote {\n  padding: 0 1em;\n  color: var(--color-text-subtle);\n  border-left: 0.25em solid var(--color-border);\n}\n.Overview-readmeContent blockquote > :first-child {\n  margin-top: 0;\n}\n.Overview-readmeContent blockquote > :last-child {\n  margin-bottom: 0;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4,\n.Overview-readmeContent h5,\n.Overview-readmeContent h6,\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n  margin-top: 1.5rem;\n  margin-bottom: 1rem;\n  font-weight: 600;\n  line-height: 1.25;\n}\n.Overview-readmeContent h3 {\n  font-size: 2em;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4 {\n  padding-bottom: 0.3em;\n  border-bottom: var(--border);\n}\n.Overview-readmeContent h4 {\n  font-size: 1.5em;\n}\n.Overview-readmeContent h5 {\n  font-size: 1.25em;\n}\n.Overview-readmeContent h6 {\n  font-size: 1em;\n}\n.Overview-readmeContent div[aria-level='7'] {\n  font-size: 0.875em;\n}\n.Overview-readmeContent div[aria-level='8'] {\n  font-size: 0.85em;\n  color: var(--color-text-subtle);\n}\n.Overview-readmeContent ol,\n.Overview-readmeContent ul {\n  padding-left: 2em;\n}\n.Overview-readmeContent ol ol,\n.Overview-readmeContent ol ul,\n.Overview-readmeContent ul ol,\n.Overview-readmeContent ul ul {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.Overview-readmeContent li {\n  word-wrap: break-all;\n}\n.Overview-readmeContent li > p {\n  margin-top: 1rem;\n}\n.Overview-readmeContent li + li {\n  margin-top: 0.25em;\n}\n.Overview-readmeContent dl {\n  padding: 0;\n}\n.Overview-readmeContent dl dt {\n  padding: 0;\n  margin-top: 1rem;\n  font-size: 1em;\n  font-style: italic;\n  font-weight: 600;\n}\n.Overview-readmeContent dl dd {\n  padding: 0 1rem;\n  margin-bottom: 1rem;\n}\n.Overview-readmeContent table {\n  display: block;\n  width: 100%;\n  overflow: auto;\n}\n.Overview-readmeContent table th {\n  font-weight: 600;\n}\n.Overview-readmeContent table td,\n.Overview-readmeContent table th {\n  padding: 0.375rem 0.8125rem;\n  border: var(--border);\n}\n.Overview-readmeContent table tr {\n  background-color: var(--color-background);\n  border-top: var(--border);\n}\n.Overview-readmeContent table tr:nth-child(2n) {\n  background-color: var(--color-background-accented);\n}\n.Overview-readmeContent img {\n  max-width: 100%;\n  box-sizing: initial;\n  background-color: var(--color-background);\n}\n.Overview-readmeContent img[align='right'] {\n  padding-left: 1.25rem;\n}\n.Overview-readmeContent img[align='left'] {\n  padding-right: 1.25rem;\n}\n.Overview-readmeContent code {\n  padding: 0.2em 0.4em;\n  margin: 0;\n  font-size: 85%;\n  background-color: var(--color-background-accented);\n  border-radius: 0.1875rem;\n}\n.Overview-readmeContent pre {\n  word-wrap: normal;\n}\n.Overview-readmeContent pre > code {\n  padding: 0;\n  margin: 0;\n  font-size: 100%;\n  word-break: normal;\n  white-space: pre;\n  background: transparent;\n  border: 0;\n}\n.Overview-readmeContent pre {\n  padding: 1rem;\n  overflow: auto;\n  font-size: 85%;\n  line-height: 1.45;\n  background-color: var(--color-background-accented);\n  border-radius: 0.1875rem;\n}\n.Overview-readmeContent pre code {\n  display: inline;\n  max-width: auto;\n  padding: 0;\n  margin: 0;\n  overflow: visible;\n  line-height: inherit;\n  word-wrap: normal;\n  background-color: initial;\n  border: 0;\n}\n\n/* ---------- */\n/*\n/* End output from devtools/cmd/css/main.go\n/*\n/* ---------- */\n", "/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.UnitReadme {\n  margin-bottom: 2rem;\n}\n\n.UnitReadme ul,\n.UnitReadme ol {\n  list-style: circle;\n}\n\n.UnitReadme h2 a.UnitReadme-idLink,\n.UnitReadme summary a {\n  opacity: 0;\n}\n\n.UnitReadme h2:hover a,\n.UnitReadme summary:focus a {\n  opacity: 1;\n}\n\n.UnitReadme-title {\n  border-bottom: var(--border);\n  font-size: 1.375rem;\n  padding-bottom: 1rem;\n}\n\n.UnitReadme-title img {\n  margin: auto 1rem auto 0;\n}\n\n.UnitReadme-content {\n  /* stylelint-disable-next-line property-no-vendor-prefix */\n  -webkit-mask-image: linear-gradient(to bottom, black 75%, transparent 100%);\n  mask-image: linear-gradient(to bottom, black 75%, transparent 100%);\n  max-height: 20rem;\n  overflow: hidden;\n  position: relative;\n}\n\n.UnitReadme-content ul {\n  line-height: 1.5rem;\n}\n\n.UnitReadme-expandLink {\n  background: none;\n  border: none;\n  color: var(--color-brand-primary);\n  cursor: pointer;\n  padding: 0;\n}\n\n.UnitReadme-collapseLink {\n  background: none;\n  border: none;\n  color: var(--color-brand-primary);\n  cursor: pointer;\n  display: none;\n  padding: 0;\n}\n\n.UnitReadme--expanded .UnitReadme-content {\n  /* stylelint-disable-next-line property-no-vendor-prefix */\n  -webkit-mask-image: none;\n  mask-image: none;\n  max-height: initial;\n  overflow: initial;\n}\n\n.UnitReadme--toggle .UnitReadme-expandLink {\n  display: block;\n}\n\n.UnitReadme--expanded .UnitReadme-expandLink {\n  display: none;\n}\n\n.UnitReadme--expanded.UnitReadme--toggle .UnitReadme-collapseLink {\n  display: block;\n}\n\n.Overview-readmeContent {\n  overflow-wrap: break-word;\n}\n", "/*!\n * Copyright 2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n@import url('./_build-context.css');\n@import url('./_directories.css');\n@import url('./_doc.css');\n@import url('./_files.css');\n@import url('./_meta.css');\n@import url('./_outline.css');\n@import url('./_readme_gen.css');\n@import url('./_readme.css');\n\n.UnitDetails {\n  column-gap: 2rem;\n  display: grid;\n  grid-template-columns: minmax(0, auto);\n  margin: auto;\n  min-height: 32rem;\n}\n@media only screen and (min-width: 64rem) {\n  .UnitDetails {\n    grid-template-columns: 15.5rem minmax(30.5rem, 43.125rem) minmax(10rem, 15.5rem);\n  }\n}\n@media only screen and (min-width: 80rem) {\n  .UnitDetails {\n    grid-template-columns: 15.5rem minmax(43.125rem, 60rem) 15.5rem;\n    justify-content: center;\n  }\n}\n\n.UnitDetails :target {\n  scroll-margin-top: calc(var(--js-sticky-header-height, 3.5rem) * 2.15);\n}\n@media only screen and (min-width: 64rem) {\n  .UnitDetails :target {\n    scroll-margin-top: calc(var(--js-sticky-header-height, 3.5rem) * 1.25);\n  }\n}\n\n.UnitDetails :target:not(details, h2) {\n  background-color: var(--color-background-highlighted);\n  padding: 0.25rem;\n}\n\n.UnitDetails-meta {\n  order: -1;\n}\n@media only screen and (min-width: 64rem) {\n  .UnitDetails-meta {\n    display: block;\n    margin-top: 2rem;\n    order: initial;\n  }\n}\n\n.UnitDetails-contentEmpty {\n  align-items: center;\n  background-color: var(--color-background-accented);\n  color: var(--color-text-subtle);\n  display: flex;\n  flex-direction: column;\n  height: 15rem;\n  padding-top: 1rem;\n  text-align: center;\n}\n\n.UnitDetails-contentEmpty img {\n  height: 7.8125rem;\n  width: auto;\n}\n"],
-  "mappings": "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",
+  "mappings": ";;;;;AAMA,qEAEE,+BACA,kBAGF,gCAZA,iBAgBA,sCACE,iCACA,+BACA,mBACA,eAGF,sCACE,+BAGF,uBACE,aAEF,0CACE,uBACE,iBAIJ,wCACE,kBAGF,uFAEE,eACA,kBACA,QCtCF,iBACE,mBAGF,wEAEE,UAGF,6DAEE,UAGF,uBACE,4BACA,mBAtBF,iBAwBE,oBAGF,2BA3BA,wBA+BA,uBACE,yBACA,SACA,kBACA,WAGF,6BACE,iBAGF,6BACE,kDAGF,mCACE,kBAGF,oBACE,4BACA,gBACA,gBArDF,oBAuDE,sBACA,sBAGF,oBA3DA,mBA6DE,gBAGF,2BACE,aAGF,mCACE,eAGF,yCACE,kDAGF,+CACE,YACA,kBA9EF,UAgFE,cAGF,6EAEE,mCACA,oBACA,kBAvFF,UAyFE,cAGF,8BACE,kBACA,aA9FF,oCAiGE,kBACA,mBAGF,2BACE,2BACA,eACA,qBACA,eAGF,sDACE,wBAGF,0BACE,uBACA,aACA,sBACA,oBACA,qBAGF,8BACE,kBAGF,8BACE,0BACA,aACA,sBACA,oBAhIF,mBAoIA,0BACE,aAGF,wDACE,kBAGF,gCACE,aACA,oBACA,kBACA,oBAEF,0CACE,gCACE,gBAGF,oHAEE,cAIJ,yBACE,kBAGF,+BACE,YACA,aACA,SACA,kBACA,QAGF,sCACE,6BACA,YACA,iCACA,eACA,aACA,kBACA,qBAGF,uBACE,+CApLF,sBAsLE,mBACA,gBACA,iBACA,kBACA,mBA1LF,iBA4LE,kBCrLF,SACE,mBACA,sBAGF,gDAEE,UAGF,6CAEE,UAGF,eACE,4BACA,oBAGF,mBA3BA,wBA+BA,sBACE,kDACA,+BACA,gBACA,kBACA,kBAGF,0BACE,iBACA,WAGF,uCA5CA,iBAgDA,2BACE,kBAGF,eACE,cAGF,iBAxDA,cA4DA,oCAEE,kBAGF,uBACE,0BAGF,0GAIE,UAGF,uBACE,UAGF,yCACE,UAGF,4IAKE,UAGF,kBACE,mBACA,gBACA,eAGF,qBACE,iBAGF,yCACE,gBACA,mBACA,kBAGF,yCACE,mBACA,mBACA,kBAGF,uBACE,mBAGF,kDAtHA,4BAwHE,yBACA,aAGF,4BACE,gCAGF,wFAIE,iBAGF,qBACE,+BACA,kBAEF,0CACE,mBACE,iBACA,mBAGF,2BACE,WAIJ,yBACE,aAGF,uBACE,gBACA,uBAGF,wMAME,aAGF,sSAUE,oBAGF,0GAIE,qBACA,aACA,8BAGF,4BACE,+BACA,mBACA,gBAGF,kFAEE,aAGF,qBACE,+BACA,mBACA,iBAGF,+BACE,0EAEF,0CACE,+BACE,0EAIJ,sDACE,mBAGF,+BACE,kDACA,qBACA,mBA/NF,4BAiOE,cACA,iBACA,kBAnOF,gBAqOE,iBAGF,uCACE,mBACA,aACA,yBACA,iBAGF,iCACE,8BACA,oCACA,sBACA,eACA,cACA,cACA,eAGF,qGAGE,uCA5PF,qBA8PE,eACA,YACA,kBAhQF,eAoQA,gCACE,kCACA,mBAGF,qEAEE,8BACA,uBAGF,8BACE,gBAGF,sCAnRA,8BAqRE,mBACA,mBAGF,2CACE,YACA,aACA,gBACA,YACA,gBACA,WAQF,6DACE,4BACA,6BAzSF,SA6SA,+DACE,yBACA,0BA/SF,iBAmTA,oCACE,iCACA,eACA,mBACA,aACA,qBAGF,kCACE,+BAGF,4BACE,kBACA,mBACA,oBAIF,sFAGE,qBACA,qBACA,qBAGF,+BACE,kBAGF,8BACE,+BACA,iBACA,gBACA,mBACA,mBAGF,6BACE,qCA3VF,sBA6VE,iCACA,iBACA,gBACA,kBAhWF,uBAkWE,yBACA,sBAGF,+BACE,mBACA,aACA,UAGF,oEACE,+BAOF,uCACE,wBAGF,yCACE,iCAGF,qEACE,iCACA,eAGF,2EACE,iCACA,eAGF,yCACE,gBACA,UAGF,uDACE,UAGF,kCA/YA,wBAmZA,iCACE,mBACA,aACA,UACA,mBCjZF,WACE,mBAGF,qBACE,kBAGF,uBACE,YACA,kBACA,kBACA,QAGF,6BACE,kEACA,4BACA,gCACA,WACA,qBACA,YACA,cACA,kBACA,YACA,WAGF,sDAEE,UAGF,iDAEE,UAGF,iBACE,4BACA,mBA9CF,iBAgDE,oBAGF,qBAnDA,wBAuDA,oBACE,kBACA,mBACA,gBACA,gBACA,eACA,qBCvDF,UACE,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",
   "names": []
 }
diff --git a/static/frontend/unit/unit.js b/static/frontend/unit/unit.js
index 8f7ee152..45021ff 100644
--- a/static/frontend/unit/unit.js
+++ b/static/frontend/unit/unit.js
@@ -1,4 +1,4 @@
-var n=class{constructor(t,e,d){this.mainHeader=t;this.mainNav=e;this.mainAside=d;this.handleDoubleClick=t=>{t.target===this.mainHeader?.lastElementChild&&(window.getSelection()?.removeAllRanges(),window.scrollTo({top:0,behavior:"smooth"}))};this.handleResize=()=>{let t=(e,d)=>document.documentElement.style.setProperty(e,d);t("--js-unit-header-height","0"),setTimeout(()=>{let e=(this.mainHeader?.getBoundingClientRect().height??0)/16;t("--js-unit-header-height",`${e}rem`),t("--js-sticky-header-height",`${3.5}rem`),t("--js-unit-header-top",`${(e-3.5)*-1}rem`)})};this.headerObserver=new IntersectionObserver(([i])=>{if(i.intersectionRatio<1)for(let r of document.querySelectorAll('[class^="go-Main-header"'))r.setAttribute("data-fixed","true");else{for(let r of document.querySelectorAll('[class^="go-Main-header"'))r.removeAttribute("data-fixed");this.handleResize()}},{threshold:1,rootMargin:`${3.5*16}px`}),this.navObserver=new IntersectionObserver(([i])=>{i.intersectionRatio<1?(this.mainNav?.classList.add("go-Main-nav--fixed"),this.mainNav?.setAttribute("data-fixed","true")):(this.mainNav?.classList.remove("go-Main-nav--fixed"),this.mainNav?.removeAttribute("data-fixed"))},{threshold:1,rootMargin:`-${3.5*16+10}px`}),this.asideObserver=new IntersectionObserver(([i])=>{i.intersectionRatio<1?this.mainHeader?.setAttribute("data-raised","true"):this.mainHeader?.removeAttribute("data-raised")},{threshold:1,rootMargin:`-${3.5*16+20}px 0px 0px 0px`}),this.init()}init(){this.handleResize(),window.addEventListener("resize",this.handleResize),this.mainHeader?.addEventListener("dblclick",this.handleDoubleClick);let t=document.querySelector(".js-siteHeader");if(this.mainHeader?.hasChildNodes()&&t){let e=document.createElement("div");t.prepend(e),this.headerObserver.observe(e)}if(this.mainNav?.hasChildNodes()){let e=document.createElement("div");this.mainNav.prepend(e),this.navObserver.observe(e)}if(this.mainAside){let e=document.createElement("div");this.mainAside.prepend(e),this.asideObserver.observe(e)}}},s=a=>document.querySelector(a);new n(s(".js-mainHeader"),s(".js-mainNav"),s(".js-mainAside"));export{n as MainLayoutController};
+var d=class{constructor(r,s,i){this.mainHeader=r;this.mainNav=s;this.mainAside=i;this.handleDoubleClick=r=>{var i,t;r.target===((i=this.mainHeader)==null?void 0:i.lastElementChild)&&((t=window.getSelection())==null||t.removeAllRanges(),window.scrollTo({top:0,behavior:"smooth"}))};this.handleResize=()=>{let r=(s,i)=>document.documentElement.style.setProperty(s,i);r("--js-unit-header-height","0"),setTimeout(()=>{var i,t;let s=((t=(i=this.mainHeader)==null?void 0:i.getBoundingClientRect().height)!=null?t:0)/16;r("--js-unit-header-height",`${s}rem`),r("--js-sticky-header-height",`${3.5}rem`),r("--js-unit-header-top",`${(s-3.5)*-1}rem`)})};this.headerObserver=new IntersectionObserver(([t])=>{if(t.intersectionRatio<1)for(let e of document.querySelectorAll('[class^="go-Main-header"'))e.setAttribute("data-fixed","true");else{for(let e of document.querySelectorAll('[class^="go-Main-header"'))e.removeAttribute("data-fixed");this.handleResize()}},{threshold:1,rootMargin:`${3.5*16}px`}),this.navObserver=new IntersectionObserver(([t])=>{var e,n,h,l;t.intersectionRatio<1?((e=this.mainNav)==null||e.classList.add("go-Main-nav--fixed"),(n=this.mainNav)==null||n.setAttribute("data-fixed","true")):((h=this.mainNav)==null||h.classList.remove("go-Main-nav--fixed"),(l=this.mainNav)==null||l.removeAttribute("data-fixed"))},{threshold:1,rootMargin:`-${3.5*16+10}px`}),this.asideObserver=new IntersectionObserver(([t])=>{var e,n;t.intersectionRatio<1?(e=this.mainHeader)==null||e.setAttribute("data-raised","true"):(n=this.mainHeader)==null||n.removeAttribute("data-raised")},{threshold:1,rootMargin:`-${3.5*16+20}px 0px 0px 0px`}),this.init()}init(){var s,i,t;this.handleResize(),window.addEventListener("resize",this.handleResize),(s=this.mainHeader)==null||s.addEventListener("dblclick",this.handleDoubleClick);let r=document.querySelector(".js-siteHeader");if((i=this.mainHeader)!=null&&i.hasChildNodes()&&r){let e=document.createElement("div");r.prepend(e),this.headerObserver.observe(e)}if((t=this.mainNav)!=null&&t.hasChildNodes()){let e=document.createElement("div");this.mainNav.prepend(e),this.navObserver.observe(e)}if(this.mainAside){let e=document.createElement("div");this.mainAside.prepend(e),this.asideObserver.observe(e)}}},a=o=>document.querySelector(o);new d(a(".js-mainHeader"),a(".js-mainNav"),a(".js-mainAside"));export{d as MainLayoutController};
 /**
  * @license
  * Copyright 2021 The Go Authors. All rights reserved.
diff --git a/static/frontend/unit/unit.js.map b/static/frontend/unit/unit.js.map
index 7af29e5..a9d7c76 100644
--- a/static/frontend/unit/unit.js.map
+++ b/static/frontend/unit/unit.js.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["unit.ts"],
   "sourcesContent": ["/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nconst headerHeight = 3.5;\n\n/**\n * MainLayoutController calculates dynamic height values for header elements\n * to support variable size sticky positioned elements in the header so that\n * banners and breadcumbs may overflow to multiple lines.\n */\nexport class MainLayoutController {\n  private headerObserver: IntersectionObserver;\n  private navObserver: IntersectionObserver;\n  private asideObserver: IntersectionObserver;\n\n  constructor(\n    private mainHeader?: Element | null,\n    private mainNav?: Element | null,\n    private mainAside?: Element | null\n  ) {\n    this.headerObserver = new IntersectionObserver(\n      ([e]) => {\n        if (e.intersectionRatio < 1) {\n          for (const x of document.querySelectorAll('[class^=\"go-Main-header\"')) {\n            x.setAttribute('data-fixed', 'true');\n          }\n        } else {\n          for (const x of document.querySelectorAll('[class^=\"go-Main-header\"')) {\n            x.removeAttribute('data-fixed');\n          }\n          this.handleResize();\n        }\n      },\n      { threshold: 1, rootMargin: `${headerHeight * 16}px` }\n    );\n    this.navObserver = new IntersectionObserver(\n      ([e]) => {\n        if (e.intersectionRatio < 1) {\n          this.mainNav?.classList.add('go-Main-nav--fixed');\n          this.mainNav?.setAttribute('data-fixed', 'true');\n        } else {\n          this.mainNav?.classList.remove('go-Main-nav--fixed');\n          this.mainNav?.removeAttribute('data-fixed');\n        }\n      },\n      { threshold: 1, rootMargin: `-${headerHeight * 16 + 10}px` }\n    );\n    this.asideObserver = new IntersectionObserver(\n      ([e]) => {\n        if (e.intersectionRatio < 1) {\n          this.mainHeader?.setAttribute('data-raised', 'true');\n        } else {\n          this.mainHeader?.removeAttribute('data-raised');\n        }\n      },\n      { threshold: 1, rootMargin: `-${headerHeight * 16 + 20}px 0px 0px 0px` }\n    );\n    this.init();\n  }\n\n  private init() {\n    this.handleResize();\n    window.addEventListener('resize', this.handleResize);\n    this.mainHeader?.addEventListener('dblclick', this.handleDoubleClick);\n    const siteHeader = document.querySelector('.js-siteHeader');\n    if (this.mainHeader?.hasChildNodes() && siteHeader) {\n      const headerSentinel = document.createElement('div');\n      siteHeader.prepend(headerSentinel);\n      this.headerObserver.observe(headerSentinel);\n    }\n    if (this.mainNav?.hasChildNodes()) {\n      const navSentinel = document.createElement('div');\n      this.mainNav.prepend(navSentinel);\n      this.navObserver.observe(navSentinel);\n    }\n    if (this.mainAside) {\n      const asideSentinel = document.createElement('div');\n      this.mainAside.prepend(asideSentinel);\n      this.asideObserver.observe(asideSentinel);\n    }\n  }\n\n  private handleDoubleClick: EventListener = e => {\n    const target = e.target;\n    if (target === this.mainHeader?.lastElementChild) {\n      window.getSelection()?.removeAllRanges();\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n    }\n  };\n\n  private handleResize = () => {\n    const setProp = (name: string, value: string) =>\n      document.documentElement.style.setProperty(name, value);\n    setProp('--js-unit-header-height', '0');\n    setTimeout(() => {\n      const mainHeaderHeight = (this.mainHeader?.getBoundingClientRect().height ?? 0) / 16;\n      setProp('--js-unit-header-height', `${mainHeaderHeight}rem`);\n      setProp('--js-sticky-header-height', `${headerHeight}rem`);\n      setProp('--js-unit-header-top', `${(mainHeaderHeight - headerHeight) * -1}rem`);\n    });\n  };\n}\n\nconst el = <T extends HTMLElement>(selector: string) => document.querySelector<T>(selector);\nnew MainLayoutController(el('.js-mainHeader'), el('.js-mainNav'), el('.js-mainAside'));\n"],
-  "mappings": "AAcO,IAAMA,EAAN,KAA2B,CAKhC,YACUC,EACAC,EACAC,EACR,CAHQ,gBAAAF,EACA,aAAAC,EACA,eAAAC,EAgEV,KAAQ,kBAAmCC,GAAK,CAC/BA,EAAE,SACF,KAAK,YAAY,mBAC9B,OAAO,aAAa,GAAG,gBAAgB,EACvC,OAAO,SAAS,CAAE,IAAK,EAAG,SAAU,QAAS,CAAC,EAElD,EAEA,KAAQ,aAAe,IAAM,CAC3B,IAAMC,EAAU,CAACC,EAAcC,IAC7B,SAAS,gBAAgB,MAAM,YAAYD,EAAMC,CAAK,EACxDF,EAAQ,0BAA2B,GAAG,EACtC,WAAW,IAAM,CACf,IAAMG,GAAoB,KAAK,YAAY,sBAAsB,EAAE,QAAU,GAAK,GAClFH,EAAQ,0BAA2B,GAAGG,CAAgB,KAAK,EAC3DH,EAAQ,4BAA6B,GAAG,GAAY,KAAK,EACzDA,EAAQ,uBAAwB,IAAIG,EAAmB,KAAgB,EAAE,KAAK,CAChF,CAAC,CACH,EAhFE,KAAK,eAAiB,IAAI,qBACxB,CAAC,CAACJ,CAAC,IAAM,CACP,GAAIA,EAAE,kBAAoB,EACxB,QAAWK,KAAK,SAAS,iBAAiB,0BAA0B,EAClEA,EAAE,aAAa,aAAc,MAAM,MAEhC,CACL,QAAWA,KAAK,SAAS,iBAAiB,0BAA0B,EAClEA,EAAE,gBAAgB,YAAY,EAEhC,KAAK,aAAa,CACpB,CACF,EACA,CAAE,UAAW,EAAG,WAAY,GAAG,IAAe,EAAE,IAAK,CACvD,EACA,KAAK,YAAc,IAAI,qBACrB,CAAC,CAACL,CAAC,IAAM,CACHA,EAAE,kBAAoB,GACxB,KAAK,SAAS,UAAU,IAAI,oBAAoB,EAChD,KAAK,SAAS,aAAa,aAAc,MAAM,IAE/C,KAAK,SAAS,UAAU,OAAO,oBAAoB,EACnD,KAAK,SAAS,gBAAgB,YAAY,EAE9C,EACA,CAAE,UAAW,EAAG,WAAY,IAAI,IAAe,GAAK,EAAE,IAAK,CAC7D,EACA,KAAK,cAAgB,IAAI,qBACvB,CAAC,CAACA,CAAC,IAAM,CACHA,EAAE,kBAAoB,EACxB,KAAK,YAAY,aAAa,cAAe,MAAM,EAEnD,KAAK,YAAY,gBAAgB,aAAa,CAElD,EACA,CAAE,UAAW,EAAG,WAAY,IAAI,IAAe,GAAK,EAAE,gBAAiB,CACzE,EACA,KAAK,KAAK,CACZ,CAEQ,MAAO,CACb,KAAK,aAAa,EAClB,OAAO,iBAAiB,SAAU,KAAK,YAAY,EACnD,KAAK,YAAY,iBAAiB,WAAY,KAAK,iBAAiB,EACpE,IAAMM,EAAa,SAAS,cAAc,gBAAgB,EAC1D,GAAI,KAAK,YAAY,cAAc,GAAKA,EAAY,CAClD,IAAMC,EAAiB,SAAS,cAAc,KAAK,EACnDD,EAAW,QAAQC,CAAc,EACjC,KAAK,eAAe,QAAQA,CAAc,CAC5C,CACA,GAAI,KAAK,SAAS,cAAc,EAAG,CACjC,IAAMC,EAAc,SAAS,cAAc,KAAK,EAChD,KAAK,QAAQ,QAAQA,CAAW,EAChC,KAAK,YAAY,QAAQA,CAAW,CACtC,CACA,GAAI,KAAK,UAAW,CAClB,IAAMC,EAAgB,SAAS,cAAc,KAAK,EAClD,KAAK,UAAU,QAAQA,CAAa,EACpC,KAAK,cAAc,QAAQA,CAAa,CAC1C,CACF,CAqBF,EAEMC,EAA6BC,GAAqB,SAAS,cAAiBA,CAAQ,EAC1F,IAAIf,EAAqBc,EAAG,gBAAgB,EAAGA,EAAG,aAAa,EAAGA,EAAG,eAAe,CAAC",
-  "names": ["MainLayoutController", "mainHeader", "mainNav", "mainAside", "e", "setProp", "name", "value", "mainHeaderHeight", "x", "siteHeader", "headerSentinel", "navSentinel", "asideSentinel", "el", "selector"]
+  "mappings": "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",
+  "names": ["MainLayoutController", "mainHeader", "mainNav", "mainAside", "e", "_a", "_b", "setProp", "name", "value", "mainHeaderHeight", "x", "_c", "_d", "siteHeader", "headerSentinel", "navSentinel", "asideSentinel", "el", "selector"]
 }
diff --git a/static/frontend/unit/unit.min.css b/static/frontend/unit/unit.min.css
index 42df51c..04c6d82 100644
--- a/static/frontend/unit/unit.min.css
+++ b/static/frontend/unit/unit.min.css
@@ -3,7 +3,7 @@
  * Use of this source code is governed by a BSD-style
  * license that can be found in the LICENSE file.
  */
-.UnitHeader-titleHeading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.UnitHeader-overflowContainer{display:none;height:1.5rem;position:absolute;right:0;width:1.5rem}.go-Main-header[data-fixed] .UnitHeader-overflowContainer{display:block}@media screen and (min-width: 80rem){.go-Main-header[data-fixed] .UnitHeader-overflowContainer{display:none}}.UnitHeader-overflowImage{fill:var(--gray-3);height:100%;left:0;position:absolute;top:0;width:100%}.UnitHeader-overflowSelect{appearance:none;background:transparent;border:0;color:transparent;cursor:pointer;font-size:1rem;height:100%;left:0;position:absolute;top:0;width:100%}.UnitHeader-overflowSelect option{color:var(--color-text)}.UnitHeader-versionBadge,.DetailsHeader-badge{border-radius:unset;color:var(--color-text-inverted);font-size:.7rem;line-height:.85rem;margin:-1rem 0 -1rem .5rem;padding:.25rem .5rem;text-transform:uppercase;top:-.0625rem}.UnitHeader-versionBadge--unknown,.DetailsHeader-badge--unknown{display:none}a.UnitHeader-backLink{color:var(--color-text);display:block;font-size:1rem;position:absolute;right:.625rem;top:1.25rem}.UnitHeader-backLink img{vertical-align:middle}.DetailsHeader-badge--notAtLatest a,.DetailsHeader-badge--notAtLatest span.DetailsHeader-span--latest{display:none}.DetailsHeader-badge--notAtLatest .UnitMetaDetails-icon{z-index:1}.DetailsHeader-badge--notAtLatest .UnitMetaDetails-toggletipBubble{color:var(--black);text-transform:none}.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip{height:0}.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip button{height:.8125rem;line-height:0}.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip img{vertical-align:middle}.DetailsHeader-badge--goToLatest span{display:none}.DetailsHeader-badge--goToLatest span.DetailsHeader-span--goToLatest{display:initial}.DetailsHeader-badge--unknown a,.DetailsHeader-badge--unknown span{display:none}.DetailsHeader-badge{border-radius:1rem;display:inline-block;font-size:.75rem;padding:.25rem .75rem;position:relative;top:-.125rem}.DetailsHeader-badge--latest a{display:none}.DetailsHeader-badge--goToLatest a:hover{text-decoration:none}.DetailsHeader-badge--latest span.DetailsHeader-span--notAtLatest{display:none}.DetailsHeader-badge--goToLatest,.DetailsHeader-badge--latest,.DetailsHeader-badge--notAtLatest{margin-left:.25rem}.go-Main{background-color:var(--color-background);color:var(--color-text);display:grid;flex-grow:1;grid-template:repeat(6,min-content) / 100%;grid-template-areas:"banner" "header" "aside" "nav" "article" "footer";min-height:32rem}.go-Main-banner{grid-area:banner;padding:1rem var(--gutter) 0 var(--gutter)}.go-Main-header{background-color:var(--color-background);border-bottom:var(--border);font-size:.875rem;grid-area:header;min-height:var(--js-unit-header-height);padding:0 var(--gutter);transition:box-shadow .25s linear;z-index:10}.go-Main-header[data-fixed]{border-bottom:none;position:sticky;top:var(--js-unit-header-top, 0)}.go-Main-header[data-raised]{border-bottom:var(--border)}.go-Main-nav{background-color:var(--color-background);border-bottom:var(--border);font-size:.875rem;grid-area:nav;padding:0 var(--gutter)}.go-Main-article{background-color:var(--color-background);grid-area:article;margin:var(--gap) 0 5rem 0;min-height:32rem;padding:0 var(--gutter)}.go-Main-aside{background-color:var(--color-background-accented);border-bottom:var(--border);font-size:.875rem;grid-area:aside;padding:1rem var(--gutter)}.go-Main-aside--empty{border-bottom:none;padding:0}.go-Main-footer{background-color:var(--color-background);grid-area:footer;padding:0 var(--gutter)}.go-Main>*:empty{border:none;margin:0;padding:0}.go-Main-headerBreadcrumb{margin-top:1rem}.go-Main-headerContent{margin-bottom:1rem;position:sticky;top:0}.go-Main-headerContent[data-fixed]{align-items:center;display:flex;margin-bottom:0;min-height:0}@media screen and (min-width: 80rem){.go-Main-headerContent[data-fixed]{justify-content:space-between}}.go-Main-headerTitle{align-items:center;display:flex;gap:.5rem;height:3.5rem;max-width:100%;padding-right:1.5rem}@media screen and (min-width: 80rem){.go-Main-headerTitle[data-fixed]{max-width:40%}}.go-Main-headerTitle .go-Clipboard{display:none}.go-Main-headerTitle[data-fixed] .go-Clipboard{display:initial}.go-Main-headerLogo{--logo-height: 1.75rem;--logo-width: calc(var(--logo-height) / .3768);align-items:center;display:flex;margin-right:-.5rem;opacity:0;transition:opacity .25s ease-in-out,width .25s ease-out;visibility:hidden;width:0}.go-Main-headerLogo img{height:var(--logo-height);margin:-1rem 0;width:var(--logo-width)}.go-Main-headerLogo[data-fixed]{margin-right:0;opacity:1;visibility:visible;width:var(--logo-width)}.go-Main-headerDetails{display:flex;flex-flow:row wrap;gap:0 1rem;white-space:nowrap}.go-Main-headerDetails[data-fixed]{display:none}@media screen and (min-width: 80rem){:root:not([data-layout=compact]) .go-Main-headerDetails[data-fixed]{display:flex}}.go-Main-headerDetailItem{color:var(--color-text-subtle);display:inline;font-size:.875rem;height:1.75rem;line-height:1.75rem}.go-Main-headerDetailItem:not(:last-of-type):after{content:"|";padding-left:1rem}.go-Main-nav--sticky{position:sticky;top:var(--js-sticky-header-height, 3.5rem);transition:box-shadow .25s linear;z-index:1}.go-Main-nav--fixed{border-top:initial}.go-Main-navDesktop{display:none;margin-top:var(--gap);overflow-y:auto;padding:.25rem;position:sticky;top:calc(var(--js-sticky-header-height, 3.5rem) + 1rem)}.go-Main-navMobile{display:flex;margin:.5rem 0}.go-Main-navMobile .go-Label{flex-grow:1;position:relative}.go-Main-navMobile .go-Select{padding-left:1.75rem;width:100%}.go-Main-navMobile .go-Label:before{background:url(/static/shared/icon/list_gm_grey_24dp.svg);background-repeat:no-repeat;background-size:contain;content:" ";height:1.25rem;left:.5rem;padding-left:1rem;position:absolute;top:.375rem;width:1.25rem}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){.go-Main-navMobile .go-Select{appearance:none}}}@media screen and (min-width: 80rem){:root[data-layout=responsive] .go-Main{grid-template:repeat(5,min-content) / 21.5% minmax(0,auto);grid-template-areas:"banner  banner" "header  header" "aside   aside" "nav     article" "footer  footer"}:root[data-layout=responsive] .go-Main-nav{border-bottom:none;border-top:none;padding:0 0 0 var(--gutter)}:root[data-layout=responsive] .go-Main-article{border-bottom:none;border-top:none;margin:var(--gap) 0 5rem var(--gap);padding:0 var(--gutter) 0 0}:root[data-layout=responsive] .go-Main-aside{border-bottom:var(--border)}:root[data-layout=responsive] .go-Main-nav--sticky{position:initial}:root[data-layout=responsive] .go-Main-nav--fixed{box-shadow:none}:root[data-layout=responsive] .go-Main-navDesktop{display:block}:root[data-layout=responsive] .go-Main-navMobile{display:none}}@media screen and (min-width: 112rem){:root[data-layout=responsive] .go-Main{grid-template:repeat(4,min-content) / minmax(17.5%,1fr) minmax(0,4fr) minmax(17.5%,1fr);grid-template-areas:"banner banner  banner" "header header  header" "nav    article aside" "footer footer  footer"}:root[data-layout=responsive] .go-Main-article{margin:var(--gap) var(--gap) 5rem;padding:0}:root[data-layout=responsive] .go-Main-aside{background-color:var(--color-background);border-bottom:none;margin:var(--gap) 0 0 0;padding:0 var(--gutter) 0 0}}@media screen and (min-width: 80rem){:root[data-layout=compact] .go-Main{grid-template:repeat(6,min-content) / 1fr auto;grid-template-areas:"banner  banner" "header  ." "header  nav" "aside   aside" "article article" "footer  footer"}:root[data-layout=compact] .go-Main-nav{align-items:center;border-bottom:var(--border);display:flex;top:calc((var(--js-main-header-height, 0) - var(--js-sticky-header-height, 3.5rem)) * -1)}:root[data-layout=compact] .go-Main-header[data-fixed]{box-shadow:none}:root[data-layout=compact] .go-Main-nav--sticky{height:var(--js-sticky-header-height, 3.5rem);position:sticky;top:0}:root[data-layout=compact] .go-Main-nav--fixed{box-shadow:none}:root[data-layout=compact] .go-Main-navDesktop{display:none}:root[data-layout=compact] .go-Main-navMobile{display:flex}}@media print{.go-Main-header--sticky,.go-Main-header--sticky>:last-child,.go-Main-nav--sticky,.go-Main-navDesktop{position:initial}}
+.UnitHeader-titleHeading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.UnitHeader-overflowContainer{display:none;height:1.5rem;position:absolute;right:0;width:1.5rem}.go-Main-header[data-fixed] .UnitHeader-overflowContainer{display:block}@media screen and (min-width: 80rem){.go-Main-header[data-fixed] .UnitHeader-overflowContainer{display:none}}.UnitHeader-overflowImage{fill:var(--gray-3);height:100%;left:0;position:absolute;top:0;width:100%}.UnitHeader-overflowSelect{appearance:none;background:transparent;border:0;color:transparent;cursor:pointer;font-size:1rem;height:100%;left:0;position:absolute;top:0;width:100%}.UnitHeader-overflowSelect option{color:var(--color-text)}.UnitHeader-versionBadge,.DetailsHeader-badge{border-radius:unset;color:var(--color-text-inverted);font-size:.7rem;line-height:.85rem;margin:-1rem 0 -1rem .5rem;padding:.25rem .5rem;text-transform:uppercase;top:-.0625rem}.UnitHeader-versionBadge--unknown,.DetailsHeader-badge--unknown{display:none}a.UnitHeader-backLink{color:var(--color-text);display:block;font-size:1rem;position:absolute;right:.625rem;top:1.25rem}.UnitHeader-backLink img{vertical-align:middle}.DetailsHeader-badge--notAtLatest a,.DetailsHeader-badge--notAtLatest span.DetailsHeader-span--latest{display:none}.DetailsHeader-badge--notAtLatest .UnitMetaDetails-icon{z-index:1}.DetailsHeader-badge--notAtLatest .UnitMetaDetails-toggletipBubble{color:var(--black);text-transform:none}.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip{height:0}.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip button{height:.8125rem;line-height:0}.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip img{vertical-align:middle}.DetailsHeader-badge--goToLatest span{display:none}.DetailsHeader-badge--goToLatest span.DetailsHeader-span--goToLatest{display:initial}.DetailsHeader-badge--unknown a,.DetailsHeader-badge--unknown span{display:none}.DetailsHeader-badge{border-radius:1rem;display:inline-block;font-size:.75rem;padding:.25rem .75rem;position:relative;top:-.125rem}.DetailsHeader-badge--latest a{display:none}.DetailsHeader-badge--goToLatest a:hover{text-decoration:none}.DetailsHeader-badge--latest span.DetailsHeader-span--notAtLatest{display:none}.DetailsHeader-badge--goToLatest,.DetailsHeader-badge--latest,.DetailsHeader-badge--notAtLatest{margin-left:.25rem}.go-Main{background-color:var(--color-background);color:var(--color-text);display:grid;flex-grow:1;grid-template:repeat(6,min-content) / 100%;grid-template-areas:"banner" "header" "aside" "nav" "article" "footer";min-height:32rem}.go-Main-banner{grid-area:banner;padding:1rem var(--gutter) 0 var(--gutter)}.go-Main-header{background-color:var(--color-background);border-bottom:var(--border);font-size:.875rem;grid-area:header;min-height:var(--js-unit-header-height);padding:0 var(--gutter);transition:box-shadow .25s linear;z-index:10}.go-Main-header[data-fixed]{border-bottom:none;position:sticky;top:var(--js-unit-header-top, 0)}.go-Main-header[data-raised]{border-bottom:var(--border)}.go-Main-nav{background-color:var(--color-background);border-bottom:var(--border);font-size:.875rem;grid-area:nav;padding:0 var(--gutter)}.go-Main-article{background-color:var(--color-background);grid-area:article;margin:var(--gap) 0 5rem 0;min-height:32rem;padding:0 var(--gutter)}.go-Main-aside{background-color:var(--color-background-accented);border-bottom:var(--border);font-size:.875rem;grid-area:aside;padding:1rem var(--gutter)}.go-Main-aside--empty{border-bottom:none;padding:0}.go-Main-footer{background-color:var(--color-background);grid-area:footer;padding:0 var(--gutter)}.go-Main>*:empty{border:none;margin:0;padding:0}.go-Main-headerBreadcrumb{margin-top:1rem}.go-Main-headerContent{margin-bottom:1rem;position:sticky;top:0}.go-Main-headerContent[data-fixed]{align-items:center;display:flex;margin-bottom:0;min-height:0}@media screen and (min-width: 80rem){.go-Main-headerContent[data-fixed]{justify-content:space-between}}.go-Main-headerTitle{align-items:center;display:flex;gap:.5rem;height:3.5rem;max-width:100%;padding-right:1.5rem}@media screen and (min-width: 80rem){.go-Main-headerTitle[data-fixed]{max-width:40%}}.go-Main-headerTitle .go-Clipboard{display:none}.go-Main-headerTitle[data-fixed] .go-Clipboard{display:initial}.go-Main-headerLogo{--logo-height: 1.75rem;--logo-width: calc(var(--logo-height) / .3768);align-items:center;display:flex;margin-right:-.5rem;opacity:0;transition:opacity .25s ease-in-out,width .25s ease-out;visibility:hidden;width:0}.go-Main-headerLogo img{height:var(--logo-height);margin:-1rem 0;width:var(--logo-width)}.go-Main-headerLogo[data-fixed]{margin-right:0;opacity:1;visibility:visible;width:var(--logo-width)}.go-Main-headerDetails{display:flex;flex-flow:row wrap;gap:0 1rem;white-space:nowrap}.go-Main-headerDetails[data-fixed]{display:none}@media screen and (min-width: 80rem){:root:not([data-layout="compact"]) .go-Main-headerDetails[data-fixed]{display:flex}}.go-Main-headerDetailItem{color:var(--color-text-subtle);display:inline;font-size:.875rem;height:1.75rem;line-height:1.75rem}.go-Main-headerDetailItem:not(:last-of-type):after{content:"|";padding-left:1rem}.go-Main-nav--sticky{position:sticky;top:var(--js-sticky-header-height, 3.5rem);transition:box-shadow .25s linear;z-index:1}.go-Main-nav--fixed{border-top:initial}.go-Main-navDesktop{display:none;margin-top:var(--gap);overflow-y:auto;padding:.25rem;position:sticky;top:calc(var(--js-sticky-header-height, 3.5rem) + 1rem)}.go-Main-navMobile{display:flex;margin:.5rem 0}.go-Main-navMobile .go-Label{flex-grow:1;position:relative}.go-Main-navMobile .go-Select{padding-left:1.75rem;width:100%}.go-Main-navMobile .go-Label:before{background:url(/static/shared/icon/list_gm_grey_24dp.svg);background-repeat:no-repeat;background-size:contain;content:" ";height:1.25rem;left:.5rem;padding-left:1rem;position:absolute;top:.375rem;width:1.25rem}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){.go-Main-navMobile .go-Select{appearance:none}}}@media screen and (min-width: 80rem){:root[data-layout=responsive] .go-Main{grid-template:repeat(5,min-content) / 21.5% minmax(0,auto);grid-template-areas:"banner  banner" "header  header" "aside   aside" "nav     article" "footer  footer"}:root[data-layout=responsive] .go-Main-nav{border-bottom:none;border-top:none;padding:0 0 0 var(--gutter)}:root[data-layout=responsive] .go-Main-article{border-bottom:none;border-top:none;margin:var(--gap) 0 5rem var(--gap);padding:0 var(--gutter) 0 0}:root[data-layout=responsive] .go-Main-aside{border-bottom:var(--border)}:root[data-layout=responsive] .go-Main-nav--sticky{position:initial}:root[data-layout=responsive] .go-Main-nav--fixed{box-shadow:none}:root[data-layout=responsive] .go-Main-navDesktop{display:block}:root[data-layout=responsive] .go-Main-navMobile{display:none}}@media screen and (min-width: 112rem){:root[data-layout=responsive] .go-Main{grid-template:repeat(4,min-content) / minmax(17.5%,1fr) minmax(0,4fr) minmax(17.5%,1fr);grid-template-areas:"banner banner  banner" "header header  header" "nav    article aside" "footer footer  footer"}:root[data-layout=responsive] .go-Main-article{margin:var(--gap) var(--gap) 5rem;padding:0}:root[data-layout=responsive] .go-Main-aside{background-color:var(--color-background);border-bottom:none;margin:var(--gap) 0 0 0;padding:0 var(--gutter) 0 0}}@media screen and (min-width: 80rem){:root[data-layout=compact] .go-Main{grid-template:repeat(6,min-content) / 1fr auto;grid-template-areas:"banner  banner" "header  ." "header  nav" "aside   aside" "article article" "footer  footer"}:root[data-layout=compact] .go-Main-nav{align-items:center;border-bottom:var(--border);display:flex;top:calc((var(--js-main-header-height, 0) - var(--js-sticky-header-height, 3.5rem)) * -1)}:root[data-layout=compact] .go-Main-header[data-fixed]{box-shadow:none}:root[data-layout=compact] .go-Main-nav--sticky{height:var(--js-sticky-header-height, 3.5rem);position:sticky;top:0}:root[data-layout=compact] .go-Main-nav--fixed{box-shadow:none}:root[data-layout=compact] .go-Main-navDesktop{display:none}:root[data-layout=compact] .go-Main-navMobile{display:flex}}@media print{.go-Main-header--sticky,.go-Main-header--sticky>:last-child,.go-Main-nav--sticky,.go-Main-navDesktop{position:initial}}
 /*!
  * Copyright 2020-2021 The Go Authors. All rights reserved.
  * Use of this source code is governed by a BSD-style
diff --git a/static/frontend/unit/unit.min.css.map b/static/frontend/unit/unit.min.css.map
index 7386430..7ded9dc 100644
--- a/static/frontend/unit/unit.min.css.map
+++ b/static/frontend/unit/unit.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["_header.css", "unit.css"],
   "sourcesContent": ["/*!\n * Copyright 2020-2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.UnitHeader-titleHeading {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.UnitHeader-overflowContainer {\n  display: none;\n  height: 1.5rem;\n  position: absolute;\n  right: 0;\n  width: 1.5rem;\n}\n\n.go-Main-header[data-fixed] .UnitHeader-overflowContainer {\n  display: block;\n}\n@media screen and (min-width: 80rem) {\n  .go-Main-header[data-fixed] .UnitHeader-overflowContainer {\n    display: none;\n  }\n}\n\n.UnitHeader-overflowImage {\n  fill: var(--gray-3);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n\n.UnitHeader-overflowSelect {\n  appearance: none;\n  background: transparent;\n  border: 0;\n  color: transparent;\n  cursor: pointer;\n  font-size: 1rem;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n\n.UnitHeader-overflowSelect option {\n  color: var(--color-text);\n}\n\n.UnitHeader-versionBadge,\n.DetailsHeader-badge {\n  border-radius: unset;\n  color: var(--color-text-inverted);\n  font-size: 0.7rem;\n  line-height: 0.85rem;\n  margin: -1rem 0 -1rem 0.5rem;\n  padding: 0.25rem 0.5rem;\n  text-transform: uppercase;\n  top: -0.0625rem;\n}\n\n.UnitHeader-versionBadge--unknown,\n.DetailsHeader-badge--unknown {\n  display: none;\n}\n\na.UnitHeader-backLink {\n  color: var(--color-text);\n  display: block;\n  font-size: 1rem;\n  position: absolute;\n  right: 0.625rem;\n  top: 1.25rem;\n}\n\n.UnitHeader-backLink img {\n  vertical-align: middle;\n}\n\n.DetailsHeader-badge--notAtLatest a {\n  display: none;\n}\n\n.DetailsHeader-badge--notAtLatest span.DetailsHeader-span--latest {\n  display: none;\n}\n\n.DetailsHeader-badge--notAtLatest .UnitMetaDetails-icon {\n  z-index: 1;\n}\n\n.DetailsHeader-badge--notAtLatest .UnitMetaDetails-toggletipBubble {\n  color: var(--black);\n  text-transform: none;\n}\n\n.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip {\n  height: 0;\n}\n\n.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip button {\n  height: 0.8125rem;\n  line-height: 0;\n}\n\n.DetailsHeader-span--notAtLatest .UnitMetaDetails-toggletip img {\n  vertical-align: middle;\n}\n\n.DetailsHeader-badge--goToLatest span {\n  display: none;\n}\n\n.DetailsHeader-badge--goToLatest span.DetailsHeader-span--goToLatest {\n  display: initial;\n}\n\n.DetailsHeader-badge--unknown a {\n  display: none;\n}\n\n.DetailsHeader-badge--unknown span {\n  display: none;\n}\n\n.DetailsHeader-badge {\n  border-radius: 1rem;\n  display: inline-block;\n  font-size: 0.75rem;\n  padding: 0.25rem 0.75rem;\n  position: relative;\n  top: -0.125rem;\n}\n\n.DetailsHeader-badge--latest a {\n  display: none;\n}\n\n.DetailsHeader-badge--goToLatest a:hover {\n  text-decoration: none;\n}\n\n.DetailsHeader-badge--latest span.DetailsHeader-span--notAtLatest {\n  display: none;\n}\n\n.DetailsHeader-badge--goToLatest,\n.DetailsHeader-badge--latest,\n.DetailsHeader-badge--notAtLatest {\n  margin-left: 0.25rem;\n}\n", "/*!\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n@import url('./_header.css');\n\n.go-Main {\n  background-color: var(--color-background);\n  color: var(--color-text);\n  display: grid;\n  flex-grow: 1;\n  grid-template: repeat(6, min-content) / 100%;\n  grid-template-areas:\n    'banner'\n    'header'\n    'aside'\n    'nav'\n    'article'\n    'footer';\n  min-height: 32rem;\n}\n\n.go-Main-banner {\n  grid-area: banner;\n  padding: 1rem var(--gutter) 0 var(--gutter);\n}\n\n.go-Main-header {\n  background-color: var(--color-background);\n  border-bottom: var(--border);\n  font-size: 0.875rem;\n  grid-area: header;\n  min-height: var(--js-unit-header-height);\n  padding: 0 var(--gutter);\n  transition: box-shadow 0.25s linear;\n  z-index: 10;\n}\n\n.go-Main-header[data-fixed] {\n  border-bottom: none;\n  position: sticky;\n  top: var(--js-unit-header-top, 0);\n}\n\n.go-Main-header[data-raised] {\n  border-bottom: var(--border);\n}\n\n.go-Main-nav {\n  background-color: var(--color-background);\n  border-bottom: var(--border);\n  font-size: 0.875rem;\n  grid-area: nav;\n  padding: 0 var(--gutter);\n}\n\n.go-Main-article {\n  background-color: var(--color-background);\n  grid-area: article;\n  margin: var(--gap) 0 5rem 0;\n  min-height: 32rem;\n  padding: 0 var(--gutter);\n}\n\n.go-Main-aside {\n  background-color: var(--color-background-accented);\n  border-bottom: var(--border);\n  font-size: 0.875rem;\n  grid-area: aside;\n  padding: 1rem var(--gutter);\n}\n\n.go-Main-aside--empty {\n  border-bottom: none;\n  padding: 0;\n}\n\n.go-Main-footer {\n  background-color: var(--color-background);\n  grid-area: footer;\n  padding: 0 var(--gutter);\n}\n\n.go-Main > *:empty {\n  border: none;\n  margin: 0;\n  padding: 0;\n}\n\n.go-Main-headerBreadcrumb {\n  margin-top: 1rem;\n}\n\n.go-Main-headerContent {\n  margin-bottom: 1rem;\n  position: sticky;\n  top: 0;\n}\n\n.go-Main-headerContent[data-fixed] {\n  align-items: center;\n  display: flex;\n  margin-bottom: 0;\n  min-height: 0;\n}\n@media screen and (min-width: 80rem) {\n  .go-Main-headerContent[data-fixed] {\n    justify-content: space-between;\n  }\n}\n\n.go-Main-headerTitle {\n  align-items: center;\n  display: flex;\n  gap: 0.5rem;\n  height: 3.5rem;\n  max-width: 100%;\n  padding-right: 1.5rem;\n}\n@media screen and (min-width: 80rem) {\n  .go-Main-headerTitle[data-fixed] {\n    max-width: 40%;\n  }\n}\n\n.go-Main-headerTitle .go-Clipboard {\n  display: none;\n}\n\n.go-Main-headerTitle[data-fixed] .go-Clipboard {\n  display: initial;\n}\n\n.go-Main-headerLogo {\n  --logo-height: 1.75rem;\n  --logo-width: calc(var(--logo-height) / 0.3768);\n\n  align-items: center;\n  display: flex;\n  margin-right: -0.5rem;\n  opacity: 0;\n  transition: opacity 0.25s ease-in-out, width 0.25s ease-out;\n  visibility: hidden;\n  width: 0;\n}\n\n.go-Main-headerLogo img {\n  height: var(--logo-height);\n  margin: -1rem 0;\n  width: var(--logo-width);\n}\n\n.go-Main-headerLogo[data-fixed] {\n  margin-right: 0;\n  opacity: 1;\n  visibility: visible;\n  width: var(--logo-width);\n}\n\n.go-Main-headerDetails {\n  display: flex;\n  flex-flow: row wrap;\n  gap: 0 1rem;\n  white-space: nowrap;\n}\n\n.go-Main-headerDetails[data-fixed] {\n  display: none;\n}\n@media screen and (min-width: 80rem) {\n  :root:not([data-layout='compact']) .go-Main-headerDetails[data-fixed] {\n    display: flex;\n  }\n}\n\n.go-Main-headerDetailItem {\n  color: var(--color-text-subtle);\n  display: inline;\n  font-size: 0.875rem;\n  height: 1.75rem;\n  line-height: 1.75rem;\n}\n\n.go-Main-headerDetailItem:not(:last-of-type)::after {\n  content: '|';\n  padding-left: 1rem;\n}\n\n.go-Main-nav--sticky {\n  position: sticky;\n  top: var(--js-sticky-header-height, 3.5rem);\n  transition: box-shadow 0.25s linear;\n  z-index: 1;\n}\n\n.go-Main-nav--fixed {\n  border-top: initial;\n}\n\n.go-Main-navDesktop {\n  display: none;\n  margin-top: var(--gap);\n  overflow-y: auto;\n  padding: 0.25rem;\n  position: sticky;\n  top: calc(var(--js-sticky-header-height, 3.5rem) + 1rem);\n}\n\n.go-Main-navMobile {\n  display: flex;\n  margin: 0.5rem 0;\n}\n\n.go-Main-navMobile .go-Label {\n  flex-grow: 1;\n  position: relative;\n}\n\n.go-Main-navMobile .go-Select {\n  padding-left: 1.75rem;\n  width: 100%;\n}\n\n.go-Main-navMobile .go-Label::before {\n  background: url('/static/shared/icon/list_gm_grey_24dp.svg');\n  background-repeat: no-repeat;\n  background-size: contain;\n  content: ' ';\n  height: 1.25rem;\n  left: 0.5rem;\n  padding-left: 1rem;\n  position: absolute;\n  top: 0.375rem;\n  width: 1.25rem;\n}\n\n/* Safari only */\n@media not all and (min-resolution: 0.001dpcm) {\n  @supports (-webkit-appearance: none) {\n    .go-Main-navMobile .go-Select {\n      appearance: none;\n    }\n  }\n}\n\n@media screen and (min-width: 80rem) {\n  :root[data-layout='responsive'] .go-Main {\n    grid-template: repeat(5, min-content) / 21.5% minmax(0, auto);\n    grid-template-areas:\n      'banner  banner'\n      'header  header'\n      'aside   aside'\n      'nav     article'\n      'footer  footer';\n  }\n\n  :root[data-layout='responsive'] .go-Main-nav {\n    border-bottom: none;\n    border-top: none;\n    padding: 0 0 0 var(--gutter);\n  }\n\n  :root[data-layout='responsive'] .go-Main-article {\n    border-bottom: none;\n    border-top: none;\n    margin: var(--gap) 0 5rem var(--gap);\n    padding: 0 var(--gutter) 0 0;\n  }\n\n  :root[data-layout='responsive'] .go-Main-aside {\n    border-bottom: var(--border);\n  }\n\n  :root[data-layout='responsive'] .go-Main-nav--sticky {\n    position: initial;\n  }\n\n  :root[data-layout='responsive'] .go-Main-nav--fixed {\n    box-shadow: none;\n  }\n\n  :root[data-layout='responsive'] .go-Main-navDesktop {\n    display: block;\n  }\n\n  :root[data-layout='responsive'] .go-Main-navMobile {\n    display: none;\n  }\n}\n\n@media screen and (min-width: 112rem) {\n  :root[data-layout='responsive'] .go-Main {\n    grid-template: repeat(4, min-content) / minmax(17.5%, 1fr) minmax(0, 4fr) minmax(17.5%, 1fr);\n    grid-template-areas:\n      'banner banner  banner'\n      'header header  header'\n      'nav    article aside'\n      'footer footer  footer';\n  }\n\n  :root[data-layout='responsive'] .go-Main-article {\n    margin: var(--gap) var(--gap) 5rem;\n    padding: 0;\n  }\n\n  :root[data-layout='responsive'] .go-Main-aside {\n    background-color: var(--color-background);\n    border-bottom: none;\n    margin: var(--gap) 0 0 0;\n    padding: 0 var(--gutter) 0 0;\n  }\n}\n\n@media screen and (min-width: 80rem) {\n  :root[data-layout='compact'] .go-Main {\n    grid-template: repeat(6, min-content) / 1fr auto;\n    grid-template-areas:\n      'banner  banner'\n      'header  .'\n      'header  nav'\n      'aside   aside'\n      'article article'\n      'footer  footer';\n  }\n\n  :root[data-layout='compact'] .go-Main-nav {\n    align-items: center;\n    border-bottom: var(--border);\n    display: flex;\n    top: calc((var(--js-main-header-height, 0) - var(--js-sticky-header-height, 3.5rem)) * -1);\n  }\n\n  :root[data-layout='compact'] .go-Main-header[data-fixed] {\n    box-shadow: none;\n  }\n\n  :root[data-layout='compact'] .go-Main-nav--sticky {\n    height: var(--js-sticky-header-height, 3.5rem);\n    position: sticky;\n    top: 0;\n  }\n\n  :root[data-layout='compact'] .go-Main-nav--fixed {\n    box-shadow: none;\n  }\n\n  :root[data-layout='compact'] .go-Main-navDesktop {\n    display: none;\n  }\n\n  :root[data-layout='compact'] .go-Main-navMobile {\n    display: flex;\n  }\n}\n\n@media print {\n  .go-Main-header--sticky,\n  .go-Main-header--sticky > :last-child,\n  .go-Main-nav--sticky,\n  .go-Main-navDesktop {\n    position: initial;\n  }\n}\n"],
-  "mappings": "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",
+  "mappings": ";;;;;AAMA,yBACE,gBACA,uBACA,mBAGF,8BACE,aACA,cACA,kBACA,QACA,aAGF,0DACE,cAEF,qCACE,0DACE,cAIJ,0BACE,mBACA,YACA,OACA,kBACA,MACA,WAGF,2BACE,gBACA,uBACA,SACA,kBACA,eACA,eACA,YACA,OACA,kBACA,MACA,WAGF,kCACE,wBAGF,8CAEE,oBACA,iCACA,gBACA,mBA7DF,gDAgEE,yBACA,cAGF,gEAEE,aAGF,sBACE,wBACA,cACA,eACA,kBACA,cACA,YAGF,yBACE,sBAGF,sGACE,aAOF,wDACE,UAGF,mEACE,mBACA,oBAGF,4DACE,SAGF,mEACE,gBACA,cAGF,gEACE,sBAGF,sCACE,aAGF,qEACE,gBAGF,mEACE,aAOF,qBApIA,mBAsIE,qBACA,iBAvIF,sBAyIE,kBACA,aAGF,+BACE,aAGF,yCACE,qBAGF,kEACE,aAGF,gGAGE,mBCpJF,SACE,yCACA,wBACA,aACA,YACA,2CACA,uEAOA,iBAGF,gBACE,iBACA,2CAGF,gBACE,yCACA,4BACA,kBACA,iBACA,wCACA,wBACA,kCACA,WAGF,4BACE,mBACA,gBACA,iCAGF,6BACE,4BAGF,aACE,yCACA,4BACA,kBACA,cACA,wBAGF,iBACE,yCACA,kBACA,2BACA,iBACA,wBAGF,eACE,kDACA,4BACA,kBACA,gBACA,2BAGF,sBACE,mBA3EF,UA+EA,gBACE,yCACA,iBACA,wBAGF,iBACE,YAtFF,mBA2FA,0BACE,gBAGF,uBACE,mBACA,gBACA,MAGF,mCACE,mBACA,aACA,gBACA,aAEF,qCACE,mCACE,+BAIJ,qBACE,mBACA,aACA,UACA,cACA,eACA,qBAEF,qCACE,iCACE,eAIJ,mCACE,aAGF,+CACE,gBAGF,oBACE,uBACA,+CAEA,mBACA,aACA,oBACA,UACA,wDACA,kBACA,QAGF,wBACE,0BArJF,eAuJE,wBAGF,gCACE,eACA,UACA,mBACA,wBAGF,uBACE,aACA,mBACA,WACA,mBAGF,mCACE,aAEF,qCACE,sEACE,cAIJ,0BACE,+BACA,eACA,kBACA,eACA,oBAGF,mDACE,YACA,kBAGF,qBACE,gBACA,2CACA,kCACA,UAGF,oBACE,mBAGF,oBACE,aACA,sBACA,gBA5MF,eA8ME,gBACA,wDAGF,mBACE,aAnNF,eAuNA,6BACE,YACA,kBAGF,8BACE,qBACA,WAGF,oCACE,0DACA,4BACA,wBACA,YACA,eACA,WACA,kBACA,kBACA,YACA,cAIF,8CACE,qCACE,8BACE,kBAKN,qCACE,uCACE,2DACA,yGAQF,2CACE,mBACA,gBACA,4BAGF,+CACE,mBACA,gBACA,oCACA,4BAGF,6CACE,4BAGF,mDACE,iBAGF,kDACE,gBAGF,kDACE,cAGF,iDACE,cAIJ,sCACE,uCACE,wFACA,mHAOF,+CACE,kCA/SJ,UAmTE,6CACE,yCACA,mBACA,wBACA,6BAIJ,qCACE,oCACE,+CACA,kHASF,wCACE,mBACA,4BACA,aACA,0FAGF,uDACE,gBAGF,gDACE,8CACA,gBACA,MAGF,+CACE,gBAGF,+CACE,aAGF,8CACE,cAIJ,aACE,qGAIE",
   "names": []
 }
diff --git a/static/frontend/unit/versions/versions.js b/static/frontend/unit/versions/versions.js
index 30f1498..cf06f98 100644
--- a/static/frontend/unit/versions/versions.js
+++ b/static/frontend/unit/versions/versions.js
@@ -1,4 +1,4 @@
-var s=class{constructor(){this.expand=document.querySelector(".js-versionsExpand");this.collapse=document.querySelector(".js-versionsCollapse");this.details=[...document.querySelectorAll(".js-versionDetails")];if(this.expand?.parentElement){this.details.some(e=>e.tagName==="DETAILS")&&(this.expand.parentElement.style.display="block");for(let e of this.details)e.addEventListener("click",()=>{this.updateButtons()});this.expand?.addEventListener("click",()=>{this.details.map(e=>e.open=!0),this.updateButtons()}),this.collapse?.addEventListener("click",()=>{this.details.map(e=>e.open=!1),this.updateButtons()}),this.updateButtons(),this.setCurrent()}}setCurrent(){let e=document.querySelector(".js-canonicalURLPath")?.dataset?.canonicalUrlPath,t=document.querySelector(`.js-versionLink[href="${e}"]`);t&&(t.style.fontWeight="bold")}updateButtons(){setTimeout(()=>{if(!this.expand||!this.collapse)return;let e,t;for(let n of this.details)e=e||n.open,t=t||!n.open;this.expand.style.display=t?"inline-block":"none",this.collapse.style.display=t?"none":"inline-block"})}};new s;export{s as VersionsController};
+var i=class{constructor(){this.expand=document.querySelector(".js-versionsExpand");this.collapse=document.querySelector(".js-versionsCollapse");this.details=[...document.querySelectorAll(".js-versionDetails")];var n,e,s;if((n=this.expand)!=null&&n.parentElement){this.details.some(t=>t.tagName==="DETAILS")&&(this.expand.parentElement.style.display="block");for(let t of this.details)t.addEventListener("click",()=>{this.updateButtons()});(e=this.expand)==null||e.addEventListener("click",()=>{this.details.map(t=>t.open=!0),this.updateButtons()}),(s=this.collapse)==null||s.addEventListener("click",()=>{this.details.map(t=>t.open=!1),this.updateButtons()}),this.updateButtons(),this.setCurrent()}}setCurrent(){var s,t;let n=(t=(s=document.querySelector(".js-canonicalURLPath"))==null?void 0:s.dataset)==null?void 0:t.canonicalUrlPath,e=document.querySelector(`.js-versionLink[href="${n}"]`);e&&(e.style.fontWeight="bold")}updateButtons(){setTimeout(()=>{if(!this.expand||!this.collapse)return;let n,e;for(let s of this.details)n=n||s.open,e=e||!s.open;this.expand.style.display=e?"inline-block":"none",this.collapse.style.display=e?"none":"inline-block"})}};new i;export{i as VersionsController};
 /*!
  * @license
  * Copyright 2021 The Go Authors. All rights reserved.
diff --git a/static/frontend/unit/versions/versions.js.map b/static/frontend/unit/versions/versions.js.map
index e0527c4..6ef91e0 100644
--- a/static/frontend/unit/versions/versions.js.map
+++ b/static/frontend/unit/versions/versions.js.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["versions.ts"],
   "sourcesContent": ["/*!\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * VersionsController encapsulates event listeners and UI updates\n * for the versions page. As the expandable sections containing\n * the symbol history for a package are opened and closed it toggles\n * visiblity of the buttons to expand or collapse them. On page load\n * it adds an indicator to the version that matches the version request\n * by the user for the page or the canonical url path.\n */\nexport class VersionsController {\n  private expand = document.querySelector<HTMLButtonElement>('.js-versionsExpand');\n  private collapse = document.querySelector<HTMLButtonElement>('.js-versionsCollapse');\n  private details = [...document.querySelectorAll<HTMLDetailsElement>('.js-versionDetails')];\n\n  constructor() {\n    if (!this.expand?.parentElement) return;\n    if (this.details.some(d => d.tagName === 'DETAILS')) {\n      this.expand.parentElement.style.display = 'block';\n    }\n\n    for (const d of this.details) {\n      d.addEventListener('click', () => {\n        this.updateButtons();\n      });\n    }\n\n    this.expand?.addEventListener('click', () => {\n      this.details.map(d => (d.open = true));\n      this.updateButtons();\n    });\n\n    this.collapse?.addEventListener('click', () => {\n      this.details.map(d => (d.open = false));\n      this.updateButtons();\n    });\n\n    this.updateButtons();\n    this.setCurrent();\n  }\n\n  /**\n   * setCurrent applies the active style to the version dot\n   * for the version that matches the canonical URL path.\n   */\n  private setCurrent() {\n    const canonicalPath = document.querySelector<HTMLElement>('.js-canonicalURLPath')?.dataset\n      ?.canonicalUrlPath;\n    const versionLink = document.querySelector<HTMLElement>(\n      `.js-versionLink[href=\"${canonicalPath}\"]`\n    );\n    if (versionLink) {\n      versionLink.style.fontWeight = 'bold';\n    }\n  }\n\n  private updateButtons() {\n    setTimeout(() => {\n      if (!this.expand || !this.collapse) return;\n      let someOpen, someClosed;\n      for (const d of this.details) {\n        someOpen = someOpen || d.open;\n        someClosed = someClosed || !d.open;\n      }\n      this.expand.style.display = someClosed ? 'inline-block' : 'none';\n      this.collapse.style.display = someClosed ? 'none' : 'inline-block';\n    });\n  }\n}\n\nnew VersionsController();\n"],
-  "mappings": "AAeO,IAAMA,EAAN,KAAyB,CAK9B,aAAc,CAJd,KAAQ,OAAS,SAAS,cAAiC,oBAAoB,EAC/E,KAAQ,SAAW,SAAS,cAAiC,sBAAsB,EACnF,KAAQ,QAAU,CAAC,GAAG,SAAS,iBAAqC,oBAAoB,CAAC,EAGvF,GAAK,KAAK,QAAQ,cAClB,CAAI,KAAK,QAAQ,KAAKC,GAAKA,EAAE,UAAY,SAAS,IAChD,KAAK,OAAO,cAAc,MAAM,QAAU,SAG5C,QAAWA,KAAK,KAAK,QACnBA,EAAE,iBAAiB,QAAS,IAAM,CAChC,KAAK,cAAc,CACrB,CAAC,EAGH,KAAK,QAAQ,iBAAiB,QAAS,IAAM,CAC3C,KAAK,QAAQ,IAAIA,GAAMA,EAAE,KAAO,EAAK,EACrC,KAAK,cAAc,CACrB,CAAC,EAED,KAAK,UAAU,iBAAiB,QAAS,IAAM,CAC7C,KAAK,QAAQ,IAAIA,GAAMA,EAAE,KAAO,EAAM,EACtC,KAAK,cAAc,CACrB,CAAC,EAED,KAAK,cAAc,EACnB,KAAK,WAAW,EAClB,CAMQ,YAAa,CACnB,IAAMC,EAAgB,SAAS,cAA2B,sBAAsB,GAAG,SAC/E,iBACEC,EAAc,SAAS,cAC3B,yBAAyBD,CAAa,IACxC,EACIC,IACFA,EAAY,MAAM,WAAa,OAEnC,CAEQ,eAAgB,CACtB,WAAW,IAAM,CACf,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,SAAU,OACpC,IAAIC,EAAUC,EACd,QAAWJ,KAAK,KAAK,QACnBG,EAAWA,GAAYH,EAAE,KACzBI,EAAaA,GAAc,CAACJ,EAAE,KAEhC,KAAK,OAAO,MAAM,QAAUI,EAAa,eAAiB,OAC1D,KAAK,SAAS,MAAM,QAAUA,EAAa,OAAS,cACtD,CAAC,CACH,CACF,EAEA,IAAIL",
-  "names": ["VersionsController", "d", "canonicalPath", "versionLink", "someOpen", "someClosed"]
+  "mappings": "AAeO,IAAMA,EAAN,KAAyB,CAK9B,aAAc,CAJd,KAAQ,OAAS,SAAS,cAAiC,oBAAoB,EAC/E,KAAQ,SAAW,SAAS,cAAiC,sBAAsB,EACnF,KAAQ,QAAU,CAAC,GAAG,SAAS,iBAAqC,oBAAoB,CAAC,EAlB3F,IAAAC,EAAAC,EAAAC,EAqBI,IAAKF,EAAA,KAAK,SAAL,MAAAA,EAAa,cAClB,CAAI,KAAK,QAAQ,KAAKG,GAAKA,EAAE,UAAY,SAAS,IAChD,KAAK,OAAO,cAAc,MAAM,QAAU,SAG5C,QAAWA,KAAK,KAAK,QACnBA,EAAE,iBAAiB,QAAS,IAAM,CAChC,KAAK,cAAc,CACrB,CAAC,GAGHF,EAAA,KAAK,SAAL,MAAAA,EAAa,iBAAiB,QAAS,IAAM,CAC3C,KAAK,QAAQ,IAAIE,GAAMA,EAAE,KAAO,EAAK,EACrC,KAAK,cAAc,CACrB,IAEAD,EAAA,KAAK,WAAL,MAAAA,EAAe,iBAAiB,QAAS,IAAM,CAC7C,KAAK,QAAQ,IAAIC,GAAMA,EAAE,KAAO,EAAM,EACtC,KAAK,cAAc,CACrB,GAEA,KAAK,cAAc,EACnB,KAAK,WAAW,EAClB,CAMQ,YAAa,CAlDvB,IAAAH,EAAAC,EAmDI,IAAMG,GAAgBH,GAAAD,EAAA,SAAS,cAA2B,sBAAsB,IAA1D,YAAAA,EAA6D,UAA7D,YAAAC,EAClB,iBACEI,EAAc,SAAS,cAC3B,yBAAyBD,KAC3B,EACIC,IACFA,EAAY,MAAM,WAAa,OAEnC,CAEQ,eAAgB,CACtB,WAAW,IAAM,CACf,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,SAAU,OACpC,IAAIC,EAAUC,EACd,QAAWJ,KAAK,KAAK,QACnBG,EAAWA,GAAYH,EAAE,KACzBI,EAAaA,GAAc,CAACJ,EAAE,KAEhC,KAAK,OAAO,MAAM,QAAUI,EAAa,eAAiB,OAC1D,KAAK,SAAS,MAAM,QAAUA,EAAa,OAAS,cACtD,CAAC,CACH,CACF,EAEA,IAAIR",
+  "names": ["VersionsController", "_a", "_b", "_c", "d", "canonicalPath", "versionLink", "someOpen", "someClosed"]
 }
diff --git a/static/frontend/unit/versions/versions.min.css.map b/static/frontend/unit/versions/versions.min.css.map
index d77102b..cde9b28 100644
--- a/static/frontend/unit/versions/versions.min.css.map
+++ b/static/frontend/unit/versions/versions.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["versions.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.Versions table {\n  border-spacing: 0;\n}\n\n.Versions th {\n  text-align: left;\n}\n\n.Versions td {\n  padding-bottom: 1rem;\n}\n\n.Versions td:nth-child(1) {\n  padding-right: 3rem;\n  vertical-align: top;\n}\n\n.Versions td:nth-child(2) {\n  border-right: var(--border);\n  padding-right: 1rem;\n  text-align: right;\n  vertical-align: top;\n  white-space: nowrap;\n}\n\n.Versions td:nth-child(3) {\n  padding-left: 1rem;\n}\n\n.Versions-commitTime {\n  font-size: 1rem;\n  font-weight: 400;\n}\n\n.Versions-major {\n  font-weight: 600;\n}\n\n.Versions-symbols {\n  margin-left: 2rem;\n}\n\n.Versions-vulns {\n  margin: 0.25rem 2rem;\n  max-width: 60rem;\n}\n\n.Versions-symbolBulletNew {\n  color: var(--color-text-subtle);\n  padding-right: 0.5rem;\n}\n\n.Versions-symbolBuilds,\n.Versions-symbolBuildsDash,\n.Versions-symbolOld {\n  color: var(--color-text-subtle);\n}\n\n.Versions-symbolChild {\n  padding-left: 2rem;\n}\n\n.Versions-symbolSection,\n.Versions-symbolType {\n  margin-bottom: 0.625rem;\n}\n\n.Versions-symbolsHeader {\n  margin: 0.625rem 0;\n}\n\n.Versions-title {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 1rem 2.5rem;\n  margin-bottom: 1rem;\n}\n\n.Versions-titleButtonGroup {\n  display: none;\n}\n\n.Versions-titleButtonGroup button {\n  font-size: 0.875rem;\n}\n\n.Versions-modulesTitle {\n  font-size: 1rem;\n  margin: 1rem 0;\n}\n\n.Versions-list {\n  gap: 0 1rem;\n  line-height: 2.25rem;\n}\n@media only screen and (min-width: 37.5rem) {\n  .Versions-list {\n    display: grid;\n    grid-template-columns: fit-content(8rem) fit-content(20rem) min-content auto;\n  }\n}\n\n.Version-major {\n  align-items: baseline;\n  display: flex;\n  gap: 1rem;\n  margin-bottom: 1rem;\n  min-width: 4rem;\n}\n@media only screen and (min-width: 37.5rem) {\n  .Version-major {\n    margin-bottom: 0;\n  }\n}\n\n.Version-tag {\n  text-align: left;\n}\n@media only screen and (min-width: 37.5rem) {\n  .Version-tag {\n    text-align: right;\n  }\n}\n\n.Version-dot {\n  border: var(--border);\n  color: var(--gray-7);\n  display: none;\n  font-size: 2.75rem;\n  justify-content: center;\n  line-height: 1.75rem;\n  -webkit-text-stroke: 0.125rem var(--color-background);\n  width: 0;\n}\n\n.Version-dot::before {\n  content: '\u2022';\n}\n@media only screen and (min-width: 37.5rem) {\n  .Version-dot {\n    display: flex;\n  }\n}\n\n.Version-dot--minor {\n  color: var(--color-brand-primary);\n}\n\n.Version-commitTime {\n  align-items: center;\n  display: flex;\n  gap: 0.75rem;\n  margin-left: 1rem;\n  white-space: nowrap;\n}\n\n.Version-details {\n  line-height: 1.25rem;\n}\n\n.Version-summary {\n  align-items: center;\n  cursor: pointer;\n  line-height: 2.25rem;\n  padding-right: 0.5rem;\n  white-space: nowrap;\n  width: min-content;\n}\n\n.Version-summary .go-Chip {\n  margin-left: 0.5rem;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,SAAS,MACR,eAAgB,CAClB,CAEA,CAJC,SAIS,GACR,WAAY,IACd,CAEA,CARC,SAQS,GACR,eAAgB,IAClB,CAEA,CAZC,SAYS,EAAE,cACV,cAAe,KACf,eAAgB,GAClB,CAEA,CAjBC,SAiBS,EAAE,cACV,aAAc,IAAI,UAClB,cAAe,KACf,WAAY,MACZ,eAAgB,IAChB,YAAa,MACf,CAEA,CAzBC,SAyBS,EAAE,cACV,aAAc,IAChB,CAEA,CAAC,oBACC,UAAW,KACX,YAAa,GACf,CAEA,CAAC,eACC,YAAa,GACf,CAEA,CAAC,iBACC,YAAa,IACf,CAEA,CAAC,eAhDD,OAiDU,OAAQ,KAChB,UAAW,KACb,CAEA,CAAC,yBACC,MAAO,IAAI,qBACX,cAAe,KACjB,CAEA,CAAC,sBACD,CAAC,0BACD,CAAC,mBACC,MAAO,IAAI,oBACb,CAEA,CAAC,qBACC,aAAc,IAChB,CAEA,CAAC,uBACD,CAAC,oBACC,cAAe,OACjB,CAEA,CAAC,uBAzED,OA0EU,QAAS,CACnB,CAEA,CAAC,eACC,YAAa,OACb,QAAS,KACT,UAAW,KACX,IAAK,KAAK,OACV,cAAe,IACjB,CAEA,CAAC,0BACC,QAAS,IACX,CAEA,CAJC,0BAI0B,OACzB,UAAW,OACb,CAEA,CAAC,sBACC,UAAW,KA9Fb,OA+FU,KAAK,CACf,CAEA,CAAC,cACC,IAAK,EAAE,KACP,YAAa,OACf,CACA,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,SACjC,CALD,cAMG,QAAS,KACT,sBAAuB,YAAY,MAAM,YAAY,OAAO,YAAY,IAC1E,CACF,CAEA,CAAC,cACC,YAAa,SACb,QAAS,KACT,IAAK,KACL,cAAe,KACf,UAAW,IACb,CACA,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,SACjC,CARD,cASG,cAAe,CACjB,CACF,CAEA,CAAC,YACC,WAAY,IACd,CACA,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,SACjC,CAJD,YAKG,WAAY,KACd,CACF,CAEA,CAAC,YACC,OAAQ,IAAI,UACZ,MAAO,IAAI,UACX,QAAS,KACT,UAAW,QACX,gBAAiB,OACjB,YAAa,QACb,oBAAqB,QAAS,IAAI,oBAClC,MAAO,CACT,CAEA,CAXC,WAWW,QACV,QAAS,OACX,CACA,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,SACjC,CAfD,YAgBG,QAAS,IACX,CACF,CAEA,CAAC,mBACC,MAAO,IAAI,sBACb,CAEA,CAAC,mBACC,YAAa,OACb,QAAS,KACT,IAAK,OACL,YAAa,KACb,YAAa,MACf,CAEA,CAAC,gBACC,YAAa,OACf,CAEA,CAAC,gBACC,YAAa,OACb,OAAQ,QACR,YAAa,QACb,cAAe,MACf,YAAa,OACb,MAAO,WACT,CAEA,CATC,gBASgB,CAAC,QAChB,YAAa,KACf",
+  "mappings": ";;;;;AAMA,gBACE,iBAGF,aACE,gBAGF,aACE,oBAGF,0BACE,mBACA,mBAGF,0BACE,2BACA,mBACA,iBACA,mBACA,mBAGF,0BACE,kBAGF,qBACE,eACA,gBAGF,gBACE,gBAGF,kBACE,iBAGF,gBAhDA,mBAkDE,gBAGF,0BACE,+BACA,oBAGF,sEAGE,+BAGF,sBACE,kBAGF,6CAEE,sBAGF,wBAzEA,iBA6EA,gBACE,mBACA,aACA,eACA,gBACA,mBAGF,2BACE,aAGF,kCACE,kBAGF,uBACE,eA9FF,cAkGA,eACE,WACA,oBAEF,4CACE,eACE,aACA,6EAIJ,eACE,qBACA,aACA,SACA,mBACA,eAEF,4CACE,eACE,iBAIJ,aACE,gBAEF,4CACE,aACE,kBAIJ,aACE,qBACA,oBACA,aACA,kBACA,uBACA,oBACA,oDACA,QAGF,oBACE,gBAEF,4CACE,aACE,cAIJ,oBACE,iCAGF,oBACE,mBACA,aACA,WACA,iBACA,mBAGF,iBACE,oBAGF,iBACE,mBACA,eACA,oBACA,oBACA,mBACA,kBAGF,0BACE",
   "names": []
 }
diff --git a/static/frontend/vuln/entry/entry.min.css.map b/static/frontend/vuln/entry/entry.min.css.map
index b2c49ff..f0ceeee 100644
--- a/static/frontend/vuln/entry/entry.min.css.map
+++ b/static/frontend/vuln/entry/entry.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["entry.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.Vuln-alias {\n  display: none;\n}\n\n.VulnEntry {\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  margin-top: 0.5rem;\n}\n\n.VulnEntry h2 {\n  font-size: 1.25rem;\n}\n\n.VulnEntryPackages-detailsContent {\n  margin-left: 0.2rem;\n}\n\n/* One column by default */\n.VulnEntryPackages-container {\n  display: grid;\n  grid-gap: 0.5rem;\n  grid-template-columns: 1fr;\n}\n\n/* Don't display the first item - the headers for multi-col layout */\n.VulnEntryPackages-container > li:first-child {\n  display: none;\n}\n\n.VulnEntryPackages-attr::before {\n  color: var(--color-text-subtle);\n  content: attr(data-name);\n}\n\n/* Attribute name for first column, and attribute value for second column. */\n.VulnEntryPackages-attr {\n  display: grid;\n  grid-template-columns: minmax(5em, 10%) 1fr;\n  list-style: disc;\n  list-style-position: inside;\n\n  /* package and symbol names can be pretty long */\n  overflow-wrap: anywhere;\n  padding: 0.2rem;\n}\n\n/* Three columns for wider screen */\n@media screen and (min-width: 46rem) {\n  /* Undo what's done by default */\n  .VulnEntryPackages-container {\n    grid-gap: 0;\n  }\n\n  .VulnEntryPackages-item {\n    padding: inherit;\n  }\n\n  .VulnEntryPackages-container > li:first-child {\n    display: grid; /* undo display: none setfor default */\n  }\n\n  .VulnEntryPackages-attr::before {\n    content: none;\n  }\n\n  .VulnEntryPackages-attr {\n    grid-template-columns: 1fr;\n  }\n\n  .VulnEntryPackages-item-container {\n    display: grid;\n    grid-template-columns: minmax(10em, 50%) minmax(5em, 20%) 1fr;\n    padding: 0.5rem;\n  }\n\n  /* Header */\n  .VulnEntryPackages-item-container:first-child {\n    background-color: var(--color-background-accented);\n  }\n\n  /* Header text */\n  .VulnEntryPackages-item-container:first-child .VulnEntryPackages-attr {\n    display: flex;\n    font-weight: bold;\n    overflow: auto;\n    text-overflow: initial;\n    white-space: normal;\n  }\n}\n\n.VulnEntry-referenceList,\n.VulnEntry-aliases {\n  line-height: 1.75rem;\n  word-break: break-all;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,WACC,QAAS,IACX,CAEA,CAAC,UACC,QAAS,KACT,eAAgB,OAChB,IAAK,KACL,WAAY,KACd,CAEA,CAPC,UAOU,GACT,UAAW,OACb,CAEA,CAAC,iCACC,YAAa,KACf,CAGA,CAAC,4BACC,QAAS,KACT,SAAU,MACV,sBAAuB,GACzB,CAGA,CAPC,2BAO4B,CAAE,EAAE,aAC/B,QAAS,IACX,CAEA,CAAC,sBAAsB,QACrB,MAAO,IAAI,qBACX,QAAS,KAAK,UAChB,CAGA,CANC,uBAOC,QAAS,KACT,sBAAuB,OAAO,GAAG,CAAE,KAAK,IACxC,WAAY,KACZ,oBAAqB,OAGrB,cAAe,SAlDjB,QAmDW,KACX,CAGA,OAAO,OAAO,IAAI,CAAC,SAAS,EAAE,OAE5B,CA/BD,4BAgCG,SAAU,CACZ,CAEA,CAAC,uBACC,QAAS,OACX,CAEA,CAvCD,2BAuC8B,CAAE,EAAE,aAC/B,QAAS,IACX,CAEA,CAhCD,sBAgCwB,QACrB,QAAS,IACX,CAEA,CApCD,uBAqCG,sBAAuB,GACzB,CAEA,CAAC,iCACC,QAAS,KACT,sBAAuB,OAAO,IAAI,CAAE,KAAK,OAAO,GAAG,CAAE,KAAK,IA/E9D,QAgFa,KACX,CAGA,CAPC,gCAOgC,aAC/B,iBAAkB,IAAI,4BACxB,CAGA,CAZC,gCAYgC,aAAa,CApD/C,uBAqDG,QAAS,KACT,YAAa,IACb,SAAU,KACV,cAAe,QACf,YAAa,MACf,CACF,CAEA,CAAC,wBACD,CAAC,kBACC,YAAa,QACb,WAAY,SACd",
+  "mappings": ";;;;;AAMA,YACE,aAGF,WACE,aACA,sBACA,SACA,iBAGF,cACE,kBAGF,kCACE,kBAIF,6BACE,aACA,eACA,0BAIF,4CACE,aAGF,+BACE,+BACA,wBAIF,wBACE,aACA,0CACA,gBACA,2BAGA,uBAlDF,cAuDA,qCAEE,6BACE,WAGF,wBACE,gBAGF,4CACE,aAGF,+BACE,aAGF,wBACE,0BAGF,kCACE,aACA,2DA/EJ,cAoFE,8CACE,kDAIF,sEACE,aACA,gBACA,cACA,sBACA,oBAIJ,4CAEE,oBACA",
   "names": []
 }
diff --git a/static/frontend/vuln/list/list.min.css.map b/static/frontend/vuln/list/list.min.css.map
index 2890e62..6330583 100644
--- a/static/frontend/vuln/list/list.min.css.map
+++ b/static/frontend/vuln/list/list.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["list.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/* Hide the search form in the header. */\n.go-SearchForm {\n  display: none;\n}\n\n.VulnList-title {\n  font-size: 1.25rem;\n  font-weight: 400;\n}\n\n.VulnList-details {\n  margin-bottom: 1.75rem;\n}\n\n.VulnList-details p {\n  word-break: break-word;\n}\n\n.VulnList-search {\n  margin-bottom: 1rem;\n  max-width: 32rem;\n}\n"],
-  "mappings": ";;;;;AAOA,CAAC,cACC,QAAS,IACX,CAEA,CAAC,eACC,UAAW,QACX,YAAa,GACf,CAEA,CAAC,iBACC,cAAe,OACjB,CAEA,CAJC,iBAIiB,EAChB,WAAY,UACd,CAEA,CAAC,gBACC,cAAe,KACf,UAAW,KACb",
+  "mappings": ";;;;;AAOA,eACE,aAGF,gBACE,kBACA,gBAGF,kBACE,sBAGF,oBACE,sBAGF,iBACE,mBACA",
   "names": []
 }
diff --git a/static/frontend/vuln/main/main.min.css.map b/static/frontend/vuln/main/main.min.css.map
index 6af713c..767526a 100644
--- a/static/frontend/vuln/main/main.min.css.map
+++ b/static/frontend/vuln/main/main.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["main.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/* Hide the search form in the header. */\n.go-SearchForm {\n  display: none;\n}\n\n.VulnMain-title {\n  font-size: 1.25rem;\n  font-weight: 400;\n  margin: 0 0 0.5rem;\n}\n\n.VulnMain-recent {\n  margin-top: 0.5rem;\n}\n\n.VulnMain-details {\n  margin-bottom: 1.75rem;\n}\n\n.VulnMain-details p {\n  word-break: break-word;\n}\n\n.VulnMain-search {\n  max-width: 32rem;\n}\n\n.VulnMain h2 {\n  margin: 1.75rem 0 0.5rem;\n}\n"],
-  "mappings": ";;;;;AAOA,CAAC,cACC,QAAS,IACX,CAEA,CAAC,eACC,UAAW,QACX,YAAa,IAbf,OAcU,EAAE,EAAE,KACd,CAEA,CAAC,gBACC,WAAY,KACd,CAEA,CAAC,iBACC,cAAe,OACjB,CAEA,CAJC,iBAIiB,EAChB,WAAY,UACd,CAEA,CAAC,gBACC,UAAW,KACb,CAEA,CAAC,SAAS,GAjCV,OAkCU,QAAQ,EAAE,KACpB",
+  "mappings": ";;;;;AAOA,eACE,aAGF,gBACE,kBACA,gBAbF,iBAiBA,iBACE,iBAGF,kBACE,sBAGF,oBACE,sBAGF,iBACE,gBAGF,aAjCA",
   "names": []
 }
diff --git a/static/frontend/vuln/vuln.min.css.map b/static/frontend/vuln/vuln.min.css.map
index e5d67c1..19b499c 100644
--- a/static/frontend/vuln/vuln.min.css.map
+++ b/static/frontend/vuln/vuln.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["vuln.css"],
   "sourcesContent": ["/*\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n.Vuln {\n  gap: 0.5rem;\n}\n\n.Vuln-title {\n  font-size: 2.25rem;\n  font-weight: 400;\n  margin-bottom: 1rem;\n}\n\n.Vuln-details {\n  display: flex;\n  flex-direction: column;\n  gap: 0.75rem;\n}\n\n.Vuln-detailsMetadata {\n  display: flex;\n  flex-wrap: wrap;\n  font-size: 0.875rem;\n  gap: 0.5rem 0;\n}\n\n.Vuln-detailsMetadata li:not(:last-child)::after {\n  content: '|';\n  padding: 0 0.5rem;\n}\n"],
-  "mappings": ";;;;;AAMA,CAAC,KACC,IAAK,KACP,CAEA,CAAC,WACC,UAAW,QACX,YAAa,IACb,cAAe,IACjB,CAEA,CAAC,aACC,QAAS,KACT,eAAgB,OAChB,IAAK,MACP,CAEA,CAAC,qBACC,QAAS,KACT,UAAW,KACX,UAAW,QACX,IAAK,MAAO,CACd,CAEA,CAPC,qBAOqB,EAAE,KAAK,YAAY,OACvC,QAAS,IA9BX,QA+BW,EAAE,KACb",
+  "mappings": ";;;;;AAMA,MACE,UAGF,YACE,kBACA,gBACA,mBAGF,cACE,aACA,sBACA,WAGF,sBACE,aACA,eACA,kBACA,YAGF,gDACE,YA9BF",
   "names": []
 }
diff --git a/static/shared/header/header.ts b/static/shared/header/header.ts
index 9aa2bec..1b9a391 100644
--- a/static/shared/header/header.ts
+++ b/static/shared/header/header.ts
@@ -22,8 +22,8 @@
       }
       // prevents menus that have been tabbed into from staying open
       // when you hover over another menu
-      target.focus();
-      target.blur();
+      target.classList.remove('forced-closed');
+      target.classList.add('forced-open');
     });
 
     const toggleForcedOpen = (e: Event) => {
@@ -49,19 +49,30 @@
           currentTarget.classList.remove('forced-closed');
         });
       }
+      currentTarget.focus();
     };
     menuItemHover.addEventListener('click', toggleForcedOpen);
-  });
-
-  // ensure desktop submenus are closed when esc is pressed
-  const headerItems = document.querySelectorAll('.Header-menuItem');
-  headerItems.forEach(header => {
-    header.addEventListener('keyup', e => {
-      const event = e as KeyboardEvent;
-      if (event.key === 'Escape') {
-        (event.target as HTMLElement)?.blur();
-      }
+    menuItemHover.addEventListener('focus', e => {
+      const target = e.target as HTMLElement;
+      target.classList.add('forced-closed');
+      target.classList.remove('forced-open');
     });
+
+    // ensure desktop submenus are closed when esc is pressed
+    const closeSubmenuOnEsc = (e: Event) => {
+      const event = e as KeyboardEvent;
+      const target = e.target as HTMLElement;
+      if (event.key === 'Escape') {
+        const forcedOpenItem = document.querySelector('.forced-open') as HTMLElement;
+        if (forcedOpenItem) {
+          forcedOpenItem.classList.remove('forced-open');
+          forcedOpenItem.blur();
+          forcedOpenItem.classList.add('forced-closed');
+          target?.focus();
+        }
+      }
+    };
+    document.addEventListener('keydown', closeSubmenuOnEsc);
   });
 
   // Mobile menu subnav menus
diff --git a/static/worker/worker.js.map b/static/worker/worker.js.map
index 0d10c15..5f58689 100644
--- a/static/worker/worker.js.map
+++ b/static/worker/worker.js.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["worker.ts"],
   "sourcesContent": ["/*!\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\ndeclare global {\n  interface Window {\n    submitForm: typeof submitForm;\n  }\n}\n\nfunction submitForm(formName: string, reload: boolean) {\n  const form = document.querySelector<HTMLFormElement>(`form[name=\"${formName}\" ]`);\n  if (!form) {\n    throw Error(`Form \"${formName}\" not found.`);\n  }\n  form.result.value = 'request pending...';\n  const xhr = new XMLHttpRequest();\n  xhr.onreadystatechange = function () {\n    if (this.readyState == 4) {\n      if (this.status >= 200 && this.status < 300) {\n        if (reload) {\n          location.reload();\n        } else {\n          form.result.value = 'Success.';\n        }\n      } else {\n        form.result.value = 'ERROR: ' + this.responseText;\n      }\n    }\n  };\n  xhr.open(form.method, form.action);\n  xhr.send(new FormData(form));\n}\n\nwindow.submitForm = submitForm;\n\nexport {};\n"],
-  "mappings": "AAYA,SAASA,EAAWC,EAAkBC,EAAiB,CACrD,IAAMC,EAAO,SAAS,cAA+B,cAAcF,CAAQ,KAAK,EAChF,GAAI,CAACE,EACH,MAAM,MAAM,SAASF,CAAQ,cAAc,EAE7CE,EAAK,OAAO,MAAQ,qBACpB,IAAMC,EAAM,IAAI,eAChBA,EAAI,mBAAqB,UAAY,CAC/B,KAAK,YAAc,IACjB,KAAK,QAAU,KAAO,KAAK,OAAS,IAClCF,EACF,SAAS,OAAO,EAEhBC,EAAK,OAAO,MAAQ,WAGtBA,EAAK,OAAO,MAAQ,UAAY,KAAK,aAG3C,EACAC,EAAI,KAAKD,EAAK,OAAQA,EAAK,MAAM,EACjCC,EAAI,KAAK,IAAI,SAASD,CAAI,CAAC,CAC7B,CAEA,OAAO,WAAaH",
+  "mappings": "AAYA,SAASA,EAAWC,EAAkBC,EAAiB,CACrD,IAAMC,EAAO,SAAS,cAA+B,cAAcF,MAAa,EAChF,GAAI,CAACE,EACH,MAAM,MAAM,SAASF,eAAsB,EAE7CE,EAAK,OAAO,MAAQ,qBACpB,IAAMC,EAAM,IAAI,eAChBA,EAAI,mBAAqB,UAAY,CAC/B,KAAK,YAAc,IACjB,KAAK,QAAU,KAAO,KAAK,OAAS,IAClCF,EACF,SAAS,OAAO,EAEhBC,EAAK,OAAO,MAAQ,WAGtBA,EAAK,OAAO,MAAQ,UAAY,KAAK,aAG3C,EACAC,EAAI,KAAKD,EAAK,OAAQA,EAAK,MAAM,EACjCC,EAAI,KAAK,IAAI,SAASD,CAAI,CAAC,CAC7B,CAEA,OAAO,WAAaH",
   "names": ["submitForm", "formName", "reload", "form", "xhr"]
 }
diff --git a/static/worker/worker.min.css.map b/static/worker/worker.min.css.map
index 21bd9eb..af6d292 100644
--- a/static/worker/worker.min.css.map
+++ b/static/worker/worker.min.css.map
@@ -2,6 +2,6 @@
   "version": 3,
   "sources": ["worker.css"],
   "sourcesContent": ["/*\n * Copyright 2019-2020 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n:root {\n  --white: #eee;\n  --gray: #ccc;\n  --red: red;\n}\n\nbody {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,\n    'Helvetica Neue', Arial, sans-serif;\n}\n\nlabel {\n  display: inline-block;\n  text-align: right;\n  width: 12.5rem;\n}\n\ninput {\n  width: 12.5rem;\n}\n\nbutton {\n  background-color: var(--white);\n  border: 0.0625rem solid var(--gray);\n  border-radius: 0.125rem;\n  width: 16rem;\n}\n\ntable {\n  border-spacing: 0.625rem 0.125rem;\n  font-size: 0.75rem;\n  padding: 0.1875rem 0 0.125rem;\n}\n\ntd {\n  border-top: 0.0625rem solid var(--gray);\n}\n\n.Experiments input {\n  width: auto;\n}\n\n.Experiments input:invalid {\n  border: 0.0625rem dotted var(--red);\n  border-radius: 0.25rem;\n}\n\n.Experiments input:valid {\n  border: 0.0625rem solid var(--gray);\n  border-radius: 0.25rem;\n}\n\n.Experiments button {\n  width: auto;\n}\n\n.Experiments-updateResult {\n  border: none;\n  height: 2rem;\n  width: 100%;\n}\n"],
-  "mappings": ";;;;;AAMA,MACE,SAAS,KACT,QAAQ,KACR,OAAO,GACT,CAEA,KACE,YAAa,aAAa,CAAE,kBAAkB,CAAE,QAAU,CAAE,MAAM,CAAE,MAAM,CAAE,MAAM,CAChF,cAAgB,CAAE,KAAK,CAAE,UAC7B,CAEA,MACE,QAAS,aACT,WAAY,MACZ,MAAO,OACT,CAEA,MACE,MAAO,OACT,CAEA,OACE,iBAAkB,IAAI,SACtB,OAAQ,SAAU,MAAM,IAAI,QA7B9B,cA8BiB,QACf,MAAO,KACT,CAEA,MACE,eAAgB,QAAS,QACzB,UAAW,OApCb,QAqCW,SAAU,EAAE,OACvB,CAEA,GACE,WAAY,SAAU,MAAM,IAAI,OAClC,CAEA,CAAC,YAAY,MACX,MAAO,IACT,CAEA,CAJC,YAIY,KAAK,SAChB,OAAQ,SAAU,OAAO,IAAI,OAjD/B,cAkDiB,MACjB,CAEA,CATC,YASY,KAAK,OAChB,OAAQ,SAAU,MAAM,IAAI,QAtD9B,cAuDiB,MACjB,CAEA,CAdC,YAcY,OACX,MAAO,IACT,CAEA,CAAC,yBACC,OAAQ,KACR,OAAQ,KACR,MAAO,IACT",
+  "mappings": ";;;;;AAMA,MACE,cACA,aACA,WAGF,KACE,2GAIF,MACE,qBACA,iBACA,cAGF,MACE,cAGF,OACE,8BACA,kCA7BF,sBA+BE,YAGF,MACE,+BACA,iBApCF,2BAwCA,GACE,sCAGF,mBACE,WAGF,2BACE,kCAjDF,qBAqDA,yBACE,kCAtDF,qBA0DA,oBACE,WAGF,0BACE,YACA,YACA",
   "names": []
 }