Netflix style — DASHBOARD.md

Dark, Cinematic, Bold · 다크, 시네마틱, 강렬함

A dashboard design spec read from the public design of netflix.com and its weekly Top 10. Netflix rarely draws a chart: it ranks, badges and lines things up — a billboard with a TOP 10 badge, a Top 10 of outlined numerals, weeks in the Top 10, a thin red progress bar, an episode list, a hover card with a green score and a rating box, a FAQ accordion. This spec takes those parts and the site's black-and-red tokens and turns them into one card and one chart grammar that a whole dashboard can follow, on one dark page. It then adds what a website spec leaves out and a dashboard needs: validated data colors for a dark surface, card anatomy, chart rules, number and date formats in English and Korean, density, filters, accessibility, and settings for Tableau, Power BI and the web. Add it to a project with one command (or the zip on the sample page), or hand it to whoever builds your dashboards. The live sample was built from it.

npx @vizney/styles@latest add netflix
# or, without Node:
curl -fsSL https://styles.vizney.com/install.sh | sh -s -- netflix

That puts DASHBOARD.md in the project root and the dashboard-style agent skill (build, restyle, review) in .claude/skills/dashboard-style/, together with tokens.css, tokens.json, netflix.tps, powerbi-theme.json and prompt.md. Coding agents that read skills pick it up whenever a task touches a dashboard or a chart; any other agent can be told to follow DASHBOARD.md.

Not an official Netflix design, and not affiliated with or endorsed by Netflix. A reference style read from the publicly visible design of netflix.com; it carries no logo, typeface or data of theirs. The sample's company, Vizney Live, and all its numbers are fictional. Trademarks belong to their owners.

Visual Theme & Atmosphere

A black page with one red. The report opens the way a title opens on Netflix: a billboard. Its key art is a color block — the navy, wine, burgundy and oxblood of the landing page's Trending Now rail — with a giant outlined 1 and a dark vignette on the left. Over it sit a red TOP 10 badge with #1 this week · <show>, a bold headline that states the week's result, a short lede like a synopsis, a red button and a translucent gray one, and four key figures on translucent tiles. Below, sections read like the rows of the home screen: a 24px/500 row title, then cards on #161616 with no border and no shadow, an 8px radius.

The views are the ones Netflix uses for rankings and progress instead of charts: a Top 10 ranked by outlined numerals, each with its title, a bar of tickets, its move since last week and its weeks in the Top 10 (never posters or photos: the data takes the poster's place), weeks in the Top 10 as a grid of ranks, an episode list that leads each row with its date in type and runs the continue-watching progress bar under the title (no thumbnails: an empty picture says nothing), a Top 10 table in the shape of the weekly Top 10 page, and a FAQ accordion for the method. Where a real chart is the right form — a trend, a share over time — it is drawn on the same card with the same restraint: the subject in red, everything else gray.

Red is the voice, and it speaks once per card. The UI red #e50914 belongs to buttons, the TOP 10 badge and the NEW ribbon; data takes its own step, #f0313b, and only for what the title names. Green appears only as good news, orange only as bad. The mood is cinematic and bold: a dark room, one bright figure, the week's result in big type.

Measured in a browser on November 3, 2026 (netflix.com/kr signed out, and netflix.com/tudum/top10): the page is black #000000; text is #ffffff and, for secondary text, rgba(255,255,255,.7) (#b3b3b3 on black); the headline is 56px/700 on a 70px line and row titles 24px/500; the primary button is red #e50914 with a 4px radius (32px with 14px/500 in the header, 56px with 24px/500 in the hero) and the secondary button rgba(128,128,128,.4) at 40px with 16px/500; the Trending Now posters are #232323 with an 8px radius (180 × 252), each carrying a 100px/700 numeral filled #414141 with a 4px white stroke and a soft black glow over its lower-left corner; feature cards are linear-gradient(149deg, #192247 0%, #210e17 96.86%) with a 16px radius, 24px/500 titles and rgba(255,255,255,.7) text; FAQ rows are #2d2d2d, 24px/400 with 24px padding, 8px apart; the rails glow with #461518 and #6f181d, and a curved divider runs #210d16 → #b82869 → #e50914 with a rgba(64,97,231,.4) blue haze. Netflix Sans loads in 400, 500 and 700 with the fallback stack 'Helvetica Neue', 'Segoe UI', Roboto, Ubuntu, sans-serif, and has no Hangul. The weekly Top 10 page writes the rank as 01 in 36px/900, puts a 16:9 thumbnail before the title, heads its columns in 14px/500 white, draws no rules between rows, and lists weeks in the Top 10, views (10,700,000), runtime (1:48) and hours viewed in full digits, for Monday-to-Sunday weeks (10/19/26 - 10/25/26). The quarterly shareholder letter carries tables, not charts.

Color Palette & Roles

Surfaces are netflix.com's black and its gray steps; the rules are the product's.

Token Hex Role
canvas #000000 page, header, footer
card · plot #161616 · #161616 every figure, table and the workbench; the chart sits on the card itself
raise #232323 the hover card (tooltip)
field #2d2d2d FAQ rows, install-command boxes
hair / line / rule #414141 / #2d2d2d / #404040 the fill of the Top 10 numerals and chart baselines / gridlines and workbench dividers / rules between episode rows
ink / body #ffffff / #e5e5e5 titles, key figures, table values, the current week's tick / running text, code
text-2 #b3b3b3 subtitles, figure labels, KPI labels, values beside end labels; Netflix writes it as rgba(255,255,255,.7) on black (8.6:1)
muted #808080 notes, axis ticks, table headers, captions (4.6:1 on the card: the lightest gray for small text, and only on #161616 or darker)
accent · accent-hover #e50914 · #c11119 the primary button, the TOP 10 badge, the NEW ribbon, the selected code tab. White on it is 4.8:1. Data uses its own red, #f0313b
gray button rgba(128,128,128,.4) with white text the secondary button beside the red one (Learn more on netflix.com); hover at .6
good / bad #46d369 / #e87c03 favourable / unfavourable change, text only (9.3:1 / 6.3:1 on the card)
focus #ffffff focus ring, 2px, 2px offset
rail #192247 #210e17 #461518 #6f181d the billboard's key art, the step cards; never data

Rules: - Cards are #161616 on black with no border and no shadow; depth comes from the gray steps, as on netflix.com. Only the hover card and the toast cast a shadow. - Small text on the card uses muted or lighter; on #232323 and lighter it uses text-2, because muted drops under 4.5:1 there. - Red has two steps and they never swap: #e50914 for UI (buttons, badges, ribbons), #f0313b for data. Never a second red series. - The rail colors are art, not data. Tiles and the billboard use them so the page never needs a photo.

Data Colors

Netflix shows its own figures with one red against black and gray — the red progress bar, the red TOP 10 badge, the red NEW ribbon — and keeps everything else neutral. This spec keeps that: red is the subject, the gray of the outlined Top 10 numerals is Other, and netflix.com's blue #4061e7, raised for a dark surface, is the only second hue. Every value passed an OKLab validator in dark mode (color-vision-deficiency separation, normal-vision separation, contrast) on the card #161616, where every chart sits. Use them exactly; do not generate tints.

Role Mark Label text Use
Subject #f0313b #ff5a63 what the title names: this year, the #1 cells, the sold-out performances, the channel the story is about
Second category #6a88f2 #8ea5f6 a second real category (web)
Other #595959 text-2 the rest (box office), behind 2px gaps
Comparison #808080, dashed 2px (6 on, 4 off) ink last year
Progress fill #f0313b (the subject) or #b3b3b3, track rgba(255,255,255,.28) — share of a whole: seats sold, seats filled
Rank cells #f0313b for #1, #333333 for #2–10, an outline #2d2d2d for not ranked black on red, #e5e5e5 on gray weeks in the Top 10
Target #ffffff, dashed 1.2px (4 on, 3 off) ink a goal on an axis
Sequential #9e2027 #c4262f #f0313b #ff6b72 #ffa3a7 black on the two brightest, white on the rest color by value, dim to bright: on a dark card a larger value is brighter
Diverging #ffa3a7 #f0313b #9e2027 · #3a3a3a · #3f55a8 #6a88f2 #b3c3f9 each arm's brightest above and below a midpoint that sinks into the card
Status good #46d369, bad #e87c03, neutral #808080 — change text only

Validation (from tokens.json, dark mode, on #161616): - Red and blue pass every check: CVD ΔE 27.6 (deutan), normal vision 32.8, both inside the dark lightness band, contrast 4.49 and 5.53:1. - Other #595959 is neutral by design: CVD 7.4 against red (protan), normal vision 24.9 against blue. At 2.58:1 it always has a second cue: 2px gaps, value labels and a table. - Comparison #808080 is 4.58:1, always dashed and labeled at its end. - The sequential ramp is one hue (spread 8°), monotone, every gap ≥ 0.06 in lightness, the dim end 2.32:1. - The diverging arms each pass the ordinal checks (dim ends 2.32 and 2.65:1); the poles are 11.7 (CVD) and 15.1 (normal) apart. - Text: red labels #ff5a63 5.9:1, blue labels #8ea5f6 7.6:1, good 9.3:1, bad 6.3:1. Digits in rank cells are black on red (5.2:1) and #e5e5e5 on #333333 (9.6:1).

Rules: - Red only for what the title names; the rest gray. A card that is mostly red has highlighted nothing. - At most two hues plus gray in one chart. A third real category folds into Other or becomes small multiples. - Color follows the entity, not its rank: the subject is red in every figure. - Never the UI red #e50914 on data, never green or orange as a series, never the rail colors as a measure.

Typography Rules

Role English Korean Weights
Sans (everything) Roboto Pretendard 400, 500, 700, 900 (Korean 800 where English takes 900)
Mono (code only) Roboto Mono Roboto Mono, then Pretendard for Hangul 400, 500

Roboto stands in for Netflix Sans; it is in netflix.com's own fallback stack. netflix.com's Korean pages load no Korean webfont (the browser falls back to system fonts), so Korean uses Pretendard. There is no serif.

Element Size / weight Notes
Headline (billboard) clamp(30px, 3.3vw, 48px) / 700, line-height 1.16, −0.01em one sentence that states the result, white with a soft shadow (netflix.com: 56px/700 on 70px); Korean line-height 1.28
Billboard line · lede 18px / 500 · 18px / 400, line-height 1.45 #1 this week · <show> after the TOP 10 badge · two sentences of drivers
Key figure value 40px / 700, −0.02em units at 0.45em in text-2 (287.8 K, $ 25.68 M, 28.8 만 장)
Section title · intro 24px / 500 · 16px / 400 text-2 the row title of the home screen (measured)
Figure label 12px / 700 uppercase, 0.12em, text-2 FIGURE 1 · TOP 10 (Korean 13px, no uppercase: 그림 1 · Top 10)
Card title 20px / 500, line-height 1.35 the finding; text-wrap: balance
Card subtitle · table 14px / 400 text-2 · 16px / 400 white
Table header 14px / 500 white, sentence case the weekly Top 10 page's header (measured)
Rank · numeral 01 36px / 900 white in the table · 700, filled #414141 with a 4px white stroke, 58px tall in the Top 10 (44px on phones) both measured (netflix.com draws the numeral 100px over a 252px poster)
Top 10 row title 16px / 500 white, value 16px / 700 with the unit 12px text-2; meta line 13px text-2
Note · key 13px / 400 muted · 13px / 500 body the note starts with Note: / 주:
Axis ticks · value labels 12px muted · 12px / 700 white
FAQ question · answer 24px / 400 · 18px / 400 white on #2d2d2d (measured question size)
Code mono 12.5px, line-height 1.62

Headlines are bold (700); titles are medium (500); body is regular. Black weight (900) is only for ranks. Korean breaks between words (word-break: keep-all), and a number stays on the same line as the particle after it (12.3%, 3주).

Numbers, Dates & Units

English Korean
Tickets, key figure and headline 287.8K 28.8만 장
Tickets in the Top 10 and tables 33,796 (full digits, as the weekly Top 10 writes them) 33,796
Tickets on an axis 150K 200K 250K 300K 15만 20만 25만 30만
Money $25.68M, $924K; per ticket $89.22 2,568만 달러, 92.4만 달러; 89.22달러
Rates 87.3%; whole numbers on small labels (58%) the same
Points +3.8 pts +3.8%p
Runtime 2:35 (h:mm, as the weekly Top 10 writes it) 2:35
Change +12.3% vs last week +12.3% 지난주 대비
Weeks Oct 26 – Nov 1, 2026; Week of Oct 26; ticks Aug 10 … Oct 26 2026년 10월 26일~11월 1일; 10월 26일 주간; ticks 8월 10일 … 10월 26일
A performance Sat, Nov 7 · 8:00 PM 11월 7일(토) 오후 8시
Ranks and weeks in the Top 10 #1, 3 weeks in Top 10, 12 wk 1위, Top 10 3주째, 12주
Missing — (did not play) —

Layout Principles

One column on a black page, at most 1400px wide, 32px side padding (24px up to 1359px, 16px below 640px), a 16px gap between cards and 56px between sections. No sidebar, no logo, no photo.

  1. Header (72px, black): company name (20px / 900, uppercase in English) and report name (14px text-2). On the right: the period, the EN/KO toggle in an outlined box, an outlined Export PDF and the one red button, Copy as Markdown.
  2. Filter row: outlined chips of the cities, the selected chip white with black text; the basis (Published Tue, Nov 3, 2026 · vs the week before) on the right. It scopes every card, and the URL keeps the choice (?city=ny).
  3. Billboard (a card of its own, 8px radius, min 420px): on the left (7 of 12 columns) the TOP 10 badge line, the headline, the lede and two buttons (See the Top 10, Method and sources); the status tag Final at the right edge, where Netflix puts the maturity rating; the four key figures in one row across the bottom.
  4. Sections: a 24px row title and a one-line intro, then rows of cards on a 12-column grid; cards in one row share a subgrid, so their heads, bodies and notes line up. - This week: Figure 1 the Top 10 (12, two columns of five); Figure 2 tickets by week (7) · Figure 3 weeks in the Top 10 (5). - Coming up: Figure 4 performances selling fast (7) · Figure 5 where people buy (5); Table 1 every show (12).
  5. How it's built: a paragraph with two 40px buttons, three step cards in the feature-card gradient, the workbench window and a caption.
  6. Method and sources: the FAQ accordion and a source line.
  7. Black footer with a hairline above the catalog line.

At most seven views on one screen: the billboard and three views in This week, three in Coming up. Every view is a standard form an agent or a BI tool can rebuild. A chart's body fills its card, so a chart beside a taller one grows to its height. Density: at 1440 × 900 the header, filter row, billboard and all four key figures are on the first screen. Reading order follows the list; never lead with a chart.

Component Stylings

Charts

Depth & Elevation

Flat and dark. Cards are set apart by a step of gray (#000000 → #161616), never by borders or shadows, and never lift on hover. Shadows exist only on the hover card (0 3px 10px rgba(0,0,0,.75)) and the toast. The billboard gets its depth from its vignette and fade, not from a shadow.

Interaction & Motion

Accessibility

Responsive Behavior

Each step keeps what the wider steps changed.

Tool Mapping

Web and coding agents. Load tokens.css (installed in .claude/skills/dashboard-style/; or copy the colors block from the front matter) and these fonts (the second for Korean).

<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500&family=Roboto:wght@400;500;700;900&display=swap">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css">

Set <meta name="color-scheme" content="dark"> and give html and body the canvas color, so nothing flashes white. The outlined numerals are SVG text with paint-order: stroke (fill the card color, stroke #595959); squeeze 10 with textLength and lengthAdjust="spacingAndGlyphs".

Tableau. Paste the <color-palette> elements of netflix.tps into My Tableau Repository/Preferences.tps and restart Tableau Desktop. The categorical palette runs red, blue, Other and the comparison gray; assign the subject first. - Dashboard background #000000; each sheet in a container shaded #161616 with 20/24px inner padding and no border. Worksheet shading #161616; all text white or #b3b3b3; tooltips #232323. - The card head: a text object with the figure label (Tableau Book 9 bold, uppercase, #b3b3b3), the finding as the sheet title (bold, 13–14pt, white) and the measure as a subtitle line; the method in the caption, starting with Note:. - Grid lines: rows only, solid, #2d2d2d; zero line #414141; no axis rulers; ticks Tableau Book 9 in #808080. - Lines: subject size 3, comparison dashed. Stacked bars: Color → the categorical palette, Format → Borders → #161616 separators. - Top 10: a sheet of RANK(SUM(tickets)) ≤ 10 as text with big bold rank numbers beside a bar or shape; Tableau cannot outline text, so use the rank as 01 in white 900 weight and the value as a label. Weeks in the Top 10: a highlight table of show by week, red for rank 1, #333333 for 2–10, the rank as the label. - Progress: a Gantt bar or a bar on a dual-mark track (#575757 behind), red only for the rows the title names. - Formats #,##0 (Top 10), #,##0.0,K, $#,##0.00,,"M", 0.0%, +0.0" pts";−0.0" pts"; Korean workbooks #,##0.00"달러" and +0.0"%p";−0.0"%p". Fonts: Tableau Book unless Roboto is installed on every viewing machine and on the server.

Power BI. View → Themes → Browse for themes → powerbi-theme.json. It sets the data colors (red, blue, then Other), the black page, #161616 visuals without borders, axis and gridline colors and text classes. Install Roboto on authoring and viewing machines or accept Segoe UI. - Title each visual with the finding; put the measure in the subtitle and the method in a text box starting with Note:. - Gridlines solid #2d2d2d; data labels on the last point instead of a legend. - Top 10: a table visual sorted by tickets with Top N = 10, the rank as a column in bold, data bars in #f0313b for seats filled; a new entry flagged in a text column, not by a row color. - Key figures as cards on #161616 without borders; change measures with conditional formatting in #46d369 / #e87c03 only, always with a sign.

Chart libraries (D3, Observable Plot, Vega-Lite, matplotlib, Datawrapper). Subject #f0313b (labels #ff5a63), second #6a88f2 (#8ea5f6), Other #595959, comparison #808080 dashed 6 4, gridlines #2d2d2d on rows only, baseline #414141, ticks #808080 at 12px, plot background #161616, bar ends rounded 2px. The sample's Figure 2 in five forms is in the workbench of the live sample; tickets.csv is its data.

Do's and Don'ts

Agent Prompt Guide

Install the style (npx @vizney/styles@latest add netflix, curl -fsSL https://styles.vizney.com/install.sh | sh -s -- netflix, or unzip the package in the project root). Agents that read skills load dashboard-style on their own and work in one of three modes: Build (plan the views, then draw them to this file), Restyle (move an existing screen onto this file without changing its data) and Review (a table of rule, finding, severity and fix). For an agent without skills, start the prompt with Read DASHBOARD.md and follow it exactly. For example:

Read DASHBOARD.md and follow it exactly. Build our weekly ticket sales dashboard as one self-contained HTML file
with fictional data, in English and Korean (?lang=en|ko, English by default), on the dark page the spec describes.
Top: a black header with the period, the EN/KO toggle, an outlined Export PDF and a red Copy as Markdown; one row of
outlined city chips that scopes every card. Then a billboard: color-block key art with a giant outlined numeral, the
TOP 10 badge and "#1 this week · <show>", a headline that states the week's result, a two-sentence lede, a red and a
gray button, four key figures with changes vs last week.
This week: the Top 10 in two columns (outlined numerals, titles, full-digit values, bars against #1 with only #1 in red,
moves since last week, NEW badges); tickets by week against last year (dashed gray) beside weeks in the Top 10 as a grid of ranks, #1 in red.
Coming up: the performances selling fast as an episode list (a date block, then the title with a progress bar under it) beside channel
shares as 100% stacked bars; a Top 10 table of every show with a show-all button.
Method and sources as a FAQ accordion. Every view on the same #161616 card: figure label, finding title, subtitle, keys,
view, "Note:". At most seven views per screen.
Use only the values in Data Colors, the formats in Numbers, Dates & Units and the components in Component Stylings.
Every chart needs a hover card, keyboard control and a screen-reader table.

Before it is done, the agent checks: - [ ] The billboard states the result; the key figures carry signed changes colored good (#46d369) or bad (#e87c03). - [ ] Every view sits on the same #161616 card with no border or shadow; every card title states a finding; every note starts with Note:. - [ ] Red #f0313b only for what each title names; others gray; comparison dashed #808080; the UI red #e50914 only on buttons, badges and ribbons; no photo or logo. - [ ] Rankings use the Top 10 parts (outlined numerals with bars and rank moves, the rank grid, the Top 10 table) with values in full digits; shares of a whole use progress bars. - [ ] Gridlines on rows only; line ends labeled; keys only where labels cannot work; no dual axis, pie, donut, gauge or glow. - [ ] Numbers, dates, runtimes and weeks follow the formats in both languages. - [ ] Text ≥ 4.5:1 on its surface (muted only on #161616 or darker); marks below 3:1 have a second cue. - [ ] Every chart has a hover card, keyboard control and a data table; the filter changes every card; at most seven views per screen; nothing breaks at 390px.