- {/if}
- {:else if comparison.skipped_comparison}
-
- This {currentNoun} was created before the addition of certain windmill features, and
- therefore the changes with its parent workspace cannot be displayed.
- {:else if showDraftsOnly}
-
- This workspace has {draftCount} draft{draftCount !== 1 ? 's' : ''}
-
- {:else}
- Everything is up to date
- {/if}
-
- {/if}
-
-
-
-
-
-
-
-
+
+
{/if}
+
+{#snippet forkAction()}
+ {@const total = comparison?.summary.total_diffs ?? 0}
+ {@const conflicts = comparison?.summary.conflicts ?? 0}
+ {#if loading}
+ Checking for changes…
+ {:else if error}
+ Comparison failed
+ {:else if showDraftsOnly}
+
+ {draftCount} draft{draftCount !== 1 ? 's' : ''}
+
+
+ {:else if total > 0}
+
+ {#if changesAhead > 0}
+
+ ↑ {changesAhead}
+
+ {/if}
+ {#if changesBehind > 0}
+
+ ↓ {changesBehind}
+
+ {/if}
+ {#if conflicts > 0}
+
+ {conflicts} conflict{conflicts !== 1 ? 's' : ''}
+
+ {/if}
+
+ {/if}
+{/snippet}
diff --git a/frontend/src/lib/components/NavBreadcrumb.svelte b/frontend/src/lib/components/NavBreadcrumb.svelte
new file mode 100644
index 0000000000..b856e1a1d6
--- /dev/null
+++ b/frontend/src/lib/components/NavBreadcrumb.svelte
@@ -0,0 +1,306 @@
+
+
+
+{#snippet workspaceDisc()}
+
+{/snippet}
+
+{#snippet forkIcon()}
+
+{/snippet}
+
+{#snippet itemKindIcon()}
+ {#if item}{/if}
+{/snippet}
+
+{#snippet sectionKindIcon()}
+ {#if section?.kind}{/if}
+{/snippet}
+
+{#snippet folderIcon()}
+
+{/snippet}
+
+{#snippet userIcon()}
+
+{/snippet}
+
+{#snippet slash()}
+ /
+{/snippet}
+
+
diff --git a/frontend/src/lib/components/NavBreadcrumbTrigger.svelte b/frontend/src/lib/components/NavBreadcrumbTrigger.svelte
new file mode 100644
index 0000000000..f0b2084d46
--- /dev/null
+++ b/frontend/src/lib/components/NavBreadcrumbTrigger.svelte
@@ -0,0 +1,27 @@
+
+
+
+
diff --git a/frontend/src/lib/components/PageHeaderBar.svelte b/frontend/src/lib/components/PageHeaderBar.svelte
index 66df89b64d..e30c8bdda0 100644
--- a/frontend/src/lib/components/PageHeaderBar.svelte
+++ b/frontend/src/lib/components/PageHeaderBar.svelte
@@ -7,72 +7,79 @@ section name — and the route's own buttons at the far end.
The row's height matches the sidebar's own header row, so the two read as one band.
-->
-