```python
def order_release_tags(tags: list) -> list:
    if not tags:
        return []

    def parse_tag(tag):
        parts = tag.split('.')
        major, minor, patch = map(int, parts[:3])
        preview_label = None
        if len(parts) > 3 and '-' in parts[3]:
            parts = parts[:3] + parts[4:]
            preview_label = parts[-1].lower()
        return major, minor, patch, preview_label

    def compare_tags(tag1, tag2):
        major1, minor1, patch1, preview_label1 = parse_tag(tag1)
        major2, minor2, patch2, preview_label2 = parse_tag(tag2)

        if major1 != major2:
            return major1 - major2
        elif minor1 != minor2:
            return minor1 - minor2
        elif patch1 != patch2:
            return patch1 - patch2
        else:
            if preview_label1 is None and preview_label2 is not None:
                return 1
            elif preview_label1 is not None and preview_label2 is None:
                return -1
            else:
                return preview_label1.lower().compare(preview_label2.lower())

    sorted_tags = sorted(tags, key=lambda tag: compare_tags(tag, tag))
    return sorted_tags
```