/* ================================================================ токены */
:root {
  --bg: #f5f6f8; --surface: #fff; --surface-2: #f9fafb; --hover: #f2f4f7;
  --ink: #131722; --ink-2: #3a4152; --muted: #6b7384; --faint: #9aa1af;
  --line: #e5e7eb; --line-2: #eef0f3;
  --accent: #4f46e5; --accent-2: #4338ca; --accent-soft: #eef0ff; --accent-line: #c7cbfb;
  --ok: #15803d; --ok-soft: #e8f7ee; --ok-line: #b7e4c7;
  --bad: #dc2626; --bad-soft: #fdecec; --bad-line: #f5c2c2;
  --warn: #b45309; --warn-soft: #fff5e6; --warn-line: #f5d9a8;
  --r-sm: 6px; --r: 8px; --r-lg: 12px;
  --shadow: 0 1px 2px rgba(16, 24, 40, .05);
  --shadow-pop: 0 12px 32px rgba(16, 24, 40, .16), 0 2px 6px rgba(16, 24, 40, .08);
  --ring: 0 0 0 3px rgba(79, 70, 229, .18);
  --side: 248px;
  --font: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
}
* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; }
body {
  font: 14px/1.45 var(--font); color: var(--ink); background: var(--bg);
  display: grid; grid-template-columns: var(--side) minmax(0, 1fr); height: 100vh; overflow: hidden;
  -webkit-font-smoothing: antialiased;
}
button, input, select, textarea { font: inherit; color: inherit; }
code { font: 12px ui-monospace, Consolas, monospace; background: var(--hover); padding: 1px 5px; border-radius: 4px; }
svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex: none; }
h1, h2, h3, h4 { margin: 0; font-weight: 600; letter-spacing: -.01em; }
.hidden { display: none !important; }
.muted { color: var(--muted); }
.small { font-size: 12px; }
.better { color: var(--ok); } .worse { color: var(--bad); } .same { color: var(--faint); }
.warnc { color: var(--warn); }
.w60 { width: 64px; } .w80 { width: 84px; } .w110 { width: 110px; } .w140 { width: 140px; }
.w160 { width: 170px; } .w240 { width: 240px; } .w320 { width: 320px; }

/* ================================================================ кнопки и поля */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: 32px; padding: 0 12px; border-radius: var(--r); border: 1px solid var(--line);
  background: var(--surface); color: var(--ink); font-size: 13px; font-weight: 500;
  cursor: pointer; white-space: nowrap; box-shadow: var(--shadow); transition: background .12s, border-color .12s;
}
.btn:hover { background: var(--hover); }
.btn:focus-visible { outline: none; box-shadow: var(--ring); }
.btn.sm, .btn.small { height: 28px; padding: 0 10px; font-size: 12.5px; }
.btn.icon { width: 32px; padding: 0; }
.btn.primary { background: var(--accent); border-color: var(--accent); color: #fff; }
.btn.primary:hover { background: var(--accent-2); }
.btn.ghost { background: transparent; border-color: transparent; box-shadow: none; }
.btn.ghost:hover { background: var(--hover); }
.btn.danger { color: var(--bad); }
.btn.danger:hover { background: var(--bad-soft); border-color: var(--bad-line); }
.btn.danger-solid, .btn.danger.sure { background: var(--bad); border-color: var(--bad); color: #fff; }
.btn:disabled { opacity: .45; cursor: default; }
.btn svg { width: 15px; height: 15px; }

input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]), select, textarea {
  height: 32px; padding: 0 10px; border: 1px solid var(--line); border-radius: var(--r);
  background: var(--surface); font-size: 13px; outline: none; transition: border-color .12s, box-shadow .12s;
}
select { padding-right: 26px; appearance: none; cursor: pointer;
  background: var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7384' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m7 10 5 5 5-5'/%3E%3C/svg%3E") no-repeat right 7px center / 14px; }
input:not([type=range]):focus, select:focus, textarea:focus { border-color: var(--accent); box-shadow: var(--ring); }
input[type=number] { font-variant-numeric: tabular-nums; }
input[type=checkbox] { accent-color: var(--accent); width: 15px; height: 15px; margin: 0; cursor: pointer; }
select.warn, input.warn { border-color: var(--warn-line); background-color: var(--warn-soft); }
.link { border: 0; background: none; color: var(--accent); cursor: pointer; padding: 0; font-size: inherit; font-weight: 500; }
.link:hover { text-decoration: underline; }
a { color: var(--accent); cursor: pointer; }
.x { border: 0; background: none; color: var(--faint); cursor: pointer; font-size: 16px; line-height: 1;
  width: 24px; height: 24px; border-radius: var(--r-sm); display: inline-flex; align-items: center; justify-content: center; }
.x svg { width: 15px; height: 15px; }
.x:hover { color: var(--bad); background: var(--bad-soft); }
.x:disabled { opacity: .3; cursor: default; background: none; color: var(--faint); }

.search { position: relative; display: flex; align-items: center; }
.search svg { position: absolute; left: 9px; color: var(--faint); pointer-events: none; width: 15px; height: 15px; }
.search input { width: 100%; padding-left: 30px !important; }

/* переключатель */
.switch { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer; user-select: none; }
.switch input { position: absolute; opacity: 0; pointer-events: none; }
.switch > span { width: 30px; height: 18px; border-radius: 99px; background: #d4d8e0; position: relative; transition: background .15s; flex: none; }
.switch > span::after { content: ""; position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%;
  background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.2); transition: transform .15s; }
.switch input:checked + span { background: var(--accent); }
.switch input:checked + span::after { transform: translateX(12px); }
.switch input:disabled + span { opacity: .45; }
.switch input:focus-visible + span { box-shadow: var(--ring); }

/* сегменты */
.seg { display: inline-flex; background: var(--hover); border-radius: var(--r); padding: 2px; gap: 2px; }
.seg button { border: 0; background: none; height: 26px; padding: 0 10px; border-radius: var(--r-sm); cursor: pointer;
  font-size: 12.5px; color: var(--muted); font-weight: 500; white-space: nowrap; }
.seg button:hover { color: var(--ink); }
.seg button.active { background: var(--surface); color: var(--ink); box-shadow: 0 1px 2px rgba(16,24,40,.1); }

/* метки */
.chip { display: inline-flex; align-items: center; height: 20px; padding: 0 8px; border-radius: 99px; font-size: 11.5px;
  font-weight: 500; background: var(--hover); color: var(--ink-2); vertical-align: middle; white-space: nowrap; }
.chip:empty { display: none; }
.chip.завуч { background: #eef0f3; color: #4b5261; }
.chip.генерацыя { background: var(--accent-soft); color: var(--accent); }
.chip.адпал { background: #fff1e0; color: #b45309; }
.chip.ручная { background: #f3ecff; color: #7c3aed; }
.badge, .nav-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px;
  padding: 0 5px; border-radius: 99px; font-size: 11px; font-weight: 600; background: var(--bad); color: #fff; }

/* ================================================================ боковая панель */
.sidebar { background: var(--surface); border-right: 1px solid var(--line); height: 100vh; display: flex; flex-direction: column; min-width: 0; }
.sb-brand { display: flex; align-items: center; gap: 10px; padding: 16px 16px 12px; }
.sb-logo { width: 32px; height: 32px; border-radius: 9px; background: var(--accent); color: #fff; display: grid; place-items: center; flex: none; }
.sb-logo svg { width: 18px; height: 18px; }
.sb-title { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
.sb-title b { font-size: 14.5px; }
.sb-title span { font-size: 12px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.sb-toggle { margin-left: auto; width: 28px; height: 28px; border: 0; background: none; border-radius: var(--r-sm); cursor: pointer;
  display: grid; place-items: center; color: var(--muted); flex: none; }
.sb-toggle:hover { background: var(--hover); color: var(--ink); }
.sb-toggle svg { transition: transform .2s; }
.sb-body { flex: 1; overflow-y: auto; padding: 4px 12px 12px; }
.sb-label { font-size: 11px; font-weight: 600; color: var(--faint); text-transform: uppercase; letter-spacing: .06em; padding: 8px 4px 6px; }
body { transition: grid-template-columns .2s; }
body.side-off { --side: 56px; }
body.side-off .sb-title, body.side-off .sb-body, body.side-off .sb-job { display: none; }
body.side-off .sb-brand { flex-direction: column; padding: 14px 0; gap: 10px; }
body.side-off .sb-toggle { margin: 0; }
body.side-off .sb-toggle svg { transform: rotate(180deg); }

/* верхняя панель: разделы и их страницы */
.stage { display: flex; flex-direction: column; min-width: 0; height: 100vh; }
.topbar { background: var(--surface); border-bottom: 1px solid var(--line); flex: none; padding: 0 28px; }
.secs { display: flex; gap: 4px; padding-top: 8px; }
.secs button[data-sec] { position: relative; border: 0; background: none; height: 34px; padding: 0 14px; font-size: 14px; font-weight: 500;
  color: var(--muted); cursor: pointer; border-radius: var(--r) var(--r) 0 0; }
.secs button[data-sec]:hover { color: var(--ink); background: var(--hover); }
.secs button[data-sec].active { color: var(--accent); font-weight: 600; }
.secs button[data-sec].active::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 2px; background: var(--accent); border-radius: 2px; }
.sec-dirty { display: inline-block; width: 7px; height: 7px; margin-left: 6px; border-radius: 50%; background: var(--warn); vertical-align: middle; }
.pages { border-top: 1px solid var(--line-2); margin: 0 -28px; padding: 0 28px; background: var(--surface-2); }
.nav-group { display: none; align-items: center; gap: 4px; padding: 6px 0; overflow-x: auto; }
.nav-group.active { display: flex; }
.pages a { display: flex; align-items: center; gap: 7px; height: 30px; padding: 0 11px; border-radius: var(--r); white-space: nowrap;
  color: var(--ink-2); font-size: 13.5px; cursor: pointer; text-decoration: none; user-select: none; }
.pages a svg { color: var(--faint); }
.pages a:hover { background: var(--hover); color: var(--ink); }
.pages a.active { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.pages a.active svg { color: var(--accent); }
.nav-count { font-size: 12px; color: var(--faint); font-weight: 500; }
.nav-badge { margin-left: 2px; }
.secs .nav-live { margin-left: 7px; display: inline-block; }
.nav-live { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 0 rgba(79,70,229,.5); animation: pulse 1.6s infinite; }
@keyframes pulse { 70% { box-shadow: 0 0 0 7px rgba(79,70,229,0); } 100% { box-shadow: 0 0 0 0 rgba(79,70,229,0); } }

.sb-job { margin: 0 12px 12px; padding: 10px 12px; border: 1px solid var(--accent-line); background: var(--accent-soft);
  border-radius: var(--r); font-size: 12.5px; cursor: pointer; color: var(--accent-2); }
.sb-job b { font-weight: 600; }
.sb-job .bar { background: rgba(79,70,229,.15); margin: 6px 0 0; }

/* меню вариантов */
.variant-menu { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); overflow: hidden; min-width: 0; }
.vlist { padding: 4px; border-bottom: 1px solid var(--line-2); }
.vitem { display: block; width: 100%; text-align: left; border: 0; background: none; padding: 7px 9px; cursor: pointer; border-radius: var(--r-sm); }
.vitem:hover:not(:disabled) { background: var(--hover); }
.vitem.cur { background: var(--accent-soft); cursor: default; }
.vitem:disabled { color: var(--ink); opacity: 1; }
.vitem .vname { display: block; font-weight: 600; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vitem .vmeta { display: block; font-size: 11.5px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vactions { display: flex; flex-direction: column; padding: 4px; }
.vactions button { border: 0; background: none; text-align: left; padding: 7px 9px; cursor: pointer; font-size: 13px; border-radius: var(--r-sm);
  white-space: normal; display: flex; align-items: center; gap: 8px; }
.vactions button svg { color: var(--muted); width: 15px; height: 15px; }
.vactions button:hover:not(:disabled) { background: var(--hover); }
.vactions button:disabled { opacity: .4; cursor: default; }
.vactions button.danger { color: var(--bad); }
.vactions button.danger svg { color: var(--bad); }
.vactions button.sure { background: var(--bad); color: #fff; }
.vactions button.sure svg { color: #fff; }
.vactions hr { border: 0; border-top: 1px solid var(--line-2); margin: 4px 0; }
.vform { padding: 12px; }
.vform .vtitle { font-weight: 600; margin-bottom: 8px; font-size: 13px; }
.vform input { width: 100%; max-width: 100%; }
.vform .vbtns { display: flex; gap: 6px; margin-top: 10px; }
.vform .vhint { font-size: 11.5px; color: var(--muted); margin-top: 8px; line-height: 1.4; }
.vfile { width: 100%; margin-bottom: 8px; font-size: 12px; }

/* ================================================================ страница */
#main { flex: 1; min-height: 0; overflow-y: auto; position: relative; min-width: 0; }
.page { min-height: 100%; display: flex; flex-direction: column; }
.page-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; flex-wrap: wrap;
  padding: 20px 28px 16px; background: var(--bg); position: sticky; top: 0; z-index: 6; border-bottom: 1px solid transparent; }
.page-head.stuck { border-bottom-color: var(--line); }
.ph-text { min-width: 0; }
.ph-kicker { font-size: 12px; color: var(--muted); font-weight: 500; margin-bottom: 2px; }
.page-head h1 { font-size: 21px; line-height: 1.3; word-break: break-word; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ph-sub { color: var(--muted); font-size: 13px; margin-top: 3px; }
.ph-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.page-body { padding: 0 28px 96px; }
.sec-title { font-size: 15px; margin: 24px 0 10px; }
.hint { color: var(--muted); font-size: 12.5px; margin: 10px 0; max-width: 900px; }

.toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.toolbar .tb-right { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.add-inline { display: flex; gap: 6px; align-items: center; }

/* карточки */
.card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 16px; box-shadow: var(--shadow); }
.card.flush { padding: 0; overflow: hidden; }
.card + .card { margin-top: 14px; }
.card h3 { font-size: 15px; }
.card-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.card-tools { display: flex; gap: 8px; align-items: center; padding: 10px; border-bottom: 1px solid var(--line-2); flex-wrap: wrap; }
.card-tools .search { flex: 1; min-width: 120px; }
.card-title { display: flex; gap: 12px; align-items: flex-start; margin-bottom: 14px; }
.card-title h3 { font-size: 15px; }
.card-title p { margin: 2px 0 0; color: var(--muted); font-size: 12.5px; }
.ct-icon { width: 34px; height: 34px; border-radius: 9px; display: grid; place-items: center; flex: none; }
.ct-icon.blue { background: var(--accent-soft); color: var(--accent); }
.ct-icon.orange { background: #fff1e0; color: #c2410c; }
.grid2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 16px; }
.form .field-row { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin: 0 0 10px; font-size: 13px; color: var(--ink-2); }
.form .field-row input, .form .field-row select { width: 220px; }
.form .switch { margin: 4px 0 2px; }
.form-foot { display: flex; justify-content: flex-end; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--line-2); }

/* предупреждения */
.alert { display: flex; gap: 10px; align-items: flex-start; padding: 10px 14px; border-radius: var(--r); font-size: 13px; margin-bottom: 14px;
  background: var(--bad-soft); color: #991b1b; border: 1px solid var(--bad-line); }
.alert.ok { background: var(--ok-soft); color: #166534; border-color: var(--ok-line); }
.alert.warn { background: var(--warn-soft); color: #92400e; border-color: var(--warn-line); }
.alert.info { background: var(--accent-soft); color: var(--accent-2); border-color: var(--accent-line); }
.alert svg { margin-top: 2px; }
.alert a { color: inherit; font-weight: 600; text-decoration: underline; }

/* пустое состояние */
.empty { text-align: center; padding: 48px 20px; color: var(--muted); }
.empty h3 { color: var(--ink); margin-bottom: 6px; font-size: 16px; }
.empty .btn { margin-top: 14px; }

/* нижняя панель несохранённых правок */
.savebar { position: sticky; bottom: 16px; z-index: 20; margin: -72px auto 16px; width: fit-content; max-width: calc(100% - 32px);
  display: flex; align-items: center; gap: 8px; padding: 8px 8px 8px 16px; background: #1b1f2a; color: #fff;
  border-radius: 12px; box-shadow: var(--shadow-pop); flex-wrap: wrap; }
.savebar .sb-msg { font-size: 13px; font-weight: 500; margin-right: 8px; display: flex; align-items: center; gap: 8px; }
.savebar .sb-msg i { width: 8px; height: 8px; border-radius: 50%; background: #f5a524; flex: none; }
.savebar .sb-msg small { color: #aab1c0; font-weight: 400; }
.savebar .btn { box-shadow: none; }
.savebar .btn:not(.primary) { background: transparent; border-color: #3a4152; color: #e6e8ee; }
.savebar .btn:not(.primary):hover { background: #2a303d; }
.savebar .btn.primary:disabled { background: #4b5263; border-color: #4b5263; opacity: 1; color: #aab1c0; }

/* вкладки */
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); margin: 4px 0 16px; }
.tabs button { border: 0; background: none; padding: 9px 12px; cursor: pointer; color: var(--muted); font-weight: 500; font-size: 13.5px;
  border-bottom: 2px solid transparent; margin-bottom: -1px; }
.tabs button:hover { color: var(--ink); }
.tabs button.active { color: var(--ink); border-bottom-color: var(--accent); }

/* таблицы */
table.t { border-collapse: separate; border-spacing: 0; width: 100%; background: var(--surface); }
.card > table.t, .table-card table.t { border-radius: var(--r-lg); }
table.t th, table.t td { padding: 8px 12px; border-bottom: 1px solid var(--line-2); text-align: right; font-variant-numeric: tabular-nums; }
table.t th:first-child, table.t td:first-child { text-align: left; }
table.t th { background: var(--surface-2); font-weight: 600; font-size: 11.5px; color: var(--muted); text-transform: uppercase;
  letter-spacing: .04em; white-space: nowrap; position: sticky; top: 0; z-index: 1; }
table.t tr:last-child td { border-bottom: 0; }
table.t tbody tr:hover td { background: #fafbfc; }
.table-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--shadow); overflow: hidden; }
.table-card + .table-card { margin-top: 14px; }
.school-t td { vertical-align: middle; text-align: left; }
.school-t th { text-align: left; }
.school-t td.num, .school-t th.num { text-align: right; white-space: nowrap; }
.school-t tr.open td { background: #f7f8ff !important; }
.school-t tr.detail td { background: #fbfbfe !important; padding: 4px 16px 16px; }
.school-t tr.grow td { background: var(--surface-2) !important; font-weight: 600; color: var(--ink-2); font-size: 12.5px; padding: 7px 12px; }

/* ================================================================ расписания: список + деталь */
.split { display: grid; grid-template-columns: 300px minmax(0, 1fr); min-height: 100vh; }
.listpane { border-right: 1px solid var(--line); background: var(--surface); display: flex; flex-direction: column;
  height: 100vh; position: sticky; top: 0; }
.lp-head { display: flex; align-items: center; justify-content: space-between; padding: 20px 16px 12px; }
.lp-head h2 { font-size: 17px; }
.listpane .search { margin: 0 12px 8px; }
.gene-list { flex: 1; overflow-y: auto; padding: 0 8px 16px; }
.detail { min-width: 0; }
.gene { position: relative; padding: 9px 10px 9px 12px; border-radius: var(--r); cursor: pointer; margin-bottom: 2px; border: 1px solid transparent; }
.gene:hover { background: var(--hover); }
.gene.active { background: var(--accent-soft); border-color: var(--accent-line); }
.gene .g-name { font-size: 13px; font-weight: 500; word-break: break-word; padding-right: 22px; line-height: 1.3; }
.gene .g-name .tree { color: var(--faint); }
.gene .g-meta { display: flex; gap: 8px; font-size: 12px; color: var(--muted); margin-top: 4px; align-items: center; flex-wrap: wrap; }
.gene .g-meta b { color: var(--ink); font-weight: 600; font-variant-numeric: tabular-nums; }
.gene .g-meta b.better { color: var(--ok); } .gene .g-meta b.worse { color: var(--bad); }
.gene .chip { height: 18px; font-size: 10.5px; padding: 0 6px; }
.gene.outdated { opacity: .5; }
.g-more { position: absolute; top: 6px; right: 6px; border: 0; background: none; color: var(--muted); width: 24px; height: 24px;
  border-radius: var(--r-sm); cursor: pointer; opacity: 0; display: grid; place-items: center; }
.gene:hover .g-more, .gene.active .g-more { opacity: 1; }
.g-more:hover { background: rgba(0,0,0,.06); color: var(--ink); }

.pop { position: fixed; z-index: 60; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg);
  box-shadow: var(--shadow-pop); min-width: 210px; padding: 4px; }
.pop .gp-title { padding: 6px 10px 6px; font-size: 11.5px; color: var(--muted); word-break: break-all; border-bottom: 1px solid var(--line-2); margin-bottom: 4px; }
.pop button { display: flex; align-items: center; gap: 8px; width: 100%; text-align: left; border: 0; background: none; padding: 7px 10px;
  cursor: pointer; font-size: 13px; border-radius: var(--r-sm); }
.pop button svg { color: var(--muted); width: 15px; height: 15px; }
.pop button:hover:not(:disabled) { background: var(--hover); }
.pop button.danger, .pop button.danger svg { color: var(--bad); }
.pop button:disabled { opacity: .35; cursor: default; }

/* показатели */
.kpis { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; margin: 0 0 16px; }
.kpi { background: var(--surface); border-radius: var(--r-lg); padding: 11px 14px; border: 1px solid var(--line); box-shadow: var(--shadow); }
.kpi .k-label { color: var(--muted); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kpi .k-val { font-size: 22px; font-weight: 600; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.kpi .k-delta { font-size: 12px; margin-left: 6px; font-weight: 600; padding: 1px 6px; border-radius: 99px; }
.kpi .k-delta.better { background: var(--ok-soft); } .kpi .k-delta.worse { background: var(--bad-soft); }
.kpi .k-ref { font-size: 11.5px; color: var(--faint); }

/* пилюли классов */
.pills { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.pills button { border: 1px solid var(--line); background: var(--surface); border-radius: var(--r-sm); height: 28px; padding: 0 9px;
  cursor: pointer; font-size: 12.5px; font-weight: 500; position: relative; display: inline-flex; align-items: center; gap: 5px; }
.pills button:hover { border-color: #cfd3da; }
.pills button.active { background: var(--ink); color: #fff; border-color: var(--ink); }
.pills button .dot { position: absolute; top: -3px; right: -3px; width: 8px; height: 8px; border-radius: 50%; background: var(--warn); border: 2px solid var(--bg); }
.pills button small { color: var(--faint); font-size: 11px; font-weight: 500; }
.pills button.active small { color: #b7bdc9; }
.pills button.bad { border-color: var(--bad-line); background: var(--bad-soft); color: #991b1b; }
.pills button.bad.active { background: var(--bad); border-color: var(--bad); color: #fff; }
.pills .sep { width: 8px; }

/* ================================================================ сетка класса */
.class-layout { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 16px; align-items: start; }
.grid { display: grid; gap: 4px; background: var(--surface); padding: 12px; border-radius: var(--r-lg); border: 1px solid var(--line); box-shadow: var(--shadow); }
.grid .h { font-size: 12px; font-weight: 600; color: var(--ink-2); text-align: center; padding: 2px 0 6px; }
.grid .h .score { font-weight: 400; display: block; font-size: 11px; color: var(--muted); }
.grid .pn { font-size: 12px; color: var(--ink-2); display: flex; align-items: center; justify-content: center; text-align: center; font-weight: 600; line-height: 1.15; }
.grid .pn small { display: block; font-size: 9.5px; color: var(--faint); font-weight: 400; }
.cell { min-height: 58px; border-radius: 7px; }
.cell.empty { background: var(--surface-2); border: 1px dashed var(--line); }
.cell.off { background: repeating-linear-gradient(45deg, transparent, transparent 5px, #f1f2f5 5px, #f1f2f5 10px); }
.lesson { height: 100%; min-height: 58px; border-radius: 7px; padding: 6px 8px; cursor: grab; border: 1px solid rgba(0,0,0,.05);
  position: relative; user-select: none; display: flex; flex-direction: column; justify-content: center; gap: 1px; transition: transform .08s; }
.lesson:hover { box-shadow: 0 2px 6px rgba(16,24,40,.08); }
.lesson .s { font-weight: 600; font-size: 12.5px; line-height: 1.2; }
.lesson .t { font-size: 11.5px; color: rgba(0,0,0,.6); line-height: 1.2; }
.lesson .r { position: absolute; top: 4px; right: 6px; left: 8px; text-align: right; font-size: 10px; line-height: 1.2; color: rgba(0,0,0,.45); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }   /* длинное «Мастерская (девочки) / Мастерская (мальчики)» не налезает на текст урока; полностью — в подсказке */
.lesson:has(.r) { padding-top: 17px; }
.lesson .r.foreign { color: var(--bad); font-weight: 600; }
.lesson.pinned { cursor: not-allowed; }
.lesson.pinned::after { content: ""; position: absolute; bottom: 4px; right: 5px; width: 11px; height: 11px; background: rgba(0,0,0,.5);      /* одноцветный замок */
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10V7a5 5 0 0 1 10 0v3h1a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2zm2 0h6V7a3 3 0 0 0-6 0z'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10V7a5 5 0 0 1 10 0v3h1a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2zm2 0h6V7a3 3 0 0 0-6 0z'/%3E%3C/svg%3E") center / contain no-repeat; }
.lesson.solo { box-shadow: inset 0 -3px 0 rgba(124, 58, 237, .45); }
.lesson.changed { outline: 2px dashed #d97706; outline-offset: -2px; }
.lesson.selected { outline: 2px solid var(--accent); outline-offset: 1px; }
.lesson.related { outline: 2px solid #a5b4fc; outline-offset: -2px; }
.lesson.dragging { opacity: .35; }
.lesson.drop-ok { outline: 3px solid var(--ok); outline-offset: -3px; }
.lesson.drop-bad { outline: 3px solid var(--bad); outline-offset: -3px; }
.adder { border: 1.5px dashed #d4d8df; border-radius: 7px; min-height: 26px; display: flex; align-items: center; justify-content: center; color: var(--faint); font-size: 15px; }
.adder.drop-ok { border-color: var(--ok); color: var(--ok); background: var(--ok-soft); }
.adder.drop-bad { border-color: var(--bad); color: var(--bad); background: var(--bad-soft); }
.stat-line { font-size: 12.5px; color: var(--muted); margin: 8px 2px; }
.stat-line b { color: var(--ink); }

/* неделя учителя */
.peek { position: sticky; top: 96px; }
.peek h4 { font-size: 14px; margin-bottom: 4px; }
.peek hr { border: 0; border-top: 1px solid var(--line-2); margin: 12px 0; }
.tweek { display: grid; gap: 2px; font-size: 11px; }
.tweek.big { gap: 4px; font-size: 12.5px; }
.tweek .h { text-align: center; color: var(--muted); font-weight: 600; }
.tweek .pn { color: var(--faint); text-align: center; }
.tweek .c { min-height: 20px; border-radius: 4px; text-align: center; padding: 2px; background: var(--surface-2); }
.tweek.big .c { min-height: 38px; padding: 5px 7px; text-align: left; border-radius: 6px; }
.tweek .c.busy { background: #e0e7ff; color: #3730a3; font-weight: 600; cursor: pointer; }
.tweek .c.extra { background: #eceef1; color: #5b6272; }
.tweek .c.gap { background: var(--bad-soft); }
.tweek .c.clash { background: var(--bad); color: #fff; }
.tweek .c.free-day { background: var(--ok-soft); }
.tweek .c.me { outline: 2px solid var(--accent); }
.tweek .c small { display: block; font-weight: 400; color: var(--muted); }

.teachers-layout { display: grid; grid-template-columns: 290px minmax(0, 1fr); gap: 16px; align-items: start; }
.teacher-list { max-height: calc(100vh - 300px); overflow-y: auto; }
.trow { display: flex; justify-content: space-between; align-items: center; padding: 7px 12px; cursor: pointer; font-size: 13px; border-left: 3px solid transparent; }
.trow:hover { background: var(--hover); }
.trow.active { background: var(--accent-soft); border-left-color: var(--accent); }
.trow .gv { font-variant-numeric: tabular-nums; }
.tgroup { padding: 8px 12px 5px; background: var(--surface-2); font-size: 11.5px; font-weight: 600; color: var(--ink-2); position: sticky; top: 0;
  text-transform: uppercase; letter-spacing: .03em; border-bottom: 1px solid var(--line-2); }
.tgroup span { color: var(--faint); font-weight: 500; }
.seg.tsort button { font-size: 12px; }

/* ================================================================ запуски */
.job { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 14px 16px; margin-bottom: 10px; box-shadow: var(--shadow); }
.job-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; }
.job-head .st { font-weight: 600; display: inline-flex; align-items: center; gap: 6px; }
.job-head .st::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.job-head .st.идёт { color: var(--accent); } .job-head .st.готово { color: var(--ok); }
.job-head .st.ошибка, .job-head .st.остановлено { color: var(--bad); }
.job-head .st.останавливается { color: var(--warn); }
.bar { height: 6px; background: var(--line-2); border-radius: 99px; overflow: hidden; margin: 10px 0 6px; }
.bar > div { height: 100%; background: var(--accent); border-radius: 99px; transition: width .5s; }
.job pre { background: #10131a; color: #cfd6e4; font: 11.5px/1.5 ui-monospace, Consolas, monospace; padding: 10px 12px; border-radius: var(--r);
  max-height: 240px; overflow: auto; margin: 8px 0 0; white-space: pre-wrap; }
.job details summary { cursor: pointer; font-size: 12.5px; margin-top: 8px; }
.job .links { margin-top: 6px; font-size: 13px; }
.job .links a { margin-right: 10px; font-weight: 500; }

/* ================================================================ данные школы */
.lrows { display: flex; flex-direction: column; gap: 8px; }
.lrow { display: flex; justify-content: space-between; gap: 12px; padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--r);
  background: var(--surface); flex-wrap: wrap; box-shadow: var(--shadow); }
.lrow:hover { border-color: #d3d7de; }
.groups { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
.grp { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.grp select:first-child { width: 240px; } .grp select:nth-child(2) { width: 200px; } .grp input { width: 130px; }
.lmeta { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; font-size: 13px; }
.lmeta label { display: inline-flex; align-items: center; gap: 6px; }
.lmeta input[type=number] { width: 60px; }
.chk { display: inline-flex; gap: 6px; align-items: center; font-size: 13px; cursor: pointer; }
.pins { display: flex; gap: 4px; align-items: center; flex-wrap: wrap; }
.pin { display: inline-flex; align-items: center; background: var(--accent-soft); color: var(--accent); border-radius: var(--r-sm); padding: 0 0 0 8px; font-size: 12px; font-weight: 600; height: 24px; }
.subj-sum { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 14px; }
.subj-sum span { font-size: 12px; color: var(--ink-2); background: var(--hover); border-radius: 99px; padding: 2px 9px; }
.subj-sum b { color: var(--ink); }
.mini-issues { background: var(--warn-soft); border: 1px solid var(--warn-line); border-radius: var(--r); padding: 8px 12px; font-size: 12.5px; margin: 0 0 12px; }
.tname { font-size: 13.5px; color: var(--ink); font-weight: 500; }
.day { border: 1px solid var(--line); background: var(--surface); border-radius: var(--r-sm); height: 24px; padding: 0 6px; font-size: 11px; font-weight: 600;
  cursor: pointer; color: var(--muted); margin-right: 2px; }
.day:hover { border-color: #cfd3da; color: var(--ink); }
.day.on { background: var(--ok); border-color: var(--ok); color: #fff; }
td.days { white-space: nowrap; }
.tdetail { display: grid; grid-template-columns: minmax(300px, 360px) 1fr; gap: 28px; padding: 8px 0 4px; }
.tdetail h4 { margin: 12px 0 4px; font-size: 13px; }
.tdetail h4:first-child { margin-top: 4px; }
.bgrid { display: grid; gap: 2px; font-size: 11px; }
.bgrid .h { text-align: center; color: var(--muted); font-weight: 600; }
.bgrid .pn { color: var(--faint); text-align: center; }
.bgrid .c { height: 20px; border: 1px solid var(--line); background: var(--surface); border-radius: 4px; cursor: pointer; padding: 0; font-size: 10px; overflow: hidden; }
.bgrid .c:hover { border-color: var(--bad); }
.bgrid .c.ban { background: var(--bad); border-color: var(--bad); }
.bgrid .c.extra { background: #eceef1; color: #5b6272; cursor: default; text-align: center; line-height: 18px; }
.kt { display: flex; flex-wrap: wrap; gap: 6px 12px; font-size: 12px; }
.kt label { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; color: var(--muted); }
.rooms { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 8px; }
.room { display: flex; align-items: center; gap: 10px; border: 1px solid var(--line); border-radius: var(--r); padding: 8px 8px 8px 12px; background: var(--surface); box-shadow: var(--shadow); }
.room b { font-variant-numeric: tabular-nums; }
.room span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.prof { display: flex; flex-wrap: wrap; gap: 4px 12px; }
.issue { display: flex; gap: 10px; align-items: baseline; padding: 9px 14px; cursor: pointer; font-size: 13px; border-bottom: 1px solid var(--line-2); }
.issue:last-child { border-bottom: 0; }
.issue:hover { background: var(--hover); }
.issue .lvl { font-size: 10.5px; color: var(--warn); background: var(--warn-soft); text-transform: uppercase; font-weight: 700; padding: 1px 7px; border-radius: 99px; flex: none; }
.issue.err .lvl { color: var(--bad); background: var(--bad-soft); }
.fresh, tr.fresh td { background: #fff8e6 !important; animation: fresh 2.4s ease-out; }
.lrow.fresh, .room.fresh { border-color: #f1c27d; }
@keyframes fresh { from { box-shadow: 0 0 0 3px #f5b94a; } to { box-shadow: 0 0 0 0 transparent; } }
td.ord { white-space: nowrap; }
td.gmembers { max-width: 520px; }

/* ================================================================ настройки */
.set-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--shadow); }
.set-card + .set-card { margin-top: 16px; }
.field { display: grid; grid-template-columns: minmax(200px, 300px) minmax(0, 1fr) 32px; gap: 20px; padding: 16px 20px; border-bottom: 1px solid var(--line-2); align-items: start; }
.field:last-child { border-bottom: 0; }
.field.wide { grid-template-columns: minmax(0, 1fr) 32px; }
.field.wide .f-label { grid-column: 1 / -1; }
.f-label b { display: block; font-size: 13.5px; font-weight: 600; }
.f-label span { display: block; font-size: 12.5px; color: var(--muted); margin-top: 3px; line-height: 1.45; }
.f-label .changed-mark { display: inline-block; font-size: 10.5px; font-weight: 600; color: var(--accent); background: var(--accent-soft); border-radius: 99px; padding: 0 7px; margin-left: 6px; vertical-align: 1px; }
.f-control { min-width: 0; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.f-control .unit { color: var(--muted); font-size: 13px; }
.f-reset { width: 28px; height: 28px; border: 0; background: none; border-radius: var(--r-sm); color: var(--faint); cursor: pointer; display: grid; place-items: center; }
.f-reset:hover { background: var(--hover); color: var(--accent); }
.daypick { display: inline-flex; gap: 4px; }
.daypick button { width: 42px; height: 32px; border-radius: var(--r); border: 1px solid var(--line); background: var(--surface); font-weight: 600; font-size: 12.5px; cursor: pointer; color: var(--muted); }
.daypick button.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.shift-rows { display: flex; flex-direction: column; gap: 8px; width: 100%; }
.shift-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 8px 10px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface-2); }
.shift-row .sr-n { width: 22px; height: 22px; border-radius: 50%; background: var(--accent-soft); color: var(--accent); font-size: 12px; font-weight: 700; display: grid; place-items: center; }
.shift-row label { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--ink-2); }
.timeline { width: 100%; margin-top: 6px; overflow-x: auto; }
.timeline table { border-collapse: separate; border-spacing: 3px; font-size: 11px; }
.timeline th { color: var(--faint); font-weight: 600; text-align: center; min-width: 30px; }
.timeline td.tl-name { color: var(--ink-2); font-weight: 600; padding-right: 8px; white-space: nowrap; font-size: 12px; }
.timeline td.tl { height: 22px; border-radius: 4px; background: var(--hover); }
.timeline td.tl.on { background: var(--accent); }
.timeline td.tl.opt { background: #a5b4fc; }
.timeline td.tl.zero { background: repeating-linear-gradient(45deg, #c7d2fe, #c7d2fe 3px, #e0e7ff 3px, #e0e7ff 6px); }
.tl-legend { display: flex; gap: 14px; font-size: 11.5px; color: var(--muted); margin-top: 6px; flex-wrap: wrap; }
.tl-legend i { display: inline-block; width: 12px; height: 12px; border-radius: 3px; vertical-align: -2px; margin-right: 4px; }
.bells { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 6px; width: 100%; }
.bells label { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--muted); font-weight: 600; }
.bells input { flex: 1; min-width: 0; }
.curve-rows { display: flex; flex-direction: column; gap: 6px; }
.curve-row { display: flex; align-items: center; gap: 10px; }
.curve-row b { width: 30px; font-size: 13px; }
.weights { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 8px 16px; width: 100%; }
.weights label { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: 13px; color: var(--ink-2); padding: 4px 0; border-bottom: 1px dashed var(--line-2); }
.weights label.changed { color: var(--accent); font-weight: 600; }
.weights input { width: 84px; }
.set-note { font-size: 12.5px; color: var(--muted); margin: 14px 2px 0; }

/* ================================================================ мастер-расписание (как Excel) */
.mwrap { overflow: auto; max-height: calc(100vh - 250px); background: #fff; border: 1px solid #c9ced8; border-radius: var(--r); margin-bottom: 16px; }
.mtable { border-collapse: separate; border-spacing: 0; font: 11.5px/1.2 Calibri, "Segoe UI", sans-serif; }
.mtable th, .mtable td { border-right: 1px solid #d6dae2; border-bottom: 1px solid #d6dae2; padding: 0; }
.mtable thead th { position: sticky; top: 0; z-index: 3; background: #eceff4; font-weight: 700; padding: 5px 4px; text-align: center; }
.mteachers thead tr:nth-child(2) th { top: 25px; }
.mtable .sd, .mtable .st { position: sticky; left: 0; z-index: 2; background: #f4f6f9; }
.mtable thead .sd, .mtable thead .st { z-index: 4; }
.mtable .sn { position: sticky; left: 30px; z-index: 2; background: #f4f6f9; text-align: center; color: #555; font-weight: 700; }
.mtable thead .sn { z-index: 4; }
.mtable .sd { width: 30px; min-width: 30px; max-width: 30px; }
.mtable .sn { width: 24px; min-width: 24px; max-width: 24px; }
.mclasses td.day { text-align: center; vertical-align: middle; font-weight: 700; border-bottom: 2px solid #8a93a5; }
.mclasses td.day span { writing-mode: vertical-rl; transform: rotate(180deg); letter-spacing: 2px; }
.mclasses tr.dstart td { border-top: 2px solid #8a93a5; }
.mclasses tr.sum td { background: #f7f8fb; color: #777; text-align: center; font-size: 10.5px; padding: 2px; border-bottom: 2px solid #8a93a5; }
.mclasses td { min-width: 86px; max-width: 110px; height: 34px; vertical-align: middle; }
.mclasses td.mc-empty { background: #fbfbfc; }
.mclasses td.mc-empty.off { background: repeating-linear-gradient(45deg, #f6f6f8, #f6f6f8 4px, #eceef2 4px, #eceef2 8px); }
.mc { height: 100%; min-height: 34px; padding: 2px 3px; cursor: grab; background: var(--c); display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; }
.mc .ms { font-weight: 700; font-size: 11.5px; }
.mc .mr { color: #444; font-size: 10.5px; margin-top: 1px; }
.mclasses td.changed .mc { box-shadow: inset 0 0 0 2px #d08a00; }
.mclasses td.hl .mc { box-shadow: inset 0 0 0 2px var(--accent); }
.mclasses td.clash .mc { background: #f8c9c9; }
.mclasses td.pinned .mc { cursor: not-allowed; }
.mclasses td.drop-ok .mc { box-shadow: inset 0 0 0 3px var(--ok); }
.mclasses td.drop-bad .mc { box-shadow: inset 0 0 0 3px var(--bad); opacity: .75; }
.mc.dragging { opacity: .3; }
.mteachers .st { min-width: 150px; padding: 3px 6px; white-space: nowrap; cursor: pointer; font-weight: 600; }
.mteachers .sg { position: sticky; left: 162px; z-index: 2; background: #f4f6f9; width: 32px; text-align: center; }
.mteachers thead .sg { z-index: 4; }
.mteachers th.dh { border-left: 2px solid #8a93a5; }
.mteachers th.pn { min-width: 30px; font-weight: 600; }
.mteachers th.kt, .mteachers td.ktc { background: #eef1f6; font-size: 10.5px; min-width: 38px; text-align: center; color: #555; }
.mteachers td.pc { text-align: center; height: 22px; padding: 1px 2px; white-space: nowrap; }
.mteachers td.dfirst, .mteachers th.dfirst { border-left: 2px solid #8a93a5; }
.mteachers td[data-key] { background: #e0e7ff; color: #1e3a8a; font-weight: 600; cursor: pointer; }
.mteachers td.extra { background: #e4e4e4; color: #555; }
.mteachers td.gap { background: #fde0e0; }
.mteachers td.free { background: #e6f5ec; }
.mteachers td.clash { background: var(--bad) !important; color: #fff !important; }
.mteachers tr.hlrow td { box-shadow: inset 0 2px 0 var(--accent), inset 0 -2px 0 var(--accent); }
.mteachers tr:hover td.st { background: #e6ebf5; }
.mteachers tr.grow td { background: #dde3ee; font-weight: 700; color: #2d3548; padding: 4px 6px; border-top: 2px solid #8a93a5; }
.mteachers tr.grow td.st { background: #dde3ee; }

/* ================================================================ окна и уведомления */
.modal-wrap { position: fixed; inset: 0; z-index: 100; background: rgba(15, 18, 28, .4); display: flex; align-items: center; justify-content: center; padding: 16px; }
.modal { background: var(--surface); border-radius: 14px; padding: 20px 20px 16px; width: min(460px, 100%); box-shadow: var(--shadow-pop); }
.modal-text { font-size: 14px; line-height: 1.55; margin-bottom: 14px; }
.modal-input { width: 100%; margin-bottom: 14px; }
.modal-btns { display: flex; justify-content: flex-end; gap: 8px; }
.toast { position: fixed; bottom: 24px; left: calc(50% + var(--side) / 2); transform: translateX(-50%); z-index: 120;
  background: #1b1f2a; color: #fff; padding: 10px 16px; border-radius: 10px; max-width: min(640px, calc(100vw - 32px));
  box-shadow: var(--shadow-pop); font-size: 13px; }
.toast.bad { background: #991b1b; }
.toast a { color: #c7d2fe; }

/* ================================================================ узкие экраны */
@media (max-width: 1280px) {
  .class-layout { grid-template-columns: 1fr; }
  .peek { position: static; }
}
@media (max-width: 1000px) {
  :root { --side: 208px; }
  .split { grid-template-columns: 240px minmax(0, 1fr); }
  .field { grid-template-columns: 1fr 32px; }
  .field .f-label { grid-column: 1 / -1; }
  .tdetail { grid-template-columns: 1fr; }
  .page-head, .page-body { padding-left: 18px; padding-right: 18px; }
}
@media (max-width: 760px) {
  body { grid-template-columns: 1fr; height: auto; overflow: visible; }
  .sidebar { height: auto; border-right: 0; border-bottom: 1px solid var(--line); }
  .stage { height: auto; }
  .topbar { padding-left: 16px; padding-right: 16px; }
  .pages { margin: 0 -16px; padding: 0 16px; }
  #main { overflow: visible; }
  .split { grid-template-columns: 1fr; }
  .listpane { position: static; height: auto; max-height: 320px; border-right: 0; border-bottom: 1px solid var(--line); }
  .teachers-layout { grid-template-columns: 1fr; }
  .toast { left: 50%; }
}

/* печать — окно «Печать» (print.js, print.css): свой документ в iframe */

/* страницы-формы не растягиваются на широком экране */
#page-settings .page-head, #page-settings .page-body,
#page-runs .page-head, #page-runs .page-body { max-width: 1160px; }
.grid2 > .card { margin-top: 0; display: flex; flex-direction: column; }
.grid2 > .card .form-foot { margin-top: auto; }
.grid2 > .card .switch { margin-bottom: 14px; }
.mcap { font-weight: 600; font-size: 13.5px; margin: 4px 2px 6px; }
.mcap span { color: var(--muted); font-weight: 400; }

/* выбор расписания — выпадающий список в заголовке (отдельной колонки нет) */
.gene-picker { position: relative; }
.gene-pick { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; border: 1px solid transparent; background: none;
  border-radius: var(--r); padding: 2px 8px 2px 6px; margin-left: -7px; cursor: pointer; text-align: left; }
.gene-pick:hover, .gene-pick.open { background: var(--surface); border-color: var(--line); box-shadow: var(--shadow); }
.gene-pick h1 { font-size: 21px; line-height: 1.3; word-break: break-word; }
.gene-pick .caret { width: 18px; height: 18px; color: var(--muted); transition: transform .15s; }
.gene-pick.open .caret { transform: rotate(180deg); }
.gene-panel { position: absolute; left: -7px; top: calc(100% + 6px); z-index: 45; width: min(440px, calc(100vw - 32px));
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--shadow-pop);
  padding: 10px 6px 6px; display: flex; flex-direction: column; max-height: min(560px, 70vh); }
.gene-panel .search { margin: 0 4px 8px; }
.gene-panel .gene-list { flex: 1; overflow-y: auto; padding: 0 2px; }
.gene-panel .empty { padding: 20px; }

/* что открыто и что считается */
.chip.live { background: #fff1e0; color: #b45309; margin-left: 2px; }
.open-mark { font-size: 10.5px; font-weight: 600; color: var(--accent); background: var(--accent-soft); border-radius: 99px; padding: 1px 7px; vertical-align: 1px; }
.sb-what { margin-top: 2px; font-size: 12px; color: var(--ink-2); word-break: break-word; line-height: 1.35; }
.sb-job span { color: var(--muted); }
.page-head .ph-text { flex: 1 1 auto; }
.gene-pick { min-width: 0; }
.gene-pick h1 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }

/* баланс приоритетов */
.balance { width: 100%; display: flex; flex-direction: column; gap: 4px; }
.bal-presets { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.bal-row { display: grid; grid-template-columns: minmax(180px, 280px) minmax(160px, 1fr) 92px; gap: 16px; align-items: center; padding: 8px 0; border-bottom: 1px dashed var(--line-2); }
.bal-label b { display: block; font-size: 13.5px; font-weight: 600; }
.bal-label span { display: block; font-size: 12px; color: var(--muted); }
.bal-val { font-size: 12.5px; font-weight: 600; color: var(--muted); text-align: right; font-variant-numeric: tabular-nums; }
.bal-val.up { color: var(--accent); } .bal-val.down { color: var(--warn); }
.bal-scale { display: grid; grid-template-columns: minmax(180px, 280px) minmax(160px, 1fr) 92px; gap: 16px; font-size: 11px; color: var(--faint); }
.bal-scale .bs { position: relative; height: 16px; }
.bal-scale .bs i { position: absolute; top: 0; font-style: normal; white-space: nowrap; }
input[type=range] { -webkit-appearance: none; appearance: none; width: 100%; height: 6px; border-radius: 99px; outline: none; cursor: pointer;
  background: linear-gradient(to right, var(--accent) 0 var(--p, 33%), #dfe2e8 var(--p, 33%) 100%); }
input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 18px; height: 18px; border-radius: 50%; background: #fff;
  border: 2px solid var(--accent); box-shadow: 0 1px 3px rgba(0,0,0,.2); }
input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: #fff; border: 2px solid var(--accent); }
input[type=range]:focus-visible::-webkit-slider-thumb { box-shadow: var(--ring); }
.run-balance { font-size: 12.5px; color: var(--muted); margin: 0 0 4px; }
.run-balance b { color: var(--ink-2); font-weight: 600; }

/* запуск: один выбор из трёх, дальше только нужные шаги */
.runs-layout { display: grid; grid-template-columns: minmax(380px, 540px) minmax(0, 1fr); gap: 24px; align-items: start; }
.run-card { margin-top: 0; position: sticky; top: 0; }
.runs-history .sec-title { margin-top: 2px; }
@media (max-width: 1100px) { .runs-layout { grid-template-columns: minmax(0, 1fr); } .run-card { position: static; } }
.mode-pick { display: grid; grid-template-columns: 1fr; gap: 8px; margin-bottom: 18px; }
.mode { position: relative; display: flex; flex-direction: column; gap: 4px; padding: 12px 14px; border: 1px solid var(--line);
  border-radius: var(--r-lg); cursor: pointer; background: var(--surface); }
.mode input { position: absolute; opacity: 0; pointer-events: none; }
.mode b { font-size: 14px; }
.mode span { font-size: 12px; color: var(--muted); line-height: 1.35; }
.mode:hover { border-color: var(--accent-line); }
.mode.on { border-color: var(--accent); background: var(--accent-soft); box-shadow: 0 0 0 1px var(--accent); }
.run-sec { padding: 14px 0; border-top: 1px solid var(--line-2); }
.rs-title { display: flex; align-items: baseline; gap: 10px; margin-bottom: 12px; }
.rs-title h3 { font-size: 14.5px; }
.rs-title p { margin: 0; color: var(--muted); font-size: 12.5px; }
.rs-num { width: 20px; height: 20px; border-radius: 50%; background: var(--accent-soft); color: var(--accent); font-size: 12px; font-weight: 600;
  display: inline-grid; place-items: center; flex: none; align-self: center; }
.hint-row { color: var(--muted); font-size: 12.5px; margin: 0 0 10px; }
.run-more { border-top: 1px solid var(--line-2); padding-top: 12px; }
.run-more summary { cursor: pointer; color: var(--muted); font-size: 13px; margin-bottom: 10px; }
.run-card .form-foot { align-items: center; justify-content: space-between; gap: 12px; }
@media (max-width: 760px) { .mode-pick { grid-template-columns: 1fr; } }

/* удаление в строке таблицы, ссылка на нагрузку класса, пояснение на «Нагрузке» */
.school-t td.del { width: 44px; text-align: center; }
.school-t td.del .x { width: 28px; height: 28px; display: inline-grid; place-items: center; border-radius: var(--r-sm); }
.school-t td.del .x svg { width: 15px; height: 15px; }
.cls-load { cursor: pointer; color: var(--ink-2); white-space: nowrap; }
.cls-load:hover { color: var(--accent); }
.howto { background: var(--accent-soft); border: 1px solid var(--accent-line); border-radius: var(--r); padding: 10px 14px;
  font-size: 13px; color: var(--ink-2); line-height: 1.5; margin: 0 0 14px; }
.pin svg { width: 12px; height: 12px; margin-right: 4px; }
.pin-add { display: inline-flex; align-items: center; gap: 5px; }
.pin-add svg { width: 14px; height: 14px; }

/* выбор времени для закрепления */
.pin-box { width: min(560px, 100%); }
.pgrid { display: grid; gap: 4px; margin-bottom: 12px; }
.pgrid .h { text-align: center; font-size: 12px; font-weight: 600; color: var(--muted); padding: 2px 0; }
.pgrid .pn { display: flex; flex-direction: column; justify-content: center; font-size: 12.5px; font-weight: 600; color: var(--ink-2); line-height: 1.1; }
.pgrid .pn small { font-weight: 400; color: var(--faint); font-size: 10.5px; }
.pk { height: 30px; border-radius: var(--r-sm); border: 1px solid var(--line); background: var(--surface); display: grid; place-items: center;
  font-size: 13px; padding: 0; }
.pk.off { border-color: transparent; background: transparent; }
.pk.free { cursor: pointer; }
.pk.free:hover { background: var(--accent-soft); border-color: var(--accent); }
.pk.warn { cursor: pointer; background: var(--warn-soft); border-color: #f1c27d; color: var(--warn); font-weight: 700; }
.pk.warn:hover { border-color: var(--warn); }
.pk.bad { background: var(--bad-soft); border-color: transparent; color: var(--bad); cursor: not-allowed; }
.pk.mine { background: var(--accent); border-color: var(--accent); color: #fff; cursor: pointer; }
.pk.mine svg { width: 14px; height: 14px; }
.plegend { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12px; color: var(--muted); margin-bottom: 14px; }
.plegend span { display: inline-flex; align-items: center; gap: 5px; }
.lg { width: 12px; height: 12px; border-radius: 3px; border: 1px solid var(--line); display: inline-block; }
.lg.mine { background: var(--accent); border-color: var(--accent); } .lg.bad { background: var(--bad-soft); }
.lg.warn { background: var(--warn-soft); border-color: #f1c27d; }

/* занятость: список учителей и большая сетка недели */
.busy-layout { display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: 16px; align-items: start; }
.busy-layout > .card { margin-top: 0; }
.busy-teachers { max-height: calc(100vh - 260px); overflow-y: auto; padding: 4px; }
.brow { display: flex; align-items: center; justify-content: space-between; width: 100%; border: 0; background: none; text-align: left;
  padding: 7px 10px; border-radius: var(--r-sm); cursor: pointer; font-size: 13.5px; color: var(--ink-2); }
.brow:hover { background: var(--hover); }
.brow.active { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.brow b { font-size: 12px; background: var(--hover); color: var(--muted); border-radius: 99px; padding: 0 7px; font-weight: 600; }
.brow.active b { background: #fff; color: var(--accent); }
.bgrid.big { display: grid; gap: 5px; }
.bgrid.big .h { text-align: center; font-size: 12.5px; font-weight: 600; color: var(--muted); }
.bgrid.big .pn { display: flex; flex-direction: column; justify-content: center; font-size: 13px; font-weight: 600; color: var(--ink-2); line-height: 1.15; }
.bgrid.big .pn small { font-weight: 400; color: var(--faint); font-size: 10.5px; }
.bc { min-height: 46px; border: 1px dashed var(--line); background: var(--surface); border-radius: var(--r); cursor: pointer; padding: 4px 6px;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; font-size: 12.5px; }
.bc:hover { border-style: solid; border-color: var(--accent); background: var(--accent-soft); }
.bc.on { border: 1px solid var(--accent-line); background: var(--accent-soft); color: var(--accent-2); }
.bc.on small { color: var(--muted); font-size: 11px; }
.bc.ban { background: repeating-linear-gradient(45deg, var(--hover), var(--hover) 5px, #fff 5px, #fff 10px); border-style: solid; }
@media (max-width: 900px) { .busy-layout { grid-template-columns: minmax(0, 1fr); } .busy-teachers { max-height: 220px; } }
.mbusy td.bcell { cursor: pointer; min-width: 30px; }
.mbusy td.bcell:hover { outline: 2px solid var(--accent); outline-offset: -2px; }
.mbusy td.ban { background: repeating-linear-gradient(45deg, #f3f4f6, #f3f4f6 3px, #fff 3px, #fff 6px); }
.mbusy td.extra { font-size: 10.5px; overflow: hidden; }

/* поля в окнах: подпись над полем, поле на всю ширину */
.mfield { display: flex; flex-direction: column; gap: 6px; margin: 0 0 14px; }
.mfield > span { font-size: 12.5px; font-weight: 500; color: var(--muted); }
.mfield input, .mfield select { width: 100%; max-width: none; }
.bgroup { font-size: 11px; font-weight: 600; color: var(--faint); text-transform: uppercase; letter-spacing: .05em; padding: 10px 10px 4px; }

/* кабинет урока: кнопка в строке нагрузки и выбор кабинетов */
.room-pick { height: 32px; min-width: 130px; max-width: 200px; padding: 0 10px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface);
  color: var(--faint); font-size: 13px; text-align: left; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.room-pick.set { color: var(--ink); }
.room-pick:hover { border-color: var(--accent); }
.rgroup { font-size: 11px; font-weight: 600; color: var(--faint); text-transform: uppercase; letter-spacing: .05em; margin: 4px 0 6px; }
.rchips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; max-height: 190px; overflow-y: auto; }
.rchip { border: 1px solid var(--line); background: var(--surface); border-radius: var(--r); padding: 4px 10px; font-size: 13px; cursor: pointer; font-variant-numeric: tabular-nums; }
.rchip small { color: var(--faint); margin-left: 5px; font-size: 11px; }
.rchip:hover { border-color: var(--accent); }
.rchip.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.rchip.on small { color: #dcd9ff; }
.room-cap { display: flex; align-items: center; gap: 5px; font-size: 12px; color: var(--muted); }
.room-cap input { height: 26px; padding: 0 6px; text-align: right; }
.room { flex-wrap: wrap; }
.rooms { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
.room > b { order: 0; }
.room .room-cap { order: 1; margin-left: auto; }
.room > .x { order: 2; }
.room > .room-owners { order: 3; flex: 1 1 100%; }
.room-owners { border: 0; background: none; padding: 2px 0; text-align: left; font-size: 12px; color: var(--muted); cursor: pointer;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.room-owners:hover { color: var(--accent); }
.room-owners.none { color: var(--faint); font-style: italic; }
.modal.wide { width: min(620px, 100%); }
.chip-body { max-height: 52vh; overflow-y: auto; margin-bottom: 8px; }
.chip-body .rchips { max-height: none; }
td .room-pick { min-width: 110px; max-width: 170px; }

/* показатели: карточки кликабельны, у таблицы метрик — пояснения под названием */
.kpi[data-metric] { cursor: pointer; transition: border-color .12s, box-shadow .12s; }
.kpi[data-metric]:hover { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.metrics-t td.mname { text-align: left; width: 100%; padding: 12px 16px; }
.metrics-t td.mname b { font-size: 14px; }
.metrics-t td.mname p { margin: 4px 0 0; font-size: 13px; color: var(--ink-2); line-height: 1.5; max-width: 74ch; }
.metrics-t td.mname p.mhow { color: var(--muted); font-size: 12.5px; }
.metrics-t td.mname p.mhow span { color: var(--ink-2); font-weight: 600; }
.metrics-t td.num { font-size: 18px; font-weight: 600; vertical-align: top; padding-top: 12px; white-space: nowrap; }
.metrics-t tr.flash td { animation: mflash 2s ease-out; }
@keyframes mflash { from { background: var(--accent-soft); } to { background: transparent; } }

/* симуляция дня */
.sim-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.sim-bar.sub { gap: 8px; }
.sim-clock { font-size: 22px; font-weight: 600; font-variant-numeric: tabular-nums; min-width: 64px; }
#simTime { flex: 1 1 260px; min-width: 200px; }
.sim-bells { display: flex; gap: 3px; flex-wrap: wrap; }
.sim-bells button { border: 1px solid var(--line); background: var(--surface); border-radius: var(--r-sm); min-width: 26px; height: 24px;
  font-size: 12px; cursor: pointer; color: var(--ink-2); }
.sim-bells button:hover { border-color: var(--accent); color: var(--accent); }
.sim-status { margin: 0 0 8px; font-size: 13px; color: var(--ink-2); }
.sim-wrap { overflow: auto; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface-2); max-height: calc(100vh - 290px); }
.sim-plan { position: relative; }
.sim-floor { position: absolute; left: 6px; width: 40px; display: flex; align-items: center; font-size: 11.5px; font-weight: 600; color: var(--muted); line-height: 1.2; }
.sim-corr { position: absolute; background: var(--hover); border-radius: 4px; }
.sim-stair { position: absolute; width: 12px; border-radius: 4px;
  background: repeating-linear-gradient(0deg, var(--line), var(--line) 2px, transparent 2px, transparent 6px); }
.sim-room { position: absolute; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); padding: 4px 6px; overflow: hidden; }
.sim-room b { display: block; font-size: 12px; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sim-room .sr-now { display: block; font-size: 10.5px; line-height: 1.25; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sim-room.busy { border-color: var(--accent-line); background: var(--accent-soft); }
.sim-room.busy .sr-now { color: var(--accent-2); }
.sim-room.zone { background: var(--surface-2); border-style: dashed; }
.sim-a { position: absolute; left: 0; top: 0; height: 20px; min-width: 20px; padding: 0 3px; display: grid; place-items: center; font-size: 9.5px;
  font-weight: 700; line-height: 1; cursor: pointer; will-change: transform; user-select: none; }
.sim-a.cl { border-radius: 10px; background: var(--c); color: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.25); }
.sim-a.cl i { font-style: normal; font-size: 8px; opacity: .85; margin-left: 1px; }
.sim-a.t { border-radius: 4px; background: var(--ink); color: var(--bg); min-width: 18px; height: 18px; font-size: 9px; }
.sim-a.moving { z-index: 2; }
#simBody.following .sim-a:not(.hl) { opacity: .22; }
.sim-a.hl { z-index: 3; box-shadow: 0 0 0 2px var(--surface), 0 0 0 4px var(--accent); }

/* карточка кабинета: название и вид, чей, поля */
.room { flex-direction: column; align-items: stretch; gap: 6px; padding: 10px 10px 10px 12px; }
.room-top { display: flex; align-items: center; gap: 8px; }
.room-top .x { margin-left: auto; }
.room-kind { font-size: 11px; font-weight: 600; color: var(--accent); background: var(--accent-soft); border-radius: 99px; padding: 1px 8px; white-space: nowrap; }
.room .room-owners { order: 0; flex: none; }
.room-fields { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12px; color: var(--muted); }
.room-fields label { display: flex; align-items: center; gap: 5px; }
.room-fields input { height: 26px; padding: 0 6px; text-align: right; width: 56px; }
.room-fields select { height: 26px; padding: 0 6px; font-size: 12px; margin-left: auto; max-width: 130px; }

/* таблица кабинетов */
table.rooms-t th, table.rooms-t td { text-align: left; }
table.rooms-t td.del { text-align: center; }
.rooms-t td:nth-child(1) { width: 190px; }
.rooms-t td:nth-child(2) select { width: 170px; }
.rooms-t td:nth-child(3), .rooms-t td:nth-child(4) { width: 90px; }
.rooms-t .room-owners { max-width: 420px; }
.sim-a.cl i { display: none; }
.sim-a.cl.showsub i { display: inline; }

/* «Мастер → Учителя»: ровная сетка, длинное обрезается */
.mteachers.mfixed { table-layout: fixed; }
.mteachers.mfixed .st { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.mteachers.mfixed th.pn, .mteachers.mfixed td.pc { min-width: 0; padding: 1px 2px; overflow: hidden; }
.mteachers.mfixed td.pc { height: 30px; line-height: 1.05; vertical-align: middle; }
.mteachers.mfixed td.pc b { display: block; font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mteachers.mfixed td.pc small { display: block; font-size: 9.5px; font-weight: 400; opacity: .75; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mteachers.mfixed th.kt, .mteachers.mfixed td.ktc { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mteachers.mfixed .sg { left: 170px; }
.time-presets { display: flex; gap: 6px; flex-wrap: wrap; margin: -2px 0 8px; justify-content: flex-end; }
.time-presets button { border: 1px solid var(--line); background: var(--surface); border-radius: 99px; padding: 3px 10px; font-size: 12px; cursor: pointer; color: var(--ink-2); }
.time-presets button:hover { border-color: var(--accent); color: var(--accent); }
.star { color: #b91c1c; font-weight: 800; margin-left: 1px; }
.mteachers.mfixed td.pc .star { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; margin: 0; font-size: 16px; line-height: 1; pointer-events: none; }
.mteachers.mfixed td.pc { position: relative; }
.mteachers.mfixed .kr { position: sticky; left: 170px; z-index: 2; background: #f4f6f9; font-size: 10.5px; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mteachers.mfixed thead .kr { z-index: 4; }
.mteachers.mfixed.wroom .sg { left: 234px; }

/* --- страница «Правила» */
.rule-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 12px; margin-bottom: 4px; }
.rule-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 12px 14px; display: flex; flex-direction: column; gap: 6px; }
.rule-card.off { opacity: .65; }
.rc-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.rc-about { margin: 0; font-size: 13px; color: var(--ink-2); flex: 1; }
.rc-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 10px; min-height: 30px; }
.rc-control { display: flex; align-items: center; gap: 8px; }
.chip.ok { background: var(--ok-soft); color: var(--ok); }
.chip.warn { background: var(--warn-soft); color: var(--warn); }
.soft-t td .hint { display: block; margin: 2px 0 0; font-weight: 400; }
.soft-t tr.off td { opacity: .55; }
.soft-t td.num { text-align: right; white-space: nowrap; }
.soft-t .changed input { border-color: var(--accent); }
.cr-add { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.crule-modal .cf { margin-bottom: 14px; }
.crule-modal .cf > label { display: block; font-weight: 600; font-size: 13px; margin-bottom: 6px; }
.crule-modal .cf select { width: 100%; }
.crule-modal .rchips { max-height: 160px; overflow: auto; }

/* --- единая страница «Правила» */
.rules-nav { position: sticky; top: 0; z-index: 5; display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 0 10px; margin: -6px 0 6px; background: var(--bg); }
.rules-nav a { cursor: pointer; padding: 4px 12px; border-radius: 99px; border: 1px solid var(--line); background: var(--surface); font-size: 13px; color: var(--ink-2); }
.rules-nav a:hover { border-color: var(--accent); color: var(--accent); }
.rsec { margin-bottom: 28px; scroll-margin-top: 56px; }
.sub-title { margin: 14px 0 6px; font-size: 13px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.wish { margin-bottom: 4px; }
.wish-more { margin: 2px 0 10px 0; }
.wish-more summary { cursor: pointer; font-size: 12.5px; color: var(--muted); padding: 2px 0; }
.wish-more .table-card { margin-top: 6px; }
.crule-modal .cgrp { margin-bottom: 8px; }
.crule-modal .cgl { font-size: 12px; color: var(--muted); margin: 4px 0; }
.crule-modal .cfm { min-height: 18px; font-size: 12.5px; }
.crule-modal .rchips { max-height: none; }
.crule-modal .modal { max-height: 90vh; overflow: auto; }

/* --- замены */
.subs-setup { margin-bottom: 16px; padding: 14px 16px; }
.ss-row { display: flex; align-items: center; gap: 14px; margin-bottom: 12px; }
.ss-row.top { align-items: flex-start; }
.ss-row > label { width: 90px; flex: none; font-weight: 600; font-size: 13px; color: var(--ink-2); }
.ss-absent { flex: 1; display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.abs-row { display: flex; align-items: center; gap: 8px; padding: 4px 8px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface-2); }
.abs-picker { width: 100%; margin-top: 6px; padding: 10px; border: 1px solid var(--line); border-radius: var(--r); max-height: 320px; overflow: auto; background: var(--surface); }
.abs-picker .cgrp { margin-bottom: 8px; }
.abs-picker .cgl { font-size: 12px; color: var(--muted); margin: 4px 0; }
.ss-opts { margin: 4px 0 12px; }
.ss-opts > summary { cursor: pointer; font-weight: 600; font-size: 13px; color: var(--ink-2); padding: 4px 0; }
.opts-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 24px; margin-top: 8px; }
.opts-grid h4 { margin: 0 0 8px; font-size: 12px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.opts-grid .switch { display: flex; margin-bottom: 8px; }
.opt-nums { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
.opt-num { font-size: 13px; color: var(--ink-2); }
.ss-foot { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.sub-sum { display: flex; flex-wrap: wrap; gap: 6px 18px; margin: 4px 0 12px; font-size: 13.5px; }
.sub-actions { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.subs-t td { vertical-align: middle; }
.subs-t td.num small { display: block; color: var(--muted); font-size: 11px; }
.subs-t tr.open td { background: var(--bad-soft); }
.sub-sel { max-width: 340px; width: 100%; }
.subs-t .why { font-size: 12px; }
.tg { display: inline-block; margin: 1px 3px 1px 0; padding: 1px 8px; border-radius: 99px; font-size: 11.5px; background: var(--hover); color: var(--ink-2); }
.tg.good { background: var(--ok-soft); color: var(--ok); }
.tg.bad { background: var(--warn-soft); color: var(--warn); }
.sub-h { margin: 22px 0 8px; font-size: 14px; }
.alert.ok { background: var(--ok-soft); border-color: var(--ok-line); }
@media (max-width: 800px) { .ss-row { flex-direction: column; align-items: flex-start; } }
.subs-t th, .subs-t td { text-align: left; }
.subs-t th.num, .subs-t td.num { text-align: center; width: 84px; }
.subs-t td.why { text-align: left; }
.abs-row select { width: auto; }
/* --- замены: таблица и выбор заменяющего */
.abs-row input.w200 { width: 200px; }
.rep-cell { position: relative; min-width: 240px; }
.rep-btn { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; padding: 4px 10px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); color: var(--ink); font: inherit; font-weight: 600; cursor: pointer; text-align: left; }
.rep-btn:hover { border-color: var(--accent); }
.rep-btn.none { color: var(--bad); border-color: var(--bad-line); }
.rep-btn i { font-style: normal; color: var(--muted); font-size: 11px; }
.rep-un { margin-left: 8px; font-size: 12px; }
.rep-why { margin-top: 3px; font-size: 12px; color: var(--muted); }
.rep-pop { position: absolute; z-index: 20; top: 34px; left: 0; width: 380px; max-height: 340px; overflow: auto; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); box-shadow: var(--shadow-pop); padding: 4px; }
.pop-it { display: block; width: 100%; text-align: left; padding: 7px 10px; border: 0; background: none; border-radius: var(--r-sm); cursor: pointer; color: var(--ink); font: inherit; }
.pop-it:hover { background: var(--hover); }
.pop-it.cur { background: var(--accent-soft); }
.pop-it small { display: block; color: var(--muted); font-size: 12px; margin-top: 1px; }
.sub-more { margin-top: 18px; }
.sub-more > summary { cursor: pointer; font-weight: 600; font-size: 13px; color: var(--ink-2); margin-bottom: 8px; }
.merge-subj { max-height: 140px; overflow: auto; margin: 6px 0 2px; }
.subs-t th.num, .subs-t td.num { width: 84px; }
.sheet-box { width: min(980px, 96vw); height: 92vh; display: flex; flex-direction: column; gap: 10px; padding: 14px; }
.sheet-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.sheet-frame { flex: 1; width: 100%; border: 1px solid var(--line); border-radius: var(--r); background: #fff; }
.field .f-control input.w-text { width: 100%; max-width: 760px; }

/* --- живая статистика запуска */
.jstats { display: flex; flex-wrap: wrap; gap: 6px 10px; margin-top: 8px; }
.jstats .js { background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--r); padding: 5px 10px; min-width: 96px; }
.jstats .js span { display: block; font-size: 11px; color: var(--muted); }
.jstats .js b { font-size: 14px; }
.wish-foot { margin: 6px 0 2px; }
.bal-presets .btn { margin-left: auto; }
.f-reset:disabled { opacity: .3; cursor: default; }
.f-reset:disabled:hover { background: none; color: var(--faint); }
.soft-t .f-reset:not(:disabled) { color: var(--accent); }
.wish-foot .btn:disabled, .bal-presets .btn:disabled { opacity: .4; cursor: default; }
.nm-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 4px 0; }
.mr-row { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; margin: 8px 0; padding: 8px; border: 1px solid var(--line); border-radius: var(--r); }
.mr-col { display: flex; flex-direction: column; gap: 4px; min-width: 180px; }
.hist-bar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; justify-content: space-between; margin: 8px 0; }

/* --- замены: настройка (контейнер .subs-setup из трёх разделов) */
.subs-setup { padding: 0; overflow: visible; }
.subs-setup .ss-sec { padding: 14px 16px; border-bottom: 1px solid var(--line); }
.ss-h { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.ss-h h3, .ss-when h3 { margin: 0; font-size: 14px; }
.ss-h .cnt { margin-left: 6px; padding: 1px 8px; border-radius: 99px; font-size: 12px; font-weight: 600; background: var(--hover); color: var(--ink-2); }
.ss-tools { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.ss-tools select { width: auto; font-size: 13px; }
.ss-when { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.abs-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(440px, 1fr)); gap: 8px; }
.abs-card { padding: 6px 10px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface-2); }
.abs-card.open { border-color: var(--accent); }
.ac-main { display: flex; align-items: center; gap: 8px; }
.ac-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ac-main select { width: auto; max-width: 150px; }
.ac-main input.w150 { width: 130px; }
.ac-sum { margin-top: 4px; }
.ac-wrap { display: grid; grid-template-rows: 1fr; transition: grid-template-rows .19s ease, opacity .19s ease; }
.ac-wrap > .ac-more { min-height: 0; overflow: hidden; }
.ac-in { display: grid; grid-template-columns: 80px 1fr; gap: 8px 10px; align-items: center; margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--line); font-size: 13px; }
.abs-card.opening .ac-wrap { animation: acOpen .2s ease-out; }
.abs-card.opening .ac-chev { animation: acChev .2s ease-out; }
.abs-card.closing .ac-wrap { grid-template-rows: 0fr; opacity: 0; }
.abs-card.closing .ac-chev { transform: rotate(45deg); margin-bottom: 3px; }
@keyframes acOpen { from { grid-template-rows: 0fr; opacity: 0; } to { grid-template-rows: 1fr; opacity: 1; } }
@keyframes acChev { from { transform: rotate(45deg); margin-bottom: 3px; } to { transform: rotate(-135deg); margin-bottom: -3px; } }
@media (prefers-reduced-motion: reduce) { .ac-wrap, .ac-chev { animation: none !important; transition: none !important; } }
.ac-in .l { color: var(--muted); }
.btn.ghost { background: none; border-color: transparent; color: var(--muted); }
.btn.ghost:hover { color: var(--ink); }
.btn.ghost.has { color: var(--accent); }
.opt-tabs { display: flex; gap: 4px; margin: 6px 0 14px; border-bottom: 1px solid var(--line); }
.opt-tabs button { background: none; border: 0; border-bottom: 2px solid transparent; margin-bottom: -1px; padding: 6px 12px; font: inherit; font-size: 13px; color: var(--muted); cursor: pointer; }
.opt-tabs button:hover { color: var(--ink); }
.opt-tabs button.on { color: var(--ink); font-weight: 600; border-bottom-color: var(--accent); }
.opts-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); gap: 28px; }
.opt-block { margin-bottom: 20px; }
.opt-block:last-child { margin-bottom: 4px; }
.opt-block h4 { margin: 0 0 8px; font-size: 12px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.subs-setup .ss-foot { position: sticky; bottom: 0; z-index: 5; padding: 10px 16px; background: var(--surface); border-radius: 0 0 12px 12px; box-shadow: 0 -6px 12px -8px rgba(0, 0, 0, .35); }
.abs-list { align-items: start; }

.ac-main[data-abs-toggle], .ac-sum[data-abs-toggle] { cursor: pointer; }
.ac-chev { flex: none; width: 7px; height: 7px; margin: 0 4px 3px; border-right: 2px solid var(--faint); border-bottom: 2px solid var(--faint); transform: rotate(45deg); transition: transform .15s; }
.ac-chev.up { transform: rotate(-135deg); margin-bottom: -3px; }
.ac-chev.has { border-color: var(--accent); }
.abs-card:hover .ac-chev { border-color: var(--ink-2); }
.abs-card:hover .ac-chev.has { border-color: var(--accent); }

/* ---------- Починка расписания */
.rp-slide { margin: 4px 0 12px; }
.rp-scale { display: flex; justify-content: space-between; font-size: 12px; color: var(--faint); margin: 6px 0; }
.rp-card { margin-bottom: 12px; }
.rp-head { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; margin-bottom: 6px; }
.rp-sum { font-size: 13px; text-align: right; color: var(--muted); }
.rp-cl { display: grid; grid-template-columns: 52px 1fr; gap: 8px; padding: 5px 0; border-top: 1px solid var(--line); }
.rp-chg { display: flex; justify-content: space-between; gap: 12px; font-size: 13px; padding: 2px 0; }
.rp-move { white-space: nowrap; font-variant-numeric: tabular-nums; }
.rp-move s { color: var(--faint); }
.rp-chg.new .rp-move em { color: var(--ok, #1a7f4b); font-style: normal; }
.rp-chg.del .rp-move em { color: var(--danger, #c0392b); font-style: normal; }

/* Мастер, учителя: урок тянется по своей строке */
.mteachers td.pc[draggable="true"] { cursor: grab; }
.mteachers td.pc.dragging { opacity: .35; }
.mteachers td.pc.drop-ok { box-shadow: inset 0 0 0 3px var(--ok); }
.mteachers td.pc.drop-bad { box-shadow: inset 0 0 0 3px var(--bad); }

/* ---------- Нарушения словами */
.prob-body { flex: 1; min-width: 0; }
.prob-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 6px; }
.prob-grp { margin: 4px 0; }
.prob-grp summary { cursor: pointer; padding: 2px 0; }
.prob-rows { margin: 4px 0 6px 18px; padding: 0; display: grid; gap: 3px; font-size: 13px; }
.prob-go { margin-left: 8px; font-size: 12px; cursor: pointer; text-decoration: underline; }
.prob-fix { margin-top: 6px; }
.prob-fix summary { cursor: pointer; }
.prob-rows s { opacity: .6; }

.fix-set { margin: 2px 0 8px; }
.fix-set summary { cursor: pointer; font-size: 12px; }
.fix-row { display: flex; align-items: center; gap: 12px; margin: 6px 0; font-size: 13px; }
.fix-row input[type=range] { max-width: 260px; }
.fix-row input[type=number] { width: 80px; }

.fix-prog { display: flex; align-items: center; gap: 10px; margin: 2px 0 8px; }
.fix-prog .bar { flex: 1; max-width: 360px; margin: 0; }

/* ---------- Плашка нарушений / результата исправления */
.alert .muted { color: inherit; opacity: .72; }
.alert .btn.ghost { background: transparent; color: inherit; border-color: color-mix(in srgb, currentColor 38%, transparent); }
.alert .btn.ghost:hover:not(:disabled) { background: color-mix(in srgb, currentColor 12%, transparent); }
.alert .btn .caret { width: 12px; height: 12px; margin: 0 0 0 5px; vertical-align: -2px; transition: transform .15s; }
.alert .btn[aria-expanded="true"] .caret { transform: rotate(180deg); }
.btn.trunc { max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.prob-body { flex: 1; min-width: 0; }
.prob-top { display: flex; align-items: center; justify-content: space-between; gap: 8px 16px; flex-wrap: wrap; }
.prob-title { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.prob-title b { font-size: 14px; }
.prob-title .muted { font-size: 12px; }
.prob-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.fix-prog { display: flex; align-items: center; gap: 12px; margin: 10px 0 2px; }
.fix-prog .bar { flex: 1; max-width: 420px; margin: 0; }
.fix-panel { margin: 10px 0 2px; padding: 10px 14px; border: 1px solid color-mix(in srgb, currentColor 22%, transparent); border-radius: var(--r); background: color-mix(in srgb, currentColor 6%, transparent); }
.fp-row { display: grid; grid-template-columns: 200px 1fr; align-items: center; gap: 12px; padding: 3px 0; }
.fp-row.hidden { display: none; }
.fp-c { display: flex; align-items: center; gap: 10px; }
.fp-c input[type=range] { width: 240px; }
.fp-c b { min-width: 22px; text-align: right; font-variant-numeric: tabular-nums; }
.fp-c input[type=number] { width: 84px; }
.fp-note { margin: 2px 0 6px; padding-left: 212px; }
.prob-groups { margin-top: 8px; }
.prob-grp { border-top: 1px solid color-mix(in srgb, currentColor 18%, transparent); padding: 6px 0 2px; margin-top: 6px; }
.prob-body > .prob-grp { margin-top: 12px; }
.prob-grp > summary { display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none; padding: 2px 0; }
.prob-grp > summary::-webkit-details-marker { display: none; }
.prob-grp > summary .caret { width: 14px; height: 14px; flex: none; transform: rotate(-90deg); transition: transform .15s; }
.prob-grp[open] > summary .caret { transform: none; }
.pill { font-size: 11.5px; padding: 1px 8px; border-radius: 99px; background: color-mix(in srgb, currentColor 16%, transparent); }
.pi-list, .chg-list { list-style: none; margin: 6px 0 4px; padding: 0; display: grid; gap: 2px; }
.pi { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 4px 8px; border-radius: 6px; }
.pi:hover, .chg:hover { background: color-mix(in srgb, currentColor 8%, transparent); }
.pi-t { min-width: 0; line-height: 1.4; }
.chg { display: grid; grid-template-columns: 46px 1fr auto; align-items: center; gap: 12px; padding: 4px 8px; border-radius: 6px; }
.chg-cl { font-weight: 700; text-align: center; padding: 1px 0; border-radius: 5px; background: color-mix(in srgb, currentColor 14%, transparent); }
.chg-mv { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.chg-mv i { font-style: normal; opacity: .6; }
.chg-mv s { opacity: .6; }
.chg-mv em { font-style: normal; opacity: .85; }
@media (max-width: 760px) { .fp-row { grid-template-columns: 1fr; } .fp-note { padding-left: 0; } .chg { grid-template-columns: 40px 1fr; } .chg-mv { grid-column: 2; } }

/* ---------- Ручная сборка */
.chip.черновик { background: var(--warn-soft); color: #92400e; }
.pool { margin: 0 0 12px; padding: 10px 14px; border: 1px dashed var(--line); border-radius: var(--r); background: var(--surface); transition: border-color .15s, background .15s; }
.pool.drop-ok { border-color: var(--ok); background: var(--ok-soft); }
.pool-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.pool-items { display: flex; flex-wrap: wrap; gap: 8px; }
.pool-grp { display: flex; flex-direction: column; gap: 3px; }
.pool-n { font-size: 11px; color: var(--muted); }
.pool-it { width: 150px; padding: 5px 8px; border-radius: 7px; cursor: grab; border: 1px solid rgba(0,0,0,.08); }
.pool-it .s { font-weight: 600; font-size: 12.5px; line-height: 1.2; }
.pool-it .t { font-size: 11.5px; color: rgba(0,0,0,.6); line-height: 1.2; }
.pool-it:active { cursor: grabbing; }
#classChips .left { margin-left: 5px; font-size: 10.5px; padding: 0 5px; border-radius: 99px; background: var(--warn-soft); color: #92400e; }
.cell.drop-ok { outline: 3px solid var(--ok); outline-offset: -3px; border-radius: 7px; background: var(--ok-soft); }
.cell.drop-bad { outline: 3px solid var(--bad); outline-offset: -3px; border-radius: 7px; background: var(--bad-soft); }
#draftInfo .bar { margin: 8px 0 0; max-width: 520px; }

/* ---------- Карандаш: ручная правка */
.btn.edit-toggle svg { width: 14px; height: 14px; margin-right: 5px; }
.btn.edit-toggle.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.toolbar .tb-right { margin-left: auto; }

/* Мастер: две строки панели — режим/поиск/действия и «Показывать» */
.toolbar .btn svg { width: 14px; height: 14px; margin-right: 5px; vertical-align: -2px; }
.toolbar.tb-opts { gap: 8px 18px; padding: 6px 12px; margin-top: -4px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); }
.tb-label { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--faint); }
.tb-opts .tb-sort { margin-left: auto; }
.tb-opts select { height: 30px; }
.w200 { width: 200px; }

/* ---------- «Взять и положить»: подсветка и панель подсказок */
.cell.pk-ok { outline: 3px solid var(--ok); outline-offset: -3px; border-radius: 7px; background: var(--ok-soft); cursor: pointer; }
.cell.pk-bad { outline: 3px solid var(--bad); outline-offset: -3px; border-radius: 7px; background: var(--bad-soft); cursor: pointer; }
.lesson.pk-ok { outline: 3px solid var(--ok); outline-offset: -3px; cursor: pointer; }
.lesson.pk-bad { outline: 3px solid var(--bad); outline-offset: -3px; opacity: .8; cursor: pointer; }
.lesson.pk-sel, .pool-it.pk-sel { outline: 3px solid var(--accent); outline-offset: -3px; box-shadow: 0 0 0 4px var(--accent-soft); }
.mteachers td.pc.pk-ok { box-shadow: inset 0 0 0 3px var(--ok); background-color: var(--ok-soft); cursor: pointer; }
.mteachers td.pc.pk-bad { box-shadow: inset 0 0 0 3px var(--bad); cursor: pointer; }
.mteachers td.pc.pk-sel { box-shadow: inset 0 0 0 3px var(--accent); }
.pk-hover { animation: pk-pulse .7s ease-in-out infinite alternate; }
@keyframes pk-pulse { from { filter: brightness(1); } to { filter: brightness(1.35); } }
.pick { margin: 0 0 12px; padding: 10px 14px; border: 1px solid var(--accent-line); border-radius: var(--r); background: var(--accent-soft); font-size: 13px; position: sticky; top: 0; z-index: 5; }
.pick.hidden { display: none; }
.pk-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.pk-title { display: flex; align-items: center; gap: 10px; min-width: 0; }
.pk-title svg { width: 18px; height: 18px; flex: none; color: var(--accent); }
.pk-title > div { display: flex; flex-direction: column; min-width: 0; }
.pk-title b { font-size: 14px; }
.pk-sum { display: flex; gap: 14px; margin: 6px 0 2px; }
.pk-ok-t { color: var(--ok); font-weight: 600; }
.pk-label { margin: 8px 0 4px; font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.pk-sugs { display: flex; flex-wrap: wrap; gap: 8px; }
.pk-sug { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; padding: 6px 12px; border-radius: 8px; border: 1px solid var(--line); background: var(--surface); color: var(--text); cursor: pointer; text-align: left; }
.pk-sug b { font-size: 13px; }
.pk-sug span { font-size: 12px; color: var(--muted); }
.pk-sug:hover { border-color: var(--accent); }
.pk-sug.good { border-color: var(--ok-line); } .pk-sug.good span { color: var(--ok); font-weight: 600; }
.pk-sug.warn span { color: #b45309; }
.pk-why { margin-top: 6px; } .pk-why summary { cursor: pointer; } .pk-why .small { margin-top: 3px; }
.pk-hint { margin-top: 8px; }

/* ---------- Помощник сборки */
.assist { margin: 0 0 12px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); font-size: 13px; }
.assist.hidden { display: none; }
.as-head { width: 100%; display: flex; align-items: center; gap: 10px; padding: 9px 14px; background: none; border: 0; color: inherit; cursor: pointer; text-align: left; font: inherit; }
.as-head .caret { width: 14px; height: 14px; transform: rotate(-90deg); transition: transform .15s; flex: none; }
.as-head[aria-expanded="true"] .caret { transform: none; }
.as-body { padding: 0 14px 12px; }
.as-tabs { margin: 0 0 10px; }
.as-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.as-list li { display: flex; align-items: center; gap: 10px; padding: 6px 8px; border-radius: 7px; }
.as-list li:hover { background: var(--bg-soft, rgba(127,127,127,.08)); }
.as-list li svg { width: 16px; height: 16px; flex: none; color: var(--accent); }
.as-list li.sub { margin-left: 26px; padding-top: 3px; padding-bottom: 3px; }
.as-list li > span { flex: 1; min-width: 0; }
.as-list a { cursor: pointer; text-decoration: underline; color: var(--accent); }
.bad-t { color: var(--bad); }
.as-table { display: grid; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); gap: 4px 14px; max-height: 260px; overflow: auto; }
.as-row { display: grid; grid-template-columns: 130px 1fr 54px 150px; align-items: center; gap: 10px; padding: 4px 8px; border: 0; border-radius: 7px; background: none; color: inherit; cursor: pointer; font: inherit; text-align: left; }
.as-row:hover { background: rgba(127,127,127,.1); }
.as-row.cur { outline: 2px solid var(--accent); }
.as-row b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.as-bar { height: 6px; border-radius: 99px; background: rgba(127,127,127,.2); overflow: hidden; }
.as-bar i { display: block; height: 100%; background: var(--accent); }
.as-n { font-variant-numeric: tabular-nums; color: var(--muted); text-align: right; }
.as-todo { font-size: 12px; color: #b45309; white-space: nowrap; }
.as-todo.done { color: var(--ok); }
.pk-load { margin: 4px 0 0; }
.lesson .pts { display: inline-block; margin-left: 4px; padding: 0 5px; border-radius: 99px; font-size: 10px; font-weight: 700; background: rgba(0,0,0,.12); }
.toolbar .tb-right .switch { margin-right: 6px; }

.pk-warn { display: flex; gap: 8px; align-items: flex-start; margin: 6px 0 2px; padding: 6px 10px; border-radius: 7px; background: var(--warn-soft); color: #92400e; font-size: 12.5px; }
.pk-warn svg { width: 15px; height: 15px; flex: none; margin-top: 1px; }

/* «Форточка» — окно у класса в ручной сборке */
.cell.gapcell, td.gapcell { display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase;
  color: var(--bad); border: 2px dashed var(--bad); border-radius: 7px; background: var(--bad-soft); min-height: 58px; }
td.gapcell { display: table-cell; text-align: center; vertical-align: middle; min-height: 0; }
.cell.gapcell.pk-ok, .cell.gapcell.pk-bad { cursor: pointer; }

/* Подгруппы идут вместе */
.pool-it .with { margin-top: 2px; font-size: 10.5px; font-weight: 700; color: #7c3aed; }
.pool-note { display: flex; gap: 8px; align-items: flex-start; margin: 2px 0 8px; padding: 6px 10px; border-radius: 7px; background: var(--accent-soft); color: var(--accent-2); font-size: 12.5px; }
.pool-note svg { width: 15px; height: 15px; flex: none; margin-top: 1px; }
.rchip.pair { border-color: var(--accent-line); }
.rchip .tag { font-style: normal; font-size: 10px; font-weight: 700; padding: 0 5px; margin-left: 3px; border-radius: 99px; background: var(--accent-soft); color: var(--accent); }

/* ================================================================ Решатель на этом компьютере */
.sv-layout { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 14px; align-items: start; }
.sv-main > .card { margin-top: 0; } .sv-main > .card + .card { margin-top: 14px; }
.sv-side { margin-top: 0; }
@media (max-width: 1000px) { .sv-layout { grid-template-columns: minmax(0, 1fr); } }
.sv-title { font-size: 14.5px; margin-bottom: 12px; }
.sv-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; flex: none; background: var(--faint); }
.sv-dot.ok { background: #22c55e; } .sv-dot.busy { background: #3b82f6; } .sv-dot.warn { background: #f59e0b; } .sv-dot.bad { background: var(--bad); } .sv-dot.off { background: var(--line); border: 1px solid var(--faint); }
.sv-row { display: flex; align-items: flex-start; gap: 10px; padding: 7px 0; }
.sv-row .sv-dot { margin-top: 5px; }
.sv-row b { display: block; font-weight: 600; font-size: 13.5px; }
.sv-row span { display: block; color: var(--muted); font-size: 12.5px; }
.sv-helper { padding: 12px 14px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface-2); }
.sv-helper + .sv-helper { margin-top: 10px; }
.sv-h-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; padding-bottom: 6px; border-bottom: 1px solid var(--line-2); margin-bottom: 4px; }
.sv-h-head b { display: block; } .sv-h-act { display: flex; gap: 6px; }
.sv-testline { margin-top: 6px; padding-top: 8px; border-top: 1px solid var(--line-2); }
.sv-test { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; }
.sv-test.ok { color: var(--ok); } .sv-test.bad { color: var(--bad); } .sv-test.wait { color: var(--muted); }
.sv-empty .muted { margin: 6px 0 0; }
.sv-steps { margin: 0; padding: 0; list-style: none; counter-reset: sv; }
.sv-steps li { counter-increment: sv; position: relative; padding: 0 0 16px 36px; }
.sv-steps li:last-child { padding-bottom: 0; }
.sv-steps li::before { content: counter(sv); position: absolute; left: 0; top: 0; width: 24px; height: 24px; border-radius: 50%; background: var(--accent-soft); color: var(--accent); font-weight: 600; font-size: 12.5px; display: grid; place-items: center; }
.sv-steps li:not(:last-child)::after { content: ""; position: absolute; left: 11.5px; top: 28px; bottom: 4px; width: 1px; background: var(--line); }
.sv-st-head { min-height: 24px; display: flex; align-items: center; }
.sv-st-body { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; margin-top: 4px; color: var(--ink-2); font-size: 13px; }
.sv-code { width: 100%; padding: 10px 12px; border: 1px dashed var(--accent-line); background: var(--accent-soft); border-radius: var(--r); display: flex; flex-direction: column; gap: 6px; }
.sv-code.expired { border-color: var(--warn-line); background: var(--warn-soft); flex-direction: row; align-items: center; gap: 10px; }
.sv-code-line { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.sv-code code { font-size: 14px; padding: 4px 8px; background: var(--surface); word-break: break-all; user-select: all; }
.sv-help summary { cursor: pointer; font-weight: 600; font-size: 14px; }
.sv-help-body { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; color: var(--ink-2); font-size: 13px; }
.sv-help-body p { margin: 0; }
.sv-about { display: flex; flex-direction: column; gap: 16px; }
.sv-about b { display: block; margin-bottom: 6px; font-size: 13.5px; } .sv-about p { margin: 0; }
.sv-legend { display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--ink-2); }
.sv-legend span { display: inline-flex; align-items: center; gap: 8px; }
.sv-banner { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 10px 14px; margin-bottom: 14px; border: 1px solid var(--warn-line); background: var(--warn-soft); color: var(--warn); border-radius: var(--r); font-size: 13px; }
.sv-banner span { flex: 1; min-width: 200px; color: var(--ink-2); }
.sv-nav { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-left: 7px; background: var(--faint); }
.sv-nav.ok { background: #22c55e; } .sv-nav.warn { background: #f59e0b; } .sv-nav.bad { background: var(--bad); }

/* ================================================================ экран входа */
.gate { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; background: var(--bg); padding: 20px; }
.gate-card { width: min(440px, 100%); padding: 28px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--shadow-pop); text-align: center; }
.gate-logo { width: 48px; height: 48px; margin: 0 auto 12px; border-radius: 12px; background: var(--accent-soft); color: var(--accent); display: grid; place-items: center; }
.gate-logo svg { width: 24px; height: 24px; }
.gate-card h2 { font-size: 20px; margin-bottom: 8px; } .gate-card p { margin: 0 0 8px; color: var(--ink-2); }
.gate-btns { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; margin-top: 16px; }
