Pocket Casts

Pocket Casts is the connoisseur's podcast app, and its iOS design reflects that: a confident, dark-first interface where the circular cover-art moti

Back to all styles

Preview

Every style on this site is applied to the same sample page — same headline, same three columns, same footer. Only the stylesheet changes, so every difference you see below belongs to Pocket Casts, not to the copy.

A live page, not a screenshot — the frame scrolls. Open full preview ↗

At a glance

23tokens
8type steps
1radius steps
14pxspacing base

Pocket Casts, in one page

Pocket Casts is the connoisseur's podcast app, and its iOS design reflects that: a confident, dark-first interface where the circular cover-art motif, the single bold Red accent (#F43E37), and a per-podcast color theme sampled from each show's artwork combine into something instantly recognizable. Open the app and you land on a grid of subscribed podcasts — square artwork tiles on a near-black canvas (#1A1A1A, not pure black) — then tap any show and the entire screen subtly re-tints to a color drawn from that podcast's cover. Pocket Casts Red is the brand constant (tab-bar selection, the Subscribe button, unplayed badges), but the moment you start listening, the Now Playing screen becomes a small bespoke environment colored by the show you chose.

The signature screen is the full-screen Now Playing player: a large rounded-corner cover image (often shown with the brand's circular "play ring" motif), the episode title and show name, a thin scrubber with a circular knob, and a transport row anchored by a big circular play button. Below the transport sits a row of action chips — Up Next, playback speed, Trim Silence, Star, Mark Played, Effects, AirPlay. The scrubber fill, the play button, and any active chip all take the theme tint (here #E0533C), while the canvas and chrome stay monochrome so the cover art and the colored controls do the talking. The second-most-iconic surface is the episode list — date-stamped rows with a small artwork thumbnail, a one-line title, duration/remaining metadata, and a circular play/queue button on the trailing edge.

Pocket Casts' personality is "precise, premium, dark." There are no playful gradients in the chrome, no skeuomorphism — just crisp Inter-style type (SF Pro on device), generous tap targets, pill-shaped buttons, and a disciplined Red. The most distinctive structural decisions are: (1) circular geometry — the play button, the speed/skip controls, episode-row play buttons, and the historic logo are all circles; (2) per-podcast theming — the app extracts a dominant color from cover art and applies it as the screen accent so each show feels like its own space; (3) the Up Next queue — a persistent, reorderable play queue surfaced from the Now Playing screen and the mini-player; and (4) Trim Silence + Volume Boost — power-user playback effects exposed as first-class toggles, a defining Pocket Casts feature.

Key Characteristics:

Do's and don'ts

Do

  • Use near-black #1A1A1A for the dark canvas — NOT pure #000000
  • Keep Pocket Casts Red #F43E37 as the single brand accent (tab selection, Subscribe, unplayed badge)
  • Sample a per-podcast theme tint from cover art and apply it to scrubber, play button, active chips
  • Make the play button and transport controls circular — circular geometry is core brand
  • Give cover art maximum size and a subtle theme-tint glow on the Now Playing screen
  • Use pill (999pt) corner radius for all buttons
  • Show durations and timecodes in tabular figures so digits don't jitter
  • Expose Trim Silence and Volume Boost as first-class toggles — they're signature features
  • Surface Up Next from the player and mini-player as a reorderable queue
  • Truncate episode-row titles to one line; show the full title on detail/player
  • Cross-fade the theme tint when switching podcasts — never a hard color cut

Don't

  • Don't use pure black #000000 as the canvas — #1A1A1A is the signature
  • Don't introduce a second brand accent — Red is it; per-podcast tint is the only other color
  • Don't make the play button rectangular — it must be a circle
  • Don't add a tint pill behind the active tab — Pocket Casts uses color + fill change only
  • Don't let chrome compete with cover art — keep surfaces monochrome
  • Don't use sharp corners on buttons — everything is pill-shaped
  • Don't hard-cut the theme tint when changing shows — always cross-fade 250ms
  • Don't bury Trim Silence in deep settings — it belongs on the player chip row
  • Don't wrap episode-row titles to multiple lines in lists — one line, ellipsis
  • Don't animate aggressively — motion is quiet, 150–300ms ease ranges
  • Don't use proportional figures for timecodes — they shift while scrubbing

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 Pocket Casts design language. Follow the measured tokens below — do not substitute your own palette.

Colors:
- single bold Red accent: #f43e37
- Pocket Casts Red: #f43e37
- Red Pressed: #d32b25
- Theme Tint (per-podcast): #e0533c
- Dark Canvas: #1a1a1a
- Dark Surface 1: #232323
- Dark Surface 2: #2e2e2e
- Dark Divider: #383838
- Canvas White: #ffffff
- Surface Gray Light: #f2f2f4

Type:
- families: SF Pro Text, SF Pro Display, Inter, Fallback Stack
- scale: 10, 12, 14, 15, 16, 18, 22, 32
- weights: 400, 500, 600, 700, 800

Shape:
- radius: 10
- elevation: Shadow: `rgba(theme, 0.55) 0 8px 24px -6px` under the play button only | Active reorder: row lifts with `rgba(0,0,0,0.4) 0 8px 16px` shadow | Knob: 13pt circle `#FFFFFF`, `rgba(0,0,0,0.5) 0 1px 4px` shadow

Spacing: 14

Rules:
- Use near-black `#1A1A1A` for the dark canvas — NOT pure `#000000`
- Keep Pocket Casts Red `#F43E37` as the single brand accent (tab selection, Subscribe, unplayed badge)
- Sample a per-podcast theme tint from cover art and apply it to scrubber, play button, active chips
- Make the play button and transport controls circular — circular geometry is core brand
- Give cover art maximum size and a subtle theme-tint glow on the Now Playing screen
- Use pill (999pt) corner radius for all buttons

Avoid:
- Don't use pure black `#000000` as the canvas — `#1A1A1A` is the signature
- Don't introduce a second brand accent — Red is it; per-podcast tint is the only other color
- Don't make the play button rectangular — it must be a circle
- Don't add a tint pill behind the active tab — Pocket Casts uses color + fill change only
- Don't let chrome compete with cover art — keep surfaces monochrome
- Don't use sharp corners on buttons — everything is pill-shaped

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

The specification

Colour paletteRead the full spec

Primary (Interactive)

  • Pocket Casts Red (#F43E37): The brand accent — tab-bar selected state, Subscribe button, unplayed-episode dot, primary CTAs, brand logomark.
  • Red Pressed (#D32B25): Pressed/active state of Red buttons.
  • Theme Tint (per-podcast) (#E0533C example): A color extracted from the open podcast's cover art. Applied to the Now Playing scrubber fill, the circular play button, and active action chips. Varies per show — this doc uses a warm coral as the representative example.

Canvas & Surfaces (Dark Mode — canonical)

  • Dark Canvas (#1A1A1A): Primary dark canvas — Pocket Casts' signature near-black, NOT pure #000000.
  • Dark Surface 1 (#232323): Cards, list backgrounds, settings groups, elevated rows.
  • Dark Surface 2 (#2E2E2E): Scrubber track, inactive toggle track, pressed rows, chips.
  • Dark Divider (#383838): Hairline separators between episode rows and setting rows.

Canvas & Surfaces (Light Mode)

  • Canvas White (#FFFFFF): Primary light canvas.
  • Surface Gray Light (#F2F2F4): Cards, grouped list backgrounds.
  • Surface Pressed Light (#E6E6E8): Pressed rows.
  • Divider Light (#E2E2E4): Hairline separators.

Text

  • Text Primary Dark (#FFFFFF): Episode titles, screen titles, transport icons on dark.
  • Text Secondary Dark (#B8B8B8): Show names, duration, supporting metadata.
  • Text Tertiary Dark (#757575): Date eyebrows, disabled, very low-emphasis.
  • Text Primary Light (#1A1A1A): Primary text on light.
  • Text Secondary Light (#6B6B6B): Secondary text on light.

Accent & Semantic

  • Info Blue (#03A9F4): Links, informational highlights, "New" network labels.
  • Played Green (#78D549): Played/complete checkmark, success states, download-complete tick.
  • Star Gold (#FBC02D): Starred-episode indicator.
  • Error Red (#F43E37): Reuses brand Red for destructive/error (delete download, remove from Up Next).
  • Warning Amber (#FFB300): Storage-warning, sync-conflict banners.
  • Download Blue (#03A9F4): Active-download progress ring.

Theme Tint Examples (per-podcast accents — illustrative)

Pocket Casts derives a tint from each show's cover art. Representative palette:

Show TypeTheme TintUsed For
Warm / news#E0533CScrubber, play button, active chips
Cool / tech#3E7BC2Scrubber, play button, active chips
Green / nature#3FA66AScrubber, play button, active chips
Purple / culture#7E57C2Scrubber, play button, active chips
Pink / lifestyle#D6457EScrubber, play button, active chips
Type scaleRead the full spec

Font Family

  • iOS System: SF Pro Text / SF Pro Display (San Francisco) — Pocket Casts uses the system face on iOS for native rendering and Dynamic Type.
  • Web / Documentation Fallback: Inter (by Rasmus Andersson, SIL OFL) — the closest free face for static specs and previews.
  • Fallback Stack: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif
  • Numerals: Tabular figures for timecodes and durations so digits don't shift while scrubbing.

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
Screen TitleSF Pro Display32pt8001.2-0.4pt"Podcasts", "Discover" large nav title
Now Playing EpisodeSF Pro Display22pt7001.25-0.3ptEpisode title on player
Section HeaderSF Pro Display22pt7001.3-0.2pt"Up Next", "New Releases"
Episode TitleSF Pro Text18pt7001.3-0.1ptEpisode-detail title
List Row TitleSF Pro Text15pt6001.350ptEpisode-row title (1 line, truncated)
BodySF Pro Text16pt4001.50ptShow notes, descriptions
Show NameSF Pro Text14pt5001.40ptShow name under episode title (theme tint)
MetadataSF Pro Text14pt4001.40ptDuration, "42 min left", "Downloaded"
Date EyebrowSF Pro Text12pt7001.30.6pt"SUN · OCT 13" uppercase row eyebrow
Eyebrow / Player LabelSF Pro Text12pt7001.01.0pt"NOW PLAYING" uppercase
TimecodeSF Mono / SF Pro12pt5001.00pt"14:22", "-19:48" tabular
ButtonSF Pro Text16pt7001.00ptSubscribe / Play Episode
Chip LabelSF Pro Text10pt6001.00.1pt"Up Next", "Trim", "1.2×"
Tab LabelSF Pro Text10pt6001.00.1ptBottom tab labels
CaptionSF Pro Text12pt4001.40ptSmall print, sync timestamps

Principles

  • Tabular timecodes: All durations and scrubber timecodes use tabular figures so they don't jitter as time advances.
  • One-line episode titles in lists: Episode-row titles truncate to a single line with ellipsis; the full title appears on the detail/player screen.
  • Weight concentrated at 400 / 500 / 600 / 700 / 800: Regular body, medium for show names, semibold for row titles, bold for episode/section titles, heavy for the large nav title.
  • Uppercase eyebrows: Date stamps and the "NOW PLAYING" label are uppercase with positive tracking — the only uppercase type in the system.
  • Dynamic Type first-class: Titles, body, metadata scale; tab labels, chip labels, timecodes stay fixed for layout stability.
Components and layoutRead the full spec

Buttons

Primary Button (Subscribe)

  • Shape: Pill, 999pt corner radius
  • Background: #F43E37 (Pocket Casts Red)
  • Text: #FFFFFF, SF Pro Text 16pt weight 700
  • Padding: 14pt vertical, 28pt horizontal
  • Pressed: background #D32B25 + scale 0.98
  • After subscribe: collapses to a "Subscribed ✓" ghost/outline state

Theme-Tint Button (Play Episode)

  • Shape: Pill, 999pt corner radius
  • Background: per-podcast theme tint (e.g. #E0533C)
  • Text: #FFFFFF, SF Pro Text 16pt weight 700
  • Used for the primary play action on a podcast/episode detail screen
  • Pressed: tint darkened 12% + scale 0.98

Secondary / Outline Button (Mark Played / Download)

  • Background: transparent
  • Border: 1.5pt #B8B8B8 (dark) / #9A9A9A (light)
  • Text: #FFFFFF dark / #1A1A1A light, SF Pro Text 14pt weight 600
  • Corner radius: 999pt (pill)
  • Pressed: 8% white overlay (dark) / 6% black overlay (light)

Text Button (Show all episodes)

  • Text: #F43E37, SF Pro Text 14pt weight 700
  • No background, no underline
  • Pressed: opacity 0.6

Circular Transport Button (Play / Pause)

  • Size: 68pt diameter (main play), 44pt (skip/effects)
  • Background: theme tint (play), transparent (skip)
  • Icon: 26pt white triangle/pause-bars (play); 30pt stroked skip glyph
  • Shadow: rgba(theme, 0.55) 0 8px 24px -6px under the play button only
  • Pressed: scale 0.94

Episode-Row Play Button

  • Size: 30pt circle
  • Border: 1.5pt #B8B8B8
  • Icon: 12pt filled triangle #FFFFFF
  • On play: morphs to a small pause/progress ring in theme tint

Cards & Tiles

Podcast Grid Tile

  • Square cover art, 8pt corner radius
  • Grid: 3 columns on iPhone, 8pt gutter
  • Unplayed badge: #F43E37 count pill, top-right, 18pt circle
  • Pressed: scale 0.97 + 8% dim

Episode List Row

  • Height: ~80pt
  • Leading: 52pt artwork thumbnail, 6pt corner radius
  • Date eyebrow: 12pt w700 uppercase #757575
  • Title: 15pt w600 #FFFFFF, one line, ellipsis
  • Metadata: 14pt w400 #B8B8B8 ("34 min · ↓ Downloaded")
  • Trailing: 30pt circular play/queue button
  • Divider: 1pt #383838 between rows
  • Swipe actions: leading = Up Next (theme tint); trailing = Archive / Download

Up Next Queue Row

  • Drag-reorder handle (≡) leading, 24pt #757575
  • 40pt artwork thumb
  • Title (1 line) + show name
  • Trailing: remove (×) button
  • Active reorder: row lifts with rgba(0,0,0,0.4) 0 8px 16px shadow

Now Playing Player

Layout (top → bottom)

  1. Top bar: collapse chevron (leading), "NOW PLAYING" eyebrow (center), ⋯ menu (trailing)
  2. Cover art: large rounded-corner image, ~70% screen width, 8pt corner radius, theme-tint glow shadow
  3. Episode title (22pt w700) + show name (14pt w500 theme tint)
  4. Scrubber: 4pt track #2E2E2E, fill = theme tint, 13pt circular white knob; timecodes below (current / -remaining)
  5. Transport row: skip-back-15, ⏮ previous, ◉ circular play (68pt, theme tint), ⏭ next, skip-forward-30
  6. Action chip row: Up Next · Speed (1.2×) · Trim Silence · Star · Effects

Scrubber

  • Track: 4pt height, #2E2E2E, 2pt corner radius
  • Fill: theme tint, 2pt corner radius
  • Knob: 13pt circle #FFFFFF, rgba(0,0,0,0.5) 0 1px 4px shadow
  • Scrubbing: knob grows to 18pt; haptic tick on 1s boundaries

Action Chip

  • Vertical icon (19pt stroked) + label (10pt w600) stack
  • Inactive: #B8B8B8
  • Active (Trim on, Up Next has items): theme tint
  • Speed chip shows the numeric rate ("1.2×") instead of an icon when non-default

Playback Effects (signature)

Trim Silence Toggle

  • Row: label (15pt w600) + sub ("Shortens silent gaps in talk audio", 12pt #B8B8B8)
  • Switch: 50×30pt, ON track #F43E37, OFF track #2E2E2E, 24pt white knob
  • Three intensity levels when expanded: Mild / Medium / Mad Max

Volume Boost Toggle

  • Same switch styling; sub "Levels quiet voices for noisy rooms"

Playback Speed Control

  • Stepper from 0.5× to 3.0× in 0.1 increments; current value in a theme-tint pill

Navigation

Bottom Tab Bar

  • Height: 52pt + safe area
  • Background: rgba(26,26,26,0.94) with blur(20px) + 0.5pt top border #383838
  • Tabs (4): Podcasts, Filters, Discover, Profile
  • Icon size: 22pt
  • Active: #F43E37 (filled glyph), Inactive: #757575 (stroked glyph)
  • No tint pill — color + fill change only
  • Labels: SF Pro Text 10pt w600, always shown

Mini-Player

  • Persistent strip directly above the tab bar (~64pt tall)
  • Background: theme tint at full or as a slim accent bar; artwork thumb (44pt) + title + play/pause
  • Tap: expands to full Now Playing with a 300ms upward sheet transition
  • Swipe down on full player: collapses back to mini-player

Top Nav (Podcast Detail)

  • Large title collapses to compact on scroll
  • Leading: back chevron; Trailing: Settings gear + ⋯ menu

Input Fields

Search Bar (Discover / Filters)

  • Height: 40pt
  • Background: #2E2E2E (dark) / #EDEDED (light)
  • Corner radius: 10pt
  • Leading magnifyingglass 16pt #757575
  • Placeholder: "Search shows & episodes" 15pt #757575
  • Focus: 1.5pt #F43E37 border

Filter Builder

  • Smart-filter rules (Episode status, Download status, Media type, Release date)
  • Each rule a tappable row opening a sheet of options
  • Filter color picker: choose accent for that custom filter (one of ~12 swatches)

Distinctive Components

Responsive behaviourRead the full spec

Device Sizes

DeviceWidthKey Changes
iPhone SE (3rd gen)375ptPodcast grid 3 cols; cover art ~62% width on player
iPhone 13/14/15390ptStandard layout; cover art ~70% width
iPhone 15/16 Pro393ptDynamic Island accommodated in player top bar
iPhone 15/16 Pro Max430ptLarger cover art; grid stays 3 cols with wider tiles
iPad (portrait)768ptPodcast grid 5 cols; player centered max 520pt with side padding
iPad (landscape)1024pt+Sidebar nav (Podcasts/Filters/Discover/Profile) + detail pane; player as right-side panel

Dynamic Type

  • Screen title, episode title, body, metadata: full scale
  • Tab labels, chip labels, timecodes, date eyebrows: FIXED (layout-sensitive)
  • Scrubber and transport stay fixed-size; only text scales

Orientation

  • Player and lists support rotation
  • iPad landscape adopts a 2-column split (list + detail) and a persistent right-edge player
  • Cover art re-centers on rotation; aspect ratio preserved

Touch Targets

  • Circular play button: 68pt (well above minimum)
  • Transport skip/effects: 44pt hit
  • Episode-row play button: 30pt glyph, 44pt hit
  • Tab bar icons: 22pt glyph, 44pt hit
  • Toggle switches: 50×30pt control, 44pt row hit

Safe Area Handling

  • Top: player top bar respects safe area and Dynamic Island
  • Bottom: mini-player + tab bar + home indicator respected
  • Mini-player sits directly above the tab bar inside the safe area
  • Sides: 16pt list inset; player chrome 20pt

Drop-in CSS variables

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

body.theme-pocket-casts {--page-bg: #ffffff;
  --page-bg-gradient: none;
  --text-color: #1a1a1a;
  --heading-color: #1a1a1a;
  --link-color: #9b6d00;
  --link-hover-color: #684900;
  --border-color: #d6d6d6;
  --card-bg: #ffffff;
  --card-shadow: 0 1px 2px rgba(26,26,26,0.06);
  --card-hover-shadow: 0 6px 18px rgba(26,26,26,0.12);
  --header-bg: #1a1a1a;
  --header-text-color: #ffffff;
  --header-shadow: none;
  --footer-bg: #ffffff;
  --footer-text-color: #6a6a6a;
  --button-bg: #ffb300;
  --button-text-color: #000000;
  --button-hover-bg: #cc8f00;
  --button-border: none;
  --button-border-radius: 10px;
  --button-secondary-bg: #f1f1f1;
  --button-secondary-text-color: #1a1a1a;
  --button-secondary-hover-bg: #e4e4e4;
  --button-secondary-border: 1px solid #d6d6d6;
  --prompt-bg: #f4f4f4;
  --prompt-text-color: #1a1a1a;
  --base-font: var(--font-helvetica);
  --heading-font: var(--font-inter);
  --card-border-radius: 10px;
}

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/music/pocket-casts/DESIGN.md · 25.4 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.