:root{--bg:#f4f6fb;--card:#fff;--txt:#172033;--mut:#6b7280;--b:#d9e0ee;--pri:#2563eb;--ok:#16a34a;--warn:#f59e0b;--bad:#dc2626;--info:#0ea5e9;--vio:#7c3aed;--dark:#111827}
*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial;background:var(--bg);color:var(--txt)}header{background:var(--dark);color:#fff;padding:14px 18px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;position:sticky;top:0;z-index:5}h1{font-size:20px;margin:0}main{padding:16px;max-width:1420px;margin:auto}.grid{display:grid;grid-template-columns:1fr 380px;gap:16px}.card{background:var(--card);border:1px solid var(--b);border-radius:16px;padding:14px;box-shadow:0 4px 16px #0000000b;margin-bottom:14px}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.small{font-size:12px;color:var(--mut)}input,select,textarea,button{font:inherit;border-radius:10px;border:1px solid var(--b);padding:8px 10px}input,select,textarea{background:#fff}button{cursor:pointer;background:#fff;font-weight:700}button.primary{background:var(--pri);color:white;border-color:var(--pri)}button.ok{background:var(--ok);color:white;border-color:var(--ok)}button.warn{background:var(--warn);color:white;border-color:var(--warn)}button.bad{background:var(--bad);color:white;border-color:var(--bad)}button.info{background:var(--info);color:white;border-color:var(--info)}button.vio{background:var(--vio);color:white;border-color:var(--vio)}button:disabled{opacity:.45;cursor:not-allowed}.pill{display:inline-block;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:800}.p-ok{background:#dcfce7;color:#166534}.p-warn{background:#fef3c7;color:#92400e}.p-bad{background:#fee2e2;color:#991b1b}.p-info{background:#e0f2fe;color:#075985}.p-vio{background:#ede9fe;color:#5b21b6}.p-muted{background:#f3f4f6;color:#374151}.counters{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px}.counter{background:#f8fafc;border:1px solid var(--b);border-radius:14px;padding:10px;text-align:center}.counter b{font-size:24px;display:block}table{width:100%;border-collapse:separate;border-spacing:0 8px}th{font-size:12px;text-align:left;color:#6b7280;padding:8px;background:#f8fafc;position:static;z-index:auto}td{background:#fff;border-top:1px solid var(--b);border-bottom:1px solid var(--b);padding:8px}td:first-child{border-left:1px solid var(--b);border-radius:10px 0 0 10px}td:last-child{border-right:1px solid var(--b);border-radius:0 10px 10px 0}.actions{display:flex;gap:5px;flex-wrap:wrap}.actions button{padding:6px 8px}.hidden{display:none!important}.notice{padding:12px;border-radius:12px;background:#eff6ff;border:1px solid #bfdbfe;color:#1e40af;font-weight:700}.studentName{font-weight:900}.studentDot{display:inline-block;width:13px;height:13px;border-radius:999px;margin-right:8px;vertical-align:middle;background:var(--vio);box-shadow:0 0 0 3px #ede9fe}.studentDot.inactiveDot{background:#9ca3af;box-shadow:0 0 0 3px #f3f4f6}.studentName.inactiveName{color:#9ca3af;font-weight:700;opacity:.65}.inactiveRow td{background:#fafafa;color:#9ca3af}.inactiveRow .actions{opacity:.55}.tabs button.active{background:#111827;color:#fff}.modal{position:fixed;inset:0;background:#0008;display:none;align-items:center;justify-content:center;z-index:50}.modal .card{max-width:650px;width:95%;max-height:90vh;overflow:auto}.right{margin-left:auto}.toast{position:fixed;right:16px;bottom:16px;background:#111827;color:#fff;border-radius:14px;padding:12px 14px;box-shadow:0 12px 40px #0004;z-index:99;display:none}.lockOverlay{position:fixed;inset:0;background:#f4f6fb;display:flex;align-items:center;justify-content:center;z-index:200}.lockBox{background:white;border:1px solid var(--b);border-radius:18px;padding:20px;max-width:420px;width:92%;box-shadow:0 20px 60px #0001}.calHead{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.calGrid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.calDow{font-size:11px;text-align:center;color:#6b7280;font-weight:900}.calDay,.calEmpty{min-height:36px;border-radius:10px}.calDay{border:1px solid var(--b);background:white;text-align:center;font-weight:900}.calDay.has{color:#fff;border-color:transparent}.calDay.ord{background:var(--ok)}.calDay.rec{background:var(--warn)}.calDay.ext{background:var(--bad)}.calDay.selected{outline:3px solid #2563eb77}.calDay.today{box-shadow:inset 0 0 0 3px #11182744}.blockTitle{font-weight:950;margin:0 0 10px}.backupBox{background:#fff7ed;border-color:#fed7aa}.backupBox .blockTitle{color:#9a3412}.statsWrap{overflow:auto;max-height:620px;border:1px solid var(--b);border-radius:12px;background:white}.statsTable{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%}.statsTable th{position:sticky;top:0;background:#111827!important;color:#fff!important;z-index:20;box-shadow:0 2px 0 #d1d5db;white-space:nowrap}.statsTable td{white-space:nowrap}.statsTable th:nth-child(2),.statsTable td:nth-child(2){position:sticky;left:0;z-index:12}.statsTable td:nth-child(2){background:#fff;font-weight:800;box-shadow:2px 0 0 #e5e7eb}.statsTable th:nth-child(2){left:0;z-index:25;box-shadow:2px 0 0 #374151,0 2px 0 #d1d5db}.statsTable th:first-child,.statsTable td:first-child{position:sticky;left:0;z-index:13}.statsTable td:first-child{background:#fff;box-shadow:2px 0 0 #e5e7eb}.statsTable th:first-child{z-index:26}.mainListWrap th{position:static!important;z-index:auto!important;background:#f8fafc!important;color:#6b7280!important}@media(max-width:950px){.grid{grid-template-columns:1fr}.actions button{font-size:12px;padding:6px}.counters{grid-template-columns:repeat(2,1fr)}}
.pickBox{width:18px;height:18px;accent-color:#7c3aed}
.dayTools{border:2px solid #bfdbfe;background:linear-gradient(180deg,#eff6ff,#fff)}
.dayTools .blockTitle{color:#1e40af}
.dayListBox{max-height:220px;overflow:auto;border:1px solid var(--b);border-radius:12px;padding:8px;background:#fff;margin-top:8px}
.dayItem{display:flex;align-items:center;gap:8px;justify-content:space-between;border-bottom:1px solid #eef2f7;padding:6px 0}
.dayItem:last-child{border-bottom:0}
.dayItem label{display:flex;align-items:center;gap:8px;font-weight:800}
.dayTag{font-size:11px;border-radius:999px;padding:3px 7px;background:#e0e7ff;color:#3730a3;font-weight:900}
.photoBtn {
  background:#2563eb;
  color:white;
  border:none;
  border-radius:6px;
  padding:4px 8px;
  margin-left:4px;
  cursor:pointer;
}

#photoModal {
  display:none;
  position:fixed;
  inset:0;
  background:rgba(0,0,0,.88);
  z-index:999999;
  justify-content:center;
  align-items:center;
}

#photoModal img {
  max-width:85%;
  max-height:85%;
  border-radius:18px;
  box-shadow:0 0 30px black;
}

#closePhoto {
  position:absolute;
  top:20px;
  right:30px;
  font-size:48px;
  color:white;
  cursor:pointer;
}
