diff --git a/craft/src/panels/right/styles/ArrayItemFields.tsx b/craft/src/panels/right/styles/ArrayItemFields.tsx
index d2d07fd..b2bb96c 100644
--- a/craft/src/panels/right/styles/ArrayItemFields.tsx
+++ b/craft/src/panels/right/styles/ArrayItemFields.tsx
@@ -1,6 +1,7 @@
-import React from 'react';
+import React, { useEffect, useRef } from 'react';
import { useEditor } from '@craftjs/core';
import { CollapsibleSection, ArrayPropEditor, smallInputStyle } from './shared';
+import { useLayerFocus } from '../../left/LayerFocusContext';
/* ---------- Shared array-item field editor ----------
Extracted from SectionTypePanel and GenericPropsEditor, which both had a
@@ -18,7 +19,26 @@ export const ArrayItemFieldsEditor: React.FC<{ selectedId: string; propKey: stri
const sampleItem = arrayItems[0] || {};
const itemFields = typeof sampleItem === 'object' && sampleItem !== null ? Object.keys(sampleItem) : [];
+ // Layers panel -> array editor "scroll to this item" hookup. The outer
+ //
wraps ArrayPropEditor's rendered cards (the actual
+ // per-item background box lives in shared.tsx's ArrayPropEditor, which is
+ // also used by MediaStylePanel/FormStylePanel -- rather than touch that
+ // shared component for one consumer, the data-array-item tag below goes
+ // on the content renderItem returns, which is enough for scrollIntoView
+ // to bring the right card into the viewport.
+ const { focus } = useLayerFocus();
+ const rootRef = useRef(null);
+
+ useEffect(() => {
+ if (!focus || focus.prop !== propKey) return;
+ const card = rootRef.current?.querySelector(`[data-array-item="${propKey}:${focus.index}"]`);
+ card?.scrollIntoView?.({ block: 'nearest', behavior: 'smooth' });
+ // `focus.nonce` is in the dep list so clicking the SAME row twice
+ // re-scrolls (the request object is otherwise identical).
+ }, [focus?.nonce, focus?.prop, focus?.index, propKey]);
+
return (
+