website_designs

Split Screen Design Reference

Split Screen is a bold, high-impact layout aesthetic built on the principle of dividing the viewport into two (or more) equally weighted vertical panels, each carrying distinct but complementary content. Rooted in editorial print design – where facing pages have long been used for dramatic juxtaposition – the technique migrated to web design in the mid-2010s and has grown steadily as a favored pattern for landing pages, portfolio sites, and brand storytelling. The aesthetic thrives on visual tension: light against dark, image against text, warm against cool, photography against illustration. Unlike traditional single-column layouts that guide the eye in one direction, Split Screen presents a deliberate duality that invites comparison, highlights contrast, and gives users an immediate choice. In web and UI design, Split Screen translates to bold 50/50 flexbox or grid divisions, high-contrast color blocking, dramatic typography anchored to one panel, strong vertical center lines (sometimes replaced by diagonal or angled dividers), and hover-driven interactions that let one panel expand or reveal content at the expense of the other.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

Contrast Block Palette

Color Name Hex Role / Usage
Panel Dark #1A1A2E Dark panel background, deep navy-charcoal foundation
Panel Light #F5F0EB Light panel background, warm ivory canvas
Pure Black #0D0D0D Maximum contrast text on light panels, deepest dark
Pure White #FFFFFF Text on dark panels, maximum brightness
Accent Coral #FF6B6B Primary accent, CTAs, active states, hover highlights
Accent Electric #4ECDC4 Secondary accent, links, interactive elements on dark panels
Deep Teal #1B998B Tertiary accent, icons, secondary buttons
Warm Amber #F7B731 Warning states, highlights, attention-drawing accents
Soft Graphite #2D3436 Dark panel alternate, card backgrounds, overlays
Mist Gray #DFE6E9 Light panel borders, subtle dividers, secondary backgrounds
Slate Text #636E72 Secondary text on light panels, captions, metadata
Lavender Mist #A29BFE Decorative accent, hover states, gradient endpoints
Crimson Bold #E74C3C Bold emphasis, split divider accent, strong CTAs
Midnight Blue #0C2461 Alternative dark panel, premium/corporate variant

CSS Custom Properties

:root {
  /* Panel backgrounds */
  --split-panel-dark: #1a1a2e;
  --split-panel-light: #f5f0eb;
  --split-black: #0d0d0d;
  --split-white: #ffffff;

  /* Accents */
  --split-coral: #ff6b6b;
  --split-electric: #4ecdc4;
  --split-teal: #1b998b;
  --split-amber: #f7b731;

  /* Neutrals */
  --split-graphite: #2d3436;
  --split-mist: #dfe6e9;
  --split-slate: #636e72;

  /* Decorative */
  --split-lavender: #a29bfe;
  --split-crimson: #e74c3c;
  --split-midnight: #0c2461;

  /* Functional */
  --split-divider: #ff6b6b;
  --split-divider-width: 4px;
  --split-transition-speed: 0.5s;
  --split-panel-gap: 0px;

  /* Gradients */
  --split-gradient-dark: linear-gradient(135deg, #1a1a2e 0%, #0c2461 100%);
  --split-gradient-warm: linear-gradient(135deg, #ff6b6b 0%, #f7b731 100%);
  --split-gradient-cool: linear-gradient(135deg, #4ecdc4 0%, #a29bfe 100%);

  /* Shadows */
  --split-shadow-left: 4px 0 20px rgba(0, 0, 0, 0.15);
  --split-shadow-right: -4px 0 20px rgba(0, 0, 0, 0.15);
  --split-shadow-card: 0 8px 30px rgba(0, 0, 0, 0.12);
}

Typography

Typeface Characteristics

Split Screen typography is:

Font Style Best For
Inter Clean geometric sans Body text, versatile across both panels
Space Grotesk Geometric, contemporary Headlines, modern split layouts
Bebas Neue Condensed display Large hero headlines, dramatic impact
Poppins Geometric, friendly Subheadings, body text, balanced weight range
Sora Geometric, modern Headlines, navigation, tech-forward layouts
DM Sans Clean, geometric Body text, readable at small sizes
Playfair Display High-contrast serif Editorial headlines, luxury split layouts
Archivo Black Ultra-bold grotesque Maximum impact headlines, bold statements
Outfit Modern geometric sans Body text, labels, clean readability
Clash Display Variable geometric Striking display text, branding headers

Font Pairing Suggestions

Heading Font Body Font Character
Bebas Neue (400) Inter (400) Bold editorial, magazine-style drama
Space Grotesk (700) DM Sans (400) Modern tech, clean and architectural
Archivo Black (400) Outfit (400) Maximum impact, strong and direct
Playfair Display (700) Poppins (300) Editorial luxury, refined contrast
Sora (700) Inter (400) Contemporary minimal, balanced weight

Typography CSS Example

/* Import fonts */
@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@300;400;500;600&display=swap');

/* Headings */
h1, h2, h3, h4, h5, h6 {
  font-family: 'Bebas Neue', sans-serif;
  font-weight: 400;
  letter-spacing: 0.04em;
  line-height: 1.05;
}

/* Display / Hero text -- oversized for text panels */
.split-display {
  font-family: 'Bebas Neue', sans-serif;
  font-size: clamp(3.5rem, 8vw, 7rem);
  letter-spacing: 0.03em;
  line-height: 0.95;
  text-transform: uppercase;
}

/* Display text on dark panel */
.split-display--light {
  color: var(--split-white);
}

/* Display text on light panel */
.split-display--dark {
  color: var(--split-black);
}

/* Accent-colored display */
.split-display--accent {
  color: var(--split-coral);
}

/* Body text */
body {
  font-family: 'Inter', sans-serif;
  font-weight: 400;
  font-size: 1rem;
  line-height: 1.7;
}

/* Body text on dark panels */
.text-on-dark {
  color: rgba(255, 255, 255, 0.85);
}

/* Body text on light panels */
.text-on-light {
  color: var(--split-graphite);
}

/* Eyebrow / Label */
.split-label {
  font-family: 'Inter', sans-serif;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--split-coral);
}

Layout Principles

Grid and Structure

Section Organization

Responsive Approach


CSS / Design Techniques

Split Screen Card Component

.split-card {
  display: flex;
  background: var(--split-white);
  border-radius: 0;
  overflow: hidden;
  box-shadow: var(--split-shadow-card);
}

.split-card__image {
  flex: 1;
  min-height: 300px;
  background-size: cover;
  background-position: center;
}

.split-card__content {
  flex: 1;
  padding: 48px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  background: var(--split-panel-dark);
  color: var(--split-white);
}

.split-card__content h3 {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 2rem;
  letter-spacing: 0.03em;
  margin-bottom: 16px;
}

.split-card__content p {
  font-family: 'Inter', sans-serif;
  font-size: 0.95rem;
  line-height: 1.7;
  color: rgba(255, 255, 255, 0.75);
  margin-bottom: 24px;
}

/* Alternating card layout */
.split-card:nth-child(even) {
  flex-direction: row-reverse;
}

/* Card grid for multiple split cards */
.split-card-stack {
  display: flex;
  flex-direction: column;
  gap: 0;
}

@media (max-width: 768px) {
  .split-card,
  .split-card:nth-child(even) {
    flex-direction: column;
  }

  .split-card__image {
    min-height: 220px;
  }

  .split-card__content {
    padding: 32px 24px;
  }
}

Split Screen Button

.split-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 16px 40px;
  font-family: 'Inter', sans-serif;
  font-weight: 600;
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-decoration: none;
  border: 2px solid currentColor;
  background: transparent;
  cursor: pointer;
  position: relative;
  overflow: hidden;
  transition: color var(--split-transition-speed), background var(--split-transition-speed);
}

/* Button on dark panels */
.split-btn--on-dark {
  color: var(--split-white);
  border-color: var(--split-white);
}

.split-btn--on-dark:hover {
  color: var(--split-panel-dark);
  background: var(--split-white);
}

/* Button on light panels */
.split-btn--on-light {
  color: var(--split-black);
  border-color: var(--split-black);
}

.split-btn--on-light:hover {
  color: var(--split-white);
  background: var(--split-black);
}

/* Accent filled button */
.split-btn--accent {
  color: var(--split-white);
  background: var(--split-coral);
  border-color: var(--split-coral);
}

.split-btn--accent:hover {
  background: #e85555;
  border-color: #e85555;
}

/* Sliding fill animation */
.split-btn--slide {
  z-index: 1;
}

.split-btn--slide::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 0%;
  height: 100%;
  background: var(--split-coral);
  transition: width var(--split-transition-speed) ease;
  z-index: -1;
}

.split-btn--slide:hover::before {
  width: 100%;
}

.split-btn--slide:hover {
  color: var(--split-white);
  border-color: var(--split-coral);
}
.split-nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 24px 48px;
  z-index: 100;
  mix-blend-mode: difference;
}

.split-nav__logo {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.6rem;
  color: var(--split-white);
  text-decoration: none;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.split-nav__links {
  display: flex;
  gap: 32px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.split-nav__links a {
  font-family: 'Inter', sans-serif;
  font-weight: 500;
  font-size: 0.85rem;
  color: var(--split-white);
  text-decoration: none;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  position: relative;
  transition: opacity 0.3s;
}

.split-nav__links a::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 0;
  width: 0;
  height: 2px;
  background: var(--split-coral);
  transition: width 0.3s ease;
}

.split-nav__links a:hover::after {
  width: 100%;
}

.split-nav__links a:hover {
  opacity: 0.9;
}

/* Using mix-blend-mode: difference ensures the nav text inverts
   color against both light and dark panels automatically */

Hero Section – Full Viewport Split

.split-hero {
  display: flex;
  min-height: 100vh;
  width: 100%;
}

.split-hero__panel {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 80px 60px;
  position: relative;
  overflow: hidden;
  transition: flex var(--split-transition-speed) ease;
}

/* Dark text panel */
.split-hero__panel--dark {
  background: var(--split-panel-dark);
  color: var(--split-white);
}

/* Image panel */
.split-hero__panel--image {
  background-size: cover;
  background-position: center;
  padding: 0;
}

/* Optional: image overlay for text readability */
.split-hero__panel--image::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.15);
}

.split-hero__content {
  max-width: 480px;
  position: relative;
  z-index: 2;
}

.split-hero__content .split-label {
  margin-bottom: 16px;
}

.split-hero__content h1 {
  font-size: clamp(3rem, 5vw, 5.5rem);
  margin-bottom: 24px;
  line-height: 0.95;
}

.split-hero__content p {
  font-size: 1.05rem;
  line-height: 1.7;
  margin-bottom: 32px;
  opacity: 0.8;
}

@media (max-width: 768px) {
  .split-hero {
    flex-direction: column;
  }

  .split-hero__panel {
    min-height: 50vh;
    padding: 60px 32px;
  }

  .split-hero__panel--image {
    min-height: 40vh;
  }
}

Hover-Expand Panels

One of the signature interactions of Split Screen design: panels that grow and shrink on hover, creating a tug-of-war effect.

.split-expand {
  display: flex;
  min-height: 100vh;
  width: 100%;
  overflow: hidden;
}

.split-expand__panel {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  overflow: hidden;
  transition: flex 0.6s cubic-bezier(0.25, 0.8, 0.25, 1);
  cursor: pointer;
}

/* On hover, the hovered panel grows while its sibling shrinks */
.split-expand:hover .split-expand__panel {
  flex: 0.7;
}

.split-expand:hover .split-expand__panel:hover {
  flex: 1.3;
}

/* Panel overlay for darkening/lightening on state change */
.split-expand__panel::before {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0);
  transition: background 0.6s ease;
  z-index: 1;
}

.split-expand:hover .split-expand__panel::before {
  background: rgba(0, 0, 0, 0.3);
}

.split-expand:hover .split-expand__panel:hover::before {
  background: rgba(0, 0, 0, 0);
}

/* Content fades in on the active panel */
.split-expand__content {
  position: relative;
  z-index: 2;
  text-align: center;
  color: var(--split-white);
  opacity: 0.7;
  transform: scale(0.95);
  transition: opacity 0.5s, transform 0.5s;
}

.split-expand__panel:hover .split-expand__content {
  opacity: 1;
  transform: scale(1);
}

.split-expand__content h2 {
  font-family: 'Bebas Neue', sans-serif;
  font-size: clamp(2rem, 4vw, 4rem);
  margin-bottom: 16px;
}

.split-expand__content p {
  font-family: 'Inter', sans-serif;
  font-size: 1rem;
  max-width: 320px;
  margin: 0 auto;
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 0.5s 0.1s, transform 0.5s 0.1s;
}

.split-expand__panel:hover .split-expand__content p {
  opacity: 0.85;
  transform: translateY(0);
}

@media (max-width: 768px) {
  .split-expand {
    flex-direction: column;
  }

  .split-expand:hover .split-expand__panel,
  .split-expand:hover .split-expand__panel:hover {
    flex: 1;
  }

  .split-expand__content {
    opacity: 1;
    transform: scale(1);
  }

  .split-expand__content p {
    opacity: 0.85;
    transform: translateY(0);
  }
}

Diagonal Split Divider

Instead of a straight vertical cut, this technique uses CSS clip-path to create an angled boundary between panels, adding dynamic energy to the split.

.split-diagonal {
  display: flex;
  min-height: 100vh;
  width: 100%;
  position: relative;
  overflow: hidden;
}

.split-diagonal__left {
  flex: 0 0 55%;
  background: var(--split-panel-dark);
  clip-path: polygon(0 0, 100% 0, 85% 100%, 0 100%);
  display: flex;
  align-items: center;
  padding: 80px;
  padding-right: 120px;
  z-index: 2;
}

.split-diagonal__right {
  flex: 0 0 55%;
  margin-left: -10%;
  background: var(--split-panel-light);
  display: flex;
  align-items: center;
  justify-content: flex-end;
  padding: 80px;
  padding-left: 120px;
}

/* Angled accent stripe between panels */
.split-diagonal::after {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  left: 48%;
  width: var(--split-divider-width);
  background: var(--split-coral);
  transform: skewX(-8deg);
  z-index: 3;
}

/* Alternate direction for variety */
.split-diagonal--reverse .split-diagonal__left {
  clip-path: polygon(15% 0, 100% 0, 100% 100%, 0 100%);
  order: 2;
  padding-left: 120px;
  padding-right: 80px;
}

.split-diagonal--reverse .split-diagonal__right {
  order: 1;
  margin-left: 0;
  margin-right: -10%;
  justify-content: flex-start;
  padding-right: 120px;
  padding-left: 80px;
}

.split-diagonal--reverse::after {
  left: auto;
  right: 48%;
  transform: skewX(8deg);
}

@media (max-width: 768px) {
  .split-diagonal {
    flex-direction: column;
  }

  .split-diagonal__left,
  .split-diagonal__right {
    flex: none;
    width: 100%;
    min-height: 50vh;
    margin: 0;
    padding: 48px 32px;
    clip-path: none;
  }

  .split-diagonal::after {
    display: none;
  }
}

Scroll-Reveal Split Sections

Split sections that reveal content with a staggered animation as they enter the viewport, emphasizing the left-right duality.

.split-reveal {
  display: flex;
  min-height: 80vh;
  width: 100%;
  overflow: hidden;
}

.split-reveal__panel {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 80px 60px;
}

/* Initial hidden state -- panels slide in from opposite sides */
.split-reveal__panel--left {
  transform: translateX(-60px);
  opacity: 0;
  transition: transform 0.8s cubic-bezier(0.25, 0.8, 0.25, 1),
              opacity 0.8s ease;
}

.split-reveal__panel--right {
  transform: translateX(60px);
  opacity: 0;
  transition: transform 0.8s cubic-bezier(0.25, 0.8, 0.25, 1) 0.15s,
              opacity 0.8s ease 0.15s;
}

/* Visible state -- triggered by Intersection Observer adding .is-visible */
.split-reveal.is-visible .split-reveal__panel--left,
.split-reveal.is-visible .split-reveal__panel--right {
  transform: translateX(0);
  opacity: 1;
}

/* Accent vertical line in the center */
.split-reveal::after {
  content: '';
  position: absolute;
  top: 10%;
  bottom: 10%;
  left: 50%;
  width: 2px;
  background: var(--split-coral);
  transform: translateX(-50%) scaleY(0);
  transition: transform 0.6s ease 0.4s;
}

.split-reveal.is-visible::after {
  transform: translateX(-50%) scaleY(1);
}

/* JavaScript: Intersection Observer to trigger .is-visible */
/*
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        entry.target.classList.add('is-visible');
      }
    });
  }, { threshold: 0.2 });

  document.querySelectorAll('.split-reveal').forEach(el => observer.observe(el));
*/

Sticky Panel Scroll

A technique where one panel remains fixed in place while the other scrolls through multiple content blocks, creating a guided storytelling effect.

.split-sticky {
  display: flex;
  min-height: 100vh;
  width: 100%;
}

/* Fixed panel -- stays in view */
.split-sticky__fixed {
  flex: 0 0 50%;
  position: sticky;
  top: 0;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--split-panel-dark);
  overflow: hidden;
}

.split-sticky__fixed img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Scrolling panel -- multiple content blocks */
.split-sticky__scroll {
  flex: 0 0 50%;
  background: var(--split-panel-light);
}

.split-sticky__block {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 80px 60px;
  border-bottom: 1px solid var(--split-mist);
}

.split-sticky__block:last-child {
  border-bottom: none;
}

.split-sticky__block-content {
  max-width: 420px;
}

.split-sticky__block-content h2 {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 2.5rem;
  color: var(--split-black);
  margin-bottom: 20px;
}

.split-sticky__block-content p {
  font-family: 'Inter', sans-serif;
  color: var(--split-slate);
  line-height: 1.7;
  margin-bottom: 16px;
}

@media (max-width: 768px) {
  .split-sticky {
    flex-direction: column;
  }

  .split-sticky__fixed {
    position: relative;
    flex: none;
    width: 100%;
    height: 50vh;
  }

  .split-sticky__scroll {
    flex: none;
    width: 100%;
  }

  .split-sticky__block {
    min-height: auto;
    padding: 48px 32px;
  }
}

Design Do’s and Don’ts

Do

Don’t


Aesthetic Relationship to Split Screen
Editorial / Magazine Shares the print-inspired layout tradition; Editorial uses multi-column grids while Split Screen focuses on binary division
Brutalist Both use bold, high-contrast visual statements; Brutalist is raw and deliberately unpolished, Split Screen is precise and balanced
Swiss / International Both prize structural clarity and grid discipline; Swiss Design uses modular grids, Split Screen simplifies to a single binary axis
Minimalist Split Screen often employs Minimalist principles (negative space, limited palette) within its dual-panel structure
Material Design Material uses cards and layered surfaces; Split Screen flattens the hierarchy into two co-equal planes
Parallax Both create depth through scroll behavior; Parallax layers elements vertically, Split Screen layers them horizontally
Asymmetric Layout Split Screen is a specific case of asymmetric design where the spatial division is equal but the content weight is unbalanced
Color Block Shares the bold solid-fill approach; Color Block uses multiple color zones, Split Screen constrains to two primary zones
Metro / Flat Design Both favor clean edges and solid colors; Metro tiles can be seen as micro-splits within a grid

Quick-Start: Minimal Split Screen Page Template

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Split Screen Page</title>
  <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
  <style>
    :root {
      --split-panel-dark: #1a1a2e;
      --split-panel-light: #f5f0eb;
      --split-black: #0d0d0d;
      --split-white: #ffffff;
      --split-coral: #ff6b6b;
      --split-electric: #4ecdc4;
      --split-graphite: #2d3436;
      --split-mist: #dfe6e9;
      --split-slate: #636e72;
      --split-transition: 0.5s;
    }

    * { margin: 0; padding: 0; box-sizing: border-box; }

    body {
      font-family: 'Inter', sans-serif;
      font-size: 1rem;
      line-height: 1.7;
      color: var(--split-graphite);
      background: var(--split-panel-light);
    }

    h1, h2, h3 {
      font-family: 'Bebas Neue', sans-serif;
      font-weight: 400;
      letter-spacing: 0.04em;
      line-height: 1.05;
    }

    /* ---- Navigation ---- */
    nav {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 24px 48px;
      z-index: 100;
      mix-blend-mode: difference;
    }

    nav a.logo {
      font-family: 'Bebas Neue', sans-serif;
      font-size: 1.6rem;
      color: var(--split-white);
      text-decoration: none;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }

    nav ul {
      display: flex;
      gap: 28px;
      list-style: none;
    }

    nav ul a {
      font-family: 'Inter', sans-serif;
      font-weight: 500;
      font-size: 0.85rem;
      color: var(--split-white);
      text-decoration: none;
      text-transform: uppercase;
      letter-spacing: 0.06em;
      position: relative;
      transition: opacity 0.3s;
    }

    nav ul a::after {
      content: '';
      position: absolute;
      bottom: -4px;
      left: 0;
      width: 0;
      height: 2px;
      background: var(--split-coral);
      transition: width 0.3s ease;
    }

    nav ul a:hover::after {
      width: 100%;
    }

    /* ---- Split Hero ---- */
    .hero {
      display: flex;
      min-height: 100vh;
      width: 100%;
    }

    .hero__panel {
      flex: 1;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 80px 60px;
      position: relative;
      overflow: hidden;
      transition: flex var(--split-transition) ease;
    }

    .hero__panel--dark {
      background: var(--split-panel-dark);
    }

    .hero__panel--image {
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      position: relative;
    }

    /* Decorative geometric shapes on image panel */
    .hero__panel--image::before {
      content: '';
      position: absolute;
      top: 15%;
      left: 15%;
      width: 200px;
      height: 200px;
      border: 3px solid rgba(255, 255, 255, 0.2);
      border-radius: 50%;
      animation: float 6s ease-in-out infinite;
    }

    .hero__panel--image::after {
      content: '';
      position: absolute;
      bottom: 20%;
      right: 20%;
      width: 120px;
      height: 120px;
      border: 3px solid rgba(255, 255, 255, 0.15);
      transform: rotate(45deg);
      animation: float 8s ease-in-out infinite reverse;
    }

    @keyframes float {
      0%, 100% { transform: translateY(0px) rotate(0deg); }
      50% { transform: translateY(-20px) rotate(5deg); }
    }

    .hero__content {
      max-width: 440px;
      position: relative;
      z-index: 2;
    }

    .hero__label {
      font-family: 'Inter', sans-serif;
      font-size: 0.75rem;
      font-weight: 600;
      letter-spacing: 0.15em;
      text-transform: uppercase;
      color: var(--split-coral);
      margin-bottom: 20px;
    }

    .hero__content h1 {
      font-size: clamp(3rem, 5vw, 5rem);
      color: var(--split-white);
      margin-bottom: 24px;
      line-height: 0.95;
    }

    .hero__content p {
      font-size: 1.05rem;
      line-height: 1.7;
      color: rgba(255, 255, 255, 0.7);
      margin-bottom: 36px;
    }

    .btn {
      display: inline-block;
      padding: 16px 40px;
      font-family: 'Inter', sans-serif;
      font-weight: 600;
      font-size: 0.85rem;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      text-decoration: none;
      border: 2px solid var(--split-white);
      color: var(--split-white);
      background: transparent;
      cursor: pointer;
      position: relative;
      overflow: hidden;
      transition: color var(--split-transition), background var(--split-transition);
    }

    .btn:hover {
      color: var(--split-panel-dark);
      background: var(--split-white);
    }

    .btn--accent {
      border-color: var(--split-coral);
      color: var(--split-white);
      background: var(--split-coral);
    }

    .btn--accent:hover {
      background: #e85555;
      border-color: #e85555;
    }

    .btn--dark {
      border-color: var(--split-black);
      color: var(--split-black);
    }

    .btn--dark:hover {
      background: var(--split-black);
      color: var(--split-white);
    }

    /* ---- Hover-Expand Section ---- */
    .expand-section {
      display: flex;
      min-height: 70vh;
      width: 100%;
      overflow: hidden;
    }

    .expand-panel {
      flex: 1;
      display: flex;
      align-items: center;
      justify-content: center;
      position: relative;
      overflow: hidden;
      cursor: pointer;
      transition: flex 0.6s cubic-bezier(0.25, 0.8, 0.25, 1);
    }

    .expand-panel--a {
      background: var(--split-coral);
    }

    .expand-panel--b {
      background: var(--split-electric);
    }

    .expand-section:hover .expand-panel {
      flex: 0.7;
    }

    .expand-section:hover .expand-panel:hover {
      flex: 1.3;
    }

    .expand-panel::before {
      content: '';
      position: absolute;
      inset: 0;
      background: rgba(0, 0, 0, 0);
      transition: background 0.6s ease;
      z-index: 1;
    }

    .expand-section:hover .expand-panel::before {
      background: rgba(0, 0, 0, 0.2);
    }

    .expand-section:hover .expand-panel:hover::before {
      background: rgba(0, 0, 0, 0);
    }

    .expand-panel__content {
      position: relative;
      z-index: 2;
      text-align: center;
      color: var(--split-white);
      padding: 40px;
    }

    .expand-panel__content h2 {
      font-size: clamp(2rem, 4vw, 3.5rem);
      margin-bottom: 12px;
    }

    .expand-panel__content p {
      font-size: 0.95rem;
      max-width: 300px;
      margin: 0 auto;
      opacity: 0;
      transform: translateY(10px);
      transition: opacity 0.5s 0.1s, transform 0.5s 0.1s;
    }

    .expand-panel:hover .expand-panel__content p {
      opacity: 0.9;
      transform: translateY(0);
    }

    /* ---- Alternating Feature Splits ---- */
    .feature-split {
      display: flex;
      min-height: 80vh;
      width: 100%;
    }

    .feature-split:nth-child(even) {
      flex-direction: row-reverse;
    }

    .feature-split__image {
      flex: 1;
      min-height: 400px;
      background-size: cover;
      background-position: center;
    }

    .feature-split__image--gradient-1 {
      background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
    }

    .feature-split__image--gradient-2 {
      background: linear-gradient(135deg, #2d3436 0%, #636e72 100%);
    }

    .feature-split__image--gradient-3 {
      background: linear-gradient(135deg, #0c2461 0%, #1e3799 100%);
    }

    .feature-split__text {
      flex: 1;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 80px 60px;
    }

    .feature-split__text--light {
      background: var(--split-panel-light);
    }

    .feature-split__text--white {
      background: var(--split-white);
    }

    .feature-split__content {
      max-width: 420px;
    }

    .feature-split__content .split-label {
      font-size: 0.7rem;
      font-weight: 600;
      letter-spacing: 0.15em;
      text-transform: uppercase;
      color: var(--split-coral);
      margin-bottom: 16px;
    }

    .feature-split__content h2 {
      font-size: clamp(2rem, 3vw, 3rem);
      color: var(--split-black);
      margin-bottom: 20px;
    }

    .feature-split__content p {
      color: var(--split-slate);
      margin-bottom: 28px;
      line-height: 1.8;
    }

    /* Decorative geometric elements inside gradient panels */
    .feature-split__image {
      position: relative;
      display: flex;
      align-items: center;
      justify-content: center;
    }

    .geo-shape {
      width: 120px;
      height: 120px;
      border: 2px solid rgba(255, 255, 255, 0.15);
      position: absolute;
    }

    .geo-shape--circle {
      border-radius: 50%;
      top: 25%;
      left: 30%;
    }

    .geo-shape--square {
      transform: rotate(45deg);
      bottom: 25%;
      right: 25%;
      width: 80px;
      height: 80px;
    }

    .geo-shape--line {
      border: none;
      border-top: 2px solid rgba(255, 255, 255, 0.1);
      width: 60%;
      height: 0;
      top: 50%;
      left: 20%;
    }

    /* ---- Diagonal Split CTA ---- */
    .diagonal-cta {
      display: flex;
      min-height: 50vh;
      width: 100%;
      position: relative;
      overflow: hidden;
    }

    .diagonal-cta__left {
      flex: 0 0 55%;
      background: var(--split-panel-dark);
      clip-path: polygon(0 0, 100% 0, 88% 100%, 0 100%);
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 60px 80px;
      z-index: 2;
    }

    .diagonal-cta__right {
      flex: 0 0 55%;
      margin-left: -10%;
      background: var(--split-coral);
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 60px 80px;
    }

    .diagonal-cta__left h2 {
      font-size: clamp(2rem, 4vw, 3.5rem);
      color: var(--split-white);
      max-width: 400px;
    }

    .diagonal-cta__right p {
      font-size: 1.1rem;
      color: var(--split-white);
      max-width: 360px;
      margin-bottom: 28px;
    }

    /* ---- Divider ---- */
    .split-divider {
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 0;
      height: 4px;
      background: linear-gradient(90deg,
        var(--split-panel-dark) 0%,
        var(--split-panel-dark) 50%,
        var(--split-coral) 50%,
        var(--split-coral) 100%
      );
    }

    /* ---- Footer ---- */
    footer {
      display: flex;
      min-height: 200px;
    }

    .footer__left {
      flex: 1;
      background: var(--split-panel-dark);
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 40px;
    }

    .footer__right {
      flex: 1;
      background: var(--split-black);
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 40px;
    }

    .footer__left p,
    .footer__right p {
      font-size: 0.85rem;
      color: rgba(255, 255, 255, 0.5);
    }

    .footer__left a.footer-logo {
      font-family: 'Bebas Neue', sans-serif;
      font-size: 1.4rem;
      color: var(--split-white);
      text-decoration: none;
      letter-spacing: 0.08em;
    }

    .footer__right ul {
      display: flex;
      gap: 24px;
      list-style: none;
    }

    .footer__right ul a {
      font-size: 0.8rem;
      color: rgba(255, 255, 255, 0.5);
      text-decoration: none;
      text-transform: uppercase;
      letter-spacing: 0.06em;
      transition: color 0.3s;
    }

    .footer__right ul a:hover {
      color: var(--split-coral);
    }

    /* ---- Responsive ---- */
    @media (max-width: 768px) {
      nav {
        padding: 20px 24px;
      }

      nav ul {
        gap: 16px;
      }

      .hero {
        flex-direction: column;
      }

      .hero__panel {
        min-height: 50vh;
        padding: 60px 32px;
      }

      .expand-section {
        flex-direction: column;
        min-height: auto;
      }

      .expand-panel {
        min-height: 40vh;
      }

      .expand-section:hover .expand-panel,
      .expand-section:hover .expand-panel:hover {
        flex: 1;
      }

      .expand-panel__content p {
        opacity: 0.9;
        transform: translateY(0);
      }

      .feature-split,
      .feature-split:nth-child(even) {
        flex-direction: column;
      }

      .feature-split__image {
        min-height: 250px;
      }

      .feature-split__text {
        padding: 48px 32px;
      }

      .diagonal-cta {
        flex-direction: column;
      }

      .diagonal-cta__left,
      .diagonal-cta__right {
        flex: none;
        width: 100%;
        clip-path: none;
        margin: 0;
        padding: 48px 32px;
      }

      footer {
        flex-direction: column;
      }

      .footer__left,
      .footer__right {
        padding: 32px 24px;
      }
    }
  </style>
</head>
<body>

  <!-- Navigation -->
  <nav>
    <a href="#" class="logo">Divide</a>
    <ul>
      <li><a href="#">Work</a></li>
      <li><a href="#">Studio</a></li>
      <li><a href="#">Journal</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>

  <!-- Hero Split -->
  <section class="hero">
    <div class="hero__panel hero__panel--dark">
      <div class="hero__content">
        <div class="hero__label">Design Studio</div>
        <h1>Two Sides.<br>One Vision.</h1>
        <p>We believe the best ideas emerge from tension -- the space between opposing forces where creativity thrives.</p>
        <a href="#" class="btn">Explore Work</a>
      </div>
    </div>
    <div class="hero__panel hero__panel--image">
    </div>
  </section>

  <!-- Split Divider -->
  <div class="split-divider"></div>

  <!-- Hover-Expand Panels -->
  <section class="expand-section">
    <div class="expand-panel expand-panel--a">
      <div class="expand-panel__content">
        <h2>Create</h2>
        <p>From concept to execution, we craft digital experiences that resonate and endure.</p>
      </div>
    </div>
    <div class="expand-panel expand-panel--b">
      <div class="expand-panel__content">
        <h2>Discover</h2>
        <p>Research-driven strategy that uncovers insights and transforms them into opportunity.</p>
      </div>
    </div>
  </section>

  <!-- Feature Splits -->
  <section>
    <div class="feature-split">
      <div class="feature-split__image feature-split__image--gradient-1">
        <div class="geo-shape geo-shape--circle"></div>
        <div class="geo-shape geo-shape--square"></div>
      </div>
      <div class="feature-split__text feature-split__text--light">
        <div class="feature-split__content">
          <div class="split-label">Strategy</div>
          <h2>Bold Thinking, Clear Direction</h2>
          <p>Every project begins with understanding. We map the landscape, identify tensions, and chart a path that balances ambition with precision.</p>
          <a href="#" class="btn btn--dark">Learn More</a>
        </div>
      </div>
    </div>

    <div class="feature-split">
      <div class="feature-split__image feature-split__image--gradient-2">
        <div class="geo-shape geo-shape--circle"></div>
        <div class="geo-shape geo-shape--line"></div>
      </div>
      <div class="feature-split__text feature-split__text--white">
        <div class="feature-split__content">
          <div class="split-label">Craft</div>
          <h2>Precision in Every Pixel</h2>
          <p>Design is in the details. We obsess over typography, spacing, and interaction to create interfaces that feel inevitable -- as if they could not have been made any other way.</p>
          <a href="#" class="btn btn--dark">Our Process</a>
        </div>
      </div>
    </div>

    <div class="feature-split">
      <div class="feature-split__image feature-split__image--gradient-3">
        <div class="geo-shape geo-shape--square"></div>
        <div class="geo-shape geo-shape--line"></div>
      </div>
      <div class="feature-split__text feature-split__text--light">
        <div class="feature-split__content">
          <div class="split-label">Impact</div>
          <h2>Results That Speak</h2>
          <p>Beautiful design means nothing without performance. We measure, iterate, and refine until the numbers match the ambition.</p>
          <a href="#" class="btn btn--dark">Case Studies</a>
        </div>
      </div>
    </div>
  </section>

  <!-- Diagonal Split CTA -->
  <section class="diagonal-cta">
    <div class="diagonal-cta__left">
      <h2>Ready to See Both Sides?</h2>
    </div>
    <div class="diagonal-cta__right">
      <div>
        <p>Let us show you what happens when contrast meets collaboration. Start a conversation today.</p>
        <a href="#" class="btn">Get in Touch</a>
      </div>
    </div>
  </section>

  <!-- Footer -->
  <footer>
    <div class="footer__left">
      <a href="#" class="footer-logo">Divide</a>
    </div>
    <div class="footer__right">
      <ul>
        <li><a href="#">Work</a></li>
        <li><a href="#">Studio</a></li>
        <li><a href="#">Journal</a></li>
        <li><a href="#">Contact</a></li>
      </ul>
    </div>
  </footer>

</body>
</html>