static/frontend: update navigation to match go.dev

Adds dropdown menus as well as fixed open/closed states. Adds submenus
to mobile header nav.

Change-Id: I952be1a8cc6fac70669ad6fd6a161ec9d2c72cb5
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/421514
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
Run-TryBot: Jamal Carvalho <jamal@golang.org>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
diff --git a/static/frontend/frontend.js b/static/frontend/frontend.js
index 7395d9c..1dfc36a 100644
--- a/static/frontend/frontend.js
+++ b/static/frontend/frontend.js
@@ -1,4 +1,4 @@
-function I(){let t=document.querySelector(".js-header"),e=document.querySelectorAll(".js-headerMenuButton");e.forEach(o=>{o.addEventListener("click",i=>{i.preventDefault(),t==null||t.classList.toggle("is-active"),o.setAttribute("aria-expanded",String(t==null?void 0:t.classList.contains("is-active")))})});let n=document.querySelector(".js-scrim");n==null||n.addEventListener("click",o=>{o.preventDefault(),t==null||t.classList.remove("is-active"),e.forEach(i=>{i.setAttribute("aria-expanded",String(t==null?void 0:t.classList.contains("is-active")))})})}function R(){let t=document.querySelector(".js-searchForm"),e=document.querySelector(".js-expandSearch"),n=t==null?void 0:t.querySelector("input"),o=document.querySelector(".js-headerLogo"),i=document.querySelector(".js-headerMenuButton");e==null||e.addEventListener("click",()=>{t==null||t.classList.add("go-SearchForm--expanded"),o==null||o.classList.add("go-Header-logo--hidden"),i==null||i.classList.add("go-Header-navOpen--hidden"),n==null||n.focus()}),document==null||document.addEventListener("click",l=>{(t==null?void 0:t.contains(l.target))||(t==null||t.classList.remove("go-SearchForm--expanded"),o==null||o.classList.remove("go-Header-logo--hidden"),i==null||i.classList.remove("go-Header-navOpen--hidden"))})}var y=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,o;let e=document.createElement("ul");e.classList.add("go-Carousel-arrows"),e.innerHTML=`
+function q(){let t=document.querySelector(".js-header");document.querySelectorAll(".js-desktop-menu-hover").forEach(l=>{l.addEventListener("mouseenter",c=>{let m=c.target,s=document.querySelector(".forced-open");s&&s!==l&&(s.blur(),s.classList.remove("forced-open")),m.focus(),m.blur()});let r=c=>{var u,h;let m=c.target,s=m==null?void 0:m.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(),(u=o==null?void 0:o.parentNode)==null||u.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")),(h=o==null?void 0:o.parentNode)==null||h.removeEventListener("mouseout",()=>{o.classList.remove("forced-closed")}))};l.addEventListener("click",r)}),document.querySelectorAll(".Header-menuItem").forEach(l=>{l.addEventListener("keyup",r=>{var m;let c=r;c.key==="Escape"&&((m=c.target)==null||m.blur())})});let i=document.querySelectorAll(".js-headerMenuButton");i.forEach(l=>{l.addEventListener("click",r=>{r.preventDefault();let c=t==null?void 0:t.classList.contains("is-active");c?v(t):T(t),l.setAttribute("aria-expanded",c?"true":"false")})});let a=document.querySelector(".js-scrim");a==null||a.addEventListener("click",l=>{l.preventDefault(),document.querySelectorAll(".go-NavigationDrawer-submenuItem.is-active").forEach(c=>v(c)),v(t),i.forEach(c=>{c.setAttribute("aria-expanded",(t==null?void 0:t.classList.contains("is-active"))?"true":"false")})});let d=l=>{if(!l)return[];let r=Array.from(l.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")||[]);console.log(r);let c=l.querySelector(".go-NavigationDrawer-header > a");return c&&r.unshift(c),r},g=l=>{if(!!l)return l.classList.contains("go-NavigationDrawer-submenuItem")},v=l=>{var m,s;if(!l)return;let r=d(l);l.classList.remove("is-active");let c=(m=l.closest(".go-NavigationDrawer-listItem"))==null?void 0:m.querySelector(":scope > a");c==null||c.focus(),r==null||r.forEach(o=>o==null?void 0:o.setAttribute("tabindex","-1")),r&&r[0]&&(r[0].removeEventListener("keydown",p(l)),r[r.length-1].removeEventListener("keydown",L(l))),l===t&&i&&((s=i[0])==null||s.focus())},T=l=>{let r=d(l);l.classList.add("is-active"),r.forEach(c=>c.setAttribute("tabindex","0")),r[0].focus(),r[0].addEventListener("keydown",p(l)),r[r.length-1].addEventListener("keydown",L(l))},p=l=>r=>{r.key==="Tab"&&r.shiftKey&&(r.preventDefault(),v(l))},L=l=>r=>{r.key==="Tab"&&!r.shiftKey&&(r.preventDefault(),v(l))},y=l=>{var m;let r=g(l),c=d(l);l.addEventListener("keyup",s=>{s.key==="Escape"&&v(l)}),c.forEach(s=>{let o=s.closest("li");if(o&&o.classList.contains("js-mobile-subnav-trigger")){let u=o.querySelector(".go-NavigationDrawer-submenuItem");s.addEventListener("click",()=>{T(u)})}}),r&&(v(l),(m=l==null?void 0:l.querySelector(".go-NavigationDrawer-header"))==null||m.addEventListener("click",s=>{s.preventDefault(),v(l)}))};document.querySelectorAll(".go-NavigationDrawer").forEach(l=>y(l)),v(t)}function N(){let t=document.querySelector(".js-searchForm"),e=document.querySelector(".js-expandSearch"),n=t==null?void 0:t.querySelector("input"),i=document.querySelector(".js-headerLogo"),a=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"),a==null||a.classList.add("go-Header-navOpen--hidden"),n==null||n.focus()}),document==null||document.addEventListener("click",d=>{(t==null?void 0:t.contains(d.target))||(t==null||t.classList.remove("go-SearchForm--expanded"),i==null||i.classList.remove("go-Header-logo--hidden"),a==null||a.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>
-    `,(n=e.querySelector(".go-Carousel-prevSlide"))==null||n.addEventListener("click",()=>this.setActive(this.activeIndex-1)),(o=e.querySelector(".go-Carousel-nextSlide"))==null||o.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 o=document.createElement("li"),i=document.createElement("button");i.classList.add("go-Carousel-dot"),n===this.activeIndex&&i.classList.add("go-Carousel-dot--active"),i.innerHTML=`<span class="go-Carousel-obscured">Slide ${n+1}</span>`,i.addEventListener("click",()=>this.setActive(n)),o.append(i),e.append(o),this.dots.push(i)}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 S=class{constructor(e){this.el=e;var n,o,i,l,h;this.data=(n=e.dataset.toCopy)!=null?n:e.innerText,!this.data&&((o=e.parentElement)==null?void 0:o.classList.contains("go-InputGroup"))&&(this.data=(h=this.data||((l=(i=e.parentElement)==null?void 0:i.querySelector("input"))==null?void 0:l.value))!=null?h:""),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 M=class{constructor(e){this.el=e;document.addEventListener("click",n=>{this.el.contains(n.target)||this.el.removeAttribute("open")})}};var H=class{constructor(e){this.el=e;this.el.addEventListener("change",n=>{let o=n.target,i=o.value;o.value.startsWith("/")||(i="/"+i),window.location.href=i})}};var k=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 L(t,e,n,o){var i;(i=window.dataLayer)!=null||(window.dataLayer=[]),typeof t=="string"?window.dataLayer.push({event:t,event_category:e,event_action:n,event_label:o}):window.dataLayer.push(t)}function _(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,o,i){var l,h;return(h=(l=this.handlers)[e])!=null||(l[e]=new Set),this.handlers[e].add({description:n,callback:o,...i}),this}handleKeyPress(e){var n;for(let o of(n=this.handlers[e.key.toLowerCase()])!=null?n:new Set){if(o.target&&o.target!==e.target)return;let i=e.target;if(!o.target&&((i==null?void 0:i.tagName)==="INPUT"||(i==null?void 0:i.tagName)==="SELECT"||(i==null?void 0:i.tagName)==="TEXTAREA")||(i==null?void 0:i.isContentEditable)||o.withMeta&&!(e.ctrlKey||e.metaKey)||!o.withMeta&&(e.ctrlKey||e.metaKey))return;L("keypress","hotkeys",`${e.key} pressed`,o.description),o.callback(e)}}},g=new O;function J(){var q;let t=document.querySelector(".JumpDialog"),e=t==null?void 0:t.querySelector(".JumpDialog-body"),n=t==null?void 0:t.querySelector(".JumpDialog-list"),o=t==null?void 0:t.querySelector(".JumpDialog-input"),i=document.querySelector(".js-documentation"),l;function h(){let s=[];if(!!i){for(let r of i.querySelectorAll("[data-kind]"))s.push(w(r));for(let r of s)r.link.addEventListener("click",function(){t==null||t.close()});return s.sort(function(r,c){return r.lower.localeCompare(c.lower)}),s}}function w(s){var v;let r=document.createElement("a"),c=s.getAttribute("id");r.setAttribute("href","#"+c),r.setAttribute("tabindex","-1"),r.setAttribute("data-gtmc","jump to link");let u=s.getAttribute("data-kind");return{link:r,name:c!=null?c:"",kind:u!=null?u:"",lower:(v=c==null?void 0:c.toLowerCase())!=null?v:""}}let A,m=-1;function T(s){for(A=s,l||(l=h()),E(-1);n==null?void 0:n.firstChild;)n.firstChild.remove();if(s){let r=s.toLowerCase(),c=[],u=[],v=[],b=(d,p,f)=>d.name.substring(0,p)+"<b>"+d.name.substring(p,f)+"</b>"+d.name.substring(f);for(let d of l!=null?l:[]){let p=d.name.toLowerCase();if(p===r)d.link.innerHTML=b(d,0,d.name.length),c.push(d);else if(p.startsWith(r))d.link.innerHTML=b(d,0,s.length),u.push(d);else{let f=p.indexOf(r);f>-1&&(d.link.innerHTML=b(d,f,f+s.length),v.push(d))}}for(let d of c.concat(u).concat(v))n==null||n.appendChild(d.link)}else{if(!l||l.length===0){let r=document.createElement("i");r.innerHTML="There are no symbols on this page.",n==null||n.appendChild(r)}for(let r of l!=null?l:[])r.link.innerHTML=r.name+" <i>"+r.kind+"</i>",n==null||n.appendChild(r.link)}e&&(e.scrollTop=0),(l==null?void 0:l.length)&&n&&n.children.length>0&&E(0)}function E(s){let r=n==null?void 0:n.children;if(!(!r||!e)){if(m>=0&&r[m].classList.remove("JumpDialog-active"),s>=r.length&&(s=r.length-1),s>=0){r[s].classList.add("JumpDialog-active");let c=r[s].offsetTop-r[0].offsetTop,u=c+r[s].clientHeight;c<e.scrollTop?e.scrollTop=c:u>e.scrollTop+e.clientHeight&&(e.scrollTop=u-e.clientHeight)}m=s}}function C(s){if(m<0)return;let r=m+s;r<0&&(r=0),E(r)}o==null||o.addEventListener("keyup",function(){o.value.toUpperCase()!=A.toUpperCase()&&T(o.value)}),o==null||o.addEventListener("keydown",function(s){let r=38,c=40,u=13;switch(s.which){case r:C(-1),s.preventDefault();break;case c:C(1),s.preventDefault();break;case u:m>=0&&n&&(n.children[m].click(),s.preventDefault());break}});let a=document.querySelector(".ShortcutsDialog");g.on("f","open jump to modal",s=>{var r;(t==null?void 0:t.open)||(a==null?void 0:a.open)||(s.preventDefault(),o&&(o.value=""),(r=t==null?void 0:t.showModal)==null||r.call(t),o==null||o.focus(),T(""))}).on("?","open shortcuts modal",()=>{var s;(t==null?void 0:t.open)||(a==null?void 0:a.open)||(s=a==null?void 0:a.showModal)==null||s.call(a)});let x=document.querySelector(".js-jumpToInput");x&&x.addEventListener("click",()=>{var s;o&&(o.value=""),T(""),!((t==null?void 0:t.open)||(a==null?void 0:a.open))&&((s=t==null?void 0:t.showModal)==null||s.call(t),o==null||o.focus())}),(q=document.querySelector(".js-openShortcuts"))==null||q.addEventListener("click",()=>{var s;(s=a==null?void 0:a.showModal)==null||s.call(a)})}window.addEventListener("load",()=>{var t;for(let e of document.querySelectorAll(".js-clipboard"))new S(e);for(let e of document.querySelectorAll(".js-modal"))new k(e);for(let e of document.querySelectorAll(".js-tooltip"))new M(e);for(let e of document.querySelectorAll(".js-selectNav"))new H(e);for(let e of document.querySelectorAll(".js-carousel"))new y(e);for(let e of document.querySelectorAll(".js-toggleTheme"))e.addEventListener("click",()=>{K()});((t=document.querySelector(".js-gtmID"))==null?void 0:t.dataset.gtmid)&&window.dataLayer?_(function(){N()}):N(),I(),R(),J()});g.on("/","focus search",t=>{let e=Array.from(document.querySelectorAll(".js-searchFocus")).pop();e&&!window.navigator.userAgent.includes("Firefox")&&(t.preventDefault(),e.focus())});g.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(){L({"gtm.start":new Date().getTime(),event:"gtm.js"})})();function N(){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 K(){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;`}
+    `,(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"),a=document.createElement("button");a.classList.add("go-Carousel-dot"),n===this.activeIndex&&a.classList.add("go-Carousel-dot--active"),a.innerHTML=`<span class="go-Carousel-obscured">Slide ${n+1}</span>`,a.addEventListener("click",()=>this.setActive(n)),i.append(a),e.append(i),this.dots.push(a)}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,a,d,g;this.data=(n=e.dataset.toCopy)!=null?n:e.innerText,!this.data&&((i=e.parentElement)==null?void 0:i.classList.contains("go-InputGroup"))&&(this.data=(g=this.data||((d=(a=e.parentElement)==null?void 0:a.querySelector("input"))==null?void 0:d.value))!=null?g:""),e.addEventListener("click",v=>this.handleCopyClick(v))}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,a=i.value;i.value.startsWith("/")||(a="/"+a),window.location.href=a})}};var I=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 S(t,e,n,i){var a;(a=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 R(t){var e;(e=window.dataLayer)!=null||(window.dataLayer=[]),window.dataLayer.push(t)}var _=class{constructor(){this.handlers={},document.addEventListener("keydown",e=>this.handleKeyPress(e))}on(e,n,i,a){var d,g;return(g=(d=this.handlers)[e])!=null||(d[e]=new Set),this.handlers[e].add({description:n,callback:i,...a}),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 a=e.target;if(!i.target&&((a==null?void 0:a.tagName)==="INPUT"||(a==null?void 0:a.tagName)==="SELECT"||(a==null?void 0:a.tagName)==="TEXTAREA")||(a==null?void 0:a.isContentEditable)||i.withMeta&&!(e.ctrlKey||e.metaKey)||!i.withMeta&&(e.ctrlKey||e.metaKey))return;S("keypress","hotkeys",`${e.key} pressed`,i.description),i.callback(e)}}},M=new _;function O(){var m;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"),a=document.querySelector(".js-documentation"),d;function g(){let s=[];if(!!a){for(let o of a.querySelectorAll("[data-kind]"))s.push(v(o));for(let o of s)o.link.addEventListener("click",function(){t==null||t.close()});return s.sort(function(o,u){return o.lower.localeCompare(u.lower)}),s}}function v(s){var w;let o=document.createElement("a"),u=s.getAttribute("id");o.setAttribute("href","#"+u),o.setAttribute("tabindex","-1"),o.setAttribute("data-gtmc","jump to link");let h=s.getAttribute("data-kind");return{link:o,name:u!=null?u:"",kind:h!=null?h:"",lower:(w=u==null?void 0:u.toLowerCase())!=null?w:""}}let T,p=-1;function L(s){for(T=s,d||(d=g()),y(-1);n==null?void 0:n.firstChild;)n.firstChild.remove();if(s){let o=s.toLowerCase(),u=[],h=[],w=[],H=(f,E,b)=>f.name.substring(0,E)+"<b>"+f.name.substring(E,b)+"</b>"+f.name.substring(b);for(let f of d!=null?d:[]){let E=f.name.toLowerCase();if(E===o)f.link.innerHTML=H(f,0,f.name.length),u.push(f);else if(E.startsWith(o))f.link.innerHTML=H(f,0,s.length),h.push(f);else{let b=E.indexOf(o);b>-1&&(f.link.innerHTML=H(f,b,b+s.length),w.push(f))}}for(let f of u.concat(h).concat(w))n==null||n.appendChild(f.link)}else{if(!d||d.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 d!=null?d:[])o.link.innerHTML=o.name+" <i>"+o.kind+"</i>",n==null||n.appendChild(o.link)}e&&(e.scrollTop=0),(d==null?void 0:d.length)&&n&&n.children.length>0&&y(0)}function y(s){let o=n==null?void 0:n.children;if(!(!o||!e)){if(p>=0&&o[p].classList.remove("JumpDialog-active"),s>=o.length&&(s=o.length-1),s>=0){o[s].classList.add("JumpDialog-active");let u=o[s].offsetTop-o[0].offsetTop,h=u+o[s].clientHeight;u<e.scrollTop?e.scrollTop=u:h>e.scrollTop+e.clientHeight&&(e.scrollTop=h-e.clientHeight)}p=s}}function l(s){if(p<0)return;let o=p+s;o<0&&(o=0),y(o)}i==null||i.addEventListener("keyup",function(){i.value.toUpperCase()!=T.toUpperCase()&&L(i.value)}),i==null||i.addEventListener("keydown",function(s){let o=38,u=40,h=13;switch(s.which){case o:l(-1),s.preventDefault();break;case u:l(1),s.preventDefault();break;case h:p>=0&&n&&(n.children[p].click(),s.preventDefault());break}});let r=document.querySelector(".ShortcutsDialog");M.on("f","open jump to modal",s=>{var o;(t==null?void 0:t.open)||(r==null?void 0:r.open)||(s.preventDefault(),i&&(i.value=""),(o=t==null?void 0:t.showModal)==null||o.call(t),i==null||i.focus(),L(""))}).on("?","open shortcuts modal",()=>{var s;(t==null?void 0:t.open)||(r==null?void 0:r.open)||(s=r==null?void 0:r.showModal)==null||s.call(r)});let c=document.querySelector(".js-jumpToInput");c&&c.addEventListener("click",()=>{var s;i&&(i.value=""),L(""),!((t==null?void 0:t.open)||(r==null?void 0:r.open))&&((s=t==null?void 0:t.showModal)==null||s.call(t),i==null||i.focus())}),(m=document.querySelector(".js-openShortcuts"))==null||m.addEventListener("click",()=>{var s;(s=r==null?void 0:r.showModal)==null||s.call(r)})}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 I(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",()=>{U()});((t=document.querySelector(".js-gtmID"))==null?void 0:t.dataset.gtmid)&&window.dataLayer?R(function(){K()}):K(),q(),N(),O()});M.on("/","focus search",t=>{let e=Array.from(document.querySelectorAll(".js-searchFocus")).pop();e&&!window.navigator.userAgent.includes("Firefox")&&(t.preventDefault(),e.focus())});M.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(){S({"gtm.start":new Date().getTime(),event:"gtm.js"})})();function K(){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 U(){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;`}
 /*!
  * @license
  * Copyright 2019-2020 The Go Authors. All rights reserved.
diff --git a/static/frontend/frontend.js.map b/static/frontend/frontend.js.map
index f00504a..886199e 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", "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');\n  const menuButtons = document.querySelectorAll('.js-headerMenuButton');\n  menuButtons.forEach(button => {\n    button.addEventListener('click', e => {\n      e.preventDefault();\n      header?.classList.toggle('is-active');\n      button.setAttribute('aria-expanded', String(header?.classList.contains('is-active')));\n    });\n  });\n\n  const scrim = document.querySelector('.js-scrim');\n  scrim?.addEventListener('click', e => {\n    e.preventDefault();\n    header?.classList.remove('is-active');\n    menuButtons.forEach(button => {\n      button.setAttribute('aria-expanded', String(header?.classList.contains('is-active')));\n    });\n  });\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 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';\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});\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"],
-  "mappings": "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",
+  "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    console.log(menuItems);\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 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';\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});\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"],
+  "mappings": "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",
   "names": []
 }
diff --git a/static/frontend/frontend.min.css b/static/frontend/frontend.min.css
index 20ab6c9..2490676 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{color:var(--color-brand-primary);text-decoration:underline}a:hover>*{text-decoration:underline}button:focus:not([disabled]){border-color:var(--color-brand-primary);-webkit-box-shadow:var(--focus-box-shadow);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:-1.375rem;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;width:.4375rem}.go-Carousel-dot--active,.go-Carousel-dot:hover{background-color:var(--color-text-subtle)}.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;--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-inverted: var(--white);--color-code-comment: var(--green);--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-subtle: var(--gray-7);--color-code-comment: var(--green-light)}@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-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%}.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-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);-webkit-box-shadow:var(--focus-box-shadow);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:.40625rem .5rem}.go-Select{-webkit-appearance:none;-moz-appearance:none;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:.34375rem 1.25rem .34375rem .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:10}.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,.go-Header-menuItem{display:none}.go-Header-menu{align-items:stretch;display:flex;height:100%;list-style:none;margin:0;padding:0}@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 a:link,.go-Header-menuItem a:visited{align-items:center;border-bottom:.1875rem solid transparent;border-top:.1875rem solid transparent;color:var(--gray-2);display:inline-flex;margin:0 .3125rem;padding:0 .9375rem;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);color:var(--gray-2)}.go-NavigationDrawer-listItem a:link,.go-NavigationDrawer-listItem a:visited{display:block;margin:0 1rem;padding:.5rem}.go-Header-inner--dark .go-Header-menuItem a:link,.go-Header-inner--dark .go-Header-menuItem a:visited{color:var(--white)}.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(--white);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{align-items:center;display:flex;justify-content:space-between}.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{font-size:1.125rem;margin:0 .5rem}.go-NavigationDrawer-listItem--active{background-color:var(--blue);border-radius:.4rem}.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}.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%)}[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:.01875rem;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}
+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{color:var(--color-brand-primary);text-decoration:underline}a:hover>*{text-decoration:underline}button:focus:not([disabled]){border-color:var(--color-brand-primary);-webkit-box-shadow:var(--focus-box-shadow);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:-1.375rem;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;width:.4375rem}.go-Carousel-dot--active,.go-Carousel-dot:hover{background-color:var(--color-text-subtle)}.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;--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-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)}@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%}.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-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);-webkit-box-shadow:var(--focus-box-shadow);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:.40625rem .5rem}.go-Select{-webkit-appearance:none;-moz-appearance:none;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:.34375rem 1.25rem .34375rem .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:10}.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}.go-Header-submenu{padding:1.5rem 1.5rem 0;list-style-type:none;background:transparent;visibility:hidden;opacity:0;display:none;transition:all .2s ease;margin-top:3.5rem;position:absolute;flex-direction:column;flex-wrap:wrap;color:var(--color-text);background-color:var(--color-background);border:.0625rem solid #007d9d;border-width:0 .0625rem .0625rem}.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{visibility:visible;opacity:1;display:flex}.go-Header-menuItem .go-Header-submenuItem a:link,.go-Header-menuItem .go-Header-submenuItem a:visited{margin:0;margin-bottom:-.125rem;padding:0;border-bottom:none;font-weight:400;color:var(--color-text-link);display:inline-flex;align-items:baseline}.go-Header-menuItem .go-Icon{font-size:1.25rem;filter:brightness(0%) saturate(100%) invert(100%)}.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{margin-left:.25rem;transform:translateY(.1rem);font-size:.75rem}.go-Header-menu .go-Header-submenu--why{width:18.5rem;left:-1px}.go-Header-menu .go-Header-submenu--docs{left:-12rem;height:20.78rem;width:37.25rem}.go-Header-menu .go-Header-submenu--community{right:-1px;height:18.4rem;width:37.25rem}.go-Header-socialIcons{display:flex;flex-wrap:wrap}.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon{flex:0 1 auto;display:inline-flex;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);color:var(--color-text-link);border-color:var(--white)}@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{margin:0 1rem;padding:.5rem;display:block}.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{color:var(--color-text-link);background-color:var(--white)}.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:link,.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:visited{color:var(--color-text-link);display:inline-flex;align-items:baseline;margin-bottom:-2px;width:auto}.go-Header-submenu .go-Header-submenuItem a:link,.go-Header-submenu .go-Header-submenuItem a:visited{margin:0;padding:0;border-bottom:none;font-weight:400}.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:2px 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{padding-bottom:1.5rem}.go-Header-submenu .go-Header-submenuItem p{font-size:.875rem;color:var(--color-text-subtle);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:1px solid #eeeeee;margin-bottom:.5rem}.go-NavigationDrawer-submenuItem{width:100%}.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header{min-height:4.0625rem;font-size:1.375rem;display:flex;align-items:center;justify-content:flex-start;padding:.5rem .5rem .5rem 1.5rem;color:var(--color-text-link)}.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{font-size:1.125rem;margin:0 .5rem;color:var(--color-text-subtle)}.go-NavigationDrawer-listItem--active{background-color:var(--blue);border-radius:.4rem}.go-NavigationDrawer-listItem .material-icons{color:var(--color-brand-primary);margin-right:.5rem;display:inline-block;vertical-align:sub;text-decoration:none}@media only screen and (max-width: 57.7rem){.go-NavigationDrawer-listItem .go-Header-socialIcons{padding:.5rem 0}.go-NavigationDrawer-listItem a.go-Header-socialIcon{padding:0 .5rem;margin:0;display:inline-block}@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}.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%)}[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:.01875rem;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}
 /*!
  * Copyright 2020 The Go Authors. All rights reserved.
  * Use of this source code is governed by a BSD-style
diff --git a/static/frontend/frontend.min.css.map b/static/frontend/frontend.min.css.map
index d1edb08..93dcb2a 100644
--- a/static/frontend/frontend.min.css.map
+++ b/static/frontend/frontend.min.css.map
@@ -1,7 +1,7 @@
 {
   "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"],
-  "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}\nh1 {\n  font-size: 1.5rem;\n}\nh2 {\n  font-size: 1.375rem;\n}\nh3 {\n  font-size: 1.25rem;\n}\nh4 {\n  font-size: 1.125rem;\n}\nh5 {\n  font-size: 1rem;\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}\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}\nstrong {\n  font-weight: 600;\n}\n\n.go-textSubtle {\n  color: var(--color-text-subtle);\n}\n.go-textTitle {\n  font-size: 1.125rem;\n  font-weight: 600;\n  line-height: 1.25rem;\n}\n.go-textLabel {\n  font-size: 0.875rem;\n  font-weight: 600;\n  line-height: 1rem;\n}\n.go-textPagination {\n  font-size: 0.875rem;\n  line-height: 1rem;\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}\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}\na:hover {\n  color: var(--color-brand-primary);\n  text-decoration: underline;\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  -webkit-box-shadow: var(--focus-box-shadow);\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.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.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.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.go-Button--inline:hover {\n  box-shadow: none;\n  text-decoration: underline var(--color-button-inverted-text);\n}\n.go-Button:focus {\n  filter: contrast(0.95);\n}\n.go-Button--inverted:focus {\n  border-color: var(--color-button-inverted-text);\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.go-Button--accented:disabled {\n  background-color: var(--color-button-accented-disabled);\n  color: var(--color-button-accented-text-disabled);\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.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.go-Breadcrumb li {\n  align-items: center;\n  color: var(--color-text-subtle);\n  display: inline-flex;\n  font-size: 0.875rem;\n}\n.go-Breadcrumb li:not(:last-child)::after {\n  content: '>';\n  padding: 0 0.5rem;\n}\n.go-Breadcrumb li:last-child > a {\n  color: var(--color-text-subtle);\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.go-Carousel-slide {\n  margin: 0.5rem 3rem;\n}\n.go-Carousel-slide[aria-hidden] {\n  display: none;\n}\n.go-Carousel-prevSlide {\n  left: 0;\n}\n.go-Carousel-nextSlide {\n  right: 0;\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: -1.375rem;\n  opacity: 0;\n  position: absolute;\n  top: 50%;\n  width: 2.75rem;\n}\n.go-Carousel-prevSlide:hover,\n.go-Carousel-nextSlide:hover {\n  background-color: var(--color-background-accented);\n  cursor: pointer;\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.go-Carousel-dots {\n  display: flex;\n  font-size: 0.4375rem;\n  gap: 0.5rem;\n}\n.go-Carousel-dot {\n  background-color: var(--color-border);\n  border-radius: 2rem;\n  height: 0.4375rem;\n  width: 0.4375rem;\n}\n.go-Carousel-dot--active,\n.go-Carousel-dot:hover {\n  background-color: var(--color-text-subtle);\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.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.go-Chip--inverted {\n  background: var(--color-button-inverted);\n  border: var(--border);\n  color: var(--color-text);\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.go-Chip--alert {\n  background: var(--pink);\n  border: 0.0625rem solid var(--pink);\n  color: var(--color-text-inverted);\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.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.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.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.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  --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-inverted: var(--white);\n  --color-code-comment: var(--green);\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-subtle: var(--gray-7);\n  --color-code-comment: var(--green-light);\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-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.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 1.5rem;\n}\n.go-Footer-linkColumn {\n  flex: 0 0 9.5rem;\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.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.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.go-Footer-gopher {\n  align-self: flex-end;\n  height: 3.147rem;\n  width: 5rem;\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.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.go-Footer-listItem a:link,\n.go-Footer-listItem a:visited {\n  color: var(--color-text-inverted);\n}\n.go-Footer-listItem .go-Button--text {\n  background-color: transparent;\n  font-size: 1rem;\n  margin: -0.5rem 0;\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[data-theme='dark'] .go-Footer-listItem [data-value='dark'] {\n  display: initial;\n}\n[data-theme='light'] .go-Footer-listItem [data-value='light'] {\n  display: initial;\n}\n.go-Footer-toggleTheme,\n.go-Footer-keyboard {\n  margin: 0 0 0.5rem 0;\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.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  .go-Footer-listItem + .go-Footer-listItem {\n    border-left: var(--border);\n  }\n  .go-Footer-toggleTheme {\n    margin: 0 0 0 -0.5rem;\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  -webkit-box-shadow: var(--focus-box-shadow);\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.go-Label--inline {\n  align-items: center;\n  flex-direction: row;\n}\n.go-Label legend {\n  margin-bottom: 0.5rem;\n}\n.go-Label--inline legend {\n  float: left;\n  margin-bottom: 0;\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.go-Input {\n  padding: 0.40625rem 0.5rem;\n}\n.go-Select {\n  -webkit-appearance: none;\n  -moz-appearance: none;\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.34375rem 1.25rem 0.34375rem 0.5rem;\n}\n\n.go-InputGroup {\n  display: flex;\n}\n.go-InputGroup .go-Input {\n  flex: 1;\n}\n.go-InputGroup > :not(:first-child, :last-child) {\n  border-radius: 0;\n  margin-left: -0.0625rem;\n}\n.go-InputGroup > :first-child {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\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.go-InputGroup > *:hover,\n.go-InputGroup > *:focus {\n  z-index: 1;\n}\n\n.go-ShortcutKey {\n  display: flex;\n  position: relative;\n}\n.go-ShortcutKey .go-Input {\n  flex-grow: 1;\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.go-GopherMessage p {\n  font-weight: 600;\n  margin: auto;\n  text-align: center;\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.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.Site--wide .go-Banner-inner {\n  max-width: 98rem;\n}\n.go-Banner--full .go-Banner-inner {\n  max-width: unset;\n}\n.go-Banner-message {\n  color: var(--white);\n  margin-right: 1.25rem;\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 rgba(171, 171, 171, 0.3);\n  top: 0;\n  width: 100%;\n  z-index: 10;\n}\n.go-Header-inner {\n  margin: 0 auto;\n  padding: 0 var(--gutter);\n}\n.Site--wide .go-Header-inner {\n  max-width: 98rem;\n}\n.go-Header--full .go-Header-inner {\n  max-width: initial;\n}\n.go-Header-nav {\n  align-items: center;\n  display: flex;\n  height: 3.5rem;\n  justify-content: space-between;\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.go-Header-rightContent form {\n  flex-grow: 1;\n}\n.go-Header-inner--dark {\n  border-bottom: none;\n  color: var(--white);\n}\n.go-Header-logo {\n  display: block;\n  height: 2rem;\n  margin-right: 2.25rem;\n  width: 5.125rem;\n}\n.go-Header-logo--hidden {\n  display: none;\n}\n.go-Header-menuItem {\n  display: none;\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@media only screen and (min-width: 65rem) {\n  .go-Header-menuItem {\n    align-items: stretch;\n    display: inline-flex;\n    flex: none;\n  }\n  .go-Header-menu {\n    justify-content: flex-end;\n  }\n  .go-Header-navOpen {\n    display: 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(--gray-2);\n  display: inline-flex;\n  margin: 0 0.3125rem;\n  padding: 0 0.9375rem;\n  text-align: center;\n  text-decoration: none;\n  width: 100%;\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.go-Header-menuItem a:hover {\n  border-bottom-color: var(--white);\n  color: var(--gray-2);\n}\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.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-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.go-Header-navOpen--hidden {\n  display: none;\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.go-SearchForm-form {\n  display: none;\n}\n.go-SearchForm-form::after {\n  right: 2.75rem;\n}\n.go-SearchForm--expanded .go-SearchForm-form {\n  display: flex;\n}\n.go-SearchForm-expandSearch {\n  appearance: none;\n  background: none;\n  font-size: 1.5rem;\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  .go-SearchForm {\n    flex: 1;\n  }\n  .go-SearchForm-form {\n    display: flex;\n  }\n  .go-SearchForm-expandSearch {\n    display: none;\n  }\n  .go-Header-logo--hidden {\n    display: initial;\n  }\n}\n\n.go-NavigationDrawer {\n  background: var(--white);\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.go-NavigationDrawer.is-active {\n  transform: translateX(0);\n}\n.go-NavigationDrawer-header {\n  align-items: center;\n  display: flex;\n  justify-content: space-between;\n}\n.go-NavigationDrawer-logo {\n  display: block;\n  height: 2rem;\n  margin: 1rem 1rem;\n  width: 5.125rem;\n}\n.go-NavigationDrawer-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.go-NavigationDrawer-listItem {\n  font-size: 1.125rem;\n  margin: 0 0.5rem;\n}\n.go-NavigationDrawer-listItem--active {\n  background-color: var(--blue);\n  border-radius: 0.4rem;\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.go-NavigationDrawer.is-active + .go-NavigationDrawer-scrim {\n  background-color: var(--gray-1);\n  display: block;\n  opacity: 0.32;\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.go-Icon--accented {\n  filter: brightness(0) invert(45%) sepia(94%) saturate(6735%) hue-rotate(176deg) brightness(94%)\n    contrast(101%);\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}\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[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  :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.go-Message--notice {\n  background-color: var(--color-background-info);\n}\n.go-Message--warning {\n  background-color: var(--color-background-warning);\n  color: var(--gray-1);\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[data-theme='dark'] .go-Message a:not(:hover) {\n  color: var(--color-text);\n  text-decoration: underline;\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.go-Modal > form {\n  display: contents;\n}\n.go-Modal--small {\n  width: 20rem;\n}\n.go-Modal--md {\n  width: 30rem;\n}\n.go-Modal--lg {\n  width: 40rem;\n}\n.go-Modal-header {\n  display: flex;\n  justify-content: space-between;\n}\n.go-Modal-header h2 {\n  font-size: 1.15rem;\n  line-height: 1.25rem;\n}\n.go-Modal-body {\n  flex-grow: 1;\n  min-height: 2rem;\n  min-width: 18rem;\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.go-Tree li:last-of-type {\n  padding-bottom: 0.25rem;\n}\n.go-Tree a + ul {\n  display: none;\n}\n.go-Tree a[aria-expanded='true'] + ul[role='group'] {\n  display: block;\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 0.25rem;\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.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.go-Tree a:focus,\n.go-Tree a:hover {\n  text-decoration: underline;\n  z-index: 1;\n}\n.go-Tree a[aria-selected='true'] {\n  color: var(--color-text);\n  font-weight: 500;\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.go-Tree a[aria-level='3'][aria-expanded='true'] {\n  margin-bottom: 0.375em;\n}\n.go-Tree a[aria-level='2'] {\n  margin-bottom: 0.25rem;\n  position: relative;\n}\n.go-Tree a[aria-level='3'] {\n  padding-left: 2.5rem;\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.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.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.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.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.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 0;\n}\n.go-TabNav ul {\n  display: flex;\n  gap: 2rem;\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.go-TabNav li[aria-current] {\n  border-color: var(--color-brand-primary);\n}\n.go-TabNav li:hover {\n  border-color: var(--color-brand-primary);\n}\n.go-TabNav a {\n  align-items: center;\n  color: var(--color-text-subtle);\n  display: inline-flex;\n}\n.go-TabNav li:hover a {\n  text-decoration: none;\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.go-Tooltip > summary {\n  list-style: none;\n}\n.go-Tooltip > summary::-webkit-details-marker,\n.go-Tooltip > summary::marker {\n  display: none;\n}\n.go-Tooltip > summary > img {\n  vertical-align: text-bottom;\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.01875rem;\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"],
-  "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,mBAEF,GACE,iBAEF,GACE,mBAEF,GACE,kBAEF,GACE,mBAEF,GACE,eAEF,GACE,kBAGF,YAIE,gBACA,mBACA,sBAEF,MAEE,gBACA,kBACA,sBAGF,GACE,YACA,4BAjDF,SAmDE,WAGF,EACE,eACA,mBACA,gBAEF,OACE,gBAGF,eACE,+BAEF,cACE,mBACA,gBACA,oBAEF,cACE,kBACA,gBACA,iBAEF,mBACE,kBACA,iBAEF,uBAGE,oEACA,kBACA,kBAEF,kBAEE,kDACA,qBACA,mCACA,wBACA,gBA7FF,gBA+FE,WACA,gBAGF,6BAIE,aAGF,mBAGE,iCACA,qBAEF,QACE,iCACA,0BAEF,UACE,0BC/GF,6BACE,wCACA,2CACA,mCACA,oBAGF,WACE,mBACA,qCACA,kCACA,mCACA,+BACA,eACA,oBACA,gBACA,WAEF,mCAxBA,cA4BA,qBACE,8CACA,wCAEF,yDAGE,8CACA,wCAEF,mBACE,6BAGF,qBACE,qBAGF,iBACE,mCACA,qBAEF,yBACE,gBACA,4DAEF,iBACE,qBAEF,2BACE,+CAEF,kBACE,gBACA,qBAGF,oBACE,8CACA,gBACA,wCACA,eACA,YACA,qBAEF,8BACE,uDACA,iDAEF,oFAGE,uDACA,iDAEF,4BACE,6BC9EF,kBACE,mBACA,oBAEF,kBACE,mBACA,+BACA,oBACA,kBAEF,yCACE,YAjBF,gBAoBA,+BACE,+BAEF,gCAvBA,eCMA,aACE,mBACA,aACA,sBACA,kBACA,kBAEF,mBAbA,kBAgBA,gCACE,aAEF,uBACE,OAEF,uBACE,QAEF,8CAEE,6BACA,mCACA,iBACA,eACA,qBACA,UACA,kBACA,QACA,cAEF,0DAEE,kDACA,eAEF,sLAIE,UAEF,kBACE,aACA,mBACA,UAEF,iBACE,qCAtDF,mBAwDE,gBACA,eAEF,gDAEE,0CAEF,sBACE,SACA,mBACA,gBAlEF,iBAoEE,gBApEF,UAsEE,kBACA,eCjEF,SACE,+BACA,0CARF,sBAUE,+BACA,iBAXF,wBAcA,mBACE,wCACA,mDACA,wCAEF,mBACE,wCACA,qBACA,wBAEF,sBACE,oDACA,sDACA,iCAEF,gBACE,uBACA,kCACA,iCAEF,eACE,6BACA,wCACA,iCAEF,iBACE,kDACA,yBACA,+BCpCF,cACE,kBAEF,qBACE,kDACA,mCACA,iCACA,2BACA,cACA,eACA,0BAhBF,qBAkBE,kBACA,yBACA,YACA,mBACA,aAEF,oBACE,uCACA,cACA,2DACA,oCACA,WACA,cACA,kBACA,eACA,aACA,aAEF,4JAIE,aClCF,MAEE,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,sBACA,oBACA,qBACA,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,mCAGA,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,yCAEF,oCACE,gCACE,uCACA,kCACA,2CACA,8CACA,mDACA,uCACA,0CACA,sCACA,8BACA,4BACA,mCACA,0CCxFJ,WACE,kDACA,iCACA,kBACA,WAEF,iBACE,aACA,eACA,8BAfF,YAiBE,mBAjBF,6BAoBA,sBACE,gBAEF,2BACE,iCACA,aACA,OACA,kBACA,iBAEF,oCACE,mBACA,oBACA,oBACA,kBAEF,kBACE,mBACA,yBACA,aAvCF,gBAyCE,oBAEF,kBACE,oBACA,gBACA,WAEF,mBACE,aACA,OACA,eACA,gBApDF,mBAuDE,kBAEF,oBACE,mBACA,aACA,YACA,uBA7DF,8BAiEA,yDAEE,iCAEF,qCACE,6BACA,eAvEF,gBA0EA,iCACE,aAGF,sHAEE,gBAEF,kHACE,gBAKF,2CAxFA,iBA6FA,sBACE,oBACA,cACA,qBACA,iBAEF,yBACE,cACA,eAGF,0CACE,oBACE,aAEF,wCACE,0BAEF,uBA/GF,oBAkHE,oBAlHF,UCMA,yDAEE,wCACA,2CACA,mCACA,oBACA,UAGF,mBACE,+BAGF,SACE,kBACA,aACA,sBACA,SAGF,UACE,aACA,sBACA,UAEF,kBACE,mBACA,mBAEF,iBACE,oBAEF,yBACE,WACA,gBAEF,qBAEE,8BACA,qBACA,mCACA,8BAEF,UAjDA,wBAoDA,WACE,wBACA,qBACA,gBACA,qFACA,yCACA,iCACA,mCA3DF,mDAgEA,eACE,aAEF,yBACE,OAEF,8CAtEA,gBAwEE,sBAEF,4BACE,6BACA,0BAEF,2BACE,4BACA,yBACA,sBAEF,8CAEE,UAGF,gBACE,aACA,kBAEF,0BACE,YAEF,sBACE,kBACA,kDAjGF,oBAmGE,oBACA,4BACA,sDACA,aACA,iBAvGF,mBAyGE,kBACA,aACA,kBACA,aACA,UAEF,0CACE,sBACE,iBC3GJ,sBACE,cACA,aARF,gCAWE,YAEF,oBACE,gBAdF,YAgBE,kBCVF,WACE,+BAMA,aAEF,iBACE,mBACA,aACA,8BAlBF,cAoBE,kBACA,4BAEF,6BACE,gBAEF,kCACE,gBAEF,mBACE,mBACA,qBAEF,iDAEE,mBACA,0BACA,mBAEF,0CACE,WACE,eAIJ,WACE,mBACA,mBACA,wCACA,MACA,WACA,WAEF,iBArDA,cAuDE,wBAEF,6BACE,gBAEF,kCACE,kBAEF,eACE,mBACA,aACA,cACA,8BAEF,wBACE,mBACA,aACA,YACA,yBACA,WAEF,6BACE,YAEF,uBACE,mBACA,mBAEF,gBACE,cACA,YACA,qBACA,eAEF,4CACE,aAKF,gBACE,oBACA,aACA,YACA,gBAnGF,mBAuGA,0CACE,oBACE,oBACA,oBACA,UAEF,gBACE,yBAEF,mBACE,cAGJ,yDAEE,mBACA,yCACA,sCACA,oBACA,oBA1HF,qCA6HE,kBACA,qBACA,WAEF,yEAEE,oCACA,gBAEF,4BACE,iCACA,oBAEF,6EAEE,cA5IF,4BAgJA,uGAEE,mBAGF,mBACE,4DACA,YACA,cACA,iBACA,aAEF,2BACE,aAEF,0BACE,gFACA,6HAIF,yBACE,YAEF,oBACE,aAEF,0BACE,cAEF,6CACE,aAEF,4BACE,gBACA,gBACA,iBAEF,qDACE,aAGF,0CACE,wBACE,WAEF,eACE,OAEF,oBACE,aAEF,4BACE,aAEF,wBACE,iBAIJ,qBACE,wBACA,YACA,UACA,gBACA,eACA,QACA,MACA,0BACA,qCACA,UACA,WAEF,0CACE,qBACE,cAGJ,+BACE,uBAEF,4BACE,mBACA,aACA,8BAEF,0BACE,cACA,YAxOF,YA0OE,eAEF,0BACE,gBA7OF,mBAiPA,8BACE,mBAlPF,eAqPA,sCACE,6BAtPF,oBAyPA,2BACE,aACA,YACA,OACA,eACA,MACA,WACA,WAEF,0DACE,+BACA,cACA,YC/PF,cACE,eACA,2BACA,WAGF,SACE,YACA,eACA,2BACA,WAEF,mBACE,8GAGF,mBACE,6HAIF,mDACE,6HAGF,qCACE,4GAGF,oCACE,iEACE,6HAGF,mDACE,gHCnCJ,YACE,wBACA,kBACA,mBATF,qBAWE,WAEF,oBACE,8CAEF,qBACE,iDACA,oBAEF,mBACE,+CAGF,qBACE,wBAEF,4CACE,wBACA,0BAEF,gDACE,YAEF,oCACE,8DACE,aCpCJ,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,MAEF,eACE,iBAEF,iBACE,YAEF,cACE,YAEF,cACE,YAEF,iBACE,aACA,8BAEF,oBACE,kBACA,oBAEF,eACE,YACA,gBACA,gBAEF,kBACE,iBAIF,8CACE,qCACE,UACE,mBClDN,SACE,oBAEA,aACA,sBAGF,YACE,gBACA,eAEF,yBACE,sBAEF,cACE,aAEF,8CACE,cAEF,0CACE,kGAGA,gBA9BF,uBAiCA,WACE,+BACA,cACA,mBACA,gBArCF,kCAuCE,kBACA,uBACA,iBACA,mBAEF,yCAEE,cACA,eACA,gBACA,mBAjDF,eAoDA,kCAEE,0BACA,UAEF,+BACE,wBACA,gBAEF,8FAEE,kDAEF,+CACE,qBAEF,2BACE,qBACA,kBAEF,2BACE,oBAEF,2BACE,2DACA,mBACA,mBAEF,sJAEE,4CAlFF,kBAoFE,WACA,cACA,gBACA,cACA,kBACA,WACA,eAEF,wHAEE,uCACA,6CACA,eACA,oCACA,WACA,cACA,SACA,WACA,kBACA,YACA,gCACA,QAEF,4GAEE,wBAEF,4HAEE,YACA,WAEF,+CACE,qDC/GF,WANA,iBASA,cACE,aACA,SAEF,cACE,uCACA,aACA,eACA,gBAjBF,iBAoBA,gDACE,wCAKF,aACE,mBACA,+BACA,oBAEF,sBACE,qBAEF,8BACE,wBC7BF,YACE,mCACA,eACA,qBACA,kBAEF,oBACE,gBAEF,wEAEE,aAEF,wBACE,2BAEF,cACE,uCACA,qBACA,mCACA,wBACA,iBACA,yBACA,iBA7BF,cA+BE,kBACA,WACA,mBACA,YACA,YCLF,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",
+  "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}\nh1 {\n  font-size: 1.5rem;\n}\nh2 {\n  font-size: 1.375rem;\n}\nh3 {\n  font-size: 1.25rem;\n}\nh4 {\n  font-size: 1.125rem;\n}\nh5 {\n  font-size: 1rem;\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}\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}\nstrong {\n  font-weight: 600;\n}\n\n.go-textSubtle {\n  color: var(--color-text-subtle);\n}\n.go-textTitle {\n  font-size: 1.125rem;\n  font-weight: 600;\n  line-height: 1.25rem;\n}\n.go-textLabel {\n  font-size: 0.875rem;\n  font-weight: 600;\n  line-height: 1rem;\n}\n.go-textPagination {\n  font-size: 0.875rem;\n  line-height: 1rem;\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}\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}\na:hover {\n  color: var(--color-brand-primary);\n  text-decoration: underline;\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  -webkit-box-shadow: var(--focus-box-shadow);\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.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.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.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.go-Button--inline:hover {\n  box-shadow: none;\n  text-decoration: underline var(--color-button-inverted-text);\n}\n.go-Button:focus {\n  filter: contrast(0.95);\n}\n.go-Button--inverted:focus {\n  border-color: var(--color-button-inverted-text);\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.go-Button--accented:disabled {\n  background-color: var(--color-button-accented-disabled);\n  color: var(--color-button-accented-text-disabled);\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.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.go-Breadcrumb li {\n  align-items: center;\n  color: var(--color-text-subtle);\n  display: inline-flex;\n  font-size: 0.875rem;\n}\n.go-Breadcrumb li:not(:last-child)::after {\n  content: '>';\n  padding: 0 0.5rem;\n}\n.go-Breadcrumb li:last-child > a {\n  color: var(--color-text-subtle);\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.go-Carousel-slide {\n  margin: 0.5rem 3rem;\n}\n.go-Carousel-slide[aria-hidden] {\n  display: none;\n}\n.go-Carousel-prevSlide {\n  left: 0;\n}\n.go-Carousel-nextSlide {\n  right: 0;\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: -1.375rem;\n  opacity: 0;\n  position: absolute;\n  top: 50%;\n  width: 2.75rem;\n}\n.go-Carousel-prevSlide:hover,\n.go-Carousel-nextSlide:hover {\n  background-color: var(--color-background-accented);\n  cursor: pointer;\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.go-Carousel-dots {\n  display: flex;\n  font-size: 0.4375rem;\n  gap: 0.5rem;\n}\n.go-Carousel-dot {\n  background-color: var(--color-border);\n  border-radius: 2rem;\n  height: 0.4375rem;\n  width: 0.4375rem;\n}\n.go-Carousel-dot--active,\n.go-Carousel-dot:hover {\n  background-color: var(--color-text-subtle);\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.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.go-Chip--inverted {\n  background: var(--color-button-inverted);\n  border: var(--border);\n  color: var(--color-text);\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.go-Chip--alert {\n  background: var(--pink);\n  border: 0.0625rem solid var(--pink);\n  color: var(--color-text-inverted);\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.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.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.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.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  --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\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}\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.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 1.5rem;\n}\n.go-Footer-linkColumn {\n  flex: 0 0 9.5rem;\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.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.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.go-Footer-gopher {\n  align-self: flex-end;\n  height: 3.147rem;\n  width: 5rem;\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.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.go-Footer-listItem a:link,\n.go-Footer-listItem a:visited {\n  color: var(--color-text-inverted);\n}\n.go-Footer-listItem .go-Button--text {\n  background-color: transparent;\n  font-size: 1rem;\n  margin: -0.5rem 0;\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[data-theme='dark'] .go-Footer-listItem [data-value='dark'] {\n  display: initial;\n}\n[data-theme='light'] .go-Footer-listItem [data-value='light'] {\n  display: initial;\n}\n.go-Footer-toggleTheme,\n.go-Footer-keyboard {\n  margin: 0 0 0.5rem 0;\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.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  .go-Footer-listItem + .go-Footer-listItem {\n    border-left: var(--border);\n  }\n  .go-Footer-toggleTheme {\n    margin: 0 0 0 -0.5rem;\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  -webkit-box-shadow: var(--focus-box-shadow);\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.go-Label--inline {\n  align-items: center;\n  flex-direction: row;\n}\n.go-Label legend {\n  margin-bottom: 0.5rem;\n}\n.go-Label--inline legend {\n  float: left;\n  margin-bottom: 0;\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.go-Input {\n  padding: 0.40625rem 0.5rem;\n}\n.go-Select {\n  -webkit-appearance: none;\n  -moz-appearance: none;\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.34375rem 1.25rem 0.34375rem 0.5rem;\n}\n\n.go-InputGroup {\n  display: flex;\n}\n.go-InputGroup .go-Input {\n  flex: 1;\n}\n.go-InputGroup > :not(:first-child, :last-child) {\n  border-radius: 0;\n  margin-left: -0.0625rem;\n}\n.go-InputGroup > :first-child {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\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.go-InputGroup > *:hover,\n.go-InputGroup > *:focus {\n  z-index: 1;\n}\n\n.go-ShortcutKey {\n  display: flex;\n  position: relative;\n}\n.go-ShortcutKey .go-Input {\n  flex-grow: 1;\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.go-GopherMessage p {\n  font-weight: 600;\n  margin: auto;\n  text-align: center;\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.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.Site--wide .go-Banner-inner {\n  max-width: 98rem;\n}\n.go-Banner--full .go-Banner-inner {\n  max-width: unset;\n}\n.go-Banner-message {\n  color: var(--white);\n  margin-right: 1.25rem;\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 rgba(171, 171, 171, 0.3);\n  top: 0;\n  width: 100%;\n  z-index: 10;\n}\n.go-Header-inner {\n  margin: 0 auto;\n  padding: 0 var(--gutter);\n}\n.Site--wide .go-Header-inner {\n  max-width: 98rem;\n}\n.go-Header--full .go-Header-inner {\n  max-width: initial;\n}\n.go-Header-nav {\n  align-items: center;\n  display: flex;\n  height: 3.5rem;\n  justify-content: space-between;\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.go-Header-rightContent form {\n  flex-grow: 1;\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.go-Header-logo--hidden {\n  display: none;\n}\n.go-Header-menuItem {\n  display: none;\n  position: relative;\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.go-Header-submenu {\n  padding: 1.5rem 1.5rem 0;\n  list-style-type: none;\n  background: transparent;\n  visibility: hidden;\n  opacity: 0;\n  display: none;\n  transition: all 0.2s ease;\n  margin-top: 3.5rem;\n  position: absolute;\n  flex-direction: column;\n  flex-wrap: wrap;\n  color: var(--color-text);\n  background-color: var(--color-background);\n  border: 0.0625rem solid #007d9d;\n  border-width: 0 0.0625rem 0.0625rem;\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  visibility: visible;\n  opacity: 1;\n  display: flex;\n}\n.go-Header-menuItem .go-Header-submenuItem a:link,\n.go-Header-menuItem .go-Header-submenuItem a:visited {\n  margin: 0;\n  margin-bottom: -0.125rem;\n  padding: 0;\n  border-bottom: none;\n  font-weight: 400;\n  color: var(--color-text-link);\n  display: inline-flex;\n  align-items: baseline;\n}\n.go-Header-menuItem .go-Icon {\n  font-size: 1.25rem;\n  filter: brightness(0%) saturate(100%) invert(100%);\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  margin-left: 0.25rem;\n  transform: translateY(0.1rem); /* to get bottom alignment w/ text  */\n  font-size: 0.75rem;\n}\n\n.go-Header-menu .go-Header-submenu--why {\n  width: 18.5rem;\n  left: -1px;\n}\n.go-Header-menu .go-Header-submenu--docs {\n  left: -12rem;\n  height: 20.78rem;\n  width: 37.25rem;\n}\n.go-Header-menu .go-Header-submenu--community {\n  right: -1px;\n  height: 18.4rem;\n  width: 37.25rem;\n}\n.go-Header-socialIcons {\n  display: flex;\n  flex-wrap: wrap;\n}\n.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon {\n  flex: 0 1 auto;\n  display: inline-flex;\n  width: auto;\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  .go-Header-menu {\n    justify-content: flex-end;\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.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.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.go-Header-menuItem a:hover {\n  border-bottom-color: var(--white);\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  color: var(--color-text-link);\n  border-color: var(--white);\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  :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.go-NavigationDrawer-listItem > div:not(.go-NavigationDrawer),\n.go-NavigationDrawer-listItem a:link,\n.go-NavigationDrawer-listItem a:visited {\n  margin: 0 1rem;\n  padding: 0.5rem;\n  display: block;\n}\n\n.go-NavigationDrawer-listItem > span {\n  color: var(--gray-2);\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.go-NavigationDrawer-listItem.go-NavigationDrawer-hasSubnav > a i {\n  float: right;\n}\n.go-Header-inner--dark .go-Header-menuItem .go-Header-submenuItem {\n  color: var(--color-text-link);\n}\n.go-Header-inner--dark .go-Header-menuItem .js-desktop-menu-hover.is-expanded {\n  color: var(--color-text-link);\n  background-color: var(--white);\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  color: var(--color-text-link);\n  display: inline-flex;\n  align-items: baseline;\n  margin-bottom: -2px;\n  width: auto;\n}\n.go-Header-submenu .go-Header-submenuItem a:link,\n.go-Header-submenu .go-Header-submenuItem a:visited {\n  margin: 0;\n  padding: 0;\n  border-bottom: none;\n  font-weight: 400;\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.go-Header-submenu p {\n  max-width: 15.5rem;\n}\n.go-Header-submenu a:link:hover,\n.go-Header-submenu a:visited:hover {\n  border-bottom: 2px solid var(--turq-dark);\n  text-decoration: none;\n}\n.go-Header-submenu a:link:hover > *,\n.go-Header-submenu a:visited:hover > * {\n  text-decoration: none;\n}\n.go-Header-submenu .go-Header-submenuItem {\n  padding-bottom: 1.5rem;\n}\n.go-Header-submenu .go-Header-submenuItem p {\n  font-size: 0.875rem;\n  color: var(--color-text-subtle);\n  margin-top: 0.55rem;\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.go-Header-navOpen--hidden {\n  display: none;\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.go-SearchForm-form {\n  display: none;\n}\n.go-SearchForm-form::after {\n  right: 2.75rem;\n}\n.go-SearchForm--expanded .go-SearchForm-form {\n  display: flex;\n}\n.go-SearchForm-expandSearch {\n  appearance: none;\n  background: none;\n  font-size: 1.5rem;\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  .go-SearchForm {\n    flex: 1;\n  }\n  .go-SearchForm-form {\n    display: flex;\n  }\n  .go-SearchForm-expandSearch {\n    display: none;\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.go-NavigationDrawer-header {\n  border-bottom: 1px solid #eeeeee;\n  margin-bottom: 0.5rem;\n}\n.go-NavigationDrawer-submenuItem {\n  width: 100%;\n}\n.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header {\n  min-height: 4.0625rem;\n  font-size: 1.375rem;\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n  padding: 0.5rem;\n  padding-left: 1.5rem;\n  color: var(--color-text-link);\n}\n.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header > a {\n  display: flex;\n  margin-left: 0;\n}\n.go-NavigationDrawer-logo {\n  display: block;\n  height: 2rem;\n  margin: 1rem 1rem;\n  width: 5.125rem;\n}\n.go-NavigationDrawer-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.go-NavigationDrawer-listItem {\n  font-size: 1.125rem;\n  margin: 0 0.5rem;\n  color: var(--color-text-subtle);\n}\n.go-NavigationDrawer-listItem--active {\n  background-color: var(--blue);\n  border-radius: 0.4rem;\n}\n.go-NavigationDrawer-listItem .material-icons {\n  color: var(--color-brand-primary);\n  margin-right: 0.5rem;\n  display: inline-block;\n  vertical-align: sub;\n  text-decoration: none;\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    padding: 0 0.5rem;\n    margin: 0;\n    display: inline-block;\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.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.go-NavigationDrawer.is-active + .go-NavigationDrawer-scrim {\n  background-color: var(--gray-1);\n  display: block;\n  opacity: 0.32;\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.go-Icon--accented {\n  filter: brightness(0) invert(45%) sepia(94%) saturate(6735%) hue-rotate(176deg) brightness(94%)\n    contrast(101%);\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}\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[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  :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.go-Message--notice {\n  background-color: var(--color-background-info);\n}\n.go-Message--warning {\n  background-color: var(--color-background-warning);\n  color: var(--gray-1);\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[data-theme='dark'] .go-Message a:not(:hover) {\n  color: var(--color-text);\n  text-decoration: underline;\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.go-Modal > form {\n  display: contents;\n}\n.go-Modal--small {\n  width: 20rem;\n}\n.go-Modal--md {\n  width: 30rem;\n}\n.go-Modal--lg {\n  width: 40rem;\n}\n.go-Modal-header {\n  display: flex;\n  justify-content: space-between;\n}\n.go-Modal-header h2 {\n  font-size: 1.15rem;\n  line-height: 1.25rem;\n}\n.go-Modal-body {\n  flex-grow: 1;\n  min-height: 2rem;\n  min-width: 18rem;\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.go-Tree li:last-of-type {\n  padding-bottom: 0.25rem;\n}\n.go-Tree a + ul {\n  display: none;\n}\n.go-Tree a[aria-expanded='true'] + ul[role='group'] {\n  display: block;\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 0.25rem;\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.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.go-Tree a:focus,\n.go-Tree a:hover {\n  text-decoration: underline;\n  z-index: 1;\n}\n.go-Tree a[aria-selected='true'] {\n  color: var(--color-text);\n  font-weight: 500;\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.go-Tree a[aria-level='3'][aria-expanded='true'] {\n  margin-bottom: 0.375em;\n}\n.go-Tree a[aria-level='2'] {\n  margin-bottom: 0.25rem;\n  position: relative;\n}\n.go-Tree a[aria-level='3'] {\n  padding-left: 2.5rem;\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.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.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.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.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.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 0;\n}\n.go-TabNav ul {\n  display: flex;\n  gap: 2rem;\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.go-TabNav li[aria-current] {\n  border-color: var(--color-brand-primary);\n}\n.go-TabNav li:hover {\n  border-color: var(--color-brand-primary);\n}\n.go-TabNav a {\n  align-items: center;\n  color: var(--color-text-subtle);\n  display: inline-flex;\n}\n.go-TabNav li:hover a {\n  text-decoration: none;\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.go-Tooltip > summary {\n  list-style: none;\n}\n.go-Tooltip > summary::-webkit-details-marker,\n.go-Tooltip > summary::marker {\n  display: none;\n}\n.go-Tooltip > summary > img {\n  vertical-align: text-bottom;\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.01875rem;\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"],
+  "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,mBAEF,GACE,iBAEF,GACE,mBAEF,GACE,kBAEF,GACE,mBAEF,GACE,eAEF,GACE,kBAGF,YAIE,gBACA,mBACA,sBAEF,MAEE,gBACA,kBACA,sBAGF,GACE,YACA,4BAjDF,SAmDE,WAGF,EACE,eACA,mBACA,gBAEF,OACE,gBAGF,eACE,+BAEF,cACE,mBACA,gBACA,oBAEF,cACE,kBACA,gBACA,iBAEF,mBACE,kBACA,iBAEF,uBAGE,oEACA,kBACA,kBAEF,kBAEE,kDACA,qBACA,mCACA,wBACA,gBA7FF,gBA+FE,WACA,gBAGF,6BAIE,aAGF,mBAGE,iCACA,qBAEF,QACE,iCACA,0BAEF,UACE,0BC/GF,6BACE,wCACA,2CACA,mCACA,oBAGF,WACE,mBACA,qCACA,kCACA,mCACA,+BACA,eACA,oBACA,gBACA,WAEF,mCAxBA,cA4BA,qBACE,8CACA,wCAEF,yDAGE,8CACA,wCAEF,mBACE,6BAGF,qBACE,qBAGF,iBACE,mCACA,qBAEF,yBACE,gBACA,4DAEF,iBACE,qBAEF,2BACE,+CAEF,kBACE,gBACA,qBAGF,oBACE,8CACA,gBACA,wCACA,eACA,YACA,qBAEF,8BACE,uDACA,iDAEF,oFAGE,uDACA,iDAEF,4BACE,6BC9EF,kBACE,mBACA,oBAEF,kBACE,mBACA,+BACA,oBACA,kBAEF,yCACE,YAjBF,gBAoBA,+BACE,+BAEF,gCAvBA,eCMA,aACE,mBACA,aACA,sBACA,kBACA,kBAEF,mBAbA,kBAgBA,gCACE,aAEF,uBACE,OAEF,uBACE,QAEF,8CAEE,6BACA,mCACA,iBACA,eACA,qBACA,UACA,kBACA,QACA,cAEF,0DAEE,kDACA,eAEF,sLAIE,UAEF,kBACE,aACA,mBACA,UAEF,iBACE,qCAtDF,mBAwDE,gBACA,eAEF,gDAEE,0CAEF,sBACE,SACA,mBACA,gBAlEF,iBAoEE,gBApEF,UAsEE,kBACA,eCjEF,SACE,+BACA,0CARF,sBAUE,+BACA,iBAXF,wBAcA,mBACE,wCACA,mDACA,wCAEF,mBACE,wCACA,qBACA,wBAEF,sBACE,oDACA,sDACA,iCAEF,gBACE,uBACA,kCACA,iCAEF,eACE,6BACA,wCACA,iCAEF,iBACE,kDACA,yBACA,+BCpCF,cACE,kBAEF,qBACE,kDACA,mCACA,iCACA,2BACA,cACA,eACA,0BAhBF,qBAkBE,kBACA,yBACA,YACA,mBACA,aAEF,oBACE,uCACA,cACA,2DACA,oCACA,WACA,cACA,kBACA,eACA,aACA,aAEF,4JAIE,aClCF,MAEE,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,sBACA,oBACA,qBACA,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,mCAGA,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,yCAEF,oCACE,gCACE,uCACA,kCACA,2CACA,8CACA,mDACA,uCACA,0CACA,sCACA,8BACA,4BACA,mCACA,mCACA,0CC3FJ,WACE,kDACA,iCACA,kBACA,WAEF,iBACE,aACA,eACA,8BAfF,YAiBE,mBAjBF,6BAoBA,sBACE,gBAEF,2BACE,iCACA,aACA,OACA,kBACA,iBAEF,oCACE,mBACA,oBACA,oBACA,kBAEF,kBACE,mBACA,yBACA,aAvCF,gBAyCE,oBAEF,kBACE,oBACA,gBACA,WAEF,mBACE,aACA,OACA,eACA,gBApDF,mBAuDE,kBAEF,oBACE,mBACA,aACA,YACA,uBA7DF,8BAiEA,yDAEE,iCAEF,qCACE,6BACA,eAvEF,gBA0EA,iCACE,aAGF,sHAEE,gBAEF,kHACE,gBAKF,2CAxFA,iBA6FA,sBACE,oBACA,cACA,qBACA,iBAEF,yBACE,cACA,eAGF,0CACE,oBACE,aAEF,wCACE,0BAEF,uBA/GF,oBAkHE,oBAlHF,UCMA,yDAEE,wCACA,2CACA,mCACA,oBACA,UAGF,mBACE,+BAGF,SACE,kBACA,aACA,sBACA,SAGF,UACE,aACA,sBACA,UAEF,kBACE,mBACA,mBAEF,iBACE,oBAEF,yBACE,WACA,gBAEF,qBAEE,8BACA,qBACA,mCACA,8BAEF,UAjDA,wBAoDA,WACE,wBACA,qBACA,gBACA,qFACA,yCACA,iCACA,mCA3DF,mDAgEA,eACE,aAEF,yBACE,OAEF,8CAtEA,gBAwEE,sBAEF,4BACE,6BACA,0BAEF,2BACE,4BACA,yBACA,sBAEF,8CAEE,UAGF,gBACE,aACA,kBAEF,0BACE,YAEF,sBACE,kBACA,kDAjGF,oBAmGE,oBACA,4BACA,sDACA,aACA,iBAvGF,mBAyGE,kBACA,aACA,kBACA,aACA,UAEF,0CACE,sBACE,iBC3GJ,sBACE,cACA,aARF,gCAWE,YAEF,oBACE,gBAdF,YAgBE,kBCVF,WACE,+BAMA,aAEF,iBACE,mBACA,aACA,8BAlBF,cAoBE,kBACA,4BAEF,6BACE,gBAEF,kCACE,gBAEF,mBACE,mBACA,qBAEF,iDAEE,mBACA,0BACA,mBAEF,0CACE,WACE,eAIJ,WACE,mBACA,mBACA,wCACA,MACA,WACA,WAEF,iBArDA,cAuDE,wBAEF,6BACE,gBAEF,kCACE,kBAEF,eACE,mBACA,aACA,cACA,8BAEF,wBACE,mBACA,aACA,YACA,yBACA,WAEF,6BACE,YAEF,uBACE,mBACA,mBAGF,gBACE,cACA,YACA,qBACA,eAEF,wBACE,aAEF,oBACE,aACA,kBAEF,gBACE,oBACA,aACA,YACA,gBArGF,mBA0GA,mBA1GA,wBA4GE,qBACA,uBACA,kBACA,UACA,aACA,wBACA,kBACA,kBACA,sBACA,eACA,wBACA,yCACA,8BACA,iCAGF,uLAEE,mBACA,UACA,aAEF,uGAlIA,SAqIE,uBArIF,UAuIE,mBACA,gBACA,6BACA,oBACA,qBAEF,6BACE,kBACA,kDAEF,2FAEE,4HAIF,4CACE,mBACA,4BACA,iBAGF,wCACE,cACA,UAEF,yCACE,YACA,gBACA,eAEF,8CACE,WACA,eACA,eAEF,uBACE,aACA,eAEF,iEACE,cACA,oBACA,WAEF,kFACE,oBAEF,0CACE,oBACE,oBACA,oBACA,UAEF,gBACE,yBAEF,mBACE,cAIJ,+CACE,oBAEF,yDAEE,mBACA,yCACA,sCACA,wBACA,oBA9MF,iBAgNE,kBACA,qBACA,WAEF,yEAEE,oCACA,gBAEF,4BACE,iCAEF,mJAEE,wBACA,6BACA,0BAIF,oCACE,qOAQE,4HAGF,wFACE,6HAIJ,yIArPA,4BA0PE,cAGF,mCACE,oBAEF,uGAEE,mBAEF,gEACE,YAEF,kEACE,6BAEF,8EACE,6BACA,8BAEF,6IAEE,6BACA,oBACA,qBACA,mBACA,WAEF,qGAtRA,mBA0RE,mBACA,gBAEF,iMAIE,mCACA,qCAEF,qBACE,kBAEF,mEAEE,yCACA,qBAEF,uEAEE,qBAEF,0CACE,sBAEF,4CACE,kBACA,+BACA,kBAEF,mEACE,+BAGF,mBACE,4DACA,YACA,cACA,iBACA,aAEF,2BACE,aAEF,0BACE,gFACA,6HAIF,yBACE,YAEF,oBACE,aAEF,0BACE,cAEF,6CACE,aAEF,4BACE,gBACA,gBACA,iBAEF,qDACE,aAGF,0CACE,wBACE,WAEF,eACE,OAEF,oBACE,aAEF,4BACE,aAEF,wBACE,iBAIJ,qBACE,mCACA,YACA,UACA,gBACA,eACA,QACA,MACA,0BACA,qCACA,UACA,WAEF,0CACE,qBACE,cAIJ,+BACE,uBAEF,4BACE,gCACA,oBAEF,iCACE,WAEF,6DACE,qBACA,mBACA,aACA,mBACA,2BArZF,iCAwZE,6BAEF,+DACE,aACA,cAEF,0BACE,cACA,YAhaF,YAkaE,eAEF,0BACE,gBAraF,mBAyaA,8BACE,mBA1aF,eA4aE,+BAEF,sCACE,6BA/aF,oBAkbA,8CACE,iCACA,mBACA,qBACA,mBACA,qBAEF,4CACE,qDA1bF,gBA8bE,qDA9bF,yBAicI,qBAGF,oCACE,+FACE,8HAKN,2BACE,aACA,YACA,OACA,eACA,MACA,WACA,WAEF,0DACE,+BACA,cACA,YCjdF,cACE,eACA,2BACA,WAGF,SACE,YACA,eACA,2BACA,WAEF,mBACE,8GAGF,mBACE,6HAIF,mDACE,6HAGF,qCACE,4GAGF,oCACE,iEACE,6HAGF,mDACE,gHCnCJ,YACE,wBACA,kBACA,mBATF,qBAWE,WAEF,oBACE,8CAEF,qBACE,iDACA,oBAEF,mBACE,+CAGF,qBACE,wBAEF,4CACE,wBACA,0BAEF,gDACE,YAEF,oCACE,8DACE,aCpCJ,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,MAEF,eACE,iBAEF,iBACE,YAEF,cACE,YAEF,cACE,YAEF,iBACE,aACA,8BAEF,oBACE,kBACA,oBAEF,eACE,YACA,gBACA,gBAEF,kBACE,iBAIF,8CACE,qCACE,UACE,mBClDN,SACE,oBAEA,aACA,sBAGF,YACE,gBACA,eAEF,yBACE,sBAEF,cACE,aAEF,8CACE,cAEF,0CACE,kGAGA,gBA9BF,uBAiCA,WACE,+BACA,cACA,mBACA,gBArCF,kCAuCE,kBACA,uBACA,iBACA,mBAEF,yCAEE,cACA,eACA,gBACA,mBAjDF,eAoDA,kCAEE,0BACA,UAEF,+BACE,wBACA,gBAEF,8FAEE,kDAEF,+CACE,qBAEF,2BACE,qBACA,kBAEF,2BACE,oBAEF,2BACE,2DACA,mBACA,mBAEF,sJAEE,4CAlFF,kBAoFE,WACA,cACA,gBACA,cACA,kBACA,WACA,eAEF,wHAEE,uCACA,6CACA,eACA,oCACA,WACA,cACA,SACA,WACA,kBACA,YACA,gCACA,QAEF,4GAEE,wBAEF,4HAEE,YACA,WAEF,+CACE,qDC/GF,WANA,iBASA,cACE,aACA,SAEF,cACE,uCACA,aACA,eACA,gBAjBF,iBAoBA,gDACE,wCAKF,aACE,mBACA,+BACA,oBAEF,sBACE,qBAEF,8BACE,wBC7BF,YACE,mCACA,eACA,qBACA,kBAEF,oBACE,gBAEF,wEAEE,aAEF,wBACE,2BAEF,cACE,uCACA,qBACA,mCACA,wBACA,iBACA,yBACA,iBA7BF,cA+BE,kBACA,WACA,mBACA,YACA,YCLF,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",
   "names": []
 }
diff --git a/static/shared/color/color.css b/static/shared/color/color.css
index 37542e8..82f1ef6 100644
--- a/static/shared/color/color.css
+++ b/static/shared/color/color.css
@@ -45,6 +45,7 @@
   --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);
 
@@ -76,6 +77,7 @@
   --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);
 }
@@ -91,6 +93,7 @@
     --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);
   }
diff --git a/static/shared/header/header.css b/static/shared/header/header.css
index 29e048e..f5a1452 100644
--- a/static/shared/header/header.css
+++ b/static/shared/header/header.css
@@ -81,6 +81,7 @@
   border-bottom: none;
   color: var(--white);
 }
+
 .go-Header-logo {
   display: block;
   height: 2rem;
@@ -92,6 +93,7 @@
 }
 .go-Header-menuItem {
   display: none;
+  position: relative;
 }
 .go-Header-menu {
   align-items: stretch;
@@ -101,6 +103,84 @@
   margin: 0;
   padding: 0;
 }
+
+.go-Header-submenu {
+  padding: 1.5rem 1.5rem 0;
+  list-style-type: none;
+  background: transparent;
+  visibility: hidden;
+  opacity: 0;
+  display: none;
+  transition: all 0.2s ease;
+  margin-top: 3.5rem;
+  position: absolute;
+  flex-direction: column;
+  flex-wrap: wrap;
+  color: var(--color-text);
+  background-color: var(--color-background);
+  border: 0.0625rem solid #007d9d;
+  border-width: 0 0.0625rem 0.0625rem;
+}
+
+.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 {
+  visibility: visible;
+  opacity: 1;
+  display: flex;
+}
+.go-Header-menuItem .go-Header-submenuItem a:link,
+.go-Header-menuItem .go-Header-submenuItem a:visited {
+  margin: 0;
+  margin-bottom: -0.125rem;
+  padding: 0;
+  border-bottom: none;
+  font-weight: 400;
+  color: var(--color-text-link);
+  display: inline-flex;
+  align-items: baseline;
+}
+.go-Header-menuItem .go-Icon {
+  font-size: 1.25rem;
+  filter: brightness(0%) saturate(100%) invert(100%);
+}
+.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 {
+  margin-left: 0.25rem;
+  transform: translateY(0.1rem); /* to get bottom alignment w/ text  */
+  font-size: 0.75rem;
+}
+
+.go-Header-menu .go-Header-submenu--why {
+  width: 18.5rem;
+  left: -1px;
+}
+.go-Header-menu .go-Header-submenu--docs {
+  left: -12rem;
+  height: 20.78rem;
+  width: 37.25rem;
+}
+.go-Header-menu .go-Header-submenu--community {
+  right: -1px;
+  height: 18.4rem;
+  width: 37.25rem;
+}
+.go-Header-socialIcons {
+  display: flex;
+  flex-wrap: wrap;
+}
+.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon {
+  flex: 0 1 auto;
+  display: inline-flex;
+  width: auto;
+}
+.go-Header-submenu .go-Header-submenuItem a.go-Header-socialIcon:not(:last-child) {
+  margin-right: 0.75rem;
+}
 @media only screen and (min-width: 65rem) {
   .go-Header-menuItem {
     align-items: stretch;
@@ -114,15 +194,18 @@
     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: 0.1875rem solid transparent;
   border-top: 0.1875rem solid transparent; /* To ensure the text remains centered. */
-  color: var(--gray-2);
+  color: var(--color-text);
   display: inline-flex;
-  margin: 0 0.3125rem;
-  padding: 0 0.9375rem;
+  padding: 0 1.5rem;
   text-align: center;
   text-decoration: none;
   width: 100%;
@@ -134,18 +217,102 @@
 }
 .go-Header-menuItem a:hover {
   border-bottom-color: var(--white);
-  color: var(--gray-2);
 }
+.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);
+  color: var(--color-text-link);
+  border-color: var(--white);
+}
+
+/* Need to get around icon.css color management */
+@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: 0.5rem;
+  display: block;
+}
+
+.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 {
+  color: var(--color-text-link);
+  background-color: var(--white);
+}
+.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:link,
+.go-Header-inner--dark .go-Header-menuItem .go-Header-submenu a:visited {
+  color: var(--color-text-link);
+  display: inline-flex;
+  align-items: baseline;
+  margin-bottom: -2px;
+  width: auto;
+}
+.go-Header-submenu .go-Header-submenuItem a:link,
+.go-Header-submenu .go-Header-submenuItem a:visited {
+  margin: 0;
+  padding: 0;
+  border-bottom: none;
+  font-weight: 400;
+}
+.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: 2px 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 {
+  padding-bottom: 1.5rem;
+}
+.go-Header-submenu .go-Header-submenuItem p {
+  font-size: 0.875rem;
+  color: var(--color-text-subtle);
+  margin-top: 0.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');
@@ -203,7 +370,7 @@
 }
 
 .go-NavigationDrawer {
-  background: var(--white);
+  background: var(--color-background);
   height: 100%;
   left: auto;
   max-width: 27rem;
@@ -220,13 +387,30 @@
     display: none;
   }
 }
+
 .go-NavigationDrawer.is-active {
   transform: translateX(0);
 }
 .go-NavigationDrawer-header {
-  align-items: center;
+  border-bottom: 1px solid #eeeeee;
+  margin-bottom: 0.5rem;
+}
+.go-NavigationDrawer-submenuItem {
+  width: 100%;
+}
+.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header {
+  min-height: 4.0625rem;
+  font-size: 1.375rem;
   display: flex;
-  justify-content: space-between;
+  align-items: center;
+  justify-content: flex-start;
+  padding: 0.5rem;
+  padding-left: 1.5rem;
+  color: var(--color-text-link);
+}
+.go-NavigationDrawer-submenuItem .go-NavigationDrawer-header > a {
+  display: flex;
+  margin-left: 0;
 }
 .go-NavigationDrawer-logo {
   display: block;
@@ -242,11 +426,37 @@
 .go-NavigationDrawer-listItem {
   font-size: 1.125rem;
   margin: 0 0.5rem;
+  color: var(--color-text-subtle);
 }
 .go-NavigationDrawer-listItem--active {
   background-color: var(--blue);
   border-radius: 0.4rem;
 }
+.go-NavigationDrawer-listItem .material-icons {
+  color: var(--color-brand-primary);
+  margin-right: 0.5rem;
+  display: inline-block;
+  vertical-align: sub;
+  text-decoration: none;
+}
+@media only screen and (max-width: 57.7rem) {
+  .go-NavigationDrawer-listItem .go-Header-socialIcons {
+    padding: 0.5rem 0;
+  }
+
+  .go-NavigationDrawer-listItem a.go-Header-socialIcon {
+    padding: 0 0.5rem;
+    margin: 0;
+    display: inline-block;
+  }
+
+  @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%;
diff --git a/static/shared/header/header.tmpl b/static/shared/header/header.tmpl
index 9a3aaa6..028a532 100644
--- a/static/shared/header/header.tmpl
+++ b/static/shared/header/header.tmpl
@@ -16,22 +16,152 @@
           {{template "symbol_search_bar" .}}
           <ul class="go-Header-menu">
             <li class="go-Header-menuItem">
-              <a href="https://go.dev/solutions/" data-gtmc="nav link">Why Go</a>
+              <a class="js-desktop-menu-hover" href="#" data-gtmc="nav link">
+                Why Go
+                <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg" alt="submenu dropdown icon">
+              </a>
+              <ul class="go-Header-submenu go-Header-submenu--why js-desktop-submenu-hover" aria-label="submenu">
+                  <li class="go-Header-submenuItem">
+                    <div>
+                      <a href="https://go.dev/solutions#case-studies">
+                        </span>Case Studies</span>
+                      </a>
+                    </div>
+                    <p>Common problems companies solve with Go</p>
+                  </li>
+                  <li class="go-Header-submenuItem">
+                    <div>
+                      <a href="https://go.dev/solutions#use-cases">
+                        </span>Use Cases</span>
+                      </a>
+                    </div>
+                    <p>Stories about how and why companies use Go</p>
+                  </li>
+                  <li class="go-Header-submenuItem">
+                    <div>
+                      <a href="https://go.dev/security/policy/">
+                        </span>Security Policy</span>
+                      </a>
+                    </div>
+                    <p>How Go can help keep you secure by default</p>
+                  </li>
+              </ul>
             </li>
             <li class="go-Header-menuItem">
-              <a href="https://go.dev/learn/" data-gtmc="nav link">Get Started</a>
+              <a href="https://go.dev/learn/" data-gtmc="nav link">Learn</a>
             </li>
             <li class="go-Header-menuItem">
-              <a href="https://golang.org/doc/" data-gtmc="nav link">Docs</a>
+              <a class="js-desktop-menu-hover" href="#" data-gtmc="nav link">
+                Docs
+                <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg" alt="submenu dropdown icon">
+              </a>
+              <ul class="go-Header-submenu go-Header-submenu--docs js-desktop-submenu-hover" aria-label="submenu">
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://go.dev/doc/effective_go">
+                      <span>Effective Go</span>
+                    </a>
+                  </div>
+                  <p>Tips for writing clear, performant, and idiomatic Go code</p>
+                </li>
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://go.dev/doc/">
+                      <span>Go User Manual</span>
+                    </a>
+                  </div>
+                  <p>A complete introduction to building software with Go</p>
+                </li>
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://pkg.go.dev/std">
+                      <span>Standard library</span>
+                    </a>
+                  </div>
+                  <p>Reference documentation for Go's standard library</p>
+                </li>
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://go.dev/doc/devel/release">
+                      <span>Release Notes</span>
+                    </a>
+                  </div>
+                  <p>Learn what's new in each Go release</p>
+                </li>
+              </ul>
             </li>
             <li class="go-Header-menuItem go-Header-menuItem--active">
               <a href="/" data-gtmc="nav link">Packages</a>
             </li>
             <li class="go-Header-menuItem">
-              <a href="https://play.golang.org/" data-gtmc="nav link">Play</a>
-            </li>
-            <li class="go-Header-menuItem">
-              <a href="https://go.dev/blog/" data-gtmc="nav link">Blog</a>
+              <a class="js-desktop-menu-hover" href="#" data-gtmc="nav link">
+                Community
+                <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg" alt="submenu dropdown icon">
+              </a>
+              <ul class="go-Header-submenu go-Header-submenu--community js-desktop-submenu-hover" aria-label="submenu">
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://go.dev/talks/">
+                      <span>Recorded Talks</span>
+                    </a>
+                  </div>
+                  <p>Videos from prior events</p>
+                </li>
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://www.meetup.com/pro/go">
+                      <span>Meetups</span>
+                      <i class="material-icons">
+                        <img class="go-Icon" height="24" width="24"
+                            src="/static/shared/icon/launch_gm_grey_24dp.svg" alt="">
+                      </i>
+                    </a>
+                  </div>
+                  <p>Meet other local Go developers</p>
+                </li>
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://github.com/golang/go/wiki/Conferences">
+                      <span>Conferences</span>
+                      <i class="material-icons">
+                        <img class="go-Icon" height="24" width="24"
+                            src="/static/shared/icon/launch_gm_grey_24dp.svg" alt="">
+                      </i>
+                    </a>
+                  </div>
+                  <p>Learn and network with Go developers from around the world</p>
+                </li>
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://go.dev/blog">
+                      <span>Go blog</span>
+                    </a>
+                  </div>
+                  <p>The Go project's official blog.</p>
+                </li>
+                <li class="go-Header-submenuItem">
+                  <div>
+                    <a href="https://go.dev/help">
+                      <span>Go project</span>
+                    </a>
+                  </div>
+                  <p>Get help and stay informed from Go</p>
+                </li>
+                <li class="go-Header-submenuItem">
+                  <div>
+                    Get connected
+                  </div>
+                  <p></p>
+                  <div class="go-Header-socialIcons">
+                      <a class="go-Header-socialIcon" href="https://groups.google.com/g/golang-nuts"><img src="/static/shared/logo/social/google-groups.svg" /></a>
+                      <a class="go-Header-socialIcon" href="https://github.com/golang"><img src="/static/shared/logo/social/github.svg" /></a>
+                      <a class="go-Header-socialIcon" href="https://twitter.com/golang"><img src="/static/shared/logo/social/twitter.svg" /></a>
+                      <a class="go-Header-socialIcon" href="https://www.reddit.com/r/golang/"><img src="/static/shared/logo/social/reddit.svg" /></a>
+                      <a class="go-Header-socialIcon" href="https://invite.slack.golangbridge.org/"><img src="/static/shared/logo/social/slack.svg" /></a>
+                      <a class="go-Header-socialIcon" href="https://stackoverflow.com/collectives/go"><img src="/static/shared/logo/social/stack-overflow.svg" /></a>
+                  </div>
+                </li>
+              </ul>
             </li>
           </ul>
           <button class="go-Header-navOpen js-headerMenuButton go-Header-navOpen--white" data-gtmc="nav button" aria-label="Open navigation">
@@ -41,30 +171,169 @@
     </div>
   </header>
   <aside class="go-NavigationDrawer js-header">
-    <nav>
+    <nav class="go-NavigationDrawer-nav">
       <div class="go-NavigationDrawer-header">
-        <a href="https://go.dev/" tabindex="-1">
+        <a href="https://go.dev/">
           <img class="go-NavigationDrawer-logo" src="/static/shared/logo/go-blue.svg" alt="Go.">
         </a>
       </div>
       <ul class="go-NavigationDrawer-list">
-          <li class="go-NavigationDrawer-listItem">
-            <a href="https://go.dev/solutions/" tabindex="-1">Why Go</a>
+          <li class="go-NavigationDrawer-listItem js-mobile-subnav-trigger go-NavigationDrawer-hasSubnav">
+            <a href="#">
+              <span>Why Go</span>
+              <i class="material-icons">
+                <img class="go-Icon" height="24" width="24"
+                  src="/static/shared/icon/navigate_next_gm_grey_24dp.svg" alt="">
+              </i>
+            </a>
+
+            <div class="go-NavigationDrawer go-NavigationDrawer-submenuItem">
+              <div class="go-NavigationDrawer-nav">
+                <div class="go-NavigationDrawer-header">
+                  <a href="#">
+                    <i class="material-icons">
+                      <img class="go-Icon" height="24" width="24"
+                        src="/static/shared/icon/navigate_before_gm_grey_24dp.svg" alt="">
+                      </i>
+                      Why Go
+                  </a>
+                </div>
+                <ul class="go-NavigationDrawer-list">
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/solutions#case-studies">
+                      Case Studies
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/solutions#use-cases">
+                      Use Cases
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/security/policy/">
+                      Security Policy
+                    </a>
+                  </li>
+                </ul>
+              </div>
+            </div>
           </li>
           <li class="go-NavigationDrawer-listItem">
-            <a href="https://go.dev/learn/" tabindex="-1">Get Started</a>
+            <a href="https://go.dev/learn/">Learn</a>
           </li>
-          <li class="go-NavigationDrawer-listItem">
-            <a href="https://golang.org/doc/" tabindex="-1">Docs</a>
+          <li class="go-NavigationDrawer-listItem js-mobile-subnav-trigger go-NavigationDrawer-hasSubnav">
+            <a href="#">
+              <span>Docs</span>
+              <i class="material-icons">
+                <img class="go-Icon" height="24" width="24"
+                  src="/static/shared/icon/navigate_next_gm_grey_24dp.svg" alt="">
+              </i>
+            </a>
+
+            <div class="go-NavigationDrawer go-NavigationDrawer-submenuItem">
+              <div class="go-NavigationDrawer-nav">
+                <div class="go-NavigationDrawer-header">
+                  <a href="#"><i class="material-icons">
+                    <img class="go-Icon" height="24" width="24"
+                      src="/static/shared/icon/navigate_before_gm_grey_24dp.svg" alt="">
+                    </i>
+                    Docs
+                  </a>
+                </div>
+                <ul class="go-NavigationDrawer-list">
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/doc/effective_go">
+                      Effective Go
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/doc/">
+                      Go User Manual
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://pkg.go.dev/std">
+                      Standard library
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/doc/devel/release">
+                      Release Notes
+                    </a>
+                  </li>
+                </ul>
+              </div>
+            </div>
           </li>
           <li class="go-NavigationDrawer-listItem go-NavigationDrawer-listItem--active">
-            <a href="/" tabindex="-1">Packages</a>
+            <a href="/">Packages</a>
           </li>
-          <li class="go-NavigationDrawer-listItem">
-            <a href="https://play.golang.org/" tabindex="-1">Play</a>
-          </li>
-          <li class="go-NavigationDrawer-listItem">
-            <a href="https://go.dev/blog" tabindex="-1">Blog</a>
+          <li class="go-NavigationDrawer-listItem js-mobile-subnav-trigger go-NavigationDrawer-hasSubnav">
+            <a href="#">
+              <span>Community</span>
+              <i class="material-icons">
+                <img class="go-Icon" height="24" width="24"
+                  src="/static/shared/icon/navigate_next_gm_grey_24dp.svg" alt="">
+              </i>
+            </a>
+            <div class="go-NavigationDrawer go-NavigationDrawer-submenuItem">
+              <div class="go-NavigationDrawer-nav">
+                <div class="go-NavigationDrawer-header">
+                  <a href="#">
+                    <i class="material-icons">
+                      <img class="go-Icon" height="24" width="24"
+                        src="/static/shared/icon/navigate_before_gm_grey_24dp.svg" alt="">
+                    </i>
+                    Community
+                  </a>
+                </div>
+                <ul class="go-NavigationDrawer-list">
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/talks/">
+                      Recorded Talks
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://www.meetup.com/pro/go">
+                      Meetups
+                      <i class="material-icons">
+                      <img class="go-Icon" height="24" width="24"
+                          src="/static/shared/icon/launch_gm_grey_24dp.svg" alt="">
+                      </i>
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://github.com/golang/go/wiki/Conferences">
+                      Conferences
+                      <i class="material-icons">
+                        <img class="go-Icon" height="24" width="24" src="/static/shared/icon/launch_gm_grey_24dp.svg" alt="">
+                      </i>
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/blog">
+                      Go blog
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <a href="https://go.dev/help">
+                      Go project
+                    </a>
+                  </li>
+                  <li class="go-NavigationDrawer-listItem">
+                    <div>Get connected</div>
+                    <div class="go-Header-socialIcons">
+                        <a class="go-Header-socialIcon" href="https://groups.google.com/g/golang-nuts"><img src="/static/shared/logo/social/google-groups.svg" /></a>
+                        <a class="go-Header-socialIcon" href="https://github.com/golang"><img src="/static/shared/logo/social/github.svg" /></a>
+                        <a class="go-Header-socialIcon" href="https://twitter.com/golang"><img src="/static/shared/logo/social/twitter.svg" /></a>
+                        <a class="go-Header-socialIcon" href="https://www.reddit.com/r/golang/"><img src="/static/shared/logo/social/reddit.svg" /></a>
+                        <a class="go-Header-socialIcon" href="https://invite.slack.golangbridge.org/"><img src="/static/shared/logo/social/slack.svg" /></a>
+                        <a class="go-Header-socialIcon" href="https://stackoverflow.com/collectives/go"><img src="/static/shared/logo/social/stack-overflow.svg" /></a>
+                    </div>
+                  </li>
+                </ul>
+              </div>
+            </div>
           </li>
       </ul>
     </nav>
@@ -102,6 +371,7 @@
       aria-label="Open search" data-test-id="expand-search">
     <img class="go-Icon go-Icon--inverted" height="24" width="24"
         src="/static/shared/icon/search_gm_grey_24dp.svg" alt="">
+
   </button>
 </div>
 {{end}}
diff --git a/static/shared/header/header.ts b/static/shared/header/header.ts
index 2d95bc8..d33e4e5 100644
--- a/static/shared/header/header.ts
+++ b/static/shared/header/header.ts
@@ -6,24 +6,213 @@
  */
 
 export function registerHeaderListeners(): void {
-  const header = document.querySelector('.js-header');
-  const menuButtons = document.querySelectorAll('.js-headerMenuButton');
-  menuButtons.forEach(button => {
+  const header = document.querySelector('.js-header') as HTMLElement;
+
+  // Desktop menu hover state
+  const menuItemHovers = document.querySelectorAll('.js-desktop-menu-hover');
+  menuItemHovers.forEach(menuItemHover => {
+    // when user clicks on the dropdown menu item on desktop or mobile,
+    // force the menu to stay open until the user clicks off of it.
+    menuItemHover.addEventListener('mouseenter', e => {
+      const target = e.target as HTMLElement;
+      const forced = document.querySelector('.forced-open') as HTMLElement;
+      if (forced && forced !== menuItemHover) {
+        forced.blur();
+        forced.classList.remove('forced-open');
+      }
+      // prevents menus that have been tabbed into from staying open
+      // when you hover over another menu
+      target.focus();
+      target.blur();
+    });
+
+    const toggleForcedOpen = (e: Event) => {
+      const target = e.target as HTMLElement;
+      const isForced = target?.classList.contains('forced-open');
+      const currentTarget = e.currentTarget as HTMLElement;
+      if (isForced) {
+        currentTarget.removeEventListener('blur', () =>
+          currentTarget.classList.remove('forced-open')
+        );
+        currentTarget.classList.remove('forced-open');
+        currentTarget.classList.add('forced-closed');
+        currentTarget.blur();
+        currentTarget?.parentNode?.addEventListener('mouseout', () => {
+          currentTarget.classList.remove('forced-closed');
+        });
+      } else {
+        currentTarget.classList.remove('forced-closed');
+        currentTarget.classList.add('forced-open');
+        currentTarget.focus();
+        currentTarget.addEventListener('blur', () => currentTarget.classList.remove('forced-open'));
+        currentTarget?.parentNode?.removeEventListener('mouseout', () => {
+          currentTarget.classList.remove('forced-closed');
+        });
+      }
+    };
+    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();
+      }
+    });
+  });
+
+  // Mobile menu subnav menus
+  const headerbuttons = document.querySelectorAll('.js-headerMenuButton');
+  headerbuttons.forEach(button => {
     button.addEventListener('click', e => {
       e.preventDefault();
-      header?.classList.toggle('is-active');
-      button.setAttribute('aria-expanded', String(header?.classList.contains('is-active')));
+      const isActive = header?.classList.contains('is-active');
+      if (isActive) {
+        handleNavigationDrawerInactive(header);
+      } else {
+        handleNavigationDrawerActive(header);
+      }
+      button.setAttribute('aria-expanded', isActive ? 'true' : 'false');
     });
   });
 
   const scrim = document.querySelector('.js-scrim');
   scrim?.addEventListener('click', e => {
     e.preventDefault();
-    header?.classList.remove('is-active');
-    menuButtons.forEach(button => {
-      button.setAttribute('aria-expanded', String(header?.classList.contains('is-active')));
+
+    // find any active submenus and close them
+    const activeSubnavs = document.querySelectorAll('.go-NavigationDrawer-submenuItem.is-active');
+    activeSubnavs.forEach(subnav => handleNavigationDrawerInactive(subnav as HTMLElement));
+
+    handleNavigationDrawerInactive(header);
+
+    headerbuttons.forEach(button => {
+      button.setAttribute(
+        'aria-expanded',
+        header?.classList.contains('is-active') ? 'true' : 'false'
+      );
     });
   });
+
+  const getNavigationDrawerMenuItems = (navigationDrawer: HTMLElement): HTMLElement[] => {
+    if (!navigationDrawer) {
+      return [];
+    }
+
+    const menuItems = Array.from(
+      navigationDrawer.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'
+      ) || []
+    );
+    console.log(menuItems);
+
+    const anchorEl = navigationDrawer.querySelector('.go-NavigationDrawer-header > a');
+    if (anchorEl) {
+      menuItems.unshift(anchorEl);
+    }
+    return menuItems as HTMLElement[];
+  };
+
+  const getNavigationDrawerIsSubnav = (navigationDrawer: HTMLElement) => {
+    if (!navigationDrawer) {
+      return;
+    }
+    return navigationDrawer.classList.contains('go-NavigationDrawer-submenuItem');
+  };
+
+  const handleNavigationDrawerInactive = (navigationDrawer: HTMLElement) => {
+    if (!navigationDrawer) {
+      return;
+    }
+    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);
+    navigationDrawer.classList.remove('is-active');
+    const parentMenuItem = navigationDrawer
+      .closest('.go-NavigationDrawer-listItem')
+      ?.querySelector(':scope > a') as HTMLElement;
+    parentMenuItem?.focus();
+    menuItems?.forEach(item => item?.setAttribute('tabindex', '-1'));
+    if (menuItems && menuItems[0]) {
+      menuItems[0].removeEventListener('keydown', handleMenuItemTabLeftFactory(navigationDrawer));
+      menuItems[menuItems.length - 1].removeEventListener(
+        'keydown',
+        handleMenuItemTabRightFactory(navigationDrawer)
+      );
+    }
+
+    if (navigationDrawer === header) {
+      headerbuttons && (headerbuttons[0] as HTMLElement)?.focus();
+    }
+  };
+
+  const handleNavigationDrawerActive = (navigationDrawer: HTMLElement) => {
+    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);
+
+    navigationDrawer.classList.add('is-active');
+    menuItems.forEach(item => item.setAttribute('tabindex', '0'));
+    menuItems[0].focus();
+
+    menuItems[0].addEventListener('keydown', handleMenuItemTabLeftFactory(navigationDrawer));
+    menuItems[menuItems.length - 1].addEventListener(
+      'keydown',
+      handleMenuItemTabRightFactory(navigationDrawer)
+    );
+  };
+
+  const handleMenuItemTabLeftFactory = (navigationDrawer: HTMLElement) => {
+    return (e: KeyboardEvent) => {
+      if (e.key === 'Tab' && e.shiftKey) {
+        e.preventDefault();
+        handleNavigationDrawerInactive(navigationDrawer);
+      }
+    };
+  };
+
+  const handleMenuItemTabRightFactory = (navigationDrawer: HTMLElement) => {
+    return (e: KeyboardEvent) => {
+      if (e.key === 'Tab' && !e.shiftKey) {
+        e.preventDefault();
+        handleNavigationDrawerInactive(navigationDrawer);
+      }
+    };
+  };
+
+  const prepMobileNavigationDrawer = (navigationDrawer: HTMLElement) => {
+    const isSubnav = getNavigationDrawerIsSubnav(navigationDrawer);
+    const menuItems = getNavigationDrawerMenuItems(navigationDrawer);
+    navigationDrawer.addEventListener('keyup', e => {
+      if (e.key === 'Escape') {
+        handleNavigationDrawerInactive(navigationDrawer);
+      }
+    });
+
+    menuItems.forEach(item => {
+      const parentLi = item.closest('li');
+      if (parentLi && parentLi.classList.contains('js-mobile-subnav-trigger')) {
+        const submenu = parentLi.querySelector('.go-NavigationDrawer-submenuItem') as HTMLElement;
+        item.addEventListener('click', () => {
+          handleNavigationDrawerActive(submenu);
+        });
+      }
+    });
+    if (isSubnav) {
+      handleNavigationDrawerInactive(navigationDrawer);
+      navigationDrawer
+        ?.querySelector('.go-NavigationDrawer-header')
+        ?.addEventListener('click', e => {
+          e.preventDefault();
+          handleNavigationDrawerInactive(navigationDrawer);
+        });
+    }
+  };
+
+  document
+    .querySelectorAll('.go-NavigationDrawer')
+    .forEach(drawer => prepMobileNavigationDrawer(drawer as HTMLElement));
+
+  handleNavigationDrawerInactive(header);
 }
 
 export function registerSearchFormListeners(): void {
diff --git a/static/shared/icon/launch_gm_grey_24dp.svg b/static/shared/icon/launch_gm_grey_24dp.svg
index 656d73e..c5179a1 100644
--- a/static/shared/icon/launch_gm_grey_24dp.svg
+++ b/static/shared/icon/launch_gm_grey_24dp.svg
@@ -1 +1,12 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#455A64"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 26.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:none;}
+	.st1{fill:#455A64;}
+</style>
+<path class="st0" d="M0,0h24v24H0V0z"/>
+<path class="st1" d="M19,19H5V5h7V3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2v-7h-2V19z M14,3v2h3.6l-9.8,9.8
+	l1.4,1.4L19,6.4V10h2V3H14z"/>
+</svg>
diff --git a/static/shared/logo/social/github.svg b/static/shared/logo/social/github.svg
new file mode 100644
index 0000000..b58697a
--- /dev/null
+++ b/static/shared/logo/social/github.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M7.98401 0C6.53334 0 5.18933 0.36268 3.952 1.08801C2.74666 1.79201 1.79201 2.74666 1.08801 3.952C0.362679 5.18933 0 6.53334 0 7.98401C0 9.12534 0.240001 10.2187 0.720001 11.264C1.168 12.2667 1.80266 13.1467 2.62399 13.904C3.45599 14.6507 4.38934 15.2053 5.42401 15.568C5.60534 15.5893 5.744 15.552 5.84 15.456C5.92533 15.3813 5.96799 15.2853 5.96799 15.168V13.792C5.56265 13.888 5.18933 13.9147 4.84799 13.872C4.55999 13.84 4.29866 13.76 4.064 13.632C3.88266 13.5253 3.72268 13.3973 3.58401 13.248C3.48801 13.1307 3.40799 13.008 3.34399 12.88L3.28 12.72C3.17333 12.4427 3.04533 12.2027 2.896 12C2.78933 11.8613 2.67201 11.744 2.54401 11.648L2.39999 11.552C2.09066 11.3493 2.00535 11.2053 2.14401 11.12C2.21868 11.0773 2.32 11.056 2.448 11.056C2.68266 11.0667 2.90134 11.1467 3.104 11.296C3.264 11.4027 3.40266 11.5307 3.51999 11.68L3.664 11.888C3.984 12.4213 4.40534 12.7147 4.92801 12.768C5.25868 12.8 5.60532 12.736 5.96799 12.576C6.01065 12.1493 6.17599 11.792 6.46399 11.504C5.37599 11.376 4.54934 11.072 3.98401 10.592C3.21601 9.95201 2.832 8.93334 2.832 7.53601C2.832 6.70401 3.10933 5.98401 3.664 5.37601C3.58933 5.16267 3.54668 4.93332 3.53601 4.68799C3.50401 4.22932 3.584 3.776 3.776 3.328L3.90399 3.31201C4.02133 3.31201 4.15465 3.32799 4.30399 3.35999C4.50665 3.40265 4.736 3.48267 4.992 3.60001C5.29067 3.73867 5.61599 3.92534 5.96799 4.16C6.50132 4 7.17334 3.92001 7.98401 3.92001C8.61334 3.92001 9.28001 4 9.98401 4.16C10.3253 3.92534 10.6507 3.73867 10.96 3.60001C11.216 3.48267 11.4453 3.40265 11.648 3.35999C11.7973 3.32799 11.9307 3.31201 12.048 3.31201L12.192 3.328C12.4587 3.98934 12.496 4.67201 12.304 5.37601L12.288 5.42401C12.5547 5.72268 12.7573 6.05867 12.896 6.43201C13.0453 6.80534 13.12 7.18932 13.12 7.58398C13.12 8.54398 12.9333 9.32268 12.56 9.92001C12.2507 10.432 11.8027 10.8213 11.216 11.088C10.7573 11.28 10.1813 11.4187 9.48801 11.504C9.64801 11.632 9.77601 11.8133 9.87201 12.048C9.97868 12.3147 10.032 12.6187 10.032 12.96V15.168C10.032 15.2853 10.0747 15.3867 10.16 15.472C10.256 15.5573 10.3947 15.584 10.576 15.552C11.6427 15.2 12.5867 14.6453 13.408 13.888C14.2293 13.12 14.864 12.2293 15.312 11.216C15.7707 10.192 16 9.11468 16 7.98401C15.9787 6.53334 15.6053 5.18933 14.88 3.952C14.1653 2.74666 13.2053 1.79201 12 1.08801C10.7627 0.36268 9.42401 0 7.98401 0Z" fill="#1C1F23"/>
+</svg>
diff --git a/static/shared/logo/social/google-groups.svg b/static/shared/logo/social/google-groups.svg
new file mode 100644
index 0000000..bd4ee2d
--- /dev/null
+++ b/static/shared/logo/social/google-groups.svg
@@ -0,0 +1,8 @@
+<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M14.625 2.25H3.375C2.75363 2.25 2.25 2.75363 2.25 3.375V15.75L5.4585 13.125H14.625C15.246 13.125 15.75 12.621 15.75 12V3.375C15.75 2.75363 15.246 2.25 14.625 2.25Z" fill="#CFD8DC"/>
+<path d="M4.5 3.375H13.5C14.121 3.375 14.625 3.87863 14.625 4.5V15.75L10.125 12H4.5C3.87863 12 3.375 11.496 3.375 10.875V4.5C3.375 3.87863 3.87863 3.375 4.5 3.375Z" fill="#42A5F5"/>
+<path d="M11.625 7.125C11.625 7.539 11.289 7.875 10.875 7.875C10.461 7.875 10.125 7.539 10.125 7.125C10.125 6.711 10.461 6.375 10.875 6.375C11.289 6.375 11.625 6.711 11.625 7.125Z" fill="#BBDEFB"/>
+<path d="M12.375 9.25012C12.375 9.25012 11.9599 8.25 10.875 8.25C9.79013 8.25 9.375 9.25012 9.375 9.25012V9.75H12.375V9.25012Z" fill="#BBDEFB"/>
+<path d="M9 6.375C9 6.996 8.49637 7.5 7.875 7.5C7.25363 7.5 6.75 6.996 6.75 6.375C6.75 5.754 7.25363 5.25 7.875 5.25C8.49637 5.25 9 5.754 9 6.375Z" fill="#E3F2FD"/>
+<path d="M10.125 9.12525C10.125 9.12525 9.5025 7.875 7.875 7.875C6.2475 7.875 5.625 9.12525 5.625 9.12525V9.75H10.125V9.12525Z" fill="#E3F2FD"/>
+</svg>
diff --git a/static/shared/logo/social/reddit.svg b/static/shared/logo/social/reddit.svg
new file mode 100644
index 0000000..33986af
--- /dev/null
+++ b/static/shared/logo/social/reddit.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9.492 10.232C9.54867 10.288 9.54867 10.3793 9.492 10.436C9.182 10.744 8.696 10.894 8.00467 10.894L7.99933 10.8927L7.994 10.894C7.30333 10.894 6.81667 10.744 6.50667 10.4353C6.45 10.3793 6.45 10.288 6.50667 10.232C6.56267 10.176 6.65467 10.176 6.71133 10.232C6.964 10.4833 7.38333 10.606 7.994 10.606L7.99933 10.6073L8.00467 10.606C8.61467 10.606 9.034 10.4833 9.28733 10.232C9.344 10.176 9.436 10.176 9.492 10.232ZM7.19867 8.62C7.19867 8.282 6.92267 8.00733 6.584 8.00733C6.24467 8.00733 5.96867 8.282 5.96867 8.62C5.96867 8.95733 6.24467 9.232 6.584 9.232C6.92267 9.23267 7.19867 8.958 7.19867 8.62ZM16 8C16 12.418 12.418 16 8 16C3.582 16 0 12.418 0 8C0 3.582 3.582 0 8 0C12.418 0 16 3.582 16 8ZM12.6667 7.914C12.6667 7.34667 12.2033 6.88533 11.6333 6.88533C11.3553 6.88533 11.1033 6.99667 10.9173 7.17533C10.2133 6.712 9.26067 6.41733 8.20667 6.37933L8.78333 4.56333L10.3453 4.92933L10.3433 4.952C10.3433 5.416 10.7227 5.79333 11.1887 5.79333C11.6547 5.79333 12.0333 5.416 12.0333 4.952C12.0333 4.488 11.6547 4.11067 11.1887 4.11067C10.8307 4.11067 10.526 4.334 10.4027 4.64667L8.71933 4.252C8.646 4.234 8.57067 4.27667 8.548 4.34867L7.90467 6.374C6.80067 6.38733 5.80133 6.68467 5.066 7.16133C4.88133 6.99133 4.63667 6.88467 4.366 6.88467C3.79667 6.88533 3.33333 7.34667 3.33333 7.914C3.33333 8.29133 3.54067 8.618 3.84533 8.79733C3.82533 8.90667 3.812 9.018 3.812 9.13067C3.812 10.6513 5.682 11.8887 7.98067 11.8887C10.2793 11.8887 12.1493 10.6513 12.1493 9.13067C12.1493 9.024 12.138 8.91933 12.12 8.816C12.444 8.642 12.6667 8.30533 12.6667 7.914ZM9.41867 8.008C9.07933 8.008 8.804 8.28267 8.804 8.62067C8.804 8.958 9.08 9.23267 9.41867 9.23267C9.75733 9.23267 10.0333 8.958 10.0333 8.62067C10.0333 8.28267 9.758 8.008 9.41867 8.008Z" fill="#EB5428"/>
+</svg>
diff --git a/static/shared/logo/social/slack.svg b/static/shared/logo/social/slack.svg
new file mode 100644
index 0000000..787e2f9
--- /dev/null
+++ b/static/shared/logo/social/slack.svg
@@ -0,0 +1,10 @@
+<svg width="11" height="11" viewBox="0 0 11 11" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.29333 6.89784C2.29333 7.52895 1.77778 8.04451 1.14667 8.04451C0.515556 8.04451 0 7.52895 0 6.89784C0 6.26673 0.515556 5.75117 1.14667 5.75117H2.29333V6.89784Z" fill="#E01E5A"/>
+<path d="M2.87109 6.89784C2.87109 6.26673 3.38665 5.75117 4.01776 5.75117C4.64887 5.75117 5.16442 6.26673 5.16442 6.89784V9.76895C5.16442 10.4001 4.64887 10.9156 4.01776 10.9156C3.38665 10.9156 2.87109 10.4001 2.87109 9.76895V6.89784Z" fill="#E01E5A"/>
+<path d="M4.01776 2.29333C3.38665 2.29333 2.87109 1.77777 2.87109 1.14666C2.87109 0.515554 3.38665 0 4.01776 0C4.64887 0 5.16442 0.515554 5.16442 1.14666V2.29333H4.01776Z" fill="#36C5F0"/>
+<path d="M4.01778 2.87108C4.64889 2.87108 5.16445 3.38663 5.16445 4.01774C5.16445 4.64885 4.64889 5.1644 4.01778 5.1644H1.14667C0.515556 5.1644 0 4.64885 0 4.01774C0 3.38663 0.515556 2.87108 1.14667 2.87108H4.01778Z" fill="#36C5F0"/>
+<path d="M8.62207 4.01774C8.62207 3.38663 9.13762 2.87108 9.76873 2.87108C10.3998 2.87108 10.9154 3.38663 10.9154 4.01774C10.9154 4.64885 10.3998 5.1644 9.76873 5.1644H8.62207V4.01774Z" fill="#2EB67D"/>
+<path d="M8.04431 4.01778C8.04431 4.64889 7.52875 5.16445 6.89764 5.16445C6.26653 5.16445 5.75098 4.64889 5.75098 4.01778V1.14667C5.75098 0.515556 6.26653 0 6.89764 0C7.52875 0 8.04431 0.515556 8.04431 1.14667V4.01778Z" fill="#2EB67D"/>
+<path d="M6.89764 8.62225C7.52875 8.62225 8.04431 9.13781 8.04431 9.76892C8.04431 10.4 7.52875 10.9156 6.89764 10.9156C6.26653 10.9156 5.75098 10.4 5.75098 9.76892V8.62225H6.89764Z" fill="#ECB22E"/>
+<path d="M6.89764 8.04451C6.26653 8.04451 5.75098 7.52895 5.75098 6.89784C5.75098 6.26673 6.26653 5.75117 6.89764 5.75117H9.76875C10.3999 5.75117 10.9154 6.26673 10.9154 6.89784C10.9154 7.52895 10.3999 8.04451 9.76875 8.04451H6.89764Z" fill="#ECB22E"/>
+</svg>
diff --git a/static/shared/logo/social/stack-overflow.svg b/static/shared/logo/social/stack-overflow.svg
new file mode 100644
index 0000000..4288f3b
--- /dev/null
+++ b/static/shared/logo/social/stack-overflow.svg
@@ -0,0 +1,4 @@
+<svg width="12" height="14" viewBox="0 0 12 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.95083 9.02467H11.1947V14.0001H0V9.02467H1.24385V12.7562H9.95083V9.02467Z" fill="#BBBBBB"/>
+<path d="M2.5995 8.65473L8.70852 9.93873L8.96532 8.71749L2.8563 7.43293L2.5995 8.65473ZM3.40789 5.72953L9.06697 8.36514L9.59414 7.23335L3.93495 4.59773L3.40789 5.72953ZM4.97379 2.95313L9.77145 6.94828L10.5705 5.98881L5.7728 1.99378L4.97379 2.95313ZM8.07065 0L7.06878 0.745181L10.7945 5.75452L11.7963 5.00945L8.07065 0ZM2.48779 11.5122H8.70706V10.2683H2.48779V11.5122Z" fill="#F58025"/>
+</svg>
diff --git a/static/shared/logo/social/twitter.svg b/static/shared/logo/social/twitter.svg
new file mode 100644
index 0000000..4d930f9
--- /dev/null
+++ b/static/shared/logo/social/twitter.svg
@@ -0,0 +1,3 @@
+<svg width="15" height="12" viewBox="0 0 15 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M14.016 1.34399C13.8133 1.63199 13.5893 1.90397 13.344 2.15997C13.1093 2.40531 12.8533 2.6293 12.576 2.83197C12.5867 2.95997 12.592 3.088 12.592 3.216C12.592 3.792 12.528 4.36264 12.4 4.92798C12.2827 5.48265 12.1067 6.02134 11.872 6.54401C11.5413 7.28001 11.12 7.95732 10.608 8.57599C10.1067 9.17332 9.53066 9.68533 8.87999 10.112C8.22932 10.528 7.53066 10.8426 6.784 11.056C6.00533 11.28 5.216 11.3866 4.416 11.376C3.63733 11.376 2.86933 11.2693 2.112 11.056C1.36533 10.8426 0.661333 10.5227 0 10.096C0.768 10.1813 1.52 10.1227 2.256 9.91998C2.992 9.70665 3.65866 9.36533 4.256 8.896C3.808 8.896 3.38133 8.78932 2.976 8.57599C2.58133 8.36266 2.25066 8.07464 1.98399 7.71198C1.81333 7.46664 1.68 7.19999 1.584 6.91199L1.856 6.94397C2.19734 6.97597 2.53333 6.94402 2.864 6.84802C2.544 6.78402 2.24 6.66664 1.952 6.49597C1.67466 6.3253 1.42934 6.11202 1.216 5.85602C1.00267 5.60002 0.837335 5.31733 0.720001 5.008C0.613334 4.688 0.559998 4.36265 0.559998 4.03198V4C0.965331 4.23467 1.40266 4.35731 1.87199 4.36798C1.47733 4.10131 1.168 3.75467 0.944 3.328C0.826667 3.12534 0.741322 2.90666 0.687988 2.672C0.559988 2.192 0.559988 1.71199 0.687988 1.23199C0.751988 0.986661 0.853323 0.752015 0.991989 0.528015C1.35466 0.986682 1.75999 1.39202 2.20799 1.74402C3.10399 2.45868 4.10667 2.96531 5.216 3.26398C5.77067 3.41331 6.336 3.50401 6.912 3.53601C6.88 3.42934 6.85866 3.32267 6.84799 3.216C6.83733 3.09867 6.832 2.98667 6.832 2.88C6.832 2.47467 6.90667 2.10134 7.056 1.76001C7.20533 1.41868 7.408 1.11469 7.664 0.848022C7.93067 0.581355 8.24 0.373332 8.592 0.223999C8.944 0.0746657 9.31732 0 9.71199 0C10.1067 0 10.4853 0.0799904 10.848 0.23999C11.2107 0.399991 11.5253 0.623987 11.792 0.911987C12.4427 0.783987 13.0507 0.549341 13.616 0.208008C13.5093 0.549341 13.3493 0.858653 13.136 1.13599C12.9227 1.40265 12.6613 1.62665 12.352 1.80798C12.928 1.73332 13.4773 1.58398 14 1.35999L14.016 1.34399Z" fill="#6FA8D8"/>
+</svg>