Create distinctive, on-brand frontend interfaces for Ascent Training. Use this skill when building landing pages, marketing sites, app UI, React components, or any visual artifact for Ascent...
This skill guides creation of distinctive, on-brand frontend interfaces for Ascent Training that are immediately recognizable and avoid generic "AI slop" aesthetics.
Ascent Training is an intelligently guided training platform for endurance athletes. The core metaphor is "You Climb. We Guide." β athletes do the work and earn their achievements, while Ascent provides expert direction and support.
Visual Identity: Premium, focused, outdoor-inspired. Think: the feeling of early morning on a mountain trail, topographic maps in a high-end outdoor shop, the precision of Apple combined with the soul of Patagonia.
NOT: Generic fitness app, startup purple gradients, clinical dashboards, or motivational poster aesthetics.
THE defining visual element of Ascent. Use custom Mapbox topographic styling as hero backgrounds, section dividers, and atmospheric elements.
Mapbox Style URL: mapbox://styles/jeremy-kalmus/cmj0mlugz007h01r87296hs3n
Implementation patterns:
/* Full-bleed hero background */
.hero-map-background {
background-image: url('mapbox-static-api-url');
background-size: cover;
background-position: center;
position: relative;
}
/* Gradient overlay for text legibility */
.hero-map-background::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
to bottom,
rgba(10, 10, 10, 0.7) 0%,
rgba(10, 10, 10, 0.4) 50%,
rgba(10, 10, 10, 0.9) 100%
);
}
/* Subtle contour line pattern for sections */
.section-with-terrain {
background:
url('/patterns/contour-lines.svg') repeat,
linear-gradient(180deg, #171717 0%, #0a0a0a 100%);
background-blend-mode: soft-light;
}
When to use:
Key principle: The map should feel like looking at actual terrain, not a decorative pattern. Show real topography with elevation, ridgelines, and valleys visible.
Primary Palette:
:root {
/* Backgrounds - Charcoal scale */
--bg-primary: #0a0a0a; /* neutral-950 - deepest */
--bg-secondary: #171717; /* neutral-900 - cards */
--bg-tertiary: #262626; /* neutral-800 - elevated */
--bg-interactive: #404040; /* neutral-700 - inputs */
/* Accent - Emerald scale */
--accent-primary: #10b981; /* emerald-500 - main */
--accent-light: #34d399; /* emerald-400 - hover */
--accent-dark: #059669; /* emerald-600 - pressed */
--accent-subtle: #064e3b; /* emerald-900 - backgrounds */
--accent-glow: rgba(16, 185, 129, 0.2); /* glows, focus rings */
/* Text */
--text-primary: #fafafa; /* neutral-50 */
--text-secondary: #e5e5e5; /* neutral-200 */
--text-tertiary: #a3a3a3; /* neutral-400 */
--text-muted: #737373; /* neutral-500 */
/* Secondary accent */
--accent-warm: #f59e0b; /* amber-500 - warmth, energy */
}
Color meaning:
NEVER use: Purple gradients, bright blue CTAs, pure white backgrounds, or any "startup gradient" combinations.
Font Stack (Athletic Premium):
:root {
--font-display: 'Outfit', system-ui, sans-serif; /* Geometric, confident, athletic */
--font-body: 'Inter', system-ui, sans-serif; /* Clean, highly legible, modern */
--font-mono: 'JetBrains Mono', 'Fira Code', monospace; /* Metrics and data */
}
Typography rules:
Rationale: Outfit brings athletic confidence and geometric precision. Inter is the industry standard for body textβhighly legible and professional without feeling generic.
Avoid: Roboto, Open Sans, Lato, or overly playful fonts.
Philosophy: Purposeful motion that reinforces the "ascent" metaphor. Elements rise, reveal, and settle β never bounce or wiggle.
/* Core timing */
:root {
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
--duration-fast: 150ms;
--duration-normal: 300ms;
--duration-slow: 500ms;
}
/* Hero load-in: staggered rise */
.hero-content > * {
opacity: 0;
transform: translateY(20px);
animation: rise-in 0.6s var(--ease-out) forwards;
}
.hero-content > *:nth-child(1) { animation-delay: 0.1s; }
.hero-content > *:nth-child(2) { animation-delay: 0.2s; }
.hero-content > *:nth-child(3) { animation-delay: 0.3s; }
@keyframes rise-in {
to {
opacity: 1;
transform: translateY(0);
}
}
/* Emerald glow pulse for key elements */
@keyframes glow-pulse {
0%, 100% { box-shadow: 0 0 20px var(--accent-glow); }
50% { box-shadow: 0 0 40px var(--accent-glow); }
}
/* Subtle parallax on scroll */
.parallax-slow { transform: translateY(calc(var(--scroll) * 0.1)); }
.parallax-medium { transform: translateY(calc(var(--scroll) * 0.2)); }
Motion vocabulary:
Avoid: Bounce, wiggle, spin, or any playful/childish motion.
Layout principles:
/* Content container */
.content-container {
max-width: 1200px;
margin: 0 auto;
padding: 0 clamp(1rem, 5vw, 4rem);
}
/* Full-bleed break */
.full-bleed {
width: 100vw;
margin-left: calc(-50vw + 50%);
}
/* Vertical spacing scale */
.section { padding: clamp(4rem, 10vh, 8rem) 0; }
.section-tight { padding: clamp(2rem, 5vh, 4rem) 0; }
.btn-primary {
background: var(--accent-primary);
color: var(--bg-primary);
font-weight: 600;
padding: 1rem 2rem;
border-radius: 12px;
border: none;
font-size: 1rem;
cursor: pointer;
transition: all var(--duration-normal) var(--ease-out);
box-shadow: 0 0 20px var(--accent-glow);
}
.btn-primary:hover {
background: var(--accent-light);
transform: translateY(-2px);
box-shadow: 0 0 30px var(--accent-glow);
}
.btn-primary:active {
background: var(--accent-dark);
transform: translateY(0);
}
.card {
background: var(--bg-secondary);
border: 1px solid #262626;
border-radius: 16px;
padding: 1.5rem;
transition: all var(--duration-normal) var(--ease-out);
}
.card:hover {
border-color: var(--accent-primary);
transform: translateY(-4px);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}
/* Card with emerald accent bar */
.card-accent {
border-left: 4px solid var(--accent-primary);
}
.metric {
font-family: var(--font-mono);
}
.metric-value {
font-size: 3rem;
font-weight: 300;
color: var(--accent-primary);
line-height: 1;
}
.metric-label {
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--text-tertiary);
margin-top: 0.5rem;
}
For the Ascent landing page specifically:
Topographic maps β No other training app uses this. It's immediately recognizable.
Emerald + Charcoal β Not the purple/blue of most SaaS, not the orange/black of fitness apps.
Mountain/outdoor aesthetic β Premium outdoor brand feel, not generic tech startup.
Vertical motion β Everything rises, reinforcing the "ascent" metaphor.
Premium restraint β Apple-like polish with outdoor soul. Not cluttered, not clinical.
β Purple gradients on white backgrounds β Inter, Roboto, or system fonts β Generic hero images of runners β Bright blue CTAs β Bouncy/playful animations β Stock photography of athletes β Gradient buttons with multiple colors β Busy patterns or textures β Cookie-cutter SaaS layouts β "Get Started Free" in blue button
Brand tagline: "You Climb. We Guide." Primary color: #10b981 (emerald-500) Background: #0a0a0a (charcoal/neutral-950) Font display: Bricolage Grotesque Font body: Source Sans 3 Signature element: Topographic map backgrounds Motion: Rise, reveal, glow β never bounce Vibe: Patagonia meets Apple meets midnight training sessions