feat(phase2): shared common-form layer + CommonWidgetFields trait for all widgets
- Extract Zibll CSF_Widget::params() common-field parity into
inc/modules/widget-common.php (required by widgets-register.php to keep
both files <1000 lines): subtitle, title_style(simple/big), title_highlight
+color, title_link x3, title_link_style colors, sidebar_affix, show_type
(all/only_pc/only_sm), show_id_type(show/hide), show_ids, animation_in,
animation_repeat, layout_pin_pc/m, layout_bg(white/dark). Adds
normalize_link/normalize_bg helpers, affix_attrs, common_wrapper_attr,
render_title, animation_class. Back-compat normalizes legacy tokens
(in_affix->sidebar_affix, pc/only_pc, include/exclude->show/hide).
- Add src/AKSRT/Widgets/Traits/CommonWidgetFields.php trait
(render_common_form_section + update_common_fields).
- Wire all 57 widgets to use the trait; migrate the 16 hand-rolled in_affix
implementations to shared sidebar_affix (fixes 6 latent bugs where
in_affix was never persisted). SearchWidget intentionally skips the shared
form section (its business show_type collides) but adopts the affix helper.
- widget_display_callback parity verified via tmp assertion script.
Refs .specs/plans/zibll-widgets-1to1.md Phase 2 (US1/US5)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>