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
- Satin and silk textures: Smooth, luminous surface treatments with subtle sheen gradients that evoke the look of satin pointe shoes and ribbons
- Tulle and chiffon layering: Semi-transparent overlays, frosted panels, and layered translucent elements that mimic the gauzy layers of a ballet tutu
- Ribbon and bow motifs: Thin, elegant ribbon shapes used as decorative accents, dividers, and navigation highlights — more refined and restrained than Coquette's ornamental bows
- Barre and mirror references: Clean horizontal lines, reflective surfaces, and mirrored gradients that recall the ballet studio environment
- Soft pink and nude palette: A tonal range anchored in ballet pink, blush, champagne, and warm ivory — the colors of pointe shoes, leotards, and stage lighting
- Elongated proportions: Tall, narrow containers, stretched vertical layouts, and generous line-height that echo the extended lines of a dancer's posture
- Fluid motion and transitions: Gentle CSS animations, smooth hover states, and ease-in-out curves that replicate the controlled grace of ballet movement
- Pointe shoe and slipper imagery: Iconic ballet footwear shapes referenced in rounded-bottom cards, lace-up decorative details, and ribbon-tie visual elements
- Warm stage lighting effects: Soft radial gradients and warm glows that simulate the amber and rose-tinted wash of theatrical spotlights
- Disciplined minimalism: Despite its decorative nature, Balletcore maintains a sense of control and restraint — every element is placed with intention, like choreography
Design Principles
- Embrace the tension between softness and discipline: every visual element should feel both delicate and deliberate
- Use vertical space generously to create the sense of height and elongation central to ballet's visual language
- Layer translucent elements to build depth without weight, like tulle over skin
- Maintain a tonal palette rather than high-contrast color pairings; let values shift gently
- Animate sparingly but gracefully — transitions should feel like movements, not jumps
- Treat negative space as the visual equivalent of silence between musical phrases
- Let typography carry the elegance: favor refined serifs and fluid italics over heavy decorative scripts
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
Recommended Google Fonts
| 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
- Tall, centered compositions: Use narrow content columns (600-780px max-width) to create a vertical, portrait-oriented reading experience that mirrors the upright posture of a dancer
- Generous vertical spacing: Allow 80-120px between major sections; the rhythm of space creates visual breathing room, like rests in a musical score
- Asymmetric grace: Offset images and decorative elements slightly from center to create the elegant asymmetry of a ballet pose (arabesque, attitude)
- Layered translucency: Stack semi-transparent panels and overlays to create depth reminiscent of tulle layers, using rgba values with low alpha
- Horizontal barre lines: Use thin horizontal rules (1px, low-opacity pinks) as section dividers that reference the ballet barre — clean, structural, and understated
- Full-bleed imagery with soft overlays: Hero images and feature photos extend edge-to-edge but are softened with gradient overlays in warm ivory or blush
- Responsive fluidity: On smaller screens, maintain the vertical emphasis and tonal softness; collapse grid layouts to single columns and increase line-height for readability
- Card elevation through glow: Prefer soft, warm-toned box-shadows over sharp drop-shadows; cards should appear to float on a cushion of light rather than casting hard edges
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;
}
.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
- Use a tonal palette that stays within the blush-pink-to-ivory range, shifting values subtly rather than introducing competing hues
- Favor light font weights (300, 400) for headings to maintain the sense of weightlessness and elongation
- Apply smooth, long-duration transitions (0.3-0.5s) with ease-in-out or cubic-bezier curves that mimic graceful movement
- Use generous padding and margin to create breathing room — negative space is as important as content
- Layer semi-transparent elements (tulle panels, frosted overlays) to build soft visual depth
- Include thin horizontal rules as structural barre references between sections
- Treat imagery with warm, soft-focus overlays that evoke stage lighting
- Use rounded corners (16-24px) for cards and panels to maintain the softness of the aesthetic
- Let italic serif headings carry the expressive elegance of the design
Don't
- Use sharp geometric angles, hard borders, or boxy containers that contradict the fluid grace of ballet
- Apply heavy, bold font weights for headings — this breaks the lightness and elongated feel
- Use saturated neon or primary colors that shatter the tonal blush palette
- Add aggressive animations, bounces, or jarring transitions — all motion should feel controlled and deliberate
- Overuse script or cursive fonts; reserve them for small decorative accents to avoid illegibility
- Create dense, cluttered layouts — Balletcore demands the discipline of simplicity and intentional placement
- Mix with grunge, brutalist, cyberpunk, or industrial aesthetics that fundamentally oppose its graceful philosophy
- Use pure black (#000000) for text; opt for warm charcoal tones instead
- Apply heavy drop shadows or dark overlays that add visual weight
| 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">🧶</span>
<h3>Satin & 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">☀️</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">🎼</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>