23 CSS Flip Cards18 / 23
Step-by-Step Process Map Card
A four-card grid where each front marks a numbered process step; back outlines execution tasks, deliverables, and time estimates.
Published
The code
<div class="fc-14">
<div class="fc-14__grid">
<!-- Step 01 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">01</div>
<div class="fc-14__step-icon">🎯</div>
<div class="fc-14__step-num">01 · Strategy</div>
<div class="fc-14__step-title">Define Goals & Scope</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 01 · Strategy</div>
<div class="fc-14__back-title">Define Goals & Scope</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Stakeholder interviews & alignment</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>OKR definition & success metrics</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Risk & constraint mapping</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Project charter sign-off</div>
</div>
<div class="fc-14__duration">⏱ 1–2 weeks</div>
</div>
</div>
</div>
<!-- Step 02 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">02</div>
<div class="fc-14__step-icon">🔬</div>
<div class="fc-14__step-num">02 · Research</div>
<div class="fc-14__step-title">Discover & Validate</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 02 · Research</div>
<div class="fc-14__back-title">Discover & Validate</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>User interviews (12+ sessions)</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Competitive analysis matrix</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Journey & persona mapping</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Insights synthesis report</div>
</div>
<div class="fc-14__duration">⏱ 2–3 weeks</div>
</div>
</div>
</div>
<!-- Step 03 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">03</div>
<div class="fc-14__step-icon">✏️</div>
<div class="fc-14__step-num">03 · Design</div>
<div class="fc-14__step-title">Prototype & Test</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 03 · Design</div>
<div class="fc-14__back-title">Prototype & Test</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Information architecture</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Hi-fi Figma prototypes</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Usability test rounds</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Design system tokens</div>
</div>
<div class="fc-14__duration">⏱ 3–4 weeks</div>
</div>
</div>
</div>
<!-- Step 04 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">04</div>
<div class="fc-14__step-icon">🚀</div>
<div class="fc-14__step-num">04 · Launch</div>
<div class="fc-14__step-title">Ship & Measure</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 04 · Launch</div>
<div class="fc-14__back-title">Ship & Measure</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Staged rollout & QA pass</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Analytics instrumentation</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>30/60/90 day OKR review</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Retrospective & iteration</div>
</div>
<div class="fc-14__duration">⏱ Ongoing</div>
</div>
</div>
</div>
</div>
</div><div class="fc-14">
<div class="fc-14__grid">
<!-- Step 01 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">01</div>
<div class="fc-14__step-icon">🎯</div>
<div class="fc-14__step-num">01 · Strategy</div>
<div class="fc-14__step-title">Define Goals & Scope</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 01 · Strategy</div>
<div class="fc-14__back-title">Define Goals & Scope</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Stakeholder interviews & alignment</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>OKR definition & success metrics</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Risk & constraint mapping</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Project charter sign-off</div>
</div>
<div class="fc-14__duration">⏱ 1–2 weeks</div>
</div>
</div>
</div>
<!-- Step 02 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">02</div>
<div class="fc-14__step-icon">🔬</div>
<div class="fc-14__step-num">02 · Research</div>
<div class="fc-14__step-title">Discover & Validate</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 02 · Research</div>
<div class="fc-14__back-title">Discover & Validate</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>User interviews (12+ sessions)</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Competitive analysis matrix</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Journey & persona mapping</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Insights synthesis report</div>
</div>
<div class="fc-14__duration">⏱ 2–3 weeks</div>
</div>
</div>
</div>
<!-- Step 03 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">03</div>
<div class="fc-14__step-icon">✏️</div>
<div class="fc-14__step-num">03 · Design</div>
<div class="fc-14__step-title">Prototype & Test</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 03 · Design</div>
<div class="fc-14__back-title">Prototype & Test</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Information architecture</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Hi-fi Figma prototypes</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Usability test rounds</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Design system tokens</div>
</div>
<div class="fc-14__duration">⏱ 3–4 weeks</div>
</div>
</div>
</div>
<!-- Step 04 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">04</div>
<div class="fc-14__step-icon">🚀</div>
<div class="fc-14__step-num">04 · Launch</div>
<div class="fc-14__step-title">Ship & Measure</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 04 · Launch</div>
<div class="fc-14__back-title">Ship & Measure</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Staged rollout & QA pass</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Analytics instrumentation</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>30/60/90 day OKR review</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Retrospective & iteration</div>
</div>
<div class="fc-14__duration">⏱ Ongoing</div>
</div>
</div>
</div>
</div>
</div>.fc-14,
.fc-14 *,
.fc-14 *::before,
.fc-14 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.fc-14 ::selection {
background: #6366f1;
color: #fff;
}
.fc-14 {
--bg: #070710;
--indigo: #6366f1;
--sky: #38bdf8;
--white: #eef2ff;
font-family: 'Segoe UI',system-ui,sans-serif;
background: radial-gradient(ellipse at 50% 30%,#0e0e2e,#070710 65%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 40px 20px;
color: var(--white);
flex-direction: column;
gap: 20px;
}
.fc-14__grid {
display: grid;
grid-template-columns: repeat(4,200px);
gap: 20px;
}
.fc-14__scene {
width: 200px;
height: 280px;
perspective: 1000px;
cursor: pointer;
}
.fc-14__card {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
transition: transform .7s cubic-bezier(.4,0,.2,1);
}
.fc-14__scene:hover .fc-14__card {
transform: rotateY(180deg);
}
.fc-14__front,
.fc-14__back {
position: absolute;
inset: 0;
border-radius: 16px;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
overflow: hidden;
}
/* FRONT */
.fc-14__front {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
padding: 24px 16px;
border: 1px solid rgba(99,102,241,.2);
}
.fc-14__step-num-bg {
position: absolute;
bottom: -20px;
right: -10px;
font-size: 80px;
font-weight: 900;
color: rgba(99,102,241,.07);
font-style: italic;
line-height: 1;
pointer-events: none;
}
.fc-14__step-icon {
width: 52px;
height: 52px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
position: relative;
z-index: 1;
border: 1px solid rgba(255,255,255,.12);
}
.fc-14__step-num {
font-size: 11px;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
position: relative;
z-index: 1;
}
.fc-14__step-title {
font-size: 16px;
font-weight: 800;
text-align: center;
position: relative;
z-index: 1;
line-height: 1.3;
}
.fc-14__step-hint {
font-size: 9px;
color: rgba(238,242,255,.25);
letter-spacing: .08em;
position: absolute;
bottom: 12px;
text-align: center;
}
/* BACK */
.fc-14__back {
transform: rotateY(180deg);
display: flex;
flex-direction: column;
padding: 18px 16px;
gap: 10px;
border: 1px solid rgba(56,189,248,.2);
background: linear-gradient(160deg,#0d0d22,#0a1020);
}
.fc-14__back-step {
font-size: 9px;
letter-spacing: .15em;
text-transform: uppercase;
font-weight: 700;
}
.fc-14__back-title {
font-size: 15px;
font-weight: 800;
color: var(--white);
line-height: 1.2;
}
.fc-14__task-list {
display: flex;
flex-direction: column;
gap: 7px;
flex: 1;
}
.fc-14__task {
display: flex;
align-items: flex-start;
gap: 7px;
font-size: 11px;
color: rgba(238,242,255,.65);
line-height: 1.4;
}
.fc-14__task-check {
width: 14px;
height: 14px;
border-radius: 4px;
flex-shrink: 0;
margin-top: 1px;
display: flex;
align-items: center;
justify-content: center;
}
.fc-14__task-check svg {
width: 9px;
height: 9px;
fill: none;
stroke: currentColor;
stroke-width: 2.5;
}
.fc-14__duration {
margin-top: auto;
display: flex;
align-items: center;
gap: 5px;
font-size: 10px;
color: rgba(238,242,255,.4);
padding-top: 8px;
border-top: 1px solid rgba(255,255,255,.06);
}
/* per-step colors */
.fc-14__scene:nth-child(1) .fc-14__front {
background: linear-gradient(160deg,#0f0f2e,#080820);
}
.fc-14__scene:nth-child(1) .fc-14__step-icon {
background: rgba(99,102,241,.15);
}
.fc-14__scene:nth-child(1) .fc-14__step-num {
color: #818cf8;
}
.fc-14__scene:nth-child(1) .fc-14__step-title {
color: #c7d2fe;
}
.fc-14__scene:nth-child(2) .fc-14__front {
background: linear-gradient(160deg,#0d1a10,#080e0a);
}
.fc-14__scene:nth-child(2) .fc-14__step-icon {
background: rgba(34,197,94,.12);
}
.fc-14__scene:nth-child(2) .fc-14__step-num {
color: #4ade80;
}
.fc-14__scene:nth-child(2) .fc-14__step-title {
color: #bbf7d0;
}
.fc-14__scene:nth-child(3) .fc-14__front {
background: linear-gradient(160deg,#1a0d0d,#0e0808);
}
.fc-14__scene:nth-child(3) .fc-14__step-icon {
background: rgba(249,115,22,.12);
}
.fc-14__scene:nth-child(3) .fc-14__step-num {
color: #fb923c;
}
.fc-14__scene:nth-child(3) .fc-14__step-title {
color: #fed7aa;
}
.fc-14__scene:nth-child(4) .fc-14__front {
background: linear-gradient(160deg,#0d0a20,#080614);
}
.fc-14__scene:nth-child(4) .fc-14__step-icon {
background: rgba(168,85,247,.12);
}
.fc-14__scene:nth-child(4) .fc-14__step-num {
color: #c084fc;
}
.fc-14__scene:nth-child(4) .fc-14__step-title {
color: #e9d5ff;
}
.fc-14__scene:nth-child(1) .fc-14__back-step,
.fc-14__scene:nth-child(1) .fc-14__task-check {
color: #818cf8;
}
.fc-14__scene:nth-child(2) .fc-14__back-step,
.fc-14__scene:nth-child(2) .fc-14__task-check {
color: #4ade80;
}
.fc-14__scene:nth-child(3) .fc-14__back-step,
.fc-14__scene:nth-child(3) .fc-14__task-check {
color: #fb923c;
}
.fc-14__scene:nth-child(4) .fc-14__back-step,
.fc-14__scene:nth-child(4) .fc-14__task-check {
color: #c084fc;
}
@media (max-width: 900px) {
.fc-14__grid {
grid-template-columns: repeat(2,200px);
}
}
@media (max-width: 480px) {
.fc-14__grid {
grid-template-columns: 1fr;
}
}
@media (prefers-reduced-motion: reduce) {
.fc-14__card {
transition: none;
}
}.fc-14,
.fc-14 *,
.fc-14 *::before,
.fc-14 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.fc-14 ::selection {
background: #6366f1;
color: #fff;
}
.fc-14 {
--bg: #070710;
--indigo: #6366f1;
--sky: #38bdf8;
--white: #eef2ff;
font-family: 'Segoe UI',system-ui,sans-serif;
background: radial-gradient(ellipse at 50% 30%,#0e0e2e,#070710 65%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 40px 20px;
color: var(--white);
flex-direction: column;
gap: 20px;
}
.fc-14__grid {
display: grid;
grid-template-columns: repeat(4,200px);
gap: 20px;
}
.fc-14__scene {
width: 200px;
height: 280px;
perspective: 1000px;
cursor: pointer;
}
.fc-14__card {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
transition: transform .7s cubic-bezier(.4,0,.2,1);
}
.fc-14__scene:hover .fc-14__card {
transform: rotateY(180deg);
}
.fc-14__front,
.fc-14__back {
position: absolute;
inset: 0;
border-radius: 16px;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
overflow: hidden;
}
/* FRONT */
.fc-14__front {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
padding: 24px 16px;
border: 1px solid rgba(99,102,241,.2);
}
.fc-14__step-num-bg {
position: absolute;
bottom: -20px;
right: -10px;
font-size: 80px;
font-weight: 900;
color: rgba(99,102,241,.07);
font-style: italic;
line-height: 1;
pointer-events: none;
}
.fc-14__step-icon {
width: 52px;
height: 52px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
position: relative;
z-index: 1;
border: 1px solid rgba(255,255,255,.12);
}
.fc-14__step-num {
font-size: 11px;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
position: relative;
z-index: 1;
}
.fc-14__step-title {
font-size: 16px;
font-weight: 800;
text-align: center;
position: relative;
z-index: 1;
line-height: 1.3;
}
.fc-14__step-hint {
font-size: 9px;
color: rgba(238,242,255,.25);
letter-spacing: .08em;
position: absolute;
bottom: 12px;
text-align: center;
}
/* BACK */
.fc-14__back {
transform: rotateY(180deg);
display: flex;
flex-direction: column;
padding: 18px 16px;
gap: 10px;
border: 1px solid rgba(56,189,248,.2);
background: linear-gradient(160deg,#0d0d22,#0a1020);
}
.fc-14__back-step {
font-size: 9px;
letter-spacing: .15em;
text-transform: uppercase;
font-weight: 700;
}
.fc-14__back-title {
font-size: 15px;
font-weight: 800;
color: var(--white);
line-height: 1.2;
}
.fc-14__task-list {
display: flex;
flex-direction: column;
gap: 7px;
flex: 1;
}
.fc-14__task {
display: flex;
align-items: flex-start;
gap: 7px;
font-size: 11px;
color: rgba(238,242,255,.65);
line-height: 1.4;
}
.fc-14__task-check {
width: 14px;
height: 14px;
border-radius: 4px;
flex-shrink: 0;
margin-top: 1px;
display: flex;
align-items: center;
justify-content: center;
}
.fc-14__task-check svg {
width: 9px;
height: 9px;
fill: none;
stroke: currentColor;
stroke-width: 2.5;
}
.fc-14__duration {
margin-top: auto;
display: flex;
align-items: center;
gap: 5px;
font-size: 10px;
color: rgba(238,242,255,.4);
padding-top: 8px;
border-top: 1px solid rgba(255,255,255,.06);
}
/* per-step colors */
.fc-14__scene:nth-child(1) .fc-14__front {
background: linear-gradient(160deg,#0f0f2e,#080820);
}
.fc-14__scene:nth-child(1) .fc-14__step-icon {
background: rgba(99,102,241,.15);
}
.fc-14__scene:nth-child(1) .fc-14__step-num {
color: #818cf8;
}
.fc-14__scene:nth-child(1) .fc-14__step-title {
color: #c7d2fe;
}
.fc-14__scene:nth-child(2) .fc-14__front {
background: linear-gradient(160deg,#0d1a10,#080e0a);
}
.fc-14__scene:nth-child(2) .fc-14__step-icon {
background: rgba(34,197,94,.12);
}
.fc-14__scene:nth-child(2) .fc-14__step-num {
color: #4ade80;
}
.fc-14__scene:nth-child(2) .fc-14__step-title {
color: #bbf7d0;
}
.fc-14__scene:nth-child(3) .fc-14__front {
background: linear-gradient(160deg,#1a0d0d,#0e0808);
}
.fc-14__scene:nth-child(3) .fc-14__step-icon {
background: rgba(249,115,22,.12);
}
.fc-14__scene:nth-child(3) .fc-14__step-num {
color: #fb923c;
}
.fc-14__scene:nth-child(3) .fc-14__step-title {
color: #fed7aa;
}
.fc-14__scene:nth-child(4) .fc-14__front {
background: linear-gradient(160deg,#0d0a20,#080614);
}
.fc-14__scene:nth-child(4) .fc-14__step-icon {
background: rgba(168,85,247,.12);
}
.fc-14__scene:nth-child(4) .fc-14__step-num {
color: #c084fc;
}
.fc-14__scene:nth-child(4) .fc-14__step-title {
color: #e9d5ff;
}
.fc-14__scene:nth-child(1) .fc-14__back-step,
.fc-14__scene:nth-child(1) .fc-14__task-check {
color: #818cf8;
}
.fc-14__scene:nth-child(2) .fc-14__back-step,
.fc-14__scene:nth-child(2) .fc-14__task-check {
color: #4ade80;
}
.fc-14__scene:nth-child(3) .fc-14__back-step,
.fc-14__scene:nth-child(3) .fc-14__task-check {
color: #fb923c;
}
.fc-14__scene:nth-child(4) .fc-14__back-step,
.fc-14__scene:nth-child(4) .fc-14__task-check {
color: #c084fc;
}
@media (max-width: 900px) {
.fc-14__grid {
grid-template-columns: repeat(2,200px);
}
}
@media (max-width: 480px) {
.fc-14__grid {
grid-template-columns: 1fr;
}
}
@media (prefers-reduced-motion: reduce) {
.fc-14__card {
transition: none;
}
}Here's a working CSS Flip Card from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Step-by-Step Process Map Card
Source: https://codefronts.com/components/css-flip-cards/step-by-step-process-map-card/
A four-card grid where each front marks a numbered process step; back outlines execution tasks, deliverables, and time estimates.
## HTML
```html
<div class="fc-14">
<div class="fc-14__grid">
<!-- Step 01 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">01</div>
<div class="fc-14__step-icon">🎯</div>
<div class="fc-14__step-num">01 · Strategy</div>
<div class="fc-14__step-title">Define Goals & Scope</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 01 · Strategy</div>
<div class="fc-14__back-title">Define Goals & Scope</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Stakeholder interviews & alignment</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>OKR definition & success metrics</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Risk & constraint mapping</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Project charter sign-off</div>
</div>
<div class="fc-14__duration">⏱ 1–2 weeks</div>
</div>
</div>
</div>
<!-- Step 02 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">02</div>
<div class="fc-14__step-icon">🔬</div>
<div class="fc-14__step-num">02 · Research</div>
<div class="fc-14__step-title">Discover & Validate</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 02 · Research</div>
<div class="fc-14__back-title">Discover & Validate</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>User interviews (12+ sessions)</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Competitive analysis matrix</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Journey & persona mapping</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Insights synthesis report</div>
</div>
<div class="fc-14__duration">⏱ 2–3 weeks</div>
</div>
</div>
</div>
<!-- Step 03 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">03</div>
<div class="fc-14__step-icon">✏️</div>
<div class="fc-14__step-num">03 · Design</div>
<div class="fc-14__step-title">Prototype & Test</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 03 · Design</div>
<div class="fc-14__back-title">Prototype & Test</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Information architecture</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Hi-fi Figma prototypes</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Usability test rounds</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Design system tokens</div>
</div>
<div class="fc-14__duration">⏱ 3–4 weeks</div>
</div>
</div>
</div>
<!-- Step 04 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">04</div>
<div class="fc-14__step-icon">🚀</div>
<div class="fc-14__step-num">04 · Launch</div>
<div class="fc-14__step-title">Ship & Measure</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 04 · Launch</div>
<div class="fc-14__back-title">Ship & Measure</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Staged rollout & QA pass</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Analytics instrumentation</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>30/60/90 day OKR review</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Retrospective & iteration</div>
</div>
<div class="fc-14__duration">⏱ Ongoing</div>
</div>
</div>
</div>
</div>
</div>
```
## CSS
```css
.fc-14,
.fc-14 *,
.fc-14 *::before,
.fc-14 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.fc-14 ::selection {
background: #6366f1;
color: #fff;
}
.fc-14 {
--bg: #070710;
--indigo: #6366f1;
--sky: #38bdf8;
--white: #eef2ff;
font-family: 'Segoe UI',system-ui,sans-serif;
background: radial-gradient(ellipse at 50% 30%,#0e0e2e,#070710 65%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 40px 20px;
color: var(--white);
flex-direction: column;
gap: 20px;
}
.fc-14__grid {
display: grid;
grid-template-columns: repeat(4,200px);
gap: 20px;
}
.fc-14__scene {
width: 200px;
height: 280px;
perspective: 1000px;
cursor: pointer;
}
.fc-14__card {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
transition: transform .7s cubic-bezier(.4,0,.2,1);
}
.fc-14__scene:hover .fc-14__card {
transform: rotateY(180deg);
}
.fc-14__front,
.fc-14__back {
position: absolute;
inset: 0;
border-radius: 16px;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
overflow: hidden;
}
/* FRONT */
.fc-14__front {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
padding: 24px 16px;
border: 1px solid rgba(99,102,241,.2);
}
.fc-14__step-num-bg {
position: absolute;
bottom: -20px;
right: -10px;
font-size: 80px;
font-weight: 900;
color: rgba(99,102,241,.07);
font-style: italic;
line-height: 1;
pointer-events: none;
}
.fc-14__step-icon {
width: 52px;
height: 52px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
position: relative;
z-index: 1;
border: 1px solid rgba(255,255,255,.12);
}
.fc-14__step-num {
font-size: 11px;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
position: relative;
z-index: 1;
}
.fc-14__step-title {
font-size: 16px;
font-weight: 800;
text-align: center;
position: relative;
z-index: 1;
line-height: 1.3;
}
.fc-14__step-hint {
font-size: 9px;
color: rgba(238,242,255,.25);
letter-spacing: .08em;
position: absolute;
bottom: 12px;
text-align: center;
}
/* BACK */
.fc-14__back {
transform: rotateY(180deg);
display: flex;
flex-direction: column;
padding: 18px 16px;
gap: 10px;
border: 1px solid rgba(56,189,248,.2);
background: linear-gradient(160deg,#0d0d22,#0a1020);
}
.fc-14__back-step {
font-size: 9px;
letter-spacing: .15em;
text-transform: uppercase;
font-weight: 700;
}
.fc-14__back-title {
font-size: 15px;
font-weight: 800;
color: var(--white);
line-height: 1.2;
}
.fc-14__task-list {
display: flex;
flex-direction: column;
gap: 7px;
flex: 1;
}
.fc-14__task {
display: flex;
align-items: flex-start;
gap: 7px;
font-size: 11px;
color: rgba(238,242,255,.65);
line-height: 1.4;
}
.fc-14__task-check {
width: 14px;
height: 14px;
border-radius: 4px;
flex-shrink: 0;
margin-top: 1px;
display: flex;
align-items: center;
justify-content: center;
}
.fc-14__task-check svg {
width: 9px;
height: 9px;
fill: none;
stroke: currentColor;
stroke-width: 2.5;
}
.fc-14__duration {
margin-top: auto;
display: flex;
align-items: center;
gap: 5px;
font-size: 10px;
color: rgba(238,242,255,.4);
padding-top: 8px;
border-top: 1px solid rgba(255,255,255,.06);
}
/* per-step colors */
.fc-14__scene:nth-child(1) .fc-14__front {
background: linear-gradient(160deg,#0f0f2e,#080820);
}
.fc-14__scene:nth-child(1) .fc-14__step-icon {
background: rgba(99,102,241,.15);
}
.fc-14__scene:nth-child(1) .fc-14__step-num {
color: #818cf8;
}
.fc-14__scene:nth-child(1) .fc-14__step-title {
color: #c7d2fe;
}
.fc-14__scene:nth-child(2) .fc-14__front {
background: linear-gradient(160deg,#0d1a10,#080e0a);
}
.fc-14__scene:nth-child(2) .fc-14__step-icon {
background: rgba(34,197,94,.12);
}
.fc-14__scene:nth-child(2) .fc-14__step-num {
color: #4ade80;
}
.fc-14__scene:nth-child(2) .fc-14__step-title {
color: #bbf7d0;
}
.fc-14__scene:nth-child(3) .fc-14__front {
background: linear-gradient(160deg,#1a0d0d,#0e0808);
}
.fc-14__scene:nth-child(3) .fc-14__step-icon {
background: rgba(249,115,22,.12);
}
.fc-14__scene:nth-child(3) .fc-14__step-num {
color: #fb923c;
}
.fc-14__scene:nth-child(3) .fc-14__step-title {
color: #fed7aa;
}
.fc-14__scene:nth-child(4) .fc-14__front {
background: linear-gradient(160deg,#0d0a20,#080614);
}
.fc-14__scene:nth-child(4) .fc-14__step-icon {
background: rgba(168,85,247,.12);
}
.fc-14__scene:nth-child(4) .fc-14__step-num {
color: #c084fc;
}
.fc-14__scene:nth-child(4) .fc-14__step-title {
color: #e9d5ff;
}
.fc-14__scene:nth-child(1) .fc-14__back-step,
.fc-14__scene:nth-child(1) .fc-14__task-check {
color: #818cf8;
}
.fc-14__scene:nth-child(2) .fc-14__back-step,
.fc-14__scene:nth-child(2) .fc-14__task-check {
color: #4ade80;
}
.fc-14__scene:nth-child(3) .fc-14__back-step,
.fc-14__scene:nth-child(3) .fc-14__task-check {
color: #fb923c;
}
.fc-14__scene:nth-child(4) .fc-14__back-step,
.fc-14__scene:nth-child(4) .fc-14__task-check {
color: #c084fc;
}
@media (max-width: 900px) {
.fc-14__grid {
grid-template-columns: repeat(2,200px);
}
}
@media (max-width: 480px) {
.fc-14__grid {
grid-template-columns: 1fr;
}
}
@media (prefers-reduced-motion: reduce) {
.fc-14__card {
transition: none;
}
}
```Here's a working CSS Flip Card from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Step-by-Step Process Map Card
Source: https://codefronts.com/components/css-flip-cards/step-by-step-process-map-card/
A four-card grid where each front marks a numbered process step; back outlines execution tasks, deliverables, and time estimates.
## HTML
```html
<div class="fc-14">
<div class="fc-14__grid">
<!-- Step 01 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">01</div>
<div class="fc-14__step-icon">🎯</div>
<div class="fc-14__step-num">01 · Strategy</div>
<div class="fc-14__step-title">Define Goals & Scope</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 01 · Strategy</div>
<div class="fc-14__back-title">Define Goals & Scope</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Stakeholder interviews & alignment</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>OKR definition & success metrics</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Risk & constraint mapping</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Project charter sign-off</div>
</div>
<div class="fc-14__duration">⏱ 1–2 weeks</div>
</div>
</div>
</div>
<!-- Step 02 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">02</div>
<div class="fc-14__step-icon">🔬</div>
<div class="fc-14__step-num">02 · Research</div>
<div class="fc-14__step-title">Discover & Validate</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 02 · Research</div>
<div class="fc-14__back-title">Discover & Validate</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>User interviews (12+ sessions)</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Competitive analysis matrix</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Journey & persona mapping</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Insights synthesis report</div>
</div>
<div class="fc-14__duration">⏱ 2–3 weeks</div>
</div>
</div>
</div>
<!-- Step 03 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">03</div>
<div class="fc-14__step-icon">✏️</div>
<div class="fc-14__step-num">03 · Design</div>
<div class="fc-14__step-title">Prototype & Test</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 03 · Design</div>
<div class="fc-14__back-title">Prototype & Test</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Information architecture</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Hi-fi Figma prototypes</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Usability test rounds</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Design system tokens</div>
</div>
<div class="fc-14__duration">⏱ 3–4 weeks</div>
</div>
</div>
</div>
<!-- Step 04 -->
<div class="fc-14__scene">
<div class="fc-14__card">
<div class="fc-14__front">
<div class="fc-14__step-num-bg">04</div>
<div class="fc-14__step-icon">🚀</div>
<div class="fc-14__step-num">04 · Launch</div>
<div class="fc-14__step-title">Ship & Measure</div>
<div class="fc-14__step-hint">Hover for details →</div>
</div>
<div class="fc-14__back">
<div class="fc-14__back-step">Step 04 · Launch</div>
<div class="fc-14__back-title">Ship & Measure</div>
<div class="fc-14__task-list">
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Staged rollout & QA pass</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Analytics instrumentation</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>30/60/90 day OKR review</div>
<div class="fc-14__task"><span class="fc-14__task-check"><svg viewBox="0 0 10 10"><polyline points="2,5 4,8 8,2"/></svg></span>Retrospective & iteration</div>
</div>
<div class="fc-14__duration">⏱ Ongoing</div>
</div>
</div>
</div>
</div>
</div>
```
## CSS
```css
.fc-14,
.fc-14 *,
.fc-14 *::before,
.fc-14 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.fc-14 ::selection {
background: #6366f1;
color: #fff;
}
.fc-14 {
--bg: #070710;
--indigo: #6366f1;
--sky: #38bdf8;
--white: #eef2ff;
font-family: 'Segoe UI',system-ui,sans-serif;
background: radial-gradient(ellipse at 50% 30%,#0e0e2e,#070710 65%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 40px 20px;
color: var(--white);
flex-direction: column;
gap: 20px;
}
.fc-14__grid {
display: grid;
grid-template-columns: repeat(4,200px);
gap: 20px;
}
.fc-14__scene {
width: 200px;
height: 280px;
perspective: 1000px;
cursor: pointer;
}
.fc-14__card {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
transition: transform .7s cubic-bezier(.4,0,.2,1);
}
.fc-14__scene:hover .fc-14__card {
transform: rotateY(180deg);
}
.fc-14__front,
.fc-14__back {
position: absolute;
inset: 0;
border-radius: 16px;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
overflow: hidden;
}
/* FRONT */
.fc-14__front {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
padding: 24px 16px;
border: 1px solid rgba(99,102,241,.2);
}
.fc-14__step-num-bg {
position: absolute;
bottom: -20px;
right: -10px;
font-size: 80px;
font-weight: 900;
color: rgba(99,102,241,.07);
font-style: italic;
line-height: 1;
pointer-events: none;
}
.fc-14__step-icon {
width: 52px;
height: 52px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
position: relative;
z-index: 1;
border: 1px solid rgba(255,255,255,.12);
}
.fc-14__step-num {
font-size: 11px;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
position: relative;
z-index: 1;
}
.fc-14__step-title {
font-size: 16px;
font-weight: 800;
text-align: center;
position: relative;
z-index: 1;
line-height: 1.3;
}
.fc-14__step-hint {
font-size: 9px;
color: rgba(238,242,255,.25);
letter-spacing: .08em;
position: absolute;
bottom: 12px;
text-align: center;
}
/* BACK */
.fc-14__back {
transform: rotateY(180deg);
display: flex;
flex-direction: column;
padding: 18px 16px;
gap: 10px;
border: 1px solid rgba(56,189,248,.2);
background: linear-gradient(160deg,#0d0d22,#0a1020);
}
.fc-14__back-step {
font-size: 9px;
letter-spacing: .15em;
text-transform: uppercase;
font-weight: 700;
}
.fc-14__back-title {
font-size: 15px;
font-weight: 800;
color: var(--white);
line-height: 1.2;
}
.fc-14__task-list {
display: flex;
flex-direction: column;
gap: 7px;
flex: 1;
}
.fc-14__task {
display: flex;
align-items: flex-start;
gap: 7px;
font-size: 11px;
color: rgba(238,242,255,.65);
line-height: 1.4;
}
.fc-14__task-check {
width: 14px;
height: 14px;
border-radius: 4px;
flex-shrink: 0;
margin-top: 1px;
display: flex;
align-items: center;
justify-content: center;
}
.fc-14__task-check svg {
width: 9px;
height: 9px;
fill: none;
stroke: currentColor;
stroke-width: 2.5;
}
.fc-14__duration {
margin-top: auto;
display: flex;
align-items: center;
gap: 5px;
font-size: 10px;
color: rgba(238,242,255,.4);
padding-top: 8px;
border-top: 1px solid rgba(255,255,255,.06);
}
/* per-step colors */
.fc-14__scene:nth-child(1) .fc-14__front {
background: linear-gradient(160deg,#0f0f2e,#080820);
}
.fc-14__scene:nth-child(1) .fc-14__step-icon {
background: rgba(99,102,241,.15);
}
.fc-14__scene:nth-child(1) .fc-14__step-num {
color: #818cf8;
}
.fc-14__scene:nth-child(1) .fc-14__step-title {
color: #c7d2fe;
}
.fc-14__scene:nth-child(2) .fc-14__front {
background: linear-gradient(160deg,#0d1a10,#080e0a);
}
.fc-14__scene:nth-child(2) .fc-14__step-icon {
background: rgba(34,197,94,.12);
}
.fc-14__scene:nth-child(2) .fc-14__step-num {
color: #4ade80;
}
.fc-14__scene:nth-child(2) .fc-14__step-title {
color: #bbf7d0;
}
.fc-14__scene:nth-child(3) .fc-14__front {
background: linear-gradient(160deg,#1a0d0d,#0e0808);
}
.fc-14__scene:nth-child(3) .fc-14__step-icon {
background: rgba(249,115,22,.12);
}
.fc-14__scene:nth-child(3) .fc-14__step-num {
color: #fb923c;
}
.fc-14__scene:nth-child(3) .fc-14__step-title {
color: #fed7aa;
}
.fc-14__scene:nth-child(4) .fc-14__front {
background: linear-gradient(160deg,#0d0a20,#080614);
}
.fc-14__scene:nth-child(4) .fc-14__step-icon {
background: rgba(168,85,247,.12);
}
.fc-14__scene:nth-child(4) .fc-14__step-num {
color: #c084fc;
}
.fc-14__scene:nth-child(4) .fc-14__step-title {
color: #e9d5ff;
}
.fc-14__scene:nth-child(1) .fc-14__back-step,
.fc-14__scene:nth-child(1) .fc-14__task-check {
color: #818cf8;
}
.fc-14__scene:nth-child(2) .fc-14__back-step,
.fc-14__scene:nth-child(2) .fc-14__task-check {
color: #4ade80;
}
.fc-14__scene:nth-child(3) .fc-14__back-step,
.fc-14__scene:nth-child(3) .fc-14__task-check {
color: #fb923c;
}
.fc-14__scene:nth-child(4) .fc-14__back-step,
.fc-14__scene:nth-child(4) .fc-14__task-check {
color: #c084fc;
}
@media (max-width: 900px) {
.fc-14__grid {
grid-template-columns: repeat(2,200px);
}
}
@media (max-width: 480px) {
.fc-14__grid {
grid-template-columns: 1fr;
}
}
@media (prefers-reduced-motion: reduce) {
.fc-14__card {
transition: none;
}
}
```How this works
All four cards share the same component structure but each uses a unique colour scheme applied at the .fc-14__scene:nth-child(N) level — indigo, green, orange, and violet — so the grid reads as a coherent sequence without repeating separate class sets per card. The large decorative step number behind the icon uses position:absolute; opacity:.07 to create a watermark that scales with the card.
Each card-back task list uses an inline SVG checkmark in a rounded square box — accessible, icon-font-free, and trivially resizable. The grid uses grid-template-columns:repeat(4,200px) at desktop collapsing to repeat(2,200px) at 900px and single-column at 480px via two @media breakpoints.
Make it yours
- Add connecting arrows between cards using absolutely positioned pseudo-elements with
border-right + border-top + rotate(45deg)chevron shapes. - Animate each front card in on scroll using an
IntersectionObserverthat adds a stagger class with increasinganimation-delayper child. - Change the number of steps by adding or removing
.fc-14__sceneblocks — thenth-childcolour rules extend naturally up to however many steps you define. - Replace the emoji step icons with inline SVGs for a more professional look — keep them at exactly
22px x 22pxto match the icon-box container. - Make each card clickable to expand into a full detail view by removing the flip trigger and using a JS panel-toggle approach instead.
Gotchas — read before shipping
nth-childcolour targeting requires the cards to be direct siblings in the DOM — wrapping individual cards in extra containers breaks selector specificity.- The
perspectiveproperty must be set on the.fc-14__sceneelement, not on the grid container — putting it on the parent causes all cards to share one vanishing point. - On very small screens the 200px fixed card width causes horizontal overflow — replace with
min(200px, 100%)and let the single-column breakpoint absorb the rest.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 36+ | 9+ | 16+ | 36+ |
nth-child targeting and CSS Grid are universally supported in all evergreen browsers.