{%- assign gridwise_pages = site.pages | where: "category", "gridwise" | sort: "order" -%}
diff --git a/docs/examples.md b/docs/examples.md
index e45244f..0b098f5 100644
--- a/docs/examples.md
+++ b/docs/examples.md
@@ -54,31 +54,6 @@ validate the output.
Open ExampleSource
-## Performance Testing
-
-These examples benchmark Gridwise primitives over a range of input sizes (logarithmically spaced)
-and plot throughput in GB/s versus input length. Both CPU and GPU timing are reported. See the
-[timing strategy documentation]({{ "/timing-strategy/" | relative_url }}) for how
-primitives are timed and how to interpret results.
-
-### Scan and Sort Performance
-
-Benchmarks scan, reduce, and sort over a configurable range of input sizes. Choose the primitive,
-datatype, and sort direction; results are plotted after each run. Note that sort overwrites its
-input, so repeated trials measure a partially-sorted array.
-
-Open Example
-Source
-
-### Reduce Performance
-
-Benchmarks the reduce primitive over a configurable range of input sizes. Explains the
-warmup-then-trials timing strategy with inline code excerpts showing how to call
-`getTimingResult` after execution.
-
-Open Example
-Source
-
## Regression Testing
### Gridwise Regression Tests
diff --git a/docs/performance.md b/docs/performance.md
new file mode 100644
index 0000000..8980b63
--- /dev/null
+++ b/docs/performance.md
@@ -0,0 +1,31 @@
+---
+layout: page
+title: Performance
+permalink: /performance/
+sidebar: performance
+---
+
+Benchmarks for Gridwise primitives over a range of input sizes (logarithmically spaced),
+plotting throughput in GB/s versus input length. Both CPU and GPU timing are reported. See the
+[timing strategy documentation]({{ "/timing-strategy/" | relative_url }}) for how
+primitives are timed and how to interpret results.
+
+## Scan and Sort Performance
+
+Benchmarks scan, reduce, and sort over a configurable range of input sizes. Choose the primitive,
+datatype, and sort direction; results are plotted after each run. Note that sort overwrites its
+input, so repeated trials measure a partially-sorted array.
+
+Open Example
+Source
+
+## Reduce Performance
+
+Benchmarks the reduce primitive over a configurable range of input sizes. Explains the
+warmup-then-trials timing strategy with inline code excerpts showing how to call
+`getTimingResult` after execution.
+
+Open Example
+Source
+
+---
diff --git a/examples/gridwise.css b/examples/gridwise.css
index e02ced6..d059d29 100644
--- a/examples/gridwise.css
+++ b/examples/gridwise.css
@@ -116,3 +116,20 @@ ul.test-list li.fail {
#large-section {
display: none;
}
+
+.back-link {
+ display: inline-block;
+ padding: 5px 12px;
+ background: #39bda7;
+ color: white;
+ text-decoration: none;
+ border-radius: 4px;
+ margin-bottom: 1em;
+ font-size: 13px;
+ transition: background 0.2s;
+}
+.back-link:hover {
+ background: #2a9a87;
+ color: white;
+ text-decoration: none;
+}
diff --git a/examples/reduce_example.html b/examples/reduce_example.html
index 56803fd..08c5827 100644
--- a/examples/reduce_example.html
+++ b/examples/reduce_example.html
@@ -10,6 +10,7 @@
/>
+ ← Back to Examples
Gridwise Reduce Primitive Example
This example calls Gridwise's reduce primitive. You can look
diff --git a/examples/reduce_perf.html b/examples/reduce_perf.html
index af800f5..b9cc085 100644
--- a/examples/reduce_perf.html
+++ b/examples/reduce_perf.html
@@ -7,6 +7,7 @@
This example is a self-contained use of the reduce
diff --git a/examples/regression.html b/examples/regression.html
index 652d2aa..0d9b762 100644
--- a/examples/regression.html
+++ b/examples/regression.html
@@ -6,6 +6,7 @@
diff --git a/examples/scan_example.html b/examples/scan_example.html
index d4afc74..daa51dc 100644
--- a/examples/scan_example.html
+++ b/examples/scan_example.html
@@ -10,6 +10,7 @@
/>
+ ← Back to Examples
Gridwise Scan Primitive Example
This example calls Gridwise's scan primitive. You can look at
diff --git a/examples/scan_pane_example.html b/examples/scan_pane_example.html
index 0dddf56..0815da9 100644
--- a/examples/scan_pane_example.html
+++ b/examples/scan_pane_example.html
@@ -6,6 +6,7 @@
Set your parameters in the pane and click "Start" to run and validate a WebGPU scan/reduce.
diff --git a/examples/scan_sort_perf.html b/examples/scan_sort_perf.html
index 4c401a8..72de943 100644
--- a/examples/scan_sort_perf.html
+++ b/examples/scan_sort_perf.html
@@ -7,6 +7,7 @@
+ ← Back to Performance
Scan / Sort Performance
This example is a self-contained use of the scan and
diff --git a/examples/sort_example.html b/examples/sort_example.html
index 9bbd7f4..45f996d 100644
--- a/examples/sort_example.html
+++ b/examples/sort_example.html
@@ -10,6 +10,7 @@
/>