diff --git a/src/uix/eidos/components/context-menu/context-menu-sub-content.svelte b/src/uix/eidos/components/context-menu/context-menu-sub-content.svelte
index baf48ce78..d53a5ef5d 100644
--- a/src/uix/eidos/components/context-menu/context-menu-sub-content.svelte
+++ b/src/uix/eidos/components/context-menu/context-menu-sub-content.svelte
@@ -1,11 +1,15 @@
-
+
{#snippet children(snippetProps)}
{@render bodyContent?.(snippetProps)}
{/snippet}
diff --git a/src/uix/eidos/components/context-menu/context-menu.css b/src/uix/eidos/components/context-menu/context-menu.css
index 2e7e69b3c..6f19d2128 100644
--- a/src/uix/eidos/components/context-menu/context-menu.css
+++ b/src/uix/eidos/components/context-menu/context-menu.css
@@ -44,8 +44,10 @@
`[data-stagger]`; each direct-child item carries `data-animation-style` and
gets its structural index from `:nth-child`. `var(--motion-stagger)` is the
canonical 20ms (0 = parallel). Same mechanism as DropdownMenu; the appearance
- flows from the `open` (emerge) event — no JS writes the index. */
-[data-context-menu-content] {
+ flows from the `open` (emerge) event — no JS writes the index. Applies to the
+ root panel AND fly-out SubContent (both mark themselves `[data-stagger]`). */
+[data-context-menu-content],
+[data-context-menu-sub-content] {
--motion-stagger-each: var(--motion-stagger);
}
diff --git a/src/uix/eidos/components/dropdown-menu/README.md b/src/uix/eidos/components/dropdown-menu/README.md
index 77232643c..ac569cd60 100644
--- a/src/uix/eidos/components/dropdown-menu/README.md
+++ b/src/uix/eidos/components/dropdown-menu/README.md
@@ -113,6 +113,10 @@ Two honest limits (both documented framework-wide):
lifecycle), still deferred — so a closing container does **not** drive a child
exit that would be cut off on unmount.
+Fly-out **submenus** (`SubContent`) cascade too — the SubContent panel has its
+own `data-state`, so the same marker + items work; a flat submenu cascades its
+items consecutively (`:nth-child` 0/1/2…).
+
`` and `` share this verbatim (same soma menu machinery):
ContextMenu has its own recipe; Menubar's per-menu panel already carries
`data-dropdown-menu-content` and re-uses `DropdownMenu.Item`, so it inherits the
diff --git a/src/uix/eidos/components/dropdown-menu/dropdown-menu-sub-content.svelte b/src/uix/eidos/components/dropdown-menu/dropdown-menu-sub-content.svelte
index 63a316eda..35593ae47 100644
--- a/src/uix/eidos/components/dropdown-menu/dropdown-menu-sub-content.svelte
+++ b/src/uix/eidos/components/dropdown-menu/dropdown-menu-sub-content.svelte
@@ -1,11 +1,16 @@
-
+
{#snippet children(snippetProps)}
{@render bodyContent?.(snippetProps)}
{/snippet}
diff --git a/src/uix/eidos/components/dropdown-menu/dropdown-menu.css b/src/uix/eidos/components/dropdown-menu/dropdown-menu.css
index a824a4d20..0cb7e9522 100644
--- a/src/uix/eidos/components/dropdown-menu/dropdown-menu.css
+++ b/src/uix/eidos/components/dropdown-menu/dropdown-menu.css
@@ -55,8 +55,10 @@
and gets its structural index from `:nth-child`. This is the per-item
delay step — `var(--motion-stagger)` (canonical 20ms); 0 = parallel,
larger = a more deliberate ripple. The cascade flows from the `open`
- (emerge) event — no JS writes the index, no consumer wiring. */
-[data-dropdown-menu-content] {
+ (emerge) event — no JS writes the index, no consumer wiring. Applies to the
+ root panel AND fly-out SubContent (both mark themselves `[data-stagger]`). */
+[data-dropdown-menu-content],
+[data-dropdown-menu-sub-content] {
--motion-stagger-each: var(--motion-stagger);
}