/* ============================================================
   Clinical Capacity Management System — application styles
   Loaded after the three handoff stylesheets. Colours, radii, shadows
   and font sizes come only from 01-tokens.css (CLAUDE.md rule 14);
   geometry uses logical properties (rule 17).
   ============================================================ */

/* The hidden attribute always wins over component display rules (.overlay is display:flex). */
[hidden]{display:none!important}

/* ---------- Icons (sprite, docs/02 §2.1) ---------- */
.icon{width:16px;height:16px;flex:none;fill:none;stroke:currentColor}

/* ---------- C-01…C-08 additions to 02-components.css ---------- */
.room{display:flex;flex-direction:column}
.room__beds{flex:1}
.bed__closure{display:inline-flex;align-items:center;gap:4px;text-align:center;color:var(--neutral-600)}
.bed__closure .icon{width:11px;height:11px}
.stat__value--vacant{color:var(--bed-vacant-fg)}
.stat__value--occupied{color:var(--bed-occupied-fg)}
.stat__value--critical{color:var(--patient-critical)}
.stat__sub{font-size:var(--text-2xs);color:var(--text-muted)}
.kpi{display:flex;flex-direction:column;gap:6px}
.kpi__trend .icon{width:13px;height:13px}
.stepper__btn{color:var(--navy-700)}
.stepper__btn .icon{width:16px;height:16px}
.modal__close .icon{width:18px;height:18px}
.toast{display:flex;align-items:center;gap:10px}
.toast .icon{width:16px;height:16px}

/* ---------- C-09…C-15 additions to 02-components.css (DS-03) ---------- */
/* A visually hidden label inside a horizontally scrolling table would otherwise be placed against the page and widen it. */
.table-wrap,.shifts-table{position:relative}
.visually-hidden{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}

.table td{white-space:nowrap}
.table__num{text-align:end;font-variant-numeric:tabular-nums}
.table__sort{display:inline-flex;align-items:center;gap:var(--space-2);padding:0;background:transparent;border:0;
  font:inherit;color:inherit;cursor:pointer}
.table__sort .icon{width:13px;height:13px}
.table th[aria-sort="ascending"] .table__sort,.table th[aria-sort="descending"] .table__sort{color:var(--text-heading)}
.table__empty{text-align:center;color:var(--text-muted)}

.chart-box{position:relative;inline-size:100%}

.bed-legend{gap:18px}
.bed-legend__group{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.bed-legend .legend__item{gap:5px;color:var(--neutral-800)}
.legend__swatch--bed--vacant{background:var(--bed-vacant-fg)}
.legend__swatch--bed--occupied{background:var(--bed-occupied-fg)}
.legend__swatch--bed--cleaning{background:var(--bed-cleaning-fg)}
.legend__swatch--bed--oos{background:var(--bed-oos-fg)}
.legend__override{width:0;height:0;border-block-start:10px solid var(--marker-override);border-inline-end:10px solid transparent}

.field__control--sm{height:var(--control-height-sm)}
.field__required{margin-inline-start:3px;color:var(--status-danger)}
.field__select{position:relative;display:flex;align-items:center}
.field__select select{flex:1;min-inline-size:0;appearance:none;-webkit-appearance:none;padding-inline-end:34px;cursor:pointer}
.field__select .icon{position:absolute;inset-inline-end:10px;color:var(--neutral-600);pointer-events:none}
.field--readonly .field__value{font-size:var(--text-sm);color:var(--text-body)}

.empty-state-block{display:flex;flex-direction:column;gap:14px}
.empty-state{display:flex;align-items:center;gap:10px;padding:14px 16px;border-radius:var(--radius-md);background:var(--neutral-50)}
.empty-state .icon{width:18px;height:18px;flex:none;color:var(--text-muted)}
.empty-state__text{font-size:var(--text-sm);color:var(--neutral-800)}
.empty-state--success{background:var(--status-success-bg)}
.empty-state--success .icon{color:var(--status-success)}
.empty-state--warning{background:var(--status-warning-bg)}
.empty-state--warning .icon{color:var(--status-warning)}
.empty-state__actions{display:flex;justify-content:flex-end;gap:10px}

/* ---------- Text input with a leading icon (handoff Input) ---------- */
.input-icon{display:flex;align-items:center;gap:var(--space-3);height:var(--control-height-md);padding-inline:12px;
  background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-sm);
  transition:var(--transition-control)}
.input-icon:focus-within{border-color:var(--border-focus);box-shadow:var(--shadow-focus)}
.input-icon .icon{color:var(--neutral-600)}
.input-icon input{flex:1;min-inline-size:0;height:100%;border:0;outline:0;background:transparent;
  font-family:inherit;font-size:var(--text-base);color:var(--text-body)}
.input-icon input:focus-visible{box-shadow:none}
html[dir="rtl"] .input-icon input[dir="ltr"]{text-align:end}

/* ---------- Language toggle (handoff sign-in and header pill) ---------- */
.lang-form{display:inline-flex;margin:0}
.lang-toggle{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;background:transparent;
  border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-pill);cursor:pointer;
  font-family:inherit;font-size:var(--text-xs);color:var(--navy-700);white-space:nowrap;transition:var(--transition-control)}
.lang-toggle:hover{background:var(--pale-blue-50)}
.lang-toggle .icon{width:14px;height:14px;color:var(--healthcare-blue-500)}
.lang-toggle--on-dark{border-color:var(--navy-500);color:var(--pale-blue-100)}
.lang-toggle--on-dark:hover{background:var(--navy-600)}
.lang-toggle--on-dark .icon{color:var(--gold-300)}

/* ---------- DS-02 component gallery (Development/Testing only) ---------- */
.gallery{display:flex;flex-direction:column;gap:var(--space-7);padding:var(--space-7) var(--gutter-page);background:var(--surface-subtle);min-block-size:100vh}
.gallery__title{font-size:var(--text-lg);font-weight:var(--weight-semibold)}
.gallery__row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-6)}
.gallery__narrow{max-inline-size:420px}
.gallery__charts{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--space-6)}
.gallery__stack{display:flex;flex-direction:column;gap:var(--space-5);max-inline-size:360px}
.gallery__fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:start;gap:var(--space-5)}

/* ---------- Logo (arch mark + wordmark set in type) ---------- */
.logo{display:inline-flex;align-items:center;gap:12px}
.logo__mark{display:block;width:auto}
.logo--lockup .logo__mark{height:48px}
.logo--stacked{flex-direction:column;gap:10px}
.logo--stacked .logo__mark{height:46px}
.logo__wordmark{display:flex;flex-direction:column;align-items:flex-start;gap:1px}
.logo--stacked .logo__wordmark{align-items:center}
.logo__arabic{font-family:var(--font-display);font-weight:var(--weight-medium);font-size:var(--text-lg);line-height:1.25;white-space:nowrap}
.logo--stacked .logo__arabic{font-size:var(--text-md)}
.logo__latin{font-family:var(--font-sans);font-weight:var(--weight-medium);font-size:var(--text-xs);
  letter-spacing:var(--tracking-wordmark);text-transform:uppercase;white-space:nowrap;line-height:1.4}
.logo--white{color:var(--text-inverse)}
.logo--navy{color:var(--navy-700)}

/* ---------- SHL-01 app shell: header, accent rule, role tabs, mobile bottom navigation ---------- */
.logo--header .logo__mark{height:34px}
.logo--header .logo__arabic{font-size:var(--text-sm)}
.logo--header .logo__latin{font-size:var(--text-2xs);line-height:1.3}

.app-header__bar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-7);
  padding:14px var(--gutter-page);background:var(--navy-700)}
.app-header__actions{display:flex;align-items:center;gap:var(--space-5)}
.app-header__user{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-1)}
.app-header__name{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-inverse);white-space:nowrap}
.app-header__role{font-size:var(--text-2xs);color:var(--navy-300);white-space:nowrap}
.app-header__lang{display:inline-flex}
.app-header__sign-out{display:inline-flex;margin:0}
.app-header__mobile-title,.app-header__lang--mobile,.app-header__session{display:none}

.header-icon-button{display:inline-flex;align-items:center;justify-content:center;inline-size:var(--control-height-sm);block-size:var(--control-height-sm);
  padding:0;background:transparent;border:var(--border-hairline) solid var(--navy-500);border-radius:var(--radius-sm);
  color:var(--pale-blue-100);cursor:pointer;transition:var(--transition-control)}
.header-icon-button:hover{background:var(--navy-600)}
.header-icon-button .icon{width:18px;height:18px}

.app-tabs{display:flex;gap:var(--space-2);padding-inline:var(--gutter-page);overflow-x:auto;
  background:var(--surface-card);border-block-end:var(--border-hairline) solid var(--border-subtle)}
.app-tabs__tab{padding:10px 14px;font-size:var(--text-base);color:var(--text-muted);text-decoration:none;white-space:nowrap;
  border-block-end:var(--border-rule) solid transparent;transition:var(--transition-control)}
.app-tabs__tab:hover{color:var(--navy-700)}
.app-tabs__tab.is-active{font-weight:var(--weight-semibold);color:var(--navy-700);border-block-end-color:var(--navy-700)}

.bottom-nav{display:none;z-index:20}
.bottom-nav__item{text-decoration:none}
.bottom-nav__item .icon{width:20px;height:20px}

.shell-empty{display:flex;flex-direction:column;align-items:center;gap:var(--space-3);max-inline-size:520px;
  margin:var(--space-12) auto;padding:0 var(--gutter-page);text-align:center;color:var(--text-muted)}
.shell-empty .icon{width:26px;height:26px;color:var(--healthcare-blue-500)}
.shell-empty__title{font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--text-heading)}
.shell-empty__text{font-size:var(--text-sm)}

/* Mobile 390×844 (handoff mobile app): compact header, session row, no tab bar, role bottom navigation */
@media (max-width:640px){
  .app-header__brand,.app-header__user,.app-header__lang--web,.app-tabs{display:none}
  .app-header__bar{gap:var(--space-4);padding:var(--space-4) 18px}
  .app-header__actions{gap:var(--space-3)}
  .app-header__mobile-title{display:flex;flex-direction:column;gap:var(--space-1);min-inline-size:0}
  .app-header__title{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--text-inverse)}
  .app-header__subtitle{font-size:var(--text-2xs);color:var(--navy-300)}
  .app-header__lang--mobile{display:inline-flex}
  .lang-toggle--square{justify-content:center;min-inline-size:44px;min-block-size:44px;padding:0 10px;border-radius:var(--radius-md);font-size:var(--text-2xs)}
  .header-icon-button{inline-size:44px;block-size:44px;border-radius:var(--radius-md)}
  .app-header__session{display:block;padding:9px 18px;background:var(--navy-800);font-size:var(--text-2xs);color:var(--navy-300)}

  .bottom-nav{display:flex;padding:var(--space-3) var(--space-4) calc(18px + env(safe-area-inset-bottom))}
  .bottom-nav__item{gap:5px;padding:6px 0}
  .app--with-nav .app-main{padding-block-end:84px}
}

/* ---------- FR-01 Sign in ---------- */
.auth{min-block-size:100vh;display:grid;grid-template-columns:1fr 520px;background:var(--surface-card)}

.auth__identity{position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;
  gap:var(--space-8);padding:56px;background:var(--navy-700)}
.auth__intro{display:flex;flex-direction:column;gap:14px;max-inline-size:520px}
.auth__title{font-family:var(--font-display);font-size:var(--text-3xl);font-weight:var(--weight-semibold);
  line-height:1.25;letter-spacing:var(--tracking-tight);color:var(--text-inverse)}
.auth__subtitle{margin:0;font-size:var(--text-sm);letter-spacing:.1em;text-transform:uppercase;color:var(--pale-blue-100)}
.auth__rule{block-size:var(--border-rule);inline-size:220px;
  background:linear-gradient(var(--rule-direction),var(--gold-500) 0 18%,var(--pale-blue-100) 18% 100%)}
.auth__lead{margin:0;font-size:var(--text-sm);line-height:1.9;color:var(--pale-blue-100)}
.auth__ministry{margin:0;font-size:var(--text-xs);color:var(--navy-300)}

.auth__masthead,.auth__masthead-rule{display:none}

.auth__panel{display:flex;flex-direction:column;justify-content:center;gap:26px;padding:64px 56px;background:var(--surface-card)}
.auth__heading{display:flex;flex-direction:column;gap:6px}
.auth__heading-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-5)}
.auth__heading-title{font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--navy-700)}
.auth__eyebrow{font-size:var(--text-xs);letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--text-muted)}
.auth__form{display:flex;flex-direction:column;gap:26px;margin:0}
.auth__error{align-items:center;font-size:var(--text-sm);color:var(--text-body);border-radius:var(--radius-md)}
.auth__error .icon{width:17px;height:17px;color:var(--status-danger)}

.auth__recovery{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-5);background:var(--pale-blue-50);
  border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.auth__recovery-title{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.auth__recovery-text{margin:0;font-size:var(--text-sm);line-height:1.8;color:var(--text-body)}
.auth__recovery-short{display:none}
.auth__recovery-note{font-size:var(--text-2xs);color:var(--text-muted)}
.auth__phone{color:var(--text-link);font-weight:var(--weight-medium);font-variant-numeric:tabular-nums}
.auth__phone:hover{color:var(--text-link-hover)}

/* ---------- FR-02 Forced temporary-password change ---------- */
.gate{min-block-size:100vh;display:flex;align-items:center;justify-content:center;padding:var(--space-8);background:var(--navy-700)}
.gate__card{position:relative;overflow:hidden;inline-size:var(--modal-width-md);max-inline-size:100%;display:flex;flex-direction:column;gap:22px;
  padding:35px 36px 36px;background:var(--surface-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}
.gate__card::before{content:"";position:absolute;inset-block-start:0;inset-inline:0;block-size:var(--border-accent);
  background:linear-gradient(var(--rule-direction),var(--gold-500) 0 18%,var(--navy-700) 18% 100%)}
.gate__heading{display:flex;flex-direction:column;gap:6px}
.gate__title{font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--navy-700)}
.gate__eyebrow{font-size:var(--text-xs);letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--text-muted)}
.gate__rule{display:none}
.gate__notice{align-items:flex-start;padding:14px 16px;border-radius:var(--radius-md);font-size:var(--text-sm);line-height:1.8;color:var(--text-body)}
.gate__notice .icon{width:18px;height:18px;margin-block-start:3px;color:var(--gold-700)}
.gate__notice-short,.gate__submit-short{display:none}
.gate__form{display:flex;flex-direction:column;gap:22px;margin:0}

/* Mobile 390×844: navy masthead with the stacked logo, then the form with large fields (handoff §5.1) */
@media (max-width:640px){
  .auth{grid-template-columns:1fr;align-content:start}
  .auth__identity,.auth__heading,.auth__form-rule,.auth__recovery-long,.auth__recovery-note{display:none}

  .auth__masthead{display:flex;flex-direction:column;align-items:center;gap:var(--space-5);
    padding:var(--space-7) var(--space-7) var(--space-8);background:var(--navy-700);text-align:center}
  .auth__masthead-bar{align-self:stretch;display:flex;justify-content:flex-end}
  .auth__masthead-title{font-family:var(--font-display);font-size:var(--text-lg);color:var(--text-inverse)}
  .auth__masthead-rule{display:block}

  .auth__panel{justify-content:flex-start;gap:18px;padding:26px 22px}
  .auth__form{gap:18px}
  .input-icon{height:var(--control-height-lg)}
  .lang-toggle{min-block-size:44px}
  .auth__error{font-size:var(--text-xs)}

  .auth__recovery{padding:14px;gap:6px;background:var(--neutral-50);border:0}
  .auth__recovery-title,.auth__recovery-text{font-size:var(--text-xs)}
  .auth__recovery-short{display:inline}

  /* FR-02 on mobile is a plain white screen (handoff mobile reference) */
  .gate{align-items:stretch;padding:0;background:var(--surface-card)}
  .gate__card{inline-size:100%;gap:18px;padding:26px 22px;border-radius:var(--radius-none);box-shadow:none}
  .gate__card::before{display:none}
  .gate__heading{gap:5px}
  .gate__title{font-size:var(--text-lg)}
  .gate__eyebrow{font-size:var(--text-2xs)}
  .gate__rule{display:block}
  .gate__notice{padding:12px 14px;font-size:var(--text-xs)}
  .gate__notice .icon{width:16px;height:16px}
  .gate__notice-long,.gate__submit-long,.gate__hint-latin{display:none}
  .gate__notice-short,.gate__submit-short{display:inline}
  .gate__form{gap:18px}
}

/* ---------- FR-07 hospital settings frame (README §5.7) ---------- */
.settings-header{display:flex;flex-direction:column;gap:6px;padding:14px var(--gutter-page) 0;
  background:var(--surface-card);border-block-end:var(--border-hairline) solid var(--border-subtle)}
.settings-header__heading{display:flex;align-items:baseline;gap:10px}
.settings-header__title{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.settings-header__sub{font-size:var(--text-2xs);color:var(--neutral-600)}
.settings-header__sub:empty,.ref-list__hint:empty{display:none}
.settings-tabs{display:flex;gap:var(--space-2);overflow-x:auto}
.settings-tabs__tab{padding:10px 14px;font-size:var(--text-base);color:var(--text-muted);text-decoration:none;white-space:nowrap;
  border-block-end:var(--border-rule) solid transparent;transition:var(--transition-control)}
.settings-tabs__tab:hover{color:var(--navy-700)}
.settings-tabs__tab.is-active{font-weight:var(--weight-semibold);color:var(--navy-700);border-block-end-color:var(--navy-700)}
.settings-tabs__short{display:none}

.settings-page{display:flex;flex-direction:column;gap:var(--space-5);padding:var(--space-6) var(--gutter-page)}
.page-heading{display:flex;flex-direction:column;gap:var(--space-2)}
.page-heading__title{margin:0;font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--navy-700)}
.page-heading__sub{font-size:var(--text-xs);color:var(--neutral-600)}

.notice{display:flex;align-items:flex-start;gap:10px;padding:14px 16px;border-radius:var(--radius-md);
  font-size:var(--text-sm);line-height:1.8;color:var(--neutral-800)}
.notice .icon{width:18px;height:18px;flex:none;margin-block-start:3px}
.notice--warning{background:var(--status-warning-bg)}
.notice--warning .icon{color:var(--gold-700)}
.notice--info{background:var(--pale-blue-50)}
.notice--success{background:var(--status-success-bg)}
.notice--success .icon{color:var(--status-success)}
/* ---------- Shifts (FR-07d, README §5.7 d) ---------- */
.shifts-total{display:flex;align-items:center;gap:10px}
.shifts-total__label{font-size:var(--text-xs);color:var(--neutral-600)}
.shifts-card{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}
.shifts-table{display:flex;flex-direction:column;overflow-x:auto}
.shifts-table__head,.shift-row{display:grid;grid-template-columns:minmax(160px,1.4fr) minmax(110px,1fr) minmax(110px,1fr) minmax(56px,.6fr) 96px minmax(90px,.9fr) minmax(60px,.6fr);
  align-items:center;gap:12px;padding:11px 18px;min-inline-size:760px}
.shifts-table__head{background:var(--pale-blue-50);border-block-end:var(--border-hairline) solid var(--border-subtle);font-size:var(--text-2xs);color:var(--neutral-600)}
.shift-row{border-block-end:var(--border-hairline) solid var(--neutral-100)}
.shift-row__form{display:contents}
.shift-row__form .field__control{inline-size:100%}
.shift-row__hours{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.shift-row__switch{margin:0}
.shift-row__error{grid-column:1 / -1}
.shift-row.is-inactive .field__control,.shift-row.is-inactive .shift-row__name{color:var(--neutral-400)}
.shift-add{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) minmax(0,1fr) auto;align-items:end;gap:12px;margin:0;padding:16px 18px;background:var(--neutral-50);min-inline-size:760px}
.shift-add .field{display:flex;flex-direction:column;gap:var(--space-2);margin:0}
.notice--info .icon{color:var(--healthcare-blue-500)}
/* ---------- Executive KPI strip (README §6) ---------- */
.executive-page{display:flex;flex-direction:column;gap:var(--space-5);padding:var(--space-6) var(--gutter-page)}
.kpi-strip{display:flex;flex-direction:column;gap:14px;padding:16px 18px 18px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.kpi-strip__head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.kpi-strip__title{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.kpi-strip__title h2{margin:0;font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--navy-700)}
.kpi-strip__mode{font-size:var(--text-2xs);color:var(--neutral-600)}
.kpi-strip__tools{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.kpi-strip__tools form{margin:0}
.kpi-legend{display:flex;gap:12px;flex-wrap:wrap}
.kpi-legend__item{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-2xs);color:var(--neutral-800)}
.kpi-legend__swatch{inline-size:10px;block-size:10px;border-radius:var(--radius-xs);background:var(--kpi-ok-bar)}
.kpi-legend__swatch--warn{background:var(--kpi-warn-bar)}
.kpi-legend__swatch--crit{background:var(--kpi-crit-bar)}
.kpi-strip__group{display:flex;flex-direction:column;gap:9px}
.kpi-strip__group-head{display:flex;align-items:baseline;gap:10px}
.kpi-strip__group-head h3{margin:0;font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--navy-700)}
.kpi-strip__eyebrow{font-size:var(--text-2xs);letter-spacing:.1em;text-transform:uppercase;color:var(--neutral-400)}
.kpi-grid--key{grid-template-columns:repeat(6,minmax(0,1fr))}
.kpi-strip .kpi-grid{gap:10px}
.kpi-strip .kpi__trend .icon{inline-size:13px;block-size:13px}
@media (max-width:1100px){
  .kpi-grid--key{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:640px){
  .executive-page{padding:14px var(--gutter-page-mobile)}
  .kpi-strip{padding:12px}
  .kpi-strip .kpi-grid,.kpi-grid--key{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .kpi-strip__tools .btn{min-block-size:44px}
}
/* ---------- Executive overview (FR-08 L1, README §5.8) ---------- */
.overview{display:flex;flex-direction:column;gap:16px}
.overview__head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.overview__head .page-heading__title{margin:0}
.overview__summary,.overview__pressure{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.overview__summary .stat{gap:6px}
.pressure-card{display:flex;flex-direction:column;gap:8px;padding:14px 16px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.pressure-card__head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.pressure-card__title{font-size:var(--text-2xs);color:var(--neutral-600)}
.pressure-card__value{font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--navy-700);line-height:1.5}
.pressure-card__detail{font-size:var(--text-2xs);color:var(--neutral-600);line-height:1.7}
.data-quality{display:flex;align-items:center;gap:26px;flex-wrap:wrap;padding:16px 18px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.data-quality__title{display:flex;flex-direction:column;gap:3px;font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.data-quality__note{font-size:var(--text-2xs);font-weight:var(--weight-regular);color:var(--neutral-600)}
.data-quality__item{display:inline-flex;align-items:center;gap:10px;font-size:var(--text-xs);color:var(--neutral-800)}
.overview__main{display:grid;grid-template-columns:360px minmax(0,1fr);gap:16px;align-items:start}
.overview-panel{display:flex;flex-direction:column;gap:12px;padding:18px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.overview-panel__title{margin:0;font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.overview__wards,.overview__staff{display:flex;flex-direction:column;gap:10px}
.ward-cards,.staff-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.ward-card{display:flex;flex-direction:column;gap:10px;padding:14px 16px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);color:inherit;text-decoration:none}
.ward-card:hover{border-color:var(--healthcare-blue-500)}
.ward-card:focus-visible{outline:2px solid var(--healthcare-blue-500);outline-offset:2px}
.ward-card__head,.ward-card__foot{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.ward-card__foot{align-items:center}
.ward-card__name-block{display:flex;flex-direction:column;gap:3px;min-inline-size:0}
.ward-card__name{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.ward-card__meta,.ward-card__target{font-size:var(--text-2xs);color:var(--neutral-600)}
.ward-card__bar{display:flex;align-items:center;gap:10px}
.ward-card__bar .target-bar{flex:1}
.ward-card__pct{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.ward-card__backup{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-2xs);color:var(--gold-700)}
.staff-card{display:flex;flex-direction:column;gap:10px;padding:14px 16px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.staff-card__head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.staff-card__name{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.staff-card__shift{font-size:var(--text-2xs);color:var(--neutral-600)}
.staff-card__counts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.staff-card__count{display:flex;flex-direction:column;gap:2px;padding:9px 10px;background:var(--pale-blue-50);border-radius:var(--radius-sm)}
.staff-card__label{font-size:var(--text-2xs);color:var(--neutral-600)}
.staff-card__value{font-size:var(--text-md);font-weight:var(--weight-semibold);color:var(--navy-700)}
.staff-card__services{display:flex;gap:12px;flex-wrap:wrap;padding-block-start:8px;border-block-start:var(--border-hairline) solid var(--neutral-100)}
.staff-card__service{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-2xs);color:var(--neutral-800)}
.staff-card__service .icon{color:var(--healthcare-blue-500)}
.staff-card__service .num{font-weight:var(--weight-semibold);color:var(--navy-700)}
@media (max-width:1100px){
  .overview__main{grid-template-columns:minmax(0,1fr)}
  .ward-cards,.staff-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:640px){
  .overview__summary,.overview__pressure{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .data-quality{gap:12px}
  .ward-cards,.staff-cards{grid-template-columns:minmax(0,1fr)}
  .ward-card{min-block-size:44px}
}
.executive-ward__back{display:flex;align-items:center;justify-content:space-between;gap:12px}
/* MOB-03: collapsible ward cards on mobile; the web keeps the linked cards. */
.ward-card-mobile{display:none}
.ward-card-mobile__summary{display:flex;flex-direction:column;gap:9px;min-block-size:44px;cursor:pointer;list-style:none}
.ward-card-mobile__summary::-webkit-details-marker{display:none}
.ward-card-mobile__body{display:flex;flex-direction:column;gap:10px;margin-block-start:10px;padding-block-start:10px;border-block-start:var(--border-hairline) solid var(--neutral-100)}
.ward-card-mobile__counts{display:flex;gap:16px;flex-wrap:wrap}
.ward-card-mobile__count{display:flex;flex-direction:column;gap:2px}
.ward-card-mobile__label{font-size:var(--text-2xs);color:var(--neutral-600)}
.ward-card-mobile__value{font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--bed-oos-fg);font-variant-numeric:tabular-nums}
.ward-card-mobile__value--occupied{color:var(--bed-occupied-fg)}
.ward-card-mobile__value--vacant{color:var(--bed-vacant-fg)}
.ward-card-mobile__value--sterilising{color:var(--bed-cleaning-fg)}
.ward-card-mobile__open{min-block-size:44px}
@media (max-width:640px){
  .ward-cards > .ward-card{display:none}
  .ward-card-mobile{display:block;padding:12px 14px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
  .overview__staff--web-only{display:none}
  .executive-ward__back .btn{min-block-size:44px}
}
/* ---------- Audit log (README §5.13, BR-13) ---------- */
.audit-filters{display:flex;flex-wrap:wrap;align-items:end;gap:10px;margin:0}
.audit-filters .field{display:flex;flex-direction:column;gap:var(--space-2);margin:0;min-inline-size:150px}
.audit-card{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}
.audit-scroll{position:relative;overflow-x:auto}
.audit-table{display:flex;flex-direction:column;min-inline-size:760px}
.audit-table__head,.audit-row{display:grid;grid-template-columns:1.1fr 1.4fr 1fr 2fr;gap:12px;align-items:start;padding:11px 18px}
.audit-table__head{padding-block:10px;background:var(--pale-blue-50);border-block-end:var(--border-hairline) solid var(--border-subtle);font-size:var(--text-2xs);color:var(--neutral-600)}
.audit-table--global .audit-table__head,.audit-table--global .audit-row{grid-template-columns:1fr 1.1fr 1.3fr 0.9fr 1.7fr}
.audit-row__hospital{font-size:var(--text-xs);color:var(--navy-700);overflow-wrap:anywhere}
.audit-row{border-block-end:var(--border-hairline) solid var(--neutral-100)}
.audit-row.is-override{background:var(--kpi-warn-bg)}
.audit-row__time{font-size:var(--text-xs);color:var(--neutral-600)}
.audit-row__user,.audit-row__entity,.audit-row__action{display:flex;flex-direction:column;gap:3px;min-inline-size:0;align-items:flex-start}
.audit-row__name{font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--navy-700)}
.audit-row__detail{font-size:var(--text-xs);color:var(--neutral-800);line-height:1.7}
.audit-row__meta{font-size:var(--text-2xs);color:var(--neutral-600);overflow-wrap:anywhere}
.audit-row__override{display:inline-flex;align-items:center;gap:4px;font-size:var(--text-2xs);color:var(--gold-700)}
.audit-changes{font-size:var(--text-2xs);color:var(--neutral-800)}
.audit-changes summary{cursor:pointer;color:var(--healthcare-blue-500)}
.audit-changes table{border-collapse:collapse;margin-block-start:6px}
.audit-changes th,.audit-changes td{padding:2px 8px;text-align:start;border-block-end:var(--border-hairline) solid var(--neutral-100);overflow-wrap:anywhere}
.audit-pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:10px 18px}
.audit-pager__summary{margin-inline-end:auto;font-size:var(--text-xs);color:var(--neutral-600)}
@media (max-width:640px){
  .audit-filters .field{flex:1 1 140px;min-inline-size:0}
  .audit-filters .btn{inline-size:100%;block-size:var(--control-height-lg)}
  .audit-table{min-inline-size:0}
  .audit-table__head{display:none}
  .audit-row{grid-template-columns:1fr auto;gap:6px 12px;padding:12px 14px}
  .audit-row__time{grid-column:1;grid-row:1}
  .audit-row__action{grid-column:2;grid-row:1 / span 2;align-items:flex-end}
  .audit-row__user{grid-column:1;grid-row:2}
  .audit-row__entity{grid-column:1 / -1}
  .audit-table--global .audit-row{grid-template-columns:1fr auto}
  .audit-row__hospital{grid-column:1 / -1;font-weight:var(--weight-medium)}
}
/* ---------- Census approval (FR-10, README §5.10) ---------- */
.census-card{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}
.census-table{display:flex;flex-direction:column}
.census-table__head,.census-row{display:grid;grid-template-columns:1.8fr 1.2fr 1.2fr 1.4fr;gap:12px;align-items:center;padding:13px 18px}
.census-table__head{padding-block:11px;background:var(--pale-blue-50);border-block-end:var(--border-hairline) solid var(--border-subtle);font-size:var(--text-2xs);color:var(--neutral-600)}
.census-row{border-block-end:var(--border-hairline) solid var(--neutral-100)}
.census-row__name{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700);overflow-wrap:anywhere}
.census-row__specialty{font-size:var(--text-xs);color:var(--neutral-800)}
.census-row__actions{display:flex;gap:8px;justify-content:flex-end}
.census-row__actions form{margin:0}
@media (max-width:640px){
  .census-table{gap:12px;padding:12px}
  .census-table__head{display:none}
  .census-row{grid-template-columns:1fr auto;gap:9px;padding:12px 14px;border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
  .census-row__specialty{grid-row:2;grid-column:1}
  .census-row > [role=cell]:nth-child(3){grid-row:1;grid-column:2}
  .census-row__actions{grid-column:1 / -1;justify-content:stretch}
  .census-row__actions form{flex:1}
  .census-row__actions .btn{inline-size:100%;block-size:var(--control-height-lg)}
}
/* ---------- Roster (FR-07e, README §5.7 e) ---------- */
.roster-card{display:flex;flex-direction:column;margin:0;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}
.roster-card__head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:18px 18px 12px}
.roster-coverage{display:flex;gap:8px;flex-wrap:wrap}
.roster-week{display:flex;align-items:center;gap:12px;padding:10px 18px;background:var(--neutral-50);border-block-start:var(--border-hairline) solid var(--border-subtle)}
.roster-week__range{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.roster-card__error{margin:12px 18px 0}
.roster-scroll{position:relative;overflow-x:auto}
.roster-grid{display:flex;flex-direction:column;min-inline-size:1060px}
.roster-grid__head,.roster-grid__row{display:grid;grid-template-columns:190px 170px repeat(7,minmax(0,1fr)) 100px;gap:10px;align-items:center;padding:10px 18px}
.roster-grid__head{background:var(--pale-blue-50);border-block:var(--border-hairline) solid var(--border-subtle);font-size:var(--text-2xs);color:var(--neutral-600)}
.roster-grid__day{display:flex;flex-direction:column;align-items:flex-start;gap:2px}
.roster-grid__row{border-block-end:var(--border-hairline) solid var(--neutral-100)}
.roster-grid__name{min-inline-size:0;font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700);overflow-wrap:anywhere}
.roster-grid__total{font-size:var(--text-xs);color:var(--neutral-800)}
.roster-grid .field__control{inline-size:100%;min-inline-size:0}
.roster-cell{display:block;padding:2px;border-radius:var(--radius-sm)}
.roster-cell .field__control{background:transparent}
.roster-tint--0{background:var(--shift-tint-0)}
.roster-tint--1{background:var(--shift-tint-1)}
.roster-tint--2{background:var(--shift-tint-2)}
.roster-tint--3{background:var(--shift-tint-3)}
.roster-tint--4{background:var(--shift-tint-4)}
.roster-tint--5{background:var(--shift-tint-5)}
.roster-card__actions{display:flex;justify-content:flex-end;padding:14px 18px}
.roster-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:12px 16px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.roster-legend__label{font-size:var(--text-2xs);color:var(--neutral-600)}
.roster-legend__item{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-xs);color:var(--neutral-800)}
.roster-bulk{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr auto;gap:12px;align-items:end;padding:14px 18px;background:var(--neutral-50);border-block-start:var(--border-hairline) solid var(--border-subtle)}
.roster-bulk .field{display:flex;flex-direction:column;gap:var(--space-2);margin:0;min-inline-size:0}
.roster-cell__day,.roster-mobile-hint{display:none}
@media (max-width:640px){
  .roster-card__head,.roster-week,.roster-bulk,.roster-card__actions{padding-inline:14px}
  .roster-week{flex-wrap:wrap;justify-content:space-between}
  .roster-bulk{grid-template-columns:1fr 1fr}
  .roster-bulk .field:first-child,.roster-bulk .field:nth-child(4),.roster-bulk .btn{grid-column:1 / -1}
  .roster-mobile-hint{display:block;margin:0;padding:12px 14px 0;font-size:var(--text-xs);color:var(--neutral-600)}
  .roster-scroll{overflow-x:visible}
  .roster-grid{min-inline-size:0;gap:12px;padding:12px 14px}
  .roster-grid__head{display:none}
  .roster-grid__row{grid-template-columns:1fr;gap:8px;padding:12px;border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
  .roster-cell{display:grid;grid-template-columns:minmax(96px,.8fr) 1.2fr;align-items:center;gap:8px;padding-block:2px;padding-inline:8px 2px}
  .roster-cell__day{display:flex;flex-direction:column;font-size:var(--text-xs);color:var(--neutral-800)}
  .roster-grid .field__control{height:var(--control-height-lg)}
}
.roster-legend__swatch{inline-size:14px;block-size:14px;border-radius:var(--radius-sm);border:var(--border-hairline) solid var(--border-subtle)}
/* ---------- Users (FR-07c, README §5.7 c) ---------- */
.users-search{display:flex;align-items:center;gap:var(--space-3);margin:0}
.users-search .input-icon{inline-size:280px;max-inline-size:100%}
.users-search input{flex:1;min-inline-size:0;border:0;background:transparent;font:inherit;color:inherit;outline:none}
.users-table{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.users-table__name{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--navy-700);white-space:nowrap}
.users-table__email{max-inline-size:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--neutral-600)}
.users-table__assignment{color:var(--neutral-600)}
.users-table__actions{text-align:end;white-space:nowrap}
.users-table__actions .row-actions__form{display:inline-flex;margin-inline-start:var(--space-2)}
.table tr.is-inactive .users-table__name{color:var(--neutral-400)}
.users-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3)}
.add-user__step{display:flex;flex-direction:column;gap:var(--space-4);margin:0;padding:0;border:0;min-inline-size:0}
.add-user__step[hidden],.add-user [hidden]{display:none}
.add-user__legend{padding:0;margin-block-end:var(--space-2);font-size:var(--text-xs);color:var(--neutral-600)}
.dialog-form__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:14px}
.user-created{display:flex;flex-direction:column;gap:var(--space-4)}
.user-created__credential{display:flex;align-items:center;justify-content:space-between;gap:var(--space-5);padding:14px 16px;
  background:var(--pale-blue-50);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.user-created__credential:not(.user-created__credential--password){flex-direction:column;align-items:flex-start;gap:var(--space-2)}
.user-created__password{display:flex;flex-direction:column;gap:var(--space-2)}
.user-created__label,.user-created__note{font-size:var(--text-xs);color:var(--neutral-600)}
.user-created__value{font-size:var(--text-md);font-weight:var(--weight-semibold);color:var(--navy-700);unicode-bidi:isolate}
.user-created__value--password{font-size:var(--text-xl);letter-spacing:.08em}

/* ---------- Switch (handoff Switch; a 44px hit area around the 38×22 track) ---------- */
.switch{display:inline-flex;align-items:center;justify-content:center;min-inline-size:44px;min-block-size:44px;
  padding:0;background:transparent;border:0;cursor:pointer}
/* The handoff Switch keeps "on" at the physical right in both languages, like the prototype. */
.switch__track{direction:ltr;display:inline-flex;inline-size:38px;block-size:22px;padding:2px;border-radius:var(--radius-pill);
  background:var(--neutral-200);transition:var(--transition-control)}
.switch__thumb{inline-size:18px;block-size:18px;border-radius:var(--radius-pill);background:var(--neutral-0);box-shadow:var(--shadow-xs)}
.switch[aria-checked="true"] .switch__track{justify-content:flex-end;background:var(--healthcare-blue-500)}
.switch:focus-visible{box-shadow:none}
.switch:focus-visible .switch__track{box-shadow:var(--shadow-focus)}

/* ---------- FR-07b reference lists ---------- */
.ref-lists{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:var(--space-5)}
.ref-list{overflow:hidden;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.ref-list__body{display:flex;flex-direction:column;gap:14px;padding:18px}
.ref-list__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4)}
.ref-list__heading{display:flex;flex-direction:column;gap:3px}
.ref-list__title{margin:0;font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--navy-700)}
.ref-list__hint{font-size:var(--text-2xs);color:var(--neutral-600)}
.ref-list__items{margin:0;padding:0;list-style:none;border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-sm)}
.ref-item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);padding-inline:14px 6px;
  min-block-size:44px;border-block-end:var(--border-hairline) solid var(--neutral-100)}
.ref-item:last-child{border-block-end:0}
.ref-item__name{display:inline-flex;align-items:center;gap:var(--space-3);font-size:var(--text-sm);color:var(--neutral-800)}
.ref-item__name .icon{width:15px;height:15px;color:var(--healthcare-blue-500)}
.ref-item--inactive .ref-item__name{color:var(--neutral-400)}
.ref-item__state{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-2xs);color:var(--neutral-600)}
.ref-item__switch{display:inline-flex;margin:0}
.ref-list__add{display:flex;align-items:flex-start;gap:10px;margin:0}
.ref-list__field{flex:1;min-inline-size:0}
.ref-list__add .btn{flex:none}

/* ---------- STR-05 towers and buildings ---------- */
a.btn{text-decoration:none}
.page-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-5);flex-wrap:wrap}
.page-heading__hint:empty{display:none}
.buildings-table{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.buildings-table__name{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--navy-700)}
.table tr.is-inactive .buildings-table__name{color:var(--neutral-400)}
.row-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3)}
.row-actions__form{display:inline-flex;margin:0}
.dialog-form{display:flex;flex-direction:column;gap:var(--space-5);margin:0}
.dialog-form .modal__foot{justify-content:flex-end;padding:var(--space-2) 0 0;border:0}
.floors-panel{display:flex;align-items:center;justify-content:space-between;gap:var(--space-5);padding:14px 16px;
  background:var(--pale-blue-50);border-radius:var(--radius-md)}
.floors-panel.is-invalid{outline:var(--border-hairline) solid var(--status-danger)}
.floors-panel__label{display:flex;flex-direction:column;gap:3px}
.floors-panel__title{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--navy-700)}
.floors-panel__hint{font-size:var(--text-2xs);color:var(--neutral-600)}
.floors-panel__hint:empty{display:none}

/* ---------- STR-01 wards table and add-ward dialog ---------- */
.wards-table{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.wards-table__name{display:block;font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.wards-table__location{display:block;font-size:var(--text-2xs);color:var(--neutral-600)}
.wards-table__muted{color:var(--neutral-600)}
.wards-table a.wards-table__name{text-decoration:none}
.wards-table a.wards-table__name:hover{text-decoration:underline}
.wards-table tr.is-selected td{background:var(--pale-blue-50)}
.wards-layout{display:grid;grid-template-columns:minmax(0,1fr) 420px;align-items:start;gap:var(--space-6)}
.wards-layout__main{display:flex;flex-direction:column;gap:14px;min-inline-size:0}
.ward-panel{overflow:hidden;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.ward-panel__body{display:flex;flex-direction:column;gap:var(--space-5);padding:18px}
.ward-panel__heading{display:flex;flex-direction:column;gap:var(--space-2)}
.ward-panel__title{margin:0;font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--navy-700)}
.ward-panel__sub{font-size:var(--text-2xs);color:var(--neutral-600)}
.ward-panel__form,.ward-panel__capacity{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-3);margin:0}
.ward-panel__form .btn,.ward-panel__capacity .btn{align-self:flex-end}
.ward-panel__pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:var(--space-4)}
.ward-panel__note{font-size:var(--text-2xs);line-height:1.8;color:var(--neutral-600)}
.ward-panel__note.is-warning{color:var(--gold-700)}
.ward-panel__section{display:flex;flex-direction:column;gap:var(--space-3)}
.ward-panel__section-title{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.ward-panel__empty{font-size:var(--text-xs);color:var(--neutral-600)}
.ward-panel__rooms{max-block-size:220px;overflow:auto;margin:0;padding:0;list-style:none;
  border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-sm)}
.ward-panel__backup{margin:0;padding:14px 16px;background:var(--pale-blue-50);border-radius:var(--radius-md)}
.ward-panel__backup .btn{align-self:flex-end}
.ward-panel__backup-state{font-size:var(--text-xs);color:var(--neutral-800)}
.ward-panel__section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4)}
.ward-panel__room{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:6px 12px;
  border-block-end:var(--border-hairline) solid var(--neutral-100)}
.ward-panel__room:last-child{border-block-end:0}
.ward-panel__room-label{font-size:var(--text-sm);color:var(--neutral-800);font-variant-numeric:tabular-nums}
.ward-panel__room-beds{font-size:var(--text-2xs);color:var(--neutral-600)}
.ward-panel__room.is-inactive .ward-panel__room-label{color:var(--neutral-400)}
.ward-panel__beds{flex-basis:100%;font-size:var(--text-xs);color:var(--neutral-600)}
.ward-panel__beds summary{cursor:pointer}
.ward-panel__beds ul{margin:var(--space-2) 0 0;padding:0;list-style:none}
.ward-panel__bed{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-inline-start:var(--space-5)}
.ward-panel__bed.is-inactive span{color:var(--neutral-400)}
.ward-panel__head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 0;
  font-size:var(--text-sm);color:var(--neutral-800);border-block-end:var(--border-hairline) solid var(--neutral-100)}
.dialog-form__row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:var(--space-4)}
.switch-panel{cursor:pointer}
.switch-input{position:absolute;inline-size:1px;block-size:1px;opacity:0}
.switch-input:checked + .switch__track{justify-content:flex-end;background:var(--healthcare-blue-500)}
.switch-input:focus-visible + .switch__track{box-shadow:var(--shadow-focus)}

/* ---------- Ward dashboard (FR-03, README §5.3) ---------- */
.ward-page{display:grid;grid-template-columns:minmax(0,1fr) 340px;align-items:start;gap:var(--space-6);padding:var(--space-6) var(--gutter-page)}
.ward-page > .empty-state-block{grid-column:1 / -1}
.ward-page__main{display:flex;flex-direction:column;gap:var(--space-5);min-inline-size:0}
/* ---------- Ward sidebar: staff census (FR-03, README §5.3) ---------- */
.ward-sidebar{display:flex;flex-direction:column;gap:var(--space-5);min-inline-size:0}
.staff-census{display:flex;flex-direction:column;gap:14px}
.staff-census__head{display:flex;flex-direction:column;gap:3px}
.staff-census__form{display:flex;flex-direction:column;gap:12px;margin:0}
.staff-census__row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.staff-census__label{font-size:var(--text-sm);color:var(--neutral-800)}
.staff-census__submit{margin-block-start:var(--space-2)}
.staff-census__pending,.staff-census__done{display:inline-flex;align-items:center;gap:var(--space-3)}
.staff-census__done,.staff-census__submit.is-recorded .staff-census__pending{display:none}
.staff-census__submit.is-recorded .staff-census__done{display:inline-flex}
.ward-services{display:flex;flex-direction:column;gap:12px}
.ward-services__head{display:flex;flex-direction:column;gap:3px}
.ward-services__note{display:flex;align-items:flex-start;gap:var(--space-3);margin:0;padding:10px 12px;border-radius:var(--radius-sm);
  background:var(--pale-blue-50);font-size:var(--text-xs);line-height:1.7;color:var(--neutral-800)}
.ward-services__note .icon{flex:none;width:16px;height:16px;color:var(--healthcare-blue-500)}
.ward-services__form{margin:0}
.ward-services__list{display:flex;flex-direction:column;gap:10px;margin:0;padding:0;list-style:none}
.ward-services__row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.ward-services__name{display:inline-flex;align-items:center;gap:var(--space-3);font-size:var(--text-sm);color:var(--neutral-800)}
.ward-services__name .icon{width:16px;height:16px;color:var(--healthcare-blue-500)}
.ward-services__count{display:inline-flex;align-items:center;gap:var(--space-4)}
.ward-services__value{min-width:26px;text-align:center;font-size:var(--text-md);font-weight:var(--weight-semibold);color:var(--text-heading)}
.ward-services__visits{display:flex;flex-direction:column;gap:6px;padding-block-start:12px;border-block-start:var(--border-hairline) solid var(--border-subtle)}
/* RT-01: a bed change is waiting for the network */
.live-banner{display:flex;align-items:center;gap:10px;padding:10px var(--space-5);font-size:var(--text-sm);color:var(--neutral-800);
  background:var(--status-warning-bg);border-radius:var(--radius-md)}
.live-banner[hidden]{display:none}
.live-banner .icon{width:18px;height:18px;flex:none;color:var(--gold-700)}
.ward-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--space-6);padding:18px var(--space-6);
  background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.ward-header__titles{display:flex;flex-direction:column;gap:5px;min-inline-size:0}
.ward-header__name{margin:0;font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--navy-700)}
.ward-header__meta{font-size:var(--text-sm);color:var(--neutral-600)}
.ward-header__secondary{font-size:var(--text-2xs);letter-spacing:.06em;color:var(--neutral-400)}
.ward-header__side{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.ward-header__badges{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.ward-picker{display:flex;align-items:center;gap:var(--space-3);margin:0;padding-inline-end:10px;
  border-inline-end:var(--border-hairline) solid var(--border-subtle)}
.ward-picker__label{font-size:var(--text-xs);color:var(--neutral-600);white-space:nowrap}
.ward-picker .field__select{inline-size:220px}
/* 03-rtl.css gives numbers unicode-bidi:plaintext, so a full-width value would align left in Arabic; shrink it to its content. */
.ward-stats .stat{gap:6px}
.ward-stats .stat__value{align-self:flex-start}
.ward-grid{display:flex;flex-direction:column;gap:var(--space-5);padding:18px var(--space-6);
  background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.ward-grid__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-5)}
.ward-grid__titles{display:flex;flex-direction:column;gap:3px}
.ward-grid__title{margin:0;font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--navy-700)}
.ward-grid__hint{font-size:var(--text-2xs);color:var(--neutral-600)}
.bed-legend__title{color:var(--neutral-600)}
/* WRD-04: keyboard focus on a bed is a navy outline inset from the selected ring, so both show at once; navy on the
   pale bed backgrounds is well above 3:1. The pale global focus shadow is not used here. */
.room-grid .bed:focus-visible{box-shadow:none;outline:2px solid var(--navy-700);outline-offset:-6px}
.room-grid .bed.is-selected:focus-visible{box-shadow:var(--bed-selected-ring)}
/* ---------- Bed detail card (FR-04, README §5.4) ---------- */
.bed-card{display:flex;flex-direction:column;gap:var(--space-5)}
.bed-card__override{display:flex;align-items:flex-start;gap:10px;padding:13px var(--space-5);background:var(--status-warning-bg);border-radius:var(--radius-md)}
.bed-card__override .icon{width:17px;height:17px;flex:none;color:var(--gold-700)}
.bed-card__override-text{display:flex;flex-direction:column;gap:3px}
.bed-card__override-title{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.bed-card__override-change{font-size:var(--text-xs);line-height:1.8;color:var(--neutral-800)}
.bed-card__override-time{font-size:var(--text-2xs);color:var(--neutral-600)}
.bed-card__statuses{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:var(--space-4);margin:0}
.bed-card__closure[hidden],.bed-card__patient[hidden],.bed-card__discharge[hidden],.bed-card__destination[hidden]{display:none}
.bed-card__discharge{grid-column:1 / -1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:var(--space-4);
  padding:var(--space-4);background:var(--status-warning-bg);border-radius:var(--radius-md)}
.bed-card__save{grid-column:1 / -1;display:flex;justify-content:flex-end}
.bed-card__counters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-4)}
.bed-counter{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);padding:14px var(--space-5);
  background:var(--pale-blue-50);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.bed-counter__text{display:flex;flex-direction:column;gap:3px}
.bed-counter__label{display:inline-flex;align-items:center;gap:7px;font-size:var(--text-sm);color:var(--neutral-800)}
.bed-counter__label .icon{width:16px;height:16px;color:var(--healthcare-blue-500)}
.bed-counter__en{font-size:var(--text-2xs);color:var(--neutral-600)}
.bed-counter__value{display:flex;align-items:center;gap:var(--space-3)}
.bed-counter__value .num{font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--navy-700)}
.bed-counter__add{inline-size:var(--control-height-sm);padding-inline:0}
.bed-card__facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px var(--space-5);margin:0;padding:var(--space-5);
  border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.bed-card__fact{display:flex;flex-direction:column;gap:3px;min-inline-size:0}
.bed-card__fact dt{font-size:var(--text-2xs);color:var(--neutral-600)}
.bed-card__fact dd{margin:0;font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--neutral-800)}
.bed-card__update{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-5);padding:14px var(--space-5);
  background:var(--neutral-50);border-radius:var(--radius-md)}
.bed-card__update-text{display:flex;flex-direction:column;gap:3px}
.bed-card__update-label{font-size:var(--text-2xs);color:var(--neutral-600)}
.bed-card__update-who{font-size:var(--text-sm);color:var(--neutral-800)}
.bed-card__update-time{font-size:var(--text-xs);color:var(--neutral-600)}
.bed-card__call{background:var(--surface-card)}
.bed-card__call .icon{color:var(--healthcare-blue-500)}
.bed-card__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;padding-block-start:var(--space-2)}
.bed-card__mark-vacant{display:contents}
.bed-card__planned{display:flex;align-items:flex-start;gap:10px;flex-wrap:wrap;margin:0;padding:0 var(--space-5) var(--space-5)}
.bed-card__planned > .btn{margin-block-start:24px}
.bed-card__planned .field{margin:0;min-inline-size:180px}
/* ---------- Admission form (FR-05, README §5.5) ---------- */
.admission-form{display:flex;flex-direction:column;gap:var(--space-5);margin:0}
.admission-form__fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:14px}
.admission-form__fields > .field:first-child{grid-column:1 / -1}
.admission-form__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;padding-block-start:var(--space-2)}
/* ---------- Discharge form (FR-06, README §5.6) and the death confirmation (Q-05) ---------- */
.discharge-form{display:flex;flex-direction:column;gap:var(--space-5);margin:0}
.discharge-form__destination[hidden]{display:none}
.discharge-form__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;padding-block-start:var(--space-2)}
/* ---------- Visit form (FR-04, README §5.4) ---------- */
.visit-form{display:flex;flex-direction:column;gap:var(--space-5);margin:0}
.visit-form__service[hidden]{display:none}
.visit-form__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;padding-block-start:var(--space-2)}
.death-confirm{grid-column:1 / -1;display:flex;flex-wrap:wrap;align-items:flex-start;gap:10px;padding:14px var(--space-5);
  background:var(--status-danger-bg);border:var(--border-hairline) solid var(--status-danger);border-radius:var(--radius-md)}
.death-confirm[hidden]{display:none}
.death-confirm > .icon{width:18px;height:18px;flex:none;color:var(--status-danger)}
.death-confirm__text{display:flex;flex:1;flex-direction:column;gap:3px;min-inline-size:200px;font-size:var(--text-xs);line-height:1.8;color:var(--neutral-800)}
.death-confirm__title{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--status-danger)}
.death-confirm__actions{display:flex;flex-basis:100%;justify-content:flex-end;gap:var(--space-3)}
.bed-card--readonly .field--readonly{gap:var(--space-2);padding:10px var(--space-4);background:var(--neutral-50);border-radius:var(--radius-sm)}
.bed-card__vacant .icon{color:var(--status-success)}

@media (max-width:1100px){
  .ward-page{grid-template-columns:minmax(0,1fr)}
  .ref-lists{grid-template-columns:repeat(2,minmax(0,1fr))}
  .wards-layout{grid-template-columns:minmax(0,1fr)}
}

@media (max-width:640px){
  .settings-header{padding:var(--space-4) var(--gutter-page-mobile)}
  .settings-tabs{gap:var(--space-3);padding-block-end:2px;scrollbar-width:none}
  .settings-tabs__long{display:none}
  .settings-tabs__short{display:inline}
  .settings-tabs__tab{display:inline-flex;align-items:center;min-block-size:44px;padding:0 14px;font-size:var(--text-xs);
    color:var(--neutral-800);background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-pill)}
  .settings-tabs__tab.is-active{color:var(--text-inverse);background:var(--navy-700);border-color:var(--navy-700)}

  .settings-page{padding:14px var(--gutter-page-mobile)}
  .ward-page{padding:14px var(--gutter-page-mobile) 84px;gap:14px}
  .ward-header{padding:14px var(--space-5);gap:var(--space-4)}
  .ward-header__side{inline-size:100%}
  .ward-picker{flex:1 1 100%;flex-direction:column;align-items:stretch;padding-inline-end:0;border-inline-end:0}
  .ward-picker .field__select{inline-size:100%}
  .ward-picker .field__control{height:var(--control-height-lg)}
  .ward-stats{gap:var(--space-3)}
  .ward-stats .stat{padding:11px var(--space-4)}
  .ward-stats .stat__label{font-size:var(--text-2xs)}
  .ward-stats .stat__value{font-size:var(--text-xl)}
  .ward-stats .stat__eyebrow,.stat--wide-only{display:none}
  .ward-grid{padding:var(--space-4);gap:var(--space-4)}
  .ward-grid__titles,.ward-grid .bed-legend__group + .bed-legend__group,.ward-grid .bed__state{display:none}
  .bed-card__statuses,.bed-card__counters,.admission-form__fields{grid-template-columns:minmax(0,1fr)}
  .admission-form .field__control{height:var(--control-height-lg)}
  .admission-form__actions .btn,.discharge-form__actions .btn,.death-confirm__actions .btn{min-block-size:44px}
  .discharge-form .field__control{height:var(--control-height-lg)}
  .visit-form .field__control{height:var(--control-height-lg)}
  .visit-form__actions .btn{min-block-size:44px}
  .bed-card__facts{grid-template-columns:repeat(2,minmax(0,1fr))}
  .bed-card__actions .btn,.bed-card__call{min-block-size:44px}
  .bed-counter__add{inline-size:44px;block-size:44px}
  /* MOB-02: a 3-bed room wraps to 2 + 1 so every bed cell stays a 44px touch target in the 3-column grid; the card and the
     sidebar controls use the large control height. */
  .room__beds--3{grid-template-columns:1fr 1fr}
  .room__beds--3 > :last-child{grid-column:1 / -1}
  .bed-card .field__control{height:var(--control-height-lg)}
  .ref-lists{grid-template-columns:minmax(0,1fr)}
  .ref-list__add{flex-direction:column;align-items:stretch}
  .ref-list__add .field__control{height:var(--control-height-lg)}
  .dialog-form__row,.dialog-form__grid{grid-template-columns:minmax(0,1fr)}
  .shift-add{grid-template-columns:minmax(0,1fr);min-inline-size:0}
  .shift-add .field__control{height:var(--control-height-lg)}
  .user-created__credential--password{flex-direction:column;align-items:stretch}
}

/* ---------- MOB-01 offline page (served by the service worker when a page cannot load) ---------- */
.offline-page{min-block-size:100vh;display:flex;align-items:center;justify-content:center;margin:0;padding:var(--space-6) var(--gutter-page-mobile);background:var(--neutral-50)}
.offline-page__card{display:flex;flex-direction:column;align-items:center;gap:14px;max-inline-size:440px;text-align:center}
.offline-page__mark{border-radius:var(--radius-md)}
.offline-page__title{margin:0;font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--text-heading)}
.offline-page__text{margin:0;font-size:var(--text-sm);line-height:1.8;color:var(--neutral-800)}
/* ---------- Analytics: trends (FR-09, README §5.9, ANL-01) ---------- */
.analytics__head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.analytics__filter{display:flex;align-items:flex-end;gap:10px;margin:0}
.analytics__filter .field{display:flex;flex-direction:column;gap:var(--space-2);margin:0;min-inline-size:200px}
.specialty-card{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}
.specialty-card__head{display:flex;flex-direction:column;gap:3px;padding:16px 18px 12px}
.specialty-table__row{display:grid;grid-template-columns:minmax(0,1.4fr) repeat(4,minmax(0,.8fr)) minmax(0,1.6fr);gap:12px;align-items:center;padding:11px 18px;border-block-end:var(--border-hairline) solid var(--neutral-100)}
.specialty-table__row--head{padding-block:10px;background:var(--pale-blue-50);border-block:var(--border-hairline) solid var(--border-subtle);font-size:var(--text-2xs);color:var(--neutral-600)}
.specialty-table__name{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--navy-700)}
.specialty-table__count{justify-self:start;font-size:var(--text-sm);color:var(--neutral-800)}
.specialty-table__count--muted{color:var(--neutral-600)}
.specialty-table__pct{display:flex;align-items:center;gap:10px}
.specialty-table__pct .target-bar{flex:1}
.specialty-table__value{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--navy-700)}
@media (max-width:640px){
  .analytics__filter{flex-direction:column;align-items:stretch}
  .analytics__filter,.analytics__filter .field{inline-size:100%}
  .analytics__filter .field__control{min-block-size:44px}
  .specialty-table__row--head{display:none}
  .specialty-table__row{grid-template-columns:repeat(3,auto) 1fr;grid-template-areas:"name name name pct" "bar bar bar bar";row-gap:8px;padding:12px 14px}
  .specialty-table__name{grid-area:name}
  .specialty-table__row > .specialty-table__count{grid-row:3;font-size:var(--text-2xs);color:var(--neutral-600)}
  .specialty-table__row > .specialty-table__count::before{content:attr(data-label) " "}
  .specialty-table__row > .specialty-table__count:nth-child(2){display:none}
  .specialty-table__pct{display:contents}
  .specialty-table__pct .target-bar{grid-area:bar}
  .specialty-table__value{grid-area:pct;justify-self:end;font-size:var(--text-sm)}
}
/* ---------- Analytics: sub-tabs and forecast (FR-09, README §5.9, FCT-02) ---------- */
.analytics-tabs{padding:12px var(--gutter-page) 0;background:var(--surface-card);border-block-end:var(--border-hairline) solid var(--border-subtle)}
.forecast__top{display:grid;grid-template-columns:340px minmax(0,1fr);gap:16px;align-items:start}
.forecast-peak,.forecast-ward{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}
.forecast-peak__body{display:flex;flex-direction:column;gap:10px;padding:18px}
.forecast-peak__label{font-size:var(--text-xs);color:var(--neutral-600)}
.forecast-peak__value{font-size:var(--text-3xl);font-weight:var(--weight-semibold);color:var(--navy-700);line-height:1}
.forecast-peak__note{font-size:var(--text-xs);line-height:1.7;color:var(--neutral-800)}
.forecast-peak__confidence{display:flex;align-items:center;gap:8px;padding-block-start:8px;border-block-start:var(--border-hairline) solid var(--neutral-100)}
.forecast-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.forecast-card{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:14px 16px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.forecast-card__label{font-size:var(--text-2xs);line-height:1.5;color:var(--neutral-600)}
.forecast-card__value{font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--navy-700);line-height:1}
.forecast__panel-head{display:flex;flex-direction:column;gap:3px}
.forecast-table__row{display:grid;grid-template-columns:minmax(0,1.6fr) repeat(3,minmax(0,.8fr)) minmax(0,1.4fr) minmax(0,1.1fr) minmax(0,1fr);gap:12px;align-items:center;padding:12px 18px;border-block-end:var(--border-hairline) solid var(--neutral-100)}
.forecast-table__row--head{padding-block:10px;background:var(--pale-blue-50);border-block:var(--border-hairline) solid var(--border-subtle);font-size:var(--text-2xs);color:var(--neutral-600)}
.forecast-table__ward{display:flex;flex-direction:column;gap:2px;min-inline-size:0}
.forecast-table__name{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.forecast-table__meta{font-size:var(--text-2xs);color:var(--neutral-600)}
.forecast-table__cell{justify-self:start;font-size:var(--text-sm);color:var(--neutral-800)}
.forecast-table__cell--muted{color:var(--neutral-600)}
.forecast-table__extra{font-size:var(--text-xs)}
.forecast-table__peak,.forecast-days__pct{display:flex;align-items:center;gap:10px}
.forecast-table__peak .target-bar,.forecast-days__pct .target-bar{flex:1}
.forecast-table__value{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--navy-700)}
.forecast-table__verdict{justify-self:start}
.forecast-ward__body{display:flex;flex-direction:column;gap:14px;padding:18px}
.forecast-ward__summary{display:flex;align-items:center;flex-wrap:wrap;gap:14px;padding:12px 14px;background:var(--pale-blue-50);border-radius:var(--radius-md)}
.forecast-ward__name{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.forecast-ward__figure{display:inline-flex;align-items:baseline;gap:6px;font-size:var(--text-xs);color:var(--neutral-600)}
.forecast-ward__figure-value{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.forecast-ward__grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:16px;align-items:start}
.forecast-days{border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}
.forecast-days__row{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1.4fr) minmax(0,.8fr) minmax(0,1fr);gap:10px;align-items:center;padding:9px 14px;border-block-end:var(--border-hairline) solid var(--neutral-100)}
.forecast-days__row--head{background:var(--pale-blue-50);border-block-end-color:var(--border-subtle);font-size:var(--text-2xs);color:var(--neutral-600)}
.forecast-days__day{font-size:var(--text-xs);color:var(--neutral-800)}
.forecast-days__beds{justify-self:start;font-size:var(--text-2xs);color:var(--neutral-600)}
.forecast-actions__list{display:flex;flex-direction:column;gap:6px;margin:0;padding:0;list-style:none}
.forecast-actions__item{display:flex;align-items:flex-start;gap:9px;font-size:var(--text-sm);line-height:1.8;color:var(--neutral-800)}
.forecast-actions__item .icon{inline-size:16px;block-size:16px;flex:none;margin-block-start:5px;color:var(--healthcare-blue-500)}
.forecast-actions__disclaimer{margin:0;padding-block-start:6px;border-block-start:var(--border-hairline) solid var(--neutral-100);font-size:var(--text-2xs);line-height:1.8;color:var(--neutral-600)}
@media (max-width:1100px){
  .forecast__top{grid-template-columns:1fr}
  .forecast-ward__grid{grid-template-columns:1fr}
}
@media (max-width:640px){
  .analytics-tabs{padding-inline:var(--gutter-page-mobile)}
  .forecast-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .forecast-peak__value{font-size:var(--text-2xl)}
  .forecast-table__row--head{display:none}
  .forecast-table__row{grid-template-columns:repeat(3,auto) 1fr;grid-template-areas:"ward ward ward verdict" "peak peak peak peak";row-gap:8px;padding:12px 14px}
  .forecast-table__ward{grid-area:ward}
  .forecast-table__verdict{grid-area:verdict;justify-self:end}
  .forecast-table__peak{grid-area:peak}
  .forecast-table__row > .forecast-table__cell{grid-row:3;font-size:var(--text-2xs);color:var(--neutral-600)}
  .forecast-table__row > .forecast-table__cell::before{content:attr(data-label) " "}
  .forecast-days__row{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto}
  .forecast-days__row > :nth-child(3){display:none}
}
/* ---------- Analytics: forecast CSV export (EXP-01) ---------- */
.forecast-ward__export{margin-inline-start:auto}
@media (max-width:640px){
  .analytics__export,.forecast-ward__export{inline-size:100%;min-block-size:44px;justify-content:center;margin-inline-start:0}
}
/* ---------- Annual statistics (FR-11, README §5.11, STA-01) ---------- */
.statistics__body{display:flex;flex-direction:column;gap:16px}
.statistics__cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.statistics__row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}
.statistics__row--wide{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}
.statistics__none{margin:0;font-size:var(--text-sm);color:var(--neutral-600)}
.turnover-table__row{display:grid;grid-template-columns:minmax(0,2fr) repeat(3,minmax(0,1fr));gap:12px;align-items:center;padding:10px 18px;border-block-end:var(--border-hairline) solid var(--neutral-100);font-size:var(--text-xs);color:var(--neutral-800)}
.turnover-table__row--head{padding-block:9px;background:var(--pale-blue-50);border-block:var(--border-hairline) solid var(--border-subtle);font-size:var(--text-2xs);color:var(--neutral-600)}
.turnover-table__ward{font-weight:var(--weight-medium);color:var(--navy-700)}
.turnover-table__cell{justify-self:start}
.turnover-table__rate{font-weight:var(--weight-semibold)}
.backup-usage{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.backup-usage__card{display:flex;flex-direction:column;gap:8px;padding:14px 16px;border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.backup-usage__name{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.backup-usage__figures{display:flex;gap:22px}
.backup-usage__figure{display:flex;flex-direction:column;gap:2px}
.backup-usage__label{font-size:var(--text-2xs);color:var(--neutral-600)}
.backup-usage__value{font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--navy-700)}
@media (max-width:1100px){
  .statistics__row,.statistics__row--wide{grid-template-columns:1fr}
  .statistics__cards{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:640px){
  .statistics__cards{gap:8px}
  .backup-usage{grid-template-columns:1fr}
  .turnover-table__row{padding-inline:14px}
}
/* ---------- Hospital Admin console (FR-13, README §5.13, ADM-01) ---------- */
.console-header,.console-header ~ .settings-page{inline-size:100%;max-inline-size:var(--hospital-admin-max-w);margin-inline:auto}
.console-header{display:flex;flex-direction:column;gap:12px;padding:var(--space-6) var(--gutter-page) 0;box-sizing:border-box}
.console-header__identity{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.console-header__names{display:flex;flex-direction:column;gap:3px}
.console-header__eyebrow{font-size:var(--text-2xs);color:var(--neutral-600)}
.console-header__hospital{font-size:var(--text-md);font-weight:var(--weight-semibold);color:var(--navy-700)}
.console-header__scope{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border:var(--border-hairline) solid var(--gold-500);border-radius:var(--radius-pill);font-size:var(--text-2xs);color:var(--gold-700)}
.console-header__scope .icon{inline-size:13px;block-size:13px}
.console-nav{display:flex;flex-wrap:wrap;gap:6px;padding-block-end:12px;border-block-end:var(--border-hairline) solid var(--border-subtle)}
.console-nav__item{display:inline-flex;align-items:center;gap:6px;min-block-size:36px;padding:0 12px;border-radius:var(--radius-sm);font-size:var(--text-sm);color:var(--neutral-800);text-decoration:none}
.console-nav__item .icon{inline-size:16px;block-size:16px;color:var(--neutral-600)}
.console-nav__item:hover{background:var(--pale-blue-50)}
.console-nav__item.is-active{background:var(--pale-blue-50);font-weight:var(--weight-semibold);color:var(--navy-700)}
.console-nav__item.is-active .icon{color:var(--navy-700)}
.console-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.console-card,.console-form{background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}
.console-card__body{display:flex;flex-direction:column;gap:6px;padding:16px 18px}
.console-card__label{font-size:var(--text-xs);color:var(--neutral-600)}
.console-card__value{font-size:var(--text-2xl);font-weight:var(--weight-semibold);color:var(--navy-700);line-height:1}
.console-card__value--warning{color:var(--gold-700)}
.console-card__value--success{color:var(--status-success)}
.console-card__sub{font-size:var(--text-2xs);color:var(--neutral-600)}
.console-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}
.console-shortcut{display:flex;align-items:center;gap:10px;padding:12px 14px;border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);text-decoration:none}
.console-shortcut:hover{background:var(--pale-blue-50)}
.console-shortcut > .icon{inline-size:17px;block-size:17px;color:var(--healthcare-blue-500)}
.console-shortcut > .icon:last-child{inline-size:15px;block-size:15px;color:var(--neutral-400)}
.console-shortcut__text{flex:1;display:flex;flex-direction:column;gap:2px}
.console-shortcut__label{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--navy-700)}
.console-shortcut__sub{font-size:var(--text-2xs);color:var(--neutral-600)}
.console-recent{display:flex;align-items:flex-start;gap:10px;padding-block-end:10px;border-block-end:var(--border-hairline) solid var(--neutral-100)}
.console-recent__text{display:flex;flex-direction:column;gap:2px;min-inline-size:0}
.console-recent__detail{font-size:var(--text-xs);line-height:1.7;color:var(--neutral-800)}
.console-recent__meta{font-size:var(--text-2xs);color:var(--neutral-600)}
.console-note{display:flex;align-items:flex-start;gap:8px;margin:0;font-size:var(--text-2xs);line-height:1.8;color:var(--neutral-600)}
.console-note .icon{inline-size:15px;block-size:15px;flex:none;margin-block-start:3px}
.console-form__body{display:flex;flex-direction:column;gap:16px;padding:20px;margin:0}
.console-form__logo{display:flex;align-items:center;gap:14px}
.console-form__logo img{border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);background:var(--pale-blue-50);padding:6px}
.console-form__actions{display:flex;justify-content:flex-end}
@media (max-width:640px){
  .console-header{padding:14px var(--gutter-page-mobile) 0}
  .console-nav__item{min-block-size:44px}
  .console-cards,.console-columns{grid-template-columns:1fr}
}
/* ---------- Super Admin console (FR-12, README §5.12, SUP-01) ---------- */
.system-admin{display:grid;grid-template-columns:236px minmax(0,1fr);align-items:start;min-block-size:100%}
.system-admin__sidebar{position:sticky;inset-block-start:0;display:flex;flex-direction:column;gap:6px;padding:18px 14px;background:var(--surface-card);border-inline-end:var(--border-hairline) solid var(--border-subtle);min-block-size:calc(100vh - 140px);box-sizing:border-box}
.system-admin__context{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;margin-block-end:12px;padding:5px 12px;border:var(--border-hairline) solid var(--gold-500);border-radius:var(--radius-pill);font-size:var(--text-2xs);color:var(--gold-700)}
.system-admin__context .icon{inline-size:13px;block-size:13px}
.system-admin__sections{padding:0 10px 6px;font-size:var(--text-2xs);color:var(--neutral-400)}
.system-admin__nav{display:flex;flex-direction:column;gap:4px}
.system-admin__link{display:flex;align-items:center;gap:10px;min-block-size:40px;padding:0 12px;border-radius:var(--radius-sm);font-size:var(--text-sm);color:var(--neutral-800);text-decoration:none}
.system-admin__link .icon{inline-size:17px;block-size:17px;color:var(--neutral-600)}
.system-admin__link:hover{background:var(--pale-blue-50)}
.system-admin__link.is-active{background:var(--pale-blue-50);font-weight:var(--weight-semibold);color:var(--navy-700)}
.system-admin__link.is-active .icon{color:var(--navy-700)}
.system-admin__note{margin:auto 0 0;padding:14px 10px 0;border-block-start:var(--border-hairline) solid var(--neutral-100);font-size:var(--text-2xs);line-height:1.8;color:var(--neutral-600)}
.system-admin__content{display:flex;flex-direction:column;gap:var(--space-5);padding:var(--space-6) var(--gutter-page);min-inline-size:0}
.hospital-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.hospital-card{display:flex;align-items:flex-start;gap:12px;padding:16px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md);color:inherit;text-decoration:none}
a.hospital-card:hover{border-color:var(--navy-300)}
.hospital-card__initials{display:flex;align-items:center;justify-content:center;flex:none;inline-size:44px;block-size:44px;border-radius:var(--radius-md);background:var(--pale-blue-50);font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--navy-500)}
.hospital-card__body{flex:1;display:flex;flex-direction:column;gap:4px;min-inline-size:0}
.hospital-card__name{font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:1.5;color:var(--navy-700)}
.hospital-card__address,.hospital-card__admin{font-size:var(--text-2xs);color:var(--neutral-600)}
.hospital-card__figures{display:flex;flex-wrap:wrap;gap:14px;font-size:var(--text-2xs);color:var(--neutral-600)}
.hospital-card__figures strong{font-weight:var(--weight-semibold);color:var(--neutral-800)}
.wizard-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0;padding:0;list-style:none}
.wizard-steps__step{display:flex;flex-direction:column;gap:6px}
.wizard-steps__bar{block-size:4px;border-radius:var(--radius-pill);background:var(--neutral-100)}
.wizard-steps__step.is-done .wizard-steps__bar{background:var(--navy-300)}
.wizard-steps__step.is-active .wizard-steps__bar{background:var(--navy-700)}
.wizard-steps__label{font-size:var(--text-xs);color:var(--neutral-600)}
.wizard-steps__step.is-active .wizard-steps__label{font-weight:var(--weight-semibold);color:var(--navy-700)}
.wizard{display:flex;flex-direction:column;gap:14px;max-inline-size:720px;margin:0}
.wizard__card{display:flex;flex-direction:column;gap:14px;margin:0;padding:18px;background:var(--surface-card);border:var(--border-hairline) solid var(--border-subtle);border-radius:var(--radius-md)}
.wizard__contact-title{padding:0;font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.wizard__hint{margin:0;font-size:var(--text-xs);line-height:1.8;color:var(--neutral-600)}
.wizard__remove,.wizard__add{align-self:flex-start}
.wizard__grant-person{display:flex;flex-direction:column;gap:2px}
.wizard__grant-name{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.wizard__grant-meta,.wizard__grant-role{font-size:var(--text-2xs);color:var(--neutral-600)}
.wizard__switch{display:inline-flex;align-items:center;gap:8px;min-block-size:44px;font-size:var(--text-sm);color:var(--neutral-800)}
.wizard__switch input{inline-size:18px;block-size:18px}
.wizard__review{gap:4px}
.wizard__review-name{font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--navy-700)}
.wizard__review-meta{font-size:var(--text-xs);color:var(--neutral-600)}
.wizard__review-meta:empty{display:none}
.wizard__actions{display:flex;justify-content:space-between;gap:10px}
@media (max-width:900px){
  .system-admin{grid-template-columns:1fr}
  .system-admin__sidebar{position:static;min-block-size:0;border-inline-end:0;border-block-end:var(--border-hairline) solid var(--border-subtle)}
  .system-admin__nav{flex-direction:row;flex-wrap:wrap}
  .system-admin__note{display:none}
}
@media (max-width:640px){
  .system-admin__content{padding:14px var(--gutter-page-mobile)}
  .system-admin__link,.wizard__actions .btn{min-block-size:44px}
  .hospital-cards{grid-template-columns:1fr}
  .wizard-steps{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* ---------- Super Admin hospital page (FR-12, SUP-02) ---------- */
.hospital-page__back{align-self:flex-start}

/* ---------- Accessibility floor (NFR-02, PRD §8) ---------- */
/* Text contrast: --neutral-400 reads 2.3:1 on white and --neutral-600 4.3:1 on a pale tint, both under 4.5:1 for text this
   small. The muted tone stays, one step darker; the tinted surfaces get a mix so the label keeps its hue. */
.stat__eyebrow,.kpi__note,.kpi-strip__eyebrow,.ward-header__secondary,.system-admin__sections,
.shift-row.is-inactive .field__control,.shift-row.is-inactive .shift-row__name,
.table tr.is-inactive .users-table__name,.table tr.is-inactive .buildings-table__name,.ref-item--inactive .ref-item__name,
.ward-panel__room.is-inactive .ward-panel__room-label,.ward-panel__bed.is-inactive span{color:var(--text-muted)}
.kpi__label,.kpi__trend,.staff-card__label,.room__count{color:color-mix(in srgb, var(--text-muted) 72%, var(--neutral-900))}
.badge--warning{color:color-mix(in srgb, var(--gold-700) 74%, var(--neutral-900))}
.badge--info{color:color-mix(in srgb, var(--blue-700) 74%, var(--neutral-900))}

/* Touch targets: on a phone every control is at least 44px on its shorter side (PRD §8). These four sit in tables and
   filter rows; on the web they keep at least the 24px WCAG 2.2 floor. */
.table__sort,.audit-changes summary,.ward-panel__beds summary,.wards-table a.wards-table__name{min-block-size:24px;display:inline-flex;align-items:center}
@media (max-width: 640px){
  .wards-table a.wards-table__name,.table__sort,.audit-changes summary,.ward-panel__beds summary,.ward-card-mobile summary{
    min-block-size:44px;min-inline-size:44px;display:inline-flex;align-items:center}
  .field__control{block-size:var(--control-height-lg)}
}
