diff --git a/apps/site/package.json b/apps/site/package.json index c9d6de8357..e6f11eface 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -22,10 +22,15 @@ "next": "catalog:", "npm-to-yarn": "catalog:", "posthog-js": "catalog:", + "prop-types": "^15.8.1", "react": "catalog:", + "react-animated-numbers": "^1.1.1", "react-dom": "catalog:", + "react-intersection-observer": "^10.0.3", + "react-responsive-masonry": "^2.7.1", "react-tweet": "catalog:", "remark-directive": "catalog:", + "swiper": "^12.1.3", "tailwind-merge": "catalog:", "three": "^0.183.2", "zod": "catalog:" diff --git a/apps/site/public/illustrations/careers/hero_lines.svg b/apps/site/public/illustrations/careers/hero_lines.svg new file mode 100644 index 0000000000..a8ad4a66c5 --- /dev/null +++ b/apps/site/public/illustrations/careers/hero_lines.svg @@ -0,0 +1 @@ + diff --git a/apps/site/public/illustrations/careers/hero_lines_light.svg b/apps/site/public/illustrations/careers/hero_lines_light.svg new file mode 100644 index 0000000000..712fdfeb58 --- /dev/null +++ b/apps/site/public/illustrations/careers/hero_lines_light.svg @@ -0,0 +1 @@ + diff --git a/apps/site/public/illustrations/careers/hero_lines_mobile.svg b/apps/site/public/illustrations/careers/hero_lines_mobile.svg new file mode 100644 index 0000000000..9cb08199fc --- /dev/null +++ b/apps/site/public/illustrations/careers/hero_lines_mobile.svg @@ -0,0 +1 @@ + diff --git a/apps/site/public/illustrations/careers/hero_lines_mobile_light.svg b/apps/site/public/illustrations/careers/hero_lines_mobile_light.svg new file mode 100644 index 0000000000..da85bb094f --- /dev/null +++ b/apps/site/public/illustrations/careers/hero_lines_mobile_light.svg @@ -0,0 +1 @@ + diff --git a/apps/site/public/illustrations/careers/world_map_dots.svg b/apps/site/public/illustrations/careers/world_map_dots.svg new file mode 100644 index 0000000000..a035d77f26 --- /dev/null +++ b/apps/site/public/illustrations/careers/world_map_dots.svg @@ -0,0 +1 @@ + diff --git a/apps/site/public/photos/careers/masonry_1.webp b/apps/site/public/photos/careers/masonry_1.webp new file mode 100644 index 0000000000..b6cf2067a8 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_1.webp differ diff --git a/apps/site/public/photos/careers/masonry_10.webp b/apps/site/public/photos/careers/masonry_10.webp new file mode 100644 index 0000000000..880a8cd88e Binary files /dev/null and b/apps/site/public/photos/careers/masonry_10.webp differ diff --git a/apps/site/public/photos/careers/masonry_11.webp b/apps/site/public/photos/careers/masonry_11.webp new file mode 100644 index 0000000000..476afdda58 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_11.webp differ diff --git a/apps/site/public/photos/careers/masonry_12.webp b/apps/site/public/photos/careers/masonry_12.webp new file mode 100644 index 0000000000..fd96a215dc Binary files /dev/null and b/apps/site/public/photos/careers/masonry_12.webp differ diff --git a/apps/site/public/photos/careers/masonry_13.webp b/apps/site/public/photos/careers/masonry_13.webp new file mode 100644 index 0000000000..4e91cb7fde Binary files /dev/null and b/apps/site/public/photos/careers/masonry_13.webp differ diff --git a/apps/site/public/photos/careers/masonry_14.webp b/apps/site/public/photos/careers/masonry_14.webp new file mode 100644 index 0000000000..6d77a1a28b Binary files /dev/null and b/apps/site/public/photos/careers/masonry_14.webp differ diff --git a/apps/site/public/photos/careers/masonry_2.webp b/apps/site/public/photos/careers/masonry_2.webp new file mode 100644 index 0000000000..470c9a7056 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_2.webp differ diff --git a/apps/site/public/photos/careers/masonry_3.webp b/apps/site/public/photos/careers/masonry_3.webp new file mode 100644 index 0000000000..226f54c83d Binary files /dev/null and b/apps/site/public/photos/careers/masonry_3.webp differ diff --git a/apps/site/public/photos/careers/masonry_4.webp b/apps/site/public/photos/careers/masonry_4.webp new file mode 100644 index 0000000000..340e3ba9b3 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_4.webp differ diff --git a/apps/site/public/photos/careers/masonry_5.webp b/apps/site/public/photos/careers/masonry_5.webp new file mode 100644 index 0000000000..1529ae0632 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_5.webp differ diff --git a/apps/site/public/photos/careers/masonry_6.webp b/apps/site/public/photos/careers/masonry_6.webp new file mode 100644 index 0000000000..b7dee77a23 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_6.webp differ diff --git a/apps/site/public/photos/careers/masonry_7.webp b/apps/site/public/photos/careers/masonry_7.webp new file mode 100644 index 0000000000..8cda9187e6 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_7.webp differ diff --git a/apps/site/public/photos/careers/masonry_8.webp b/apps/site/public/photos/careers/masonry_8.webp new file mode 100644 index 0000000000..f1e4baf899 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_8.webp differ diff --git a/apps/site/public/photos/careers/masonry_9.webp b/apps/site/public/photos/careers/masonry_9.webp new file mode 100644 index 0000000000..ee8c5a63d7 Binary files /dev/null and b/apps/site/public/photos/careers/masonry_9.webp differ diff --git a/apps/site/src/app/careers/page.tsx b/apps/site/src/app/careers/page.tsx new file mode 100644 index 0000000000..817ce950a7 --- /dev/null +++ b/apps/site/src/app/careers/page.tsx @@ -0,0 +1,340 @@ +import Antigravity from "../../components/homepage/antigravity"; +import type { Metadata } from "next"; +import { + SITE_HOME_DESCRIPTION, + SITE_HOME_TITLE, +} from "../../lib/blog-metadata"; +import { Action, Button } from "@prisma/eclipse"; +import { CardSection } from "@/components/homepage/card-section/card-section"; +import review from "../../data/homepage.json"; +import { StatsList } from "@/components/careers/stats-list"; +import { Testimonials } from "@/components/careers/testimonials"; + +import MasonryPict from "@/components/careers/masonry-client"; +import { Flexible } from "@/components/careers/Flexible"; +import { Challenges } from "@/components/careers/Challenges"; +import { WorldMap } from "@/components/careers/WorldMap"; +import { OpenRoles } from "@/components/careers/open-roles"; + +const benefits = [ + { + icon: "fa-regular fa-arrow-trend-up", + text: "Stock options package with a maximum exercise period of 10 years after grant", + }, + { + icon: "fa-regular fa-hand-holding-dollar", + text: "Generous recurring tech budget and subsidy for an ergonomic chair", + }, + { + icon: "fa-regular fa-sunglasses", + text: "24 vacation days per year in addition to sick leave and public holidays", + }, + { + icon: "fa-regular fa-baby-carriage", + text: "20 weeks paid parental leave and 10 days paid time off per year in the event of the sickness of your child", + }, + { + icon: "fa-regular fa-head-side-medical", + text: "4 mental health days per year", + }, + { + icon: "fa-regular fa-star", + text: "6-week paid sabbatical leave after three years", + }, + { + icon: "fa-regular fa-lamp-desk", + text: "Access to co-working spaces in your area", + }, + { + icon: "fa-regular fa-headset", + text: "Dedicated People and Operations team", + }, + { + icon: "fa-regular fa-island-tropical", + text: "Two company offsites each year", + }, + { + icon: "fa-regular fa-heart-pulse", + text: "[US] 401K matching as well as medical, dental, and vision cover", + }, +]; + +const careerTestimonials = [ + { + body: "Thanks to Prisma's wide adoption, I get to tackle interesting challenges while also being exposed to the newest tech in the JavaScript world.", + author: { + name: "Pierre-Antoine Mills", + title: "Senior Software Engineer", + }, + }, + { + body: "Working at Prisma is amazing. We support each other, working side by side to tackle challenges and celebrate wins together.", + author: { + name: "Tatiana Inama", + title: "Software Engineer", + }, + }, + { + body: "At Prisma, everyone cares deeply about the mission and has no problem helping each other out, even if it's outside of their team or scope.", + author: { + name: "Carla Goncalves", + title: "Web Developer", + }, + }, +]; + +const twoCol = [ + { + content: ( + <> +

+ Solve challenging
technical problems +

+

+ Prisma is building the data access layer for modern applications. If + you're drawn to the technology powering large companies but desire the + challenges and freedom of a startup, then consider joining us. +

+ + ), + imageUrl: null, + imageAlt: null, + mobileImageUrl: null, + mobileImageAlt: null, + otherAsset: , + logos: null, + useDefaultLogos: true, + visualPosition: "right" as const, + visualType: "other" as const, + }, + { + content: ( + <> +

+ Flexible work environment +

+

+ We offer flexible working hours and generous paid time off to + accommodate different lifestyles and responsibilities. As long as it + suits your team, you have the freedom to build your work schedule + around your life. +

+ + ), + imageUrl: null, + imageAlt: null, + mobileImageUrl: null, + mobileImageAlt: null, + otherAsset: , + logos: null, + useDefaultLogos: false, + visualPosition: "left" as const, + visualType: "other" as const, + }, + { + content: ( + <> +

+ Flexible remote organization +

+

+ Our team is globally distributed and everyone can work from any + location within the UTC -5 to UTC +3 timezones. We want you to choose + wherever you are happiest and most productive. +

+ + ), + imageUrl: null, + imageAlt: null, + mobileImageUrl: null, + mobileImageAlt: null, + otherAsset: , + logos: null, + useDefaultLogos: false, + visualPosition: "right" as const, + visualType: "other" as const, + }, +]; + +const statsList = [ + { head: "45", sub: "Team Members" }, + { head: "16", sub: "Countries" }, + { head: "100", sub: "Remote" }, +]; + +const masonryImages = [ + { imageUrl: "/photos/careers/masonry_1.webp", imageAlt: "Masonry 1" }, + { imageUrl: "/photos/careers/masonry_2.webp", imageAlt: "Masonry 2" }, + { imageUrl: "/photos/careers/masonry_3.webp", imageAlt: "Masonry 3" }, + { imageUrl: "/photos/careers/masonry_4.webp", imageAlt: "Masonry 4" }, + { imageUrl: "/photos/careers/masonry_5.webp", imageAlt: "Masonry 5" }, + { imageUrl: "/photos/careers/masonry_10.webp", imageAlt: "Masonry 10" }, + { imageUrl: "/photos/careers/masonry_6.webp", imageAlt: "Masonry 6" }, + { imageUrl: "/photos/careers/masonry_7.webp", imageAlt: "Masonry 7" }, + { imageUrl: "/photos/careers/masonry_8.webp", imageAlt: "Masonry 8" }, + { imageUrl: "/photos/careers/masonry_9.webp", imageAlt: "Masonry 9" }, + { imageUrl: "/photos/careers/masonry_14.webp", imageAlt: "Masonry 14" }, + { imageUrl: "/photos/careers/masonry_11.webp", imageAlt: "Masonry 11" }, + { imageUrl: "/photos/careers/masonry_12.webp", imageAlt: "Masonry 12" }, + { imageUrl: "/photos/careers/masonry_13.webp", imageAlt: "Masonry 13" }, +]; + +export const metadata: Metadata = { + title: SITE_HOME_TITLE, + description: SITE_HOME_DESCRIPTION, +}; + +export default function Careers() { + return ( +
+
+
+ Hero lines + Hero lines +
+
+

+ Join Prisma +

+

+ Help us empower developers to build data-driven applications. +

+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+

+ Why Prisma? +

+
+ +
+
+
+
+
+
+

+ Working at Prisma +

+
+ +
+
+
+
+
+
+
+
+

+ Our Values +

+

+ At Prisma, we believe that our company values are essential to + our success. They guide us in our daily work, helping us to + thrive and creating an environment where team members can grow + and collaborate effectively. +

+ + {/* Values Grid */} +
+ {/* Transparency */} +
+ + + +

+ Transparency +

+
+ + {/* Curiosity */} +
+ + + +

+ Curiosity +

+
+ + {/* Solidarity */} +
+ + + +

Solidarity

+
+ + {/* Accountability */} +
+ + + +

Accountability

+
+
+
+
+
+
+
+
+
+

+ Benefits +

+
+ {benefits.map((benefit, index) => ( +
+ +

+

+ ))} +
+
+
+
+
+ +
+
+
+ ); +} diff --git a/apps/site/src/app/global.css b/apps/site/src/app/global.css index 799fd38d4c..45f3d10f63 100644 --- a/apps/site/src/app/global.css +++ b/apps/site/src/app/global.css @@ -192,3 +192,7 @@ body { .running { animation-play-state: running; } + +.swiper-button-prev { + top: 100% !important; +} diff --git a/apps/site/src/app/layout.tsx b/apps/site/src/app/layout.tsx index 516c4a97f7..834e510001 100644 --- a/apps/site/src/app/layout.tsx +++ b/apps/site/src/app/layout.tsx @@ -6,7 +6,7 @@ import type { Metadata } from "next"; import Script from "next/script"; import type React from "react"; import { SITE_HOME_DESCRIPTION, SITE_HOME_TITLE } from "@/lib/blog-metadata"; -import { WebNavigation } from "@prisma-docs/ui/components/web-navigation"; +import { NavigationWrapper } from "@/components/navigation-wrapper"; import { Footer } from "@prisma-docs/ui/components/footer"; import { ThemeProvider } from "@prisma-docs/ui/components/theme-provider"; import { FontAwesomeScript as WebFA } from "@prisma/eclipse"; @@ -154,7 +154,7 @@ export default function Layout({ children }: { children: React.ReactNode }) {
- diff --git a/apps/site/src/components/careers/Challenges.tsx b/apps/site/src/components/careers/Challenges.tsx new file mode 100644 index 0000000000..645798c01e --- /dev/null +++ b/apps/site/src/components/careers/Challenges.tsx @@ -0,0 +1,453 @@ +"use client"; + +import { cn } from "@/lib/cn"; + +import { InView } from "react-intersection-observer"; + +import styles from "./challenges.module.css"; + +export const Challenges = () => ( + + {({ inView, ref }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + )} + +); diff --git a/apps/site/src/components/careers/Flexible.tsx b/apps/site/src/components/careers/Flexible.tsx new file mode 100644 index 0000000000..898ff4de6a --- /dev/null +++ b/apps/site/src/components/careers/Flexible.tsx @@ -0,0 +1,446 @@ +"use client"; + +import { cn } from "@/lib/cn"; +import { InView } from "react-intersection-observer"; + +import styles from "./flexible.module.css"; + +export const Flexible = () => ( + + {({ inView, ref }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + )} + +); diff --git a/apps/site/src/components/careers/WorldMap.tsx b/apps/site/src/components/careers/WorldMap.tsx new file mode 100644 index 0000000000..cfffaa4886 --- /dev/null +++ b/apps/site/src/components/careers/WorldMap.tsx @@ -0,0 +1,164 @@ +"use client"; + +import { cn } from "@/lib/cn"; +import { InView } from "react-intersection-observer"; + +import styles from "./worldmap.module.css"; + +export const WorldMap = () => ( + + {({ inView, ref }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + )} + +); diff --git a/apps/site/src/components/careers/challenges.module.css b/apps/site/src/components/careers/challenges.module.css new file mode 100644 index 0000000000..498025217b --- /dev/null +++ b/apps/site/src/components/careers/challenges.module.css @@ -0,0 +1,530 @@ +.challenges .svg-elem-1 { + stroke-dashoffset: 1529.88134765625px; + stroke-dasharray: 1529.88134765625px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.2s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.2s; +} + +.challenges.active .svg-elem-1 { + stroke-dashoffset: 0; + fill: rgb(195, 218, 254); +} + +.challenges .svg-elem-2 { + stroke-dashoffset: 1372.8411865234375px; + stroke-dasharray: 1372.8411865234375px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.12s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.30000000000000004s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.12s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.30000000000000004s; +} + +.challenges.active .svg-elem-2 { + stroke-dashoffset: 0; + fill: rgb(255, 255, 255); +} + +.challenges .svg-elem-3 { + stroke-dashoffset: 1053.705810546875px; + stroke-dasharray: 1053.705810546875px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.24s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.4s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.24s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.4s; +} + +.challenges.active .svg-elem-3 { + stroke-dashoffset: 0; + fill: rgb(235, 244, 255); +} + +.challenges .svg-elem-4 { + stroke-dashoffset: 2942.565185546875px; + stroke-dasharray: 2942.565185546875px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.36s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.5s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.36s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.5s; +} + +.challenges.active .svg-elem-4 { + stroke-dashoffset: 0; + fill: rgb(127, 156, 245); +} + +.challenges .svg-elem-5 { + stroke-dashoffset: 169.56085205078125px; + stroke-dasharray: 169.56085205078125px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.48s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.6000000000000001s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.48s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.6000000000000001s; +} + +.challenges.active .svg-elem-5 { + stroke-dashoffset: 0; + fill: rgb(90, 103, 216); +} + +.challenges .svg-elem-6 { + stroke-dashoffset: 1143.3350830078125px; + stroke-dasharray: 1143.3350830078125px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.6s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.7s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.6s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.7s; +} + +.challenges.active .svg-elem-6 { + stroke-dashoffset: 0; + fill: rgb(102, 126, 234); +} + +.challenges .svg-elem-7 { + stroke-dashoffset: 1032.414306640625px; + stroke-dasharray: 1032.414306640625px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.72s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.8s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.72s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.8s; +} + +.challenges.active .svg-elem-7 { + stroke-dashoffset: 0; + fill: rgb(163, 191, 250); +} + +.challenges .svg-elem-8 { + stroke-dashoffset: 1769.95703125px; + stroke-dasharray: 1769.95703125px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.84s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.9000000000000001s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.84s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.9000000000000001s; +} + +.challenges.active .svg-elem-8 { + stroke-dashoffset: 0; + fill: rgb(251, 182, 206); +} + +.challenges .svg-elem-9 { + stroke-dashoffset: 552.1782836914062px; + stroke-dasharray: 552.1782836914062px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.96s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.96s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1s; +} + +.challenges.active .svg-elem-9 { + stroke-dashoffset: 0; + fill: rgb(195, 218, 254); +} + +.challenges .svg-elem-10 { + stroke-dashoffset: 134.1371307373047px; + stroke-dasharray: 134.1371307373047px; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.08s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.1s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.08s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.1s; +} + +.challenges.active .svg-elem-10 { + stroke-dashoffset: 0; +} + +.challenges .svg-elem-11 { + stroke-dashoffset: 683.621826171875px; + stroke-dasharray: 683.621826171875px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.2s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.2s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.2s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.2s; +} + +.challenges.active .svg-elem-11 { + stroke-dashoffset: 0; + fill: rgb(255, 255, 255); +} + +.challenges .svg-elem-12 { + stroke-dashoffset: 677.33837890625px; + stroke-dasharray: 677.33837890625px; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 1.3199999999999998s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.3s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 1.3199999999999998s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.3s; +} + +.challenges.active .svg-elem-12 { + stroke-dashoffset: 0; +} + +.challenges .svg-elem-13 { + stroke-dashoffset: 410.9504699707031px; + stroke-dasharray: 410.9504699707031px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.44s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.4000000000000001s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.44s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.4000000000000001s; +} + +.challenges.active .svg-elem-13 { + stroke-dashoffset: 0; + fill: rgb(90, 103, 216); +} + +.challenges .svg-elem-14 { + stroke-dashoffset: 555.005126953125px; + stroke-dasharray: 555.005126953125px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.56s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.5s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.56s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.5s; +} + +.challenges.active .svg-elem-14 { + stroke-dashoffset: 0; + fill: rgb(127, 156, 245); +} + +.challenges .svg-elem-15 { + stroke-dashoffset: 66.31169128417969px; + stroke-dasharray: 66.31169128417969px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.68s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.6s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.68s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.6s; +} + +.challenges.active .svg-elem-15 { + stroke-dashoffset: 0; + fill: rgb(76, 81, 191); +} + +.challenges .svg-elem-16 { + stroke-dashoffset: 259.47210693359375px; + stroke-dasharray: 259.47210693359375px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 1.7999999999999998s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.7s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 1.7999999999999998s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.7s; +} + +.challenges.active .svg-elem-16 { + stroke-dashoffset: 0; + fill: url("#paint0_linear_10603_99257"); +} + +.challenges .svg-elem-17 { + stroke-dashoffset: 244.95346070680176px; + stroke-dasharray: 244.95346070680176px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.92s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.8s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.92s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.8s; +} + +.challenges.active .svg-elem-17 { + stroke-dashoffset: 0; + fill: url("#paint1_linear_10603_99257"); +} + +.challenges .svg-elem-18 { + stroke-dashoffset: 244.95346070680176px; + stroke-dasharray: 244.95346070680176px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.04s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.9000000000000001s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.04s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 1.9000000000000001s; +} + +.challenges.active .svg-elem-18 { + stroke-dashoffset: 0; + fill: url("#paint2_radial_10603_99257"); +} + +.challenges .svg-elem-19 { + stroke-dashoffset: 235.6334991455078px; + stroke-dasharray: 235.6334991455078px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.16s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.16s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2s; +} + +.challenges.active .svg-elem-19 { + stroke-dashoffset: 0; + fill: url("#paint3_linear_10603_99257"); +} + +.challenges .svg-elem-20 { + stroke-dashoffset: 235.6334991455078px; + stroke-dasharray: 235.6334991455078px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.28s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.1s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.28s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.1s; +} + +.challenges.active .svg-elem-20 { + stroke-dashoffset: 0; + fill: rgb(198, 212, 219); +} + +.challenges .svg-elem-21 { + stroke-dashoffset: 235.63282775878906px; + stroke-dasharray: 235.63282775878906px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.4s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.2s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.4s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.2s; +} + +.challenges.active .svg-elem-21 { + stroke-dashoffset: 0; + fill: url("#paint4_linear_10603_99257"); +} + +.challenges .svg-elem-22 { + stroke-dashoffset: 257.1722412109375px; + stroke-dasharray: 257.1722412109375px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.52s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.3000000000000003s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.52s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.3000000000000003s; +} + +.challenges.active .svg-elem-22 { + stroke-dashoffset: 0; + fill: url("#paint5_linear_10603_99257"); +} + +.challenges .svg-elem-23 { + stroke-dashoffset: 246.95118600939742px; + stroke-dasharray: 246.95118600939742px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 2.6399999999999997s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.4000000000000004s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 2.6399999999999997s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.4000000000000004s; +} + +.challenges.active .svg-elem-23 { + stroke-dashoffset: 0; + fill: url("#paint6_linear_10603_99257"); +} + +.challenges .svg-elem-24 { + stroke-dashoffset: 246.95118600939742px; + stroke-dasharray: 246.95118600939742px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.76s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.5000000000000004s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.76s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.5000000000000004s; +} + +.challenges.active .svg-elem-24 { + stroke-dashoffset: 0; + fill: url("#paint7_radial_10603_99257"); +} + +.challenges .svg-elem-25 { + stroke-dashoffset: 237.57220458984375px; + stroke-dasharray: 237.57220458984375px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.88s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.6000000000000005s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.88s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.6000000000000005s; +} + +.challenges.active .svg-elem-25 { + stroke-dashoffset: 0; + fill: url("#paint8_linear_10603_99257"); +} + +.challenges .svg-elem-26 { + stroke-dashoffset: 237.57220458984375px; + stroke-dasharray: 237.57220458984375px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.7s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.7s; +} + +.challenges.active .svg-elem-26 { + stroke-dashoffset: 0; + fill: rgb(198, 212, 219); +} + +.challenges .svg-elem-27 { + stroke-dashoffset: 237.5701904296875px; + stroke-dasharray: 237.5701904296875px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.12s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.8000000000000003s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.12s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.8000000000000003s; +} + +.challenges.active .svg-elem-27 { + stroke-dashoffset: 0; + fill: url("#paint9_linear_10603_99257"); +} + +.challenges .svg-elem-28 { + stroke-dashoffset: 258.017578125px; + stroke-dasharray: 258.017578125px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 3.2399999999999998s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.9000000000000004s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 3.2399999999999998s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 2.9000000000000004s; +} + +.challenges.active .svg-elem-28 { + stroke-dashoffset: 0; + fill: url("#paint10_linear_10603_99257"); +} + +.challenges .svg-elem-29 { + stroke-dashoffset: 246.1225377213873px; + stroke-dasharray: 246.1225377213873px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.36s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.0000000000000004s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.36s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.0000000000000004s; +} + +.challenges.active .svg-elem-29 { + stroke-dashoffset: 0; + fill: url("#paint11_linear_10603_99257"); +} + +.challenges .svg-elem-30 { + stroke-dashoffset: 230.08078002929688px; + stroke-dasharray: 230.08078002929688px; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.48s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.1000000000000005s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.48s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.1000000000000005s; +} + +.challenges.active .svg-elem-30 { + stroke-dashoffset: 0; +} + +.challenges .svg-elem-31 { + stroke-dashoffset: 1390px; + stroke-dasharray: 1390px; + fill: transparent; + -webkit-transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 3.5999999999999996s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.2s; + transition: + stroke-dashoffset 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 3.5999999999999996s, + fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 3.2s; +} + +.challenges.active .svg-elem-31 { + stroke-dashoffset: 0; + fill: rgb(255, 255, 255); +} diff --git a/apps/site/src/components/careers/flexible.module.css b/apps/site/src/components/careers/flexible.module.css new file mode 100644 index 0000000000..9010dd84a7 --- /dev/null +++ b/apps/site/src/components/careers/flexible.module.css @@ -0,0 +1,417 @@ +.flexible .svg-elem-1 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0s; +} + +.flexible.active .svg-elem-1 { + fill: url("#paint0_linear_10601_70600"); +} + +.flexible .svg-elem-2 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.025s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.025s; +} + +.flexible.active .svg-elem-2 { + fill: url("#paint1_radial_10601_70600"); +} + +.flexible .svg-elem-3 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.05s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.05s; +} + +.flexible.active .svg-elem-3 { + fill: url("#paint2_linear_10601_70600"); +} + +.flexible .svg-elem-4 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.07500000000000001s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.07500000000000001s; +} + +.flexible.active .svg-elem-4 { + fill: url("#paint3_radial_10601_70600"); +} + +.flexible .svg-elem-5 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.1s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.1s; +} + +.flexible.active .svg-elem-5 { + fill: url("#paint4_linear_10601_70600"); +} + +.flexible .svg-elem-6 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.125s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.125s; +} + +.flexible.active .svg-elem-6 { + fill: url("#paint5_radial_10601_70600"); +} + +.flexible .svg-elem-7 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.15000000000000002s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.15000000000000002s; +} + +.flexible.active .svg-elem-7 { + fill: url("#paint6_linear_10601_70600"); +} + +.flexible .svg-elem-8 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.17500000000000002s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.17500000000000002s; +} + +.flexible.active .svg-elem-8 { + fill: url("#paint7_radial_10601_70600"); +} + +.flexible .svg-elem-9 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.2s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.2s; +} + +.flexible.active .svg-elem-9 { + fill: url("#paint8_linear_10601_70600"); +} + +.flexible .svg-elem-10 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.225s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.225s; +} + +.flexible.active .svg-elem-10 { + fill: url("#paint9_radial_10601_70600"); +} + +.flexible .svg-elem-11 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.25s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.25s; +} + +.flexible.active .svg-elem-11 { + fill: url("#paint10_linear_10601_70600"); +} + +.flexible .svg-elem-12 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.275s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.275s; +} + +.flexible.active .svg-elem-12 { + fill: url("#paint11_radial_10601_70600"); +} + +.flexible .svg-elem-13 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.30000000000000004s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.30000000000000004s; +} + +.flexible.active .svg-elem-13 { + fill: url("#paint12_linear_10601_70600"); +} + +.flexible .svg-elem-14 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.325s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.325s; +} + +.flexible.active .svg-elem-14 { + fill: url("#paint13_linear_10601_70600"); +} + +.flexible .svg-elem-15 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.35000000000000003s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.35000000000000003s; +} + +.flexible.active .svg-elem-15 { + fill: url("#paint14_radial_10601_70600"); +} + +.flexible .svg-elem-16 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.375s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.375s; +} + +.flexible.active .svg-elem-16 { + fill: url("#paint15_linear_10601_70600"); +} + +.flexible .svg-elem-17 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.4s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.4s; +} + +.flexible.active .svg-elem-17 { + fill: url("#paint16_radial_10601_70600"); +} + +.flexible .svg-elem-18 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.42500000000000004s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.42500000000000004s; +} + +.flexible.active .svg-elem-18 { + fill: url("#paint17_linear_10601_70600"); +} + +.flexible .svg-elem-19 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.45s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.45s; +} + +.flexible.active .svg-elem-19 { + fill: rgb(163, 191, 250); +} + +.flexible .svg-elem-20 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.47500000000000003s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.47500000000000003s; +} + +.flexible.active .svg-elem-20 { + fill: rgb(90, 103, 216); +} + +.flexible .svg-elem-21 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.5s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.5s; +} + +.flexible.active .svg-elem-21 { + fill: rgb(255, 255, 255); +} + +.flexible .svg-elem-22 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.525s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.525s; +} + +.flexible.active .svg-elem-22 { + fill: rgb(90, 103, 216); +} + +.flexible .svg-elem-23 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.55s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.55s; +} + +.flexible.active .svg-elem-23 { + fill: rgb(160, 174, 192); +} + +.flexible .svg-elem-24 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.5750000000000001s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.5750000000000001s; +} + +.flexible.active .svg-elem-24 { + fill: rgb(45, 55, 72); +} + +.flexible .svg-elem-25 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.6000000000000001s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.6000000000000001s; +} + +.flexible.active .svg-elem-25 { + fill: rgb(237, 137, 54); +} + +.flexible .svg-elem-26 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.625s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.625s; +} + +.flexible.active .svg-elem-26 { + fill: rgb(255, 255, 255); +} + +.flexible .svg-elem-27 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.65s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.65s; +} + +.flexible.active .svg-elem-27 { + fill: rgb(237, 137, 54); +} + +.flexible .svg-elem-28 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.675s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.675s; +} + +.flexible.active .svg-elem-28 { + fill: rgb(160, 174, 192); +} + +.flexible .svg-elem-29 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.7000000000000001s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.7000000000000001s; +} + +.flexible.active .svg-elem-29 { + fill: rgb(45, 55, 72); +} + +.flexible .svg-elem-30 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.7250000000000001s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.7250000000000001s; +} + +.flexible.active .svg-elem-30 { + fill: rgb(4, 200, 187); +} + +.flexible .svg-elem-31 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.75s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.75s; +} + +.flexible.active .svg-elem-31 { + fill: rgb(255, 255, 255); +} + +.flexible .svg-elem-32 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.775s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.775s; +} + +.flexible.active .svg-elem-32 { + fill: rgb(4, 200, 187); +} + +.flexible .svg-elem-33 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.8s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.8s; +} + +.flexible.active .svg-elem-33 { + fill: rgb(160, 174, 192); +} + +.flexible .svg-elem-34 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.8250000000000001s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.8250000000000001s; +} + +.flexible.active .svg-elem-34 { + fill: rgb(45, 55, 72); +} + +.flexible .svg-elem-35 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.8500000000000001s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.8500000000000001s; +} + +.flexible.active .svg-elem-35 { + fill: rgb(90, 103, 216); +} + +.flexible .svg-elem-36 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.875s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.875s; +} + +.flexible.active .svg-elem-36 { + fill: rgb(255, 255, 255); +} + +.flexible .svg-elem-37 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.9s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.9s; +} + +.flexible.active .svg-elem-37 { + fill: rgb(90, 103, 216); +} + +.flexible .svg-elem-38 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.925s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) 0.925s; +} + +.flexible.active .svg-elem-38 { + fill: rgb(160, 174, 192); +} + +.flexible .svg-elem-39 { + fill: transparent; + -webkit-transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.9500000000000001s; + transition: fill 0.6s cubic-bezier(0.47, 0, 0.745, 0.715) + 0.9500000000000001s; +} + +.flexible.active .svg-elem-39 { + fill: rgb(45, 55, 72); +} diff --git a/apps/site/src/components/careers/masonry-client.tsx b/apps/site/src/components/careers/masonry-client.tsx new file mode 100644 index 0000000000..689068233f --- /dev/null +++ b/apps/site/src/components/careers/masonry-client.tsx @@ -0,0 +1,13 @@ +"use client"; + +import dynamic from "next/dynamic"; + +const MasonryPict = dynamic( + () => + import("./masonry").then((mod) => ({ + default: mod.MasonryPict, + })), + { ssr: false }, +); + +export default MasonryPict; diff --git a/apps/site/src/components/careers/masonry.tsx b/apps/site/src/components/careers/masonry.tsx new file mode 100644 index 0000000000..5215ad2b5d --- /dev/null +++ b/apps/site/src/components/careers/masonry.tsx @@ -0,0 +1,35 @@ +"use client"; +// @ts-ignore - no types available for react-responsive-masonry +import Masonry, { ResponsiveMasonry } from "react-responsive-masonry"; +import Image from "next/image"; + +export const MasonryPict = ({ + images, + gutter, +}: { + images: any[]; + gutter: string; +}) => { + return ( +
+
+ + + {images.map((e: any, idx: number) => ( + hello + ))} + + +
+
+ ); +}; diff --git a/apps/site/src/components/careers/open-roles.tsx b/apps/site/src/components/careers/open-roles.tsx new file mode 100644 index 0000000000..bb5f02ffc7 --- /dev/null +++ b/apps/site/src/components/careers/open-roles.tsx @@ -0,0 +1,126 @@ +"use client"; +import { + Button, + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectTrigger, + SelectValue, +} from "@prisma/eclipse"; +import React from "react"; +import { BOARD_ID } from "../constants"; + +const OpenRolesMenu = ({ setFilter, filters }: any) => { + return ( +
+

+ We're hiring +

+

+ Open roles +

+

+ Filter by department +

+ +
+ ); +}; + +export const groupBy = (items: any[], key: any) => + items.reduce( + (result, item) => ({ + ...result, + [item[key]]: [...(result[item[key]] || []), item], + }), + {}, + ); + +export const OpenRoles = () => { + const [filter, setFilter] = React.useState("All"); + const [jobs, setJobs]: any = React.useState({}); + + async function fetchJobs() { + const rdata = await fetch( + `https://api.rippling.com/platform/api/ats/v1/board/${BOARD_ID}/jobs`, + ).then((res) => res.json()); + const rjobsWithDept = rdata + .map((job: any) => { + job.dept = job.department.label; + return job; + }) + .sort((a: any) => (a.name.includes("General Applications") ? 1 : -1)); + + const sameUrls = groupBy(rjobsWithDept, "url"); + + const sameUrl = Object.keys(sameUrls); + const rjobsWithDeptSet = sameUrl.map((e: any) => sameUrls[e][0]); + + const rjobsData = groupBy(rjobsWithDeptSet, "dept"); + + setJobs(rjobsData); + } + + React.useEffect(() => { + fetchJobs(); + }, []); + return ( + <> + +
+ {Object.keys(jobs).length && + (filter === "All" ? Object.keys(jobs) : [filter]).map( + (d: any, idx: number) => ( +
+ <> + + {d} + + {jobs[d].map((job: any) => ( +
+
+ + {job && + job.workLocation && + job.workLocation.label.split(" (")[0]} + +

+ {job.name} +

+
+ +
+ ))} + +
+ ), + )} +
+ + ); +}; diff --git a/apps/site/src/components/careers/stats-list.tsx b/apps/site/src/components/careers/stats-list.tsx new file mode 100644 index 0000000000..9e82f68e8a --- /dev/null +++ b/apps/site/src/components/careers/stats-list.tsx @@ -0,0 +1,29 @@ +"use client"; +import dynamic from "next/dynamic"; +const AnimatedNumbers = dynamic(() => import("react-animated-numbers"), { + ssr: false, +}); +export const StatsList = ({ statsList }: { statsList: any[] }) => { + return ( +
+ {statsList.map((e: any, idx: number) => ( +
+ + + {e.sub.toLowerCase() === "remote" && `%`} + +

{e.sub}

+
+ ))} +
+ ); +}; diff --git a/apps/site/src/components/careers/testimonials.tsx b/apps/site/src/components/careers/testimonials.tsx new file mode 100644 index 0000000000..067d3bc02e --- /dev/null +++ b/apps/site/src/components/careers/testimonials.tsx @@ -0,0 +1,88 @@ +"use client"; +import { useRef } from "react"; +import { Navigation, Pagination, Scrollbar, A11y } from "swiper/modules"; +import { Swiper, SwiperSlide } from "swiper/react"; +import type { Swiper as SwiperType } from "swiper"; + +// Import Swiper styles +import "swiper/css"; +import "swiper/css/navigation"; +import "swiper/css/pagination"; +import "swiper/css/scrollbar"; +import { Quote } from "@prisma-docs/ui/components/quote"; +import React from "react"; + +interface Testimonial { + body: string; + author?: { + name: string; + title?: string; + }; +} + +export const Testimonials = ({ + testimonials, +}: { + testimonials: Array; +}) => { + const swiperRef = React.useRef(null); + const [isBeginning, setIsBeginning] = React.useState(true); + const [isEnd, setIsEnd] = React.useState(false); + + return ( +
+ { + swiperRef.current = swiper; + }} + onSlideChange={(swiper) => { + setIsBeginning(swiper.isBeginning); + setIsEnd(swiper.isEnd); + }} + breakpoints={{ + 640: { + slidesPerView: 1, + spaceBetween: 16, + }, + 768: { + slidesPerView: 2, + spaceBetween: 16, + }, + 1024: { + slidesPerView: 3, + spaceBetween: 16, + }, + }} + > + {testimonials.map((testimonial: Testimonial) => ( + + {testimonial.body} + + ))} + + + {/* Custom Navigation */} +
+ + +
+
+ ); +}; diff --git a/apps/site/src/components/careers/worldmap.module.css b/apps/site/src/components/careers/worldmap.module.css new file mode 100644 index 0000000000..346da42bc1 --- /dev/null +++ b/apps/site/src/components/careers/worldmap.module.css @@ -0,0 +1,189 @@ +.worldmap .svg-elem-1 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.05s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.05s; +} + +.worldmap.active .svg-elem-1 { + fill: url("#pattern0"); +} + +.worldmap .svg-elem-2 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.1s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.1s; +} + +.worldmap.active .svg-elem-2 { + fill: rgb(163, 191, 250); +} + +.worldmap .svg-elem-3 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.15s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.15s; +} + +.worldmap.active .svg-elem-3 { + fill: rgb(90, 103, 216); +} + +.worldmap .svg-elem-4 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.2s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.2s; +} + +.worldmap.active .svg-elem-4 { + fill: rgb(255, 255, 255); +} + +.worldmap .svg-elem-5 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.25s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.25s; +} + +.worldmap.active .svg-elem-5 { + fill: rgb(90, 103, 216); +} + +.worldmap .svg-elem-6 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.3s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.3s; +} + +.worldmap.active .svg-elem-6 { + fill: rgb(255, 255, 255); +} + +.worldmap .svg-elem-7 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.35s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.35s; +} + +.worldmap.active .svg-elem-7 { + fill: rgb(90, 103, 216); +} + +.worldmap .svg-elem-8 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.4s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.4s; +} + +.worldmap.active .svg-elem-8 { + fill: rgb(255, 255, 255); +} + +.worldmap .svg-elem-9 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.45s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.45s; +} + +.worldmap.active .svg-elem-9 { + fill: rgb(90, 103, 216); +} + +.worldmap .svg-elem-10 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.5s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.5s; +} + +.worldmap.active .svg-elem-10 { + fill: rgb(255, 255, 255); +} + +.worldmap .svg-elem-11 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.55s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.55s; +} + +.worldmap.active .svg-elem-11 { + fill: rgb(90, 103, 216); +} + +.worldmap .svg-elem-12 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.6s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.6s; +} + +.worldmap.active .svg-elem-12 { + fill: rgb(255, 255, 255); +} + +.worldmap .svg-elem-13 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.65s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.65s; +} + +.worldmap.active .svg-elem-13 { + fill: rgb(90, 103, 216); +} + +.worldmap .svg-elem-14 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.7s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.7s; +} + +.worldmap.active .svg-elem-14 { + fill: rgb(255, 255, 255); +} + +.worldmap .svg-elem-15 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.75s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.75s; +} + +.worldmap.active .svg-elem-15 { + fill: rgb(90, 103, 216); +} + +.worldmap .svg-elem-16 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.8s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.8s; +} + +.worldmap.active .svg-elem-16 { + fill: rgb(255, 255, 255); +} + +.worldmap .svg-elem-17 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.85s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.85s; +} + +.worldmap.active .svg-elem-17 { + fill: rgb(90, 103, 216); +} + +.worldmap .svg-elem-18 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.9s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.9s; +} + +.worldmap.active .svg-elem-18 { + fill: rgb(255, 255, 255); +} + +.worldmap .svg-elem-19 { + fill: transparent; + -webkit-transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.95s; + transition: fill 0.4s cubic-bezier(0.47, 0, 0.745, 0.715) 0.95s; +} + +.worldmap.active .svg-elem-19 { + fill: rgb(255, 255, 255); +} diff --git a/apps/site/src/components/constants.ts b/apps/site/src/components/constants.ts new file mode 100644 index 0000000000..6cab9f50dc --- /dev/null +++ b/apps/site/src/components/constants.ts @@ -0,0 +1 @@ +export const BOARD_ID = process.env.NEXT_PUBLIC_BOARD_ID; diff --git a/apps/site/src/components/homepage/card-section/card-section.tsx b/apps/site/src/components/homepage/card-section/card-section.tsx index 3537d0b6f8..b671977d14 100644 --- a/apps/site/src/components/homepage/card-section/card-section.tsx +++ b/apps/site/src/components/homepage/card-section/card-section.tsx @@ -11,10 +11,11 @@ interface TwoColumnItem { imageAlt: string | null; mobileImageUrl: string | null; mobileImageAlt: string | null; + otherAsset?: ReactNode; logos: any[] | null; useDefaultLogos: boolean; visualPosition: "left" | "right"; - visualType: "logoGrid" | "image"; + visualType: "logoGrid" | "image" | "other"; } interface CardSectionProps { @@ -58,6 +59,11 @@ export const CardSection = ({ cardSection }: CardSectionProps) => { item.visualType === "logoGrid" ? "max-w-full" : "lg:w-full", )} > + {item.visualType === "other" && item.otherAsset && ( +
+ {item.otherAsset} +
+ )} {item.visualType === "logoGrid" && item.useDefaultLogos && ( )} diff --git a/apps/site/src/components/navigation-wrapper.tsx b/apps/site/src/components/navigation-wrapper.tsx new file mode 100644 index 0000000000..d7830e476c --- /dev/null +++ b/apps/site/src/components/navigation-wrapper.tsx @@ -0,0 +1,47 @@ +"use client"; + +import { WebNavigation } from "@prisma-docs/ui/components/web-navigation"; +import { usePathname } from "next/navigation"; + +interface Link { + text: string; + external?: boolean; + url?: string; + icon?: string; + desc?: string; + col?: number; + sub?: Array<{ + text: string; + external?: boolean; + url: string; + icon?: string; + desc?: string; + }>; +} + +interface NavigationWrapperProps { + links: Link[]; + utm: { + source: "website"; + medium: string; + }; +} + +const orm = ["/careers"]; + +export function NavigationWrapper({ links, utm }: NavigationWrapperProps) { + const pathname = usePathname(); + + // Determine button variant based on pathname + const getButtonVariant = (): "ppg" | "orm" | "default-stronger" => { + if (orm.includes(pathname.split("?")[0])) { + return "orm"; + } + // Add more conditions here for other pages as needed + return "ppg"; // default variant + }; + + return ( + + ); +} diff --git a/apps/site/src/types/react-responsive-masonry.d.ts b/apps/site/src/types/react-responsive-masonry.d.ts new file mode 100644 index 0000000000..40122d0f67 --- /dev/null +++ b/apps/site/src/types/react-responsive-masonry.d.ts @@ -0,0 +1,18 @@ +declare module "react-responsive-masonry" { + import { ReactNode } from "react"; + + export interface ResponsiveMasonryProps { + columnsCountBreakPoints?: Record; + children?: ReactNode; + } + + export interface MasonryProps { + columnsCount?: number; + gutter?: string; + children?: ReactNode; + center?: boolean; + } + + export class ResponsiveMasonry extends React.Component {} + export default class Masonry extends React.Component {} +} diff --git a/packages/ui/src/components/navigation-menu.tsx b/packages/ui/src/components/navigation-menu.tsx index e1b81ff426..0b27ab4858 100644 --- a/packages/ui/src/components/navigation-menu.tsx +++ b/packages/ui/src/components/navigation-menu.tsx @@ -355,10 +355,12 @@ function NavigationMobileMenu({ links, loginHref, signupHref, + buttonVariant = "ppg", }: { links: WebNavigationLink[]; loginHref: string; signupHref: string; + buttonVariant?: "ppg" | "orm" | "default-stronger"; }) { return (
@@ -394,7 +396,7 @@ function NavigationMobileMenu({