/* =============================================================
   styles.css — оформление страницы группы.

   Основа — шаблон «курс.»: сайдбар слева, содержимое справа,
   на телефоне — шапка с раскрывающимся меню. Тема только
   светлая, шрифт системный, акцент — синий --primary,
   на сайте физики (html[data-site=phys]) — фиолетовый.
   ============================================================= */
:root{
  --primary:#2563eb;
  --primary-strong:#1d4ed8;
  --primary-soft:#e8effe;
  --primary-line:#bfd0f8;  /* рамка мягких акцентных плашек */
  --primary-link:#a5bffa;  /* подчёркивание ссылок */
  --primary-tint:#eaf1fe;  /* фон отметки «4» */
  --selection:#bfdbfe;
  --focus:#93b4fc;
  --row-hover:#eaf0fb;
  --foreground:#172033;
  --muted:#657086;
  --border:#e3e7ee;
  --background:#fff;
  --sunk:#f8fafc;
  --danger:#b42318;
  --radius:10px;
  --radius-pill:999px;     /* скругление кнопок: браузер срезает до половины высоты */
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color-scheme:light;
}
html[data-site=phys]{
  --primary:#6d28d9;
  --primary-strong:#5b21b6;
  --primary-soft:#f1ebfd;
  --primary-line:#d6c6f8;
  --primary-link:#c2a9f6;
  --primary-tint:#f3eefe;
  --selection:#ddd6fe;
  --focus:#b79af5;
  --row-hover:#f2eefb;
}

*{box-sizing:border-box}
body{margin:0;background:var(--background);color:var(--foreground);font:14px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif}
button{font:inherit;cursor:pointer}
button,a{-webkit-tap-highlight-color:transparent}
svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.icons{position:absolute;width:0;height:0}
::selection{background:var(--selection);color:#172033}
:focus-visible{outline:3px solid var(--focus);outline-offset:4px}
button:disabled{cursor:default;opacity:.6}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:5px}
h1,h2,h3,p{margin:0}
h1{font-size:32px;line-height:1.2;letter-spacing:-.035em;font-weight:650;text-wrap:balance}
h2{font-weight:650;letter-spacing:-.025em}
p{color:var(--muted)}
main:focus{outline:none}

.skip-link{position:fixed;left:16px;top:-60px;z-index:100}
.skip-link:focus{top:16px}

/* ---------- сайдбар ---------- */
.sidebar{position:fixed;inset:0 auto 0 0;width:240px;background:var(--sunk);border-right:1px solid var(--border);padding:34px 20px;display:flex;flex-direction:column;overflow-y:auto}
.logo{display:flex;align-items:center;gap:11px;font-size:25px;font-weight:750;letter-spacing:-.04em;padding:0 12px;min-height:40px}
/* Знак отделения: капсула — рамка в CSS, внутри знак и надпись отдельными
   картинками. Отступы — доли высоты капсулы, как в исходном логотипе
   (капсула 300 единиц: слева 52, между частями ~27, справа 80). Высота
   задаётся одной переменной --h, картинки свои пропорции не теряют. */
.brand{--h:46px;display:inline-flex;align-items:center;height:var(--h);padding:0 calc(var(--h)*.267) 0 calc(var(--h)*.173);gap:calc(var(--h)*.09);border:1px solid var(--brand-line);border-radius:var(--radius-pill);background:#fff}
.brand img{display:block;height:var(--h);width:auto;flex:none}
/* в сайдбаре капсула по ширине меню и высотой с пункт меню: знак остаётся
   слева, надпись встаёт по центру оставшегося места */
.sidebar .logo{padding:0}
.sidebar .brand{width:100%}
.sidebar .brand__name{margin-inline:auto}
/* надпись и номер группы — одним блоком; номер нижним индексом,
   низом на уровне подчёркивания надписи */
.brand__name{display:flex;align-items:flex-start;flex:none}
.brand__sub{margin:calc(var(--h)*.5) 0 0 calc(var(--h)*.04);color:var(--brand-line);font-size:calc(var(--h)*.24);font-weight:650;line-height:1;letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap}
.logo-mark{min-width:35px;height:35px;padding:0 6px;display:grid;place-items:center;background:var(--primary);color:#fff;border-radius:9px;font-size:16px;line-height:1;letter-spacing:-.02em}
.sidebar nav{margin-top:48px;display:grid;gap:6px}
.nav{display:flex;align-items:center;gap:13px;text-align:left;background:#fff;border:1px solid var(--border);padding:7.5px 14px;border-radius:var(--radius-pill);color:var(--foreground);font-weight:500;white-space:nowrap;transition:background .15s}
.nav:hover{background:#f1f5f9}
.nav.active{background:var(--primary);border-color:var(--primary);color:#fff}
.nav.active:hover{background:var(--primary-strong)}
.sidebar-actions{margin-top:auto;padding-top:26px;display:flex;flex-wrap:wrap;gap:8px}
.sidebar-actions .btn{flex:1 1 auto;font-size:12px;padding:9px}
.sidebar-actions .btn svg{width:15px;height:15px}

/* ---------- кнопки ---------- */
.btn{border:1px solid var(--border);border-radius:var(--radius-pill);padding:9px 13px;background:#fff;color:var(--foreground);font-weight:500;display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;text-decoration:none;transition:background .15s}
.btn:hover{background:#f1f5f9}
.btn.primary{background:var(--primary);color:#fff;border-color:var(--primary)}
.btn.primary:hover{background:var(--primary-strong)}
.btn.is-done{color:var(--primary-strong);border-color:var(--primary-line);background:var(--primary-soft)}
.text-btn{background:none;border:0;color:var(--primary);padding:6px 0;display:inline-flex;align-items:center;gap:8px;font-size:12px;text-decoration:none}
.text-btn:hover{text-decoration:underline;text-underline-offset:4px}
.text-btn svg{width:16px;height:16px}

/* ---------- каркас ---------- */
.mobile-header{display:none}
main{margin-left:240px;max-width:1600px;padding:30px clamp(28px,4vw,64px) 0}
.topline{display:flex;justify-content:flex-end;min-height:24px;align-items:center;gap:10px;color:#647084;font-size:12px}
.demo-badge{border:1px solid var(--border);border-radius:var(--radius-pill);padding:4px 12px;font-size:12px;color:#5c687b;white-space:nowrap}
/* дата правки — плашкой верхним индексом у заголовка: заголовок строчный,
   плашка встаёт сразу за последним словом, верхом по верху строки */
.page-title{font-size:32px;line-height:1.2;text-wrap:balance}
.page-title h1{display:inline}
.title-badge{display:inline-block;margin-left:12px;vertical-align:text-top;border:1px solid var(--border);border-radius:var(--radius-pill);padding:3px 12px;font-size:12px;line-height:1.55;font-weight:400;letter-spacing:0;color:#5c687b;white-space:nowrap}
.page-heading{margin:48px 0 30px}
.page-heading p{margin-top:10px;font-size:15px}
.section-heading{display:flex;justify-content:space-between;align-items:center;margin:44px 0 14px;gap:15px}
.section-heading h2{font-size:20px}

/* ---------- строки файлов (module-row шаблона) ---------- */
.module-list{display:grid;gap:2px}
.module-row{display:flex;width:100%;align-items:center;text-align:left;padding:14px 16px;gap:18px;border:0;border-radius:12px;background:transparent;color:var(--foreground);text-decoration:none;transition:background .15s}
.module-row:nth-child(odd){background:#f3f6fa}
.module-row:hover{background:var(--row-hover)}
.module-row:hover .module-copy strong{color:var(--primary-strong)}
.module-number{width:38px;height:38px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px var(--border);color:#64748b;display:grid;place-items:center;flex-shrink:0;font-size:12px;font-variant-numeric:tabular-nums;transition:background .15s,color .15s}
.module-number svg{width:20px;height:20px;stroke-width:1.6}
.module-row:hover .module-number{background:var(--primary-soft);color:var(--primary)}
.module-copy{flex:1;min-width:0}
.module-copy strong{font-weight:550;font-size:14px;transition:color .15s}
.module-duration{font-size:11px;font-weight:600;letter-spacing:.04em;color:#637086;white-space:nowrap}
.module-row>svg{width:17px;height:17px;color:#7c899e}

/* ---------- текст из Markdown ---------- */
.prose{max-width:44rem;font-size:15px;line-height:1.75;color:var(--foreground);text-wrap:pretty}
.prose>*:first-child{margin-top:0}
.prose>*:last-child{margin-bottom:0}
.prose p{color:inherit;margin:0 0 .9em}
.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{margin:1.7em 0 .6em;line-height:1.3;font-weight:650;letter-spacing:-.02em;text-wrap:balance}
.prose h1,.prose h2{font-size:21px}
.prose h3{font-size:16px;letter-spacing:-.01em}
.prose h4,.prose h5,.prose h6{font-size:15px;letter-spacing:0}
.prose ul,.prose ol{margin:0 0 .9em;padding-left:1.4em}
.prose li{margin:0 0 .35em}
.prose li::marker{color:var(--muted)}
.prose ul ul,.prose ol ol,.prose ul ol,.prose ol ul{margin:.35em 0 0}
.prose li.task{list-style:none;margin-left:-1.4em}
.prose li.task input{margin:0 .45em 0 0;accent-color:var(--primary)}
.prose a:not(.module-row){color:var(--primary);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:var(--primary-link)}
.prose a:not(.module-row):hover{text-decoration-color:currentColor}
.prose strong{font-weight:620}
.prose code{font:13px/1.5 var(--mono);background:#f1f5fa;padding:.12em .38em;border-radius:5px}
.prose pre{margin:0 0 1em;padding:12px 16px;overflow-x:auto;background:var(--sunk);border:1px solid var(--border);border-radius:var(--radius);font-size:13px}
.prose pre code{background:none;padding:0}
.prose blockquote{margin:0 0 1em;padding:2px 0 2px 16px;border-left:3px solid var(--selection);color:var(--muted)}
.prose hr{border:0;border-top:1px solid var(--border);margin:1.8em 0}
.prose img{max-width:100%;height:auto;border-radius:8px}
.prose .module-list{margin:0 0 1.2em;line-height:1.55}
/* таблицу оборачивает markdown.js: широкая прокручивается, а не обрезается */
.ui-prose-scroll{overflow-x:auto;margin:0 0 1em;overscroll-behavior-x:contain}
.ui-prose-scroll>table{margin:0;width:auto;min-width:100%}
.prose table{border-collapse:separate;border-spacing:0 2px;font-size:14px;line-height:1.55}
.prose th,.prose td{padding:11px 16px 11px 0;text-align:left;vertical-align:top}
.prose th:first-child,.prose td:first-child{padding-left:16px}
.prose tbody tr:nth-child(odd) td{background:#f3f6fa}
.prose tbody td:first-child{border-radius:12px 0 0 12px}
.prose tbody td:last-child{border-radius:0 12px 12px 0}
.prose th{font-weight:550;color:var(--muted);font-size:12px}
/* формула отдельным блоком */
.prose .eq{margin:1.2em 0;text-align:center;overflow-x:auto;overflow-y:hidden}
.prose .katex{color:inherit}
.prose .katex-display{margin:0!important}

/* ---------- дневник ---------- */
.diary-login{max-width:22rem;display:grid;gap:16px}
.diary-login label{display:grid;gap:6px;font-size:13px;font-weight:550;color:var(--muted)}
.diary-login input:not([type=checkbox]){font:16px/1.4 var(--mono);letter-spacing:.04em;color:var(--foreground);padding:10px 14px;border:1px solid var(--border);border-radius:var(--radius);background:#fff;transition:border-color .15s,box-shadow .15s}
.diary-login input:not([type=checkbox]):focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.diary-login .diary-remember{display:flex;align-items:center;gap:8px;font-weight:400;color:var(--foreground)}
.diary-remember input{width:16px;height:16px;margin:0;accent-color:var(--primary)}
.diary-login .btn{justify-self:start;padding:10px 22px}
.diary-hint{margin:0;font-size:13px;line-height:1.5;color:var(--muted)}
.diary-intro{margin:0;font-size:14px;line-height:1.55;color:var(--foreground)}
.diary-login .text-btn{justify-self:start}
.diary-error{padding:10px 14px;border:1px solid #f5c2bd;border-radius:var(--radius);background:#fef3f2;color:var(--danger);font-size:13px}
.diary-stats{display:grid;grid-template-columns:repeat(3,minmax(0,11rem));gap:12px}
.diary-stat{border:1px solid var(--border);border-radius:12px;padding:14px 16px;background:var(--sunk);display:grid;gap:2px}
.diary-stat span{font-size:12px;color:var(--muted)}
.diary-stat b{font-size:28px;line-height:1.2;font-weight:650;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.diary-stat small{font-size:12px;color:var(--muted)}
.diary-list{list-style:none;margin:0;padding:0;max-width:44rem;border-top:1px solid var(--border)}
.diary-row{display:grid;grid-template-columns:8.5rem 9rem 1fr;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums}
.diary-date{color:var(--muted);font-size:13px}
.diary-date b{color:var(--foreground);font-weight:550;font-size:14px}
.diary-pair{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:13px}
.diary-kind{border:1px solid var(--border);border-radius:var(--radius-pill);padding:1px 8px;font-size:11px;color:#5c687b}
.diary-kind.is-sdo{border-color:var(--primary-line);background:var(--primary-soft);color:var(--primary-strong)}
.diary-marks{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.diary-row.is-empty .diary-marks{color:#a3acbb}
.mark{min-width:30px;height:30px;padding:0 8px;border-radius:8px;display:inline-grid;place-items:center;font-weight:650;font-size:14px;background:#f1f5fa;color:var(--foreground)}
.mark-5{background:#e7f6ec;color:#17663a}
.mark-4{background:var(--primary-tint);color:var(--primary-strong)}
.mark-3{background:#fdf4e3;color:#8a5a00}
.mark-2,.mark-1{background:#fdecea;color:var(--danger)}
.mark-nb{background:#f3e8e8;color:#8f3b3b;font-size:12px}
.mark-late{background:#f7f3d6;color:#6d6200;font-size:12px;font-weight:550}

/* ---------- состояния ---------- */
.skeleton{border-radius:6px;background:linear-gradient(90deg,#eef2f7 0,#f6f8fb 50%,#eef2f7 100%);background-size:200% 100%;animation:shimmer 1.4s ease-in-out infinite}
@keyframes shimmer{from{background-position:100% 0}to{background-position:-100% 0}}
.notice{max-width:34rem;margin:48px 0;padding:28px;border:1px solid var(--border);border-radius:12px;background:var(--sunk)}
.notice>svg{width:22px;height:22px;color:var(--muted)}
.notice h2{font-size:18px;margin-top:14px}
.notice p{margin-top:8px}
.notice pre{margin:16px 0 0;padding:10px 14px;background:#fff;border:1px solid var(--border);border-radius:8px;font:13px var(--mono);overflow-x:auto}
.notice .btn{margin-top:18px}
.alert{display:flex;gap:10px;align-items:flex-start;max-width:44rem;margin:0 0 24px;padding:14px 16px;border:1px solid #f5c2bd;border-radius:var(--radius);background:#fef3f2;color:var(--danger);font-size:13px}
.alert svg{width:18px;height:18px;margin-top:1px}
.alert code{font:12px var(--mono)}

/* ---------- окно выбора группы ---------- */
.picker{width:min(460px,calc(100% - 32px));max-height:calc(100% - 32px);padding:28px;border:0;border-radius:14px;color:var(--foreground);box-shadow:0 24px 48px #0f172a33}
.picker::backdrop{background:#0f172a73}
.picker-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}
.picker-head h2{font-size:22px}
.picker-head p{margin-top:8px;font-size:13px}
.picker-dept{margin-top:24px}
.picker-dept-head{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-size:12px;color:var(--muted)}
.picker-dept-head .brand{--h:32px}
.picker .module-row{padding:13px 14px;font-size:15px;font-weight:550;font-variant-numeric:tabular-nums}
.picker .module-row[aria-current] .module-copy{color:var(--primary-strong)}
.picker .module-row[aria-current] .module-duration{color:var(--primary-strong)}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
[hidden]{display:none!important}

/* ---------- адаптив ---------- */
@media(min-width:1500px){main{margin-right:auto}}

@media(max-width:1100px){
  .sidebar{width:210px;padding-left:14px;padding-right:14px}
  .sidebar .nav{gap:10px;padding-left:12px;padding-right:12px}
  main{margin-left:210px;padding:26px 30px 0}
}

@media(max-width:767px){
  .sidebar{display:none}
  .mobile-header{display:block;position:sticky;top:0;z-index:10;background:#fff;border-bottom:1px solid var(--border)}
  .mobile-top{height:66px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;gap:12px}
  .mobile-top .logo{padding:0;min-height:0}
  .mobile-top .brand{--h:36px}
  .logo-mark{min-width:32px;height:32px;font-size:14px}
  .mobile-actions{display:flex;align-items:center;gap:7px}
  .mobile-actions .btn{font-size:12px;padding:8px 10px;min-height:38px;gap:6px}
  .mobile-actions .btn svg{width:15px;height:15px}
  .icon-btn{min-width:38px;min-height:38px;border:1px solid var(--border);border-radius:var(--radius-pill);display:grid;place-items:center;background:#fff;color:var(--foreground)}
  .menu-collapse{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.16,1,.3,1)}
  .menu-collapse.open{grid-template-rows:1fr}
  .menu-collapse nav{overflow:hidden;padding:0 16px}
  .menu-collapse .nav{width:100%;margin-bottom:6px}
  .menu-collapse .nav:first-child{margin-top:6px}
  .menu-collapse .nav:last-child{margin-bottom:12px}
  main{margin-left:0;padding:22px 16px 0}
  .page-title{font-size:27px}
  .demo-badge{font-size:10px;padding:3px 9px}
  .title-badge{margin-left:8px;font-size:10px;padding:2px 9px}
  .page-heading{margin:32px 0 24px}
  h1{font-size:27px}
  .page-heading p{font-size:13px}
  .section-heading{margin-top:36px}
  .section-heading h2{font-size:18px}
  .prose{font-size:14px;line-height:1.7}
  .prose h1,.prose h2{font-size:19px}
  .module-row{gap:12px;padding:12px}
  .module-number{width:32px;height:32px}
  .module-copy strong{font-size:13px}
  .module-row>svg{width:14px;height:14px}
  .picker{padding:22px 18px}
  .diary-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  .diary-stat{padding:12px}
  .diary-stat b{font-size:22px}
  .diary-row{grid-template-columns:auto 1fr;gap:4px 12px}
  .diary-marks{grid-row:1/span 2;grid-column:2;align-self:center}
  .diary-pair{grid-column:1}
  .diary-login input:not([type=checkbox]){font-size:16px}
}

@media(max-width:380px){
  .mobile-actions .btn[data-copy-mail] span{display:none}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}

@media print{
  .sidebar,.mobile-header,.topline,.section-heading,.section-heading~.module-list{display:none!important}
  main{margin:0;padding:0}
  .page[hidden]{display:block!important}
}
