extension String { func character(atClampedIndex index: Int) -> Character? { guard !self.isEmpty else { return nil } let clamped = max(0, min(index, count - 1)) return self[self.index(startIndex, offsetBy: clamped)] } }