@@ -406,12 +406,13 @@ html[data-mobile-composer-route-transition="true"]::view-transition-old(t3-mobil
406406 var (--app-scrollbar-width ) 100% ;
407407}
408408
409- /* Stage-channel art needs a mask and pseudo-element gradient, so keep the
410- behavior composable without tying it to the global components layer. */
409+ /* Fade stage-channel art with an overlay rather than a CSS mask. Chromium can
410+ mis-composite the masked blueprint SVG while another sidebar layer is
411+ animating, leaking fragments of the artwork into unrelated tiles. The
412+ overlay reaches the sidebar surface color by 93%, so the mask was visually
413+ redundant as well as an extra composited layer. */
411414@utility sidebar-stage-backdrop {
412415 --stage-fade : var (--sidebar-stage-fade , var (--app-chrome-background ));
413- mask-image : linear-gradient (to bottom, black 0% , black 55% , transparent 92% );
414- -webkit-mask-image : linear-gradient (to bottom, black 0% , black 55% , transparent 92% );
415416
416417 & ::after {
417418 content : "" ;
@@ -1904,13 +1905,13 @@ code {
19041905}
19051906
19061907/* Sidebar "Working" spinner: Material's indeterminate ring, transform-only.
1907- The arc's grow-and-reel-in is faked by two half-ring SVGs, one per clipped
1908- half, counter-rotating with ease-in-out inside a stepped-rotation layer
1909- inside a linearly rotating container (MDC's construction and timings). Every
1910- animated property is a transform on an HTML element or a root <svg>, so the
1911- compositor drives all of it and the main thread never repaints a frame —
1912- the same bar the stepped status indicators hold themselves to. A stroke-dash
1913- animation would look identical but repaint on the main thread every vsync. */
1908+ The arc's grow-and-reel-in is faked by two filled half-ring SVGs, one per
1909+ clipped half, counter-rotating with ease-in-out inside a stepped-rotation
1910+ layer inside a linearly rotating container (MDC's construction and timings).
1911+ Every animated property is a transform on an HTML element or a root <svg>,
1912+ so the compositor drives all of it and the main thread never repaints a
1913+ frame. A stroke-dash animation would look identical but repaint on the main
1914+ thread every vsync. */
19141915.working-spinner {
19151916 position : relative;
19161917 display : block;
@@ -1974,27 +1975,6 @@ code {
19741975 animation : working-spinner-right-spin 1333ms cubic-bezier (0.4 , 0 , 0.2 , 1 ) infinite both;
19751976}
19761977
1977- /* A hairline sliver of ring parked over the 12 o'clock seam where the two
1978- halves meet (the arc always spans it), so antialiasing never shows a gap. */
1979- .working-spinner__patch {
1980- position : absolute;
1981- top : 0 ;
1982- left : 46% ;
1983- display : block;
1984- width : 8% ;
1985- height : 100% ;
1986- overflow : hidden;
1987- }
1988-
1989- .working-spinner__patch > svg {
1990- position : absolute;
1991- top : 0 ;
1992- left : -575% ;
1993- width : 1250% ;
1994- height : 100% ;
1995- transform : rotate (180deg );
1996- }
1997-
19981978@keyframes working-spinner-container-rotate {
19991979 to {
20001980 transform : rotate (360deg );
0 commit comments