:root{--ink:#172741;--muted:#586981;--blue:#2457dc;--line:#e0e7f1;--bg:#f4f7fc;--nav:#101e37;--white:#fff;font:15px/1.5 Inter,system-ui,sans-serif;color:var(--ink);background:var(--bg)}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #7297ff;outline-offset:2px}.rail{position:fixed;inset:0 auto 0 0;width:244px;background:var(--nav);color:#fff;padding:24px 16px;display:flex;flex-direction:column}.brand,.rail-foot{display:flex;align-items:center;gap:11px;font-weight:700}.brand{padding:0 5px}.mark,.avatar{display:grid;place-items:center;border-radius:11px;background:#3865ef;flex:none;width:39px;height:39px}.brand small,.rail-foot small{display:block;color:#b0bed8;font-size:10px;letter-spacing:.08em}.nav-label{color:#aebdd8;font-size:10px;letter-spacing:.15em;margin:42px 10px 10px}.rail nav{display:grid;gap:5px}.rail nav button{border:0;background:none;text-align:left;color:#c8d4ea;padding:11px 12px;border-radius:8px;display:flex;gap:13px}.rail nav button.active,.rail nav button:hover{background:#253c66;color:white}.rail nav span{width:20px;text-align:center}.rail-foot{margin-top:auto;border-top:1px solid #34445f;padding:18px 2px 0}.avatar{background:#283e67;font-size:13px}.shell{margin-left:244px}header{height:68px;background:white;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 30px;font-weight:650}#crumb span{color:var(--muted);font-weight:450}.primary,.secondary,.text-button,.icon-button{border-radius:8px;padding:8px 13px;font-weight:650}.primary{background:var(--blue);color:white;border:1px solid var(--blue)}.secondary,.icon-button{background:#fff;border:1px solid var(--line)}.text-button{background:none;border:0;color:var(--blue)}.primary:hover{background:#1945bd}.secondary:hover,.icon-button:hover{background:#eef3fd}main{max-width:1450px;margin:auto;padding:30px}.intro{display:flex;justify-content:space-between;align-items:end;gap:14px;margin-bottom:23px}.eyebrow{font-size:11px;font-weight:800;color:#2855bd;letter-spacing:.13em;text-transform:uppercase}h1,h2,h3,p{margin:0}h1{font-size:clamp(28px,4vw,38px);letter-spacing:-.045em;line-height:1.15;margin:6px 0 8px}h2{font-size:18px}h3{font-size:15px}.intro p,.muted,footer{color:var(--muted)}.metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin-bottom:18px}.metric{background:white;border:1px solid var(--line);border-radius:12px;padding:15px;text-align:left;display:grid;gap:7px}.metric:hover{border-color:#7999ea}.metric .symbol{width:32px;height:32px;border-radius:8px;background:#eaf0ff;color:#244fbd;display:grid;place-items:center}.metric:nth-child(2) .symbol{background:#fff0ea;color:#a53d20}.metric:nth-child(3) .symbol{background:#e6f7f0;color:#06734f}.metric:nth-child(4) .symbol{background:#f5edff;color:#7044ac}.metric strong{font-size:26px;line-height:1}.metric small{color:var(--muted)}.filters{display:flex;flex-wrap:wrap;gap:8px;padding:12px;background:white;border:1px solid var(--line);border-radius:12px;margin-bottom:17px}.filters>*{min-width:0}.filters input[type=search]{flex:1;min-width:155px}.filters select{max-width:180px}input,select,textarea{background:#fff;border:1px solid #ccd7e7;border-radius:7px;padding:8px 9px}textarea{width:100%;resize:vertical}.panel{background:white;border:1px solid var(--line);border-radius:13px;min-width:0;overflow:hidden}.panel-head{padding:15px 17px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:8px}.columns{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(0,1fr);gap:16px}.row{display:flex;align-items:center;gap:11px;padding:12px 16px;border-bottom:1px solid #edf1f7}.row:last-child{border-bottom:0}.row .lead{flex:1;min-width:0;overflow-wrap:anywhere}.row small{display:block;color:var(--muted)}.row button.link,.cal-event{border:0;background:none;padding:0;text-align:left;font-weight:700}.row button.link:hover{text-decoration:underline}.date-tile{background:#eef3fc;border-radius:8px;min-width:48px;text-align:center;padding:4px;color:#2854b4;font-size:11px;font-weight:700}.tag{display:inline-block;border-radius:99px;padding:2px 8px;font-size:11px;font-weight:700;background:#eaf0ff;color:#254eaa;white-space:nowrap}.tag.warn{background:#fff1dc;color:#814505}.tag.done{background:#e1f6ed;color:#116646}.empty{text-align:center;padding:32px 16px;color:var(--muted)}.empty strong{display:block;color:var(--ink);margin-bottom:4px}.empty button{margin-top:12px}footer{font-size:12px;margin-top:20px}.cal-wrap{overflow:auto}.calendar{min-width:650px;display:grid;grid-template-columns:repeat(7,1fr)}.dow{text-align:center;background:#f6f8fc;padding:8px;color:var(--muted);font-size:12px}.day{min-height:86px;border:1px solid #edf1f7;padding:5px;min-width:0}.day.out{background:#f5f7fa}.day.today{background:#edf3ff}.day-number{border:0;background:transparent;padding:1px 6px;font-weight:700}.cal-event{display:block;width:100%;background:#eaf0ff;border-radius:5px;padding:3px 4px;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:#2149a3}.calendar-actions{display:flex;gap:5px}dialog{width:min(760px,calc(100% - 24px));border:1px solid var(--line);border-radius:14px;padding:0;max-height:92vh;box-shadow:0 20px 70px #101e3750}dialog::backdrop{background:#101e3788}.dialog-head{display:flex;align-items:center;justify-content:space-between;padding:13px 19px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:1}#modal-body{padding:19px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}.form-grid label,label.full{display:grid;gap:4px;font-size:13px;font-weight:650}.full{grid-column:1/-1}.actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.notice{background:#eef3ff;border-radius:8px;padding:10px 12px;margin:9px 0;color:#28467e;font-size:13px;white-space:pre-wrap}.source{white-space:pre-wrap;overflow-wrap:anywhere;background:#f4f7fc;padding:12px;border-radius:8px;max-height:220px;overflow:auto}.spaced{margin-top:13px}#toast{position:fixed;bottom:16px;right:16px;background:var(--nav);color:white;border-radius:8px;padding:9px 14px;z-index:3}#toast:empty{display:none}@media(max-width:950px){.rail{width:190px}.shell{margin-left:190px}main,header{padding-left:18px;padding-right:18px}.columns{grid-template-columns:1fr}}@media(max-width:680px){.rail{position:static;width:auto;padding:10px}.brand{margin-bottom:7px}.rail nav{display:flex;overflow:auto}.rail nav button{white-space:nowrap;padding:7px 9px}.rail-foot,.nav-label{display:none}.shell{margin:0}header{height:58px}main{padding:17px 12px}.intro{align-items:start;flex-direction:column}.metric-grid{grid-template-columns:repeat(2,1fr)}.row{padding:10px}.form-grid{grid-template-columns:1fr}.filters select{max-width:155px}}
[hidden]{display:none!important}.rota-toolbar{align-items:flex-end;flex-wrap:wrap}.rota-grid{display:grid;grid-template-columns:156px repeat(7,minmax(108px,1fr));min-width:912px}.rota-grid>*{border-bottom:1px solid #e7edf6;border-right:1px solid #e7edf6;min-width:0}.rota-heading{padding:9px 8px;background:#edf2fa;color:#34496b;font-size:12px;font-weight:750}.rota-heading .text-button{font-size:11px;padding:0 3px}.rota-name{background:#f8faff;padding:11px 8px;overflow-wrap:anywhere}.rota-name strong,.rota-name small,.shift small{display:block}.rota-name small{color:var(--muted)}.rota-cell{min-height:68px;padding:4px;display:flex;flex-direction:column;gap:4px}.rota-grid .current{background:#f0f5ff}.cell-add{color:#415e91;border:1px dashed #d8e2f1;background:transparent;border-radius:5px;width:100%;min-height:25px}.cell-add:hover{background:#e4ecfd;border-color:#89a5dd}.shift{border:0;border-left:3px solid #3e6be1;border-radius:5px;padding:4px 5px;text-align:left;background:#e7efff;color:#163975;overflow-wrap:anywhere;font-size:12px}.shift.open{background:#fff0d6;border-color:#b46b0a;color:#744300}.shift.leave{background:#e2f5ea;border-color:#14805c;color:#12553e}.shift.night{background:#eee9ff;border-color:#7553c4;color:#503586}.shift.conflict{outline:1px solid #b93532}.rota-empty-actions{display:flex;justify-content:center;gap:8px;padding:0 10px 16px}.rota-toolbar .calendar-actions{flex-wrap:wrap}
.rota-slot{border-bottom:1px solid #e6edf7;padding-bottom:3px;display:grid;gap:3px}.rota-slot:last-child{border-bottom:0}.rota-slot>span{font-size:10px;color:#586981;font-weight:700}.days-choice{display:flex;gap:10px;flex-wrap:wrap}.days-choice label{display:flex;align-items:center}.rota-grid{grid-template-columns:156px repeat(7,minmax(118px,1fr));min-width:982px}.rota-name{position:sticky;left:0;z-index:1}.rota-heading:first-child{position:sticky;left:0;z-index:1}
.form-grid .employment-check{display:flex;align-items:center;gap:8px;align-self:end;padding:8px 0}
.day-off-menu{width:100%;font-size:11px;padding:3px 4px;color:#34496b;margin-top:auto}

/* Keep dates and staff names in view while scrolling the weekly grid. */
.rota-toolbar + .cal-wrap{max-height:70vh;max-height:70dvh}
.rota-grid .rota-heading{position:sticky;top:0;z-index:2;box-shadow:0 1px 0 #ccd8e8}
.rota-grid .rota-heading.current{background:#e4edff}
.rota-grid .rota-heading:first-child{z-index:3}
.gap-jump{text-decoration:none;color:inherit}.gap-jump:hover,.gap-jump:focus-visible{outline:2px solid #3d64b0}
.gap-summary{margin:0;padding:10px 15px;background:#fff6e5;color:#553b0a}
.gap-day h3{margin:0;padding:8px 15px;background:#eff3fa;color:#34496b;font-size:13px}
.gap-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.gap-actions button{white-space:nowrap}

/* Shift type colour and text labels are separate from assignment status. */
.shift.duty-colour{border-left:4px solid var(--duty-accent);background:var(--duty-bg);color:#172337}
.shift.duty-colour.open{border-top:1px dashed #76500e;border-right:1px dashed #76500e;border-bottom:1px dashed #76500e}
.shift-key{padding:9px 15px;border-bottom:1px solid #e0e7f0;background:#f8faff}
.shift-key summary{cursor:pointer;font-weight:650;font-size:13px}
.shift-key>div{display:flex;flex-wrap:wrap;gap:5px 8px;margin-top:7px}
.shift-key-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 7px;border-radius:5px;background:var(--duty-bg);color:#172337;font-size:12px}
.shift-key-chip>span{width:8px;height:8px;flex:none;border-radius:2px;background:var(--duty-accent)}
.rota-toolbar + .shift-key + .cal-wrap{max-height:70vh;max-height:70dvh}

#print-rota{display:none}
@media print{
  @page{size:A4 landscape;margin:8mm}
  body:has(#print-rota)>:not(#print-rota){display:none!important}
  #print-rota{display:block;color:#172337;print-color-adjust:exact;-webkit-print-color-adjust:exact;font-size:10pt}
  #print-rota h1{margin:0;font-size:19pt}
  #print-rota>p{margin:4px 0 8px}
  #print-rota table{width:100%;border-collapse:collapse;table-layout:fixed;margin-top:8px}
  #print-rota thead{display:table-header-group}
  #print-rota tr{break-inside:avoid}
  #print-rota th,#print-rota td{position:static;display:table-cell;vertical-align:top;text-align:left;padding:4px;border:1px solid #d3dcea}
  #print-rota th:first-child{width:15%}
  #print-rota .shift{display:block;width:100%;font-size:9pt}
  #print-rota .rota-slot{min-height:14px}
}

/* The staff column precedes Monday–Sunday in both the grid and print table. */
.rota-grid > .rota-heading:nth-child(8n+7),
.rota-grid > .rota-heading:nth-child(8n+8),
#print-rota thead .rota-heading:nth-child(n+7){background:#e6dcf5}
.rota-grid > .rota-cell:nth-child(8n+7),
.rota-grid > .rota-cell:nth-child(8n+8),
#print-rota tbody .rota-cell:nth-child(n+7){background:#f7f2fc}
.rota-grid > .current:nth-child(8n+7),.rota-grid > .current:nth-child(8n+8),
#print-rota .current:nth-child(n+7){box-shadow:inset 0 2px #a489c7}

/* Staff dividers and coverage status are independent of duty colours. */
.rota-grid > .rota-name,.rota-grid > .rota-cell{border-bottom:2px solid #9aaac0}
#print-rota tbody th,#print-rota tbody td{border-bottom:2px solid #9aaac0}
.shift.duty-colour.open{border-top-color:#a32132;border-right-color:#a32132;border-bottom-color:#a32132}
.shift.duty-colour.open small:last-of-type{font-weight:700}
.shift.duty-colour.conflict{outline-color:#725498}
.gap-summary{background:#fcebed;color:#791e2d}
.tag.gap-alert{background:#fce4e8;color:#861d30}

.shift.duty-colour{border-left-width:5px}.shift-key-chip>span{width:10px;height:10px}.shift .duty-type{font-weight:650}
.published-grid-view #add,.published-grid-view #example,.published-grid-view footer{display:none!important}

.published-grid-view .rota-cell .shift{cursor:default}
.planner-leave-content{padding:12px 16px 20px}
.leave-section-title{margin-top:22px}
#planner-leave-error{color:#862234}
.published-grid-view #planner-publish{display:none!important}
.rail-foot a,.rail nav a{display:block;color:inherit;padding:6px 0}
.rail-logo{display:block;background:white;border-radius:6px;width:152px;height:auto;margin-top:9px}
.pah-brand{display:flex;align-items:center;gap:14px;text-decoration:none;color:#172337}
.pah-brand img{width:130px;height:auto}
@page pah-rota-landscape{size:A4 landscape;margin:8mm}
@media print{#print-rota{page:pah-rota-landscape}html,body{width:auto!important;min-width:0!important}}
.rail-account{width:100%;padding:10px 12px;border:1px solid #385171;border-radius:10px;background:#192d4c}
.rail-account strong{display:block;color:#f0f5fc;overflow-wrap:anywhere}
.rail-account a{display:flex;justify-content:space-between;align-items:center;color:#c7d8ed;text-decoration:none;font-size:13px}
.rail-account a:hover,.rail-account a:focus-visible{color:#fff;text-decoration:underline}
.planner-header-actions{display:grid;justify-items:end;gap:5px}
.shell>header:has(#add:not([hidden])){height:auto;min-height:76px;padding-block:8px}
.empty-calendar-day{text-align:left;background:#fff;color:#172337;display:grid;align-content:start;gap:5px;cursor:pointer}
.empty-calendar-day small{color:#385f93}
.empty-calendar-day:hover,.empty-calendar-day:focus-visible{background:#eef5ff}
.personal-calendar-duty{background:#edf4ff;border-left:3px solid #416cb2;padding:4px 5px;margin-top:5px;overflow-wrap:anywhere;font-size:12px}
.personal-calendar-duty small{display:block;color:#354a68}
#calendar-link-result input{display:block;width:100%;margin:6px 0}
.publish-green{background:#1ed760;color:#102c1b;border:1px solid #178b43;border-radius:8px;padding:8px 12px;font-weight:750;cursor:pointer}
.publish-green:hover{background:#35e474}.publish-green:disabled{opacity:.65}
#publish-reminder{color:#774b0a;background:#fff2d6;border-radius:6px;padding:2px 7px;font-weight:650}
.personal-calendar-duty{display:block;width:100%;background:var(--duty-bg);border:0;border-left:4px solid var(--duty-accent);border-radius:6px;text-align:left;color:#172337}
button.personal-calendar-duty{cursor:pointer}
.monthly-actions{display:flex;gap:2px;margin-top:5px}
.monthly-actions button{font-size:10px;padding:2px}
