diff --git a/.cursor/rules/namings-rule.mdc b/.cursor/rules/namings-rule.mdc
index 59e14a5967b29..1eefc50ed014d 100644
--- a/.cursor/rules/namings-rule.mdc
+++ b/.cursor/rules/namings-rule.mdc
@@ -45,6 +45,48 @@ Make sure to use correct terms.
- Management APIs
- Orchestration API
- **Embedding**
- - Private embedding
- - Signed embedding
- - Creator Mode
+ - Iframe embedding (the integration approach where Cube content is embedded via iframes)
+ - What you can embed:
+ - Dashboards
+ - Analytics Chat
+ - Creator Mode
+ - Authentication:
+ - Private embedding (auth mode for internal users with Cube accounts)
+ - Signed embedding (auth mode for external/customer-facing applications; required for Creator Mode)
+ - SDK embedding (the integration approach using the React Embed SDK)
+ - Headless embedding (the integration approach using Cube APIs directly — Embed APIs and Core Data APIs)
+
+# Embedding Terminology
+
+When categorizing embedding approaches, use these three parallel terms:
+
+- **Iframe embedding** — drop-in via iframes; Cube ships the full UI
+- **SDK embedding** — via the React Embed SDK; Cube ships components, you compose
+- **Headless embedding** — via Embed APIs and Core Data APIs; you build the UI
+
+Notes:
+- Do not use `-based` suffixes (e.g., "iframe-based embedding", "API-based embedding"). Prefer the bare terms above.
+- Use **Iframe** (capitalized at sentence start, lowercase mid-sentence). Do not use "iFrame".
+- "API-based embedding" is ambiguous because **API** has specific product meaning (Embed APIs, Core Data APIs, Management APIs, Orchestration API). Use **Headless embedding** instead.
+
+## Iframe embedding axes
+
+Iframe embedding has two independent axes:
+
+- **What you embed** (primary axis): Dashboards, Analytics Chat, Creator Mode
+- **Authentication** (secondary, cross-cutting axis): Private embedding, Signed embedding
+
+Compatibility matrix:
+
+| | Private embedding | Signed embedding |
+|------------------|:-----------------:|:----------------:|
+| Dashboards | ✓ | ✓ |
+| Analytics Chat | ✓ | ✓ |
+| Creator Mode | — | ✓ |
+
+Page naming inside the **Iframe embedding** group:
+
+- Do not prefix page titles with "Embed" or "Embedding" — it is redundant under the group label.
+ - Use **Dashboards**, **Analytics Chat**, **Creator Mode** (not "Embed a dashboard", "Embed Analytics Chat", etc.)
+ - Use **Private embedding**, **Signed embedding** for the auth-mode pages (the word "embedding" is part of the product term itself).
+
diff --git a/docs-mintlify/docs.json b/docs-mintlify/docs.json
index 644b01a679b04..cfa7c96a89904 100644
--- a/docs-mintlify/docs.json
+++ b/docs-mintlify/docs.json
@@ -115,7 +115,8 @@
"docs/explore-analyze/dashboards/widgets/controls",
"docs/explore-analyze/dashboards/widgets/ai-summary"
]
- }
+ },
+ "docs/explore-analyze/dashboards/styling"
]
},
"docs/explore-analyze/scheduled-refreshes",
@@ -409,11 +410,23 @@
"group": "Embedding",
"pages": [
"embedding/index",
- "embedding/private-embedding",
- "embedding/signed-embedding",
- "embedding/creator-mode",
- "embedding/react-embed-sdk",
- "embedding/vizard"
+ "embedding/react-embed-sdk"
+ ]
+ },
+ {
+ "group": "Iframe embedding",
+ "pages": [
+ "embedding/iframe/dashboards",
+ "embedding/iframe/analytics-chat",
+ "embedding/iframe/creator-mode",
+ "embedding/iframe/customization",
+ {
+ "group": "Authentication",
+ "pages": [
+ "embedding/iframe/auth/private",
+ "embedding/iframe/auth/signed"
+ ]
+ }
]
},
{
@@ -691,5 +704,17 @@
}
},
"redirects": [
+ {
+ "source": "/embedding/private-embedding",
+ "destination": "/embedding/iframe/auth/private"
+ },
+ {
+ "source": "/embedding/signed-embedding",
+ "destination": "/embedding/iframe/auth/signed"
+ },
+ {
+ "source": "/embedding/creator-mode",
+ "destination": "/embedding/iframe/creator-mode"
+ }
]
}
\ No newline at end of file
diff --git a/docs-mintlify/docs/explore-analyze/dashboards/styling.mdx b/docs-mintlify/docs/explore-analyze/dashboards/styling.mdx
new file mode 100644
index 0000000000000..d055671f7918b
--- /dev/null
+++ b/docs-mintlify/docs/explore-analyze/dashboards/styling.mdx
@@ -0,0 +1,60 @@
+---
+title: Styling
+description: Customize the appearance of a dashboard from the Styling panel in the Dashboard Builder.
+---
+
+You can customize the appearance of any dashboard — background, padding, widget cards, borders, titles, and fonts — from the **Styling** panel in the Dashboard Builder.
+
+Styling is **per-dashboard**: settings are saved to the dashboard's configuration and apply equally to the dashboard in Cube and to its [embedded view](/embedding/iframe/dashboards) (both [private](/embedding/iframe/auth/private) and [signed](/embedding/iframe/auth/signed) embedding).
+
+## Open the Styling panel
+
+1. Open your dashboard
+2. Click **Dashboard Builder** in the top bar
+3. Click the gear icon to open the **Styling** panel
+
+Click **Apply** to preview your changes. Click **Reset** to revert to the defaults. Publish the dashboard for the styling to take effect in embedded views.
+
+## Options
+
+All values accept standard CSS — colors as hex (`#1a1a2e`), `rgb()`, or named colors; lengths as CSS units (e.g., `16px`).
+
+### Background
+
+Settings that apply to the dashboard canvas as a whole.
+
+| Option | Description | Example |
+|--------------|----------------------------------------------------|-------------|
+| Background | Dashboard background color | `#f9f9fb` |
+| Padding | Outer padding around the dashboard grid | `16px` |
+
+### Widgets
+
+Settings that apply to every widget (chart card) on the dashboard.
+
+| Option | Description | Example |
+|--------------|----------------------------------------------------|-------------|
+| Background | Widget card background color | `#ffffff` |
+| Padding | Inner padding within each widget | `12px` |
+
+### Widgets → Borders
+
+Border styling for widget cards.
+
+| Option | Description | Example |
+|----------|----------------------------------------------------------------------|-------------|
+| Color | Border color | `#E1E2E8` |
+| Radius | Corner radius | `8px` |
+| Style | Border style (`solid`, `dashed`, `dotted`, `double`, `none`) | `solid` |
+| Width | Border thickness | `1px` |
+
+### Widgets → Titles
+
+Typography for widget titles.
+
+| Option | Description | Example |
+|--------------|------------------------------|---------------|
+| Color | Title text color | `#1a1a2e` |
+| Font Size | Title font size | `18px` |
+| Font Weight | Title font weight | `600` |
+| Font Family | Title font family | `system-ui` |
diff --git a/docs-mintlify/docs/getting-started/embed-analytics.mdx b/docs-mintlify/docs/getting-started/embed-analytics.mdx
index fa321ecbfe601..6135a1ea09a66 100644
--- a/docs-mintlify/docs/getting-started/embed-analytics.mdx
+++ b/docs-mintlify/docs/getting-started/embed-analytics.mdx
@@ -21,5 +21,5 @@ If you want complete control over visualizations and user interfaces, you can us
[ref-analytics-chat]: /analytics/analytics-chat
[ref-chat-api]: /reference/embed-apis/chat-api
[ref-core-apis]: /reference/core-data-apis
-[ref-private-embedding]: /embedding/private-embedding
-[ref-signed-embedding]: /embedding/signed-embedding
\ No newline at end of file
+[ref-private-embedding]: /embedding/iframe/auth/private
+[ref-signed-embedding]: /embedding/iframe/auth/signed
\ No newline at end of file
diff --git a/docs-mintlify/embedding/iframe/analytics-chat.mdx b/docs-mintlify/embedding/iframe/analytics-chat.mdx
new file mode 100644
index 0000000000000..7614c8f3a59bd
--- /dev/null
+++ b/docs-mintlify/embedding/iframe/analytics-chat.mdx
@@ -0,0 +1,49 @@
+---
+title: Analytics Chat
+description: Embed Cube Analytics Chat into your applications via iframe.
+---
+
+
+ Iframe embedding is available on [Premium and Enterprise plans](https://cube.dev/pricing).
+
+
+Embed [Analytics Chat](/docs/explore-analyze/analytics-chat) into your application using an iframe. Let your users ask questions in plain language and get trusted answers powered by your semantic layer — without leaving your product.
+
+Analytics Chat can be embedded with either authentication mode:
+
+- **[Private embedding](/embedding/iframe/auth/private)** — for internal users with Cube accounts
+- **[Signed embedding](/embedding/iframe/auth/signed)** — for external/customer-facing applications using server-generated sessions
+
+## Embed with private embedding
+
+The embed URL for Analytics Chat is always the same:
+
+```html
+
+```
+
+Users will be prompted to sign in with their Cube credentials when accessing the embedded chat. See [Private embedding](/embedding/iframe/auth/private) for details on the auth model.
+
+## Embed with signed embedding
+
+To embed Analytics Chat for external/customer-facing applications, generate a session on your backend and pass the session ID into the iframe:
+
+```html
+
+```
+
+See [Signed embedding](/embedding/iframe/auth/signed) for the full session generation flow, API key setup, and a complete working example.
+
+## Personalize chat with user attributes
+
+When using signed embedding, you can pass [user attributes](/embedding/iframe/auth/signed#user-attributes) during session generation to personalize chat responses for each user — for example, scoping answers to a specific region, department, or tenant.
diff --git a/docs-mintlify/embedding/private-embedding.mdx b/docs-mintlify/embedding/iframe/auth/private.mdx
similarity index 60%
rename from docs-mintlify/embedding/private-embedding.mdx
rename to docs-mintlify/embedding/iframe/auth/private.mdx
index 73bbe357e90ee..ac434356fae5c 100644
--- a/docs-mintlify/embedding/private-embedding.mdx
+++ b/docs-mintlify/embedding/iframe/auth/private.mdx
@@ -1,45 +1,30 @@
---
title: Private embedding
-description: Private embedding is available on Premium and Enterprise plans.
+description: Authenticate iframe-embedded Cube content with users' existing Cube accounts.
---
Private embedding is available on [Premium and Enterprise plans](https://cube.dev/pricing).
-Private embedding is designed for **internal use cases** where team members already have Cube accounts. Simply drop an iframe into your internal tools—no API keys or complex setup required. Users will authenticate with their existing Cube credentials when accessing embedded content.
+Private embedding is designed for **internal use cases** where team members already have Cube accounts. Simply drop an iframe into your internal tools — no API keys or session generation required. Users authenticate with their existing Cube credentials when accessing embedded content.
-## How it works
-
-To embed Cube content, you simply need to paste an `