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

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 4 часов назад
Родитель
С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 {
154
     static let paywallGold = NSColor(red: 0.96, green: 0.90, blue: 0.78, alpha: 1)
154
     static let paywallGold = NSColor(red: 0.96, green: 0.90, blue: 0.78, alpha: 1)
155
     static let paywallGoldText = NSColor(red: 0.65, green: 0.48, blue: 0.22, alpha: 1)
155
     static let paywallGoldText = NSColor(red: 0.65, green: 0.48, blue: 0.22, alpha: 1)
156
 
156
 
157
-    static var paywallBorder: NSColor { border }
157
+    static var paywallBorder: NSColor {
158
+        isDark
159
+            ? NSColor(calibratedWhite: 0.36, alpha: 1)
160
+            : NSColor(calibratedWhite: 0.80, alpha: 1)
161
+    }
158
 
162
 
159
     static var paywallBackground: NSColor { cardBackground }
163
     static var paywallBackground: NSColor { cardBackground }
160
 
164
 

+ 3 - 3
smart_printer/PaywallView.swift

@@ -300,12 +300,12 @@ private final class PaywallPlanCard: NSControl, AppearanceRefreshable {
300
             layer?.borderWidth = 2
300
             layer?.borderWidth = 2
301
             layer?.borderColor = AppTheme.green.cgColor
301
             layer?.borderColor = AppTheme.green.cgColor
302
         } else if isHovered {
302
         } else if isHovered {
303
-            layer?.borderWidth = 1.5
303
+            layer?.borderWidth = 2
304
             let hoverBorder = AppTheme.paywallBorder.blended(withFraction: 0.35, of: AppTheme.paywallAccent)
304
             let hoverBorder = AppTheme.paywallBorder.blended(withFraction: 0.35, of: AppTheme.paywallAccent)
305
                 ?? AppTheme.paywallBorder
305
                 ?? AppTheme.paywallBorder
306
             layer?.borderColor = hoverBorder.cgColor
306
             layer?.borderColor = hoverBorder.cgColor
307
         } else {
307
         } else {
308
-            layer?.borderWidth = 1
308
+            layer?.borderWidth = 1.5
309
             layer?.borderColor = AppTheme.paywallBorder.cgColor
309
             layer?.borderColor = AppTheme.paywallBorder.cgColor
310
         }
310
         }
311
     }
311
     }
@@ -683,7 +683,7 @@ final class PaywallView: NSView, AppearanceRefreshable {
683
         trustStack.translatesAutoresizingMaskIntoConstraints = false
683
         trustStack.translatesAutoresizingMaskIntoConstraints = false
684
         trustStack.wantsLayer = true
684
         trustStack.wantsLayer = true
685
         trustStack.layer?.cornerRadius = 12
685
         trustStack.layer?.cornerRadius = 12
686
-        trustStack.layer?.borderWidth = 1
686
+        trustStack.layer?.borderWidth = 1.5
687
         trustStack.layer?.masksToBounds = true
687
         trustStack.layer?.masksToBounds = true
688
         trustStack.edgeInsets = NSEdgeInsets(top: 12, left: 14, bottom: 12, right: 14)
688
         trustStack.edgeInsets = NSEdgeInsets(top: 12, left: 14, bottom: 12, right: 14)
689
         trustStack.translatesAutoresizingMaskIntoConstraints = false
689
         trustStack.translatesAutoresizingMaskIntoConstraints = false

+ 18 - 2
smart_printer/UIComponents.swift

@@ -324,12 +324,13 @@ struct QuickStartCardData {
324
     let iconKind: QuickStartIconKind
324
     let iconKind: QuickStartIconKind
325
 }
325
 }
326
 
326
 
327
-final class QuickStartCardView: NSView {
327
+final class QuickStartCardView: NSView, AppearanceRefreshable {
328
     private let iconView: QuickStartIconView
328
     private let iconView: QuickStartIconView
329
     private let gradientView: GradientCardView
329
     private let gradientView: GradientCardView
330
     private var iconWidthConstraint: NSLayoutConstraint!
330
     private var iconWidthConstraint: NSLayoutConstraint!
331
     private var iconHeightConstraint: NSLayoutConstraint!
331
     private var iconHeightConstraint: NSLayoutConstraint!
332
     private var hoverTracker: HoverTracker?
332
     private var hoverTracker: HoverTracker?
333
+    private var isHovered = false
333
 
334
 
334
     init(data: QuickStartCardData) {
335
     init(data: QuickStartCardData) {
335
         iconView = QuickStartIconView(kind: data.iconKind)
336
         iconView = QuickStartIconView(kind: data.iconKind)
@@ -392,13 +393,25 @@ final class QuickStartCardView: NSView {
392
         hoverTracker = HoverTracker(view: self) { [weak self] hovering in
393
         hoverTracker = HoverTracker(view: self) { [weak self] hovering in
393
             self?.setHovered(hovering)
394
             self?.setHovered(hovering)
394
         }
395
         }
396
+        refreshAppearance()
395
     }
397
     }
396
 
398
 
397
     @available(*, unavailable)
399
     @available(*, unavailable)
398
     required init?(coder: NSCoder) { nil }
400
     required init?(coder: NSCoder) { nil }
399
 
401
 
402
+    func refreshAppearance() {
403
+        gradientView.layer?.cornerRadius = AppTheme.cardCornerRadius
404
+        gradientView.layer?.borderWidth = isHovered ? 2 : 1.5
405
+        gradientView.layer?.borderColor = AppTheme.paywallBorder.cgColor
406
+        if isHovered {
407
+            applyHoverLift(true, on: gradientView.layer)
408
+        }
409
+    }
410
+
400
     private func setHovered(_ hovering: Bool) {
411
     private func setHovered(_ hovering: Bool) {
412
+        isHovered = hovering
401
         applyHoverLift(hovering, on: gradientView.layer)
413
         applyHoverLift(hovering, on: gradientView.layer)
414
+        gradientView.layer?.borderWidth = hovering ? 2 : 1.5
402
     }
415
     }
403
 
416
 
404
     override func layout() {
417
     override func layout() {
@@ -502,14 +515,17 @@ final class FeatureCardView: NSView, AppearanceRefreshable {
502
     private func setHovered(_ hovering: Bool) {
515
     private func setHovered(_ hovering: Bool) {
503
         isHovered = hovering
516
         isHovered = hovering
504
         applyHoverLift(hovering)
517
         applyHoverLift(hovering)
518
+        layer?.borderWidth = hovering ? 2 : 1.5
505
     }
519
     }
506
 
520
 
507
     func refreshAppearance() {
521
     func refreshAppearance() {
508
         layer?.backgroundColor = AppTheme.cardBackground.cgColor
522
         layer?.backgroundColor = AppTheme.cardBackground.cgColor
523
+        layer?.borderWidth = isHovered ? 2 : 1.5
524
+        layer?.borderColor = AppTheme.paywallBorder.cgColor
509
         titleLabel.refreshThemeLabelColor()
525
         titleLabel.refreshThemeLabelColor()
510
         subtitleLabel.refreshThemeLabelColor()
526
         subtitleLabel.refreshThemeLabelColor()
511
         arrowButton.layer?.backgroundColor = AppTheme.elevatedBackground.cgColor
527
         arrowButton.layer?.backgroundColor = AppTheme.elevatedBackground.cgColor
512
-        arrowButton.layer?.borderColor = AppTheme.border.cgColor
528
+        arrowButton.layer?.borderColor = AppTheme.paywallBorder.cgColor
513
         arrowButton.contentTintColor = AppTheme.textSecondary
529
         arrowButton.contentTintColor = AppTheme.textSecondary
514
         if isHovered {
530
         if isHovered {
515
             applyHoverLift(true)
531
             applyHoverLift(true)