/* Оформление расписания. Подключается из views/page.php с меткой времени
   изменения в адресе, поэтому браузер подхватывает правки сразу.

   Палитра фирменная, из логобука Контур.Университета:
     синий       #1E3CD4  (RGB 30 60 212, Pantone 2728 C) — основной
     красный     #FC0F3C  (RGB 252 15 60, Pantone 192 C)  — только акценты
     чёрный      #000000                                  — печать
     тёмно-серый #25282B  (RGB 37 40 43,  Pantone 426)    — текст
   Остальные значения — светлые оттенки фирменного синего, полученные
   подмешиванием белого. Красок вне палитры здесь нет.
   Менять оформление удобнее всего в :root. */

:root{
  /* фирменные цвета */
  --brand:#1e3cd4;         /* основной синий */
  --brand-dark:#1631a8;    /* синий, притемнённый для границ и наведения */
  --accent:#fc0f3c;        /* фирменный красный */
  --graphite:#25282b;      /* фирменный тёмно-серый */

  /* производные от палитры */
  --ink:var(--graphite);   /* основной текст */
  --ink-soft:#5c6480;      /* второстепенный текст, серо-синий */
  --paper:#fff;
  --board:#eef0fa;         /* фон страницы — синий, разбавленный белым */
  --line:#c9cfe8;
  --line-soft:#e2e6f4;
  --slot:#f5f6fb;          /* колонки даты, номера и времени */
  --weekend:#eceef7;
  --today:#e4e8fa;         /* сегодняшний день */
  --today-line:var(--brand);
  --tint:#edf0fd;          /* подложка сообщений */
  --tint-accent:#fff0f3;   /* подложка ошибок */
  --span-bg:#f7f8fd;       /* занятие, растянутое на несколько пар */

  /* типы занятий: только фирменные цвета и оттенки синего */
  --lecture:#1e3cd4;       /* лекция — основной синий */
  --practice:#5c78e8;      /* практика — светлый оттенок синего */
  --lab:#25282b;           /* лабораторная — тёмно-серый */
  --exam:#fc0f3c;          /* зачёт, экзамен — фирменный красный */
  --other:#9aa1b8;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--board);color:var(--ink);font-size:15px;line-height:1.45;
     font-family:"Segoe UI","Inter",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
     -webkit-font-smoothing:antialiased}
.wrap{max-width:1400px;margin:0 auto;padding:22px 18px 40px}
header.top{display:flex;flex-wrap:wrap;align-items:flex-end;gap:18px;
           padding-bottom:14px;margin-bottom:18px;border-bottom:2px solid var(--brand)}
h1{font-size:24px;font-weight:650;letter-spacing:-.02em;margin:0;color:var(--brand)}
.cal-meta{color:var(--ink-soft);font-size:14px;margin-top:2px}
.top .spacer{flex:1}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
a.btn,button{font:inherit;font-size:14px;background:var(--paper);color:var(--ink);
     border:1px solid var(--line);border-radius:3px;padding:7px 13px;cursor:pointer;
     text-decoration:none;display:inline-block}
a.btn:hover,button:hover{border-color:var(--brand);color:var(--brand)}
a.btn:focus-visible,button:focus-visible{outline:2px solid var(--brand);outline-offset:1px}
.weekbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:12px}
.weekbar .range{font-size:17px;font-weight:600}
.weekbar .count{color:var(--ink-soft);font-size:14px}
.nav{display:flex}
.nav a.btn{border-radius:0}
.nav a.btn:first-child{border-radius:3px 0 0 3px}
.nav a.btn:last-child{border-radius:0 3px 3px 0}
.nav a.btn + a.btn{border-left:none}
.search{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.search label{font-size:14px;color:var(--ink-soft)}
.search input[type=search]{font:inherit;font-size:14px;padding:7px 11px;min-width:270px;
      border:1px solid var(--line);border-radius:3px;background:var(--paper);color:var(--ink)}
.search input[type=search]:focus{outline:2px solid var(--brand);outline-offset:1px;border-color:var(--brand)}
.found{margin-bottom:12px;padding:9px 13px;font-size:14px;
       border-left:3px solid var(--brand);background:var(--tint)}
.found a{color:var(--brand)}
.found .dim{color:var(--ink-soft)}
.opts{display:flex;gap:16px;flex-wrap:wrap;font-size:14px;margin-bottom:14px}
.opts a{color:var(--brand)}
.sheet{background:var(--paper);border:1px solid var(--line);border-radius:4px;overflow:auto}
/* Фиксированная раскладка: ширина колонок задаётся в colgroup и не зависит
   от того, сколько занятий выпало на показанную неделю. */
table{border-collapse:collapse;width:100%;font-size:14px;table-layout:fixed}
col.c-date{width:118px} col.c-num{width:64px} col.c-time{width:78px}
th,td{border:1px solid var(--line-soft);vertical-align:top;padding:7px 10px}
thead th{position:sticky;top:0;z-index:2;background:var(--brand);color:#fff;
         border-color:var(--brand-dark);font-weight:600;text-align:left;padding:10px}
td.date{white-space:nowrap;font-weight:600;background:var(--slot)}
td.date .dow{display:block;font-weight:500;color:var(--ink-soft);font-size:13px;
             overflow-wrap:anywhere;white-space:normal}
td.num{text-align:center;color:var(--ink-soft);background:var(--slot);font-variant-numeric:tabular-nums}
td.time{white-space:nowrap;color:var(--ink-soft);background:var(--slot);
        font-size:13px;font-variant-numeric:tabular-nums}
tr.weekend td.date,tr.weekend td.num,tr.weekend td.time{background:var(--weekend)}
tr.daystart td{border-top:1px solid var(--line)}
tr.today td.date,tr.today td.num,tr.today td.time{background:var(--today)}
tr.today td.date{box-shadow:inset 3px 0 0 var(--today-line)}
td.cell{overflow-wrap:anywhere}
/* Занятие на несколько пар: ячейка объединена через rowspan.
   Лёгкая подложка и выравнивание по центру показывают, что это один блок. */
td.cell.spanned{background:var(--span-bg);vertical-align:middle}
.lesson{border-left:3px solid var(--other);padding:2px 0 2px 9px;margin:1px 0}
.lesson + .lesson{margin-top:7px;border-top:1px dotted var(--line);padding-top:7px}
.lesson.k-lecture{border-left-color:var(--lecture)}
/* Практика по оттенку близка к лекции, поэтому различается ещё и штриховой
   линией — на случай печати, плохих экранов и дальтонизма. */
.lesson.k-practice{border-left-color:var(--practice);border-left-style:dashed}
.lesson.k-lab{border-left-color:var(--lab)}
.lesson.k-exam{border-left-color:var(--exam)}
.lesson .subj{font-weight:600;display:block}
.lesson .kind{color:var(--ink-soft);font-weight:500}
.lesson .meta{color:var(--ink-soft);font-size:13px;display:block;margin-top:1px}
.lesson .shifted{color:var(--accent);font-size:13px;font-weight:500;display:block}
.legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:14px;font-size:13px;color:var(--ink-soft)}
.legend span{display:inline-flex;align-items:center;gap:7px}
.legend i{width:14px;height:3px;border-radius:2px;display:inline-block}
.empty{padding:44px 24px;text-align:center;color:var(--ink-soft)}
.note{margin-bottom:12px;padding:9px 13px;font-size:14px;
      border-left:3px solid var(--graphite);background:var(--slot)}
.err{margin-bottom:12px;padding:9px 13px;font-size:14px;
     border-left:3px solid var(--accent);background:var(--tint-accent);color:var(--graphite)}
@media (max-width:720px){
  .wrap{padding:14px 10px 28px} h1{font-size:20px}
  col.c-date{width:96px} col.c-num{width:44px} col.c-time{width:62px}
  th,td{padding:6px 7px}
}
@media print{
  @page{size:A4 landscape;margin:10mm}
  body{background:#fff;font-size:10.5px}
  .wrap{max-width:none;padding:0}
  .toolbar,.nav,.opts,.legend,.search{display:none !important}
  h1{color:#000}
  header.top{border-bottom-color:#000}
  .sheet{border:none;overflow:visible}
  thead th{position:static;background:#fff;color:#000;border:1px solid #000}
  th,td{border:1px solid #999;padding:3px 4px}
  table{min-width:0 !important}
  /* Ширины служебных колонок заданы в em, то есть привязаны к печатному кеглю:
     при его изменении колонки пересчитываются сами. В пикселях подписи
     «Пара» и «Время» переставали помещаться и вылезали за границу — при
     table-layout:fixed колонка под содержимое не расширяется. */
  col.c-date{width:8.6em} col.c-num{width:4.6em} col.c-time{width:5.8em}
  /* Страховка: если подпись всё же не влезет, она перенесётся внутри
     ячейки, а не перечеркнёт разлиновку. */
  thead th,td.num,td.time,td.date{overflow-wrap:anywhere}
  td.time{white-space:normal}
  tr{page-break-inside:avoid}
  td.date,td.num,td.time,tr.weekend td,tr.today td,td.cell.spanned{background:#fff !important;box-shadow:none !important}
}