/* Reserve the asynchronous schedule's footprint without changing its design. */
#view.dashboard-shell{min-height:100vh}
#view .tomorrow-schedule{min-height:100px}
/* The Tomorrow badge wraps the KPI label on compact grids.  Reserve that
   exact row height before its asynchronous count is available. */
#view .dashboard-upcoming-bookings{min-height:117px!important}
#view .dashboard-loading .dashboard-summary-cards{grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch}
#view .dashboard-loading .dashboard-summary-cards>.card{min-width:0;min-height:102px;display:flex;flex-direction:column;justify-content:center}
/* Match the regular one-row schedule height instead of replacing a taller
   loading panel after the data returns. */
#view .tomorrow-schedule.is-loading{height:147px;min-height:0}
#view .tomorrow-placeholder{height:36px;margin:14px 16px;border-radius:8px;background:#f4f0e9}
#view .dashboard-loading-panels{min-height:704px;margin-top:14px;border-radius:14px;background:linear-gradient(90deg,#f7f3eb 0%,#fbf9f5 50%,#f7f3eb 100%)}
@media(max-width:980px){#view .dashboard-loading .dashboard-summary-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){#view .dashboard-loading .dashboard-summary-cards{grid-template-columns:1fr}#view .dashboard-loading .dashboard-summary-cards>.card{min-height:96px}}
html{overflow-y:scroll}
