def index_to_well(index: int, n_cols=12) -> str:
    """
    Convert a 0..95 index into a 96-well plate label (A1..H12).

    Parameters
    ----------
    index : int
        Integer index in range 0..95.

    Returns
    -------
    str
        Well label like "A1", "H12".

    Raises
    ------
    ValueError
        If index is out of range or `order` is invalid.
    """
    if not isinstance(index, int):
        raise TypeError("index must be an integer")
    if index < 0 or index > 95:
        raise ValueError("index must be between 0 and 95 inclusive")

    rows = "ABCDEFGH"
    row_idx = index // n_cols
    col_idx = index % n_cols

    return f"{rows[row_idx]}{col_idx + 1}"
