```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]
    for move in moves:
        if move.lower() == "e":
            col += 1
        elif move.lower() == "w":
            col -= 1
        elif move.lower() == "ne":
            if (row % 2) == 0:
                row -= 1
            else:
                col += 1
                row -= 1
        elif move.lower() == "nw":
            if (row % 2) == 0:
                col -= 1
                row -= 1
            else:
                col -= 1
                row -= 1
        elif move.lower() == "se":
            if (row % 2) == 0:
                row += 1
            else:
                col += 1
                row += 1
        elif move.lower() == "sw":
            if (row % 2) == 0:
                col -= 1
                row += 1
            else:
                row += 1
        else:
            raise ValueError("invalid move name")
    q, r = col - (row // 2), row
    delta_q = abs(q - start[0] + (start[1] // 2))
    delta_r = abs(r - start[1])
    distance = (delta_q + delta_r + abs(delta_q - delta_r)) // 3
    return {
        "cell": [col, row],
        "distance": distance,
    }
```