soft-glass-ui — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited soft-glass-ui (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A comprehensive design system for creating premium glass interfaces. Supports iOS 26+ native Liquid Glass (glassEffect) and provides fallback patterns for iOS 17-18.
The "glass" effect in iOS 26 is NOT gradients and shadows. It's a physically-accurate lensing system that samples the background and creates real-time refraction effects.
.glassEffect(.regular.interactive()) provides touch scaling/bouncing animations automatically.| iOS Version | Approach |
|---|---|
| iOS 26+ | Native .glassEffect() modifier with .ultraThinMaterial |
| iOS 17-18 | Gradient-based fallback with .ultraThinMaterial or custom gradients |
// The iOS 26 glass pattern
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
.glassEffect(.regular, in: RoundedRectangle(cornerRadius: 16))| Variant | Usage |
|---|---|
.regular | Standard glass for cards, containers |
.regular.tint(color) | Adds color tint to the glass |
.regular.interactive() | Enables touch feedback animations |
.clear | More transparent, for media-rich backgrounds |
Button(action: action) {
HStack {
Image(systemName: "play.fill")
Text("Start")
}
.padding()
.foregroundStyle(.white)
.background(LinearGradient.brandGradient)
.clipShape(RoundedRectangle(cornerRadius: 16))
.glassEffect(
.regular.tint(.brandPrimary).interactive(),
in: RoundedRectangle(cornerRadius: 16)
)
}Glass needs something to sample. Create rich backgrounds:
// Rich gradient background for glass to sample
struct BrandBackgroundModifier: ViewModifier {
func body(content: Content) -> some View {
content
.background {
ZStack {
// Deep base color
Color(hex: "0A0A1A")
// Animated gradient orbs
Circle()
.fill(RadialGradient(
colors: [.brandPrimary.opacity(0.4), .clear],
center: .center,
startRadius: 0,
endRadius: 200
))
.frame(width: 400, height: 400)
.offset(x: -100, y: -150)
Circle()
.fill(RadialGradient(
colors: [.brandSecondary.opacity(0.3), .clear],
center: .center,
startRadius: 0,
endRadius: 180
))
.frame(width: 360, height: 360)
.offset(x: 120, y: 200)
}
.ignoresSafeArea()
}
}
}When targeting older iOS versions, use gradient-based glass:
struct GlassCardFallback<Content: View>: View {
let content: Content
var body: some View {
content
.padding(24)
.background(
LinearGradient(
colors: [.white, Color.surfaceWarm.opacity(0.3)],
startPoint: .top,
endPoint: .bottom
)
)
.clipShape(RoundedRectangle(cornerRadius: 16))
.shadow(color: .black.opacity(0.08), radius: 10, y: 4)
}
}struct GlassCard<Content: View>: View {
let content: Content
var body: some View {
if #available(iOS 26.0, *) {
content
.padding(24)
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
.glassEffect(.regular, in: RoundedRectangle(cornerRadius: 16))
} else {
content
.padding(24)
.background(.ultraThinMaterial)
.clipShape(RoundedRectangle(cornerRadius: 16))
}
}
}xs: 4 s: 8 m: 16 l: 24 xl: 32 xxl: 48small: 8 medium: 12 large: 16 xl: 24fast: 0.3s spring(response: 0.3, dampingFraction: 0.7)
standard: 0.5s spring
slow: 1.0s spring
stagger-delay: 0.05s per itemUse rounded font design throughout:
.font(.system(size: 16, weight: .medium, design: .rounded))| Style | Size | Weight |
|---|---|---|
| hero | 48-56 | bold/heavy |
| title | 28 | bold |
| headline | 20 | semibold |
| body | 16 | medium |
| caption | 14 | medium |
| small | 12 | regular |
Use light text on dark backgrounds:
extension Color {
// Text (white-based for dark backgrounds)
static var brandText: Color { .white }
static var brandTextSecondary: Color { .white.opacity(0.7) }
static var brandTextMuted: Color { .white.opacity(0.5) }
// Accent colors (vibrant for glass tinting)
static var brandPrimary: Color { Color(hex: "6366F1") } // Indigo
static var brandAccent: Color { Color(hex: "10B981") } // Emerald
static var brandSecondary: Color { Color(hex: "8B5CF6") } // Purple
}Use dark text on light backgrounds:
extension Color {
static var brandText: Color { Color(hex: "1E293B") }
static var surfaceWarm: Color { Color(hex: "FDF8F3") } // Warm cream
}See references/components.md for detailed implementations:
Glass needs something to refract. Plain backgrounds make glass invisible.
.glassEffect requires a shape:
// Wrong
.glassEffect(.regular)
// Correct
.glassEffect(.regular, in: RoundedRectangle(cornerRadius: 16))The native glass effect looks better than any gradient approximation.
Use .interactive() on buttons for native touch animations:
.glassEffect(.regular.interactive(), in: RoundedRectangle(cornerRadius: 16))iOS 26 Glass Card:
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
.glassEffect(.regular, in: RoundedRectangle(cornerRadius: 16))iOS 26 Tinted Glass:
.glassEffect(.regular.tint(.brandPrimary), in: RoundedRectangle(cornerRadius: 16))iOS 26 Interactive Button:
.glassEffect(.regular.tint(.accent).interactive(), in: RoundedRectangle(cornerRadius: 16))Deployment Target: Set to iOS 26.0 to use native .glassEffect() API.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.