---
url: 'https://dialtone.dialpad.com/components/index.html'
description: >-
Reusable components solving common UI needs, designed and built to be
assembled in countless combinations.
---
# Components
---
---
url: 'https://dialtone.dialpad.com/design/index.html'
description: The visual foundation that supports and unites Dialpad products.
---
# Design Language
---
---
url: 'https://dialtone.dialpad.com/design/colors/index.html'
description: >-
A systematic and accessible color palette that supports both functional needs
and personalized experiences within our products.
---
# Colors
---
---
url: 'https://dialtone.dialpad.com/design/colors/chart-colors/index.html'
description: Chart color guidance to communicate data clearly.
---
# Chart Colors
## Overview
Data visualization is crucial for clear communication, but inconsistent color usage can hinder comprehension and create visual noise.
**Chart Color Tokens** provide a unified, robust, and accessible system for coloring data visualizations across all Dialpad products.
These tokens are designed to:
* **Ensure Visual Consistency:** Guarantee a cohesive look and feel for data insights.
* **Enhance Accessibility:** Provide high-contrast, color-blind friendly palettes out-of-the-box.
* **Streamline Workflow:** Offer a single source of truth for both designers and developers, reducing guesswork and speeding up development.
* **Improve Maintainability:** Simplify global color updates and future-proof our data experiences.
## Types
Chart Colors are available for one of four types: [Single Color](#single-color), [Semantic](#semantic), [Categorical](#categorical), and [Sequential](#sequential).
### Single Color
Use for data visualizations that only require comparing one or two data points, or a single data point against a series of adjacent neutral data. Use `chart.color.accent` as the default. To bring a data point to focus, use `chart.color.accent` for the focused data point and `chart.color.neutral` for the rest.
**When to Use:**
* Basic data points.
* Indicating selected chart series or segments.
* Dimming or disabling inactive chart elements.
### Semantic
Apply colors that associate meaning to the data points, such as status, severity, or sentiment.
**When to Use:**
* Performance Dashboards: Showing status (on-track, at-risk, complete).
* Alerts/Notifications: Highlighting critical data points.
* Sentiment Analysis: Representing positive, neutral, or negative sentiment.
* Brand Alignment: Emphasizing data related directly to Dialpad's core identity.
### Categorical
Apply unique colors to distinguish two or more unrelated data where color carries no meaning. Use in the predetermined numerical order, e.g. `01`, `02`, etc. This ensures applied data can be visually distinguished from its adjacent data.
**When to Use:**
* Multi-series bar charts, pie charts, or line charts comparing different groups.
* Visualizing discrete variables (e.g., customer segments, operating systems).
### Sequential
To represent data using progressive shades or tints of a single color, emphasizing their relative depth within a single data series.
**When to Use:**
* Single-series charts where visual depth or intensity within one category is key.
* Heatmaps or density visualizations for a single metric.
* Situations requiring a strong visual connection to the Dialpad brand.
#### Sequential Range
Using sequential range tokens enable the ability to dynamically create varying number of color steps for a single data series with `start` and `end` tokens.
#### Sequential Default
The default range are a fixed number of 10 available colors for a single data series. If you need to create fewer or more colors, use the sequential range tokens.
## Usage
### Developers
Apply to chart elements (bars, lines, fills) via CSS Variables (e.g. `var(--dp-color-chart-color-accent)`) or corresponding CSS Utilities, e.g. `d-bgc-chart-neutral`, `d-bc-chart-warning`, etc.
### Designers
* **Applying Colors:** Apply color directly to chart elements (bars, lines, fills) via Figma Styles linked to tokens. Unlike other Dialtone colors, Chart Colors are not scoped to foreground, surface, border, etc.
* **Understanding Hover/Selected:** Remember that hover and selected states for specific chart series (single color, semantic, categorical, and sequential) have predetermined contrasting colors, ensuring consistent interaction feedback.
* **Prototyping:** Use these tokens in your Figma prototypes to demonstrate interactive states and theme switching.
## Do and Don'ts
### Use chart colors only for data
### Apply Categorical colors in numeric order
### Limit chart colors
### Use multiple colors only with purpose
### Use space to separate data
## Accessibility Guidelines
Ensuring accessible data visualizations is a core tenet of Dialtone. When using these tokens:
* **Contrast Ratios:** All token color combinations are designed to meet WCAG AA contrast standards (minimum 3:1 for graphics/UI components).
* **Color-Blindness Compatibility:** Palettes have been vetted for common forms of color blindness (e.g., using tools like Viz Palette).
* **Redundancy is Key:** Never rely solely on color to convey critical information. Always provide supplementary visual cues such as:
* Labels/Text: Directly annotating data points with values.
* Icons/Patterns: Using distinct icons or patterns for categories.
* Shapes/Stroke Styles: Varying shapes, line styles (dashed, dotted), or stroke widths.
* **Theming Impact:** Token values are specifically defined for both light and dark modes to ensure optimal contrast and readability in any theme.
## Known Issues & Troubleshooting
While this system aims for robustness, be aware of potential challenges during implementation and adoption:
* **Charting Library Overrides:** Some charting libraries might aggressively override inline styles or custom properties, requiring careful mapping or deeper customization.
* **Complex Color Logic:** For very custom data-driven color calculations beyond simple references (e.g., dynamic gradients based on data range), you might still need to implement logic in code that consumes these Chart Color design tokens.
* **Transitioning Existing Charts:** Migrating older charts not using design tokens will require dedicated refactoring effort.
---
---
url: 'https://dialtone.dialpad.com/design/colors/palette/index.html'
description: 'A functional, personal, and accessible color palette.'
---
# Color Palette
## Foreground
Colors for text and icons
## Foreground Status
Foreground colors distinguishing important information with a status role.
## Surface
Background colors for application UI surfaces. Surface colors are container blocks — such as pages, modals, tables, headers, and cards — containing foreground content or elements.
## Borders
Define the edge of key content area, components, or surfaces.
## Theme Shell
CSS variables for themeable parts of the UI, primarily targeting the top bar and left bar.
## Base Palette
Base colors are the literal value of all available colors. Use these only if all abstracted Text, Status text, Surface, or Border colors do not fit your need — consult a Product Designer.
Each of the colors listed above references these. For example, in Light mode
`var(--dt-color-foreground-primary)` is an alias to `var(--dt-color-black-900)`, and
`var(--dt-color-foreground-critical)` is an alias to
`var(--dt-color-red-300)`, and will have a different value in Dark mode.
### Light Theme
### Dark Theme
---
---
url: 'https://dialtone.dialpad.com/design/colors/themes/index.html'
description: Theme options that allow user customization of Dialpad products.
---
# Themes
## Overview
Dialtone's theming system is a flexible foundation for creating consistent visual experiences. It lets you adapt the user interface to different contexts, preferences, and product variations. Our approach uses semantic color tokens to easily switch between themes and modes.
Theming is limited to the application's navigation regions, consisting of the top and left.
### Mode
A mode defines a visual style that applies across all themes. It determines the overall luminosity and contrast of the interface. For example, light mode has a light background and dark text, while dark mode has a dark background and light text.
### Theme
A theme represents the core color scheme. It applies a unique set of colors to themeable regions, and it works in conjunction with a mode. For example, the default "Dialpad" theme accent may be purple, while a "Sunflower" theme's is a deep yellow.
### Theme List
## Theming with Shell Tokens
The shell tokens are a specialized set of tokens for theming the topbar and sidebar. They are designed to be easily customized while maintaining a coherent color scheme.
### Shell Base Tokens
These are the core reference colors for the shell. They are directly linked to the base tokens and determine the overall color palette of the topbar and sidebar. These base tokens are the only ones that should be modified when creating a custom theme.
### Shell Modifier Tokens
These tokens, such as `shell-action...`, `shell-status...` `shell-mention...`, inherit their values from the shell base tokens. For example, they use modifiers to create variations or color states (e.g., `hover`, `active`, `disabled`).
This structure allows for a cascading effect: changing a shell base token automatically updates all related shell modifier tokens, making it simple to create and manage custom themes for the application's shell.
## Accessibility
When creating a custom theme, it is important to ensure that the colors used are accessible. This means that the colors should be easy to read and contrast well with the background.
## Related
* If you need full list of all the shell tokens, [Check out our list of colors](../palette/index.md).
* [See our entire token catalog with full descriptions and values of all tokens.](../../../tokens/index.md).
---
---
url: 'https://dialtone.dialpad.com/design/colors/usage/index.html'
description: >-
A systematic and accessible color palette that supports both functional needs
and personalized experiences within our products.
---
# Usage
## Overview
Dialtone's color system offers a consistent visual foundation with a brand purple, versatile grayscale, and semantic status colors. Subtle gradients are used for promotional accents.
What we prioritize is semantic clarity, ensuring each color serves a distinct purpose within the UI for clear communication and consistency...
## Use Semantic Color Tokens
Dialtone uses **semantic tokens** for color, representing a color's *purpose* in the UI. See our [See our design token list](https://dialtone.dialpad.com/tokens/) for descriptions guiding their application.
It's crucial to understand that while these semantic tokens are built upon our underlying **base color palette**, the work of selecting the appropriate base color for each specific UI context has already been meticulously done for you.
## Color roles
Color roles describe the purpose of how color is used. Each uses neutrals for general UI and status colors for impact.
We categorize color application by semantic roles such as: **text, surfaces, borders, and themes**. Each uses neutrals for general UI and status colors for impact.
### Foreground Colors
Foreground colors are the visual language of our content, applied across all content considered to be "in the foreground", i.e. text and icons. You can utilize foreground tokens which can be found within the [tokens documentation here](https://dialtone.dialpad.com/tokens/).
### Surfaces
Surface colors define the background of UI elements, from pages and modals to tables and cards. Neutrals provide the primary backdrop, while status colors add emphasis and context.
### Borders
Borders delineate content areas and components, using neutrals for subtle definition and status colors for heightened emphasis. Inverted colors ensure clarity on darker surfaces.
### Charts
View our [Chart Colors](../chart-colors/index.md) documentation for more information.
## Best Practices
### Preserve Color Semantics
Use feedback colors consistently to maintain clear communication and avoid confusion.
### Semantics Over Base Values
Embrace semantic tokens to separate color values from their contextual meaning, enhancing maintainability and clarity.
### Prioritize Contrast
We primarily employ the APCA for precise contrast evaluation, ensuring readability for all users.
**Refer to Accessibility Guidelines for detailed information.**
### Uniformity
Maintain color consistency across similar components to build intuitive user patterns.
## Modes
Dialtone is designed to seamlessly support both light and dark themes. We supply colors through semantic tokens that automatically adapt their underlying values depending on the active mode, ensuring consistent meaning and optimal contrast in any environment.
## Related
* If you need full list of our color palette, [Check out our list of colors](../palette/index.md).
* [See our entire token catalog with full descriptions and values of all tokens.](../../../tokens/index.md).
---
---
url: 'https://dialtone.dialpad.com/design/icons/index.html'
description: 'An icon style for visually communicating commands, status, and more.'
---
# Icons
## Usage
### In Figma
Find a list of available icons in [DT Core: Icons](https://www.figma.com/file/zz40wi0uW9MvaJ5RuhcRZR/DT8-Icon-Library), or search the icons in the search library within your Figma file.
### In Vue
For detailed instructions on using the icons, check the [Icon component](/components/icon.md).
```js
import { DtIconCreditCard } from '@dialpad/dialtone-icons/vue3';
```
### Choosing the Right Icon
Some icons are linked to specific actions, like the Settings gear or the Edit pencil . For actions without a dedicated icon, avoid reusing icons that are already associated with other actions, this helps prevent confusion and ensures clear understanding. Instead, select an existing icon from the Icon Catalog without a specific action meaning or consider [creating a new one](#crafting-an-icon) that clearly represents the intended action.
### Sizing
The icon size is defined based on the context and text size next to it. These are the only available size options and no overrides should be needed to properly size the icons.
## Crafting an Icon
Our icons are designed for easy recognition and understanding. They are a visual support, helping people navigate the experience more effectively.
### On Figma
Go to the [Icon Builder page](https://www.figma.com/file/zz40wi0uW9MvaJ5RuhcRZR/DT8-Icon-Library?type=design\&node-id=12057-3505\&mode=design\&t=CNADHg9I1bsKDPiB-4) in Figma and follow the instructions. Remember to work on a branch and send a review when the icons are ready.
* Use simple lines and shapes. Avoid creating overly literal, complex icons.
* Utilize the icon grid while maintaining the style of each icon.
* The icon's content should remain within the 2px padding (on size 500/24px); no part of the icon should extend beyond this area.
* Both exterior and interior corners should be 2px (on size 500/24px).
* The stroke style should be `solid`, end points `round`, and join `round`.
### Exporting
\
The /icon skill automates SVG validation, normalization, and build verification. Run /icon add \ or /icon update \.
1. [Create a new branch](https://github.com/dialpad/dialtone/tree/staging/packages/dialtone-css/.github/CONTRIBUTING.md#making-a-pull-request) in [dialtone](https://github.com/dialpad/dialtone/tree/staging) repo starting with "dlt-xxxx-" in the name.
2. Export the SVG from the **12px (size 100)** Figma component. For standard icons (all categories except `brand-full-color`), prepare the SVG before placing it:
* Run **Edit > Outline Stroke** in Figma to ensure the icon is fill-based (no strokes).
* Normalize fill colors to `fill="black"`. Figma often exports `fill="#1C1C1C"` or other near-black hex values that the build pipeline won't convert to `currentColor`.
* Remove no-op `` wrappers — Figma adds these when "Clip content" is enabled, but they are unnecessary when the clip rect matches the viewBox.
* Consider combining multiple `` elements into a single `` where they share all attributes (fill, fill-rule, opacity, etc.). Do not combine paths that differ in any attribute beyond `d`.
* Icons in `brand-full-color` may use solid brand hex colors, gradients, and other attributes — preserve these as-is.
3. Place the exported SVG file(s) in the appropriate folder category inside `./src/svg/`, file names should be in kebab-case.
4. Run `nx run dialtone-icons:build`
5. Add keywords related to the icon(s) in the `packages/dialtone-icons/src/keywords-icons.json` file.
6. [Commit](https://github.com/dialpad/dialtone/tree/staging/.github/COMMIT_CONVENTION.md) and push your branch to [dialtone](https://github.com/dialpad/dialtone/tree/staging), and open a pull request.
---
---
url: 'https://dialtone.dialpad.com/design/size/index.html'
description: A system to maintain consistent size and scale.
---
# Size
## Choosing Size vs. Space
### Size
Size design tokens define intrinsic **dimensions** of UI components. Example CSS properties they correspond to: `width`, `height`, `border-radius`, `border-width`, positioning properties, i.e. `top`, `left`, etc.
### Space
[Space](/design/space/index.md) design tokens focus on controlling **spatial relationships**; that is, the space between and around elements. Example CSS properties they correspond to: `padding`, `margin`, `gap`
## Usage
### Setting a Specific Size
When assigning a size to an element, utilize [Size Tokens](#tokens) for the value.
👍
`width: var(--dt-size-400)`
👎
`width: var(--dt-space-400)`
```html
Box
```
### Widths and Heights
For optimal layout flexibility and responsiveness, generally avoid using fixed `widths` or `heights` when defining element sizes. Instead, use percentages values or set `min-width` or `min-height`. This allows the elements to adjust naturally to different screen sizes.
### Variable Sizing
The size of some components is determined by their content. Most expand vertically, while a select few expand horizontally.
### Responsiveness
Adapting to different devices, sizes should be fluid across breakpoints. While most Dialtone components are responsive, their fluidity depends on the layout they live within.
### Accessibility
To ensure clickable and interactive areas are easily accessible, we recommend a minimum area of `var(--dt-size-300)`, except for links within text. In Dialtone we've applied these to components such as buttons, toggles, checkboxes, radio buttons, dropdowns, and inputs.
## Tokens
Here are some frequently used tokens. For a complete list, visit the [Size Tokens](/tokens/index.md#size) section.
## Key Takeaways
* Use predefined tokens, they help maintain consistency and make it easier to update designs.
* Keep sizes and spacing consistent: This ensures a polished look across all devices.
---
---
url: 'https://dialtone.dialpad.com/design/space/index.html'
description: 'Define paddings, gaps, and margins around elements.'
---
# Space
## Choosing Space vs. Size
### Space
Spacing design tokens focus on controlling **spatial relationships**; that is, the space between and around elements. Example CSS properties they correspond to: `padding`, `margin`, `gap`
### Size
[Size](/design/size/index.md) design tokens define intrinsic **dimensions** of UI components. Example CSS properties they correspond to: `width`, `height`, `border-radius`, `border-width`, positioning properties, i.e. `top`, `left`, etc.
## Usage
Use spacing units, when [stacking elements](#stacking) or when adding [padding](#padding) or margin.
When setting the scale of an element, use [Size](/design/size/index.md) units.
### Setting a Specific Spacing
When setting the gap between elements, utilize [Space Tokens](#tokens) for the gap value.
👍 `gap: var(--dt-space-400)`
👎 `gap: var(--dt-size-400)`
```html
Element A
Element B
```
### Stacking
When adding space between elements, both vertically and horizontally, we can use either `space-between` or `gap` to define the space that separates each element. The value is set as a variable in Figma and as a token in code.
* For gaps inside a box/container, such as between headings, text, and buttons, use values like `var(--dt-space-0)` to `var(--dt-space-550)`
* For spaces between different boxes/containers on a page, choose values from `var(--dt-space-600)` to `var(--dt-space-700)`
### Padding
When adding space around an element, use `padding` to create breathing room.
Avoid using `margin`, which adds space outside the element and can affect the layout, in that case, follow the [stacking](#stacking) approach.
## Visual Guides
### Grouping
### Guiding the Eye
## Tokens
Here are some frequently used tokens, don't use values outside the recommended range for specific types of spacing. For a complete list, visit the [Spacing Tokens](/tokens/index.md#space) section.
## Key Takeaways
* Use predefined tokens, they help maintain consistency and make it easier to update designs.
* Consider the overall composition and whitespace to create well-proportioned layouts.
* Ensure consistent spacing across various screen sizes and breakpoints.
* Keep spacing consistent: This ensures a polished look across all devices.
**🌟 Design Tip:** Optimize your workflow in Figma by setting the nudge amount to 4px or 8px. It's a small change that can make a big difference in ease of use!
---
---
url: 'https://dialtone.dialpad.com/design/typography/index.html'
description: 'Clear, legible, and easy-to-read text.'
---
# Typography
## Font Properties
### Font Family
Dialtone's product UI font stack defers to the user's default system font, ensuring a seamless native experience.
### Font Weight
Four weights for clear hierarchy and visual contrast among different elements.
### Font Size
Dictates the scale of text, enhancing readability and defining information hierarchy across content.
### Line Height
Adjusts vertical spacing between lines of text, optimizing legibility and text flow.
## Styles
### Usage
All product UI text can be characterized as one of **Headline**, **Body**, **Label**, **Helper**, or **Code**. These styles are effectively **composition** CSS Utilities, combining multiple properties like `font-size`, `font-family`, `font-weight`, and `line-height`.
```html
...
```
### Examples
```html
Ai that works for you
Support customers, drive sales, and collaborate with your team—all in one, beautiful Ai-powered app.
Ai Contact Center
The world’s most advanced customer engagement platform
Ai Voice
Say hello to the world’s smartest business phone
Ai Meetings
Ai-powered video meetings with built-in transcriptions
```
### Headlines
Titles and headings to establish hierarchy and set the tone of contextual groupings.
### Body
Default text style for longer-form prose content, designed for comfort and clarity in reading varying lengths.
### Label
Shorter-length copy like form fields, buttons, and other UI-labeling elements, ensuring clear navigation and interaction.
### Helper
Complementary information or guidance, such as tooltips and hints, to aid user understanding without overwhelming.
### Code
Code snippets, technical commands, or data values rendered as a monospaced font.
## API
Each typography style is expressed through a shorthand `font` property, and its value's design token contains all font styles, e.g. `font-size`, `line-height`, `font-family`, etc,
---
---
url: 'https://dialtone.dialpad.com/guides/accessibility/index.html'
description: Guidance on building products for everyone.
---
# Accessibility and inclusive design
We are committed to usable experiences and products for everyone. Because “everyone” is a lot of people reflecting a variety of backgrounds, abilities, and circumstances, we believe in applying thoughtful and inclusive design and development practices.
## Fundamentals
Dialpad strives to maintain **WCAG 2.1 AA** compliance in our digital products.
Everyone benefits when things are designed accessibly. Simply put: building products for accessibility is simply building products for better usability. Considering **1 in 4** US adults -- that’s 61 million people! -- live with a permanent disability and many more will have temporary or situational throughout their lifetime, accessibility isn’t for just some people. It benefits everyone.
As we consider the entire spectrum of possibilities, the benefits to the people we are designing for goes up dramatically. Accessible design is usable design, for more people in more circumstances.
### Principles
Building inclusive product experiences can be boiled down to the **P.O.U.R.** principles:
1. Perceivable.
2. Operable.
3. Understandable.
4. Robust.
#### Perceivable
The interface and its content are designed and implemented in such a way that it works across a variety of users agents and assistive technologies.
* The handling of media content like video, audio and imagery.
* The handling of text alternatives through things like captioning and sign language.
* The handling of color and contrast.
* The control of text size and audio controls.
* The handling content interactions i.e. hover and focus states.
#### Operable
Users are able to interact with and navigate the interface and its content.
* Keyboard operability.
* Time allowance.
* Seizures and other involuntary physical reactions.
* Navigation through things like focus order, page titles, links, headings and labels.
* Input methods like touch targets sizing, alternative input methods.
#### Understandable
The interface and its content use plain language that’s easy to comprehend. Even if users can perceive and navigate content, what if they can’t actually understand the information?
* Predictable and consistent navigation.
* Use of language such as abbreviations, jargon, reading levels.
* Predictable and consistent actionable components.
* Feedback and error handling.
* Help, such as contextual help and error prevention.
#### Robust
The interface and its content is designed and implemented in such a way that it works across a variety of users agents and assistive technologies.
* Parsing and generally ‘clean’ code like proper heading hierarchy, no duplicate attributes, complete start and end tags for elements.
* Name, role and value.
* Status messages, sending messaging to the user without interrupting their workflow by giving focus to an element. e.g. “added to cart” while shopping online should act as a message and not a redirection of activity and focus for the user.
### Types of Assistive Technology
“Assistive technology” is a generic term that describes tools used by people with disabilities to accomplish tasks. Here are some examples:
* **Screen readers:** Software used by blind or visually impaired people to read the content of the computer screen. Examples include JAWS for Windows, NVDA, or Voiceover for Mac.
* **Screen magnification software:** Allows users to control the size of text and/or graphics on the screen. Unlike using a zoom feature, these applications allow the user to have the ability to see the enlarged text in relation to the rest of the screen. This is done by emulating a handheld magnifier over the screen.
* **Text readers:** Software used by people with various forms of learning disabilities that affect their ability to read text. This software will read text with a synthesized voice and may have a highlighter to emphasize the word being spoken. These applications do not read things such as menus or types of elements - they only read the text.
* **Speech input software:** Provides people with difficulty in typing an alternate way to type text and also control the computer. Users can give the system some limited commands to perform mouse actions. Users can tell the system to click a link or a button or use a menu item. Examples would be Dragon Naturally Speaking for Windows or Mac. Please note both Windows and Mac have some speech recognition utilities, but they cannot be used to browse the web.
* **Alternative input devices:** Some users may not be able to use a mouse or keyboard to work on a computer. These people can use various forms of devices, such as:
* **Head pointers:** A stick or object mounted directly on the user’s head that can be used to push keys on the keyboard. This device is used by individuals who have no use of their hands.
* **Motion tracking or eye tracking:** This can include devices that watch a target or even the eyes of the user to interpret where the user wants to place the mouse pointer and moves it for the user.
* **Single switch entry devices:** These kinds of devices can be used with other alternative input devices or by themselves. These are typically used with on-screen keyboards. The on-screen keyboard has a cursor move across the keys, and when the key the user wants is in focus, the user will click the switch. This can also work on a webpage: the cursor can move through the webpage, and if the user wants to click on a link or button when that link or button is in focus, the user can activate the switch.
#### Additional Resources
* [Apple - Voiceover/keyboard shortcuts for OS X](https://www.apple.com/voiceover/info/guide/_1131.html)
* [Deque - Accessibility Testing Tools](https://www.deque.com/axe/)
* [Deque University - Web Accessibility Training and Courses](https://dequeuniversity.com/)
* [MDN - Developer Guides](https://developer.mozilla.org/en-US/docs/Web/Guide)
* [Microsoft - Narrator keyboard commands for Windows](https://support.microsoft.com/en-us/windows/appendix-b-narrator-keyboard-commands-and-touch-gestures-8bdab3f4-b3e9-4554-7f28-8b15bd37410a)
* [Pa11y](https://pa11y.org/)
* [Web Content Accessibility Guidelines (WCAG) 2.1](https://www.w3.org/TR/WCAG21/)
* [WebAim - Constructing a POUR Website](https://webaim.org/articles/pour/)
* [CDC - Disability Impacts All of Us Infographic](https://www.cdc.gov/ncbddd/disabilityandhealth/infographic-disability-impacts-all.html)
* [Berkeley - Types of assistive technology](https://webaccess.berkeley.edu/resources/assistive-technology)
* [UXcellence - Designing for Accessibility: An Introduction](https://uxcellence.com/2018/accessible-design-intro)
## Accessibility Principles by Role
How your role can address accessibility and inclusive design.
### Product Management
Product managers can set the tone early in a project's lifecycle, ensuring the team knows their responsibilities and accountability to building accessible products.
1. Be aware of **each role's** high-level accessibility principles.
2. Ensure each role on your team is aware of these principles and keep them in mind from the start: [Content](#content), [Design](#design), and [Engineering](#engineering).
3. Build **accessibility into project workflows** every step of the way, rather than as a retrofit exercise.
4. Learn **Accessibility basics** to understand what makes your team empowered to deliver accessible products and services.
5. Understand the **diversity of users** to better consider how anyone can get the most out of your product.
6. Consult an **accessibility subject matter expert** to review.
### Content
Writing accessibly ensures your content is easier for everyone to read.
1. **Plain Language.** Can you quickly understand the main points of the content?
2. **Scannability.** Can you scan the page without significantly pausing through long passages?
3. **Images.** Do your images have descriptive alt text?
4. **Links.** Do link sufficiently describe its destination?
5. **Information Architecture.** Are the application’s parts organized such that any can navigate easily?
### Design
Accessibility is usability for everyone, regardless of ability, situation, or circumstance. Treat accessibility as a core principle of Product Design.
1. Adopt a mentality of **Inclusive Design**.
2. Is there sufficient **contrast** between foreground and background content?
3. Is textual information **easy to read and parse**?
4. Are **navigation shortcuts** available for keyboard and screen readers to reach key regions?
5. Familiarize yourself with **assistive technologies**. These include screen readers, screen magnification, ergonomic keyboards, or even zoom capabilities in browsers.
6. Do your designs imply a **logical tab order** for those using a keyboard to navigate throughout.
7. Are all interactive elements reachable through the tab key, and reflect a **perceivable focus indicator**?
8. Do your designs reflect a **perceivable focus indicator** for interactive parts?
9. When a view changes significantly, is it clear to the user **where focus has moved to** (independent of a perceived focus order)?
10. Can any user **understand and fill out** forms? Are they as simple as possible and require only what’s needed for task completion?
11. Is imagery easily distinguished as **meaningful content or decorative**?
12. Is **content understandable** for content associated with images and icons?
13. Are **data visualizations** easy to grasp?
14. Are **touch targets** large enough and easy to reach?
15. Can a **screen reader access** all functionality and content?
### Engineering
Pretty much everything above plus…
1. Do **heading elements** (e.g. `
` through `
`) accurately reflect a logical hierarchy of content and features?
2. Are **semantic HTML elements** being used appropriately, and extended where appropriate with ARIA attributes and roles?
3. Does your **automated accessibility testing** tools provide accurate results?
## Best Practices
### Color Contrast Ratio
Dialpad strives to maintain **WCAG 2.1 AA** compliance in our digital products, including color contrast. [WCAG guidelines](https://www.w3.org/TR/WCAG21/#contrast-minimum) require a minimum of 4:51 ratio for all content in regular-weight fonts.
For easy reference, our color references are displayed alongside a contrast rating. Note that these are calculated using either a white or black background, and contrast between type and background should always be verified when using different background colors.
To check color contrast combination, try one of these tools:
* Colorable
* WebAim
* Figma plugin: Stark
### Semantics
One of the simplest things we can do to make more accessible sites is to build with semantic HTML. Creating semantic HTML, or “semantic markup” is the practice of using the appropriate HTML element to convey information about the meaning and context of each element. For example, for a paragraph or bulleted list, you would use `p` or `ul` tags, respectively. In places where there is no HTML element which has a matching semantic meaning for what you are creating, you will want to employ the use of an inline `span`, or division element `div`.
Semantic markup also maintains the separation between the semantics and the visual presentation. For example, it’s common to choose which heading element to use based on its style, but that would be incorrect. The proper way would be [choosing the semantic heading level](#headings) and then applying CSS to style it, thus not using your mark-up as a means to style.
Inversely, there may be times when you want a `button`, `select`, etc. element, but also want it to have just slightly different behavior or non-native styling. In these cases, we generally choose to use a `div` or less semantic implementation. Be so careful when you decide to do this. We forget how much native functionality is built in a `button`, `link`, `select`, etc. and re-creating that exact implementation so a screen reader user or keyboard-only user can still interact with the element appropriately can be complex and time consuming.
As an example, to recreate a `button` with a `div`, you would need to add in multiple ARIA attributes, manage focus, and then also add additional JavaScript to allow you to click it, or use the spacebar and enter key to activate it. You can learn more by watching [“Just Use a Button,”](https://www.youtube.com/watch?v=CZGqnp06DnI) as explained by Rob Dodson from the Google Chrome Team.
#### Structural Semantics and Landmarks
The following HTML elements should be used to identify common elements of our products.
```html