```python
def fold_ends(values: list) -> list:
    """
    Fold a list onto itself by adding the first entry to the last, the second to the second-last, and so on.
    Returns a list of totals in order, with the middle element preserved if the list has odd length.
    """
    if not values:
        return []
    
    result = []
    left = 0
    right = len(values) - 1
    
    while left < right:
        result.append(values[left] + values[right])
        left += 1
        right -= 1
    
    # If the list has odd length, the middle element remains unpaired
    if left == right:
        result.append(values[left])
    
    return result
```