Reddit

Reddit's iOS app is a card-based community reader organized around the single most recognizable interactive control in consumer tech: the upvote/downv

Back to all styles

A live page in this style is not built yet — the CSS variables and the prompt below are enough to reproduce it.

At a glance

24tokens
7type steps
2radius steps
3pxspacing base

Reddit, in one page

Reddit's iOS app is a card-based community reader organized around the single most recognizable interactive control in consumer tech: the upvote/downvote column. Every post in a feed — whether from r/aww, r/AskReddit, or r/programming — is laid out the same way: a horizontal card with the vote arrow stack on the left (up arrow, karma number, down arrow), a subreddit avatar + "r/subredditname", a post title, optional media preview, and a row of actions (comments count, share, save, more). The consistency of this unit is the brand. A Reddit power user can scan 50 cards in 20 seconds because every card is structurally identical.

Reddit's color system is a two-pole light-mode vs dark-mode pair stitched together by the Reddit Orange-Red (#FF4500) — the single brand accent seen in the app logo, subreddit pill tints, and (historically) the upvote hover. The functional accent work, though, is done by a smaller palette: Upvote Orange (#FF8717) on active upvotes, Downvote Blue-Purple (#7193FF light / #9494FF dark) on active downvotes, and a grayscale for dormant votes. This is a meaningful chromatic decision: orange + blue-purple are complementary, they read semantically (warmth vs coolness) for approve vs disapprove, and they NEVER both light up at once because a user can only vote one way.

The mood is information-density-first. Reddit is a reading and scrolling app — people spend minutes in a thread, not seconds — so the app tolerates high-density cards with small type (14pt body, 12pt metadata) and uses ample white space ONLY inside cards (16pt internal padding), not between them. Newer Reddit iOS adds media-first card variants — photo-dominant, video-autoplaying — but the bone structure (vote column + meta + title + actions) stays. Subreddit customization is a signature feature: each community can set its own accent color (the "subreddit color"), its own banner image, its own sidebar rules, so a thread in r/AnimalCrossing looks cozy green and a thread in r/programming looks cool steel.

Key Characteristics:

Do's and don'ts

Do

  • Use #FF4500 (Reddit Orange-Red) as the single brand accent — logo, key CTAs
  • Use the semantic vote pair: #FF8717 upvote orange and #7193FF downvote blue-purple
  • Show the vote column on EVERY post and comment — it's the brand
  • Keep cards flat — use corner radius (16pt in card view, 0pt in classic) not shadows
  • Render Markdown inline: bold, italic, quote, code, link
  • Support subreddit accent color customization — the Join button should tint to community color
  • Use circular subreddit avatars — r/subredditname pill next to avatar
  • Indent comment replies 10pt per level with a 2pt vertical rule on the leading edge
  • Use Reddit Sans (fallback Noto Sans, then SF Pro) at 14pt body / 18pt title / 12pt meta
  • Offer both card view (16pt corners) and classic view (0pt full-bleed) as a user preference

Don't

  • Don't flip the semantic vote colors — upvote MUST be warm (orange) and downvote cool (blue-purple)
  • Don't put the vote column anywhere other than left of post content (or below media in media-first)
  • Don't use drop shadows on post cards — Reddit is flat
  • Don't skip the subreddit r/name pill — every post must identify its community
  • Don't use brand red #FF4500 for the upvote — that's #FF8717 orange
  • Don't use blue #0079D3 as an accent — that's the LINK color, not the brand color
  • Don't round subreddit avatars to anything other than circles
  • Don't compress the metadata row — r/subreddit • timestamp • comments should be readable
  • Don't use Discord-style role colors for usernames — Reddit keeps usernames neutral
  • Don't animate vote state changes too aggressively — a subtle bounce + color swap is enough

Copy this into your AI builder

Paste it as-is. Every value below was measured from the original site, not guessed.

Assembled from the measured tokens — the source document has no prompt block.

Build a page in the Reddit design language. Follow the measured tokens below — do not substitute your own palette.

Colors:
- Reddit Orange-Red: #ff4500
- Reddit Red: #ff585b
- Orange-Red Pressed: #cc3700
- Upvote Orange: #ff8717
- Upvote Orange (Dark Mode): #ffaa66
- Downvote Blue-Purple (Light): #7193ff
- Downvote Blue-Purple (Dark): #9494ff
- Vote Arrow Inactive: #878a8c
- Canvas (New): #f6f7f8
- Canvas (Classic): #dae0e6

Type:
- families: Reddit Sans, Noto Sans, SF Pro Text, SF Pro Display
- scale: 11, 12, 13, 14, 17, 18, 24
- weights: 400, 500, 600, 700

Shape:
- radius: 0, 20

Spacing: 3, 8, 12

Rules:
- Use `#FF4500` (Reddit Orange-Red) as the single brand accent — logo, key CTAs
- Use the semantic vote pair: `#FF8717` upvote orange and `#7193FF` downvote blue-purple
- Show the vote column on EVERY post and comment — it's the brand
- Keep cards flat — use corner radius (16pt in card view, 0pt in classic) not shadows
- Render Markdown inline: bold, italic, quote, code, link
- Support subreddit accent color customization — the Join button should tint to community color

Avoid:
- Don't flip the semantic vote colors — upvote MUST be warm (orange) and downvote cool (blue-purple)
- Don't put the vote column anywhere other than left of post content (or below media in media-first)
- Don't use drop shadows on post cards — Reddit is flat
- Don't skip the subreddit `r/name` pill — every post must identify its community
- Don't use brand red `#FF4500` for the upvote — that's `#FF8717` orange
- Don't use blue `#0079D3` as an accent — that's the LINK color, not the brand color

Keep every value literal. If a token is given, use that exact value.

The specification

Colour paletteRead the full spec

Primary Brand

  • Reddit Orange-Red (#FF4500): The single brand accent — logo, primary CTA pill, subreddit pill accent, occasional button.
  • Reddit Red (#FF585B): Alerts, destructive banners, "community removed" warnings.
  • Orange-Red Pressed (#CC3700): Pressed state for primary CTAs.

Vote Colors (The Semantic Pair)

  • Upvote Orange (#FF8717): Active upvote — slightly yellower than Reddit Red, intentionally distinct from the brand red.
  • Upvote Orange (Dark Mode) (#FFAA66): Lighter variant for dark mode contrast.
  • Downvote Blue-Purple (Light) (#7193FF): Active downvote — indigo-adjacent, cold.
  • Downvote Blue-Purple (Dark) (#9494FF): Lighter variant for dark mode.
  • Vote Arrow Inactive (#878A8C light / #818384 dark): Gray dormant state.

Canvas & Surfaces (Light Mode)

  • Canvas (New) (#F6F7F8): Default light canvas — a cool very-light gray.
  • Canvas (Classic) (#DAE0E6): The "old Reddit" blue-tinged light canvas, still used in some contexts.
  • Card Surface (#FFFFFF): Post cards and comment threads sit on white.
  • Surface 2 (#F2F3F5): Hovered/pressed card state.
  • Divider (#EDEFF1): Hairline between cards, between comments.
  • Subreddit Banner Placeholder (#0079D3): Default blue tint if no custom banner.

Canvas & Surfaces (Dark Mode)

  • Canvas (Dark) (#1A1A1B): Primary dark canvas.
  • Card Surface (Dark) (#272729): Post cards and comment threads.
  • Surface 2 (Dark) (#343536): Hovered / pressed card state, input backgrounds.
  • Divider (Dark) (#343536): Dark-mode separator.
  • Chat Surface (Dark) (#161617): Slightly darker than canvas for chat screens.

Text

  • Text Primary (Light) (#1A1A1B): Post titles, body text.
  • Text Secondary (Light) (#7C7C7C): Metadata — "2h ago", "r/subreddit • 125 comments".
  • Text Tertiary (Light) (#AFAFAF): Placeholder, disabled.
  • Text Primary (Dark) (#D7DADC): Dark-mode primary.
  • Text Secondary (Dark) (#818384): Dark-mode metadata.
  • Text Link (#0079D3): Hyperlinks in comments and post body.

Subreddit Accent Colors

Each subreddit can set its own "accent color" — seen on the join button, the sidebar, and the banner tint. This is configurable per-community, commonly:

  • Default (#0079D3), Gaming (#24A0ED), AskReddit (#FF4500), Memes (#A5A4A4), etc.

Semantic

  • Success Green (#46D160): Successful actions.
  • Warning Yellow (#FFB000): Warning banners.
  • Error Red (#FF585B): Error messages.
  • Gold Award (#FFB000): Gold Award badge (Reddit removed in 2023 but still in historical data).
  • Silver Award (#C7C7C7): Silver Award badge.
  • Reddit Premium (#FFD635): Premium subscriber badge, Reddit Gold era.
  • NSFW Tag (#F3B200 pill with black text): "NSFW" post flair.
  • Spoiler Tag (#000000 pill with white text): "SPOILER" flair.
Type scaleRead the full spec

Font Family

  • Primary (2023+): Reddit Sans (proprietary, released 2023) — a humanist sans with gentle curves, designed for long reading sessions. Has Regular, Medium, SemiBold, Bold, Black.
  • Secondary (Fallback): Noto Sans — used for non-Latin scripts.
  • Tertiary (Fallback): SF Pro Text / SF Pro Display — iOS native fallback.
  • Monospace: Reddit Mono (2023+) for code blocks; fallback SF Mono.
  • Fallback Stack: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Noto Sans', Helvetica, Arial, sans-serif

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
Large TitleReddit Sans24pt7001.2-0.3pt"Home", "Popular", subreddit name on detail
Post TitleReddit Sans18pt6001.25-0.2ptThe post title card headline
Body TextReddit Sans14pt4001.5-0.1ptPost body, comment body
Comment BodyReddit Sans14pt4001.5-0.1ptSame as body (comments are first-class)
MetadataReddit Sans12pt4001.30pt"r/subreddit • 2h ago • 125 comments"
Karma (Vote Column)Reddit Sans12pt7001.00ptThe number between up/down arrows
Subreddit PillReddit Sans12pt6001.00pt"r/AnimalCrossing" pill
Flair PillReddit Sans11pt6001.00.2ptPer-subreddit colored flair tags
UsernameReddit Sans12pt5001.20pt"u/username" in comments
Button (Primary)Reddit Sans14pt6001.00pt"Join", "Continue"
Tab LabelReddit Sans11pt5001.00.1ptBottom tab labels
Nav TitleReddit Sans17pt6001.2-0.2ptTop nav bar title
Section HeaderReddit Sans13pt7001.20.5pt"COMMUNITY INFO" tracked uppercase
Code (Mono)Reddit Mono13pt4001.50ptInline + block code in comments

Principles

  • 14pt is the workhorse: Post body, comments, replies all at 14pt regular. This is tuned for long-form reading in a chat-like density.
  • 12pt for metadata: Timestamps, subreddit pills, comment context all at 12pt — small but scannable.
  • 18pt for post title is the hero — big enough to catch attention on a card, small enough to fit multi-line titles.
  • Dynamic Type respected: Body text and post titles scale; vote-column karma number, tab labels, and flair pills are fixed for layout.
  • Username hierarchy: "u/username" in 12pt weight 500 — not as prominent as subreddit r/ pills, because Reddit is community-first, not user-first.
  • Markdown rendering: Post and comment bodies render full Markdown — bold, *italic*, ~~strike~~, > quote, [link](url), ` code `, triple-backtick blocks, headers, lists.
Components and layoutRead the full spec

Buttons

Primary Pill (Join / Continue)

  • Shape: Pill, 24pt corner radius (or 500pt for full-capsule)
  • Background: #FF4500 for universal primary; subreddit-accent color for community-specific CTA
  • Text: white, Reddit Sans 14pt weight 600
  • Padding: 8pt vertical, 20pt horizontal
  • Pressed: darker shade + scale 0.97
  • Used for: "Join" (subreddit), "Continue", "Create Post"

Secondary Outline

  • Background: transparent
  • Text: subreddit accent color (or #1A1A1B / #D7DADC default)
  • Border: 1pt solid #EDEFF1 (light) or #343536 (dark)
  • Pressed: background #F2F3F5 / #343536
  • Used for: "Joined" (after joining), "Follow"

Subreddit Join Button

  • Same as primary pill, but tinted in the subreddit's custom accent color
  • When joined, shifts to outline style with "Joined" text
  • Icon prefix: + (not joined) or checkmark (joined)

Vote Arrow (The Signature Button)

  • Two stacked icons with a karma number between them
  • Arrow icon: upward/downward chevron, 18pt
  • Default (inactive): #878A8C / #818384
  • Active up: #FF8717 (orange)
  • Active down: #7193FF / #9494FF (blue-purple)
  • Hit target: 36pt × 36pt per arrow
  • Tap: immediate state change + soft haptic + brief scale bounce (1.0 → 1.2 → 1.0)
  • Karma number: Reddit Sans 12pt weight 700, center-aligned between arrows, color matches active vote state (orange/blue-purple/gray)

Icon Actions (Comments, Share, Save, More)

  • Size: 18pt icon + optional count
  • Layout: horizontal row below post content
  • Default: #878A8C / #818384
  • Active (saved): #FFB000 gold
  • Tap hit area: 44pt

Cards & Containers

Post Card (The Signature Component) A self-contained post as a card with structured sections.

  • Background: #FFFFFF light / #272729 dark
  • Corner radius: 0pt (old Reddit style) or 16pt (new card style — user preference toggle)
  • Padding: 12pt internal
  • Structure (TOP to BOTTOM): 1. Header row (10pt height): subreddit avatar (20pt circular) + r/subreddit pill + • + timestamp + • + optional "Pinned" or "Crosspost" tag 2. Title row: post title in Reddit Sans 18pt weight 600, #1A1A1B / #D7DADC, up to 3-line clamp 3. Flair row (optional): horizontal row of pill tags, 11pt weight 600 4. Preview row (optional): image, video, gallery, link card, or text preview 5. Action row (32pt height): Vote arrow column + karma (left) + comments count + share + save + more (right side)
  • Between cards: 8pt gap with canvas color showing through
  • Tap: slight background tint (#F2F3F5 / #343536) + navigate to detail

Post Card — Media-First Variant For image/video-dominant posts, the media takes the top 60% of the card with title + vote column overlaid or below:

  • Image: full-width, up to 16:9 or 1:1 aspect
  • 16pt radius on corners (when cards enabled); 0pt when classic view
  • Title below image in 18pt weight 600
  • Vote column at bottom-left; actions bottom-right

Comment

  • Leading indentation line: 2pt #EDEFF1 / #343536 vertical bar, Int × 10pt from leading edge (each reply level indents 10pt)
  • Structure: avatar (optional, 20pt circular) + username + • + timestamp + • + karma (if not hidden) — then body text
  • Body: 14pt weight 400, line-height 1.5
  • Trailing actions: reply, vote arrows, share, more (ghost/muted icons)
  • Collapse indicator: [-] or [+] at leading edge to toggle thread collapse

Subreddit Banner (Detail Screen)

  • Full-width banner image OR solid color matching subreddit accent
  • Height: 120-180pt
  • Subreddit avatar: circular 72pt, overlapping the bottom of banner by 36pt, white 3pt border
  • Below: subreddit name (Reddit Sans 22pt weight 700), member count (12pt #7C7C7C)
  • Trailing "Join/Joined" button at top-right of banner

Chat Channel Card

  • Newer Reddit feature — group chat rooms
  • Similar card layout to posts but with "Live" badge if active
  • Member count + "chatting now" indicator

Navigation

Bottom Tab Bar

  • Height: 49pt + safe area
  • Background: #FFFFFF (light) / #1A1A1B (dark) — solid, no blur
  • Tabs: Home, Communities, Create (center, with + FAB-style), Chat, Inbox
  • Active color: #FF4500 (brand red) or #D7DADC (neutral — varies)
  • Inactive: #878A8C / #818384
  • Labels: Reddit Sans 11pt weight 500
  • Badge: red #FF585B circle with white count

Top Nav (Feed)

  • Height: 44pt + safe area
  • Leading: profile avatar (28pt circular)
  • Center: subreddit name or "Home" / "Popular" / "All" switcher (tap to open sheet)
  • Trailing: search + sort + more
  • Background: #FFFFFF light / #1A1A1B dark with bottom 1pt divider

Top Nav (Subreddit Detail)

  • Transparent over banner image when scrolled to top
  • Collapses to solid surface with subreddit name + back chevron on scroll
  • Trailing: Join button + search + more

Input Fields

Compose (Create Post)

  • Full-screen modal
  • Subreddit picker at top (pill with r/pickme placeholder)
  • Title input: 18pt weight 600 placeholder "Title"
  • Body input: 14pt regular placeholder "body (optional)"
  • Formatting toolbar: Bold, Italic, Link, Quote, Code, List (flat icons, 20pt)
  • Attach row: Photo/Video, Poll, Link, GIF
  • Submit button: #FF4500 pill "Post" in top-right nav

Search Bar

Responsive behaviourRead the full spec

Device Sizes

DeviceWidthKey Changes
iPhone SE (3rd gen)375ptVote column collapses to 32pt; title clamp 2 lines
iPhone 13/14/15390ptStandard 44pt vote column; 3-line title clamp
iPhone 15/16 Pro393ptDynamic Island accommodated in nav
iPhone 15/16 Pro Max430ptStandard layout with slightly wider cards
iPad768pt+Two-column feed in landscape

Dynamic Type

  • Post title, body, comment body: respect Dynamic Type
  • Karma number, tab labels, flair pills, vote arrow icons: fixed size
  • Timestamp / metadata: respects Dynamic Type but capped at 14pt

Orientation

  • Feed, thread, chat: portrait-locked on iPhone (except video posts in landscape)
  • Image / video viewer: rotates to landscape
  • iPad: all orientations; feed becomes 2-column in landscape

Touch Targets

  • Vote arrows: 36pt × 36pt each, stacked
  • Card tap: full card surface
  • Action row icons: 44pt hit area
  • Subreddit pill tap: hit area expands around pill
  • Comment collapse arrow: 32pt hit area

Safe Area Handling

  • Top: nav bar respects safe area; transparent over banner scrolls into solid
  • Bottom: tab bar respects home indicator; chat compose bar floats above safe area
  • Sides: 16pt content insets

Drop-in CSS variables

The same values as a theme block. Add the class to <body> and the site repaints.

body.theme-reddit {--page-bg: #f6f7f8;
  --page-bg-gradient: none;
  --text-color: #000000;
  --heading-color: #000000;
  --link-color: #c33400;
  --link-hover-color: #902600;
  --border-color: #cacbcb;
  --card-bg: #f6f7f8;
  --card-shadow: 0 1px 2px rgba(0,0,0,0.06);
  --card-hover-shadow: 0 6px 18px rgba(0,0,0,0.12);
  --header-bg: #000000;
  --header-text-color: #ffffff;
  --header-shadow: none;
  --footer-bg: #f6f7f8;
  --footer-text-color: #565657;
  --button-bg: #ff4500;
  --button-text-color: #000000;
  --button-hover-bg: #cc3700;
  --button-border: none;
  --button-border-radius: 20px;
  --button-secondary-bg: #e7e8e9;
  --button-secondary-text-color: #000000;
  --button-secondary-hover-bg: #d8d9da;
  --button-secondary-border: 1px solid #cacbcb;
  --prompt-bg: #eaebec;
  --prompt-text-color: #000000;
  --base-font: var(--font-helvetica);
  --heading-font: var(--font-mono);
  --card-border-radius: 20px;
}

Download theme.css

Visually close to

Measured with a deterministic colour + geometry comparison across 958 styles. Not a hand-picked list.

Where this came from

Source document
ios/design-md/social/reddit/DESIGN.md · 27.2 KB
Repository
Meliwat/awesome-ios-design-md
Licence
MIT

Source text is reproduced under its original licence. Tokens, similarity scores and page structure are ours.