Tela: Home
Tela principal do app. Composição de header, service selector, carrossel de cards e seções de conteúdo.
Header
Row com logo à esquerda e botão de notificação à direita. O dot azul indica notificações pendentes.
| Propriedade | Valor | Descrição |
|---|---|---|
iconButton size | 40×40 | width e height |
iconButton radius | 20px | Circular |
iconButton bg | rgba(255,255,255,0.10) | white10 |
icon size | 22–24px | MaterialIcons |
notificationDot size | 16×16 | |
notificationDot radius | 8px | Circular |
notificationDot bg | #4494FC | embarko_blue |
notificationDot pos | top:-2 right:-2 | position absolute |
// screens/Home/styles.js
iconButton: {
width: 40, height: 40,
borderRadius: 20,
backgroundColor: "rgba(255,255,255,0.10)",
alignItems: 'center', justifyContent: 'center',
},
notificationDot: {
position: 'absolute',
top: -2, right: -2,
width: 16, height: 16,
borderRadius: 8,
backgroundColor: colors.embarko_blue,
},Service Selector
Row de 4 botões de ícone para selecionar o serviço ativo. Passagens, Passeios, Shows e eSIM.
| Propriedade | Valor | Descrição |
|---|---|---|
serviceSelectorRow | flexDirection row, gap 4, width 100% | |
button size | 48×48 | |
button radius | radius.md (12px) | |
button bg (inactive) | rgba(255,255,255,0.12) | |
button border (inactive) | 1px rgba(255,255,255,0.08) | |
button bg (active) | #4494FC | embarko_blue |
button border (active) | transparent | |
button opacity (disabled) | 0.45 | |
label marginTop | 10px | |
label fontSize | 14px | |
label color (inactive) | rgba(255,255,255,0.80) | Medium |
label color (active) | #FFFFFF | Semibold |
label color (disabled) | rgba(255,255,255,0.40) | Medium |
// screens/Home/styles.js (excerpt)
serviceSelectorButton: {
width: 48, height: 48, borderRadius: radius.md, // 12
backgroundColor: "rgba(255,255,255,0.12)",
borderWidth: 1, borderColor: colors.white08,
},
serviceSelectorButtonActive: {
backgroundColor: colors.embarko_blue,
borderColor: "transparent",
},
serviceSelectorButtonDisabled: {
opacity: 0.45,
},
serviceSelectorLabel: {
marginTop: 10, fontSize: 14,
fontFamily: Medium, color: "rgba(255,255,255,0.80)",
},
serviceSelectorLabelActive: { fontFamily: Semibold, color: colors.white },
serviceSelectorLabelDisabled: { color: "rgba(255,255,255,0.40)" },Seções de Conteúdo
Cada seção tem título, subtítulo opcional e um carrossel horizontal. Gap de 32px entre seções.
| Propriedade | Valor | Descrição |
|---|---|---|
section gap | 16px | Entre título e carrossel |
section paddingH | 16px | |
sectionTitle fontSize | 24px | Semibold, white |
sectionTitle lineHeight | 30px | |
sectionSubtitle fontSize | 14px | Medium, white60 |
gap entre seções | spacing.xl (32px) |
Carrossel Horizontal
O carrossel "sangra" para fora do padding da tela com marginHorizontal: -16, mantendo o padding interno via paddingHorizontal: 16.
| Propriedade | Valor | Descrição |
|---|---|---|
carouselWrapper marginH | -16px | Sangramento fora do padding |
carouselContent paddingH | 16px | spacing.md |
carouselContent gap | 16px | spacing.md entre cards |
cardWrapper width | 310px | activityCard.cardWidth |
sectionTitle: {
fontSize: 24, lineHeight: 30,
fontFamily: Semibold, color: colors.white,
},
carouselWrapper: { marginHorizontal: -spacing.md },
carouselContent: { paddingHorizontal: spacing.md, gap: spacing.md },Skeleton Loading
Cards exibidos enquanto os dados carregam. Fundo escuro com áreas de conteúdo em branco 8%.
| Propriedade | Valor | Descrição |
|---|---|---|
skeletonCard bg | rgba(255,255,255,0.10) | |
skeletonCard radius | 16px | |
skeletonCard padding | 16px | |
skeletonImage height | 160px | |
skeletonImage bg | rgba(255,255,255,0.08) | |
skeletonImage radius | 16px | |
skeletonImage marginB | 12px | |
skeletonLine height | 14px | |
skeletonLine bg | rgba(255,255,255,0.08) | |
skeletonLine radius | 4px | |
skeletonLine marginB | 8px | |
skeletonLine width | 80% | |
skeletonLineShort width | 55% |
Tracker Banner
Card promocional do tracker de preços. Largura fixa 320px, ilustração transbordando à direita.
| Propriedade | Valor | Descrição |
|---|---|---|
width | 320px | |
height | 110px | |
bg | rgba(255,255,255,0.10) | |
borderRadius | 16px | |
paddingTop | 12px | |
paddingLeft | 16px | |
overflow | hidden | Ilustração pode transbordar |
title fontSize | 18px | Semibold, white |
subtitle fontSize | 11px | Semibold, white, opacity 0.4 |
subtitle marginTop | 4px |
eSIM — Popular Cards
Cards horizontais para destinos eSIM populares. Flag circular + nome do país.
| Propriedade | Valor | Descrição |
|---|---|---|
size | 160×110 | |
bg | rgba(255,255,255,0.12) | |
borderRadius | 16px | |
padding | 16px | |
justifyContent | space-between | |
flagWrap size | 48×48 | |
flagWrap radius | 24px | Circular |
flagWrap overflow | hidden | |
title fontSize | 14px | Semibold, white |
title lineHeight | 20px |