Explore coffee color palettes with espresso, caramel, mocha, cream, and roast tones for cafés, food brands, portfolios, and comfortable dark themes.
Coffee palettes cover the range from espresso to milk in warm browns, caramel and cream, with very few cool colors. The roast ramps suit dark themes; the latte and rust palettes suit light ones.
About three quarters of the swatches in these 110 palettes are red-brown or orange-brown, with very few cool colors. Most palettes belong to one of three families, and each solves a different problem.
Use #1C0A00 for the page and #361500 for cards. Caramel #CC9544 is the accent and stays readable on both, at 7.27:1 and 6.29:1, so it can carry links and headings. For body text borrow the off-white from the latte palette: #FFFBE9 is 18.51:1 on the page.
The middle brown is the weak spot. #603601 is 1.60:1 against #361500, so it works for hover fills and subtle dividers but cannot mark a boundary that people need to see. Caramel on #603601 is 3.92:1: large text only.
[data-theme="dark"] {
--bg: #1c0a00;
--card: #361500;
--hover: #603601; /* 1.60:1 vs card, fills only */
--accent: #cc9544; /* 7.27:1 on --bg */
--text: #fffbe9; /* 18.51:1 on --bg */
}The latte family is pleasant but hard to build with, because every swatch is a midtone or lighter. #AD8B73 on #FFFBE9 is 3.01:1, and white on #AD8B73 is 3.13:1, so it fails as normal-size text in either direction.
The terracotta palette fills the gap. Sienna #A64B2A takes white labels at 5.74:1 and works as link text on #FFEBC1 at 4.89:1, while rust #8E3200 gives 6.87:1 for headings. Keep latte tones for backgrounds and cards, and take text and buttons from the rust end.
Use the darkest brown for text or for the page, cream for the opposite role, and caramel or sienna for actions. Add one cool color, such as a muted teal, if sections start to blend together.
Neighboring browns are close in value: #603601 on #361500 is 1.60:1. Keep at least one large jump between text and background, such as #FFFBE9 on #361500 at 16.00:1, and use caramel for accents rather than body text on mid-browns.
Updated