:root{--_mobile-breakpoint:768px;--sidebar-width:280px;--content-width:760px;--bg-color:#fbfaf6;--surface-color:#efece3;--primary-color:#16150f;--muted-color:#5e5c53;--subtle-color:#8a877d;--border-color:#e3e0d6;--accent-color:#0a7448;--accent-soft:#dff3e8;--selection-color:#c9f0da;--token-keyword:#8a3ffc;--token-string:#0a7448;--token-number:#b4540a;--token-comment:#8a877d;--token-punctuation:#5e5c53;--corner-color:var(--accent-color);--mark-glow:none;--plugin-search-kbd-bg:var(--bg-color);--plugin-search-kbd-border:1px solid var(--border-color);--plugin-search-kbd-color:var(--subtle-color);--plugin-search-reset-bg:var(--muted-color);--plugin-search-reset-color:var(--bg-color);--plugin-search-reset-border-radius:50%;--heading-font:"Space Grotesk", system-ui, sans-serif;--sans-serif-font:"IBM Plex Sans", system-ui, sans-serif;--code-font:"JetBrains Mono", ui-monospace, monospace;color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg-color:#0f110f;--surface-color:#1a1e1b;--primary-color:#ebe9e2;--muted-color:#a8a59b;--subtle-color:#7c7a72;--border-color:#2e332f;--accent-color:#3ddc97;--accent-soft:#183d2b;--selection-color:#1f4d35;--token-keyword:#c3a6ff;--token-string:#3ddc97;--token-number:#f5a95c;--token-comment:#9e9b91;--token-punctuation:#a8a59b;--corner-color:#2a9d6c;--mark-glow:drop-shadow(0 0 6px rgba(58,232,168,.35));color-scheme:dark}}::selection{background:var(--selection-color)}*,:after,:before{box-sizing:border-box}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;background-color:var(--bg-color);color:var(--primary-color);font-family:var(--sans-serif-font);font-size:16px;margin:0;overflow-x:hidden}img{max-width:100%}:focus-visible{outline:2px solid var(--accent-color);outline-offset:2px}#skip-to-content{background:var(--primary-color);border:0;border-radius:6px;color:var(--bg-color);cursor:pointer;font:inherit;left:12px;padding:8px 12px;position:fixed;top:-48px;z-index:5}#skip-to-content:focus{top:12px}@keyframes a{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}.github-corner{position:fixed;right:0;top:0;z-index:1}.github-corner svg{color:var(--bg-color);fill:var(--corner-color);height:72px;width:72px}.github-corner .octo-arm{transform-origin:130px 106px}.github-corner:hover .octo-arm{animation:a .56s ease-in-out}.github-corner:focus-visible .octo-arm{animation:a .56s ease-in-out}main{display:block;position:relative;min-height:100%}.sidebar{background-color:var(--bg-color);border-right:1px solid var(--border-color);height:100vh;left:0;overflow-y:auto;padding:36px 20px 48px 28px;position:fixed;top:0;transform:translateX(-100%);transition:transform .25s ease-out,translate .25s ease-out,opacity .25s ease-out,visibility .25s;width:var(--sidebar-width);z-index:2;display:flex;flex-direction:column}.sidebar.show{transform:none}.sidebar>*{flex-shrink:0}.sidebar .app-name{order:-1}.markdown-section [tabindex="-1"]:focus,.sidebar:focus{outline:none}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:var(--border-color)}.sidebar:focus-visible::-webkit-scrollbar-thumb{background:var(--border-color)}.app-name{margin:0 0 28px 12px}.app-name-link{align-items:center;color:var(--primary-color);display:inline-flex;font-family:var(--heading-font);font-size:1.35rem;font-weight:700;gap:10px;letter-spacing:-.02em;text-decoration:none}.app-name-link:before{background:url(mark.svg) 50%/contain no-repeat;content:"";filter:var(--mark-glow);height:20px;width:36px}.sidebar-nav ul{list-style:none;margin:0;padding:0}.sidebar-nav li:has(>a[href$="?id=contents"]){display:none}.sidebar-nav ul ul{border-left:1px solid var(--border-color);margin:2px 0 8px 12px}.sidebar-nav a{border-radius:6px;color:var(--muted-color);display:block;font-size:14px;line-height:1.4;padding:5px 12px;text-decoration:none;transition:background-color .15s,color .15s}.sidebar-nav>ul>li>a{color:var(--primary-color)}.sidebar-nav>ul>li:has(>ul)>a{font-weight:600}.sidebar-nav ul ul>li>a{color:var(--muted-color);font-weight:400}.sidebar-nav a.signature{font-family:var(--code-font);font-size:12.5px}.sidebar-nav code{font-family:var(--code-font);font-size:.9em}.sidebar-nav a:hover{background-color:var(--surface-color);color:var(--primary-color)}.sidebar-nav a:focus-visible{background-color:var(--surface-color);color:var(--primary-color)}.sidebar-nav li.active>a{background-color:var(--accent-soft);color:var(--accent-color);font-weight:600}.markdown-section h2#contents,.markdown-section h2#contents+ul,.sidebar-toggle{display:none}main>.content{min-height:100vh;padding:56px 32px 96px;transition:margin-left .25s ease-out}.sidebar.show~.content{margin-left:var(--sidebar-width)}.markdown-section{line-height:1.7;margin:0 auto;max-width:var(--content-width)}.markdown-section>:first-child{margin-top:0}.markdown-section :is(h1,h2,h3,h4){font-family:var(--heading-font);font-weight:700;letter-spacing:-.02em;line-height:1.2;scroll-margin-top:24px}.markdown-section h1{font-size:2.75rem;letter-spacing:-.035em;margin:0 0 16px}.markdown-section h2{border-top:1px solid var(--border-color);font-size:1.75rem;margin:64px 0 16px;padding-top:40px}.markdown-section h3{font-size:1.25rem;margin:40px 0 12px}.markdown-section h3.signature{font-family:var(--code-font);font-size:1.15rem;font-weight:600;letter-spacing:-.01em}.markdown-section h4{font-size:1.05rem;margin:32px 0 8px}.markdown-section :is(h1,h2,h3,h4) a{color:inherit;text-decoration:none}.markdown-section :is(h2,h3,h4) a:hover:after{color:var(--subtle-color);content:"#";margin-left:8px}.markdown-section :is(h2,h3,h4) a:focus-visible:after{color:var(--subtle-color);content:"#";margin-left:8px}.markdown-section p{margin:16px 0}.markdown-section a{color:var(--accent-color);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent-color) 35%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;transition:text-decoration-color .15s}.markdown-section a:hover{text-decoration-color:currentColor}.markdown-section a:focus-visible{text-decoration-color:currentColor}.markdown-section p:has(>img){display:flex;flex-wrap:wrap;gap:6px}.markdown-section p:has(>img) br{display:none}.markdown-section p:has(>img) a{display:inline-flex}.markdown-section strong{font-weight:600}.markdown-section :is(ul,ol){padding-left:1.4em}.markdown-section li{margin:6px 0}.markdown-section li::marker{color:var(--subtle-color)}.markdown-section blockquote{border-left:3px solid var(--accent-color);color:var(--primary-color);font-family:var(--heading-font);font-size:1.35rem;font-weight:500;letter-spacing:-.01em;line-height:1.4;margin:24px 0;padding:2px 0 2px 20px;text-wrap:balance}.markdown-section blockquote p{margin:0}.markdown-section #license~blockquote{border-left:0;color:var(--muted-color);font-family:inherit;font-size:.9rem;font-weight:400;letter-spacing:normal;margin:16px 0 0;padding:0}.markdown-section details{border:1px solid var(--border-color);border-radius:10px;margin:10px 0;padding:0 18px}.markdown-section details[open]{padding-bottom:6px}.markdown-section summary{align-items:center;cursor:pointer;display:flex;gap:10px;list-style:none;padding:13px 0}.markdown-section summary::-webkit-details-marker{display:none}.markdown-section summary:before{color:var(--subtle-color);content:"›";font-size:1.2em;line-height:1;transition:transform .15s ease-out}.markdown-section details[open]>summary:before{transform:rotate(90deg)}.markdown-section summary:hover strong{color:var(--accent-color)}.markdown-section summary:focus-visible strong{color:var(--accent-color)}.markdown-section summary[data-logo] strong{align-items:center;display:inline-flex;gap:10px}.markdown-section summary[data-logo] strong:before{background-color:var(--muted-color);content:"";flex:none;height:18px;mask:var(--logo) center/contain no-repeat;transition:background-color .15s ease-out;width:18px}.markdown-section details[open]>summary[data-logo] strong:before{background-color:var(--primary-color)}.markdown-section details[open]>summary[data-logo]:hover strong:before,.markdown-section summary[data-logo]:hover strong:before{background-color:var(--accent-color)}.markdown-section details[open]>summary[data-logo]:focus-visible strong:before,.markdown-section summary[data-logo]:focus-visible strong:before{background-color:var(--accent-color)}.markdown-section summary[data-logo=recipes]{--logo:url(providers/recipes.svg)}.markdown-section summary[data-logo=kubernetes]{--logo:url(providers/kubernetes.svg)}.markdown-section summary[data-logo=flyio]{--logo:url(providers/flyio.svg)}.markdown-section summary[data-logo=vercel]{--logo:url(providers/vercel.svg)}.markdown-section summary[data-logo=netlify]{--logo:url(providers/netlify.svg)}.markdown-section summary[data-logo=cloudflare-workers]{--logo:url(providers/cloudflare-workers.svg)}.markdown-section summary[data-logo=railway]{--logo:url(providers/railway.svg)}.markdown-section summary[data-logo=render]{--logo:url(providers/render.svg)}.markdown-section summary[data-logo=aws]{--logo:url(providers/aws.svg)}.markdown-section summary[data-logo=google-cloud-run]{--logo:url(providers/google-cloud-run.svg)}.markdown-section summary[data-logo=docker]{--logo:url(providers/docker.svg)}.markdown-section summary[data-logo=github-actions]{--logo:url(providers/github-actions.svg)}.markdown-section summary[data-logo=anywhere]{--logo:url(providers/anywhere.svg)}.markdown-section hr{border:0;border-top:1px solid var(--border-color);margin:48px 0}.markdown-section table{border-collapse:collapse;display:block;font-size:.9rem;margin:24px 0;max-width:100%;overflow-x:auto}.markdown-section th{font-weight:600;text-align:left}.markdown-section :is(td,th){border-bottom:1px solid var(--border-color);padding:10px 14px 10px 0;vertical-align:top}.markdown-section tr:last-child td{border-bottom:0}.markdown-section table:has(th:nth-child(3)) td:nth-child(2),.markdown-section td:first-child{white-space:nowrap}.markdown-section code{background:var(--surface-color);border-radius:5px;font-family:var(--code-font);font-size:.85em;line-height:1;overflow-wrap:anywhere;padding:.15em .35em}.markdown-section pre{background:var(--surface-color);border:1px solid var(--border-color);border-radius:10px;margin:20px 0;overflow:auto;position:relative}.markdown-section pre:before{color:var(--muted-color);content:attr(data-lang);font-family:var(--code-font);font-size:.7rem;letter-spacing:.06em;position:absolute;right:14px;text-transform:uppercase;top:6px}.markdown-section pre[data-lang=markup]:before{content:none}.markdown-section pre:hover:before{opacity:0}.markdown-section pre:focus-visible:before{opacity:0}.markdown-section pre>code{background:none;border:0;border-radius:0;display:block;font-size:.8rem;line-height:1.65;padding:22px 20px;white-space:pre}.token:is(.comment,.prolog,.doctype,.cdata){color:var(--token-comment)}.token:is(.punctuation,.operator){color:var(--token-punctuation)}.token:is(.keyword,.function,.builtin,.atrule,.tag){color:var(--token-keyword)}.token:is(.string,.char,.attr-value,.regex){color:var(--token-string)}.token:is(.number,.boolean,.constant,.property,.key){color:var(--token-number)}.codecopy-btn{background:var(--bg-color)!important;border:1px solid var(--border-color)!important;border-radius:6px!important;color:var(--muted-color)!important}.codecopy-btn-icon{fill:currentColor}.codecopy-btn:hover{color:var(--accent-color)!important}.codecopy-btn:focus-visible{color:var(--accent-color)!important}section.cover{display:none;min-height:100vh;padding:0}section.cover.show{display:block}.cover .mask{display:none}.cover-main{margin:0;max-width:none;padding:0;text-align:left}body:not(.sticky) .sidebar{opacity:0;translate:-12px 0;visibility:hidden}@media(max-width:768px){.sidebar .app-name,body:not(.sticky) .sidebar-toggle{display:none}.sidebar{padding-top:80px}.sidebar.show{box-shadow:0 0 48px rgba(0,0,0,.18)}main:has(.sidebar.show):before{background:rgba(0,0,0,.7);content:"";inset:0;position:fixed;z-index:2}.sidebar-toggle-button[aria-expanded=true] span:first-child{transform:translateY(7px) rotate(45deg)}.sidebar-toggle-button[aria-expanded=true] span:nth-child(2){opacity:0}.sidebar-toggle-button[aria-expanded=true] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.sidebar.show~.content{margin-left:0}.sidebar-toggle{background:color-mix(in srgb,var(--bg-color) 88%,transparent);backdrop-filter:blur(8px);border:0;border-bottom:1px solid var(--border-color);display:block;height:56px;left:0;padding:0;position:fixed;right:0;top:0;z-index:3}.sidebar-toggle:after{align-items:center;background:url(mark.svg) 0/30px no-repeat;color:var(--primary-color);content:"onesecret";display:flex;font-family:var(--heading-font);font-size:1.1rem;font-weight:700;height:56px;left:64px;letter-spacing:-.02em;padding-left:40px;pointer-events:none;position:absolute;top:0}.sidebar-toggle-button{cursor:pointer;height:56px;padding:19px 16px;width:56px}.sidebar-toggle-button span{background-color:var(--primary-color);border-radius:2px;display:block;height:2px;margin-bottom:5px;transition:transform .2s,opacity .2s;width:22px}.github-corner{z-index:4}.github-corner svg{height:48px;width:48px}.github-corner:hover .octo-arm{animation:none}.github-corner:focus-visible .octo-arm{animation:none}main>.content{padding:88px 16px 64px}.markdown-section h1{font-size:2.25rem}.markdown-section :is(h1,h2,h3,h4){scroll-margin-top:72px}.markdown-section h2{font-size:1.5rem;margin-top:48px;padding-top:32px}.markdown-section blockquote{font-size:1.15rem}}@media(prefers-reduced-motion:reduce){.sidebar,main>.content{transition:none}}@media print{.github-corner,.sidebar,.sidebar-toggle{display:none}.sidebar.show~.content{margin-left:0}}.sidebar .search{margin:0 0 20px}.sidebar .search .input-wrap{align-items:center;display:flex;position:relative}.sidebar .search input{background:var(--surface-color);border:1px solid var(--border-color);border-radius:8px;color:var(--primary-color);font:inherit;font-size:14px;padding:8px 64px 8px 12px;width:100%}.sidebar .search input::placeholder{color:var(--subtle-color)}.sidebar .search input:focus{border-color:var(--accent-color);outline:none}.sidebar .search .visually-hidden{clip:rect(0 0 0 0);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.sidebar .search kbd{border:1px solid var(--border-color);border-radius:4px;color:var(--subtle-color);font-family:var(--code-font);font-size:11px;line-height:1;padding:3px 5px}.sidebar .search .results-status{color:var(--muted-color);font-size:12px;margin:8px 0 0 2px}.sidebar .search .results-status:empty{display:none}.sidebar .search .matching-post{border-bottom:1px solid var(--border-color);padding:4px 0}.sidebar .search .matching-post:last-child{border-bottom:0}.sidebar .search .matching-post a{border-radius:6px;display:block;padding:10px 8px;text-decoration:none}.sidebar .search .matching-post a:hover{background:var(--surface-color)}.sidebar .search .matching-post a:focus-visible{background:var(--surface-color)}.sidebar .search .matching-post p{margin:0}.sidebar .search .matching-post .title{color:var(--primary-color);font-size:14px;font-weight:600;margin-bottom:4px}.sidebar .search .matching-post .content{color:var(--muted-color);font-size:13px;line-height:1.5}.sidebar .search .clamp-1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar .search .clamp-2{max-height:3em;overflow:hidden}.sidebar .search mark{pointer-events:none;background:var(--accent-soft);border-radius:3px;color:var(--accent-color);font-weight:600}