Replace mirrored Liquid Glass panels with soft opaque card surfaces.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
pepaskopec-blip 2026-09-22 10:02:20 +02:00
commit 3612d60f42
3 changed files with 29 additions and 9 deletions

View file

@ -49,10 +49,11 @@ struct PrimaryButton: View {
.font(.body.weight(.semibold)) .font(.body.weight(.semibold))
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
} }
.buttonStyle(.glassProminent)
#if os(macOS) #if os(macOS)
.buttonStyle(.borderedProminent)
.controlSize(.extraLarge) .controlSize(.extraLarge)
#else #else
.buttonStyle(.glassProminent)
.controlSize(.large) .controlSize(.large)
#endif #endif
} }
@ -75,7 +76,22 @@ struct GlassCard<Content: View>: View {
content() content()
.padding(16) .padding(16)
.frame(maxWidth: .infinity, alignment: .leading) .frame(maxWidth: .infinity, alignment: .leading)
.glassEffect(.regular, in: .rect(cornerRadius: 26, style: .continuous)) .softSurface(cornerRadius: 22)
}
}
extension View {
/// Soft card surface without Liquid Glass refraction (which reads as a mirror
/// on large macOS panels over the wallpaper / sidebar extension).
func softSurface(cornerRadius: CGFloat) -> some View {
background {
RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)
.fill(.background.secondary)
}
.overlay {
RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)
.strokeBorder(.separator.opacity(0.35), lineWidth: 0.5)
}
} }
} }

View file

@ -48,7 +48,6 @@ struct PracticeHome: View {
.frame(maxWidth: 920, alignment: .leading) .frame(maxWidth: 920, alignment: .leading)
.frame(maxWidth: .infinity, alignment: .leading) .frame(maxWidth: .infinity, alignment: .leading)
} }
.backgroundExtensionEffect()
.navigationTitle("Maturita") .navigationTitle("Maturita")
} }
@ -92,7 +91,7 @@ struct PracticeHome: View {
} }
.padding(18) .padding(18)
.frame(maxWidth: .infinity, minHeight: 148, alignment: .topLeading) .frame(maxWidth: .infinity, minHeight: 148, alignment: .topLeading)
.glassEffect(.regular, in: .rect(cornerRadius: 24, style: .continuous)) .softSurface(cornerRadius: 20)
} }
#endif #endif
@ -192,7 +191,11 @@ struct ChangelogCard: View {
ChangelogLines(index: index, lines: changelogLines(block, langKey)) ChangelogLines(index: index, lines: changelogLines(block, langKey))
} }
Button(vm.tr("changelog_dismiss")) { vm.dismissChangelog() } Button(vm.tr("changelog_dismiss")) { vm.dismissChangelog() }
#if os(macOS)
.buttonStyle(.borderedProminent)
#else
.buttonStyle(.glassProminent) .buttonStyle(.glassProminent)
#endif
.controlSize(.small) .controlSize(.small)
} }
} }
@ -547,7 +550,6 @@ struct RoadmapScreen: View {
wave: 16 wave: 16
) )
.padding(20) .padding(20)
.backgroundExtensionEffect()
.navigationTitle(vm.tr("roadmap_title")) .navigationTitle(vm.tr("roadmap_title"))
.navigationSubtitle(vm.tr("roadmap_sub")) .navigationSubtitle(vm.tr("roadmap_sub"))
} }
@ -635,7 +637,6 @@ struct UnitMapScreen: View {
branch: branch branch: branch
) )
.padding(20) .padding(20)
.backgroundExtensionEffect()
.navigationTitle(u.str("title")) .navigationTitle(u.str("title"))
.navigationSubtitle(vm.tr(u.str("sub"))) .navigationSubtitle(vm.tr(u.str("sub")))
} }
@ -741,7 +742,6 @@ struct LessonListScreen: View {
wave: 14 wave: 14
) )
.padding(20) .padding(20)
.backgroundExtensionEffect()
.navigationTitle(title) .navigationTitle(title)
.navigationSubtitle(subtitle) .navigationSubtitle(subtitle)
} }
@ -807,7 +807,11 @@ struct SlidesScreen: View {
Image(systemName: "chevron.left") Image(systemName: "chevron.left")
.frame(minWidth: 24) .frame(minWidth: 24)
} }
#if os(macOS)
.buttonStyle(.bordered)
#else
.buttonStyle(.glass) .buttonStyle(.glass)
#endif
.controlSize(.large) .controlSize(.large)
} }
if idx < slides.count - 1 { if idx < slides.count - 1 {

View file

@ -142,13 +142,13 @@ private struct UpdateBanner: View {
Spacer() Spacer()
if vm.update.canInstall { if vm.update.canInstall {
Button(vm.tr("update_install")) { vm.installUpdate() } Button(vm.tr("update_install")) { vm.installUpdate() }
.buttonStyle(.glassProminent) .buttonStyle(.borderedProminent)
.controlSize(.small) .controlSize(.small)
} }
} }
.padding(.horizontal, 16) .padding(.horizontal, 16)
.padding(.vertical, 12) .padding(.vertical, 12)
.glassEffect(.regular, in: .rect(cornerRadius: 18, style: .continuous)) .softSurface(cornerRadius: 16)
.frame(maxWidth: 560) .frame(maxWidth: 560)
} }