/* Дозор — оформление в стиле Импульс (как рабочий интерфейс CRM): тонкая обводка 1.5 px, мелкий шрифт, плоские кнопки,
   жёсткая тень только у главного действия и окон. Плеер и шкала времени — на тёмной подложке. */

@font-face{font-family:'Dela Gothic One';font-weight:400;font-display:swap;src:url(/fonts/DelaGothicOne-400-cyr.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Dela Gothic One';font-weight:400;font-display:swap;src:url(/fonts/DelaGothicOne-400-lat.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Manrope';font-weight:400;font-display:swap;src:url(/fonts/Manrope-400-cyr.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Manrope';font-weight:400;font-display:swap;src:url(/fonts/Manrope-400-lat.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Manrope';font-weight:600;font-display:swap;src:url(/fonts/Manrope-600-cyr.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Manrope';font-weight:600;font-display:swap;src:url(/fonts/Manrope-600-lat.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Manrope';font-weight:800;font-display:swap;src:url(/fonts/Manrope-800-cyr.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Manrope';font-weight:800;font-display:swap;src:url(/fonts/Manrope-800-lat.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

:root{
  --coral:#FF5B3A; --coral-soft:#FFE7E1; --coral-text:#C93A1C;
  --sky:#4BA3F2; --sky-soft:#E3F0FD; --sky-text:#1467B8;
  --lemon:#FFC72C; --lemon-soft:#FFF3CC; --lemon-text:#8A6200;
  --mint:#2FC795; --mint-soft:#DDF6EC; --mint-text:#0E7A57;
  --berry:#E5336B; --berry-soft:#FDE3EB; --berry-text:#B0194A;
  --ink:#16161A; --ink-2:#3A3A42; --muted:#66666E; --line:#E4E1DA; --line-2:#D3CFC6; --sand:#F3F1EC; --sand-2:#ECE9E2; --paper:#FFFFFF; --paper-2:#F8F7F3; --disabled:#C9C7C1;
  --danger:var(--berry-text); --success:var(--mint-text); --focus:#1467B8; --selection:var(--lemon-soft);
  --font-display:'Dela Gothic One','Arial Black',sans-serif;
  --font-text:Manrope,'Segoe UI',system-ui,sans-serif;
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:20px; --s-6:24px; --s-8:32px; --s-10:40px; --s-12:48px;
  --r-xs:6px; --r-sm:10px; --r-md:12px; --r-lg:16px; --r-xl:24px; --r-pill:999px;
  --stroke:1.5px; --stroke-strong:2px;
  --shadow-hard-sm:2px 2px 0 var(--ink); --shadow-hard:3px 3px 0 var(--ink); --shadow-hard-lg:6px 6px 0 var(--ink);
  --shadow-sm:0 1px 2px rgba(22,22,26,.06); --shadow-md:0 4px 12px rgba(22,22,26,.08); --shadow-lg:0 16px 36px -12px rgba(22,22,26,.22);
  --ease:cubic-bezier(.2,.8,.2,1);
  --topbar-h:60px;
  --dark:#16161A; --dark-2:#24242A; --dark-3:#33333B; --on-dark:#F3F1EC; --on-dark-muted:#A9A7A1;
  --safe-b:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
html{-webkit-text-size-adjust:100%}
body{background:var(--sand);color:var(--ink);font:500 14px/1.5 var(--font-text);overscroll-behavior:none}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--sky-text)}
::selection{background:var(--lemon);color:var(--ink)}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
[hidden]{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.muted{color:var(--muted)} .grow{flex:1;min-width:0} .row{display:flex;align-items:center;gap:var(--s-3)} .wrap{flex-wrap:wrap}
.stack{display:flex;flex-direction:column;gap:var(--s-3)}
.right{margin-left:auto}
svg.i{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;flex:none}
svg.i.fill{fill:currentColor;stroke:none}

/* ---------- кнопки: плоские, тень только у главного действия ---------- */
.btn{--h:36px;display:inline-flex;align-items:center;justify-content:center;gap:8px;height:var(--h);padding:0 14px;border:var(--stroke) solid var(--ink);border-radius:var(--r-sm);background:var(--paper);color:var(--ink);font:700 13px/1 var(--font-text);cursor:pointer;transition:transform .1s var(--ease),box-shadow .1s var(--ease),background-color .12s;text-decoration:none;white-space:nowrap;-webkit-tap-highlight-color:transparent;user-select:none}
.btn:hover{background:var(--sand-2)}
.btn.primary{background:var(--coral);border-width:var(--stroke-strong);box-shadow:var(--shadow-hard)}
.btn.primary:hover{background:var(--coral);transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--ink)}
.btn.primary:active{transform:translate(2px,2px);box-shadow:0 0 0 var(--ink)}
.btn.secondary{background:var(--lemon)} .btn.secondary:hover{background:#F5BA1C}
.btn.sky{background:var(--sky)} .btn.mint{background:var(--mint)} .btn.dark{background:var(--ink);color:var(--paper)}
.btn.ghost{border-color:transparent;background:transparent}
.btn.ghost:hover{background:var(--sand-2)}
.btn.sm{--h:30px;padding:0 10px;font-size:12px;border-radius:8px}
.btn.icon{width:var(--h);padding:0}
.btn:disabled,.btn[aria-disabled=true]{background:var(--sand-2);color:var(--muted);border-color:var(--line-2);box-shadow:none;cursor:not-allowed;transform:none}
.btn.block{display:flex;width:100%}

/* кнопки на тёмной панели плеера */
.tbtn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:40px;height:40px;padding:0 9px;border:0;border-radius:8px;background:transparent;color:var(--on-dark);font:700 13px/1 var(--font-text);cursor:pointer;-webkit-tap-highlight-color:transparent;user-select:none}
.tbtn:hover{background:var(--dark-3)}
.tbtn:active{background:#44444d}
.tbtn[aria-pressed=true],.tbtn.on{background:var(--lemon);color:var(--ink)}
.tbtn.accent{background:var(--coral);color:var(--ink)}
.tbtn:disabled{opacity:.35;cursor:not-allowed}
.tbtn .lbl{font-size:12.5px}
.tsep{width:1.5px;height:20px;background:var(--dark-3);margin:0 4px;flex:none}

/* ---------- формы ---------- */
.field{display:flex;flex-direction:column;gap:6px;min-width:0}
.field>label,.field .lab{font:700 12.5px/1.3 var(--font-text);color:var(--ink-2)}
.field .hint{font-size:12px;color:var(--muted)}
.input,.select{width:100%;height:38px;padding:0 12px;border:var(--stroke) solid var(--line-2);border-radius:var(--r-sm);background:var(--paper);font:500 14px/1.4 var(--font-text);outline:none;transition:border-color .12s,box-shadow .12s}
.input:hover,.select:hover{border-color:var(--ink-2)}
.input:focus,.select:focus{border-color:var(--ink);box-shadow:var(--shadow-hard-sm)}
.input.sm,.select.sm{height:34px;font-size:13px;padding:0 10px}
.select{appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%2316161A' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;background-size:16px}
.select.sm{padding-right:32px;background-position:right 8px center}
.switch{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-weight:600;font-size:13px}
.switch input{appearance:none;width:38px;height:22px;margin:0;border:0;border-radius:var(--r-pill);background:var(--line-2);position:relative;cursor:pointer;transition:background-color .15s;flex:none;box-shadow:inset 0 0 0 var(--stroke) var(--ink)}
.switch input::after{content:'';position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:var(--ink);transition:transform .15s var(--ease)}
.switch input:checked{background:var(--mint)}
.switch input:checked::after{transform:translateX(16px)}
.alert{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:var(--r-sm);border:var(--stroke) solid var(--ink);background:var(--paper);font-size:13px;font-weight:600}
.alert.danger{background:var(--berry-soft)} .alert.info{background:var(--sky-soft)} .alert.ok{background:var(--mint-soft)} .alert.warn{background:var(--lemon-soft)}

/* ---------- статусы ---------- */
.status{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:7px;font:700 11px/1 var(--font-text);white-space:nowrap}
.status.ok{background:var(--mint-soft);color:var(--mint-text)} .status.bad{background:var(--berry-soft);color:var(--berry-text)} .status.warn{background:var(--lemon-soft);color:var(--lemon-text)} .status.info{background:var(--sky-soft);color:var(--sky-text)} .status.neutral{background:var(--sand-2);color:var(--muted)}
.dot{width:8px;height:8px;border-radius:50%;background:var(--disabled);flex:none}
.dot.on{background:var(--mint)} .dot.rec{background:var(--berry)} .dot.off{background:var(--disabled)}

/* ---------- шапка ---------- */
.topbar{height:var(--topbar-h);display:flex;align-items:center;gap:var(--s-3);padding:0 var(--s-6);background:var(--paper);border-bottom:var(--stroke-strong) solid var(--ink);position:relative;z-index:30;flex:none}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink);flex:none}
.logo svg{flex:none}
.logo b{display:block;font:400 20px/1 var(--font-display);letter-spacing:0;text-transform:lowercase}
.logo small{display:block;font:700 11px/1 var(--font-text);color:var(--muted);margin-top:3px}
.topnav{display:flex;gap:4px;margin-left:var(--s-4)}
.topnav a{padding:7px 12px;border-radius:var(--r-sm);border:var(--stroke) solid transparent;color:var(--ink-2);text-decoration:none;font-weight:700;font-size:13.5px}
.topnav a:hover{background:var(--sand);color:var(--ink)}
.topnav a[aria-current=page]{background:var(--lemon);border-color:var(--ink);color:var(--ink)}
.topbar .title{font:800 15px/1.2 var(--font-text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chip{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 12px;border:var(--stroke) solid var(--ink);border-radius:var(--r-pill);background:var(--paper);font:700 13px/1 var(--font-text);cursor:pointer;white-space:nowrap}
.chip:hover{background:var(--sand)}
.chip.sm{height:28px;padding:0 9px;font-size:12px}

/* ---------- всплывающие окна ---------- */
.pop{position:absolute;z-index:60;min-width:200px;max-width:min(92vw,420px);background:var(--paper);color:var(--ink);border:var(--stroke) solid var(--ink);border-radius:var(--r-md);box-shadow:var(--shadow-md);padding:6px}
.pop .item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:0;background:none;border-radius:8px;cursor:pointer;text-align:left;font:700 13px/1.3 var(--font-text);text-decoration:none;color:inherit}
.pop .item:hover{background:var(--sand)} .pop .item[aria-current=true]{background:var(--lemon-soft)}
.only-narrow{display:none!important}
@media (max-width:900px){ .only-narrow{display:inline-flex!important} }
.pop .item.only-sm{display:none}
@media (max-width:900px){ .pop .item.only-sm{display:flex} }
.pop .sep{height:1px;background:var(--line);margin:6px 0}
.pop .head{padding:6px 10px;font:800 10.5px/1 var(--font-text);color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
.overlay{position:fixed;inset:0;background:rgba(22,22,26,.55);display:flex;align-items:center;justify-content:center;padding:16px;z-index:100;overflow:auto}
.modal{width:min(480px,100%);max-height:calc(100dvh - 32px);overflow:auto;background:var(--paper);border:var(--stroke-strong) solid var(--ink);border-radius:var(--r-xl);box-shadow:var(--shadow-hard-lg);padding:var(--s-5) var(--s-6) var(--s-5)}
.modal h3{font:400 20px/1.2 var(--font-display);text-transform:lowercase;margin:0 0 var(--s-4)}
.modal p{margin:0}
.modal .acts{display:flex;gap:10px;margin-top:var(--s-5);flex-wrap:wrap;justify-content:flex-end}
.toasts{position:fixed;left:50%;bottom:calc(24px + var(--safe-b));transform:translateX(-50%);display:flex;flex-direction:column;gap:8px;z-index:200;align-items:center;pointer-events:none;width:min(92vw,480px)}
.toast{pointer-events:auto;display:flex;gap:12px;align-items:center;padding:10px 14px;border-radius:var(--r-md);background:var(--ink);color:var(--paper);font:600 13px/1.4 var(--font-text);box-shadow:var(--shadow-lg);animation:tin .2s var(--ease)}
.toast.bad{background:var(--berry);color:#fff}
@keyframes tin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- страницы ---------- */
.app{display:flex;flex-direction:column;height:100dvh}
.page{flex:1;overflow:auto;padding:var(--s-6) var(--s-6) calc(var(--s-8) + var(--safe-b))}
.page-inner{max-width:1280px;margin:0 auto}
.h1{font:400 30px/1.1 var(--font-display);text-transform:lowercase;margin:0 0 var(--s-5)}
.h2{font:800 15px/1.3 var(--font-text);margin:0 0 var(--s-3)}
.card{background:var(--paper);border:var(--stroke) solid var(--ink);border-radius:var(--r-lg);padding:var(--s-5)}
.tabs{display:flex;gap:2px;width:fit-content;max-width:100%;margin-bottom:var(--s-5);padding:3px;background:var(--paper);border:var(--stroke) solid var(--ink);border-radius:var(--r-md);overflow-x:auto}
.tab{border:0;background:none;padding:6px 14px;font:700 12.5px/1.4 var(--font-text);color:var(--ink-2);cursor:pointer;border-radius:8px;white-space:nowrap;text-decoration:none}
.tab:hover{color:var(--ink)} .tab[aria-selected=true]{color:var(--paper);background:var(--ink)}
.skel{background:linear-gradient(90deg,var(--sand) 0,#E9E6DF 40%,var(--sand) 80%);background-size:300% 100%;animation:sh 1.4s infinite;border-radius:10px}
@keyframes sh{from{background-position:100% 0}to{background-position:0 0}}
.empty{padding:40px 16px;text-align:center;color:var(--muted)}
.empty b{display:block;font:400 18px/1.2 var(--font-display);text-transform:lowercase;color:var(--ink);margin-bottom:10px}

/* вход */
.login{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:20px;background:var(--sand)}
.login .box{width:min(400px,100%);background:var(--paper);border:var(--stroke-strong) solid var(--ink);border-radius:var(--r-xl);box-shadow:var(--shadow-hard-lg);padding:var(--s-8)}
.login h1{font:400 30px/1 var(--font-display);text-transform:lowercase;margin:var(--s-4) 0 4px}
.login .node{font-weight:700;color:var(--muted);margin-bottom:var(--s-6)}
.login form{display:flex;flex-direction:column;gap:var(--s-4)}

/* сетка камер */
.cam-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--s-5)}
.cam-card{display:flex;flex-direction:column;overflow:hidden;background:var(--paper);border:var(--stroke) solid var(--ink);border-radius:var(--r-lg);text-decoration:none;color:inherit;transition:transform .15s var(--ease),box-shadow .15s var(--ease);cursor:pointer}
.cam-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.cam-card .thumb{aspect-ratio:16/9;background:var(--ink);position:relative;border-bottom:var(--stroke) solid var(--ink);overflow:hidden}
.cam-card .thumb img{width:100%;height:100%;object-fit:cover;display:block}
.cam-card .thumb .badges{position:absolute;left:10px;top:10px;display:flex;gap:6px}
.cam-card .body{padding:var(--s-3) var(--s-4);display:flex;align-items:center;gap:10px}
.cam-card .name{font:800 15px/1.2 var(--font-text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cam-card .sub{font-size:12px;color:var(--muted);font-weight:600}
.cam-card.off{opacity:.55}

/* мозаика: тёмное полотно во всю ширину, плитки вплотную (зазор 1 px), без рамок и скруглений */
.mosaic-page{flex:1;min-height:0;overflow:auto;background:#000}
.mosaic{display:grid;gap:1px;background:#000}
.tile{position:relative;background:#000;aspect-ratio:16/9;cursor:pointer;display:block;overflow:hidden}
.tile video{width:100%;height:100%;object-fit:contain;display:block;background:#000}
.tile .cap{position:absolute;left:6px;bottom:6px;background:rgba(22,22,26,.72);color:#fff;padding:2px 8px;border-radius:6px;font:700 11.5px/1.4 var(--font-text)}
.tile .msg{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--on-dark-muted);font-weight:700;font-size:13px;pointer-events:none}
@media (min-width:901px){ .topbar .title{display:none} }

/* ---------- страница камеры ---------- */
.pp{display:flex;flex-direction:column;height:100dvh;background:var(--dark)}
.stage{flex:1;min-height:0;position:relative;background:#000;display:flex;align-items:center;justify-content:center;overflow:hidden;touch-action:none}
.stage video{width:100%;height:100%;object-fit:contain;background:#000;display:block;transform-origin:0 0}
.stage.zoomed{cursor:grab}
.statusbar{flex:none;display:flex;align-items:center;gap:8px;min-height:46px;padding:7px 12px;background:var(--dark);border-bottom:1.5px solid var(--dark-3)}
.osd{display:flex;gap:8px;align-items:center;min-width:0}
.osd .badge{display:inline-flex;align-items:center;gap:7px;height:26px;padding:0 11px;border-radius:var(--r-pill);background:rgba(22,22,26,.8);color:#fff;font:700 12px/1 var(--font-text);border:1.5px solid rgba(255,255,255,.22)}
.osd .badge .led{width:8px;height:8px;border-radius:50%;background:#7a7a82}
.osd .badge.live .led{background:var(--coral);box-shadow:0 0 0 3px rgba(255,91,58,.35)}
.osd .badge.arch .led{background:var(--lemon)}
.osd.tr .tbtn{background:var(--dark-2);height:32px;min-width:44px;font-size:12px}
.osd.tr .tbtn[aria-pressed=true]{background:var(--lemon);color:var(--ink)}
.stage .center-msg{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--on-dark);font-weight:700;text-align:center;padding:24px;background:rgba(0,0,0,.55);z-index:4}
.spin{width:36px;height:36px;border-radius:50%;border:4px solid rgba(255,255,255,.25);border-top-color:var(--lemon);animation:spin .9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.dock{flex:none;display:flex;flex-direction:column;min-width:0}
.controls{flex:none;background:var(--dark);color:var(--on-dark);display:flex;align-items:center;gap:2px;padding:4px 10px;flex-wrap:wrap;border-top:1.5px solid var(--dark-3)}
.timewrap{flex:none;background:var(--dark);position:relative;border-top:1.5px solid var(--dark-3);padding-bottom:var(--safe-b)}
.timeline{display:block;width:100%;height:94px;touch-action:none;cursor:pointer;user-select:none}
.timeline.grab{cursor:grabbing}
.rangepop{position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%);z-index:20;background:var(--paper);color:var(--ink);border:var(--stroke-strong) solid var(--ink);border-radius:var(--r-lg);box-shadow:var(--shadow-hard);padding:12px 14px;display:flex;flex-direction:column;gap:10px;min-width:300px}
.rangepop .times{display:flex;gap:10px;align-items:center}
.rangepop .times .input{width:170px;height:34px;font-size:13px;border-radius:8px;padding:0 8px;text-align:center}
.rangepop .dur{font-weight:700;color:var(--muted);font-size:13px}
.rangepop .go{display:flex;gap:8px;align-items:center}
.cal{width:290px}
.cal .head{display:flex;align-items:center;justify-content:space-between;padding:2px 2px 8px;font:800 14px/1 var(--font-text)}
.cal .grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cal .dow{font:700 11px/1 var(--font-text);color:var(--muted);text-align:center;padding:6px 0}
.cal .d{height:34px;border:1.5px solid transparent;border-radius:8px;background:none;font:700 13px/1 var(--font-text);cursor:pointer}
.cal .d:disabled{color:var(--disabled);cursor:default}
.cal .d.has{background:var(--mint-soft)} .cal .d.sel{background:var(--ink);color:#fff} .cal .d.today{border-color:var(--ink)}
.cal .time{display:flex;gap:8px;align-items:center;margin-top:10px}

/* ---------- таблицы ---------- */
.table{width:100%;border-collapse:separate;border-spacing:0;border:var(--stroke) solid var(--ink);border-radius:var(--r-lg);overflow:hidden;background:var(--paper);font-size:13px}
.table th{background:var(--paper-2);color:var(--ink-2);text-align:left;font:800 11px/1.2 var(--font-text);text-transform:uppercase;letter-spacing:.06em;padding:11px 14px;border-bottom:var(--stroke) solid var(--ink)}
.table td{padding:11px 14px;border-top:1px solid var(--line);font-weight:600;vertical-align:middle}
.table tbody tr:first-child td{border-top:0}
.table tbody tr:hover td{background:var(--selection)}
.tablewrap{overflow-x:auto}
.bar{height:12px;border:var(--stroke) solid var(--ink);border-radius:var(--r-pill);background:var(--paper);overflow:hidden}
.bar span{display:block;height:100%;background:var(--mint)}
.bar.warn span{background:var(--lemon)} .bar.bad span{background:var(--coral)}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-4)}
.form-grid .full{grid-column:1/-1}

/* ---------- мобильные ---------- */
@media (max-width:900px){
  .page{padding:var(--s-4)}
  .h1{font-size:26px}
  .topbar{padding:0 var(--s-3);gap:var(--s-2)}
  .topnav{display:none}
  .cam-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--s-4)}
}
@media (max-width:640px){
  :root{--topbar-h:54px}
  .logo small{display:none}
  .hide-sm{display:none!important}
  .cam-grid{grid-template-columns:1fr 1fr;gap:12px}
  .cam-card .body{padding:8px 10px} .cam-card .name{font-size:13.5px}
  .timeline{height:98px}
  .controls{padding:2px 6px}
  .tbtn{min-width:38px;height:44px;padding:0 6px}
  .tsep{display:none}
  .form-grid{grid-template-columns:1fr}
  .rangepop{min-width:0;width:calc(100vw - 16px);padding:10px 12px;gap:8px}
  .rangepop .times{flex-wrap:nowrap;gap:6px}
  .rangepop .times .input{width:0;flex:1;min-width:0;font-size:12.5px;padding:0 4px}
  .rangepop .times .muted{display:none}
  .rangepop .hintline{display:none}
  .pp .logo b{display:none}
  .pp .topbar{gap:6px}
  .modal{padding:var(--s-5)}
}
@media (max-width:420px){ .cam-grid{grid-template-columns:1fr} }
@media (max-width:400px){ .zoombtn{display:none} }
@media (prefers-reduced-motion:reduce){ *{animation-duration:.01ms!important;transition-duration:.01ms!important} }

/* панели поверх видео (класс .ovl ставит скрипт: низкий экран — телефон на боку — или полноэкранный режим); сами прячутся (.idle) */
.pp.ovl{position:relative;overflow:hidden}
.pp.ovl .topbar{position:absolute;top:0;left:0;right:0;background:rgba(255,255,255,.94);transition:opacity .2s,transform .2s}
.pp.ovl .stage{position:absolute;inset:0}
.pp.ovl .statusbar{position:absolute;left:0;right:0;top:var(--topbar-h);z-index:6;background:transparent;border-bottom:0;pointer-events:none;transition:top .2s,opacity .2s}
.pp.ovl .statusbar .osd.tr{pointer-events:auto}
.pp.ovl .dock{position:absolute;left:0;right:0;bottom:0;z-index:25;background:rgba(22,22,26,.88);transition:opacity .2s,transform .2s}
.pp.ovl .controls{background:transparent;border-top:0}
.pp.ovl .timewrap{background:transparent;border-top:0}
.pp.ovl.idle .topbar{opacity:0;transform:translateY(-100%);pointer-events:none}
.pp.ovl.idle .dock{opacity:0;transform:translateY(100%);pointer-events:none}
.pp.ovl.idle .statusbar{top:0}
.pp.ovl .rangepop{bottom:calc(100% + 6px)}
@media (max-height:560px){
  :root{--topbar-h:48px}
  .pp .controls{flex-wrap:nowrap;overflow-x:auto;padding:2px 6px;scrollbar-width:none}
  .pp .controls::-webkit-scrollbar{display:none}
  .pp .controls .preset,.pp .controls .lbl.hide-sm{display:none}
  .pp .tbtn{min-width:40px;height:40px;flex:none}
  .pp .timeline{height:86px}
  .statusbar{min-height:40px;padding:4px 12px}
}
