/* July palette restored over the forest/clinical sheets: ivory canvas, teal accents, stone text.
   Also owns the More tools menu group and the Present/Absent celebration. Presentation only. */
:root {
  --teal: #0d9488;
  --teal-light: #ccfbf1;
  --teal-dark: #0f766e;
  --teal-xdark: #134e4a;
  --mint: #f0fdf9;
  --ivory: #fdfcf8;
  --warm-gray: #f5f4f0;
  --stroke: #e4e2dc;
  --text-primary: #1c1917;
  --text-muted: #78716c;
  --text-light: #a8a29e;
  --ink: #1c1917;
  --muted: #78716c;
  --danger: #e11d48;
  --danger-soft: #fff1f2;
  --amber: #b45309;
  --amber-soft: #fffbeb;
  --green: #16a34a;
  --green-soft: #f0fdf4;
  --forest: #134e4a;
  --forest-deep: #134e4a;
  --forest-ink: #1c1917;
  --forest-muted: #78716c;
  --forest-paper: #fdfcf8;
  --forest-panel: #fff;
  --forest-line: #e4e2dc;
  --forest-mint: #ccfbf1;
  --attendance-neutral: #f5f4f0;
  --attendance-neutral-hover: #ecebe6;
  --attendance-neutral-line: #e4e2dc;
  --brand-green: #0d9488;
  --shadow-sm: 0 1px 3px rgba(0, 0, 0, .07), 0 1px 2px rgba(0, 0, 0, .05);
  --shadow-md: 0 4px 16px rgba(0, 0, 0, .08), 0 1px 4px rgba(0, 0, 0, .05);
}

body { background: var(--ivory); color: var(--text-primary); }
body::before {
  background:
    radial-gradient(ellipse 70% 40% at 85% 10%, rgba(13, 148, 136, .07) 0%, transparent 60%),
    radial-gradient(ellipse 50% 50% at 5% 90%, rgba(13, 148, 136, .05) 0%, transparent 60%);
}
::selection { color: var(--teal-xdark); background: var(--teal-light); }
:focus-visible { outline-color: var(--teal); }

/* Top bar: July's frosted ivory strip. */
.app-topbar { background: rgba(253, 252, 248, .92); border-bottom: 1px solid rgba(228, 226, 220, .92); backdrop-filter: blur(10px); }
.clinical-scope-bar { background: var(--warm-gray); border-color: var(--stroke); }

/* Sidebar / menu: light panel with teal active item. */
.app-sidebar { background: #fff; border-right: 1px solid var(--stroke); color: var(--text-primary); scrollbar-color: var(--stroke) transparent; }
.sidebar-brand-block .brand-wordmark > span:first-child { color: var(--brand-navy); }
.sidebar-brand-block .brand-wordmark > span:last-child { color: var(--teal); }
.sidebar-brand-block p.brand-tagline, .sidebar-identity .user-chip, .sidebar-navigation-kicker { color: var(--text-muted); }
.sidebar-brand-mark { border: 1px solid var(--stroke); }
.app-sidebar .tab-button { color: #57534e; }
.app-sidebar .tab-button:hover:not(.active) { background: var(--mint); color: var(--teal-dark); }
.app-sidebar .tab-button.active { background: var(--teal); color: #fff; font-weight: 650; box-shadow: 0 2px 8px rgba(13, 148, 136, .24); }
.app-sidebar .tab-button.active.has-unread::after { background: #fca5a5; box-shadow: 0 0 0 2px var(--teal); }
.app-sidebar :focus-visible { outline-color: var(--teal) !important; }
.app-sidebar #batch-switcher { border-color: var(--stroke); }
.app-sidebar #batch-switcher label, .app-sidebar #batch-switcher label > span { color: var(--text-muted); }
.app-sidebar #batch-switcher select { background: var(--ivory); color: var(--text-primary); border-color: var(--stroke); color-scheme: light; }
.app-sidebar #batch-switcher button { color: var(--teal-dark); border-color: var(--stroke); }
.app-sidebar #batch-switcher button:hover { background: var(--mint); }
.app-sidebar #batch-switcher .batch-recovery[role=alert] { color: var(--danger); }
.app-sidebar .developer-handle-global { border-color: var(--stroke); color: var(--text-muted); }
.app-sidebar .developer-handle-global a { color: var(--teal-dark); }

/* More tools: Syllabus, Community Logs, Armamentarium and Quota live one tap away. */
.sidebar-more-tools { display: grid; margin: 0; }
.sidebar-more-tools > summary {
  display: flex; align-items: center; gap: 12px; min-height: 44px; padding: 11px 13px; border-radius: 9px;
  color: #57534e; font-size: 14px; font-weight: 500; cursor: pointer; list-style: none; user-select: none;
}
.sidebar-more-tools > summary::-webkit-details-marker { display: none; }
.sidebar-more-tools > summary:hover { background: var(--mint); color: var(--teal-dark); }
.sidebar-more-tools > summary svg { width: 19px; height: 19px; stroke-width: 1.7; }
.sidebar-more-tools .sidebar-more-chevron { margin-left: auto; transition: transform 200ms ease; }
.sidebar-more-tools[open] .sidebar-more-chevron { transform: rotate(180deg); }
.sidebar-more-list { display: grid; gap: 2px; margin: 2px 0 4px 14px; padding-left: 10px; border-left: 1px solid var(--stroke); }
.sidebar-more-tools[open] .sidebar-more-list { animation: more-tools-open 220ms cubic-bezier(.16, 1, .3, 1); }
@keyframes more-tools-open { from { opacity: 0; transform: translateY(-4px); } }

/* Mobile bottom navigation. */
.mobile-primary-nav { background: rgba(255, 255, 255, .96); border-top: 1px solid var(--stroke); }
.mobile-primary-nav button { color: var(--text-muted); }
.mobile-primary-nav button.active { background: var(--teal-light); color: var(--teal-xdark); }
.mobile-primary-nav button[aria-expanded=true] { background: var(--teal); color: #fff; }
.mobile-primary-nav button.active[aria-expanded=true] { background: var(--teal-light); color: var(--teal-xdark); }
.mobile-primary-nav :focus-visible, .mobile-primary-nav button:focus-visible { outline-color: var(--teal) !important; }

/* Attendance sub-tabs: Monthly · Reports · Calibration · Lecture Calendar. */
.tracker-tab-toggle .tab-button.active { background: var(--teal); border-color: var(--teal); color: #fff; box-shadow: 0 2px 8px rgba(13, 148, 136, .24); }
.tracker-tab-toggle .tab-button:hover:not(.active) { background: var(--mint); color: var(--teal); }
.tracker-tab-toggle { background: var(--warm-gray); }
.tracker-tab-toggle .tracker-icon-button { color: #57534e; white-space: nowrap; }
@media (max-width: 600px) {
  .tracker-tab-toggle .tracker-icon-button { flex-direction: column; justify-content: flex-start; gap: 3px; min-height: 60px; height: auto; padding: 8px 2px 6px; font-size: 11.5px; line-height: 1.15; white-space: normal; text-align: center; }
  .tracker-tab-toggle .tracker-icon-button svg { display: block; width: 18px; height: 18px; }
}
@media (max-width: 340px) {
  .tracker-tab-toggle .tracker-icon-button { font-size: 10.5px; }
}

/* Lecture Calendar: July teal for the chosen day. */
.calendar-day.selected, .calendar-day.selected.today, .calendar-day.today.selected {
  background: var(--teal); border-color: var(--teal); color: #fff; box-shadow: 0 4px 12px rgba(13, 148, 136, .28);
}
.calendar-day.selected .day-number, .calendar-day.selected .day-count { color: #fff; }

/* Subject status colours (Monthly). */
.subject-mini-card.safe .subject-card-status, .subject-mini-row.ok .subject-mini-head strong { color: #15803d; }
.subject-mini-card.risk .subject-card-status, .subject-mini-row.bad .subject-mini-head strong { color: #be123c; }
.subject-progress span { background: var(--teal); }
.subject-mini-row.bad .subject-progress span { background: #fb7185; }

/* Monthly: July's "Need … | Buffer …" line sits on the card, above Details & buffer. */
.subject-monthly-row > .subject-monthly-status { margin: 8px 0 2px; color: var(--text-primary); font-size: 13.5px; font-weight: 600; line-height: 1.45; }
.subject-monthly-row.bad > .subject-monthly-status { color: #9f1239; }
.subject-monthly-row.ok > .subject-monthly-status { color: #166534; }

/* Subjects with no hours yet: plain grey, never the mint accent. */
.subject-mini-row.neutral { background: var(--warm-gray); border-color: var(--stroke); }
.subject-mini-row.neutral .subject-mini-head span, .subject-mini-row.neutral .subject-mini-head strong,
.subject-mini-row.neutral p, .subject-mini-row.neutral small { color: var(--text-muted); }
.subject-mini-row.neutral .subject-progress { background: #e7e5e4; }
.subject-mini-card.neutral .subject-card-status { background: var(--warm-gray); color: var(--text-muted); border-color: var(--stroke); }

/* Present / Absent: July's green and rose. */
.choice-button.present.active, .small-button.attendance-bulk.present.active {
  background: linear-gradient(180deg, #22c55e, #16a34a); border-color: #16a34a; color: #fff;
}
.choice-button.absent.active, .small-button.attendance-bulk.absent.active {
  background: linear-gradient(180deg, #f43f5e, #e11d48); border-color: #e11d48; color: #fff;
}
.session-item { position: relative; border-color: var(--stroke); transition: border-color 260ms ease, box-shadow 260ms ease, background-color 260ms ease; }
.session-item.needs-marking { border-color: #99f6e4; }
.session-item.marked-present { border-color: #86efac; background: linear-gradient(90deg, #f0fdf4, #fff 65%); }
.session-item.marked-absent { border-color: #fda4af; background: linear-gradient(90deg, #fff1f2, #fff 65%); }
.session-item.marked-present::before, .session-item.marked-absent::before {
  content: ""; position: absolute; inset: 0 auto 0 0; width: 4px; border-radius: 0 4px 4px 0;
}
.session-item.marked-present::before { background: #22c55e; }
.session-item.marked-absent::before { background: #f43f5e; }

/* Celebration: button pop, ring, particle burst and a card sweep. */
.choice-button, .small-button.attendance-bulk { position: relative; overflow: visible; }
.choice-button.attendance-confirmed { animation: attendance-pop 460ms cubic-bezier(.34, 1.56, .64, 1); }
.choice-button.absent.attendance-confirmed .attendance-choice-icon { animation: attendance-shake 420ms cubic-bezier(.36, .07, .19, .97); }
.choice-button.present.attendance-confirmed .attendance-choice-icon { animation: attendance-icon-spin 520ms cubic-bezier(.34, 1.56, .64, 1); }
.choice-button.attendance-confirmed .attendance-choice-icon path { stroke-dasharray: 20; stroke-dashoffset: 20; animation: attendance-check-draw 360ms 120ms ease-out forwards; }
.choice-button.attendance-confirmed::after {
  content: ""; position: absolute; inset: -2px; border-radius: inherit; pointer-events: none;
  border: 2px solid currentColor; animation: attendance-ring 560ms ease-out forwards;
}
.choice-button.present.attendance-confirmed::after { border-color: #22c55e; }
.choice-button.absent.attendance-confirmed::after { border-color: #f43f5e; }

.attendance-burst { position: absolute; left: 50%; top: 50%; width: 0; height: 0; pointer-events: none; z-index: 2; }
.attendance-burst i {
  position: absolute; left: -4px; top: -4px; width: 8px; height: 8px; border-radius: 50%;
  opacity: 0; animation: attendance-particle 680ms var(--celebrate-delay, 0ms) cubic-bezier(.16, 1, .3, 1) forwards;
}
.attendance-burst.present i:nth-child(3n+1) { background: #22c55e; }
.attendance-burst.present i:nth-child(3n+2) { background: #2dd4bf; }
.attendance-burst.present i:nth-child(3n) { background: #facc15; width: 6px; height: 11px; border-radius: 2px; }
.attendance-burst.present i:nth-child(4n) { background: #0d9488; }
.attendance-burst.absent i { background: #fb7185; }
.attendance-burst.absent i:nth-child(even) { background: #fda4af; }

.session-item.just-marked-present::after, .session-item.just-marked-absent::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background-size: 300% 100%; background-repeat: no-repeat; background-position: 150% 0;
  animation: attendance-sweep 760ms var(--celebrate-delay, 0ms) cubic-bezier(.16, 1, .3, 1) forwards;
}
.session-item.just-marked-present::after { background-image: linear-gradient(100deg, transparent 35%, rgba(34, 197, 94, .22) 50%, transparent 65%); }
.session-item.just-marked-absent::after { background-image: linear-gradient(100deg, transparent 35%, rgba(244, 63, 94, .16) 50%, transparent 65%); }
.session-item.just-marked-present { animation: attendance-card-lift 520ms var(--celebrate-delay, 0ms) cubic-bezier(.34, 1.56, .64, 1); }
.session-item.just-marked-absent { animation: attendance-card-nudge 420ms var(--celebrate-delay, 0ms) ease-out; }

@keyframes attendance-pop { 0% { transform: scale(.92); } 45% { transform: scale(1.06); } 100% { transform: scale(1); } }
@keyframes attendance-ring { from { opacity: .85; transform: scale(1); } to { opacity: 0; transform: scale(1.18, 1.45); } }
@keyframes attendance-icon-spin { 0% { transform: scale(.4) rotate(-90deg); } 70% { transform: scale(1.25) rotate(8deg); } 100% { transform: scale(1) rotate(0); } }
@keyframes attendance-shake { 0%, 100% { transform: translateX(0); } 20% { transform: translateX(-3px) rotate(-8deg); } 40% { transform: translateX(3px) rotate(8deg); } 60% { transform: translateX(-2px); } 80% { transform: translateX(2px); } }
@keyframes attendance-check-draw { to { stroke-dashoffset: 0; } }
@keyframes attendance-particle {
  0% { opacity: 1; transform: rotate(var(--angle)) translateX(10px) scale(.6); }
  30% { opacity: 1; transform: rotate(var(--angle)) translateX(calc(var(--distance) * .7)) scale(1.15); }
  100% { opacity: 0; transform: rotate(var(--angle)) translateX(var(--distance)) translateY(10px) scale(.5); }
}
@keyframes attendance-sweep { from { background-position: 150% 0; } to { background-position: -50% 0; } }
@keyframes attendance-card-lift { 0% { transform: translateY(0); } 40% { transform: translateY(-3px); box-shadow: 0 10px 24px rgba(22, 163, 74, .16); } 100% { transform: translateY(0); } }
@keyframes attendance-card-nudge { 0%, 100% { transform: translateX(0); } 30% { transform: translateX(-4px); } 60% { transform: translateX(3px); } }

@media (prefers-reduced-motion: reduce) {
  .choice-button.attendance-confirmed, .choice-button.attendance-confirmed .attendance-choice-icon,
  .session-item.just-marked-present, .session-item.just-marked-absent, .sidebar-more-tools[open] .sidebar-more-list { animation: none; }
  .choice-button.attendance-confirmed .attendance-choice-icon path { animation: none; stroke-dashoffset: 0; }
  .choice-button.attendance-confirmed::after, .session-item.just-marked-present::after, .session-item.just-marked-absent::after { display: none; }
}
@media print {
  .attendance-burst, .session-item::before, .session-item::after { display: none !important; }
}

/* Batch Control and College Console: one tab bar per batch; sections open inside the page. */
.batch-section-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0 8px; padding: 6px; border-radius: 12px; background: var(--warm-gray); }
.batch-section-tabs button { min-height: 42px; padding: 8px 14px; border: 0; border-radius: 8px; background: transparent; color: #44403c; font: inherit; font-weight: 600; cursor: pointer; }
.batch-section-tabs button:hover:not([aria-current=page]) { background: #fff; color: var(--teal-dark); }
.batch-section-tabs button[aria-current=page] { background: var(--teal); color: #fff; box-shadow: 0 2px 8px rgba(13, 148, 136, .24); }
.batch-tab-count { display: inline-grid; place-items: center; min-width: 20px; height: 20px; margin-left: 4px; padding: 0 6px; border-radius: 999px; background: var(--danger); color: #fff; font-size: 11px; }
.batch-section-hint { margin: 4px 0 12px; color: var(--text-muted); font-size: 13px; }
.batch-section-host:empty { display: none; }
.batch-dialog.batch-inline { position: static; inset: auto; display: block; width: 100%; max-width: none; max-height: none; margin: 8px 0 16px; overflow: visible;
  padding: 20px; border: 1px solid var(--stroke); border-radius: 14px; background: #fff; box-shadow: none; }
.batch-dialog.batch-inline.batch-lecture-calendar { width: 100%; background: var(--ivory); }
.batch-dialog.batch-inline > header h2 { font-size: 18px; }
.batch-inline nav[aria-label="Batch setup sections"] { display: none; }
#independent-batch-control .batch-calendar-entry { background: var(--teal); }
.batch-control-summary p { color: var(--text-muted); }

.batch-howto { display: grid; gap: 4px; margin: 4px 0 14px; padding-left: 20px; color: #44403c; font-size: 13.5px; }
.batch-overview-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 10px; margin: 10px 0 14px; }
.batch-overview-card { display: grid; gap: 6px; padding: 14px 16px; border: 1px solid var(--stroke); border-radius: 12px; background: #fff; text-align: left; font: inherit; color: inherit; cursor: pointer; }
.batch-overview-card:hover { border-color: var(--teal); }
.batch-overview-card.is-selected { border-color: var(--teal); box-shadow: 0 0 0 2px var(--teal-light); }
.batch-overview-name { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px; }
.batch-overview-facts { display: flex; flex-wrap: wrap; gap: 4px 12px; color: var(--text-muted); font-size: 12.5px; }
.batch-overview-facts em { color: var(--amber); font-style: normal; font-weight: 600; }
.batch-overview-next { color: var(--teal-dark); font-size: 12.5px; }
.batch-status-pill { padding: 2px 8px; border-radius: 999px; background: var(--warm-gray); color: var(--text-muted); font-size: 11px; font-weight: 600; }
.batch-status-pill.is-published { background: #dcfce7; color: #166534; }
.batch-status-pill.is-draft { background: var(--amber-soft); color: var(--amber); }

.batch-week-readonly { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; margin-top: 12px; }
.batch-week-readonly section { padding: 12px; border: 1px solid var(--stroke); border-radius: 10px; background: var(--ivory); }
.batch-week-readonly h3 { margin: 0 0 6px; font-size: 14px; }
.batch-week-readonly ul { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; font-size: 12.5px; }
.batch-week-readonly li { display: grid; grid-template-columns: 82px 1fr; gap: 0 8px; }
.batch-week-readonly li > span:first-child { grid-row: span 3; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.batch-week-readonly li > span:not(:first-child) { color: var(--text-muted); font-size: 11.5px; }
.batch-week-readonly p { margin: 0; color: var(--text-muted); font-size: 12px; }
.batch-timetable-change > summary { display: inline-flex; align-items: center; min-height: 40px; padding: 8px 14px; border: 1px dashed var(--teal); border-radius: 8px; color: var(--teal-dark); font-weight: 600; cursor: pointer; list-style: none; }
.batch-timetable-change > summary::-webkit-details-marker { display: none; }
.owner-console-older-toggle { margin-left: auto; color: var(--text-muted) !important; font-size: 12.5px !important; }
.batch-inline form > .batch-form-note:first-child { display: none; }
.batch-auto-approve[hidden] { display: none !important; }

/* Setup checklist shown on a draft batch for both the moderator and the College Admin. */
.batch-setup { margin: 12px 0 14px; padding: 16px 18px; border: 1px solid var(--stroke); border-radius: 14px; background: #fff; }
.batch-setup > header { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 12px; margin-bottom: 8px; }
.batch-setup h3 { margin: 0; font-size: 16px; }
.batch-setup > header span, .batch-setup-note { color: var(--text-muted); font-size: 12.5px; }
.batch-setup ol { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
.batch-setup li { display: grid; grid-template-columns: 26px minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 10px 0; border-top: 1px solid var(--stroke); }
.batch-setup li:first-child { border-top: 0; }
.batch-setup li > div { display: grid; min-width: 0; }
.batch-setup li strong { font-size: 14px; }
.batch-setup li strong em { margin-left: 6px; color: var(--text-muted); font-size: 11px; font-style: normal; font-weight: 500; }
.batch-setup li small { color: var(--text-muted); font-size: 12.5px; overflow-wrap: anywhere; }
.batch-setup-mark { display: grid; place-items: center; width: 22px; height: 22px; border: 2px solid var(--stroke); border-radius: 50%; color: #fff; font-size: 12px; font-weight: 700; }
.batch-setup li.is-done .batch-setup-mark { border-color: #16a34a; background: #16a34a; }
.batch-setup li.is-todo .batch-setup-mark { border-color: var(--amber); }
.batch-setup li.is-optional .batch-setup-mark { border-style: dashed; }
.batch-setup li.is-ready .batch-setup-mark { border-color: var(--teal); }
.batch-setup li button { min-height: 38px; padding: 6px 14px; border: 1px solid var(--stroke); border-radius: 8px; background: #fff; color: var(--teal-dark); font: inherit; font-weight: 600; cursor: pointer; white-space: nowrap; }
.batch-setup li.is-todo button { border-color: var(--teal); background: var(--teal); color: #fff; }
.batch-setup li button.is-primary { border-color: var(--teal); background: var(--teal); color: #fff; }
.batch-setup-who { color: var(--text-muted); font-size: 12px; white-space: nowrap; }

/* Review: the week as a chosen group sees it. */
.batch-review-week { display: grid; gap: 8px; margin: 10px 0; }
.batch-review-week-head { display: flex; flex-wrap: wrap; align-items: end; gap: 8px 16px; }
.batch-review-week-head h4 { margin: 0 auto 0 0; font-size: 15px; }
.batch-review-week-head label { display: grid; gap: 4px; font-size: 12px; }

/* Subjects: one compact row each. */
.batch-editor-row[data-section="subjects"] { grid-template-columns: minmax(0, 2.2fr) minmax(0, 1fr) minmax(0, 1fr) auto; align-items: end; padding: 10px 0; }
.batch-editor-row[data-section="subjects"] .batch-archive { padding-bottom: 12px; white-space: nowrap; font-size: 12px; }
@media (max-width: 600px) {
  .batch-setup li { grid-template-columns: 26px minmax(0, 1fr); }
  .batch-setup li > :last-child:not(div) { grid-column: 2; justify-self: start; }
  .batch-editor-row[data-section="subjects"] { grid-template-columns: 1fr 1fr; }
  .batch-editor-row[data-section="subjects"] > label:first-child { grid-column: 1 / -1; }
}
/* Column labels once: later subject rows keep their labels for screen readers only. */
@media (min-width: 601px) {
  .batch-editor-row[data-section="subjects"] + .batch-editor-row[data-section="subjects"] { padding-top: 4px; }
  .batch-editor-row[data-section="subjects"] + .batch-editor-row[data-section="subjects"] > label:not(.batch-archive) { font-size: 0; gap: 0; }
  .batch-editor-row[data-section="subjects"] + .batch-editor-row[data-section="subjects"] > label:not(.batch-archive) input { font-size: 14px; }
}

/* Timetable week grid: one row per day, lessons left to right like the printed timetable. */
.batch-grid-views { display: inline-flex; gap: 4px; margin: 12px 0 4px; padding: 4px; border-radius: 10px; background: var(--warm-gray); }
.batch-grid-views button { min-height: 34px; padding: 4px 14px; border: 0; border-radius: 7px; background: transparent; color: #44403c; font-weight: 600; }
.batch-grid-views button[aria-pressed=true] { background: #fff; color: var(--teal-dark); box-shadow: var(--shadow-sm); }
.batch-grid { display: grid; gap: 8px; margin-top: 10px; }
.batch-grid-day { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 8px 12px; align-items: start; padding: 10px 12px; border: 1px solid var(--stroke); border-radius: 12px; background: var(--ivory); }
.batch-grid-day > h3 { margin: 10px 0 0; font-size: 14px; }
.batch-grid-lessons { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }
.batch-dialog .batch-grid-lesson { display: grid; gap: 1px; width: 168px; min-height: 66px; padding: 8px 10px; border: 1px solid var(--stroke); border-left: 4px solid var(--teal); border-radius: 8px; background: #fff; text-align: left; line-height: 1.25; }
.batch-dialog .batch-grid-lesson.is-practical { border-left-color: #b45309; }
.batch-dialog .batch-grid-lesson:hover { border-color: var(--teal); background: var(--mint); }
.batch-dialog .batch-grid-lesson.is-editing { border-color: var(--teal); box-shadow: 0 0 0 2px var(--teal-light); }
.batch-grid-lesson strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
.batch-grid-time, .batch-grid-lesson small { color: var(--text-muted); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.batch-grid-split { display: flex; gap: 0; padding: 3px; border: 1px dashed var(--teal); border-radius: 10px; }
.batch-dialog .batch-grid-split .batch-grid-lesson { width: 150px; }
.batch-dialog .batch-grid-split .batch-grid-lesson + .batch-grid-lesson { margin-left: 3px; }
.batch-dialog .batch-grid-add { width: 120px; min-height: 66px; border: 1px dashed var(--stroke); background: transparent; color: var(--teal-dark); font-weight: 600; }
.batch-dialog .batch-grid-add:hover:not(:disabled) { border-color: var(--teal); background: var(--mint); }
.batch-grid-editor { grid-column: 1 / -1; padding: 12px; border: 1px solid var(--teal); border-radius: 10px; background: #fff; }
.batch-grid-editor-title { margin: 0 0 4px; font-weight: 700; font-size: 13px; color: var(--teal-dark); }
.batch-grid-editor .batch-editor-row { padding: 6px 0; border-bottom: 0; }
.batch-grid-editor .batch-archive { display: none; }
.batch-grid-editor-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.batch-dialog .batch-grid-editor-actions .is-primary { border-color: var(--teal); background: var(--teal); color: #fff; }
.batch-dialog .batch-grid-editor-actions .is-danger { color: #be123c; }
.batch-timetable-copy { display: grid; gap: 8px; margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--stroke); }
.batch-timetable-copy p { margin: 0; font-size: 13px; color: #44403c; }
.batch-timetable-copy label { max-width: 360px; }
.batch-timetable-copy button { justify-self: start; }
@media (max-width: 600px) {
  .batch-grid-day { grid-template-columns: 1fr; }
  .batch-grid-day > h3 { margin: 0; }
  .batch-dialog .batch-grid-lesson, .batch-dialog .batch-grid-add { width: 100%; }
  .batch-grid-lessons { display: grid; grid-template-columns: 1fr 1fr; }
  .batch-grid-split { grid-column: 1 / -1; }
  .batch-dialog .batch-grid-split .batch-grid-lesson { width: 50%; }
}

/* Moderator "Today": what each group has today and tomorrow, who is waiting, what changed. */
.batch-today { display: grid; grid-template-columns: minmax(0, 2fr) minmax(220px, 1fr); gap: 12px; margin: 8px 0 16px; }
.batch-today > section { padding: 14px 16px; border: 1px solid var(--stroke); border-radius: 14px; background: #fff; }
.batch-today-day { grid-column: 1; }
.batch-today-day.is-compact { background: var(--ivory); }
.batch-today-side { grid-column: 2; }
.batch-today-side:nth-of-type(3) { grid-row: 1; }
.batch-today-side:nth-of-type(4) { grid-row: 2; }
.batch-today header { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 10px; margin-bottom: 8px; }
.batch-today h3 { margin: 0; font-size: 15px; }
.batch-today h3 span { margin-left: 4px; color: var(--text-muted); font-size: 13px; font-weight: 500; }
.batch-today header button { min-height: 36px; padding: 6px 12px; border: 1px solid var(--teal); border-radius: 8px; background: #fff; color: var(--teal-dark); font: inherit; font-weight: 600; cursor: pointer; }
.batch-today-day:not(.is-compact) header button { background: var(--teal); color: #fff; }
.batch-today-note { margin: 0 0 6px; color: var(--text-muted); font-size: 12.5px; }
.batch-today-columns { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; }
.batch-today-columns h4 { margin: 0 0 4px; font-size: 12px; color: var(--teal-dark); text-transform: uppercase; letter-spacing: .04em; }
.batch-today ul { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.batch-today-columns li { display: grid; grid-template-columns: 84px minmax(0, 1fr); gap: 0 8px; font-size: 13px; }
.batch-today-columns li > span { grid-row: span 2; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.batch-today-columns li small { color: var(--text-muted); font-size: 11.5px; }
.batch-today-columns li.is-cancelled strong { text-decoration: line-through; color: var(--text-muted); }
.batch-today-columns li.is-cancelled small, .batch-today-side em { color: #be123c; font-style: normal; }
.batch-today-columns li.is-changed small { color: var(--amber); font-weight: 600; }
.batch-today-columns li.is-empty { display: block; color: var(--text-muted); }
.batch-today-day.is-compact .batch-today-columns li { font-size: 12px; }
.batch-today-side li { display: grid; font-size: 13px; }
.batch-today-side li small { color: var(--text-muted); font-size: 12px; }
.batch-joins-group { color: var(--teal-dark) !important; font-weight: 600; }
.batch-joins-group em { color: #be123c; font-style: normal; }
@media (max-width: 760px) {
  .batch-today { grid-template-columns: 1fr; }
  .batch-today > section, .batch-today-side:nth-of-type(3), .batch-today-side:nth-of-type(4) { grid-column: 1; grid-row: auto; }
}
.batch-today h3 .batch-tab-count { margin-left: 6px; color: #fff; font-size: 11px; font-weight: 700; }
/* Phones: the batch tabs become one swipeable row instead of five wrapped rows. */
@media (max-width: 600px) {
  .batch-section-tabs { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .batch-section-tabs::-webkit-scrollbar { display: none; }
  .batch-section-tabs button { flex: 0 0 auto; white-space: nowrap; }
}

/* People: waiting to join, moderators and members on one page. */
.batch-people-block { margin: 6px 0 18px; }
.batch-people-block > h3 { margin: 0 0 8px; font-size: 15px; }
.batch-people-note { margin: 4px 0; color: var(--text-muted); font-size: 12.5px; }
.batch-person-warning { margin: 4px 0; color: #be123c !important; font-size: 12.5px; }
.batch-people-summary { margin: 0 0 6px; font-size: 13px; color: #44403c; }
.batch-people-filters { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0; }
.batch-dialog .batch-people-filters input { flex: 1 1 220px; width: auto; }
.batch-dialog .batch-people-filters select { flex: 0 0 160px; width: auto; }
.batch-people-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.batch-people-table th, .batch-people-table td { padding: 7px 8px; border-bottom: 1px solid var(--stroke); text-align: left; }
.batch-people-table th { background: var(--warm-gray); color: var(--text-muted); font-size: 11.5px; font-weight: 600; }
.batch-people-table td:first-child { width: 64px; font-variant-numeric: tabular-nums; }
.batch-people-mods { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 4px; padding: 0; list-style: none; }
.batch-people-mods li { padding: 4px 10px; border-radius: 999px; background: var(--teal-light); color: var(--teal-xdark); font-size: 12.5px; font-weight: 600; }
.batch-people-add { display: grid; gap: 6px; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--stroke); }
.batch-people-add > label { max-width: 360px; }
.batch-person-row { align-items: center; }
.batch-dialog .batch-person-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 16px; min-height: 0; margin: 0; padding: 10px 12px; border: 1px solid var(--stroke); border-radius: 10px; background: #fff; }
.batch-person-row + .batch-person-row { margin-top: 6px; }
.batch-person-row > div { display: grid; gap: 1px; min-width: 0; }
.batch-person-row > div strong { font-size: 14px; }
.batch-person-row > div small { color: var(--text-muted); font-size: 12px; }
.batch-dialog .batch-person-row > label { display: inline-flex; flex-direction: row; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; white-space: nowrap; }
.batch-people-add .batch-person-row { border-style: dashed; }
.batch-dialog .batch-person-row > div { flex: 1 1 220px; width: auto; }
.batch-dialog .batch-person-row > label { flex: 0 0 auto; width: auto; }

/* Install app (menu) and the iPhone how-to. */
.install-app-button { display: flex; align-items: center; gap: 12px; width: 100%; min-height: 44px; margin: 8px 0 4px; padding: 10px 13px; border: 1px dashed var(--teal); border-radius: 9px; background: var(--mint); color: var(--teal-dark); font: inherit; font-size: 14px; font-weight: 600; cursor: pointer; }
.install-app-button[hidden] { display: none; }
.install-app-button:hover { background: var(--teal-light); }
.install-app-button svg { width: 19px; height: 19px; stroke-width: 1.7; }
.install-help ol { display: grid; gap: 8px; margin: 12px 0; padding-left: 20px; font-size: 14px; }
.install-help p { margin: 0; color: var(--text-muted); font-size: 13px; }
.student-today-status.safe { background: #dcfce7; color: #166534; }
.student-today-status.risk { background: #ffe4e6; color: #9f1239; }

/* One-time "Trackmedico is now an app" card. */
.install-card { position: fixed; z-index: 1450; left: 16px; right: 16px; bottom: calc(84px + env(safe-area-inset-bottom)); max-width: 420px; margin: 0 auto; padding: 18px 18px 14px;
  border: 1px solid var(--stroke); border-radius: 18px; background: #fff; box-shadow: 0 18px 50px rgba(28, 25, 23, .18); transform: translateY(24px); opacity: 0;
  transition: transform 320ms cubic-bezier(.16, 1, .3, 1), opacity 220ms ease; }
.install-card.is-visible { transform: none; opacity: 1; }
.install-card.is-leaving { transform: translateY(24px); opacity: 0; }
@media (min-width: 1000px) { .install-card { left: auto; right: 24px; bottom: 24px; margin: 0; } }
.install-card-close { position: absolute; top: 8px; right: 8px; width: 34px; height: 34px; border: 0; border-radius: 50%; background: transparent; color: var(--text-muted); font-size: 20px; cursor: pointer; }
.install-card-head { display: flex; align-items: center; gap: 12px; padding-right: 26px; }
.install-card-head img { width: 52px; height: 52px; border-radius: 13px; box-shadow: 0 2px 8px rgba(0, 0, 0, .1); }
.install-card-eyebrow { margin: 0; color: var(--teal-dark); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.install-card h2 { margin: 2px 0 0; font-size: 18px; line-height: 1.2; color: var(--text-primary); }
.install-card ul { display: grid; gap: 6px; margin: 12px 0; padding: 0; list-style: none; font-size: 13.5px; color: #44403c; }
.install-card li { position: relative; padding-left: 22px; }
.install-card li::before { content: "✓"; position: absolute; left: 0; color: #16a34a; font-weight: 700; }
.install-card-actions { display: flex; gap: 8px; }
.install-card-actions button { min-height: 44px; padding: 8px 16px; border: 1px solid var(--stroke); border-radius: 10px; background: #fff; color: #44403c; font: inherit; font-weight: 600; cursor: pointer; }
.install-card-actions .install-card-primary { flex: 1; border-color: var(--teal); background: var(--teal); color: #fff; }
.install-card-foot { margin: 10px 0 0; color: var(--text-muted); font-size: 11.5px; text-align: center; }
.install-steps { display: grid; gap: 6px; margin: 4px 0 12px; padding-left: 20px; font-size: 13.5px; }
.install-steps-note { margin: 4px 0 12px; font-size: 13px; color: #44403c; }
@media (prefers-reduced-motion: reduce) { .install-card { transition: none; } }
@media print { .install-card { display: none !important; } }
.install-card h2 { font-weight: 700; letter-spacing: -.01em; }

/* Daily reminder: menu switch and the one-time card in the installed app. */
.reminder-button { border-style: solid; background: #fff; }
.reminder-button.is-on { border-color: #16a34a; background: #f0fdf4; color: #166534; }
.reminder-button[hidden] { display: none; }
.reminder-card-bell { display: grid; place-items: center; width: 52px; height: 52px; border-radius: 13px; background: var(--teal-light); color: var(--teal-xdark); }
.reminder-card-text { margin: 12px 0; font-size: 13.5px; color: #44403c; }

/* Missed lectures: finished lectures with no Present/Absent mark (missed-nudges.js, renderCalendar). */
.calendar-day.has-missed { position: relative; }
.missed-day-badge {
  position: absolute; top: 4px; right: 4px; display: grid; place-items: center; width: 18px; height: 18px;
  border-radius: 50%; background: var(--danger); color: #fff; font: 800 12px/1 Inter, system-ui, sans-serif;
  box-shadow: 0 0 0 2px #fff; pointer-events: none;
}
.calendar-day.selected .missed-day-badge { box-shadow: 0 0 0 2px var(--teal); }
@media (max-width: 680px) { .missed-day-badge { top: 2px; right: 2px; width: 15px; height: 15px; font-size: 10px; } }

.missed-banner {
  display: flex; align-items: center; gap: 12px; margin: 0 0 16px; padding: 12px 14px;
  border: 1px solid #fecdd3; border-radius: 16px; background: var(--danger-soft); color: #881337;
}
.missed-banner[hidden] { display: none; }
.missed-banner-icon {
  flex: 0 0 auto; display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%;
  background: var(--danger); color: #fff; font-weight: 800; font-size: 17px;
}
.missed-banner-text { flex: 1 1 auto; min-width: 0; }
.missed-banner-text strong { display: block; font-size: 15px; color: #881337; }
.missed-banner-text p { margin: 2px 0 0; font-size: 12.5px; color: #9f1239; }
.missed-banner-action {
  flex: 0 0 auto; min-height: 40px; padding: 8px 14px; border: 0; border-radius: 12px;
  background: var(--danger); color: #fff; font-weight: 700; cursor: pointer;
}
.missed-banner-action:hover { background: #be123c; }
@media (max-width: 520px) {
  .missed-banner { flex-wrap: wrap; }
  .missed-banner-text { flex-basis: calc(100% - 44px); }
  .missed-banner-action { width: 100%; }
}

.mobile-primary-nav [data-open-tracker="calendar"], .app-sidebar [data-view="attendance"], #tracker-toggle [data-tracker-view="calendar"] { position: relative; }
.missed-count-badge {
  position: absolute; top: 2px; right: 8px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;
  background: var(--danger); color: #fff; font: 700 11px/18px Inter, system-ui, sans-serif; text-align: center; pointer-events: none;
}
.app-sidebar [data-view="attendance"] .missed-count-badge { top: 50%; right: 12px; transform: translateY(-50%); }
.missed-sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

.missed-card-icon {
  display: grid; place-items: center; width: 52px; height: 52px; border-radius: 13px;
  background: var(--danger-soft); color: var(--danger); font-size: 26px; font-weight: 800;
}
.missed-card-text { margin: 12px 0 8px; font-size: 13.5px; color: #44403c; }
.missed-card-days { list-style: none; margin: 0 0 6px; padding: 0; display: grid; gap: 6px; }
.missed-card .missed-card-days li { padding-left: 0; }
.missed-card .missed-card-days li::before { content: none; }
.missed-card-days button {
  width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 8px; min-height: 40px; padding: 8px 12px;
  border: 1px solid #fecdd3; border-radius: 10px; background: #fff; color: var(--text-primary); font-size: 13.5px; cursor: pointer;
}
.missed-card-days b { color: var(--danger); font-weight: 700; }
.missed-card-more { margin: 0 0 8px; font-size: 12.5px; color: var(--text-muted); }
@media print { .missed-banner, .missed-day-badge, .missed-count-badge { display: none !important; } }

/* Start-up progress (loading-bar.js): a thin glowing bar on the top edge and a matching bar on the boot card. */
.top-loading-bar {
  position: fixed; z-index: 3000; top: 0; left: 0; right: 0; height: 3px; pointer-events: none;
  background: transparent; --progress: 0%;
}
.top-loading-bar[hidden] { display: none; }
.top-loading-bar::before {
  content: ""; position: absolute; inset: 0 auto 0 0; width: var(--progress);
  background: linear-gradient(90deg, #5eead4, var(--teal) 55%, #0f766e);
  border-radius: 0 3px 3px 0; box-shadow: 0 0 10px rgb(13 148 136 / 55%), 0 0 4px rgb(94 234 212 / 60%);
  transition: width 220ms ease-out;
}
/* A soft light that runs along the filled part so a slow stage still feels alive. */
.top-loading-bar::after {
  content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: var(--progress); overflow: hidden;
  background: linear-gradient(90deg, transparent 0%, rgb(255 255 255 / 70%) 50%, transparent 100%) no-repeat;
  background-size: 120px 100%; animation: loading-glint 1.4s linear infinite; transition: width 220ms ease-out;
}
.top-loading-bar.is-done { opacity: 0; transition: opacity 400ms ease 120ms; }
@keyframes loading-glint { from { background-position: -120px 0; } to { background-position: calc(100% + 120px) 0; } }

.boot-progress {
  --progress: 0%; position: relative; width: min(240px, 70%); height: 4px; margin: 14px auto 0; overflow: hidden;
  border-radius: 999px; background: var(--teal-light, #ccfbf1);
}
.boot-progress::before {
  content: ""; position: absolute; inset: 0 auto 0 0; width: var(--progress); border-radius: inherit;
  background: linear-gradient(90deg, #5eead4, var(--teal)); transition: width 220ms ease-out;
}
#boot-progress-label { min-height: 1.4em; }
@media (prefers-reduced-motion: reduce) {
  .top-loading-bar::before, .boot-progress::before, .top-loading-bar::after { transition: none; animation: none; }
}
@media print { .top-loading-bar { display: none !important; } }

/* A quiet line under the boot progress bar. */
.boot-quote { max-width: 300px; margin: 22px auto 0; padding-top: 16px; border-top: 1px solid var(--stroke, #e4e2dc); text-align: center; }
.boot-quote blockquote {
  margin: 0; font-family: "DM Serif Display", Georgia, serif; font-size: 15px; line-height: 1.5; color: var(--teal-xdark, #134e4a);
  opacity: 0; animation: boot-quote-in 700ms ease-out 250ms forwards;
}
.boot-quote figcaption { margin-top: 8px; font-size: 12px; color: var(--text-muted, #78716c); opacity: 0; animation: boot-quote-in 700ms ease-out 450ms forwards; }
.boot-quote cite { font-style: italic; }
@keyframes boot-quote-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .boot-quote blockquote, .boot-quote figcaption { opacity: 1; animation: none; } }

/* Previous-year attendance: the Yearly snapshot's Cumulative / Current year switch, card notes,
   the student's entry card under Calibration, and the moderator's subject fields. */
.subject-mini-title-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px; }
.subject-mini-title-row h3 { margin: 0; min-width: 0; }
.carry-forward-modes { display: inline-flex; gap: 2px; padding: 3px; border-radius: 9px; background: var(--warm-gray, #f5f4f0); }
.carry-forward-modes button { min-height: 30px; padding: 4px 10px; border: 0; border-radius: 7px; background: transparent; color: var(--text-muted, #57534e); font: 600 12px var(--font-body, inherit); cursor: pointer; }
.carry-forward-modes button[aria-pressed="true"] { background: #fff; color: var(--teal-dark, #0f766e); box-shadow: 0 1px 2px rgb(28 25 23 / 12%); }
.carry-forward-modes button:focus-visible { outline: 2px solid var(--teal, #0d9488); outline-offset: 1px; }
.carry-forward-note.is-missing { color: #92400e; }
.carry-forward-link { padding: 0; border: 0; background: none; color: var(--teal-dark, #0f766e); font: inherit; font-weight: 700; text-decoration: underline; cursor: pointer; }
.carry-forward-note { margin: 8px 0 0; padding-top: 8px; border-top: 1px dashed var(--stroke, #e4e2dc); font-size: 12.5px; color: var(--teal-dark, #0f766e); }
.carry-forward-entry { margin-bottom: 14px; }
.carry-forward-card .calibration-round-head { display: flex; align-items: flex-start; justify-content: space-between; }
.carry-forward-card .calibration-round-head > div { flex: 1; min-width: 0; }
.carry-forward-intro { max-width: 62ch; }
.batch-carry-forward { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; padding: 10px 12px; border: 1px dashed var(--stroke, #e4e2dc); border-radius: 10px; }
.batch-carry-forward > summary { grid-column: 1 / -1; cursor: pointer; font-weight: 600; color: var(--teal-dark, #0f766e); }
.batch-carry-forward > p, .batch-carry-forward > small { grid-column: 1 / -1; margin: 0; font-size: 12.5px; color: var(--text-muted, #78716c); }

/* Okay to miss (safe-leave-core.js): a quiet line on today's Home cards, soft marks on calendar days
   and a note in the day panel. */
.student-today-details .student-today-can-miss { display: block; margin-top: 3px; color: #3f7d5c; font-size: 12px; }
.calendar-day.safe-leave { position: relative; box-shadow: inset 0 0 0 1.5px #a7d7bd; }
.calendar-day.safe-leave.selected { box-shadow: inset 0 0 0 1.5px #d6efe1; }
.safe-leave-day-badge {
  position: absolute; bottom: 4px; right: 4px; display: grid; place-items: center; width: 16px; height: 16px;
  border-radius: 50%; background: #e3f4ea; color: #3f7d5c; font: 700 10px/1 Inter, system-ui, sans-serif; pointer-events: none;
}
@media (max-width: 680px) { .safe-leave-day-badge { bottom: 2px; right: 2px; width: 14px; height: 14px; font-size: 9px; } }
.dot.safe-leave { background: #a7d7bd; }
.safe-leave-day-note { margin: 0 0 12px; padding: 9px 12px; border-radius: 10px; background: #f3faf6; color: #3f6b55; font-size: 13px; }

/* Update button beside Sync, shown only after "Later" on a waiting update (app-update.js). */
.app-update-now { display: inline-flex; align-items: center; gap: 6px; flex-shrink: 0; min-height: 44px; padding: 8px 12px; margin-left: 8px;
  border: 1px solid var(--teal, #0d9488); border-radius: 9px; background: var(--teal-light, #ccfbf1); color: var(--teal-xdark, #134e4a);
  font: 600 13px var(--font-body, inherit); cursor: pointer; touch-action: manipulation; }
.app-update-now[hidden] { display: none; }
.app-update-now svg { width: 16px; height: 16px; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.app-update-now:focus-visible { outline: 3px solid var(--teal, #0d9488); outline-offset: 3px; }
.app-update-now:disabled { opacity: .6; cursor: default; }
/* On phones it is an icon-only button (its aria-label still names it), so the bell keeps its place. */
@media (max-width: 560px) { .app-update-now { justify-content: center; width: 44px; padding: 0; margin-left: 6px; } .app-update-now span { display: none; } }

/* Home schedule day arrows: today up to a week ahead. */
.student-day-nav { display: flex; align-items: center; gap: 6px; }
.student-day-step { display: grid; place-items: center; width: 36px; height: 36px; padding: 0; border: 1px solid var(--stroke, #e4e2dc); border-radius: 10px; background: #fff; color: var(--teal-dark, #0f766e); cursor: pointer; }
.student-day-step svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.student-day-step:disabled { opacity: .35; cursor: default; }
.student-day-step:focus-visible { outline: 2px solid var(--teal, #0d9488); outline-offset: 2px; }
.student-day-nav .dashboard-text-action { margin-left: 4px; }

/* Batch library: change your own roll number (batches.js changeRoll). */
.batch-roll-change { min-height: 32px; padding: 4px 10px; border: 1px solid var(--stroke, #e4e2dc); border-radius: 8px; background: #fff; color: var(--teal-dark, #0f766e); font: 600 12.5px var(--font-body, inherit); cursor: pointer; }
.batch-roll-change:hover { background: var(--mint, #f0fdf9); }
.batch-roll-change:focus-visible { outline: 2px solid var(--teal, #0d9488); outline-offset: 2px; }
