| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more contributor |
| * license agreements. See the NOTICE file distributed with this work for |
| * additional information regarding copyright ownership. The ASF licenses this |
| * file to you under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * https://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| |
| :root { |
| font-family: |
| system-ui, |
| -apple-system, |
| BlinkMacSystemFont, |
| 'Segoe UI', |
| Roboto, |
| Ubuntu, |
| Cantarell, |
| 'Noto Sans', |
| sans-serif; |
| color: #1c1e21; |
| background: #ffffff; |
| --primary: #3071a9; |
| --primary-dark: #285f8f; |
| --text: #1c1e21; |
| --muted: #525860; |
| --subtle: #606770; |
| --border: #dadde1; |
| --surface: #f5f6f7; |
| --navbar-height: 60px; |
| --sidebar-width: 300px; |
| line-height: 1.65; |
| font-weight: 400; |
| text-rendering: optimizeLegibility; |
| } |
| |
| * { |
| box-sizing: border-box; |
| } |
| |
| html { |
| scroll-behavior: smooth; |
| } |
| |
| body { |
| margin: 0; |
| min-width: 320px; |
| background: #ffffff; |
| } |
| |
| a { |
| color: var(--primary); |
| text-decoration: none; |
| } |
| |
| a:hover { |
| text-decoration: underline; |
| } |
| |
| a:focus-visible, |
| summary:focus-visible { |
| outline: 2px solid var(--primary); |
| outline-offset: 2px; |
| } |
| |
| code, |
| pre { |
| font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; |
| } |
| |
| .skip-link { |
| position: fixed; |
| top: 0.5rem; |
| left: 0.5rem; |
| z-index: 100; |
| padding: 0.5rem 0.75rem; |
| color: #ffffff; |
| background: var(--primary-dark); |
| transform: translateY(-160%); |
| } |
| |
| .skip-link:focus { |
| transform: translateY(0); |
| } |
| |
| /* Curator-style global navbar */ |
| .navbar { |
| position: sticky; |
| top: 0; |
| z-index: 50; |
| height: var(--navbar-height); |
| background: #ffffff; |
| border-bottom: 1px solid var(--border); |
| box-shadow: 0 1px 2px rgb(0 0 0 / 4%); |
| } |
| |
| .navbar-inner { |
| display: flex; |
| align-items: center; |
| height: 100%; |
| padding: 0 1rem; |
| } |
| |
| .navbar-brand { |
| display: inline-flex; |
| align-items: center; |
| gap: 0.5rem; |
| min-width: calc(var(--sidebar-width) - 1rem); |
| color: var(--text); |
| font-size: 1.05rem; |
| font-weight: 700; |
| letter-spacing: -0.02em; |
| } |
| |
| .navbar-brand:hover { |
| text-decoration: none; |
| } |
| |
| .navbar-brand small { |
| color: var(--primary); |
| font-size: 0.57rem; |
| font-weight: 700; |
| letter-spacing: 0.08em; |
| text-transform: uppercase; |
| } |
| |
| .navbar-links { |
| display: flex; |
| align-items: center; |
| gap: 1.45rem; |
| margin-left: auto; |
| height: 100%; |
| } |
| |
| .navbar-links > a, |
| .asf-menu > summary { |
| color: var(--text); |
| font-size: 0.94rem; |
| font-weight: 500; |
| white-space: nowrap; |
| } |
| |
| .navbar-links > a:hover, |
| .navbar-links > a.active { |
| color: var(--primary); |
| text-decoration: none; |
| } |
| |
| .github-link { |
| width: 24px; |
| height: 24px; |
| background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") |
| center / contain no-repeat; |
| } |
| |
| .github-link:hover { |
| opacity: 0.65; |
| } |
| |
| .search-trigger { |
| display: inline-flex; |
| align-items: center; |
| gap: 0.55rem; |
| min-width: 180px; |
| padding: 0.4rem 0.8rem; |
| color: #5f6670; |
| font: inherit; |
| font-size: 0.82rem; |
| text-align: left; |
| background: #f1f2f4; |
| border: 1px solid transparent; |
| border-radius: 999px; |
| cursor: pointer; |
| } |
| |
| .search-trigger:hover { |
| background: #e8eaed; |
| } |
| |
| .search-trigger kbd { |
| margin-left: auto; |
| padding: 0.05rem 0.28rem; |
| color: #777d85; |
| font-family: inherit; |
| font-size: 0.68rem; |
| background: #ffffff; |
| border: 1px solid #d7d9dc; |
| border-radius: 3px; |
| box-shadow: 0 1px 0 rgb(0 0 0 / 6%); |
| } |
| |
| .search-icon { |
| position: relative; |
| flex: 0 0 auto; |
| width: 0.8rem; |
| height: 0.8rem; |
| border: 1.5px solid currentColor; |
| border-radius: 50%; |
| } |
| |
| .search-icon::after { |
| position: absolute; |
| right: -0.28rem; |
| bottom: -0.18rem; |
| width: 0.36rem; |
| height: 1.5px; |
| background: currentColor; |
| transform: rotate(45deg); |
| transform-origin: left center; |
| content: ''; |
| } |
| |
| .search-dialog { |
| width: min(620px, calc(100vw - 2rem)); |
| max-height: min(680px, calc(100vh - 4rem)); |
| padding: 0; |
| color: var(--text); |
| background: #ffffff; |
| border: 1px solid var(--border); |
| border-radius: 8px; |
| box-shadow: 0 18px 55px rgb(0 0 0 / 22%); |
| } |
| |
| .search-dialog::backdrop { |
| background: rgb(28 30 33 / 42%); |
| backdrop-filter: blur(1px); |
| } |
| |
| .search-input-row { |
| display: flex; |
| align-items: center; |
| gap: 0.8rem; |
| padding: 0.85rem 1rem; |
| color: var(--subtle); |
| border-bottom: 1px solid var(--border); |
| } |
| |
| .search-input-row input { |
| flex: 1; |
| min-width: 0; |
| padding: 0.4rem 0; |
| color: var(--text); |
| font: inherit; |
| font-size: 1rem; |
| background: transparent; |
| border: 0; |
| outline: 0; |
| } |
| |
| .search-input-row button { |
| padding: 0.3rem 0.55rem; |
| color: var(--subtle); |
| font: inherit; |
| font-size: 0.75rem; |
| background: var(--surface); |
| border: 1px solid var(--border); |
| border-radius: 4px; |
| cursor: pointer; |
| } |
| |
| .search-results { |
| max-height: min(520px, calc(100vh - 10rem)); |
| padding: 0.65rem; |
| overflow-y: auto; |
| } |
| |
| .search-results > p { |
| margin: 0.1rem 0.45rem 0.45rem; |
| color: var(--subtle); |
| font-size: 0.72rem; |
| font-weight: 600; |
| letter-spacing: 0.04em; |
| text-transform: uppercase; |
| } |
| |
| .search-results > a { |
| display: flex; |
| align-items: flex-start; |
| justify-content: space-between; |
| gap: 1rem; |
| padding: 0.7rem 0.75rem; |
| color: var(--text); |
| border-radius: 4px; |
| } |
| |
| .search-results > a:hover, |
| .search-results > a:focus-visible { |
| background: var(--surface); |
| text-decoration: none; |
| } |
| |
| .search-result-main { |
| display: grid; |
| gap: 0.18rem; |
| min-width: 0; |
| } |
| |
| .search-result-main strong { |
| font-size: 0.9rem; |
| } |
| |
| .search-result-main small { |
| display: -webkit-box; |
| overflow: hidden; |
| color: var(--subtle); |
| font-size: 0.75rem; |
| font-weight: 400; |
| line-height: 1.4; |
| -webkit-box-orient: vertical; |
| -webkit-line-clamp: 2; |
| } |
| |
| .search-result-path { |
| color: var(--subtle); |
| font-size: 0.74rem; |
| white-space: nowrap; |
| } |
| |
| .search-empty { |
| padding: 2rem 1rem; |
| color: var(--subtle); |
| font-size: 0.88rem; |
| text-align: center; |
| } |
| |
| .standalone-page { |
| min-height: calc(100vh - var(--navbar-height)); |
| padding: 4rem 1.5rem 6rem; |
| } |
| |
| .standalone-article { |
| max-width: 960px; |
| margin: 0 auto; |
| } |
| |
| .standalone-article h1 { |
| margin: 0 0 1.5rem; |
| font-size: 2.7rem; |
| line-height: 1.2; |
| letter-spacing: -0.02em; |
| } |
| |
| .standalone-article p { |
| max-width: 680px; |
| margin: 0; |
| font-size: 1rem; |
| line-height: 1.7; |
| } |
| |
| .asf-menu { |
| position: relative; |
| } |
| |
| .asf-menu > summary { |
| display: inline-flex; |
| align-items: center; |
| gap: 0.45rem; |
| cursor: pointer; |
| list-style: none; |
| } |
| |
| .asf-menu > summary::after { |
| width: 0.38rem; |
| height: 0.38rem; |
| margin-top: -0.2rem; |
| border-right: 1.5px solid currentColor; |
| border-bottom: 1.5px solid currentColor; |
| transform: rotate(45deg); |
| transition: |
| transform 120ms ease, |
| margin 120ms ease; |
| content: ''; |
| } |
| |
| .asf-menu[open] > summary::after { |
| margin-top: 0.2rem; |
| transform: rotate(-135deg); |
| } |
| |
| .asf-menu > div { |
| position: absolute; |
| top: calc(100% + 1rem); |
| right: 0; |
| display: grid; |
| min-width: 180px; |
| padding: 0.5rem; |
| background: #ffffff; |
| border: 1px solid var(--border); |
| border-radius: 4px; |
| box-shadow: 0 6px 18px rgb(0 0 0 / 14%); |
| } |
| |
| .asf-menu > div a { |
| padding: 0.45rem 0.6rem; |
| color: var(--text); |
| font-size: 0.84rem; |
| } |
| |
| .asf-menu > div a:hover { |
| color: var(--primary); |
| background: var(--surface); |
| text-decoration: none; |
| } |
| |
| .mobile-menu { |
| display: none; |
| margin-left: auto; |
| } |
| |
| /* Curator-style documentation shell */ |
| .docs-layout { |
| display: flex; |
| align-items: stretch; |
| min-height: calc(100vh - var(--navbar-height)); |
| } |
| |
| .docs-sidebar { |
| flex: 0 0 var(--sidebar-width); |
| width: var(--sidebar-width); |
| background: #ffffff; |
| border-right: 1px solid var(--border); |
| } |
| |
| .docs-sidebar > nav { |
| position: sticky; |
| top: var(--navbar-height); |
| max-height: calc(100vh - var(--navbar-height)); |
| padding: 0.5rem; |
| overflow-y: auto; |
| } |
| |
| .sidebar-item { |
| display: block; |
| padding: 0.42rem 0.75rem; |
| color: var(--muted); |
| font-size: 0.9rem; |
| line-height: 1.35; |
| border-radius: 3px; |
| } |
| |
| .sidebar-item:hover { |
| color: var(--primary); |
| text-decoration: none; |
| } |
| |
| .sidebar-item.active { |
| color: var(--primary); |
| background: #f0f0f0; |
| } |
| |
| .sidebar-item.pending { |
| cursor: default; |
| } |
| |
| .sidebar-heading { |
| margin: 1.1rem 0.75rem 0.35rem; |
| font-size: 0.78rem; |
| font-weight: 600; |
| text-transform: uppercase; |
| } |
| |
| .sidebar-item.external::after { |
| content: ' ↗'; |
| font-size: 0.72em; |
| } |
| |
| .docs-main { |
| display: grid; |
| grid-template-columns: minmax(0, 823px) 253px; |
| gap: 2rem; |
| width: min(100%, 1140px); |
| padding: 1rem; |
| } |
| |
| .docs-article-column { |
| min-width: 0; |
| } |
| |
| .breadcrumbs { |
| display: flex; |
| align-items: center; |
| gap: 0.7rem; |
| margin-bottom: 1rem; |
| color: var(--subtle); |
| font-size: 0.78rem; |
| } |
| |
| .breadcrumbs a { |
| color: var(--text); |
| font-size: 1rem; |
| } |
| |
| .breadcrumbs > span:last-child { |
| padding: 0.2rem 0.7rem; |
| background: var(--surface); |
| border-radius: 999px; |
| } |
| |
| .mobile-doc-navigation { |
| display: none; |
| } |
| |
| .doc-article h1, |
| .doc-article h2, |
| .doc-article h3 { |
| color: var(--text); |
| line-height: 1.25; |
| letter-spacing: -0.02em; |
| } |
| |
| .doc-article h1 { |
| margin: 0 0 1.35rem; |
| font-size: 2.7rem; |
| font-weight: 700; |
| } |
| |
| .doc-article h2 { |
| margin: 2.25rem 0 1rem; |
| padding-top: 0.25rem; |
| font-size: 2rem; |
| font-weight: 700; |
| scroll-margin-top: calc(var(--navbar-height) + 1rem); |
| } |
| |
| .doc-article h3 { |
| margin: 1.8rem 0 0.8rem; |
| font-size: 1.4rem; |
| } |
| |
| .doc-article p, |
| .doc-article li { |
| font-size: 1rem; |
| line-height: 1.7; |
| } |
| |
| .doc-article p { |
| margin: 0 0 1rem; |
| } |
| |
| .doc-article code { |
| padding: 0.12rem 0.3rem; |
| font-size: 0.88em; |
| background: var(--surface); |
| border: 1px solid #e3e4e6; |
| border-radius: 3px; |
| } |
| |
| .doc-article pre { |
| margin: 1rem 0; |
| padding: 1rem; |
| overflow-x: auto; |
| background: #f6f8fa; |
| border: 1px solid var(--border); |
| border-radius: 4px; |
| } |
| |
| .doc-article pre code { |
| padding: 0; |
| font-size: 0.86rem; |
| color: #24292f; |
| background: transparent; |
| border: 0; |
| } |
| |
| .doc-article .hljs-comment, |
| .doc-article .hljs-quote { |
| color: #6e7781; |
| } |
| |
| .doc-article .hljs-keyword, |
| .doc-article .hljs-selector-tag, |
| .doc-article .hljs-literal, |
| .doc-article .hljs-section, |
| .doc-article .hljs-link { |
| color: #cf222e; |
| } |
| |
| .doc-article .hljs-string, |
| .doc-article .hljs-title, |
| .doc-article .hljs-name, |
| .doc-article .hljs-type, |
| .doc-article .hljs-attribute, |
| .doc-article .hljs-symbol, |
| .doc-article .hljs-bullet, |
| .doc-article .hljs-addition, |
| .doc-article .hljs-variable, |
| .doc-article .hljs-template-tag, |
| .doc-article .hljs-template-variable { |
| color: #0a3069; |
| } |
| |
| .doc-article .hljs-number, |
| .doc-article .hljs-meta, |
| .doc-article .hljs-built_in, |
| .doc-article .hljs-builtin-name, |
| .doc-article .hljs-params { |
| color: #0550ae; |
| } |
| |
| .doc-article .hljs-title.class_, |
| .doc-article .hljs-class .hljs-title, |
| .doc-article .hljs-title.function_ { |
| color: #8250df; |
| } |
| |
| .doc-article .hljs-attr, |
| .doc-article .hljs-selector-id, |
| .doc-article .hljs-selector-class, |
| .doc-article .hljs-selector-attr, |
| .doc-article .hljs-selector-pseudo { |
| color: #953800; |
| } |
| |
| .doc-article .hljs-deletion { |
| color: #82071e; |
| background: #ffebe9; |
| } |
| |
| .doc-article .hljs-addition { |
| background: #dafbe1; |
| } |
| |
| .doc-article .hljs-emphasis { |
| font-style: italic; |
| } |
| |
| .doc-article .hljs-strong { |
| font-weight: 700; |
| } |
| |
| .table-wrapper { |
| width: 100%; |
| overflow-x: auto; |
| } |
| |
| .doc-article table { |
| width: 100%; |
| min-width: 720px; |
| margin: 1rem 0 1.5rem; |
| font-size: 0.85rem; |
| border-collapse: collapse; |
| } |
| |
| .doc-article th, |
| .doc-article td { |
| padding: 0.7rem; |
| text-align: left; |
| vertical-align: top; |
| border: 1px solid var(--border); |
| } |
| |
| .doc-article th { |
| font-weight: 700; |
| background: var(--surface); |
| } |
| |
| .docs-toc { |
| position: sticky; |
| top: calc(var(--navbar-height) + 1rem); |
| align-self: start; |
| max-height: calc(100vh - var(--navbar-height) - 2rem); |
| padding-left: 1rem; |
| overflow-y: auto; |
| border-left: 1px solid var(--border); |
| } |
| |
| .docs-toc ul { |
| margin: 0; |
| padding: 0; |
| list-style: none; |
| } |
| |
| .docs-toc li + li { |
| margin-top: 0.55rem; |
| } |
| |
| .docs-toc a { |
| color: var(--muted); |
| font-size: 0.76rem; |
| line-height: 1.35; |
| } |
| |
| .docs-toc a:hover { |
| color: var(--primary); |
| text-decoration: none; |
| } |
| |
| .doc-source { |
| margin-top: 2.5rem; |
| padding-top: 1rem; |
| font-size: 0.78rem; |
| border-top: 1px solid var(--border); |
| } |
| |
| .site-footer { |
| padding: 2.5rem 2rem; |
| color: #d8dce2; |
| background: #303846; |
| } |
| |
| .footer-inner { |
| display: grid; |
| grid-template-columns: 190px minmax(0, 900px); |
| gap: 3rem; |
| max-width: 1140px; |
| margin: 0 auto; |
| } |
| |
| .asf-logo img { |
| display: block; |
| width: 175px; |
| height: auto; |
| filter: brightness(0) invert(1); |
| } |
| |
| .footer-copy p { |
| margin: 0; |
| font-size: 0.68rem; |
| line-height: 1.65; |
| } |
| |
| .footer-copy p + p { |
| margin-top: 0.9rem; |
| color: #adb5c1; |
| } |
| |
| @media (max-width: 996px) { |
| .navbar-brand { |
| min-width: 0; |
| } |
| |
| .navbar-links { |
| display: none; |
| } |
| |
| .mobile-menu { |
| position: relative; |
| display: block; |
| } |
| |
| .mobile-menu > summary { |
| padding: 0.35rem; |
| font-size: 1.2rem; |
| cursor: pointer; |
| list-style: none; |
| } |
| |
| .mobile-menu > nav { |
| position: absolute; |
| top: calc(100% + 0.6rem); |
| right: 0; |
| display: grid; |
| min-width: 210px; |
| padding: 0.5rem; |
| background: #ffffff; |
| border: 1px solid var(--border); |
| box-shadow: 0 6px 18px rgb(0 0 0 / 14%); |
| } |
| |
| .mobile-menu nav a { |
| padding: 0.5rem; |
| color: var(--text); |
| font-size: 0.86rem; |
| } |
| |
| .docs-sidebar, |
| .docs-toc { |
| display: none; |
| } |
| |
| .docs-main { |
| display: block; |
| width: 100%; |
| padding: 1rem 1.5rem 2.5rem; |
| } |
| |
| .mobile-doc-navigation { |
| display: block; |
| margin-bottom: 1.2rem; |
| border: 1px solid var(--border); |
| border-radius: 4px; |
| } |
| |
| .mobile-doc-navigation > summary { |
| padding: 0.65rem 0.8rem; |
| color: var(--primary); |
| font-size: 0.84rem; |
| font-weight: 600; |
| cursor: pointer; |
| } |
| |
| .mobile-doc-navigation nav { |
| display: grid; |
| padding: 0 0.8rem 0.8rem; |
| } |
| |
| .mobile-doc-navigation nav a, |
| .mobile-doc-navigation nav span { |
| padding: 0.3rem 0; |
| font-size: 0.8rem; |
| } |
| } |
| |
| @media (max-width: 640px) { |
| .navbar-inner { |
| padding: 0 0.75rem; |
| } |
| |
| .navbar-brand { |
| font-size: 0.95rem; |
| } |
| |
| .navbar-brand small { |
| display: none; |
| } |
| |
| .docs-main { |
| padding-inline: 1rem; |
| } |
| |
| .doc-article h1 { |
| font-size: 2.1rem; |
| } |
| |
| .doc-article h2 { |
| font-size: 1.65rem; |
| } |
| |
| .standalone-page { |
| padding: 2.5rem 1rem 4rem; |
| } |
| |
| .standalone-article h1 { |
| font-size: 2.1rem; |
| } |
| |
| .footer-inner { |
| grid-template-columns: 1fr; |
| gap: 1.5rem; |
| } |
| } |
| |
| @media (prefers-reduced-motion: reduce) { |
| html { |
| scroll-behavior: auto; |
| } |
| } |