```python
def grid_flip(grid: list) -> list:
    """
    Flip a grid so that its columns become its rows.
    
    Args:
    grid: A list of lists representing the grid.
    
    Returns:
    A list of lists representing the flipped grid.
    
    Raises:
    ValueError: If the grid is empty.
    """
    if not grid:
        raise ValueError("Grid cannot be empty")
    
    # Check if all rows have the same length
    if not all(len(row) == len(grid[0]) for row in grid):
        raise ValueError("All rows must have the same length")
    
    # Transpose the grid
    flipped_grid = list(zip(*grid))
    
    return flipped_grid
```