diff --git a/public/images/sponsors/factored/1.webp b/public/images/sponsors/factored/1.webp new file mode 100644 index 0000000..1159f48 Binary files /dev/null and b/public/images/sponsors/factored/1.webp differ diff --git a/public/images/sponsors/factored/10.webp b/public/images/sponsors/factored/10.webp new file mode 100644 index 0000000..c718252 Binary files /dev/null and b/public/images/sponsors/factored/10.webp differ diff --git a/public/images/sponsors/factored/100.webp b/public/images/sponsors/factored/100.webp new file mode 100644 index 0000000..8e17b65 Binary files /dev/null and b/public/images/sponsors/factored/100.webp differ diff --git a/public/images/sponsors/factored/101.webp b/public/images/sponsors/factored/101.webp new file mode 100644 index 0000000..0101376 Binary files /dev/null and b/public/images/sponsors/factored/101.webp differ diff --git a/public/images/sponsors/factored/102.webp b/public/images/sponsors/factored/102.webp new file mode 100644 index 0000000..6a70469 Binary files /dev/null and b/public/images/sponsors/factored/102.webp differ diff --git a/public/images/sponsors/factored/103.webp b/public/images/sponsors/factored/103.webp new file mode 100644 index 0000000..eb3ed1f Binary files /dev/null and b/public/images/sponsors/factored/103.webp differ diff --git a/public/images/sponsors/factored/104.webp b/public/images/sponsors/factored/104.webp new file mode 100644 index 0000000..d610fa5 Binary files /dev/null and b/public/images/sponsors/factored/104.webp differ diff --git a/public/images/sponsors/factored/105.webp b/public/images/sponsors/factored/105.webp new file mode 100644 index 0000000..feee73c Binary files /dev/null and b/public/images/sponsors/factored/105.webp differ diff --git a/public/images/sponsors/factored/106.webp b/public/images/sponsors/factored/106.webp new file mode 100644 index 0000000..e338b05 Binary files /dev/null and b/public/images/sponsors/factored/106.webp differ diff --git a/public/images/sponsors/factored/107.webp b/public/images/sponsors/factored/107.webp new file mode 100644 index 0000000..a992e01 Binary files /dev/null and b/public/images/sponsors/factored/107.webp differ diff --git a/public/images/sponsors/factored/108.webp b/public/images/sponsors/factored/108.webp new file mode 100644 index 0000000..b52c5f3 Binary files /dev/null and b/public/images/sponsors/factored/108.webp differ diff --git a/public/images/sponsors/factored/109.webp b/public/images/sponsors/factored/109.webp new file mode 100644 index 0000000..a374e59 Binary files /dev/null and b/public/images/sponsors/factored/109.webp differ diff --git a/public/images/sponsors/factored/11.webp b/public/images/sponsors/factored/11.webp new file mode 100644 index 0000000..77abe4a Binary files /dev/null and b/public/images/sponsors/factored/11.webp differ diff --git a/public/images/sponsors/factored/110.webp b/public/images/sponsors/factored/110.webp new file mode 100644 index 0000000..b7ff7ed Binary files /dev/null and b/public/images/sponsors/factored/110.webp differ diff --git a/public/images/sponsors/factored/111.webp b/public/images/sponsors/factored/111.webp new file mode 100644 index 0000000..4723441 Binary files /dev/null and b/public/images/sponsors/factored/111.webp differ diff --git a/public/images/sponsors/factored/112.webp b/public/images/sponsors/factored/112.webp new file mode 100644 index 0000000..19ad06a Binary files /dev/null and b/public/images/sponsors/factored/112.webp differ diff --git a/public/images/sponsors/factored/113.webp b/public/images/sponsors/factored/113.webp new file mode 100644 index 0000000..5670207 Binary files /dev/null and b/public/images/sponsors/factored/113.webp differ diff --git a/public/images/sponsors/factored/12.webp b/public/images/sponsors/factored/12.webp new file mode 100644 index 0000000..70964b7 Binary files /dev/null and b/public/images/sponsors/factored/12.webp differ diff --git a/public/images/sponsors/factored/13.webp b/public/images/sponsors/factored/13.webp new file mode 100644 index 0000000..383131c Binary files /dev/null and b/public/images/sponsors/factored/13.webp differ diff --git a/public/images/sponsors/factored/14.webp b/public/images/sponsors/factored/14.webp new file mode 100644 index 0000000..07c8f75 Binary files /dev/null and b/public/images/sponsors/factored/14.webp differ diff --git a/public/images/sponsors/factored/15.webp b/public/images/sponsors/factored/15.webp new file mode 100644 index 0000000..3d2c8a5 Binary files /dev/null and b/public/images/sponsors/factored/15.webp differ diff --git a/public/images/sponsors/factored/16.webp b/public/images/sponsors/factored/16.webp new file mode 100644 index 0000000..20aa35a Binary files /dev/null and b/public/images/sponsors/factored/16.webp differ diff --git a/public/images/sponsors/factored/17.webp b/public/images/sponsors/factored/17.webp new file mode 100644 index 0000000..616bd70 Binary files /dev/null and b/public/images/sponsors/factored/17.webp differ diff --git a/public/images/sponsors/factored/18.webp b/public/images/sponsors/factored/18.webp new file mode 100644 index 0000000..bd2b485 Binary files /dev/null and b/public/images/sponsors/factored/18.webp differ diff --git a/public/images/sponsors/factored/19.webp b/public/images/sponsors/factored/19.webp new file mode 100644 index 0000000..f25ccac Binary files /dev/null and b/public/images/sponsors/factored/19.webp differ diff --git a/public/images/sponsors/factored/2.webp b/public/images/sponsors/factored/2.webp new file mode 100644 index 0000000..3637039 Binary files /dev/null and b/public/images/sponsors/factored/2.webp differ diff --git a/public/images/sponsors/factored/20.webp b/public/images/sponsors/factored/20.webp new file mode 100644 index 0000000..e972237 Binary files /dev/null and b/public/images/sponsors/factored/20.webp differ diff --git a/public/images/sponsors/factored/21.webp b/public/images/sponsors/factored/21.webp new file mode 100644 index 0000000..08c979e Binary files /dev/null and b/public/images/sponsors/factored/21.webp differ diff --git a/public/images/sponsors/factored/22.webp b/public/images/sponsors/factored/22.webp new file mode 100644 index 0000000..0f03579 Binary files /dev/null and b/public/images/sponsors/factored/22.webp differ diff --git a/public/images/sponsors/factored/23.webp b/public/images/sponsors/factored/23.webp new file mode 100644 index 0000000..1ce7ba3 Binary files /dev/null and b/public/images/sponsors/factored/23.webp differ diff --git a/public/images/sponsors/factored/24.webp b/public/images/sponsors/factored/24.webp new file mode 100644 index 0000000..5c844e5 Binary files /dev/null and b/public/images/sponsors/factored/24.webp differ diff --git a/public/images/sponsors/factored/25.webp b/public/images/sponsors/factored/25.webp new file mode 100644 index 0000000..e042257 Binary files /dev/null and b/public/images/sponsors/factored/25.webp differ diff --git a/public/images/sponsors/factored/26.webp b/public/images/sponsors/factored/26.webp new file mode 100644 index 0000000..0a3ce41 Binary files /dev/null and b/public/images/sponsors/factored/26.webp differ diff --git a/public/images/sponsors/factored/27.webp b/public/images/sponsors/factored/27.webp new file mode 100644 index 0000000..80fd374 Binary files /dev/null and b/public/images/sponsors/factored/27.webp differ diff --git a/public/images/sponsors/factored/28.webp b/public/images/sponsors/factored/28.webp new file mode 100644 index 0000000..5c59f15 Binary files /dev/null and b/public/images/sponsors/factored/28.webp differ diff --git a/public/images/sponsors/factored/29.webp b/public/images/sponsors/factored/29.webp new file mode 100644 index 0000000..641e201 Binary files /dev/null and b/public/images/sponsors/factored/29.webp differ diff --git a/public/images/sponsors/factored/3.webp b/public/images/sponsors/factored/3.webp new file mode 100644 index 0000000..8a1aa82 Binary files /dev/null and b/public/images/sponsors/factored/3.webp differ diff --git a/public/images/sponsors/factored/30.webp b/public/images/sponsors/factored/30.webp new file mode 100644 index 0000000..292a6ea Binary files /dev/null and b/public/images/sponsors/factored/30.webp differ diff --git a/public/images/sponsors/factored/31.webp b/public/images/sponsors/factored/31.webp new file mode 100644 index 0000000..34d2363 Binary files /dev/null and b/public/images/sponsors/factored/31.webp differ diff --git a/public/images/sponsors/factored/32.webp b/public/images/sponsors/factored/32.webp new file mode 100644 index 0000000..6317c93 Binary files /dev/null and b/public/images/sponsors/factored/32.webp differ diff --git a/public/images/sponsors/factored/33.webp b/public/images/sponsors/factored/33.webp new file mode 100644 index 0000000..3d02657 Binary files /dev/null and b/public/images/sponsors/factored/33.webp differ diff --git a/public/images/sponsors/factored/34.webp b/public/images/sponsors/factored/34.webp new file mode 100644 index 0000000..ff71cfd Binary files /dev/null and b/public/images/sponsors/factored/34.webp differ diff --git a/public/images/sponsors/factored/35.webp b/public/images/sponsors/factored/35.webp new file mode 100644 index 0000000..7fb9253 Binary files /dev/null and b/public/images/sponsors/factored/35.webp differ diff --git a/public/images/sponsors/factored/36.webp b/public/images/sponsors/factored/36.webp new file mode 100644 index 0000000..941353c Binary files /dev/null and b/public/images/sponsors/factored/36.webp differ diff --git a/public/images/sponsors/factored/37.webp b/public/images/sponsors/factored/37.webp new file mode 100644 index 0000000..5ef375d Binary files /dev/null and b/public/images/sponsors/factored/37.webp differ diff --git a/public/images/sponsors/factored/38.webp b/public/images/sponsors/factored/38.webp new file mode 100644 index 0000000..fc5717a Binary files /dev/null and b/public/images/sponsors/factored/38.webp differ diff --git a/public/images/sponsors/factored/39.webp b/public/images/sponsors/factored/39.webp new file mode 100644 index 0000000..c214945 Binary files /dev/null and b/public/images/sponsors/factored/39.webp differ diff --git a/public/images/sponsors/factored/4.webp b/public/images/sponsors/factored/4.webp new file mode 100644 index 0000000..4573b2d Binary files /dev/null and b/public/images/sponsors/factored/4.webp differ diff --git a/public/images/sponsors/factored/40.webp b/public/images/sponsors/factored/40.webp new file mode 100644 index 0000000..63a2074 Binary files /dev/null and b/public/images/sponsors/factored/40.webp differ diff --git a/public/images/sponsors/factored/41.webp b/public/images/sponsors/factored/41.webp new file mode 100644 index 0000000..942c5c5 Binary files /dev/null and b/public/images/sponsors/factored/41.webp differ diff --git a/public/images/sponsors/factored/42.webp b/public/images/sponsors/factored/42.webp new file mode 100644 index 0000000..5770ea4 Binary files /dev/null and b/public/images/sponsors/factored/42.webp differ diff --git a/public/images/sponsors/factored/43.webp b/public/images/sponsors/factored/43.webp new file mode 100644 index 0000000..85692cf Binary files /dev/null and b/public/images/sponsors/factored/43.webp differ diff --git a/public/images/sponsors/factored/44.webp b/public/images/sponsors/factored/44.webp new file mode 100644 index 0000000..80b0b47 Binary files /dev/null and b/public/images/sponsors/factored/44.webp differ diff --git a/public/images/sponsors/factored/45.webp b/public/images/sponsors/factored/45.webp new file mode 100644 index 0000000..5b9b96e Binary files /dev/null and b/public/images/sponsors/factored/45.webp differ diff --git a/public/images/sponsors/factored/46.webp b/public/images/sponsors/factored/46.webp new file mode 100644 index 0000000..32b7fd5 Binary files /dev/null and b/public/images/sponsors/factored/46.webp differ diff --git a/public/images/sponsors/factored/47.webp b/public/images/sponsors/factored/47.webp new file mode 100644 index 0000000..3ba6f20 Binary files /dev/null and b/public/images/sponsors/factored/47.webp differ diff --git a/public/images/sponsors/factored/48.webp b/public/images/sponsors/factored/48.webp new file mode 100644 index 0000000..1ef4539 Binary files /dev/null and b/public/images/sponsors/factored/48.webp differ diff --git a/public/images/sponsors/factored/49.webp b/public/images/sponsors/factored/49.webp new file mode 100644 index 0000000..a1a5c31 Binary files /dev/null and b/public/images/sponsors/factored/49.webp differ diff --git a/public/images/sponsors/factored/5.webp b/public/images/sponsors/factored/5.webp new file mode 100644 index 0000000..34aba1c Binary files /dev/null and b/public/images/sponsors/factored/5.webp differ diff --git a/public/images/sponsors/factored/50.webp b/public/images/sponsors/factored/50.webp new file mode 100644 index 0000000..303c3a6 Binary files /dev/null and b/public/images/sponsors/factored/50.webp differ diff --git a/public/images/sponsors/factored/51.webp b/public/images/sponsors/factored/51.webp new file mode 100644 index 0000000..ef39f53 Binary files /dev/null and b/public/images/sponsors/factored/51.webp differ diff --git a/public/images/sponsors/factored/52.webp b/public/images/sponsors/factored/52.webp new file mode 100644 index 0000000..aba5631 Binary files /dev/null and b/public/images/sponsors/factored/52.webp differ diff --git a/public/images/sponsors/factored/53.webp b/public/images/sponsors/factored/53.webp new file mode 100644 index 0000000..7377955 Binary files /dev/null and b/public/images/sponsors/factored/53.webp differ diff --git a/public/images/sponsors/factored/54.webp b/public/images/sponsors/factored/54.webp new file mode 100644 index 0000000..f15992c Binary files /dev/null and b/public/images/sponsors/factored/54.webp differ diff --git a/public/images/sponsors/factored/55.webp b/public/images/sponsors/factored/55.webp new file mode 100644 index 0000000..78dec02 Binary files /dev/null and b/public/images/sponsors/factored/55.webp differ diff --git a/public/images/sponsors/factored/56.webp b/public/images/sponsors/factored/56.webp new file mode 100644 index 0000000..c5914eb Binary files /dev/null and b/public/images/sponsors/factored/56.webp differ diff --git a/public/images/sponsors/factored/57.webp b/public/images/sponsors/factored/57.webp new file mode 100644 index 0000000..6180655 Binary files /dev/null and b/public/images/sponsors/factored/57.webp differ diff --git a/public/images/sponsors/factored/58.webp b/public/images/sponsors/factored/58.webp new file mode 100644 index 0000000..171da1e Binary files /dev/null and b/public/images/sponsors/factored/58.webp differ diff --git a/public/images/sponsors/factored/59.webp b/public/images/sponsors/factored/59.webp new file mode 100644 index 0000000..0ae9d59 Binary files /dev/null and b/public/images/sponsors/factored/59.webp differ diff --git a/public/images/sponsors/factored/6.webp b/public/images/sponsors/factored/6.webp new file mode 100644 index 0000000..435b403 Binary files /dev/null and b/public/images/sponsors/factored/6.webp differ diff --git a/public/images/sponsors/factored/60.webp b/public/images/sponsors/factored/60.webp new file mode 100644 index 0000000..d05d4ac Binary files /dev/null and b/public/images/sponsors/factored/60.webp differ diff --git a/public/images/sponsors/factored/61.webp b/public/images/sponsors/factored/61.webp new file mode 100644 index 0000000..ec3bb84 Binary files /dev/null and b/public/images/sponsors/factored/61.webp differ diff --git a/public/images/sponsors/factored/62.webp b/public/images/sponsors/factored/62.webp new file mode 100644 index 0000000..88a2327 Binary files /dev/null and b/public/images/sponsors/factored/62.webp differ diff --git a/public/images/sponsors/factored/63.webp b/public/images/sponsors/factored/63.webp new file mode 100644 index 0000000..5970d96 Binary files /dev/null and b/public/images/sponsors/factored/63.webp differ diff --git a/public/images/sponsors/factored/64.webp b/public/images/sponsors/factored/64.webp new file mode 100644 index 0000000..53bcb82 Binary files /dev/null and b/public/images/sponsors/factored/64.webp differ diff --git a/public/images/sponsors/factored/65.webp b/public/images/sponsors/factored/65.webp new file mode 100644 index 0000000..7366d53 Binary files /dev/null and b/public/images/sponsors/factored/65.webp differ diff --git a/public/images/sponsors/factored/66.webp b/public/images/sponsors/factored/66.webp new file mode 100644 index 0000000..2c2f17d Binary files /dev/null and b/public/images/sponsors/factored/66.webp differ diff --git a/public/images/sponsors/factored/67.webp b/public/images/sponsors/factored/67.webp new file mode 100644 index 0000000..4c5e9c1 Binary files /dev/null and b/public/images/sponsors/factored/67.webp differ diff --git a/public/images/sponsors/factored/68.webp b/public/images/sponsors/factored/68.webp new file mode 100644 index 0000000..5f8a7d0 Binary files /dev/null and b/public/images/sponsors/factored/68.webp differ diff --git a/public/images/sponsors/factored/69.webp b/public/images/sponsors/factored/69.webp new file mode 100644 index 0000000..ac535ce Binary files /dev/null and b/public/images/sponsors/factored/69.webp differ diff --git a/public/images/sponsors/factored/7.webp b/public/images/sponsors/factored/7.webp new file mode 100644 index 0000000..b4f4628 Binary files /dev/null and b/public/images/sponsors/factored/7.webp differ diff --git a/public/images/sponsors/factored/70.webp b/public/images/sponsors/factored/70.webp new file mode 100644 index 0000000..5d23466 Binary files /dev/null and b/public/images/sponsors/factored/70.webp differ diff --git a/public/images/sponsors/factored/71.webp b/public/images/sponsors/factored/71.webp new file mode 100644 index 0000000..aae0228 Binary files /dev/null and b/public/images/sponsors/factored/71.webp differ diff --git a/public/images/sponsors/factored/72.webp b/public/images/sponsors/factored/72.webp new file mode 100644 index 0000000..5753cfb Binary files /dev/null and b/public/images/sponsors/factored/72.webp differ diff --git a/public/images/sponsors/factored/73.webp b/public/images/sponsors/factored/73.webp new file mode 100644 index 0000000..08dd5f1 Binary files /dev/null and b/public/images/sponsors/factored/73.webp differ diff --git a/public/images/sponsors/factored/74.webp b/public/images/sponsors/factored/74.webp new file mode 100644 index 0000000..588b1ff Binary files /dev/null and b/public/images/sponsors/factored/74.webp differ diff --git a/public/images/sponsors/factored/75.webp b/public/images/sponsors/factored/75.webp new file mode 100644 index 0000000..74b9649 Binary files /dev/null and b/public/images/sponsors/factored/75.webp differ diff --git a/public/images/sponsors/factored/76.webp b/public/images/sponsors/factored/76.webp new file mode 100644 index 0000000..0e0a689 Binary files /dev/null and b/public/images/sponsors/factored/76.webp differ diff --git a/public/images/sponsors/factored/77.webp b/public/images/sponsors/factored/77.webp new file mode 100644 index 0000000..2b93ce8 Binary files /dev/null and b/public/images/sponsors/factored/77.webp differ diff --git a/public/images/sponsors/factored/78.webp b/public/images/sponsors/factored/78.webp new file mode 100644 index 0000000..2b93ce8 Binary files /dev/null and b/public/images/sponsors/factored/78.webp differ diff --git a/public/images/sponsors/factored/79.webp b/public/images/sponsors/factored/79.webp new file mode 100644 index 0000000..7052076 Binary files /dev/null and b/public/images/sponsors/factored/79.webp differ diff --git a/public/images/sponsors/factored/8.webp b/public/images/sponsors/factored/8.webp new file mode 100644 index 0000000..e8c648b Binary files /dev/null and b/public/images/sponsors/factored/8.webp differ diff --git a/public/images/sponsors/factored/80.webp b/public/images/sponsors/factored/80.webp new file mode 100644 index 0000000..28f5a90 Binary files /dev/null and b/public/images/sponsors/factored/80.webp differ diff --git a/public/images/sponsors/factored/81.webp b/public/images/sponsors/factored/81.webp new file mode 100644 index 0000000..ec798bb Binary files /dev/null and b/public/images/sponsors/factored/81.webp differ diff --git a/public/images/sponsors/factored/82.webp b/public/images/sponsors/factored/82.webp new file mode 100644 index 0000000..71ac5b4 Binary files /dev/null and b/public/images/sponsors/factored/82.webp differ diff --git a/public/images/sponsors/factored/83.webp b/public/images/sponsors/factored/83.webp new file mode 100644 index 0000000..53241b8 Binary files /dev/null and b/public/images/sponsors/factored/83.webp differ diff --git a/public/images/sponsors/factored/84.webp b/public/images/sponsors/factored/84.webp new file mode 100644 index 0000000..14e3360 Binary files /dev/null and b/public/images/sponsors/factored/84.webp differ diff --git a/public/images/sponsors/factored/85.webp b/public/images/sponsors/factored/85.webp new file mode 100644 index 0000000..588b1ff Binary files /dev/null and b/public/images/sponsors/factored/85.webp differ diff --git a/public/images/sponsors/factored/86.webp b/public/images/sponsors/factored/86.webp new file mode 100644 index 0000000..cc23290 Binary files /dev/null and b/public/images/sponsors/factored/86.webp differ diff --git a/public/images/sponsors/factored/87.webp b/public/images/sponsors/factored/87.webp new file mode 100644 index 0000000..68cddd0 Binary files /dev/null and b/public/images/sponsors/factored/87.webp differ diff --git a/public/images/sponsors/factored/88.webp b/public/images/sponsors/factored/88.webp new file mode 100644 index 0000000..5607dc6 Binary files /dev/null and b/public/images/sponsors/factored/88.webp differ diff --git a/public/images/sponsors/factored/89.webp b/public/images/sponsors/factored/89.webp new file mode 100644 index 0000000..753b851 Binary files /dev/null and b/public/images/sponsors/factored/89.webp differ diff --git a/public/images/sponsors/factored/9.webp b/public/images/sponsors/factored/9.webp new file mode 100644 index 0000000..558f65b Binary files /dev/null and b/public/images/sponsors/factored/9.webp differ diff --git a/public/images/sponsors/factored/90.webp b/public/images/sponsors/factored/90.webp new file mode 100644 index 0000000..cc7f17e Binary files /dev/null and b/public/images/sponsors/factored/90.webp differ diff --git a/public/images/sponsors/factored/91.webp b/public/images/sponsors/factored/91.webp new file mode 100644 index 0000000..ed6c862 Binary files /dev/null and b/public/images/sponsors/factored/91.webp differ diff --git a/public/images/sponsors/factored/92.webp b/public/images/sponsors/factored/92.webp new file mode 100644 index 0000000..860edf9 Binary files /dev/null and b/public/images/sponsors/factored/92.webp differ diff --git a/public/images/sponsors/factored/93.webp b/public/images/sponsors/factored/93.webp new file mode 100644 index 0000000..ed5c037 Binary files /dev/null and b/public/images/sponsors/factored/93.webp differ diff --git a/public/images/sponsors/factored/94.webp b/public/images/sponsors/factored/94.webp new file mode 100644 index 0000000..37f30e0 Binary files /dev/null and b/public/images/sponsors/factored/94.webp differ diff --git a/public/images/sponsors/factored/95.webp b/public/images/sponsors/factored/95.webp new file mode 100644 index 0000000..79ff1b4 Binary files /dev/null and b/public/images/sponsors/factored/95.webp differ diff --git a/public/images/sponsors/factored/96.webp b/public/images/sponsors/factored/96.webp new file mode 100644 index 0000000..fb60b3f Binary files /dev/null and b/public/images/sponsors/factored/96.webp differ diff --git a/public/images/sponsors/factored/97.webp b/public/images/sponsors/factored/97.webp new file mode 100644 index 0000000..1146b97 Binary files /dev/null and b/public/images/sponsors/factored/97.webp differ diff --git a/public/images/sponsors/factored/98.webp b/public/images/sponsors/factored/98.webp new file mode 100644 index 0000000..98892cd Binary files /dev/null and b/public/images/sponsors/factored/98.webp differ diff --git a/public/images/sponsors/factored/99.webp b/public/images/sponsors/factored/99.webp new file mode 100644 index 0000000..98892cd Binary files /dev/null and b/public/images/sponsors/factored/99.webp differ diff --git a/src/assets/data/sponsor-gallery.ts b/src/assets/data/sponsor-gallery.ts index 73784b0..4322e0b 100644 --- a/src/assets/data/sponsor-gallery.ts +++ b/src/assets/data/sponsor-gallery.ts @@ -1,6 +1,7 @@ import type { GalleryImage } from "@/assets/data/gallery"; import { aimpointGalleryImages } from "@/assets/data/sponsor-gallery/aimpoint"; import { epamGalleryImages } from "@/assets/data/sponsor-gallery/epam"; +import { factoredGalleryImages } from "@/assets/data/sponsor-gallery/factored"; import { genlogsGalleryImages } from "@/assets/data/sponsor-gallery/genlogs"; import { lokaGalleryImages } from "@/assets/data/sponsor-gallery/loka"; import { provectusGalleryImages } from "@/assets/data/sponsor-gallery/provectus"; @@ -9,6 +10,7 @@ import { slalomGalleryImages } from "@/assets/data/sponsor-gallery/slalom"; const sponsorGalleryBySlug: Partial> = { aimpoint: aimpointGalleryImages, epam: epamGalleryImages, + factored: factoredGalleryImages, genlogs: genlogsGalleryImages, loka: lokaGalleryImages, provectus: provectusGalleryImages, diff --git a/src/assets/data/sponsor-gallery/factored.ts b/src/assets/data/sponsor-gallery/factored.ts new file mode 100644 index 0000000..e4499dc --- /dev/null +++ b/src/assets/data/sponsor-gallery/factored.ts @@ -0,0 +1,457 @@ +import type { GalleryImage } from "@/assets/data/gallery"; + +/** Gallery images for Factored — files in public/images/sponsors/factored/ */ +export const factoredGalleryImages: GalleryImage[] = [ + { + src: "/images/sponsors/factored/1.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/2.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/3.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/4.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/5.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/6.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/7.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/8.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/9.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/10.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/11.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/12.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/13.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/14.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/15.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/16.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/17.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/18.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/19.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/20.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/21.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/22.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/23.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/24.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/25.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/26.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/27.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/28.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/29.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/30.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/31.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/32.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/33.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/34.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/35.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/36.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/37.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/38.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/39.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/40.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/41.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/42.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/43.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/44.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/45.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/46.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/47.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/48.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/49.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/50.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/51.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/52.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/53.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/54.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/55.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/56.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/57.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/58.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/59.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/60.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/61.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/62.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/63.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/64.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/65.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/66.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/67.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/68.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/69.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/70.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/71.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/72.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/73.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/74.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/75.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/76.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/77.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/78.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/79.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/80.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/81.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/82.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/83.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/84.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/85.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/86.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/87.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/88.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/89.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/90.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/91.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/92.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/93.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/94.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/95.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/96.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/97.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/98.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/99.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/100.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/101.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/102.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/103.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/104.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/105.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/106.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/107.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/108.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/109.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/110.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/111.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/112.webp", + alt: "Factored at PyCon Colombia", + }, + { + src: "/images/sponsors/factored/113.webp", + alt: "Factored at PyCon Colombia", + }, +]; diff --git a/src/assets/data/sponsor-videos.ts b/src/assets/data/sponsor-videos.ts index a736560..d8c7d8d 100644 --- a/src/assets/data/sponsor-videos.ts +++ b/src/assets/data/sponsor-videos.ts @@ -1,5 +1,6 @@ import { aimpointVideos } from "@/assets/data/sponsor-videos/aimpoint"; import { epamVideos } from "@/assets/data/sponsor-videos/epam"; +import { factoredVideos } from "@/assets/data/sponsor-videos/factored"; import { interledgerVideos } from "@/assets/data/sponsor-videos/interledger"; import { lokaVideos } from "@/assets/data/sponsor-videos/loka"; import { provectusVideos } from "@/assets/data/sponsor-videos/provectus"; @@ -13,6 +14,7 @@ export type SponsorVideo = { const sponsorVideosBySlug: Partial> = { aimpoint: aimpointVideos, epam: epamVideos, + factored: factoredVideos, interledger: interledgerVideos, loka: lokaVideos, provectus: provectusVideos, diff --git a/src/assets/data/sponsor-videos/factored.ts b/src/assets/data/sponsor-videos/factored.ts new file mode 100644 index 0000000..90bc130 --- /dev/null +++ b/src/assets/data/sponsor-videos/factored.ts @@ -0,0 +1,12 @@ +import type { SponsorVideo } from "@/assets/data/sponsor-videos"; + +export const factoredVideos: SponsorVideo[] = [ + { + youtubeId: "lAmwtHvkzsI", + title: "Factored at PyCon Colombia", + }, + { + youtubeId: "exnHYpZDPwA", + title: "Factored at PyCon Colombia", + }, +]; diff --git a/src/assets/data/sponsors-detail.locale.ts b/src/assets/data/sponsors-detail.locale.ts index 78eafd5..9003846 100644 --- a/src/assets/data/sponsors-detail.locale.ts +++ b/src/assets/data/sponsors-detail.locale.ts @@ -80,6 +80,14 @@ export const sponsorDetailsByLocale: Record = { highlights: [], faqTopics: [], }, + factored: { + paragraphs: [ + "Founded in Palo Alto by Dr. Andrew Ng and Israel Niezen, Factored helps U.S. companies build and scale world-class AI, ML, and Data teams, powered by the top 1% of LATAM talent, with a defining purpose: To empower brilliant humans, unleash their potential, and amplify their impact in the world.", + "At Factored, you'll be part of a community that values learning, ownership, and authenticity, where your growth is personal and your ideas matter. We're transparent, curious, and collaborative. We strive for excellence, celebrate diversity, encourage curiosity, and build an environment where you can truly thrive.", + ], + highlights: [], + faqTopics: [], + }, nequi: { paragraphs: [ "Nequi is a Colombian neobank that is transforming the way people manage their money by building a digital financial ecosystem that goes far beyond a traditional account or digital wallet. Through a simple, customer-centric, and fully digital experience, Nequi offers solutions for saving, making payments, transferring funds, receiving remittances, accessing credit, managing personal finances, and connecting users with a wide range of services that simplify everyday life. With more than 28 million users, Nequi has established itself as a world of financial and non-financial possibilities, fostering inclusion, empowerment, and access to opportunities, enabling people to achieve their goals in an easier, safer, and more convenient way.", @@ -198,6 +206,14 @@ export const sponsorDetailsByLocale: Record = { highlights: [], faqTopics: [], }, + factored: { + paragraphs: [ + "Fundada en Palo Alto por el Dr. Andrew Ng e Israel Niezen, Factored ayuda a empresas estadounidenses a construir y escalar equipos de IA, ML y Data de clase mundial, impulsados por el 1% superior del talento de LATAM, con un propósito definitorio: empoderar a humanos brillantes, liberar su potencial y amplificar su impacto en el mundo.", + "En Factored, serás parte de una comunidad que valora el aprendizaje, la propiedad y la autenticidad, donde tu crecimiento es personal y tus ideas importan. Somos transparentes, curiosos y colaborativos. Buscamos la excelencia, celebramos la diversidad, fomentamos la curiosidad y construimos un entorno donde puedas prosperar de verdad.", + ], + highlights: [], + faqTopics: [], + }, nequi: { paragraphs: [ "Nequi es un neobanco colombiano que está transformando la manera en que las personas gestionan su plata, construyendo un ecosistema financiero digital que va más allá de una cuenta o una billetera. A través de una experiencia simple, cercana y 100% digital, ofrece soluciones para ahorrar, pagar, transferir, recibir remesas, acceder a créditos, administrar finanzas y conectar con múltiples servicios que facilitan la vida diaria. Con más de 28 millones de usuarios, Nequi se ha consolidado como un mundo de posibilidades financieras y no financieras que impulsa la inclusión, la autonomía y el acceso a oportunidades, permitiendo que cada persona alcance sus metas de forma más fácil, segura y conveniente.", diff --git a/src/components/blocks/sponsors/sponsor-detail.tsx b/src/components/blocks/sponsors/sponsor-detail.tsx index e8db76c..9d1ce47 100644 --- a/src/components/blocks/sponsors/sponsor-detail.tsx +++ b/src/components/blocks/sponsors/sponsor-detail.tsx @@ -234,7 +234,7 @@ const SponsorDetail = ({ slug }: SponsorDetailProps) => {
diff --git a/src/components/gallery/gallery-marquee-carousel.tsx b/src/components/gallery/gallery-marquee-carousel.tsx index e0baf02..db432fe 100644 --- a/src/components/gallery/gallery-marquee-carousel.tsx +++ b/src/components/gallery/gallery-marquee-carousel.tsx @@ -14,6 +14,8 @@ const defaultImageClassName = export type GalleryMarqueeCarouselProps = { images: GalleryImage[]; duration?: number; + /** Constant scroll speed in px/s. Overrides duration when set. */ + pixelsPerSecond?: number; gap?: number; showEdgeFade?: boolean; imageClassName?: string; @@ -30,6 +32,7 @@ export type GalleryMarqueeCarouselProps = { const GalleryMarqueeCarousel = ({ images, duration = 22, + pixelsPerSecond = 130, gap = 1.5, showEdgeFade = true, imageClassName = defaultImageClassName, @@ -97,14 +100,25 @@ const GalleryMarqueeCarousel = ({ ) : null}
- + {galleryRows[0].map((image, index) => renderImage(image, index))} {galleryRows[1].length > 0 ? (
- + {galleryRows[1].map((image, index) => renderImage(image, index + galleryRows[0].length), )} diff --git a/src/components/ui/marquee.tsx b/src/components/ui/marquee.tsx index 1cb00cb..82fdc50 100644 --- a/src/components/ui/marquee.tsx +++ b/src/components/ui/marquee.tsx @@ -1,11 +1,22 @@ -import type * as React from "react"; +"use client"; + +import { + type ComponentPropsWithoutRef, + type CSSProperties, + type ReactNode, + useLayoutEffect, + useRef, + useState, +} from "react"; import { cn } from "@/lib/utils"; -interface MarqueeProps extends React.ComponentPropsWithoutRef<"div"> { - children: React.ReactNode; +interface MarqueeProps extends ComponentPropsWithoutRef<"div"> { + children: ReactNode; className?: string; duration?: number; + /** When set, scroll speed stays constant regardless of content width. */ + pixelsPerSecond?: number; delay?: number; gap?: number; pauseOnHover?: boolean; @@ -18,7 +29,8 @@ function Marquee(props: MarqueeProps) { const { children, className, - duration = 40, + duration: durationProp = 40, + pixelsPerSecond, delay = 0, gap = 1, pauseOnHover = false, @@ -28,6 +40,39 @@ function Marquee(props: MarqueeProps) { ...rest } = props; + const trackRef = useRef(null); + const [duration, setDuration] = useState(durationProp); + + useLayoutEffect(() => { + if (!pixelsPerSecond) { + setDuration(durationProp); + return; + } + + const track = trackRef.current; + + if (!track) { + return; + } + + const updateDuration = () => { + const size = vertical + ? track.getBoundingClientRect().height + : track.getBoundingClientRect().width; + + if (size > 0) { + setDuration(size / pixelsPerSecond); + } + }; + + updateDuration(); + + const observer = new ResizeObserver(updateDuration); + observer.observe(track); + + return () => observer.disconnect(); + }, [pixelsPerSecond, durationProp, vertical]); + return (
{Array(repeat) .fill(0) - .map((_, i) => ( + .map((_, index) => (