```python
def hex_split(colour: str) -> list:
    if len(colour) != 7 or colour[0] != '#':
        raise ValueError("Invalid colour format. Expected a hash followed by six hexadecimal digits.")
    
    parts = [colour[i:i+2].lower() for i in (1, 3, 5)]
    return parts


def hex_join(parts: list) -> str:
    if len(parts) != 3:
        raise ValueError("Invalid number of parts. Expected three two-digit parts.")
    
    colour = f"#{parts[0]}{parts[1]}{parts[2]}"
    return colour
```