Просмотр исходного кода

Make card borders more visible across paywall and home screens.

Use a darker paywall border color and slightly thicker strokes so plan cards, trust badges, feature cards, and quick start cards read more clearly against light backgrounds.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 месяц назад
Родитель
Сommit
d74cbd78ea
3 измененных файлов с 26 добавлено и 6 удалено
  1. 5 1
      smart_printer/AppTheme.swift
  2. 3 3
      smart_printer/PaywallView.swift
  3. 18 2
      smart_printer/UIComponents.swift

+ 5 - 1
smart_printer/AppTheme.swift

@@ -154,7 +154,11 @@ enum AppTheme {
     static let paywallGold = NSColor(red: 0.96, green: 0.90, blue: 0.78, alpha: 1)
     static let paywallGoldText = NSColor(red: 0.65, green: 0.48, blue: 0.22, alpha: 1)
 
-    static var paywallBorder: NSColor { border }
+    static var paywallBorder: NSColor {
+        isDark
+            ? NSColor(calibratedWhite: 0.36, alpha: 1)
+            : NSColor(calibratedWhite: 0.80, alpha: 1)
+    }
 
     static var paywallBackground: NSColor { cardBackground }
 

+ 3 - 3
smart_printer/PaywallView.swift

@@ -300,12 +300,12 @@ private final class PaywallPlanCard: NSControl, AppearanceRefreshable {
             layer?.borderWidth = 2
             layer?.borderColor = AppTheme.green.cgColor
         } else if isHovered {
-            layer?.borderWidth = 1.5
+            layer?.borderWidth = 2
             let hoverBorder = AppTheme.paywallBorder.blended(withFraction: 0.35, of: AppTheme.paywallAccent)
                 ?? AppTheme.paywallBorder
             layer?.borderColor = hoverBorder.cgColor
         } else {
-            layer?.borderWidth = 1
+            layer?.borderWidth = 1.5
             layer?.borderColor = AppTheme.paywallBorder.cgColor
         }
     }
@@ -683,7 +683,7 @@ final class PaywallView: NSView, AppearanceRefreshable {
         trustStack.translatesAutoresizingMaskIntoConstraints = false
         trustStack.wantsLayer = true
         trustStack.layer?.cornerRadius = 12
-        trustStack.layer?.borderWidth = 1
+        trustStack.layer?.borderWidth = 1.5
         trustStack.layer?.masksToBounds = true
         trustStack.edgeInsets = NSEdgeInsets(top: 12, left: 14, bottom: 12, right: 14)
         trustStack.translatesAutoresizingMaskIntoConstraints = false

+ 18 - 2
smart_printer/UIComponents.swift

@@ -324,12 +324,13 @@ struct QuickStartCardData {
     let iconKind: QuickStartIconKind
 }
 
-final class QuickStartCardView: NSView {
+final class QuickStartCardView: NSView, AppearanceRefreshable {
     private let iconView: QuickStartIconView
     private let gradientView: GradientCardView
     private var iconWidthConstraint: NSLayoutConstraint!
     private var iconHeightConstraint: NSLayoutConstraint!
     private var hoverTracker: HoverTracker?
+    private var isHovered = false
 
     init(data: QuickStartCardData) {
         iconView = QuickStartIconView(kind: data.iconKind)
@@ -392,13 +393,25 @@ final class QuickStartCardView: NSView {
         hoverTracker = HoverTracker(view: self) { [weak self] hovering in
             self?.setHovered(hovering)
         }
+        refreshAppearance()
     }
 
     @available(*, unavailable)
     required init?(coder: NSCoder) { nil }
 
+    func refreshAppearance() {
+        gradientView.layer?.cornerRadius = AppTheme.cardCornerRadius
+        gradientView.layer?.borderWidth = isHovered ? 2 : 1.5
+        gradientView.layer?.borderColor = AppTheme.paywallBorder.cgColor
+        if isHovered {
+            applyHoverLift(true, on: gradientView.layer)
+        }
+    }
+
     private func setHovered(_ hovering: Bool) {
+        isHovered = hovering
         applyHoverLift(hovering, on: gradientView.layer)
+        gradientView.layer?.borderWidth = hovering ? 2 : 1.5
     }
 
     override func layout() {
@@ -502,14 +515,17 @@ final class FeatureCardView: NSView, AppearanceRefreshable {
     private func setHovered(_ hovering: Bool) {
         isHovered = hovering
         applyHoverLift(hovering)
+        layer?.borderWidth = hovering ? 2 : 1.5
     }
 
     func refreshAppearance() {
         layer?.backgroundColor = AppTheme.cardBackground.cgColor
+        layer?.borderWidth = isHovered ? 2 : 1.5
+        layer?.borderColor = AppTheme.paywallBorder.cgColor
         titleLabel.refreshThemeLabelColor()
         subtitleLabel.refreshThemeLabelColor()
         arrowButton.layer?.backgroundColor = AppTheme.elevatedBackground.cgColor
-        arrowButton.layer?.borderColor = AppTheme.border.cgColor
+        arrowButton.layer?.borderColor = AppTheme.paywallBorder.cgColor
         arrowButton.contentTintColor = AppTheme.textSecondary
         if isHovered {
             applyHoverLift(true)