- Add docking_log_list and docking_log_delete routes with dedicated page
- _append_docking_log: detect existing state interval before creating new entry
- _append_undocking_log: find entry by node title+at_time, accept docked_at param
- Fix _entry_state_label and _entry_location to return time-correct values
- Add api_set_sim_time POST endpoint; remove sim_time from all url_for() calls
- _resolve_simulation_time simplified to DB-only (no URL param)
- app.js: add openModal/closeModal/toggleTheme helpers
- base.html: add 对接日志管理 nav item, remove Today button
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Backend changes:
- Add api_asset_dock with custom dock_time support
- Add api_asset_undock with delete_future/edit_future actions
- Add _append_docking_log, _append_undocking_log, _remove_undocking_log helpers
- Fix _entry_state_label to return time-correct most recent state
- Fix _entry_location to return time-correct most recent location
- Add _all_state_labels() merging DB labels with defaults for dropdown
- Add api_set_sim_time POST endpoint
- Remove sim_time from all url_for() calls
- Simplify _resolve_simulation_time to DB-only (no URL param)
- Update _build_docking_summary to return event_id and undocked_at
- Add location_list to timeline filters (draft board hierarchy)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>