diff --git a/apps/web/src/components/Header.astro b/apps/web/src/components/Header.astro index d3e9395e1..362fc08dd 100644 --- a/apps/web/src/components/Header.astro +++ b/apps/web/src/components/Header.astro @@ -17,7 +17,7 @@ const locale = Astro.locals.locale aria-label={m.capgo_home({}, { locale: Astro.locals.locale })} class="font-prompt flex items-center pr-3 text-4xl font-medium" > - {`${brand} +
diff --git a/apps/web/src/components/Hero.astro b/apps/web/src/components/Hero.astro index 2a697f668..aa249eb3e 100644 --- a/apps/web/src/components/Hero.astro +++ b/apps/web/src/components/Hero.astro @@ -217,7 +217,7 @@ const ctaSubtext = `${m.days_free_trial({}, { locale: Astro.locals.locale })}. $
-
+
diff --git a/apps/web/src/css/global.css b/apps/web/src/css/global.css index 5c2f1411b..513ca7130 100644 --- a/apps/web/src/css/global.css +++ b/apps/web/src/css/global.css @@ -259,6 +259,187 @@ body, overflow: auto; border-spacing: 0; } + +/* Shared refresh for product and solution pages. + Lighten only neutral sections; explicit dark sections keep their own contrast. */ +.marketing-refresh { + background: #f9fafb; + color: #111827; +} + +.marketing-refresh > main { + background: #f9fafb; +} + +.marketing-refresh main section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) { + background-color: #f9fafb; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where( + h1.text-white, + h2.text-white, + h2.text-gray-100, + h2.text-gray-200, + h2.text-gray-300, + h3.text-white, + h3.text-gray-100, + h3.text-gray-200, + h3.text-gray-300, + h4.text-white, + h4.text-gray-100, + h4.text-gray-200, + h4.text-gray-300 + ) { + color: #111827 !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(p.text-gray-300, p.text-gray-400, li.text-gray-300, li.text-gray-400, span.text-gray-300, span.text-gray-400, div.text-gray-300, div.text-gray-400) { + color: #4b5563 !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(span.text-white, span.text-gray-100, span.text-gray-200, div.text-white, div.text-gray-100, div.text-gray-200) { + color: #111827 !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(.text-blue-100, .text-blue-200, .text-sky-100, .text-sky-200, .text-emerald-100, .text-emerald-200, .text-green-100, .text-green-200) { + color: #1d4ed8 !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(svg.text-white, svg.text-gray-300, svg.text-gray-400) { + color: #1d4ed8 !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(.border-gray-800, .border-gray-700, .border-gray-600, .border-white\/10, .border-white\/15) { + border-color: #d1d5db !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(.bg-gray-900\/40, .bg-gray-900\/50, .bg-gray-800\/40, .bg-gray-800\/50, .bg-white\/5) { + background-color: #ffffff !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(a.border-gray-600, a.border-white\/15, a.border-white\/30, a.bg-white\/5):not(:hover):not(:focus-visible) { + border-color: #d1d5db !important; + color: #111827 !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(a.border-gray-600, a.border-white\/15, a.border-white\/30, a.bg-white\/5):hover { + color: #111827 !important; +} + +.marketing-refresh main section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) :where(input, select, textarea) { + border-color: #d1d5db !important; + background-color: #ffffff !important; + color: #111827 !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where(input::placeholder, textarea::placeholder) { + color: #6b7280 !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + [data-refresh-dark] + :where(h1.text-white, h2.text-white, h3.text-white, h4.text-white, span.text-white, div.text-white) { + color: #ffffff !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + [data-refresh-dark] + :where(p.text-gray-300, p.text-gray-400, li.text-gray-300, li.text-gray-400, span.text-gray-300, span.text-gray-400, div.text-gray-300, div.text-gray-400) { + color: #9ca3af !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where([class*='bg-gray-9'], [class*='bg-slate-9'], [class*='bg-zinc-9'], [class*='bg-[#']], [data-refresh-dark]) + :where(h1.text-white, h2.text-white, h3.text-white, h4.text-white, span.text-white, div.text-white) { + color: #ffffff !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where([class*='bg-gray-9'], [class*='bg-slate-9'], [class*='bg-zinc-9'], [class*='bg-[#']], [data-refresh-dark]) + :where(p.text-gray-300, p.text-gray-400, li.text-gray-300, li.text-gray-400, span.text-gray-300, span.text-gray-400, div.text-gray-300, div.text-gray-400) { + color: #9ca3af !important; +} + +.marketing-refresh + main + section:not([class*='bg-gray-9']):not([class*='bg-slate-9']):not([class*='bg-zinc-9']):not([class*='bg-[#']]) + :where([class*='bg-gray-9'], [class*='bg-slate-9'], [class*='bg-zinc-9'], [class*='bg-[#']], [data-refresh-dark]) + :where(svg.text-white, svg.text-gray-300, svg.text-gray-400) { + color: #9ca3af !important; +} + +.marketing-refresh header :where(.text-slate-100, .text-slate-200, .text-gray-300) { + color: #4b5563 !important; +} + +.marketing-refresh header .site-logo { + filter: invert(1) brightness(0.35) contrast(1.4); +} + +.marketing-refresh header :where(a.bg-slate-800\/80) { + background-color: #111827 !important; + border-color: #111827 !important; + color: #ffffff !important; +} + +.marketing-refresh header :where(a.bg-slate-800\/80 svg, a.bg-slate-800\/80 span) { + color: #ffffff !important; +} + +.marketing-refresh header :where(.bg-slate-800\/95, .bg-white\/5) { + background-color: rgb(255 255 255 / 0.95) !important; +} + +.marketing-refresh header :where(button.text-white, #mobile-menu a.text-white, #mobile-menu button.text-white) { + color: #111827 !important; +} + +.marketing-refresh header :where(.hover\:bg-white\/10:hover, .hover\:bg-slate-700:hover, .hover\:bg-gray-700:hover) { + background-color: #f3f4f6 !important; +} + +.marketing-refresh header :where(.hover\:text-white:hover) { + color: #111827 !important; +} + .blog.prose :is(th, td):not(:where(.not-content *)) { border-bottom: 1px solid var(--color-gray-700); padding: 0.5rem 1rem; diff --git a/apps/web/src/layouts/Layout.astro b/apps/web/src/layouts/Layout.astro index 98aa7d619..c0f917786 100644 --- a/apps/web/src/layouts/Layout.astro +++ b/apps/web/src/layouts/Layout.astro @@ -8,6 +8,7 @@ import globalStylesHref from '../css/global.css?url' const content = Astro.props.content ?? {} const disableThirdPartyScripts = Astro.props.disableThirdPartyScripts ?? false +const pageStyle = Astro.props.pageStyle ?? '' const isLocalhost = Astro.url.origin.includes('localhost:') const enableThirdPartyScripts = !isLocalhost && !disableThirdPartyScripts @@ -30,7 +31,7 @@ const enableThirdPartyScripts = !isLocalhost && !disableThirdPartyScripts > Skip to main content -
+
diff --git a/apps/web/src/pages/app_mobile.astro b/apps/web/src/pages/app_mobile.astro index d78d97bc1..8983925a1 100644 --- a/apps/web/src/pages/app_mobile.astro +++ b/apps/web/src/pages/app_mobile.astro @@ -13,7 +13,7 @@ const content = { } --- - +
diff --git a/apps/web/src/pages/ci_cd.astro b/apps/web/src/pages/ci_cd.astro index 0485b420f..738bf7b53 100644 --- a/apps/web/src/pages/ci_cd.astro +++ b/apps/web/src/pages/ci_cd.astro @@ -19,15 +19,15 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso }) --- - +
-
-
+
+
-
- +
+

+

Still Building iOS & Android
Apps Manually?

@@ -48,10 +48,10 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso

-
-

+
+

What if builds happened automatically on every commit? -

+

Expert CI/CD setup for native mobile apps. Automated iOS & Android builds, signing, and distribution. No more manual build processes.

@@ -59,25 +59,26 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
-
-
+
+
-

The Native Build Nightmare

+

The Native Build Nightmare

Every mobile developer knows the pain of manual builds. Here's how professional CI/CD setup solves it forever.

-
+
-
-
-
- +
+
+
+
-
- +
+
@@ -132,8 +133,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
- +
+
@@ -144,8 +145,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
- +
+
@@ -156,8 +157,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
- +
+
@@ -168,8 +169,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-

Result: Slow releases, team bottlenecks, wasted developer time

+
+

Result: Slow releases, team bottlenecks, wasted developer time

@@ -177,10 +178,10 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
-
- +
+
+
+
@@ -189,8 +190,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
- +
+
@@ -201,8 +202,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
- +
+
@@ -213,8 +214,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
- +
+
@@ -225,8 +226,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
- +
+
@@ -237,8 +238,8 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-

Result: Efficient team, reliable builds, faster release cycles

+
+

Result: Efficient team, reliable builds, faster release cycles

@@ -247,9 +248,9 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso

Works with your existing CI/CD setup

-
+
- + GitHub Actions
- + GitLab CI
- Jenkins + Jenkins
- CircleCI + CircleCI
@@ -281,10 +282,10 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
+
+
-

+

From Code to App Stores Automatically

@@ -295,7 +296,7 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso

-
+
1

Professional Setup

@@ -309,7 +310,7 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
+
2

Push Code, Get Builds

@@ -321,7 +322,7 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
+
3

Deploy to Stores Seamlessly

@@ -334,24 +335,24 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
+

How much time are you wasting on manual builds?

Every manual build is hours of developer time lost. Inconsistent environments cause bugs that take days to debug. Your team's productivity is suffering.

-
+
Start Automating Builds - + @@ -362,28 +363,28 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
+
+
-

Watch Your Apps Build Automatically

+

Watch Your Apps Build Automatically

Push code and watch as CI/CD handles everything - from building to signing to deployment

-
+
-
-
+
+
-
-
-
+
+
+
iOS Build - GitHub Actions
- + Running @@ -437,18 +438,18 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
+
+
-
-
-
+
+
+
Android Build - GitLab CI
- + Running @@ -498,16 +499,16 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
+
+
0
Manual Steps Required
-
+
100%
Build Success Rate
-
+
5 min
Average Build Time
@@ -516,21 +517,21 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
+
+
-

Why Automate with CI/CD?

+

Why Automate with CI/CD?

Transform your mobile deployment workflow with these powerful benefits

-
-
-
-
-
- +
+
+
+
+
+
@@ -538,7 +539,7 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso

Push code and get native iOS and Android builds automatically. No manual Xcode or Android Studio required - builds run in the cloud.

- + Build iOS apps without owning a Mac @@ -547,12 +548,12 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
-
-
-
- +
+
+
+
+
+
@@ -560,7 +561,7 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso

Updates happen in the background while your app is running. Users never experience interruptions or forced updates.

- + Seamless background installation @@ -569,12 +570,12 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
-
-
-
- +
+
+
+
+
+

Only deploy when tests pass. Integrate with your existing test suites and quality checks for bulletproof releases.

- + Deploy only when tests pass @@ -595,12 +596,12 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
-
-
-
- +
+
+
+
+
+
- + Complete build history and artifact storage @@ -626,18 +627,18 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
+
+
-

Advanced CI/CD Features

+

Advanced CI/CD Features

Take your deployment strategy to the next level with these powerful features

-
-
- +
+
+
  • - + Branch-based deployments
  • - + Environment-specific channels
  • - + Conditional deployments @@ -670,9 +671,9 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
- +
+
+
  • - + Percentage-based rollouts
  • - + Automatic halt on errors
  • - + Metrics-based decisions @@ -706,9 +707,9 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
- +
+
+
@@ -716,19 +717,19 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso

Full API access for custom integrations. Build your own deployment tools or integrate with existing systems.

  • - + Complete REST API
  • - + Custom integrations
  • - + Webhook notifications @@ -740,17 +741,17 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
+
-
-
-
+
+
+
-
+
-
- +
+
+
-
-
-
- +
+
+
+
@@ -789,10 +790,10 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
-
- +
+
+
+
-
+
+
-
Most Popular
+
Most Popular
-
- +
+

Platform Independence

- Adapt configuration to your infrastructure. Own the complete pipeline, modify anytime - zero vendor lock-in, pay your - provider directly. + Adapt configuration to your infrastructure. Own the complete pipeline, modify anytime - zero vendor lock-in, pay your provider + directly.

-
-
-
- +
+
+
+
-
- +
+
+
@@ -862,10 +863,10 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
+
-
- +
+
+
-
+
Managed Solutions
$499/month
Appflow or similar
-
-
- Best Value +
+
+ Best Value
Our Setup - You Own It
$2,600 + $30/mo
@@ -896,31 +897,32 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
+
5-Year Savings
$25,340
Massive cost reduction
-
+

One-time setup fee of $2,600 saves you $25,340+ over 5 years vs managed solutions.

Own your setup with zero vendor lock-in

Break even in just 6 months, then pure savings.

-
+
+ > +
Get Started Today - + @@ -932,31 +934,32 @@ const ldJSON = createLdJsonGraph(Astro.locals.runtimeConfig.public, serviceLdJso
-
-
+
+
-

Ready to Automate Your Native Builds?

+

Ready to Automate Your Native Builds?

Stop wasting time on manual builds. Get professional CI/CD setup for iOS and Android apps.

-
-