Skip to content

Cards

Cards are the primary content container in Naluma. They hold session previews, educational content blocks, progress summaries, and settings groups. The card design is intentionally understated — a white surface with a subtle shadow that lifts it just enough to distinguish it from the background without creating visual noise.

Token source: tokens/component/card.json


Standard card — light

Tonight's session

You've completed 12 consecutive sessions this month. Your average session length is 23 minutes, with the most effective window between 9 and 11 PM.

Standard card — dark

Tonight's session

You've completed 12 consecutive sessions this month. Your average session length is 23 minutes, with the most effective window between 9 and 11 PM.

Feature card — radius.xl + shadow.lg

Your progress this week

7

sessions completed

PropertyTokenResolved value
Backgroundsemantic.color.surface.card#FFFFFF (white)
Border radiusprimitive.radius.md8px
Shadowprimitive.shadow.md0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)
Paddingprimitive.spacing.2424px
PropertyTokenResolved value
Font familyprimitive.font-family.headingLiterata (serif)
Font sizeprimitive.font-size.1818px
Font weightprimitive.font-weight.semibold600
Colorsemantic.color.text.primary#3D2E2A (warm-dark)
PropertyTokenResolved value
Font sizeprimitive.font-size.1414px
Colorsemantic.color.text.secondary#7A6560 (muted-brown)
Line heightprimitive.line-height.body-sm1.65

In dark mode, the card background shifts to the elevated dark surface color:

PropertyDark mode tokenResolved value
Backgroundsemantic.color-dark.surface.card#352C29 (dark-surface)
Title colorsemantic.color-dark.text.primary#FBFAF1 (warm-white)
Body colorsemantic.color-dark.text.secondary#B09A90 (dim-brown)

The shadow remains the same — the rgba(0,0,0,...) values work across both themes since they are relative to the surface beneath them.


  • 24px internal padding is the default. Do not reduce card padding to fit more content — if the content doesn’t fit, the card needs to show less.
  • One primary action per card. If a card is tappable, the entire surface should be the tap target. Do not nest multiple interactive elements within a card.
  • Cards should not stack without spacing. Use at least spacing.16 between cards to avoid a wall-of-content effect.
  • Feature cards (e.g., session start, milestone reached) can use primitive.radius.xl (20px) and primitive.shadow.lg for emphasis. Use sparingly.