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

def hex_join(parts: list) -> str:
    if not all(len(part) == 2 for part in parts):
        raise ValueError("Invalid part format. Each part must be two hexadecimal digits.")
    
    return f"#{''.join(parts)}".lower()
```