/* ============================================================================ Carousel: the widget tier's first consumer. The markup is no longer written in a template. It comes from a description -- `crate::quasi::widgets::carousel` says "an ordered set of pictures, called a carousel" -- and quasi-webview turns that into a region carrying `data-widget="carousel"` with one `.picture` or `.picture-img` per frame. So these rules key on the widget name rather than on a hand-written class. That is what "a renderer that recognises the name draws it its own way" means on this host: the name is the hook, and the stylesheet plus the island are the browser's idea of a carousel. THE FALLBACK RUNS THE OTHER WAY NOW. This used to render frame one and hide the rest, because the controls that reach them are the scripted part -- so with JS off, two of three screenshots were unreachable. Now the unenhanced page is the whole gallery, stacked in order. THE CHROME IS DESCRIBED TOO, as of makeover-layout 0.23.0. The description says `Showing::One` -- an ordered set of pictures with one showing -- and quasi-webview derives prev/position/next from that, once, for every widget there will ever be. Nothing here or in any renderer matches on the name "carousel" to get it. The island stopped injecting chrome and now only binds what is already on the page; the dot strip and the overlaid arrows are gone. The controls are still not shipped live to a reader with no script: makeover keeps `.showing` hidden until something sets [data-ready], so the markup no longer has to be absent to avoid lying. ========================================================================= */ /* Public gallery carousel sections (item + project pages). */ .item-gallery, .project-gallery { margin: var(--gap-pane) 0; } /* wraps the described region rather than being it: a custom element is what the browser upgrades automatically after an htmx swap, and the description emits a plain div because it does not know this host's tag prefix. Default display for an unknown element is inline, so say otherwise. */ mnw-carousel { display: block; } /* The default is ONE frame, which is what a visitor with JavaScript sees, so the page is settled from first paint and nothing rearranges on load. Showing all three and collapsing them was a 141px -> 58px jump on every load that everyone with JS paid; `no-js.css`, loaded from a