diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css
index 448028a0..ce9047b1 100644
--- a/assets/css/compiled/main.css
+++ b/assets/css/compiled/main.css
@@ -274,6 +274,9 @@
.-start-6 {
inset-inline-start: calc(var(--spacing) * -6);
}
+ .-start-\[2\.1rem\] {
+ inset-inline-start: calc(2.1rem * -1);
+ }
.start-\[calc\(max\(-50vw\,-800px\)\+50\%\)\] {
inset-inline-start: calc(max(-50vw, -800px) + 50%);
}
@@ -292,6 +295,9 @@
.top-1\/2 {
top: calc(1 / 2 * 100%);
}
+ .top-3 {
+ top: calc(var(--spacing) * 3);
+ }
.top-5 {
top: calc(var(--spacing) * 5);
}
@@ -427,6 +433,9 @@
.my-8 {
margin-block: calc(var(--spacing) * 8);
}
+ .my-10 {
+ margin-block: calc(var(--spacing) * 10);
+ }
.-ms-5 {
margin-inline-start: calc(var(--spacing) * -5);
}
@@ -1382,6 +1391,9 @@
.min-h-0 {
min-height: 0px;
}
+ .min-h-\[104px\] {
+ min-height: 104px;
+ }
.min-h-\[130px\] {
min-height: 130px;
}
@@ -1805,6 +1817,10 @@
border-block-style: var(--tw-border-style);
border-block-width: 10px;
}
+ .border-s {
+ border-inline-start-style: var(--tw-border-style);
+ border-inline-start-width: 1px;
+ }
.border-s-0 {
border-inline-start-style: var(--tw-border-style);
border-inline-start-width: 0px;
@@ -1855,9 +1871,18 @@
.border-neutral-200 {
border-color: rgba(var(--color-neutral-200), 1);
}
+ .border-neutral-200\/80 {
+ border-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-200), 1), 1) 80%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, rgba(var(--color-neutral-200), 1) 80%, transparent);
+ }
+ }
.border-neutral-300 {
border-color: rgba(var(--color-neutral-300), 1);
}
+ .border-primary-200 {
+ border-color: rgba(var(--color-primary-200), 1);
+ }
.border-primary-400 {
border-color: rgba(var(--color-primary-400), 1);
}
@@ -1975,6 +2000,12 @@
background-color: color-mix(in oklab, rgba(var(--color-neutral), 1) 50%, transparent);
}
}
+ .bg-neutral\/85 {
+ background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral), 1), 1) 85%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, rgba(var(--color-neutral), 1) 85%, transparent);
+ }
+ }
.bg-primary-100 {
background-color: rgba(var(--color-primary-100), 1);
}
@@ -1999,6 +2030,9 @@
.bg-white {
background-color: #fff;
}
+ .bg-white\/80 {
+ background-color: color-mix(in oklab, #fff 80%, transparent);
+ }
.bg-linear-60 {
--tw-gradient-position: 60deg;
@supports (background-image: linear-gradient(in lab, red, red)) {
@@ -2180,6 +2214,9 @@
.ps-5 {
padding-inline-start: calc(var(--spacing) * 5);
}
+ .ps-6 {
+ padding-inline-start: calc(var(--spacing) * 6);
+ }
.pe-2 {
padding-inline-end: calc(var(--spacing) * 2);
}
@@ -2549,12 +2586,19 @@
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
+ .ring-4 {
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
.shadow-primary-500\/20 {
--tw-shadow-color: color-mix(in srgb, rgba(rgba(var(--color-primary-500), 1), 1) 20%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, rgba(var(--color-primary-500), 1) 20%, transparent) var(--tw-shadow-alpha), transparent);
}
}
+ .ring-neutral {
+ --tw-ring-color: rgba(var(--color-neutral), 1);
+ }
.ring-primary-500 {
--tw-ring-color: rgba(var(--color-primary-500), 1);
}
@@ -3004,6 +3048,9 @@
.sm\:-top-80 {
top: calc(var(--spacing) * -80);
}
+ .sm\:top-5 {
+ top: calc(var(--spacing) * 5);
+ }
.sm\:left-\[calc\(50\%-30rem\)\] {
left: calc(50% - 30rem);
}
@@ -3264,6 +3311,12 @@
.dark\:border-neutral-700:is(.dark *) {
border-color: rgba(var(--color-neutral-700), 1);
}
+ .dark\:border-neutral-700\/80:is(.dark *) {
+ border-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-700), 1), 1) 80%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, rgba(var(--color-neutral-700), 1) 80%, transparent);
+ }
+ }
.dark\:border-neutral-800:is(.dark *) {
border-color: rgba(var(--color-neutral-800), 1);
}
@@ -3273,6 +3326,9 @@
.dark\:border-primary-600:is(.dark *) {
border-color: rgba(var(--color-primary-600), 1);
}
+ .dark\:border-primary-900:is(.dark *) {
+ border-color: rgba(var(--color-primary-900), 1);
+ }
.dark\:border-secondary-600:is(.dark *) {
border-color: rgba(var(--color-secondary-600), 1);
}
@@ -3357,6 +3413,12 @@
background-color: color-mix(in oklab, rgba(var(--color-neutral-800), 1) 60%, transparent);
}
}
+ .dark\:bg-neutral-800\/85:is(.dark *) {
+ background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-800), 1), 1) 85%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, rgba(var(--color-neutral-800), 1) 85%, transparent);
+ }
+ }
.dark\:bg-neutral-900:is(.dark *) {
background-color: rgba(var(--color-neutral-900), 1);
}
@@ -3372,6 +3434,12 @@
background-color: color-mix(in oklab, rgba(var(--color-neutral-900), 1) 50%, transparent);
}
}
+ .dark\:bg-neutral-900\/80:is(.dark *) {
+ background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-900), 1), 1) 80%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, rgba(var(--color-neutral-900), 1) 80%, transparent);
+ }
+ }
.dark\:bg-neutral-900\/99:is(.dark *) {
background-color: color-mix(in srgb, rgba(rgba(var(--color-neutral-900), 1), 1) 99%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -3454,6 +3522,9 @@
.dark\:opacity-60:is(.dark *) {
opacity: 60%;
}
+ .dark\:ring-neutral-800:is(.dark *) {
+ --tw-ring-color: rgba(var(--color-neutral-800), 1);
+ }
.dark\:backdrop-brightness-95:is(.dark *) {
--tw-backdrop-brightness: brightness(95%);
-webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml
index 14537673..4701907b 100644
--- a/exampleSite/config/_default/params.toml
+++ b/exampleSite/config/_default/params.toml
@@ -40,7 +40,7 @@ smartTOCHideUnfocusedChildren = false
fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384", "sha256"
[header]
- layout = "fixed" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
+ layout = "floating" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur, floating
[footer]
showMenu = true
diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md
index dc52c044..dd8946f7 100755
--- a/exampleSite/content/_index.md
+++ b/exampleSite/content/_index.md
@@ -11,6 +11,12 @@ Blowfish gives you expressive layouts, thoughtful defaults, and practical conten
{{< cta url="/docs/" label="Explore the docs" style="outline" >}}
+{{< stats >}}
+{{< stat value="5" label="Homepage layouts" >}}Choose the structure that suits the site you are making.{{< /stat >}}
+{{< stat value="40+" label="Shortcodes" >}}Compose expressive content without maintaining one-off templates.{{< /stat >}}
+{{< stat value="100%" label="Your content" >}}Portable Markdown, familiar Hugo configuration, and no lock-in.{{< /stat >}}
+{{< /stats >}}
+
{{< feature-grid >}}
{{< feature icon="list-check" title="Make it yours" url="/docs/configuration/" >}}
A coherent system of layouts, colours, typography, and content controls.
@@ -23,7 +29,20 @@ Explore real sites, community contributions, and patterns that hold up in produc
{{< /feature >}}
{{< /feature-grid >}}
+## A theme that grows with your work
+
+{{< steps >}}
+{{< step number="1" title="Start with a strong foundation" >}}
+Pick a layout, set your colours and typography, then publish a useful first version.
+{{< /step >}}
+{{< step number="2" title="Build richer pages from content" >}}
+Use shortcodes for calls to action, feature grids, media, diagrams, tabs, and more.
+{{< /step >}}
+{{< step number="3" title="Keep evolving without rewrites" >}}
+Add what your site needs while keeping your content and configuration portable.
+{{< /step >}}
+{{< /steps >}}
+
{{< alert "circle-info" >}}
This homepage uses Blowfish's built-in `landing` layout and standard shortcodes. No custom homepage template is required.
{{< /alert >}}
-
diff --git a/exampleSite/content/docs/configuration/index.md b/exampleSite/content/docs/configuration/index.md
index 3a0db546..37e0ca29 100644
--- a/exampleSite/content/docs/configuration/index.md
+++ b/exampleSite/content/docs/configuration/index.md
@@ -226,7 +226,7 @@ Many of the article defaults here can be overridden on a per article basis by sp
| Name | Default | Description |
| --- | --- | --- |
-| `header.layout` | `"basic"` | Defines the header for the entire site, supported values are `basic`, `fixed`, `fixed-fill`, and `fixed-fill-blur`. |
+| `header.layout` | `"basic"` | Defines the header for the entire site, supported values are `basic`, `fixed`, `fixed-fill`, `fixed-fill-blur`, `fixed-gradient`, and `floating`. |
### Footer
diff --git a/exampleSite/content/docs/shortcodes/index.md b/exampleSite/content/docs/shortcodes/index.md
index a6d29962..37e2c91f 100644
--- a/exampleSite/content/docs/shortcodes/index.md
+++ b/exampleSite/content/docs/shortcodes/index.md
@@ -1441,3 +1441,41 @@ Use `cta` for a clear, accessible call to action inside documentation, landing p
{{< cta url="/docs/installation/" label="Start building" >}}
{{< cta url="/docs/configuration/" label="Explore configuration" style="outline" >}}
+
+
+
+## Stats
+
+Use `stats` and `stat` to present concise, high-signal metrics in a responsive grid. The grid uses three columns on large screens by default, or four with `columns="4"`.
+
+```md
+{{* stats */>}}
+{{* stat value="40+" label="Shortcodes" */>}}Compose pages without bespoke templates.{{* /stat */>}}
+{{* stat value="100%" label="Portable" */>}}Keep your content in Markdown.{{* /stat */>}}
+{{* stat value="0" label="Required plugins" */>}}Start with Hugo and Blowfish.{{* /stat */>}}
+{{* /stats */>}}
+```
+
+{{< stats >}}
+{{< stat value="40+" label="Shortcodes" >}}Compose pages without bespoke templates.{{< /stat >}}
+{{< stat value="100%" label="Portable" >}}Keep your content in Markdown.{{< /stat >}}
+{{< stat value="0" label="Required plugins" >}}Start with Hugo and Blowfish.{{< /stat >}}
+{{< /stats >}}
+
+
+
+## Steps
+
+Use `steps` and `step` for onboarding, processes, roadmaps, and tutorials.
+
+```md
+{{* steps */>}}
+{{* step number="1" title="Configure the theme" */>}}Choose a colour scheme and homepage layout.{{* /step */>}}
+{{* step number="2" title="Write your content" */>}}Use standard Markdown and shortcodes.{{* /step */>}}
+{{* /steps */>}}
+```
+
+{{< steps >}}
+{{< step number="1" title="Configure the theme" >}}Choose a colour scheme and homepage layout.{{< /step >}}
+{{< step number="2" title="Write your content" >}}Use standard Markdown and shortcodes.{{< /step >}}
+{{< /steps >}}
diff --git a/layouts/partials/header/floating.html b/layouts/partials/header/floating.html
new file mode 100644
index 00000000..552baf31
--- /dev/null
+++ b/layouts/partials/header/floating.html
@@ -0,0 +1,6 @@
+
{{ $value | markdownify }}
+{{ $label | markdownify }}
+ {{ with .Inner }}