```python
def chain_transforms(grid: list, steps: list) -> list:
    if not grid or not all(len(row) == len(grid[0]) for row in grid):
        raise ValueError("Invalid grid")
    if any(step not in {"cw", "ccw", "mirror", "flip", "diag"} for step in steps):
        raise ValueError("Invalid step")

    def cw(g):
        return [list(x[::-1]) for x in zip(*g)]

    def ccw(g):
        return [list(x) for x in zip(*g)][::-1]

    def mirror(g):
        return g[::-1]

    def flip(g):
        return [row[::-1] for row in g]

    def diag(g):
        return list(zip(*g))

    transformations = {
        "cw": cw,
        "ccw": ccw,
        "mirror": mirror,
        "flip": flip,
        "diag": diag,
    }

    result = grid[:]
    for step in steps:
        result = transformations[step](result)

    return result
```