# Living with third-party `luci-app-*` What foreign apps actually do to a shared LuCI document, and the rules the theme follows because of it. Written for someone changing the theme. **Rules for app authors live in [luci-app-styling-guide.md](luci-app-styling-guide.md)**, the outward-facing document the README links. Where the two disagree, that one is the source of truth. > Surveyed July 2026 against sources (GitHub tarballs) and on a live OpenWrt 25.12 router with > Playwright: 20 apps — 6 proxy stacks (OpenClash, passwall, passwall2, ssr-plus, mosdns, vssr), > 5 clash/mihomo wrappers (ssclash, podkop, justclash, homeproxy, nikki), 4 heavyweights > (dockerman, diskman, istore, AdGuardHome) — plus stock `openwrt/luci` apps as a baseline. > > The prompt: `luci-app-ssclash`'s config editor drew as a black rectangle with no text and blew > the page up to 2 007 346 px. The cause was not the app but the theme, and it forced a rewrite of > the whole theme↔app contract. ## What a foreign app actually does ### 1. It injects CSS into `
`, and that survives an SPA navigation A full page load throws such a `