git.lucas.co / cce-system-interface
system settings
git clone https://git.lucas.co/cce-system-interface.git

commitc37df0dc91135b770ecbf04c8ca9f5bdb50487f3
parentc245496106
authorLucas Galante <[email protected]>
date2026-06-16 15:20
Implement Window Manager Effects section with Transparency and Blur toggles

 Cargo.toml               |   2 +-
 src/app.rs               |  10 +-
 src/main.rs              | 342 +++++++++++++++++++++++++----------------------
 src/pages/accounts.rs    |  18 +--
 src/pages/audio.rs       |  22 +--
 src/pages/display.rs     |  22 +--
 src/pages/hardware.rs    |   6 +-
 src/pages/input.rs       |  26 ++--
 src/pages/interface.rs   | 168 +++++++++++------------
 src/pages/layout.rs      |  70 +++++++++-
 src/pages/network.rs     |  18 +--
 src/pages/packages.rs    |  10 +-
 src/pages/services.rs    |  26 ++--
 src/pages/storage.rs     |   8 +-
 src/pages/system_info.rs |   4 +-
 src/widgets.rs           |   2 +-
 16 files changed, 414 insertions(+), 340 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 60599a2..7f78ce3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-clear-ui = { path = "../clear-ui" }
+cce-ui = { path = "../cce-ui" }
 smithay-client-toolkit = "0.19.2"
 calloop = "0.13.0"
 calloop-wayland-source = "0.3.0"
diff --git a/src/app.rs b/src/app.rs
index 443742d..77dbf2e 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -1,4 +1,4 @@
-use clear_ui::layout::RenderTarget;
+use cce_ui::layout::RenderTarget;
 
 use crate::pages::audio;
 use crate::pages::display;
@@ -71,7 +71,7 @@ pub enum AppAction {
 pub struct PageContent {
     pub rects: Vec<([f32; 4], f32, f32, f32, f32, f32, (bool, bool, bool, bool))>,
     pub texts: Vec<(String, f32, f32, f32, [f32; 4], Option<String>, Option<[f32; 4]>)>,
-    pub buttons: Vec<(clear_ui::widget::Button, AppAction)>,
+    pub buttons: Vec<(cce_ui::widget::Button, AppAction)>,
 }
 
 impl PageContent {
@@ -94,7 +94,7 @@ impl PageContent {
     pub fn button(&mut self, label: &str, x: f32, y: f32, w: f32, h: f32,
                   bg: [f32; 4], hover_bg: [f32; 4], label_color: [f32; 4],
                   action: AppAction) {
-        let btn = clear_ui::widget::Button::new(x, y, w, h)
+        let btn = cce_ui::widget::Button::new(x, y, w, h)
             .with_label(label)
             .with_bg(bg)
             .with_hover_bg(hover_bg)
@@ -105,7 +105,7 @@ impl PageContent {
     pub fn button_left(&mut self, label: &str, x: f32, y: f32, w: f32, h: f32,
                        bg: [f32; 4], hover_bg: [f32; 4], label_color: [f32; 4],
                        action: AppAction) {
-        let btn = clear_ui::widget::Button::new(x, y, w, h)
+        let btn = cce_ui::widget::Button::new(x, y, w, h)
             .with_label(label)
             .with_bg(bg)
             .with_hover_bg(hover_bg)
@@ -150,7 +150,7 @@ pub trait SectionContextExt {
     fn button_left(&mut self, label: &str, x: f32, y: f32, w: f32, h: f32, bg: [f32; 4], hover_bg: [f32; 4], label_color: [f32; 4], action: AppAction);
 }
 
-impl<'a> SectionContextExt for clear_ui::layout::SectionContext<'a, PageContent> {
+impl<'a> SectionContextExt for cce_ui::layout::SectionContext<'a, PageContent> {
     fn button(&mut self, label: &str, x: f32, y: f32, w: f32, h: f32, bg: [f32; 4], hover_bg: [f32; 4], label_color: [f32; 4], action: AppAction) {
         self.pc.button(label, x, y, w, h, bg, hover_bg, label_color, action);
         self.content_y = self.content_y.max(y + h);
diff --git a/src/main.rs b/src/main.rs
index d9a406e..946116e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,11 +1,11 @@
-use clear_ui::widget::{Finger, hover_animation, TextItem, Element, PageSelector};
+use cce_ui::widget::{Finger, hover_animation, TextItem, Element, PageSelector};
 use glyphon::{Attrs, Buffer, FontSystem, Metrics};
 
 use cce_system_interface::app::{AppAction, AppState, PageContent};
 use cce_system_interface::pages::{self, Page};
 
 fn make_text_buffer(fs: &mut FontSystem, text: &str, size: f32) -> Buffer {
-    let scale = clear_ui::scale::scale_factor();
+    let scale = cce_ui::scale::scale_factor();
     let physical_size = size * scale;
     let metrics = Metrics::new(physical_size, physical_size * 1.4);
     let mut buf = Buffer::new(fs, metrics);
@@ -35,12 +35,12 @@ fn make_text_buffer_with_font(
     serif_fallback: &str,
     mono_fallback: &str,
 ) -> Buffer {
-    let scale = clear_ui::scale::scale_factor();
+    let scale = cce_ui::scale::scale_factor();
     let mut font_size = size;
     let mut family_name = None;
 
     if let Some(font_str) = font {
-        let (parsed_family, parsed_size) = clear_ui::layout::parse_font_string(font_str);
+        let (parsed_family, parsed_size) = cce_ui::layout::parse_font_string(font_str);
         if let Some(ps) = parsed_size {
             font_size = ps;
         }
@@ -69,7 +69,7 @@ fn make_text_buffer_with_font(
                         glyphon::Family::Name(mono_fallback)
                     }
                 } else {
-                    glyphon::Family::Name(clear_ui::layout::get_system_monospace_font())
+                    glyphon::Family::Name(cce_ui::layout::get_system_monospace_font())
                 }
             }
             "sans-serif" => {
@@ -119,8 +119,8 @@ struct SystemInterface {
     app: AppState,
     font_system: FontSystem,
     widgets: Vec<AppWidget>,
-    text_items: Vec<clear_ui::widget::TextItem>,
-    page_buttons: Vec<(clear_ui::widget::Button, AppAction)>,
+    text_items: Vec<cce_ui::widget::TextItem>,
+    page_buttons: Vec<(cce_ui::widget::Button, AppAction)>,
 
     sidebar_width: f32,
     header_height: f32,
@@ -161,23 +161,23 @@ struct SystemInterface {
     audio_sink_dragging: Option<usize>,
     audio_source_dragging: Option<usize>,
     display_brightness_dragging: bool,
-    page_sec_containers: Vec<clear_ui::widget::Container>,
-    menubar: clear_ui::widget::MenuBar,
-    switcher: clear_ui::widget::Switcher,
-    plates: Vec<clear_ui::widget::Plate>,
+    page_sec_containers: Vec<cce_ui::widget::Container>,
+    menubar: cce_ui::widget::MenuBar,
+    switcher: cce_ui::widget::Switcher,
+    plates: Vec<cce_ui::widget::Plate>,
     sans_serif_family: String,
     serif_family: String,
     monospace_family: String,
     current_page_shared: std::sync::Arc<std::sync::atomic::AtomicU8>,
     sender: calloop::channel::Sender<AppAction>,
-    ui_context: clear_ui::context::UiContext,
+    ui_context: cce_ui::context::UiContext,
 }
 
-impl clear_ui::engine::Application for SystemInterface {
+impl cce_ui::engine::Application for SystemInterface {
     type Message = AppAction;
 
-    fn new(_qh: &wayland_client::QueueHandle<clear_ui::engine::EngineState<Self>>, sender: calloop::channel::Sender<Self::Message>) -> Self {
-        clear_ui::scale::set_scale_factor(1.0);
+    fn new(_qh: &wayland_client::QueueHandle<cce_ui::engine::EngineState<Self>>, sender: calloop::channel::Sender<Self::Message>) -> Self {
+        cce_ui::scale::set_scale_factor(1.0);
         let app = AppState {
             layout: pages::layout::read_layout_config(),
             input: pages::input::read_input_config(),
@@ -405,16 +405,16 @@ impl clear_ui::engine::Application for SystemInterface {
         let (sans_family, serif_family, monospace_family, _, _, _, _, _) = pages::interface::read_preferred_fonts();
 
         let pages_names = Page::ALL.iter().map(|p| p.label().to_string()).collect::<Vec<_>>();
-        let mut menubar = clear_ui::widget::MenuBar::new(0.0, 0.0, 180.0, 680.0)
+        let mut menubar = cce_ui::widget::MenuBar::new(0.0, 0.0, 180.0, 680.0)
             .with_vertical(true)
             .with_title("SYSTEM");
         menubar.set_pages(pages_names);
         let sidebar_width = menubar.sidebar_w();
 
-        let switcher = clear_ui::widget::Switcher::new(sidebar_width, 0.0, 820.0 - sidebar_width, 680.0);
+        let switcher = cce_ui::widget::Switcher::new(sidebar_width, 0.0, 820.0 - sidebar_width, 680.0);
         let mut plates = Vec::new();
         for page in Page::ALL.iter() {
-            let plate = clear_ui::widget::Plate::new(sidebar_width, 0.0, 820.0 - sidebar_width, 680.0)
+            let plate = cce_ui::widget::Plate::new(sidebar_width, 0.0, 820.0 - sidebar_width, 680.0)
                 .with_label(page.label())
                 .with_draggable(false);
             plates.push(plate);
@@ -477,7 +477,7 @@ impl clear_ui::engine::Application for SystemInterface {
             monospace_family,
             current_page_shared,
             sender,
-            ui_context: clear_ui::context::UiContext::new(),
+            ui_context: cce_ui::context::UiContext::new(),
         };
 
         for plate in &mut this.plates {
@@ -488,8 +488,8 @@ impl clear_ui::engine::Application for SystemInterface {
         this
     }
 
-    fn settings(&self) -> clear_ui::engine::WindowSettings {
-        clear_ui::engine::WindowSettings {
+    fn settings(&self) -> cce_ui::engine::WindowSettings {
+        cce_ui::engine::WindowSettings {
             title: "CCE System Interface".to_string(),
             app_id: "cce-system-interface".to_string(),
             width: 820,
@@ -516,13 +516,13 @@ impl clear_ui::engine::Application for SystemInterface {
         }
     }
 
-    fn view(&mut self, quads: &mut Vec<(f32, f32, f32, f32, [f32; 4])>, size: clear_ui::engine::LogicalSize, scale: f64) {
+    fn view(&mut self, quads: &mut Vec<(f32, f32, f32, f32, [f32; 4])>, size: cce_ui::engine::LogicalSize, scale: f64) {
         let (width, height) = (size.width, size.height);
         if self.needs_rebuild || self.width != width as u32 || self.height != height as u32 || self.scale_factor != scale {
             self.width = width as u32;
             self.height = height as u32;
             self.scale_factor = scale;
-            clear_ui::scale::set_scale_factor(scale as f32);
+            cce_ui::scale::set_scale_factor(scale as f32);
             self.rebuild_layout(width, height);
         }
         for w in &self.widgets {
@@ -532,13 +532,13 @@ impl clear_ui::engine::Application for SystemInterface {
         }
     }
 
-    fn view_rounded_quads(&mut self, quads: &mut Vec<(f32, f32, f32, f32, f32, [f32; 4], (bool, bool, bool, bool))>, size: clear_ui::engine::LogicalSize, scale: f64) {
+    fn view_rounded_quads(&mut self, quads: &mut Vec<(f32, f32, f32, f32, f32, [f32; 4], (bool, bool, bool, bool))>, size: cce_ui::engine::LogicalSize, scale: f64) {
         let (width, height) = (size.width, size.height);
         if self.needs_rebuild || self.width != width as u32 || self.height != height as u32 || self.scale_factor != scale {
             self.width = width as u32;
             self.height = height as u32;
             self.scale_factor = scale;
-            clear_ui::scale::set_scale_factor(scale as f32);
+            cce_ui::scale::set_scale_factor(scale as f32);
             self.rebuild_layout(width, height);
         }
         for w in &self.widgets {
@@ -548,7 +548,7 @@ impl clear_ui::engine::Application for SystemInterface {
         }
     }
 
-    fn text_items(&self) -> &[clear_ui::widget::TextItem] {
+    fn text_items(&self) -> &[cce_ui::widget::TextItem] {
         &self.text_items
     }
 
@@ -561,13 +561,13 @@ impl clear_ui::engine::Application for SystemInterface {
         ]
     }
 
-    fn handle_pointer_move(&mut self, pos: clear_ui::engine::LogicalPosition, needs_rebuild: &mut bool) {
+    fn handle_pointer_move(&mut self, pos: cce_ui::engine::LogicalPosition, needs_rebuild: &mut bool) {
         if self.handle_cursor_moved(pos.x, pos.y) {
             *needs_rebuild = true;
         }
     }
 
-    fn handle_mouse_input(&mut self, button: clear_ui::widget::MouseButton, state: clear_ui::widget::ElementState, pos: clear_ui::engine::LogicalPosition, needs_rebuild: &mut bool) -> Option<Self::Message> {
+    fn handle_mouse_input(&mut self, button: cce_ui::widget::MouseButton, state: cce_ui::widget::ElementState, pos: cce_ui::engine::LogicalPosition, needs_rebuild: &mut bool) -> Option<Self::Message> {
         self.cursor_x = pos.x;
         self.cursor_y = pos.y;
         if self.handle_mouse_input_internal(button, state) {
@@ -576,13 +576,13 @@ impl clear_ui::engine::Application for SystemInterface {
         None
     }
 
-    fn handle_mouse_wheel(&mut self, delta: &clear_ui::widget::MouseScrollDelta, pos: clear_ui::engine::LogicalPosition, needs_rebuild: &mut bool) {
+    fn handle_mouse_wheel(&mut self, delta: &cce_ui::widget::MouseScrollDelta, pos: cce_ui::engine::LogicalPosition, needs_rebuild: &mut bool) {
         if self.handle_mouse_wheel_internal(delta, pos.x, pos.y) {
             *needs_rebuild = true;
         }
     }
 
-    fn handle_key_input(&mut self, event: &clear_ui::widget::KeyEvent, needs_rebuild: &mut bool) -> Option<Self::Message> {
+    fn handle_key_input(&mut self, event: &cce_ui::widget::KeyEvent, needs_rebuild: &mut bool) -> Option<Self::Message> {
         if self.handle_key_input_internal(event) {
             *needs_rebuild = true;
         }
@@ -592,7 +592,7 @@ impl clear_ui::engine::Application for SystemInterface {
 
 impl SystemInterface {
 
-fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(f32, f32, f32, f32)>, ctx: &clear_ui::context::UiContext) {
+fn collect_popover_rects(w: &dyn cce_ui::widget::Element, popovers: &mut Vec<(f32, f32, f32, f32)>, ctx: &cce_ui::context::UiContext) {
     if let Some(rect) = w.popover_rect() {
         popovers.push(rect);
     }
@@ -806,10 +806,10 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         self.app.layout.side_panel_border_opacity_spinbox.clear_children(&mut self.ui_context);
         self.app.layout.side_panel_border_opacity_spinbox.set_parent(None, &mut self.ui_context);
 
-        use clear_ui::widget::focus::link_parent_child;
+        use cce_ui::widget::focus::link_parent_child;
         match self.app.current_page {
             Page::Accounts => {
-                self.page_sec_containers.resize_with(2, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(2, cce_ui::widget::Container::new);
                 for i in 0..2 {
                     link_parent_child(page_root, &mut self.page_sec_containers[i], &mut self.ui_context);
                 }
@@ -825,7 +825,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             Page::Services => {
-                self.page_sec_containers.resize_with(3, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(3, cce_ui::widget::Container::new);
                 for i in 0..3 {
                     link_parent_child(page_root, &mut self.page_sec_containers[i], &mut self.ui_context);
                 }
@@ -841,7 +841,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 link_parent_child(&mut self.page_sec_containers[2], &mut self.app.services.status_padding_spinbox, &mut self.ui_context);
             }
             Page::Hardware => {
-                self.page_sec_containers.resize_with(5, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(5, cce_ui::widget::Container::new);
                 for i in 0..5 {
                     link_parent_child(page_root, &mut self.page_sec_containers[i], &mut self.ui_context);
                 }
@@ -850,14 +850,14 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 link_parent_child(&mut self.page_sec_containers[4], &mut self.app.hardware.gpu_gov_menu, &mut self.ui_context);
             }
             Page::Radios => {
-                self.page_sec_containers.resize_with(2, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(2, cce_ui::widget::Container::new);
                 for i in 0..2 {
                     link_parent_child(page_root, &mut self.page_sec_containers[i], &mut self.ui_context);
                 }
                 link_parent_child(&mut self.page_sec_containers[0], &mut self.app.network.wifi_list_box.scroll_box, &mut self.ui_context);
             }
             Page::Layout => {
-                self.page_sec_containers.resize_with(7, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(7, cce_ui::widget::Container::new);
                 
                 for i in 0..7 {
                     link_parent_child(page_root, &mut self.page_sec_containers[i], &mut self.ui_context);
@@ -894,7 +894,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 link_parent_child(&mut self.page_sec_containers[6], &mut self.app.layout.side_panel_border_opacity_spinbox, &mut self.ui_context);
             }
             Page::Interface => {
-                self.page_sec_containers.resize_with(6, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(6, cce_ui::widget::Container::new);
                 
                 for i in 0..6 {
                     link_parent_child(page_root, &mut self.page_sec_containers[i], &mut self.ui_context);
@@ -1009,7 +1009,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             Page::Input => {
-                self.page_sec_containers.resize_with(6, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(6, cce_ui::widget::Container::new);
                 link_parent_child(page_root, &mut self.page_sec_containers[0], &mut self.ui_context);
                 link_parent_child(page_root, &mut self.page_sec_containers[1], &mut self.ui_context);
                 link_parent_child(page_root, &mut self.page_sec_containers[2], &mut self.ui_context);
@@ -1041,7 +1041,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 link_parent_child(&mut self.page_sec_containers[5], &mut self.app.input.zoom_out_box, &mut self.ui_context);
             }
             Page::Audio => {
-                self.page_sec_containers.resize_with(2, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(2, cce_ui::widget::Container::new);
                 link_parent_child(page_root, &mut self.page_sec_containers[0], &mut self.ui_context);
                 link_parent_child(page_root, &mut self.page_sec_containers[1], &mut self.ui_context);
                 
@@ -1059,7 +1059,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 }
             }
             Page::Display => {
-                self.page_sec_containers.resize_with(4, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(4, cce_ui::widget::Container::new);
                 link_parent_child(page_root, &mut self.page_sec_containers[0], &mut self.ui_context);
                 link_parent_child(page_root, &mut self.page_sec_containers[1], &mut self.ui_context);
                 link_parent_child(page_root, &mut self.page_sec_containers[2], &mut self.ui_context);
@@ -1088,7 +1088,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 link_parent_child(&mut self.page_sec_containers[3], &mut self.app.display.screensaver_style_menu, &mut self.ui_context);
             }
             Page::Packages => {
-                self.page_sec_containers.resize_with(2, clear_ui::widget::Container::new);
+                self.page_sec_containers.resize_with(2, cce_ui::widget::Container::new);
                 for i in 0..2 {
                     link_parent_child(page_root, &mut self.page_sec_containers[i], &mut self.ui_context);
                 }
@@ -1113,10 +1113,10 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         let mut page_buttons = Vec::new();
 
 
-        clear_ui::widget::hover_animation::reset_frame_registration();
-        clear_ui::widget::popovers::clear();
-        clear_ui::widget::hover_animation::set_scroll_offset(self.scroll_y);
-        clear_ui::widget::hover_animation::set_cursor_pos(self.cursor_x / s, self.cursor_y / s);
+        cce_ui::widget::hover_animation::reset_frame_registration();
+        cce_ui::widget::popovers::clear();
+        cce_ui::widget::hover_animation::set_scroll_offset(self.scroll_y);
+        cce_ui::widget::hover_animation::set_cursor_pos(self.cursor_x / s, self.cursor_y / s);
 
         let lcx = self.sidebar_width;
         let lcy = self.header_height;
@@ -1128,10 +1128,10 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         self.switcher.set_active_index(Some(page_idx));
 
         let mut menubar_pc = PageContent::new();
-        clear_ui::layout::render_widget(&mut menubar_pc, &mut self.menubar, 0.0, 0.0, self.sidebar_width, sh / s, &mut self.ui_context);
+        cce_ui::layout::render_widget(&mut menubar_pc, &mut self.menubar, 0.0, 0.0, self.sidebar_width, sh / s, &mut self.ui_context);
 
         let mut switcher_pc = PageContent::new();
-        clear_ui::layout::render_widget(&mut switcher_pc, &mut self.switcher, self.sidebar_width, 0.0, sw / s - self.sidebar_width, sh / s, &mut self.ui_context);
+        cce_ui::layout::render_widget(&mut switcher_pc, &mut self.switcher, self.sidebar_width, 0.0, sw / s - self.sidebar_width, sh / s, &mut self.ui_context);
 
         for pc_part in &[menubar_pc, switcher_pc] {
             for (c, x, y, w, h, r, corners) in &pc_part.rects {
@@ -1244,13 +1244,13 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 x: base.x * s, y: (base.y - scroll_offset_y) * s, w: base.w * s, h: base.h * s,
                 color: bg, hover_color: hover_bg,
                 hovering: false,
-                radius: clear_ui::layout::button_corner_radius() * s,
+                radius: cce_ui::layout::button_corner_radius() * s,
                 corners: (true, true, true, true),
             });
             let label = base.label.as_deref().unwrap_or("");
             let label_size = 12.0;
             let buf = make_text_buffer(&mut self.font_system, label, label_size * s);
-            let scale = clear_ui::scale::scale_factor();
+            let scale = cce_ui::scale::scale_factor();
             let tw = buf.layout_runs().next().map(|r| r.line_w).unwrap_or(0.0) / scale;
             let lh = label_size * s * 1.4;
             let mut left_align = btn.left_align;
@@ -1321,7 +1321,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
 
         // Render popovers on top of everything (both backgrounds and texts)
         let mut popover_pc = PageContent::new();
-        clear_ui::layout::render_popovers(&mut popover_pc, &mut self.ui_context);
+        cce_ui::layout::render_popovers(&mut popover_pc, &mut self.ui_context);
 
         for (c, x, y, w, h, r, corners) in &popover_pc.rects {
             widgets.push(AppWidget {
@@ -1355,8 +1355,8 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         }
 
         // Draw global hover highlight if active
-        clear_ui::widget::hover_animation::post_render_check();
-        if let Some((qx, qy, qw, qh, qc)) = clear_ui::widget::hover_animation::get_quad() {
+        cce_ui::widget::hover_animation::post_render_check();
+        if let Some((qx, qy, qw, qh, qc)) = cce_ui::widget::hover_animation::get_quad() {
             widgets.push(AppWidget {
                 x: qx * s,
                 y: (qy - self.scroll_y) * s,
@@ -1371,11 +1371,11 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         }
 
         // Render context menu overlay if visible
-        if clear_ui::widget::context_menu::is_visible() {
-            let cx = clear_ui::widget::context_menu::x();
-            let cy = clear_ui::widget::context_menu::y();
-            let cw = clear_ui::widget::context_menu::w();
-            let ch = clear_ui::widget::context_menu::h();
+        if cce_ui::widget::context_menu::is_visible() {
+            let cx = cce_ui::widget::context_menu::x();
+            let cy = cce_ui::widget::context_menu::y();
+            let cw = cce_ui::widget::context_menu::w();
+            let ch = cce_ui::widget::context_menu::h();
 
             
             // Border
@@ -1396,7 +1396,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             });
             
             // Hover highlight
-            if let Some(h_idx) = clear_ui::widget::context_menu::hovered_item() {
+            if let Some(h_idx) = cce_ui::widget::context_menu::hovered_item() {
                 let iy = cy + h_idx as f32 * 24.0;
                 widgets.push(AppWidget {
                     x: (cx + 2.0) * s, y: (iy + 2.0) * s, w: (cw - 4.0) * s, h: 20.0 * s,
@@ -1408,11 +1408,11 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
             
             // Texts
-            for (idx, opt) in clear_ui::widget::context_menu::options().iter().enumerate() {
+            for (idx, opt) in cce_ui::widget::context_menu::options().iter().enumerate() {
                 let iy = cy + idx as f32 * 24.0 + (24.0 - 12.0) / 2.0;
                 let text_color = if idx == 0 {
                     glyphon::Color::rgb(0x70, 0x70, 0x78)
-                } else if clear_ui::widget::context_menu::hovered_item() == Some(idx) {
+                } else if cce_ui::widget::context_menu::hovered_item() == Some(idx) {
                     glyphon::Color::rgb(0xff, 0xff, 0xff)
                 } else {
                     glyphon::Color::rgb(0xcc, 0xcc, 0xd4)
@@ -1436,17 +1436,17 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
 
     fn render_page_content(&mut self, cx: f32, cy: f32, cw: f32, ch: f32) -> PageContent {
         use pages::*;
-        use clear_ui::layout::GridLayout;
-        let margin = clear_ui::layout::page_margin();
+        use cce_ui::layout::GridLayout;
+        let margin = cce_ui::layout::page_margin();
         let cx = cx + margin;
         let cy = cy + margin;
         let cw = (cw - 2.0 * margin).max(1.0);
         let ch = (ch - 2.0 * margin).max(1.0);
         let mut layout = GridLayout::new(260.0, 20.0);
         let page_idx = Page::ALL.iter().position(|&p| p == self.app.current_page).unwrap_or(0);
-        let root_focused = clear_ui::widget::focus::is_focused(&self.plates[page_idx]);
+        let root_focused = cce_ui::widget::focus::is_focused(&self.plates[page_idx]);
         let sec_focused: Vec<bool> = self.page_sec_containers.iter()
-            .map(|c| clear_ui::widget::focus::is_focused(c))
+            .map(|c| cce_ui::widget::focus::is_focused(c))
             .collect();
         match self.app.current_page {
             Page::Accounts => accounts::view(&mut self.app.accounts, cx, cy, cw, ch, &mut layout, &mut self.ui_context),
@@ -1783,8 +1783,8 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         let lx_no_scroll = x / s;
         let ly_no_scroll = y / s;
         
-        if clear_ui::widget::context_menu::is_visible() {
-            if clear_ui::widget::context_menu::cursor_moved(lx_no_scroll, ly_no_scroll) {
+        if cce_ui::widget::context_menu::is_visible() {
+            if cce_ui::widget::context_menu::cursor_moved(lx_no_scroll, ly_no_scroll) {
                 self.needs_rebuild = true;
                 return true;
             }
@@ -1793,7 +1793,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
 
         let lx = self.cursor_x / s;
         let ly = self.cursor_y / s + self.scroll_y;
-        clear_ui::widget::hover_animation::set_cursor_pos(lx, ly_no_scroll);
+        cce_ui::widget::hover_animation::set_cursor_pos(lx, ly_no_scroll);
         let mut changed = false;
         if lx_no_scroll < self.sidebar_width {
             if self.menubar.cursor_moved(lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
@@ -1857,6 +1857,12 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             if self.app.layout.side_panel_border_opacity_spinbox.cursor_moved(lx, ly, &mut self.ui_context) {
                 changed = true;
             }
+            if self.app.layout.transparency_toggle.cursor_moved(lx, ly, &mut self.ui_context) {
+                changed = true;
+            }
+            if self.app.layout.blur_toggle.cursor_moved(lx, ly, &mut self.ui_context) {
+                changed = true;
+            }
         }
         if self.app.current_page == Page::Interface {
             for cp in &mut self.app.interface.color_selectors {
@@ -2286,15 +2292,15 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         changed
     }
 
-    fn handle_mouse_input_internal(&mut self, button: clear_ui::widget::MouseButton, state: clear_ui::widget::ElementState) -> bool {
+    fn handle_mouse_input_internal(&mut self, button: cce_ui::widget::MouseButton, state: cce_ui::widget::ElementState) -> bool {
         let s = 1.0f32;
         let lx_no_scroll = self.cursor_x / s;
         let ly_no_scroll = self.cursor_y / s;
 
 
 
-        if clear_ui::widget::context_menu::is_visible() {
-            if clear_ui::widget::context_menu::mouse_input(button, state, lx_no_scroll, ly_no_scroll) {
+        if cce_ui::widget::context_menu::is_visible() {
+            if cce_ui::widget::context_menu::mouse_input(button, state, lx_no_scroll, ly_no_scroll) {
                 let mut actions = Vec::new();
                 self.propagate_widget_changes(&mut actions);
                 for action in actions {
@@ -2307,10 +2313,10 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
 
         if lx_no_scroll < self.sidebar_width {
             if self.menubar.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
-                use clear_ui::widget::MenuController;
+                use cce_ui::widget::MenuController;
                 if let Some((idx, _)) = self.menubar.menu_click() {
                     if idx < Page::ALL.len() {
-                        clear_ui::widget::focus::clear_focus();
+                        cce_ui::widget::focus::clear_focus();
                         let new_page = Page::ALL[idx];
                         self.app.current_page = new_page;
                         self.current_page_shared.store(idx as u8, std::sync::atomic::Ordering::SeqCst);
@@ -2328,8 +2334,8 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
         }
 
-        if button != clear_ui::widget::MouseButton::Left && button != clear_ui::widget::MouseButton::Right { return false; }
-        if button == clear_ui::widget::MouseButton::Left && state == clear_ui::widget::ElementState::Released {
+        if button != cce_ui::widget::MouseButton::Left && button != cce_ui::widget::MouseButton::Right { return false; }
+        if button == cce_ui::widget::MouseButton::Left && state == cce_ui::widget::ElementState::Released {
             if self.app.current_page == Page::Audio {
                 let mut ended = false;
                 if let Some(idx) = self.audio_sink_dragging {
@@ -2372,7 +2378,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         let ly = self.cursor_y / s + self.scroll_y;
         let mut actions = Vec::new();
 
-        if state == clear_ui::widget::ElementState::Pressed {
+        if state == cce_ui::widget::ElementState::Pressed {
             let mut clicked_any_focusable = false;
             match self.app.current_page {
                 Page::Accounts => {
@@ -2405,6 +2411,8 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                     if self.app.layout.side_panel_width_spinbox.hit_test(lx, ly, &self.ui_context) { clicked_any_focusable = true; }
                     if self.app.layout.side_panel_border_gap_spinbox.hit_test(lx, ly, &self.ui_context) { clicked_any_focusable = true; }
                     if self.app.layout.side_panel_border_opacity_spinbox.hit_test(lx, ly, &self.ui_context) { clicked_any_focusable = true; }
+                    if self.app.layout.transparency_toggle.hit_test(lx, ly, &self.ui_context) { clicked_any_focusable = true; }
+                    if self.app.layout.blur_toggle.hit_test(lx, ly, &self.ui_context) { clicked_any_focusable = true; }
                 }
                 Page::Interface => {
                     for cp in &mut self.app.interface.color_selectors {
@@ -2531,11 +2539,11 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             if !clicked_any_focusable {
-                clear_ui::widget::focus::clear_focus();
+                cce_ui::widget::focus::clear_focus();
             }
         }
 
-        if state == clear_ui::widget::ElementState::Pressed && self.app.current_page == Page::Layout {
+        if state == cce_ui::widget::ElementState::Pressed && self.app.current_page == Page::Layout {
             for (i, sb) in self.app.layout.spinboxes.iter_mut().enumerate() {
                 if !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
                 let old = sb.value;
@@ -2599,28 +2607,28 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         }
         if self.app.current_page == Page::Layout {
             for (idx, menu) in self.app.layout.tag_layout_menus.iter_mut().enumerate() {
-                if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+                if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
                 if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                     self.needs_rebuild = true;
                 }
-                if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+                if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                     actions.push(AppAction::Layout(pages::layout::LayoutMessage::SetTagLayout(idx + 1, menu.selected)));
                 }
             }
             let menu = &mut self.app.layout.side_panel_behavior_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Layout(pages::layout::LayoutMessage::SetSidePanelBehavior(menu.selected)));
             }
             let menu = &mut self.app.layout.side_panel_position_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Layout(pages::layout::LayoutMessage::SetSidePanelPosition(menu.selected)));
             }
             let sb = &mut self.app.layout.side_panel_width_spinbox;
@@ -2647,8 +2655,18 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                     pages::layout::LayoutMessage::SetSidePanelBorderOpacity(sb.value as u16)
                 ));
             }
+            let toggle = &mut self.app.layout.transparency_toggle;
+            toggle.mouse_input(button, state, lx, ly, &mut self.ui_context);
+            if toggle.take_click() {
+                actions.push(AppAction::Layout(pages::layout::LayoutMessage::ToggleTransparency));
+            }
+            let toggle2 = &mut self.app.layout.blur_toggle;
+            toggle2.mouse_input(button, state, lx, ly, &mut self.ui_context);
+            if toggle2.take_click() {
+                actions.push(AppAction::Layout(pages::layout::LayoutMessage::ToggleBlur));
+            }
         }
-        if state == clear_ui::widget::ElementState::Pressed && self.app.current_page == Page::Interface {
+        if state == cce_ui::widget::ElementState::Pressed && self.app.current_page == Page::Interface {
             for (i, cp) in self.app.interface.color_selectors.iter_mut().enumerate() {
                 let old = cp.color;
                 if !cp.hit_test(lx, ly, &self.ui_context) { cp.unfocus(); }
@@ -2743,11 +2761,11 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetSectionPadding(sb.value as u16)));
             }
             let menu = &mut self.app.interface.label_alignment_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetNestedSectionLabelAlignment(menu.selected)));
             }
             let sb = &mut self.app.interface.label_offset_spinbox;
@@ -2880,7 +2898,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetButtonCornerRadius(sb.value as u16)));
             }
         }
-        if state == clear_ui::widget::ElementState::Pressed && self.app.current_page == Page::Input {
+        if state == cce_ui::widget::ElementState::Pressed && self.app.current_page == Page::Input {
             let sb = &mut self.app.input.rate_spinbox;
             if !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
             let old = sb.value;
@@ -2930,7 +2948,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 actions.push(AppAction::Input(pages::input::InputMessage::ApplyCursorSize));
             }
         }
-        if state == clear_ui::widget::ElementState::Pressed && self.app.current_page == Page::Services {
+        if state == cce_ui::widget::ElementState::Pressed && self.app.current_page == Page::Services {
             let sb = &mut self.app.services.notifications_duration_spinbox;
             if !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
             let old = sb.value;
@@ -2976,37 +2994,37 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 actions.push(AppAction::Input(pages::input::InputMessage::ToggleDwtp));
             }
             let menu = &mut self.app.input.trackpoint_accel_profile_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Input(pages::input::InputMessage::ApplyTrackpointAccelProfile(menu.selected)));
             }
             let menu = &mut self.app.input.cursor_theme_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Input(pages::input::InputMessage::ApplyCursorTheme(menu.selected)));
             }
 
             let tb = &mut self.app.input.zoom_in_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Input(pages::input::InputMessage::ApplyZoomIn));
             }
 
             let tb = &mut self.app.input.zoom_out_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Input(pages::input::InputMessage::ApplyZoomOut));
             }
         }
@@ -3021,7 +3039,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             if toggle.take_click() {
                 actions.push(AppAction::Services(pages::services::ServicesMessage::ToggleNotificationsBell));
             }
-            if state == clear_ui::widget::ElementState::Pressed {
+            if state == cce_ui::widget::ElementState::Pressed {
                 let lbl1 = &mut self.app.services.status_label;
                 if !lbl1.hit_test(lx, ly, &self.ui_context) { lbl1.unfocus(); }
                 lbl1.mouse_input(button, state, lx, ly, &mut self.ui_context);
@@ -3051,21 +3069,21 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let menu = &mut self.app.display.screensaver_style_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Display(pages::display::DisplayMessage::SetScreensaverStyle(menu.selected)));
             }
         }
         if self.app.current_page == Page::Hardware {
             let menu = &mut self.app.hardware.cpu_gov_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 if menu.selected == 0 {
                     actions.push(AppAction::Hardware(pages::hardware::HardwareMessage::SetCpuPerformance));
                 } else {
@@ -3074,11 +3092,11 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let menu = &mut self.app.hardware.gpu_gov_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 if menu.selected == 0 {
                     actions.push(AppAction::Hardware(pages::hardware::HardwareMessage::SetGpuDefault));
                 } else {
@@ -3087,8 +3105,8 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
         }
 
-        if state == clear_ui::widget::ElementState::Pressed && self.app.current_page == Page::Audio {
-            if button == clear_ui::widget::MouseButton::Left {
+        if state == cce_ui::widget::ElementState::Pressed && self.app.current_page == Page::Audio {
+            if button == cce_ui::widget::MouseButton::Left {
                 for (i, slider) in self.app.audio.sink_sliders.iter_mut().enumerate() {
                     if slider.hit_test(lx, ly, &self.ui_context) {
                         slider.drag_begin(lx, ly);
@@ -3121,8 +3139,8 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 }
             }
         }
-        if state == clear_ui::widget::ElementState::Pressed && self.app.current_page == Page::Display {
-            if button == clear_ui::widget::MouseButton::Left {
+        if state == cce_ui::widget::ElementState::Pressed && self.app.current_page == Page::Display {
+            if button == cce_ui::widget::MouseButton::Left {
                 let slider = &mut self.app.display.brightness_slider;
                 if slider.hit_test(lx, ly, &self.ui_context) {
                     slider.drag_begin(lx, ly);
@@ -3166,23 +3184,23 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         if self.app.current_page == Page::Accounts {
             if self.app.accounts.editing_oauth_creds {
                 let tb = &mut self.app.accounts.oauth_client_id_box;
-                if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+                if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
                 if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                     self.needs_rebuild = true;
                 }
 
                 let tb = &mut self.app.accounts.oauth_client_secret_box;
-                if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+                if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
                 if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                     self.needs_rebuild = true;
                 }
             } else if self.app.accounts.adding_new {
                 let tb = &mut self.app.accounts.email_box;
-                if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+                if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
                 if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                     self.needs_rebuild = true;
                 }
-                if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+                if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                     let email_val = tb.text.trim().to_lowercase();
                     if email_val.ends_with("@gmail.com") {
                         self.app.accounts.imap_box.text = "imap.gmail.com:993".to_string();
@@ -3203,19 +3221,19 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 }
 
                 let tb = &mut self.app.accounts.password_box;
-                if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+                if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
                 if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                     self.needs_rebuild = true;
                 }
 
                 let tb = &mut self.app.accounts.imap_box;
-                if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+                if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
                 if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                     self.needs_rebuild = true;
                 }
 
                 let tb = &mut self.app.accounts.smtp_box;
-                if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+                if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
                 if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                     self.needs_rebuild = true;
                 }
@@ -3223,101 +3241,101 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         }
         if self.app.current_page == Page::Interface {
             let tb = &mut self.app.interface.sans_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetSans(tb.text.clone())));
             }
 
             let tb = &mut self.app.interface.serif_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetSerif(tb.text.clone())));
             }
 
             let tb = &mut self.app.interface.mono_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetMono(tb.text.clone())));
             }
 
             let menu = &mut self.app.interface.borders_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetBordersMenu(menu.selected)));
             }
 
             let tb = &mut self.app.interface.borders_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetBorders(tb.text.clone())));
             }
 
             let menu = &mut self.app.interface.status_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetStatusMenu(menu.selected)));
             }
 
             let tb = &mut self.app.interface.status_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetStatus(tb.text.clone())));
             }
 
             let menu = &mut self.app.interface.fuzzel_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetFuzzelMenu(menu.selected)));
             }
 
             let tb = &mut self.app.interface.fuzzel_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetFuzzel(tb.text.clone())));
             }
 
             let menu = &mut self.app.interface.terminal_menu;
-            if state == clear_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !menu.hit_test(lx, ly, &self.ui_context) { menu.unfocus(); }
             if menu.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && menu.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && menu.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetTerminalMenu(menu.selected)));
             }
 
             let tb = &mut self.app.interface.terminal_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
-            if state == clear_ui::widget::ElementState::Pressed && tb.take_change() {
+            if state == cce_ui::widget::ElementState::Pressed && tb.take_change() {
                 actions.push(AppAction::Interface(pages::interface::InterfaceMessage::SetTerminal(tb.text.clone())));
             }
 
@@ -3326,7 +3344,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
 
 
             let fs = &mut self.app.interface.color_selector_font_selector;
-            if state == clear_ui::widget::ElementState::Pressed && !fs.hit_test(lx, ly, &self.ui_context) { fs.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !fs.hit_test(lx, ly, &self.ui_context) { fs.unfocus(); }
             if fs.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
@@ -3335,7 +3353,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let fs = &mut self.app.interface.menubar_font_selector;
-            if state == clear_ui::widget::ElementState::Pressed && !fs.hit_test(lx, ly, &self.ui_context) { fs.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !fs.hit_test(lx, ly, &self.ui_context) { fs.unfocus(); }
             if fs.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
@@ -3344,7 +3362,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let fs = &mut self.app.interface.section_label_font_selector;
-            if state == clear_ui::widget::ElementState::Pressed && !fs.hit_test(lx, ly, &self.ui_context) { fs.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !fs.hit_test(lx, ly, &self.ui_context) { fs.unfocus(); }
             if fs.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
@@ -3353,7 +3371,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let fs = &mut self.app.interface.nested_section_label_font_selector;
-            if state == clear_ui::widget::ElementState::Pressed && !fs.hit_test(lx, ly, &self.ui_context) { fs.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !fs.hit_test(lx, ly, &self.ui_context) { fs.unfocus(); }
             if fs.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
@@ -3362,7 +3380,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let sb = &mut self.app.interface.borders_size_box;
-            if state == clear_ui::widget::ElementState::Pressed && !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
             let old_val = sb.value;
             if sb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
@@ -3372,7 +3390,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let sb = &mut self.app.interface.status_size_box;
-            if state == clear_ui::widget::ElementState::Pressed && !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
             let old_val = sb.value;
             if sb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
@@ -3382,7 +3400,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let sb = &mut self.app.interface.fuzzel_size_box;
-            if state == clear_ui::widget::ElementState::Pressed && !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
             let old_val = sb.value;
             if sb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
@@ -3392,7 +3410,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
             }
 
             let sb = &mut self.app.interface.terminal_size_box;
-            if state == clear_ui::widget::ElementState::Pressed && !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !sb.hit_test(lx, ly, &self.ui_context) { sb.unfocus(); }
             let old_val = sb.value;
             if sb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
@@ -3407,7 +3425,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         }
         if self.app.current_page == Page::Services {
             let tb = &mut self.app.services.search_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) { tb.unfocus(); }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
@@ -3433,7 +3451,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         if self.app.current_page == Page::Packages {
             let pkgs = &mut self.app.packages;
             let tb = &mut pkgs.search_box;
-            if state == clear_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) {
+            if state == cce_ui::widget::ElementState::Pressed && !tb.hit_test(lx, ly, &self.ui_context) {
                 tb.unfocus();
             }
             if tb.mouse_input(button, state, lx, ly, &mut self.ui_context) {
@@ -3488,13 +3506,13 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                 }
             }
         }
-        if state == clear_ui::widget::ElementState::Pressed && self.app.current_page == Page::Hardware {
+        if state == cce_ui::widget::ElementState::Pressed && self.app.current_page == Page::Hardware {
             let hw = &mut self.app.hardware;
             if hw.cpu_list_box.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
             }
         }
-        if state == clear_ui::widget::ElementState::Pressed && self.app.current_page == Page::Radios {
+        if state == cce_ui::widget::ElementState::Pressed && self.app.current_page == Page::Radios {
             let net = &mut self.app.network;
             if net.wifi_list_box.mouse_input(button, state, lx, ly, &mut self.ui_context) {
                 self.needs_rebuild = true;
@@ -3903,7 +3921,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         }
     }
 
-    fn handle_mouse_wheel_internal(&mut self, delta: &clear_ui::widget::MouseScrollDelta, px: f32, py: f32) -> bool {
+    fn handle_mouse_wheel_internal(&mut self, delta: &cce_ui::widget::MouseScrollDelta, px: f32, py: f32) -> bool {
         if let Ok(mut file) = std::fs::OpenOptions::new().create(true).append(true).open("/tmp/clear-scroll-debug.txt") {
             use std::io::Write;
             let _ = writeln!(file, "handle_mouse_wheel_internal: px={}, py={}, delta={:?}, sidebar_w={}", px, py, delta, self.sidebar_width);
@@ -4076,8 +4094,8 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
 
             let scroll_speed = 24.0;
             let dy = match delta {
-                clear_ui::widget::MouseScrollDelta::LineDelta(_, y) => -y * scroll_speed,
-                clear_ui::widget::MouseScrollDelta::PixelDelta(pos) => -pos.y as f32,
+                cce_ui::widget::MouseScrollDelta::LineDelta(_, y) => -y * scroll_speed,
+                cce_ui::widget::MouseScrollDelta::PixelDelta(pos) => -pos.y as f32,
             };
             let old_scroll = self.scroll_y;
             self.scroll_y = (self.scroll_y + dy).max(0.0).min(self.max_scroll_y);
@@ -4096,24 +4114,24 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
         false
     }
 
-    fn get_page_root_widget(&mut self) -> Option<*mut (dyn clear_ui::widget::Element + 'static)> {
+    fn get_page_root_widget(&mut self) -> Option<*mut (dyn cce_ui::widget::Element + 'static)> {
         let page_idx = Page::ALL.iter().position(|&p| p == self.app.current_page).unwrap_or(0);
-        let ptr = &mut self.plates[page_idx] as &mut dyn clear_ui::widget::Element as *mut dyn clear_ui::widget::Element;
+        let ptr = &mut self.plates[page_idx] as &mut dyn cce_ui::widget::Element as *mut dyn cce_ui::widget::Element;
         let static_ptr = unsafe {
-            std::mem::transmute::<*mut dyn clear_ui::widget::Element, *mut (dyn clear_ui::widget::Element + 'static)>(ptr)
+            std::mem::transmute::<*mut dyn cce_ui::widget::Element, *mut (dyn cce_ui::widget::Element + 'static)>(ptr)
         };
         Some(static_ptr)
     }
 
-    fn handle_key_input_internal(&mut self, event: &clear_ui::widget::KeyEvent) -> bool {
-        if event.state == clear_ui::widget::ElementState::Pressed && !event.repeat {
+    fn handle_key_input_internal(&mut self, event: &cce_ui::widget::KeyEvent) -> bool {
+        if event.state == cce_ui::widget::ElementState::Pressed && !event.repeat {
             let is_nav_key = match (&event.logical_key, event.ctrl) {
-                (clear_ui::widget::Key::Character(c), true) if c == "j" || c == "J" || c == "k" || c == "K" || c == "u" || c == "U" || c == "i" || c == "I" => true,
+                (cce_ui::widget::Key::Character(c), true) if c == "j" || c == "J" || c == "k" || c == "K" || c == "u" || c == "U" || c == "i" || c == "I" => true,
                 _ => false,
             };
             if is_nav_key {
-                if clear_ui::widget::focus::has_focus() {
-                    if clear_ui::widget::focus::navigate_focus(&event.logical_key, event.ctrl) {
+                if cce_ui::widget::focus::has_focus() {
+                    if cce_ui::widget::focus::navigate_focus(&event.logical_key, event.ctrl) {
                         self.needs_rebuild = true;
                         return true;
                     }
@@ -4121,7 +4139,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
                     if let Some(root_ptr) = self.get_page_root_widget() {
                         unsafe {
                             let root_ref = &mut *root_ptr;
-                            clear_ui::widget::focus::set_focused(root_ref);
+                            cce_ui::widget::focus::set_focused(root_ref);
                             root_ref.focus();
                             self.needs_rebuild = true;
                             return true;
@@ -5010,5 +5028,5 @@ fn main() {
     let initial_page_idx = Page::ALL.iter().position(|&p| p == initial_page).unwrap_or(0);
     INITIAL_PAGE_INDEX.store(initial_page_idx, std::sync::atomic::Ordering::SeqCst);
 
-    clear_ui::engine::run::<SystemInterface>();
+    cce_ui::engine::run::<SystemInterface>();
 }
diff --git a/src/pages/accounts.rs b/src/pages/accounts.rs
index 9bd7c60..4aff9a6 100644
--- a/src/pages/accounts.rs
+++ b/src/pages/accounts.rs
@@ -1,6 +1,6 @@
 use crate::app::{AppAction, PageContent, SectionContextExt};
-use clear_ui::layout::{PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{TextBox, Element};
+use cce_ui::layout::{PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{TextBox, Element};
 
 #[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq)]
 pub struct AccountInfo {
@@ -110,9 +110,9 @@ pub fn load_accounts() -> Vec<AccountInfo> {
     }
     vec![
         AccountInfo {
-            email: "[email protected]".to_string(),
-            imap: "imap.clear-ui.org:993".to_string(),
-            smtp: "smtp.clear-ui.org:465".to_string(),
+            email: "[email protected]".to_string(),
+            imap: "imap.cce-ui.org:993".to_string(),
+            smtp: "smtp.cce-ui.org:465".to_string(),
             is_default: true,
             password: "mock_password".to_string(),
             is_oauth: false,
@@ -341,15 +341,15 @@ pub async fn exchange_code_for_tokens(code: String, sender: calloop::channel::Se
 
 const TEXT_DIM: [f32; 4] = [0.53, 0.53, 0.60, 1.0];
 
-pub fn view(state: &mut AccountsState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut AccountsState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(2);
 
-    let lm = clear_ui::layout::label_margin();
-    let row_h = clear_ui::layout::spinbox_height();
+    let lm = cce_ui::layout::label_margin();
+    let row_h = cce_ui::layout::spinbox_height();
     let row_gap = lm * 1.0;
-    let widget_h = clear_ui::layout::spinbox_height();
+    let widget_h = cce_ui::layout::spinbox_height();
     let field_gap = lm * 1.5;
     let btn_gap = lm * 1.0;
 
diff --git a/src/pages/audio.rs b/src/pages/audio.rs
index 218505e..4cd3f47 100644
--- a/src/pages/audio.rs
+++ b/src/pages/audio.rs
@@ -1,6 +1,6 @@
 use crate::app::{AppAction, PageContent, SectionContextExt};
-use clear_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{Spinbox, Slider, Element};
+use cce_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{Spinbox, Slider, Element};
 
 #[derive(Debug, Clone)]
 pub struct AudioSink {
@@ -217,7 +217,7 @@ const FILL_BAR: [f32; 4] = [0.30, 0.50, 0.32, 1.0];
 const WHITE: [f32; 4] = [1.0, 1.0, 1.0, 1.0];
 const RED: [f32; 4] = [1.0, 0.33, 0.33, 1.0];
 
-pub fn view(state: &mut AudioState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut AudioState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(2);
@@ -260,13 +260,13 @@ pub fn view(state: &mut AudioState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focu
                         state.sink_sliders[idx].set_value(sink.volume);
                         let slider_x = subsec.ax(bar_x);
                         
-                        let label_h = clear_ui::widget::label_offset(&state.sink_sliders[idx]);
-                        let slider_h = clear_ui::layout::slider_height() + label_h;
+                        let label_h = cce_ui::widget::label_offset(&state.sink_sliders[idx]);
+                        let slider_h = cce_ui::layout::slider_height() + label_h;
                         render_widget(subsec.pc, &mut state.sink_sliders[idx], slider_x, yt, bar_w, slider_h, ctx);
 
                         let row_y = subsec.ay() + slider_h + 8.0;
                         let sb_w = 100.0;
-                        let sb_h = clear_ui::layout::spinbox_height();
+                        let sb_h = cce_ui::layout::spinbox_height();
                         let mute_w = 60.0;
                         let gap = 8.0;
 
@@ -328,13 +328,13 @@ pub fn view(state: &mut AudioState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focu
                         state.source_sliders[idx].set_value(src.volume);
                         let slider_x = subsec.ax(bar_x);
                         
-                        let label_h = clear_ui::widget::label_offset(&state.source_sliders[idx]);
-                        let slider_h = clear_ui::layout::slider_height() + label_h;
+                        let label_h = cce_ui::widget::label_offset(&state.source_sliders[idx]);
+                        let slider_h = cce_ui::layout::slider_height() + label_h;
                         render_widget(subsec.pc, &mut state.source_sliders[idx], slider_x, yt, bar_w, slider_h, ctx);
 
                         let row_y = subsec.ay() + slider_h + 8.0;
                         let sb_w = 100.0;
-                        let sb_h = clear_ui::layout::spinbox_height();
+                        let sb_h = cce_ui::layout::spinbox_height();
                         let mute_w = 60.0;
                         let gap = 8.0;
 
@@ -401,13 +401,13 @@ pub fn update(state: &mut AudioState, msg: AudioMessage) {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use clear_ui::layout::GridLayout;
+    use cce_ui::layout::GridLayout;
 
     #[test]
     fn test_view_layout_grid() {
         let mut state = AudioState::default();
         let mut layout = GridLayout::new(260.0, 20.0);
-        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &[false, false], &mut layout, &mut clear_ui::context::UiContext::new());
+        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &[false, false], &mut layout, &mut cce_ui::context::UiContext::new());
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty());
     }
 }
diff --git a/src/pages/display.rs b/src/pages/display.rs
index 1cd4054..c01689b 100644
--- a/src/pages/display.rs
+++ b/src/pages/display.rs
@@ -1,6 +1,6 @@
 use crate::app::{PageContent, SectionContextExt};
-use clear_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{Spinbox, Label, Element, Toggle, Dropdown, Slider};
+use cce_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{Spinbox, Label, Element, Toggle, Dropdown, Slider};
 
 const CONFIG_PATH: &str = "/home/lsgalante/.config/cce/config.toml";
 
@@ -381,7 +381,7 @@ const BTN_BG: [f32; 4] = [0.20, 0.40, 0.65, 1.0];
 const BTN_HOVER: [f32; 4] = [0.28, 0.50, 0.78, 1.0];
 const WHITE: [f32; 4] = [1.0, 1.0, 1.0, 1.0];
 
-pub fn view(state: &mut DisplayState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut DisplayState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(4);
@@ -401,12 +401,12 @@ pub fn view(state: &mut DisplayState, cx: f32, cy: f32, cw: f32, ch: f32, layout
             let yt = sec.ay();
             state.brightness_slider.set_value(bright_pct as f32 / 100.0);
                         let slider_x = sec.ax(12.0);
-            render_widget(sec.pc, &mut state.brightness_slider, slider_x, yt, bar_w, clear_ui::layout::slider_height(), ctx);
+            render_widget(sec.pc, &mut state.brightness_slider, slider_x, yt, bar_w, cce_ui::layout::slider_height(), ctx);
             sec.text(&format!("{}%", bright_pct), 12.0 + bar_w + 8.0, 7.0, 11.0, TEXT_DIM);
             sec.spacing(34.0);
 
             state.brightness_spinbox.value = bright_pct;
-            sec.widget_full(&mut state.brightness_spinbox, clear_ui::layout::spinbox_height(), ctx);
+            sec.widget_full(&mut state.brightness_spinbox, cce_ui::layout::spinbox_height(), ctx);
             sec.spacing(12.0);
         }
     });
@@ -444,18 +444,18 @@ pub fn view(state: &mut DisplayState, cx: f32, cy: f32, cw: f32, ch: f32, layout
     // ── Screensaver Settings ──
     builder.add_section(&mut final_pc, "Screensaver Settings", false, |sec| {
         state.screensaver_enable_toggle.set_toggled(state.screensaver_enable);
-        sec.widget_full(&mut state.screensaver_enable_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec.widget_full(&mut state.screensaver_enable_toggle, cce_ui::layout::toggle_height(), ctx);
         sec.spacing(8.0);
 
         state.screensaver_lock_screen_toggle.set_toggled(state.screensaver_lock_screen);
-        sec.widget_full(&mut state.screensaver_lock_screen_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec.widget_full(&mut state.screensaver_lock_screen_toggle, cce_ui::layout::toggle_height(), ctx);
         sec.spacing(16.0);
 
                 state.screensaver_timeout_spinbox.value = state.screensaver_timeout;
-        sec.widget_full(&mut state.screensaver_timeout_spinbox, clear_ui::layout::spinbox_height(), ctx);
+        sec.widget_full(&mut state.screensaver_timeout_spinbox, cce_ui::layout::spinbox_height(), ctx);
         sec.spacing(16.0);
 
-        sec.widget_full(&mut state.screensaver_style_menu, clear_ui::layout::dropdown_height(), ctx);
+        sec.widget_full(&mut state.screensaver_style_menu, cce_ui::layout::dropdown_height(), ctx);
         sec.spacing(24.0);
 
         let btn_h = 32.0;
@@ -579,8 +579,8 @@ mod tests {
     #[test]
     fn test_view_layout_grid() {
         let mut state = DisplayState::default();
-        let mut layout = clear_ui::layout::GridLayout::new(260.0, 20.0);
-        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &mut layout, &mut clear_ui::context::UiContext::new());
+        let mut layout = cce_ui::layout::GridLayout::new(260.0, 20.0);
+        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &mut layout, &mut cce_ui::context::UiContext::new());
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty());
     }
 }
diff --git a/src/pages/hardware.rs b/src/pages/hardware.rs
index c6be8a6..1413639 100644
--- a/src/pages/hardware.rs
+++ b/src/pages/hardware.rs
@@ -1,6 +1,6 @@
 use crate::app::{AppAction, PageContent};
-use clear_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{Label, ScrollingList, Dropdown, InfoBox};
+use cce_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{Label, ScrollingList, Dropdown, InfoBox};
 
 #[derive(Debug, Clone, Default)]
 pub struct BatteryInfo {
@@ -378,7 +378,7 @@ const ACCENT: [f32; 4] = [0.36, 0.56, 0.38, 1.0];
 const RED: [f32; 4] = [1.0, 0.33, 0.33, 1.0];
 const ORANGE: [f32; 4] = [1.0, 0.73, 0.20, 1.0];
 
-pub fn view(state: &mut HardwareState, cx: f32, cy: f32, cw: f32, ch: f32, root_focused: bool, layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut HardwareState, cx: f32, cy: f32, cw: f32, ch: f32, root_focused: bool, layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(5);
diff --git a/src/pages/input.rs b/src/pages/input.rs
index 88b5f3a..abf41b5 100644
--- a/src/pages/input.rs
+++ b/src/pages/input.rs
@@ -2,8 +2,8 @@ use std::fs;
 use std::io::Write;
 
 use crate::app::PageContent;
-use clear_ui::layout::{PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{Spinbox, Toggle, Trackpad, Dropdown, Finger, Element, TextBox};
+use cce_ui::layout::{PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{Spinbox, Toggle, Trackpad, Dropdown, Finger, Element, TextBox};
 
 const CONFIG_PATH: &str = "/home/lsgalante/.config/cce/config.toml";
 
@@ -162,7 +162,7 @@ impl Default for InputState {
 }
 
 impl InputState {
-    pub fn is_over_trackpad(&self, lx: f32, ly: f32, ctx: &clear_ui::context::UiContext) -> bool {
+    pub fn is_over_trackpad(&self, lx: f32, ly: f32, ctx: &cce_ui::context::UiContext) -> bool {
         self.trackpad.hit_test(lx, ly, ctx)
     }
 }
@@ -409,7 +409,7 @@ fn apply_repeat_config(rate: u16, delay: u16) {
 const TEXT_FG: [f32; 4] = [0.83, 0.83, 0.83, 1.0];
 const TEXT_DIM: [f32; 4] = [0.53, 0.53, 0.60, 1.0];
 
-pub fn view(state: &mut InputState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut InputState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(8);
@@ -417,7 +417,7 @@ pub fn view(state: &mut InputState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focu
     // ── Touchpad ──
     builder.add_section(&mut final_pc, "Touchpad", false, |sec| {
         state.tap_toggle.set_toggled(state.tap_to_click);
-        sec.widget_full(&mut state.tap_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec.widget_full(&mut state.tap_toggle, cce_ui::layout::toggle_height(), ctx);
         sec.spacing(8.0);
 
         // Built-in trackpad visualizer widget
@@ -431,7 +431,7 @@ pub fn view(state: &mut InputState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focu
     // ── Trackpoint ──
     builder.add_section(&mut final_pc, "Trackpoint", sec_focused.first().copied().unwrap_or(false), |sec| {
         state.dwtp_toggle.set_toggled(state.dwtp);
-        sec.widget_full(&mut state.dwtp_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec.widget_full(&mut state.dwtp_toggle, cce_ui::layout::toggle_height(), ctx);
         sec.spacing(12.0);
 
         sec.widget_full(&mut state.trackpoint_accel_speed_spinbox, 44.0, ctx);
@@ -462,14 +462,14 @@ pub fn view(state: &mut InputState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focu
     // ── Scrolling ──
     builder.add_section(&mut final_pc, "Scrolling", sec_focused.get(3).copied().unwrap_or(false), |sec| {
         state.scroll_toggle.set_toggled(state.inertial_scroll);
-        sec.widget_full(&mut state.scroll_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec.widget_full(&mut state.scroll_toggle, cce_ui::layout::toggle_height(), ctx);
         sec.spacing(12.0);
 
         sec.widget_full(&mut state.scroll_friction_spinbox, 44.0, ctx);
         sec.spacing(12.0);
 
         state.natural_toggle.set_toggled(state.natural_scroll);
-        sec.widget_full(&mut state.natural_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec.widget_full(&mut state.natural_toggle, cce_ui::layout::toggle_height(), ctx);
         sec.spacing(12.0);
 
         sec.widget_full(&mut state.scroll_speed_spinbox, 44.0, ctx);
@@ -479,14 +479,14 @@ pub fn view(state: &mut InputState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focu
     // ── Inertial Input ──
     builder.add_section(&mut final_pc, "Inertial Input", sec_focused.get(4).copied().unwrap_or(false), |sec| {
         state.pointer_toggle.set_toggled(state.inertial_pointer);
-        sec.widget_full(&mut state.pointer_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec.widget_full(&mut state.pointer_toggle, cce_ui::layout::toggle_height(), ctx);
         sec.spacing(12.0);
 
         sec.widget_full(&mut state.pointer_friction_spinbox, 44.0, ctx);
         sec.spacing(16.0);
 
         state.trackpad_toggle.set_toggled(state.inertial_trackpad);
-        sec.widget_full(&mut state.trackpad_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec.widget_full(&mut state.trackpad_toggle, cce_ui::layout::toggle_height(), ctx);
         sec.spacing(12.0);
 
         sec.widget_full(&mut state.trackpad_friction_spinbox, 44.0, ctx);
@@ -639,7 +639,7 @@ mod tests {
     fn test_is_over_trackpad() {
         let mut state = InputState::default();
         state.trackpad.set_rect(100.0, 200.0, 300.0, 150.0);
-        let ctx = clear_ui::context::UiContext::new();
+        let ctx = cce_ui::context::UiContext::new();
 
         // Inside
         assert!(state.is_over_trackpad(150.0, 250.0, &ctx));
@@ -669,8 +669,8 @@ mod tests {
     #[test]
     fn test_view_layout_grid() {
         let mut state = InputState::default();
-        let mut layout = clear_ui::layout::ColumnLayout::new(20.0);
-        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &[false, false, false, false, false], &mut layout, &mut clear_ui::context::UiContext::new());
+        let mut layout = cce_ui::layout::ColumnLayout::new(20.0);
+        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &[false, false, false, false, false], &mut layout, &mut cce_ui::context::UiContext::new());
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty());
     }
 }
diff --git a/src/pages/interface.rs b/src/pages/interface.rs
index ef5dcf5..9b39ba7 100644
--- a/src/pages/interface.rs
+++ b/src/pages/interface.rs
@@ -1,8 +1,8 @@
 use std::fs;
 use std::io::Write;
 use crate::app::PageContent;
-use clear_ui::layout::{PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{
+use cce_ui::layout::{PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{
     ColorSelector, Spinbox, Element, Dropdown, TextBox, FontSelector, Toggle
 };
 
@@ -716,7 +716,7 @@ fn apply_disabled_color(rgb: [u8; 3]) {
     send_ipc_command(&format!("layout disabled_color #{:02x}{:02x}{:02x}", rgb[0], rgb[1], rgb[2]));
 }
 
-fn status_interface_reload() {
+pub fn status_interface_reload() {
     let _ = std::process::Command::new("pkill")
         .args(["-f", "cce-status-interface"])
         .status();
@@ -739,28 +739,28 @@ fn apply_visual_guides_color(rgb: [u8; 3]) {
 fn apply_slider_track_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("slider_track_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_slider_track([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_slider_track([r, g, b, 1.0]);
 }
 
 fn apply_page_low_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("page_low_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_page_low_color([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_page_low_color([r, g, b, 1.0]);
 }
 
 fn apply_color_borders_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("color_borders_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_color_borders_color([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_color_borders_color([r, g, b, 1.0]);
 }
 
 fn apply_normal_color(rgb: [u8; 3]) {
@@ -772,73 +772,73 @@ fn apply_normal_color(rgb: [u8; 3]) {
 fn apply_paginator_sidebar_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("paginator_sidebar_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_sidebar_bg_color([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_sidebar_bg_color([r, g, b, 1.0]);
 }
 
 fn apply_primary_highlight_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("primary_highlight_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_highlight_primary_color([r, g, b, 0.12]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_highlight_primary_color([r, g, b, 0.12]);
 }
 
 fn apply_menubar_tab_label_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("menubar_tab_label_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_menubar_tab_label_color([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_menubar_tab_label_color([r, g, b, 1.0]);
 }
 
 fn apply_toggle_enabled_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("toggle_enabled_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_toggle_on_color([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_toggle_on_color([r, g, b, 1.0]);
 }
 
 fn apply_toggle_disabled_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("toggle_disabled_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_toggle_off_color([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_toggle_off_color([r, g, b, 1.0]);
 }
 
 fn apply_scrollinglist_bg_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("scrollinglist_bg_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_scrollinglist_bg_color([r, g, b, 0.3]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_scrollinglist_bg_color([r, g, b, 0.3]);
 }
 
 fn apply_breadcrumb_bg_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("breadcrumb_bg_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_breadcrumb_bg_color([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_breadcrumb_bg_color([r, g, b, 1.0]);
 }
 
 fn apply_popover_bg_color(rgb: [u8; 3]) {
     let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
     write_config_value("popover_bg_color", &hex);
-    let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
-    let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
-    let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
-    clear_ui::color::set_popover_bg_color([r, g, b, 1.0]);
+    let r = cce_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+    let g = cce_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+    let b = cce_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+    cce_ui::color::set_popover_bg_color([r, g, b, 1.0]);
 }
 
 fn apply_notifications_bg_color(rgb: [u8; 3]) {
@@ -855,136 +855,136 @@ fn apply_notifications_opacity(opacity: f32) {
 fn apply_paginator_tab_margin_x(margin: u16) {
     write_config_value("paginator_tab_margin_x", &margin.to_string());
     send_ipc_command(&format!("layout paginator_tab_margin_x {}", margin));
-    clear_ui::layout::set_paginator_tab_margin_x(margin as f32);
+    cce_ui::layout::set_paginator_tab_margin_x(margin as f32);
 }
 
 fn apply_paginator_tab_margin_y(margin: u16) {
     write_config_value("paginator_tab_margin_y", &margin.to_string());
     send_ipc_command(&format!("layout paginator_tab_margin_y {}", margin));
-    clear_ui::layout::set_paginator_tab_margin_y(margin as f32);
+    cce_ui::layout::set_paginator_tab_margin_y(margin as f32);
 }
 
 fn apply_paginator_tab_padding_x(padding: u16) {
     write_config_value("paginator_tab_padding_x", &padding.to_string());
     send_ipc_command(&format!("layout paginator_tab_padding_x {}", padding));
-    clear_ui::layout::set_paginator_tab_padding_x(padding as f32);
+    cce_ui::layout::set_paginator_tab_padding_x(padding as f32);
 }
 
 fn apply_paginator_tab_padding_y(padding: u16) {
     write_config_value("paginator_tab_padding_y", &padding.to_string());
     send_ipc_command(&format!("layout paginator_tab_padding_y {}", padding));
-    clear_ui::layout::set_paginator_tab_padding_y(padding as f32);
+    cce_ui::layout::set_paginator_tab_padding_y(padding as f32);
 }
 
 fn apply_plate_padding(padding: u16) {
     write_config_value("plate_padding", &padding.to_string());
-    clear_ui::layout::set_plate_padding(padding as f32);
+    cce_ui::layout::set_plate_padding(padding as f32);
 }
 
 fn apply_page_margin(margin: u16) {
     write_config_value("page_margin", &margin.to_string());
-    clear_ui::layout::set_page_margin(margin as f32);
+    cce_ui::layout::set_page_margin(margin as f32);
 }
 
 fn apply_grid_min_col_width(width: u16) {
     write_config_value("grid_min_col_width", &width.to_string());
-    clear_ui::layout::set_grid_min_col_width(width as f32);
+    cce_ui::layout::set_grid_min_col_width(width as f32);
 }
 
 fn apply_section_padding(padding: u16) {
     write_config_value("section_padding", &padding.to_string());
-    clear_ui::layout::set_section_padding(padding as f32);
+    cce_ui::layout::set_section_padding(padding as f32);
 }
 
 fn apply_spinbox_height(height: u16) {
     write_config_value("spinbox_height", &height.to_string());
-    clear_ui::layout::set_spinbox_height(height as f32);
+    cce_ui::layout::set_spinbox_height(height as f32);
 }
 
 fn apply_spinbox_corner_radius(radius: u16) {
     write_config_value("spinbox_corner_radius", &radius.to_string());
-    clear_ui::layout::set_spinbox_corner_radius(radius as f32);
+    cce_ui::layout::set_spinbox_corner_radius(radius as f32);
 }
 
 fn apply_toggle_height(height: u16) {
     write_config_value("toggle_height", &height.to_string());
-    clear_ui::layout::set_toggle_height(height as f32);
+    cce_ui::layout::set_toggle_height(height as f32);
 }
 
 fn apply_color_selector_height(height: u16) {
     write_config_value("color_selector_height", &height.to_string());
-    clear_ui::layout::set_color_selector_height(height as f32);
+    cce_ui::layout::set_color_selector_height(height as f32);
 }
 
 fn apply_color_selector_preview_corner_radius(radius: u16) {
     write_config_value("color_selector_preview_corner_radius", &radius.to_string());
-    clear_ui::layout::set_color_selector_preview_corner_radius(radius as f32);
+    cce_ui::layout::set_color_selector_preview_corner_radius(radius as f32);
 }
 
 fn apply_color_selector_preview_margin(margin: u16) {
     write_config_value("color_selector_preview_margin", &margin.to_string());
-    clear_ui::layout::set_color_selector_preview_margin(margin as f32);
+    cce_ui::layout::set_color_selector_preview_margin(margin as f32);
 }
 
 fn apply_textbox_height(height: u16) {
     write_config_value("textbox_height", &height.to_string());
-    clear_ui::layout::set_textbox_height(height as f32);
+    cce_ui::layout::set_textbox_height(height as f32);
 }
 
 fn apply_slider_height(height: u16) {
     write_config_value("slider_height", &height.to_string());
-    clear_ui::layout::set_slider_height(height as f32);
+    cce_ui::layout::set_slider_height(height as f32);
 }
 
 
 fn apply_font_selector_height(height: u16) {
     write_config_value("font_selector_height", &height.to_string());
-    clear_ui::layout::set_font_selector_height(height as f32);
+    cce_ui::layout::set_font_selector_height(height as f32);
 }
 
 fn apply_dropdown_height(height: u16) {
     write_config_value("dropdown_height", &height.to_string());
-    clear_ui::layout::set_dropdown_height(height as f32);
+    cce_ui::layout::set_dropdown_height(height as f32);
 }
 
 fn apply_button_corner_radius(radius: u16) {
     write_config_value("button_corner_radius", &radius.to_string());
-    clear_ui::layout::set_button_corner_radius(radius as f32);
+    cce_ui::layout::set_button_corner_radius(radius as f32);
 }
 
 fn apply_color_selector_font(font: &str) {
     write_config_value("color_selector_font", &format!("\"{}\"", font));
-    clear_ui::layout::set_color_selector_font(font);
+    cce_ui::layout::set_color_selector_font(font);
 }
 
 fn apply_menubar_font(font: &str) {
     write_config_value("menubar_font", &format!("\"{}\"", font));
-    clear_ui::layout::set_menubar_font(font);
+    cce_ui::layout::set_menubar_font(font);
 }
 
 fn apply_section_label_font(font: &str) {
     write_config_value("section_label_font", &format!("\"{}\"", font));
-    clear_ui::layout::set_section_label_font(font);
+    cce_ui::layout::set_section_label_font(font);
 }
 
 fn apply_nested_section_label_font(font: &str) {
     write_config_value("nested_section_label_font", &format!("\"{}\"", font));
-    clear_ui::layout::set_nested_section_label_font(font);
+    cce_ui::layout::set_nested_section_label_font(font);
 }
 
 fn apply_nested_section_label_alignment(align: u8) {
     write_config_value("nested_section_label_alignment", &align.to_string());
-    clear_ui::layout::set_nested_section_label_alignment(align);
+    cce_ui::layout::set_nested_section_label_alignment(align);
 }
 
 fn apply_nested_section_label_offset(offset: i16) {
     write_config_value("nested_section_label_offset", &offset.to_string());
-    clear_ui::layout::set_nested_section_label_offset(offset as f32);
+    cce_ui::layout::set_nested_section_label_offset(offset as f32);
 }
 
 fn apply_label_margin(margin: u16) {
     write_config_value("label_margin", &margin.to_string());
-    clear_ui::layout::set_label_margin(margin as f32);
+    cce_ui::layout::set_label_margin(margin as f32);
 }
 
 const FONTS_CONF_PATH: &str = "/home/lsgalante/.config/fontconfig/fonts.conf";
@@ -1388,7 +1388,7 @@ pub async fn fetch_typeface_state() -> InterfaceState {
     state
 }
 
-pub fn view(state: &mut InterfaceState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut InterfaceState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 260.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(6);
@@ -1732,9 +1732,9 @@ pub fn view(state: &mut InterfaceState, cx: f32, cy: f32, cw: f32, ch: f32, sec_
                 let cols = subsec.row_layout(2, 10.0);
                 if cols.len() == 2 {
                     state.borders_menu.set_row_rect(cols[0].0, cols[0].1);
-                    clear_ui::layout::render_widget(subsec.pc, &mut state.borders_menu, cols[0].0, start_y, cols[0].1, widget_h, ctx);
+                    cce_ui::layout::render_widget(subsec.pc, &mut state.borders_menu, cols[0].0, start_y, cols[0].1, widget_h, ctx);
                     state.borders_size_box.set_row_rect(cols[1].0, cols[1].1);
-                    clear_ui::layout::render_widget(subsec.pc, &mut state.borders_size_box, cols[1].0, start_y, cols[1].1, widget_h, ctx);
+                    cce_ui::layout::render_widget(subsec.pc, &mut state.borders_size_box, cols[1].0, start_y, cols[1].1, widget_h, ctx);
                 }
                 subsec.spacing(widget_h);
                 subsec.widget_full(&mut state.borders_box, 44.0, ctx);
@@ -1745,9 +1745,9 @@ pub fn view(state: &mut InterfaceState, cx: f32, cy: f32, cw: f32, ch: f32, sec_
                 let cols = subsec.row_layout(2, 10.0);
                 if cols.len() == 2 {
                     state.status_menu.set_row_rect(cols[0].0, cols[0].1);
-                    clear_ui::layout::render_widget(subsec.pc, &mut state.status_menu, cols[0].0, start_y, cols[0].1, widget_h, ctx);
+                    cce_ui::layout::render_widget(subsec.pc, &mut state.status_menu, cols[0].0, start_y, cols[0].1, widget_h, ctx);
                     state.status_size_box.set_row_rect(cols[1].0, cols[1].1);
-                    clear_ui::layout::render_widget(subsec.pc, &mut state.status_size_box, cols[1].0, start_y, cols[1].1, widget_h, ctx);
+                    cce_ui::layout::render_widget(subsec.pc, &mut state.status_size_box, cols[1].0, start_y, cols[1].1, widget_h, ctx);
                 }
                 subsec.spacing(widget_h);
                 subsec.widget_full(&mut state.status_box, 44.0, ctx);
@@ -1758,9 +1758,9 @@ pub fn view(state: &mut InterfaceState, cx: f32, cy: f32, cw: f32, ch: f32, sec_
                 let cols = subsec.row_layout(2, 10.0);
                 if cols.len() == 2 {
                     state.fuzzel_menu.set_row_rect(cols[0].0, cols[0].1);
-                    clear_ui::layout::render_widget(subsec.pc, &mut state.fuzzel_menu, cols[0].0, start_y, cols[0].1, widget_h, ctx);
+                    cce_ui::layout::render_widget(subsec.pc, &mut state.fuzzel_menu, cols[0].0, start_y, cols[0].1, widget_h, ctx);
                     state.fuzzel_size_box.set_row_rect(cols[1].0, cols[1].1);
-                    clear_ui::layout::render_widget(subsec.pc, &mut state.fuzzel_size_box, cols[1].0, start_y, cols[1].1, widget_h, ctx);
+                    cce_ui::layout::render_widget(subsec.pc, &mut state.fuzzel_size_box, cols[1].0, start_y, cols[1].1, widget_h, ctx);
                 }
                 subsec.spacing(widget_h);
                 subsec.widget_full(&mut state.fuzzel_box, 44.0, ctx);
@@ -1771,9 +1771,9 @@ pub fn view(state: &mut InterfaceState, cx: f32, cy: f32, cw: f32, ch: f32, sec_
                 let cols = subsec.row_layout(2, 10.0);
                 if cols.len() == 2 {
                     state.terminal_menu.set_row_rect(cols[0].0, cols[0].1);
-                    clear_ui::layout::render_widget(subsec.pc, &mut state.terminal_menu, cols[0].0, start_y, cols[0].1, widget_h, ctx);
+                    cce_ui::layout::render_widget(subsec.pc, &mut state.terminal_menu, cols[0].0, start_y, cols[0].1, widget_h, ctx);
                     state.terminal_size_box.set_row_rect(cols[1].0, cols[1].1);
-                    clear_ui::layout::render_widget(subsec.pc, &mut state.terminal_size_box, cols[1].0, start_y, cols[1].1, widget_h, ctx);
+                    cce_ui::layout::render_widget(subsec.pc, &mut state.terminal_size_box, cols[1].0, start_y, cols[1].1, widget_h, ctx);
                 }
                 subsec.spacing(widget_h);
                 subsec.widget_full(&mut state.terminal_box, 44.0, ctx);
@@ -2435,7 +2435,7 @@ pub fn update(state: &mut InterfaceState, msg: InterfaceMessage) {
     }
 }
 
-fn parse_transparency_opacity(content: &str) -> f32 {
+pub fn parse_transparency_opacity(content: &str) -> f32 {
     let mut in_section = false;
     for line in content.lines() {
         let trimmed = line.trim();
@@ -2457,7 +2457,7 @@ fn parse_transparency_opacity(content: &str) -> f32 {
     0.9 // default to 0.9
 }
 
-fn write_transparency_config_value(key: &str, value: &str) {
+pub fn write_transparency_config_value(key: &str, value: &str) {
     let content = fs::read_to_string(CONFIG_PATH).unwrap_or_default();
     let new_line = format!("{} = {}", key, value);
 
diff --git a/src/pages/layout.rs b/src/pages/layout.rs
index 7c83bfe..8b4f145 100644
--- a/src/pages/layout.rs
+++ b/src/pages/layout.rs
@@ -2,8 +2,9 @@ use std::fs;
 use std::io::Write;
 
 use crate::app::PageContent;
-use clear_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{Spinbox, Dropdown, LayoutPreview, PreviewLayoutMode};
+use cce_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{Spinbox, Dropdown, LayoutPreview, PreviewLayoutMode, Toggle, Element};
+use crate::pages::interface::{parse_bool_from, parse_transparency_opacity, write_transparency_config_value, status_interface_reload};
 
 
 const CONFIG_PATH: &str = "/home/lsgalante/.config/cce/config.toml";
@@ -80,6 +81,10 @@ pub struct LayoutState {
     pub side_panel_border_gap_spinbox: Spinbox,
     pub side_panel_border_opacity: u16,
     pub side_panel_border_opacity_spinbox: Spinbox,
+    pub transparency_enabled: bool,
+    pub transparency_toggle: Toggle,
+    pub blur_enabled: bool,
+    pub blur_toggle: Toggle,
 }
 
 impl Default for LayoutState {
@@ -128,6 +133,10 @@ impl Default for LayoutState {
             side_panel_border_gap_spinbox: Spinbox::new(0, 0, 500, 1),
             side_panel_border_opacity: 100,
             side_panel_border_opacity_spinbox: Spinbox::new(100, 0, 100, 5),
+            transparency_enabled: true,
+            transparency_toggle: Toggle::new().with_label("Transparency"),
+            blur_enabled: true,
+            blur_toggle: Toggle::new().with_label("Blur"),
         }
     }
 }
@@ -147,6 +156,8 @@ pub enum LayoutMessage {
     SetSidePanelWidth(u16),
     SetSidePanelBorderGap(u16),
     SetSidePanelBorderOpacity(u16),
+    ToggleTransparency,
+    ToggleBlur,
     Refreshed(LayoutState),
 }
 
@@ -195,6 +206,13 @@ pub fn read_layout_config() -> LayoutState {
     let spbg = parse_u16_from(&content, "side_panel_border_gap", 0);
     let spbo = parse_u16_from(&content, "side_panel_border_opacity", 100);
 
+    let transparency_opacity = parse_transparency_opacity(&content);
+    let transparency_enabled = transparency_opacity < 1.0;
+
+    let window_blur = parse_bool_from(&content, "window_blur", false);
+    let border_blur = parse_bool_from(&content, "border_blur", false);
+    let blur_enabled = window_blur || border_blur;
+
     LayoutState {
         fullscreen_border_width: fs,
         cascade_border_width: ca,
@@ -222,6 +240,10 @@ pub fn read_layout_config() -> LayoutState {
         side_panel_border_gap_spinbox: Spinbox::new(spbg as i32, 0, 500, 1),
         side_panel_border_opacity: spbo,
         side_panel_border_opacity_spinbox: Spinbox::new(spbo as i32, 0, 100, 5),
+        transparency_enabled,
+        transparency_toggle: Toggle::new().with_label("Transparency"),
+        blur_enabled,
+        blur_toggle: Toggle::new().with_label("Blur"),
     }
 }
 
@@ -543,10 +565,10 @@ fn read_current_layout_status() -> LayoutStatusInfo {
     }
 }
 
-pub fn view(state: &mut LayoutState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut LayoutState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
-    let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(8);
+    let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(9);
 
     // Current Layout Section (Read-only visual preview)
     builder.add_section(&mut final_pc, "Current Layout", false, |sec_cl| {
@@ -666,6 +688,17 @@ pub fn view(state: &mut LayoutState, cx: f32, cy: f32, cw: f32, ch: f32, sec_foc
         side_panel_sec.spacing(8.0);
     });
 
+    // 8. Effects Section
+    builder.add_section(&mut final_pc, "Effects", true, |effects_sec| {
+        effects_sec.spacing(8.0);
+        state.transparency_toggle.set_toggled(state.transparency_enabled);
+        effects_sec.widget_full(&mut state.transparency_toggle, cce_ui::layout::toggle_height(), ctx);
+        effects_sec.spacing(8.0);
+        state.blur_toggle.set_toggled(state.blur_enabled);
+        effects_sec.widget_full(&mut state.blur_toggle, cce_ui::layout::toggle_height(), ctx);
+        effects_sec.spacing(8.0);
+    });
+
 
     final_pc
 }
@@ -776,7 +809,30 @@ pub fn update(state: &mut LayoutState, msg: LayoutMessage) {
             write_config_value("side_panel_border_opacity", &val.to_string());
             send_ipc_command(&format!("layout side_panel_border_opacity {}", val));
         }
-        LayoutMessage::Refreshed(new) => { *state = new; }
+        LayoutMessage::ToggleTransparency => {
+            state.transparency_enabled = !state.transparency_enabled;
+            if state.transparency_enabled {
+                write_transparency_config_value("opacity", "0.85");
+            } else {
+                write_transparency_config_value("opacity", "1.00");
+            }
+            send_ipc_command("reload");
+            status_interface_reload();
+        }
+        LayoutMessage::ToggleBlur => {
+            state.blur_enabled = !state.blur_enabled;
+            let val = state.blur_enabled.to_string();
+            write_config_value("window_blur", &val);
+            write_config_value("border_blur", &val);
+            send_ipc_command("reload");
+        }
+        LayoutMessage::Refreshed(new) => {
+            let transparency_hover = state.transparency_toggle.hovered();
+            let blur_hover = state.blur_toggle.hovered();
+            *state = new;
+            state.transparency_toggle.set_hovered(transparency_hover);
+            state.blur_toggle.set_hovered(blur_hover);
+        }
     }
 }
 
@@ -866,8 +922,8 @@ mode = "popup"
     #[test]
     fn test_view_layout_grid() {
         let mut state = LayoutState::default();
-        let mut layout = clear_ui::layout::ColumnLayout::new(20.0);
-        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &[false, false, false, false], &mut layout, &mut clear_ui::context::UiContext::new());
+        let mut layout = cce_ui::layout::ColumnLayout::new(20.0);
+        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &[false, false, false, false], &mut layout, &mut cce_ui::context::UiContext::new());
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty());
     }
 }
diff --git a/src/pages/network.rs b/src/pages/network.rs
index df78063..060c519 100644
--- a/src/pages/network.rs
+++ b/src/pages/network.rs
@@ -1,6 +1,6 @@
 use crate::app::{AppAction, PageContent, SectionContextExt};
-use clear_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{ScrollingList, Toggle, Element};
+use cce_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{ScrollingList, Toggle, Element};
 
 #[derive(Debug, Clone)]
 pub struct WifiNetwork {
@@ -275,7 +275,7 @@ const NET_BTN: [f32; 4] = [0.13, 0.20, 0.27, 1.0];
 const ACT_BTN: [f32; 4] = [0.16, 0.29, 0.18, 1.0];
 const WHITE: [f32; 4] = [1.0, 1.0, 1.0, 1.0];
 
-pub fn view(state: &mut NetworkState, cx: f32, cy: f32, cw: f32, ch: f32, root_focused: bool, layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut NetworkState, cx: f32, cy: f32, cw: f32, ch: f32, root_focused: bool, layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(2);
@@ -285,7 +285,7 @@ pub fn view(state: &mut NetworkState, cx: f32, cy: f32, cw: f32, ch: f32, root_f
         let sec_w = sec.cw;
         let rx = sec.left;
         let padding = sec.padding();
-        let row_gap = clear_ui::layout::label_margin();
+        let row_gap = cce_ui::layout::label_margin();
         let margin = padding.max(12.0);
 
         if !state.loaded {
@@ -370,7 +370,7 @@ pub fn view(state: &mut NetworkState, cx: f32, cy: f32, cw: f32, ch: f32, root_f
     builder.add_section(&mut final_pc, "Bluetooth", false, |sec| {
         let bt_sec_w = sec.cw;
         let padding = sec.padding();
-        let row_gap = clear_ui::layout::label_margin();
+        let row_gap = cce_ui::layout::label_margin();
         let margin = padding.max(12.0);
         let font_size = 12.0;
         let btn_h = 28.0;
@@ -522,8 +522,8 @@ mod tests {
         let mut state = NetworkState::default();
         state.loaded = true;
         state.wifi_enabled = true;
-        let mut layout = clear_ui::layout::ColumnLayout::new(20.0);
-        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, false, &mut layout, &mut clear_ui::context::UiContext::new());
+        let mut layout = cce_ui::layout::ColumnLayout::new(20.0);
+        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, false, &mut layout, &mut cce_ui::context::UiContext::new());
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty() || !pc.buttons.is_empty());
     }
 
@@ -535,8 +535,8 @@ mod tests {
         state.connected_ssid = "MyHomeWiFi".to_string();
         state.signal_strength = 80;
         state.ip_address = "192.168.1.50".to_string();
-        let mut layout = clear_ui::layout::ColumnLayout::new(20.0);
-        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, false, &mut layout, &mut clear_ui::context::UiContext::new());
+        let mut layout = cce_ui::layout::ColumnLayout::new(20.0);
+        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, false, &mut layout, &mut cce_ui::context::UiContext::new());
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty() || !pc.buttons.is_empty());
     }
 }
diff --git a/src/pages/packages.rs b/src/pages/packages.rs
index f01c540..e6437ad 100644
--- a/src/pages/packages.rs
+++ b/src/pages/packages.rs
@@ -1,6 +1,6 @@
 use crate::app::{AppAction, PageContent, SectionContextExt};
-use clear_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy, SectionContext};
-use clear_ui::widget::{Element, ScrollingList, TextBox, InteractiveListItem};
+use cce_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy, SectionContext};
+use cce_ui::widget::{Element, ScrollingList, TextBox, InteractiveListItem};
 
 #[derive(Debug, Clone)]
 pub struct PackageInfo {
@@ -324,7 +324,7 @@ pub fn view(
     ch: f32,
     sec_focused: &[bool],
     layout: &mut dyn LayoutStrategy,
-    ctx: &mut clear_ui::context::UiContext,
+    ctx: &mut cce_ui::context::UiContext,
 ) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
@@ -747,8 +747,8 @@ mod tests {
     #[test]
     fn test_view_layout_grid() {
         let mut state = PackagesState::default();
-        let mut layout = clear_ui::layout::ColumnLayout::new(20.0);
-        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &[false, false], &mut layout, &mut clear_ui::context::UiContext::new());
+        let mut layout = cce_ui::layout::ColumnLayout::new(20.0);
+        let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &[false, false], &mut layout, &mut cce_ui::context::UiContext::new());
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty() || !pc.buttons.is_empty());
     }
 }
diff --git a/src/pages/services.rs b/src/pages/services.rs
index f255e9b..3192cdb 100644
--- a/src/pages/services.rs
+++ b/src/pages/services.rs
@@ -1,8 +1,8 @@
 use std::fs;
 use std::io::Write;
 use crate::app::{AppAction, PageContent, SectionContextExt};
-use clear_ui::layout::{PageLayoutBuilder, LayoutStrategy};
-use clear_ui::widget::{Element, ScrollingList, TextBox, StatusDot, DotStatus, InteractiveListItem, Toggle, Spinbox, Slider, Label};
+use cce_ui::layout::{PageLayoutBuilder, LayoutStrategy};
+use cce_ui::widget::{Element, ScrollingList, TextBox, StatusDot, DotStatus, InteractiveListItem, Toggle, Spinbox, Slider, Label};
 use crate::pages::interface::parse_u16_from;
 
 // ── Notifications Data and Settings Configuration ──
@@ -212,7 +212,7 @@ fn service_action(name: &str, action: &str, is_system: bool) {
 
 const TEXT_DIM: [f32; 4] = [0.53, 0.53, 0.60, 1.0];
 
-pub fn view(state: &mut ServicesState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut ServicesState, cx: f32, cy: f32, cw: f32, ch: f32, sec_focused: &[bool], layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(3);
@@ -268,7 +268,7 @@ pub fn view(state: &mut ServicesState, cx: f32, cy: f32, cw: f32, ch: f32, sec_f
             let search_h = 46.0;
             
             state.search_box.set_row_rect(sec.left + 12.0, search_w);
-            clear_ui::layout::render_widget(
+            cce_ui::layout::render_widget(
                 sec.pc,
                 &mut state.search_box,
                 sec.left + 12.0,
@@ -285,7 +285,7 @@ pub fn view(state: &mut ServicesState, cx: f32, cy: f32, cw: f32, ch: f32, sec_f
             let list_box_w = sec_w - 24.0;
             let list_box_h = 360.0;
             
-            clear_ui::layout::render_widget(sec.pc, &mut state.list_box, list_box_x, list_box_y, list_box_w, list_box_h, ctx);
+            cce_ui::layout::render_widget(sec.pc, &mut state.list_box, list_box_x, list_box_y, list_box_w, list_box_h, ctx);
 
             // Filter services
             let query = if state.search_box.editing {
@@ -342,7 +342,7 @@ pub fn view(state: &mut ServicesState, cx: f32, cy: f32, cw: f32, ch: f32, sec_f
                     let item_btn = &mut state.service_items[idx];
                     item_btn.title = service.name.clone();
                     item_btn.subtitle = Some(desc_truncated);
-                    clear_ui::layout::render_widget(sec.pc, item_btn, list_box_x + 24.0, draw_y, list_box_w - 44.0, item_h, ctx);
+                    cce_ui::layout::render_widget(sec.pc, item_btn, list_box_x + 24.0, draw_y, list_box_w - 44.0, item_h, ctx);
 
                     // Render StatusDot
                     let status_dot_state = if service.active_state == "failed" {
@@ -353,7 +353,7 @@ pub fn view(state: &mut ServicesState, cx: f32, cy: f32, cw: f32, ch: f32, sec_f
                         DotStatus::Inactive
                     };
                     let mut dot = StatusDot::new(status_dot_state);
-                    clear_ui::layout::render_widget(sec.pc, &mut dot, list_box_x + 10.0, draw_y + (item_h - 10.0) / 2.0, 10.0, 10.0, ctx);
+                    cce_ui::layout::render_widget(sec.pc, &mut dot, list_box_x + 10.0, draw_y + (item_h - 10.0) / 2.0, 10.0, 10.0, ctx);
 
                     let active_txt = [0.90, 0.90, 0.95, 1.0];
                     let disabled_txt = [0.40, 0.40, 0.45, 1.0];
@@ -415,11 +415,11 @@ pub fn view(state: &mut ServicesState, cx: f32, cy: f32, cw: f32, ch: f32, sec_f
     builder.add_section(&mut final_pc, "System Notifications", sec_focused.get(1).copied().unwrap_or(false), |sec2| {
         let sec_w = sec2.cw;
         state.notifications_enable_toggle.set_toggled(state.notifications_enable);
-        sec2.widget_full(&mut state.notifications_enable_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec2.widget_full(&mut state.notifications_enable_toggle, cce_ui::layout::toggle_height(), ctx);
         sec2.spacing(8.0);
 
         state.notifications_bell_toggle.set_toggled(state.notifications_bell);
-        sec2.widget_full(&mut state.notifications_bell_toggle, clear_ui::layout::toggle_height(), ctx);
+        sec2.widget_full(&mut state.notifications_bell_toggle, cce_ui::layout::toggle_height(), ctx);
         sec2.spacing(16.0);
 
         state.notifications_duration_spinbox.value = state.notifications_duration;
@@ -469,12 +469,12 @@ pub fn view(state: &mut ServicesState, cx: f32, cy: f32, cw: f32, ch: f32, sec_f
 
             // Separators toggle
             state.status_separators_toggle.set_toggled(state.status_separators);
-            sec3.widget_full(&mut state.status_separators_toggle, clear_ui::layout::toggle_height(), ctx);
+            sec3.widget_full(&mut state.status_separators_toggle, cce_ui::layout::toggle_height(), ctx);
             sec3.spacing(16.0);
 
             // Underline toggle
             state.status_underline_toggle.set_toggled(state.status_underline);
-            sec3.widget_full(&mut state.status_underline_toggle, clear_ui::layout::toggle_height(), ctx);
+            sec3.widget_full(&mut state.status_underline_toggle, cce_ui::layout::toggle_height(), ctx);
             sec3.spacing(16.0);
 
             // Padding spinbox
@@ -869,9 +869,9 @@ mod tests {
     #[test]
     fn test_view_layout_grid() {
         let mut state = ServicesState::default();
-        let mut layout = clear_ui::layout::ColumnLayout::new(20.0);
+        let mut layout = cce_ui::layout::ColumnLayout::new(20.0);
         let sec_focused = vec![false, false];
-        let mut ctx = clear_ui::context::UiContext::new();
+        let mut ctx = cce_ui::context::UiContext::new();
         let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, &sec_focused, &mut layout, &mut ctx);
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty());
     }
diff --git a/src/pages/storage.rs b/src/pages/storage.rs
index 6d142fb..9ec2f77 100644
--- a/src/pages/storage.rs
+++ b/src/pages/storage.rs
@@ -1,5 +1,5 @@
 use crate::app::{AppAction, PageContent, SectionContextExt};
-use clear_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
+use cce_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
 use std::fs;
 
 #[derive(Debug, Clone)]
@@ -166,7 +166,7 @@ const BTN_HOVER: [f32; 4] = [0.28, 0.50, 0.78, 1.0];
 const BTN_DISABLED: [f32; 4] = [0.15, 0.18, 0.22, 1.0];
 const WHITE: [f32; 4] = [1.0, 1.0, 1.0, 1.0];
 
-pub fn view(state: &StorageState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &mut dyn LayoutStrategy, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &StorageState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &mut dyn LayoutStrategy, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(3);
@@ -194,7 +194,7 @@ pub fn view(state: &StorageState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &m
             let bar_w = sec_w - 24.0;
             let yt = sec.ay();
             let disk_bar_x = sec.ax(12.0);
-            let mut disk_bar = clear_ui::widget::UsageBar::new((disk_pct as f32 / 100.0).min(1.0))
+            let mut disk_bar = cce_ui::widget::UsageBar::new((disk_pct as f32 / 100.0).min(1.0))
                 .with_colors([0.36, 0.60, 0.36, 1.0], [0.15, 0.15, 0.25, 1.0]);
             render_widget(sec.pc, &mut disk_bar, disk_bar_x, yt, bar_w, 8.0, ctx);
         }
@@ -223,7 +223,7 @@ pub fn view(state: &StorageState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &m
             let bar_w = sec_w - 24.0;
             let yt = sec.ay();
             let ram_bar_x = sec.ax(12.0);
-            let mut ram_bar = clear_ui::widget::UsageBar::new((ram_pct as f32 / 100.0).min(1.0))
+            let mut ram_bar = cce_ui::widget::UsageBar::new((ram_pct as f32 / 100.0).min(1.0))
                 .with_colors([0.50, 0.50, 0.65, 1.0], [0.15, 0.15, 0.25, 1.0]);
             render_widget(sec.pc, &mut ram_bar, ram_bar_x, yt, bar_w, 8.0, ctx);
         }
diff --git a/src/pages/system_info.rs b/src/pages/system_info.rs
index 4cc30cf..17196c4 100644
--- a/src/pages/system_info.rs
+++ b/src/pages/system_info.rs
@@ -1,5 +1,5 @@
 use crate::app::{AppAction, PageContent, SectionContextExt};
-use clear_ui::layout::{PageLayoutBuilder, LayoutStrategy};
+use cce_ui::layout::{PageLayoutBuilder, LayoutStrategy};
 
 #[derive(Debug, Clone, Default)]
 pub struct SystemState {
@@ -48,7 +48,7 @@ fn spawn_systemctl(action: &str) {
     let _ = tokio::process::Command::new("systemctl").arg(action).spawn();
 }
 
-pub fn view(state: &SystemState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &mut dyn LayoutStrategy, _ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &SystemState, cx: f32, cy: f32, cw: f32, ch: f32, layout: &mut dyn LayoutStrategy, _ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut final_pc = PageContent::new();
     let sec_w = 320.0f32;
     let mut builder = PageLayoutBuilder::new(layout, cx, cy, cw, ch, sec_w).with_section_count(2);
diff --git a/src/widgets.rs b/src/widgets.rs
index c88ee89..fd15e85 100644
--- a/src/widgets.rs
+++ b/src/widgets.rs
@@ -1,4 +1,4 @@
-use clear_ui::color;
+use cce_ui::color;
 
 pub struct SectionStyle {
     pub label: String,