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

def hex_join(parts: list) -> str:
    if len(parts) != 3 or any(len(part) != 2 for part in parts):
        raise ValueError("Invalid parts format. Must be three two-digit hexadecimal strings.")
    
    return f"#{''.join(parts)}"
```