Skip to content

Now in the official shadcn registry directory.

Start free
Back to gallery
ai · content

Runway

An AI-tool landing that behaves like a film festival rather than a feature list — achromatic chrome (colour belongs to the imagery), Times Now serif + grotesque, cinematic 16:9 stills. Generative video, the artist's side.

runwayml.comAdded 2026-06-24
Runway - Desktop

Editorial disclaimer

Editorial note

This entry documents observable design-language patterns for educational transfer and AI-agent briefing. Screenshots and trademarks are property of their respective owners. AI2 Design is not affiliated with or endorsed by the featured brand. Inspiration here is about language and rhythm - do not reproduce brand identity, logo, product copy, or proprietary features.

Fair Use & Gallery Policy
FreePrompt kit

Copy the full design language into your agent

A typed, paste-ready design system brief - philosophy, tokens, rules, techniques, and fitness checks. Drop it into Claude, Cursor, v0 or any coding agent and it builds in Runway’s language, not just a screenshot.

Paste into your agent. No signup, no cost.
Cinematic editorial-dark for a generative-media audience. The canvas is true black (#000000); near-white (#ffffff) type and a single 1px hairline (#e5e7eb-tier) do all the structural speaking. Voice is split across two families — a Times-lineage serif display (timesNow) for art-directed headlines and ABC Normal (abcNormal, weights 400/500/600) for the operational UI. There is no brand-accent fill anywhere: all saturation is delegated to widescreen 16:9 video stills, which are treated as the only light source on the page. Motion is expressive and deliberate (Framer Motion + GSAP) because the product is motion. Restraint as credibility — the design gets out of the way so the work can argue.
Main prompt
Use this capture as a design language transfer brief for my project. Adopt the palette (true-black #000000 canvas + near-white #ffffff foreground + a thin neutral gray ladder #6b7280 / #999999 / #404040 / #1a1a1a for de-emphasis, and a #e5e7eb-tier hairline border — NO saturated accent color; all color comes from imagery), the two-register typography (Times-lineage serif display for headlines, ABC-Normal-style neutral grotesque for UI, weights 400/500/600), a 4px-base spacing scale, hairline-1px border-first structure (no drop shadows), cinematic 16:9 widescreen as the composition unit, cubic-bezier(0.4, 0, 0.2, 1) motion at 0.15-0.2s, and an expressive-but-deterministic motion layer. Treat this as my project's constitution — any new component I author should pass as if crafted in the same studio. Apply the language, not the source brand's specific copy or identity. When I ask you to build a page or component, enforce these rules by default and call out any decision that deviates.
Layout
Editorial
Content width
Bounded
Framing
Flat
Grid strength
Soft

Near-monochrome by design. A true-black #000000 canvas (the dominant measured surface) carries near-white #ffffff foreground type, with a single #e5e7eb-tier 1px hairline doing the structural work. De-emphasis descends through a neutral gray ladder — #6b7280 → #999999 → #404040 → #1a1a1a. There is no saturated brand accent in the capture; saturation is delegated entirely to the 16:9 video stills.

Mode strategydark-first
  • True-black #000000 is the canvas (the most frequent measured surface, 1218 occurrences) — a gallery wall for video stills, not a soft dark-mode gray
  • Near-white #ffffff foreground for primary type, maintaining maximal contrast against the black canvas (~21:1)
  • Hairline border at the #e5e7eb tier (high-frequency border token, 866 occurrences) — 1px solid, used to imply cards and structure without fill or shadow
  • Neutral gray ladder #6b7280 / #999999 / #404040 / #1a1a1a for captions, metadata, and de-emphasized labels — strictly achromatic
  • NO saturated accent fill exists in the capture — do not invent one. Emphasis comes from the serif display face and from the imagery, never from a colored chip or button fill

Gradients (paste-ready)

linear-gradient(to right, rgb(255, 255, 255), rgba(0, 0, 0, 0))
linear-gradient(to left, rgb(255, 255, 255), rgba(0, 0, 0, 0))
  • Two families, two registers. Display/editorial: timesNow (a Times Now / Times-lineage serif, self-hosted .otf, font-display swap) for art-directed headlines. UI/body: abcNormal (ABC Normal grotesque, self-hosted .woff2) for everything operational.
  • ABC Normal weight ladder: 400 (reading + most headings) / 500 (UI headings, +0.35px tracking) / 600 (dense UI labels, captions). The 300 'Book' cut is preloaded but reserve it for large soft display only.
  • Display tracking is negative and px-based, tightening as size grows: -1.2px on 48px (heading-1), -0.9px on 36px (heading-2). Body 13px uses -0.26px; UI 14px headings use a positive +0.35px to open dense labels.
  • Headings sit tight: unitless line-height 1.0 at 36-48px display sizes (48/48, 36/36, 24/24, 20/20). Body relaxes to ~1.25-1.5 (16/24, 13/16.9, 14/17.5).
  • Captured size ladder: 11 / 13 / 14 / 16 / 20 / 24 / 36 / 40 / 48 px. The 11px caption (weight 450, line-height 14.3px) is the floor — never go smaller.
  • Reserve the serif (timesNow) for headline and pull-quote moments only — it is the curatorial voice. Never set body copy or UI controls in the serif; ABC Normal carries all functional text.
  • Body 16px / line-height 24px / weight 400 is the default reading layer; UI labels run 14px / 20px at weight 500-600.
  • 4px base unit. Captured scale: 4 / 6 / 8 / 10 / 12 / 14 / 16 / 20 / 24 / 28 / 32 / 40 px. The 8px (129 occurrences) and 16px (52) steps dominate; 4px (76) handles micro-gaps.
  • Container max-width is wide and cinematic: 1600px primary rail (container-md) for full-bleed widescreen content; 512px secondary rail (container-sm) for narrow text clusters.
  • Flex/grid gutters captured at 8 / 28 / 80 px — 8px for tight clusters, 28px for card rows, 80px for the large editorial section gaps that give frames room to breathe.
  • Section vertical rhythm leans generous (28-40px+ blocks) so 16:9 stills are never crowded — let the imagery dominate the fold.
  • Card padding pulls from the scale (16-24px typical); never use magic numbers outside the 4/6/8/10/12/14/16/20/24/28/32/40 ladder.
Surface styleFlat
  • No drop shadows — the capture contains zero box-shadow tokens. Structure is delivered by the 1px solid hairline border (#e5e7eb-tier) alone.
  • Cards and panels are implied by border + the black canvas, not by fill or elevation. Layering is achieved through the imagery sitting on black, not through stacked surfaces.
  • Depth comes from the video stills themselves (luminous frames against #000000), not from any UI shadow or glow.
  • Focus and hover states shift border color or opacity — never introduce a shadow bloom.

Techniques

Hairline border as the only delimiter

Cards default to `border: 1px solid #e5e7eb`-tier on the black canvas (or a darker gray hairline for subtler division). Radius pulls from 4/6/8px. Hover shifts border color or opacity; never switch to drop-shadow — there are none in the source.

Luminous frame on black

16:9 video stills (1920×1080, 2048×1152) sit directly on #000000 with at most a hairline border. The luminance of the generated frame IS the elevation — the black canvas makes every still read as a projected image, no shadow required.

Radii4 / 6 / 8Icon treatmentLinearIcon setsLucide, Phosphor, Remix Icon
  • Radius scale is tight: 4 / 6 / 8 px only. The capture shows no large or pill radii — corners stay subtle so frames read as frames.
  • Buttons and inputs default to 6-8px; small chips/tags to 4px. No `rounded-full` decorative pills in the source.
  • Icons are stroke-based / linear at hairline-to-1.5px weight to match the 1px border language — no filled or duotone variants.
  • Tap targets follow the spacing ladder; keep interactive minimums at 40×40 (pointer) / 44×44 (touch) even though the source is desktop-led.
  • button-primary
    backgroundColor
    #ffffff
    textColor
    #000000
    radius
    8px
    padding
    10px 20px
    border
    1px solid transparent
    boxShadow
    none
    fontFamily
    abcNormal, sans-serif
    fontWeight
    500
    fontSize
    14px
    lineHeight
    20px

    Tailwind

    inline-flex min-h-[40px] items-center gap-2 rounded-[8px] border border-transparent bg-white px-5 py-2.5 text-[14px] font-medium leading-5 text-black transition-[background-color,opacity] duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] hover:opacity-90 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white
  • button-secondary
    backgroundColor
    transparent
    textColor
    #ffffff
    radius
    8px
    padding
    10px 20px
    border
    1px solid #e5e7eb
    boxShadow
    none
    fontFamily
    abcNormal, sans-serif
    fontWeight
    500
    fontSize
    14px

    Tailwind

    inline-flex min-h-[40px] items-center gap-2 rounded-[8px] border border-[#e5e7eb]/30 bg-transparent px-5 py-2.5 text-[14px] font-medium text-white transition-[border-color,background-color] duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] hover:border-[#e5e7eb]/60 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white
  • card-frame
    backgroundColor
    #000000
    textColor
    #ffffff
    radius
    8px
    padding
    16px
    border
    1px solid #1a1a1a
    boxShadow
    none
    aspectRatio
    16 / 9

    Tailwind

    overflow-hidden rounded-[8px] border border-[#1a1a1a] bg-black p-4 text-white transition-[border-color] duration-200 ease-[cubic-bezier(0.4,0,0.2,1)] hover:border-[#404040]
  • heading-display
    fontFamily
    timesNow, Times, serif
    color
    #ffffff
    fontWeight
    400
    fontSize
    48px
    lineHeight
    48px
    letterSpacing
    -1.2px

    Tailwind

    font-[timesNow,Times,serif] text-[48px] font-normal leading-[48px] tracking-[-1.2px] text-white
  • input-field
    backgroundColor
    #000000
    textColor
    #ffffff
    radius
    6px
    padding
    8px 12px
    border
    1px solid #404040
    boxShadow
    none
    fontFamily
    abcNormal, sans-serif
    fontSize
    16px
    lineHeight
    24px

    Tailwind

    w-full rounded-[6px] border border-[#404040] bg-black px-3 py-2 text-[16px] leading-6 text-white placeholder:text-[#6b7280] transition-[border-color] duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] focus-visible:border-white focus-visible:outline-none
  • link-inline
    color
    #ffffff
    textDecoration
    underline
    textDecorationColor
    #6b7280
    textUnderlineOffset
    2px
    transition
    text-decoration-color 200ms linear

    Tailwind

    text-white underline decoration-[#6b7280] underline-offset-2 transition-[text-decoration-color] duration-200 ease-linear hover:decoration-white focus-visible:outline-none focus-visible:decoration-white
LevelexpressiveDurations0.15s / 0.2s / 0.5s

Easings

cubic-bezier(0.4, 0, 0.2, 1)linear
Hoverall-property transition (0.15s on cubic-bezier(0.4, 0, 0.2, 1)) — the most frequent captured hover (26 occurrences), color / background-color / border-color shift (0.2s linear), opacity fade (0.2s linear)

Scroll patterns

  • Intersection-triggered opacity reveals on the 0.5s cubic-bezier(0.4, 0, 0.2, 1) tier — the single longest captured transition, reserved for atmospheric fade-ins of video stills
  • GSAP-driven scroll choreography (window._gsap present) for the cinematic section beats — frames entering as the viewport scrolls
  • Framer Motion (window.MotionIsMounted present) for component-level enter/exit and hover state
  • No parallax beyond subtle translate — let the moving imagery carry the motion budget, not the layout
  • Primary easing: cubic-bezier(0.4, 0, 0.2, 1) — the standard material ease-in-out, carrying 43 of the captured transitions. Use it for all interactive state changes.
  • Secondary easing: linear (20 occurrences) — reserved for color/opacity cross-fades where a constant rate reads cleaner than an eased one.
  • Three captured durations: 0.15s (primary state change, 26×), 0.2s (color/opacity/all transitions, 36×), 0.5s (rare atmospheric reveal, 1×). Most interaction sits at 0.15-0.2s; 0.5s is the ceiling and is for ambience only.
  • Motion level is expressive because the product is generative video — the page choreography is itself a demo. But choreography stays deterministic (cubic-bezier / linear), never springy.
  • useReducedMotion mandatory: all animation collapses to opacity-only or disables. The expressive budget assumes a creative-workstation baseline; everyone else gets the static cut.
  • GSAP and Framer Motion coexist — GSAP for scroll-pinned cinematic beats, Framer Motion for component interaction. Do not duplicate the same animation across both.
  • No loop animations except explicit loaders; let the generated video stills provide the ambient movement.
  • Navigation is minimal and text-forward — a thin Header/Nav over the black canvas, no heavy chrome competing with the imagery.
  • Hover reveals on cards shift border color/opacity rather than lifting with shadow — stay inside the flat hairline language.
  • Video stills act as primary affordances — hovering or entering a frame is the interaction; treat the imagery as clickable surface, not decoration.
  • Tooltips and secondary controls appear on hover + focus; dismiss instantly on blur. Keep them sparse so the screening-room mood holds.
  • Modals for focused actions; avoid nested overlays that break the cinematic full-bleed flow.
  • Empty/loading states: a thin caption + the brand serif for the headline moment; no illustrations competing with real generated frames.
  • Section transitions are scroll-choreographed (GSAP) — entering a section fades/reveals its widescreen still as the dominant event.
Approachdesktop-first

Desktop-first because the audience is creative professionals on wide displays evaluating 16:9 output — the container extends to 1600px to give widescreen stills full breadth. Mobile reflows the same screening-room language into a narrower rail without inventing an alternate architecture: the frame stays 16:9, the type stays serif-display + grotesque-UI, the canvas stays black.

  • Breakpoints captured: sm 640 / md 768 / lg 1024 / xl 1280 / 2xl 1536, plus bespoke 1200 and 1600 media queries for the wide editorial rail.
  • Container max-width steps 512 → 1600 px; the 1600 rail is the signature wide canvas, do not collapse it to a generic 1280.
  • 16:9 stays the composition unit at every tier — scale the frame, never crop it to a different aspect.
  • Typography scales down with the display tracking easing off: 48px heading-1 (-1.2px) descends through 36px (-0.9px) to body sizes where tracking returns toward normal.
  • Tap target minimum 44×44 on touch, 40×40 on pointer — even though the source is desktop-led.
  • Contrast is the page's great strength: #ffffff on #000000 is ~21:1 (AAA). Keep body text on the black canvas at or near this — never let de-emphasis gray (#6b7280 ≈ 5.6:1 on black) carry essential reading content below AA.
  • focus-visible: a 1px white ring/border replaces the default outline (matching the hairline language) — mandatory on every interactive element.
  • All interactive elements reachable via Tab in logical reading order; never rely on hover to expose actions, especially since video stills double as affordances.
  • Every video still and image needs a meaningful `alt`; decorative frames use `alt=""`. The source ships several empty-alt hero images — fix this, don't replicate it.
  • Motion respects prefers-reduced-motion — the expressive GSAP/Framer layer collapses to opacity-only or disables entirely. This is critical given the heavy motion budget.
  • ARIA labels on icon-only controls; aria-live='polite' on async status; aria-expanded on any collapsible region.
  • Tap targets minimum 44×44 on touch; 40×40 on pointer.
  • Never signal state with the gray ladder alone (color-only) — pair with weight, border, or icon, since the palette is achromatic.
Framer MotionGSAPMux (video)Next/Image

Motion is split across two libraries observed in the runtime: Framer Motion (window.MotionIsMounted) for component interaction and GSAP (window._gsap) for scroll-pinned cinematic beats. Video stills are served from Mux (image.mux.com thumbnails at 16:9), implying Mux-hosted playback for the live frames. Images are webp-dominant (8 of 12), eager-loaded above the fold (zero lazy-loading observed — a deliberate cinematic choice, but audit it for performance).

  • Framer Motion `motion.div` with `whileInView` + `viewport={{ once: true }}` for component reveals; constants only — `ease: [0.4, 0, 0.2, 1]`, `duration: 0.15` / `0.2` / `0.5`
  • GSAP ScrollTrigger for section-level cinematic choreography (pin + fade widescreen stills); keep it on the 0.4/0/0.2/1 or linear timing to match the CSS layer
  • Mux <MuxPlayer> or mux image thumbnails (image.mux.com/<id>/thumbnail.webp) for 16:9 video stills; provide a `srcset` ladder (480/640/960/1280/1600/1920w as captured)
  • Next/Image with `sizes` always set and `priority` on the LCP hero still; reconsider eager-loading every frame (source ships zero lazy) to protect mobile
  • useReducedMotion guard wraps every animation primitive in both libraries — no exceptions
  • Keep the canvas true #000000 so every video still reads as a projected frame — black is the gallery wall, not a soft dark gray.
  • Split voice across two families: timesNow serif for art-directed headlines, abcNormal grotesque (400/500/600) for all UI and body.
  • Deliver structure with the 1px solid hairline border (#e5e7eb-tier) — reach for border before anything else; there are no shadows in the source.
  • Compose around 16:9 widescreen stills at the 1600px rail; let imagery dominate the fold and use 80px section gaps to give frames room.
  • Default interactive motion to cubic-bezier(0.4, 0, 0.2, 1) at 0.15-0.2s; reserve 0.5s for atmospheric reveals only.
  • Delegate all saturation to the generated frames — keep the UI achromatic (black/white/gray ladder).
  • Pass every page through useReducedMotion before shipping — the expressive GSAP/Framer budget demands a robust static fallback.
  • Never invent a saturated brand accent — the capture is achromatic (black/white + #6b7280/#999999/#404040/#1a1a1a gray ladder + #e5e7eb hairline). Color belongs to the imagery, not to a chip or button fill.
  • Never introduce drop shadows — the source has zero box-shadow tokens; elevation is hairline + luminous-frame-on-black only.
  • Never set body copy or UI controls in the serif (timesNow) — it is the curatorial display voice; abcNormal carries all functional text.
  • Never coarsen the radius scale beyond 4/6/8px or add decorative pills — corners stay subtle so frames read as frames.
  • Never invent durations or easings outside the captured set {0.15s, 0.2s, 0.5s} and {cubic-bezier(0.4, 0, 0.2, 1), linear}; no springs.
  • Never use em for display tracking — the negative px scale (-1.2px @48 / -0.9px @36 / -0.26px @13) is an optical constant.
  • Never crop the 16:9 frame to a different aspect to fit a layout — scale the composition around the frame instead.
  • Tailwind v4 @theme inline only — no runtime style concatenation, no CSS-in-JS.
  • Spacing base 4px, scale 4/6/8/10/12/14/16/20/24/28/32/40.
  • Container max 1600px (wide cinematic rail) + 512px narrow rail — do not collapse to a generic 1280.
  • Two families only: timesNow (serif display) + abcNormal (grotesque UI/body). Weight ladder 400/500/600 (plus 300 'Book' for large soft display).
  • Palette is achromatic: #000000 canvas, #ffffff foreground, #e5e7eb-tier hairline, gray ladder #6b7280/#999999/#404040/#1a1a1a. No saturated accent.
  • Motion: three captured durations (0.15 / 0.2 / 0.5 s) and two easings (cubic-bezier(0.4, 0, 0.2, 1) primary, linear secondary). No springs.
  • Radius scale: 4 / 6 / 8 px. Border: 1px solid only. No drop shadows.
  • Canvas audit: primary background is true #000000, not a softened dark gray.
  • Color audit: no saturated accent hex anywhere — only #000000 / #ffffff / #e5e7eb / #6b7280 / #999999 / #404040 / #1a1a1a appear as UI color; all saturation lives in imagery.
  • Font-family grep: headlines use timesNow (serif), UI/body uses abcNormal; weights restricted to 400 / 500 / 600 (and 300 for large display only).
  • Spacing grep: no values outside the 4/6/8/10/12/14/16/20/24/28/32/40 ladder.
  • Container width: wide content reaches the 1600px rail; narrow clusters cap at 512px; no generic 1280 default.
  • Shadow audit: zero box-shadow declarations — every delimiter is a 1px solid hairline border.
  • Radius grep: only 4 / 6 / 8 px corner radii appear.
  • Transition grep: timing-function values draw from {cubic-bezier(0.4, 0, 0.2, 1), linear}; durations from {0.15s, 0.2s, 0.5s} with 0.5s reserved for ambience.
  • Aspect audit: hero and feature media compose at 16:9 (1920×1080 / 2048×1152), never re-cropped.
  • Tracking audit: display headings use px-based negative tracking (-1.2px @48 / -0.9px @36), not em.
  • Contrast audit: body text on the black canvas is at or near 21:1; de-emphasis gray never carries essential reading below 4.5:1.
  • Motion audit: prefers-reduced-motion collapses the GSAP + Framer Motion layer to opacity-only or off.

Design tokens

Observed token system

Color, type, spacing, gradients, and stacking order captured from the live page and rendered here as living, paste-ready previews.

Inspector

Observable layers

Structure, breakpoints, motion, fonts, and images captured from the live page and kept paste-ready alongside the tokens.

Depth-first walk of the meaningful sections. 11 nodes across 6 levels, shallow to deep by color.

  • body3
    • Header1
      • div1
        • div1
          • div1
            • Nav
    • div1
      • Main1
        • Section (×7)
    • Footer1
      • Section

Accessibility

Contrast matrix

38 combinations - 18 pass AA - 14 pass AAA. Each pair is previewed with its real foreground on background; APCA Lc sits alongside the WCAG 2.1 ratio for draft WCAG 3 awareness.

Normal text passes AAALarge text passes AAA
fg
#000000
bg
#FFFFFF
APCA Lc
+106
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#FFFFFF
bg
#000000
APCA Lc
-108
Use
background on foreground
Normal text passes AAALarge text passes AAA
fg
#FFFFFF
bg
#1A1A1A
APCA Lc
-107
Use
background on foreground
Normal text passes AAALarge text passes AAA
fg
#1A1A1A
bg
#FFFFFF
APCA Lc
+104
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#000000
bg
#E5E7EB
APCA Lc
+92
Use
foreground on neutral
Normal text passes AAALarge text passes AAA
fg
#E5E7EB
bg
#000000
APCA Lc
-92
Use
neutral on foreground
Normal text passes AAALarge text passes AAA
fg
#E5E7EB
bg
#1A1A1A
APCA Lc
-91
Use
neutral on foreground
Normal text passes AAALarge text passes AAA
fg
#1A1A1A
bg
#E5E7EB
APCA Lc
+90
Use
foreground on neutral
Normal text passes AAALarge text passes AAA
fg
#FFFFFF
bg
#404040
APCA Lc
-98
Use
background on foreground

Images

Image strategy

Observable image posture - total count, lazy-loading ratio, and format mix. The hero image is measured above the fold.

Total images
12
Lazy loaded
0%
Format mix
  • webp8 · 67%
  • png2 · 17%
  • jpg2 · 17%

Hero image

https://image.mux.com/h6Evf29Fh1Y8mutGchd87viJojkmQck3IMuCaN2qVzA/thumbnail.webp?time=0
Format
WEBP
Dimensions
1920x1080
Loading
auto
srcset
no
Industry
ai
Industry
content
Theme
Dark
Added
2026-06-24

FAQ

Questions people ask about Runway

3questions

Answers are pulled from the curator verdict and design brief - the same text your AI agent sees when it paste-reads this page.

Compare this with