```python
def thaw_row(row: str, steps: int) -> str:
    if not isinstance(row, str):
        raise ValueError("Row must be a string.")
    if not row:
        raise ValueError("Row cannot be empty.")
    if any(char not in "#." for char in row):
        raise ValueError("Row can only contain '#' and '.' characters.")
    if not isinstance(steps, int) or steps < 0:
        raise ValueError("Steps must be a non-negative whole number.")

    for _ in range(steps):
        new_row = []
        for i in range(len(row)):
            if row[i] == ".":
                new_row.append(".")
            elif i == 0 and row[i + 1] == ".":
                new_row.append(".")
            elif i == len(row) - 1 and row[i - 1] == ".":
                new_row.append(".")
            elif (i > 0 and row[i - 1] == ".") or (i < len(row) - 1 and row[i + 1] == "."):
                new_row.append(".")
            else:
                new_row.append("#")
        row = "".join(new_row)

    return row
```