Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions e2e/city.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ test.use({ permissions: [] }) // no geolocation — the landing must not need it
test('city landing renders the Praha list from the centroid', async ({ page }) => {
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/mesto/praha/')
await page.goto('/mesto/praha/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
await expect(page.getByText('Praha ·')).toBeVisible()
await expect(page).toHaveTitle(/Bohoslužby Praha — mše svatá dnes/)
await shot(page, 'city-praha', true)

// a church detail still opens from the landing list
await page.getByText('kostel sv. Havla').click()
await expect(page).toHaveURL('/kostel/3/')
await expect(page).toHaveURL('/kostel/3/?zobrazeni=seznam')
await expect(page.getByLabel('Pořad bohoslužeb')).toBeVisible()
})

Expand Down Expand Up @@ -50,7 +50,7 @@ test('změnit opens the search over the list; zpět returns with the origin inta
await context.setGeolocation({ latitude: 50.0875, longitude: 14.4213 })
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()

await page.getByRole('button', { name: 'změnit' }).click()
Expand Down
12 changes: 6 additions & 6 deletions e2e/day.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ test.use({ geolocation: PRAGUE, permissions: ['geolocation'] })
test('Sunday ordo: every service that day, chronological, no countdowns', async ({ page }) => {
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()

await openControls(page)
Expand All @@ -33,7 +33,7 @@ test('Sunday ordo: every service that day, chronological, no countdowns', async
test('feast day: picker chip tinted, quiet feast line in the header (5 Jul = Cyril a Metoděj)', async ({ page }) => {
await page.clock.install({ time: new Date('2026-07-03T07:00:00Z') }) // Friday 3 Jul
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()

await openControls(page)
Expand All @@ -47,7 +47,7 @@ test('feast day: picker chip tinted, quiet feast line in the header (5 Jul = Cyr
test('bookmarked ?den=nedele restores the Sunday ordo; day picks rewrite the URL', async ({ page }) => {
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/?den=nedele') // Monday 6 Jul → next Sunday is 12 Jul
await page.goto('/?zobrazeni=seznam&den=nedele') // Monday 6 Jul → next Sunday is 12 Jul
await expect(page.getByText('neděle 12. 7.')).toBeVisible()
await openControls(page)
await expect(page.getByRole('button', { name: 'neděle', exact: true })).toHaveAttribute('aria-pressed', 'true')
Expand All @@ -56,17 +56,17 @@ test('bookmarked ?den=nedele restores the Sunday ordo; day picks rewrite the URL

// switching the day rewrites the param; "hned" drops it
await page.getByRole('button', { name: 'zítra' }).click()
await expect(page).toHaveURL('/?den=zitra')
await expect(page).toHaveURL('/?zobrazeni=seznam&den=zitra')
await page.getByRole('button', { name: 'hned' }).click()
await expect(page).toHaveURL('/')
await expect(page).toHaveURL('/?zobrazeni=seznam')
await expect(page.getByText('za 29 min')).toBeVisible()
})

test('day picker at 375px', async ({ page }) => {
await page.setViewportSize({ width: 375, height: 812 })
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
await openControls(page)
await page.getByRole('button', { name: 'zítra' }).click()
Expand Down
6 changes: 3 additions & 3 deletions e2e/detail.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ test.use({ geolocation: PRAGUE, permissions: ['geolocation'] })
test('detail from the list: weekly ordo, extras, parish, freshness', async ({ page }) => {
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')

await page.getByText('kostel Panny Marie Sněžné').click()
await expect(page).toHaveURL('/kostel/4/')
await expect(page).toHaveURL('/kostel/4/?zobrazeni=seznam')

// weekly schedule grouped by day, Sunday first
const ordo = page.getByLabel('Pořad bohoslužeb')
Expand Down Expand Up @@ -41,7 +41,7 @@ test('detail from the list: weekly ordo, extras, parish, freshness', async ({ pa

// back to the list
await page.getByRole('button', { name: '‹ zpět na seznam' }).click()
await expect(page).toHaveURL('/')
await expect(page).toHaveURL('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
})

Expand Down
2 changes: 1 addition & 1 deletion e2e/english.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ test.use({ locale: 'en-US', geolocation: PRAGUE, permissions: ['geolocation'] })
test('English UI: translated day rubric, pill, and footer', async ({ page }) => {
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')

// registry data (church name) stays Czech even under English UI
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
Expand Down
4 changes: 2 additions & 2 deletions e2e/feedback.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ test.use({ geolocation: PRAGUE, permissions: ['geolocation'] })
test('feedback card: collapsed line → Sean Ellis + text → thanks', async ({ page }) => {
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()

// collapsed by default; Podpořit sits in the same footer line
Expand All @@ -32,7 +32,7 @@ test('feedback at 375px', async ({ page }) => {
await page.setViewportSize({ width: 375, height: 812 })
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
await page.getByRole('button', { name: /Napište nám/ }).click()
await page.getByRole('button', { name: /Napište nám/ }).waitFor({ state: 'hidden' })
Expand Down
8 changes: 4 additions & 4 deletions e2e/filters.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ test.beforeEach(async ({ page }) => {
})

test('greek-catholic filter narrows to the liturgy; persists across reload', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
await shot(page, 'filters-default')

Expand All @@ -34,7 +34,7 @@ test('greek-catholic filter narrows to the liturgy; persists across reload', asy
})

test('language filter + over-narrow combination explains itself', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('kostel sv. Havla')).toBeVisible()

await openControls(page)
Expand All @@ -55,7 +55,7 @@ test('okruh: distance filter narrows the list to walking range', async ({ page,
// stand NE of the centre so 2 km splits the fixture: Havel/Salvátor stay
// inside, the cathedral (~2.6 km) and Ludmily (~2.5 km) fall out
await context.setGeolocation({ latitude: 50.098, longitude: 14.435 })
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('kostel sv. Ludmily')).toBeVisible()

await openControls(page)
Expand All @@ -75,7 +75,7 @@ test('375px: one pill row; the ordo sheet opens as a bottom sheet and closes wit
page,
}) => {
await page.setViewportSize({ width: 375, height: 812 })
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()

// closed by default: pills visible, controls hidden
Expand Down
8 changes: 4 additions & 4 deletions e2e/hero.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ async function fixTime(page: Page) {
test('loading state', async ({ page }) => {
await fixTime(page)
await mockData(page, { delayMs: 4000 })
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByRole('status')).toContainText('Hledám bohoslužby poblíž')
await shot(page, 'loading')
})

test('hero list: nearest services, soonest first', async ({ page }) => {
await fixTime(page)
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')

// Monday 09:00 → the 09:30 cathedral mass is the first row you can make
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
Expand Down Expand Up @@ -73,7 +73,7 @@ test('hero at 375px (mobile)', async ({ page }) => {
await page.setViewportSize({ width: 375, height: 812 })
await fixTime(page)
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
await shot(page, 'hero-mobile-375', true)
})
Expand All @@ -83,7 +83,7 @@ test.describe('without geolocation permission', () => {
test('explains and offers the manual city fallback', async ({ page }) => {
await fixTime(page)
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('Bez přístupu k poloze')).toBeVisible()
await shot(page, 'no-permission')

Expand Down
12 changes: 6 additions & 6 deletions e2e/kdy.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ test.beforeEach(async ({ page }) => {
})

test('večer narrows to evening services; ?cas=vecer is bookmarkable', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()

await openControls(page)
await page.getByRole('button', { name: 'večer' }).click()
await expect(page).toHaveURL(/\?cas=vecer/)
await expect(page).toHaveURL(/cas=vecer/)
// tonight's evening line-up (Mon 6 Jul): liturgie 17:00, PMS 18:00, Havel 19:30
await expect(page.getByText('kostel sv. Klimenta (řeckokatolická katedrála)')).toBeVisible()
await expect(page.getByText('kostel Panny Marie Sněžné')).toBeVisible()
Expand All @@ -32,14 +32,14 @@ test('večer narrows to evening services; ?cas=vecer is bookmarkable', async ({
})

test('kolem 09:00: fallback to the next matching service, composes with neděle', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()

// kolem 09:00 (±90 min): the cathedral's 09:30 today stays; Panny Marie
// Sněžné falls back from tonight's 18:00 to its Sunday 09:00
await openControls(page)
await page.getByLabel('Kolem času').selectOption('09:00')
await expect(page).toHaveURL(/\?cas=09:00/)
await expect(page).toHaveURL(/cas=09:00/)
await expect(page.getByTestId('seznam').getByText('09:30')).toBeVisible()
await expect(page.getByText('kostel Panny Marie Sněžné')).toBeVisible()
await expect(page.getByText('kostel sv. Klimenta (řeckokatolická katedrála)')).not.toBeVisible()
Expand All @@ -57,7 +57,7 @@ test('kolem 09:00: fallback to the next matching service, composes with neděle'

test('evening + ráno can never match today: muted chip, picking it jumps to zítra ráno', async ({ page }) => {
await page.clock.setFixedTime(new Date('2026-07-06T18:00:00Z')) // Monday 20:00 Prague
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByTestId('seznam')).toBeVisible()

await openControls(page)
Expand All @@ -78,7 +78,7 @@ test('evening + ráno can never match today: muted chip, picking it jumps to zí

test('bookmark /?den=nedele&cas=9:00 restores both; 375px wraps typographically', async ({ page }) => {
await page.setViewportSize({ width: 375, height: 812 })
await page.goto('/?den=nedele&cas=9:00')
await page.goto('/?zobrazeni=seznam&den=nedele&cas=9:00')
await expect(page.getByText('neděle 12. 7.')).toBeVisible()
await expect(page.getByTestId('seznam').getByText('08:30')).toBeVisible()
await expect(page.getByText('kostel Nejsvětějšího Salvátora')).not.toBeVisible() // 12:00 Sunday
Expand Down
29 changes: 25 additions & 4 deletions e2e/map.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,23 @@ test.beforeEach(async ({ page }) => {
)
})

test('landing default: online + geolocation granted lands on the map, not the list', async ({ page }) => {
await page.goto('/') // no ?zobrazeni — the map is the online default
await expect(page.getByTestId('mapa')).toBeVisible()
await expect(page.getByTestId('seznam')).not.toBeVisible()
await expect(page.getByRole('button', { name: 'mapa' })).toHaveAttribute('aria-pressed', 'true')

// the seznam ↔ mapa toggle round-trips via the URL from here too
await page.getByRole('button', { name: 'seznam' }).click()
await expect(page).toHaveURL(/zobrazeni=seznam/)
await expect(page.getByTestId('seznam')).toBeVisible()
await page.getByRole('button', { name: 'mapa' }).click()
await expect(page).toHaveURL(/zobrazeni=mapa/)
await expect(page.getByTestId('mapa')).toBeVisible()
})

test('seznam · mapa toggle: time chips as markers, popover with next mass, otevřít → detail', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()

await page.getByRole('button', { name: 'mapa' }).click()
Expand All @@ -43,7 +58,12 @@ test('seznam · mapa toggle: time chips as markers, popover with next mass, otev
const tomas = page.locator('.map-chip-wrap[title="kostel sv. Tomáše (augustiniáni)"]')
await expect(tomas.locator('.map-chip')).toHaveText('ne 11:00')
await expect(tomas.locator('.map-chip')).toHaveClass(/map-chip--otherday/)
await cathedral.click()
// click near the cathedral chip's own corner, not its computed center: the
// center sits exactly on sv. Tomáše's invisible 44px tap-halo (::after,
// inset -8px) — the two churches are close enough that the halos overlap,
// and Tomáše's higher z-index (further south on screen) wins ties. Pre-existing
// on main, unrelated to this branch; filed as a UX follow-up, not fixed here.
await cathedral.click({ position: { x: 5, y: 5 } })
await expect(page.locator('.map-pop-name')).toHaveText('katedrála sv. Víta, Václava a Vojtěcha')
await expect(page.locator('.map-pop-line')).toHaveText(/dnes v 09:30/)
await shot(page, 'map-popover')
Expand Down Expand Up @@ -97,9 +117,10 @@ test('map matches the seznam: večer fades the cathedral to a dot, keeps the eve
await shot(page, 'map-popover-miss')
await page.keyboard.press('Escape') // close the popover before leaving the map

// back to the list — the toggle is a round trip, filters intact
// back to the list — the toggle is a round trip, filters intact. The choice
// now round-trips explicitly (?zobrazeni=seznam), unlike the old default-clears-it behavior.
await page.getByRole('button', { name: 'seznam' }).click()
await expect(page).not.toHaveURL(/zobrazeni/)
await expect(page).toHaveURL(/zobrazeni=seznam/)
await expect(page.getByText('kostel sv. Klimenta (řeckokatolická katedrála)')).toBeVisible()
})

Expand Down
4 changes: 2 additions & 2 deletions e2e/offline.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ test.use({ geolocation: PRAGUE, permissions: ['geolocation'] })
test('going offline shows the quiet footer indicator, list stays', async ({ page, context }) => {
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
await expect(page.getByText('offline — zobrazuji uložená data')).not.toBeVisible()

Expand All @@ -30,7 +30,7 @@ test.describe('last known position', () => {
})
await page.clock.install({ time: FIXED_NOW })
await mockData(page)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('katedrála sv. Víta, Václava a Vojtěcha')).toBeVisible()
await expect(page.getByText('poslední známá poloha')).toBeVisible()
await shot(page, 'offline-last-position')
Expand Down
10 changes: 5 additions & 5 deletions e2e/personas.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ test.beforeEach(async ({ page }) => {
})

test('P2 James: Sunday mass in English → jazyk filter → ICS on his calendar', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('kostel Nejsvětějšího Salvátora')).toBeVisible()

// Saturday-evening planning: tomorrow's full ordo first, then narrow by language
Expand All @@ -36,7 +36,7 @@ test('P2 James: Sunday mass in English → jazyk filter → ICS on his calendar'
})

test('P3 Tomáš: lunch-window mass — kolem 12:00 fits the 11:45–13:00 box', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByText('kostel Nejsvětějšího Salvátora')).toBeVisible()

await openControls(page)
Expand All @@ -54,7 +54,7 @@ test('P3 Tomáš: lunch-window mass — kolem 12:00 fits the 11:45–13:00 box',
})

test('P4 Novákovi: driving home — city origin + dnes večer, no walk-distance exclusion', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByTestId('seznam')).toBeVisible()

// decided from the passenger seat: destination city, not "here"
Expand All @@ -75,14 +75,14 @@ test('P4 Novákovi: driving home — city origin + dnes večer, no walk-distance
})

test('P6 Věra: is the 10:30 cancelled for summer? The note answers, the list agrees', async ({ page }) => {
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await expect(page.getByTestId('seznam')).toBeVisible()

// she goes straight to her church by name
await page.getByRole('button', { name: 'změnit' }).click()
await page.getByLabel('Kostel nebo obec').fill('havla')
await page.getByRole('option', { name: /kostel sv\. Havla/ }).click()
await expect(page).toHaveURL('/kostel/3/')
await expect(page).toHaveURL('/kostel/3/?zobrazeni=seznam')

// the reason is visible, not just an absent row — and the paused 10:30 is
// muted with an explicit "nyní se nekoná"
Expand Down
15 changes: 11 additions & 4 deletions e2e/preview-video.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@ test.use({

test('bohosluzby app preview walkthrough', async ({ page }) => {
test.skip(!!process.env.CI, 'local preview generation only')
// The scripted waits alone total ~14s; real bundled data + video recording
// overhead pushes this past Playwright's 30s default on slower runs.
test.setTimeout(60_000)
await page.clock.install({ time: new Date('2026-07-12T05:00:00Z') })

// 0-3s: opens straight to the nearest-mass list (real data, no loading/login)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await page.waitForTimeout(3000)

// 3-9s: MAP — a field of green time chips; a slow pan proves the times sit ON
Expand All @@ -35,16 +38,20 @@ test('bohosluzby app preview walkthrough', async ({ page }) => {
await page.mouse.up()
await page.waitForTimeout(2000)

// 9-14s: tap a time chip → popover with church + next mass
// 9-14s: tap a time chip → popover with church + next mass. Real (unmocked)
// data packs many chips close together — an adjacent chip's invisible tap
// halo can occasionally intercept this one, so bound the attempt: an
// unbounded click retries against the remaining TEST timeout, and by the
// time .catch() swallows it there's no budget left for the rest of the tour.
const chip = page.locator('.map-chip').first()
await chip.click().catch(() => {})
await chip.click({ timeout: 5000 }).catch(() => {})
await page.waitForTimeout(2500)

// 14-20s: back to the list, then a church's full schedule
await page.getByRole('button', { name: 'seznam' }).click()
await mockData(page)
await page.clock.setFixedTime(FIXED_NOW)
await page.goto('/')
await page.goto('/?zobrazeni=seznam')
await page.getByText('kostel Panny Marie Sněžné').first().waitFor()
await page.waitForTimeout(1500)
await page.getByText('kostel Panny Marie Sněžné').click()
Expand Down
Binary file modified e2e/shots/city-fallback-list.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/city-my-location.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/city-praha.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/day-back-to-hned.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/day-feast.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/day-mobile-375.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/day-sunday.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/detail-mobile-375.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/detail-not-found.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/detail-share-copied.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/detail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/empty-area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/english-list.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/feedback-mobile-375.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/feedback-open.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/feedback-sent.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/filters-default.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/filters-empty.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/filters-greek.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/filters-lang.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/filters-mobile-375-open.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/filters-mobile-375-summary.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/filters-mobile-375.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/filters-okruh.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/hero-desktop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/shots/hero-mobile-375.png
Binary file modified e2e/shots/kdy-impossible-muted.png
Binary file modified e2e/shots/kdy-impossible-zitra.png
Binary file modified e2e/shots/kdy-kolem-nedele.png
Binary file modified e2e/shots/kdy-kolem.png
Binary file modified e2e/shots/kdy-mobile-375.png
Binary file modified e2e/shots/kdy-vecer.png
Binary file modified e2e/shots/list.png
Binary file modified e2e/shots/loading.png
Binary file modified e2e/shots/map-mixed-375.png
Binary file modified e2e/shots/map-mixed.png
Binary file modified e2e/shots/map-mobile-375.png
Binary file modified e2e/shots/map-popover-miss.png
Binary file modified e2e/shots/map-popover.png
Binary file modified e2e/shots/map-view.png
Binary file modified e2e/shots/no-permission.png
Binary file modified e2e/shots/offline-indicator.png
Binary file modified e2e/shots/offline-last-position.png
Binary file modified e2e/shots/persona-james-english-sunday.png
Binary file modified e2e/shots/persona-novakovi-vecer-cesta.png
Binary file modified e2e/shots/persona-tomas-lunch-window.png
Binary file modified e2e/shots/persona-vera-letni-poradek.png
Binary file modified e2e/shots/route-back-my-location.png
Binary file modified e2e/shots/route-den-nedele.png
Binary file modified e2e/shots/search-church.png
Binary file modified e2e/shots/search-open.png
Loading
Loading