Day Planner - VNW + HTML hybrid interface demo
==============================================
Open Day_Planner.pub in VisualNEO Win (keep the Planner folder beside it). It opens maximized and is laid out for 1920x1080.
No plug-ins are needed: every action is a core VisualNEO Win action (the Modern Browser is built in).

Files
  Day_Planner.pub        one page "PlannerScreen": full-page ModernWebBrowser "PlannerBrowser" + 22 standard VNW controls
  Planner\planner.html   HTML side: month calendar, day summary, week chart, day timeline (6 AM - 11 PM), dialogs
  build_planner_pub.py   the generator (re-run after changing layout or colours)
  preview_mock.png       planner.html?mock - the sidebar drawn with stand-ins styled as the native controls are

Native VNW controls (dark left sidebar)
  TaskEntry [TaskTitle]   StartEntry [TaskStart]   LenList [TaskLen]   CatList [TaskCat]
  AddBtn / UpdateBtn / DeleteBtn
  NotesEntry [DayNotes]  multi-line notes for the selected day (EditMultiLine=Yes, ScrollBar=No: the Windows
                         scrollbar can't be coloured; the box still scrolls with the caret)
  InboxEntry [InboxText] + Add, InboxList [InboxSel], "Schedule on this day", Remove   (a native to-do list)
  Labels + StatusText [Status]
  All 22 have an ObjectToFront line in the page-enter script (after EnableObject "PlannerBrowser").

How the two sides work together
  - Click a free slot on the timeline   -> the native Start field is filled, focus goes to the Task field.
  - Click a task on the timeline        -> its title, start, length and category fill the native fields; Update / Delete act on it.
  - Drag a task (or its bottom edge)    -> moved / resized in 15-minute steps; the native fields follow if it is selected.
  - Pick a day (calendar, week bars, arrows) -> the native notes box shows that day's notes.
  - Load Sample Week / Unload Sample  -> sample tasks, inbox items and note are marked, so Unload removes only them
                                         (the note only if you didn't edit it); your own entries stay.
  - Native inbox "Schedule on this day" -> the HTML places it in the first free half hour and selects it for editing.
  - The HTML validates times ("9:30", "14:00", "2pm", "9:00 AM") and reports errors as native toasts.

Messages
  VNW -> HTML  "key:value"  load  new.title/new.start/new.len/new.cat  add  update:<id>  delete:<id>
                            notes:<date>|<text>  inbox.add  inbox.remove  schedule  askexit
  HTML -> VNW  "key|value"  (split with StrParse)  ready  save  edit  title  start  len  cat  slot  day  notesday  notes
                            inbox.clear  inbox.item  added  updated  deleted  scheduled  moved  toggled  info  invalid  exit
  Data is saved by VNW to [PubDir]DayPlanner.dat (one line, URL-encoded JSON) after every change.

Style
  Dark palette shared by both sides: sidebar 17,24,39  fields 28,37,55  border 45,58,82  text 230,235,244
  muted 147,160,184  accent 59,130,246. FillColor/TextColor/LineColor and Font/FontSize (Segoe UI) are in the pub;
  :StyleControls repeats the fonts at runtime. Natively only controls that take dark colours are used
  (TextEntry, ListBox, PushButton, SimpleText); the calendar is HTML because the Windows calendar is always white.

No white flash (no plug-in)
  A Rectangle "Cover" in the HTML background colour (#0b1020) is the last object on the page. When the page opens it is
  brought in front of the browser, unless the HTML has already painted. When planner.html has loaded its data and drawn two
  frames it posts "painted": VNW sets [Painted]=1, raises the controls again (:RaiseControls) and hides the Cover.
  No EnableObject/Delay on page enter: re-enabling an already visible browser was a source of white flashes.

Things to check in VNW
  - The layout uses real pixels at 100% Windows display scaling. At 125%/150% the HTML sidebar may not line up
    exactly behind the native controls; set scaling to 100% or adjust the X/Y values in build_planner_pub.py.
  - Setting a ListBox's variable (e.g. [TaskLen]) should highlight that item; if your build doesn't, the value is
    still used correctly when you press Update.
  - ListBoxAddItem uses index "0" (append).
  - A compiled app under Program Files can't write [PubDir]; move the data file to an AppData folder then.
