Skip to content

feat(WhereUI): add tilt-reactive spectral card edges - #236

Closed
kyleve wants to merge 8 commits into
mainfrom
codex/tilt-reactive-location-cards
Closed

feat(WhereUI): add tilt-reactive spectral card edges#236
kyleve wants to merge 8 commits into
mainfrom
codex/tilt-reactive-location-cards

Conversation

@kyleve

@kyleve kyleve commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Posted by an AI agent on kve’s behalf.

Summary

  • User-facing: Give regular Locations cards a prominent spectral inner rim whose color and concentrated highlight travel with device tilt.
  • User-facing: Keep region names and entry stamps as crisp, flat ink so the moving edge remains the card’s single dimensional accent.
  • User-facing: Keep compact Elsewhere and privacy passport cards on their quieter grayscale finish, with deterministic static rendering for Reduce Motion and snapshots.
  • Internal: Isolate 60 Hz observation to the lightweight finish subtree, expose the stronger rim through stylesheet and Card Designer tokens, remove the abandoned text/stamp relief renderer and controls, and pin both tilt extremes in the Locations snapshot matrix.

Why

The original full-spectrum angular rim changed too subtly because every hue remained visible around the perimeter. A stronger moving light-facing peak makes pose changes legible without repainting the card face. Keeping the title and stamp flat avoids competing lighting cues and gives the card a cleaner hierarchy: printed content inside, reactive spectral material at the edge.

Review focus

  • Compare Loaded and LoadedReverseTilt references: the rim color and hot spot should visibly travel while the title and stamp remain stable and legible.
  • The production rim now uses full opacity, a 2.75 pt crisp line, and a 4 pt bloom; Reduce Transparency removes only the bloom while retaining the stronger line.
  • Reduce Motion and snapshots use deterministic poses; compact and privacy card variants do not opt into the spectral rim.
  • DEBUG Card Designer schema 5 removes the abandoned relief shape. Older drafts surface the existing version error and reset to standard; app data and backups are unaffected.
  • Live accelerometer feel still benefits from a physical-device pass; simulator snapshots prove the two authored pose extremes.

Testing

  • ./test --only 'WhereUITests/WhereStylesheetTests' --only 'WhereUITests/CardDesignerConfigurationTests' --only 'WhereUITests/CardDesignerExportTests' --only 'WhereUITests/CardDesignerJSONExporterTests' --only 'WhereUITests/CardDesignerModelTests' — 44 tests passed
  • ./test --only 'WhereUISnapshotTests/LocationsViewSnapshotTests' --record never --no-build --no-generate — focused suite passed across its 20-scenario matrix
  • ./test --snapshots — 41 snapshot tests passed after merging latest main, before the focused finish follow-ups
  • swift run bumper lint . --timings — no architecture violations
  • ./swiftformat --lint
  • ./xcstrings --lint

Give regular Locations cards an inset spectral rim and raised region-name relief driven by the existing motion provider. Keep compact and privacy cards neutral, expose the new tokens through Card Designer schema 2, and refresh the affected references.
x: 0.5 + direction.width * 0.24,
y: 0.5 + direction.height * 0.24,
)
let angle = Angle.degrees(direction.width * 48 + direction.height * 32)

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Posted by an AI agent on kve’s behalf.

Review focus: this is the load-bearing coupling between the authored Tilt Travel value and both spectral translation and rotation. Please pay particular attention to whether these multipliers feel responsive without making the foil dominate the region color on physical hardware.

kyleve added 3 commits August 10, 2026 11:42
…ocation-cards

# Conflicts:
#	Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad_accessibility.png
#	Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone_accessibility.png
Combine the tilt-reactive card finish with main's SwiftUI accessibility snapshot renderer across the Locations reference matrix.
Add paired inner shadows to the place name and a concentrated light-facing highlight to the spectral rim. Increase the rim travel and preserve both device-pose extremes in Locations snapshots.
}
}

private static func highlightPoints(direction: CGSize) -> (start: UnitPoint, end: UnitPoint) {

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Posted by an AI agent on kve’s behalf.

Review note: this normalizes the light vector only for the directional rim hot spot, so even modest physical tilt moves a full-strength highlight around the perimeter. The spectral gradient and title relief still use the clamped magnitude, and the vertical fallback prevents a degenerate gradient at an exactly neutral pose. The new LoadedReverseTilt references pin the opposite direction.

Invert the tilt-driven inset and exterior lighting so region names read pressed into the card, reduce the exterior edge through a dedicated style token, and apply the same alpha-masked treatment to the complete entry stamp.
} symbols: {
subject.tag(SymbolID.subject)
}
.mask(subject)

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Posted by an AI agent on kve’s behalf.

Review note: the shadow filters deliberately render shadow-only layers, and this final alpha mask turns those exterior shadows into inset edges. Rendering the complete subject as a Canvas symbol preserves the stamp’s independently authored ring, artwork, arc-text, and year opacities instead of replacing them with one foreground style.

kyleve added 3 commits August 10, 2026 16:04
Reduce the pressed-ink offset and blur so region names and entry stamps retain directional relief without reading as deeply cut into the card.
@kyleve kyleve changed the title feat(WhereUI): add tilt-reactive spectral card finishes feat(WhereUI): add tilt-reactive spectral card edges Aug 10, 2026
@kyleve kyleve closed this Aug 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant