Repository: gruntwork-io/terragrunt

Issue:
When invoking terraform/opentofu, ensure to propagate the trace parent via the TRACEPARENT environment variable
## Describe the enhancement

Terragrunt should properly propagate OpenTelemetry trace context to Terraform/OpenTofu processes to enable end-to-end distributed tracing.

Currently, Terragrunt generates OpenTelemetry traces for its own operations, but this tracing context isn't fully propagated to the underlying Terraform/OpenTofu processes. This feature would improve the integration by properly setting the TRACEPARENT environment variable when executing Terraform/OpenTofu commands, allowing for seamless distributed tracing across the entire execution chain.

The implementation should follow the [OpenTelemetry Environment Variables Propagation Specification](https://github.com/adrielp/opentelemetry-specification/blob/main/specification/context/env-carriers.md), which defines how trace context should be propagated via environment variables between processes.

## Additional context

OpenTofu has recently accepted an RFC to improve OpenTelemetry support in [PR #2448](https://github.com/opentofu/opentofu/pull/2448), part of this is to specifically looks for the `TRACEPARENT` environment variable to continue traces from parent processes. This enhancement should enable Terragrunt to seamlessly integrate with this new OpenTofu feature nicely.

### Changes required:
- Add a utility method `TraceParentFromContext` to the telemetry package to extract W3C trace context from the current span, this keeps the code nice and clean
- Modify the ([`RunCommandWithOutput`](https://github.com/gruntwork-io/terragrunt/blob/main/shell/run_cmd.go#L42)) function to extract and set the TRACEPARENT environment variable when executing Terraform/OpenTofu commands
- For engine execution, ensure TRACEPARENT is passed through a new `EnvVars` field in the execution options, this is so that the environment variable does not pollute the existing Terragrunt options env vars

### Implications of the feature:
- Better observability and debugging of Terraform/OpenTofu operations
- Seamless integration with existing OpenTelemetry tracing systems
- Compliant with W3C Trace Context propagation standards
- No breaking changes or backward compatibility issues
- Minimal overhead for users not using OpenTelemetry

### Level of effort:
Low. The changes are minimal and focused:
1. Add a helper function to extract the trace context
2. Conditionally set the environment variable before command execution
3. Update documentation

## PoC (Proof of Concept)

I've implemented a PoC that:
1. Adds a `TraceParentFromContext` utility function in the telemetry package
2. Extracts the current span from context and formats a W3C traceparent header according to the specification
3. Adds the TRACEPARENT environment variable to both direct execution and engine execution

The implementation correctly propagates the trace context in the W3C-compliant format:
```
TRACEPARENT=00-{traceID}-{spanID}-{flags}
```

I've tested this with OpenTofu's tracing implementation (which accepts TRACEPARENT env var as defined in their PR #2448) and confirmed it works correctly for distributed tracing.

PoC PR here: https://github.com/gruntwork-io/terragrunt/pull/4254

<LINK INCOMING TO PR>

## RFC Not Needed

- [x] I have evaluated the complexity of this enhancement, and I believe it does not require an RFC.

Discussion:
@denis256: Included in https://github.com/gruntwork-io/terragrunt/releases/tag/v0.78.4

Solution patch:
diff --git a/docs-starlight/astro.config.mjs b/docs-starlight/astro.config.mjs
index ede26400..6afcb871 100644
--- a/docs-starlight/astro.config.mjs
+++ b/docs-starlight/astro.config.mjs
@@ -3,8 +3,8 @@ import { defineConfig } from "astro/config";
 import starlight from "@astrojs/starlight";
 import starlightLinksValidator from "starlight-links-validator";
 import vercel from "@astrojs/vercel";
-
 import d2 from "astro-d2";
+import tailwindcss from "@tailwindcss/vite";
 
 export const sidebar = [
   {
@@ -78,12 +78,16 @@ export default defineConfig({
   integrations: [
     starlight({
       title: "Terragrunt",
+      customCss: ["./src/styles/global.css"],
+      components: {
+        Header: './src/components/Header.astro',
+        SiteTitle: './src/components/SiteTitle.astro',
+      },
       logo: {
-        dark: "/src/assets/logo-light.svg",
-        light: "/src/assets/logo-dark.svg",
+        dark: "/src/assets/horizontal-logo-light.svg",
+        light: "/src/assets/horizontal-logo-dark.svg",
       },
       social: {
-        github: "https://github.com/gruntwork-io/terragrunt",
         discord: "https://discord.gg/SPu4Degs5f",
       },
       sidebar: sidebar,
@@ -162,4 +166,7 @@ export default defineConfig({
     "/docs/features/provider-cache/": "/docs/features/provider-cache-server/",
     "/docs/features/provider-caching/": "/docs/features/provider-cache-server/",
   },
+  vite: {
+    plugins: [tailwindcss()],
+  },
 });
diff --git a/docs-starlight/bun.lock b/docs-starlight/bun.lock
index fd1e0b47..420210ab 100644
--- a/docs-starlight/bun.lock
+++ b/docs-starlight/bun.lock
@@ -5,13 +5,16 @@
       "name": "docs-starlight",
       "dependencies": {
         "@astrojs/starlight": "^0.31.1",
+        "@astrojs/starlight-tailwind": "^4.0.1",
         "@astrojs/vercel": "^8.1.1",
+        "@tailwindcss/vite": "^4.1.5",
         "@zachleat/table-saw": "^1.0.6",
         "astro": "^5.4.2",
         "astro-d2": "^0.7.0",
         "gray-matter": "^4.0.3",
         "sharp": "^0.32.6",
         "starlight-links-validator": "^0.14.3",
+        "tailwindcss": "^4.1.5",
       },
       "devDependencies": {
         "@types/bun": "^1.2.4",
@@ -39,6 +42,8 @@
 
     "@astrojs/starlight": ["@astrojs/starlight@0.31.1", "", { "dependencies": { "@astrojs/mdx": "^4.0.5", "@astrojs/sitemap": "^3.2.1", "@pagefind/default-ui": "^1.3.0", "@types/hast": "^3.0.4", "@types/js-yaml": "^4.0.9", "@types/mdast": "^4.0.4", "astro-expressive-code": "^0.40.0", "bcp-47": "^2.1.0", "hast-util-from-html": "^2.0.1", "hast-util-select": "^6.0.2", "hast-util-to-string": "^3.0.0", "hastscript": "^9.0.0", "i18next": "^23.11.5", "js-yaml": "^4.1.0", "mdast-util-directive": "^3.0.0", "mdast-util-to-markdown": "^2.1.0", "mdast-util-to-string": "^4.0.0", "pagefind": "^1.3.0", "rehype": "^13.0.1", "rehype-format": "^5.0.0", "remark-directive": "^3.0.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "vfile": "^6.0.2" }, "peerDependencies": { "astro": "^5.1.5" } }, "sha512-VIVkHugwgtEqJPiRH8+ouP0UqUfdmpBO9C64R+6QaQ2qmADNkI/BA3/YAJHTBZYlMQQGEEuLJwD9qpaUovi52Q=="],
 
+    "@astrojs/starlight-tailwind": ["@astrojs/starlight-tailwind@4.0.1", "", { "peerDependencies": { "@astrojs/starlight": ">=0.34.0", "tailwindcss": "^4.0.0" } }, "sha512-AOOEWTGqJ7fG66U04xTmZQZ40oZnUYe4Qljpr+No88ozKywtsD1DiXOrGTeHCnZu0hRtMbRtBGB1fZsf0L62iw=="],
+
     "@astrojs/telemetry": ["@astrojs/telemetry@3.2.0", "", { "dependencies": { "ci-info": "^4.1.0", "debug": "^4.3.7", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-wxhSKRfKugLwLlr4OFfcqovk+LIFtKwLyGPqMsv+9/ibqqnW3Gv7tBhtKEb0gAyUAC4G9BTVQeQahqnQAhd6IQ=="],
 
     "@astrojs/vercel": ["@astrojs/vercel@8.1.1", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.0", "@vercel/analytics": "^1.5.0", "@vercel/edge": "^1.2.1", "@vercel/nft": "^0.29.2", "@vercel/routing-utils": "^5.0.4", "esbuild": "^0.25.0", "tinyglobby": "^0.2.12" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-4tTib9LkAtg7tqac4L+pnWEveUmYyWRXpHivaVV3lHKeQjB28KUZ+YXtR/VUG6/xpMduo+OCOOg0l1zOPq/e4w=="],
@@ -233,6 +238,36 @@
 
     "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
 
+    "@tailwindcss/node": ["@tailwindcss/node@4.1.5", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.29.2", "tailwindcss": "4.1.5" } }, "sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg=="],
+
+    "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.5", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.5", "@tailwindcss/oxide-darwin-arm64": "4.1.5", "@tailwindcss/oxide-darwin-x64": "4.1.5", "@tailwindcss/oxide-freebsd-x64": "4.1.5", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.5", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.5", "@tailwindcss/oxide-linux-arm64-musl": "4.1.5", "@tailwindcss/oxide-linux-x64-gnu": "4.1.5", "@tailwindcss/oxide-linux-x64-musl": "4.1.5", "@tailwindcss/oxide-wasm32-wasi": "4.1.5", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.5", "@tailwindcss/oxide-win32-x64-msvc": "4.1.5" } }, "sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA=="],
+
+    "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.5", "", { "os": "android", "cpu": "arm64" }, "sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw=="],
+
+    "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA=="],
+
+    "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q=="],
+
+    "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg=="],
+
+    "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5", "", { "os": "linux", "cpu": "arm" }, "sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg=="],
+
+    "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ=="],
+
+    "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA=="],
+
+    "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA=="],
+
+    "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g=="],
+
+    "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.5", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@emnapi/wasi-threads": "^1.0.2", "@napi-rs/wasm-runtime": "^0.2.9", "@tybys/wasm-util": "^0.9.0", "tslib": "^2.8.0" }, "cpu": "none" }, "sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ=="],
+
+    "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA=="],
+
+    "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.5", "", { "os": "win32", "cpu": "x64" }, "sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q=="],
+
+    "@tailwindcss/vite": ["@tailwindcss/vite@4.1.5", "", { "dependencies": { "@tailwindcss/node": "4.1.5", "@tailwindcss/oxide": "4.1.5", "tailwindcss": "4.1.5" }, "peerDependencies": { "vite": "^5.2.0 || ^6" } }, "sha512-FE1stRoqdHSb7RxesMfCXE8icwI1W6zGE/512ae3ZDrpkQYTTYeSyUJPRCjZd8CwVAhpDUbi1YR8pcZioFJQ/w=="],
+
     "@types/acorn": ["@types/acorn@4.0.6", "", { "dependencies": { "@types/estree": "*" } }, "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ=="],
 
     "@types/bun": ["@types/bun@1.2.4", "", { "dependencies": { "bun-types": "1.2.4" } }, "sha512-QtuV5OMR8/rdKJs213iwXDpfVvnskPXY/S0ZiFbsTjQZycuqPbMW8Gf/XhLfwE5njW8sxI2WjISURXPlHypMFA=="],
@@ -449,6 +484,8 @@
 
     "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="],
 
+    "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="],
+
     "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
 
     "es-module-lexer": ["es-module-lexer@1.6.0", "", {}, "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ=="],
@@ -621,6 +658,8 @@
 
     "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="],
 
+    "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="],
+
     "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="],
 
     "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
@@ -629,6 +668,28 @@
 
     "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="],
 
+    "lightningcss": ["lightningcss@1.29.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.2", "lightningcss-darwin-x64": "1.29.2", "lightningcss-freebsd-x64": "1.29.2", "lightningcss-linux-arm-gnueabihf": "1.29.2", "lightningcss-linux-arm64-gnu": "1.29.2", "lightningcss-linux-arm64-musl": "1.29.2", "lightningcss-linux-x64-gnu": "1.29.2", "lightningcss-linux-x64-musl": "1.29.2", "lightningcss-win32-arm64-msvc": "1.29.2", "lightningcss-win32-x64-msvc": "1.29.2" } }, "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA=="],
+
+    "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA=="],
+
+    "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w=="],
+
+    "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg=="],
+
+    "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.2", "", { "os": "linux", "cpu": "arm" }, "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg=="],
+
+    "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ=="],
+
+    "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ=="],
+
+    "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg=="],
+
+    "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w=="],
+
+    "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw=="],
+
+    "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.2", "", { "os": "win32", "cpu": "x64" }, "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA=="],
+
     "load-yaml-file": ["load-yaml-file@0.2.0", "", { "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.13.0", "pify": "^4.0.1", "strip-bom": "^3.0.0" } }, "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw=="],
 
     "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="],
@@ -995,6 +1056,10 @@
 
     "style-to-object": ["style-to-object@1.0.8", "", { "dependencies": { "inline-style-parser": "0.2.4" } }, "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g=="],
 
+    "tailwindcss": ["tailwindcss@4.1.5", "", {}, "sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA=="],
+
+    "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="],
+
     "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="],
 
     "tar-fs": ["tar-fs@3.0.8", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg=="],
@@ -1117,6 +1182,18 @@
 
     "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
 
+    "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.9", "", { "dependencies": { "@emnapi/core": "^1.4.0", "@emnapi/runtime": "^1.4.0", "@tybys/wasm-util": "^0.9.0" }, "bundled": true }, "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
     "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
 
     "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
@@ -1153,6 +1230,22 @@
 
     "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
 
+    "@tailwindcss/oxide-wasm32-wasi/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@emnapi/core/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
     "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
 
     "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
@@ -1169,6 +1262,18 @@
 
     "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
 
+    "@tailwindcss/oxide-wasm32-wasi/@emnapi/core/@emnapi/wasi-threads/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/runtime/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
     "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
+
+    "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
   }
 }
diff --git a/docs-starlight/package.json b/docs-starlight/package.json
index d449c53d..d1ad3968 100644
--- a/docs-starlight/package.json
+++ b/docs-starlight/package.json
@@ -11,13 +11,16 @@
   },
   "dependencies": {
     "@astrojs/starlight": "^0.31.1",
+    "@astrojs/starlight-tailwind": "^4.0.1",
     "@astrojs/vercel": "^8.1.1",
+    "@tailwindcss/vite": "^4.1.5",
     "@zachleat/table-saw": "^1.0.6",
     "astro": "^5.4.2",
     "astro-d2": "^0.7.0",
     "gray-matter": "^4.0.3",
     "sharp": "^0.32.6",
-    "starlight-links-validator": "^0.14.3"
+    "starlight-links-validator": "^0.14.3",
+    "tailwindcss": "^4.1.5"
   },
   "patchedDependencies": {
     "@astrojs/starlight@0.31.1": "patches/@astrojs%2Fstarlight@0.31.1.patch"
diff --git a/docs-starlight/src/assets/gruntwork-logo-mark-black.svg b/docs-starlight/src/assets/gruntwork-logo-mark-black.svg
new file mode 100644
index 00000000..789327d2
--- /dev/null
+++ b/docs-starlight/src/assets/gruntwork-logo-mark-black.svg
@@ -0,0 +1,3 @@
+<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M240.511 14.8887C238.537 11.7136 241.561 7.10591 245.151 8.15108C385.826 49.1115 455.362 105.305 478.864 211.331H345.692C341.107 193.408 333.188 180.07 321.934 171.317C311.097 162.147 289.631 157.562 257.537 157.562C227.943 157.562 207.103 162.564 195.015 172.567C182.927 182.154 173.758 196.117 167.505 214.457C161.253 232.38 158.127 254.054 158.127 279.48C158.127 304.905 161.462 326.579 168.131 344.502C174.8 362.425 184.595 376.18 197.516 385.766C210.854 395.353 229.194 400.146 252.535 400.146C275.043 400.146 292.34 398.271 304.428 394.52C316.516 390.768 325.685 385.141 331.938 377.639C338.19 369.719 342.775 360.341 345.692 349.504H307.88C283.184 349.504 263.164 329.484 263.164 304.787V253.846H425.095C444.268 253.846 458.44 259.056 467.61 269.476C476.779 279.48 483.032 294.902 486.366 315.742L512 491.428H408.839L400.086 432.684C364.078 488.696 315.224 503.307 249.409 503.307C196.474 503.307 154.793 494.346 124.365 476.423C62.4517 439.105 13.5468 357.519 41.3238 251.502C45.5964 235.195 22.3875 227.402 6.71548 230.651C4.79551 231.049 1.71572 227.624 2.83557 226.015C10.1503 215.501 23.9462 198.101 42.5653 185.388C54.5086 177.233 49.0229 159.223 3.39737 154.866C0.537409 154.593 -1.03324 151.484 0.7659 149.244C17.1073 128.9 86.7099 54.8033 233.646 54.8033C249.977 54.8033 253.092 35.1262 240.511 14.8887Z" fill="black"/>
+</svg>
diff --git a/docs-starlight/src/assets/gruntwork-logo-mark-white.svg b/docs-starlight/src/assets/gruntwork-logo-mark-white.svg
new file mode 100644
index 00000000..91f25b27
--- /dev/null
+++ b/docs-starlight/src/assets/gruntwork-logo-mark-white.svg
@@ -0,0 +1,3 @@
+<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M240.511 14.8887C238.537 11.7136 241.561 7.10591 245.151 8.15108C385.826 49.1115 455.362 105.305 478.864 211.331H345.692C341.107 193.408 333.188 180.07 321.934 171.317C311.097 162.147 289.631 157.562 257.537 157.562C227.943 157.562 207.103 162.564 195.015 172.567C182.927 182.154 173.758 196.117 167.505 214.457C161.253 232.38 158.127 254.054 158.127 279.48C158.127 304.905 161.462 326.579 168.131 344.502C174.8 362.425 184.595 376.18 197.516 385.766C210.854 395.353 229.194 400.146 252.535 400.146C275.043 400.146 292.34 398.271 304.428 394.52C316.516 390.768 325.685 385.141 331.938 377.639C338.19 369.719 342.775 360.341 345.692 349.504H307.88C283.184 349.504 263.164 329.484 263.164 304.787V253.846H425.095C444.268 253.846 458.44 259.056 467.61 269.476C476.779 279.48 483.032 294.902 486.366 315.742L512 491.428H408.839L400.086 432.684C364.078 488.696 315.224 503.307 249.409 503.307C196.474 503.307 154.793 494.346 124.365 476.423C62.4517 439.105 13.5468 357.519 41.3238 251.502C45.5964 235.195 22.3875 227.402 6.71548 230.651C4.79551 231.049 1.71572 227.624 2.83557 226.015C10.1503 215.501 23.9462 198.101 42.5653 185.388C54.5086 177.233 49.0229 159.223 3.39737 154.866C0.537409 154.593 -1.03324 151.484 0.7659 149.244C17.1073 128.9 86.7099 54.8033 233.646 54.8033C249.977 54.8033 253.092 35.1262 240.511 14.8887Z" fill="white"/>
+</svg>
diff --git a/docs-starlight/src/assets/horizontal-logo-dark.svg b/docs-starlight/src/assets/horizontal-logo-dark.svg
new file mode 100644
index 00000000..1eeb5711
--- /dev/null
+++ b/docs-starlight/src/assets/horizontal-logo-dark.svg
@@ -0,0 +1,30 @@
+<svg width="1129" height="264" viewBox="0 0 1129 264" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M128.433 0.757812L239.593 64.7578V192.758L128.433 256.758L17.2734 192.758V64.7578L128.433 0.757812ZM227.593 71.6668L128.433 14.5757L29.2734 71.6668V185.849L128.433 242.94L227.593 185.849V71.6668Z" fill="#160C56"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M128.433 242.938V185.847V128.756L78.8534 100.211L29.2734 71.6653V128.756V185.847L128.433 242.938Z" fill="white"/>
+<path d="M178.013 214.395L227.593 185.849L178.013 157.304L128.433 185.849V242.94L178.013 214.395Z" fill="#87E0E1"/>
+<path d="M128.433 128.758V185.849L178.013 157.304L128.433 128.758Z" fill="#1B46DD"/>
+<path d="M178.013 100.213L128.433 128.758L178.013 157.304L227.593 128.758L178.013 100.213Z" fill="#B068E9"/>
+<path d="M178.013 43.1217L128.433 14.5762L78.8534 43.1217L29.2734 71.6672L78.8534 100.213L128.433 71.6672L178.013 100.213L227.593 71.6672L178.013 43.1217Z" fill="#F9DB4E"/>
+<path d="M128.433 128.758L178.013 100.213L128.433 71.6672L78.8534 100.213L128.433 128.758Z" fill="#E94A5D"/>
+<path d="M810.028 215.863V220.704H814.82C815.031 220.704 815.273 220.66 815.547 220.571C815.82 220.483 816.075 220.345 816.311 220.155C816.56 219.966 816.771 219.714 816.945 219.399C817.119 219.084 817.206 218.7 817.206 218.246C817.206 217.868 817.138 217.534 817.001 217.244C816.877 216.941 816.703 216.689 816.479 216.487C816.268 216.286 816.013 216.134 815.715 216.034C815.429 215.92 815.124 215.863 814.801 215.863H810.028ZM814.074 206.353C814.074 206.353 812.726 206.353 810.028 206.353V210.664H814.055C814.267 210.664 814.484 210.62 814.708 210.532C814.932 210.431 815.131 210.292 815.305 210.116C815.491 209.926 815.64 209.7 815.752 209.435C815.876 209.17 815.938 208.868 815.938 208.527C815.938 208.2 815.882 207.903 815.771 207.639C815.659 207.374 815.51 207.147 815.323 206.958C815.149 206.769 814.95 206.624 814.727 206.523C814.515 206.41 814.298 206.353 814.074 206.353ZM815.547 226.376H803V200.662H814.484C815.814 200.662 817.007 200.819 818.064 201.134C819.12 201.45 820.021 201.916 820.767 202.534C821.513 203.151 822.084 203.914 822.482 204.821C822.88 205.729 823.079 206.782 823.079 207.979C823.079 208.496 822.992 209.006 822.818 209.511C822.656 210.015 822.439 210.481 822.165 210.91C821.892 211.326 821.575 211.697 821.214 212.025C820.866 212.34 820.506 212.574 820.133 212.725C820.705 212.952 821.252 213.261 821.774 213.651C822.296 214.029 822.756 214.471 823.153 214.975C823.551 215.466 823.868 216.015 824.104 216.62C824.34 217.225 824.458 217.868 824.458 218.548C824.458 220.011 824.191 221.239 823.657 222.235C823.135 223.231 822.451 224.038 821.606 224.655C820.761 225.273 819.804 225.714 818.735 225.979C817.678 226.244 816.616 226.376 815.547 226.376Z" fill="#160C56"/>
+<path d="M840.893 200.662H849.077L839.494 216.676L839.513 226.376H832.485V216.714L822.958 200.662H831.086L835.971 210.399H836.027L840.893 200.662Z" fill="#160C56"/>
+<path d="M877.528 217.357L877.547 212.366H890.672C890.784 214.571 890.535 216.576 889.926 218.378C889.33 220.168 888.447 221.706 887.279 222.992C886.123 224.265 884.731 225.254 883.103 225.96C881.475 226.653 879.697 227 877.771 227C875.832 227 874.011 226.647 872.308 225.941C870.618 225.235 869.139 224.271 867.871 223.048C866.616 221.826 865.622 220.395 864.888 218.756C864.155 217.105 863.788 215.347 863.788 213.481C863.788 211.603 864.155 209.851 864.888 208.225C865.622 206.586 866.616 205.155 867.871 203.933C869.139 202.71 870.618 201.752 872.308 201.059C874.011 200.353 875.832 200 877.771 200C879.722 200 881.543 200.353 883.233 201.059C884.936 201.765 886.44 202.754 887.745 204.027L883.177 208.66C882.568 207.828 881.798 207.166 880.866 206.674C879.933 206.183 878.902 205.937 877.771 205.937C876.801 205.937 875.894 206.132 875.049 206.523C874.204 206.901 873.464 207.431 872.83 208.111C872.209 208.779 871.712 209.574 871.339 210.494C870.978 211.414 870.798 212.416 870.798 213.5C870.798 214.571 870.978 215.574 871.339 216.506C871.712 217.426 872.209 218.227 872.83 218.908C873.464 219.576 874.204 220.105 875.049 220.496C875.894 220.874 876.801 221.063 877.771 221.063C879.523 221.063 880.872 220.735 881.816 220.08C882.761 219.412 883.389 218.504 883.699 217.357C884.01 216.21 877.528 217.357 877.528 217.357Z" fill="#160C56"/>
+<path d="M901.401 212.479H905.335C905.708 212.479 906.062 212.41 906.398 212.271C906.733 212.132 907.025 211.937 907.274 211.685C907.523 211.433 907.715 211.13 907.852 210.777C908.001 210.412 908.076 210.008 908.076 209.567C908.076 209.151 908.001 208.761 907.852 208.395C907.715 208.029 907.523 207.714 907.274 207.45C907.025 207.185 906.733 206.977 906.398 206.826C906.075 206.674 905.727 206.599 905.354 206.599H901.401V212.479ZM915.738 226.376H907.703L903.75 218.416H901.401V226.376H894.373V200.662H905.652C907.032 200.662 908.299 200.882 909.455 201.324C910.611 201.752 911.605 202.357 912.438 203.139C913.283 203.92 913.936 204.859 914.396 205.956C914.868 207.04 915.104 208.244 915.104 209.567C915.104 211.37 914.7 212.933 913.892 214.256C913.097 215.567 912.009 216.582 910.63 217.3L915.738 226.376Z" fill="#160C56"/>
+<path d="M934.074 216.487C934.074 216.487 934.074 211.212 934.074 200.662H941.103V216.468C941.103 217.981 940.835 219.387 940.301 220.685C939.779 221.971 939.021 223.08 938.026 224.013C937.045 224.945 935.845 225.676 934.428 226.206C933.024 226.735 931.445 227 929.693 227C928.077 227 926.573 226.761 925.181 226.282C923.789 225.79 922.577 225.09 921.546 224.183C920.527 223.275 919.725 222.172 919.141 220.874C918.557 219.563 918.265 218.095 918.265 216.468V200.662H925.274V216.506C925.274 217.174 925.368 217.792 925.554 218.359C925.74 218.926 926.02 219.418 926.393 219.834C926.766 220.237 927.226 220.553 927.773 220.779C928.332 221.006 928.972 221.12 929.693 221.12C930.401 221.12 931.029 221.006 931.576 220.779C932.123 220.553 932.576 220.237 932.937 219.834C933.31 219.418 933.589 218.926 933.776 218.359C933.975 217.792 934.074 217.168 934.074 216.487Z" fill="#160C56"/>
+<path d="M969.002 200.662V226.376H962.906L952.279 212.536V226.376H945.251V200.662H951.422L961.993 214.445V200.662H969.002Z" fill="#160C56"/>
+<path d="M978.464 226.376V206.599H971.771V200.662H992.13V206.599H985.455V226.376H978.464Z" fill="#160C56"/>
+<path d="M1017.23 200.7L1020.77 216.412H1020.84L1025.32 200.643H1032.74L1024.25 226.376H1017.52L1013.53 212.8L1009.53 226.376H1002.8L994.314 200.643H1001.73L1006.23 216.412H1006.32L1009.82 200.7H1017.23Z" fill="#160C56"/>
+<path d="M1032.36 213.481C1032.36 211.603 1032.72 209.851 1033.46 208.225C1034.19 206.586 1035.18 205.155 1036.44 203.933C1037.71 202.71 1039.19 201.752 1040.88 201.059C1042.58 200.353 1044.4 200 1046.34 200C1048.26 200 1050.07 200.353 1051.76 201.059C1053.47 201.752 1054.95 202.71 1056.22 203.933C1057.49 205.155 1058.49 206.586 1059.22 208.225C1059.95 209.851 1060.32 211.603 1060.32 213.481C1060.32 215.347 1059.95 217.105 1059.22 218.756C1058.49 220.395 1057.49 221.826 1056.22 223.048C1054.95 224.271 1053.47 225.235 1051.76 225.941C1050.07 226.647 1048.26 227 1046.34 227C1044.4 227 1042.58 226.647 1040.88 225.941C1039.19 225.235 1037.71 224.271 1036.44 223.048C1035.18 221.826 1034.19 220.395 1033.46 218.756C1032.72 217.105 1032.36 215.347 1032.36 213.481ZM1039.37 213.5C1039.37 214.571 1039.55 215.574 1039.91 216.506C1040.28 217.426 1040.78 218.227 1041.4 218.908C1042.03 219.576 1042.77 220.105 1043.62 220.496C1044.46 220.874 1045.37 221.063 1046.34 221.063C1047.31 221.063 1048.21 220.874 1049.06 220.496C1049.92 220.105 1050.66 219.576 1051.28 218.908C1051.91 218.227 1052.41 217.426 1052.77 216.506C1053.13 215.574 1053.31 214.571 1053.31 213.5C1053.31 212.416 1053.13 211.414 1052.77 210.494C1052.41 209.574 1051.91 208.779 1051.28 208.111C1050.66 207.431 1049.92 206.901 1049.06 206.523C1048.21 206.132 1047.31 205.937 1046.34 205.937C1045.37 205.937 1044.46 206.132 1043.62 206.523C1042.77 206.901 1042.03 207.431 1041.4 208.111C1040.78 208.779 1040.28 209.574 1039.91 210.494C1039.55 211.414 1039.37 212.416 1039.37 213.5Z" fill="#160C56"/>
+<path d="M1070.98 212.479H1074.91C1075.28 212.479 1075.64 212.41 1075.97 212.271C1076.31 212.132 1076.6 211.937 1076.85 211.685C1077.1 211.433 1077.29 211.13 1077.43 210.777C1077.57 210.412 1077.65 210.008 1077.65 209.567C1077.65 209.151 1077.57 208.761 1077.43 208.395C1077.29 208.029 1077.1 207.714 1076.85 207.45C1076.6 207.185 1076.31 206.977 1075.97 206.826C1075.65 206.674 1075.3 206.599 1074.93 206.599H1070.98V212.479ZM1085.31 226.376H1077.28L1073.32 218.416H1070.98V226.376H1063.95V200.662H1075.23C1076.61 200.662 1077.87 200.882 1079.03 201.324C1080.18 201.752 1081.18 202.357 1082.01 203.139C1082.86 203.92 1083.51 204.859 1083.97 205.956C1084.44 207.04 1084.68 208.244 1084.68 209.567C1084.68 211.37 1084.27 212.933 1083.47 214.256C1082.67 215.567 1081.58 216.582 1080.2 217.3L1085.31 226.376Z" fill="#160C56"/>
+<path d="M1095.13 200.662V212.158L1103.55 200.662H1111.7L1102.94 212.139L1112 226.376H1103.72L1098.35 217.244L1095.13 221.555V226.376H1088.1V200.662H1095.13Z" fill="#160C56"/>
+<path d="M1069.64 111.476V95.0121H1069.6V71.7441H1094.05V95.0121H1112.27V111.476H1094.05V158.936C1094.05 163.22 1096.4 165.656 1100.85 165.656H1111.85V182.96H1094.3C1078.93 182.96 1069.6 174.812 1069.6 159.692V111.476H1069.64Z" fill="#160C56"/>
+<path d="M969.082 182.96V95.012H974.77L992.77 105.344H994.45C997.39 100.724 1004.45 93.332 1020.74 93.332C1040.73 93.332 1053.33 104.504 1053.33 125.168V182.96H1028.55V126.596C1028.55 116.516 1022.76 111.56 1013.43 111.56C1002.85 111.56 993.778 117.44 993.778 132.308V182.96H969.082Z" fill="#160C56"/>
+<path d="M951.567 95.012V182.96H945.879L927.879 172.712H926.199C923.259 177.332 916.119 184.724 900.243 184.724C880.503 184.724 867.903 173.552 867.903 152.888V95.012H892.599V151.376C892.599 161.456 898.479 166.496 907.551 166.496C917.799 166.496 926.871 160.532 926.871 145.664V95.012H951.567Z" fill="#160C56"/>
+<path d="M803.177 182.96V95.012H806.865L826.865 106.368H828.545C832.073 96.792 839.717 92.156 857.525 94.088V114.752C840.221 112.316 827.873 116.936 827.873 138.188V182.96H803.177Z" fill="#160C56"/>
+<path d="M694.529 137.012C694.529 107.276 712.589 93.332 734.681 93.332C748.961 93.332 756.773 98.96 760.301 104.168H761.981V95.012H785.669V179.348C785.669 204.968 769.541 218.576 741.065 218.576C713.009 218.576 698.141 205.22 696.797 188.336V185.816H719.309C719.897 194.636 726.281 201.356 740.561 201.356C754.505 201.356 760.889 194.552 760.889 181.616V171.116H759.209C755.261 175.82 747.869 180.692 734.681 180.692C712.589 180.692 694.529 166.664 694.529 137.012ZM719.477 137.012C719.477 153.728 727.961 162.38 740.729 162.38C753.581 162.38 761.981 153.728 761.981 137.012C761.981 120.212 753.581 111.56 740.729 111.56C727.961 111.56 719.477 120.212 719.477 137.012Z" fill="#160C56"/>
+<path d="M627.14 121.472H604.796V118.952C606.728 103.076 621.512 92.996 644.192 92.996C666.956 92.996 682.244 103.076 682.244 126.512V161.288C682.244 169.856 682.748 175.736 684.764 180.44V182.96H677.496L660.236 173.384H658.556C654.272 179.096 647.384 184.472 632.516 184.472C613.784 184.472 599.756 174.224 599.756 157.508C599.756 139.952 613.28 132.476 630.248 130.712L650.24 128.78C656.12 128.192 659.06 126.344 659.06 121.388C659.06 113.996 653.516 109.964 643.688 109.964C634.112 109.964 627.476 113.912 627.14 121.472ZM623.948 156.332C623.948 163.388 629.408 167.756 638.564 167.756C647.804 167.756 658.892 162.548 658.892 146.504V141.296H657.212C654.524 142.724 651.5 143.48 646.124 144.068L636.632 145.076C629.324 145.832 623.948 148.94 623.948 156.332Z" fill="#160C56"/>
+<path d="M541.359 182.96V95.012H545.047L565.047 106.368H566.727C570.255 96.792 577.899 92.156 595.707 94.088V114.752C578.403 112.316 566.055 116.936 566.055 138.188V182.96H541.359Z" fill="#160C56"/>
+<path d="M475.961 182.96V95.012H479.649L499.649 106.368H501.329C504.857 96.792 512.501 92.156 530.309 94.088V114.752C513.005 112.316 500.657 116.936 500.657 138.188V182.96H475.961Z" fill="#160C56"/>
+<path d="M375.68 138.944C375.68 108.284 393.32 92.996 420.284 92.996C447.08 92.996 462.788 108.704 462.788 135.752V144.992H399.284C399.62 158.18 406.844 167.588 420.2 167.588C433.304 167.588 438.344 160.448 439.52 154.736H461.024V157.256C458.504 169.352 447.836 184.976 420.536 184.976C393.32 184.976 375.68 169.604 375.68 138.944ZM399.536 129.368H439.604C439.436 118.364 433.472 110.132 420.032 110.132C406.928 110.132 400.544 118.7 399.536 129.368Z" fill="#160C56"/>
+<path d="M282 81.152V62H389.352V81.152H348.612V182.96H322.74V81.152H282Z" fill="#160C56"/>
+</svg>
diff --git a/docs-starlight/src/assets/horizontal-logo-light.svg b/docs-starlight/src/assets/horizontal-logo-light.svg
new file mode 100644
index 00000000..334d2473
--- /dev/null
+++ b/docs-starlight/src/assets/horizontal-logo-light.svg
@@ -0,0 +1,30 @@
+<svg width="1129" height="264" viewBox="0 0 1129 264" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M128.433 0.757812L239.593 64.7578V192.758L128.433 256.758L17.2734 192.758V64.7578L128.433 0.757812ZM227.593 71.6668L128.433 14.5757L29.2734 71.6668V185.849L128.433 242.94L227.593 185.849V71.6668Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M128.433 242.938V185.847V128.756L78.8534 100.211L29.2734 71.6653V128.756V185.847L128.433 242.938Z" fill="white"/>
+<path d="M178.013 214.395L227.593 185.849L178.013 157.304L128.433 185.849V242.94L178.013 214.395Z" fill="#87E0E1"/>
+<path d="M128.433 128.758V185.849L178.013 157.304L128.433 128.758Z" fill="#1B46DD"/>
+<path d="M178.013 100.213L128.433 128.758L178.013 157.304L227.593 128.758L178.013 100.213Z" fill="#B068E9"/>
+<path d="M178.013 43.1217L128.433 14.5762L78.8534 43.1217L29.2734 71.6672L78.8534 100.213L128.433 71.6672L178.013 100.213L227.593 71.6672L178.013 43.1217Z" fill="#F9DB4E"/>
+<path d="M128.433 128.758L178.013 100.213L128.433 71.6672L78.8534 100.213L128.433 128.758Z" fill="#E94A5D"/>
+<path d="M810.028 215.926V220.766H814.82C815.031 220.766 815.273 220.722 815.547 220.634C815.82 220.546 816.075 220.407 816.311 220.218C816.56 220.029 816.771 219.777 816.945 219.462C817.119 219.147 817.206 218.762 817.206 218.308C817.206 217.93 817.138 217.596 817.001 217.306C816.877 217.004 816.703 216.752 816.479 216.55C816.268 216.348 816.013 216.197 815.715 216.096C815.429 215.983 815.124 215.926 814.801 215.926H810.028ZM814.074 206.415C814.074 206.415 812.726 206.415 810.028 206.415V210.726H814.055C814.267 210.726 814.484 210.682 814.708 210.594C814.932 210.493 815.131 210.355 815.305 210.178C815.491 209.989 815.64 209.762 815.752 209.497C815.876 209.233 815.938 208.93 815.938 208.59C815.938 208.262 815.882 207.966 815.771 207.701C815.659 207.436 815.51 207.21 815.323 207.02C815.149 206.831 814.95 206.686 814.727 206.586C814.515 206.472 814.298 206.415 814.074 206.415ZM815.547 226.439H803V200.724H814.484C815.814 200.724 817.007 200.882 818.064 201.197C819.12 201.512 820.021 201.978 820.767 202.596C821.513 203.214 822.084 203.976 822.482 204.884C822.88 205.791 823.079 206.844 823.079 208.041C823.079 208.558 822.992 209.069 822.818 209.573C822.656 210.077 822.439 210.544 822.165 210.972C821.892 211.388 821.575 211.76 821.214 212.088C820.866 212.403 820.506 212.636 820.133 212.787C820.705 213.014 821.252 213.323 821.774 213.714C822.296 214.092 822.756 214.533 823.153 215.037C823.551 215.529 823.868 216.077 824.104 216.682C824.34 217.287 824.458 217.93 824.458 218.611C824.458 220.073 824.191 221.302 823.657 222.298C823.135 223.294 822.451 224.1 821.606 224.718C820.761 225.336 819.804 225.777 818.735 226.041C817.678 226.306 816.616 226.439 815.547 226.439Z" fill="white"/>
+<path d="M840.893 200.724H849.077L839.494 216.739L839.513 226.439H832.485V216.777L822.958 200.724H831.086L835.971 210.462H836.027L840.893 200.724Z" fill="white"/>
+<path d="M877.528 217.42L877.547 212.428H890.672C890.784 214.634 890.535 216.638 889.926 218.441C889.33 220.231 888.447 221.768 887.279 223.054C886.123 224.327 884.731 225.317 883.103 226.023C881.475 226.716 879.697 227.062 877.771 227.062C875.832 227.062 874.011 226.71 872.308 226.004C870.618 225.298 869.139 224.334 867.871 223.111C866.616 221.888 865.622 220.457 864.888 218.819C864.155 217.168 863.788 215.409 863.788 213.544C863.788 211.665 864.155 209.913 864.888 208.287C865.622 206.649 866.616 205.218 867.871 203.995C869.139 202.773 870.618 201.815 872.308 201.121C874.011 200.415 875.832 200.062 877.771 200.062C879.722 200.062 881.543 200.415 883.233 201.121C884.936 201.827 886.44 202.817 887.745 204.09L883.177 208.722C882.568 207.89 881.798 207.228 880.866 206.737C879.933 206.245 878.902 205.999 877.771 205.999C876.801 205.999 875.894 206.195 875.049 206.586C874.204 206.964 873.464 207.493 872.83 208.174C872.209 208.842 871.712 209.636 871.339 210.556C870.978 211.476 870.798 212.478 870.798 213.562C870.798 214.634 870.978 215.636 871.339 216.569C871.712 217.489 872.209 218.289 872.83 218.97C873.464 219.638 874.204 220.168 875.049 220.558C875.894 220.936 876.801 221.126 877.771 221.126C879.523 221.126 880.872 220.798 881.816 220.142C882.761 219.474 883.389 218.567 883.699 217.42C884.01 216.273 877.528 217.42 877.528 217.42Z" fill="white"/>
+<path d="M901.401 212.541H905.335C905.708 212.541 906.062 212.472 906.398 212.334C906.733 212.195 907.025 211.999 907.274 211.747C907.523 211.495 907.715 211.193 907.852 210.84C908.001 210.474 908.076 210.071 908.076 209.63C908.076 209.214 908.001 208.823 907.852 208.457C907.715 208.092 907.523 207.777 907.274 207.512C907.025 207.247 906.733 207.039 906.398 206.888C906.075 206.737 905.727 206.661 905.354 206.661H901.401V212.541ZM915.738 226.439H907.703L903.75 218.478H901.401V226.439H894.373V200.724H905.652C907.032 200.724 908.299 200.945 909.455 201.386C910.611 201.815 911.605 202.42 912.438 203.201C913.283 203.983 913.936 204.922 914.396 206.018C914.868 207.102 915.104 208.306 915.104 209.63C915.104 211.432 914.7 212.995 913.892 214.319C913.097 215.63 912.009 216.644 910.63 217.363L915.738 226.439Z" fill="white"/>
+<path d="M934.074 216.55C934.074 216.55 934.074 211.275 934.074 200.724H941.103V216.531C941.103 218.044 940.835 219.449 940.301 220.747C939.779 222.033 939.021 223.142 938.026 224.075C937.045 225.008 935.845 225.739 934.428 226.268C933.024 226.798 931.445 227.062 929.693 227.062C928.077 227.062 926.573 226.823 925.181 226.344C923.789 225.852 922.577 225.153 921.546 224.245C920.527 223.338 919.725 222.235 919.141 220.936C918.557 219.626 918.265 218.157 918.265 216.531V200.724H925.274V216.569C925.274 217.237 925.368 217.855 925.554 218.422C925.74 218.989 926.02 219.481 926.393 219.897C926.766 220.3 927.226 220.615 927.773 220.842C928.332 221.069 928.972 221.182 929.693 221.182C930.401 221.182 931.029 221.069 931.576 220.842C932.123 220.615 932.576 220.3 932.937 219.897C933.31 219.481 933.589 218.989 933.776 218.422C933.975 217.855 934.074 217.231 934.074 216.55Z" fill="white"/>
+<path d="M969.002 200.724V226.439H962.906L952.279 212.598V226.439H945.251V200.724H951.422L961.993 214.508V200.724H969.002Z" fill="white"/>
+<path d="M978.464 226.439V206.661H971.771V200.724H992.13V206.661H985.455V226.439H978.464Z" fill="white"/>
+<path d="M1017.23 200.762L1020.77 216.474H1020.84L1025.32 200.705H1032.74L1024.25 226.439H1017.52L1013.53 212.863L1009.53 226.439H1002.8L994.314 200.705H1001.73L1006.23 216.474H1006.32L1009.82 200.762H1017.23Z" fill="white"/>
+<path d="M1032.36 213.544C1032.36 211.665 1032.72 209.913 1033.46 208.287C1034.19 206.649 1035.18 205.218 1036.44 203.995C1037.71 202.773 1039.19 201.815 1040.88 201.121C1042.58 200.415 1044.4 200.062 1046.34 200.062C1048.26 200.062 1050.07 200.415 1051.76 201.121C1053.47 201.815 1054.95 202.773 1056.22 203.995C1057.49 205.218 1058.49 206.649 1059.22 208.287C1059.95 209.913 1060.32 211.665 1060.32 213.544C1060.32 215.409 1059.95 217.168 1059.22 218.819C1058.49 220.457 1057.49 221.888 1056.22 223.111C1054.95 224.334 1053.47 225.298 1051.76 226.004C1050.07 226.71 1048.26 227.062 1046.34 227.062C1044.4 227.062 1042.58 226.71 1040.88 226.004C1039.19 225.298 1037.71 224.334 1036.44 223.111C1035.18 221.888 1034.19 220.457 1033.46 218.819C1032.72 217.168 1032.36 215.409 1032.36 213.544ZM1039.37 213.562C1039.37 214.634 1039.55 215.636 1039.91 216.569C1040.28 217.489 1040.78 218.289 1041.4 218.97C1042.03 219.638 1042.77 220.168 1043.62 220.558C1044.46 220.936 1045.37 221.126 1046.34 221.126C1047.31 221.126 1048.21 220.936 1049.06 220.558C1049.92 220.168 1050.66 219.638 1051.28 218.97C1051.91 218.289 1052.41 217.489 1052.77 216.569C1053.13 215.636 1053.31 214.634 1053.31 213.562C1053.31 212.478 1053.13 211.476 1052.77 210.556C1052.41 209.636 1051.91 208.842 1051.28 208.174C1050.66 207.493 1049.92 206.964 1049.06 206.586C1048.21 206.195 1047.31 205.999 1046.34 205.999C1045.37 205.999 1044.46 206.195 1043.62 206.586C1042.77 206.964 1042.03 207.493 1041.4 208.174C1040.78 208.842 1040.28 209.636 1039.91 210.556C1039.55 211.476 1039.37 212.478 1039.37 213.562Z" fill="white"/>
+<path d="M1070.98 212.541H1074.91C1075.28 212.541 1075.64 212.472 1075.97 212.334C1076.31 212.195 1076.6 211.999 1076.85 211.747C1077.1 211.495 1077.29 211.193 1077.43 210.84C1077.57 210.474 1077.65 210.071 1077.65 209.63C1077.65 209.214 1077.57 208.823 1077.43 208.457C1077.29 208.092 1077.1 207.777 1076.85 207.512C1076.6 207.247 1076.31 207.039 1075.97 206.888C1075.65 206.737 1075.3 206.661 1074.93 206.661H1070.98V212.541ZM1085.31 226.439H1077.28L1073.32 218.478H1070.98V226.439H1063.95V200.724H1075.23C1076.61 200.724 1077.87 200.945 1079.03 201.386C1080.18 201.815 1081.18 202.42 1082.01 203.201C1082.86 203.983 1083.51 204.922 1083.97 206.018C1084.44 207.102 1084.68 208.306 1084.68 209.63C1084.68 211.432 1084.27 212.995 1083.47 214.319C1082.67 215.63 1081.58 216.644 1080.2 217.363L1085.31 226.439Z" fill="white"/>
+<path d="M1095.13 200.724V212.22L1103.55 200.724H1111.7L1102.94 212.201L1112 226.439H1103.72L1098.35 217.306L1095.13 221.617V226.439H1088.1V200.724H1095.13Z" fill="white"/>
+<path d="M1069.64 111.539V95.0746H1069.6V71.8066H1094.05V95.0746H1112.27V111.539H1094.05V158.999C1094.05 163.283 1096.4 165.719 1100.85 165.719H1111.85V183.023H1094.3C1078.93 183.023 1069.6 174.875 1069.6 159.755V111.539H1069.64Z" fill="white"/>
+<path d="M969.082 183.023V95.0745H974.77L992.77 105.407H994.45C997.39 100.787 1004.45 93.3945 1020.74 93.3945C1040.73 93.3945 1053.33 104.567 1053.33 125.231V183.023H1028.55V126.659C1028.55 116.579 1022.76 111.623 1013.43 111.623C1002.85 111.623 993.778 117.503 993.778 132.371V183.023H969.082Z" fill="white"/>
+<path d="M951.567 95.0745V183.023H945.879L927.879 172.775H926.199C923.259 177.395 916.119 184.787 900.243 184.787C880.503 184.787 867.903 173.615 867.903 152.951V95.0745H892.599V151.439C892.599 161.519 898.479 166.559 907.551 166.559C917.799 166.559 926.871 160.595 926.871 145.727V95.0745H951.567Z" fill="white"/>
+<path d="M803.177 183.023V95.0745H806.865L826.865 106.431H828.545C832.073 96.8545 839.717 92.2185 857.525 94.1505V114.815C840.221 112.379 827.873 116.999 827.873 138.251V183.023H803.177Z" fill="white"/>
+<path d="M694.529 137.075C694.529 107.339 712.589 93.3945 734.681 93.3945C748.961 93.3945 756.773 99.0225 760.301 104.231H761.981V95.0745H785.669V179.411C785.669 205.031 769.541 218.639 741.065 218.639C713.009 218.639 698.141 205.283 696.797 188.399V185.879H719.309C719.897 194.699 726.281 201.419 740.561 201.419C754.505 201.419 760.889 194.615 760.889 181.679V171.179H759.209C755.261 175.883 747.869 180.755 734.681 180.755C712.589 180.755 694.529 166.727 694.529 137.075ZM719.477 137.075C719.477 153.791 727.961 162.443 740.729 162.443C753.581 162.443 761.981 153.791 761.981 137.075C761.981 120.275 753.581 111.623 740.729 111.623C727.961 111.623 719.477 120.275 719.477 137.075Z" fill="white"/>
+<path d="M627.14 121.535H604.796V119.015C606.728 103.139 621.512 93.0585 644.192 93.0585C666.956 93.0585 682.244 103.139 682.244 126.575V161.351C682.244 169.919 682.748 175.799 684.764 180.503V183.023H677.496L660.236 173.447H658.556C654.272 179.159 647.384 184.535 632.516 184.535C613.784 184.535 599.756 174.287 599.756 157.571C599.756 140.015 613.28 132.539 630.248 130.775L650.24 128.843C656.12 128.255 659.06 126.407 659.06 121.451C659.06 114.059 653.516 110.027 643.688 110.027C634.112 110.027 627.476 113.975 627.14 121.535ZM623.948 156.395C623.948 163.451 629.408 167.819 638.564 167.819C647.804 167.819 658.892 162.611 658.892 146.567V141.359H657.212C654.524 142.787 651.5 143.543 646.124 144.131L636.632 145.139C629.324 145.895 623.948 149.003 623.948 156.395Z" fill="white"/>
+<path d="M541.359 183.023V95.0745H545.047L565.047 106.431H566.727C570.255 96.8545 577.899 92.2185 595.707 94.1505V114.815C578.403 112.379 566.055 116.999 566.055 138.251V183.023H541.359Z" fill="white"/>
+<path d="M475.961 183.023V95.0745H479.649L499.649 106.431H501.329C504.857 96.8545 512.501 92.2185 530.309 94.1505V114.815C513.005 112.379 500.657 116.999 500.657 138.251V183.023H475.961Z" fill="white"/>
+<path d="M375.68 139.007C375.68 108.347 393.32 93.0585 420.284 93.0585C447.08 93.0585 462.788 108.767 462.788 135.815V145.055H399.284C399.62 158.243 406.844 167.651 420.2 167.651C433.304 167.651 438.344 160.511 439.52 154.799H461.024V157.319C458.504 169.415 447.836 185.039 420.536 185.039C393.32 185.039 375.68 169.667 375.68 139.007ZM399.536 129.431H439.604C439.436 118.427 433.472 110.195 420.032 110.195C406.928 110.195 400.544 118.763 399.536 129.431Z" fill="white"/>
+<path d="M282 81.2145V62.0625H389.352V81.2145H348.612V183.023H322.74V81.2145H282Z" fill="white"/>
+</svg>
diff --git a/docs-starlight/src/assets/pipelines.svg b/docs-starlight/src/assets/pipelines.svg
new file mode 100644
index 00000000..799ef27d
--- /dev/null
+++ b/docs-starlight/src/assets/pipelines.svg
@@ -0,0 +1,11 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_295_4718)">
+<rect x="0.0834961" y="8.11084" width="16" height="1" fill="#B88CC0"/>
+<path d="M10.8897 10.4864C11.2606 9.93136 11.4585 9.27884 11.4585 8.61133C11.4585 7.71622 11.1029 6.85778 10.47 6.22484C9.83705 5.59191 8.9786 5.23633 8.0835 5.23633C7.41598 5.23633 6.76346 5.43427 6.20845 5.80512C5.65343 6.17597 5.22085 6.70307 4.9654 7.31977C4.70996 7.93647 4.64312 8.61507 4.77335 9.26976C4.90357 9.92444 5.22501 10.5258 5.69701 10.9978C6.16901 11.4698 6.77038 11.7913 7.42507 11.9215C8.07975 12.0517 8.75835 11.9849 9.37505 11.7294C9.99175 11.474 10.5189 11.0414 10.8897 10.4864Z" fill="#B88CC0" stroke="#B88CC0" stroke-width="2.25"/>
+</g>
+<defs>
+<clipPath id="clip0_295_4718">
+<rect width="16" height="16" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/docs-starlight/src/components/Header.astro b/docs-starlight/src/components/Header.astro
new file mode 100644
index 00000000..e096f60a
--- /dev/null
+++ b/docs-starlight/src/components/Header.astro
@@ -0,0 +1,237 @@
+---
+import config from 'virtual:starlight/user-config';
+import type { Props } from '@astrojs/starlight/props';
+
+import LanguageSelect from 'virtual:starlight/components/LanguageSelect';
+import Search from 'virtual:starlight/components/Search';
+import SiteTitle from 'virtual:starlight/components/SiteTitle';
+import SocialIcons from 'virtual:starlight/components/SocialIcons';
+import ThemeSelect from 'virtual:starlight/components/ThemeSelect';
+
+import PipelinesLogo from '../assets/pipelines.svg';
+import { Image } from 'astro:assets';
+
+/**
+ * Render the `Search` component if Pagefind is enabled or the default search component has been overridden.
+ */
+const shouldRenderSearch =
+	config.pagefind || config.components.Search !== '@astrojs/starlight/components/Search.astro';
+
+let starCountDisplay = '8.6k';
+
+try {
+	const response = await fetch('https://api.github.com/repos/gruntwork-io/terragrunt');
+	if (response.ok) {
+		const data = await response.json();
+		const stars = data.stargazers_count;
+		if (typeof stars === 'number') {
+			starCountDisplay = (stars / 1000).toFixed(1) + 'k';
+		}
+	} else {
+		console.error('Failed to fetch GitHub stars:', response.status, await response.text());
+	}
+} catch (error) {
+	console.error('Error fetching GitHub stars:', error);
+}
+---
+
+<div class="header sl-flex">
+	<!-- <div class="title-wrapper sl-flex"> -->
+		<SiteTitle {...Astro.props} />
+	<!-- </div> -->
+	<div class="sl-flex print:hidden">
+		{shouldRenderSearch && <Search {...Astro.props} />}
+	</div>
+	<div class="sl-hidden md:sl-flex print:hidden right-group">
+		<div class="sl-flex social-icons">
+			<a href="https://github.com/gruntwork-io/terragrunt" class="github-stars-btn" target="_blank" rel="noopener noreferrer">
+				<span class="github-icon">
+					<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
+				</span>
+				<span class="github-count">{starCountDisplay}</span>
+				<span class="github-star"><svg viewBox="0 0 24 24" fill="currentColor" width="16" height="16"><path d="M12 .587l3.668 7.568 8.332 1.151-6.064 5.828 1.48 8.279-7.416-3.966-7.417 3.966 1.481-8.279-6.064-5.828 8.332-1.151z"/></svg></span>
+			</a>
+			<SocialIcons {...Astro.props} />
+		</div>
+		<div class="sl-hidden lg:sl-flex pipelines-pill">
+			<a href="https://www.gruntwork.io/platform/pipelines" class="pipeline-pill">
+				<span class="pipeline-icon">
+					<Image src={PipelinesLogo} width="24" height="24" class="product-icon" alt="Pipeline" />
+				</span>
+				<span class="pipeline-text">
+					<span class="pipeline-title">Automate your pipeline</span>
+					<span class="pipeline-subtitle">CI/CD built for Terragrunt</span>
+				</span>
+				<span class="pipeline-arrow">
+					<svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M8 6l4 4-4 4" stroke="#A78BFA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
+				</span>
+			</a>
+		</div>
+		<div class="sl-flex social-icons">
+			<a href="https://www.gruntwork.io/services/terragrunt" class="support-btn">
+				<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="currentColor" style="margin-right: 0.5rem;">
+					<path d="M12 1a9 9 0 0 0-9 9v7c0 1.66 1.34 3 3 3h3v-8H5v-2c0-3.87 3.13-7 7-7s7 3.13 7 7v2h-4v8h4v1h-7v2h6c1.66 0 3-1.34 3-3V10a9 9 0 0 0-9-9z"/>
+				</svg>
+				Support
+				<span class="support-arrow">
+					<svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M8 6l4 4-4 4" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
+				</span>
+			</a>
+		</div>
+		<ThemeSelect {...Astro.props} />
+		<LanguageSelect {...Astro.props} />
+	</div>
+</div>
+
+<style>
+	.header {
+		gap: var(--sl-nav-gap);
+		justify-content: space-between;
+		align-items: center;
+		height: 100%;
+	}
+
+	.right-group,
+	.social-icons {
+		gap: 1rem;
+		align-items: center;
+	}
+	.social-icons::after {
+		content: '';
+		height: 2rem;
+		border-inline-end: 1px solid var(--sl-color-gray-5);
+	}
+
+	@media (min-width: 50rem) {
+		:global(:root[data-has-sidebar]) {
+			--__sidebar-pad: calc(2 * var(--sl-nav-pad-x));
+		}
+		:global(:root:not([data-has-toc])) {
+			--__toc-width: 0rem;
+		}
+		.header {
+			--__sidebar-width: max(0rem, var(--sl-content-inline-start, 0rem) - var(--sl-nav-pad-x));
+			--__main-column-fr: calc(
+				(
+						100% + var(--__sidebar-pad, 0rem) - var(--__toc-width, var(--sl-sidebar-width)) -
+							(2 * var(--__toc-width, var(--sl-nav-pad-x))) - var(--sl-content-inline-start, 0rem) -
+							var(--sl-content-width)
+					) / 2
+			);
+			display: grid;
+			grid-template-columns:
+                /* 1 (site title): runs up until the main content column's left edge or the width of the title, whichever is the largest  */
+				minmax(
+					calc(var(--__sidebar-width) + max(0rem, var(--__main-column-fr) - var(--sl-nav-gap))),
+					auto
+				)
+				/* 2 (search box): all free space that is available. */
+				1fr
+				/* 3 (right items): use the space that these need. */
+				auto;
+			align-content: center;
+		}
+	}
+
+	.pipeline-pill {
+		display: flex;
+		align-items: center;
+		/* background: rgba(167, 139, 250, 0.08); */
+		border-radius: 999px;
+		padding: 0.5rem 1.25rem 0.5rem 0.5rem;
+		gap: 0.75rem;
+		text-decoration: none;
+		transition: background 0.2s;
+	}
+	.pipeline-pill:hover {
+		background: rgba(167, 139, 250, 0.18);
+	}
+	.pipeline-icon {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+	.pipeline-text {
+		display: flex;
+		flex-direction: column;
+		line-height: 1.1;
+	}
+	.pipeline-title {
+		font-weight: 600;
+		font-size: 1rem;
+		color: var(--sl-color-text);
+	}
+	.pipeline-subtitle {
+		font-size: 0.85rem;
+		color: var(--sl-color-gray-2);
+	}
+	.pipeline-arrow {
+		display: flex;
+		align-items: center;
+		margin-left: 0.5rem;
+	}
+	.support-btn {
+		display: flex;
+		align-items: center;
+		background: #7c3aed;
+		color: #fff;
+		border-radius: 999px;
+		padding: 0.5rem 1.5rem;
+		font-weight: 600;
+		font-size: 1rem;
+		text-decoration: none;
+		transition: background 0.2s;
+		gap: 0.5rem;
+		box-shadow: 0 1px 4px rgba(124, 58, 237, 0.08);
+	}
+	.support-btn:hover {
+		background: #5b21b6;
+	}
+	.support-arrow {
+		display: flex;
+		align-items: center;
+		margin-left: 0.25rem;
+	}
+
+	.github-stars-btn {
+		display: flex;
+		align-items: center;
+		border: 1px solid var(--sl-color-gray-5);
+		color: var(--sl-color-text);
+		border-radius: 999px;
+		padding: 0.35rem 0.75rem;
+		font-weight: 500;
+		font-size: 0.9rem;
+		text-decoration: none;
+		transition: background 0.2s, border-color 0.2s;
+		gap: 0.5rem;
+		white-space: nowrap;
+	}
+	.github-stars-btn:hover {
+		border-color: var(--sl-color-gray-4);
+		background: var(--sl-color-hover);
+	}
+	.github-icon svg {
+		width: 16px;
+		height: 16px;
+		vertical-align: middle;
+		display: flex;
+		align-items: center;
+		color: var(--sl-color-accent-high);
+	}
+	.github-count {
+		font-weight: 600;
+		vertical-align: middle;
+		display: flex;
+		align-items: center;
+		color: var(--sl-color-accent-high);
+	}
+
+	.github-star {
+		display: flex;
+		vertical-align: middle;
+		align-items: center;
+		color: var(--sl-color-accent-high);
+		transform: translateY(-1.5px);
+	}
+</style>
diff --git a/docs-starlight/src/components/SiteTitle.astro b/docs-starlight/src/components/SiteTitle.astro
new file mode 100644
index 00000000..76c6f685
--- /dev/null
+++ b/docs-starlight/src/components/SiteTitle.astro
@@ -0,0 +1,62 @@
+---
+import { logos } from 'virtual:starlight/user-images';
+import config from 'virtual:starlight/user-config';
+import type { Props } from '@astrojs/starlight/props';
+const { siteTitleHref } = Astro.props;
+---
+
+<a href={siteTitleHref} class="site-title sl-flex">
+	{
+		config.logo && logos.dark && (
+			<>
+				<img
+					class:list={{ 'light:sl-hidden print:hidden light-logo': !('src' in config.logo) }}
+					alt={config.logo.alt}
+					src={logos.dark.src}
+					width={logos.dark.width}
+					height={logos.dark.height}
+				/>
+				{/* Show light alternate if a user configure both light and dark logos. */}
+				{!('src' in config.logo) && (
+					<img
+						class="dark:sl-hidden print:block dark-logo"
+						alt={config.logo.alt}
+						src={logos.light?.src}
+						width={logos.light?.width}
+						height={logos.light?.height}
+					/>
+				)}
+			</>
+		)
+	}
+</a>
+
+<style>
+	.site-title {
+		align-items: center;
+		gap: var(--sl-nav-gap);
+		font-size: var(--sl-text-h4);
+		font-weight: 600;
+		color: var(--sl-color-text-accent);
+		text-decoration: none;
+		white-space: nowrap;
+	}
+	img {
+		height: calc(var(--sl-nav-height) - 2 * var(--sl-nav-pad-y));
+		width: auto;
+		max-width: 100%;
+		min-width: var(--sl-nav-height);
+		object-fit: contain;
+		object-position: 0 50%;
+	}
+
+	@media (max-width: 768px) {
+		img.dark-logo {
+			content: url('/src/assets/logo-dark.svg');
+		}
+
+		img.light-logo {
+			content: url('/src/assets/logo-light.svg');
+		}
+	}
+</style>
diff --git a/docs-starlight/src/content/docs/index.mdx b/docs-starlight/src/content/docs/index.mdx
deleted file mode 100644
index b114b618..00000000
--- a/docs-starlight/src/content/docs/index.mdx
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Terragrunt
-description: The flexible Infrastructure as Code orchestrator that allows OpenTofu/Terraform to scale.
-template: splash
-hero:
-  tagline: Flexible orchestrator to scale IaC.
-  image:
-    dark: /src/assets/logo-light.svg
-    light: /src/assets/logo-dark.svg
-  actions:
-    - text: Quick Start
-      link: /docs/getting-started/quick-start
-      icon: rocket
-    - text: Reference
-      link: /docs/reference/hcl
-      icon: open-book
----
diff --git a/docs-starlight/src/layouts/BaseLayout.astro b/docs-starlight/src/layouts/BaseLayout.astro
new file mode 100644
index 00000000..11033162
--- /dev/null
+++ b/docs-starlight/src/layouts/BaseLayout.astro
@@ -0,0 +1,21 @@
+---
+interface Props {
+	title: string;
+}
+
+const { title } = Astro.props;
+---
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta charset="UTF-8" />
+		<meta name="description" content="Terragrunt Homepage" />
+		<meta name="viewport" content="width=device-width" />
+		<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
+		<meta name="generator" content={Astro.generator} />
+		<title>{title}</title>
+	</head>
+	<body class="bg-white text-gray-900 antialiased">
+		<slot />
+	</body>
+</html>
diff --git a/docs-starlight/src/pages/index.astro b/docs-starlight/src/pages/index.astro
new file mode 100644
index 00000000..8c7de830
--- /dev/null
+++ b/docs-starlight/src/pages/index.astro
@@ -0,0 +1,48 @@
+---
+import { Image } from 'astro:assets';
+import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro';
+import DarkLogo from '../assets/logo-dark.svg'
+import LightLogo from '../assets/logo-light.svg'
+import GruntworkLogoBlack from '../assets/gruntwork-logo-mark-black.svg';
+import GruntworkLogoWhite from '../assets/gruntwork-logo-mark-white.svg';
+---
+
+<div class="flex flex-col min-h-screen">
+	<StarlightPage frontmatter={{
+		template: 'splash',
+		title: 'Terragrunt',
+		description: 'Terragrunt is a flexible orchestration tool that allows Infrastructure as Code written in OpenTofu/Terraform to scale.',
+		pagefind: false,
+		hero: {
+			title: 'Terragrunt',
+			tagline: 'Use OpenTofu/Terraform at scale, faster and safer.',
+			image: {
+				dark: LightLogo,
+				light: DarkLogo,
+				alt: 'Terragrunt Logo',
+			},
+			actions: [
+				{
+					text: 'Quick Start',
+					icon: 'rocket',
+					link: '/docs/getting-started/quick-start/'
+				},
+				{
+					text: 'Docs',
+					icon: 'open-book',
+					link: '/docs/reference/hcl/'
+				}
+			]
+		}
+	}}>
+	</StarlightPage>
+
+	<footer class="flex items-center justify-center py-6 px-4 bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-300 mt-auto">
+		<div class="flex items-center gap-[0.5em]">
+			<Image src={GruntworkLogoBlack} alt="Gruntwork Logo" class="w-6 h-6 dark:sl-hidden" />
+			<Image src={GruntworkLogoWhite} alt="Gruntwork Logo" class="w-6 h-6 light:sl-hidden" />
+			<span>&nbsp;From the DevOps experts at&nbsp;</span>
+	    </div>
+		<a href="https://gruntwork.io" class="text-blue-600 dark:text-blue-400 no-underline hover:underline">Gruntwork</a>
+	</footer>
+</div>
diff --git a/docs-starlight/src/styles/global.css b/docs-starlight/src/styles/global.css
new file mode 100644
index 00000000..0e14aa8c
--- /dev/null
+++ b/docs-starlight/src/styles/global.css
@@ -0,0 +1,36 @@
+@layer base, starlight, theme, components, utilities;
+
+@import '@astrojs/starlight-tailwind';
+@import 'tailwindcss/theme.css' layer(theme);
+@import 'tailwindcss/utilities.css' layer(utilities);
+
+@theme {
+  /* Your preferred text font. Starlight uses a system font stack by default. */
+  --font-sans: 'Atkinson Hyperlegible';
+  /* Your preferred code font. Starlight uses system monospace fonts by default. */
+  --font-mono: 'IBM Plex Mono';
+  /* Your preferred accent color. Indigo is closest to Starlight’s defaults. */
+  --color-accent-50: var(--color-indigo-50);
+  --color-accent-100: var(--color-indigo-100);
+  --color-accent-200: var(--color-indigo-200);
+  --color-accent-300: var(--color-indigo-300);
+  --color-accent-400: var(--color-indigo-400);
+  --color-accent-500: var(--color-indigo-500);
+  --color-accent-600: var(--color-indigo-600);
+  --color-accent-700: var(--color-indigo-700);
+  --color-accent-800: var(--color-indigo-800);
+  --color-accent-900: var(--color-indigo-900);
+  --color-accent-950: var(--color-indigo-950);
+  /* Your preferred gray scale. Zinc is closest to Starlight’s defaults. */
+  --color-gray-50: var(--color-zinc-50);
+  --color-gray-100: var(--color-zinc-100);
+  --color-gray-200: var(--color-zinc-200);
+  --color-gray-300: var(--color-zinc-300);
+  --color-gray-400: var(--color-zinc-400);
+  --color-gray-500: var(--color-zinc-500);
+  --color-gray-600: var(--color-zinc-600);
+  --color-gray-700: var(--color-zinc-700);
+  --color-gray-800: var(--color-zinc-800);
+  --color-gray-900: var(--color-zinc-900);
+  --color-gray-950: var(--color-zinc-950);
+}
diff --git a/shell/run_cmd.go b/shell/run_cmd.go
index ce0347c8..3e1f4d99 100644
--- a/shell/run_cmd.go
+++ b/shell/run_cmd.go
@@ -69,6 +69,14 @@ func RunCommandWithOutput(
 			cmdStdout = io.MultiWriter(opts.Writer, &output.Stdout)
 		)
 
+		// Pass the traceparent to the child process if it is available in the context.
+		traceParent := telemetry.TraceParentFromContext(ctx, opts.Telemetry)
+
+		if traceParent != "" {
+			opts.Logger.Debugf("Setting trace parent=%q for command %s", traceParent, fmt.Sprintf("%s %v", command, args))
+			opts.Env[telemetry.TraceParentEnv] = traceParent
+		}
+
 		if suppressStdout {
 			opts.Logger.Debugf("Command output will be suppressed.")
 
diff --git a/telemetry/context.go b/telemetry/context.go
index c72ce712..9aaf9cb6 100644
--- a/telemetry/context.go
+++ b/telemetry/context.go
@@ -1,23 +1,55 @@
 package telemetry
 
-import "context"
+import (
+	"context"
+	"fmt"
 
-const (
-	telemeterContextKey ctxKey = iota
+	"go.opentelemetry.io/otel/trace"
 )
 
-type ctxKey byte
+type contextKey byte
+
+const (
+	telemeterContextKey contextKey = iota
+	TraceParentEnv                 = "TRACEPARENT"
+)
 
-func ContextWithTelemeter(ctx context.Context, tlm *Telemeter) context.Context {
-	return context.WithValue(ctx, telemeterContextKey, tlm)
+// ContextWithTelemeter returns a new context with the provided Telemeter attached.
+func ContextWithTelemeter(ctx context.Context, telemeter *Telemeter) context.Context {
+	return context.WithValue(ctx, telemeterContextKey, telemeter)
 }
 
+// TelemeterFromContext retrieves the Telemeter from the context, or nil if not present.
 func TelemeterFromContext(ctx context.Context) *Telemeter {
 	if val := ctx.Value(telemeterContextKey); val != nil {
-		if val, ok := val.(*Telemeter); ok {
-			return val
+		if telemeter, ok := val.(*Telemeter); ok {
+			return telemeter
 		}
 	}
 
 	return new(Telemeter)
 }
+
+// TraceParentFromContext returns the W3C traceparent header value from the context's span, or an error if not available.
+func TraceParentFromContext(ctx context.Context, telemetry *Options) string {
+	span := trace.SpanFromContext(ctx)
+	spanContext := span.SpanContext()
+
+	if !spanContext.IsValid() {
+		return ""
+	}
+
+	if len(telemetry.TraceParent) > 0 {
+		return telemetry.TraceParent
+	}
+
+	traceID := spanContext.TraceID().String()
+	spanID := spanContext.SpanID().String()
+	flags := "00"
+
+	if spanContext.TraceFlags().IsSampled() {
+		flags = "01"
+	}
+
+	return fmt.Sprintf("00-%s-%s-%s", traceID, spanID, flags)
+}
diff --git a/telemetry/opts.go b/telemetry/opts.go
index 4c295fdd..3e4175b7 100644
--- a/telemetry/opts.go
+++ b/telemetry/opts.go
@@ -8,7 +8,7 @@ type Options struct {
 	TraceExporterHTTPEndpoint string
 	// TraceParent is used as a parent trace context.
 	TraceParent string
-	// MetricExporter is the type of  metrics exporter.
+	// MetricExporter is the type of metrics exporter.
 	MetricExporter string
 	// TraceExporterInsecureEndpoint is useful for collecting traces locally. If set to true, the exporter will not validate the server certificate.
 	TraceExporterInsecureEndpoint bool



Test patch:
diff --git a/test/fixtures/engine/trace-parent/get_traceparent.sh b/test/fixtures/engine/trace-parent/get_traceparent.sh
new file mode 100755
index 00000000..b6126377
--- /dev/null
+++ b/test/fixtures/engine/trace-parent/get_traceparent.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -e
+
+echo "$1 {\"traceparent\": \"${TRACEPARENT}\"}"
diff --git a/test/fixtures/engine/trace-parent/main.tf b/test/fixtures/engine/trace-parent/main.tf
new file mode 100644
index 00000000..7dc9aacc
--- /dev/null
+++ b/test/fixtures/engine/trace-parent/main.tf
@@ -0,0 +1,11 @@
+data "external" "traceparent" {
+  program = ["${path.module}/get_traceparent.sh"]
+
+  query = {
+    nonce = timestamp()
+  }
+}
+
+output "traceparent_value" {
+  value = data.external.traceparent.result["traceparent"]
+}
diff --git a/test/fixtures/engine/trace-parent/terragrunt.hcl b/test/fixtures/engine/trace-parent/terragrunt.hcl
new file mode 100644
index 00000000..1b7bd201
--- /dev/null
+++ b/test/fixtures/engine/trace-parent/terragrunt.hcl
@@ -0,0 +1,13 @@
+terraform {
+  source = "."
+  before_hook "hook_print_traceparent" {
+    commands = ["apply"]
+    execute = ["./get_traceparent.sh", "hook_print_traceparent"]
+  }
+}
+
+engine {
+  source  = "github.com/gruntwork-io/terragrunt-engine-opentofu"
+  version = "v0.0.16"
+  type    = "rpc"
+}
diff --git a/test/fixtures/trace-parent/get_traceparent.sh b/test/fixtures/trace-parent/get_traceparent.sh
new file mode 100755
index 00000000..b6126377
--- /dev/null
+++ b/test/fixtures/trace-parent/get_traceparent.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -e
+
+echo "$1 {\"traceparent\": \"${TRACEPARENT}\"}"
diff --git a/test/fixtures/trace-parent/main.tf b/test/fixtures/trace-parent/main.tf
new file mode 100644
index 00000000..7dc9aacc
--- /dev/null
+++ b/test/fixtures/trace-parent/main.tf
@@ -0,0 +1,11 @@
+data "external" "traceparent" {
+  program = ["${path.module}/get_traceparent.sh"]
+
+  query = {
+    nonce = timestamp()
+  }
+}
+
+output "traceparent_value" {
+  value = data.external.traceparent.result["traceparent"]
+}
diff --git a/test/fixtures/trace-parent/terragrunt.hcl b/test/fixtures/trace-parent/terragrunt.hcl
new file mode 100644
index 00000000..93e2eb54
--- /dev/null
+++ b/test/fixtures/trace-parent/terragrunt.hcl
@@ -0,0 +1,7 @@
+terraform {
+  source = "."
+  before_hook "hook_print_traceparent" {
+    commands = ["apply"]
+    execute = ["./get_traceparent.sh", "hook_print_traceparent"]
+  }
+}
diff --git a/test/helpers/test_helpers.go b/test/helpers/test_helpers.go
index ab15492a..a4cff81f 100644
--- a/test/helpers/test_helpers.go
+++ b/test/helpers/test_helpers.go
@@ -1,7 +1,39 @@
 package helpers
 
-import "runtime"
+import (
+	"regexp"
+	"runtime"
+	"strings"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
 
 func IsWindows() bool {
 	return runtime.GOOS == "windows"
 }
+
+func ValidateHookTraceParent(t *testing.T, hook, str string) {
+	t.Helper()
+
+	traceparentLine := ""
+
+	for _, line := range strings.Split(str, "\n") {
+		if strings.HasPrefix(line, hook+" {\"traceparent\": \"") {
+			traceparentLine = line
+			break
+		}
+	}
+
+	require.NotEmpty(t, traceparentLine, "Expected "+hook+" output with traceparent value")
+	re := regexp.MustCompile(hook + ` \{"traceparent": "([^"]+)"\}`)
+	matches := re.FindStringSubmatch(traceparentLine)
+
+	const matchesCount = 2
+
+	require.Len(t, matches, matchesCount, "Expected to extract traceparent value from hook output")
+
+	traceparentValue := matches[1]
+	require.NotEmpty(t, traceparentValue, "Traceparent value should not be empty")
+	require.Regexp(t, `^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$`, traceparentValue, "Traceparent value should match W3C traceparent format")
+}
diff --git a/test/integration_engine_test.go b/test/integration_engine_test.go
index e9f3676f..8e10a062 100644
--- a/test/integration_engine_test.go
+++ b/test/integration_engine_test.go
@@ -30,6 +30,7 @@ const (
 	testFixtureOpenTofuEngine       = "fixtures/engine/opentofu-engine"
 	testFixtureOpenTofuRunAll       = "fixtures/engine/opentofu-run-all"
 	testFixtureOpenTofuLatestRunAll = "fixtures/engine/opentofu-latest-run-all"
+	testFixtureEngineTraceParent    = "fixtures/engine/trace-parent"
 
 	envVarExperimental = "TG_EXPERIMENTAL_ENGINE"
 )
@@ -267,6 +268,20 @@ func TestEngineLogLevel(t *testing.T) {
 	assert.Contains(t, stderr, "[DEBUG] plugin exited")
 }
 
+func TestEngineTelemetry(t *testing.T) {
+	t.Setenv("TG_TELEMETRY_TRACE_EXPORTER", "console")
+	t.Setenv(envVarExperimental, "1")
+
+	helpers.CleanupTerraformFolder(t, testFixtureEngineTraceParent)
+	tmpEnvPath := helpers.CopyEnvironment(t, testFixtureEngineTraceParent)
+	rootPath := util.JoinPath(tmpEnvPath, testFixtureEngineTraceParent)
+
+	str, _, err := helpers.RunTerragruntCommandWithOutput(t, "terragrunt apply -auto-approve --non-interactive --working-dir "+rootPath)
+	require.NoError(t, err)
+
+	helpers.ValidateHookTraceParent(t, "hook_print_traceparent", str)
+}
+
 func setupEngineCache(t *testing.T) (string, string) {
 	// create a temporary folder
 	cacheDir := t.TempDir()
diff --git a/test/integration_serial_test.go b/test/integration_serial_test.go
index ebf592f5..c2c29991 100644
--- a/test/integration_serial_test.go
+++ b/test/integration_serial_test.go
@@ -24,7 +24,7 @@ import (
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 
-	print "github.com/gruntwork-io/terragrunt/cli/commands/info/print"
+	"github.com/gruntwork-io/terragrunt/cli/commands/info/print"
 	"github.com/gruntwork-io/terragrunt/config"
 	"github.com/gruntwork-io/terragrunt/tf"
 	"github.com/gruntwork-io/terragrunt/util"
@@ -589,8 +589,9 @@ func TestTerragruntProduceTelemetryTracesWithRootSpanAndTraceID(t *testing.T) {
 	output, _, err := helpers.RunTerragruntCommandWithOutput(t, "terragrunt apply -auto-approve --non-interactive --working-dir "+rootPath)
 	require.NoError(t, err)
 
-	// check that output have Telemetry json output
+	// check that output has Telemetry json output
 	assert.Contains(t, output, "\"SpanContext\":{\"TraceID\":\"b2ff2d54551433d53dd807a6c94e81d1\"")
+	assert.Contains(t, output, "\"Parent\":{\"TraceID\":\"b2ff2d54551433d53dd807a6c94e81d1")
 	assert.Contains(t, output, "\"SpanID\":\"0e6f631d793c718a\"")
 	assert.Contains(t, output, "\"SpanContext\":")
 	assert.Contains(t, output, "\"TraceID\":")
@@ -598,7 +599,7 @@ func TestTerragruntProduceTelemetryTracesWithRootSpanAndTraceID(t *testing.T) {
 	assert.Contains(t, output, "\"Name\":\"hook_after_hook_2\"")
 }
 
-func TestTerragruntProduceTelemetryInCasOfError(t *testing.T) {
+func TestTerragruntProduceTelemetryInCaseOfError(t *testing.T) {
 	if helpers.IsWindows() {
 		t.Skip("Skipping test on Windows since bash script execution is not supported")
 	}
@@ -725,3 +726,63 @@ func TestParseTFLog(t *testing.T) {
 		assert.Contains(t, stderr, "INFO   ["+prefixName+"] "+wrappedBinary()+`: TF_LOG: Go runtime version`)
 	}
 }
+
+func TestTerragruntTelemetryPassTraceParent(t *testing.T) {
+	t.Setenv("TG_TELEMETRY_TRACE_EXPORTER", "console")
+
+	helpers.CleanupTerraformFolder(t, testFixtureTraceParent)
+	tmpEnvPath := helpers.CopyEnvironment(t, testFixtureTraceParent)
+	rootPath := util.JoinPath(tmpEnvPath, testFixtureTraceParent)
+
+	str, _, err := helpers.RunTerragruntCommandWithOutput(t, "terragrunt apply -auto-approve --non-interactive --working-dir "+rootPath)
+	require.NoError(t, err)
+
+	helpers.ValidateHookTraceParent(t, "hook_print_traceparent", str)
+
+	t.Setenv("TG_TELEMETRY_TRACE_EXPORTER", "")
+
+	stdout := bytes.Buffer{}
+	stderr := bytes.Buffer{}
+
+	require.NoError(
+		t,
+		helpers.RunTerragruntCommand(t, "terragrunt output -no-color -json --non-interactive --working-dir "+rootPath, &stdout, &stderr),
+	)
+
+	outputs := map[string]helpers.TerraformOutput{}
+	require.NoError(t, json.Unmarshal(stdout.Bytes(), &outputs))
+	traceparent, found := outputs["traceparent_value"]
+	require.True(t, found)
+	assert.NotEmpty(t, traceparent.Value)
+	require.Regexp(t, `^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$`, traceparent.Value, "Traceparent value should match W3C traceparent format")
+}
+
+func TestTerragruntTelemetryPassTraceParentEnvVariable(t *testing.T) {
+	envParentTrace := "00-b2ff2d54551433d53dd807a666666666-0e6f631d793c718a-01"
+	t.Setenv("TG_TELEMETRY_TRACE_EXPORTER", "console")
+	t.Setenv("TRACEPARENT", envParentTrace)
+
+	helpers.CleanupTerraformFolder(t, testFixtureTraceParent)
+	tmpEnvPath := helpers.CopyEnvironment(t, testFixtureTraceParent)
+	rootPath := util.JoinPath(tmpEnvPath, testFixtureTraceParent)
+
+	_, _, err := helpers.RunTerragruntCommandWithOutput(t, "terragrunt apply -auto-approve --non-interactive --working-dir "+rootPath)
+	require.NoError(t, err)
+
+	t.Setenv("TG_TELEMETRY_TRACE_EXPORTER", "")
+
+	stdout := bytes.Buffer{}
+	stderr := bytes.Buffer{}
+
+	require.NoError(
+		t,
+		helpers.RunTerragruntCommand(t, "terragrunt output -no-color -json --non-interactive --working-dir "+rootPath, &stdout, &stderr),
+	)
+
+	outputs := map[string]helpers.TerraformOutput{}
+	require.NoError(t, json.Unmarshal(stdout.Bytes(), &outputs))
+	traceparent, found := outputs["traceparent_value"]
+	require.True(t, found)
+	assert.NotEmpty(t, traceparent.Value)
+	assert.Equal(t, envParentTrace, traceparent.Value)
+}
diff --git a/test/integration_test.go b/test/integration_test.go
index 364aae9e..32083325 100644
--- a/test/integration_test.go
+++ b/test/integration_test.go
@@ -112,13 +112,13 @@ const (
 	testFixtureCLIFlagHints                   = "fixtures/cli-flag-hints"
 	testFixtureEphemeralInputs                = "fixtures/ephemeral-inputs"
 	testFixtureTfPath                         = "fixtures/tf-path"
+	testFixtureTraceParent                    = "fixtures/trace-parent"
 
 	terraformFolder = ".terraform"
 
 	terraformState = "terraform.tfstate"
 
 	terraformStateBackup = "terraform.tfstate.backup"
-	terragruntCache      = ".terragrunt-cache"
 )
 
 func TestCLIFlagHints(t *testing.T) {