08987d7c49
The login and signup forms used factory-function patterns (plain functions returning vnodes with let-bindings for state). Mithril calls these on every redraw, creating fresh let-bindings each time, so any state set by oninput handlers was immediately discarded. This broke text input in all form fields. Fix: convert to proper Mithril components using vnode.state for persistent state across redraws. Mithril auto-redraws after event handlers, so explicit m.redraw() calls in oninput are unnecessary.