Pages Medium
Concept C - Creative Studio Portfolio
Original creative studio concept using collage cards and editorial hierarchy.
Open in Lab
MCP
concept portfolio editorial-layout
Targets: JS HTML
Code
:root {
--bg: #f3efe4;
--text: #1f2126;
--muted: #5f6670;
--line: #cdc5b8;
--accent: #0e3659;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
color: var(--text);
background: var(--bg);
font-family: "Palatino", "Book Antiqua", serif;
}
.topbar {
position: fixed;
inset: 0 0 auto 0;
z-index: 20;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.8rem 1rem;
background: rgba(243, 239, 228, 0.8);
backdrop-filter: blur(8px);
border-bottom: 1px solid var(--line);
}
.topbar a {
color: var(--accent);
text-decoration: none;
font-weight: 700;
font-family: "Trebuchet MS", "Segoe UI", sans-serif;
}
.toggle {
border: 1px solid #a69c8d;
background: transparent;
color: #2c3139;
border-radius: 999px;
padding: 0.35rem 0.7rem;
cursor: pointer;
font-family: "Trebuchet MS", "Segoe UI", sans-serif;
}
main {
width: min(1120px, 94%);
margin: 0 auto 2rem;
padding-top: 3.6rem;
}
.hero {
display: grid;
gap: 0.7rem;
}
.kicker {
margin: 0;
color: var(--accent);
text-transform: uppercase;
letter-spacing: 0.1em;
font-size: 0.8rem;
font-family: "Trebuchet MS", "Segoe UI", sans-serif;
}
h1 {
margin: 0;
font-size: clamp(2.4rem, 8vw, 5.8rem);
line-height: 0.9;
}
.subtitle {
margin: 0;
color: var(--muted);
max-width: 60ch;
font-family: "Trebuchet MS", "Segoe UI", sans-serif;
}
.collage {
margin-top: 1rem;
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
grid-auto-rows: 170px;
gap: 0.75rem;
}
.tile {
border-radius: 16px;
border: 1px solid rgba(0, 0, 0, 0.15);
background: var(--bg);
color: #fff;
padding: 0.8rem;
display: grid;
align-content: end;
gap: 0.35rem;
overflow: hidden;
position: relative;
isolation: isolate;
}
.tile::before {
content: "";
position: absolute;
inset: 0;
background: var(--bg);
z-index: -1;
transition: transform 380ms cubic-bezier(0.2, 0.8, 0.2, 1);
}
.tile:hover::before {
transform: scale(1.08);
}
.tile h2 {
margin: 0;
font-size: clamp(1.05rem, 2.2vw, 1.8rem);
}
.tag {
margin: 0;
font-size: 0.74rem;
letter-spacing: 0.08em;
text-transform: uppercase;
opacity: 0.92;
font-family: "Trebuchet MS", "Segoe UI", sans-serif;
}
.tall {
grid-row: span 2;
}
.wide {
grid-column: span 2;
}
.manifesto {
margin-top: 1.2rem;
border: 1px solid var(--line);
border-radius: 14px;
background: rgba(255, 255, 255, 0.52);
padding: 1rem;
}
.manifesto h2 {
margin: 0;
font-size: clamp(1.4rem, 3.4vw, 2.3rem);
}
.manifesto p {
margin: 0.5rem 0 0;
color: var(--muted);
font-family: "Trebuchet MS", "Segoe UI", sans-serif;
}
body.no-motion .tile::before {
transition: none;
}
@media (max-width: 960px) {
.collage {
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-auto-rows: 150px;
}
.wide {
grid-column: span 2;
}
}if (!window.MotionPreference) {
const __mql = window.matchMedia("(prefers-reduced-motion: reduce)");
const __listeners = new Set();
const MotionPreference = {
prefersReducedMotion() {
return __mql.matches;
},
setOverride(value) {
const reduced = Boolean(value);
document.documentElement.classList.toggle("reduced-motion", reduced);
window.dispatchEvent(new CustomEvent("motion-preference", { detail: { reduced } }));
for (const listener of __listeners) {
try {
listener({ reduced, override: reduced, systemReduced: __mql.matches });
} catch {}
}
},
onChange(listener) {
__listeners.add(listener);
try {
listener({
reduced: __mql.matches,
override: null,
systemReduced: __mql.matches,
});
} catch {}
return () => __listeners.delete(listener);
},
getState() {
return { reduced: __mql.matches, override: null, systemReduced: __mql.matches };
},
};
window.MotionPreference = MotionPreference;
}
const toggle = document.getElementById("motionToggle");
let noMotion = window.MotionPreference.prefersReducedMotion();
function applyMode() {
document.body.classList.toggle("no-motion", noMotion);
toggle.textContent = noMotion ? "Enable motion" : "Disable motion";
}
toggle.addEventListener("click", () => {
noMotion = !noMotion;
applyMode();
});
applyMode();<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Concept C - Creative Studio Portfolio</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header class="topbar">
<a href="../">Back to demos</a>
<button id="motionToggle" class="toggle"></button>
</header>
<main>
<section class="hero">
<p class="kicker">Concept C</p>
<h1>North Loop Studio</h1>
<p class="subtitle">A creative portfolio concept mixing editorial layout, collage blocks, and kinetic accents.</p>
</section>
<section class="collage" id="collage">
<article class="tile tall" style="--bg: linear-gradient(130deg,#f56e61,#ffa57f)">
<p class="tag">Campaign</p>
<h2>Velocity Rebrand</h2>
</article>
<article class="tile" style="--bg: linear-gradient(130deg,#5dc8ff,#4a72ff)">
<p class="tag">Product</p>
<h2>Axis Device Film</h2>
</article>
<article class="tile" style="--bg: linear-gradient(130deg,#8ce67f,#38b48a)">
<p class="tag">Identity</p>
<h2>Ridge Festival</h2>
</article>
<article class="tile wide" style="--bg: linear-gradient(130deg,#4c4f65,#8a93bb)">
<p class="tag">Motion</p>
<h2>Parallax Brand Story</h2>
</article>
<article class="tile" style="--bg: linear-gradient(130deg,#f8d974,#e39a31)">
<p class="tag">Interactive</p>
<h2>Signal System</h2>
</article>
</section>
<section class="manifesto">
<h2>We design for memory, not just attention.</h2>
<p>Every scene should express a point of view. Motion exists to reveal hierarchy and energy, never to hide weak structure.</p>
</section>
</main>
<script src="script.js"></script>
</body>
</html>Concept C - Creative Studio Portfolio
Original creative studio concept using collage cards and editorial hierarchy.
Source
- Repository:
libs-gen - Original demo id:
23-concept-creative-portfolio
Notes
Original creative studio concept using collage cards and editorial hierarchy.