/* Токены как в DOCS/schedule.html; графики: --bar / --bar-hard / --zone / --grid.
   Палитра столбиков проверена валидатором dataviz в обеих темах. */
:root{
  --bg:#F2F5F6; --surface:#FFFFFF; --ink:#14212B; --muted:#5F6E78; --line:#D5DDE1; --line-soft:#E6ECEF;
  --accent:#0E7C86; --accent-ink:#FFFFFF;
  --bar:#2F7DD1; --bar-hard:#D03B3B;
  --zone:color-mix(in srgb, var(--bar) 12%, transparent);
  --grid:var(--line-soft);
  --ok:#2E8B57; --off:#B9690F;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --bg:#0F171E; --surface:#182430; --ink:#E7EDF0; --muted:#93A3AD; --line:#2A3945; --line-soft:#213040;
    --accent:#46B9C2; --accent-ink:#0F171E;
    --bar:#3987E5; --bar-hard:#D03B3B;
    --ok:#4FAF78; --off:#E0953C;
  }
}
:root[data-theme="dark"]{
  --bg:#0F171E; --surface:#182430; --ink:#E7EDF0; --muted:#93A3AD; --line:#2A3945; --line-soft:#213040;
  --accent:#46B9C2; --accent-ink:#0F171E;
  --bar:#3987E5; --bar-hard:#D03B3B;
  --ok:#4FAF78; --off:#E0953C;
}

*{box-sizing:border-box}
html{background:var(--bg)}
body{margin:0;background:var(--bg);color:var(--ink);font-family:"Golos Text",system-ui,-apple-system,"Segoe UI",Arial,sans-serif;font-size:15px;line-height:1.5;overflow-x:hidden}
a{color:var(--accent)}
.mono{font-family:"JetBrains Mono",ui-monospace,Consolas,monospace;font-variant-numeric:tabular-nums}
.muted{color:var(--muted);font-weight:400}
h1{font-family:"Unbounded","Golos Text",sans-serif;font-weight:700;font-size:clamp(24px,4vw,38px);line-height:1.1;margin:0;letter-spacing:-0.01em;text-wrap:balance}
h2{font-size:17px;margin:0;font-weight:700;letter-spacing:-0.01em}
.eyebrow{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);font-weight:700}
.sub{color:var(--muted);max-width:70ch;margin:0}
.note{color:var(--muted);margin:0}

/* шапка сайта */
.top{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 24px;border-bottom:1px solid var(--line);background:var(--surface)}
.brand{font-family:"Unbounded",sans-serif;font-weight:700;text-decoration:none;color:var(--ink);font-size:15px}
.top nav{display:flex;align-items:center;gap:18px;font-size:14px}
.top nav a{text-decoration:none;color:var(--ink)}
.top nav form{margin:0}
button.link{background:none;border:0;padding:0;color:var(--muted);font:inherit;cursor:pointer}
button.link:hover{color:var(--ink)}

.page{max-width:1120px;margin:0 auto;padding:28px 24px 80px;display:flex;flex-direction:column;gap:22px}
.page-head{display:flex;flex-direction:column;gap:8px}
.daynav{display:flex;gap:20px}

/* контролы: одна строка над графиками */
.controls{display:flex;flex-wrap:wrap;align-items:center;gap:12px 24px}
.presets{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface)}
.presets button{background:none;border:0;border-right:1px solid var(--line);padding:6px 14px;font:inherit;font-size:13.5px;color:var(--muted);cursor:pointer}
.presets button:last-child{border-right:0}
.presets button[aria-pressed="true"]{background:var(--accent);color:var(--accent-ink)}
.presets button:hover:not([aria-pressed="true"]){color:var(--ink);background:var(--line-soft)}
.key{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;color:var(--muted)}
.key span{display:inline-flex;align-items:center;gap:6px}
.sw{display:inline-block;width:12px;height:12px;border-radius:3px;flex:none}
.sw.bar{background:var(--bar)}
.sw.hard{background:var(--bar-hard)}
.sw.zone{background:var(--zone);border:1px solid color-mix(in srgb, var(--bar) 45%, transparent)}
.sw.today{border:1.5px solid var(--bar);background:color-mix(in srgb, var(--bar) 25%, transparent)}
.sw.gap{border:1px dashed var(--line);background:transparent}

/* карточки */
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px 18px;display:flex;flex-direction:column;gap:10px;min-width:0}
.card header{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}
.card .unit{color:var(--muted);font-weight:400;font-size:14px}
.card .norm{color:var(--muted);font-size:13px}
.figs{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.figs .fig{display:flex;flex-direction:column;gap:0}
.figs b{font-size:20px;color:var(--ink);font-weight:600;line-height:1.2}
.figs .lbl{font-size:12px}
.pill{margin-left:auto;font-size:12.5px;padding:3px 9px;border-radius:999px;background:var(--line-soft);color:var(--muted);white-space:nowrap}
.pill.good{background:color-mix(in srgb, var(--ok) 15%, transparent);color:var(--ink)}
.plot{position:relative;width:100%;height:212px}
.plot svg{display:block;width:100%;height:100%;overflow:visible}
.plot text{font-family:"JetBrains Mono",ui-monospace,Consolas,monospace;font-size:11px;fill:var(--muted)}
.plot text.val{fill:var(--ink);font-weight:600}
.plot .grid-line{stroke:var(--grid);stroke-width:1}
.plot .zone{fill:var(--zone)}
.plot .edge{stroke:color-mix(in srgb, var(--bar) 55%, transparent);stroke-width:1}
.plot .hard-line{stroke:var(--bar-hard);stroke-width:1;opacity:.7}
.plot .bar{fill:var(--bar)}
.plot .bar.hard{fill:var(--bar-hard)}
.plot .bar.partial{fill:color-mix(in srgb, var(--bar) 25%, transparent);stroke:var(--bar);stroke-width:1.5}
.plot .bar.hover{filter:brightness(1.15)}
.plot .gap-mark{stroke:var(--line);stroke-width:1;stroke-dasharray:2 2}
.plot .hit{fill:transparent;cursor:default;outline:none}
.plot .hit:focus-visible{fill:color-mix(in srgb, var(--accent) 10%, transparent)}

/* тултип */
.tip{position:fixed;z-index:10;pointer-events:none;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:8px 11px;font-size:13px;line-height:1.4;box-shadow:0 6px 24px rgba(0,0,0,.14);max-width:260px}
.tip b{font-size:16px;font-weight:600}
.tip .d{color:var(--muted)}
.tip .hard{color:var(--bar-hard)}

/* таблица */
.table-wrap summary{cursor:pointer;color:var(--muted);font-size:14px}
.scroll{overflow-x:auto;max-width:100%}
table{border-collapse:collapse;font-size:13px;width:100%}
th,td{padding:6px 10px;border-bottom:1px solid var(--line-soft);text-align:left;white-space:nowrap}
th{color:var(--muted);font-weight:500}
td.num,th.num{text-align:right}
td.hard{color:var(--bar-hard);font-weight:600}
td.off{color:var(--off)}
td.gap{color:var(--muted)}
td.note-cell{white-space:normal;min-width:220px;color:var(--muted);font-size:12.5px}
#table td:first-child a{text-decoration:none}

/* день */
.totals-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.tot{display:flex;flex-direction:column;padding:10px 12px;border-radius:10px;background:var(--line-soft)}
.tot .lbl{font-size:12px;color:var(--muted)}
.tot b{font-size:20px;font-weight:600}
.tot .norm{font-size:12px;color:var(--muted)}
.tot.hard{background:color-mix(in srgb, var(--bar-hard) 12%, transparent)}
.tot.hard b{color:var(--bar-hard)}
.tot.ok{background:color-mix(in srgb, var(--ok) 12%, transparent)}

/* вход */
.login{max-width:360px;margin:8vh auto 0;display:flex;flex-direction:column;gap:14px}
.form{display:flex;flex-direction:column;gap:12px}
.form label{display:flex;flex-direction:column;gap:4px;font-size:14px;color:var(--muted)}
.form input{font:inherit;padding:9px 11px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink)}
.form input:focus{outline:2px solid var(--accent);outline-offset:1px}
.btn{font:inherit;font-weight:600;padding:10px 14px;border:0;border-radius:8px;background:var(--accent);color:var(--accent-ink);cursor:pointer}
.error{color:var(--bar-hard);margin:0;font-size:14px}

@media (max-width:600px){
  .top{padding:10px 16px}
  .page{padding:20px 14px 60px;gap:18px}
  .grid{grid-template-columns:1fr}
  .card{padding:14px}
}
