:root{
  --bg:#eef2f4; --panel:#fff; --line:#dbe2e7; --text:#1f2a33; --muted:#66757f;
  --accent:#2b7fd9; --accent-soft:#e6f1fc; --lock:#f1f3f5; --bad:#c9443b; --ok:#2e9e5b; --day:#f6f8e8;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font:14px/1.4 "Segoe UI",Arial,sans-serif}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:1px solid var(--line);background:#fff;border-radius:6px;padding:6px 12px}
button:hover{background:#f5f8fa}
button.primary{background:var(--accent);border-color:var(--accent);color:#fff}
button.primary:hover{background:#2472c6}
button.link{border:0;background:none;padding:2px 4px;color:var(--accent)}
button.danger{color:var(--bad)}
button:disabled{opacity:.5;cursor:default}
input,select,textarea{border:1px solid var(--line);border-radius:6px;padding:6px 9px;background:#fff}
input:focus,select:focus,textarea:focus{outline:2px solid #a9cdf2;outline-offset:-1px}

/* вход */
.login{max-width:340px;margin:12vh auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:26px}
.login h1{margin:0 0 4px;font-size:20px}
.login p{margin:0 0 16px;color:var(--muted);font-size:13px}
.login label{display:block;font-size:12.5px;color:var(--muted);margin:10px 0 3px}
.login input{width:100%}
.login button{width:100%;margin-top:16px;padding:9px}
.err{color:var(--bad);font-size:13px;margin-top:10px;min-height:18px}

/* шапка */
.top{background:var(--panel);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:6px;padding:0 16px;flex-wrap:wrap;position:sticky;top:0;z-index:30}
.top .brand{font-weight:600;font-size:16px;margin-right:14px;padding:12px 0}
.top .nav{border:0;border-bottom:3px solid transparent;border-radius:0;background:none;padding:13px 12px 10px;color:var(--muted)}
.top .nav.on{color:var(--accent);border-color:var(--accent);font-weight:600}
.top .sp{flex:1}
.top .who{color:var(--muted);font-size:13px}
main{padding:14px 16px 40px}
.bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.bar .sp{flex:1}
.bar label{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:5px}
.muted{color:var(--muted);font-size:13px}

/* таблица заявок */
.grid-wrap{background:var(--panel);border:1px solid var(--line);border-radius:8px;overflow:auto;max-height:calc(100vh - 150px)}
table{border-collapse:collapse;width:100%;font-size:13px}
th,td{border-bottom:1px solid var(--line);border-right:1px solid #edf0f2;padding:5px 7px;text-align:left;vertical-align:top}
th{background:#f4f7f9;color:var(--muted);font-weight:600;font-size:12px;position:sticky;top:0;z-index:5;white-space:nowrap}
th.mine{box-shadow:inset 0 3px 0 var(--accent)}
table.grid td{min-width:70px;max-width:260px;overflow-wrap:break-word;white-space:pre-wrap}
table.grid td.idc,table.grid td.act{white-space:nowrap;min-width:0}
table.grid td.ro{background:var(--lock);color:#56646e}
table.grid td.ed{cursor:cell}
table.grid td.ed:hover{box-shadow:inset 0 0 0 2px #a9cdf2}
table.grid td.num{text-align:right;white-space:nowrap}
table.grid td.c-date_real,table.grid td.c-date_added{white-space:nowrap}
table.grid td.editing{padding:0}
table.grid td.flash{animation:flash 1.2s}
@keyframes flash{from{background:#d9f2e2}to{background:transparent}}
.cell-input{width:100%;min-width:110px;border:2px solid var(--accent);border-radius:0;padding:4px 6px}
tr.day td{background:var(--day);font-weight:600;position:sticky;left:0}
tr.deleted td{text-decoration:line-through;color:#98a3ab}
td.act{background:#fff}
td.idc{color:var(--muted)}
.empty{padding:30px;text-align:center;color:var(--muted)}

/* простые таблицы (журнал, пользователи, права) */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:8px;overflow:auto}
table.plain td{vertical-align:middle}
table.plain td.wrap{max-width:420px;overflow-wrap:anywhere}
.old{color:var(--bad);text-decoration:line-through}
.new{color:var(--ok)}
.tag{display:inline-block;border-radius:4px;padding:1px 7px;font-size:12px;background:var(--accent-soft);color:#1c5fa8;white-space:nowrap}
.tag.bad{background:#fbe6e4;color:#a2362e}.tag.off{background:#eceff1;color:#66737d}
table.matrix th,table.matrix td{text-align:center}
table.matrix th:first-child,table.matrix td:first-child{text-align:left;position:sticky;left:0;background:#fff;z-index:2}
table.matrix th:first-child{background:#f4f7f9;z-index:6}
table.matrix tr.sec td{background:#f4f7f9;font-weight:600;color:var(--muted);text-align:left}
table.matrix input{width:17px;height:17px}

/* диалоги */
dialog{border:1px solid var(--line);border-radius:10px;padding:0;max-width:min(760px,94vw);width:100%;box-shadow:0 12px 40px rgba(0,0,0,.2)}
dialog::backdrop{background:rgba(20,30,40,.4)}
dialog .hd{padding:14px 18px;border-bottom:1px solid var(--line);font-weight:600;font-size:16px;display:flex;justify-content:space-between;align-items:center}
dialog .bd{padding:14px 18px;max-height:68vh;overflow:auto}
dialog .ft{padding:12px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}
.form{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.form label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:3px}
.form input,.form select,.form textarea{width:100%}
.form .wide{grid-column:1/-1}
.secret{font:600 18px Consolas,monospace;background:#f4f7f9;border:1px dashed var(--line);border-radius:6px;padding:10px;text-align:center;user-select:all;margin:10px 0}

#toasts{position:fixed;right:16px;bottom:16px;display:grid;gap:8px;z-index:100}
.toast{background:#24313b;color:#fff;border-radius:8px;padding:10px 14px;max-width:380px;box-shadow:0 6px 20px rgba(0,0,0,.25)}
.toast.bad{background:var(--bad)}
@media(max-width:700px){.form{grid-template-columns:1fr}}

/* движение ёмкостей */
table.tanks th,table.tanks td{padding:4px 6px}
table.tanks td.tank,table.tanks th.tank{position:sticky;left:0;background:#fff;min-width:190px;max-width:230px;white-space:normal;z-index:3;cursor:pointer;box-shadow:inset -2px 0 0 var(--line)}
table.tanks th.tank{background:#f4f7f9;z-index:7;cursor:default}
table.tanks td.tank small{display:block;color:var(--muted);font-size:11.5px}
table.tanks td.tank small.state{color:#a2362e}
table.tanks th.dayh{text-align:center;min-width:62px}
table.tanks th.dayh small{display:block;font-weight:400}
table.tanks th.dayh.today{box-shadow:inset 0 -3px 0 var(--accent);color:var(--accent)}
table.tanks td.lv{min-width:62px;max-width:130px;text-align:right;font-variant-numeric:tabular-nums;white-space:normal}
table.tanks td.lv.ed{cursor:cell}
table.tanks td.lv.wk,table.tanks th.wk{background-color:#f7f8fa}
table.tanks td.lv.today{background-color:#eef6fe}
table.tanks td.lv.zero{color:#aab3ba}
table.tanks td.lv.has-c{background-image:linear-gradient(225deg,#e0a100 7px,transparent 7px)}
table.tanks td.lv .st{display:block;font-size:11.5px;color:#a2362e;text-align:left;line-height:1.25}
table.tanks td.lv.editing{padding:0}
table.tanks td.lv .cell-input{min-width:90px;text-align:right}
table.tanks tfoot{position:sticky;bottom:0;z-index:6}
table.tanks tfoot td{background:#f4f7f9;font-weight:600}
table.tanks tfoot td.tank{background:#f4f7f9;cursor:default}
table.tanks tr.day td{position:static}
.form textarea{resize:vertical}

/* совместная работа */
.top .online{color:var(--ok);font-size:12.5px;margin-right:10px}
.offline{background:var(--bad);color:#fff;padding:9px 16px;font-weight:600;position:sticky;top:46px;z-index:29}
td[data-busy]{box-shadow:inset 0 0 0 2px #e07b00 !important;position:relative;cursor:not-allowed !important}
td[data-busy]::after{content:"\270E  " attr(data-busy);position:absolute;top:-10px;right:-1px;background:#e07b00;color:#fff;
  font-size:10.5px;font-weight:600;line-height:1.3;padding:0 5px;border-radius:3px;white-space:nowrap;z-index:9;pointer-events:none}
td.remote{animation:remote 4s}
@keyframes remote{0%,60%{background-color:#ffe9b8}100%{background-color:transparent}}
.cmp{border:1px solid var(--line);border-radius:6px;padding:8px 10px;background:#f4f7f9;min-height:36px;white-space:pre-wrap;overflow-wrap:anywhere}
.cmp.mine{background:var(--accent-soft);border-color:#b9d6f3}

/* компактный вид: таблицы занимают ширину окна, длинный текст переносится внутри ячейки */
main{padding:10px 10px 30px}
table.grid{table-layout:fixed;font-size:12px;line-height:1.3}
table.grid th,table.grid td{padding:3px 4px}
table.grid th{white-space:normal;font-size:11px;line-height:1.2;vertical-align:bottom;overflow-wrap:break-word;hyphens:auto}
table.grid td{min-width:0;max-width:none;overflow-wrap:anywhere}
table.grid td.num{white-space:nowrap}
table.orders{min-width:1080px}
table.grid td.idc{font-size:11px;padding-right:2px}
table.grid td.act{white-space:normal;text-align:center;padding:1px}
table.grid td.act button.link{padding:1px 2px;display:block;margin:0 auto;font-size:12px}
table.grid td.editing{overflow:visible;position:relative}
table.grid .cell-input{position:relative;z-index:8;min-width:130px;font-size:13px}
table.grid tr.day td{padding:4px 6px}
table.tanks{min-width:1120px;font-size:11.5px}
table.tanks td.tank,table.tanks th.tank{min-width:0;max-width:none;padding:3px 5px}
table.tanks td.tank small{font-size:10.5px;overflow-wrap:anywhere}
table.tanks th.dayh{min-width:0;padding:3px 0;font-size:11px}
table.tanks th.dayh small{font-size:9.5px}
table.tanks td.lv{min-width:0;max-width:none;padding:3px 2px;white-space:normal}
table.tanks td.lv .st{font-size:10px;line-height:1.15;overflow-wrap:anywhere}
table.tanks td.lv .cell-input{min-width:96px}
table.tanks td.lv:nth-last-child(-n+2) .cell-input,table.orders td:nth-last-child(-n+3) .cell-input{float:right}
.grid-wrap{max-height:calc(100vh - 128px)}

table.grid th{overflow-wrap:normal;hyphens:manual}
table.orders td{overflow-wrap:break-word}
table.tanks{min-width:1240px}
table.tanks td.lv{font-size:11px;padding:3px 1px;white-space:nowrap}
table.tanks td.lv .st{white-space:normal}
table.tanks tfoot td.lv{font-size:10.5px}
@media(max-width:1400px){table.orders{font-size:11.5px}}

/* цвет строки по виду жидкости — те же цвета, что в Excel-таблице */
:root{--liq-n2:#bfbfbf;--liq-o2:#bdd7ee;--liq-ar:#ffffff;--liq-co2:#e2efda}
table.grid tr.liq-n2 td{background-color:var(--liq-n2)}
table.grid tr.liq-o2 td{background-color:var(--liq-o2)}
table.grid tr.liq-ar td{background-color:var(--liq-ar)}
table.grid tr.liq-co2 td{background-color:var(--liq-co2)}
table.grid tr.liq-n2 td.idc,table.grid tr.liq-o2 td.idc{color:#3c4a54}
/* «только чтение» теперь штриховка, а не серая заливка: серый цвет занят азотом */
table.grid td.ro{background-color:transparent;color:inherit;
  background-image:repeating-linear-gradient(135deg,rgba(0,0,0,.07) 0 1px,transparent 1px 6px)}
table.grid tr.liq-n2 td.ro,table.grid tr.liq-o2 td.ro,table.grid tr.liq-ar td.ro,table.grid tr.liq-co2 td.ro{color:inherit}
table.grid tr td.act{background-image:none}
table.tanks td.tank.liq-n2{background:var(--liq-n2)}
table.tanks td.tank.liq-o2{background:var(--liq-o2)}
table.tanks td.tank.liq-co2{background:var(--liq-co2)}
table.tanks td.tank.liq-n2 small,table.tanks td.tank.liq-o2 small{color:#3c4a54}
.liq-legend{display:inline-flex;gap:4px;margin-left:6px}
.liq-chip{font-size:11.5px;border:1px solid #c8d0d6;border-radius:4px;padding:1px 7px}
.liq-chip.liq-n2{background:var(--liq-n2)}.liq-chip.liq-o2{background:var(--liq-o2)}
.liq-chip.liq-ar{background:var(--liq-ar)}.liq-chip.liq-co2{background:var(--liq-co2)}

/* справочник клиентов и подстановка */
.pick{position:fixed;left:16px;bottom:16px;z-index:90;background:#fff;border:1px solid #c5dcf3;border-radius:10px;
  box-shadow:0 10px 30px rgba(0,0,0,.18);padding:10px 12px;max-width:min(520px,92vw);display:grid;gap:6px}
.pick-hd{display:flex;gap:10px;justify-content:space-between;align-items:flex-start;font-size:13px;font-weight:600}
.pick-it{text-align:left;display:grid;gap:1px;padding:6px 10px;border-color:var(--line)}
.pick-it.on{border-color:var(--accent);background:var(--accent-soft)}
.pick-it small{color:var(--muted);font-weight:400}
.pick-note{font-size:12px;color:var(--muted)}
input.auto{background:#fff8dc}
.addr-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px;align-items:center}
.chip-btn{font-size:12px;padding:2px 8px;border-radius:12px}
.hint-line{font-size:12.5px;color:#96600f;margin-top:4px}
table.clients td{vertical-align:top}
.cl-name{min-width:220px}
.cl-name small,.cl-addr small{display:block;color:var(--muted);font-size:11.5px}
.cl-addr{padding:3px 0;border-bottom:1px dashed var(--line)}
.cl-addr:last-child{border-bottom:0}
.cl-addr small{display:inline}
.hidden-addr{opacity:.55}
.dups{background:#fff8e1;border:1px solid #ecd9a0;border-radius:8px;padding:8px 12px;margin-bottom:10px;font-size:13px}
.dups summary{cursor:pointer;font-weight:600}
.dup{padding:3px 0}

/* заполненная «Причина переноса»: мягкий красный поверх цвета строки */
table.grid tr td.moved{background-color:#f6d5d1;color:#8a1f15;font-weight:600}
table.grid tr td.moved.ed:hover{box-shadow:inset 0 0 0 2px #e3a29a}

/* закрытый период, итоги дня, перенос, копии */
.period{font-size:12.5px;color:var(--muted);border:1px solid var(--line);border-radius:12px;padding:2px 9px;background:#fff;white-space:nowrap}
.period.on{color:#7a4b00;background:#fff3d6;border-color:#ecd39a}
.period .link{font-size:12px;padding:0 0 0 4px}
.day-tot{font-weight:400;margin-left:14px;display:inline-flex;gap:4px;align-items:center;color:var(--muted);font-size:12px}
.day-lock{font-weight:400;margin-left:12px;color:#7a4b00;font-size:12px}
.req{color:var(--bad);font-weight:700}
.reasons{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center}
.reasons label{display:inline-flex;align-items:center;gap:4px;color:var(--text);font-size:13.5px;margin:0}
.reasons input[type=radio]{width:auto}
.reasons input:not([type]){flex:1;min-width:160px}
.mv-sum{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.backups,.sessions{margin-top:16px;padding:12px 14px}
.bk-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.bk-head .sp{flex:1}
.ok-line{color:var(--ok);margin:4px 0}

/* свой выпадающий список и плитки жидкости */
.combo,.tiles{position:fixed;z-index:95;background:#fff;border:1px solid #b9d0e6;border-radius:8px;
  box-shadow:0 10px 28px rgba(20,40,60,.18);font-size:13px}
.combo{max-height:290px;overflow:auto;padding:4px 0;max-width:min(560px,94vw)}
.combo-it{display:flex;justify-content:space-between;align-items:baseline;gap:14px;padding:6px 12px;cursor:pointer}
.combo-it:hover{background:#f2f7fc}
.combo-it.on{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}
.combo-it small{color:var(--muted);font-size:11.5px;white-space:nowrap}
.combo-it.own small{color:#1c5fa8}
.combo-it.typed span{color:#96600f}
.combo-empty{padding:6px 12px;color:var(--muted)}
.tiles{padding:10px 12px;display:grid;gap:8px;max-width:min(640px,94vw)}
.tiles-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.tiles-l{width:34px;color:var(--muted);font-size:12px}
.tile{padding:5px 11px;border-radius:6px;border:1px solid #c8d0d6;font-size:13px}
.tile.on{outline:2px solid var(--accent);outline-offset:1px;font-weight:600}
.tile.liq-n2{background:var(--liq-n2)}.tile.liq-o2{background:var(--liq-o2)}
.tile.liq-ar{background:var(--liq-ar)}.tile.liq-co2{background:var(--liq-co2)}
.tiles-foot{display:flex;align-items:center;gap:10px;border-top:1px solid var(--line);padding-top:8px}
.tiles-foot .sp{flex:1}

/* поле правки текста шире узкой ячейки — значение видно целиком */
table.orders .cell-input[type=text]{min-width:240px}
.bar input[type=search]{width:150px}
.bar{gap:6px}

/* быстрые фильтры заявок */
.bar.filters{margin-top:-6px}
.segs{display:inline-flex}
.seg{border-radius:0;padding:4px 10px}
.segs .seg:first-child{border-radius:6px 0 0 6px}
.segs .seg:last-child{border-radius:0 6px 6px 0;border-left:0}
.seg.on,.f-date.on,select.on,.f-chk:has(input:checked){background:var(--accent-soft);border-color:#9cc3ec;color:#1c5fa8}
.f-date{padding:3px 6px}
.bar select{padding:4px 8px;max-width:220px}
.f-chk{border:1px solid var(--line);border-radius:6px;padding:3px 9px;background:#fff;cursor:pointer}
input.copied{background:#eaf3fd}

/* широкие окна: лист рейса, сводка журнала */
dialog.wide-dialog{max-width:min(1200px,96vw)}
table.sum td.n{text-align:right}
table.sum td.bad{color:var(--bad);font-weight:600}
.products{background:#f4f8fc;border:1px solid #c9dcef;border-radius:8px;padding:8px 12px;margin-bottom:10px;font-size:13px}
.products summary{cursor:pointer;font-weight:600}
.products input:not([type]){width:100%;min-width:220px}

/* лист рейса */
.trip-preview{display:grid;gap:18px}
.trip-sheet{background:#fff;border:1px solid var(--line);border-radius:6px;padding:12px 14px;color:#000}
.ts-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:8px;text-align:right;font-size:13px}
.ts-head h2{margin:0;font-size:18px;text-align:left}
table.ts{font-size:12px}
table.ts th,table.ts td{border:1px solid #9aa5ad;padding:4px 5px;vertical-align:top;position:static}
table.ts th{background:#eef1f3;color:#000;white-space:normal}
table.ts td.c{text-align:center;white-space:nowrap}
table.ts td.n{text-align:right;white-space:nowrap}
table.ts td:last-child{min-width:70px}
.ts-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px 30px;margin-top:12px;font-size:13px}
#print-area{display:none}
@media print{
  @page{size:A4 landscape;margin:10mm}
  body.printing{background:#fff}
  body.printing > *:not(#print-area){display:none !important}
  body.printing #print-area{display:block}
  #print-area .trip-sheet{border:0;padding:0;break-after:page}
  #print-area .trip-sheet:last-child{break-after:auto}
  #print-area table.ts tr{break-inside:avoid}
}

/* четыре кнопки строки — по две в ряд, чтобы строки не росли */
table.grid td.act{line-height:1.1}
table.grid td.act button.link{display:inline-block;width:50%;margin:0;padding:2px 0}
table.sum th{white-space:normal;vertical-align:bottom}
table.sum td{white-space:nowrap}

/* строка с датой в заявках — ярче, чтобы дни отделялись сразу */
table.orders tr.day td{background:#ffd966;color:#3d2e00;font-size:13px;border-top:2px solid #e0b100;border-bottom:1px solid #e0b100}
table.orders tr.day .day-tot{color:#5c4600}
table.orders tr.day .liq-chip{border-color:#c9a000}

/* расписание копий и восстановление */
.bk-sched,.bk-store{background:#f7f9fb;border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin:8px 0}
.bk-sched .bar{margin-bottom:4px}
.bk-times{display:inline-flex;gap:4px;flex-wrap:wrap}
.bk-time{background:var(--accent-soft);border-color:#9cc3ec;color:#1c5fa8;display:inline-flex;align-items:center;gap:2px}
.bk-time .link{padding:0 2px;font-size:11px}
button.danger-btn{background:var(--bad);border-color:var(--bad)}
button.danger-btn:hover{background:#a8362e}
.bad-num{color:var(--bad)}

/* где хранить копии */
.bk-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:3px 0}
.bk-row code,.hint-list code{background:#fff;border:1px solid var(--line);border-radius:4px;padding:1px 6px;font-size:12.5px}
.bk-row .ok-line,.bk-row .err{margin:0;font-size:13px;min-height:0}
.hint-list{margin:8px 0;padding-left:18px;line-height:1.6}
.bk-src{margin:6px 0 8px}

/* «Показывать в таблице» во вкладке «Права» */
table.matrix .show-col{background:#f4f8fc}
table.matrix tr.hidden-col td:first-child{color:var(--muted);text-decoration:line-through}

/* перетаскивание строк */
table.grid td.idc.drag{cursor:grab}
table.grid td.idc.drag::before{content:"⋮⋮ ";color:#9aa5ad;letter-spacing:-2px}
table.grid tr.dragging td{opacity:.45}
table.grid tr.drop-above td{box-shadow:inset 0 3px 0 var(--accent)}
table.grid tr.drop-below td{box-shadow:inset 0 -3px 0 var(--accent)}
table.grid tr.moved-row td{animation:flash 1.5s}
