Skill

Swiss Design (International Typographic Style)

Swiss Design sub-style for the design-it skill: strict 12-column grids, flush-left Helvetica, and one saturated accent color.

Maintainer of this project? Claim this page to edit the listing.


73
Spark score
out of 100
Updated 28 days ago
Version 13.5.0

Add to Favorites

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/ag-swiss-design | bash

Overview

Swiss Design (International Typographic Style)

A design-it sub-style for Swiss/International Typographic Style: strict grid layouts, Helvetica typography, and one saturated accent color, implemented for web CSS and four app frameworks. Use when a UI needs the disciplined, grid-driven Swiss Design look - never centered text, never serif fonts, never drop shadows.

What it does

Swiss Design (International Typographic Style) is a sub-style reference within the design-it skill family, built around three core principles: mathematical grids (everything aligns to a strict underlying grid, with asymmetry preferred over centering), sans-serif typography (Helvetica as the canonical choice, set flush-left with ragged-right alignment), and objective, documentary-style photography rather than stylized illustration. It is explicitly a child reference of design-it and is not meant to be triggered directly - it applies when a parent design-it request matches this aesthetic.

When to use - and when NOT to

Use this sub-style when a UI needs the disciplined, grid-driven look of mid-century Swiss typographic design: huge contrast between massive headers (e.g. 6rem/60px) and small body text, a near-monochrome palette, and deliberate negative space as a structural element. The style's own rules are explicit about what to avoid: never center-align text, never use serif fonts, and never use drop shadows - all of which would break the flat, grid-disciplined look this style is built around.

Inputs and outputs

The web implementation uses CSS Grid with a 12-column grid-template-columns, where a header spans most columns while deliberately leaving space empty (grid-column: 1 / 11) and body content is indented into a narrower asymmetrical column (grid-column: 4 / 9), styled in Helvetica Neue/Inter/Roboto with a single accent color, #E2001A ("Classic Swiss Red"). The four app implementations reproduce the same asymmetry with platform-native layout primitives: SwiftUI uses alignment: .leading everywhere with a Spacer().frame(width:) to push content off the left margin (never .center); Flutter mandates CrossAxisAlignment.start and pairs a fixed-width SizedBox with an Expanded widget in a Row; React Native contrasts HelveticaNeue-CondensedBlack headers against HelveticaNeue-Regular body text inside a flexDirection: 'row' layout; Jetpack Compose combines a Row, a fixed Spacer, and a Column with Modifier.weight(1f), using plain black Dividers as harsh horizontal structural rules.

.swiss-header {
  grid-column: 1 / 11;
  font-size: 6vw;
  font-weight: 700;
  letter-spacing: -0.04em;
}
.swiss-accent { color: #E2001A; }

Integrations

As a design-it sub-style, it's invoked through the parent skill's style-matching rather than called on its own, and is meant to be applied consistently across web CSS and the four listed app frameworks (SwiftUI, Flutter, React Native, Jetpack Compose) for a single project.

Who it's for

Designers and developers building an interface that wants the disciplined, high-contrast look of Swiss/International Typographic Style - strict grids, Helvetica, one saturated accent color, and asymmetrical negative space - across web and native mobile platforms with matching implementation patterns for each.

Source README

Swiss Design (International Typographic Style)

"Form follows function. The grid is absolute. Typography is the primary visual element."

When to Use

Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the design-it skill and is not meant to be triggered directly.

Core Principles

  1. Mathematical Grids: Everything aligns to a strict underlying grid. Asymmetry is preferred over centered text.
  2. Sans-Serif Typography: Helvetica is the king, but any clean, neutral sans-serif works. Flush left, ragged right text alignment.
  3. Objective Photography: If images are used, they should be objective, documentary-style photos, not stylized illustrations.

Visual DNA

  • Colors: Very limited. Usually just black, white, and ONE highly saturated accent color (often primary red, blue, or yellow). The Industrial Chic palette works perfectly.
  • Typography: Helvetica Neue, Inter, or Roboto. Huge contrast in font sizes (e.g., massive 6rem headers paired with 1rem body text).
  • Layout: Do NOT center text. Ever.

Web Implementation

  • Use CSS Grid extensively. Let columns dictate the layout.
  • CSS Example:
body {
  background-color: #f4f4f4;
  color: #111;
  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
  line-height: 1.4;
}

.swiss-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 20px;
  padding: 40px;
}

.swiss-header {
  grid-column: 1 / 11; /* spans across multiple columns, leaving right side empty */
  font-size: 6vw;
  font-weight: 700;
  text-transform: lowercase; /* Optional, but common in brutalist/swiss */
  margin-bottom: 2rem;
  line-height: 0.9;
  letter-spacing: -0.04em;
}

.swiss-content {
  grid-column: 4 / 9; /* Indented alignment */
  font-size: 1.25rem;
  text-align: left; /* Flush left, ragged right */
}

.swiss-accent {
  color: #E2001A; /* Classic Swiss Red */
}

App Implementation

SwiftUI

struct SwissDesignView: View {
    var body: some View {
        ScrollView {
            VStack(alignment: .leading, spacing: 0) {
                // Header Block
                VStack(alignment: .leading, spacing: 8) {
                    Text("the grid")
                        .font(.custom("Helvetica Neue", size: 60))
                        .fontWeight(.heavy)
                        .tracking(-2) // Tight letter spacing
                    Text("is absolute.")
                        .font(.custom("Helvetica Neue", size: 60))
                        .fontWeight(.heavy)
                        .tracking(-2)
                        .foregroundColor(Color(hex: "E2001A")) // Swiss Red
                }
                .padding(.horizontal, 24)
                .padding(.top, 60)
                .padding(.bottom, 40)
                
                Divider().background(Color.black)
                
                // Asymmetrical Content Block
                HStack(alignment: .top, spacing: 20) {
                    // Empty left column (negative space is structural)
                    Spacer().frame(width: 40)
                    
                    VStack(alignment: .leading, spacing: 16) {
                        Text("Form follows function.")
                            .font(.custom("Helvetica Neue", size: 24))
                            .fontWeight(.bold)
                        
                        Text("Typography is the primary visual element. Everything aligns to a strict underlying grid. Asymmetry is preferred over centered text.")
                            .font(.custom("Helvetica Neue", size: 16))
                            .lineSpacing(6)
                    }
                    .padding(.vertical, 40)
                    .padding(.trailing, 24)
                }
                
                Divider().background(Color.black)
            }
            .frame(maxWidth: .infinity, alignment: .leading)
        }
        .background(Color(white: 0.96))
        .foregroundColor(.black)
    }
}
  • Strict alignment: .leading everywhere. Never use .center.
  • Use Spacer().frame(width: X) in HStacks to intentionally push content off the left margin, creating the classic Swiss indented asymmetrical grid.

Flutter

class SwissDesignScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color(0xFFF4F4F4),
      body: SingleChildScrollView(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            const SizedBox(height: 80),
            // Header
            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 24.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: const [
                  Text('the grid', style: TextStyle(fontFamily: 'Helvetica', fontSize: 60, fontWeight: FontWeight.w900, height: 0.9, letterSpacing: -2)),
                  Text('is absolute.', style: TextStyle(fontFamily: 'Helvetica', fontSize: 60, fontWeight: FontWeight.w900, height: 0.9, letterSpacing: -2, color: Color(0xFFE2001A))),
                ],
              ),
            ),
            const SizedBox(height: 40),
            const Divider(color: Colors.black, thickness: 1, height: 1),
            
            // Asymmetrical Content
            Row(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                // Structural empty column
                const SizedBox(width: 64),
                // Content column
                Expanded(
                  child: Padding(
                    padding: const EdgeInsets.only(top: 40.0, bottom: 40.0, right: 24.0),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: const [
                        Text('Form follows function.', style: TextStyle(fontFamily: 'Helvetica', fontSize: 24, fontWeight: FontWeight.bold)),
                        SizedBox(height: 16),
                        Text('Typography is the primary visual element. Everything aligns to a strict underlying grid.', style: TextStyle(fontFamily: 'Helvetica', fontSize: 16, height: 1.4)),
                      ],
                    ),
                  ),
                ),
              ],
            ),
            const Divider(color: Colors.black, thickness: 1, height: 1),
          ],
        ),
      ),
    );
  }
}
  • CrossAxisAlignment.start is mandatory on all Columns.
  • Use a Row with a fixed SizedBox width on the left and an Expanded widget on the right to enforce the asymmetrical grid column.

React Native

const SwissDesignScreen = () => {
  return (
    <ScrollView style={{ flex: 1, backgroundColor: '#F4F4F4' }}>
      
      {/* Header */}
      <View style={{ paddingHorizontal: 24, paddingTop: 80, paddingBottom: 40 }}>
        <Text style={{ fontFamily: 'HelveticaNeue-CondensedBlack', fontSize: 60, lineHeight: 60, letterSpacing: -2, color: '#111' }}>
          the grid
        </Text>
        <Text style={{ fontFamily: 'HelveticaNeue-CondensedBlack', fontSize: 60, lineHeight: 60, letterSpacing: -2, color: '#E2001A' }}>
          is absolute.
        </Text>
      </View>

      <View style={{ height: 1, backgroundColor: '#111' }} />

      {/* Asymmetrical Layout */}
      <View style={{ flexDirection: 'row', paddingVertical: 40 }}>
        {/* Empty left column */}
        <View style={{ width: 64 }} />
        
        {/* Content */}
        <View style={{ flex: 1, paddingRight: 24 }}>
          <Text style={{ fontFamily: 'HelveticaNeue-Bold', fontSize: 24, color: '#111', marginBottom: 16 }}>
            Form follows function.
          </Text>
          <Text style={{ fontFamily: 'HelveticaNeue-Regular', fontSize: 16, lineHeight: 24, color: '#111' }}>
            Typography is the primary visual element. Everything aligns to a strict underlying grid.
          </Text>
        </View>
      </View>

      <View style={{ height: 1, backgroundColor: '#111' }} />

    </ScrollView>
  );
};
  • Link the Helvetica Neue font family. The contrast between HelveticaNeue-CondensedBlack for headers and HelveticaNeue-Regular for body copy defines this style.
  • Use flexDirection: 'row' to build the strict column structure.

Jetpack Compose

@Composable
fun SwissDesignScreen() {
    Column(
        modifier = Modifier.fillMaxSize().background(Color(0xFFF4F4F4)).verticalScroll(rememberScrollState())
    ) {
        Spacer(Modifier.height(80.dp))
        
        // Header
        Column(modifier = Modifier.padding(horizontal = 24.dp, vertical = 40.dp)) {
            Text(
                text = "the grid",
                fontFamily = FontFamily.SansSerif, // Replace with Helvetica
                fontSize = 60.sp,
                fontWeight = FontWeight.Black,
                letterSpacing = (-2).sp,
                lineHeight = 60.sp,
                color = Color.Black
            )
            Text(
                text = "is absolute.",
                fontFamily = FontFamily.SansSerif,
                fontSize = 60.sp,
                fontWeight = FontWeight.Black,
                letterSpacing = (-2).sp,
                lineHeight = 60.sp,
                color = Color(0xFFE2001A)
            )
        }
        
        Divider(color = Color.Black, thickness = 1.dp)
        
        // Asymmetrical Grid Row
        Row(modifier = Modifier.fillMaxWidth().padding(vertical = 40.dp)) {
            // Empty grid column
            Spacer(modifier = Modifier.width(64.dp))
            
            // Content
            Column(modifier = Modifier.weight(1f).padding(right = 24.dp)) {
                Text(
                    text = "Form follows function.",
                    fontSize = 24.sp,
                    fontWeight = FontWeight.Bold,
                    color = Color.Black
                )
                Spacer(Modifier.height(16.dp))
                Text(
                    text = "Typography is the primary visual element. Everything aligns to a strict underlying grid.",
                    fontSize = 16.sp,
                    color = Color.Black
                )
            }
        }
        
        Divider(color = Color.Black, thickness = 1.dp)
    }
}
  • Use Divider(color = Color.Black, thickness = 1.dp) to create the harsh horizontal structural rules.
  • Combine Row, a fixed Spacer width, and a Column with Modifier.weight(1f) to enforce the asymmetrical design.

Do's and Don'ts

  • DO: Use negative space as a structural element. Empty columns are just as important as filled ones.
  • DON'T: Center align text. Do not use serif fonts. Do not use drop shadows.

Limitations

  • This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
  • Ensure appropriate contrast ratios and responsive behaviors are verified separately.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.