Skip to main content
Flowra
PricingCommunityFAQ
JoinStart with Flowra
  • PricingPlans, seats and payment
  • Frequently asked questionsEverything you have asked, in one place
  • Contact usWrite to the right team
  • CommunityKaro Studio, who make Flowra

For your team

  • Marketing teamsCampaigns from brief to launch
  • Product and dev teamsFeatures and bugs with full context
  • Design and content teamsBrief, files and delivery side by side
  • Operations teamsWork, documents and costs you can track
  • Sales and services teamsFrom meeting to contract and payment
  • Remote teamsOnline meeting to delivery, on your time

For your role

  • Project managersAction stories instead of chasing the team
  • Freelancers and consultantsFrom brief to contract and settlement

For your workflow

  • Meeting to actionMeeting decisions as trackable work
  • Actions with financial contextCosts next to the work that caused them
  • Actions with contract contextEvery commitment as trackable work
  • Brief to project deliveryEvery project step, one complete action
See all solutionsStart with FlowraJoin
++
Flowra design system

Fundamentals

PrinciplesVoice and writingCopy rules for each surfaceGlossaryRTL and languagesNumbers and datesAccessibility

Foundations

ColorDark modePrintingTypographySpacing and layoutRadius and shadowLayersMotionNotification soundKeyboard shortcutsIconsService logos

Components

ButtonsText fieldPickerDate and timeCheckboxRadioKeySegmented controlSliderMenu and sheetDialogCard and listTables and data listsBadge, pill, and switchTabs and filtersAvatarEmpty and loading statesProgress and stepsToastFloating helpNavigationPage headerAssistants

Patterns

Connector pageList, filter, and searchForm layoutCreation flowUpgrade promptConfirmation and irreversible actionsPhone layoutFixed bars and scrolling

Brand

Flowra brandMark and logoBrand colorBrand typographyMisuse

Design system/Components

Card and list row

The card is the base surface: white on the paper background, with a thin border and a quiet shadow. Lists inside cards are built from rows separated by dashed lines.

In codeapp/globals.css (.card, .dashed-top, .media-row)

On this page

  1. Card
  2. Rows
  3. Row anatomy
  4. Rules
  5. Sizes
  6. States

Card

The .card class defines only the surface: background, border, radius, and shadow. Inner padding comes from utilities (usually p-4), because a list card is edge to edge and a form card has padding.

Live example

Upcoming meetings

Three meetings this week; the first is tomorrow at 10.

Campaign briefToday
Contract reviewTomorrow
Landing page designThu

Rows

Rows inside a card are separated with .dashed-top, a 1px dashed line, and the first one has no line. A dashed line is lighter than a solid one and separates rows without scribbling over the card.

A tappable row gets its hover color only under a pointer that can actually hover, and on touch only while the finger is down. On phones, the buttons at the end of a row each become a 38px chip with their own background so they look like buttons, not decoration.

Live example
Contracts12 files
brief-summer.pdf2.4 MB
cover-final.png812 KB

Row anatomy

  1. MarkAn icon, avatar, or thumbnail; fixed size, flex-none.
  2. TextA title and one line of description; flex-1 and min-w-0 so it truncates instead of squeezing.
  3. MetadataDate, size, or badge, at the end.
  4. Actionsicon-btn elements; on desktop they may appear on hover, on phones they're always visible.

Rules

Do

Rows in one card, dashed-top with first:border-t-0.

Don't

A separate card for each row; the page turns into scattered tiles.

Do

Row text with truncate or controlled wrapping.

Don't

Text that pushes the actions out of the row.

Do

An action needed on phones is always visible.

Don't

An action that only appears on hover; fingers can't hover.

<div className="card overflow-hidden">
  {files.map((f) => (
    <div key={f.id} className="media-row dashed-top first:border-t-0 flex items-center gap-3 px-4 py-2.5">
      <Icon d={paths.file} size={16} />
      <span className="flex-1 min-w-0 truncate">{f.name}</span>
      <button className="icon-btn" aria-label={tr("دانلود")}><Icon d={paths.download} size={14} /></button>
    </div>
  ))}
</div>

Sizes

.cardradius 16px · border 1px var(--border)
Card shadow0 1px 2px rgba(24,20,14,.03), 0 10px 28px -18px rgba(24,20,14,.1)
.dashed-topborder-top: 1px dashed var(--border-strong)
.icon-btn desktop28 × 28px · radius 8pxNo hover or touch 38px
.icon-btn phone40 × 40pxIn a list row 38px · radius 11px · --muted
Phone rowgap 8px · flex-wrapName up to two lines
PrintingNo shadow · border 1px #ddd · break-inside: avoid

States

Row hover--mutedOnly @media (hover: hover)
Row press--muted:active, everywhere
icon-btn hover--text on --mutedOnly hover: hover
icon-btn press--text on --mutedPhone in a row: --border
Switch themebackground, border, color · 0.25s
  • At rest, icon-btn is --text-tertiary (2.16 to 1 on a light card); every icon-btn must have an aria-label, and on phones it gets a --muted background so it's visible.
  • The dashed --border-strong line on a card is 1.32 to 1; it's a divider, not a control boundary, so the 3 to 1 threshold doesn't apply.

Do

A tappable row is a full <button> or <Link>.

Don't

A div with onClick; you can't reach it with the keyboard.

Do

The first row has no dashed line: first:border-t-0 or a container rule.

Don't

A dashed line stuck to the card's own top edge.

Related pages

List, filter, and searchA full list with search and filters.Empty and loading statesA card that has nothing in it yet.Radius and shadow16 radius and the card shadow.AvatarAn avatar at the start of people rows.Connector pageThe connector card, a card with a logo and one button.Spacing and layoutSpacing inside and outside the card.
PreviousDialogNextTables and data lists

Related pages

  • PageBrand kitThe Flowra mark and logo, colors, typography, clear space and minimum size, and the brand kit files to download.
  • PageDocumentationThe complete Flowra guide: actions, calendar, meetings, knowledge, files, Folio, chat, network, finance, connectors, settings and AI, each with its connections.
  • PageChangelogWhat each release added to Flowra, what got better, and what’s coming next.
  • PageContact usReach the right team: support, sales and plans, partnerships, careers, or security and privacy.
Flowra

Flowra is an all-in-one workspace for managing tasks, projects, finances, meetings, and teamwork, powered by AI to keep everything organized in one place.

Solutions for teams

  • Marketing teams
  • Product and dev teams
  • Design and content teams
  • Operations teams
  • Sales and services teams
  • Remote teams

Roles and flows

  • Project managers
  • Freelancers and consultants
  • Meeting to action
  • Actions with financial context
  • Actions with contract context
  • Brief to project delivery

With Flowra

  • All solutions
  • Pricing
  • Frequently asked questions
  • Documentation
  • Contact us
  • Brand kit
  • Design system
Crafted by Karo Studio
SecurityPrivacyTermsCookies
Version 0.16.0