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.