```python
def hop_offset_grid(start: list, moves: list) -> dict:
    if not isinstance(start, list) or len(start) != 2:
        raise ValueError("the start must be a two-element address")
    for part in start:
        if not isinstance(part, int) or isinstance(part, bool):
            raise ValueError("an address must hold whole numbers")
    if not isinstance(moves, list):
        raise ValueError("the moves must be a list")
    col, row = start[0], start[1]
    shift = -1 if row % 2 == 0 else 0
    for move in moves:
        if move == "e":
            col += 1 + shift
        elif move == "w":
            col -= 1 + shift
        elif move == "ne":
            col += 1
            row -= 1
            shift = -1 if (row % 2) != ((row - 1) % 2) else shift
        elif move == "nw":
            row -= 1
            shift = -1 if (row % 2) != ((row - 1) % 2) else shift
        elif move == "se":
            col += 1
            row += 1
            shift = -1 if (row % 2) != ((row + 1) % 2) else shift
        elif move == "sw":
            row += 1
            shift = -1 if (row % 2) != ((row + 1) % 2) else shift
        else:
            raise ValueError(f"invalid move: {move}")
    return {
        "cell": [col, row],
        "distance": abs(col - start[0]) + abs(row - start[1]),
    }
```