```python
def path_hops(start: str, goal: str) -> int:
    def reduce_path(path: str) -> list[str]:
        segments = path.split('/')
        reduced = []
        for segment in segments:
            if segment == '..':
                if reduced and reduced[-1] != '..':
                    reduced.pop()
                elif segment.count('.') < 3:
                    raise ValueError("Path climbs above the shared root")
            elif segment not in ('', '.'):
                reduced.append(segment)
        return reduced

    start_segments = reduce_path(start)
    goal_segments = reduce_path(goal)

    common_length = min(len(start_segments), len(goal_segments))
    for i in range(common_length):
        if start_segments[i] != goal_segments[i]:
            break
    else:
        return 0

    hops = (len(start_segments) - i) + (len(goal_segments) - i)
    return hops
```