# SnowLuma WebUI SnowLuma's browser console is a Vite + React application for managing runtime status, OneBot configuration, logs, storage, and server settings. ## Interaction conventions - Destructive actions and second confirmations stay in modal dialogs. - Operations that may take time show a bottom-right running state. - Completed and failed operations use bottom-right result notices that close automatically after a visible countdown. - Routine, high-frequency adjustments should not generate a notice for every intermediate edit. - Data-backed surfaces use the Interior Skeleton Swap defaults (120 ms delay, 380 ms minimum visibility) so fast local responses do not flash a placeholder. Submission, upload, and other explicit operation progress keeps its spinner. - Variable-height content must release the skeleton's reserved box after it is ready; do not introduce a second scrolling region inside the page. - The mobile navigation menu uses a controlled Icon Morph whose visual state follows the actual drawer state. - Failures must remain visible in the affected control and in the operation result; do not convert failed responses into successful feedback. - JSON endpoints must return an object. Malformed or non-object responses are reported as errors rather than displayed as empty lists or default settings. - Password change flows use floating labels and inline validation consistently. - Password strength details appear only while the new-password field has focus and leave with the same motion language when focus moves away. - The first-run wizard keeps agreement text as the primary reading surface and aligns each step's actions inside one responsive footer. Settings includes a visible developer page for safely replaying this wizard and exercising the page-level crash screen; replayed consent and passwords are never persisted. ## Local development On Windows, the native API logs the process token and EXE integrity label once at startup. A Low (or lower) token triggers a WebUI warning; file labels and query failures alone do not. “临时关闭” lasts for the tab session, including reloads; “永久关闭” persists in this browser's site storage. Neither suppresses startup logs. Failed queries and preference writes remain visible. From the repository root: ```bash pnpm --filter webui dev pnpm --filter webui typecheck pnpm --filter webui lint pnpm --filter webui test pnpm --filter webui build ```