@beehexa/design-rules 0.0.0-stage → 2611.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -2
- package/dist/AGENTS.md +24 -0
- package/dist/catalog.json +1814 -0
- package/dist/docs/public/_redirects +7 -0
- package/dist/docs/public/apple-touch-icon.png +0 -0
- package/dist/docs/public/brand/logos/app/apple-touch-icon.png +0 -0
- package/dist/docs/public/brand/logos/app/avatar-800.png +0 -0
- package/dist/docs/public/brand/logos/app/icon-192.png +0 -0
- package/dist/docs/public/brand/logos/app/icon-512.png +0 -0
- package/dist/docs/public/brand/logos/app/icon-maskable-512.png +0 -0
- package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-1-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-2-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-3-white.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-4-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-1-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-2-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-3-white.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-4-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-d-550-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-d-550-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-design-d-550-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-design-d-550-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/hexasync-d-550-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/hexasync-d-550-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/png/beehexa-design-d-550-dark@3x.png +0 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/png/beehexa-design-d-550-light@3x.png +0 -0
- package/dist/docs/public/brand/logos/beehexa-logo.zip +0 -0
- package/dist/docs/public/brand/logos/fig/anatomy-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/anatomy-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-12.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-14.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-32.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-56.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-graphite-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-graphite-32.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-14.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-21.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-22.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-24.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-32.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-36-7c3aed7c3aed.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-36-swap.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-36.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-56.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-white-20.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-white-32.png +0 -0
- package/dist/docs/public/brand/logos/fig/clearspace.png +0 -0
- package/dist/docs/public/brand/logos/fig/construction-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/construction-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/container-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/container-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-dark-20.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-dark-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-dark-48.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-light-19.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-light-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-light-48.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-graphite-14.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-graphite-16.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-light-16.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-light-24.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-light-48.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-light-92.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-bee-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-bee-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-outline-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-outline-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-stack-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-stack-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/misuse-serif.png +0 -0
- package/dist/docs/public/brand/logos/icon/beehexa-icon-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/icon/beehexa-icon-white.svg +1 -0
- package/dist/docs/public/brand/logos/icon/beehexa-icon-yellow.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-1-light.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-2-dark.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-3-white.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-4-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-1-light.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-2-dark.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-3-white.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-4-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-dark.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-design-dark.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-design-light.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-icon-yellow.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-light.svg +1 -0
- package/dist/docs/public/brand/logos/ui/hexasync-dark.svg +1 -0
- package/dist/docs/public/brand/logos/ui/hexasync-light.svg +1 -0
- package/dist/docs/public/brand/logos/ui/png/beehexa-design-dark@3x.png +0 -0
- package/dist/docs/public/brand/logos/ui/png/beehexa-design-light@3x.png +0 -0
- package/dist/docs/public/favicon.ico +0 -0
- package/dist/docs/public/favicon.svg +1 -0
- package/dist/docs/public/fonts/LICENSE-Inter.txt +93 -0
- package/dist/docs/public/fonts/LICENSE-JetBrainsMono.txt +93 -0
- package/dist/docs/public/fonts/inter-latin-ext-opsz-wght-italic.woff2 +0 -0
- package/dist/docs/public/fonts/inter-latin-ext-opsz-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/inter-latin-opsz-wght-italic.woff2 +0 -0
- package/dist/docs/public/fonts/inter-latin-opsz-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/inter-vietnamese-opsz-wght-italic.woff2 +0 -0
- package/dist/docs/public/fonts/inter-vietnamese-opsz-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/jetbrains-mono-vietnamese-wght-normal.woff2 +0 -0
- package/dist/docs/public/icon-192.png +0 -0
- package/dist/docs/public/icon-512.png +0 -0
- package/dist/docs/public/icon-maskable-512.png +0 -0
- package/dist/docs/public/robots.txt +4 -0
- package/dist/docs/public/site.webmanifest +21 -0
- package/dist/docs/scripts/color-pairs.mjs +46 -0
- package/dist/docs/scripts/contrast-exceptions.mjs +6 -0
- package/dist/docs/scripts/token-utils.d.mts +26 -0
- package/dist/docs/scripts/token-utils.mjs +114 -0
- package/dist/docs/src/brand/Beehexa-brandguide-full-mar12.pdf +0 -0
- package/dist/docs/src/brand/color+typoDirections.pdf +0 -0
- package/dist/docs/src/brand/structure-proposal.md +227 -0
- package/dist/docs/src/components/ChildPages.astro +25 -0
- package/dist/docs/src/components/CodeExample.astro +18 -0
- package/dist/docs/src/components/ColorDemo.astro +794 -0
- package/dist/docs/src/components/ColorExample.astro +32 -0
- package/dist/docs/src/components/ColorSwatch.astro +20 -0
- package/dist/docs/src/components/ComponentTabs.astro +21 -0
- package/dist/docs/src/components/DocsFooter.astro +25 -0
- package/dist/docs/src/components/HelpOptions.astro +20 -0
- package/dist/docs/src/components/IconBrowser.astro +257 -0
- package/dist/docs/src/components/IconDemo.astro +185 -0
- package/dist/docs/src/components/InDevelopment.astro +29 -0
- package/dist/docs/src/components/LayoutDemo.astro +384 -0
- package/dist/docs/src/components/Logo.astro +25 -0
- package/dist/docs/src/components/PhaseTable.astro +22 -0
- package/dist/docs/src/components/RoleGuides.astro +48 -0
- package/dist/docs/src/components/ShapeDemo.astro +239 -0
- package/dist/docs/src/components/ShapePin.astro +22 -0
- package/dist/docs/src/components/Sidebar.astro +206 -0
- package/dist/docs/src/components/SiteHeader.astro +211 -0
- package/dist/docs/src/components/SpacingDemo.astro +172 -0
- package/dist/docs/src/components/StatusBadge.astro +22 -0
- package/dist/docs/src/components/SystemAreas.astro +29 -0
- package/dist/docs/src/components/TableOfContents.astro +47 -0
- package/dist/docs/src/components/TokenTable.astro +40 -0
- package/dist/docs/src/components/TypeDemo.astro +249 -0
- package/dist/docs/src/components/logos/Fig.astro +28 -0
- package/dist/docs/src/components/logos/LogoAnatomy.astro +101 -0
- package/dist/docs/src/components/logos/LogoClearSpace.astro +81 -0
- package/dist/docs/src/components/logos/LogoColourVersions.astro +45 -0
- package/dist/docs/src/components/logos/LogoConstruction.astro +84 -0
- package/dist/docs/src/components/logos/LogoContainer.astro +84 -0
- package/dist/docs/src/components/logos/LogoHero.astro +42 -0
- package/dist/docs/src/components/logos/LogoInUse.astro +197 -0
- package/dist/docs/src/components/logos/LogoMeanings.astro +75 -0
- package/dist/docs/src/components/logos/LogoMinSize.astro +55 -0
- package/dist/docs/src/components/logos/LogoMistakes.astro +109 -0
- package/dist/docs/src/components/logos/LogoMisuse.astro +96 -0
- package/dist/docs/src/components/logos/LogoPair.astro +26 -0
- package/dist/docs/src/components/logos/LogoSvg.astro +68 -0
- package/dist/docs/src/content/components/button/accessibility.mdx +18 -0
- package/dist/docs/src/content/components/button/changelog.mdx +6 -0
- package/dist/docs/src/content/components/button/code.mdx +27 -0
- package/dist/docs/src/content/components/button/examples.mdx +21 -0
- package/dist/docs/src/content/components/button/meta.json +5 -0
- package/dist/docs/src/content/components/button/usage.mdx +18 -0
- package/dist/docs/src/content/foundations/guidelines/accessibility.mdx +19 -0
- package/dist/docs/src/content/foundations/guidelines/content.mdx +25 -0
- package/dist/docs/src/content/foundations/index.mdx +9 -0
- package/dist/docs/src/content/foundations/styles/border.mdx +89 -0
- package/dist/docs/src/content/foundations/styles/color/accessibility.mdx +32 -0
- package/dist/docs/src/content/foundations/styles/color/dark-mode.mdx +22 -0
- package/dist/docs/src/content/foundations/styles/color/index.mdx +65 -0
- package/dist/docs/src/content/foundations/styles/color/palette.mdx +57 -0
- package/dist/docs/src/content/foundations/styles/color/tokens.mdx +55 -0
- package/dist/docs/src/content/foundations/styles/color/usage.mdx +111 -0
- package/dist/docs/src/content/foundations/styles/data-visualization.mdx +11 -0
- package/dist/docs/src/content/foundations/styles/elevation.mdx +12 -0
- package/dist/docs/src/content/foundations/styles/icons/accessibility.mdx +72 -0
- package/dist/docs/src/content/foundations/styles/icons/code.mdx +171 -0
- package/dist/docs/src/content/foundations/styles/icons/index.mdx +62 -0
- package/dist/docs/src/content/foundations/styles/icons/library.mdx +19 -0
- package/dist/docs/src/content/foundations/styles/icons/usage.mdx +100 -0
- package/dist/docs/src/content/foundations/styles/illustration.mdx +9 -0
- package/dist/docs/src/content/foundations/styles/interaction-states.mdx +49 -0
- package/dist/docs/src/content/foundations/styles/layout/app-frame.mdx +81 -0
- package/dist/docs/src/content/foundations/styles/layout/breakpoints.mdx +56 -0
- package/dist/docs/src/content/foundations/styles/layout/grid.mdx +87 -0
- package/dist/docs/src/content/foundations/styles/layout/index.mdx +24 -0
- package/dist/docs/src/content/foundations/styles/layout/overlays.mdx +45 -0
- package/dist/docs/src/content/foundations/styles/layout/page-widths.mdx +38 -0
- package/dist/docs/src/content/foundations/styles/logos/downloads-and-terms.mdx +65 -0
- package/dist/docs/src/content/foundations/styles/logos/index.mdx +64 -0
- package/dist/docs/src/content/foundations/styles/logos/placement-and-containers.mdx +96 -0
- package/dist/docs/src/content/foundations/styles/logos/product-logos.mdx +56 -0
- package/dist/docs/src/content/foundations/styles/logos/using-the-logo.mdx +70 -0
- package/dist/docs/src/content/foundations/styles/motion.mdx +11 -0
- package/dist/docs/src/content/foundations/styles/opacity.mdx +9 -0
- package/dist/docs/src/content/foundations/styles/radius.mdx +98 -0
- package/dist/docs/src/content/foundations/styles/size-and-density.mdx +41 -0
- package/dist/docs/src/content/foundations/styles/spacing.mdx +70 -0
- package/dist/docs/src/content/foundations/styles/typography/code.mdx +53 -0
- package/dist/docs/src/content/foundations/styles/typography/index.mdx +58 -0
- package/dist/docs/src/content/foundations/styles/typography/usage.mdx +144 -0
- package/dist/docs/src/content/foundations/styles/typography/vietnamese.mdx +46 -0
- package/dist/docs/src/content/foundations/styles/z-index.mdx +9 -0
- package/dist/docs/src/content/foundations/tokens/all-tokens.mdx +36 -0
- package/dist/docs/src/content/foundations/tokens/index.mdx +27 -0
- package/dist/docs/src/content/get-started/content.mdx +14 -0
- package/dist/docs/src/content/get-started/design.mdx +30 -0
- package/dist/docs/src/content/get-started/develop.mdx +59 -0
- package/dist/docs/src/content/get-started/get-help.mdx +19 -0
- package/dist/docs/src/content/get-started/index.mdx +50 -0
- package/dist/docs/src/content/news/2026-10-16-site-structure.md +15 -0
- package/dist/docs/src/content/news/2026-10-20-docs-site.md +13 -0
- package/dist/docs/src/content/release-phases/index.mdx +12 -0
- package/dist/docs/src/content/tools/ai-agents.mdx +49 -0
- package/dist/docs/src/content/tools/ant-design-vue-theme.mdx +138 -0
- package/dist/docs/src/content/tools/eslint.mdx +15 -0
- package/dist/docs/src/content/tools/index.mdx +7 -0
- package/dist/docs/src/content/tools/stylelint.mdx +19 -0
- package/dist/docs/src/content-vi/foundations/styles/border.mdx +89 -0
- package/dist/docs/src/content-vi/foundations/styles/color/accessibility.mdx +32 -0
- package/dist/docs/src/content-vi/foundations/styles/color/dark-mode.mdx +22 -0
- package/dist/docs/src/content-vi/foundations/styles/color/index.mdx +65 -0
- package/dist/docs/src/content-vi/foundations/styles/color/palette.mdx +57 -0
- package/dist/docs/src/content-vi/foundations/styles/color/tokens.mdx +55 -0
- package/dist/docs/src/content-vi/foundations/styles/color/usage.mdx +111 -0
- package/dist/docs/src/content-vi/foundations/styles/data-visualization.mdx +11 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/accessibility.mdx +72 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/code.mdx +170 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/index.mdx +62 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/library.mdx +19 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/usage.mdx +100 -0
- package/dist/docs/src/content-vi/foundations/styles/illustration.mdx +9 -0
- package/dist/docs/src/content-vi/foundations/styles/interaction-states.mdx +49 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/app-frame.mdx +77 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/breakpoints.mdx +56 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/grid.mdx +87 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/index.mdx +24 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/page-widths.mdx +34 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/downloads-and-terms.mdx +65 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/index.mdx +64 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/placement-and-containers.mdx +96 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/product-logos.mdx +56 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/using-the-logo.mdx +70 -0
- package/dist/docs/src/content-vi/foundations/styles/opacity.mdx +9 -0
- package/dist/docs/src/content-vi/foundations/styles/radius.mdx +98 -0
- package/dist/docs/src/content-vi/foundations/styles/size-and-density.mdx +41 -0
- package/dist/docs/src/content-vi/foundations/styles/spacing.mdx +70 -0
- package/dist/docs/src/content-vi/foundations/styles/typography/code.mdx +53 -0
- package/dist/docs/src/content-vi/foundations/styles/typography/index.mdx +58 -0
- package/dist/docs/src/content-vi/foundations/styles/typography/usage.mdx +144 -0
- package/dist/docs/src/content-vi/foundations/styles/typography/vietnamese.mdx +46 -0
- package/dist/docs/src/content-vi/foundations/styles/z-index.mdx +9 -0
- package/dist/docs/src/content.config.ts +68 -0
- package/dist/docs/src/lib/brand.ts +57 -0
- package/dist/docs/src/lib/contrast.ts +34 -0
- package/dist/docs/src/lib/i18n.ts +152 -0
- package/dist/docs/src/lib/icons.ts +46 -0
- package/dist/docs/src/lib/logo-geometry.ts +30 -0
- package/dist/docs/src/lib/lucide-categories.json +1 -0
- package/dist/docs/src/lib/lucide-data.ts +40 -0
- package/dist/docs/src/lib/navigation.ts +222 -0
- package/dist/docs/src/lib/release-phases.ts +10 -0
- package/dist/docs/src/lib/routes.ts +40 -0
- package/dist/docs/src/lib/token-descriptions-vi.ts +40 -0
- package/dist/docs/src/lib/tokens.ts +67 -0
- package/dist/docs/src/lib/tri-grid.ts +28 -0
- package/dist/docs/src/styles/chrome.css +122 -0
- package/dist/docs/src/styles/color.css +270 -0
- package/dist/docs/src/styles/docs.css +323 -0
- package/dist/docs/src/styles/global.css +66 -0
- package/dist/docs/src/styles/icons.css +135 -0
- package/dist/docs/src/styles/layout.css +165 -0
- package/dist/docs/src/styles/logos.css +236 -0
- package/dist/docs/src/styles/shapes.css +139 -0
- package/dist/docs/src/styles/tokens.css +461 -0
- package/dist/docs/src/styles/tokens.js +425 -0
- package/dist/docs/src/styles/typography.css +91 -0
- package/dist/docs/tokens/border.json +26 -0
- package/dist/docs/tokens/breakpoints.json +8 -0
- package/dist/docs/tokens/color.json +1350 -0
- package/dist/docs/tokens/elevation.json +26 -0
- package/dist/docs/tokens/layout.json +29 -0
- package/dist/docs/tokens/motion.json +12 -0
- package/dist/docs/tokens/radius.json +44 -0
- package/dist/docs/tokens/size.json +13 -0
- package/dist/docs/tokens/spacing.json +18 -0
- package/dist/docs/tokens/states.json +12 -0
- package/dist/docs/tokens/typography.json +220 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +1823 -0
- package/package.json +31 -4
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/* Docs pages: sidebar, content, table of contents. Colour roles come from chrome.css, sizes
|
|
2
|
+
from the tokens. The page follows the app frame (Foundations › Layout): CSS starts from the
|
|
3
|
+
smallest window and adds to it at the md (768 px), lg (1024 px) and xl (1440 px) breakpoints. */
|
|
4
|
+
|
|
5
|
+
/* Below lg: one column, the side navigation is a drawer. */
|
|
6
|
+
.docs-grid { display: grid; grid-template-columns: minmax(0, 1fr); min-height: calc(100vh - var(--header-bottom)); }
|
|
7
|
+
/* A docs page is a Narrow page: the content column is at most 768 px, not counting the page
|
|
8
|
+
margins, and text runs the full column. The table of contents is not part of that width: from xl it
|
|
9
|
+
stands beside the column, and the two are centred together in the area beside the side
|
|
10
|
+
navigation. The left edge is rounded down to a whole pixel so images such as logos never
|
|
11
|
+
land on half pixels. */
|
|
12
|
+
.docs-body {
|
|
13
|
+
--content-w: 768px;
|
|
14
|
+
--group-w: var(--content-w);
|
|
15
|
+
display: grid;
|
|
16
|
+
grid-template-columns: minmax(0, var(--content-w));
|
|
17
|
+
align-content: start;
|
|
18
|
+
padding-inline: max(var(--page-margin), round(down, (100% - var(--group-w)) / 2, 1px)) var(--page-margin);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Sidebar: sections, groups, pages, sub-pages. Items are 32 px high, 4 px apart and 8 px
|
|
22
|
+
from the sidebar edges, so the icons and labels start 20 px from the window edge, in line
|
|
23
|
+
with the logo (App frame). */
|
|
24
|
+
.sidebar { position: sticky; top: var(--header-bottom); align-self: start; height: calc(100vh - var(--header-bottom)); padding: var(--bh-space-100) var(--bh-space-100) var(--bh-space-400); overflow-y: auto; border-right: 1px solid var(--c-line); background: var(--c-bg); }
|
|
25
|
+
.sidebar ul { margin: 0; padding: 0; list-style: none; }
|
|
26
|
+
.sidebar li + li { margin-top: var(--bh-space-050); }
|
|
27
|
+
.sidebar-head { display: flex; align-items: center; justify-content: space-between; margin: 0 0 var(--bh-space-100); padding-left: var(--bh-space-150); }
|
|
28
|
+
.sidebar-title { color: var(--c-ink); text-decoration: none; font: var(--bh-font-heading-small); }
|
|
29
|
+
.sidebar-close { display: inline-grid; place-items: center; width: var(--bh-size-control-default); height: var(--bh-size-control-default); padding: 0; border: 0; border-radius: var(--bh-radius-100); color: var(--c-muted); background: none; cursor: pointer; }
|
|
30
|
+
.sidebar-label { margin: 0 0 var(--bh-space-050); padding-inline: var(--bh-space-150); color: var(--c-muted); font: var(--bh-font-label-small); }
|
|
31
|
+
.sidebar-item, .sidebar-child { display: flex; align-items: center; gap: var(--bh-space-100); min-height: var(--bh-size-control-default); border-radius: var(--bh-radius-050); color: var(--c-ink); text-decoration: none; font: var(--bh-font-label-default); }
|
|
32
|
+
.sidebar-item { padding: 0 var(--bh-space-150); }
|
|
33
|
+
.sidebar-item > span:first-child, .sidebar-child > span:first-child { flex: 1; }
|
|
34
|
+
.sidebar-item:hover, .sidebar-child:hover { background: var(--c-hover); }
|
|
35
|
+
.sidebar-item[aria-current='page'] { background: var(--c-selected); box-shadow: inset 2px 0 0 var(--c-gold); }
|
|
36
|
+
.sidebar-item[aria-current='page']:hover, .sidebar-child[aria-current='page']:hover { background: var(--c-selected-hover); }
|
|
37
|
+
.sidebar-chevron { flex: none; color: var(--c-muted); transition: transform 200ms cubic-bezier(0.2, 0, 0, 1); }
|
|
38
|
+
.sidebar-item[aria-expanded='true'] .sidebar-chevron { transform: rotate(90deg); }
|
|
39
|
+
|
|
40
|
+
.sidebar-item:focus-visible, .sidebar-child:focus-visible, .sidebar-section-toggle:focus-visible { outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus); outline-offset: calc(var(--bh-border-width-focused) * -1); }
|
|
41
|
+
|
|
42
|
+
/* One tree. Level 1: sections, bold. Level 2: the pages of the open section, on a guide line,
|
|
43
|
+
with the current page marked by a gold bar on that line. Group names (Design tokens,
|
|
44
|
+
Guidelines, Styles) are small labels, not links, so the tree stays two levels deep; a page
|
|
45
|
+
with sub-pages, such as Logos, opens a third level on its own line. The guide line is drawn
|
|
46
|
+
inside the branch, so the items sit on it without a negative margin. */
|
|
47
|
+
.sidebar-section-toggle { display: flex; width: 100%; min-height: var(--bh-size-control-default); align-items: center; gap: var(--bh-space-100); padding: 0 var(--bh-space-100) 0 var(--bh-space-150); border: 0; border-radius: var(--bh-radius-050); color: var(--c-ink); background: none; cursor: pointer; text-align: left; font: var(--bh-font-heading-xsmall); }
|
|
48
|
+
.sidebar-section-toggle:hover { background: var(--c-hover); }
|
|
49
|
+
.sidebar-section-toggle .sidebar-chevron { margin-left: auto; }
|
|
50
|
+
.sidebar-section-toggle[aria-expanded='true'] .sidebar-chevron { transform: rotate(90deg); }
|
|
51
|
+
.sidebar-branch { margin: var(--bh-space-050) 0 var(--bh-space-200) var(--bh-space-250); box-shadow: inset 1px 0 0 var(--c-line); }
|
|
52
|
+
/* Group names are not links: smaller, lighter, no hover, and a rule above each group after the
|
|
53
|
+
first, so they read as headings of the list below and never as one more page. */
|
|
54
|
+
.sidebar-branch .sidebar-group + .sidebar-group { margin-top: var(--bh-space-150); padding-top: var(--bh-space-150); border-top: 1px solid var(--c-line); }
|
|
55
|
+
.sidebar-branch .sidebar-label { margin: 0 0 var(--bh-space-050); padding: var(--bh-space-050) var(--bh-space-150) 0 var(--bh-space-200); color: var(--c-muted); cursor: default; user-select: none; font: var(--bh-font-label-small); }
|
|
56
|
+
/* Text 16 px from the guide line, measured from the outer edge with the 2 px bar included. */
|
|
57
|
+
.sidebar-branch .sidebar-item { padding: 0 var(--bh-space-150) 0 calc(var(--bh-space-200) - var(--bh-space-025)); border-left: var(--bh-border-width-selected) solid transparent; border-radius: 0 var(--bh-radius-050) var(--bh-radius-050) 0; }
|
|
58
|
+
.sidebar-branch .sidebar-item[aria-current='page'] { border-left-color: var(--c-gold); box-shadow: none; }
|
|
59
|
+
/* A closed folder that holds the current page keeps the gold bar, so the place is never lost. */
|
|
60
|
+
.sidebar-branch .sidebar-item[data-has-current][aria-expanded='false'] { border-left-color: var(--c-gold); }
|
|
61
|
+
.sidebar-branch[hidden], .sidebar-children[hidden] { display: none; }
|
|
62
|
+
.sidebar-children { margin: var(--bh-space-050) 0 var(--bh-space-050) var(--bh-space-200) !important; box-shadow: inset 1px 0 0 var(--c-line); }
|
|
63
|
+
.sidebar-child { padding: 0 var(--bh-space-150) 0 calc(var(--bh-space-150) - var(--bh-space-025)); border-left: var(--bh-border-width-selected) solid transparent; border-radius: 0 var(--bh-radius-050) var(--bh-radius-050) 0; }
|
|
64
|
+
.sidebar-child[aria-current='page'] { border-left-color: var(--c-gold); background: var(--c-selected); }
|
|
65
|
+
|
|
66
|
+
/* Scroll bars inside the sidebar and table of contents stay hidden until the pointer is over
|
|
67
|
+
them, then show as a thin line. The page's own scroll bar is left to the browser. */
|
|
68
|
+
.sidebar, .toc, .toc-menu nav { scrollbar-width: thin; scrollbar-color: transparent transparent; }
|
|
69
|
+
.sidebar:hover, .toc:hover, .toc-menu nav:hover { scrollbar-color: var(--c-line) transparent; }
|
|
70
|
+
.sidebar::-webkit-scrollbar, .toc::-webkit-scrollbar { width: 6px; }
|
|
71
|
+
.sidebar::-webkit-scrollbar-thumb, .toc::-webkit-scrollbar-thumb { border-radius: var(--bh-radius-050); background: transparent; }
|
|
72
|
+
.sidebar:hover::-webkit-scrollbar-thumb, .toc:hover::-webkit-scrollbar-thumb { background: var(--c-line); }
|
|
73
|
+
|
|
74
|
+
/* Table of contents. */
|
|
75
|
+
.toc { position: sticky; top: var(--header-bottom); align-self: start; display: none; max-height: calc(100vh - var(--header-bottom)); padding: var(--page-margin) 0; overflow-y: auto; }
|
|
76
|
+
.toc ul, .toc-menu ul { margin: 0; padding: 0; list-style: none; }
|
|
77
|
+
.toc-title { margin: 0 0 var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-heading-xsmall); }
|
|
78
|
+
.toc a { display: block; padding: var(--bh-space-050) 0 var(--bh-space-050) calc(var(--bh-space-150) - var(--bh-space-025)); border-left: 2px solid var(--c-line); color: var(--c-muted); text-decoration: none; font: var(--bh-font-label-default); }
|
|
79
|
+
.toc .toc-depth-3 a { padding-left: calc(var(--bh-space-300) - var(--bh-space-025)); }
|
|
80
|
+
.toc a:hover { color: var(--c-ink); }
|
|
81
|
+
.toc a[aria-current] { border-left-color: var(--c-gold); color: var(--c-ink); }
|
|
82
|
+
|
|
83
|
+
/* Main column. The page header and the text run the full column. */
|
|
84
|
+
.docs-main { min-width: 0; padding: var(--page-margin) 0 var(--bh-space-800); }
|
|
85
|
+
.docs-main p { color: inherit; }
|
|
86
|
+
.docs-header { padding-bottom: var(--bh-space-300); border-bottom: 1px solid var(--c-line); }
|
|
87
|
+
.docs-header:has(.component-tabs) { padding-bottom: 0; }
|
|
88
|
+
.breadcrumb ol { display: flex; flex-wrap: wrap; margin: 0 0 var(--bh-space-100); padding: 0; list-style: none; color: var(--c-muted); font: var(--bh-font-body-small); }
|
|
89
|
+
.breadcrumb li + li::before { content: '/'; margin: 0 var(--bh-space-100); }
|
|
90
|
+
.breadcrumb a { color: var(--c-muted); text-decoration: none; }
|
|
91
|
+
.breadcrumb a:hover { color: var(--c-ink); text-decoration: underline; }
|
|
92
|
+
.breadcrumb [aria-current] { color: var(--c-ink); }
|
|
93
|
+
.docs-header h1 { margin: 0 0 var(--bh-space-050); font: var(--bh-font-heading-xlarge); }
|
|
94
|
+
.docs-lede { margin: 0 0 var(--bh-space-200); color: var(--c-muted) !important; font: var(--bh-font-body-large); }
|
|
95
|
+
.docs-tags { display: flex; flex-wrap: wrap; align-items: center; gap: var(--bh-space-100) var(--bh-space-150); margin: 0; color: var(--c-muted) !important; font: var(--bh-font-body-small); }
|
|
96
|
+
|
|
97
|
+
/* Release phase chip. */
|
|
98
|
+
/* Release phase label, learned from GitHub Primer's Label: a pill with a 1 px border in the role
|
|
99
|
+
colour, text in the role's fg colour and no fill, 20 px tall. The words carry the meaning;
|
|
100
|
+
the colour only helps scanning. */
|
|
101
|
+
.status-badge { display: inline-flex; align-items: center; height: 20px; padding: 0 calc(var(--bh-space-100) - 1px); border: 1px solid var(--bh-color-border); border-radius: var(--bh-radius-full); color: var(--bh-color-text); background: transparent; text-decoration: none; white-space: nowrap; font: var(--bh-font-label-small); }
|
|
102
|
+
.status-badge.is-large { height: var(--bh-size-control-small); padding: 0 calc(var(--bh-space-100) - 1px); }
|
|
103
|
+
.status-early-access { border-color: var(--bh-color-border-brand); }
|
|
104
|
+
.status-beta { border-color: var(--bh-color-border-info); color: var(--bh-color-text-info); }
|
|
105
|
+
.status-ga { border-color: var(--bh-color-border-success); color: var(--bh-color-text-success); }
|
|
106
|
+
.status-deprecated { border-color: var(--bh-color-border-warning); color: var(--bh-color-text-warning); }
|
|
107
|
+
a.status-badge:hover { text-decoration: underline; }
|
|
108
|
+
|
|
109
|
+
/* Component tabs: the only in-page tabs on the site. */
|
|
110
|
+
.component-tabs { display: flex; gap: var(--bh-space-300); margin: var(--bh-space-300) 0 0; padding: 0; border-top: 0; color: inherit; overflow-x: auto; }
|
|
111
|
+
.component-tabs a { display: flex; align-items: center; height: var(--bh-size-control-default); padding: 0; border-bottom: var(--bh-border-width-selected) solid transparent; color: var(--c-muted); text-decoration: none; white-space: nowrap; font: var(--bh-font-label-default); }
|
|
112
|
+
.component-tabs a:hover { color: var(--c-ink); }
|
|
113
|
+
.component-tabs a[aria-current='page'] { border-bottom-color: var(--c-ink); color: var(--c-ink); }
|
|
114
|
+
|
|
115
|
+
/* Body text. */
|
|
116
|
+
.prose { container: prose / inline-size; padding-top: var(--bh-space-300); font: var(--bh-font-body-large); }
|
|
117
|
+
.prose > :first-child { margin-top: 0; }
|
|
118
|
+
.prose p, .prose li { color: var(--c-ink); }
|
|
119
|
+
.prose p { margin: 0 0 var(--bh-space-200); }
|
|
120
|
+
.prose ul, .prose ol { margin: 0 0 var(--bh-space-200); padding-left: var(--bh-space-300); }
|
|
121
|
+
.prose li + li { margin-top: var(--bh-space-050); }
|
|
122
|
+
.prose h2 { margin: var(--bh-space-600) 0 var(--bh-space-250); font: var(--bh-font-heading-large); } /* 20 px between a section heading and its content */
|
|
123
|
+
.prose h3 { margin: var(--bh-space-400) 0 var(--bh-space-150); font: var(--bh-font-heading-medium); }
|
|
124
|
+
.prose h4 { margin: var(--bh-space-300) 0 var(--bh-space-100); font: var(--bh-font-heading-small); }
|
|
125
|
+
.prose a { color: var(--c-link); text-underline-offset: 2px; }
|
|
126
|
+
.prose :not(pre) > code { overflow-wrap: anywhere; padding: 0 var(--bh-space-050); border-radius: var(--bh-radius-050); background: var(--c-surf); font-family: var(--bh-font-family-mono); }
|
|
127
|
+
.prose pre { margin: 0 0 var(--bh-space-200); padding: var(--bh-space-200); border-radius: var(--bh-radius-100); overflow-x: auto; font: var(--bh-font-code-default); }
|
|
128
|
+
.prose pre.astro-code { background-color: var(--c-code-bg) !important; } /* Shiki writes its own background inline */
|
|
129
|
+
.prose pre code { font: inherit; } /* the browser sets code to its own monospace */
|
|
130
|
+
.prose kbd { padding: 0 var(--bh-space-050); border: 1px solid var(--c-line); border-radius: var(--bh-radius-050); background: var(--c-surf); font: var(--bh-font-label-small); }
|
|
131
|
+
.prose table { width: 100%; margin: 0 0 var(--bh-space-200); border-collapse: collapse; font: var(--bh-font-body-default); }
|
|
132
|
+
.prose th, .prose td { padding: var(--bh-space-100) var(--bh-space-150); border-bottom: 1px solid var(--c-line); text-align: left; vertical-align: baseline; } /* first lines share a baseline, even when code sits next to text */
|
|
133
|
+
.prose th { color: var(--c-muted); font: var(--bh-font-label-small); }
|
|
134
|
+
.prose td code { overflow-wrap: anywhere; } /* long token names wrap instead of widening the page */
|
|
135
|
+
.prose blockquote, .callout { margin: 0 0 var(--bh-space-300); padding: calc(var(--bh-space-200) - 1px); border: 1px solid var(--c-note-line); border-radius: var(--bh-radius-100); background: var(--c-note-bg); }
|
|
136
|
+
.prose blockquote p, .callout p { margin: 0; }
|
|
137
|
+
.callout-title { margin-bottom: var(--bh-space-050) !important; font: var(--bh-font-heading-xsmall); }
|
|
138
|
+
|
|
139
|
+
.table-wrap { overflow-x: auto; }
|
|
140
|
+
.token-value { display: inline-flex; align-items: center; gap: var(--bh-space-100); }
|
|
141
|
+
.token-value > code { align-self: baseline; } /* the value, not the swatch, sets the baseline of the row */
|
|
142
|
+
.token-table td:nth-child(2) { min-width: 6.5rem; } /* short values such as 2.75rem stay on one line */
|
|
143
|
+
.token-resolved { display: block; color: var(--c-muted); font: var(--bh-font-body-small); }
|
|
144
|
+
.swatch { flex: none; width: 1rem; height: 1rem; border: 1px solid var(--c-line); border-radius: var(--bh-radius-050); }
|
|
145
|
+
.swatch-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: var(--bh-space-200); margin: var(--bh-space-300) 0; padding: 0 !important; list-style: none; font: var(--bh-font-body-small); }
|
|
146
|
+
.swatch-grid li { display: grid; gap: var(--bh-space-050); margin: 0 !important; }
|
|
147
|
+
.swatch-large { height: var(--bh-space-800); border: 1px solid var(--c-line); border-radius: var(--bh-radius-100); }
|
|
148
|
+
|
|
149
|
+
/* Cards. */
|
|
150
|
+
.card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-200); padding: 0 !important; list-style: none; }
|
|
151
|
+
.card-grid > li { margin: 0 !important; }
|
|
152
|
+
.card { display: block; height: 100%; padding: calc(var(--bh-space-300) - 1px); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); color: var(--c-ink) !important; text-decoration: none; transition: border-color 150ms ease, box-shadow 150ms ease; font: var(--bh-font-heading-small); }
|
|
153
|
+
.card:hover { border-color: var(--c-muted); box-shadow: var(--c-shadow); }
|
|
154
|
+
.card p { margin: var(--bh-space-050) 0 var(--bh-space-150); color: var(--c-muted) !important; font: var(--bh-font-body-default); }
|
|
155
|
+
.child-pages h2 { margin-top: var(--bh-space-500); }
|
|
156
|
+
|
|
157
|
+
/* Previous / next and page meta. */
|
|
158
|
+
.pager { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin-top: var(--bh-space-600); }
|
|
159
|
+
.pager-link { display: grid; gap: var(--bh-space-050); padding: calc(var(--bh-space-200) - 1px); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); color: var(--c-ink); text-decoration: none; }
|
|
160
|
+
.pager-link:hover { border-color: var(--c-muted); }
|
|
161
|
+
.pager-link span { color: var(--c-muted); font: var(--bh-font-body-small); }
|
|
162
|
+
.pager-link b { font: var(--bh-font-heading-small); }
|
|
163
|
+
.pager-next { text-align: right; }
|
|
164
|
+
.page-meta { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--bh-space-100) var(--bh-space-300); margin-top: var(--bh-space-300); padding-top: var(--bh-space-200); border-top: 1px solid var(--c-line); color: var(--c-muted); font: var(--bh-font-body-small); }
|
|
165
|
+
.page-meta a { color: var(--c-muted); }
|
|
166
|
+
.page-meta a:hover { color: var(--c-ink); }
|
|
167
|
+
|
|
168
|
+
/* Pages listed before their content is written. */
|
|
169
|
+
.in-development { display: flex; gap: var(--bh-space-200); padding: calc(var(--bh-space-300) - 1px); border: 1px dashed var(--c-muted); border-radius: var(--bh-radius-150); background: var(--c-surf); }
|
|
170
|
+
.in-development-icon { flex: none; display: grid; place-items: center; width: var(--bh-space-500); height: var(--bh-space-500); border-radius: var(--bh-radius-100); color: var(--bh-color-text-on-brand); background: var(--bh-color-background-brand-subtle); box-shadow: inset 0 0 0 1px var(--bh-color-border-brand-subtle); }
|
|
171
|
+
.in-development p { margin: 0 0 var(--bh-space-100); }
|
|
172
|
+
.in-development p:last-child { margin-bottom: 0; }
|
|
173
|
+
.in-development-title { font: var(--bh-font-heading-small); }
|
|
174
|
+
.in-development-label { margin-top: var(--bh-space-150) !important; color: var(--c-muted) !important; font: var(--bh-font-heading-xsmall); }
|
|
175
|
+
.in-development ul { margin: 0 0 var(--bh-space-150); }
|
|
176
|
+
|
|
177
|
+
/* Component examples. The preview follows the page theme, so it shows the component in both. */
|
|
178
|
+
.code-example { margin: var(--bh-space-300) 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
|
|
179
|
+
.code-example figcaption { padding: var(--bh-space-100) var(--bh-space-200); border-bottom: 1px solid var(--c-line); font: var(--bh-font-heading-xsmall); }
|
|
180
|
+
.code-preview { display: flex; flex-wrap: wrap; gap: var(--bh-space-150); align-items: center; padding: var(--bh-space-400) var(--bh-space-300); background: var(--bh-color-surface-subtle); }
|
|
181
|
+
.prose .code-example pre { margin: 0; border-radius: var(--bh-radius-0); }
|
|
182
|
+
|
|
183
|
+
/* Demo styles for component examples, until the component library ships. */
|
|
184
|
+
.bh-button { display: inline-flex; align-items: center; gap: var(--bh-space-050); height: var(--bh-size-control-default); padding: 0 calc(var(--bh-space-150) - var(--bh-border-width-default)); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-100); background: var(--bh-color-surface-page); color: var(--bh-color-text); cursor: pointer; transition: background var(--bh-motion-duration-fast) var(--bh-motion-easing-standard); font: var(--bh-font-label-default); }
|
|
185
|
+
.bh-button:hover { background: var(--bh-color-background-neutral-subtle-hover); }
|
|
186
|
+
.bh-button:focus-visible { outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus); outline-offset: var(--bh-state-focus-offset); }
|
|
187
|
+
.bh-button-primary { border-color: var(--bh-color-background-neutral-bold); background: var(--bh-color-background-neutral-bold); color: var(--bh-color-text-inverse); }
|
|
188
|
+
.bh-button-primary:hover { border-color: var(--bh-color-background-neutral-bold-hover); background: var(--bh-color-background-neutral-bold-hover); }
|
|
189
|
+
.bh-button-danger { border-color: var(--bh-color-background-danger-bold); background: var(--bh-color-background-danger-bold); color: var(--bh-color-text-on-bold); }
|
|
190
|
+
.bh-button-danger:hover { border-color: var(--bh-color-background-danger-bold-hover); background: var(--bh-color-background-danger-bold-hover); }
|
|
191
|
+
.bh-button:disabled, .bh-button:disabled:hover { border-color: var(--bh-color-border-disabled); color: var(--bh-color-text-disabled); background: var(--bh-color-background-disabled); cursor: not-allowed; }
|
|
192
|
+
|
|
193
|
+
/* Label and state label, learned from GitHub Primer (@primer/react Label and StateLabel).
|
|
194
|
+
Label: outlined pill, 1 px border in the role's emphasis colour, text in its fg colour, no
|
|
195
|
+
fill; 20 px tall with 6 px padding (large: 24 px, 8 px). State label: solid emphasis fill,
|
|
196
|
+
white text and an icon. */
|
|
197
|
+
.bh-label { display: inline-flex; align-items: center; height: 20px; padding: 0 calc(var(--bh-space-100) - 1px); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-full); color: var(--bh-color-text); background: transparent; white-space: nowrap; font: var(--bh-font-label-small); }
|
|
198
|
+
.bh-label.is-large { height: var(--bh-size-control-small); padding: 0 calc(var(--bh-space-100) - 1px); }
|
|
199
|
+
.bh-label.is-brand { border-color: var(--bh-color-border-brand); }
|
|
200
|
+
.bh-label.is-info { border-color: var(--bh-color-border-info); color: var(--bh-color-text-info); }
|
|
201
|
+
.bh-label.is-success { border-color: var(--bh-color-border-success); color: var(--bh-color-text-success); }
|
|
202
|
+
.bh-label.is-warning { border-color: var(--bh-color-border-warning); color: var(--bh-color-text-warning); }
|
|
203
|
+
.bh-label.is-danger { border-color: var(--bh-color-border-danger); color: var(--bh-color-text-danger); }
|
|
204
|
+
.bh-label.is-neutral { border-color: var(--bh-color-border-bold); color: var(--bh-color-text-subtle); }
|
|
205
|
+
.bh-state { display: inline-flex; align-items: center; gap: var(--bh-space-050); height: var(--bh-size-control-default); padding: 0 var(--bh-space-150); border-radius: var(--bh-radius-full); color: var(--bh-color-text-on-bold); white-space: nowrap; font: var(--bh-font-heading-xsmall); }
|
|
206
|
+
.bh-state svg { flex: none; }
|
|
207
|
+
.bh-state.is-info { background: var(--bh-color-background-info-bold); }
|
|
208
|
+
.bh-state.is-success { background: var(--bh-color-background-success-bold); }
|
|
209
|
+
.bh-state.is-warning { background: var(--bh-color-background-warning-bold); }
|
|
210
|
+
.bh-state.is-danger { background: var(--bh-color-background-danger-bold); }
|
|
211
|
+
.bh-state.is-neutral { color: var(--bh-color-text-inverse); background: var(--bh-color-background-neutral-bold); }
|
|
212
|
+
|
|
213
|
+
.news-list { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0; padding: 0 !important; list-style: none; }
|
|
214
|
+
@container prose (min-width: 600px) { .news-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
|
|
215
|
+
.news-list > li { margin: 0 !important; }
|
|
216
|
+
.news-list time { color: var(--c-muted); font: var(--bh-font-body-small); }
|
|
217
|
+
|
|
218
|
+
/* Below lg (1024 px) the side navigation is a drawer and a bar under the header opens it and
|
|
219
|
+
the folded table of contents. */
|
|
220
|
+
.docs-mobilebar { position: sticky; z-index: 50; top: var(--header-bottom); box-sizing: content-box; display: flex; align-items: center; justify-content: space-between; gap: var(--bh-space-150); height: var(--header-h); padding: 0 var(--page-margin); border-bottom: 1px solid var(--c-line); background: var(--c-bg); font: var(--bh-font-label-default); }
|
|
221
|
+
.drawer-open { display: flex; align-items: center; gap: var(--bh-space-050); min-width: 0; height: var(--bh-size-control-default); padding: 0; border: 0; color: var(--c-ink); background: none; font: inherit; cursor: pointer; }
|
|
222
|
+
.drawer-open-label { overflow: hidden; color: var(--c-muted); text-overflow: ellipsis; white-space: nowrap; }
|
|
223
|
+
.drawer-open-label b { color: var(--c-ink); }
|
|
224
|
+
.toc-menu { position: relative; flex: none; }
|
|
225
|
+
.toc-menu summary { display: flex; align-items: center; height: var(--bh-size-control-default); color: var(--c-muted); cursor: pointer; list-style: none; }
|
|
226
|
+
.toc-menu summary::-webkit-details-marker { display: none; }
|
|
227
|
+
.toc-menu summary::after { content: ' ▾'; }
|
|
228
|
+
.toc-menu nav { position: absolute; top: calc(100% + var(--bh-space-050)); right: 0; width: min(300px, calc(100vw - 2 * var(--page-margin))); max-height: 60vh; padding: var(--bh-space-100); overflow-y: auto; border: 1px solid var(--c-line); border-radius: var(--bh-radius-100); background: var(--c-bg); box-shadow: var(--c-shadow); }
|
|
229
|
+
.toc-menu a { display: flex; align-items: center; min-height: var(--bh-size-control-default); padding: 0 var(--bh-space-150); border-radius: var(--bh-radius-050); color: var(--c-ink); text-decoration: none; font: var(--bh-font-label-default); }
|
|
230
|
+
.toc-menu .toc-depth-3 a { padding-left: var(--bh-space-300); color: var(--c-muted); }
|
|
231
|
+
.toc-menu a:hover { background: var(--c-hover); }
|
|
232
|
+
|
|
233
|
+
.sidebar { position: fixed; z-index: 120; top: 0; bottom: 0; left: 0; width: min(var(--sidebar-w), 86vw); height: auto; border-right: 1px solid var(--c-line); box-shadow: var(--c-shadow); transform: translateX(-105%); transition: transform 200ms ease; visibility: hidden; }
|
|
234
|
+
body[data-drawer] .sidebar { transform: none; visibility: visible; }
|
|
235
|
+
.drawer-backdrop { display: none; }
|
|
236
|
+
.drawer-backdrop:not([hidden]) { position: fixed; z-index: 110; inset: 0; display: block; background: var(--bh-color-surface-scrim); }
|
|
237
|
+
|
|
238
|
+
/* Tables marked stackable are one card per row in a narrow column, and a table once the column is 720 px wide. */
|
|
239
|
+
.prose table.stackable, .prose table.stackable tbody, .prose table.stackable tr, .prose table.stackable td { display: block; width: 100%; }
|
|
240
|
+
.prose table.stackable thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
|
|
241
|
+
.prose table.stackable tr { margin-bottom: var(--bh-space-150); padding: var(--bh-space-050) 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-100); }
|
|
242
|
+
/* The cell stays one block, so text, code and links inside it flow as one line of text; the label sits in the left column. */
|
|
243
|
+
.prose table.stackable td { position: relative; display: block; min-height: var(--bh-space-500); padding: var(--bh-space-100) var(--bh-space-150) var(--bh-space-100) calc(7rem + 2 * var(--bh-space-150)); border: 0; }
|
|
244
|
+
.prose table.stackable td::before { content: attr(data-label); position: absolute; top: var(--bh-space-100); left: var(--bh-space-150); width: 7rem; color: var(--c-muted); font: var(--bh-font-label-small); }
|
|
245
|
+
@container prose (min-width: 720px) {
|
|
246
|
+
.prose table.stackable { display: table; }
|
|
247
|
+
.prose table.stackable thead { position: static; width: auto; height: auto; overflow: visible; clip-path: none; display: table-header-group; }
|
|
248
|
+
.prose table.stackable tbody { display: table-row-group; width: auto; }
|
|
249
|
+
.prose table.stackable tr { display: table-row; width: auto; margin: 0; padding: 0; border: 0; border-radius: var(--bh-radius-0); }
|
|
250
|
+
.prose table.stackable td { display: table-cell; width: auto; min-height: 0; padding: var(--bh-space-100) var(--bh-space-150); border-bottom: 1px solid var(--c-line); }
|
|
251
|
+
.prose table.stackable td::before { content: none; }
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/* md (768 px): previous and next side by side. */
|
|
255
|
+
@media (min-width: 768px) {
|
|
256
|
+
.pager { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
257
|
+
.pager-next { grid-column: 2; }
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* lg (1024 px): the side navigation is open at 280 px beside the page. */
|
|
261
|
+
@media (min-width: 1024px) {
|
|
262
|
+
.docs-grid { grid-template-columns: var(--sidebar-w) minmax(0, 1fr); }
|
|
263
|
+
.docs-grid.no-sidebar { grid-template-columns: minmax(0, 1fr); }
|
|
264
|
+
.docs-mobilebar { display: none; }
|
|
265
|
+
.sidebar { position: sticky; z-index: auto; top: var(--header-bottom); bottom: auto; width: auto; height: calc(100vh - var(--header-bottom)); box-shadow: none; transform: none; transition: none; visibility: visible; }
|
|
266
|
+
.sidebar-head { display: none; }
|
|
267
|
+
.drawer-backdrop:not([hidden]) { display: none; }
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/* xl (1440 px): the table of contents stands beside the content. */
|
|
271
|
+
@media (min-width: 1440px) {
|
|
272
|
+
.docs-body { --group-w: calc(var(--content-w) + var(--bh-space-400) + 14rem); grid-template-columns: minmax(0, var(--content-w)) 14rem; column-gap: var(--bh-space-400); }
|
|
273
|
+
.docs-grid.no-toc .docs-body { --group-w: var(--content-w); grid-template-columns: minmax(0, var(--content-w)); }
|
|
274
|
+
.toc { display: block; }
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
@media (prefers-reduced-motion: reduce) {
|
|
278
|
+
.sidebar, .sidebar-chevron { transition: none; }
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/* Get started. */
|
|
282
|
+
.role-cards { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin-bottom: var(--bh-space-200); }
|
|
283
|
+
.role-card { padding: calc(var(--bh-space-300) - 1px); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
|
|
284
|
+
.prose .role-card h3 { margin: 0 0 var(--bh-space-050); font: var(--bh-font-heading-small); }
|
|
285
|
+
.prose .role-card h3 a { color: var(--c-ink); text-decoration: none; }
|
|
286
|
+
.prose .role-card h3 a:hover { text-decoration: underline; }
|
|
287
|
+
.prose .role-card p { margin: 0 0 var(--bh-space-150); color: var(--c-muted); font: var(--bh-font-body-default); }
|
|
288
|
+
.prose .role-card ul { margin: 0; padding: var(--bh-space-150) 0 0; border-top: 1px solid var(--c-line); list-style: none; }
|
|
289
|
+
.prose .role-card li { margin: 0; font: var(--bh-font-body-default); }
|
|
290
|
+
.prose .role-card li + li { margin-top: var(--bh-space-050); }
|
|
291
|
+
.area-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
292
|
+
.card-meta { color: var(--c-muted); font: var(--bh-font-label-small); }
|
|
293
|
+
.prose .help-list { display: grid; gap: 0; margin: 0 0 var(--bh-space-200); padding: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); list-style: none; }
|
|
294
|
+
.prose .help-list li { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-050); margin: 0; padding: var(--bh-space-150) var(--bh-space-200); }
|
|
295
|
+
.prose .help-list li + li { border-top: 1px solid var(--c-line); }
|
|
296
|
+
.help-list b { }
|
|
297
|
+
.help-list span { color: var(--c-muted); }
|
|
298
|
+
|
|
299
|
+
/* Dark button, used for downloads. */
|
|
300
|
+
.prose .button-dark { display: inline-flex; flex: none; align-items: center; justify-content: center; height: var(--bh-size-control-large); padding: 0 var(--bh-space-200); border-radius: var(--bh-radius-100); color: var(--bh-color-text-inverse); background: var(--bh-color-background-neutral-bold); text-decoration: none; font: var(--bh-font-label-default); }
|
|
301
|
+
.prose .button-dark:hover { background: var(--bh-color-background-neutral-bold-hover); }
|
|
302
|
+
|
|
303
|
+
/* Inside the content column: these follow the column's width (container queries). */
|
|
304
|
+
@container prose (min-width: 600px) {
|
|
305
|
+
.role-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
|
306
|
+
.prose .help-list li { grid-template-columns: 11.25rem minmax(0, 1fr); gap: var(--bh-space-150); }
|
|
307
|
+
}
|
|
308
|
+
@container prose (min-width: 760px) { .area-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
|
|
309
|
+
/* A 40 px button on small screens, the default 32 px from md. */
|
|
310
|
+
@media (min-width: 768px) { .prose .button-dark { justify-content: flex-start; height: var(--bh-size-control-default); padding: 0 var(--bh-space-150); } }
|
|
311
|
+
/* Under /vi/, a page shown in English says so above its title. */
|
|
312
|
+
.lang-notice { margin: 0 0 var(--bh-space-150); padding: calc(var(--bh-space-100) - 1px) calc(var(--bh-space-150) - 1px); border: 1px solid var(--c-note-line); border-radius: var(--bh-radius-100); color: var(--c-ink); background: var(--c-note-bg); font: var(--bh-font-body-default); }
|
|
313
|
+
|
|
314
|
+
/* Moving between pages: the page fades across instead of flashing white, while the header and
|
|
315
|
+
the sidebar stay put (cross-document view transitions; browsers without them load as before). */
|
|
316
|
+
@view-transition { navigation: auto; }
|
|
317
|
+
.site-header { view-transition-name: site-header; }
|
|
318
|
+
.sidebar { view-transition-name: docs-sidebar; }
|
|
319
|
+
::view-transition-group(site-header), ::view-transition-group(docs-sidebar) { animation: none; }
|
|
320
|
+
::view-transition-old(site-header), ::view-transition-old(docs-sidebar) { display: none; }
|
|
321
|
+
::view-transition-new(site-header), ::view-transition-new(docs-sidebar) { animation: none; }
|
|
322
|
+
::view-transition-old(root), ::view-transition-new(root) { animation-duration: 160ms; }
|
|
323
|
+
@media (prefers-reduced-motion: reduce) { @view-transition { navigation: none; } }
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* Fonts are served from this site (public/fonts, SIL Open Font License), not from the Google Fonts
|
|
2
|
+
API: no third-party request, and the API's files drop Inter's cv05, cv08, ss02 and zero features.
|
|
3
|
+
Inter is the Google Fonts repository build (github.com/google/fonts, ofl/inter, v4.001): hinted
|
|
4
|
+
for small text on Windows, with the optical size axis (opsz 14–32, Inter Display at large sizes)
|
|
5
|
+
and every OpenType feature, cut into the three unicode ranges below with pyftsubset.
|
|
6
|
+
JetBrains Mono comes from Fontsource (v5.3.0: Vietnamese, Latin Extended and Latin). The Latin file is
|
|
7
|
+
preloaded in BaseLayout so text usually draws in Inter on the first paint.
|
|
8
|
+
*/
|
|
9
|
+
@font-face { font-family: Inter; font-style: normal; font-weight: 100 900; font-display: swap; src: url(/fonts/inter-vietnamese-opsz-wght-normal.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
|
|
10
|
+
@font-face { font-family: Inter; font-style: normal; font-weight: 100 900; font-display: swap; src: url(/fonts/inter-latin-ext-opsz-wght-normal.woff2) format('woff2'); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; }
|
|
11
|
+
@font-face { font-family: Inter; font-style: normal; font-weight: 100 900; font-display: swap; src: url(/fonts/inter-latin-opsz-wght-normal.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
|
|
12
|
+
@font-face { font-family: Inter; font-style: italic; font-weight: 100 900; font-display: swap; src: url(/fonts/inter-vietnamese-opsz-wght-italic.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
|
|
13
|
+
@font-face { font-family: Inter; font-style: italic; font-weight: 100 900; font-display: swap; src: url(/fonts/inter-latin-ext-opsz-wght-italic.woff2) format('woff2'); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; }
|
|
14
|
+
@font-face { font-family: Inter; font-style: italic; font-weight: 100 900; font-display: swap; src: url(/fonts/inter-latin-opsz-wght-italic.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
|
|
15
|
+
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 100 800; font-display: swap; src: url(/fonts/jetbrains-mono-vietnamese-wght-normal.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
|
|
16
|
+
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 100 800; font-display: swap; src: url(/fonts/jetbrains-mono-latin-ext-wght-normal.woff2) format('woff2'); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; }
|
|
17
|
+
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 100 800; font-display: swap; src: url(/fonts/jetbrains-mono-latin-wght-normal.woff2) format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
|
|
18
|
+
|
|
19
|
+
:root {
|
|
20
|
+
color: var(--bh-color-text);
|
|
21
|
+
background: var(--bh-color-surface-page);
|
|
22
|
+
font-family: var(--bh-font-family-sans);
|
|
23
|
+
font-synthesis: none;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
* { box-sizing: border-box; }
|
|
27
|
+
html { scroll-behavior: smooth; scroll-padding-top: var(--bh-space-1000); scrollbar-gutter: stable; } /* stable: the header does not shift between short and long pages */
|
|
28
|
+
|
|
29
|
+
/* Page to page: no cross-fade. A cross-document view transition was tried on 23/10/2026 and
|
|
30
|
+
dropped: on a page's first (slow) load Chrome showed the new page, then the old snapshot,
|
|
31
|
+
then the new page again. Pages are prefetched instead (astro.config.mjs), and Chrome keeps
|
|
32
|
+
the old page on screen until the new one is ready, so the swap is direct. */
|
|
33
|
+
/* The text style goes on body, not on :root: the root font size must stay the reader's own
|
|
34
|
+
(16 px by default), because every size token is in rem. */
|
|
35
|
+
body { margin: 0; min-width: 320px; overflow-x: hidden; font: var(--bh-font-body-default); }
|
|
36
|
+
/* Bold inside text is semibold: 700 belongs to the display styles only. */
|
|
37
|
+
/* Inter character variants, on everywhere (decided 27/10/2026): cv05 gives lowercase l a tail and
|
|
38
|
+
cv08 gives uppercase I serifs, so l, I and 1 never look alike in names, IDs and keys.
|
|
39
|
+
Every text style is applied with the `font` shorthand, and the shorthand resets
|
|
40
|
+
font-feature-settings to normal, so inheritance alone can't carry the features. This rule sets
|
|
41
|
+
them on every element from one variable; change the variable, not the property:
|
|
42
|
+
`--bh-font-features: "cv05", "cv08", "zero"` adds the slashed zero to a code value.
|
|
43
|
+
JetBrains Mono has no cv05 or cv08, so code is not affected. */
|
|
44
|
+
:root { --bh-font-features: "cv05", "cv08"; }
|
|
45
|
+
*, ::before, ::after { font-feature-settings: var(--bh-font-features) !important; }
|
|
46
|
+
b, strong { font-weight: var(--bh-font-weight-semibold); }
|
|
47
|
+
h1, h2, h3, h4, h5, h6 { font-weight: var(--bh-font-weight-semibold); }
|
|
48
|
+
code, kbd, pre, samp { font-family: var(--bh-font-family-mono); }
|
|
49
|
+
button, input { font: inherit; }
|
|
50
|
+
button, a { -webkit-tap-highlight-color: transparent; }
|
|
51
|
+
a { color: inherit; }
|
|
52
|
+
svg { display: block; }
|
|
53
|
+
|
|
54
|
+
.skip-link { position: fixed; z-index: 200; top: -5rem; left: 1rem; display: inline-flex; align-items: center; height: var(--bh-size-control-default); padding: 0 var(--bh-space-150); border-radius: var(--bh-radius-100); color: var(--bh-color-text-inverse); background: var(--bh-color-background-neutral-bold); font: var(--bh-font-label-default); }
|
|
55
|
+
.skip-link:focus { top: 1rem; }
|
|
56
|
+
h1, h2, h3, p { margin-top: 0; }
|
|
57
|
+
h1, h2, h3 { text-wrap: balance; }
|
|
58
|
+
|
|
59
|
+
/* Focus ring: blue, 2 px, offset 2 px (color.border.focus). The brand yellow is 1.85:1 on white,
|
|
60
|
+
below the 3:1 a focus indicator needs. */
|
|
61
|
+
:focus-visible { outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus); outline-offset: var(--bh-state-focus-offset); }
|
|
62
|
+
|
|
63
|
+
@media (prefers-reduced-motion: reduce) {
|
|
64
|
+
html { scroll-behavior: auto; }
|
|
65
|
+
*, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
|
|
66
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/* Icons pages: the icon library (IconBrowser.astro) and the illustrations (IconDemo.astro).
|
|
2
|
+
Colours are role tokens or the site variables; nothing here is a fixed colour. */
|
|
3
|
+
|
|
4
|
+
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
5
|
+
|
|
6
|
+
/* ---------- Library ---------- */
|
|
7
|
+
.ib { margin: 0 0 var(--bh-space-400); }
|
|
8
|
+
.ib-controls { position: sticky; z-index: 5; top: var(--header-bottom, 49px); display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--bh-space-150) var(--bh-space-200); padding: var(--bh-space-150) 0; border-bottom: 1px solid var(--c-line); background: var(--c-bg); }
|
|
9
|
+
.ib-search { position: relative; display: flex; align-items: center; flex: 1 1 280px; min-width: 0; }
|
|
10
|
+
.ib-search-icon { position: absolute; left: var(--bh-space-150); color: var(--bh-color-icon-subtle); pointer-events: none; }
|
|
11
|
+
.ib-search input { width: 100%; height: 40px; padding: 0 var(--bh-space-150) 0 var(--bh-space-400); border: 1px solid var(--bh-color-border-bold); border-radius: var(--bh-radius-100); color: var(--c-ink); background: var(--bh-color-surface); font: var(--bh-font-body-default); }
|
|
12
|
+
.ib-search input::placeholder { color: var(--bh-color-text-subtlest); }
|
|
13
|
+
.ib-field { display: grid; gap: var(--bh-space-050); color: var(--c-muted); font: var(--bh-font-label-small); }
|
|
14
|
+
/* Category select: the browser's own arrow sits at a fixed spot of its own, so it is replaced by the
|
|
15
|
+
Lucide chevron at the spacing tokens: 12 px from the edge, 16 px icon, 4 px to the text (as the search field). */
|
|
16
|
+
.ib-select { position: relative; display: flex; align-items: center; max-width: 100%; }
|
|
17
|
+
.ib-select-icon { position: absolute; right: var(--bh-space-150); color: var(--bh-color-icon-subtle); pointer-events: none; }
|
|
18
|
+
.ib-field select { appearance: none; -webkit-appearance: none; height: 40px; max-width: 100%; padding: 0 var(--bh-space-400) 0 var(--bh-space-150); border: 1px solid var(--bh-color-border-bold); border-radius: var(--bh-radius-100); color: var(--c-ink); background: var(--bh-color-surface); font: var(--bh-font-body-default); }
|
|
19
|
+
.ib-sizes { display: flex; }
|
|
20
|
+
.ib-size { position: relative; }
|
|
21
|
+
.ib-size input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer; }
|
|
22
|
+
.ib-size span { display: grid; place-items: center; min-width: 44px; height: 40px; padding: 0 var(--bh-space-100); border: 1px solid var(--bh-color-border-bold); color: var(--c-muted); background: var(--bh-color-surface); font: var(--bh-font-label-default); font-variant-numeric: tabular-nums; }
|
|
23
|
+
.ib-size + .ib-size span { margin-left: -1px; }
|
|
24
|
+
.ib-size:first-of-type span { border-radius: var(--bh-radius-100) 0 0 var(--bh-radius-100); }
|
|
25
|
+
.ib-size:last-of-type span { border-radius: 0 var(--bh-radius-100) var(--bh-radius-100) 0; }
|
|
26
|
+
.ib-size input:checked + span { position: relative; color: var(--bh-color-text-inverse); border-color: var(--bh-color-background-neutral-bold); background: var(--bh-color-background-neutral-bold); }
|
|
27
|
+
.ib-size input:focus-visible + span { position: relative; z-index: 1; outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus); outline-offset: var(--bh-state-focus-offset); }
|
|
28
|
+
.ib-size input:not(:checked):hover + span { background: var(--c-hover); }
|
|
29
|
+
|
|
30
|
+
.prose .ib-status { margin: var(--bh-space-200) 0 var(--bh-space-150); color: var(--c-muted); font: var(--bh-font-body-small); font-variant-numeric: tabular-nums; }
|
|
31
|
+
.prose .ib-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); gap: var(--bh-space-100); margin: 0; padding: 0; list-style: none; }
|
|
32
|
+
.prose .ib-grid li { margin: 0; padding: 0; content-visibility: auto; contain-intrinsic-size: auto 104px; }
|
|
33
|
+
.ib-icon { display: grid; grid-template-rows: 40px auto; justify-items: center; align-items: center; align-content: start; gap: var(--bh-space-075); width: 100%; height: 100%; min-height: 104px; padding: var(--bh-space-150) var(--bh-space-075) var(--bh-space-100); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); color: var(--bh-color-icon); background: var(--bh-color-surface); cursor: pointer; }
|
|
34
|
+
.ib-icon svg { width: var(--ib-size, 24px); height: var(--ib-size, 24px); }
|
|
35
|
+
.ib-name { display: -webkit-box; max-width: 100%; overflow: hidden; color: var(--c-muted); font: var(--bh-font-body-small); text-align: center; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; }
|
|
36
|
+
.ib-icon:hover { background: var(--c-hover); }
|
|
37
|
+
.ib-icon:hover .ib-name { color: var(--c-ink); }
|
|
38
|
+
.ib-icon[data-copied] { border-color: var(--bh-color-border-success); background: var(--bh-color-background-success-subtle); }
|
|
39
|
+
.ib-icon[data-copied] .ib-name { color: var(--bh-color-text-success); }
|
|
40
|
+
.prose .ib-empty { margin: var(--bh-space-300) 0; padding: var(--bh-space-300); border: 1px dashed var(--c-line); border-radius: var(--bh-radius-150); color: var(--c-muted); text-align: center; }
|
|
41
|
+
.ib-toast { position: fixed; z-index: 60; left: 50%; bottom: 24px; max-width: calc(100vw - 32px); padding: var(--bh-space-100) var(--bh-space-200); border-radius: var(--bh-radius-100); color: var(--bh-color-text-inverse); background: var(--bh-color-surface-inverse); box-shadow: var(--c-shadow); font: var(--bh-font-label-default); opacity: 0; transform: translate(-50%, 8px); transition: opacity 150ms ease, transform 150ms ease; pointer-events: none; }
|
|
42
|
+
.ib-toast:empty { padding: 0; }
|
|
43
|
+
.ib-toast[data-show] { opacity: 1; transform: translate(-50%, 0); }
|
|
44
|
+
.prose .ib-credit { margin: var(--bh-space-300) 0 0; color: var(--c-muted); font: var(--bh-font-body-small); }
|
|
45
|
+
@container prose (width < 640px) {
|
|
46
|
+
.ib-controls { position: static; padding: 0 0 var(--bh-space-150); }
|
|
47
|
+
.ib-search { flex-basis: 100%; }
|
|
48
|
+
.ib-field:has(select) { flex: 1 1 160px; }
|
|
49
|
+
.ib-field select, .ib-select { width: 100%; }
|
|
50
|
+
.prose .ib-grid { grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); }
|
|
51
|
+
}
|
|
52
|
+
@container prose (width < 400px) { .ib-field:has(select) { flex-basis: 100%; } }
|
|
53
|
+
|
|
54
|
+
/* ---------- Illustrations ---------- */
|
|
55
|
+
.ic-sizes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
|
|
56
|
+
.ic-size { display: grid; grid-template-rows: auto 1fr; margin: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
|
|
57
|
+
.ic-size-stage { display: grid; place-items: center; height: 96px; color: var(--bh-color-icon); background: var(--bh-color-surface-subtle); }
|
|
58
|
+
.ic-size figcaption { display: grid; align-content: start; gap: var(--bh-space-025); padding: var(--bh-space-150) var(--bh-space-200) var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-small); }
|
|
59
|
+
.ic-size figcaption b { color: var(--c-ink); font: var(--bh-font-heading-xsmall); }
|
|
60
|
+
.ic-meta { font-variant-numeric: tabular-nums; }
|
|
61
|
+
@container prose (min-width: 640px) { .ic-sizes { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
|
|
62
|
+
|
|
63
|
+
.ic-panels { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
|
|
64
|
+
.ic-panel { display: grid; grid-template-rows: auto 1fr; margin: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
|
|
65
|
+
.ic-panel-stage { display: grid; place-items: center; min-height: 112px; padding: var(--bh-space-300) var(--bh-space-200); background: var(--bh-color-surface-subtle); }
|
|
66
|
+
.ic-panel figcaption { padding: var(--bh-space-150) var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-default); }
|
|
67
|
+
.ic-panel figcaption b { color: var(--c-ink); }
|
|
68
|
+
@container prose (min-width: 640px) { .ic-panels { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
|
|
69
|
+
|
|
70
|
+
/* Alignment: a guide through the centre of the line box. */
|
|
71
|
+
.ic-line { position: relative; display: inline-flex; align-items: center; gap: var(--bh-space-050); padding: 0 var(--bh-space-100); color: var(--c-ink); font: var(--bh-font-label-default); }
|
|
72
|
+
.ic-line svg { color: var(--bh-color-icon); }
|
|
73
|
+
.ic-line.is-guided { box-shadow: inset 0 0 0 1px var(--bh-color-border-info-subtle); background: var(--bh-color-background-info-subtle); }
|
|
74
|
+
.ic-line.is-guided::before, .ic-line.is-guided::after { content: ''; position: absolute; top: 50%; width: 16px; border-top: 1px dashed var(--bh-color-border-info); }
|
|
75
|
+
.ic-line.is-guided::before { right: 100%; }
|
|
76
|
+
.ic-line.is-guided::after { left: 100%; }
|
|
77
|
+
.is-zoom > * { zoom: 2; }
|
|
78
|
+
.ic-multi { display: flex; align-items: flex-start; gap: var(--bh-space-100); max-width: 320px; color: var(--c-ink); font: var(--bh-font-body-default); }
|
|
79
|
+
.ic-multi-icon { display: flex; align-items: center; height: 1lh; box-shadow: inset 0 0 0 1px var(--bh-color-border-info-subtle); background: var(--bh-color-background-info-subtle); }
|
|
80
|
+
.ic-multi .is-warning { color: var(--bh-color-icon-warning); }
|
|
81
|
+
|
|
82
|
+
/* Spacing: the gap drawn as a coloured bar with its size. */
|
|
83
|
+
.ic-spaced { display: inline-flex; align-items: center; color: var(--c-ink); }
|
|
84
|
+
.ic-spaced svg { color: var(--bh-color-icon); }
|
|
85
|
+
.ic-spaced.is-16 { font: var(--bh-font-label-default); }
|
|
86
|
+
.ic-spaced.is-20 { font: var(--bh-font-body-large); }
|
|
87
|
+
.ic-gap { position: relative; align-self: stretch; min-height: 24px; background: var(--bh-color-background-danger-subtle); box-shadow: inset 1px 0 0 var(--bh-color-border-danger), inset -1px 0 0 var(--bh-color-border-danger); }
|
|
88
|
+
.is-16 .ic-gap { width: 4px; }
|
|
89
|
+
.is-20 .ic-gap { width: 8px; }
|
|
90
|
+
.ic-gap small { position: absolute; top: 100%; left: 50%; margin-top: var(--bh-space-050); color: var(--bh-color-text-danger); font: var(--bh-font-label-small); font-style: normal; transform: translateX(-50%); }
|
|
91
|
+
|
|
92
|
+
/* Target size */
|
|
93
|
+
.ic-target { position: relative; display: grid; place-items: center; border: 1px dashed var(--bh-color-border-info); border-radius: var(--bh-radius-100); color: var(--bh-color-icon); background: var(--bh-color-background-info-subtle); }
|
|
94
|
+
.ic-target.is-24 { width: 24px; height: 24px; }
|
|
95
|
+
.ic-target.is-32 { width: 32px; height: 32px; }
|
|
96
|
+
.ic-target small { position: absolute; left: 100%; margin-left: var(--bh-space-100); color: var(--bh-color-text-info); font: var(--bh-font-label-small); }
|
|
97
|
+
|
|
98
|
+
/* Common actions */
|
|
99
|
+
.prose .ic-actions td { vertical-align: middle; }
|
|
100
|
+
.prose .ic-actions code { white-space: nowrap; }
|
|
101
|
+
.ic-action-icon { display: inline-flex; align-items: center; gap: var(--bh-space-150); color: var(--bh-color-icon); }
|
|
102
|
+
|
|
103
|
+
/* Do / Don’t: same shape as the Color pages. */
|
|
104
|
+
.ic-dd { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
|
|
105
|
+
.ic-dd-panel { margin: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
|
|
106
|
+
.ic-dd-panel figcaption { padding: var(--bh-space-100) var(--bh-space-200); border-bottom: 2px solid; font: var(--bh-font-label-default); }
|
|
107
|
+
.ic-dd-panel.is-do figcaption { border-color: var(--bh-color-border-success); color: var(--bh-color-text-success); }
|
|
108
|
+
.ic-dd-panel.is-dont figcaption { border-color: var(--bh-color-border-danger); color: var(--bh-color-text-danger); }
|
|
109
|
+
.ic-dd-stage { display: grid; place-items: center; min-height: 112px; padding: var(--bh-space-200); color: var(--c-ink); background: var(--bh-color-surface-subtle); }
|
|
110
|
+
.ic-dd-panel p { margin: 0; padding: var(--bh-space-150) var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-default); }
|
|
111
|
+
.ic-dd-code { font: var(--bh-font-code-default); overflow-wrap: anywhere; }
|
|
112
|
+
.ic-dd-stage .bh-button svg { color: var(--bh-color-icon); }
|
|
113
|
+
@container prose (min-width: 640px) { .ic-dd { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
|
|
114
|
+
|
|
115
|
+
.ic-row { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--bh-space-100); }
|
|
116
|
+
.ic-row.is-icons { gap: var(--bh-space-200); color: var(--bh-color-icon); }
|
|
117
|
+
.ic-ibtn { display: inline-grid; place-items: center; width: 32px; height: 32px; border-radius: var(--bh-radius-100); color: var(--bh-color-icon); }
|
|
118
|
+
.ic-ibtn.is-outlined { border: 1px solid var(--bh-color-border); background: var(--bh-color-surface); }
|
|
119
|
+
.ic-bare { display: inline-grid; place-items: center; width: 16px; height: 16px; color: var(--bh-color-icon); outline: 1px dashed var(--bh-color-border-danger); outline-offset: 0; }
|
|
120
|
+
.ic-text14 { display: inline-flex; align-items: center; gap: var(--bh-space-050); color: var(--c-ink); font: var(--bh-font-body-default); }
|
|
121
|
+
.ic-text14 svg { color: var(--bh-color-icon); }
|
|
122
|
+
.ic-text14.is-big { gap: var(--bh-space-100); }
|
|
123
|
+
.ic-text14.is-danger { color: var(--bh-color-text-danger); }
|
|
124
|
+
.ic-text14.is-danger svg { color: var(--bh-color-icon-danger); }
|
|
125
|
+
.ic-text14.is-baseline { display: inline-block; }
|
|
126
|
+
.ic-text14.is-baseline svg { display: inline; margin-right: var(--bh-space-050); vertical-align: baseline; }
|
|
127
|
+
.ic-text14 .is-decor { color: var(--bh-color-border-brand); }
|
|
128
|
+
.ic-nav { display: grid; gap: var(--bh-space-025); width: 180px; }
|
|
129
|
+
.ic-nav-item { position: relative; display: flex; align-items: center; gap: var(--bh-space-100); height: 32px; padding: 0 var(--bh-space-150); border-radius: var(--bh-radius-100); color: var(--c-ink); font: var(--bh-font-label-default); }
|
|
130
|
+
.ic-nav-item svg { color: var(--bh-color-icon); }
|
|
131
|
+
.ic-nav-item.is-selected { background: var(--bh-color-background-selected); }
|
|
132
|
+
.ic-nav-item.is-selected::before { content: ''; position: absolute; left: 0; top: 6px; bottom: 6px; width: var(--bh-border-width-selected); border-radius: var(--bh-radius-025); background: var(--bh-color-border-selected); }
|
|
133
|
+
.ic-tip-wrap { display: grid; justify-items: center; gap: var(--bh-space-075); }
|
|
134
|
+
.ic-tip { position: relative; padding: var(--bh-space-050) var(--bh-space-100); border-radius: var(--bh-radius-050); color: var(--bh-color-text-inverse); background: var(--bh-color-surface-inverse); font: var(--bh-font-label-small); }
|
|
135
|
+
.ic-tip::after { content: ''; position: absolute; left: 50%; top: 100%; border: 4px solid transparent; border-top-color: var(--bh-color-surface-inverse); transform: translateX(-50%); }
|