Repository: javaBin/2025.javazone.no-native
Pull request #49: fix/android
Author: login: carolinevannebo
Created: 2025-04-08T18:10:53Z | Merged: 2025-04-09T01:54:44Z

- Fixed styling issues on android
- Fixed partner logos placement on native (android+iOS)
- Removed unnecessary titles
- Fixed subtitles on volunteer page
- Removed aboveit and arktek

Todo: we need to update google cloud logo, and add SSB and Statens Kartverk
Todo: we still need to fix SVGs, but this version should still go to prod... unless you find something funky 😈

<img width="1792" alt="Screenshot 2025-04-08 at 20 11 10" src="https://github.com/user-attachments/assets/467339e2-5a40-4971-a131-59080371cd02" />



Diff:
diff --git a/.gitignore b/.gitignore
index 3187a0c..46ca4f1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,3 +61,6 @@ xcuserdata
 */ios/build
 /ios/
 /android/
+
+# eslint
+eslint-report.json
\ No newline at end of file
diff --git a/Assets.ts b/Assets.ts
index 0f724ee..4707863 100644
--- a/Assets.ts
+++ b/Assets.ts
@@ -1,4 +1,4 @@
-import { StyleSheet, Dimensions } from 'react-native';
+import { StyleSheet, Dimensions, Platform } from 'react-native';
 // @ts-ignore
 import Doughnut from '@/assets/images/javaZone2022Doughnut.webp';
 
@@ -43,9 +43,7 @@ import Speaker from '@/assets/icons/speaker.svg';
 import SpeakerInactive from '@/assets/icons/speaker-inactive.svg';
 
 // Partner logos
-import Aboveit from '@/assets/partners/aboveit.svg';
 import Accenture from '@/assets/partners/accenture.svg';
-import Arktekk from '@/assets/partners/arktekk.svg';
 import Bekk from '@/assets/partners/bekk.svg';
 import Bouvet from '@/assets/partners/bouvet.svg';
 import Capgemini from '@/assets/partners/capgemini.svg';
@@ -174,9 +172,7 @@ export const Assets = {
     HandHeartActive,
   },
   partnerLogos: {
-    Aboveit,
     Accenture,
-    Arktekk,
     Bekk,
     Bouvet,
     Capgemini,
@@ -335,12 +331,15 @@ export const Assets = {
       width: '100%',
     },
     section: {
+      /** note: this cannot have overflow hidden, that will remove shadow on iOS,
+       * it cannot have borderRadius either, because that would require overflow hidden
+       * so let it have sharp edges on native, prioritize contrast over roundness */
       width: '100%',
       marginHorizontal: 20,
       marginVertical: 8,
-      borderRadius: 5,
       paddingVertical: 20,
       paddingHorizontal: 30,
+      borderRadius: 5, // only for web
     },
     intro: {
       color: '#403532', // dark-brown
@@ -363,15 +362,19 @@ export const Assets = {
     },
     disclaimerText: {
       color: '#6c605c', // light-brown
-      fontSize: screenWidth > 768 ? 16 : 14,
+      marginVertical: 5,
+      fontSize: screenWidth > 768 ? 20 : 18,
       fontFamily: 'PlayfairDisplay_400Regular',
+      textAlign: 'justify',
     },
     shadow: {
-      elevation: 2, // Shadow effect for Android
-      shadowColor: '#403532', // dark-brown, iOS shadow
-      shadowOpacity: 0.1,
-      shadowRadius: 3,
-      shadowOffset: { width: 0, height: 2 },
+      /** note: this will only work if overflow hidden is disabled, see comment under Assets.styles.section
+       *  don't touch! 💅🏼 */
+      shadowColor: '#403532', // dark-brown
+      elevation: 7, // android
+      shadowRadius: Platform.OS === 'web' ? 3 : 7,
+      shadowOpacity: Platform.OS === 'web' ? .1 : .2,
+      shadowOffset: { width: 0, height: 3 },
     },
   }),
 };
@@ -412,9 +415,7 @@ export {
   Gjensidige,
   Google,
   Husbanken,
-  Aboveit,
   Accenture,
-  Arktekk,
   Bekk,
   Bouvet,
   Cloudberries,
diff --git a/UI/LinkButton.tsx b/UI/LinkButton.tsx
index 281ad5c..9ca1bf0 100644
--- a/UI/LinkButton.tsx
+++ b/UI/LinkButton.tsx
@@ -2,7 +2,7 @@ import React from 'react';
 import { Assets } from '@/Assets';
 import { LinearGradient } from 'expo-linear-gradient';
 import { Link } from 'expo-router';
-import { Dimensions, StyleSheet, TouchableOpacity } from 'react-native';
+import {Dimensions, Platform, StyleSheet, TouchableOpacity} from 'react-native';
 
 type LinkButtonProps = {
   href: string;
@@ -10,16 +10,22 @@ type LinkButtonProps = {
   targetBlank?: boolean;
   margin?: number;
   disabled?: boolean;
+  androidBlurPatch?: boolean;
 };
 
-const LinkButton: React.FC<LinkButtonProps> = ({ href, title, targetBlank, margin, disabled }) => {
+const LinkButton: React.FC<LinkButtonProps> = ({ href, title, targetBlank, margin, disabled, androidBlurPatch }) => {
   return (
     <TouchableOpacity
-      style={[styles.buttonContainer, { margin: margin ? margin : 0 }, disabled && styles.disabledButton]}
+      style={[
+        styles.buttonContainer,
+        disabled && styles.disabledButton,
+        androidBlurPatch && Platform.OS === 'android' ? styles.blurPatch : {},
+        { margin: margin ? margin : 5 }
+      ]}
       disabled={disabled}
     >
         <LinearGradient
-          style={styles.gradient}
+          style={[styles.gradient, Assets.styles.shadow]}
           colors={[Assets.colors.jz2025ThemeColors.crimsonRed, Assets.colors.jz2025ThemeColors.gradientRed]}
         >
           <Link
@@ -38,16 +44,14 @@ const LinkButton: React.FC<LinkButtonProps> = ({ href, title, targetBlank, margi
 export default LinkButton;
 
 const styles = StyleSheet.create({
+  blurPatch: {
+    /** Blur patch needed for buttons in a blurView (android only) - see PR 49 */
+    boxShadow: '0 0 25 5 rgba(247, 243, 241, 0.9)', // don't change
+  },
   buttonContainer: {
-    margin: 5,
     borderRadius: 5,
     alignSelf: 'center',
-    elevation: 2, // Shadow effect for Android
-    shadowColor: Assets.colors.jz2025ThemeColors.darkBrown, // iOS shadow
-    shadowOpacity: 0.1,
-    shadowRadius: 3,
-    shadowOffset: { width: 0, height: 2 },
-    minWidth: 300
+    minWidth: 300,
   },
   gradient: {
     borderRadius: 5,
@@ -61,7 +65,7 @@ const styles = StyleSheet.create({
     fontFamily: 'Cinzel_500Medium',
     textAlign: 'center',
     paddingVertical: 10,
-    paddingHorizontal: Dimensions.get('window').width > 1200 ? 60 : 40,
+    paddingHorizontal: Dimensions.get('window').width > 1200 ? 60 : Platform.OS !== 'web' ? 20 : 30, // don't change! 💅🏼
   },
   disabledButton: {
     opacity: 0.5,
diff --git a/UI/SectionBox.tsx b/UI/SectionBox.tsx
index 8e61332..db1a12f 100644
--- a/UI/SectionBox.tsx
+++ b/UI/SectionBox.tsx
@@ -1,6 +1,6 @@
 import { Assets } from '@/Assets';
 import { BlurView } from 'expo-blur';
-import { Text } from 'react-native';
+import {Platform, Text } from 'react-native';
 import React from 'react';
 
 type SectionBoxProps = {
@@ -8,9 +8,10 @@ type SectionBoxProps = {
   sectionTitle: string;
 };
 
+/** 'dimezisBlurView' is a must for BlurView support on android */
 const SectionBox: React.FC<SectionBoxProps> = ({ children, sectionTitle }) => {
   return (
-    <BlurView tint="light" intensity={20} style={{ ...Assets.styles.section, ...Assets.styles.shadow }}>
+    <BlurView tint="light" intensity={Platform.OS === 'web' ? 20 : 40} experimentalBlurMethod={'dimezisBlurView'} style={{ ...Assets.styles.section, ...Assets.styles.shadow }}>
       <Text style={Assets.styles.sectionTitle}>{sectionTitle}</Text>
       {children}
     </BlurView>
diff --git a/UI/SvgImage.tsx b/UI/SvgImage.tsx
index e87f244..9930224 100644
--- a/UI/SvgImage.tsx
+++ b/UI/SvgImage.tsx
@@ -49,4 +49,4 @@ const styles = StyleSheet.create({
   },
 });
 
-export default SvgImage;
+export default SvgImage;
\ No newline at end of file
diff --git a/UI/index.ts b/UI/index.ts
index 874552e..bcd7a9d 100644
--- a/UI/index.ts
+++ b/UI/index.ts
@@ -1,5 +1,4 @@
-import SvgImage from '@/UI/SvgImage';
-import {SvgCallbackImage} from "@/UI/SvgImage";
+import SvgImage, { SvgCallbackImage } from '@/UI/SvgImage';
 import CircleImage from '@/UI/CircleImage';
 import ToggleText from '@/UI/ToggleText';
 import LinkText from '@/UI/LinkText';
diff --git a/app/[lang]/partner.tsx b/app/[lang]/partner.tsx
index e9ab1b6..9d8300c 100644
--- a/app/[lang]/partner.tsx
+++ b/app/[lang]/partner.tsx
@@ -1,12 +1,11 @@
-import { BulletListItem, ScreenTemplate, VideoPlayer } from '@/components';
+import { BulletListItem, ScreenTemplate, VideoPlayer, PartnerBanner } from '@/components';
 import { useTranslation } from 'react-i18next';
-import { Dimensions, StyleSheet, Text, View } from 'react-native';
+import {Dimensions, Platform, StyleSheet, Text, View} from 'react-native';
 import { useMediaQuery } from 'react-responsive';
 import { Assets } from '@/Assets';
 import React from 'react';
-import { LinkButton, LinkText, SvgImage } from '@/UI';
+import { LinkButton, LinkText } from '@/UI';
 import { BlurView } from 'expo-blur';
-import PartnerBanner from '@/components/PartnerBanner';
 
 const Partner = () => {
   const { t } = useTranslation();
@@ -31,7 +30,7 @@ const Partner = () => {
       </Text>
 
       <View style={styles.partnerContentInfo}>
-        <BlurView tint="light" intensity={20} style={[styles.partnerContentItem, styles.partnerContentItemWidth]}>
+        <BlurView tint="light" intensity={Platform.OS === 'android' ? 40 : 20} experimentalBlurMethod={'dimezisBlurView'} style={[styles.partnerContentItem, styles.partnerContentItemWidth, Assets.styles.shadow]}>
           <Text style={Assets.styles.sectionSubTitle}>{t('partner.partner_info.standard_package')}</Text>
           <Text style={Assets.styles.intro}>{t('partner.partner_info.price')}: 100 000,- NOK ex VAT</Text>
 
@@ -44,7 +43,7 @@ const Partner = () => {
           <BulletListItem text={t('partner.partner_info.standard_package_detail_7')} />
         </BlurView>
 
-        <BlurView tint="light" intensity={20} style={[styles.partnerContentItem, styles.partnerContentItemWidth]}>
+        <BlurView tint="light" intensity={Platform.OS === 'android' ? 40 : 20} experimentalBlurMethod={'dimezisBlurView'} style={[styles.partnerContentItem, styles.partnerContentItemWidth, Assets.styles.shadow]}>
           <Text style={Assets.styles.sectionSubTitle}>{t('partner.partner_info.restaurant_stand')}</Text>
           <Text style={Assets.styles.intro}>{t('partner.partner_info.price')}: 190 000,- NOK ex VAT</Text>
 
@@ -55,7 +54,7 @@ const Partner = () => {
         </BlurView>
 
         <View style={[styles.partnerContentItemWidth, styles.partnerContentItemPairsContainer]}>
-          <BlurView tint="light" intensity={20} style={[styles.partnerContentItem, styles.partnerContentItemPairs]}>
+          <BlurView tint="light" intensity={Platform.OS === 'android' ? 40 : 20} experimentalBlurMethod={'dimezisBlurView'} style={[styles.partnerContentItem, styles.partnerContentItemPairs, Assets.styles.shadow]}>
             <Text style={Assets.styles.sectionSubTitle}>{t('partner.partner_info.concept_stand')}</Text>
             <Text style={Assets.styles.intro}>{t('partner.partner_info.price')}: 190 000,- NOK ex VAT</Text>
 
@@ -64,14 +63,14 @@ const Partner = () => {
             <BulletListItem text={t('partner.partner_info.concept_stand_detail_3')} />
           </BlurView>
 
-          <BlurView tint="light" intensity={20} style={[styles.partnerContentItem, styles.partnerContentItemPairs]}>
+          <BlurView tint="light" intensity={Platform.OS === 'android' ? 40 : 20} experimentalBlurMethod={'dimezisBlurView'} style={[styles.partnerContentItem, styles.partnerContentItemPairs, Assets.styles.shadow]}>
             <Text style={Assets.styles.sectionSubTitle}>{t('partner.partner_info.extended_package')}</Text>
             <Text style={Assets.styles.intro}>{t('partner.partner_info.price')}: 160 000,- NOK ex VAT</Text>
             <Text style={Assets.styles.text}>{t('partner.partner_info.same_as_standard')}</Text>
           </BlurView>
         </View>
 
-        <BlurView tint="light" intensity={20} style={[styles.partnerContentItem, styles.partnerContentItemWidth]}>
+        <BlurView tint="light" intensity={Platform.OS === 'android' ? 40 : 20} experimentalBlurMethod={'dimezisBlurView'} style={[styles.partnerContentItem, styles.partnerContentItemWidth, Assets.styles.shadow]}>
           <Text style={Assets.styles.sectionSubTitle}>{t('partner.partner_info.partner_tickets')}</Text>
           <Text style={Assets.styles.intro}>
             {t('partner.partner_info.price')}: 9 220,- NOK ex VAT {'\n'}incl ticket fee
@@ -85,11 +84,11 @@ const Partner = () => {
             title={t('partner.partner_info.order_tickets')}
             targetBlank={true}
             margin={isMobile ? 10 : 20}
+            androidBlurPatch={Platform.OS === 'android'}
           />
         </BlurView>
       </View>
 
-      <SvgImage SVG={Assets.UI.DividerDot} height={10} style={{ marginBottom: 10, marginTop: 20 }} />
       <View style={styles.videoContainer}>
         <Text style={[Assets.styles.sectionTitle]}>{t('partner.watch_title')}</Text>
         <Text style={[Assets.styles.sectionSubTitle, { marginBottom: 20 }]}>{t('partner.watch_partner_meeting')}</Text>
diff --git a/app/[lang]/speaker/_layout.tsx b/app/[lang]/speaker/_layout.tsx
index cfa9e84..faab4eb 100644
--- a/app/[lang]/speaker/_layout.tsx
+++ b/app/[lang]/speaker/_layout.tsx
@@ -1,20 +1,29 @@
-import {Stack} from "expo-router/stack";
-import {BlurView} from "expo-blur";
-import {Platform, StyleSheet} from "react-native";
-import {Assets} from "@/Assets";
+import React from "react";
+import { Stack } from "expo-router/stack";
+import { BlurView } from "expo-blur";
+import { Platform, StyleSheet, View } from "react-native";
+import { Assets } from "@/Assets";
+import { LanguagePicker } from "@/components/LanguagePicker";
 
-const nativeScreenOptions = {
-    headerShown: true,
-    headerTransparent: true,
-    headerBackground: () => <BlurView tint="light" intensity={90} style={[StyleSheet.absoluteFill]} />,
-    headerTitle: '',
-    headerBackButtonMenuEnabled: true,
-    headerTintColor: Assets.colors.jz2025ThemeColors.vividOrange,
-}
-const webScreenOptions = {
-    headerShown: false,
-}
 const SpeakerLayout = () => {
+
+    const nativeScreenOptions = {
+        headerShown: true,
+        headerTransparent: true,
+        headerBackground: () => <BlurView tint="light" intensity={80} experimentalBlurMethod={'dimezisBlurView'} style={[StyleSheet.absoluteFill]} />,
+        headerTitle: '',
+        headerBackButtonMenuEnabled: true,
+        headerTintColor: Assets.colors.jz2025ThemeColors.vividOrange,
+        headerRight: () => (
+            <View style={{marginRight: -15, marginTop: 5}}>
+                <LanguagePicker />
+            </View>
+        ),
+    }
+    const webScreenOptions = {
+        headerShown: false,
+    }
+
     return (
         <Stack initialRouteName="index" screenOptions={Platform.OS === 'web' ? webScreenOptions : nativeScreenOptions}>
             <Stack.Screen name="index"/>
diff --git a/app/[lang]/speaker/index.tsx b/app/[lang]/speaker/index.tsx
index 3633265..820bb3a 100644
--- a/app/[lang]/speaker/index.tsx
+++ b/app/[lang]/speaker/index.tsx
@@ -1,7 +1,7 @@
 import { BulletListItem, ScreenTemplate } from '@/components';
 import { useTranslation } from 'react-i18next';
 import { LinkText, LinkButton, SectionBox, SvgImage } from '@/UI';
-import { Text } from 'react-native';
+import {Platform, Text} from 'react-native';
 import { Assets } from '@/Assets';
 import React from 'react';
 import { useGlobalSearchParams } from 'expo-router';
@@ -30,10 +30,11 @@ const Speaker = () => {
         <Text style={Assets.styles.text}>{t('speakers.importance_of_speakers')}</Text>
         <Text style={Assets.styles.text}>{t('speakers.commitment_to_diversity')}</Text>
         <LinkButton
-          href="https://vimeo.com/javazone"
-          title={t('speakers.vimeo')}
-          targetBlank={true}
-          margin={isMobile ? 10 : 20}
+            href="https://vimeo.com/javazone"
+            title={t('speakers.vimeo')}
+            targetBlank={true}
+            margin={Platform.OS !== 'android' && isMobile ? 10 : 20}
+            androidBlurPatch={Platform.OS === 'android'}
         />
       </SectionBox>
 
diff --git a/app/[lang]/speaker/reimbursement.tsx b/app/[lang]/speaker/reimbursement.tsx
index f23b1a1..bee32b0 100644
--- a/app/[lang]/speaker/reimbursement.tsx
+++ b/app/[lang]/speaker/reimbursement.tsx
@@ -2,7 +2,7 @@ import { ScreenTemplate } from '@/components';
 import { useTranslation } from 'react-i18next';
 import { StyleSheet, Text } from 'react-native';
 import { Assets } from '@/Assets';
-import {LinkText, SectionBox, SvgImage} from '@/UI';
+import { LinkText, SectionBox, SvgImage } from '@/UI';
 import React from 'react';
 
 const Reimbursement = () => {
diff --git a/app/[lang]/volunteers.tsx b/app/[lang]/volunteers.tsx
index a44e94d..ab6d335 100644
--- a/app/[lang]/volunteers.tsx
+++ b/app/[lang]/volunteers.tsx
@@ -1,10 +1,8 @@
 import { Assets } from '@/Assets';
 import { ScreenTemplate } from '@/components';
-import { LinkButton, SectionBox, ToggleText } from '@/UI';
-import React, { useEffect } from 'react';
-import { useState } from 'react';
+import { LinkButton, SectionBox } from '@/UI';
 import { useTranslation } from 'react-i18next';
-import { Text, View, Dimensions } from 'react-native';
+import { Text, View } from 'react-native';
 
 interface FaqItem {
   key: string;
@@ -14,7 +12,6 @@ interface FaqItem {
 
 const Volunteers: React.FC = () => {
   const { t } = useTranslation();
-  const screenWidth = Dimensions.get('window').width;
 
   const faqItems: FaqItem[] = [
     { key: 'language', title: t('volunteer.faq.language_question'), answer: t('volunteer.faq.language_answer') },
@@ -44,27 +41,14 @@ const Volunteers: React.FC = () => {
     },
   ];
 
-  const [toggles, setToggles] = useState<Record<string, boolean>>(
-    faqItems.reduce((acc, item) => ({ ...acc, [item.key]: false }), {})
-  );
-
-  useEffect(() => {
-    if (screenWidth > 768) {
-      setToggles(faqItems.reduce((acc, item) => ({ ...acc, [item.key]: true }), {}));
-    }
-  }, [screenWidth]);
-
-  const handleToggle = (key: string) => {
-    setToggles((prev) => ({ ...prev, [key]: !prev[key] }));
-  };
-
   return (
     <ScreenTemplate pageTitle={t('volunteer.title')} shouldScrollToTop={true}>
-      {['what_is_javazone', 'description', 'who_are_we_looking_for', 'who_can_apply'].map((textKey) => (
-        <Text key={textKey} style={[Assets.styles.preface, { marginHorizontal: 20 }]}>
-          {t(`volunteer.${textKey}`)}
-        </Text>
-      ))}
+      <Text style={[Assets.styles.sectionSubTitle, { marginHorizontal: 20 }]}>{t('volunteer.what_is_javazone')}</Text>
+      <Text style={[Assets.styles.preface, { marginHorizontal: 20 }]}>{t('volunteer.description')}</Text>
+
+      <Text style={[Assets.styles.sectionSubTitle, { marginHorizontal: 20 }]}>{t('volunteer.who_are_we_looking_for')}</Text>
+      <Text style={[Assets.styles.preface, { marginHorizontal: 20 }]}>{t('volunteer.who_can_apply')}</Text>
+
       <LinkButton
         margin={20}
         title={t('volunteer.apply_now')}
@@ -73,9 +57,9 @@ const Volunteers: React.FC = () => {
       />
       <SectionBox sectionTitle={t('volunteer.faq_title')}>
         {faqItems.map(({ key, title, answer }) => (
-          <View key={key}>
-            <ToggleText title={title} toggle={toggles[key]} handleToggle={() => handleToggle(key)} />
-            {toggles[key] && <Text style={Assets.styles.text}>{answer}</Text>}
+          <View key={key} style={{padding: 10}}>
+            <Text style={Assets.styles.sectionSubTitle}>{title}</Text>
+            <Text style={[Assets.styles.text, {textAlign: 'center'}]}>{answer}</Text>
           </View>
         ))}
       </SectionBox>
diff --git a/app/_layout.tsx b/app/_layout.tsx
index b1ac3dd..0337e5c 100644
--- a/app/_layout.tsx
+++ b/app/_layout.tsx
@@ -5,7 +5,7 @@ import nb from '@/services/i18n/nb-NO.json';
 import React, { FunctionComponent, useEffect, useRef, useState } from 'react';
 import { I18nContextProvider } from '@/contexts/I18nContext';
 import { SafeAreaProvider } from 'react-native-safe-area-context';
-import { Link, Tabs, useGlobalSearchParams, useRouter } from 'expo-router';
+import { Tabs, useGlobalSearchParams, useRouter } from 'expo-router';
 import AsyncStorage from '@react-native-async-storage/async-storage';
 import { AppState, Dimensions, Platform, Pressable, StyleSheet, Text, View } from 'react-native';
 import { Stack } from 'expo-router/stack';
@@ -112,21 +112,24 @@ const RootLayout = () => {
   const styles = StyleSheet.create({
     tabBar: {
       position: 'absolute',
-      bottom: 0,
+      bottom: Platform.OS === 'android' ? 15 : -5, // don't change! 💅🏼
     },
     tabBarLabel: {
       fontSize: 12,
       fontFamily: 'Cinzel_400Regular',
+      alignSelf: 'center',
+      display: 'flex',
+      width: "100%",
     },
     tabBarBlurContainer: {
       flex: 1,
-      padding: 42,
+      padding: Platform.OS === 'android' ? 36 : 42,
       textAlign: 'center',
       justifyContent: 'center',
       overflow: 'hidden',
       position: 'absolute',
       width: '100%',
-      bottom: 0, // only moves blurContainer, not the actual tabs
+      bottom: Platform.OS === 'android' ? -15 : 10, // don't change! 💅🏼
     },
     header: {
       display: 'flex',
@@ -225,7 +228,9 @@ const RootLayout = () => {
             <Text style={styles.navItem}>Info</Text>
           </Pressable>
         </View>
-        <View>{screenWidth >= 768 ? languageLoaded && <LanguagePicker /> : null}</View>
+        <View style={{display: screenWidth > 834 ? 'flex' : 'none'}}>
+          {languageLoaded && <LanguagePicker />}
+        </View>
       </View>
     ),
   };
@@ -237,31 +242,18 @@ const RootLayout = () => {
     tabBarLabelStyle: styles.tabBarLabel,
     tabBarActiveTintColor: Assets.colors.jz2025ThemeColors.vividOrange,
     tabBarInactiveTintColor: Assets.colors.jz2025ThemeColors.darkBrown,
-    tabBarBackground: () => <BlurView tint="light" intensity={80} style={styles.tabBarBlurContainer} />,
+    tabBarBackground: () => <BlurView tint="light" intensity={80} experimentalBlurMethod={'dimezisBlurView'} style={styles.tabBarBlurContainer} />,
     headerShown: true,
     headerTransparent: true,
-    headerBackground: () => <BlurView tint="light" intensity={90} style={[StyleSheet.absoluteFill]} />,
+    headerBackground: () => <BlurView tint="light" intensity={80} experimentalBlurMethod={'dimezisBlurView'} style={[StyleSheet.absoluteFill]} />,
     headerTitle: '',
     headerBackButtonMenuEnabled: true,
+    headerRight: () => languageLoaded && <LanguagePicker />,
   };
 
   const webScreenOptions = {
-    headerTransparent: screenWidth > 768,
-    headerBackground: () =>
-      screenWidth > 768 ? (
-        <BlurView tint="light" intensity={90} style={[StyleSheet.absoluteFill]} />
-      ) : (
-        <View
-          style={[
-            StyleSheet.absoluteFill,
-            {
-              backgroundColor: Assets.colors.jz2025ThemeColors.sheetOpacity,
-              borderBottomColor: '#403431',
-              borderBottomWidth: 0.1,
-            },
-          ]}
-        />
-      ),
+    headerTransparent: true,
+    headerBackground: () => <BlurView tint="light" intensity={100} style={[StyleSheet.absoluteFill]} />,
     headerLeft: () => null, // this is to disable "<-" back button on web-app
     headerRight: () => (
       <Pressable
@@ -357,6 +349,13 @@ const RootLayout = () => {
                   renderIcon(focused, Assets.icons.HandHeartActive, Assets.icons.HandHeartInactive),
               }}
             />
+            <Tabs.Screen
+                name="[lang]/info"
+                options={{
+                  title: 'Info',
+                  tabBarIcon: ({ focused }) => renderIcon(focused, Assets.icons.Info, Assets.icons.InfoInactive),
+                }}
+            />
             <Tabs.Screen name="[lang]/speaker/tips" options={{ href: null }} />
             <Tabs.Screen name="[lang]/speaker/kids" options={{ href: null }} />
             <Tabs.Screen name="[lang]/speaker/reimbursement" options={{ href: null }} />
diff --git a/assets/UI/papyrus-roll.svg b/assets/UI/papyrus-roll.svg
index 591ec1b..61594bf 100644
--- a/assets/UI/papyrus-roll.svg
+++ b/assets/UI/papyrus-roll.svg
@@ -1 +1,30 @@
-<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 286.81 40.98"><defs><style>.cls-1{fill:#d3c5bb;}.cls-1,.cls-2,.cls-3,.cls-4,.cls-5{stroke:#403431;stroke-linecap:round;stroke-miterlimit:10;}.cls-2{fill:#8e8177;}.cls-3{fill:#7a6f65;}.cls-4{fill:#6b6058;}.cls-5{fill:#5e544c;}</style></defs><g id="Layer_1-2"><path class="cls-1" d="M9,40.48h268.8c4.7,0,8.5-8.95,8.5-19.99,0-.99-.03-1.95-.09-2.9-.09-1.43-4.38-2.97-4.38-2.97,0,0,3.31-4.34,2.88-5.74-1.54-5.07-4.07-8.38-6.92-8.38H9"/><path class="cls-2" d="M17.51,20.49c0,2.45-.19,4.79-.53,6.96-.17,1.1,3.54,4.14,3.54,4.14,0,0-4.74,1.04-5.07,1.94-1.56,4.25-3.87,6.94-6.44,6.94C4.31,40.48.5,31.53.5,20.49S4.31.5,9,.5s8.5,8.95,8.5,19.99Z"/><path class="cls-3" d="M14.61,23.45c-.55,8.7-3.44,15.78-6.85,15.78S.87,32.17.87,23.45,4.67,4.19,8.07,4.19c1.57,0,2.71,3.01,4.05,5.66.34.67,3.16,2.58,3.16,2.58,0,0-1.72,2.04-1.15,4.23.26,2.1.65,4.15.48,6.8Z"/><path class="cls-5" d="M11.96,24.87c-.87,6.8-1.9,10.07-4.22,10.07s-3.65-3.45-4.52-7.31c-1.49-6.58,2.2-18.09,4.52-18.09s5.12,8.3,4.22,15.34Z"/><path class="cls-4" d="M3.48,27.9s7.03.14,8.02.1c0,0-.59,6.82-3.42,6.93s-4.33-4.3-4.6-7.03Z"/></g></svg>
\ No newline at end of file
+<svg width="288" height="41" viewBox="0 0 288 41" fill="none" xmlns="http://www.w3.org/2000/svg">
+    <g clip-path="url(#clip0_17_6)">
+        <path d="M9.05258 40.4998H279.449C284.177 40.4998 288 31.5454 288 20.5C288 19.5095 287.97 18.549 287.909 17.5986C287.819 16.1679 283.503 14.6271 283.503 14.6271C283.503 14.6271 286.833 10.285 286.401 8.88433C284.851 3.81186 282.306 0.500244 279.439 0.500244H9.05258" fill="url(#paint0_linear_17_6)"/>
+        <path d="M17.6131 20.5C17.6131 22.9512 17.422 25.2923 17.08 27.4634C16.909 28.5639 20.641 31.6054 20.641 31.6054C20.641 31.6054 15.8729 32.6459 15.5409 33.5464C13.9716 37.7984 11.6479 40.4898 9.06263 40.4898C4.33471 40.4998 0.502075 31.5454 0.502075 20.5C0.502075 9.45461 4.33472 0.500244 9.05258 0.500244C13.7704 0.500244 17.6031 9.45461 17.6031 20.5H17.6131Z" fill="url(#paint1_linear_17_6)"/>
+        <path d="M14.6959 23.4614C14.1426 32.1657 11.2355 39.2491 7.80519 39.2491C4.37493 39.2491 0.874259 32.1857 0.874259 23.4614C0.874259 14.7372 4.69683 4.19205 8.11703 4.19205C9.69636 4.19205 10.8431 7.20352 12.1911 9.85481C12.5331 10.5251 15.3699 12.4361 15.3699 12.4361C15.3699 12.4361 13.6397 14.4771 14.213 16.6681C14.4746 18.7692 14.8669 20.8202 14.6959 23.4715V23.4614Z" fill="url(#paint2_linear_17_6)"/>
+        <path d="M12.0302 24.8821C11.155 31.6855 10.1189 34.9571 7.78512 34.9571C5.45133 34.9571 4.11343 31.5054 3.23826 27.6435C1.73941 21.0603 5.45133 9.54465 7.78512 9.54465C10.1189 9.54465 12.9355 17.8487 12.0302 24.8921V24.8821Z" fill="url(#paint3_linear_17_6)"/>
+        <path d="M3.49979 27.9136C3.49979 27.9136 10.5716 28.0537 11.5674 28.0137C11.5674 28.0137 10.9739 34.837 8.12711 34.947C5.2803 35.0571 3.77139 30.6449 3.49979 27.9136Z" fill="#998C82"/>
+    </g>
+    <defs>
+        <linearGradient id="paint0_linear_17_6" x1="143.98" y1="21" x2="144.234" y2="0.500036" gradientUnits="userSpaceOnUse">
+            <stop stop-color="#F7F3F1"/>
+            <stop offset="1" stop-color="#8E8177"/>
+        </linearGradient>
+        <linearGradient id="paint1_linear_17_6" x1="-6.66541" y1="12.0029" x2="-3.22445" y2="50.7739" gradientUnits="userSpaceOnUse">
+            <stop offset="0.130198" stop-color="#8E8177"/>
+            <stop offset="0.814719" stop-color="#F1E7DF"/>
+        </linearGradient>
+        <linearGradient id="paint2_linear_17_6" x1="290.581" y1="17.3958" x2="286.507" y2="-20.5417" gradientUnits="userSpaceOnUse">
+            <stop offset="0.312748" stop-color="#8E8177"/>
+            <stop offset="0.772724" stop-color="#7A6F65"/>
+        </linearGradient>
+        <linearGradient id="paint3_linear_17_6" x1="-27.0389" y1="5.152" x2="-26.0393" y2="40.238" gradientUnits="userSpaceOnUse">
+            <stop stop-color="#5E544C"/>
+            <stop offset="1" stop-color="#8F8278"/>
+        </linearGradient>
+        <clipPath id="clip0_17_6">
+            <rect width="288" height="41" fill="white"/>
+        </clipPath>
+    </defs>
+</svg>
diff --git a/assets/UI/papyrus-sheet.svg b/assets/UI/papyrus-sheet.svg
index 60d8273..ccd14de 100644
--- a/assets/UI/papyrus-sheet.svg
+++ b/assets/UI/papyrus-sheet.svg
@@ -1 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 274.81 295.01"><defs><style>.cls-1{fill:#e8dacf;stroke:#403431;stroke-linecap:round;stroke-miterlimit:10;}</style></defs><g id="Layer_1-2"><polyline class="cls-1" points="273.79 294.51 273.79 201.97 269.44 197.63 274.31 193.8 274.31 141.3 265.62 137.83 274.31 134 274.31 63.77 263.18 59.6 274.31 51.61 274.31 .5 8 .5 .5 8.34 .5 59.76 9.04 66.9 .5 75.41 .5 119.38 9.19 126.35 .5 130.56 .5 174.53 7.63 180.49 .5 188.31 .5 241.15 9.19 244.91 .5 248.3 .5 294.51 273.79 294.51"/></g></svg>
\ No newline at end of file
+<svg width="275" height="329" viewBox="0 0 275 329" fill="none" xmlns="http://www.w3.org/2000/svg">
+    <path d="M273.884 328.442V225.24L269.531 220.4L274.405 216.129V157.58L265.709 153.71L274.405 149.439V71.1174L263.267 66.4669L274.405 57.5563V0.557617H7.91058L0.405396 9.30091V66.6453L8.9513 74.608L0.405396 84.0985V133.135L9.1014 140.908L0.405396 145.603V194.639L7.54032 201.285L0.405396 210.006V268.934L9.1014 273.128L0.405396 276.908V328.442H273.884Z" fill="url(#paint0_linear_16_4)"/>
+    <defs>
+        <linearGradient id="paint0_linear_16_4" x1="137.405" y1="0.557617" x2="137.405" y2="328.442" gradientUnits="userSpaceOnUse">
+            <stop offset="0.501744" stop-color="#F7F3F1"/>
+            <stop offset="1" stop-color="#C8C0BB"/>
+        </linearGradient>
+    </defs>
+</svg>
diff --git a/assets/partners/aboveit.svg b/assets/partners/aboveit.svg
deleted file mode 100644
index f95d6cd..0000000
--- a/assets/partners/aboveit.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" id="Layer_2" viewBox="0 0 128.7 24.7">
-    <defs>
-        <style>.cls-1{fill:#403532;}</style>
-    </defs>
-    <g id="Aboveit_Logo">
-        <path class="cls-1"
-              d="m16.3,19.5H7.2l-1.7,4.8H0L8.8.8h6.1l8.7,23.5h-5.7l-1.6-4.8Zm-7.4-4.7h5.7l-2.8-8.1-2.9,8.1Z"></path>
-        <path class="cls-1"
-              d="m27.7,24.3V.3h4.9v9.1c.7-1,2.5-2,4.8-2,4.8,0,7.6,3.6,7.6,8.6s-3.2,8.6-7.8,8.6c-2.2,0-3.9-1-4.6-2.2v1.9h-4.9Zm8.6-12.3c-2,0-3.7,1.3-3.7,4.1s1.8,4.1,3.7,4.1c2,0,3.7-1.4,3.7-4.1,0-2.8-1.8-4.1-3.7-4.1Z"></path>
-        <path class="cls-1"
-              d="m66.2,16c0,5-3.8,8.6-8.6,8.6s-8.6-3.6-8.6-8.6,3.8-8.6,8.6-8.6,8.6,3.6,8.6,8.6Zm-4.9,0c0-2.7-1.8-4-3.7-4s-3.7,1.3-3.7,4,1.8,4.1,3.7,4.1,3.7-1.3,3.7-4.1Z"></path>
-        <path class="cls-1" d="m80.1,24.3h-5.1l-6.8-16.4h5.5l3.8,10.2,3.5-10.2h5.3l-6.2,16.4Z"></path>
-        <path class="cls-1"
-              d="m104.2,19.5c-.8,2.8-3.4,5.2-7.5,5.2-4.5,0-8.5-3.2-8.5-8.7,0-5.2,3.9-8.6,8.1-8.6,5,0,8.1,3.1,8.1,8.3,0,.7-.1,1.4-.1,1.5h-11.3c.1,1.8,1.8,3.1,3.7,3.1,1.8,0,2.8-.8,3.3-2.1l4.2,1.3Zm-4.5-5.4c-.1-1.2-.9-2.7-3.3-2.7-2.1,0-3.1,1.5-3.2,2.7h6.5Z"></path>
-        <rect class="cls-1" x="108.6" y="7.9" width="5" height="16.4"></rect>
-        <path class="cls-1"
-              d="m125.5,7.8h3.2v4.4h-3.2v6.2c0,1.4.7,1.7,1.8,1.7.5,0,1-.1,1.3-.2v4.2c-.2.1-1,.5-2.6.5-3.4,0-5.5-2-5.5-5.3v-7.1h-2.9v-4.4h.8c1.7,0,2.5-1.2,2.5-2.7v-2.1h4.5v4.8h.1Z"></path>
-        <path class="cls-1"
-              d="m113.2.8c.6.5.8,1.2.8,2s-.3,1.5-.8,2-1.2.8-2.1.8c-.8,0-1.5-.3-2.1-.8-.6-.6-.8-1.2-.8-2s.3-1.5.8-2c.6-.5,1.3-.8,2.1-.8.9,0,1.6.2,2.1.8Z"></path>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/assets/partners/arktekk.svg b/assets/partners/arktekk.svg
deleted file mode 100644
index 6441315..0000000
--- a/assets/partners/arktekk.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px"
-     y="0px" style="enable-background:new 0 0 300 220;" xml:space="preserve" viewBox="0 0 299.4 220.1"><style type="text/css">	.st0{fill:#403532;}</style>
-    <path class="st0"
-          d="M18.7,220C5.6,220,0,213.8,0,204.8c0-14.2,13.1-18.6,29.8-20.3v-3.7c0-9.6-5.6-12.3-13-12.3  c-5.1,0-9.6,1.9-12.4,3.5L3,168.6c2.8-1.6,8.3-3.9,14.4-3.9c8.9,0,17.4,3.9,17.4,16.2v35.3C30.9,218.5,25.3,220,18.7,220   M29.8,187.7c-15.6,2.1-24.5,5.1-24.5,17.1c0,8.5,5.3,12,14.1,12c3.9,0,7.8-0.8,10.4-2.2V187.7z"></path>
-    <path class="st0"
-          d="M71.5,169.4c-4.6-1.3-10.2-0.7-13.1,1.5V219H53v-50.5c4.8-2.5,8.4-3.8,20.1-3.8L71.5,169.4"></path>
-    <polyline class="st0"
-              points="114.6,219 91.8,191.2 91.6,191.2 91.6,219 86.5,219 86.5,141.4 91.6,141.4 91.6,191 91.8,191  112.8,165.7 118.7,165.7 96.8,191.1 120.8,219 114.6,219 "></polyline>
-    <path class="st0"
-          d="M147.1,219.3c-9,0-11.9-6.7-11.9-12.5v-38H129v-3.2h6.2V153l5.3-2v14.7h9.9v3.1h-9.9v38.4  c0,4.3,2.1,8.4,7.7,8.4c0.6,0,1.5,0,2.2-0.2v3.5C149.6,219.1,148.5,219.3,147.1,219.3"></path>
-    <path class="st0"
-          d="M167.8,194.7c0.8,14.1,7.3,21.2,17.9,21.2c5.9,0,10.1-1.6,12.8-3.2l1.7,3.9c-2.9,1.8-8.2,3.5-14.5,3.5  c-12.9,0-22.8-7.8-22.8-27.8c0-18.8,9-27.5,20.2-27.5c11.5,0,19.1,7.2,19.1,24.9L167.8,194.7 M182.8,168.7  c-8.5,0-15.1,6.5-15.1,22.7l29.1-4.4C196.7,173.6,191.4,168.7,182.8,168.7z"></path>
-    <polyline class="st0"
-              points="246.7,219 223.9,191.2 223.7,191.2 223.7,219 218.6,219 218.6,141.4 223.7,141.4 223.7,191 223.9,191  244.9,165.7 250.8,165.7 228.9,191.1 252.9,219 246.7,219 "></polyline>
-    <g>	<polyline class="st0"
-                     points="293.1,219 270.4,191.2 270.2,191.2 270.2,219 265,219 265,141.4 270.2,141.4 270.2,191 270.4,191   291.3,165.7 297.3,165.7 275.3,191.1 299.4,219 293.1,219  "></polyline>
-        <path class="st0"
-              d="M173.7,84.7c0-7,0-17.4,0-25c0-2.3,0-4.3,0-5.9c6.1-1.3,11.9-4.1,16.8-8.1c3.3-2.7,6.2-6,8.6-9.8l-13.9-8.7   c-2.9,4.7-7.2,8-12.1,9.7l-0.1-3.5C169.9,14.5,153.4,0,133.6,0c-5.4,0-10.6,1.1-15.3,3.1l7.4,14.7c2.5-0.9,5.2-1.4,8-1.4   c13.1,0,23.8,10.6,23.8,23.8c0,5.7,0,10.5,0,14.5c-2.4-1.7-4.9-3.2-7.7-4.5c-0.9-0.4-1.8-0.8-2.8-1.1c-7.2-2.5-14.7-2.9-21.7-1.4   c-10,2.1-18.9,8-24.8,16.7c-1.9,2.8-3.5,5.9-4.7,9.3C91.3,86,93.4,99,100,109.1l0,0c3.4,5.6,7.2,9.8,13.9,13.2l-0.1,0.2   c5.7,3.2,12.3,4.9,19.3,4.9c6.1,0,11.9-1.4,17.1-3.8c3-1.4,5.7-3.2,8.3-5.2c0.5-0.4,0.9-0.7,1.3-1.1c-0.8-0.9-1.7-1.8-2.4-2.7   c-2.7-3.4-4.9-7.2-6.4-11.3c0,0,0,0-0.1,0.1c-4.4,4.7-10.6,7.7-17.5,7.7c-2.8,0-5.4-0.5-7.9-1.4c-9.3-3.2-15.9-12.1-15.9-22.4   c0-3.7,0.8-7.1,2.3-10.2c0-0.1,0.1-0.2,0.1-0.2c0.2-0.4,0.4-0.7,0.6-1.1c0.1-0.1,0.1-0.3,0.2-0.4c0.2-0.4,0.4-0.7,0.6-1   c0.1-0.2,0.2-0.4,0.4-0.6c5.9-8.7,17.1-12.7,27.5-9.1c9.9,3.5,16.1,12.5,16,22.4l0,0.3c0.5,8.6,3.8,16.4,8.8,22.6   c5.8,7.2,14.1,12.3,23.5,14.2c2.5,0.5,5.1,0.8,7.7,0.8v-16.4C184.4,108.5,173.7,97.9,173.7,84.7"></path></g></svg>
\ No newline at end of file
diff --git a/assets/partners/partners.ts b/assets/partners/partners.ts
index 0ca7d4d..608dc72 100644
--- a/assets/partners/partners.ts
+++ b/assets/partners/partners.ts
@@ -56,8 +56,6 @@ import {
   Ambita,
   NAV,
   KSDigitaleFellestjenester,
-  Arktekk,
-  Aboveit,
 } from '../../Assets';
 import { FunctionComponent } from 'react';
 import { SvgProps } from 'react-native-svg';
@@ -126,6 +124,4 @@ export const partners: Partner[] = [
   { name: 'Ambita', homepageUrl: 'https://www.ambita.com', logoUrl: Ambita },
   { name: 'NAV', homepageUrl: 'https://www.nav.no', logoUrl: NAV },
   { name: 'KS Digitale Fellestjenester', homepageUrl: 'https://www.ks.no', logoUrl: KSDigitaleFellestjenester },
-  { name: 'Arktekk', homepageUrl: 'https://www.arktekk.no', logoUrl: Arktekk },
-  { name: 'Aboveit', homepageUrl: 'https://www.aboveit.no', logoUrl: Aboveit },
 ];
diff --git a/components/Flag.tsx b/components/Flag.tsx
index 9042b7f..ca6c84d 100644
--- a/components/Flag.tsx
+++ b/components/Flag.tsx
@@ -1,6 +1,6 @@
 import React, { useEffect, useState } from 'react';
 import { CountryCode, FlagSize, FlagStyle } from '@/models';
-import { Text, View, Image, GestureResponderEvent, Pressable } from 'react-native';
+import {Text, Image, GestureResponderEvent, Pressable, StyleSheet, Dimensions} from 'react-native';
 import { useI18nContext } from '@/contexts/I18nContext';
 import { useTranslation } from 'react-i18next';
 import { Assets } from '@/Assets';
@@ -35,22 +35,35 @@ const Flag: React.FC<FlagProps> = ({ flagLocale, countryCode, flagStyle, flagSiz
   };
 
   return (
-    <View>
-      <Pressable onPress={onPress} style={{ margin: 5 }}>
+      <Pressable onPress={onPress} style={{ margin: 10 }}>
         {showFallback || !flagSource ? (
-          <Text style={flagLocale === locale ? Assets.styles.text : Assets.styles.disclaimerText}>
+          <Text style={[styles.text, flagLocale === locale ? styles.activeText : styles.inactiveText]}>
             {t(`language_name.${flagLocale}`, { lng: flagLocale })}
           </Text>
         ) : (
           <Image
             source={{ uri: flagSource }}
-            style={{ width: parseInt(flagSize), height: parseInt(flagSize) }}
+            style={{ width: parseInt(flagSize), height: parseInt(flagSize) * 0.6 }}
             onError={() => setShowFallback(true)} // show fallback on error
           />
         )}
       </Pressable>
-    </View>
   );
 };
 
 export default Flag;
+
+const styles = StyleSheet.create({
+  text: {
+    marginVertical: 5,
+    fontSize: Dimensions.get('window').width > 768 ? 18 : 16,
+    fontFamily: 'PlayfairDisplay_400Regular',
+    textAlign: 'justify',
+  },
+  activeText: {
+    color: Assets.colors.jz2025ThemeColors.darkBrown,
+  },
+  inactiveText: {
+    color: Assets.colors.jz2025ThemeColors.lightBrown,
+  },
+})
\ No newline at end of file
diff --git a/components/LanguagePicker.tsx b/components/LanguagePicker.tsx
index af1f0bd..f89cceb 100644
--- a/components/LanguagePicker.tsx
+++ b/components/LanguagePicker.tsx
@@ -1,19 +1,12 @@
 import { Flag } from '@/components/index';
 import { CountryCode, FlagSize, FlagStyle } from '@/models';
-import { StyleSheet, View } from 'react-native';
+import { StyleSheet, View} from 'react-native';
 import React from 'react';
 import { useI18nContext } from '@/contexts/I18nContext';
 
 export const LanguagePicker: React.FC = () => {
   //@ts-ignore
   const { setLocale } = useI18nContext();
-  const styles = StyleSheet.create({
-    languagePickers: {
-      display: 'flex',
-      flexDirection: 'row',
-      justifyContent: 'space-between',
-    },
-  });
 
   return (
     <View style={styles.languagePickers} id={'languagePickers'}>
@@ -21,16 +14,24 @@ export const LanguagePicker: React.FC = () => {
         flagLocale={'nb-NO'}
         countryCode={CountryCode.Norwegian}
         flagStyle={FlagStyle.Flat}
-        flagSize={FlagSize.Small}
+        flagSize={FlagSize.Regular}
         onPress={async () => await setLocale('nb-NO')}
       />
       <Flag
         flagLocale={'en-US'}
         countryCode={CountryCode.British}
         flagStyle={FlagStyle.Flat}
-        flagSize={FlagSize.Small}
+        flagSize={FlagSize.Regular}
         onPress={async () => await setLocale('en-US')}
       />
     </View>
   );
 };
+
+const styles = StyleSheet.create({
+    languagePickers: {
+        display: 'flex',
+        flexDirection: 'row',
+        justifyContent: 'space-between',
+    },
+});
\ No newline at end of file
diff --git a/components/PartnerBanner.tsx b/components/PartnerBanner.tsx
index 21219c4..a70e8b2 100644
--- a/components/PartnerBanner.tsx
+++ b/components/PartnerBanner.tsx
@@ -1,25 +1,15 @@
 import { partners } from '@/assets/partners/partners';
-import { Text, View, StyleSheet, Dimensions, Animated } from 'react-native';
+import { View, StyleSheet, Dimensions, Animated, Platform } from 'react-native';
 import { Link } from 'expo-router';
 import { SvgImage } from '@/UI';
 
-interface Partner {
-  homepageUrl: string;
-  name: string;
-  logoUrl: string;
-}
-
-interface Props {
-  partners: Partner[];
-}
-
 const screenWidth = Dimensions.get('window').width;
 const adjustedScreenWidth = screenWidth > 768 ? screenWidth - 200 : screenWidth - 500;
+const adjustedLogoSize = screenWidth > 768 ? 150 : 80;
 
-export default function PartnerBanner() {
+export const PartnerBanner = () => {
   return (
     <View style={styles.wrapper}>
-      <Text style={styles.title}>Partners in 2025</Text>
       <View style={styles.partnerContainer}>
         {[...partners]
           .sort(() => Math.random() - 0.5)
@@ -52,8 +42,8 @@ export default function PartnerBanner() {
                 onPointerEnter={handleMouseEnter}
                 onPointerLeave={handleMouseLeave}
               >
-                <Link target={'_blank'} href={partner.homepageUrl} style={styles.link}>
-                  <SvgImage SVG={partner.logoUrl} height={80} />
+                <Link target={"_blank"} href={partner.homepageUrl} style={styles.link}>
+                  <SvgImage SVG={partner.logoUrl} height={adjustedLogoSize} width={adjustedLogoSize} />
                 </Link>
               </Animated.View>
             );
@@ -65,12 +55,12 @@ export default function PartnerBanner() {
 
 const styles = StyleSheet.create({
   wrapper: {
-    width: adjustedScreenWidth,
+    width: Platform.OS === "web" ? adjustedScreenWidth : '100%',
     overflow: 'hidden',
     flexWrap: 'nowrap',
     position: 'relative',
-    paddingBottom: 20,
     marginBottom: 40,
+    marginTop: 20,
   },
   title: {
     color: 'black',
@@ -81,19 +71,20 @@ const styles = StyleSheet.create({
     fontFamily: 'Cinzel_400Regular',
   },
   partnerContainer: {
-    display: 'flex',
+    flex: 1,
     flexDirection: 'row',
     flexWrap: 'wrap',
     justifyContent: 'center',
+    alignItems: 'center',
     gap: '2.5rem',
-    width: adjustedScreenWidth, // Use screen width directly
+    height: '100%',
   },
   imageContainer: {
-    padding: 20,
-    width: Dimensions.get('window').width >= 768 ? 220 : 160,
+    width: Dimensions.get('window').width > 768 ? 200 : 100,
+    objectFit: "contain",
+    padding: 10
   },
   link: {
-    width: '100%',
-    height: '100%',
+    width: Dimensions.get('window').width > 768 ? 200 : 100,
   },
 });
diff --git a/components/index.ts b/components/index.ts
index c3bc0e7..cec4a21 100644
--- a/components/index.ts
+++ b/components/index.ts
@@ -7,6 +7,7 @@ import Hero from '@/components/Hero';
 import WelcomeSection from '@/components/WelcomeSection';
 import Footer from '@/components/Footer';
 import BulletListItem from '@/components/BulletListItem';
+import { PartnerBanner } from "@/components/PartnerBanner";
 
 const HoldTheDate = React.lazy(() => import('@/components/HoldTheDate'));
 const ScreenTemplate = React.lazy(() => import('@/components/ScreenTemplate'));
@@ -22,4 +23,5 @@ export {
   NotFoundComponent,
   Footer,
   BulletListItem,
+  PartnerBanner,
 };
diff --git a/components/papyrusMenu.tsx b/components/papyrusMenu.tsx
index c0b1682..1341ce6 100644
--- a/components/papyrusMenu.tsx
+++ b/components/papyrusMenu.tsx
@@ -2,8 +2,8 @@ import { Assets } from '@/Assets';
 import { SvgImage } from '@/UI';
 import BlurView from 'expo-blur/build/BlurView';
 import { Link, useGlobalSearchParams } from 'expo-router';
-import { Dispatch, SetStateAction, useEffect, useRef, useState, useImperativeHandle, forwardRef } from 'react';
-import { View, StyleSheet, useAnimatedValue, Animated, Easing } from 'react-native';
+import { Dispatch, SetStateAction, useEffect, useRef, useImperativeHandle, forwardRef } from 'react';
+import { View, StyleSheet, Animated, Easing } from 'react-native';
 import { LanguagePicker } from './LanguagePicker';
 
 interface Props {
@@ -18,6 +18,11 @@ const rollPositionStart = -215;
 const paperHeightStart = 0;
 export const animationDuration = 650;
 
+/** Be very careful if you really have to change this file 🥹
+ *  the animation positions, width, height, top and right attributes etc...
+ *  are very exact and perfectly aligned as is
+ */
+
 export const PapyrusMenu = forwardRef(({ toggleMenu, languageLoaded, setToggleMenu }: Props, ref) => {
   const { lang } = useGlobalSearchParams();
 
@@ -25,11 +30,12 @@ export const PapyrusMenu = forwardRef(({ toggleMenu, languageLoaded, setToggleMe
     drawer: {
       position: 'absolute',
       zIndex: 1,
-      right: 0,
-      top: 63.5, // default header height 64 - do not change!
+      right: -1,
+      top: 64, // default header height 64 - do not change! 💅🏼
       display: toggleMenu ? 'flex' : 'none',
       justifyContent: 'flex-start',
       overflow: 'hidden',
+      width: 260,
     },
     drawerContent: {
       position: 'absolute',
@@ -39,12 +45,13 @@ export const PapyrusMenu = forwardRef(({ toggleMenu, languageLoaded, setToggleMe
       width: '100%',
       alignItems: 'center',
       justifyContent: 'space-evenly',
+      paddingVertical: 10
     },
     drawerItem: {
       color: Assets.colors.jz2025ThemeColors.darkBrown,
       paddingHorizontal: 20,
       marginVertical: 5,
-      fontSize: 16,
+      fontSize: 18,
       fontFamily: 'PlayfairDisplay_400Regular',
       textShadowColor: Assets.colors.brand.beige,
       textShadowOffset: { width: 0, height: 0.2 },
@@ -65,7 +72,7 @@ export const PapyrusMenu = forwardRef(({ toggleMenu, languageLoaded, setToggleMe
           useNativeDriver: false,
         }),
         Animated.timing(paperHeightAnim, {
-          toValue: 250,
+          toValue: 298.5,
           duration: animationDuration,
           easing: Easing.linear,
           useNativeDriver: false,
@@ -105,8 +112,8 @@ export const PapyrusMenu = forwardRef(({ toggleMenu, languageLoaded, setToggleMe
   };
 
   return (
-    <AnimatedBlurView tint="light" intensity={10} style={{ ...styles.drawer, height: paperHeightAnim }}>
-      <SvgImage SVG={Assets.UI.PapyrusSheet} height={220} style={{ opacity: 0.9 }} />
+    <AnimatedBlurView tint="light" intensity={0} style={{ ...styles.drawer, height: paperHeightAnim }}>
+      <SvgImage SVG={Assets.UI.PapyrusSheet} height={315} width={250} style={{ opacity: 1, position: 'absolute', right: 5, top: -19 }} />
       <View style={styles.drawerContent}>
         <Link href={{ pathname: `${lang}/program` }} style={styles.drawerItem} onPress={onPressItem}>
           Program
@@ -133,7 +140,7 @@ export const PapyrusMenu = forwardRef(({ toggleMenu, languageLoaded, setToggleMe
           transform: [{ translateY: rollPositionAnim }],
         }}
       >
-        <SvgImage SVG={Assets.UI.PapyrusRoll} height={29.5} />
+        <SvgImage SVG={Assets.UI.PapyrusRoll} height={40} style={{marginTop: 260, position: 'absolute', right: -.5}} />
       </Animated.View>
     </AnimatedBlurView>
   );
diff --git a/contexts/I18nContext.tsx b/contexts/I18nContext.tsx
index 570ff26..b9f2f8c 100644
--- a/contexts/I18nContext.tsx
+++ b/contexts/I18nContext.tsx
@@ -48,8 +48,8 @@ export const I18nContextProvider = ({ children }: { children: React.ReactNode })
   return (
     <I18nContext.Provider
       value={{
-        setLocale: setLocaleParam,
         locale,
+        setLocale: setLocaleParam,
       }}
     >
       {children}
diff --git a/package-lock.json b/package-lock.json
index 136b118..45f679a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,19 +13,19 @@
         "@expo/metro-runtime": "~4.0.0",
         "@react-native-async-storage/async-storage": "1.23.1",
         "@react-native/metro-config": "^0.76.1",
-        "expo": "^52.0.35",
+        "expo": "^52.0.42",
         "expo-blur": "^14.0.3",
         "expo-font": "~13.0.3",
         "expo-linear-gradient": "~14.0.2",
         "expo-localization": "~16.0.1",
-        "expo-router": "^4.0.17",
+        "expo-router": "~4.0.20",
         "expo-status-bar": "~2.0.1",
-        "expo-system-ui": "4.0.8",
+        "expo-system-ui": "~4.0.9",
         "i18next": "^23.16.4",
         "react": "18.3.1",
         "react-dom": "18.3.1",
         "react-i18next": "^15.1.0",
-        "react-native": "^0.76.7",
+        "react-native": "0.76.9",
         "react-native-iconify": "^2.0.3",
         "react-native-reanimated": "~3.16.1",
         "react-native-safe-area-context": "^4.12.0",
@@ -53,9 +53,9 @@
       }
     },
     "node_modules/@0no-co/graphql.web": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.1.1.tgz",
-      "integrity": "sha512-F2i3xdycesw78QCOBHmpTn7eaD2iNXGwB2gkfwxcOfBbeauYpr8RBSyJOkDrFtKtVRMclg8Sg3n1ip0ACyUuag==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.1.2.tgz",
+      "integrity": "sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==",
       "license": "MIT",
       "peerDependencies": {
         "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"
@@ -2595,30 +2595,30 @@
       }
     },
     "node_modules/@expo/cli": {
-      "version": "0.22.16",
-      "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.16.tgz",
-      "integrity": "sha512-a8Ulbnji9kFatnOtsWGCRs6nMUj9UNC0/WhE74HQdXGDGMn5Pl8eNe3cLMy9G54DdqAmEZmRZpgXmcudT78fEQ==",
+      "version": "0.22.24",
+      "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.24.tgz",
+      "integrity": "sha512-lhdenxBC8/x/vL39j79eXE09mOaqNNLmiSDdY/PblnI+UNzGgsQ48hBTYa/MQhd0ioXXVKurZL2941dLKwcxJw==",
       "license": "MIT",
       "dependencies": {
         "@0no-co/graphql.web": "^1.0.8",
         "@babel/runtime": "^7.20.0",
         "@expo/code-signing-certificates": "^0.0.5",
-        "@expo/config": "~10.0.10",
-        "@expo/config-plugins": "~9.0.15",
+        "@expo/config": "~10.0.11",
+        "@expo/config-plugins": "~9.0.17",
         "@expo/devcert": "^1.1.2",
         "@expo/env": "~0.4.2",
         "@expo/image-utils": "^0.6.5",
         "@expo/json-file": "^9.0.2",
-        "@expo/metro-config": "~0.19.10",
+        "@expo/metro-config": "~0.19.12",
         "@expo/osascript": "^2.1.6",
         "@expo/package-manager": "^1.7.2",
         "@expo/plist": "^0.2.2",
-        "@expo/prebuild-config": "^8.0.27",
+        "@expo/prebuild-config": "^8.0.31",
         "@expo/rudder-sdk-node": "^1.1.1",
         "@expo/spawn-async": "^1.7.2",
         "@expo/ws-tunnel": "^1.0.1",
         "@expo/xcpretty": "^4.3.0",
-        "@react-native/dev-middleware": "0.76.7",
+        "@react-native/dev-middleware": "0.76.9",
         "@urql/core": "^5.0.6",
         "@urql/exchange-retry": "^1.3.0",
         "accepts": "^1.3.8",
@@ -2744,14 +2744,14 @@
       }
     },
     "node_modules/@expo/config": {
-      "version": "10.0.10",
-      "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.10.tgz",
-      "integrity": "sha512-wI9/iam3Irk99ADGM/FyD7YrrEibIZXR4huSZiU5zt9o3dASOKhqepiNJex4YPiktLfKhYrpSEJtwno1g0SrgA==",
+      "version": "10.0.11",
+      "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.11.tgz",
+      "integrity": "sha512-nociJ4zr/NmbVfMNe9j/+zRlt7wz/siISu7PjdWE4WE+elEGxWWxsGzltdJG0llzrM+khx8qUiFK5aiVcdMBww==",
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "~7.10.4",
-        "@expo/config-plugins": "~9.0.15",
-        "@expo/config-types": "^52.0.4",
+        "@expo/config-plugins": "~9.0.17",
+        "@expo/config-types": "^52.0.5",
         "@expo/json-file": "^9.0.2",
         "deepmerge": "^4.3.1",
         "getenv": "^1.0.0",
@@ -2765,14 +2765,14 @@
       }
     },
     "node_modules/@expo/config-plugins": {
-      "version": "9.0.15",
-      "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.15.tgz",
-      "integrity": "sha512-elKY/zIpAJ40RH26iwfyp+hwgeyPgIXX0SrCSOcjeJLsMsCmMac9ewvb+AN8y4k+N7m5lD/dMZupsaateKTFwA==",
+      "version": "9.0.17",
+      "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.17.tgz",
+      "integrity": "sha512-m24F1COquwOm7PBl5wRbkT9P9DviCXe0D7S7nQsolfbhdCWuvMkfXeoWmgjtdhy7sDlOyIgBrAdnB6MfsWKqIg==",
       "license": "MIT",
       "dependencies": {
-        "@expo/config-types": "^52.0.4",
-        "@expo/json-file": "~9.0.1",
-        "@expo/plist": "^0.2.1",
+        "@expo/config-types": "^52.0.5",
+        "@expo/json-file": "~9.0.2",
+        "@expo/plist": "^0.2.2",
         "@expo/sdk-runtime-versions": "^1.0.0",
         "chalk": "^4.1.2",
         "debug": "^4.3.5",
@@ -2843,9 +2843,9 @@
       }
     },
     "node_modules/@expo/config-types": {
-      "version": "52.0.4",
-      "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.4.tgz",
-      "integrity": "sha512-oMGrb2o3niVCIfjnIHFrOoiDA9jGb0lc3G4RI1UiO//KjULBaQr3QTBoKDzZQwMqDV1AgYgSr9mgEcnX3LqhIg==",
+      "version": "52.0.5",
+      "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.5.tgz",
+      "integrity": "sha512-AMDeuDLHXXqd8W+0zSjIt7f37vUd/BP8p43k68NHpyAvQO+z8mbQZm3cNQVAMySeayK2XoPigAFB1JF2NFajaA==",
       "license": "MIT"
     },
     "node_modules/@expo/config/node_modules/@babel/code-frame": {
@@ -3000,9 +3000,9 @@
       }
     },
     "node_modules/@expo/fingerprint": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.10.tgz",
-      "integrity": "sha512-34ZwPjbnnD7KHSyceaxcLQbClCkYHbEp6wBDe+aqimvQw25m2LnliN1cMCVQnpOHkBFRTcbKlowby0fIxAm2bQ==",
+      "version": "0.11.11",
+      "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.11.tgz",
+      "integrity": "sha512-gNyn1KnAOpEa8gSNsYqXMTcq0fSwqU/vit6fP5863vLSKxHm/dNt/gm/uZJxrRZxKq71KUJWF6I7d3z8qIfq5g==",
       "license": "MIT",
       "dependencies": {
         "@expo/spawn-async": "^1.7.2",
@@ -3128,18 +3128,18 @@
       }
     },
     "node_modules/@expo/metro-config": {
-      "version": "0.19.10",
-      "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.10.tgz",
-      "integrity": "sha512-/CtsMLhELJRJjAllM4EUnlPUAixn8Q2YhorKBa4uXZ6FvTEZWHJjqsXnQD39gWSEuAIVwLfJ1qgJi8666+dW2w==",
+      "version": "0.19.12",
+      "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.12.tgz",
+      "integrity": "sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==",
       "license": "MIT",
       "dependencies": {
         "@babel/core": "^7.20.0",
         "@babel/generator": "^7.20.5",
         "@babel/parser": "^7.20.0",
         "@babel/types": "^7.20.0",
-        "@expo/config": "~10.0.9",
-        "@expo/env": "~0.4.1",
-        "@expo/json-file": "~9.0.1",
+        "@expo/config": "~10.0.11",
+        "@expo/env": "~0.4.2",
+        "@expo/json-file": "~9.0.2",
         "@expo/spawn-async": "^1.7.2",
         "chalk": "^4.1.0",
         "debug": "^4.3.2",
@@ -3294,17 +3294,17 @@
       }
     },
     "node_modules/@expo/prebuild-config": {
-      "version": "8.0.27",
-      "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.27.tgz",
-      "integrity": "sha512-UFGOx4TfiT2gOde8RylwmXctp/WvqBQ4TN7z1YL0WWXfG9TWfO7HdsUnqQhGMW+CDDc7FOJMEo8q1a6xiikfYA==",
+      "version": "8.0.31",
+      "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.31.tgz",
+      "integrity": "sha512-YTuS5ic9KolD/WA3GqgLcZytHQU1dpitlZ/cbDq8ZqkY+1ae5YWX+GkYEZf2VyECPaWnHYuDGddaTQVw5miTRg==",
       "license": "MIT",
       "dependencies": {
-        "@expo/config": "~10.0.9",
-        "@expo/config-plugins": "~9.0.15",
-        "@expo/config-types": "^52.0.4",
-        "@expo/image-utils": "^0.6.4",
-        "@expo/json-file": "^9.0.1",
-        "@react-native/normalize-colors": "0.76.7",
+        "@expo/config": "~10.0.11",
+        "@expo/config-plugins": "~9.0.17",
+        "@expo/config-types": "^52.0.5",
+        "@expo/image-utils": "^0.6.5",
+        "@expo/json-file": "^9.0.2",
+        "@react-native/normalize-colors": "0.76.9",
         "debug": "^4.3.1",
         "fs-extra": "^9.0.0",
         "resolve-from": "^5.0.0",
@@ -3312,6 +3312,12 @@
         "xml2js": "0.6.0"
       }
     },
+    "node_modules/@expo/prebuild-config/node_modules/@react-native/normalize-colors": {
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz",
+      "integrity": "sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==",
+      "license": "MIT"
+    },
     "node_modules/@expo/prebuild-config/node_modules/fs-extra": {
       "version": "9.1.0",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -3385,15 +3391,15 @@
       "license": "MIT"
     },
     "node_modules/@expo/server": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.5.1.tgz",
-      "integrity": "sha512-lk8pKKw0eVP6rqkDR46vQB3vLA46z4KNGrqHpjD/SvMu1cGaRmQG2cQdX44mQtG8WyO9EYau+fBMHQQS2OTFKg==",
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.5.3.tgz",
+      "integrity": "sha512-WXsWzeBs5v/h0PUfHyNLLz07rwwO5myQ1A5DGYewyyGLmsyl61yVCe8AgAlp1wkiMsqhj2hZqI2u3K10QnCMrQ==",
       "license": "MIT",
       "dependencies": {
-        "@remix-run/node": "^2.12.0",
         "abort-controller": "^3.0.0",
         "debug": "^4.3.4",
-        "source-map-support": "~0.5.21"
+        "source-map-support": "~0.5.21",
+        "undici": "^6.18.2"
       }
     },
     "node_modules/@expo/spawn-async": {
@@ -3418,9 +3424,10 @@
       }
     },
     "node_modules/@expo/ws-tunnel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.4.tgz",
-      "integrity": "sha512-spXCVXxbeKOe8YZ9igd+MDfXZe6LeDvFAdILijeTSG+XcxGrZLmqMWWkFKR0nV8lTWZ+NugUT3CoiXmEuKKQ7w=="
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz",
+      "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==",
+      "license": "MIT"
     },
     "node_modules/@expo/xcpretty": {
       "version": "4.3.2",
@@ -4057,9 +4064,9 @@
       }
     },
     "node_modules/@react-native/assets-registry": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.7.tgz",
-      "integrity": "sha512-o79whsqL5fbPTUQO9w1FptRd4cw1TaeOrXtQSLQeDrMVAenw/wmsjyPK10VKtvqxa1KNMtWEyfgxcM8CVZVFmg==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.9.tgz",
+      "integrity": "sha512-pN0Ws5xsjWOZ8P37efh0jqHHQmq+oNGKT4AyAoKRpxBDDDmlAmpaYjer9Qz7PpDKF+IUyRjF/+rBsM50a8JcUg==",
       "license": "MIT",
       "engines": {
         "node": ">=18"
@@ -4159,13 +4166,13 @@
       }
     },
     "node_modules/@react-native/community-cli-plugin": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.7.tgz",
-      "integrity": "sha512-lrcsY2WPLCEWU1pjdNV9+Ccj8vCEwCCURZiPa5aqi7lKB4C++1hPrxA8/CWWnTNcQp76DsBKGYqTFj7Ud4aupw==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.9.tgz",
+      "integrity": "sha512-08jx8ixCjjd4jNQwNpP8yqrjrDctN2qvPPlf6ebz1OJQk8e1sbUl3wVn1zhhMvWrYcaraDnatPb5uCPq+dn3NQ==",
       "license": "MIT",
       "dependencies": {
-        "@react-native/dev-middleware": "0.76.7",
-        "@react-native/metro-babel-transformer": "0.76.7",
+        "@react-native/dev-middleware": "0.76.9",
+        "@react-native/metro-babel-transformer": "0.76.9",
         "chalk": "^4.0.0",
         "execa": "^5.1.1",
         "invariant": "^2.2.4",
@@ -4180,30 +4187,30 @@
         "node": ">=18"
       },
       "peerDependencies": {
-        "@react-native-community/cli-server-api": "*"
+        "@react-native-community/cli": "*"
       },
       "peerDependenciesMeta": {
-        "@react-native-community/cli-server-api": {
+        "@react-native-community/cli": {
           "optional": true
         }
       }
     },
     "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/babel-plugin-codegen": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.7.tgz",
-      "integrity": "sha512-+8H4DXJREM4l/pwLF/wSVMRzVhzhGDix5jLezNrMD9J1U1AMfV2aSkWA1XuqR7pjPs/Vqf6TaPL7vJMZ4LU05Q==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.9.tgz",
+      "integrity": "sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==",
       "license": "MIT",
       "dependencies": {
-        "@react-native/codegen": "0.76.7"
+        "@react-native/codegen": "0.76.9"
       },
       "engines": {
         "node": ">=18"
       }
     },
     "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/babel-preset": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.7.tgz",
-      "integrity": "sha512-/c5DYZ6y8tyg+g8tgXKndDT7mWnGmkZ9F+T3qNDfoE3Qh7ucrNeC2XWvU9h5pk8eRtj9l4SzF4aO1phzwoibyg==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.9.tgz",
+      "integrity": "sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==",
       "license": "MIT",
       "dependencies": {
         "@babel/core": "^7.25.2",
@@ -4247,7 +4254,7 @@
         "@babel/plugin-transform-typescript": "^7.25.2",
         "@babel/plugin-transform-unicode-regex": "^7.24.7",
         "@babel/template": "^7.25.0",
-        "@react-native/babel-plugin-codegen": "0.76.7",
+        "@react-native/babel-plugin-codegen": "0.76.9",
         "babel-plugin-syntax-hermes-parser": "^0.25.1",
         "babel-plugin-transform-flow-enums": "^0.0.2",
         "react-refresh": "^0.14.0"
@@ -4260,9 +4267,9 @@
       }
     },
     "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/codegen": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.7.tgz",
-      "integrity": "sha512-FAn585Ll65YvkSrKDyAcsdjHhhAGiMlSTUpHh0x7J5ntudUns+voYms0xMP+pEPt0XuLdjhD7zLIIlAWP407+g==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.9.tgz",
+      "integrity": "sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
@@ -4282,13 +4289,13 @@
       }
     },
     "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/metro-babel-transformer": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.7.tgz",
-      "integrity": "sha512-jDS1wR7q46xY5ah+jF714Mvss9l7+lmwW/tplahZgLKozkYDC8Td5o9TOCgKlv18acw9H1V7zv8ivuRSj8ICPg==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.9.tgz",
+      "integrity": "sha512-HGq11347UHNiO/NvVbAO35hQCmH8YZRs7in7nVq7SL99pnpZK4WXwLdAXmSuwz5uYqOuwnKYDlpadz8fkE94Mg==",
       "license": "MIT",
       "dependencies": {
         "@babel/core": "^7.25.2",
-        "@react-native/babel-preset": "0.76.7",
+        "@react-native/babel-preset": "0.76.9",
         "hermes-parser": "0.23.1",
         "nullthrows": "^1.1.1"
       },
@@ -4419,22 +4426,22 @@
       }
     },
     "node_modules/@react-native/debugger-frontend": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.7.tgz",
-      "integrity": "sha512-89ZtZXt7ZxE94i7T94qzZMhp4Gfcpr/QVpGqEaejAxZD+gvDCH21cYSF+/Rz2ttBazm0rk5MZ0mFqb0Iqp1jmw==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.9.tgz",
+      "integrity": "sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==",
       "license": "BSD-3-Clause",
       "engines": {
         "node": ">=18"
       }
     },
     "node_modules/@react-native/dev-middleware": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.7.tgz",
-      "integrity": "sha512-Jsw8g9DyLPnR9yHEGuT09yHZ7M88/GL9CtU9WmyChlBwdXSeE3AmRqLegsV3XcgULQ1fqdemokaOZ/MwLYkjdA==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.9.tgz",
+      "integrity": "sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==",
       "license": "MIT",
       "dependencies": {
         "@isaacs/ttlcache": "^1.4.1",
-        "@react-native/debugger-frontend": "0.76.7",
+        "@react-native/debugger-frontend": "0.76.9",
         "chrome-launcher": "^0.15.2",
         "chromium-edge-launcher": "^0.2.0",
         "connect": "^3.6.5",
@@ -4475,9 +4482,9 @@
       }
     },
     "node_modules/@react-native/gradle-plugin": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.7.tgz",
-      "integrity": "sha512-gQI6RcrJbigU8xk7F960C5xQIgvbBj20TUvGecD+N2PHfbLpqR+92cj7hz3UcbrCONmTP40WHnbMMJ8P+kLsrA==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.9.tgz",
+      "integrity": "sha512-uGzp3dL4GfNDz+jOb8Nik1Vrfq1LHm0zESizrGhHACFiFlUSflVAnWuUAjlZlz5XfLhzGVvunG4Vdrpw8CD2ng==",
       "license": "MIT",
       "engines": {
         "node": ">=18"
@@ -4526,9 +4533,9 @@
       }
     },
     "node_modules/@react-native/normalize-colors": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.7.tgz",
-      "integrity": "sha512-ST1xxBuYVIXPdD81dR6+tzIgso7m3pa9+6rOBXTh5Xm7KEEFik7tnQX+GydXYMp3wr1gagJjragdXkPnxK6WNg==",
+      "version": "0.76.8",
+      "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.8.tgz",
+      "integrity": "sha512-FRjRvs7RgsXjkbGSOjYSxhX5V70c0IzA/jy3HXeYpATMwD9fOR1DbveLW497QGsVdCa0vThbJUtR8rIzAfpHQA==",
       "license": "MIT"
     },
     "node_modules/@react-native/virtualized-lists": {
@@ -4673,123 +4680,6 @@
         "nanoid": "3.3.8"
       }
     },
-    "node_modules/@remix-run/node": {
-      "version": "2.15.3",
-      "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.15.3.tgz",
-      "integrity": "sha512-TYfS6BPhbABBpSRZ6WBA4qIWSwWvJhRVQGXCHUtgOwkuW863rcFmjh9g2Xj/IHyTmbOYPdcjHsIgZ9el4CHOKQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@remix-run/server-runtime": "2.15.3",
-        "@remix-run/web-fetch": "^4.4.2",
-        "@web3-storage/multipart-parser": "^1.0.0",
-        "cookie-signature": "^1.1.0",
-        "source-map-support": "^0.5.21",
-        "stream-slice": "^0.1.2",
-        "undici": "^6.11.1"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      },
-      "peerDependencies": {
-        "typescript": "^5.1.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@remix-run/router": {
-      "version": "1.22.0",
-      "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.22.0.tgz",
-      "integrity": "sha512-MBOl8MeOzpK0HQQQshKB7pABXbmyHizdTpqnrIseTbsv0nAepwC2ENZa1aaBExNQcpLoXmWthhak8SABLzvGPw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@remix-run/server-runtime": {
-      "version": "2.15.3",
-      "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.15.3.tgz",
-      "integrity": "sha512-taHBe1DEqxZNjjj6OfkSYbup+sZPjbTgUhykaI+nHqrC2NDQuTiisBXhLwtx60GctONR/x0lWhF7R9ZGC5WsHw==",
-      "license": "MIT",
-      "dependencies": {
-        "@remix-run/router": "1.22.0",
-        "@types/cookie": "^0.6.0",
-        "@web3-storage/multipart-parser": "^1.0.0",
-        "cookie": "^0.6.0",
-        "set-cookie-parser": "^2.4.8",
-        "source-map": "^0.7.3",
-        "turbo-stream": "2.4.0"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      },
-      "peerDependencies": {
-        "typescript": "^5.1.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@remix-run/web-blob": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@remix-run/web-blob/-/web-blob-3.1.0.tgz",
-      "integrity": "sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==",
-      "license": "MIT",
-      "dependencies": {
-        "@remix-run/web-stream": "^1.1.0",
-        "web-encoding": "1.1.5"
-      }
-    },
-    "node_modules/@remix-run/web-fetch": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/@remix-run/web-fetch/-/web-fetch-4.4.2.tgz",
-      "integrity": "sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==",
-      "license": "MIT",
-      "dependencies": {
-        "@remix-run/web-blob": "^3.1.0",
-        "@remix-run/web-file": "^3.1.0",
-        "@remix-run/web-form-data": "^3.1.0",
-        "@remix-run/web-stream": "^1.1.0",
-        "@web3-storage/multipart-parser": "^1.0.0",
-        "abort-controller": "^3.0.0",
-        "data-uri-to-buffer": "^3.0.1",
-        "mrmime": "^1.0.0"
-      },
-      "engines": {
-        "node": "^10.17 || >=12.3"
-      }
-    },
-    "node_modules/@remix-run/web-file": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@remix-run/web-file/-/web-file-3.1.0.tgz",
-      "integrity": "sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@remix-run/web-blob": "^3.1.0"
-      }
-    },
-    "node_modules/@remix-run/web-form-data": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@remix-run/web-form-data/-/web-form-data-3.1.0.tgz",
-      "integrity": "sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==",
-      "license": "MIT",
-      "dependencies": {
-        "web-encoding": "1.1.5"
-      }
-    },
-    "node_modules/@remix-run/web-stream": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@remix-run/web-stream/-/web-stream-1.1.0.tgz",
-      "integrity": "sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==",
-      "license": "MIT",
-      "dependencies": {
-        "web-streams-polyfill": "^3.1.1"
-      }
-    },
     "node_modules/@segment/loosely-validate-event": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz",
@@ -5307,12 +5197,6 @@
         "@babel/types": "^7.20.7"
       }
     },
-    "node_modules/@types/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
-      "license": "MIT"
-    },
     "node_modules/@types/estree": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -5655,9 +5539,9 @@
       }
     },
     "node_modules/@urql/core": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.1.0.tgz",
-      "integrity": "sha512-yC3sw8yqjbX45GbXxfiBY8GLYCiyW/hLBbQF9l3TJrv4ro00Y0ChkKaD9I2KntRxAVm9IYBqh0awX8fwWAe/Yw==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.1.1.tgz",
+      "integrity": "sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==",
       "license": "MIT",
       "dependencies": {
         "@0no-co/graphql.web": "^1.0.5",
@@ -5665,24 +5549,18 @@
       }
     },
     "node_modules/@urql/exchange-retry": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.0.tgz",
-      "integrity": "sha512-FLt+d81gP4oiHah4hWFDApimc+/xABWMU1AMYsZ1PVB0L0YPtrMCjbOp9WMM7hBzy4gbTDrG24sio0dCfSh/HQ==",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.1.tgz",
+      "integrity": "sha512-EEmtFu8JTuwsInqMakhLq+U3qN8ZMd5V3pX44q0EqD2imqTDsa8ikZqJ1schVrN8HljOdN+C08cwZ1/r5uIgLw==",
       "license": "MIT",
       "dependencies": {
-        "@urql/core": "^5.0.0",
+        "@urql/core": "^5.1.1",
         "wonka": "^6.3.2"
       },
       "peerDependencies": {
         "@urql/core": "^5.0.0"
       }
     },
-    "node_modules/@web3-storage/multipart-parser": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz",
-      "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==",
-      "license": "(Apache-2.0 AND MIT)"
-    },
     "node_modules/@xmldom/xmldom": {
       "version": "0.7.13",
       "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
@@ -5693,13 +5571,6 @@
         "node": ">=10.0.0"
       }
     },
-    "node_modules/@zxing/text-encoding": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz",
-      "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==",
-      "license": "(Unlicense OR Apache-2.0)",
-      "optional": true
-    },
     "node_modules/abort-controller": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
@@ -5950,21 +5821,6 @@
         "node": ">= 4.0.0"
       }
     },
-    "node_modules/available-typed-arrays": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
-      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
-      "license": "MIT",
-      "dependencies": {
-        "possible-typed-array-names": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/babel-core": {
       "version": "7.0.0-bridge.0",
       "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
@@ -6116,9 +5972,9 @@
       }
     },
     "node_modules/babel-preset-expo": {
-      "version": "12.0.8",
-      "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.8.tgz",
-      "integrity": "sha512-bojAddWZJusLs3NVdF+jN3WweTYVEZXBKIeO0sOhqOg7UPh5w1bnMkx7SDua0FgQMGBxb13qM31Y46yeZnmXjw==",
+      "version": "12.0.11",
+      "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.11.tgz",
+      "integrity": "sha512-4m6D92nKEieg+7DXa8uSvpr0GjfuRfM/G0t0I/Q5hF8HleEv5ms3z4dJ+p52qXSJsm760tMqLdO93Ywuoi7cCQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/plugin-proposal-decorators": "^7.12.9",
@@ -6127,7 +5983,7 @@
         "@babel/plugin-transform-parameters": "^7.22.15",
         "@babel/preset-react": "^7.22.15",
         "@babel/preset-typescript": "^7.23.0",
-        "@react-native/babel-preset": "0.76.7",
+        "@react-native/babel-preset": "0.76.9",
         "babel-plugin-react-native-web": "~0.19.13",
         "react-refresh": "^0.14.2"
       },
@@ -6145,21 +6001,21 @@
       }
     },
     "node_modules/babel-preset-expo/node_modules/@react-native/babel-plugin-codegen": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.7.tgz",
-      "integrity": "sha512-+8H4DXJREM4l/pwLF/wSVMRzVhzhGDix5jLezNrMD9J1U1AMfV2aSkWA1XuqR7pjPs/Vqf6TaPL7vJMZ4LU05Q==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.9.tgz",
+      "integrity": "sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==",
       "license": "MIT",
       "dependencies": {
-        "@react-native/codegen": "0.76.7"
+        "@react-native/codegen": "0.76.9"
       },
       "engines": {
         "node": ">=18"
       }
     },
     "node_modules/babel-preset-expo/node_modules/@react-native/babel-preset": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.7.tgz",
-      "integrity": "sha512-/c5DYZ6y8tyg+g8tgXKndDT7mWnGmkZ9F+T3qNDfoE3Qh7ucrNeC2XWvU9h5pk8eRtj9l4SzF4aO1phzwoibyg==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.9.tgz",
+      "integrity": "sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==",
       "license": "MIT",
       "dependencies": {
         "@babel/core": "^7.25.2",
@@ -6203,7 +6059,7 @@
         "@babel/plugin-transform-typescript": "^7.25.2",
         "@babel/plugin-transform-unicode-regex": "^7.24.7",
         "@babel/template": "^7.25.0",
-        "@react-native/babel-plugin-codegen": "0.76.7",
+        "@react-native/babel-plugin-codegen": "0.76.9",
         "babel-plugin-syntax-hermes-parser": "^0.25.1",
         "babel-plugin-transform-flow-enums": "^0.0.2",
         "react-refresh": "^0.14.0"
@@ -6216,9 +6072,9 @@
       }
     },
     "node_modules/babel-preset-expo/node_modules/@react-native/codegen": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.7.tgz",
-      "integrity": "sha512-FAn585Ll65YvkSrKDyAcsdjHhhAGiMlSTUpHh0x7J5ntudUns+voYms0xMP+pEPt0XuLdjhD7zLIIlAWP407+g==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.9.tgz",
+      "integrity": "sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
@@ -6565,24 +6421,6 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/call-bind": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
-      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.0",
-        "es-define-property": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "set-function-length": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/call-bind-apply-helpers": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
@@ -6596,22 +6434,6 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/call-bound": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
-      "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "get-intrinsic": "^1.2.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/caller-callsite": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
@@ -7109,24 +6931,6 @@
       "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
       "license": "MIT"
     },
-    "node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/cookie-signature": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
-      "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.6.0"
-      }
-    },
     "node_modules/core-js-compat": {
       "version": "3.39.0",
       "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz",
@@ -7310,15 +7114,6 @@
       "devOptional": true,
       "license": "MIT"
     },
-    "node_modules/data-uri-to-buffer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
-      "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/debug": {
       "version": "4.3.7",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
@@ -7395,23 +7190,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/define-data-property": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
-      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
-      "license": "MIT",
-      "dependencies": {
-        "es-define-property": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/define-lazy-prop": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -8144,32 +7922,34 @@
       }
     },
     "node_modules/expo": {
-      "version": "52.0.35",
-      "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.35.tgz",
-      "integrity": "sha512-VagwS6MJbU0Eky18i4amkkSy7FTi0v31B0W+qoEcsU4x5OurA381rxw4qGsQE+8pmSD/Gf3DGb8ygJw+HoAsXw==",
+      "version": "52.0.44",
+      "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.44.tgz",
+      "integrity": "sha512-qj3+MWxmqLyBaYQ8jDOvVLEgSqNplH3cf+nDhxCo4C1cpTPD1u/HGh1foibtaeuCYLHsE5km1lrcOpRbFJ4luQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/runtime": "^7.20.0",
-        "@expo/cli": "0.22.16",
-        "@expo/config": "~10.0.10",
-        "@expo/config-plugins": "~9.0.15",
-        "@expo/fingerprint": "0.11.10",
-        "@expo/metro-config": "0.19.10",
+        "@expo/cli": "0.22.24",
+        "@expo/config": "~10.0.11",
+        "@expo/config-plugins": "~9.0.17",
+        "@expo/fingerprint": "0.11.11",
+        "@expo/metro-config": "0.19.12",
         "@expo/vector-icons": "^14.0.0",
-        "babel-preset-expo": "~12.0.8",
-        "expo-asset": "~11.0.3",
-        "expo-constants": "~17.0.6",
-        "expo-file-system": "~18.0.10",
-        "expo-font": "~13.0.3",
-        "expo-keep-awake": "~14.0.2",
-        "expo-modules-autolinking": "2.0.7",
-        "expo-modules-core": "2.2.2",
+        "babel-preset-expo": "~12.0.11",
+        "expo-asset": "~11.0.5",
+        "expo-constants": "~17.0.8",
+        "expo-file-system": "~18.0.12",
+        "expo-font": "~13.0.4",
+        "expo-keep-awake": "~14.0.3",
+        "expo-modules-autolinking": "2.0.8",
+        "expo-modules-core": "2.2.3",
         "fbemitter": "^3.0.0",
         "web-streams-polyfill": "^3.3.2",
         "whatwg-url-without-unicode": "8.0.0-3"
       },
       "bin": {
-        "expo": "bin/cli"
+        "expo": "bin/cli",
+        "expo-modules-autolinking": "bin/autolinking",
+        "fingerprint": "bin/fingerprint"
       },
       "peerDependencies": {
         "@expo/dom-webview": "*",
@@ -8191,13 +7971,13 @@
       }
     },
     "node_modules/expo-asset": {
-      "version": "11.0.3",
-      "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.3.tgz",
-      "integrity": "sha512-vgJnC82IooAVMy5PxbdFIMNJhW4hKAUyxc5VIiAPPf10vFYw6CqHm+hrehu4ST1I4bvg5PV4uKdPxliebcbgLg==",
+      "version": "11.0.5",
+      "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.5.tgz",
+      "integrity": "sha512-TL60LmMBGVzs3NQcO8ylWqBumMh4sx0lmeJsn7+9C88fylGDhyyVnKZ1PyTXo9CVDBkndutZx2JUEQWM9BaiXw==",
       "license": "MIT",
       "dependencies": {
-        "@expo/image-utils": "^0.6.4",
-        "expo-constants": "~17.0.5",
+        "@expo/image-utils": "^0.6.5",
+        "expo-constants": "~17.0.8",
         "invariant": "^2.2.4",
         "md5-file": "^3.2.3"
       },
@@ -8219,13 +7999,13 @@
       }
     },
     "node_modules/expo-constants": {
-      "version": "17.0.6",
-      "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.6.tgz",
-      "integrity": "sha512-rl3/hBIIkh4XDkCEMzGpmY6kWj2G1TA4Mq2joeyzoFBepJuGjqnGl7phf/71sTTgamQ1hmhKCLRNXMpRqzzqxw==",
+      "version": "17.0.8",
+      "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.8.tgz",
+      "integrity": "sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg==",
       "license": "MIT",
       "dependencies": {
-        "@expo/config": "~10.0.9",
-        "@expo/env": "~0.4.1"
+        "@expo/config": "~10.0.11",
+        "@expo/env": "~0.4.2"
       },
       "peerDependencies": {
         "expo": "*",
@@ -8233,9 +8013,9 @@
       }
     },
     "node_modules/expo-file-system": {
-      "version": "18.0.10",
-      "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.10.tgz",
-      "integrity": "sha512-+GnxkI+J9tOzUQMx+uIOLBEBsO2meyoYHxd87m9oT9M//BpepYqI1AvYBH8YM4dgr9HaeaeLr7z5XFVqfL8tWg==",
+      "version": "18.0.12",
+      "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.12.tgz",
+      "integrity": "sha512-HAkrd/mb8r+G3lJ9MzmGeuW2B+BxQR1joKfeCyY4deLl1zoZ48FrAWjgZjHK9aHUVhJ0ehzInu/NQtikKytaeg==",
       "license": "MIT",
       "dependencies": {
         "web-streams-polyfill": "^3.3.2"
@@ -8246,9 +8026,9 @@
       }
     },
     "node_modules/expo-font": {
-      "version": "13.0.3",
-      "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.0.3.tgz",
-      "integrity": "sha512-9IdYz+A+b3KvuCYP7DUUXF4VMZjPU+IsvAnLSVJ2TfP6zUD2JjZFx3jeo/cxWRkYk/aLj5+53Te7elTAScNl4Q==",
+      "version": "13.0.4",
+      "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.0.4.tgz",
+      "integrity": "sha512-eAP5hyBgC8gafFtprsz0HMaB795qZfgJWqTmU0NfbSin1wUuVySFMEPMOrTkTgmazU73v4Cb4x7p86jY1XXYUw==",
       "license": "MIT",
       "dependencies": {
         "fontfaceobserver": "^2.1.0"
@@ -8259,9 +8039,9 @@
       }
     },
     "node_modules/expo-keep-awake": {
-      "version": "14.0.2",
-      "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.0.2.tgz",
-      "integrity": "sha512-71XAMnoWjKZrN8J7Q3+u0l9Ytp4OfhNAYz8BCWF1/9aFUw09J3I7Z5DuI3MUsVMa/KWi+XhG+eDUFP8cVA19Uw==",
+      "version": "14.0.3",
+      "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.0.3.tgz",
+      "integrity": "sha512-6Jh94G6NvTZfuLnm2vwIpKe3GdOiVBuISl7FI8GqN0/9UOg9E0WXXp5cDcfAG8bn80RfgLJS8P7EPUGTZyOvhg==",
       "license": "MIT",
       "peerDependencies": {
         "expo": "*",
@@ -8308,9 +8088,9 @@
       }
     },
     "node_modules/expo-modules-autolinking": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.0.7.tgz",
-      "integrity": "sha512-rkGc6a/90AC3q8wSy4V+iIpq6Fd0KXmQICKrvfmSWwrMgJmLfwP4QTrvLYPYOOMjFwNJcTaohcH8vzW/wYKrMg==",
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.0.8.tgz",
+      "integrity": "sha512-DezgnEYFQYic8hKGhkbztBA3QUmSftjaNDIKNAtS2iGJmzCcNIkatjN2slFDSWjSTNo8gOvPQyMKfyHWFvLpOQ==",
       "license": "MIT",
       "dependencies": {
         "@expo/spawn-async": "^1.7.2",
@@ -8363,22 +8143,22 @@
       }
     },
     "node_modules/expo-modules-core": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.2.2.tgz",
-      "integrity": "sha512-SgjK86UD89gKAscRK3bdpn6Ojfs/KU4GujtuFx1wm4JaBjmXH4aakWkItkPlAV2pjIiHJHWQbENL9xjbw/Qr/g==",
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.2.3.tgz",
+      "integrity": "sha512-01QqZzpP/wWlxnNly4G06MsOBUTbMDj02DQigZoXfDh80vd/rk3/uVXqnZgOdLSggTs6DnvOgAUy0H2q30XdUg==",
       "license": "MIT",
       "dependencies": {
         "invariant": "^2.2.4"
       }
     },
     "node_modules/expo-router": {
-      "version": "4.0.17",
-      "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-4.0.17.tgz",
-      "integrity": "sha512-8ybo6bVwdG1S9hafh9BTOjX1hpCgomdUvs6hKHMM01koo8mQ7zocH/+zxQeaMVDxGhboz2dO5GiDchWJ0OheRA==",
+      "version": "4.0.20",
+      "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-4.0.20.tgz",
+      "integrity": "sha512-1+CtvohptOsG/Piejk8uQ9cmM+8ojadFkdeThCn4klZjc0dtFSSHenb8D/0RKuBdp4taBkNaqgEKwYvhVBJyEg==",
       "license": "MIT",
       "dependencies": {
         "@expo/metro-runtime": "4.0.1",
-        "@expo/server": "^0.5.1",
+        "@expo/server": "^0.5.3",
         "@radix-ui/react-slot": "1.0.1",
         "@react-navigation/bottom-tabs": "^7.2.0",
         "@react-navigation/native": "^7.0.14",
@@ -8435,12 +8215,12 @@
       }
     },
     "node_modules/expo-system-ui": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-4.0.8.tgz",
-      "integrity": "sha512-0AmWXJ3ObwMYxi2YGagwRQikydoUZJXLeK4A0FY1PsZpnlorSQ4IAfEVS38JmA54tf5CpP4TjBp5ZVEjRyv1rw==",
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-4.0.9.tgz",
+      "integrity": "sha512-hqBc0EWeK/BTB8i4H84vqNjje8GgxhapYrcWdg5qriaRA/u+bNNxhmpZXdAjFuhonOP4SmAbF+gjoJJWsTrhUg==",
       "license": "MIT",
       "dependencies": {
-        "@react-native/normalize-colors": "0.76.7",
+        "@react-native/normalize-colors": "0.76.8",
         "debug": "^4.3.2"
       },
       "peerDependencies": {
@@ -8707,21 +8487,6 @@
       "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==",
       "license": "BSD-2-Clause"
     },
-    "node_modules/for-each": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.4.tgz",
-      "integrity": "sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==",
-      "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.2.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/foreground-child": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
@@ -9027,18 +8792,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/has-property-descriptors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
-      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
-      "license": "MIT",
-      "dependencies": {
-        "es-define-property": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/has-symbols": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
@@ -9435,22 +9188,6 @@
         "node": ">= 0.10"
       }
     },
-    "node_modules/is-arguments": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz",
-      "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -9463,18 +9200,6 @@
       "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
       "license": "MIT"
     },
-    "node_modules/is-callable": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-core-module": {
       "version": "2.15.1",
       "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
@@ -9532,24 +9257,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/is-generator-function": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
-      "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "get-proto": "^1.0.0",
-        "has-tostringtag": "^1.0.2",
-        "safe-regex-test": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-glob": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -9610,24 +9317,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/is-regex": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
-      "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "gopd": "^1.2.0",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -9637,21 +9326,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/is-typed-array": {
-      "version": "1.1.15",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
-      "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
-      "license": "MIT",
-      "dependencies": {
-        "which-typed-array": "^1.1.16"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-wsl": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -11598,9 +11272,9 @@
       }
     },
     "node_modules/mime-db": {
-      "version": "1.53.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz",
-      "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==",
+      "version": "1.54.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+      "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
       "license": "MIT",
       "engines": {
         "node": ">= 0.6"
@@ -11816,15 +11490,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/mrmime": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz",
-      "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/ms": {
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -12641,15 +12306,6 @@
         "node": ">=4.0.0"
       }
     },
-    "node_modules/possible-typed-array-names": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
-      "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/postcss": {
       "version": "8.4.49",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
@@ -13157,19 +12813,19 @@
       "license": "MIT"
     },
     "node_modules/react-native": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.7.tgz",
-      "integrity": "sha512-GPJcQeO3qUi1MvuhsC2DC6tH8gJQ4uc4JWPORrdeuCGFWE3QLsN8/hiChTEvJREHLfQSV61YPI8gIOtAQ8c37g==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.9.tgz",
+      "integrity": "sha512-+LRwecWmTDco7OweGsrECIqJu0iyrREd6CTCgC/uLLYipiHvk+MH9nd6drFtCw/6Blz6eoKTcH9YTTJusNtrWg==",
       "license": "MIT",
       "dependencies": {
         "@jest/create-cache-key-function": "^29.6.3",
-        "@react-native/assets-registry": "0.76.7",
-        "@react-native/codegen": "0.76.7",
-        "@react-native/community-cli-plugin": "0.76.7",
-        "@react-native/gradle-plugin": "0.76.7",
-        "@react-native/js-polyfills": "0.76.7",
-        "@react-native/normalize-colors": "0.76.7",
-        "@react-native/virtualized-lists": "0.76.7",
+        "@react-native/assets-registry": "0.76.9",
+        "@react-native/codegen": "0.76.9",
+        "@react-native/community-cli-plugin": "0.76.9",
+        "@react-native/gradle-plugin": "0.76.9",
+        "@react-native/js-polyfills": "0.76.9",
+        "@react-native/normalize-colors": "0.76.9",
+        "@react-native/virtualized-lists": "0.76.9",
         "abort-controller": "^3.0.0",
         "anser": "^1.4.9",
         "ansi-regex": "^5.0.0",
@@ -13502,9 +13158,9 @@
       }
     },
     "node_modules/react-native/node_modules/@react-native/codegen": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.7.tgz",
-      "integrity": "sha512-FAn585Ll65YvkSrKDyAcsdjHhhAGiMlSTUpHh0x7J5ntudUns+voYms0xMP+pEPt0XuLdjhD7zLIIlAWP407+g==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.9.tgz",
+      "integrity": "sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
@@ -13524,18 +13180,24 @@
       }
     },
     "node_modules/react-native/node_modules/@react-native/js-polyfills": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.7.tgz",
-      "integrity": "sha512-+iEikj6c6Zvrg1c3cYMeiPB+5nS8EaIC3jCtP6Muk3qc7c386IymEPM2xycIlfg04DPZvO3D4P2/vaO9/TCnUg==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.9.tgz",
+      "integrity": "sha512-s6z6m8cK4SMjIX1hm8LT187aQ6//ujLrjzDBogqDCYXRbfjbAYovw5as/v2a2rhUIyJbS3UjokZm3W0H+Oh/RQ==",
       "license": "MIT",
       "engines": {
         "node": ">=18"
       }
     },
+    "node_modules/react-native/node_modules/@react-native/normalize-colors": {
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz",
+      "integrity": "sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==",
+      "license": "MIT"
+    },
     "node_modules/react-native/node_modules/@react-native/virtualized-lists": {
-      "version": "0.76.7",
-      "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.7.tgz",
-      "integrity": "sha512-pRUf1jUO8H9Ft04CaWv76t34QI9wY0sydoYlIwEtqXjjMJgmgDoOCAWBjArgn2mk8/rK+u/uicI67ZCYCp1pJw==",
+      "version": "0.76.9",
+      "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.9.tgz",
+      "integrity": "sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw==",
       "license": "MIT",
       "dependencies": {
         "invariant": "^2.2.4",
@@ -13943,23 +13605,6 @@
       ],
       "license": "MIT"
     },
-    "node_modules/safe-regex-test": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
-      "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "is-regex": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/sax": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
@@ -14193,29 +13838,6 @@
       "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==",
       "license": "MIT"
     },
-    "node_modules/set-cookie-parser": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
-      "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
-      "license": "MIT"
-    },
-    "node_modules/set-function-length": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
-      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
-      "license": "MIT",
-      "dependencies": {
-        "define-data-property": "^1.1.4",
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2",
-        "get-intrinsic": "^1.2.4",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/setimmediate": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -14416,15 +14038,6 @@
         "tslib": "^2.0.3"
       }
     },
-    "node_modules/source-map": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
-      "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/source-map-js": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -14558,12 +14171,6 @@
         "node": ">= 0.10.0"
       }
     },
-    "node_modules/stream-slice": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/stream-slice/-/stream-slice-0.1.2.tgz",
-      "integrity": "sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==",
-      "license": "MIT"
-    },
     "node_modules/strict-uri-encode": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
@@ -15217,12 +14824,6 @@
       "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
       "license": "0BSD"
     },
-    "node_modules/turbo-stream": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
-      "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
-      "license": "ISC"
-    },
     "node_modules/type-check": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -15261,7 +14862,7 @@
       "version": "5.3.3",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
       "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
-      "devOptional": true,
+      "dev": true,
       "license": "Apache-2.0",
       "bin": {
         "tsc": "bin/tsc",
@@ -15470,19 +15071,6 @@
         "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
       }
     },
-    "node_modules/util": {
-      "version": "0.12.5",
-      "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
-      "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
-      "license": "MIT",
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "is-arguments": "^1.0.4",
-        "is-generator-function": "^1.0.7",
-        "is-typed-array": "^1.1.3",
-        "which-typed-array": "^1.1.2"
-      }
-    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -15564,18 +15152,6 @@
         "defaults": "^1.0.3"
       }
     },
-    "node_modules/web-encoding": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz",
-      "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==",
-      "license": "MIT",
-      "dependencies": {
-        "util": "^0.12.3"
-      },
-      "optionalDependencies": {
-        "@zxing/text-encoding": "0.9.0"
-      }
-    },
     "node_modules/web-streams-polyfill": {
       "version": "3.3.3",
       "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
@@ -15645,30 +15221,10 @@
         "node": ">= 8"
       }
     },
-    "node_modules/which-typed-array": {
-      "version": "1.1.18",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
-      "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
-      "license": "MIT",
-      "dependencies": {
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "for-each": "^0.3.3",
-        "gopd": "^1.2.0",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/wonka": {
-      "version": "6.3.4",
-      "resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.4.tgz",
-      "integrity": "sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg==",
+      "version": "6.3.5",
+      "resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.5.tgz",
+      "integrity": "sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==",
       "license": "MIT"
     },
     "node_modules/word-wrap": {
@@ -15734,9 +15290,9 @@
       }
     },
     "node_modules/ws": {
-      "version": "8.18.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
-      "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz",
+      "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==",
       "license": "MIT",
       "engines": {
         "node": ">=10.0.0"
diff --git a/package.json b/package.json
index c49f39b..e5591d8 100644
--- a/package.json
+++ b/package.json
@@ -31,14 +31,14 @@
     "expo-font": "~13.0.3",
     "expo-linear-gradient": "~14.0.2",
     "expo-localization": "~16.0.1",
-    "expo-router": "^4.0.17",
+    "expo-router": "~4.0.20",
     "expo-status-bar": "~2.0.1",
-    "expo-system-ui": "4.0.8",
+    "expo-system-ui": "~4.0.9",
     "i18next": "^23.16.4",
     "react": "18.3.1",
     "react-dom": "18.3.1",
     "react-i18next": "^15.1.0",
-    "react-native": "^0.76.7",
+    "react-native": "0.76.9",
     "react-native-iconify": "^2.0.3",
     "react-native-reanimated": "~3.16.1",
     "react-native-safe-area-context": "^4.12.0",
diff --git a/services/i18n/en-US.json b/services/i18n/en-US.json
index 987c821..13417f0 100644
--- a/services/i18n/en-US.json
+++ b/services/i18n/en-US.json
@@ -128,7 +128,7 @@
         "partner_tickets_detail_1": "You have four flexible stand tickets included in your partnership package. These are intended for stand personnel, and do not give access to the talks. You must order tickets for all your employees that want to attend a talk (or if you have more than four who need to be on the stand at once).",
         "round_robin_distribution": "Round robin distribution on tickets ordered by May 15\u1d57\u02b0",
         "first_come_first_served": "First come first served if tickets are still available after May 15\u1d57\u02b0",
-        "order_tickets": "Order your partner ticket"
+        "order_tickets": "Order your \npartner ticket"
       }
     },
     "ticket": {
@@ -215,7 +215,7 @@
       "no_differentiation": "We do not differentiate between speakers from partners and independent speakers.",
       "adherence_to_principles": "If your talk adheres to these very important principles, you are more than welcome to submit it to our Call for Speakers!",
       "closing_statement": "We hope to see you at JavaZone 2025 - please feel free to spread the word to your local community!",
-      "program_committee": "Best regards, the JavaZone Program Committee"
+      "program_committee": "Best regards, \nthe JavaZone Program Committee"
     },
     "submissionTips": {
       "submission_tips_title": "Submission tips",
diff --git a/services/i18n/nb-NO.json b/services/i18n/nb-NO.json
index fee970b..4dbeea1 100644
--- a/services/i18n/nb-NO.json
+++ b/services/i18n/nb-NO.json
@@ -137,9 +137,9 @@
       "title": "JavaZone Kids",
       "call_for_speakers_title": "Call for speakers for JavaZone Kids 2025",
       "javazone_kids_intro": "JavaZone Kids er en dag med workshops for barn i alderen 8-17 år. Det er en dag for læring og moro, og foreldre oppfordres til å bli og delta i moroa. Workshopene er ment å være på forskjellige nivåer, så det er noe for alle. ",
-      "event_date_location_start": "Arrangementet vil finne sted 31. august 2025 på Rebel i Oslo. Vi ber om workshops på både norsk og engelsk. Varigheten av arrangementet er 4 timer, med en pause i mellom. Er du interessert, send oss en e-post til",
+      "event_date_location_start": "Arrangementet vil finne sted 31. august 2025 på Rebel i Oslo. Vi ber om workshops på både norsk og engelsk. Varigheten av arrangementet er 4 timer, med en pause i mellom. Er du interessert, send oss en e-post til ",
       "event_date_location_link_title": "kids@java.no",
-      "event_date_location_end": "innen 1. april 2025.",
+      "event_date_location_end": " innen 1. april 2025.",
       "workshop_description_intro": "Beskrivelsen av din workshop må inneholde:",
       "workshop_title": "Tittel",
       "workshop_abstract": "Sammendrag, dette vil bli vist på vår nettside",
@@ -212,7 +212,7 @@
       "no_differentiation": "Vi skiller ikke mellom foredragsholdere fra partnere og uavhengige foredragsholdere.",
       "adherence_to_principles": "Hvis ditt foredrag følger disse svært viktige prinsippene, er du mer enn velkommen til å sende det inn til vår Call for Speakers!",
       "closing_statement": "Vi håper å se deg på JavaZone 2025 - vennligst spre ordet til ditt lokale samfunn!",
-      "program_committee": "Med vennlig hilsen, JavaZone Programkomiteen"
+      "program_committee": "Med vennlig hilsen, \nJavaZone Programkomiteen"
     },
     "submissionTips": {
       "submission_tips_title": "Innsendingstips",


Reviews:
user: login: HenrikEide
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-08T18:31:43Z
user: login: HenrikEide
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-08T18:36:11Z
user: login: HenrikEide
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-08T20:02:41Z
user: login: HenrikEide
body: Looks good 🚀 
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-04-08T20:03:40Z
user: login: carolinevannebo
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-08T20:30:08Z

Review comments:
diff_hunk: @@ -1,25 +1,15 @@
 import { partners } from '@/assets/partners/partners';
-import { Text, View, StyleSheet, Dimensions, Animated } from 'react-native';
+import { View, StyleSheet, Dimensions, Animated, Platform} from 'react-native';
path: components/PartnerBanner.tsx
user: login: HenrikEide
body: where space after Platform 🫥
created_at: 2025-04-08T18:31:43Z
author_association: COLLABORATOR
diff_hunk: @@ -1,25 +1,15 @@
 import { partners } from '@/assets/partners/partners';
-import { Text, View, StyleSheet, Dimensions, Animated } from 'react-native';
+import { View, StyleSheet, Dimensions, Animated, Platform} from 'react-native';
 import { Link } from 'expo-router';
-import { SvgImage } from '@/UI';
-
-interface Partner {
-  homepageUrl: string;
-  name: string;
-  logoUrl: string;
-}
-
-interface Props {
-  partners: Partner[];
-}
+import { SvgImage} from '@/UI';
path: components/PartnerBanner.tsx
user: login: HenrikEide
body: Inconsistent white-space på imports, how
created_at: 2025-04-08T18:36:11Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1 @@
+[{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/assert/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/async_hooks/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/buffer/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/child_process/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/cluster/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/console/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/constants/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/crypto/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/dgram/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/diagnostics_channel/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/dns/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/domain/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/events/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/fs/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/fs/promises/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/http/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/http2/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/https/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/inspector/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/module/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/net/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/os/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/path/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/perf_hooks/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/process/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/punycode/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/querystring/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/readline/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/repl/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/stream/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/string_decoder/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/timers/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/tls/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/trace_events/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/tty/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/url/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/util/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/v8/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/vm/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/wasi/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/worker_threads/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/externals/zlib/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/polyfill.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/.expo/metro/polyfill.native.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/babel.config.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/eslint.config.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/metro.config.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/henrik/Documents/javabin/2025.javazone.no-native/react-native.config.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}]
path: eslint-report.json
user: login: HenrikEide
body: Feil fra min PR at eslint report er med her, ville sletta og tatt med fila `.gitignore` så vi ikke pusher den opp
created_at: 2025-04-08T20:02:41Z
author_association: COLLABORATOR
diff_hunk: @@ -1,25 +1,15 @@
 import { partners } from '@/assets/partners/partners';
-import { Text, View, StyleSheet, Dimensions, Animated } from 'react-native';
+import { View, StyleSheet, Dimensions, Animated, Platform} from 'react-native';
path: components/PartnerBanner.tsx
user: login: carolinevannebo
body: hahah fixed!
created_at: 2025-04-08T20:30:08Z
author_association: COLLABORATOR

PR comments:
user: login: vercel[bot]
created_at: 2025-04-08T18:10:58Z
body: [vc]: #IbLwUoAEQF04146XVVL9gbHRk9fmMnlLS4NKusMpybo=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiIyMDI1LWphdmF6b25lLW5vIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IjIwMjUtamF2YXpvbmUtbm8tZ2l0LWZpeC1hbmRyb2lkLWphdmFiaW4udmVyY2VsLmFwcCJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vamF2YWJpbi8yMDI1LWphdmF6b25lLW5vLzZ5VjV1TUNWQWg5bzJ0dmV2TWNSVWtwQmlvb2MiLCJwcmV2aWV3VXJsIjoiMjAyNS1qYXZhem9uZS1uby1naXQtZml4LWFuZHJvaWQtamF2YWJpbi52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwicm9vdERpcmVjdG9yeSI6bnVsbH1dfQ==
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **2025-javazone-no** | ✅ Ready ([Inspect](https://vercel.com/javabin/2025-javazone-no/6yV5uMCVAh9o2tvevMcRUkpBiooc)) | [Visit Preview](https://2025-javazone-no-git-fix-android-javabin.vercel.app) | 💬 [**Add feedback**](https://vercel.live/open-feedback/2025-javazone-no-git-fix-android-javabin.vercel.app?via=pr-comment-feedback-link) | Apr 9, 2025 1:54am |


author_association: NONE
user: login: carolinevannebo
created_at: 2025-04-08T23:17:50Z
body: Fixed the radioactive button 💅🏼 @HenrikEide 
<img width="761" alt="Screenshot 2025-04-09 at 01 15 10" src="https://github.com/user-attachments/assets/f11dbdfe-ab23-42e0-bd92-dd1f1dc6ec9c" />

author_association: COLLABORATOR