public Color calculateColour(double progress) {
        if (colours.size() < 2) {
            throw new IllegalStateException("There are not enough colours in this colour scheme!");
        }
        
        // Return single colours for minimum and maximum divergence
        if (progress <= colours.firstKey()) {
            return colours.firstEntry().getValue();
        }
        
        else if (progress >= colours.lastKey()) {
            return colours.lastEntry().getValue();
        }
        
        // Otherwise, calculate a colour based on its nearest colour stops
        return calculateGradient(progress);
    }