/* Scheduler UI polish 2026-11-07 (coach-ui): loading frame, busy navigation, mobile header, 13px tables. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.sw-loading.sw-boot{display:block;place-items:stretch;justify-items:stretch;min-height:100vh;background:var(--sw-paper)}
.sw-boot>i,.sw-boot-main>i{display:block;border-radius:8px;background:var(--sw-line);animation:sw-boot-pulse 1.4s ease-in-out infinite}
.sw-boot-side{position:fixed;left:0;top:0;bottom:0;width:224px;border-radius:0!important;background:white!important;border-right:1px solid var(--sw-line);animation:none!important}
.sw-boot-main{margin-left:224px;padding:32px;display:grid;gap:16px;justify-items:stretch;place-items:stretch;width:auto}
.sw-boot-main>i{width:100%;justify-self:stretch}
.sw-boot-main>.sw-boot-title{width:min(240px,60%)}
.sw-boot-title{width:240px;height:36px}
.sw-boot-bar{height:44px;max-width:640px}
.sw-boot-grid{height:60vh}
.sw-boot-nav{display:none!important}
@keyframes sw-boot-pulse{50%{opacity:.5}}
@media(max-width:1199px){.sw-boot-side{width:192px}.sw-boot-main{margin-left:192px;padding:24px}}
@media(max-width:767px){.sw-boot-side{display:none!important}.sw-boot-main{margin-left:0;padding:16px}.sw-boot-title{width:60%;height:32px}.sw-boot-grid{height:55vh}.sw-boot-nav{display:block!important;position:fixed;left:0;right:0;bottom:0;height:72px;border-radius:0;background:white!important;border-top:1px solid var(--sw-line);animation:none!important}}
/* A tapped section that is still reading shows it at once: pressed tab, spinner, thin bar on top. */
.sw-nav[aria-busy=true]{background:var(--sw-soft);position:relative}
.sw-nav[aria-busy=true]::after{content:"";position:absolute;top:8px;right:8px;width:12px;height:12px;border:2px solid var(--sw-line);border-top-color:var(--sw-ink);border-radius:50%;animation:sw-spin .8s linear infinite}
body:has(.sw-nav[aria-busy=true])::before{content:"";position:fixed;z-index:50;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,transparent,var(--sw-ink),transparent);background-size:40% 100%;background-repeat:no-repeat;animation:sw-progress 1.1s ease-in-out infinite}
@keyframes sw-spin{to{transform:rotate(360deg)}}
@keyframes sw-progress{from{background-position:-40% 0}to{background-position:140% 0}}
@media(prefers-reduced-motion:reduce){.sw-boot>i,.sw-boot-main>i,.sw-nav[aria-busy=true]::after,body:has(.sw-nav[aria-busy=true])::before{animation:none}}
/* Start error: the two actions do not touch. */
.sw-access .sw-button+.sw-button{margin-left:8px}
/* Readable table text and metadata (13px floor). */
.sw-body th,.sw-body .sw-metric,.sw-body small,.sw-body .sw-link{font-size:13px}
/* Mobile header: actions share the title row; the month picker sits below (one row less on every page). */
@media(max-width:767px){
 .sw-header{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:8px;row-gap:8px}
 .sw-header>div:first-child{display:contents}
 .sw-header h1{grid-column:1;grid-row:1;min-width:0;font-size:24px}
 .sw-header h1>span{font-size:18px}
 .sw-header-actions{grid-column:2;grid-row:1;margin-left:0;flex-wrap:nowrap}
 .sw-header .sw-period-filter{grid-column:1/-1;grid-row:2}
}
/* Tổng quan PT on mobile: one tidy grid instead of uneven stacked controls. */
@media(max-width:767px){
 .sw-body .sw-pt-tools{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:center}
 .sw-body .sw-pt-tools>h2{grid-column:1}
 .sw-body .sw-pt-tools>[data-pt-add]{grid-column:2;justify-self:end}
 .sw-body .sw-pt-tools>[data-pt-search],.sw-body .sw-pt-tools>[data-pt-location-review]{grid-column:1/-1;width:100%}
 .sw-body .sw-pt-tools>select,.sw-body .sw-pt-tools>[data-pt-week]{width:100%;min-width:0;max-width:100%}
 .sw-body .sw-pt-tools>select{grid-column:1}
 .sw-body .sw-pt-tools>[data-pt-week]{grid-column:2}
}
/* End Scheduler UI polish 2026-11-07. */
