Leadership clarity
Step back from the noise, identify what matters most, and lead with stronger intention.
diff --git a/assets/pasted-20260324-124926-7f465ba1.png b/assets/pasted-20260324-124926-7f465ba1.png new file mode 100644 index 0000000..bc4613c Binary files /dev/null and b/assets/pasted-20260324-124926-7f465ba1.png differ diff --git a/assets/pasted-20260324-131335-959f7e41.png b/assets/pasted-20260324-131335-959f7e41.png new file mode 100644 index 0000000..58f8c63 Binary files /dev/null and b/assets/pasted-20260324-131335-959f7e41.png differ diff --git a/assets/pasted-20260324-131943-a5b7a098.png b/assets/pasted-20260324-131943-a5b7a098.png new file mode 100644 index 0000000..6a768ec Binary files /dev/null and b/assets/pasted-20260324-131943-a5b7a098.png differ diff --git a/wp-content/mu-plugins/coaching-mvp.php b/wp-content/mu-plugins/coaching-mvp.php index ea0f5ca..4a3243f 100644 --- a/wp-content/mu-plugins/coaching-mvp.php +++ b/wp-content/mu-plugins/coaching-mvp.php @@ -8,7 +8,7 @@ if (!defined('ABSPATH')) { exit; } -const COACHING_MVP_TEMPLATE_VERSION = '2.0.1'; +const COACHING_MVP_TEMPLATE_VERSION = '2.0.3'; function coaching_mvp_service_catalog() { return [ @@ -568,7 +568,7 @@ body.coaching-mvp-active.page main > .wp-block-group.alignfull.has-global-paddin display: flex; flex-direction: column; justify-content: center; - min-height: 100%; + min-height: 0; } .coach-hero .coach-photo-card { background: rgba(255,255,255,.08); @@ -707,19 +707,19 @@ body.coaching-mvp-active.page main > .wp-block-group.alignfull.has-global-paddin .coach-work-together-section { position: relative; overflow: hidden; - padding: clamp(1.6rem, 3vw, 2.4rem); + padding: clamp(1.45rem, 2.8vw, 2.15rem); background: - radial-gradient(circle at 10% 16%, rgba(95,45,255,.08), transparent 24%), - radial-gradient(circle at 88% 18%, rgba(0,184,169,.08), transparent 22%), - linear-gradient(180deg, rgba(255,255,255,.96), rgba(247,249,255,.96)); + radial-gradient(circle at 8% 14%, rgba(95,45,255,.10), transparent 24%), + radial-gradient(circle at 90% 12%, rgba(0,184,169,.09), transparent 23%), + linear-gradient(180deg, rgba(255,255,255,.98), rgba(244,247,255,.98)); border: 1px solid rgba(95,45,255,.08); - box-shadow: 0 24px 60px rgba(9,18,40,.07); + box-shadow: 0 24px 56px rgba(9,18,40,.07); } .coach-work-together-section::before { content: ""; position: absolute; inset: 0; - background: linear-gradient(135deg, rgba(255,255,255,.12), transparent 38%, rgba(95,45,255,.03)); + background: linear-gradient(135deg, rgba(255,255,255,.16), transparent 34%, rgba(95,45,255,.04)); pointer-events: none; } .coach-work-together-section > .wp-block-group__inner-container { @@ -728,89 +728,473 @@ body.coaching-mvp-active.page main > .wp-block-group.alignfull.has-global-paddin } .coach-work-together-section .wp-block-heading, .coach-work-together-section > .wp-block-group__inner-container > p:not(.coach-badge) { - max-width: 46rem; + max-width: 44rem; } .coach-work-grid { - gap: 1.15rem; - margin-top: 1.45rem; - grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); + gap: 1rem; + margin-top: 1.25rem; + grid-template-columns: repeat(auto-fit, minmax(205px, 1fr)); + align-items: stretch; } .coach-work-grid .coach-system-card { - --work-accent: rgba(95,45,255,.16); + --work-accent: rgba(95,45,255,.20); + --work-accent-strong: #5f2dff; position: relative; + isolation: isolate; overflow: hidden; - min-height: 220px; - padding: 1.45rem 1.35rem 1.3rem; + min-height: 182px; + padding: 1.15rem 1.05rem 1.05rem; + border-radius: 22px; background: - radial-gradient(circle at 100% 0%, rgba(255,255,255,.82), transparent 30%), - linear-gradient(180deg, rgba(255,255,255,.995), rgba(247,249,255,.97)); - border: 1px solid rgba(95,45,255,.09); - box-shadow: 0 16px 36px rgba(9,18,40,.08); + linear-gradient(180deg, rgba(255,255,255,.985), rgba(245,248,255,.98)); + border: 1px solid rgba(95,45,255,.10); + box-shadow: 0 14px 28px rgba(9,18,40,.07); + transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease; } .coach-work-grid .coach-system-card::before { content: ""; position: absolute; - inset: 0 auto auto 0; - width: 100%; - height: 4px; - background: linear-gradient(90deg, var(--work-accent), rgba(95,45,255,0)); + inset: 0 0 auto 0; + height: 3px; + background: linear-gradient(90deg, var(--work-accent-strong), color-mix(in srgb, var(--work-accent-strong) 20%, transparent)); + opacity: .92; } .coach-work-grid .coach-system-card::after { - content: ""; + content: attr(data-icon); position: absolute; - right: -2.2rem; - top: -2.2rem; - width: 7rem; - height: 7rem; - border-radius: 50%; - background: radial-gradient(circle, var(--work-accent), rgba(255,255,255,0) 68%); - opacity: .95; + right: .65rem; + top: .35rem; + font-size: 4.8rem; + line-height: 1; + font-weight: 700; + color: color-mix(in srgb, var(--work-accent-strong) 17%, white 83%); + opacity: .75; + transform: rotate(-8deg); pointer-events: none; + z-index: 0; } -.coach-work-grid .coach-system-card:nth-child(3n+2) { - --work-accent: rgba(0,184,169,.17); +.coach-work-grid .coach-system-card > * { + position: relative; + z-index: 1; } -.coach-work-grid .coach-system-card:nth-child(3n+3) { - --work-accent: rgba(255,159,28,.20); +.coach-work-grid .coach-system-card:nth-child(1) { + --work-accent: rgba(95,45,255,.20); + --work-accent-strong: #5f2dff; +} +.coach-work-grid .coach-system-card:nth-child(2) { + --work-accent: rgba(0,184,169,.20); + --work-accent-strong: #0e9f95; +} +.coach-work-grid .coach-system-card:nth-child(3) { + --work-accent: rgba(255,159,28,.22); + --work-accent-strong: #ff9f1c; +} +.coach-work-grid .coach-system-card:nth-child(4) { + --work-accent: rgba(222,87,137,.20); + --work-accent-strong: #d25488; +} +.coach-work-grid .coach-system-card:nth-child(5) { + --work-accent: rgba(56,120,255,.19); + --work-accent-strong: #2f6df6; +} +.coach-work-grid .coach-system-card:nth-child(6) { + --work-accent: rgba(19,140,114,.20); + --work-accent-strong: #138c72; +} +.coach-work-grid .coach-system-card:nth-child(7) { + --work-accent: rgba(125,93,255,.20); + --work-accent-strong: #7d5dff; } .coach-work-grid .coach-system-card:hover { - transform: translateY(-5px); - border-color: rgba(95,45,255,.16); - box-shadow: 0 24px 52px rgba(9,18,40,.12); + transform: translateY(-4px); + border-color: color-mix(in srgb, var(--work-accent-strong) 28%, white 72%); + box-shadow: 0 18px 36px rgba(9,18,40,.10); } .coach-work-grid .coach-icon-dot { - width: 3rem; - height: 3rem; - border-radius: 18px; - margin-bottom: 1.15rem; - background: linear-gradient(135deg, color-mix(in srgb, var(--work-accent) 88%, white 12%), rgba(255,255,255,.92)); - border: 1px solid rgba(255,255,255,.75); - box-shadow: inset 0 1px 0 rgba(255,255,255,.72), 0 14px 24px rgba(9,18,40,.08); - font-size: .92rem; - letter-spacing: .04em; + width: 2.5rem; + height: 2.5rem; + border-radius: 14px; + margin-bottom: .82rem; + background: linear-gradient(135deg, color-mix(in srgb, var(--work-accent-strong) 90%, white 10%), rgba(255,255,255,.96)); + border: 1px solid rgba(255,255,255,.78); + box-shadow: inset 0 1px 0 rgba(255,255,255,.76), 0 10px 18px rgba(9,18,40,.07); + font-size: .81rem; + letter-spacing: .06em; } .coach-work-grid .coach-system-card h3 { + max-width: 12ch; margin-top: 0; - margin-bottom: .72rem; - font-size: 1.14rem; - line-height: 1.28; - color: #1b1448; + margin-bottom: .48rem; + font-size: 1.06rem; + line-height: 1.2; + letter-spacing: -.02em; + color: #15113d; } .coach-work-grid .coach-system-card p { + max-width: 30ch; margin-bottom: 0; - font-size: .98rem; - line-height: 1.65; - color: rgba(39,52,74,.84); + font-size: .92rem; + line-height: 1.5; + color: rgba(32,45,68,.82); } @media (max-width: 781px) { .coach-work-together-section { - padding: 1.35rem; + padding: 1.2rem; } .coach-work-grid { grid-template-columns: 1fr; } .coach-work-grid .coach-system-card { min-height: 0; + padding: 1.05rem 1rem 1rem; + } + .coach-work-grid .coach-system-card::after { + font-size: 4.1rem; + right: .5rem; + } +} +.coach-ways-section { + position: relative; + overflow: hidden; + padding: clamp(1.55rem, 3.3vw, 2.35rem); + background: + radial-gradient(circle at 10% 14%, rgba(255,255,255,.08), transparent 16%), + radial-gradient(circle at 88% 18%, rgba(255,159,28,.26), transparent 20%), + radial-gradient(circle at 18% 84%, rgba(0,184,169,.20), transparent 22%), + radial-gradient(circle at 82% 76%, rgba(120,92,255,.24), transparent 26%), + linear-gradient(135deg, #081126 0%, #141f4c 34%, #251a6f 68%, #5f2dff 100%); + border: 1px solid rgba(255,255,255,.08); + box-shadow: 0 32px 72px rgba(6,13,31,.24); +} +.coach-ways-section::after { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; + background: + linear-gradient(120deg, rgba(255,255,255,.07), transparent 30%, transparent 70%, rgba(255,255,255,.04)), + repeating-linear-gradient(90deg, rgba(255,255,255,.04) 0 1px, transparent 1px 92px), + repeating-linear-gradient(0deg, rgba(255,255,255,.025) 0 1px, transparent 1px 92px); + opacity: .42; + pointer-events: none; +} +.coach-ways-section > .wp-block-group__inner-container { + position: relative; + z-index: 1; +} +.coach-ways-section .coach-badge { + background: rgba(255,255,255,.12); + color: #fff; + border-color: rgba(255,255,255,.16); + box-shadow: 0 12px 24px rgba(6,13,31,.16); +} +.coach-ways-section .wp-block-heading { + max-width: 13ch; + color: #fff; +} +.coach-ways-stage { + position: relative; + overflow: hidden; + margin-top: 1.35rem; + padding: clamp(1.15rem, 2.2vw, 1.55rem); + border-radius: 30px; + background: linear-gradient(180deg, rgba(255,255,255,.14), rgba(255,255,255,.05)); + border: 1px solid rgba(255,255,255,.14); + box-shadow: inset 0 1px 0 rgba(255,255,255,.10), 0 26px 56px rgba(4,10,26,.24); + backdrop-filter: blur(18px); + isolation: isolate; +} +.coach-ways-stage::before { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; + background: linear-gradient(135deg, rgba(255,255,255,.08), transparent 26%, rgba(255,159,28,.08) 62%, rgba(0,184,169,.09)); + pointer-events: none; +} +.coach-ways-stage .coach-ways-ambient[data-depth] { + will-change: transform; + transform: translate3d(0, 0, 0); +} +.coach-ways-grid { + position: relative; + z-index: 1; + display: grid; + grid-template-columns: minmax(240px, .82fr) minmax(0, 1.45fr); + gap: 1.1rem; + align-items: start; +} +.coach-ways-copy { + position: relative; + align-self: start; + padding: 1.2rem 1.15rem; + border-radius: 24px; + background: linear-gradient(180deg, rgba(9,16,38,.42), rgba(9,16,38,.20)); + border: 1px solid rgba(255,255,255,.12); + box-shadow: inset 0 1px 0 rgba(255,255,255,.06); +} +.coach-ways-kicker { + display: inline-block; + margin-bottom: .82rem; + color: rgba(255,255,255,.72); + font-size: .76rem; + font-weight: 800; + letter-spacing: .14em; + text-transform: uppercase; +} +.coach-ways-copy p { + margin: 0 0 1rem; + max-width: 31ch; + color: rgba(255,255,255,.86); +} +.coach-ways-signal-bar { + display: flex; + flex-wrap: wrap; + gap: .55rem; +} +.coach-ways-signal-bar span { + display: inline-flex; + align-items: center; + padding: .44rem .7rem; + border-radius: 999px; + background: rgba(255,255,255,.10); + border: 1px solid rgba(255,255,255,.12); + color: rgba(255,255,255,.90); + font-size: .76rem; + font-weight: 700; + letter-spacing: .02em; +} +.coach-ways-cards { + position: relative; + z-index: 1; + min-width: 0; + align-self: start; +} +.coach-ways-cards .coach-card-grid { + margin: 0; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1rem; + align-items: stretch; + grid-auto-rows: 1fr; +} +.coach-ways-section .coach-service-card { + --ways-accent: #9b7bff; + position: relative; + display: flex; + flex-direction: column; + align-self: stretch; + overflow: hidden; + padding: 1.1rem 1.05rem 1rem; + min-height: 0; + height: 100%; + background: linear-gradient(180deg, rgba(255,255,255,.18), rgba(255,255,255,.08)); + border: 1px solid rgba(255,255,255,.14); + box-shadow: 0 18px 38px rgba(4,10,26,.22); + backdrop-filter: blur(16px); +} +.coach-ways-section .coach-service-card::before { + content: ""; + position: absolute; + inset: 0 0 auto 0; + height: 4px; + background: linear-gradient(90deg, var(--ways-accent), color-mix(in srgb, var(--ways-accent) 18%, transparent)); +} +.coach-ways-section .coach-service-card::after { + content: "◌"; + position: absolute; + right: .82rem; + top: .42rem; + font-size: 4rem; + line-height: 1; + font-weight: 700; + color: color-mix(in srgb, var(--ways-accent) 42%, white 58%); + opacity: .24; + transform: rotate(-10deg); + pointer-events: none; +} +.coach-ways-section .coach-service-card:nth-child(1) { + --ways-accent: #b08dff; +} +.coach-ways-section .coach-service-card:nth-child(1)::after { + content: "◌"; +} +.coach-ways-section .coach-service-card:nth-child(2) { + --ways-accent: #23d3c0; +} +.coach-ways-section .coach-service-card:nth-child(2)::after { + content: "✦"; +} +.coach-ways-section .coach-service-card:nth-child(3) { + --ways-accent: #ffb347; +} +.coach-ways-section .coach-service-card:nth-child(3)::after { + content: "∞"; +} +.coach-ways-section .coach-service-card:hover { + transform: translateY(-4px); + border-color: color-mix(in srgb, var(--ways-accent) 44%, white 56%); + box-shadow: 0 26px 50px rgba(4,10,26,.26); +} +.coach-ways-section .coach-service-card > *, +.coach-ways-section .coach-mini-card > *, +.coach-ways-copy > * { + position: relative; + z-index: 1; +} +.coach-ways-section .coach-service-card h3, +.coach-ways-section .coach-service-card p, +.coach-ways-section .coach-service-card li, +.coach-ways-section .coach-mini-card h3, +.coach-ways-section .coach-mini-card p { + color: #fff; +} +.coach-ways-section .coach-service-card h3 { + margin-bottom: .5rem; + max-width: 10ch; + font-size: 1.08rem; +} +.coach-ways-section .coach-service-card p { + color: rgba(255,255,255,.84); +} +.coach-ways-section .coach-service-card .coach-icon-dot { + width: 2.6rem; + height: 2.6rem; + margin-bottom: .85rem; + border-radius: 14px; + background: linear-gradient(135deg, color-mix(in srgb, var(--ways-accent) 82%, white 18%), rgba(255,255,255,.96)); + color: #101634; + border: 1px solid rgba(255,255,255,.78); + box-shadow: inset 0 1px 0 rgba(255,255,255,.82), 0 12px 22px rgba(4,10,26,.16); +} +.coach-ways-section .coach-service-card ul { + list-style: none; + margin: auto 0 0; + padding: .95rem 0 0; + display: flex; + flex-wrap: wrap; + gap: .48rem; +} +.coach-ways-section .coach-service-card li { + margin: 0; + padding: .42rem .66rem; + border-radius: 999px; + background: rgba(255,255,255,.10); + border: 1px solid rgba(255,255,255,.12); + color: rgba(255,255,255,.92); + font-size: .77rem; + line-height: 1.25; +} +.coach-ways-mini-grid { + position: relative; + z-index: 1; + margin-top: clamp(1.95rem, 3.4vw, 2.45rem); + padding: clamp(1.18rem, 2.2vw, 1.45rem); + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: .9rem; + border-top: 1px solid rgba(255,255,255,.14); + border: 1px solid rgba(255,255,255,.10); + border-radius: 24px; + background: linear-gradient(180deg, rgba(8,15,35,.16), rgba(255,255,255,.04)); + box-shadow: inset 0 1px 0 rgba(255,255,255,.05); +} +.coach-ways-mini-grid .coach-mini-card { + position: relative; + overflow: hidden; + padding: 1.02rem 1rem 1rem; + background: linear-gradient(180deg, rgba(9,16,38,.34), rgba(255,255,255,.07)); + border: 1px solid rgba(255,255,255,.12); + box-shadow: 0 16px 34px rgba(4,10,26,.18); +} +.coach-ways-mini-grid .coach-mini-card::before { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(255,255,255,.06), transparent 55%); + pointer-events: none; +} +.coach-ways-mini-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 2.2rem; + height: 2.2rem; + margin-bottom: .76rem; + border-radius: 14px; + background: linear-gradient(135deg, rgba(255,255,255,.26), rgba(255,255,255,.10)); + border: 1px solid rgba(255,255,255,.18); + box-shadow: inset 0 1px 0 rgba(255,255,255,.18), 0 10px 22px rgba(4,10,26,.14); + color: #fff; + font-size: 1rem; +} +.coach-ways-mini-grid .coach-mini-card p { + color: rgba(255,255,255,.80); +} +.coach-ways-ambient { + position: absolute; + border-radius: 999px; + pointer-events: none; + z-index: 0; +} +.coach-ways-ambient-a { + top: -60px; + right: -58px; + width: 260px; + height: 260px; + background: radial-gradient(circle, rgba(255,159,28,.40), transparent 66%); + filter: blur(8px); +} +.coach-ways-ambient-b { + left: -72px; + bottom: -40px; + width: 240px; + height: 240px; + background: radial-gradient(circle, rgba(0,184,169,.30), transparent 68%); + filter: blur(10px); +} +.coach-ways-ambient-c { + left: 34%; + top: 28%; + width: 420px; + height: 420px; + background: radial-gradient(circle, rgba(255,255,255,.12), transparent 60%); + mix-blend-mode: screen; + opacity: .72; +} +@media (max-width: 960px) { + .coach-ways-grid { + grid-template-columns: 1fr; + } + .coach-ways-cards .coach-card-grid, + .coach-ways-mini-grid { + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + } + .coach-ways-copy p { + max-width: 44ch; + } +} +@media (max-width: 781px) { + .coach-ways-section { + padding: 1.25rem; + } + .coach-ways-section .wp-block-heading { + max-width: 11ch; + } + .coach-ways-stage { + padding: 1rem; + border-radius: 24px; + } + .coach-ways-cards .coach-card-grid, + .coach-ways-mini-grid { + grid-template-columns: 1fr; + } + .coach-ways-section .coach-service-card, + .coach-ways-mini-grid .coach-mini-card, + .coach-ways-copy { + padding: 1rem; + } + .coach-ways-section .coach-service-card::after { + font-size: 3.3rem; + right: .7rem; } } .coach-form-wrap { @@ -982,6 +1366,80 @@ CSS; } add_action('wp_enqueue_scripts', 'coaching_mvp_styles'); +function coaching_mvp_scripts() { + if (is_admin()) { + return; + } + + $js = <<<'JS' +(function () { + if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) { + return; + } + + const roots = document.querySelectorAll('[data-parallax-root]'); + if (!roots.length) { + return; + } + + const clamp = (value, min, max) => Math.max(min, Math.min(max, value)); + + roots.forEach((root) => { + const layers = Array.from(root.querySelectorAll('.coach-ways-ambient[data-depth]')); + if (!layers.length) { + return; + } + + const state = { mx: 0, my: 0, ticking: false }; + + const render = () => { + state.ticking = false; + const rect = root.getBoundingClientRect(); + const vh = window.innerHeight || 1; + const progress = clamp((vh * 0.58 - (rect.top + rect.height * 0.5)) / vh, -1.2, 1.2); + + layers.forEach((layer) => { + const depth = parseFloat(layer.getAttribute('data-depth') || '0'); + const moveX = state.mx * depth * 28; + const moveY = progress * depth * -88 + state.my * depth * 18; + layer.style.transform = `translate3d(${moveX.toFixed(2)}px, ${moveY.toFixed(2)}px, 0)`; + }); + }; + + const queue = () => { + if (state.ticking) { + return; + } + state.ticking = true; + window.requestAnimationFrame(render); + }; + + root.addEventListener('pointermove', (event) => { + const rect = root.getBoundingClientRect(); + state.mx = clamp((event.clientX - rect.left) / rect.width - 0.5, -0.5, 0.5); + state.my = clamp((event.clientY - rect.top) / rect.height - 0.5, -0.5, 0.5); + queue(); + }); + + root.addEventListener('pointerleave', () => { + state.mx = 0; + state.my = 0; + queue(); + }); + + window.addEventListener('scroll', queue, { passive: true }); + window.addEventListener('resize', queue); + queue(); + }); +})(); +JS; + + wp_register_script('coaching-mvp-effects', false, [], null, true); + wp_enqueue_script('coaching-mvp-effects'); + wp_add_inline_script('coaching-mvp-effects', $js); +} +add_action('wp_enqueue_scripts', 'coaching_mvp_scripts'); + function coaching_mvp_home_content() { return <<<'HTML' @@ -1059,34 +1517,54 @@ function coaching_mvp_home_content() {
Step back from the noise, identify what matters most, and lead with stronger intention.
Work through complex choices with a calm, structured process that reduces second-guessing.
Navigate promotions, role changes, pivots, and new responsibilities with more confidence.
Strengthen how you show up in conversations, meetings, feedback, and high-stakes moments.
Untangle friction, improve collaboration, and lead people with more steadiness and care.
Build more sustainable ways of working without losing ambition, standards, or momentum.
Create a consistent space for reflection, accountability, and practical growth over time.
Step back from the noise, identify what matters most, and lead with stronger intention.
Work through complex choices with a calm, structured process that reduces second-guessing.
Navigate promotions, role changes, pivots, and new responsibilities with more confidence.
Strengthen how you show up in conversations, meetings, feedback, and high-stakes moments.
Untangle friction, improve collaboration, and lead people with more steadiness and care.
Build more sustainable ways of working without losing ambition, standards, or momentum.
Create a consistent space for reflection, accountability, and practical growth over time.
Ways to work together
+ +Ways to work together
Instead of one generic offer, this section helps visitors feel the difference between exploration, quick traction, and a longer-term coaching rhythm.
+ +Start with a low-pressure call if you want to explore fit, goals, and what kind of support would help most.
Book a deeper session when you need clarity around a decision, transition, or leadership challenge.
Choose a longer-term rhythm if you want reflection, accountability, and steady progress over time.
Start with a low-pressure call if you want to explore fit, goals, and what kind of support would help most.
Book a deeper session when you need clarity around a decision, transition, or leadership challenge.
Choose a longer-term rhythm if you want reflection, accountability, and steady progress over time.