--- name: swiss-poster description: Apply a Swiss Poster design system using Tailwind CSS. Use when asked to style a webpage with poster-style layouts where elements break the grid, overlap, bleed off edges, and use extreme typographic scale. Implements IBM Plex Sans, stone color palette, opacity hierarchy, and compositional techniques from Weingart, Troxler, Hofmann, and Odermatt & Tissi. license: MIT metadata: author: adewale version: "2.0" --- # Swiss Poster Design System A design system based on Swiss poster design from the 1950s through 1980s: grotesque type at extreme scales, layouts that break the grid, overlapping layers, diagonal energy, and cropped forms. Draws on Weingart, Troxler, Odermatt & Tissi, Hofmann, and Ruder. ## Six Principles 1. **Grid as launchpad.** Start with a 12-column grid, then let key elements escape it. Oversized type, images, and color blocks should break column boundaries, overlap neighbors, or bleed off the viewport edge. The grid exists so the breakout has meaning. 2. **Extreme scale contrast.** Place 20rem display type next to 11px labels. A single word can fill the viewport width. The tension between massive and tiny *is* the hierarchy. Never settle for moderate size differences. 3. **Overlap and layer.** Elements should collide — text over images, type over type, color blocks overlapping content. Use `relative`/`absolute` positioning, negative margins, and z-index stacking to create depth. 4. **Bleed and crop.** Let elements escape their containers. Type cropped by the viewport edge, images that extend past the layout, color blocks that run off-screen. A composition that's cut off implies it continues beyond the frame. 5. **One accent, used boldly.** Each project gets exactly one accent color, but where the International Style uses it sparingly, poster style uses it in large, confident fields — full-width bands, oversized shapes, dramatic backgrounds. 6. **Tension over comfort.** Asymmetric whitespace, unexpected element placement, rotated text, diagonal compositions. The layout should feel dynamic and slightly unresolved, not settled and safe. --- ## Typography **Primary font:** IBM Plex Sans (Google Fonts) ```html ``` **Fallback chain** (in order of preference): | Font | Source | Character | | ---- | ------ | --------- | | IBM Plex Sans | Google Fonts | Primary. Rational, slightly condensed, 1960s systems rationalism | | Hanken Grotesk | Google Fonts | Closest to Neue Haas Grotesk lineage | | Barlow | Google Fonts | Condensed Swiss-grid proportions, strong vertical rhythm | | Host Grotesk | Google Fonts | Warm grotesque, good at all sizes | | DM Sans | Google Fonts | Clean neo-grotesque fallback | | system-ui | Built-in | Last resort | ```css font-family: 'IBM Plex Sans', 'Hanken Grotesk', 'Barlow', 'Host Grotesk', 'DM Sans', system-ui, sans-serif; ``` **Type scale — poster range:** The poster style uses a wider range of sizes than the International Style, and the gaps between levels are deliberately extreme. | Role | Tailwind | Weight | Line height | Notes | | ---- | -------- | ------ | ----------- | ----- | | Mega | `text-[clamp(6rem,15vw,20rem)]` | `font-bold` or `font-thin` | `leading-[0.85]` | Viewport-scale type. One word or short phrase. | | Display | `text-7xl md:text-8xl lg:text-9xl` | `font-light` or `font-bold` | `leading-none` | Section anchors | | H1 | `text-5xl md:text-6xl` | `font-light` | `leading-tight` | Page titles | | H2 | `text-4xl` | `font-light tracking-tight` | `leading-snug` | Section headings | | H3 | `text-2xl` | `font-normal` | `leading-snug` | Subsections | | Body | `text-base font-normal` | `font-normal` | `leading-relaxed` | `max-w-[60ch]` | | Small | `text-sm font-normal` | `font-normal` | `leading-relaxed` | `max-w-[60ch]` | | Caption | `text-xs tracking-widest uppercase` | `font-normal` | `leading-normal` | Labels, metadata | | Mono | `font-mono text-sm` | `font-normal` | `leading-relaxed` | Code, data | | Label | `text-[11px] tracking-widest uppercase` | `font-medium` | `leading-none` | Smallest text | **Key differences from International Style:** - **Bold is allowed — encouraged — at display sizes.** `font-bold` and even `font-thin` (100) create dramatic weight contrast. Use bold for mega/display type that dominates the composition. - **Extreme size jumps.** A 20rem heading next to 11px labels is correct. Moderate size differences feel timid. - **Tight leading at large sizes.** Display type uses `leading-[0.85]` or `leading-none` — letters should nearly collide vertically. - **Type as image.** At poster scale, letterforms become graphic elements. A single word at 20rem is a shape, a texture, a compositional anchor. --- ## Color System ### Stone palette (light mode → dark mode) | Role | Light | Dark | Tailwind | | ---- | ----- | ---- | -------- | | Page background | `stone-50` | `stone-950` | `bg-stone-50 dark:bg-stone-950` | | Surface / card | `stone-100` | `stone-900` | `bg-stone-100 dark:bg-stone-900` | | Subtle surface | `stone-200` | `stone-800` | `bg-stone-200 dark:bg-stone-800` | | Border | `stone-200` | `stone-800` | `border-stone-200 dark:border-stone-800` | | Primary text | `stone-900` | `stone-50` | `text-stone-900 dark:text-stone-50` | | Secondary text | `stone-900/70` | `stone-50/70` | `text-stone-900/70 dark:text-stone-50/70` | | Tertiary text | `stone-900/40` | `stone-50/40` | `text-stone-900/40 dark:text-stone-50/40` | ### Opacity hierarchy To de-emphasize text, reduce opacity — never change the hue. ``` Full presence: text-stone-900 (primary) Softer: text-stone-900/70 (secondary, labels) Quiet: text-stone-900/40 (tertiary, captions) Ghosted: text-stone-900/20 (disabled, placeholder) ``` Dark mode: replace `stone-900` with `stone-50`. The opacity values stay identical. ### Accent color Each project uses **one** accent color. Default is Swiss poster red. | Name | Hex | Tailwind arbitrary | | ---- | --- | ------------------ | | Swiss Red (default) | `#C8102E` | `[#C8102E]` | | Cobalt | `#003B8E` | `[#003B8E]` | | Golden | `#F0B429` | `[#F0B429]` | | Forest | `#2D6A4F` | `[#2D6A4F]` | **Poster-style accent usage — bolder than International Style:** ``` Full field: bg-[#C8102E] Full-width bands, large shapes, hero backgrounds Overlay: bg-[#C8102E]/80 Translucent overlay on images or sections Muted: bg-[#C8102E]/60 Hover states, secondary elements Tint: bg-[#C8102E]/20 Background washes, card tints Ghost: bg-[#C8102E]/10 Very subtle tints ``` The poster style permits large accent surfaces. A full-width red band, a half-page accent block, or accent type at mega scale are all correct. The International Style limited accent to 10–15% of visual surface; poster style can push to 30–40% when the composition demands it. --- ## Grid & Breakout **Base unit:** 8px. Spacing is multiples of 8, but elements are free to escape the grid. ### The grid is a starting point ```html