RESTORE inner copper L2/L15 (a greedy regex in the all-vector edit had deleted their loader); tooltips: real enter/leave semantics + 600ms (svg-child crossings were resetting the timer forever); layer checkbox tooltips
shadows toggle: use scene.shadowsEnabled master switch - freezing the map left all layer shadows rendered-frozen (only the ground appeared to turn off)
ALL-VECTOR stackup: silk + masks now real geometry (masks = gerber negatives, board minus openings) - no textured quads left, every layer casts+receives real shadows
Lighting floaty: live sliders for spot (intensity/angle/XYZ), env, hemi, shadow darkness, copper metallic/roughness; light helper gizmo (sphere+aim line); snapshot button dumps settings for the AI to bake
LAYER SHADOWS WORKING (ralph-tested 26.7% pixel delta): PCSS+softTransparentShadow rendered NO shadows in this scene; plain PCF medium does. Root cause of 5 rounds of 'still no layer shadows'
layer shadows FOR REAL: spot becomes the dominant light (env->0.35 fill, hemi dimmed) - shadows only darken direct light on PBR, so env-dominant lighting was washing layer shadows out (ground showed them because StandardMaterial is spot-lit)
shadows: PCSS contact-hardening (crisp near, soft far - not razor everywhere) + transparency-aware casting so each layer casts its artwork onto the layers below
shadows on ALL layers: silk/mask quads now lit (emissive was ignoring shadows), narrow spot cone (sharp not blurry), thin planes cast (forceBackFacesOnly off)
shadows: use the BUNDLE's own SpotLight+PCF shadow rig (proven in /viewer), repositioned/rescaled for the meter-scale scene, map unfrozen for animation
shadows visible at last: shadow light illuminates ONLY the ground (fill light was washing the shadow out); emissive floor keeps shadow dark-gray not black
REAL ground + shadows: bundle ground had null material (my /ground/ regex was hitting the skybox). Build own semi-transparent ground plane + directional shadow generator; retarget Ground/Shadows toggles to them
per-part components: classify each mesh by XY vs the 14 CPL machine-pin positions -> machine pins anchored, all else in Components (source-of-truth split, no more merged-blob guessing)
inner copper L2/L15 = REAL VECTOR geometry from Fusion gerbers (y-map bug fixed), sharing the outer copper's PBR material - all four copper layers now genuine geometry, identical material
all four copper layers share ONE PBRMaterial (same albedo/metallic/roughness); inner L2/L15 use the gerber only as an alpha cutout to trace shape, not as coloring - identical copper look across all layers
revert inner copper to textured quads (vector gerber mesh had a coordinate-scale bug that shrank the view); vector conversion built but needs scale fix
inner copper L2/L15 as VECTOR geometry (gerber->triangulated mesh), same shiny copper material as outer layers - all four copper now real geometry, no PNG fakery
world-true layer offsets: every layer wrapped in a scene-root TransformNode (glTF __root__ conversion transform was amplifying local z offsets - the L1-flies-high bug)