Meeting Card

A schedule card with a colored left accent, title, time and attendee avatars. Built from two Figma components in sequence: the Meeting Card (Tertiary, Primary, Secondary variants) and the Meetings List (stacked container). All values pulled directly from the LUSTER Figma variables.

Design Sync
9 - 10 AM
attendeeattendeeattendeeattendeeattendee
Figma Properties
Variant: Tertiary
Background: #FEE9E9
Left accent: #F54E4E
Title: #F32727
Padding: 24px · Left border: 4px

Component · Meeting Card (Variants)

Three semantic variants — each maps a palette family to the background, left accent, title, time and avatar-border color.

Design Sync
9 - 10 AM
attendeeattendeeattendeeattendeeattendee
Tertiary
Design Sync
9 - 10 AM
attendeeattendeeattendeeattendeeattendee
Primary
Design Sync
9 - 10 AM
attendeeattendeeattendeeattendeeattendee
Secondary

Component · Meetings List

A titled container that stacks meeting cards with a 12px gap — exactly as composed in Figma.

Meetings
Design System Meeting
9 - 10 AM
attendeeattendeeattendeeattendeeattendee
Team Lunch
1 - 2 PM
attendeeattendeeattendeeattendeeattendee
Design Review
3 - 4 PM
attendeeattendeeattendeeattendeeattendee

Design Tokens

Token names mirror the LUSTER Figma variable paths one-to-one. Values shown are the Diamond brand, Light mode defaults (the Figma file's default mode). Other brands (Amber, Opal) and Dark mode resolve to different values via the Color Theme & Component Brand collections.

Token NameFigma VariableDefault Value
--meetingCardGapmeetingCard/gap12px
--meetingCardTitleMarginBottommeetingCard/title/margin-bottom8px
--meetingCardListGapmeetingCard/list/gap12px
--meetingCardPaddingXmeetingCard/padding/x24px
--meetingCardPaddingYmeetingCard/padding/y24px
--meetingCardBorderRadiusmeetingCard/border/radius0px
--meetingCardBorderWidthLeftmeeting card/border/width/left4px
--meetingCardBorderWidthRightmeeting card/border/width/right0px
--meetingCardPrimaryBgColormeetingCard/primary/bg/color#F2EDFF
--meetingCardPrimaryBorderColormeetingCard/primary/border/color#916DFF
--meetingCardPrimaryTitleFontColormeetingCard/primary/title/font/color#794DFF
--meetingCardPrimaryTimeFontColormeetingCard/primary/time/font/color#AB8FFF
--meetingCardPrimaryAvatarBorderColormeetingCard/primary/avatar/border/color#F2EDFF
--meetingCardSecondaryBgColormeetingCard/secondary/bg/color#E6FAED
--meetingCardSecondaryBorderColormeetingCard/secondary/border/color#2ED46B
--meetingCardSecondaryTitleFontColormeetingCard/secondary/title/font/color#00CA4B
--meetingCardSecondaryTimeFontColormeetingCard/secondary/time/font/color#5EDE8E
--meetingCardSecondaryAvatarBorderColormeetingCard/secondary/avatar/border/color#E6FAED
--meetingCardTertiaryBgColormeetingCard/tertiary/bg/color#FEE9E9
--meetingCardTertiaryBorderColormeetingCard/tertiary/border/color#F54E4E
--meetingCardTertiaryTitleFontColormeetingCard/tertiary/title/font/color#F32727
--meetingCardTertiaryTimeFontColormeetingCard/tertiary/time/font/color#F77777
--meetingCardTertiaryAvatarBorderColormeetingCard/tertiary/avatar/border/color#FEE9E9
--avatarBorderRadiusavatar/border/radius0px
--avatarBorderWidthavatar/border/width2px
--avatarSizeSmHeightavatar/size/sm/height24px
--avatarGroupGapavatarGroup/gap/gap-4px
--sectionBgColorsection/bg/color#FFFFFF
--sectionBorderRadiussection/border/radius0px
--sectionPaddingYsection/padding/y24px
--sectionMarginBottomsection/margin-bottom24px
--sectionTitleFontColorforeground/on surface (list title)#24242C
--sectionShadowColorsection/shadow/color#CECBDC
--sectionShadowOffsetXsection/shadow/offset-x0px
--sectionShadowOffsetYsection/shadow/offset-y0px
--sectionShadowBlursection/shadow/blur0px
--meetingCardListContentmeeting card/list/contentMeetings
--titleFontSizetypography/title/font/size16px
--titleFontLineHeighttypography/title/font/lineHeight19px
--titleFontWeighttypography/title/font/weight700
--bodyFontSizetypography/body/font/size16px
--bodyFontLineHeighttypography/body/font/lineHeight19px
--bodyFontWeighttypography/body/font/weight400
--caption1FontSizetypography/caption-1/font/size12px
--caption1FontLineHeighttypography/caption-1/font/lineHeight14px
--caption1FontWeighttypography/caption-1/font/weight400
--bodyFontFamilybody/font/familyInter

Usage Guidelines

✓ DO

Use the variant color to signal the meeting category or status.

✓ DO

Show attendees with the Avatar Group, collapsing overflow to +N.

✗ DON'T

Don't drop the left accent — it carries the semantic meaning.

✗ DON'T

Don't overload the card — keep it to title, time and attendees.

Implementation

Values shown are the Diamond brand, Light mode defaults (the Figma file's default mode). Other brands (Amber, Opal) and Dark mode resolve to different values via the Color Theme & Component Brand collections.

import { AvatarGroup, Avatar } from '@luster/ui';
import './MeetingCard.css';

type Variant = 'primary' | 'secondary' | 'tertiary';

export const MeetingCard = ({ variant = 'primary', title, time, attendees }) => (
  <article className={`meeting-card meeting-card--${variant}`}>
    <h4 className="mc-title">{title}</h4>
    <p className="mc-time">{time}</p>
    <AvatarGroup>{attendees.map(a => <Avatar key={a.id} {...a} />)}</AvatarGroup>
  </article>
);

export const MeetingsList = ({ title = 'Meetings', children }) => (
  <section className="meetings-list">
    <h3 className="meetings-list__title">{title}</h3>
    {children}
  </section>
);