/* Planner startup reveals the actual planner without a loading screen.
   Preserve component layout/interop while the readiness gate is pending. */
html[data-planner-boot]:not([data-native-planner]) .app-loading.is-screen { display:none; }
/* Native authentication has its own loading state outside the shared planner. */
html[data-planner-boot][data-native-planner] .app-loading.is-screen:has(+ .planner-shell) { display:none; }
/* A new account shell has its own startup even after document readiness. */
html[data-native-planner] .app-loading.is-active.is-screen + .planner-shell { visibility:hidden; }
html[data-planner-boot="pending"] .planner-shell { visibility:hidden; }
/* Keep direct article entry in the planner startup flow. Without JavaScript,
   or after a startup failure, its server-rendered reading fallback stays available.
   Keep it suppressed through the final handoff, including a ready planner
   whose startup controller could not load. */
html[data-planner-script][data-planner-boot]:not([data-planner-boot="terminal"]) .public-planning-entry,
html[data-planner-script]:has(.planner-shell[data-planner-ready="true"]) .public-planning-entry { display:none; }
/* Show the existing navigation, including its phone bottom toolbar, while
   content prepares. PlannerSurface keeps these controls inert until ready. */
html[data-planner-boot="pending"] .planner-shell > .planner-main > .planner-topbar,
html[data-native-planner] .app-loading.is-active.is-screen + .planner-shell > .planner-main > .planner-topbar { visibility:visible; }
