8933d0be17
Render pipeline: - Replace per-object _apply_smooth() loop with _apply_smooth_batch(): selects all 175 parts, calls shade_smooth_by_angle() ONCE in C → reduces 16s to ~0.2s - Remove 175 per-part "assigned material to part" log lines (replace with summary) - Add TIMING_SUMMARY log line at end of every render showing all step durations - _lap() helper records split times for: template_load, glb_import, rotation, smooth_shading, material_assign, pre_render_setup, gpu_render Frontend role checks: - Add global_admin + tenant_admin to User role type in auth store - Add isAdmin() and isPrivileged() helper functions - Fix Admin.tsx, Layout.tsx, Notifications.tsx, OrderDetail.tsx, ProductDetail.tsx, CostOverviewWidget.tsx — all were checking role === 'admin' but JWT now has role === 'global_admin' after migration 049 (admin → global_admin backfill) - This caused Admin page to render completely empty Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>