VoiceOS widgets: renderCustom cards get no kit entrance; iframes load late
Two facts behind 'card animation lags the notch on Windows' in VoiceOS integrations. (1) The Widget Kit's entrance animation (.k-wrap>*{animation:k-in .34s …}) only applies to renderWidget cards. renderCustom wraps author markup in .k-cwrap, which that selector doesn't match, so a custom card's own @keyframes is its only entrance. Removing it means no entrance at all, not 'falling back to the kit's'. Render a card and grep the body for k-wrap vs k-cwrap before reasoning about stacked animations. (2) The host keeps each widget iframe at about:blank until an IntersectionObserver sees it visible, and only then loads voiceos-widget://<id>/index.html. Every card therefore paints after the notch's own transition. Slower WebView loads on Windows make the gap visible, and any extra entrance animation in the card adds to it. The integration can only avoid adding delay; the lazy load is host-side.