PageSourceSearch

https://ratrodstudio.com/js/Pages.js

js ratrodstudio.com collected 2026-10-08 11:40:12 UTC 23,220 bytes, 704 lines download raw bytes

1function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2const RR_GAMES = [{
3  id: "sp3",
4  category: "Sports",
5  title: "Skateboard Party 3 ft. Greg Lutzka",
6  image: "assets/games/skateboard-party-3.png",
7  trailerId: "b1KDyjHBOYw",
8  blurb: "Skateboard Party is back! This third edition of the popular sports franchise features professional skater Greg Lutzka."
9}, {
10  id: "snow2",
11  category: "Sports",
12  title: "Snowboard Party 2",
13  image: "assets/games/snowboard-party-2.png",
14  trailerId: "VOGkL1ZVB5g",
15  blurb: "Crowned the best snowboarding game available on the market, Snowboard Party is back to fulfill all your adrenaline needs in this ultimate winter-sports experience."
16}, {
17  id: "snow1",
18  category: "Sports",
19  title: "Snowboard Party",
20  image: "assets/games/snowboard-party-1.png",
21  trailerId: "GIPftNHkln8",
22  blurb: "Get ready to shred the slopes at extreme speed and catch some big air to perform the craziest tricks and rack up some high scores."
23}, {
24  id: "sp2",
25  category: "Sports",
26  title: "Skateboard Party 2",
27  image: "assets/games/skateboard-party-2.png",
28  trailerId: "S1gIQoG2A4s",
29  blurb: "Skateboard Party 2 brings all the fun of skateboarding to your mobile device. Jump on your board, learn new moves and improve your skills."
30}, {
31  id: "dmso",
32  category: "Racing",
33  title: "Drift Mania Street Outlaws",
34  image: "assets/games/drift-mania-street-outlaws.png",
35  trailerId: "jN_nnlQ582s",
36  blurb: "Street Outlaws takes the heat to the streets, allowing players to battle and compete in underground drift events based on various world locations."
37}, {
38  id: "dmc2",
39  category: "Racing",
40  title: "Drift Mania Championship 2",
41  image: "assets/games/drift-mania-championship-2.png",
42  trailerId: "XpGZ_Shr6Dg",
43  blurb: "With millions of players worldwide, the #1 Drift game is finally back! Drift Mania Championship 2 delivers the ultimate drift experience on mobile."
44}, {
45  id: "mikev-sp",
46  category: "Sports",
47  title: "Mike V: Skateboard Party",
48  image: "assets/games/skateboard-party-1.png",
49  trailerId: "y3dVDIGQCMA",
50  blurb: "From skateboard legend to rock star and movie actor, Mike Vallely is known as a pioneer and innovator in the skateboarding world."
51}, {
52  id: "hockey",
53  category: "Sports",
54  title: "Hockey Fight Pro",
55  image: "assets/games/hockey-fight.png",
56  trailerId: "DpLXAAichQw",
57  blurb: "The game is rough and the stakes are high. Fueled by pride or desperation, when it's game time, nothing else matters. Once the players drop the gloves, only one walks away."
58}, {
59  id: "dmc1",
60  category: "Racing",
61  title: "Drift Mania Championship",
62  image: "assets/games/drift-mania-championship-1.png",
63  trailerId: "bVKqSCME8xs",
64  blurb: "Drifting is the act of maneuvering a vehicle through corners at speeds and angles that exceed the vehicle's grip. Drifting involves fast, precise inputs and serious car control."
65}, {
66  id: "mikev-die",
67  category: "Sports",
68  title: "Mike V: Do or Die",
69  image: "assets/games/mike-v-do-or-die.png",
70  trailerId: "Cs9Br7oOwss",
71  blurb: "From skateboard legend to rock star and movie actor, Mike Vallely is known as a pioneer and innovator in the skateboarding world."
72}];
73const RR_FEATURED_DEFAULT = ["sp3", "snow2", "dmso", "dmc2"];
74const _RR_PARTNERS_SEED = [{
75  slug: "unity",
76  name: "Unity Technologies",
77  industry: "Computer Technology",
78  games: ["Technology Partners"],
79  href: "https://unity.com/"
80}, {
81  slug: "hardline",
82  name: "Hardline Entertainment",
83  industry: "Music Record Labels",
84  games: ["Snowboard Party 2"],
85  href: "http://hardlineent.com/"
86}, {
87  slug: "royal-purple",
88  name: "Royal Purple",
89  industry: "Automotive Industry",
90  games: ["Drift Mania Championship", "Drift Mania Championship 2", "Drift Mania Street Outlaws"],
91  href: "http://www.royalpurpleconsumer.com/"
92}, {
93  slug: "powell-peralta",
94  name: "Powell Peralta",
95  industry: "Action Sports",
96  games: ["Mike V Skateboard Party", "Skateboard Party 2"],
97  href: "http://powell-peralta.com/"
98}, {
99  slug: "magnaflow",
100  name: "Magnaflow",
101  industry: "Automotive Industry",
102  games: ["Drift Mania Championship 2", "Drift Mania Street Outlaws"],
103  href: "http://www.magnaflow.com/"
104}, {
105  slug: "k-and-n",
106  name: "K&N Engineering",
107  industry: "Automotive Industry",
108  games: ["Drift Mania Championship 2", "Drift Mania Street Outlaws"],
109  href: "http://knfilters.com"
110}, {
111  slug: "intel",
112  name: "Intel",
113  industry: "Computer Technology",
114  games: ["Technology Partners"],
115  href: "http://www.intel.com"
116}, {
117  slug: "element",
118  name: "Element",
119  industry: "Action Sports",
120  games: ["Mike V Do or Die"],
121  href: "http://www.elementbrand.com"
122}, {
123  slug: "centerforce",
124  name: "Centerforce",
125  industry: "Automotive Industry",
126  games: ["Drift Mania Championship 2", "Drift Mania Street Outlaws"],
127  href: "http://www.centerforce.com/"
128}, {
129  slug: "bones-wheels",
130  name: "Bones Wheels",
131  industry: "Action Sports",
132  games: ["Mike V Skateboard Party", "Skateboard Party 2"],
133  href: "http://bones.com/"
134}, {
135  slug: "airwalk",
136  name: "Airwalk",
137  industry: "Action Sports Apparel",
138  games: ["Mike V Skateboard Party"],
139  href: "http://www.airwalk.com/"
140}, {
141  slug: "affliction",
142  name: "Affliction",
143  industry: "Clothing Industry",
144  games: ["Mike V Do or Die"],
145  href: "http://www.afflictionclothing.com"
146}, {
147  slug: "active",
148  name: "Active Ride Shop",
149  industry: "Action Sports",
150  games: ["Mike V Do or Die"],
151  href: "http://www.activerideshop.com/"
152}, {
153  slug: "tork-trucks",
154  name: "Tork Trucks",
155  industry: "Action Sports",
156  games: ["Mike V Skateboard Party", "Skateboard Party 2"]
157}, {
158  slug: "powell-golden-dragon",
159  name: "Powell Golden Dragon",
160  industry: "Action Sports",
161  games: ["Skateboard Party 2"],
162  href: "http://powellgoldendragon.com/"
163}, {
164  slug: "nos",
165  name: "NOS Energy Drink",
166  industry: "Food & Beverages",
167  games: ["Drift Mania Championship 2"],
168  href: "https://www.facebook.com/drinknos"
169}, {
170  slug: "mishimoto",
171  name: "Mishimoto",
172  industry: "Automotive Industry",
173  games: ["Drift Mania Championship 2"],
174  href: "http://www.mishimoto.com/"
175}, {
176  slug: "iron-fist",
177  name: "Iron Fist Clothing",
178  industry: "Clothing Industry",
179  games: ["Mike V Skateboard Party"],
180  href: "http://www.ironfistclothing.com/"
181}, {
182  slug: "hoopla",
183  name: "Hoopla Skateboards",
184  industry: "Action Sports",
185  games: ["Skateboard Party 2"],
186  href: "http://hooplaskateboards.com/"
187}, {
188  slug: "fuel-tv",
189  name: "FuelTV",
190  industry: "Media & Entertainment",
191  games: ["Mike V Do or Die"],
192  href: "http://www.fuel.tv/"
193}, {
194  slug: "bones-bearings",
195  name: "Bones Bearings",
196  industry: "Action Sports",
197  games: ["Mike V Skateboard Party", "Skateboard Party 2"],
198  href: "http://bonesbearings.com/"
199}, {
200  slug: "whiteline",
201  name: "Whiteline",
202  industry: "Automotive Industry",
203  games: ["Drift Mania Championship 2"],
204  href: "http://www.whiteline.com.au/"
205}, {
206  slug: "powell",
207  name: "Powell Skateboards",
208  industry: "Action Sports",
209  games: ["Mike V Skateboard Party", "Skateboard Party 2"],
210  href: "http://powellskateboards.com/"
211}, {
212  slug: "hockey-fights",
213  name: "Hockeyfights.com",
214  industry: "Online Community",
215  games: ["Hockey Fight Pro"],
216  href: "http://www.hockeyfights.com"
217}, {
218  slug: "good-fight",
219  name: "Good Fight Music",
220  industry: "Music Record Labels",
221  games: ["Drift Mania Championship", "Mike V Skateboard Party"],
222  href: "http://www.goodfightmusic.com/"
223}, {
224  slug: "concrete-wave",
225  name: "Concrete Wave",
226  industry: "Media & Entertainment",
227  games: ["Mike V Do or Die", "Skateboard Party 2"],
228  href: "http://www.concretewavemagazine.com/"
229}, {
230  slug: "von-zipper",
231  name: "Von Zipper",
232  industry: "Eyewear",
233  games: ["Mike V Do or Die"],
234  href: "http://vonzipper.com"
235}, {
236  slug: "onderground",
237  name: "Onderground-Design",
238  industry: "Automotive Industry",
239  games: ["Drift Mania Championship", "Drift Mania Championship 2"]
240}, {
241  slug: "ferret-music",
242  name: "Ferret Music",
243  industry: "Music Record Labels",
244  games: ["Mike V Skateboard Party"]
245}, {
246  slug: "dmcc",
247  name: "DMCC",
248  industry: "Automotive Industry",
249  games: ["Drift Mania Championship", "Drift Mania Championship 2"],
250  href: "http://www.driftdmcc.com/"
251}];
252const RR_PARTNERS = _RR_PARTNERS_SEED.map(p => ({
253  id: p.slug,
254  image: `assets/partners/${p.slug}.png`,
255  ...p
256}));
257const RR_PARTNERS_FEATURED_DEFAULT = ["unity", "intel", "royal-purple", "powell-peralta", "magnaflow", "k-and-n", "hardline", "element", "centerforce", "bones-bearings", "airwalk", "affliction"];
258const RR_ABOUT = {
259  eyebrow: "Est. 2009 · Gatineau, Québec",
260  lead: "Founded in 2009, Ratrod Studio Inc. is an entertainment software company based in Gatineau, Québec. We develop and publish interactive web content and games for mobile, PC and console platforms.",
261  colLeft: "We work with companies that want to build a game, promote a brand, or create an interactive experience around a product or campaign. Every project starts with the idea and the audience, then we shape the design, technology and production plan around what will actually make it work.",
262  colRight: "Our team brings years of game industry experience to each project, from concept and production through launch and support. We use proven tools, a practical pipeline and close communication to keep projects moving without losing sight of quality, budget or schedule.",
263  servicesEyebrow: "What we do",
264  servicesTitle: "A complete studio",
265  servicesIntro: "Ratrod Studio offers web and mobile game development, interactive brand experiences, publishing support and production consulting for clients who need a reliable team from the first idea to release.",
266  services: [{
267    id: "svc1",
268    number: "01",
269    title: "Mobile & Handheld Gaming",
270    body: "Mobile remains one of the most direct ways to reach players. We build free and commercial games with the polish, performance and usability needed for real audiences across phones, tablets and handheld platforms."
271  }, {
272    id: "svc2",
273    number: "02",
274    title: "Publishing Services",
275    body: "Bring us a prototype, a playable build or a game idea and we can help review it, improve it and prepare it for release. We support the parts that often get overlooked, including presentation, store readiness, promotion and distribution."
276  }, {
277    id: "svc3",
278    number: "03",
279    title: "Content Production & Consulting",
280    body: "We help teams plan, build and refine interactive content with a clear production process and steady communication. Our experience covers game development, 3D content, interactive branding, mobile projects and cinematic assets for games and video."
281  }, {
282    id: "svc4",
283    number: "04",
284    title: "Online Games & Interactive Branding",
285    body: "Browser based games and branded interactive projects can give a campaign more life than a static ad. We can integrate a brand into an existing concept or build a custom experience that players can jump into quickly on Mac or PC."
286  }]
287};
288const RR_CLIENTS_INTRO = {
289  lead: "Over the past few years, we had the opportunity to collaborate with amazing brands and organizations. We proudly developed unbelievable partnerships with local, national and international companies while working closely on exciting projects and achieving successful results.",
290  sub: "Our work with clients and partners ranges from the media and marketing to the automobile sector, technology and sports. We look for clients who are passionate about what they do. Here are some examples of the projects and companies we have collaborated with."
291};
292if (typeof window !== "undefined") {
293  window.RR_GAMES = RR_GAMES;
294  window.RR_FEATURED_DEFAULT = RR_FEATURED_DEFAULT;
295  window.RR_PARTNERS = RR_PARTNERS;
296  window.RR_PARTNERS_FEATURED_DEFAULT = RR_PARTNERS_FEATURED_DEFAULT;
297  window.RR_ABOUT = RR_ABOUT;
298  window.RR_CLIENTS_INTRO = RR_CLIENTS_INTRO;
299}
300function rrBuildStats(order, vals = {}) {
301  const defs = {
302    founded: {
303      value: "2009",
304      label: "Founded"
305    },
306    downloads: {
307      value: String(vals.downloads != null ? vals.downloads : 100),
308      suffix: "M+",
309      label: "Downloads"
310    },
311    partners: {
312      value: String(vals.partners != null ? vals.partners : 30),
313      suffix: "+",
314      label: "Brand Partners"
315    },
316    titles: {
317      value: String(vals.titles != null ? vals.titles : 10),
318      label: "Titles shipped"
319    }
320  };
321  const ord = order && order.length ? order : ["founded", "downloads", "partners", "titles"];
322  return ord.map(id => ({
323    id,
324    ...defs[id]
325  })).filter(s => s.label);
326}
327if (typeof window !== "undefined") window.rrBuildStats = rrBuildStats;
328function HomePage({
329  go,
330  onOpenTrailer,
331  featured,
332  featuredPartners,
333  projects,
334  partners,
335  stats = {},
336  statsOrder
337}) {
338  const allProjects = projects && projects.length ? projects : RR_GAMES;
339  const allPartners = partners && partners.length ? partners : RR_PARTNERS;
340  const picked = featured && featured.length ? featured : RR_FEATURED_DEFAULT;
341  const featuredGames = picked.map(id => allProjects.find(g => g.id === id)).filter(Boolean);
342  const pickedPartners = featuredPartners && featuredPartners.length ? featuredPartners : RR_PARTNERS_FEATURED_DEFAULT;
343  const featuredLogos = pickedPartners.map(id => allPartners.find(p => p.id === id)).filter(Boolean);
344  const sDownloads = stats.downloads != null ? stats.downloads : 100;
345  const sPartners = stats.partners != null ? stats.partners : 30;
346  const sTitles = stats.titles != null ? stats.titles : 10;
347  return React.createElement("main", null, React.createElement(HeroStripe, {
348    height: 420,
349    image: "assets/hero-ratrod-car.png",
350    eyebrow: "Ratrod Studio Inc"
351  }, React.createElement(TaglineStamp, {
352    size: 56
353  })), React.createElement("section", {
354    className: "rr-stats-section",
355    style: {
356      padding: "40px 56px",
357      background: "var(--rr-ink-900)",
358      borderTop: "1px solid var(--rr-border)",
359      borderBottom: "1px solid var(--rr-border)"
360    }
361  }, React.createElement("div", {
362    className: "rr-stats-grid",
363    style: {
364      maxWidth: 980,
365      margin: "0 auto",
366      display: "grid",
367      gridTemplateColumns: "repeat(4, minmax(0, 1fr))",
368      gap: 32
369    }
370  }, rrBuildStats(statsOrder, {
371    downloads: sDownloads,
372    partners: sPartners,
373    titles: sTitles
374  }).map(st => React.createElement(StatCallout, {
375    key: st.id,
376    value: st.value,
377    suffix: st.suffix,
378    label: st.label
379  })))), React.createElement("section", {
380    style: {
381      ...rrPageStyles.section,
382      paddingTop: 56,
383      paddingBottom: 56
384    }
385  }, React.createElement(SectionEyebrow, {
386    eyebrow: "Showroom",
387    title: "Welcome to Ratrod"
388  }), React.createElement("div", {
389    style: {
390      maxWidth: 760,
391      margin: "-12px auto 36px",
392      textAlign: "center"
393    }
394  }, React.createElement("p", {
395    style: {
396      fontSize: 16,
397      lineHeight: 1.75,
398      color: "var(--rr-fg-muted)",
399      margin: 0
400    }
401  }, "Founded in 2009, Ratrod Studio Inc. is an entertainment software company that specializes in developing and publishing video games for a complete range of platforms including mobile devices, PC and console systems.")), React.createElement("div", {
402    style: {
403      maxWidth: 900,
404      margin: "0 auto"
405    }
406  }, React.createElement(ReelEmbed, {
407    videoId: "LDTVXgK5DG8",
408    title: "Ratrod Studio \u2014 Showreel"
409  }))), React.createElement("section", {
410    style: rrPageStyles.section
411  }, React.createElement(SectionEyebrow, {
412    eyebrow: "Featured",
413    title: "Titles We Developed"
414  }), React.createElement("div", {
415    className: "rr-tile-grid",
416    style: {
417      display: "grid",
418      gridTemplateColumns: "1fr 1fr",
419      gap: "36px 56px",
420      maxWidth: 1080,
421      margin: "0 auto"
422    }
423  }, featuredGames.map(g => React.createElement(GameTile, {
424    key: g.title,
425    onOpenTrailer: onOpenTrailer,
426    trailerId: g.trailerId,
427    category: `${g.category} · Mobile`,
428    title: g.title,
429    image: g.image,
430    blurb: g.blurb
431  }))), React.createElement("div", {
432    style: {
433      textAlign: "center",
434      marginTop: 40
435    }
436  }, React.createElement(Button, {
437    variant: "ghost",
438    onClick: () => go("projects")
439  }, "See all projects"))), React.createElement("section", {
440    style: {
441      ...rrPageStyles.section,
442      background: "var(--rr-ink-900)"
443    }
444  }, React.createElement(SectionEyebrow, {
445    eyebrow: "Trusted by",
446    title: "Who We Worked With"
447  }), React.createElement("div", {
448    style: {
449      display: "grid",
450      gridTemplateColumns: "repeat(auto-fit, minmax(110px, 1fr))",
451      gap: "32px 40px",
452      maxWidth: 1000,
453      margin: "0 auto",
454      alignItems: "center",
455      justifyItems: "center"
456    }
457  }, featuredLogos.map(p => React.createElement(PartnerLogo, {
458    key: p.id,
459    src: p.image,
460    alt: p.name,
461    href: p.href
462  }))), React.createElement("div", {
463    style: {
464      textAlign: "center",
465      marginTop: 40
466    }
467  }, React.createElement(Button, {
468    variant: "ghost",
469    onClick: () => go("clients")
470  }, "See all clients & partners"))));
471}
472function AboutPage({
473  go,
474  onContact,
475  content,
476  stats = {},
477  statsOrder
478}) {
479  const c = content || RR_ABOUT;
480  const sDownloads = stats.downloads != null ? stats.downloads : 100;
481  const sPartners = stats.partners != null ? stats.partners : 30;
482  const sTitles = stats.titles != null ? stats.titles : 10;
483  const services = c.services && c.services.length ? c.services : RR_ABOUT.services;
484  return React.createElement("main", null, React.createElement(HeroStripe, {
485    eyebrow: "Ratrod Studio",
486    title: "About Us",
487    height: 220
488  }), React.createElement("section", {
489    style: {
490      ...rrPageStyles.section,
491      paddingTop: 28,
492      paddingBottom: 32
493    }
494  }, React.createElement("div", {
495    style: {
496      maxWidth: 1100,
497      margin: "0 auto"
498    }
499  }, React.createElement("div", {
500    style: {
501      fontFamily: "var(--rr-font-eyebrow)",
502      fontSize: 12,
503      letterSpacing: "0.4em",
504      textTransform: "uppercase",
505      color: "var(--rr-red-500)",
506      marginBottom: 18,
507      textAlign: "center"
508    }
509  }, c.eyebrow), React.createElement("p", {
510    style: {
511      fontSize: 18,
512      lineHeight: 1.75,
513      color: "var(--rr-fg)",
514      margin: "0 auto 28px",
515      maxWidth: 820,
516      textAlign: "center"
517    }
518  }, c.lead), React.createElement("div", {
519    className: "rr-about-cols",
520    style: {
521      display: "grid",
522      gridTemplateColumns: "1fr 1fr",
523      gap: "32px 56px",
524      fontSize: 15.5,
525      lineHeight: 1.8,
526      color: "var(--rr-fg-muted)"
527    }
528  }, React.createElement("p", {
529    style: {
530      margin: 0
531    }
532  }, c.colLeft), React.createElement("p", {
533    style: {
534      margin: 0
535    }
536  }, c.colRight)))), React.createElement("section", {
537    style: {
538      ...rrPageStyles.section,
539      paddingTop: 8,
540      paddingBottom: 56
541    }
542  }, React.createElement("div", {
543    style: {
544      maxWidth: 900,
545      margin: "0 auto"
546    }
547  }, React.createElement(ReelEmbed, {
548    videoId: "LDTVXgK5DG8",
549    title: "Ratrod Studio \u2014 Showreel"
550  }))), React.createElement("section", {
551    className: "rr-stats-section",
552    style: {
553      padding: "40px 56px",
554      background: "var(--rr-ink-900)",
555      borderTop: "1px solid var(--rr-border)",
556      borderBottom: "1px solid var(--rr-border)"
557    }
558  }, React.createElement("div", {
559    className: "rr-stats-grid",
560    style: {
561      maxWidth: 980,
562      margin: "0 auto",
563      display: "grid",
564      gridTemplateColumns: "repeat(4, minmax(0, 1fr))",
565      gap: 32
566    }
567  }, rrBuildStats(statsOrder, {
568    downloads: sDownloads,
569    partners: sPartners,
570    titles: sTitles
571  }).map(st => React.createElement(StatCallout, {
572    key: st.id,
573    value: st.value,
574    suffix: st.suffix,
575    label: st.label
576  })))), React.createElement("section", {
577    style: rrPageStyles.section
578  }, React.createElement(SectionEyebrow, {
579    eyebrow: c.servicesEyebrow,
580    title: c.servicesTitle
581  }), React.createElement("div", {
582    style: {
583      maxWidth: 760,
584      margin: "-12px auto 40px",
585      textAlign: "center"
586    }
587  }, React.createElement("p", {
588    style: {
589      fontSize: 15.5,
590      lineHeight: 1.75,
591      color: "var(--rr-fg-muted)",
592      margin: 0
593    }
594  }, c.servicesIntro)), React.createElement("div", {
595    className: "rr-about-cards",
596    style: {
597      display: "grid",
598      gridTemplateColumns: "1fr 1fr",
599      gap: 24,
600      maxWidth: 1100,
601      margin: "0 auto"
602    }
603  }, services.filter(s => !s.hidden).map(s => React.createElement(ServiceCard, {
604    key: s.id,
605    number: s.number,
606    title: s.title
607  }, s.body)))));
608}
609function ClientsPage({
610  partners,
611  intro
612}) {
613  const list = partners && partners.length ? partners : RR_PARTNERS;
614  const ci = intro || RR_CLIENTS_INTRO;
615  const visible = list.filter(p => !p.hidden);
616  return React.createElement("main", null, React.createElement(HeroStripe, {
617    eyebrow: "Ratrod Studio",
618    title: "Clients & Partners",
619    height: 220
620  }), React.createElement("section", {
621    style: {
622      ...rrPageStyles.section,
623      paddingTop: 28
624    }
625  }, React.createElement("div", {
626    style: {
627      maxWidth: 780,
628      margin: "0 auto 56px",
629      textAlign: "center"
630    }
631  }, React.createElement("p", {
632    style: {
633      fontSize: 17,
634      lineHeight: 1.75,
635      color: "var(--rr-fg)",
636      margin: 0
637    }
638  }, ci.lead), React.createElement("p", {
639    style: {
640      fontSize: 15.5,
641      lineHeight: 1.75,
642      color: "var(--rr-fg-muted)",
643      marginTop: 18
644    }
645  }, ci.sub)), React.createElement("div", {
646    className: "rr-partner-grid",
647    style: {
648      display: "grid",
649      gridTemplateColumns: "repeat(auto-fit, minmax(180px, 1fr))",
650      gap: 14,
651      maxWidth: 1180,
652      margin: "0 auto"
653    }
654  }, visible.map(p => React.createElement(PartnerCard, {
655    key: p.id,
656    name: p.name,
657    src: p.image,
658    industry: p.industry,
659    games: p.games,
660    href: p.href
661  })))));
662}
663function ProjectsPage({
664  onOpenTrailer,
665  projects
666}) {
667  const list = projects && projects.length ? projects : RR_GAMES;
668  const visible = list.filter(g => !g.hidden);
669  return React.createElement("main", null, React.createElement(HeroStripe, {
670    eyebrow: "Ratrod Studio",
671    title: "Video Games",
672    height: 220
673  }), React.createElement("section", {
674    style: {
675      ...rrPageStyles.section,
676      paddingTop: 28
677    }
678  }, React.createElement("div", {
679    className: "rr-tile-grid",
680    style: {
681      display: "grid",
682      gridTemplateColumns: "1fr 1fr",
683      gap: "36px 56px",
684      maxWidth: 1180,
685      margin: "0 auto"
686    }
687  }, visible.map(g => React.createElement(GameTile, _extends({
688    key: g.id
689  }, g, {
690    onOpenTrailer: onOpenTrailer
691  }))))));
692}
693const rrPageStyles = {
694  section: {
695    padding: "72px 56px",
696    background: "var(--rr-ink-950)"
697  }
698};
699Object.assign(window, {
700  HomePage,
701  AboutPage,
702  ClientsPage,
703  ProjectsPage
704});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.