website_designs

Balletcore Design Reference

Overview

Balletcore is a soft, graceful aesthetic inspired by the world of classical and contemporary ballet. Rooted in the visual language of dance studios, rehearsals, and stage performances, it celebrates femininity, discipline, and ethereal beauty through delicate materials like tulle, satin, chiffon, and lace. The aesthetic emerged on TikTok in the early 2020s, gaining mainstream momentum after Miu Miu’s Fall/Winter 2022 collection reintroduced ballet flats and dancewear silhouettes to high fashion, while designers like Simone Rocha reinforced the trend through consistent use of tulle and pearls. In web and UI design, Balletcore translates into airy, light-filled interfaces with blush and nude palettes, elongated serif typography that echoes the long lines of a dancer’s body, generous white space reminiscent of a bright studio, and fluid motion through subtle CSS animations. The result is a digital experience that feels poised, intimate, and weightlessly elegant — as if the interface itself is en pointe.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

Swatch Hex Role / Usage
Ballet Pink #F2D1CB Primary brand color, hero backgrounds, key accent
Pointe Satin #FDEEF4 Card surfaces, soft panel fills
Blush Tulle #F8E0E6 Secondary backgrounds, hover states
Warm Ivory #FFF8F3 Page background, primary canvas
Studio White #FFFBF8 Bright white space, clean sections
Champagne Silk #F7E7CE Warm neutral accent, secondary cards
Dusty Rose #D4A5A5 Muted text accents, secondary headings
Stage Mauve #C9929D Interactive element accents, borders
Ribbon Pink #E8A0B5 Buttons, call-to-action elements
Chiffon Lavender #E6D5E8 Tertiary decorative accent, tags
Leotard Nude #EDBBA8 Warm accent, illustration fills
Barre Charcoal #5C4A4F Primary text, headings on light backgrounds
Spotlight Gold #D4B896 Metallic accents, premium highlights
Rehearsal Gray #B8A9AC Disabled states, subtle borders, captions
Curtain Burgundy #7A3B4E Dark accent for emphasis, footer backgrounds

CSS Custom Properties

:root {
  --ballet-pink: #F2D1CB;
  --ballet-pointe-satin: #FDEEF4;
  --ballet-blush-tulle: #F8E0E6;
  --ballet-warm-ivory: #FFF8F3;
  --ballet-studio-white: #FFFBF8;
  --ballet-champagne-silk: #F7E7CE;
  --ballet-dusty-rose: #D4A5A5;
  --ballet-stage-mauve: #C9929D;
  --ballet-ribbon-pink: #E8A0B5;
  --ballet-chiffon-lavender: #E6D5E8;
  --ballet-leotard-nude: #EDBBA8;
  --ballet-barre-charcoal: #5C4A4F;
  --ballet-spotlight-gold: #D4B896;
  --ballet-rehearsal-gray: #B8A9AC;
  --ballet-curtain-burgundy: #7A3B4E;
}

Typography

Font Weight(s) Usage Link
Cormorant Garamond 300, 400, 500, 600 Primary heading font; high-contrast serif with elongated proportions Cormorant Garamond
Libre Baskerville 400, 400i, 700 Body text; elegant, readable serif with classical refinement Libre Baskerville
Josefin Sans 200, 300, 400, 600 UI elements, navigation, and captions; geometric sans with vintage grace Josefin Sans
Italiana 400 Display headings; tall, narrow letterforms that mirror a dancer’s posture Italiana
Dancing Script 400, 500, 600, 700 Decorative accents and pull quotes; fluid cursive with natural rhythm Dancing Script
Tenor Sans 400 Subheadings and labels; clean sans-serif with classical proportions Tenor Sans
Lora 400, 500, 600, 700 Alternative body serif; refined with subtle brush contrast Lora
Playfair Display 400, 500, 600, 700 Alternative display heading; high-contrast transitional serif Playfair Display

Font Pairing Suggestions

Heading Body Mood
Cormorant Garamond 300 Libre Baskerville 400 Airy elegance, classical poise
Italiana 400 Josefin Sans 300 Tall and refined, modern ballet program
Playfair Display 500 italic Lora 400 Romantic editorial, warm sophistication
Cormorant Garamond 600 Tenor Sans 400 Structured grace, studio formality
Dancing Script 500 Josefin Sans 400 Whimsical movement, rehearsal journal

CSS Example

@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&family=Josefin+Sans:wght@200;300;400;600&family=Dancing+Script:wght@400;500;600&display=swap');

body {
  font-family: 'Libre Baskerville', 'Georgia', serif;
  font-size: 1.05rem;
  line-height: 1.85;
  color: var(--ballet-barre-charcoal);
  background: var(--ballet-warm-ivory);
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 {
  font-family: 'Cormorant Garamond', 'Garamond', serif;
  font-weight: 300;
  letter-spacing: 0.04em;
  line-height: 1.3;
  color: var(--ballet-curtain-burgundy);
}

h1 {
  font-size: 3.2rem;
  font-style: italic;
}

h2 {
  font-size: 2rem;
  font-weight: 400;
}

.nav-link {
  font-family: 'Josefin Sans', sans-serif;
  font-weight: 300;
  font-size: 0.8rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.script-accent {
  font-family: 'Dancing Script', cursive;
  font-size: 1.6rem;
  color: var(--ballet-ribbon-pink);
}

Layout Principles


CSS / Design Techniques

Satin Card

.ballet-card {
  background: linear-gradient(135deg, var(--ballet-pointe-satin) 0%, var(--ballet-warm-ivory) 100%);
  border: 1px solid rgba(232, 160, 181, 0.20);
  border-radius: 20px;
  padding: 40px 36px;
  box-shadow:
    0 8px 32px rgba(242, 209, 203, 0.30),
    0 2px 8px rgba(92, 74, 79, 0.04);
  transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94),
              box-shadow 0.4s ease;
}

.ballet-card:hover {
  transform: translateY(-4px);
  box-shadow:
    0 12px 40px rgba(242, 209, 203, 0.40),
    0 4px 12px rgba(92, 74, 79, 0.06);
}

.ballet-card h3 {
  font-family: 'Cormorant Garamond', serif;
  font-weight: 400;
  font-size: 1.5rem;
  color: var(--ballet-curtain-burgundy);
  margin-bottom: 12px;
}

.ballet-card p {
  color: var(--ballet-barre-charcoal);
  font-size: 0.95rem;
  line-height: 1.8;
}

Ribbon Button

.ballet-button {
  background: linear-gradient(135deg, var(--ballet-ribbon-pink) 0%, var(--ballet-stage-mauve) 100%);
  color: var(--ballet-studio-white);
  border: none;
  border-radius: 50px;
  padding: 14px 40px;
  font-family: 'Josefin Sans', sans-serif;
  font-weight: 400;
  font-size: 0.8rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  cursor: pointer;
  box-shadow: 0 4px 20px rgba(232, 160, 181, 0.35);
  transition: all 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
  position: relative;
  overflow: hidden;
}

.ballet-button::before {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent);
  transition: left 0.5s ease;
}

.ballet-button:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 28px rgba(232, 160, 181, 0.50);
}

.ballet-button:hover::before {
  left: 100%;
}

Studio Navigation Bar

.ballet-nav {
  background: rgba(255, 248, 243, 0.95);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid rgba(212, 165, 165, 0.15);
  padding: 24px 48px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  position: sticky;
  top: 0;
  z-index: 100;
}

.ballet-nav .logo {
  font-family: 'Cormorant Garamond', serif;
  font-weight: 300;
  font-size: 1.4rem;
  letter-spacing: 0.08em;
  color: var(--ballet-curtain-burgundy);
  text-decoration: none;
}

.ballet-nav .links {
  display: flex;
  gap: 36px;
  align-items: center;
}

.ballet-nav .links a {
  font-family: 'Josefin Sans', sans-serif;
  font-weight: 300;
  font-size: 0.75rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--ballet-barre-charcoal);
  position: relative;
  transition: color 0.3s ease;
}

.ballet-nav .links a::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 50%;
  width: 0;
  height: 1px;
  background: var(--ballet-ribbon-pink);
  transition: width 0.3s ease, left 0.3s ease;
}

.ballet-nav .links a:hover {
  color: var(--ballet-curtain-burgundy);
}

.ballet-nav .links a:hover::after {
  width: 100%;
  left: 0;
}

Ethereal Hero Section

.ballet-hero {
  background: linear-gradient(
    180deg,
    var(--ballet-pointe-satin) 0%,
    var(--ballet-blush-tulle) 40%,
    var(--ballet-warm-ivory) 100%
  );
  text-align: center;
  padding: 140px 40px 120px;
  position: relative;
  overflow: hidden;
}

.ballet-hero::before {
  content: '';
  position: absolute;
  top: -30%;
  left: 50%;
  transform: translateX(-50%);
  width: 120%;
  height: 120%;
  background: radial-gradient(
    ellipse at 50% 40%,
    rgba(242, 209, 203, 0.30) 0%,
    transparent 55%
  );
  pointer-events: none;
}

.ballet-hero::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 1px;
  background: linear-gradient(
    to right,
    transparent,
    var(--ballet-dusty-rose),
    transparent
  );
}

.ballet-hero h1 {
  font-family: 'Cormorant Garamond', serif;
  font-size: 4rem;
  font-weight: 300;
  font-style: italic;
  color: var(--ballet-curtain-burgundy);
  position: relative;
  margin-bottom: 16px;
}

.ballet-hero .subtitle {
  font-family: 'Josefin Sans', sans-serif;
  font-weight: 200;
  font-size: 0.85rem;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: var(--ballet-stage-mauve);
  position: relative;
}

.ballet-hero .description {
  max-width: 520px;
  margin: 24px auto 0;
  font-family: 'Libre Baskerville', serif;
  font-size: 1rem;
  line-height: 1.9;
  color: var(--ballet-barre-charcoal);
  position: relative;
}

Tulle Overlay Panel

.ballet-tulle-panel {
  background: rgba(253, 238, 244, 0.45);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(232, 160, 181, 0.12);
  border-radius: 16px;
  padding: 48px 40px;
  position: relative;
}

.ballet-tulle-panel::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 16px;
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.20) 0%,
    rgba(248, 224, 230, 0.08) 50%,
    rgba(255, 255, 255, 0.15) 100%
  );
  pointer-events: none;
}

.ballet-tulle-panel > * {
  position: relative;
  z-index: 1;
}

Barre Divider

.ballet-barre-divider {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
  margin: 64px auto;
  max-width: 400px;
}

.ballet-barre-divider::before,
.ballet-barre-divider::after {
  content: '';
  flex: 1;
  height: 1px;
  background: linear-gradient(
    to var(--direction, right),
    transparent,
    var(--ballet-dusty-rose)
  );
}

.ballet-barre-divider::before {
  --direction: right;
}

.ballet-barre-divider::after {
  --direction: left;
}

.ballet-barre-divider .ornament {
  width: 6px;
  height: 6px;
  background: var(--ballet-ribbon-pink);
  border-radius: 50%;
  box-shadow: 0 0 8px rgba(232, 160, 181, 0.40);
}

Pointe Shoe Lace-Up Detail

.ballet-laceup {
  position: relative;
  padding-left: 32px;
  margin: 24px 0;
}

.ballet-laceup::before {
  content: '';
  position: absolute;
  left: 12px;
  top: 0;
  bottom: 0;
  width: 1px;
  background: repeating-linear-gradient(
    to bottom,
    var(--ballet-ribbon-pink) 0px,
    var(--ballet-ribbon-pink) 8px,
    transparent 8px,
    transparent 16px
  );
}

.ballet-laceup::after {
  content: '';
  position: absolute;
  left: 8px;
  top: 4px;
  width: 9px;
  height: 9px;
  border: 1.5px solid var(--ballet-ribbon-pink);
  border-radius: 50%;
  background: var(--ballet-warm-ivory);
}

.ballet-laceup li {
  list-style: none;
  padding: 8px 0;
  font-family: 'Libre Baskerville', serif;
  font-size: 0.95rem;
  color: var(--ballet-barre-charcoal);
  line-height: 1.7;
}

Design Do’s and Don’ts

Do

Don’t


Aesthetic Relationship
Coquette Closest sibling; both are hyper-feminine with pink palettes, but Coquette leans more Rococo-ornamental with bows and pearls, while Balletcore is more athletic, disciplined, and studio-inspired
Danish Pastel Shares the soft pastel palette and gentle aesthetic, but Danish Pastel is more playful and graphic with checks and daisies versus Balletcore’s fluid elegance
Cottagecore Both celebrate femininity and softness; Cottagecore is rustic and pastoral while Balletcore is urban, polished, and performative
Light Academia Overlaps in warmth and classical refinement; Light Academia draws from literary and scholarly traditions while Balletcore draws from movement and performance
Glassmorphism Shares the translucent, frosted layering approach; Glassmorphism is more tech-oriented while Balletcore uses the technique to evoke tulle and chiffon
Grandmillennial Both embrace traditional femininity and refined aesthetics, but Grandmillennial is more rooted in interior decor, wallpaper patterns, and grandmother-chic
Fairycore Shares ethereal lightness and soft palettes, but Fairycore is more fantastical and nature-infused while Balletcore is grounded in human artistry and discipline
Art Nouveau Both value flowing organic curves and elegant form; Art Nouveau is more botanical and architectural while Balletcore is kinetic and body-centered

Quick-Start HTML Template

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Balletcore — Grace in Every Detail</title>
  <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&family=Josefin+Sans:wght@200;300;400;600&family=Dancing+Script:wght@400;500;600&display=swap" rel="stylesheet">
  <style>
    *, *::before, *::after {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    :root {
      --ballet-pink: #F2D1CB;
      --ballet-pointe-satin: #FDEEF4;
      --ballet-blush-tulle: #F8E0E6;
      --ballet-warm-ivory: #FFF8F3;
      --ballet-studio-white: #FFFBF8;
      --ballet-champagne-silk: #F7E7CE;
      --ballet-dusty-rose: #D4A5A5;
      --ballet-stage-mauve: #C9929D;
      --ballet-ribbon-pink: #E8A0B5;
      --ballet-chiffon-lavender: #E6D5E8;
      --ballet-leotard-nude: #EDBBA8;
      --ballet-barre-charcoal: #5C4A4F;
      --ballet-spotlight-gold: #D4B896;
      --ballet-rehearsal-gray: #B8A9AC;
      --ballet-curtain-burgundy: #7A3B4E;
    }

    body {
      font-family: 'Libre Baskerville', Georgia, serif;
      font-size: 1.05rem;
      line-height: 1.85;
      color: var(--ballet-barre-charcoal);
      background: var(--ballet-warm-ivory);
      min-height: 100vh;
      -webkit-font-smoothing: antialiased;
    }

    /* ---- Navigation ---- */
    .nav {
      background: rgba(255, 248, 243, 0.95);
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      border-bottom: 1px solid rgba(212, 165, 165, 0.15);
      padding: 22px 48px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      position: sticky;
      top: 0;
      z-index: 100;
    }

    .nav .logo {
      font-family: 'Cormorant Garamond', serif;
      font-weight: 300;
      font-size: 1.4rem;
      letter-spacing: 0.08em;
      color: var(--ballet-curtain-burgundy);
      text-decoration: none;
    }

    .nav .logo em {
      font-style: italic;
    }

    .nav .links {
      display: flex;
      gap: 36px;
      align-items: center;
    }

    .nav .links a {
      font-family: 'Josefin Sans', sans-serif;
      font-weight: 300;
      font-size: 0.72rem;
      letter-spacing: 0.18em;
      text-transform: uppercase;
      text-decoration: none;
      color: var(--ballet-barre-charcoal);
      position: relative;
      transition: color 0.3s ease;
    }

    .nav .links a::after {
      content: '';
      position: absolute;
      bottom: -4px;
      left: 50%;
      width: 0;
      height: 1px;
      background: var(--ballet-ribbon-pink);
      transition: width 0.3s ease, left 0.3s ease;
    }

    .nav .links a:hover {
      color: var(--ballet-curtain-burgundy);
    }

    .nav .links a:hover::after {
      width: 100%;
      left: 0;
    }

    /* ---- Hero Section ---- */
    .hero {
      background: linear-gradient(
        180deg,
        var(--ballet-pointe-satin) 0%,
        var(--ballet-blush-tulle) 40%,
        var(--ballet-warm-ivory) 100%
      );
      text-align: center;
      padding: 140px 40px 120px;
      position: relative;
      overflow: hidden;
    }

    .hero::before {
      content: '';
      position: absolute;
      top: -30%;
      left: 50%;
      transform: translateX(-50%);
      width: 120%;
      height: 120%;
      background: radial-gradient(
        ellipse at 50% 40%,
        rgba(242, 209, 203, 0.30) 0%,
        transparent 55%
      );
      pointer-events: none;
    }

    .hero::after {
      content: '';
      position: absolute;
      bottom: 0;
      left: 0;
      right: 0;
      height: 1px;
      background: linear-gradient(to right, transparent, var(--ballet-dusty-rose), transparent);
    }

    .hero .overline {
      font-family: 'Josefin Sans', sans-serif;
      font-weight: 200;
      font-size: 0.8rem;
      letter-spacing: 0.3em;
      text-transform: uppercase;
      color: var(--ballet-stage-mauve);
      position: relative;
      display: block;
      margin-bottom: 12px;
    }

    .hero h1 {
      font-family: 'Cormorant Garamond', serif;
      font-size: 4.2rem;
      font-weight: 300;
      font-style: italic;
      color: var(--ballet-curtain-burgundy);
      position: relative;
      line-height: 1.15;
      margin-bottom: 20px;
    }

    .hero p {
      max-width: 500px;
      margin: 0 auto 36px;
      font-size: 0.95rem;
      color: var(--ballet-barre-charcoal);
      position: relative;
      line-height: 1.9;
    }

    .hero .btn {
      display: inline-block;
      background: linear-gradient(135deg, var(--ballet-ribbon-pink) 0%, var(--ballet-stage-mauve) 100%);
      color: var(--ballet-studio-white);
      border: none;
      border-radius: 50px;
      padding: 14px 44px;
      font-family: 'Josefin Sans', sans-serif;
      font-weight: 400;
      font-size: 0.75rem;
      letter-spacing: 0.16em;
      text-transform: uppercase;
      text-decoration: none;
      cursor: pointer;
      box-shadow: 0 4px 20px rgba(232, 160, 181, 0.35);
      transition: all 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
      position: relative;
      overflow: hidden;
    }

    .hero .btn:hover {
      transform: translateY(-2px);
      box-shadow: 0 6px 28px rgba(232, 160, 181, 0.50);
    }

    /* ---- Barre Divider ---- */
    .barre-divider {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 16px;
      margin: 0 auto;
      max-width: 300px;
      padding: 64px 0;
    }

    .barre-divider::before,
    .barre-divider::after {
      content: '';
      flex: 1;
      height: 1px;
    }

    .barre-divider::before {
      background: linear-gradient(to right, transparent, var(--ballet-dusty-rose));
    }

    .barre-divider::after {
      background: linear-gradient(to left, transparent, var(--ballet-dusty-rose));
    }

    .barre-divider span {
      width: 6px;
      height: 6px;
      background: var(--ballet-ribbon-pink);
      border-radius: 50%;
      box-shadow: 0 0 8px rgba(232, 160, 181, 0.40);
    }

    /* ---- Section Title ---- */
    .section-title {
      text-align: center;
      margin-bottom: 48px;
    }

    .section-title .script-label {
      font-family: 'Dancing Script', cursive;
      font-size: 1.4rem;
      color: var(--ballet-ribbon-pink);
      display: block;
      margin-bottom: 4px;
    }

    .section-title h2 {
      font-family: 'Cormorant Garamond', serif;
      font-weight: 400;
      font-size: 2.2rem;
      color: var(--ballet-curtain-burgundy);
      letter-spacing: 0.03em;
    }

    /* ---- Card Grid ---- */
    .card-grid {
      max-width: 900px;
      margin: 0 auto;
      padding: 0 40px;
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
      gap: 32px;
    }

    .card {
      background: linear-gradient(135deg, var(--ballet-pointe-satin) 0%, var(--ballet-warm-ivory) 100%);
      border: 1px solid rgba(232, 160, 181, 0.18);
      border-radius: 20px;
      padding: 40px 32px;
      box-shadow:
        0 8px 32px rgba(242, 209, 203, 0.25),
        0 2px 8px rgba(92, 74, 79, 0.04);
      transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                  box-shadow 0.4s ease;
    }

    .card:hover {
      transform: translateY(-4px);
      box-shadow:
        0 12px 40px rgba(242, 209, 203, 0.40),
        0 4px 12px rgba(92, 74, 79, 0.06);
    }

    .card .card-icon {
      font-size: 2rem;
      margin-bottom: 16px;
      display: block;
    }

    .card h3 {
      font-family: 'Cormorant Garamond', serif;
      font-weight: 500;
      font-size: 1.4rem;
      color: var(--ballet-curtain-burgundy);
      margin-bottom: 12px;
    }

    .card p {
      font-size: 0.9rem;
      line-height: 1.8;
      color: var(--ballet-barre-charcoal);
    }

    /* ---- Tulle Feature Panel ---- */
    .tulle-panel {
      max-width: 720px;
      margin: 0 auto;
      padding: 0 40px;
    }

    .tulle-panel-inner {
      background: rgba(253, 238, 244, 0.45);
      backdrop-filter: blur(8px);
      -webkit-backdrop-filter: blur(8px);
      border: 1px solid rgba(232, 160, 181, 0.12);
      border-radius: 24px;
      padding: 56px 48px;
      text-align: center;
      position: relative;
      overflow: hidden;
    }

    .tulle-panel-inner::before {
      content: '';
      position: absolute;
      inset: 0;
      border-radius: 24px;
      background: linear-gradient(
        135deg,
        rgba(255, 255, 255, 0.20) 0%,
        rgba(248, 224, 230, 0.08) 50%,
        rgba(255, 255, 255, 0.15) 100%
      );
      pointer-events: none;
    }

    .tulle-panel-inner blockquote {
      font-family: 'Cormorant Garamond', serif;
      font-size: 1.6rem;
      font-weight: 300;
      font-style: italic;
      color: var(--ballet-curtain-burgundy);
      line-height: 1.6;
      position: relative;
      z-index: 1;
      margin-bottom: 16px;
    }

    .tulle-panel-inner cite {
      font-family: 'Josefin Sans', sans-serif;
      font-style: normal;
      font-weight: 300;
      font-size: 0.75rem;
      letter-spacing: 0.14em;
      text-transform: uppercase;
      color: var(--ballet-stage-mauve);
      position: relative;
      z-index: 1;
    }

    /* ---- Rehearsal List ---- */
    .rehearsal-list {
      max-width: 600px;
      margin: 0 auto;
      padding: 0 40px;
    }

    .rehearsal-list ul {
      position: relative;
      padding-left: 32px;
    }

    .rehearsal-list ul::before {
      content: '';
      position: absolute;
      left: 12px;
      top: 0;
      bottom: 0;
      width: 1px;
      background: repeating-linear-gradient(
        to bottom,
        var(--ballet-ribbon-pink) 0px,
        var(--ballet-ribbon-pink) 8px,
        transparent 8px,
        transparent 16px
      );
    }

    .rehearsal-list li {
      list-style: none;
      padding: 10px 0 10px 8px;
      font-size: 0.95rem;
      color: var(--ballet-barre-charcoal);
      line-height: 1.7;
      position: relative;
    }

    .rehearsal-list li::before {
      content: '';
      position: absolute;
      left: -24px;
      top: 50%;
      transform: translateY(-50%);
      width: 7px;
      height: 7px;
      border: 1.5px solid var(--ballet-ribbon-pink);
      border-radius: 50%;
      background: var(--ballet-warm-ivory);
    }

    /* ---- Footer ---- */
    .footer {
      background: var(--ballet-curtain-burgundy);
      color: rgba(255, 248, 243, 0.7);
      text-align: center;
      padding: 48px 40px;
      margin-top: 80px;
    }

    .footer .footer-brand {
      font-family: 'Cormorant Garamond', serif;
      font-weight: 300;
      font-size: 1.3rem;
      font-style: italic;
      color: var(--ballet-ballet-pink, #F2D1CB);
      margin-bottom: 12px;
    }

    .footer p {
      font-family: 'Josefin Sans', sans-serif;
      font-weight: 300;
      font-size: 0.7rem;
      letter-spacing: 0.12em;
      text-transform: uppercase;
    }

    .footer .footer-links {
      margin-top: 20px;
      display: flex;
      justify-content: center;
      gap: 24px;
    }

    .footer .footer-links a {
      font-family: 'Josefin Sans', sans-serif;
      font-weight: 300;
      font-size: 0.68rem;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      color: rgba(255, 248, 243, 0.5);
      text-decoration: none;
      transition: color 0.3s ease;
    }

    .footer .footer-links a:hover {
      color: var(--ballet-pink);
    }

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

      .nav .links {
        gap: 20px;
      }

      .nav .links a {
        font-size: 0.65rem;
        letter-spacing: 0.12em;
      }

      .hero {
        padding: 100px 24px 80px;
      }

      .hero h1 {
        font-size: 2.8rem;
      }

      .card-grid {
        padding: 0 24px;
        grid-template-columns: 1fr;
      }

      .tulle-panel {
        padding: 0 24px;
      }

      .tulle-panel-inner {
        padding: 40px 28px;
      }

      .tulle-panel-inner blockquote {
        font-size: 1.3rem;
      }

      .rehearsal-list {
        padding: 0 24px;
      }

      .footer .footer-links {
        flex-direction: column;
        gap: 12px;
      }
    }

    @media (max-width: 480px) {
      .nav .links {
        gap: 14px;
      }

      .hero h1 {
        font-size: 2.2rem;
      }

      .hero .overline {
        font-size: 0.7rem;
      }
    }
  </style>
</head>
<body>

  <!-- Navigation -->
  <nav class="nav">
    <a href="#" class="logo"><em>Balletcore</em></a>
    <div class="links">
      <a href="#">Studio</a>
      <a href="#">Collection</a>
      <a href="#">Movement</a>
      <a href="#">About</a>
    </div>
  </nav>

  <!-- Hero Section -->
  <header class="hero">
    <span class="overline">An Aesthetic of Grace</span>
    <h1>Balletcore</h1>
    <p>Satin, tulle, and the quiet discipline of movement — where every detail is a gesture and every space breathes like a studio before curtain rise.</p>
    <a href="#" class="btn">Enter the Studio</a>
  </header>

  <!-- Divider -->
  <div class="barre-divider"><span></span></div>

  <!-- Cards Section -->
  <section>
    <div class="section-title">
      <span class="script-label">The Elements</span>
      <h2>Core Inspirations</h2>
    </div>
    <div class="card-grid">
      <div class="card">
        <span class="card-icon">&#129526;</span>
        <h3>Satin &amp; Ribbon</h3>
        <p>The luminous sheen of satin pointe shoes and the graceful wrap of ribbons lacing up the ankle — smooth, tactile, and deeply personal.</p>
      </div>
      <div class="card">
        <span class="card-icon">&#9728;&#65039;</span>
        <h3>Stage Light</h3>
        <p>Warm amber and rose washes that transform the studio into a dream. Soft gradients and gentle glows that frame without overwhelming.</p>
      </div>
      <div class="card">
        <span class="card-icon">&#127932;</span>
        <h3>Tulle Layers</h3>
        <p>Translucent, weightless, and endlessly layerable. Tulle brings depth through subtlety, each layer softening the one beneath it.</p>
      </div>
    </div>
  </section>

  <!-- Divider -->
  <div class="barre-divider"><span></span></div>

  <!-- Quote Panel -->
  <section>
    <div class="tulle-panel">
      <div class="tulle-panel-inner">
        <blockquote>The body says what words cannot.</blockquote>
        <cite>Martha Graham</cite>
      </div>
    </div>
  </section>

  <!-- Divider -->
  <div class="barre-divider"><span></span></div>

  <!-- Rehearsal List Section -->
  <section>
    <div class="section-title">
      <span class="script-label">The Practice</span>
      <h2>Design Principles</h2>
    </div>
    <div class="rehearsal-list">
      <ul>
        <li>Let every element breathe — generous white space is the silence between movements</li>
        <li>Build depth through translucency rather than shadow, like tulle over warm skin</li>
        <li>Choose elongated, light-weight typography that echoes the lines of a dancer</li>
        <li>Animate with intention — smooth, controlled transitions that feel choreographed</li>
        <li>Maintain a tonal palette; let values shift gently like light across a studio floor</li>
        <li>Balance softness with discipline — Balletcore is romantic, but never careless</li>
      </ul>
    </div>
  </section>

  <!-- Footer -->
  <footer class="footer">
    <div class="footer-brand">Balletcore</div>
    <p>Grace in every pixel</p>
    <div class="footer-links">
      <a href="#">Studio</a>
      <a href="#">Collection</a>
      <a href="#">Movement</a>
      <a href="#">About</a>
    </div>
  </footer>

</body>
</html>