.weekly-schedule{--week-slot-height:20px;min-width:0;color:var(--text,#263d33)}.week-toolbar,.week-switcher,.week-teacher-switcher{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.week-toolbar{justify-content:space-between;gap:14px;margin-bottom:10px}.week-nav-button{border:1px solid #dce5dc;background:#fff;color:#386b58;border-radius:7px;padding:7px 10px;font:inherit;font-size:12px;cursor:pointer}.week-nav-button:disabled{opacity:.45;cursor:default}.week-nav-button:focus-visible,.week-time-slot:focus-visible,.week-lesson-block:focus-visible{outline:2px solid #386b58;outline-offset:-2px;z-index:6}.week-dates{font-size:13px;white-space:nowrap}.week-teacher-select{max-width:180px;min-width:110px;font:inherit;font-size:13px;border:1px solid #dce5dc;background:#fff;padding:7px;border-radius:7px}.week-page-label{font-size:12px;color:#697a70;margin:8px 0}.week-teacher-pager{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;gap:0;min-width:0;scrollbar-width:thin;touch-action:pan-x pan-y}.week-teacher-page{flex:0 0 100%;min-width:0;scroll-snap-align:start;scroll-snap-stop:always;box-sizing:border-box}.week-teacher-heading{font-size:15px;margin:12px 0}.week-calendar-scroll{max-height:570px;overflow:auto;border:1px solid #dce5dc;border-radius:9px;background:#fff;scrollbar-width:thin}.week-calendar-grid{display:grid;grid-template-columns:54px repeat(7,minmax(92px,1fr));min-width:720px;align-items:start;position:relative}.week-day-heading{position:sticky;top:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:44px;box-sizing:border-box;font-size:12px;background:#eff4ed;border-bottom:1px solid #dce5dc;border-right:1px solid #dce5dc;gap:2px}.week-day-heading span{font-size:10px;color:#697a70}.week-time-heading{left:0;z-index:7}.week-time-axis{position:sticky;left:0;z-index:3;background:#f8faf6}.week-time-tick{height:var(--week-slot-height);display:block;line-height:var(--week-slot-height);box-sizing:border-box;border-bottom:1px solid #edf0ea;text-align:center;font-size:10px;color:#697a70}.week-day-column{position:relative;display:flex;flex-direction:column;min-width:0;border-right:1px solid #e6ece3;box-sizing:border-box}.week-time-slot{display:block;flex:0 0 var(--week-slot-height);height:var(--week-slot-height);width:100%;min-height:0;border:0;border-bottom:1px solid #edf0ea;background:#fff;padding:0;border-radius:0;cursor:pointer;box-sizing:border-box}.week-time-slot.hour-start{border-top:1px solid #dce5dc}.week-time-slot:not(:disabled):hover{background:#edf5e8}.week-time-slot.selected{background:#d8e9cf;box-shadow:inset 2px 0 #386b58}.week-time-slot:disabled{cursor:default;opacity:1}.week-lesson-block{position:absolute;z-index:2;box-sizing:border-box;min-height:0;border:1px solid #94b8a6;border-left:3px solid #386b58;border-radius:4px;background:#e7f0e8;color:#244d3d;font:inherit;font-size:10px;line-height:1.3;text-align:left;padding:2px 4px;overflow:hidden;cursor:pointer}.week-lesson-block strong,.week-lesson-block span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.week-lesson-block.active{background:#386b58;border-color:#386b58;color:#fff}.week-lesson-block.ended{background:#f0f2ee;border-color:#c7d0c5;color:#657362}.week-selection-status{font-size:12px;color:#386b58;min-height:18px;margin:10px 0 0}.week-unknown-events{margin-top:10px;font-size:12px;color:#697a70}.week-unknown-events p{overflow-wrap:anywhere;margin:8px 0}.dashboard-teacher-schedule{grid-column:1/-1}.dashboard-teacher-schedule .weekly-schedule{margin-top:12px}@media(max-width:640px){.week-toolbar{align-items:stretch}.week-switcher,.week-teacher-switcher{width:100%}.week-teacher-select{flex:1;max-width:none}.week-dates{font-size:11px}.week-nav-button{padding:7px 8px}.week-calendar-scroll{max-height:460px}.week-calendar-grid{min-width:720px}.week-toolbar .week-switcher strong{order:-1;width:100%}.week-teacher-pager{border-bottom:1px solid #e5ebe5}}
.week-teacher-metrics{display:flex;gap:12px;flex-wrap:wrap;margin:10px 0}.week-teacher-metric{min-width:120px;flex:1;border:1px solid #dce5dc;background:#f5f8f2;border-radius:8px;padding:10px 14px;display:flex;flex-direction:column;gap:5px}.week-teacher-metric span{font-size:12px;color:#697a70}.week-teacher-metric strong{font-size:20px;color:#244d3d}.week-metrics-help{margin-bottom:12px}@media(max-width:640px){.week-teacher-metrics{gap:6px}.week-teacher-metric{min-width:70px;padding:8px}.week-teacher-metric strong{font-size:17px}}

/* Theme only: preserve slot height, sticky layers and JS event placement. */
.weekly-schedule {
  min-width: 0;
  max-width: 100%;
  color: var(--ink, #243447);
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}
.week-toolbar { gap: 12px; margin-bottom: 8px; }
.week-switcher,
.week-teacher-switcher { min-width: 0; gap: 6px; }
.week-nav-button {
  min-height: 34px;
  padding: 6px 10px;
  border-color: var(--line, #dfe7ef);
  border-radius: 7px;
  background: #fff;
  color: var(--ink, #243447);
  font-size: 13px;
  line-height: 1.5;
}
.week-nav-button:not(:disabled):hover { border-color: #b8cfe2; background: #f2f6fb; color: var(--green, #167ac6); }
.week-nav-button:disabled { opacity: 1; color: #728296; background: #f2f5f8; border-color: #e3eaf1; }
.week-nav-button:focus-visible,
.week-time-slot:focus-visible,
.week-lesson-block:focus-visible { outline-color: var(--green, #167ac6); }
.week-dates { color: var(--ink, #243447); font-size: 13px; font-weight: 600; line-height: 1.5; }
.week-teacher-select {
  min-height: 34px;
  padding: 6px 8px;
  border-color: #c8d6e3;
  border-radius: 7px;
  background: #fff;
  color: var(--ink, #243447);
  font-size: 13px;
  line-height: 1.5;
}
.week-teacher-select:focus-visible { outline: 2px solid var(--green, #167ac6); outline-offset: 2px; }
.week-page-label { margin: 6px 0; color: var(--muted, #5f6f80); font-size: 12px; line-height: 1.5; }
.week-teacher-heading { margin: 10px 0 8px; color: var(--ink, #243447); font-size: 16px; font-weight: 600; line-height: 1.5; }
.week-teacher-pager,
.week-calendar-scroll { max-width: 100%; scrollbar-color: #b4c8d9 #eef3f8; }
.week-calendar-scroll { border-color: var(--line, #dfe7ef); border-radius: 10px; background: #fff; overscroll-behavior: contain; }
.week-day-heading { border-color: var(--line, #dfe7ef); background: #eef3f8; color: var(--ink, #243447); font-size: 12px; }
.week-day-heading strong { font-weight: 600; }
.week-day-heading span { color: var(--muted, #5f6f80); font-size: 11px; }
.week-time-axis { background: #f7f9fc; }
.week-time-tick { border-color: #eaf0f5; color: var(--muted, #5f6f80); font-size: 11px; }
.week-day-column { border-color: #e7edf4; }
.week-time-slot { border-bottom-color: #eaf0f5; }
.week-time-slot.hour-start { border-top-color: #dce6ef; }
.week-time-slot:not(:disabled):hover { background: #edf5fc; }
.week-time-slot.selected { background: #dcecf9; box-shadow: inset 2px 0 var(--green, #167ac6); }
.week-lesson-block {
  border-color: #b3cfe5;
  border-left-color: var(--green, #167ac6);
  background: #eaf3fb;
  color: #24587f;
  font-size: 11px;
  line-height: 1.3;
}
.week-lesson-block strong { font-weight: 600; }
.week-lesson-block:not(.active):hover { border-color: var(--green, #167ac6); }
.week-lesson-block.active { border-color: var(--green, #167ac6); background: var(--green, #167ac6); color: #fff; }
.week-lesson-block.ended { border-color: #d5dfe8; background: #f1f4f8; color: var(--muted, #5f6f80); }
.week-selection-status { margin-top: 8px; color: var(--green, #167ac6); font-size: 12px; line-height: 1.5; }
.week-unknown-events { margin-top: 8px; color: var(--muted, #5f6f80); font-size: 12px; line-height: 1.6; }
.week-unknown-events summary { padding: 4px 0; cursor: pointer; }
.week-unknown-events p { margin: 6px 0; }
.week-teacher-metrics { gap: 8px; margin: 8px 0; }
.week-teacher-metric {
  min-width: 110px;
  gap: 3px;
  padding: 8px 12px;
  border-color: var(--line, #dfe7ef);
  border-radius: 10px;
  background: #f7f9fc;
  box-shadow: none;
}
.week-teacher-metric span { color: var(--muted, #5f6f80); font-size: 12px; line-height: 1.5; }
.week-teacher-metric strong { color: var(--ink, #243447); font-size: 22px; font-weight: 600; line-height: 1.3; font-variant-numeric: tabular-nums; }
.week-metrics-help { margin-bottom: 10px; color: var(--muted, #5f6f80); font-size: 12px; line-height: 1.6; }
.dashboard-teacher-schedule .weekly-schedule { margin-top: 10px; }
@media (max-width: 640px) {
  .week-toolbar { gap: 8px; }
  .week-nav-button,
  .week-teacher-select { min-height: 42px; }
  .week-dates { font-size: 12px; }
  .week-teacher-pager { border-color: var(--line, #dfe7ef); }
  .week-teacher-metrics { gap: 6px; }
  .week-teacher-metric { min-width: 86px; padding: 8px 10px; }
  .week-teacher-metric strong { font-size: 20px; }
}

/* Stable class colors: six brand anchors and their softer companion tones.
   Colors label the class/topic, while the existing text labels convey status.
   Do not change slot selection, positioning, dimensions or sticky layering. */
.week-lesson-block.week-color-0 { --week-lesson-fill: #e7f1fa; --week-lesson-edge: #167ac6; --week-lesson-ink: #1c4f78; }
.week-lesson-block.week-color-1 { --week-lesson-fill: #e3f3ec; --week-lesson-edge: #3aa582; --week-lesson-ink: #1b5b45; }
.week-lesson-block.week-color-2 { --week-lesson-fill: #eef4dc; --week-lesson-edge: #98ba43; --week-lesson-ink: #4b601f; }
.week-lesson-block.week-color-3 { --week-lesson-fill: #fff0de; --week-lesson-edge: #f49b38; --week-lesson-ink: #79501d; }
.week-lesson-block.week-color-4 { --week-lesson-fill: #fce8ee; --week-lesson-edge: #e36f8a; --week-lesson-ink: #833d50; }
.week-lesson-block.week-color-5 { --week-lesson-fill: #eeeaf8; --week-lesson-edge: #9b8bc5; --week-lesson-ink: #594874; }
.week-lesson-block.week-color-6 { --week-lesson-fill: #def1f4; --week-lesson-edge: #4d9cae; --week-lesson-ink: #285c69; }
.week-lesson-block.week-color-7 { --week-lesson-fill: #f8f0d7; --week-lesson-edge: #c2a045; --week-lesson-ink: #695621; }
.week-lesson-block.week-color-8 { --week-lesson-fill: #fbe5df; --week-lesson-edge: #d57f68; --week-lesson-ink: #804834; }
.week-lesson-block.week-color-9 { --week-lesson-fill: #e7eafa; --week-lesson-edge: #7b8cc3; --week-lesson-ink: #414f7b; }
.week-lesson-block.week-color-10 { --week-lesson-fill: #e8f1e2; --week-lesson-edge: #7da36b; --week-lesson-ink: #435d32; }
.week-lesson-block.week-color-11 { --week-lesson-fill: #f2e4f0; --week-lesson-edge: #b67aa9; --week-lesson-ink: #70436a; }
.week-lesson-block.week-color-12 { --week-lesson-fill: #d2e7f8; --week-lesson-edge: #2675a8; --week-lesson-ink: #1d4d70; }
.week-lesson-block.week-color-13 { --week-lesson-fill: #cee9df; --week-lesson-edge: #2d876b; --week-lesson-ink: #214f42; }
.week-lesson-block.week-color-14 { --week-lesson-fill: #e4edc4; --week-lesson-edge: #83a334; --week-lesson-ink: #465a1a; }
.week-lesson-block.week-color-15 { --week-lesson-fill: #f9dfbd; --week-lesson-edge: #d48a2e; --week-lesson-ink: #764e1a; }
.week-lesson-block.week-color-16 { --week-lesson-fill: #f5d2de; --week-lesson-edge: #c66580; --week-lesson-ink: #79374b; }
.week-lesson-block.week-color-17 { --week-lesson-fill: #ded6ee; --week-lesson-edge: #8673af; --week-lesson-ink: #514168; }
.week-lesson-block.week-color-18 { --week-lesson-fill: #d4e9ed; --week-lesson-edge: #438a9a; --week-lesson-ink: #2c5861; }
.week-lesson-block.week-color-19 { --week-lesson-fill: #eee3bb; --week-lesson-edge: #aa8b37; --week-lesson-ink: #655322; }
.week-lesson-block.week-color-20 { --week-lesson-fill: #f3d2c9; --week-lesson-edge: #bc6a55; --week-lesson-ink: #774030; }
.week-lesson-block.week-color-21 { --week-lesson-fill: #d8def3; --week-lesson-edge: #6577b0; --week-lesson-ink: #3b4874; }
.week-lesson-block.week-color-22 { --week-lesson-fill: #d8e7ce; --week-lesson-edge: #6f935b; --week-lesson-ink: #3e562f; }
.week-lesson-block.week-color-23 { --week-lesson-fill: #e8d0e4; --week-lesson-edge: #9d6691; --week-lesson-ink: #674060; }
.week-lesson-block,
.week-lesson-block.active,
.week-lesson-block.ended {
  background: var(--week-lesson-fill, #e7f1fa);
  border-color: var(--week-lesson-edge, #167ac6);
  color: var(--week-lesson-ink, #1c4f78);
}
.week-lesson-block.active { border-width: 2px; border-left-width: 4px; }
.week-lesson-block.ended { filter: saturate(.62); }
.week-lesson-block:not(.active):hover,
.week-lesson-block.active:hover { border-color: var(--week-lesson-ink, #1c4f78); }
.week-lesson-block:focus-visible { outline-color: var(--week-lesson-ink, #1c4f78); }

/* Portaled roster tooltip: names only, outside the calendar overflow layers. */
.week-roster-tooltip {
  position: fixed;
  z-index: 1000;
  box-sizing: border-box;
  width: max-content;
  max-width: min(360px, calc(100vw - 20px));
  max-height: calc(100vh - 20px);
  overflow: auto;
  padding: 10px 12px;
  border: 1px solid var(--line, #dfe7ef);
  border-radius: 9px;
  background: #ffffff;
  color: var(--ink, #263243);
  box-shadow: 0 4px 16px rgb(38 50 67 / 12%);
  font: 14px / 1.7 var(--ui-font, -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif);
  overflow-wrap: anywhere;
  overscroll-behavior: contain;
}
.week-roster-tooltip[hidden] { display: none; }
.week-roster-names { display: flex; flex-wrap: wrap; column-gap: 18px; row-gap: 3px; }
.week-roster-names > span { display: block; }
.week-roster-empty { color: var(--muted, #5d6b7f); font-size: 13px; }
