@beehexa/design-rules 0.0.0-stage → 2611.3.3
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 +36 -4
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Product logos
|
|
3
|
+
description: Logos for Beehexa products, starting with HexaSync, and when to use them instead of the company logo.
|
|
4
|
+
order: 3
|
|
5
|
+
audience: product, marketing
|
|
6
|
+
owner: Brand
|
|
7
|
+
updated: 2026-10-23
|
|
8
|
+
---
|
|
9
|
+
import LogoPair from '../../../../components/logos/LogoPair.astro';
|
|
10
|
+
import LogoInUse from '../../../../components/logos/LogoInUse.astro';
|
|
11
|
+
|
|
12
|
+
## HexaSync
|
|
13
|
+
|
|
14
|
+
<LogoPair kind="hexasync" name="HexaSync" />
|
|
15
|
+
|
|
16
|
+
The HexaSync lockup is built exactly like the company lockup: the same icon, the product name in Inter Display at the same weight, 500, the same spacing and the same [clear space](/foundations/styles/logos/using-the-logo/#clear-space). The tail of the “y” hangs below the icon.
|
|
17
|
+
|
|
18
|
+
All the rules on [Using the logo](/foundations/styles/logos/using-the-logo/) apply: four colour versions, minimum size, misuse.
|
|
19
|
+
|
|
20
|
+
## Which logo where
|
|
21
|
+
|
|
22
|
+
| Where | Logo |
|
|
23
|
+
|---|---|
|
|
24
|
+
| Inside the HexaSync web app | HexaSync |
|
|
25
|
+
| HexaSync product pages, connector listings and marketplaces | HexaSync |
|
|
26
|
+
| Company website, contracts, invoices, recruiting, social media | beehexa |
|
|
27
|
+
| Material about several products | beehexa |
|
|
28
|
+
|
|
29
|
+
Never place the beehexa and HexaSync logos side by side: they share the icon, so the pair reads as a mistake. Pick one by context.
|
|
30
|
+
|
|
31
|
+
## HexaSync in use
|
|
32
|
+
|
|
33
|
+
- **App bar:** the dark version on a graphite bar, at the left, linking to the product home.
|
|
34
|
+
- **Sign-in and empty screens:** the colour version, centred above the content.
|
|
35
|
+
- **Marketplaces and connector listings:** the app icon tile with “HexaSync” written as text next to it. Listings crop to a square, so the lockup doesn't fit there.
|
|
36
|
+
|
|
37
|
+
<LogoInUse only={['app', 'login', 'marketplace']} />
|
|
38
|
+
|
|
39
|
+
## Icons and containers
|
|
40
|
+
|
|
41
|
+
A product has no icon of its own. HexaSync uses the Beehexa icon files for its favicon, app icon and avatar, built with the [3-side rule](/foundations/styles/logos/placement-and-containers/#the-icon-in-a-tile-the-3-side-rule). The product name goes in the app name, the page title and the alt text, never inside the icon.
|
|
42
|
+
|
|
43
|
+
## Spelling
|
|
44
|
+
|
|
45
|
+
- The company logo is lowercase: “beehexa”.
|
|
46
|
+
- A product logo keeps the product's own spelling: “HexaSync”, one word, capital H and S.
|
|
47
|
+
|
|
48
|
+
## A new product logo
|
|
49
|
+
|
|
50
|
+
Every product lockup today uses the Beehexa icon with the product name next to it. To get one for a new product:
|
|
51
|
+
|
|
52
|
+
1. Write to the Brand owner at [hello@beehexa.com](mailto:hello@beehexa.com?subject=New%20product%20logo) with the product name as it will be written.
|
|
53
|
+
2. Brand builds the lockup from the masters: the icon, the name in Inter Display, outlined, at the chosen weight, with the same spacing.
|
|
54
|
+
3. The files are added to the [package](/foundations/styles/logos/downloads-and-terms/).
|
|
55
|
+
|
|
56
|
+
Don't draw a product logo yourself, and don't give a product an icon of its own.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Using the logo
|
|
3
|
+
description: Colour versions, backgrounds, clear space, minimum size, the icon on its own and what not to do.
|
|
4
|
+
order: 1
|
|
5
|
+
audience: everyone who places the logo
|
|
6
|
+
owner: Brand
|
|
7
|
+
updated: 2026-10-23
|
|
8
|
+
---
|
|
9
|
+
import LogoColourVersions from '../../../../components/logos/LogoColourVersions.astro';
|
|
10
|
+
import LogoClearSpace from '../../../../components/logos/LogoClearSpace.astro';
|
|
11
|
+
import LogoMinSize from '../../../../components/logos/LogoMinSize.astro';
|
|
12
|
+
import LogoMisuse from '../../../../components/logos/LogoMisuse.astro';
|
|
13
|
+
|
|
14
|
+
## Colour versions
|
|
15
|
+
|
|
16
|
+
Four versions made from three colours: yellow #FCB017, graphite #2B2A28 and white. Pick the one with the most contrast against your background.
|
|
17
|
+
|
|
18
|
+
<LogoColourVersions />
|
|
19
|
+
|
|
20
|
+
WCAG does not set a contrast minimum for logos (Understanding 1.4.3 and 1.4.11), but a logo nobody can see is not remembered. We place every version where it stands out, aiming for the 3 : 1 that WCAG sets for other graphics. That is why the yellow icon does not stand alone on a light background; the favicon is the one exception (see [the icon on its own](#the-icon-on-its-own)).
|
|
21
|
+
|
|
22
|
+
## Clear space
|
|
23
|
+
|
|
24
|
+
Keep an empty margin of **x** on all four sides: no text, images or page edges inside it. x is the x-height of the wordmark, the height of its lowercase letters, and it is exactly one side of the hexagon. Because x is part of the logo, the margin grows and shrinks with it.
|
|
25
|
+
|
|
26
|
+
<LogoClearSpace />
|
|
27
|
+
|
|
28
|
+
The master files already include this margin in their artboard. Align the artboard, not the artwork, and the space comes for free.
|
|
29
|
+
|
|
30
|
+
## Minimum size
|
|
31
|
+
|
|
32
|
+
<LogoMinSize />
|
|
33
|
+
|
|
34
|
+
| | Screen | Print |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| Lockup, width | 100 px | 25 mm |
|
|
37
|
+
| Icon on its own, height | 16 px | 6 mm |
|
|
38
|
+
|
|
39
|
+
## Sharp on screen
|
|
40
|
+
|
|
41
|
+
The icon's edges run at 30°, so on 100% (1×) screens they show stair steps when the logo lands between pixels.
|
|
42
|
+
|
|
43
|
+
- Give the logo a whole-pixel height and a whole-pixel position.
|
|
44
|
+
- On screen, show the logo as a PNG exported at 3× the size it is shown, not as an SVG. The browser shrinks the larger picture, which softens the edges a little and hides the steps. Every logo on this site, the header included, is drawn this way.
|
|
45
|
+
- To make one, export the master SVG from Figma, Illustrator or Inkscape at 3× the size you need: for a logo 30 px tall, export it 90 px tall and show it at 30 px. A much larger file also works, but it costs more to download and each browser shrinks it a little differently.
|
|
46
|
+
- Never redraw the icon to fit the pixel grid: it breaks the regular hexagon and the 30° angle.
|
|
47
|
+
- In documents, slides and print, use the SVG.
|
|
48
|
+
|
|
49
|
+
## The icon on its own
|
|
50
|
+
|
|
51
|
+
Use the icon without the wordmark only where the name is already on screen, or where there is no room for the lockup: favicons, app icons, avatars and small product UI.
|
|
52
|
+
|
|
53
|
+
| Background | Icon colour |
|
|
54
|
+
|---|---|
|
|
55
|
+
| Dark | Yellow |
|
|
56
|
+
| Light | Graphite, or yellow on a graphite tile |
|
|
57
|
+
| Photo or strong colour | White |
|
|
58
|
+
|
|
59
|
+
Yellow on white reaches only 1.85 : 1. Next to the wordmark that is fine, because the graphite text carries the logo; on its own the icon would almost disappear. The one exception is the favicon, which is yellow so the browser tab shows the brand colour.
|
|
60
|
+
|
|
61
|
+
## Misuse
|
|
62
|
+
|
|
63
|
+
<LogoMisuse />
|
|
64
|
+
|
|
65
|
+
## Alt text and links
|
|
66
|
+
|
|
67
|
+
- A logo on its own: alt text “Beehexa”, or the product name, such as “HexaSync”. Don't add the word “logo”.
|
|
68
|
+
- A logo that links to the home page: “Beehexa – Home”, so people know where the link goes.
|
|
69
|
+
- When the name is already written next to the logo, the logo is decorative: use an empty alt text.
|
|
70
|
+
- A logo that is a link needs a visible focus ring, like any other link. The WCAG exemption covers the logo's colours, not the control around it.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Motion
|
|
3
|
+
description: Durations and easing for transitions.
|
|
4
|
+
order: 9
|
|
5
|
+
---
|
|
6
|
+
import TokenTable from '../../../components/TokenTable.astro';
|
|
7
|
+
|
|
8
|
+
Motion should explain a change, not decorate it. Keep transitions short, and turn off non-essential motion when the user sets `prefers-reduced-motion`.
|
|
9
|
+
|
|
10
|
+
## Tokens
|
|
11
|
+
<TokenTable prefix="motion" />
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Opacity"
|
|
3
|
+
description: "When transparency is allowed, and why states and disabled controls use colour instead."
|
|
4
|
+
order: 10.5
|
|
5
|
+
planned:
|
|
6
|
+
- "Where transparency is allowed: the scrim behind dialogs, image overlays"
|
|
7
|
+
- "Why hover, pressed and disabled use colour steps, not opacity"
|
|
8
|
+
- "Opacity tokens, if any are needed"
|
|
9
|
+
---
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Radius
|
|
3
|
+
description: Eight corner radius steps, which element takes which step, and how to round shapes inside other shapes.
|
|
4
|
+
order: 6
|
|
5
|
+
---
|
|
6
|
+
import ShapeDemo from '../../../components/ShapeDemo.astro';
|
|
7
|
+
import TokenTable from '../../../components/TokenTable.astro';
|
|
8
|
+
|
|
9
|
+
**Every corner is a radius token. Pick the step by what the element is, then check it against its container.**
|
|
10
|
+
|
|
11
|
+
## The scale
|
|
12
|
+
|
|
13
|
+
Eight steps. The token number follows the spacing scale: `radius.100` is 8 px, like `space.100`.
|
|
14
|
+
|
|
15
|
+
<ShapeDemo kind="radius-scale" />
|
|
16
|
+
|
|
17
|
+
## Examples
|
|
18
|
+
|
|
19
|
+
### `radius.0` · square
|
|
20
|
+
|
|
21
|
+
Edges that touch the screen: the page header, full-width tables and panels that run to the edge.
|
|
22
|
+
|
|
23
|
+
<ShapeDemo kind="radius-use" item="0" />
|
|
24
|
+
|
|
25
|
+
### `radius.050` · 4 px
|
|
26
|
+
|
|
27
|
+
Small things: checkboxes, tags, badges and the items inside a menu.
|
|
28
|
+
|
|
29
|
+
<ShapeDemo kind="radius-use" item="050" />
|
|
30
|
+
|
|
31
|
+
### `radius.100` · 8 px
|
|
32
|
+
|
|
33
|
+
Controls and the small surfaces that open from them: buttons, inputs, selects, menus, popovers, tooltips and alerts. Inputs and buttons always share this value.
|
|
34
|
+
|
|
35
|
+
<ShapeDemo kind="radius-use" item="100" />
|
|
36
|
+
|
|
37
|
+
### `radius.150` · 12 px
|
|
38
|
+
|
|
39
|
+
Cards, and a group of controls with 4 px padding, such as a segmented control.
|
|
40
|
+
|
|
41
|
+
<ShapeDemo kind="radius-use" item="150" />
|
|
42
|
+
|
|
43
|
+
### `radius.200` · 16 px
|
|
44
|
+
|
|
45
|
+
Dialogs and drawers, and a group of controls with 8 px padding.
|
|
46
|
+
|
|
47
|
+
<ShapeDemo kind="radius-use" item="200" />
|
|
48
|
+
|
|
49
|
+
### `radius.full` · pill
|
|
50
|
+
|
|
51
|
+
Avatars, switches and pill-shaped status chips.
|
|
52
|
+
|
|
53
|
+
<ShapeDemo kind="radius-use" item="full" />
|
|
54
|
+
|
|
55
|
+
## Shapes inside shapes
|
|
56
|
+
|
|
57
|
+
**Inner radius = outer radius − padding.** Use it when the padding is smaller than the outer radius. When the padding is larger, the inner element keeps its own radius, as long as it is not larger than the outer one.
|
|
58
|
+
|
|
59
|
+
<ShapeDemo kind="nesting" />
|
|
60
|
+
|
|
61
|
+
`radius.025` and `radius.075` exist for these cases only. No component takes them by default.
|
|
62
|
+
|
|
63
|
+
With the spacing rules, the result is always a step on the scale: 2 px is never padding, and 6 px is padding only inside a component.
|
|
64
|
+
|
|
65
|
+
When content sits flush inside a box with a 1 px border, clip it with `overflow: hidden`. Don't make a radius − 1 value.
|
|
66
|
+
|
|
67
|
+
## Focus ring
|
|
68
|
+
|
|
69
|
+
The focus ring sits 2 px outside the element, and the browser rounds it to match: an 8 px button gets a 10 px ring. No radius token is needed. See [Border](/foundations/styles/border/) for the ring itself.
|
|
70
|
+
|
|
71
|
+
<ShapeDemo kind="focus-radius" />
|
|
72
|
+
|
|
73
|
+
## Do and don’t
|
|
74
|
+
|
|
75
|
+
<ShapeDemo kind="dodont" item="nested" />
|
|
76
|
+
<ShapeDemo kind="dodont" item="controls" />
|
|
77
|
+
<ShapeDemo kind="dodont" item="corners" />
|
|
78
|
+
|
|
79
|
+
## Code
|
|
80
|
+
|
|
81
|
+
```css
|
|
82
|
+
.card {
|
|
83
|
+
border-radius: var(--bh-radius-150);
|
|
84
|
+
padding: var(--bh-space-050);
|
|
85
|
+
}
|
|
86
|
+
.card img {
|
|
87
|
+
border-radius: var(--bh-radius-100); /* 12 − 4 = 8 */
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Tokens
|
|
92
|
+
|
|
93
|
+
<TokenTable prefix="radius" />
|
|
94
|
+
|
|
95
|
+
## Related
|
|
96
|
+
|
|
97
|
+
- [Border](/foundations/styles/border/): border widths, the selected bar and the focus ring.
|
|
98
|
+
- [Spacing](/foundations/styles/spacing/): the padding values used in the nesting rule.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Size and density
|
|
3
|
+
description: The three control heights, the size of a target people can click or tap, and how dense Beehexa screens are.
|
|
4
|
+
order: 5
|
|
5
|
+
---
|
|
6
|
+
import LayoutDemo from '../../../components/LayoutDemo.astro';
|
|
7
|
+
import TokenTable from '../../../components/TokenTable.astro';
|
|
8
|
+
|
|
9
|
+
**Every control comes in three heights: 24, 32 and 40 px. Controls in one row share one height.**
|
|
10
|
+
|
|
11
|
+
Controls are the things people click or type in: buttons, text fields, selects, segmented controls and tabs. A fixed height keeps a row of them lined up, whatever their text.
|
|
12
|
+
|
|
13
|
+
<LayoutDemo kind="controls" />
|
|
14
|
+
|
|
15
|
+
| Size | Height | Where |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| Small | 24 px | Dense tables and their toolbars, filters, tags |
|
|
18
|
+
| Default | 32 px | Forms, buttons, the header, toolbars, everything else |
|
|
19
|
+
| Large | 40 px | Sign-in and onboarding pages. Optional for the main action on touch screens |
|
|
20
|
+
|
|
21
|
+
- Keep controls of one height in one row. A 24 px button next to a 32 px field looks misaligned.
|
|
22
|
+
- Set heights with the size tokens, not with padding. The text sits in the middle of the height.
|
|
23
|
+
|
|
24
|
+
## Target size
|
|
25
|
+
|
|
26
|
+
**Every control can be clicked in an area of at least 24 × 24 px, and tapped in 44 × 44 px on touch screens.**
|
|
27
|
+
|
|
28
|
+
- 24 px is the minimum target size of WCAG 2.2 (SC 2.5.8). Every control height meets it.
|
|
29
|
+
- On touch screens, keep the visible height and make the area that responds to a tap at least 44 × 44 px (`size.target.touch`).
|
|
30
|
+
|
|
31
|
+
## Density
|
|
32
|
+
|
|
33
|
+
**Beehexa has one density for now: default.**
|
|
34
|
+
|
|
35
|
+
One density means every screen is designed and checked at one size. A compact density may come later; it would lower control heights and spacing together, and screens that use the tokens will need no change.
|
|
36
|
+
|
|
37
|
+
Until then, make a dense table with small (24 px) controls and rows, not with smaller spacing tokens.
|
|
38
|
+
|
|
39
|
+
## Tokens
|
|
40
|
+
|
|
41
|
+
<TokenTable prefix="size" />
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Spacing
|
|
3
|
+
description: A spacing scale of 14 steps on an 8 px base for padding, gaps and margins, and how to choose a step.
|
|
4
|
+
order: 3
|
|
5
|
+
---
|
|
6
|
+
import SpacingDemo from '../../../components/SpacingDemo.astro';
|
|
7
|
+
|
|
8
|
+
**Every space is a spacing token. Pick the step by how closely two things belong together.**
|
|
9
|
+
|
|
10
|
+
Things that belong together sit close. Separate groups sit further apart. Readers see the groups before they read a word.
|
|
11
|
+
|
|
12
|
+
<SpacingDemo kind="anatomy" />
|
|
13
|
+
|
|
14
|
+
## The scale
|
|
15
|
+
|
|
16
|
+
**14 steps on an 8 px base. Each step has its own job, shown beside it.**
|
|
17
|
+
|
|
18
|
+
The token number is a percentage of 8 px: `space.100` is 8 px, `space.200` is 16 px, and `space.075` is 6 px. The steps grow further apart as they get larger, because a 4 px change is clear between small gaps and invisible between large ones.
|
|
19
|
+
|
|
20
|
+
<SpacingDemo kind="scale" />
|
|
21
|
+
|
|
22
|
+
When two things could take either of two steps, ask how much they belong together. More related means smaller.
|
|
23
|
+
|
|
24
|
+
### Padding and gap
|
|
25
|
+
|
|
26
|
+
<SpacingDemo kind="padding-gap" />
|
|
27
|
+
|
|
28
|
+
- Padding is the space inside an element. Set it on the element.
|
|
29
|
+
- Gap is the space between elements. Set it on their parent with `gap`, in flex or grid layout.
|
|
30
|
+
- Avoid margins between siblings. They add up where two meet and leave space after the last item; `gap` does neither.
|
|
31
|
+
- Measure padding from the outer edge, border included. A 32 px input with a 1 px border has 11 px of padding inside the border, so its text sits 12 px from the edge.
|
|
32
|
+
|
|
33
|
+
## The 8 px base
|
|
34
|
+
|
|
35
|
+
**From 8 px up, every space is a multiple of 4 px. Below 8 px, the scale also has two 2 px steps: 2 and 6 px.**
|
|
36
|
+
|
|
37
|
+
| Range | Steps | Use |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| Compact, below 8 px | 2, 4, 6 | Inside components only |
|
|
40
|
+
| From 8 px | 8, 12, 16, 20, 24, 32, 40, 48, 64, 80 | Components, layout and page sections |
|
|
41
|
+
|
|
42
|
+
- Text line heights are multiples of 4 px too (see [Typography](/foundations/styles/typography/)). Text, controls and spaces line up.
|
|
43
|
+
- Use `space.025` (2 px) only to nudge a small thing into place: a badge on an icon, a status dot beside text. Never use it between controls or as padding.
|
|
44
|
+
- Use `space.075` (6 px) only inside components, in two places: above and below the label of a 32 px control, where (32 − 20) ÷ 2 = 6, and the sides of a tooltip. Never use it for layout, sections or card padding, or between an icon and text: that gap is 4 px next to 14 px text and 8 px next to 16 px text and larger.
|
|
45
|
+
- Borders and focus rings are not spacing. Keep them out of your sums except for padding, as above.
|
|
46
|
+
|
|
47
|
+
### No negative space
|
|
48
|
+
|
|
49
|
+
There are no negative spacing tokens.
|
|
50
|
+
|
|
51
|
+
- When two things overlap, such as a stack of avatars, the component sets the overlap.
|
|
52
|
+
- Do not use a negative margin to pull an element into line. Fix the spacing around it.
|
|
53
|
+
|
|
54
|
+
## Do and don’t
|
|
55
|
+
|
|
56
|
+
<SpacingDemo kind="dodont" item="grouping" />
|
|
57
|
+
<SpacingDemo kind="dodont" item="scale" />
|
|
58
|
+
<SpacingDemo kind="dodont" item="nudge" />
|
|
59
|
+
|
|
60
|
+
## Vietnamese text
|
|
61
|
+
|
|
62
|
+
Vietnamese text needs taller lines for its accents. The text styles add that height on their own (see [Typography](/foundations/styles/typography/)), so spacing does not change: use the same tokens in both languages.
|
|
63
|
+
|
|
64
|
+
Vietnamese labels are often longer than English ones. Let them wrap, or give the container room. Do not take space away to make a label fit.
|
|
65
|
+
|
|
66
|
+
## Related
|
|
67
|
+
|
|
68
|
+
- [App frame](/foundations/styles/layout/app-frame/): the spacing that lines up the header, side navigation and page header.
|
|
69
|
+
- [Grid](/foundations/styles/layout/grid/): columns, gutters and page margins at each breakpoint.
|
|
70
|
+
- [Size and density](/foundations/styles/size-and-density/): control heights.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Code
|
|
3
|
+
description: Font stacks, getting the fonts, OpenType features for numbers and codes, and the type tokens.
|
|
4
|
+
order: 3
|
|
5
|
+
---
|
|
6
|
+
import TokenTable from '../../../../components/TokenTable.astro';
|
|
7
|
+
import TypeDemo from '../../../../components/TypeDemo.astro';
|
|
8
|
+
|
|
9
|
+
## Font stacks
|
|
10
|
+
|
|
11
|
+
Use the tokens, not your own lists.
|
|
12
|
+
|
|
13
|
+
```css
|
|
14
|
+
/* font.family.sans */
|
|
15
|
+
font-family: Inter, "Noto Sans", system-ui, sans-serif;
|
|
16
|
+
|
|
17
|
+
/* font.family.mono */
|
|
18
|
+
font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Noto Sans is the fallback because it covers Vietnamese and ₫ and is close to Inter in size (x-height 0.536 em against Inter's 0.546), so a page that falls back keeps its layout.
|
|
22
|
+
|
|
23
|
+
## Getting the fonts
|
|
24
|
+
|
|
25
|
+
- **On the web,** self-host the fonts. Use the Inter build from the Google Fonts repository (`github.com/google/fonts`, `ofl/inter`): it is hinted for small text on Windows and keeps every OpenType feature. Don't link the Google Fonts API: its files drop `cv05`, `cv08`, `ss02` and `zero`, and `cv05` and `cv08` are on by default (see [Numbers and codes](#numbers-and-codes)). This site serves those files, cut into Latin, Latin Extended and Vietnamese subsets.
|
|
26
|
+
- **On your computer,** for Figma, slides and documents, install Inter from Google Fonts and JetBrains Mono from JetBrains. The Google Fonts build of Inter also avoids clipped accents in older Windows apps such as Office.
|
|
27
|
+
- Both licences allow use in products, documents and logos.
|
|
28
|
+
|
|
29
|
+
## Numbers and codes
|
|
30
|
+
|
|
31
|
+
`cv05` and `cv08` are on for all Inter text. They give lowercase l a tail and uppercase I serifs, so l, I and 1 never look alike in names, IDs and keys. Turn the rest on where they help; leave body text as it is.
|
|
32
|
+
|
|
33
|
+
- **Tables and changing values:** use tabular figures (`font-variant-numeric: tabular-nums`), so digits line up in columns and counters don't jitter.
|
|
34
|
+
- **Codes people read or type,** such as order numbers, SKUs and API keys: add the slashed zero (`zero`) to Inter, or set them in JetBrains Mono (`code.default`). JetBrains Mono has no `cv05` or `cv08`, so code looks the same.
|
|
35
|
+
|
|
36
|
+
<TypeDemo kind="numbers" />
|
|
37
|
+
|
|
38
|
+
<TypeDemo kind="features" />
|
|
39
|
+
|
|
40
|
+
Every text style is applied with the `font` shorthand, and the shorthand resets `font-feature-settings`. So the features are set on every element from one variable, `--bh-font-features`; to add a feature, change the variable, not the property.
|
|
41
|
+
|
|
42
|
+
```css
|
|
43
|
+
/* Base: on every element */
|
|
44
|
+
:root { --bh-font-features: "cv05", "cv08"; }
|
|
45
|
+
*, ::before, ::after { font-feature-settings: var(--bh-font-features) !important; }
|
|
46
|
+
|
|
47
|
+
/* Opt in where needed */
|
|
48
|
+
.table-number { font-variant-numeric: tabular-nums; }
|
|
49
|
+
.code-value { --bh-font-features: "cv05", "cv08", "zero"; }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Tokens
|
|
53
|
+
<TokenTable prefix="font" />
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Typography
|
|
3
|
+
description: Two typefaces and fourteen text styles, with their weights, letter spacing and line heights.
|
|
4
|
+
order: 2
|
|
5
|
+
sidebarLabel: Overview
|
|
6
|
+
---
|
|
7
|
+
import TypeDemo from '../../../../components/TypeDemo.astro';
|
|
8
|
+
|
|
9
|
+
## Typefaces
|
|
10
|
+
|
|
11
|
+
Two typefaces cover everything: Inter for interface and reading text, JetBrains Mono for code.
|
|
12
|
+
|
|
13
|
+
<TypeDemo kind="faces" />
|
|
14
|
+
|
|
15
|
+
Inter was chosen because:
|
|
16
|
+
|
|
17
|
+
- Its tall x-height keeps small interface text legible.
|
|
18
|
+
- It covers Vietnamese in full, the ₫ sign included.
|
|
19
|
+
- It has OpenType features that tell look-alike characters apart, such as l, I and 1, which matters in a product full of order numbers and API keys.
|
|
20
|
+
- It is open source under the SIL Open Font License, so it can be self-hosted and embedded.
|
|
21
|
+
- It is the typeface of the Beehexa wordmark, so product text and logo belong to one family.
|
|
22
|
+
|
|
23
|
+
Inter has an optical size axis: from 32 px up it draws as Inter Display, with tighter spacing for headings. Browsers apply it on their own; leave `font-optical-sizing` at `auto`.
|
|
24
|
+
|
|
25
|
+
## Text styles
|
|
26
|
+
|
|
27
|
+
Text is set with **text styles**, not loose sizes. Each style is one token that carries size, line height, weight and typeface together, named for its role. Fourteen styles in five groups cover every Beehexa product, document and page.
|
|
28
|
+
|
|
29
|
+
<TypeDemo kind="styles" />
|
|
30
|
+
|
|
31
|
+
- **Display** is for marketing pages only. Product screens start at `heading.xlarge`.
|
|
32
|
+
- **Heading** styles title pages, sections, cards and groups. Use one `heading.large` per page, as its title.
|
|
33
|
+
- **Body** is for running text. `body.default` (14 px) is the default in product UI; `body.large` (16 px) is for text people read rather than scan.
|
|
34
|
+
- **Label** is for text on or beside controls: buttons, form labels, tabs, menus, badges.
|
|
35
|
+
- **Code** is for code, IDs and keys.
|
|
36
|
+
|
|
37
|
+
## Weights
|
|
38
|
+
|
|
39
|
+
| Weight | Token | Use |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| 400 | `font.weight.regular` | Body text |
|
|
42
|
+
| 500 | `font.weight.medium` | Labels |
|
|
43
|
+
| 600 | `font.weight.semibold` | Headings |
|
|
44
|
+
| 700 | `font.weight.bold` | Display only |
|
|
45
|
+
|
|
46
|
+
Don't go lighter than 400: thin strokes break up on small text. Bold body text is not a heading; for emphasis that matters to the meaning, use `<strong>` or `<em>`, so screen readers get it too.
|
|
47
|
+
|
|
48
|
+
## Letter spacing
|
|
49
|
+
|
|
50
|
+
Leave it at 0. Inter's optical size axis already tightens large text, so headings need no negative tracking, and small text stays at its default spacing.
|
|
51
|
+
|
|
52
|
+
## Line height
|
|
53
|
+
|
|
54
|
+
Line heights are part of each text style and sit on the 4 px grid: every one is a multiple of 4 px, so text lines up with spacing and components.
|
|
55
|
+
|
|
56
|
+
- Body and label styles use 1.3–1.5 times the size (14/20, 12/16, 16/24), which leave room between lines of interface text without spreading a paragraph apart.
|
|
57
|
+
- Headings tighten as they grow, to about 1.1–1.25 for display sizes, so large type stays one block.
|
|
58
|
+
- Vietnamese text uses taller values; see [Vietnamese](/foundations/styles/typography/vietnamese/).
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Usage
|
|
3
|
+
description: Which text style each part of a screen uses, and the rules for hierarchy, readability and long text.
|
|
4
|
+
order: 1
|
|
5
|
+
---
|
|
6
|
+
import TypeDemo from '../../../../components/TypeDemo.astro';
|
|
7
|
+
|
|
8
|
+
## Where each style goes
|
|
9
|
+
|
|
10
|
+
Product UI uses these styles; component pages name the style each part uses. When a part isn't listed, use the style of the nearest one with the same role.
|
|
11
|
+
|
|
12
|
+
| Part | Style |
|
|
13
|
+
|---|---|
|
|
14
|
+
| **Page structure** | |
|
|
15
|
+
| Page title | `heading.large` |
|
|
16
|
+
| Section title | `heading.medium` |
|
|
17
|
+
| Breadcrumb | `body.small` |
|
|
18
|
+
| Large title on empty states and onboarding | `heading.xlarge` |
|
|
19
|
+
| **Containers** | |
|
|
20
|
+
| Card, panel and drawer title | `heading.small` |
|
|
21
|
+
| Item title in a grid or list of many cards | `heading.xsmall` |
|
|
22
|
+
| Card description | `body.default` |
|
|
23
|
+
| Dialog title | `heading.medium` |
|
|
24
|
+
| Dialog body | `body.default` |
|
|
25
|
+
| Group title in a form, list or menu | `heading.xsmall` |
|
|
26
|
+
| **Forms** | |
|
|
27
|
+
| Field label | `label.default` |
|
|
28
|
+
| Input text and placeholder | `body.default` |
|
|
29
|
+
| Helper and error text | `body.small` |
|
|
30
|
+
| Checkbox and radio text | `body.default` |
|
|
31
|
+
| **Actions and navigation** | |
|
|
32
|
+
| Button, link button | `label.default` |
|
|
33
|
+
| Small button | `label.small` |
|
|
34
|
+
| Tab, menu item, side navigation item | `label.default` |
|
|
35
|
+
| Top navigation item | `label.default` |
|
|
36
|
+
| **Data** | |
|
|
37
|
+
| Table header | `label.small` |
|
|
38
|
+
| Table cell | `body.default` |
|
|
39
|
+
| Number in a table | `body.default` with tabular figures |
|
|
40
|
+
| ID, SKU, key in a table | `code.default` |
|
|
41
|
+
| Badge, tag, status | `label.small` |
|
|
42
|
+
| Number in a card, such as a KPI | `heading.large` with tabular figures |
|
|
43
|
+
| Label under a number | `body.small` |
|
|
44
|
+
| **Feedback** | |
|
|
45
|
+
| Banner and toast title | `heading.xsmall` |
|
|
46
|
+
| Banner and toast message | `body.default` |
|
|
47
|
+
| Tooltip | `body.small` |
|
|
48
|
+
| Timestamp, meta | `body.small` |
|
|
49
|
+
| **Reading** | |
|
|
50
|
+
| Help article, document, email body | `body.large` |
|
|
51
|
+
| Inline code | `code.default` family at the surrounding size |
|
|
52
|
+
|
|
53
|
+
<TypeDemo kind="ui" />
|
|
54
|
+
|
|
55
|
+
## On websites and documentation
|
|
56
|
+
|
|
57
|
+
Websites and documentation, this site included, use the same styles. Two things differ from product UI: the page title is one step larger, and running text is `body.large`, because people read these pages rather than scan them.
|
|
58
|
+
|
|
59
|
+
| Part | Style |
|
|
60
|
+
|---|---|
|
|
61
|
+
| **Site header** | |
|
|
62
|
+
| Top navigation item | `label.default` |
|
|
63
|
+
| Search field | `body.default` |
|
|
64
|
+
| Keyboard shortcut hint | `label.small` |
|
|
65
|
+
| Search result title | `label.default` |
|
|
66
|
+
| Search result description | `body.small` |
|
|
67
|
+
| **Sidebar** | |
|
|
68
|
+
| Section | `heading.xsmall` |
|
|
69
|
+
| Group label | `label.small` |
|
|
70
|
+
| Page and sub-page | `label.default` |
|
|
71
|
+
| **Table of contents** | |
|
|
72
|
+
| Title ("On this page") | `heading.xsmall` |
|
|
73
|
+
| Link | `label.default` |
|
|
74
|
+
| **Page** | |
|
|
75
|
+
| Breadcrumb | `body.small` |
|
|
76
|
+
| Page title | `heading.xlarge` |
|
|
77
|
+
| Lede under the title | `body.large` |
|
|
78
|
+
| Section title (`h2`) | `heading.large` |
|
|
79
|
+
| Subsection title (`h3`) | `heading.medium` |
|
|
80
|
+
| Minor title (`h4`) | `heading.small` |
|
|
81
|
+
| Running text and lists | `body.large` |
|
|
82
|
+
| Table text | `body.default` |
|
|
83
|
+
| Table header | `label.small` |
|
|
84
|
+
| Code block | `code.default` |
|
|
85
|
+
| Inline code | `code.default` family at the surrounding size |
|
|
86
|
+
| Card title | `heading.small` |
|
|
87
|
+
| Card text | `body.default` |
|
|
88
|
+
| Status badge | `label.small` |
|
|
89
|
+
| Tabs | `label.default` |
|
|
90
|
+
| Previous and next links | `body.small` label, `heading.small` page name |
|
|
91
|
+
| Footer and page meta | `body.small` |
|
|
92
|
+
|
|
93
|
+
## Using the styles
|
|
94
|
+
|
|
95
|
+
In CSS, each style is one `font` declaration:
|
|
96
|
+
|
|
97
|
+
```css
|
|
98
|
+
.page-title { font: var(--bh-font-heading-large); }
|
|
99
|
+
.card-title { font: var(--bh-font-heading-small); }
|
|
100
|
+
.field-label { font: var(--bh-font-label-default); }
|
|
101
|
+
.helper-text { font: var(--bh-font-body-small); }
|
|
102
|
+
.kpi-value { font: var(--bh-font-heading-large); font-variant-numeric: tabular-nums; }
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
- Use a style as a whole. Don't take its size and set your own weight or line height: a near-miss style looks like a mistake next to the real one.
|
|
106
|
+
- Don't make a new style for one screen. If a role is missing, add it here first.
|
|
107
|
+
- Set colour separately, with `color.text.*` tokens.
|
|
108
|
+
- Show the selected item, such as the current page or tab, with colour and an indicator bar, not with a heavier weight: a bolder word gets wider and shifts its neighbours.
|
|
109
|
+
- Bold inside text (`<strong>`, `<b>`) is semibold, 600. Weight 700 stays with the display styles.
|
|
110
|
+
- When one row mixes styles, such as an order ID in `code.default`, a badge and an amount in `body.default`, align the text on its baseline (`vertical-align: baseline`, or `align-items: baseline` in flex), not on the middle. Each style sits differently in its line height, so centring them puts the letters at different heights.
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
## Sizes on small screens
|
|
114
|
+
|
|
115
|
+
- Product styles keep their size on every screen. Text that changes size between breakpoints makes dense screens harder to learn.
|
|
116
|
+
- Display styles step down below 768 px (`breakpoint.md`): `display.large` and `display.medium` become `display.small`, and `display.small` becomes `heading.xlarge`.
|
|
117
|
+
- All sizes are in `rem`, so text follows the reader's browser setting and zoom.
|
|
118
|
+
|
|
119
|
+
## Hierarchy
|
|
120
|
+
|
|
121
|
+
- One page title (`h1`) per page. Go down the heading levels in order, without skipping one.
|
|
122
|
+
- Mark up structure with headings, not with bold or larger paragraphs.
|
|
123
|
+
- Show importance with size and weight first. Don't rely on color alone.
|
|
124
|
+
|
|
125
|
+
## Readability
|
|
126
|
+
|
|
127
|
+
- Keep lines to about 100 characters or fewer: put long text on a Narrow page (see [Page widths](/foundations/styles/layout/page-widths/)).
|
|
128
|
+
- Align text to the left, ragged right. Don't justify it; center only short, standalone text.
|
|
129
|
+
- Write in sentence case. Don't set text in all caps: it is slower to read, and in Vietnamese the marks crowd the line above.
|
|
130
|
+
- Use italics sparingly, for titles and terms.
|
|
131
|
+
|
|
132
|
+
## Long text
|
|
133
|
+
|
|
134
|
+
Order names, URLs and IDs have no length limit.
|
|
135
|
+
|
|
136
|
+
- Truncate one-line text with an ellipsis, and always give another way to read the full value, such as a tooltip or a detail view.
|
|
137
|
+
- Let long unbroken strings, such as URLs and keys, break anywhere rather than overflow.
|
|
138
|
+
- Never truncate text people need to finish a task.
|
|
139
|
+
|
|
140
|
+
## Accessibility
|
|
141
|
+
|
|
142
|
+
- Text needs a contrast of at least 4.5 : 1 with its background; large text (24 px, or 18.66 px bold) at least 3 : 1. See [Color](/foundations/styles/color/).
|
|
143
|
+
- Set sizes in `rem` and never block zoom, so text can grow to 200% (WCAG 1.4.4).
|
|
144
|
+
- Don't put text in images. Real text scales, translates and reads aloud.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Vietnamese
|
|
3
|
+
description: Taller line heights for Vietnamese text, and how to keep its marks from being cut off.
|
|
4
|
+
order: 2
|
|
5
|
+
---
|
|
6
|
+
import TypeDemo from '../../../../components/TypeDemo.astro';
|
|
7
|
+
|
|
8
|
+
**Vietnamese text gets taller line heights, so its stacked marks never touch the line above or get cut off.**
|
|
9
|
+
|
|
10
|
+
Text marked `lang="vi"` gets taller line heights. Vietnamese stacks two marks on some capitals, such as Ấ, Ổ and Ẫ, so they rise well above the other letters. At English line heights those marks touch the line above and are cut off in one-line elements that clip their overflow, such as truncated table cells and button labels.
|
|
11
|
+
|
|
12
|
+
Line height is the space from one line to the next, so it shows on text of two lines or more. Each shaded band below is one line:
|
|
13
|
+
|
|
14
|
+
<TypeDemo kind="leading" />
|
|
15
|
+
|
|
16
|
+
The Vietnamese layer changes line height only; size, weight and typeface stay the same. Each value is the smallest multiple of 4 px that keeps every Vietnamese letter inside its own line box, so marks neither touch the line above nor get clipped.
|
|
17
|
+
|
|
18
|
+
| Style | English | Vietnamese |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| `display.large` | <span class="type-num">72/80</span> | <span class="type-num">72/108</span> |
|
|
21
|
+
| `display.medium` | <span class="type-num">60/68</span> | <span class="type-num">60/88</span> |
|
|
22
|
+
| `display.small` | <span class="type-num">48/56</span> | <span class="type-num">48/72</span> |
|
|
23
|
+
| `heading.xlarge` | <span class="type-num">32/40</span> | <span class="type-num">32/48</span> |
|
|
24
|
+
| `heading.large` | <span class="type-num">24/32</span> | <span class="type-num">24/40</span> |
|
|
25
|
+
| `heading.medium` | <span class="type-num">20/28</span> | <span class="type-num">20/32</span> |
|
|
26
|
+
| `heading.small` | <span class="type-num">16/24</span> | <span class="type-num">16/24</span> (same) |
|
|
27
|
+
| `heading.xsmall` | <span class="type-num">14/20</span> | <span class="type-num">14/24</span> |
|
|
28
|
+
| `body.large` | <span class="type-num">16/24</span> | <span class="type-num">16/24</span> (same) |
|
|
29
|
+
| `body.default` | <span class="type-num">14/20</span> | <span class="type-num">14/24</span> |
|
|
30
|
+
| `body.small` | <span class="type-num">12/16</span> | <span class="type-num">12/20</span> |
|
|
31
|
+
| `label.default` | <span class="type-num">14/20</span> | <span class="type-num">14/24</span> |
|
|
32
|
+
| `label.small` | <span class="type-num">12/16</span> | <span class="type-num">12/20</span> |
|
|
33
|
+
| `code.default` | <span class="type-num">14/20</span> | <span class="type-num">14/20</span> (same) |
|
|
34
|
+
|
|
35
|
+
Each box below is one line that clips its overflow, with the line box outlined.
|
|
36
|
+
|
|
37
|
+
<TypeDemo kind="vietnamese" />
|
|
38
|
+
|
|
39
|
+
- **Mark the language.** Set `lang="vi"` on `<html>` for a Vietnamese page, or on the element that holds Vietnamese text. Text marked with another language inside it, such as `lang="en"`, goes back to the English values.
|
|
40
|
+
- **Use the tokens.** The text style tokens switch on their own under `lang="vi"` (`:lang(vi)` in `tokens.css`). Code that can't read CSS variables, such as an Ant Design Vue theme, takes the `vi` values from `tokens.js`.
|
|
41
|
+
- **Let components grow.** A control or row that sets a fixed height must fit the Vietnamese line height: a 14 px label needs 24 px of line, so set heights from padding plus line height, not as a fixed number.
|
|
42
|
+
- **Don't clip text vertically.** Avoid `overflow: hidden` on a box with no vertical padding; when you must truncate, clip horizontally and let the line box hold the marks.
|
|
43
|
+
- **Test with this string** in every component and state: **ỔN ĐỊNH · ẤN ĐỘ · ẪM · Ở ĐÂY CÓ ƯU ĐÃI**.
|
|
44
|
+
|
|
45
|
+
JetBrains Mono draws Vietnamese marks inside its own line box, so `code.default` keeps 14/20. This site serves its Vietnamese subset too, so Vietnamese in code doesn't fall back to another typeface.
|
|
46
|
+
|