/s,
+ )
+ expect(source).toMatch(
+ /\.skyride-scroll\s*\{[^}]*box-sizing:\s*border-box;[^}]*inset:\s*114px 0 0;[^}]*padding:\s*0 0 116px;/s,
+ )
+ expect(source).toMatch(
+ /\.skyride-tabbar :deep\(\.sky-tabbar__blur\),\s*\.skyride-tabbar :deep\(\.sky-tabbar__background\)\s*\{[^}]*display:\s*none;/s,
+ )
+ expect(source).not.toMatch(
+ /\.skyride-tabbar :deep\(\.sky-tabbar__pane\)\s*\{\s*border:/s,
+ )
+ })
+
+ it('keeps active-ride card spacing even and outline actions contrasted', () => {
+ expect(source).toMatch(
+ /\.skyride-ride-status-card\s*\{[^}]*margin-bottom:\s*12px;/s,
+ )
+ expect(source).toMatch(
+ /\.skyride-person-card\s*\{[^}]*margin-bottom:\s*12px;/s,
+ )
+ expect(source).toMatch(
+ /\.skyride-trip-card\s*\{[^}]*margin-bottom:\s*12px;/s,
+ )
+ expect(source).toContain('.sky-button--primary:not(.sky-button--outline)')
+ expect(source).not.toMatch(
+ /\.skyride-app :deep\(\.sky-button--primary\)\s*\{/,
+ )
+ })
+
+ it('aligns pickup and destination text to one timeline axis', () => {
+ expect(source).toMatch(
+ /\.skyride-route-stop\s*\{[^}]*grid-template-columns:\s*18px minmax\(0, 1fr\);/s,
+ )
+ expect(source).toMatch(
+ /\.skyride-route-stop > \.skyride-dot\s*\{[^}]*justify-self:\s*center;/s,
+ )
+ expect(source).toMatch(
+ /\.skyride-trip-card > i\s*\{[^}]*margin:\s*1px 0 1px 8px;/s,
+ )
+ })
+
it('uses a compact swipeable profile editor with equal actions', () => {
expect(source).toContain('class="skyride-profile-sheet"')
expect(source).toContain('swipe-to-close')
diff --git a/frontend/src/views/apps/SkyRideApp.vue b/frontend/src/views/apps/SkyRideApp.vue
index e8bf809..09128de 100644
--- a/frontend/src/views/apps/SkyRideApp.vue
+++ b/frontend/src/views/apps/SkyRideApp.vue
@@ -622,26 +622,26 @@ onBeforeUnmount(() => {
-
-
-
- {{ phone.t('Apps.skyride.mode.rider') }}
-
-
- {{ phone.t('Apps.skyride.mode.driver') }}
-
-
-
-