Fix `unused_qualifications` for WASM
diff --git a/sparse_strips/vello_cpu/examples/wasm_cpu/src/lib.rs b/sparse_strips/vello_cpu/examples/wasm_cpu/src/lib.rs
index 1e85845..a4774ff 100644
--- a/sparse_strips/vello_cpu/examples/wasm_cpu/src/lib.rs
+++ b/sparse_strips/vello_cpu/examples/wasm_cpu/src/lib.rs
@@ -20,25 +20,25 @@
 
 /// State that handles scene rendering and interactions
 struct AppState {
-    scenes: Box<[AnyScene<vello_cpu::RenderContext>]>,
+    scenes: Box<[AnyScene<RenderContext>]>,
     current_scene: usize,
     transform: Affine,
     mouse_down: bool,
     last_cursor_position: Option<Vec2>,
     width: u32,
     height: u32,
-    renderer: vello_cpu::RenderContext,
+    renderer: RenderContext,
     pixmap: vello_common::pixmap::Pixmap,
     need_render: bool,
     canvas: HtmlCanvasElement,
 }
 
 impl AppState {
-    fn new(canvas: HtmlCanvasElement, scenes: Box<[AnyScene<vello_cpu::RenderContext>]>) -> Self {
+    fn new(canvas: HtmlCanvasElement, scenes: Box<[AnyScene<RenderContext>]>) -> Self {
         let width = canvas.width();
         let height = canvas.height();
 
-        let renderer = vello_cpu::RenderContext::new_with(
+        let renderer = RenderContext::new_with(
             width as u16,
             height as u16,
             vello_cpu::RenderSettings {
@@ -101,7 +101,7 @@
         self.height = height;
 
         self.pixmap.resize(width as u16, height as u16);
-        self.renderer = vello_cpu::RenderContext::new_with(
+        self.renderer = RenderContext::new_with(
             width as u16,
             height as u16,
             vello_cpu::RenderSettings {
@@ -200,7 +200,7 @@
         .unwrap()
         .create_element("canvas")
         .unwrap()
-        .dyn_into::<web_sys::HtmlCanvasElement>()
+        .dyn_into::<HtmlCanvasElement>()
         .unwrap();
     canvas.set_width(canvas_width as u32);
     canvas.set_height(canvas_height as u32);
diff --git a/sparse_strips/vello_hybrid/examples/native_webgl/src/lib.rs b/sparse_strips/vello_hybrid/examples/native_webgl/src/lib.rs
index fc09616..6915642 100644
--- a/sparse_strips/vello_hybrid/examples/native_webgl/src/lib.rs
+++ b/sparse_strips/vello_hybrid/examples/native_webgl/src/lib.rs
@@ -27,7 +27,7 @@
 }
 
 impl RendererWrapper {
-    fn new(canvas: web_sys::HtmlCanvasElement) -> Self {
+    fn new(canvas: HtmlCanvasElement) -> Self {
         let renderer = vello_hybrid::WebGlRenderer::new(&canvas);
 
         Self { renderer }
@@ -38,7 +38,7 @@
 struct AppState {
     scenes: Box<[AnyScene<Scene>]>,
     current_scene: usize,
-    scene: vello_hybrid::Scene,
+    scene: Scene,
     transform: Affine,
     mouse_down: bool,
     last_cursor_position: Option<Vec2>,
@@ -59,7 +59,7 @@
         let mut app_state = Self {
             scenes,
             current_scene: 0,
-            scene: vello_hybrid::Scene::new(width as u16, height as u16),
+            scene: Scene::new(width as u16, height as u16),
             transform: Affine::IDENTITY,
             mouse_down: false,
             last_cursor_position: None,
@@ -103,7 +103,7 @@
         self.width = width;
         self.height = height;
 
-        self.scene = vello_hybrid::Scene::new(width as u16, height as u16);
+        self.scene = Scene::new(width as u16, height as u16);
 
         self.need_render = true;
     }
@@ -264,7 +264,7 @@
         .unwrap()
         .create_element("canvas")
         .unwrap()
-        .dyn_into::<web_sys::HtmlCanvasElement>()
+        .dyn_into::<HtmlCanvasElement>()
         .unwrap();
     canvas.set_width(canvas_width as u32);
     canvas.set_height(canvas_height as u32);
@@ -433,12 +433,12 @@
 }
 
 /// Creates a `HTMLCanvasElement` and renders a single scene into it
-pub async fn render_scene(scene: vello_hybrid::Scene, width: u16, height: u16) {
+pub async fn render_scene(scene: Scene, width: u16, height: u16) {
     let canvas = web_sys::Window::document(&web_sys::window().unwrap())
         .unwrap()
         .create_element("canvas")
         .unwrap()
-        .dyn_into::<web_sys::HtmlCanvasElement>()
+        .dyn_into::<HtmlCanvasElement>()
         .unwrap();
     canvas.set_width(width as u32);
     canvas.set_height(height as u32);
diff --git a/sparse_strips/vello_hybrid/examples/wgpu_webgl/src/lib.rs b/sparse_strips/vello_hybrid/examples/wgpu_webgl/src/lib.rs
index 2c92302..bf29f82 100644
--- a/sparse_strips/vello_hybrid/examples/wgpu_webgl/src/lib.rs
+++ b/sparse_strips/vello_hybrid/examples/wgpu_webgl/src/lib.rs
@@ -22,14 +22,14 @@
 use web_sys::{Event, HtmlCanvasElement, KeyboardEvent, MouseEvent, WheelEvent};
 
 struct RendererWrapper {
-    renderer: vello_hybrid::Renderer,
+    renderer: Renderer,
     device: wgpu::Device,
     queue: wgpu::Queue,
     surface: wgpu::Surface<'static>,
 }
 
 impl RendererWrapper {
-    async fn new(canvas: web_sys::HtmlCanvasElement) -> Self {
+    async fn new(canvas: HtmlCanvasElement) -> Self {
         let width = canvas.width();
         let height = canvas.height();
         let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor {
@@ -120,7 +120,7 @@
 struct AppState {
     scenes: Box<[AnyScene<Scene>]>,
     current_scene: usize,
-    scene: vello_hybrid::Scene,
+    scene: Scene,
     transform: Affine,
     mouse_down: bool,
     last_cursor_position: Option<Point>,
@@ -141,7 +141,7 @@
         let mut app_state = Self {
             scenes,
             current_scene: 0,
-            scene: vello_hybrid::Scene::new(width as u16, height as u16),
+            scene: Scene::new(width as u16, height as u16),
             transform: Affine::IDENTITY,
             mouse_down: false,
             last_cursor_position: None,
@@ -207,7 +207,7 @@
         self.width = width;
         self.height = height;
 
-        self.scene = vello_hybrid::Scene::new(width as u16, height as u16);
+        self.scene = Scene::new(width as u16, height as u16);
         self.renderer_wrapper.resize(width, height);
 
         self.need_render = true;
@@ -371,7 +371,7 @@
         .unwrap()
         .create_element("canvas")
         .unwrap()
-        .dyn_into::<web_sys::HtmlCanvasElement>()
+        .dyn_into::<HtmlCanvasElement>()
         .unwrap();
     canvas.set_width(canvas_width as u32);
     canvas.set_height(canvas_height as u32);
@@ -541,12 +541,12 @@
 }
 
 /// Creates a `HTMLCanvasElement` and renders a single scene into it
-pub async fn render_scene(scene: vello_hybrid::Scene, width: u16, height: u16) {
+pub async fn render_scene(scene: Scene, width: u16, height: u16) {
     let canvas = web_sys::Window::document(&web_sys::window().unwrap())
         .unwrap()
         .create_element("canvas")
         .unwrap()
-        .dyn_into::<web_sys::HtmlCanvasElement>()
+        .dyn_into::<HtmlCanvasElement>()
         .unwrap();
     canvas.set_width(width as u32);
     canvas.set_height(height as u32);
diff --git a/sparse_strips/vello_hybrid/src/render/webgl.rs b/sparse_strips/vello_hybrid/src/render/webgl.rs
index 1016c37..c0c0d90 100644
--- a/sparse_strips/vello_hybrid/src/render/webgl.rs
+++ b/sparse_strips/vello_hybrid/src/render/webgl.rs
@@ -43,7 +43,7 @@
 use alloc::vec;
 use alloc::vec::Vec;
 use bytemuck::{Pod, Zeroable};
-use core::{fmt::Debug, mem};
+use core::fmt::Debug;
 use vello_common::{
     coarse::WideTile,
     encode::{EncodedGradient, EncodedKind, EncodedPaint, MAX_GRADIENT_LUT_SIZE, RadialKind},
@@ -1057,9 +1057,9 @@
 struct WebGlStateGuard<'a> {
     gl: &'a WebGl2RenderingContext,
     config: WebGlStateConfig,
-    original_framebuffer: Option<web_sys::WebGlFramebuffer>,
-    original_read_framebuffer: Option<web_sys::WebGlFramebuffer>,
-    original_texture_2d_array: Option<web_sys::WebGlTexture>,
+    original_framebuffer: Option<WebGlFramebuffer>,
+    original_read_framebuffer: Option<WebGlFramebuffer>,
+    original_texture_2d_array: Option<WebGlTexture>,
     scissor_enabled: bool,
     viewport: [i32; 4],
 }
@@ -1071,7 +1071,7 @@
         let original_framebuffer = if config.framebuffer {
             gl.get_parameter(WebGl2RenderingContext::FRAMEBUFFER_BINDING)
                 .ok()
-                .and_then(|v| v.dyn_into::<web_sys::WebGlFramebuffer>().ok())
+                .and_then(|v| v.dyn_into::<WebGlFramebuffer>().ok())
         } else {
             None
         };
@@ -1080,7 +1080,7 @@
         let original_read_framebuffer = if config.read_framebuffer {
             gl.get_parameter(WebGl2RenderingContext::READ_FRAMEBUFFER_BINDING)
                 .ok()
-                .and_then(|v| v.dyn_into::<web_sys::WebGlFramebuffer>().ok())
+                .and_then(|v| v.dyn_into::<WebGlFramebuffer>().ok())
         } else {
             None
         };
@@ -1089,7 +1089,7 @@
         let original_texture_2d_array = if config.texture_2d_array {
             gl.get_parameter(WebGl2RenderingContext::TEXTURE_BINDING_2D_ARRAY)
                 .ok()
-                .and_then(|v| v.dyn_into::<web_sys::WebGlTexture>().ok())
+                .and_then(|v| v.dyn_into::<WebGlTexture>().ok())
         } else {
             None
         };
@@ -1658,7 +1658,7 @@
         Some(&resources.strips_buffer),
     );
 
-    let stride = mem::size_of::<GpuStrip>() as i32;
+    let stride = size_of::<GpuStrip>() as i32;
     debug_assert_eq!(stride, 20, "expected stride of 20");
 
     // Configure attributes.
@@ -2142,7 +2142,7 @@
 fn copy_to_texture_array_layer(
     gl: &WebGl2RenderingContext,
     source_setup: impl FnOnce(&WebGl2RenderingContext),
-    dest_texture_array: &web_sys::WebGlTexture,
+    dest_texture_array: &WebGlTexture,
     dest_layer: u32,
     dest_offset: [u32; 2],
     copy_size: [u32; 2],