/* Feedback round 1: register controls, room purpose, books, admissions drag, directory, Fire summary. */
.visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Close register in the heading (the Check-in page also keeps a footer copy). In dialogs it keeps clear of the × button. */
.heading-close-register{min-height:44px;white-space:nowrap}
.page-heading .heading-close-register{margin-left:auto}
#modalContent .class-register-heading{padding-right:68px}
.register-heading-actions .heading-close-register{padding:10px 14px}
.register-quick-links{display:inline-flex;gap:8px}
.register-quick-links .class-action-icon{min-width:44px;min-height:44px;display:inline-grid;place-items:center}
.register-quick-links .class-action-icon svg{width:22px;height:22px}
.class-register-meta{display:flex;align-items:center;flex-wrap:wrap;gap:10px}
@media(max-width:600px){#modalContent .class-register-heading{padding-right:52px}.page-heading .heading-close-register{margin-left:0}}

/* Room badges: desk for classrooms, ball and a pastel green for sport rooms. */
.room-badge svg{width:24px;height:24px;flex:none;stroke-width:1.8}
.room-badge.sport-room,.class-room-chip.sport-room,.lesson-room.sport-room{background:#e8f6ec;color:#1f6a3b;border-color:#cdebd6}
.class-room-chip svg{width:20px;height:20px;flex:none}
.lesson-room{display:inline-flex;align-items:center;gap:4px;border-radius:8px;padding:1px 6px}
.lesson-room svg{width:14px;height:14px}
.room-row.sport-room{background:linear-gradient(180deg,#f1faf3,#fff 70%);border-color:#cdebd6}
.room-row h3{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.room-purpose-icon{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:10px;background:var(--bluebg);color:var(--blue)}
.room-purpose-icon svg{width:22px;height:22px}
.room-row.sport-room .room-purpose-icon{background:#dff3e5;color:#1f6a3b}
.room-purpose-chip{font-size:12px;font-weight:700;border-radius:999px;padding:2px 9px;background:#dff3e5;color:#1f6a3b}
.room-purpose-picker{border:1px solid var(--line);border-radius:14px;padding:10px 12px;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.room-purpose-picker legend{font-weight:700;padding:0 4px}
.room-purpose-choice{display:block;cursor:pointer}
.room-purpose-choice input{position:absolute;opacity:0}
.room-purpose-choice span{display:grid;grid-template-columns:28px 1fr;gap:2px 10px;align-items:center;border:1px solid var(--line);border-radius:12px;padding:10px 12px;min-height:44px}
.room-purpose-choice svg{grid-row:span 2;width:26px;height:26px}
.room-purpose-choice small{color:var(--muted)}
.room-purpose-choice input:checked+span{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand2)}
.room-purpose-choice.sport input:checked+span{border-color:#3f9a5e;background:#f1faf3;box-shadow:0 0 0 2px #dff3e5}
.room-purpose-choice input:focus-visible+span{outline:3px solid var(--brand);outline-offset:2px}

/* Late counts as present: Present stays selected and says so. */
.late-chip{display:inline-block;margin-left:6px;font-size:12px;font-weight:700;border-radius:999px;padding:1px 8px;background:var(--warnbg);color:var(--warn)}
.attendance-buttons .with-late{box-shadow:inset 0 0 0 2px #e9b949}
.touch-icon.present.active.late{box-shadow:inset 0 0 0 3px #e9b949}

/* Back to top: fades and slides in after a meaningful scroll; no motion when reduced. */
.back-to-top{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:44px;min-height:44px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:#ffffffee;color:var(--ink);box-shadow:0 8px 24px #1d2f5226;font-weight:700;cursor:pointer;opacity:0;visibility:hidden;transform:translateY(12px);transition:opacity .2s ease,transform .2s ease,visibility 0s linear .2s}
.back-to-top svg{width:20px;height:20px}
.back-to-top.show{opacity:1;visibility:visible;transform:none;transition:opacity .2s ease,transform .2s ease}
.back-to-top:focus-visible{outline:3px solid var(--brand);outline-offset:2px}
body>.back-to-top{position:fixed;right:max(18px,env(safe-area-inset-right));bottom:max(18px,env(safe-area-inset-bottom));z-index:90}
.back-to-top-dock{position:sticky;bottom:0;height:0;display:flex;justify-content:flex-end;pointer-events:none}
.back-to-top-dock .back-to-top{pointer-events:auto;transform:translateY(calc(-100% - 2px))}
.back-to-top-dock .back-to-top:not(.show){transform:translateY(calc(-100% + 10px))}
@media(max-width:600px){.back-to-top span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.back-to-top{padding:0}}
@media(prefers-reduced-motion:reduce){.back-to-top,.back-to-top.show,.back-to-top-dock .back-to-top:not(.show){transition:none;transform:none}.back-to-top-dock .back-to-top{transform:translateY(calc(-100% - 2px))}}
@media print{.back-to-top,.back-to-top-dock{display:none!important}}

/* Directory + Add menu and family chooser. */
.add-menu{position:relative}
.add-menu-list{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:260px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 40px #1d2f5229;padding:6px;display:grid}
.add-menu-list[hidden]{display:none}
.add-menu-list [role="menuitem"]{display:grid;text-align:left;gap:2px;border:0;background:none;border-radius:10px;padding:10px 12px;min-height:44px;font-weight:700;color:var(--ink);cursor:pointer}
.add-menu-list [role="menuitem"] small{font-weight:400;color:var(--muted)}
.add-menu-list [role="menuitem"]:hover,.add-menu-list [role="menuitem"]:focus-visible{background:var(--brand2);outline:none}
.family-choice-list{display:grid;gap:8px;max-height:min(50dvh,420px);overflow:auto;overscroll-behavior:contain}
.family-choice{display:grid;text-align:left;gap:2px;border:1px solid var(--line);border-radius:12px;background:#fff;padding:10px 12px;min-height:44px;cursor:pointer}
.family-choice small{color:var(--muted)}
.family-choice:hover,.family-choice:focus-visible{border-color:var(--brand)}
.enrol-start-field small{display:block;color:var(--muted);font-weight:400}

/* Directory list: contained momentum scrolling on touch; a wider, easier scrollbar for mouse users. */
.directory-rows{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;touch-action:pan-y;scrollbar-gutter:stable}
.directory-row{min-height:48px}
@media(pointer:coarse){.directory-rows{max-height:min(62dvh,560px)}}
@media(pointer:fine){
 .directory-rows{scrollbar-width:auto;scrollbar-color:#9fb0c8 #eef2f8}
 .directory-rows::-webkit-scrollbar{width:14px}
 .directory-rows::-webkit-scrollbar-track{background:#eef2f8;border-radius:8px}
 .directory-rows::-webkit-scrollbar-thumb{background:#9fb0c8;border-radius:8px;border:3px solid #eef2f8}
 .directory-rows::-webkit-scrollbar-thumb:hover{background:#7b8faa}
}

/* Books: inline date change and bulk issue. */
.inline-book-issue+small .link-button{margin-left:6px;font-size:inherit}
.bulk-issue-books{display:grid;gap:10px;border:1px solid var(--line);border-radius:14px;padding:12px}
.bulk-issue-book{border-bottom:1px solid var(--line);padding-bottom:8px}
.bulk-issue-book:last-child{border-bottom:0}
.bulk-issue-book small{display:block;color:var(--muted)}
.bulk-issue-book ul{margin:6px 0 0 18px;columns:2;column-gap:24px}
.bulk-issue-total{font-weight:700}
@media(max-width:600px){.bulk-issue-book ul{columns:1}}

/* Admissions drag and drop. */
.draggable-card{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.draggable-card.press-armed{box-shadow:0 0 0 2px var(--brand2)}
.draggable-card.dragging{opacity:.4}
.drag-ghost{position:fixed;left:0;top:0;z-index:200;pointer-events:none;margin:0;box-shadow:0 18px 40px #1d2f5240;opacity:.96}
body.admissions-dragging{cursor:grabbing;-webkit-user-select:none;user-select:none}
.kanban-col.drop-ready{outline:3px dashed var(--brand);outline-offset:4px;background:var(--brand2)}
#admissionsTrash{transition:transform .15s ease,background .15s ease,box-shadow .15s ease}
#admissionsTrash.drop-ready{transform:scale(1.18);background:var(--badbg);color:var(--bad);box-shadow:0 0 0 3px #f3c4cc}
@media(prefers-reduced-motion:reduce){#admissionsTrash,#admissionsTrash.drop-ready{transition:none;transform:none}#admissionsTrash.drop-ready{outline:3px solid var(--bad);outline-offset:2px}}

/* Fire / headcount quick summary: large, bold and above the pupil list without crowding it. */
.fire-quick{margin:12px 0}
.fire-quick h3,.fire-evac h3{font-size:14px;margin:0 0 6px;color:#53627a;text-transform:uppercase;letter-spacing:.04em}
.fire-quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0}
.fire-quick-card{border-radius:14px;padding:12px 14px;margin:0;background:#eef4ff}
.fire-quick-card.total{background:#e8f0ff}
.fire-quick-card.mens{background:#e9f4fb}
.fire-quick-card.womens{background:#fbeef4}
.fire-quick-card dt{font-size:14px;font-weight:700;color:#33435c}
.fire-quick-card dd{margin:2px 0 0;font-size:40px;line-height:1.1;font-weight:850;color:#13213a}
.fire-quick-card small{color:#53627a}
.fire-quick-note{margin:6px 0 0;font-size:13px;color:#53627a}
.fire-evac{margin-top:10px}
@media(max-width:600px){.fire-quick-grid{gap:6px}.fire-quick-card{padding:8px 10px}.fire-quick-card dt{font-size:12px}.fire-quick-card dd{font-size:28px}}

/* Feedback round 2 ------------------------------------------------------------------------ */

/* Fire: headcount cards carry a coloured edge so they never read as evacuation ticks. Saved copies are dimmed. */
.fire-quick-card{border-left:5px solid #4a72d8}
.fire-quick-card.mens{border-left-color:#2f86b8}
.fire-quick-card.womens{border-left-color:#c2577f}
.fire-quick.old .fire-quick-card dd{color:#53627a}
.fire-quick.old h3{color:#8f302f}
.fire-evac h3{margin-top:4px}
@media(max-width:380px){.fire-quick-card{padding:7px 8px;border-left-width:4px}.fire-quick-card dt{font-size:11px;line-height:1.2}.fire-quick-card dd{font-size:24px}.fire-quick-card small{font-size:11px}}

/* Sync status: separate looks for saved-on-device, syncing, failed and read-only offline. */
#syncStatus.sync-local{background:#fff4dc;color:#7a4a00;border-color:#efd08a}
#syncStatus.sync-syncing{background:#e8f0ff;color:#24448f;border-color:#bfd0f5}
#syncStatus.sync-failed{background:#fff0ef;color:#8f302f;border-color:#e7b3b0;font-weight:800}
#syncStatus.sync-offline{background:#f1f3f7;color:#3d4a60;border-color:#d6dce6}
#syncStatus:focus-visible{outline:3px solid var(--brand);outline-offset:2px}
@media(max-width:600px){.topbar #syncStatus:not(.sync-online){display:inline-flex;order:4;min-height:40px;font-size:12px;white-space:normal;text-align:left}}
.sync-panel-note{border-radius:10px;padding:10px 12px;background:#f1f3f7;color:#3d4a60}
.sync-panel-note.failed{background:#fff0ef;color:#8f302f;border:1px solid #e7b3b0}

/* Classes: section tabs become a dropdown on small screens; every section stays available. */
.classes-tab-select{display:none}
@media(max-width:750px){
 .classes-heading-actions .classes-tabs{display:none}
 .classes-tab-select{display:grid;gap:4px;width:100%;font-size:12px;font-weight:700;color:#53627a}
 .classes-tab-select select{min-height:44px;width:100%;font-size:15px;font-weight:700;color:var(--ink)}
}

/* Subjects & Books: equal green total cards. */
.book-summary.resource-totals{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}
.book-summary.resource-totals span{display:flex;flex-direction:column;justify-content:center;gap:2px;min-height:64px;margin:0;line-height:1.25}
@media(max-width:600px){.book-summary.resource-totals{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.book-summary.resource-totals span:last-child{grid-column:1/-1}.book-summary.resource-totals span{min-height:56px}}

/* Book rows: sticky column header, equal Ready and Given controls. The header sticks below the
   sticky topbar within .resource-book-totals; no ancestor scrolls, so the window is the scroller. */
.resource-book-head,.resource-book-total{display:grid;grid-template-columns:minmax(160px,2fr) minmax(76px,.7fr) minmax(86px,.8fr) repeat(2,minmax(132px,1fr));gap:12px;align-items:center}
.resource-book-head{position:sticky;top:80px;z-index:5;background:#fff;padding:10px 0;border-bottom:1px solid #e7edf6;font-size:12px;font-weight:700;color:#53627a;text-transform:uppercase;letter-spacing:.03em}
.resource-book-head span{display:inline-flex;align-items:center;gap:6px}
.resource-book-head svg{width:16px;height:16px;flex:none}
.resource-book-total>div:first-child{grid-column:auto}
.book-stat strong{font-size:18px}
.resource-book-total .book-stat-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.resource-book-total .book-check{width:100%;min-height:44px;box-sizing:border-box;justify-content:flex-start;white-space:nowrap;font-size:13px;font-weight:700}
.resource-book-total .book-check svg{width:18px;height:18px;flex:none}
.resource-book-total .book-check input:focus-visible{outline:3px solid var(--brand);outline-offset:2px}
.resource-book-total .book-check:has(input:disabled){cursor:default}
@media(max-width:900px){.resource-book-head{top:72px}}
@media(max-width:1000px){
 .resource-book-head,.resource-book-total{grid-template-columns:minmax(0,1.5fr) minmax(0,.6fr) minmax(0,.7fr) repeat(2,minmax(0,1fr));gap:8px}
 .resource-book-head span{white-space:normal;line-height:1.2}
 .resource-book-total .book-check{padding:10px 8px;gap:6px}
 .resource-book-total .book-check-word{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
}
@media(max-width:600px){
 .resource-book-head{display:none}
 .resource-book-total{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px}
 .resource-book-total>div:first-child{grid-column:1/-1}
 .resource-book-total .book-stat-label{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}
 .resource-book-total .book-check{width:100%;padding:10px}
 .resource-book-total .book-check-word{position:static;width:auto;height:auto;overflow:visible;clip:auto}
}
@media(max-width:360px){.resource-book-total .book-check{grid-column:1/-1}}

/* Subjects & Books: the subject card sits one level deeper than #classWorkspace > .card, so give it the same padding. */
#subjectAssignments>.card{padding:26px}
#subjectAssignments>.card>h2{margin:0 0 6px}
#subjectAssignments>.card>.workspace-note{margin:0 0 16px;max-width:68ch}
#subjectAssignments .workspace-subject-head:has(+ .empty){display:none}
#subjectAssignments .empty{margin:0;padding:22px 18px;border:1px dashed #d3dbe8;border-radius:14px;background:#f8fafd;color:#53627a;text-align:center}
@media(max-width:600px){#subjectAssignments>.card{padding:20px}#subjectAssignments>.card>h2{font-size:19px}}

/* Classes heading: title and section tabs share the first row, the description sits underneath.
   When the tabs cannot fit beside the title they take their own row instead of wrapping inside the box. */
@media(min-width:751px){
 .page-heading.classes-heading{display:flex;flex-wrap:wrap;align-items:center;column-gap:20px;row-gap:12px}
 .page-heading.classes-heading>div:first-child{display:contents}
 .page-heading.classes-heading h1{margin:0;flex:0 0 auto}
 .page-heading.classes-heading p{order:3;flex:1 0 100%;margin:0}
 .classes-heading .classes-heading-actions{order:2;margin-left:auto;flex-wrap:nowrap;max-width:100%}
 .classes-heading .classes-tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
}

/* Classes › Subjects & Books: one card per class (books-board.js). */
.books-toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:16px}
.books-search{display:grid;gap:4px;font-size:12px;font-weight:700;color:#53627a}.books-search input{min-height:44px;min-width:220px}
/* Search and Class sit together with matching labels and gaps. */
.books-filters{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;flex:1 1 auto;min-width:0}
.books-filter{display:grid;gap:4px;font-size:12px;font-weight:700;color:#53627a;margin:0}
.books-filter input,.books-filter select{min-height:44px;margin:0}
.books-class-filter select{min-width:180px;max-width:100%}
.books-summary{margin:0 0 12px}
.books-manage-note{margin:0 0 14px}
.books-cards{display:grid;gap:18px}
.books-card{padding:22px}
.books-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.books-card-head h2{margin:0}
.books-card-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0 0;color:var(--muted);font-size:13px}
.books-card-actions{display:flex;gap:8px;flex-wrap:wrap}
.books-table{display:grid}
.books-row{display:grid;grid-template-columns:minmax(90px,.9fr) minmax(170px,2fr) 60px 76px 150px 80px minmax(110px,auto);gap:12px;align-items:center;padding:12px 8px;border-top:1px solid var(--line)}
.books-head{border-top:0;background:#f4f6fa;border-radius:10px;padding:10px 8px;font-size:12px;font-weight:700;color:#53627a;position:sticky;top:76px;z-index:2}
.books-head>span{display:flex;align-items:center;gap:5px;min-width:0}.books-head svg{width:16px;height:16px;flex:none}
.books-subject{font-weight:650}
.books-title{min-width:0}.books-title strong{display:block}.books-title small{display:block;color:var(--muted);font-size:12px;margin-top:2px}.books-title.muted{color:var(--muted)}
.books-shared{font-style:italic}
.books-num{font-variant-numeric:tabular-nums;font-weight:650}
.books-due{color:#9a5b00}.books-done{color:#15703f}
.empty-book .books-gap{grid-column:3/7}
.books-actions{display:flex;justify-content:flex-end;gap:6px;flex-wrap:wrap}
.books-ready{display:inline-flex;align-items:center;gap:7px;min-height:38px;padding:4px 10px;border:1px solid var(--line);border-radius:10px;background:#f7f9fc;cursor:pointer;font-weight:650}
.books-ready.checked{background:#eaf7f1;border-color:#a7d8bd;color:#15703f}
.books-ready input{accent-color:var(--brand);width:18px;height:18px;margin:0}
.books-ready:has(input:disabled){cursor:default;opacity:.75}
.books-ready svg{width:16px;height:16px;flex:none}
/* Several books under one subject read as one group: the subject name shows once, then an add-another link. */
.books-row-more{border-top-style:dashed}
.books-subject-repeat{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.books-add-another{display:block;margin-top:6px;font-size:13px;font-weight:650}
.books-method-note{color:var(--muted)}
.books-method-tag{margin-left:5px;font-size:11px;font-weight:600;color:var(--muted)}
.books-none{margin:4px 0 0;padding:18px;border:1px dashed #d3dbe8;border-radius:14px;background:#f8fafd;color:#53627a;text-align:center}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
/* Medium screens: number columns keep only their icon (full name in the tooltip and for screen readers). */
@media(max-width:1180px){
 .books-row{grid-template-columns:minmax(80px,.8fr) minmax(140px,2fr) 44px 64px 108px 64px minmax(96px,auto);gap:10px}
 .books-head .books-col-req .books-col-label,.books-head .books-col-need .books-col-label,.books-head .books-col-ready .books-col-label,.books-head .books-col-given .books-col-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
 .books-head .books-col-req,.books-head .books-col-need,.books-head .books-col-ready,.books-head .books-col-given{justify-content:flex-start}
 .books-ready-word{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
 .books-head svg{width:18px;height:18px}
}
/* Phones: each row stacks, numbers become labelled chips. */
@media(max-width:640px){
 .books-card{padding:16px}
 .books-head{display:none}
 .books-row{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding:14px 0}
 .books-subject{grid-column:1/-1;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}
 .books-title{grid-column:1/-1}
 .books-num{display:flex;flex-direction:column;gap:2px;font-size:15px}
 .books-num::before{content:attr(data-label);font-size:11px;font-weight:600;color:var(--muted)}
 .books-ready{min-height:34px;padding:2px 8px}
 .empty-book .books-gap{display:none}
 .books-actions{grid-column:1/-1;justify-content:flex-start}
 .books-search input{min-width:0;width:100%}.books-search{flex:1 1 100%}
 .books-filters{flex:1 1 100%}.books-filter{flex:1 1 100%}.books-filter select{width:100%;min-width:0}
 .books-method-tag{display:none}
 .books-row-more{padding-top:6px}
}
.books-card:has(.books-none){padding-block:16px}.books-card:has(.books-none) .books-card-head{margin-bottom:6px}
.books-none{padding:0;border:0;background:none;text-align:left;font-size:13px}

/* Admin › Books & subjects: master catalogue. No outer card; the heading row holds the All/Subjects/Books toggle. */
.admin-books-section{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px 16px;padding:0;background:none;border:0;box-shadow:none;min-width:0}
.admin-books-section[hidden]{display:none}
.admin-books-section>h2{margin:0}
.admin-books-section>#adminBooks{display:contents}
#adminBooks>*{grid-column:1/-1;min-width:0}
#adminBooks>.books-view-toggle{grid-column:2;grid-row:1;justify-self:end}
.books-admin{display:grid;gap:16px;min-width:0}
.books-admin-card{margin:0;min-width:0}
.books-admin-card[hidden]{display:none}
.books-admin-card h3{margin:0 0 4px;font-size:17px}
.books-admin-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.books-admin-head>div{flex:1 1 260px;min-width:0}
.books-admin-head .workspace-note{margin:0}
.book-filters{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:flex-end;margin-bottom:8px}
.book-filters .books-search{flex:2 1 220px;min-width:0}.book-filters .books-search input{width:100%;min-width:0}
.book-filters .workspace-select{flex:1 1 160px;min-width:0}
.book-count{margin:0 0 10px;font-size:12px;color:var(--muted)}
.book-card-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:12px}
.book-card{border:1px solid var(--line);border-radius:14px;padding:14px 16px;min-width:0;overflow-wrap:anywhere;display:flex;flex-direction:column;gap:8px}
.book-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.book-card-head h4{margin:0;font-size:15px;line-height:1.35;min-width:0}
.book-meta{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 12px;margin:0;font-size:13px}
.book-meta>div{display:contents}
.book-meta dt{color:var(--muted);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;padding-top:2px}
.book-meta dd{margin:0;min-width:0}
.book-chip{display:inline-block;margin:0 4px 4px 0;padding:1px 8px;border-radius:999px;background:var(--soft,#eef3fb);font-size:12px}
.book-usage{margin:auto 0 0;font-size:12px;color:var(--muted)}
.book-year-options,.book-method-options{display:flex;flex-wrap:wrap;gap:6px 16px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;min-width:0}
.book-year-options legend,.book-method-options legend{padding:0 4px;font-weight:600}
.book-method-options small{flex:1 0 100%}
#booksAdminForm .wide{grid-column:1/-1}
#booksAdminForm label small{display:block;margin-top:4px;font-weight:400}
@media(min-width:960px) and (orientation:landscape){.book-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){#adminBooks>.books-view-toggle{grid-column:1/-1;grid-row:auto;justify-self:stretch}#adminBooks>.books-view-toggle button{flex:1 1 0}}
.books-admin-list{list-style:none;margin:0;padding:0;display:grid;gap:0;border-top:1px solid var(--line)}
.books-admin-list li{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--line)}
.books-admin-list li>span{min-width:0}.books-admin-list small{display:block;color:var(--muted);font-size:12px;margin-top:2px}
.books-admin-list .books-used{font-style:italic}
.books-admin-list.subjects{grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr));column-gap:24px}

/* Class register: a pupil's book panel fades shut after a confirmed issue or undo (school-workflows.js). */
.pupil-book-group.book-group-closing .pupil-book-list{opacity:0;transition:opacity .3s ease .15s}
@media(prefers-reduced-motion:reduce){.pupil-book-group.book-group-closing .pupil-book-list{opacity:1;transition:none}}

/* Student editor: medical notes with their own Flag for staff switch. */
.health-notes-field{display:grid;gap:6px;align-content:start}
.health-notes-field .checkbox-label{min-height:44px}
.health-notes-field small{font-size:12px}
/* Class room and attendance placement, with one deliberate register-close action. */
.class-card-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;width:100%;box-sizing:border-box;grid-column:1/-1}
.class-card-heading .workspace-class-title{min-width:0;flex:1;margin-top:0}
.class-card-heading .class-room-chip{margin-left:auto;max-width:45%;white-space:normal}
.workspace-class-card .class-location-line{display:flex;justify-content:flex-end}
.workspace-class-card .class-card-bottom{justify-content:flex-end}
.register-state-action{border:1px solid transparent;cursor:pointer;position:relative;min-width:132px;min-height:44px;font:inherit;transition:background .18s,color .18s,border-color .18s}
.register-state-action .register-state-hover{display:none}
.register-state-action:hover,.register-state-action:focus-visible{background:#fff1f2;color:#a6192e;border-color:#f3b3bf}
.register-state-action:hover .register-state-rest,.register-state-action:focus-visible .register-state-rest{display:none}
.register-state-action:hover .register-state-hover,.register-state-action:focus-visible .register-state-hover{display:inline}
.register-state-action:focus-visible{outline:3px solid #a6192e;outline-offset:3px}
.register-state.closed{display:inline-flex;align-items:center;gap:6px;background:#e7f5ef;color:#126647}
.register-state.closed svg{width:18px;height:18px}
@media(prefers-reduced-motion:reduce){.register-state-action{transition:none}}

.wage-reference{background:#eef4f8;border-radius:16px;padding:20px;margin:16px 0 24px}
.wage-reference-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}
.wage-reference-grid>div{background:white;padding:14px;border-radius:12px;display:flex;flex-direction:column;gap:8px}
.wage-reference-grid strong{font-size:1.5rem}
.wage-rate-row{display:grid;grid-template-columns:minmax(150px,1fr) minmax(160px,240px) auto;gap:16px;align-items:center;padding:18px 0;border-bottom:1px solid #e1e8f2}
.wage-rate-row .wage-status{grid-column:1/-1}
@media(max-width:600px){.wage-rate-row{grid-template-columns:1fr}.class-card-heading .class-room-chip{max-width:45%}}
.wage-default-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.wage-default-grid label{display:flex;flex-direction:column;gap:8px;padding:16px;background:#fff;border-radius:12px}#wageDefaultsStatus{margin-left:12px}.wage-rate-row{grid-template-columns:minmax(150px,1fr) minmax(160px,220px) minmax(130px,180px) auto}@media(max-width:800px){.wage-rate-row{grid-template-columns:1fr 1fr}.wage-default-grid{grid-template-columns:1fr}}@media(max-width:480px){.wage-rate-row{grid-template-columns:1fr}}
.wage-band-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.wage-default-actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.wage-default-actions #wageDefaultsStatus{margin-left:0}.wage-legacy-note{background:#fff8e6;border-radius:10px;padding:10px 14px}
.wage-find-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px;margin:8px 0 12px}.wage-find-bar h3{margin:0}.wage-find-controls{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:flex-end;gap:12px;margin-left:auto}.wage-search{display:flex;flex-direction:column;gap:6px;min-width:min(260px,100%)}
@media(max-width:600px){.wage-find-controls{margin-left:0;width:100%;justify-content:stretch}.wage-find-controls>*{flex:1 1 100%}}
.wage-staff-list{display:grid;gap:12px}.wage-staff-list .wage-rate-row{grid-template-columns:minmax(150px,1.2fr) repeat(4,minmax(110px,1fr)) auto;padding:14px 16px;border:1px solid #e1e8f2;border-left-width:5px;border-radius:12px;background:#fff}
.wage-rate-row.wage-side-mens{background:#f1f7fd;border-color:#d6e6f5;border-left-color:#8fb8e0}.wage-rate-row.wage-side-womens{background:#fdf3f7;border-color:#f2dbe5;border-left-color:#e0a3bf}.wage-rate-row.wage-side-unknown{border-left-color:#cfd8e3}
.wage-rate-name{display:flex;flex-direction:column;gap:4px}.wage-side-label{font-size:.82rem;color:#3d4a5c}.wage-band-line{font-size:.85rem;color:#3d4a5c}.wage-band-line.needed{color:#8a4b00;font-weight:600}.wage-rate-row input[readonly]{background:#f3f5f8;color:#1f2a37;cursor:default}
@media(max-width:900px){.wage-staff-list .wage-rate-row{grid-template-columns:1fr 1fr}}@media(max-width:480px){.wage-staff-list .wage-rate-row{grid-template-columns:1fr}}
.wage-row-wide{grid-column:1/-1}.wage-replace{display:flex;align-items:center;gap:8px;font-size:.85rem}.wage-history-box{background:#f7f9fc;border-radius:12px;padding:10px 14px;margin:12px 0}.wage-history-box summary{cursor:pointer;font-weight:600}.wage-history{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:6px}.wage-history li{font-size:.88rem}.wage-history small{color:#3d4a5c}.wage-history-status{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;background:#e6ecf3;font-size:.78rem}.wage-history-scheduled .wage-history-status{background:#fff1cc}.wage-history-current .wage-history-status{background:#dff3e4}.wage-history-unknown .wage-history-status{background:#fde2d6}.wage-scheduled{background:#fff8e6;border-radius:10px;padding:8px 12px;margin:6px 0}

/* Keep the procurement headings aligned with the count and ready controls below. */
.books-row{grid-template-columns:minmax(90px,.85fr) minmax(180px,2fr) 64px 96px 174px 72px minmax(112px,auto);column-gap:16px}
.books-head{min-height:54px;align-items:center}
.books-head>span{white-space:nowrap;line-height:1.3}
.books-head .books-col-req,.books-head .books-col-need,.books-head .books-col-ready,.books-head .books-col-given{justify-content:center}
.books-row>.books-num{text-align:center;justify-self:stretch}
.books-ready{justify-content:center;white-space:nowrap;max-width:100%;box-sizing:border-box}
.books-card>.books-card-head{margin-bottom:18px;gap:20px}
@media(min-width:641px) and (max-width:1180px){.books-row{grid-template-columns:minmax(74px,.8fr) minmax(130px,1.8fr) 44px 64px 116px 60px minmax(100px,auto);column-gap:12px}.books-head .books-col-req,.books-head .books-col-need,.books-head .books-col-ready,.books-head .books-col-given{justify-content:center}}
@media(max-width:640px){.books-row{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.books-row>.books-num{text-align:left}.books-ready{justify-content:flex-start}.books-card>.books-card-head{gap:14px;margin-bottom:16px}}

.resource-totals.books-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px}.resource-totals.books-summary>span{min-width:0}@media(max-width:640px){.resource-totals.books-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}

.register-room-edit{padding:0;border:0;background:none;cursor:pointer;border-radius:12px}.register-room-edit:focus-visible{outline:3px solid #245fec;outline-offset:3px}.register-child-link{font-weight:700;text-align:left}

.register-bulk-books{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0}.calendar-event-chip{padding:9px 12px;border-radius:10px;color:#26334d!important;border:1px solid #dce4ef}.calendar-event-trip{background:#fff0d9!important;color:#8a4b0d!important}.calendar-event-event{background:#eae5fa!important;color:#574181!important}.calendar-event-training{background:#e2f4ef!important;color:#225b50!important}.calendar-event-exam{background:#fde7ee!important;color:#87374f!important}.calendar-event-meeting{background:#e2eefb!important;color:#345a87!important}.calendar-event-label{display:block;font-size:9px;line-height:1.1;white-space:nowrap}.calendar-day:has(.calendar-event-label){min-height:44px}.book-pick-filters{display:grid;gap:12px}

.books-subject-repeat{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;visibility:hidden}.books-row{grid-template-columns:minmax(90px,.85fr) minmax(180px,2fr) 64px 120px 174px 72px minmax(112px,auto)}@media(min-width:641px) and (max-width:1180px){.books-row{grid-template-columns:minmax(74px,.8fr) minmax(130px,1.8fr) 44px 64px 116px 60px minmax(100px,auto)}}@media(max-width:640px){.books-row{grid-template-columns:repeat(4,minmax(0,1fr))}.books-subject-repeat{display:none}.books-row-more .books-title{grid-column:1/-1}}

.books-filter-bulk{display:flex;gap:12px;flex-wrap:wrap;margin:14px 0 20px}.books-filter-bulk svg{width:18px;height:18px;vertical-align:middle;margin-right:6px}.bulk-ready-list{display:grid;gap:10px;margin:16px 0;max-height:45vh;overflow:auto}.bulk-ready-list .checkbox-label{padding:12px;background:#f4f7fc;border-radius:10px;min-height:44px}

#adminBooks .books-admin-card{padding:24px!important;box-sizing:border-box}#adminBooks .books-admin-card .books-admin-head{gap:20px;margin-bottom:20px}#adminBooks .books-admin-card h3{margin:0 0 10px}#adminBooks .books-admin-card .workspace-note{margin:0;line-height:1.6}#adminBooks .books-admin-list{margin-top:16px}#adminBooks .books-admin-filters{margin:20px 0 12px}@media(max-width:640px){#adminBooks .books-admin-card{padding:18px!important}}

.subject-catalogue-label{min-width:0}.subject-catalogue-label small{display:block;margin-top:6px;line-height:1.5}.subject-catalogue-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.subject-price-fields{display:grid;grid-template-columns:1fr 1fr;gap:16px}.subject-price-fields legend{font-weight:700}@media(max-width:600px){.subject-price-fields{grid-template-columns:1fr}}

#adminBooks .books-admin-list.subjects{grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));gap:14px}#adminBooks .books-admin-list.subjects>li{display:flex;flex-direction:column;align-items:stretch;gap:12px;padding:16px;background:#f7f9fc;border:1px solid #e2e9f3;border-radius:12px}.subject-catalogue-actions{justify-content:flex-end;min-height:38px}.subject-catalogue-label small{overflow-wrap:anywhere}

/* Admin notices pill in the top bar. */
#checkinNoticesWrap{display:flex;align-items:center}
#checkinNoticesWrap:empty{display:none}

/* Men's and women's sides: one pastel set everywhere (blue = men's, pink = women's, neutral = mixed). */
:root{--men-bg:#eef5fd;--men-border:#d3e3f5;--men-chip:#dbe9f8;--men-ink:#2b5d8c;--men-strong:#3f7fbf;
 --women-bg:#fdf1f6;--women-border:#f2d8e4;--women-chip:#f9dde9;--women-ink:#943a63;--women-strong:#c25a8a;
 --mixed-chip:#e9edf3;--mixed-ink:#47566e}
/* Cards */
.class-card.mens,.workspace-class-card.mens,.books-card.mens{background:var(--men-bg);border-color:var(--men-border)}
.class-card.womens,.workspace-class-card.womens,.books-card.womens{background:var(--women-bg);border-color:var(--women-border)}
/* Side chips and badges */
.class-side-chip,.side-badge{background:var(--mixed-chip);color:var(--mixed-ink)}
.mens .class-side-chip,.class-card.mens .side-badge,.timetable-title-tags.mens .class-side-chip,.workspace-class-card.mens .class-capacity-chip{background:var(--men-chip);color:var(--men-ink)}
.womens .class-side-chip,.class-card.womens .side-badge,.timetable-title-tags.womens .class-side-chip,.workspace-class-card.womens .class-capacity-chip{background:var(--women-chip);color:var(--women-ink)}
/* Check-in class list: a small side marker */
.class-item.side-mens,.class-item.side-womens{position:relative}
.class-item.side-mens::before,.class-item.side-womens::before{content:"";position:absolute;left:5px;top:12px;bottom:12px;width:3px;border-radius:2px;background:var(--men-strong)}
.class-item.side-womens::before{background:var(--women-strong)}
/* Fire headcount cards and wage rows */
.fire-quick-card.mens{background:var(--men-bg);border-left-color:var(--men-strong)}
.fire-quick-card.womens{background:var(--women-bg);border-left-color:var(--women-strong)}
.wage-rate-row.wage-side-mens{background:var(--men-bg);border-color:var(--men-border);border-left-color:var(--men-strong)}
.wage-rate-row.wage-side-womens{background:var(--women-bg);border-color:var(--women-border);border-left-color:var(--women-strong)}
/* All / Men's / Women's filters: the active side takes its colour */
:is([data-side],[data-class-side],[data-books-side],[data-timetable-side],[data-workspace-side],[data-teacher-side],[data-hours-side],[data-staff-side],[data-wage-side],[data-print-side]).active:is([data-side=mens],[data-class-side=mens],[data-books-side=mens],[data-timetable-side=mens],[data-workspace-side=mens],[data-teacher-side=mens],[data-hours-side=mens],[data-staff-side=mens],[data-wage-side=mens],[data-print-side=mens]){background:var(--men-chip);color:var(--men-ink)}
:is([data-side],[data-class-side],[data-books-side],[data-timetable-side],[data-workspace-side],[data-teacher-side],[data-hours-side],[data-staff-side],[data-wage-side],[data-print-side]).active:is([data-side=womens],[data-class-side=womens],[data-books-side=womens],[data-timetable-side=womens],[data-workspace-side=womens],[data-teacher-side=womens],[data-hours-side=womens],[data-staff-side=womens],[data-wage-side=womens],[data-print-side=womens]){background:var(--women-chip);color:var(--women-ink)}

/* Admin › Bursaries layout */
.admin-section h2+.bursary-add{float:right;margin-top:-46px}
.bursary-policy{clear:both;margin-top:24px;padding-top:18px;border-top:1px solid var(--line)}
.bursary-policy h3{margin:0 0 8px;font-size:15px}
.bursary-policy label{max-width:420px}
.bursary-policy p{color:var(--muted);font-size:13px;max-width:70ch}
#workflowForm .award-wide{grid-column:1/-1}
#awardChild{width:100%;min-height:150px;padding:4px}
#awardChild option{padding:6px 8px;border-radius:6px}
.award-period{border:0;margin:0;padding:0;min-width:0}
.award-period legend{font-size:13px;font-weight:550;margin-bottom:6px;padding:0}
.award-pills{display:inline-flex;flex-wrap:wrap}
.award-pills label{position:relative;display:inline-flex;cursor:pointer;margin:0}
.award-pills input{position:absolute;opacity:0;width:1px;height:1px}
.award-pills span{display:inline-flex;align-items:center;min-height:38px;padding:0 14px;border-radius:10px;font-size:13px;font-weight:600;color:#52627c}
.award-pills label:has(input:checked) span{background:#fff;color:var(--brand-ink);box-shadow:0 2px 5px #253d5c14}
.award-pills label:has(input:focus-visible) span{outline:2px solid var(--brand);outline-offset:1px}
@media(max-width:600px){.admin-section h2+.bursary-add{float:none;margin:0 0 12px}}
