QR code colours and contrast: a table card that opens the menu
Print the QR code in a dark colour on a light background, never the other way round, and scan a real proof from half a metre in the room's own light before the print run.
Why the menu card is the hard case
A cafe table card is the place where QR code colours and contrast get tested every day. The card sits on the table, roughly 100 mm wide and 150 mm tall, folded so it stands. The guest picks up a phone, points it at the code from about half a metre, and expects the menu to open before the waiter arrives. The light is whatever the room gives: a window at lunch, warm bulbs at night, a candle on a bad day.
The code on that card opens the menu page. It does not hold the menu. That matters for colour, because the camera only needs to tell the dark squares from the light ones. Everything the guest reads afterwards comes from the page the code opens, so the code itself can be plain.
A plain code is a reliable code. Most scan failures we see on table cards trace back to colour choices made to match the room, not to the printer or the phone.
The one rule: dark on light
A phone camera looks for dark squares on a light background. That is the shape it expects. Keep the small squares, called modules, in a dark colour and the background in a light one, and nearly every phone made in the last ten years will read the code.
Dark means dark. Black is the safe choice. Navy, bottle green, maroon and charcoal all work when they are deep enough. The plain test is to squint at the proof. If the squares still stand out as a clear pattern, the colour is dark enough. If the code turns into grey mush, it is not.
Light means light. White is the safe choice. Cream, pale grey and a very pale blue are fine behind black squares. The gap between the two colours should be as wide as the gap between navy ink and cream card. If you have to look twice to tell the squares from the background, a camera will struggle more than you do.
The failures come from the middle of the range. Mid-blue on pale blue. Dark brown on kraft board. Orange on yellow. Each pair looks tidy on screen and reads as one tone to the camera.
Never inverted
Inverting the code, light squares on a dark background, looks striking on a dark menu card. Do not do it. Some phones read inverted codes. Many do not, and the ones that fail give no error. The guest just sees the camera do nothing and puts the phone down.
If the card design is dark, give the code its own light panel. A white square of about 40 mm, with a 30 mm code centred inside it, sits comfortably on a black or navy card. The panel also provides the quiet zone, the clear margin the camera needs around the code. On a 30 mm code that margin should be at least 3 mm on every side, with nothing printed in it. Not a border, not a logo, not the word scan.
Brand colours, used in the right place
A cafe that paid for a colour palette wants to see it on the card. Use it on the card, not in the code. The bright accent goes on the border, the heading and the line of text under the code. The code takes the darkest colour in the palette, or black, on the lightest.
Two-colour codes, gradients and codes with a photo behind them are the same mistake dressed up. Each one narrows the gap between square and background somewhere across the code. The camera reads the worst part, not the average.
A logo in the centre is a middle case. A code can lose a little of its pattern and still read, because the pattern carries some repair built in. On a 30 mm code, a logo of 6 mm or less in the centre is usually safe. Larger than that, and the margin for a scratch or a coffee ring is gone.
Size and distance for a table card
Colour and size fail together. A code that is slightly too pale and slightly too small fails where either fault alone would pass.
For a card read from across a table, plan on a 30 mm code at the smallest. The working rule is that the code should be about one tenth of the reading distance, so 30 mm serves half a metre and 35 mm gives comfort when the guest leans back. A counter card read from a standing position, roughly 0.7 m, wants 40 mm. Go up a size rather than down when the stock is textured or the print is inkjet, because both soften the edges of the squares.
A restaurant menu QR that re-points to a new page keeps the same printed code when the menu changes, so there is no reason to crowd the card with a code for every season. One code, one size, one clean panel.
Paper, ink and lamination
Uncoated card drinks ink. The squares spread a little, the gaps between them narrow, and a code that was fine on screen becomes dense and hard to read. On uncoated stock, print the code slightly larger and leave the modules black.
Kraft board is a common cafe choice and the hardest one for a code. Brown board behind dark brown ink is the exact middle-range pair that fails. If the card is kraft, print the code in black on a white panel, or print the code on a white sticker and apply that to the board.
Gloss lamination throws the ceiling lights back at the camera. Under spot lighting a glossy table card can show a white glare across the code at exactly the angle the guest is holding the phone. Matt lamination costs about the same and removes the problem. If gloss is unavoidable, test it under the restaurant's own lights, not the office's.
The test, before the print run
Print one proof at actual size on the actual stock, with the actual lamination. A screen preview tells you nothing about contrast, because a screen lights the code from behind and paper does not.
Stand the proof on a table. Scan it from half a metre with three different phones, including the oldest one anyone on the team owns. Do this in three lights: by the window in daylight, under the evening bulbs with the room lights down, and with the phone torch on in a dim corner. Tilt the card about thirty degrees and scan again. A guest rarely holds a phone square to the card.
Every scan should open the menu page in under two seconds. If any phone fails in any light, change the colour before anything else. Darken the squares or lighten the background. Do not shrink the card to fit a bigger code, and do not add a second code. One code that scans beats two that might.
Keep the proof. When the card is reprinted in a year, the same test on the same stock tells you whether the printer's ink or paper has changed.
Use code STARTUP10 for 10% off one order per account. It is valid until 31 December 2026 or for the first 100 uses on this site, whichever comes first.
To see how your code looks in a chosen colour before ordering, open the QR colours and shapes preview, pick dark squares on a light background and place the order from there.