/* School pages: MasterLists, attendance, grades, calendar and timetable board. */
:root{--g0:#fde2e4;--g1:#fbe7c6;--g2:#fff3b0;--g3:#d8f3dc;--g4:#cdeffd;--g5:#dcd6f7;--g6:#ffd6e8;--g7:#e2ece9;--g8:#c9e4de;--g9:#c6def1;--g10:#dbcdf0;--g11:#f2c6de;--g12:#f7d9c4;--g13:#faedcb;--ok:#2f8f5b;--warn:#c27c0e;--bad:#c0392b}
body.dark{--g0:#5a3237;--g1:#5a4527;--g2:#56501f;--g3:#24493a;--g4:#1f4757;--g5:#3d3864;--g6:#5b2f45;--g7:#33463f;--g8:#27504a;--g9:#284865;--g10:#43356a;--g11:#5a2f4b;--g12:#5b3d27;--g13:#57492a;--ok:#7fd3a3;--warn:#f0b75a;--bad:#ff8a7a}
.g0{background:var(--g0)}.g1{background:var(--g1)}.g2{background:var(--g2)}.g3{background:var(--g3)}.g4{background:var(--g4)}.g5{background:var(--g5)}.g6{background:var(--g6)}.g7{background:var(--g7)}.g8{background:var(--g8)}.g9{background:var(--g9)}.g10{background:var(--g10)}.g11{background:var(--g11)}.g12{background:var(--g12)}.g13{background:var(--g13)}
.compact-heading{margin-bottom:8px}.compact-heading h1{font-size:clamp(1.7rem,2.6vw,2.4rem);margin-bottom:6px}
.crumbs{margin:0 0 8px;font-size:.88rem}
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:10px 0 14px}.toolbar-gap{flex:1}.toolbar-title{margin:0}
.toolbar .search{max-width:280px;min-height:43px}
.segmented{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--paper)}.segmented a{padding:10px 16px;text-decoration:none;color:var(--ink);font-weight:600;font-size:.88rem;border-right:1px solid var(--line)}.segmented a:last-child{border-right:0}.segmented a[aria-current]{background:var(--accent);color:var(--paper)}
.month-nav{display:inline-flex;align-items:center;gap:6px}.month-nav strong{min-width:130px;text-align:center}.month-nav input[type=date]{width:auto}
.icon-button{padding:8px 13px;font-size:1.1rem}
.stat-row{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 16px}.stat{flex:1 1 130px;max-width:220px;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:10px 14px;text-decoration:none;color:var(--ink)}.stat span{display:block;font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.stat strong{font-size:1.5rem}.stat-good strong{color:var(--ok)}.stat-warn{border-color:var(--warn)}.stat-warn strong{color:var(--warn)}
.chip{display:inline-block;padding:2px 10px;border-radius:999px;font-size:.8rem;font-weight:600;color:var(--ink)}
.chip-filter{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 10px}.chip-btn{min-height:32px;padding:4px 12px;border-radius:999px;font-size:.8rem}.chip-btn[aria-pressed=true]{outline:2px solid var(--accent);outline-offset:1px;font-weight:700}.inline-check{margin-left:8px;font-size:.85rem}
.sheet-hint{margin:0 0 8px}
.sheet-wrap{overflow:auto;max-height:72vh;border:1px solid var(--line);border-radius:10px;background:var(--paper)}
table.sheet{border-collapse:separate;border-spacing:0;font-size:.82rem;min-width:100%}
.sheet th,.sheet td{border-bottom:1px solid var(--line);border-right:1px solid var(--line);padding:0;white-space:nowrap;vertical-align:middle;background:var(--paper)}
.sheet thead th{position:sticky;top:0;z-index:2;background:var(--wash);padding:6px 8px;font-size:.74rem;text-align:left;color:var(--ink)}
.sheet thead tr+tr th{top:29px}.sheet thead tr.sheet-bands th{text-transform:uppercase;letter-spacing:.08em;font-size:.68rem;color:var(--muted)}
.sheet .band-act{background:var(--g3)}.sheet .band-serv{background:var(--g4)}.sheet .band-pay{background:var(--g1)}
.sheet .sticky-col{position:sticky;left:0;z-index:1}.sheet thead .sticky-col{z-index:3}
.sheet .n-col{width:38px;min-width:38px;text-align:center;color:var(--muted);padding:0 4px}.sheet td.sticky-col:nth-child(2),.sheet th.sticky-col:nth-child(2){left:38px}.sheet td.sticky-col:nth-child(3),.sheet th.sticky-col:nth-child(3){left:148px;box-shadow:3px 0 6px #0000000d}
.sheet .sticky-col:nth-child(2){width:110px;min-width:110px}
.sheet input,.sheet select{border:0;border-radius:0;background:transparent;padding:7px 8px;min-height:34px;font-size:.82rem;width:100%;min-width:90px;color:inherit}
.sheet input[type=date]{min-width:128px}.sheet input.wide{min-width:220px}.sheet .name-col input{min-width:210px;font-weight:600}
.sheet input:focus,.sheet select:focus{outline:2px solid var(--accent);outline-offset:-2px;background:var(--paper)}
.sheet td.act-col,.sheet th.act-col{text-align:center;min-width:44px}.sheet th.act-col span{writing-mode:vertical-rl;transform:rotate(180deg);display:inline-block;max-height:110px}
.sheet td.act-col input{width:18px;min-width:18px;min-height:18px;margin:auto}
.sheet .group-cell select{font-weight:600;min-width:100px}.sheet .group-cell span{padding:0 8px;font-weight:600}
.sheet td.inherited input,.sheet td.inherited select{color:var(--muted);font-style:italic}
.sheet .ref-cell code{padding:0 8px;font-size:.78rem}
.sheet tr.row-inactive td{opacity:.62}.sheet tr.just-added td{animation:pulse 2.4s ease}
.sheet td.saved{animation:saved 1.2s ease}.sheet td.failed,label.failed{box-shadow:inset 0 0 0 2px var(--bad)}
label.saved{animation:saved 1.2s ease}
.sheet td.cell-bad input{color:var(--bad);font-weight:700}.sheet td.cell-warn input{color:var(--warn);font-weight:700}
.sheet.readonly td{padding:6px 8px}.sheet.readonly td small{display:block}
.name-cell{display:flex;align-items:center}.open-link{text-decoration:none;padding:0 8px;font-weight:700;opacity:.55}.open-link:hover{opacity:1}
@keyframes saved{0%{background:#9be3b8}100%{background:transparent}}@keyframes pulse{0%,40%{background:var(--g2)}100%{background:var(--paper)}}
.badge-bad,.badge-warn{display:inline-block;border-radius:6px;padding:1px 7px;font-size:.74rem;font-weight:700}.badge-bad{background:#fde2df;color:#9b2318}.badge-warn{background:#fff1d6;color:#8a5600}
.empty-state{border:2px dashed var(--line);border-radius:12px;padding:30px;text-align:center;background:var(--paper)}
.dash-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-top:14px}
.bar-row{display:grid;grid-template-columns:110px 1fr 36px;gap:10px;align-items:center;padding:3px 0;font-size:.88rem}.bar-row strong{text-align:right}.bar{height:10px;background:var(--wash);border-radius:6px;overflow:hidden}.bar-fill{display:block;height:100%;background:var(--accent);border-radius:6px}.bar-fill.alt{background:var(--gold)}
dialog.sheet-dialog{border:0;border-radius:14px;padding:0;max-width:640px;width:calc(100% - 24px);background:var(--paper);color:var(--ink);box-shadow:0 30px 80px #0005}dialog::backdrop{background:#10201c80}
.dialog-form{padding:22px 24px}.dialog-form h2{margin-bottom:14px}.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}
.pill-field{display:flex;flex-wrap:wrap;gap:6px;border:0;padding:0;margin:4px 0 12px}.pill-field legend{padding:0 0 6px;font-weight:600;color:var(--muted);font-size:.88rem}
.pill{display:inline-flex;cursor:pointer}.pill input{position:absolute;opacity:0;pointer-events:none}.pill span{border:1px solid var(--line);border-radius:999px;padding:6px 13px;font-size:.84rem;color:var(--ink);font-weight:500}.pill input:checked+span{background:var(--accent);border-color:var(--accent);color:var(--paper)}.pill input:focus-visible+span{outline:3px solid var(--gold)}
.switch{display:inline-flex;margin:8px 0 12px}.switch input{width:22px;height:22px}
.profile-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.profile-head h1{margin-bottom:4px}
.profile-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;margin:12px 0}
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:10px}.panel-head h2{margin:0}
.history p{margin:0 0 6px;font-size:.85rem}.history del{color:var(--muted)}
.mono{font-family:ui-monospace,Consolas,monospace;font-size:.82rem}
.steps-inline{display:flex;flex-wrap:wrap;gap:8px 22px;padding-left:18px;color:var(--muted);font-size:.88rem}
.agent-layout{display:grid;grid-template-columns:260px 1fr;gap:16px;align-items:start}.agent-list{position:sticky;top:12px}.agent-link{display:flex;justify-content:space-between;padding:8px 10px;border-radius:8px;text-decoration:none;color:var(--ink)}.agent-link:hover{background:var(--wash)}.agent-link.active{background:var(--accent);color:var(--paper)}.agent-link.muted{opacity:.6}.count{font-weight:700}.agent-main{min-width:0}
.warn-notice{border-color:var(--warn)}
/* Register */
.register td{padding:0}.register td.name-col{padding:4px 8px;min-width:200px;white-space:normal}.register td.name-col small{margin-top:2px}.register td code{padding:0 6px}
.tick{font-weight:800;color:var(--ok)}.tick.warn{color:var(--warn)}.tick.bad{color:var(--bad)}
.time-cell{min-width:96px;position:relative}.tap{min-height:38px;width:100%;border:0;border-radius:0;font-size:.8rem;background:transparent;color:var(--muted)}.tap:hover{background:var(--wash)}.tap.done{color:var(--ok);font-weight:800;font-size:.95rem}
.time-edit{display:none}.time-cell.editing .tap{display:none}.time-cell.editing .time-edit{display:block}
.register input.temp{min-width:70px;width:70px}
.register tr.is-in td.name-col{box-shadow:inset 4px 0 0 var(--ok)}.register tr.is-out td{background:color-mix(in srgb,var(--paper) 88%,var(--muted))}
.month-grid .day-col{text-align:center;min-width:26px;padding:4px 2px}.month-grid td.present{color:var(--ok)}.month-grid td.absent{color:var(--bad)}.month-grid td.name-col{padding:4px 8px}
.print-only{display:none}
@media (max-width:760px){.agent-layout{grid-template-columns:1fr}.two{grid-template-columns:1fr}.toolbar .search{max-width:none;flex:1 1 100%}.sheet .sticky-col{position:static}}
@media print{
  .sidebar,.topbar,footer,.no-print,.toolbar,.chip-filter,.admin-tabs,.skip,#toast{display:none!important}
  .print-only{display:block}
  body,.workspace,main{background:#fff!important;color:#000;margin:0;padding:0}
  .workspace{margin:0!important}
  .sheet-wrap{max-height:none;overflow:visible;border:0}
  table.sheet{font-size:8.5pt}.sheet th,.sheet td{border-color:#999}.sheet thead th{position:static;background:#eee!important}
  .sheet .sticky-col{position:static;box-shadow:none}
  .sheet input,.sheet select{border:0;appearance:none;padding:2px 4px;min-height:0}
  .tap{color:#000}.tap:not(.done){color:transparent}
  .group-cell{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  main{page:wide}
  @page wide{size:A4 landscape;margin:10mm}
}
.sheet td.g0{background:var(--g0)}.sheet td.g1{background:var(--g1)}.sheet td.g2{background:var(--g2)}.sheet td.g3{background:var(--g3)}.sheet td.g4{background:var(--g4)}.sheet td.g5{background:var(--g5)}.sheet td.g6{background:var(--g6)}.sheet td.g7{background:var(--g7)}.sheet td.g8{background:var(--g8)}.sheet td.g9{background:var(--g9)}.sheet td.g10{background:var(--g10)}.sheet td.g11{background:var(--g11)}.sheet td.g12{background:var(--g12)}.sheet td.g13{background:var(--g13)}
.print-cell{display:none}.info-cell{padding:4px 8px!important;font-size:.78rem;color:var(--muted)}.info-cell .badge-bad,.info-cell .badge-warn{margin:1px 3px 1px 0}
.mini{display:inline-block;background:var(--wash);border-radius:5px;padding:1px 6px;margin:1px 3px 1px 0;font-size:.72rem;color:var(--ink)}.mini-bus{background:var(--g2)}
@media print{.print-cell{display:table-cell}.info-cell{color:#000}.register td.name-col{min-width:0}}
/* Grades */
.book-year h2{margin:18px 0 10px}.book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.book-card{display:flex;flex-direction:column;gap:4px;padding:16px 18px;border-radius:12px;background:var(--paper);border:1px solid var(--line);text-decoration:none;color:var(--ink);box-shadow:var(--shadow)}.book-card:hover{border-color:var(--accent)}.book-card strong{font-size:1.1rem}.book-card.closed{opacity:.7}.book-card.annual{background:var(--wash);border-style:dashed}
.book-prog{font-size:.7rem;letter-spacing:.12em;font-weight:700;color:var(--accent)}
.narrow-panel{max-width:640px;margin-top:22px}
a.chip-btn.button{text-decoration:none}
.inline-label{display:flex;align-items:center;gap:8px;font-size:.85rem}.inline-label select,.inline-label input{width:auto;min-width:180px;margin:0}
.grade-pill{display:inline-block;min-width:30px;text-align:center;border-radius:6px;padding:1px 7px;font-weight:800;font-size:.82rem}
.grade-astar,.grade-a{background:#c9f0d7;color:#145c34}.grade-b{background:#dcf2c8;color:#3b6112}.grade-c{background:#fff2c2;color:#6e5600}.grade-d{background:#ffe1c2;color:#7a4300}.grade-e,.grade-f{background:#ffd4cc;color:#8a2a12}.grade-g,.grade-u{background:#f6c6c6;color:#7d1414}
body.dark .grade-pill{filter:brightness(.85)}
.glist td.subj-col,.glist th.subj-col{text-align:center;min-width:92px}.glist th.subj-col a{color:inherit;white-space:normal;display:block;max-width:110px;margin:auto}.score{font-size:.8rem;color:var(--muted)}.muted-dash{color:var(--muted)}
.grade-grid td.entry-col input{min-width:46px;width:52px;text-align:center;padding:7px 2px}.grade-grid th.entry-col{text-align:center;padding:4px 2px;min-width:46px}
.grade-grid .calc{padding:0 8px;text-align:center;font-weight:600;color:var(--muted)}.grade-grid .calc.total{color:var(--ink);font-size:.95rem}.grade-grid .small-cell{font-size:.75rem;font-weight:500}
.grade-grid tr.not-enrolled td:not(.sticky-col):not(.act-col){opacity:.35}
.grade-grid td.failed input{color:var(--bad);font-weight:700}
.comp-0{background:var(--g4)!important}.comp-1{background:var(--g3)!important}.comp-2{background:var(--g1)!important}.comp-3{background:var(--g0)!important}.comp-4{background:var(--g5)!important}.comp-5{background:var(--g2)!important}.comp-6{background:var(--g8)!important}
.comp-cell-0,.comp-cell-2,.comp-cell-4,.comp-cell-6{background:color-mix(in srgb,var(--paper) 92%,var(--accent))!important}
.report-cards{display:grid;gap:14px}.report-card-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:10px}.report-card-head h2{margin:0}.report-card-actions{display:flex;gap:8px;align-items:center}.report-card-actions select{width:auto}
.report-card{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:4px 22px}.report-card-head{grid-column:1/-1}
.skill-row{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:4px 0;border-bottom:1px dashed var(--line);font-size:.85rem}
.skill-scale{display:inline-flex;gap:3px;flex:none}.skill-scale .lv{min-height:28px;padding:2px 8px;font-size:.72rem;font-weight:600;border-radius:999px;color:var(--muted)}
.skill-scale .lv[aria-pressed=true]{color:#fff}.lv-0[aria-pressed=true]{background:#2f8f5b;border-color:#2f8f5b}.lv-1[aria-pressed=true]{background:#5c9fd6;border-color:#5c9fd6}.lv-2[aria-pressed=true]{background:#d9a32b;border-color:#d9a32b}.lv-3[aria-pressed=true]{background:#d0573f;border-color:#d0573f}
.comments label.short input{max-width:120px}
.weight-sum{font-size:.9rem;font-weight:700;color:var(--ok);margin-left:8px}.weight-sum.bad{color:var(--bad)}
.weight-bar{display:flex;gap:2px;margin-top:12px;border-radius:8px;overflow:hidden;font-size:.72rem;font-weight:600}.weight-bar span{padding:6px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.plain-table{border-collapse:collapse;width:100%}.plain-table th{text-align:left;font-size:.78rem;color:var(--muted);padding:4px}.plain-table td{padding:3px 4px}.plain-table input{margin:0}.plain-table input.num,.num{max-width:100px}
.close-bar{display:flex;gap:16px;align-items:center;justify-content:space-between}.close-bar p{margin:0}.danger-button{border-color:var(--bad);color:var(--bad)}
label.sub{font-weight:400}
@media (max-width:900px){.report-card{grid-template-columns:1fr}}
/* Printable report (A4) */
.report-body{background:#e9ece8;color:#14302c;font:11pt/1.45 Georgia,"Times New Roman",serif;margin:0}
.report-toolbar{position:sticky;top:0;background:#14302c;color:#fff;padding:10px 18px;font:14px system-ui,sans-serif;display:flex;gap:10px;align-items:center;z-index:5}.report-print{margin-left:auto;background:#fff;color:#14302c;border:0;border-radius:6px;padding:8px 14px;font-weight:700;cursor:pointer}
.report-page{width:210mm;min-height:297mm;margin:12px auto;background:#fff;padding:16mm 15mm;box-sizing:border-box;box-shadow:0 4px 18px #0002;page-break-after:always;break-after:page;position:relative}
.report-cover{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px}.report-cover h1{font:700 22pt/1.2 Georgia,serif;margin:10px 0 4px;letter-spacing:.04em}.report-logo{width:110px;height:auto}.report-logo.small{width:54px}.report-school{font-weight:700;letter-spacing:.12em;margin:10px 0 0}.report-for{margin-top:40px;font-style:italic;color:#59706b}.report-name{font-size:20pt;font-weight:700;margin:0}
.report-foot{position:absolute;bottom:14mm;left:15mm;right:15mm;font-size:8.5pt;color:#59706b}
.report-head{display:flex;gap:12px;align-items:center;border-bottom:2px solid #176b56;padding-bottom:8px;margin-bottom:12px}
.report-band{background:#176b56;color:#fff;font:700 11pt/1.3 system-ui,sans-serif;padding:6px 10px;margin:14px 0 8px;border-radius:3px;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.report-page h3{font:700 10.5pt system-ui,sans-serif;margin:14px 0 6px;color:#176b56}
.report-table{width:100%;border-collapse:collapse;font-size:9.5pt;margin-bottom:8px}.report-table th,.report-table td{border:1px solid #b9c7c2;padding:4px 6px;text-align:left;vertical-align:top}.report-table th{background:#eef4f1;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.report-table.info th{width:16%}.report-table td small{display:block;color:#59706b;font-size:8pt}.report-table td.comment{font-size:8.8pt}
.report-table.scale th,.report-table.scale td{text-align:center}.report-table .mark{text-align:center;font-weight:700;width:12%}
.report-table.box td{height:22mm}.report-table.sign td{height:auto;padding:14px 8px}.sign-line{display:inline-block;margin-top:18px}
.report-body .grade-pill{-webkit-print-color-adjust:exact;print-color-adjust:exact}
@media print{.report-body{background:#fff}.report-page{margin:0;box-shadow:none;width:auto;min-height:auto;padding:0}.report-cover{min-height:265mm}.report-foot{bottom:0}@page{size:A4 portrait;margin:12mm}}
.grade-grid td.calc.total{background:color-mix(in srgb,var(--paper) 85%,var(--gold))}

/* School calendar (an entry of kind "event" keeps the default blue) */
.cal-event{background:#d3e7fb;color:#164a7a}body.dark .cal-event{background:#284865;color:#cfe5ff}
.cal-toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;margin:0 0 14px}
.cal-move{display:flex;gap:8px;align-items:center}.cal-move .button{min-height:38px;padding:6px 13px}.cal-move input{width:auto;padding:7px 9px}
.cal-title{margin:0 6px;min-width:110px;text-align:center;font:500 1.5rem Georgia,serif}
.cal-legend{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 6px}.cal-legend .small{margin-left:auto}
.calendar .cal-event{display:block;font-size:.74rem;font-weight:600;border-radius:5px;padding:2px 6px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-legend .cal-event{display:inline-block;font-size:.74rem;font-weight:600;border-radius:5px;padding:2px 8px}
.cal-event.cal-holiday{background:#fde3c8;color:#7a3507}.cal-event.cal-public{background:#fbd5d5;color:#8a1f1f}.cal-event.cal-closure{background:#e0e3e6;color:#3b4652}.cal-event.cal-exam{background:#e7dcf7;color:#45297a}.cal-event.cal-termchip{background:#d6f0dc;color:#1b5e33}
body.dark .cal-event.cal-holiday{background:#5b3d27;color:#ffd9b5}body.dark .cal-event.cal-public{background:#5a3237;color:#ffc9c9}body.dark .cal-event.cal-closure{background:#3a4148;color:#dde3e8}body.dark .cal-event.cal-exam{background:#43356a;color:#e3d6ff}body.dark .cal-event.cal-termchip{background:#24493a;color:#c6f0d3}
.calendar .cal-cont{opacity:.75;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-6px}
.calendar .cal-day{height:104px;position:relative}
.cal-editable .cal-day{cursor:cell;user-select:none;-webkit-user-select:none}.cal-editable .cal-event{cursor:grab}.cal-moving,.cal-moving *{cursor:grabbing!important}
.cal-editable .cal-day:hover{box-shadow:inset 0 0 0 2px var(--line)}
.calendar td.cal-selected{background:var(--wash);box-shadow:inset 0 0 0 2px var(--accent)}
.calendar td.cal-drop{box-shadow:inset 0 0 0 2px var(--gold);background:#fff6e4}body.dark .calendar td.cal-drop{background:#4a3e25}
.calendar td.cal-term:not(.cal-weekend){border-top:3px solid #9ad3a9}
.cal-ab{display:flex;flex-direction:column;align-items:center;gap:0;width:100%;min-height:62px;padding:4px;border:1px dashed var(--line);background:transparent}.cal-ab strong{font-size:1.4rem;line-height:1.2}.cal-ab small{margin:0;font-size:.66rem}.cal-ab.forced{border-style:solid;border-color:var(--gold);background:var(--paper)}
.cal-dialog{border:1px solid var(--line);border-radius:12px;padding:24px;width:min(520px,calc(100vw - 32px));background:var(--paper);color:var(--ink);box-shadow:var(--shadow)}.cal-dialog::backdrop{background:#0b1d1a66}.cal-dialog h2{margin-bottom:14px}
.kind-picker{display:flex;flex-wrap:wrap;gap:6px;border:0;padding:0;margin:4px 0 12px}.kind-picker legend{padding:0;margin-bottom:6px;font-size:.88rem;font-weight:600}
.kind-chip{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:20px;border:2px solid transparent;cursor:pointer;color:var(--ink);background:var(--wash);font-weight:600;font-size:.84rem}
.kind-chip input{position:absolute;opacity:0;width:1px;height:1px}.kind-chip:has(input:checked){border-color:var(--ink)}.kind-chip:has(input:disabled){opacity:.35;cursor:not-allowed}.kind-chip:has(input:focus-visible){outline:3px solid var(--gold)}
.kind-chip.cal-holiday{background:#fde3c8}.kind-chip.cal-public{background:#fbd5d5}.kind-chip.cal-closure{background:#e0e3e6}.kind-chip.cal-event{background:#d3e7fb}.kind-chip.cal-exam{background:#e7dcf7}
body.dark .kind-chip.cal-holiday{background:#5b3d27}body.dark .kind-chip.cal-public{background:#5a3237}body.dark .kind-chip.cal-closure{background:#3a4148}body.dark .kind-chip.cal-event{background:#284865}body.dark .kind-chip.cal-exam{background:#43356a}
@media print{.calendar .cal-day{height:80px}.cal-wrap{border:0}.calendar .cal-event{-webkit-print-color-adjust:exact;print-color-adjust:exact}.cal-ab{border:0}.cal-ab small{display:none}}

/* Timetable board */
.tt-toolbar{align-items:center}.tt-toolbar .segmented button{border:0;border-radius:0;min-height:40px;border-right:1px solid var(--line)}.tt-toolbar .segmented button:last-child{border-right:0}.tt-toolbar .segmented button[aria-pressed=true]{background:var(--accent);color:var(--paper)}
.tt-board-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--paper);margin:14px 0}
.tt-board{display:flex;min-width:max-content;user-select:none;-webkit-user-select:none}
.tt-axis{flex:0 0 58px;position:sticky;left:0;z-index:3;background:var(--wash);border-right:1px solid var(--line)}
.tt-col{flex:1 0 150px;border-right:1px solid var(--line)}.tt-col:last-child{border-right:0}.tt-col-all{flex-basis:120px;background:var(--bg)}
.tt-head{height:52px;padding:7px 9px;border-bottom:1px solid var(--line);background:var(--wash);position:sticky;top:0;z-index:2;overflow:hidden}.tt-head strong{display:block;font-size:.84rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tt-head small{margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tt-body{position:relative;background-image:repeating-linear-gradient(to bottom,var(--line) 0 1px,transparent 1px calc(var(--tt-hour)/2));cursor:cell}
.tt-axis .tt-body{background:none;cursor:default}
.tt-tick{position:absolute;right:6px;transform:translateY(-50%);font-size:.72rem;font-weight:700;color:var(--ink)}.tt-tick.half{font-weight:400;color:var(--muted);font-size:.66rem}
.tt-block{position:absolute;border-radius:7px;padding:3px 7px 6px;overflow:hidden;font-size:.74rem;line-height:1.25;cursor:grab;border-left:4px solid;box-shadow:0 1px 3px #0002;display:flex;flex-direction:column;gap:1px;color:#1b2b29}
.tt-block strong{font-size:.8rem}.tt-block span,.tt-block small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tt-block small{margin:0;color:#3d4f4b;font-size:.68rem}
.tt-block .tt-group{font-weight:800;text-transform:uppercase;font-size:.66rem;letter-spacing:.03em}
.tt-block:hover{box-shadow:0 3px 10px #0003;z-index:1}.tt-block:focus-visible{outline:3px solid var(--gold)}
.tt-dragging{opacity:.85;cursor:grabbing;z-index:5;box-shadow:0 8px 24px #0004}
.tt-resize{position:absolute;left:0;right:0;bottom:0;height:7px;cursor:ns-resize}.tt-resize:hover{background:#0001}
.tt-weekbadge{position:absolute;top:3px;right:4px;font-weight:800;font-size:.66rem;background:#fff9;border-radius:4px;padding:0 4px}
.tt-clash{outline:2px solid var(--bad);outline-offset:-2px}
.tt-ghost{position:absolute;left:3px;right:3px;border:2px dashed var(--accent);border-radius:7px;background:#176b5614;font-size:.72rem;font-weight:700;padding:2px 6px;color:var(--accent);pointer-events:none}
.tt-a0{background:#fde2e4;border-color:#d64560}.tt-a1{background:#fbe7c6;border-color:#d08a18}.tt-a2{background:#fff3b0;border-color:#b59a00}.tt-a3{background:#d8f3dc;border-color:#2f9a52}.tt-a4{background:#cdeffd;border-color:#1f8ab8}.tt-a5{background:#dcd6f7;border-color:#6a55c9}.tt-a6{background:#ffd6e8;border-color:#c43f86}.tt-a7{background:#c9e4de;border-color:#2f8a78}.tt-a8{background:#f7d9c4;border-color:#c0632a}.tt-a9{background:#c6def1;border-color:#3a6fa8}
.tt-block.tt-green{background:#d8f3dc;border-color:#2e7d43}.tt-block.tt-blue{background:#d6e7fb;border-color:#2563a8}.tt-block.tt-yellow{background:#fdf2c4;border-color:#b08900}.tt-block.tt-orange{background:#fde3cc;border-color:#c75b12}.tt-block.tt-pink{background:#fbdcea;border-color:#b83b78}.tt-block.tt-purple{background:#e6dcf7;border-color:#6b46a8}.tt-block.tt-grey{background:#e6e9e8;border-color:#6b7472}
.swatch.tt-auto{background:linear-gradient(90deg,#fde2e4,#fff3b0,#d8f3dc,#cdeffd,#dcd6f7)}.swatch.tt-green{background:#d8f3dc}.swatch.tt-blue{background:#d6e7fb}.swatch.tt-yellow{background:#fdf2c4}.swatch.tt-orange{background:#fde3cc}.swatch.tt-pink{background:#fbdcea}.swatch.tt-purple{background:#e6dcf7}.swatch.tt-grey{background:#e6e9e8}
.swatch{color:#1b2b29}
.tt-dialog{width:min(680px,calc(100vw - 32px))}.tt-dialog .form-grid{gap:0 16px}
.tt-body .tt-tick:first-child{transform:none}.tt-body .tt-tick:last-child{transform:translateY(-100%)}
.timetable .tt-entry{color:#1b2b29}
