VSCO is a lifestyle and photographic aesthetic named after the VSCO photo-editing app, launched in 2012, which became famous for its film-emulating presets and minimalist social platform that eschewed public likes and follower counts. The aesthetic rose to mainstream cultural recognition in 2019 with the “VSCO Girl” phenomenon – a subculture defined by muted film-like photography, beachy minimalist fashion (oversized tees, scrunchies, Hydro Flasks, shell necklaces, Birkenstocks), and an effortlessly casual, eco-conscious identity built around phrases like “and I oop” and “save the turtles.” Visually, VSCO is characterized by warm desaturated color grading reminiscent of Kodak Portra and Fuji Superia film stocks, lifted shadows that never reach true black, soft film grain, and a persistent golden-hour warmth that makes everyday moments feel nostalgic and curated. When translated to web and UI design, the aesthetic favors generous whitespace, warm off-white backgrounds, muted earth-tone accents, light-weight typography with relaxed letter-spacing, soft rounded containers, and photography-dominant layouts that prioritize mood and atmosphere over information density.
| Swatch Name | Hex | Role / Usage |
|---|---|---|
| Shell White | #FFFBF5 |
Bright highlight surfaces, lightest accent |
| Warm Sand | #F5EDE3 |
Primary page background, warm off-white base |
| Linen Cream | #FAF3EB |
Card and panel surfaces, secondary background |
| Film Fog | #D6CEC5 |
Borders, dividers, subtle UI separators |
| Golden Hour | #E8B87D |
Primary warm accent, highlight elements, active states |
| Faded Peach | #E6B8A2 |
Secondary accent, tags, badges, soft fills |
| Sunset Coral | #D4907A |
Call-to-action buttons, emphasis elements |
| Dusty Rose | #C4A08E |
Tertiary warm accent, hover states, decorative elements |
| Sage Mist | #A3B5A0 |
Nature accent, success states, eco-themed elements |
| Sea Glass | #B5C9C3 |
Cool complement, subtle teal accent for balance |
| Washed Denim | #8FA3B0 |
Cool contrast accent, link color, interactive highlights |
| Driftwood | #7A6B5D |
Primary body text, secondary headings |
| Faded Charcoal | #5C534A |
Heading text, navigation links, labels |
| Grain Shadow | #3E3832 |
Darkest tone (lifted black), footer backgrounds, emphasis text |
:root {
/* Backgrounds */
--vsco-shell: #FFFBF5;
--vsco-sand: #F5EDE3;
--vsco-cream: #FAF3EB;
--vsco-fog: #D6CEC5;
/* Warm Accents */
--vsco-golden: #E8B87D;
--vsco-peach: #E6B8A2;
--vsco-coral: #D4907A;
--vsco-dusty-rose: #C4A08E;
/* Cool Accents */
--vsco-sage: #A3B5A0;
--vsco-sea-glass: #B5C9C3;
--vsco-denim: #8FA3B0;
/* Text */
--vsco-driftwood: #7A6B5D;
--vsco-charcoal: #5C534A;
--vsco-grain: #3E3832;
/* Functional Aliases */
--vsco-bg-primary: var(--vsco-sand);
--vsco-bg-secondary: var(--vsco-cream);
--vsco-bg-surface: var(--vsco-shell);
--vsco-text-primary: var(--vsco-charcoal);
--vsco-text-body: var(--vsco-driftwood);
--vsco-text-emphasis: var(--vsco-grain);
--vsco-accent-primary: var(--vsco-golden);
--vsco-accent-cta: var(--vsco-coral);
--vsco-accent-cool: var(--vsco-denim);
--vsco-border: var(--vsco-fog);
--vsco-link: var(--vsco-denim);
}
| Font | Style | Suggested Usage |
|---|---|---|
| Josefin Sans | Elegant geometric sans, thin strokes | Display headings, hero titles, uppercase labels |
| Nunito Sans | Warm humanist sans-serif | Body text, descriptions, UI elements |
| DM Sans | Modern geometric sans, open counters | Captions, metadata, secondary text |
| Lora | Contemporary serif, brushed curves | Editorial body text, pull-quotes, journal entries |
| Libre Baskerville | Classic serif, refined proportions | Long-form reading, blog content |
| Poppins | Clean geometric sans-serif, rounded | Navigation, buttons, form labels |
| Cormorant Garamond | Light elegant display serif | Large hero headlines, editorial display text |
| Caveat | Casual handwritten | Annotations, personal notes, decorative accents |
| Heading Font | Body Font | Character |
|---|---|---|
| Josefin Sans (Light, uppercase) | Nunito Sans (Regular) | Airy minimalist lifestyle – the quintessential VSCO pairing |
| Cormorant Garamond (Light) | DM Sans (Regular) | Elegant editorial with clean modern readability |
| Josefin Sans (Light, uppercase) | Lora (Regular italic) | Refined journal aesthetic, analog warmth |
| Poppins (Medium) | Libre Baskerville (Regular) | Modern clean UI with literary warmth |
| DM Sans (Regular) | Lora (Regular) | Clean contemporary with editorial serif support |
@import url('https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@300;400;500&family=Nunito+Sans:wght@300;400;600&family=Lora:ital,wght@0,400;0,500;1,400&family=DM+Sans:wght@300;400;500&family=Caveat:wght@400&display=swap');
/* Body text */
body {
font-family: 'Nunito Sans', 'Segoe UI', sans-serif;
font-size: 1.05rem;
font-weight: 400;
line-height: 1.75;
color: var(--vsco-driftwood);
letter-spacing: 0.01em;
-webkit-font-smoothing: antialiased;
}
/* Headings -- light, airy, uppercase */
h1, h2, h3, h4 {
font-family: 'Josefin Sans', 'Helvetica Neue', sans-serif;
font-weight: 300;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--vsco-charcoal);
line-height: 1.2;
}
/* Display / Hero text */
.vsco-display {
font-family: 'Josefin Sans', sans-serif;
font-size: clamp(2.2rem, 5.5vw, 3.8rem);
font-weight: 300;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--vsco-grain);
}
/* Editorial / Pull-quote text */
blockquote, .vsco-editorial {
font-family: 'Lora', Georgia, serif;
font-style: italic;
font-size: 1.15rem;
color: var(--vsco-driftwood);
line-height: 1.85;
}
/* Uppercase labels and metadata */
.vsco-label {
font-family: 'Josefin Sans', sans-serif;
text-transform: uppercase;
font-size: 0.7rem;
letter-spacing: 0.15em;
font-weight: 400;
color: var(--vsco-dusty-rose);
}
/* Navigation links */
nav a {
font-family: 'Nunito Sans', sans-serif;
font-size: 0.82rem;
font-weight: 400;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--vsco-driftwood);
text-decoration: none;
transition: color 0.2s ease;
}
nav a:hover {
color: var(--vsco-coral);
}
/* Handwritten accent */
.vsco-handwritten {
font-family: 'Caveat', cursive;
font-size: 1.3em;
color: var(--vsco-dusty-rose);
}
clamp() for typography and proportional spacing reductions on mobile; maintain the airy, spacious feel at every viewport/* Subtle analog film grain texture */
.vsco-grain {
position: relative;
}
.vsco-grain::after {
content: '';
position: absolute;
inset: 0;
opacity: 0.04;
pointer-events: none;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
background-repeat: repeat;
background-size: 256px 256px;
mix-blend-mode: multiply;
border-radius: inherit;
}
/* Standard VSCO film emulation */
.vsco-filter {
filter: saturate(0.8) contrast(0.92) brightness(1.04) sepia(0.08);
}
/* Warmer variant -- golden hour emphasis */
.vsco-filter--warm {
filter: saturate(0.75) contrast(0.9) brightness(1.06) sepia(0.15);
}
/* Faded variant -- stronger lifted-shadow look */
.vsco-filter--fade {
filter: saturate(0.7) contrast(0.85) brightness(1.08);
}
/* Cool variant -- washed denim / overcast tone */
.vsco-filter--cool {
filter: saturate(0.8) contrast(0.9) brightness(1.02) hue-rotate(5deg);
}
.vsco-card {
background: var(--vsco-cream);
border: 1px solid var(--vsco-fog);
border-radius: 12px;
padding: 28px;
box-shadow: 0 1px 4px rgba(122, 107, 93, 0.06);
transition: box-shadow 0.3s ease, transform 0.3s ease;
}
.vsco-card:hover {
box-shadow: 0 6px 20px rgba(122, 107, 93, 0.1);
transform: translateY(-2px);
}
.vsco-card img {
width: 100%;
border-radius: 8px;
margin-bottom: 16px;
filter: saturate(0.85) contrast(0.95) brightness(1.02);
}
.vsco-card h3 {
font-family: 'Josefin Sans', sans-serif;
font-weight: 300;
font-size: 0.85rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--vsco-charcoal);
margin-bottom: 8px;
}
.vsco-card p {
font-family: 'Nunito Sans', sans-serif;
font-size: 0.95rem;
color: var(--vsco-driftwood);
line-height: 1.7;
}
.vsco-card__meta {
margin-top: 12px;
font-family: 'Josefin Sans', sans-serif;
font-size: 0.65rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
}
/* Outlined -- the default VSCO button */
.vsco-button {
display: inline-block;
background: transparent;
color: var(--vsco-charcoal);
border: 1.5px solid var(--vsco-fog);
border-radius: 24px;
padding: 10px 28px;
font-family: 'Josefin Sans', sans-serif;
font-size: 0.78rem;
font-weight: 400;
letter-spacing: 0.12em;
text-transform: uppercase;
text-decoration: none;
cursor: pointer;
transition: all 0.3s ease;
}
.vsco-button:hover {
background: var(--vsco-charcoal);
color: var(--vsco-shell);
border-color: var(--vsco-charcoal);
}
/* Filled -- warm coral CTA */
.vsco-button--filled {
background: var(--vsco-coral);
color: var(--vsco-shell);
border-color: var(--vsco-coral);
}
.vsco-button--filled:hover {
background: #C07A64;
border-color: #C07A64;
}
/* Ghost -- minimal text-only button */
.vsco-button--ghost {
background: none;
border: none;
color: var(--vsco-driftwood);
padding: 8px 0;
border-bottom: 1px solid transparent;
}
.vsco-button--ghost:hover {
color: var(--vsco-coral);
border-bottom-color: var(--vsco-coral);
}
.vsco-nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 40px;
background: rgba(245, 237, 227, 0.92);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid var(--vsco-fog);
position: sticky;
top: 0;
z-index: 100;
}
.vsco-nav__logo {
font-family: 'Josefin Sans', sans-serif;
font-weight: 300;
font-size: 1.1rem;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--vsco-charcoal);
text-decoration: none;
}
.vsco-nav__links {
display: flex;
gap: 32px;
list-style: none;
margin: 0;
padding: 0;
}
.vsco-nav__links a {
font-family: 'Nunito Sans', sans-serif;
font-size: 0.82rem;
font-weight: 400;
color: var(--vsco-driftwood);
text-decoration: none;
letter-spacing: 0.06em;
text-transform: uppercase;
transition: color 0.2s ease;
}
.vsco-nav__links a:hover {
color: var(--vsco-coral);
}
.vsco-hero {
position: relative;
width: 100%;
min-height: 85vh;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
background: linear-gradient(
170deg,
var(--vsco-peach) 0%,
var(--vsco-golden) 30%,
var(--vsco-sand) 70%,
var(--vsco-sea-glass) 100%
);
}
/* Film grain overlay on hero */
.vsco-hero::after {
content: '';
position: absolute;
inset: 0;
opacity: 0.035;
pointer-events: none;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
background-size: 256px;
}
/* For image-based heroes */
.vsco-hero__image {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
filter: saturate(0.75) contrast(0.9) brightness(1.05);
}
.vsco-hero__overlay {
position: absolute;
inset: 0;
background: linear-gradient(
180deg,
rgba(245, 237, 227, 0.2) 0%,
rgba(245, 237, 227, 0.6) 100%
);
}
.vsco-hero__content {
position: relative;
z-index: 2;
text-align: center;
padding: 40px 24px;
}
.vsco-hero__content h1 {
font-family: 'Josefin Sans', sans-serif;
font-weight: 300;
font-size: clamp(2rem, 5.5vw, 3.8rem);
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--vsco-grain);
margin-bottom: 16px;
}
.vsco-hero__content p {
font-family: 'Lora', serif;
font-style: italic;
font-size: clamp(1rem, 2vw, 1.25rem);
color: var(--vsco-charcoal);
max-width: 500px;
margin: 0 auto;
}
.vsco-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.vsco-grid__item {
overflow: hidden;
aspect-ratio: 1 / 1;
position: relative;
}
.vsco-grid__item img {
width: 100%;
height: 100%;
object-fit: cover;
filter: saturate(0.8) contrast(0.92) brightness(1.03);
transition: filter 0.4s ease, transform 0.4s ease;
}
.vsco-grid__item:hover img {
filter: saturate(0.9) contrast(0.95) brightness(1.05);
transform: scale(1.03);
}
/* Layout variations */
.vsco-grid__item--wide {
grid-column: span 2;
aspect-ratio: 2 / 1;
}
.vsco-grid__item--tall {
grid-row: span 2;
aspect-ratio: auto;
}
@media (max-width: 640px) {
.vsco-grid { grid-template-columns: repeat(2, 1fr); }
.vsco-grid__item--wide {
grid-column: span 1;
aspect-ratio: 1 / 1;
}
}
.vsco-quote {
text-align: center;
padding: 60px 40px;
max-width: 650px;
margin: 0 auto;
}
.vsco-quote::before {
content: '';
display: block;
width: 40px;
height: 1px;
background: var(--vsco-fog);
margin: 0 auto 28px;
}
.vsco-quote blockquote {
font-family: 'Lora', serif;
font-style: italic;
font-size: 1.4rem;
line-height: 1.85;
color: var(--vsco-charcoal);
border: none;
margin: 0;
padding: 0;
}
.vsco-quote cite {
display: block;
margin-top: 20px;
font-family: 'Josefin Sans', sans-serif;
font-style: normal;
font-size: 0.72rem;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
}
.vsco-editorial {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
align-items: center;
max-width: 1000px;
margin: 0 auto;
padding: 80px 40px;
}
.vsco-editorial--reverse {
direction: rtl;
}
.vsco-editorial--reverse > * {
direction: ltr;
}
.vsco-editorial__image {
aspect-ratio: 4 / 5;
border-radius: 8px;
overflow: hidden;
}
.vsco-editorial__image img {
width: 100%;
height: 100%;
object-fit: cover;
filter: saturate(0.75) contrast(0.9) brightness(1.05);
}
.vsco-editorial__text .tag {
font-family: 'Josefin Sans', sans-serif;
font-size: 0.7rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
margin-bottom: 12px;
display: block;
}
.vsco-editorial__text h2 {
font-family: 'Josefin Sans', sans-serif;
font-weight: 300;
font-size: 1.6rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--vsco-charcoal);
margin-bottom: 20px;
}
.vsco-editorial__text p {
margin-bottom: 16px;
color: var(--vsco-driftwood);
line-height: 1.75;
}
@media (max-width: 768px) {
.vsco-editorial {
grid-template-columns: 1fr;
gap: 32px;
padding: 48px 20px;
}
.vsco-editorial--reverse {
direction: ltr;
}
}
saturate(0.8) contrast(0.92) brightness(1.04) sepia(0.08)) to images for consistent VSCO tonality#F5EDE3, #FAF3EB) instead of pure white#000000) for text or backgrounds; always lift blacks to warm dark greys like #3E3832#FFFFFF) as the primary background; opt for warm off-whites like #F5EDE3| Aesthetic | Relationship to VSCO |
|---|---|
| Coastal Style | Shares beachy, sun-bleached warmth and relaxed lifestyle imagery; Coastal leans more nautical and blue-toned while VSCO stays warm and desaturated |
| Earth Tones | Both use warm muted natural palettes; Earth Tones is heavier and more grounded while VSCO adds film-fade sophistication |
| Cottagecore | Both celebrate natural, sustainable living; Cottagecore is more ornamental and rustic while VSCO is cleaner and more urban-coastal |
| Danish Pastel | Shares soft muted tones and cozy lifestyle appeal; Danish Pastel leans cooler and more playful while VSCO is warmer and photographic |
| Light Academia | Both favor warm, intellectual minimalism; Light Academia leans scholarly and interior-focused, VSCO leans photographic and outdoors |
| Hygge | Common emphasis on warmth, comfort, and natural atmosphere; Hygge centers on interior coziness, VSCO centers on photography and lifestyle |
| Frutiger Eco | Both evoke nature and sustainability; Frutiger Eco uses glossy optimistic corporate naturalism while VSCO stays matte and analog |
| Wabi-Sabi | Both embrace imperfection and natural beauty; Wabi-Sabi is more austere and philosophical, VSCO is warmer and lifestyle-oriented |
| Flat Design | Shared minimalist UI philosophy; Flat Design is precise and geometric, VSCO is organic and texture-rich |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Goldenshore Journal -- VSCO Aesthetic</title>
<link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@300;400;500&family=Nunito+Sans:wght@300;400;600&family=Lora:ital,wght@0,400;0,500;1,400&family=Caveat:wght@400&display=swap" rel="stylesheet">
<style>
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--vsco-shell: #FFFBF5;
--vsco-sand: #F5EDE3;
--vsco-cream: #FAF3EB;
--vsco-fog: #D6CEC5;
--vsco-golden: #E8B87D;
--vsco-peach: #E6B8A2;
--vsco-coral: #D4907A;
--vsco-dusty-rose: #C4A08E;
--vsco-sage: #A3B5A0;
--vsco-sea-glass: #B5C9C3;
--vsco-denim: #8FA3B0;
--vsco-driftwood: #7A6B5D;
--vsco-charcoal: #5C534A;
--vsco-grain: #3E3832;
}
body {
font-family: 'Nunito Sans', 'Segoe UI', sans-serif;
font-size: 1.05rem;
font-weight: 400;
line-height: 1.75;
color: var(--vsco-driftwood);
background: var(--vsco-sand);
-webkit-font-smoothing: antialiased;
}
a { color: var(--vsco-denim); text-decoration: none; transition: color 0.2s ease; }
a:hover { color: var(--vsco-coral); }
/* ---------- Navigation ---------- */
nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 40px;
background: rgba(245, 237, 227, 0.92);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid var(--vsco-fog);
position: sticky;
top: 0;
z-index: 100;
}
.logo {
font-family: 'Josefin Sans', sans-serif;
font-weight: 300;
font-size: 1.1rem;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--vsco-charcoal);
text-decoration: none;
}
.nav-links {
display: flex;
gap: 28px;
list-style: none;
}
.nav-links a {
font-family: 'Nunito Sans', sans-serif;
font-size: 0.82rem;
font-weight: 400;
letter-spacing: 0.06em;
color: var(--vsco-driftwood);
text-decoration: none;
text-transform: uppercase;
transition: color 0.2s ease;
}
.nav-links a:hover { color: var(--vsco-coral); }
/* ---------- Hero ---------- */
.hero {
position: relative;
width: 100%;
min-height: 85vh;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(
170deg,
#E6B8A2 0%,
#E8B87D 30%,
#F5EDE3 70%,
#B5C9C3 100%
);
overflow: hidden;
}
.hero::after {
content: '';
position: absolute;
inset: 0;
opacity: 0.035;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
background-size: 256px;
pointer-events: none;
}
.hero-content {
position: relative;
z-index: 2;
text-align: center;
padding: 40px 24px;
}
.hero-content h1 {
font-family: 'Josefin Sans', sans-serif;
font-weight: 300;
font-size: clamp(2.2rem, 5.5vw, 3.8rem);
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--vsco-grain);
margin-bottom: 16px;
}
.hero-content p {
font-family: 'Lora', serif;
font-style: italic;
font-size: clamp(1rem, 2vw, 1.2rem);
color: var(--vsco-charcoal);
max-width: 480px;
margin: 0 auto 28px;
}
.btn {
display: inline-block;
background: transparent;
color: var(--vsco-charcoal);
border: 1.5px solid var(--vsco-fog);
border-radius: 24px;
padding: 10px 28px;
font-family: 'Josefin Sans', sans-serif;
font-size: 0.78rem;
font-weight: 400;
letter-spacing: 0.14em;
text-transform: uppercase;
text-decoration: none;
cursor: pointer;
transition: all 0.3s ease;
}
.btn:hover {
background: var(--vsco-charcoal);
color: var(--vsco-shell);
border-color: var(--vsco-charcoal);
}
.btn--filled {
background: var(--vsco-coral);
color: var(--vsco-shell);
border-color: var(--vsco-coral);
}
.btn--filled:hover {
background: #C07A64;
border-color: #C07A64;
}
/* ---------- Sections ---------- */
.section {
max-width: 1100px;
margin: 0 auto;
padding: 80px 40px;
}
.section-title {
font-family: 'Josefin Sans', sans-serif;
font-weight: 300;
font-size: 0.85rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
text-align: center;
margin-bottom: 48px;
}
.section-title::after {
content: '';
display: block;
width: 40px;
height: 1px;
background: var(--vsco-fog);
margin: 16px auto 0;
}
/* ---------- Photo Grid ---------- */
.photo-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.photo-grid__item {
aspect-ratio: 1 / 1;
overflow: hidden;
background: var(--vsco-fog);
}
.photo-grid__item--wide {
grid-column: span 2;
aspect-ratio: 2 / 1;
}
.photo-grid__placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-family: 'Josefin Sans', sans-serif;
font-size: 0.7rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
background: linear-gradient(135deg, var(--vsco-cream) 0%, var(--vsco-peach) 50%, var(--vsco-golden) 100%);
filter: saturate(0.6) brightness(1.05);
transition: filter 0.4s ease, transform 0.4s ease;
}
.photo-grid__item:hover .photo-grid__placeholder {
filter: saturate(0.75) brightness(1.08);
transform: scale(1.02);
}
/* ---------- Editorial Block ---------- */
.editorial {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
align-items: center;
max-width: 1000px;
margin: 0 auto;
padding: 80px 40px;
}
.editorial--reverse { direction: rtl; }
.editorial--reverse > * { direction: ltr; }
.editorial__image {
aspect-ratio: 4 / 5;
border-radius: 8px;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
font-family: 'Josefin Sans', sans-serif;
font-size: 0.7rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--vsco-driftwood);
}
.editorial__image--warm {
background: linear-gradient(160deg, var(--vsco-peach) 0%, var(--vsco-golden) 50%, var(--vsco-cream) 100%);
filter: saturate(0.65) brightness(1.04);
}
.editorial__image--cool {
background: linear-gradient(160deg, var(--vsco-sage) 0%, var(--vsco-sea-glass) 50%, var(--vsco-cream) 100%);
filter: saturate(0.65) brightness(1.04);
}
.editorial__text h2 {
font-family: 'Josefin Sans', sans-serif;
font-weight: 300;
font-size: 1.6rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--vsco-charcoal);
margin-bottom: 20px;
}
.editorial__text p {
margin-bottom: 16px;
color: var(--vsco-driftwood);
}
.editorial__text .tag {
font-family: 'Josefin Sans', sans-serif;
font-size: 0.7rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
margin-bottom: 12px;
display: block;
}
/* ---------- Pull Quote ---------- */
.pull-quote {
text-align: center;
padding: 60px 40px;
max-width: 650px;
margin: 0 auto;
}
.pull-quote::before {
content: '';
display: block;
width: 40px;
height: 1px;
background: var(--vsco-fog);
margin: 0 auto 28px;
}
.pull-quote blockquote {
font-family: 'Lora', serif;
font-style: italic;
font-size: 1.35rem;
line-height: 1.85;
color: var(--vsco-charcoal);
}
.pull-quote cite {
display: block;
margin-top: 20px;
font-family: 'Josefin Sans', sans-serif;
font-style: normal;
font-size: 0.72rem;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
}
/* ---------- Card Row ---------- */
.cards-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
max-width: 1100px;
margin: 0 auto;
padding: 0 40px;
}
.card {
background: var(--vsco-cream);
border: 1px solid var(--vsco-fog);
border-radius: 12px;
padding: 24px;
transition: box-shadow 0.3s ease, transform 0.3s ease;
}
.card:hover {
box-shadow: 0 6px 20px rgba(122, 107, 93, 0.08);
transform: translateY(-3px);
}
.card__image {
width: 100%;
aspect-ratio: 4 / 3;
border-radius: 8px;
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: center;
font-family: 'Josefin Sans', sans-serif;
font-size: 0.65rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
}
.card__image--beach {
background: linear-gradient(135deg, var(--vsco-golden) 0%, var(--vsco-peach) 100%);
filter: saturate(0.6);
}
.card__image--forest {
background: linear-gradient(135deg, var(--vsco-sage) 0%, var(--vsco-sea-glass) 100%);
filter: saturate(0.6);
}
.card__image--sunset {
background: linear-gradient(135deg, var(--vsco-coral) 0%, var(--vsco-golden) 100%);
filter: saturate(0.6);
}
.card h3 {
font-family: 'Josefin Sans', sans-serif;
font-weight: 400;
font-size: 0.82rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--vsco-charcoal);
margin-bottom: 8px;
}
.card p {
font-size: 0.92rem;
color: var(--vsco-driftwood);
line-height: 1.7;
}
.card__meta {
margin-top: 12px;
font-family: 'Josefin Sans', sans-serif;
font-size: 0.65rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
}
/* ---------- Footer ---------- */
footer {
text-align: center;
padding: 60px 40px;
border-top: 1px solid var(--vsco-fog);
margin-top: 80px;
}
footer p {
font-family: 'Josefin Sans', sans-serif;
font-size: 0.7rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--vsco-dusty-rose);
}
.footer-links {
margin-top: 16px;
display: flex;
justify-content: center;
gap: 24px;
list-style: none;
}
.footer-links a {
font-family: 'Nunito Sans', sans-serif;
font-size: 0.8rem;
color: var(--vsco-driftwood);
text-decoration: none;
transition: color 0.2s ease;
}
.footer-links a:hover { color: var(--vsco-coral); }
/* ---------- Responsive ---------- */
@media (max-width: 768px) {
nav { padding: 16px 20px; }
.nav-links { gap: 16px; }
.nav-links a { font-size: 0.75rem; }
.hero { min-height: 70vh; }
.section { padding: 48px 20px; }
.photo-grid { grid-template-columns: repeat(2, 1fr); }
.photo-grid__item--wide {
grid-column: span 1;
aspect-ratio: 1 / 1;
}
.editorial {
grid-template-columns: 1fr;
gap: 32px;
padding: 48px 20px;
}
.editorial--reverse { direction: ltr; }
.cards-row {
grid-template-columns: 1fr;
padding: 0 20px;
}
.pull-quote { padding: 40px 20px; }
}
@media (max-width: 480px) {
.nav-links { display: none; }
.photo-grid { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<!-- Navigation -->
<nav>
<a href="#" class="logo">Goldenshore</a>
<ul class="nav-links">
<li><a href="#journal">Journal</a></li>
<li><a href="#gallery">Gallery</a></li>
<li><a href="#about">About</a></li>
<li><a href="#shop">Shop</a></li>
</ul>
</nav>
<!-- Hero Section -->
<section class="hero">
<div class="hero-content">
<h1>Chasing Golden Light</h1>
<p>A journal of quiet mornings, salt-air afternoons, and the gentle art of slowing down</p>
<a href="#gallery" class="btn">Explore the Journal</a>
</div>
</section>
<!-- Photo Grid -->
<div class="section" id="gallery">
<p class="section-title">Recent Frames</p>
<div class="photo-grid">
<div class="photo-grid__item photo-grid__item--wide">
<div class="photo-grid__placeholder">Morning Tide</div>
</div>
<div class="photo-grid__item">
<div class="photo-grid__placeholder">Wildflowers</div>
</div>
<div class="photo-grid__item">
<div class="photo-grid__placeholder">Driftwood</div>
</div>
<div class="photo-grid__item">
<div class="photo-grid__placeholder">Sea Glass</div>
</div>
<div class="photo-grid__item photo-grid__item--wide">
<div class="photo-grid__placeholder">Golden Hour</div>
</div>
</div>
</div>
<!-- Editorial Block -->
<div class="editorial" id="about">
<div class="editorial__image editorial__image--warm">Beach Path</div>
<div class="editorial__text">
<span class="tag">Summer Edition</span>
<h2>The Analog Slow-Down</h2>
<p>There is something irreplaceable about the weight of a film camera in your hands, the deliberate click of the shutter, and the patience of waiting for prints. In a world of instant everything, analog photography teaches us that the best things develop slowly.</p>
<p>This season we traded our phones for point-and-shoots and spent three weeks documenting the coastline on nothing but Kodak Portra 400.</p>
<a href="#" class="btn btn--filled">Read the Story</a>
</div>
</div>
<!-- Pull Quote -->
<div class="pull-quote">
<blockquote>The most beautiful photographs are the ones that feel like memories before you even finish looking at them.</blockquote>
<cite>Field Notes, Issue 7</cite>
</div>
<!-- Editorial Block (reversed) -->
<div class="editorial editorial--reverse">
<div class="editorial__image editorial__image--cool">Fern Valley</div>
<div class="editorial__text">
<span class="tag">Mindful Living</span>
<h2>Less Scroll, More Stroll</h2>
<p>We partnered with local makers to curate a collection of reusable essentials designed to make sustainable choices feel effortless and beautiful. Think beeswax wraps in sun-faded florals, stainless steel bottles in matte sage, and tote bags printed with hand-drawn tide charts.</p>
<a href="#" class="btn">View the Collection</a>
</div>
</div>
<!-- Cards Section -->
<div class="section" id="journal">
<p class="section-title">From the Journal</p>
<div class="cards-row">
<div class="card">
<div class="card__image card__image--beach">Coastline</div>
<h3>Salt and Light</h3>
<p>An early morning walk along the shore before the crowds arrive, capturing the way sunrise turns wet sand into liquid gold.</p>
<div class="card__meta">12 min read</div>
</div>
<div class="card">
<div class="card__image card__image--forest">Trail</div>
<h3>Forest Bathing</h3>
<p>We ventured into the coastal redwoods with nothing but a camera and a thermos of chamomile, letting the canopy filter the world.</p>
<div class="card__meta">8 min read</div>
</div>
<div class="card">
<div class="card__image card__image--sunset">Horizon</div>
<h3>Golden Hour Guide</h3>
<p>Our definitive guide to chasing that warm amber light, from timing and location scouting to the camera settings that capture the magic.</p>
<div class="card__meta">15 min read</div>
</div>
</div>
</div>
<!-- Footer -->
<footer>
<p>Goldenshore Journal — Made with intention</p>
<ul class="footer-links">
<li><a href="#">Instagram</a></li>
<li><a href="#">Pinterest</a></li>
<li><a href="#">Newsletter</a></li>
<li><a href="#">Contact</a></li>
</ul>
</footer>
</body>
</html>