/* TNP portal admin. Brand tokens from preview/styles.css: red, ink, paper, Inter, dark header. */
@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url('../brand/InterVariable.woff2') format('woff2')}
:root{--red:#d24a43;--action:#bd423c;--ink:#151515;--paper:#f1f1f1;--card:#fff;--muted:#626262;--line:#cdcdcd;--ok:#2f7a4b;--warn:#a55d00;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-family:Inter,Arial,sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-size:15px;line-height:1.5}
a{color:var(--action)}a:hover{color:var(--ink)}
h1{font-size:1.9rem;font-weight:500;letter-spacing:-.03em;margin:.2em 0 .5em;overflow-wrap:anywhere}
h2{font-size:1.15rem;font-weight:600;margin:1.6em 0 .6em;overflow-wrap:anywhere}
.card h2{margin-top:0}
:focus-visible{outline:3px solid var(--red);outline-offset:3px}
.wrap{max-width:1180px;margin:0 auto;padding:0 16px}
.top{background:var(--ink);color:#fff;border-bottom:1px solid #393939}
.top-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 24px;min-height:64px;padding-top:10px;padding-bottom:10px}
.brand{display:flex;align-items:center;gap:12px;color:#fff;text-decoration:none;font-weight:600;letter-spacing:.02em}
.brand span{font-size:.9rem;color:#d6d6d6;font-weight:500}
.nav{display:flex;flex-wrap:wrap;gap:4px 18px;flex:1 1 auto}
.nav a{color:#d6d6d6;text-decoration:none;font-size:.9rem;padding:4px 0;border-bottom:2px solid transparent}
.nav a:hover{color:#fff}.nav a[aria-current=page]{color:#fff;border-bottom-color:var(--red)}
.who{display:flex;align-items:center;gap:12px;margin:0;font-size:.85rem;color:#d6d6d6}
.top .btn--ghost{color:#fff;border-color:#5a5a5a}
.main{padding-top:24px;padding-bottom:60px}
.lead{max-width:760px;color:var(--muted)}
.muted{color:var(--muted)}.small{font-size:.82rem}
.mono{font-family:var(--mono);font-size:.86em;overflow-wrap:anywhere}
h1.mono,h1 .mono{font-size:1.25rem;letter-spacing:0}
.crumbs{margin:0 0 4px;font-size:.9rem}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:0 20px;border-radius:100px;border:1px solid var(--action);background:var(--action);color:#fff;font:inherit;font-weight:500;cursor:pointer;text-decoration:none}
.btn:hover{background:var(--ink);border-color:var(--ink);color:#fff}
.btn--ghost{background:transparent;color:var(--ink);border-color:var(--line)}
.btn--ghost:hover{background:var(--ink);color:#fff}
.btn--sm{min-height:34px;padding:0 14px;font-size:.88rem}.btn--xs{min-height:28px;padding:0 10px;font-size:.8rem}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.actions{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0}.actions form{margin:0}
.panel{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:24px}
.panel--narrow{max-width:420px;margin:40px auto}
.form{display:grid;gap:14px;max-width:520px}.form--wide{max-width:none}
.form--row{display:flex;flex-wrap:wrap;gap:12px;align-items:center;max-width:none;margin:16px 0}
.field{display:grid;gap:6px;font-size:.88rem;font-weight:500}
input[type=text],input[type=password],input[type=number],input[type=search],input:not([type]),select,textarea{width:100%;font:inherit;font-weight:400;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
input[type=file]{max-width:100%;font:inherit}
textarea.code{font-family:var(--mono);font-size:13px;line-height:1.45;min-height:50vh;white-space:pre;overflow:auto;tab-size:2}
.hint{font-size:.85rem;color:var(--muted);margin:0}
.err{color:var(--action);font-weight:500;margin:0}
.flashes{list-style:none;padding:0;margin:0 0 18px;display:grid;gap:8px}
.flash{padding:10px 14px;border-radius:8px;background:#fff;border-left:4px solid var(--ok)}
.flash--err{border-left-color:var(--action)}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:14px;margin:16px 0}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px}
.card--warn{border-color:var(--warn)}
.card p{margin:.2em 0}
.big{font-size:1.7rem;font-weight:500;letter-spacing:-.03em}
.tbl-wrap{overflow-x:auto;background:var(--card);border:1px solid var(--line);border-radius:12px}
.tbl{width:100%;border-collapse:collapse;font-size:.9rem}
.tbl th,.tbl td{text-align:left;padding:9px 12px;border-bottom:1px solid #e4e4e4;vertical-align:top}
.tbl th{font-weight:600;font-size:.8rem;color:var(--muted);white-space:nowrap}
.tbl tr:last-child td{border-bottom:0}
.tbl td.mono{overflow-wrap:normal;white-space:nowrap}
.tbl-actions{text-align:right;white-space:nowrap}.tbl-actions form{display:inline;margin:0}
.tbl-actions input.code-xs{width:6.5em;min-height:28px;padding:0 8px;margin-right:6px;font-size:.8rem;vertical-align:middle}
.tag{display:inline-block;white-space:nowrap;font-family:Inter,Arial,sans-serif;font-size:.72rem;font-weight:600;padding:1px 8px;border-radius:100px;background:var(--ink);color:#fff;vertical-align:middle}
pre.diff,pre.log{background:#1d1d1d;color:#e8e8e8;padding:14px;border-radius:10px;overflow:auto;font:12.5px/1.5 var(--mono);max-height:70vh;white-space:pre}
pre.log{white-space:pre-wrap}
.diff .add{color:#8fd19e}.diff .del{color:#ff9b93}.diff .hunk{color:#9db7ff}
.media-grid{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,220px),1fr));gap:14px}
.media-item{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;display:grid;gap:6px;align-content:start}
.media-item img{width:100%;height:150px;object-fit:contain;background:repeating-conic-gradient(#bdbdbd 0 25%,#d9d9d9 0 50%) 0 0/16px 16px;border-radius:6px}
.media-item p{margin:0;overflow-wrap:anywhere}
@media (max-width:720px){h1{font-size:1.5rem}.top-row{gap:8px 14px}.who span{display:none}}
/* Техдокументы */
.field--inline{display:flex;align-items:center;gap:8px;font-weight:500}.field--inline select{width:auto;max-width:60vw}
.tag--muted{background:#e4e4e4;color:var(--ink)}
.vis{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:14px 24px}.grid2>*{min-width:0}.techdoc-form input[type=file]{width:100%}
fieldset.field{border:0;padding:0;margin:0;min-width:0}fieldset.field legend{padding:0;margin-bottom:6px}
.radios label{display:flex;gap:8px;align-items:flex-start;font-weight:400;margin:4px 0}
.radios input,.products-box input{margin-top:4px;flex:0 0 auto}
input[type=month],input[type=search]{width:100%;font:inherit;font-weight:400;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
.products-box{max-height:420px;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 14px;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,240px),1fr));gap:4px 20px}
.products-family{display:grid;gap:2px;align-content:start;margin-bottom:8px}.products-family p{margin:6px 0 2px;font-weight:600}
.products-box label{display:flex;gap:8px;align-items:flex-start;font-weight:400;font-size:.88rem;padding:2px 0}
/* Заявки (stage 3) */
.cards--split{grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));align-items:start}
.pairs{display:grid;grid-template-columns:minmax(120px,auto) 1fr;gap:6px 14px;margin:0}
.pairs dt{color:var(--muted);font-size:.85rem}.pairs dd{margin:0;overflow-wrap:anywhere}
.card h3{font-size:.95rem;margin:1.2em 0 .4em}
.message{white-space:pre-wrap;overflow-wrap:anywhere}
.deliveries{list-style:none;padding:0;margin:0;display:grid;gap:12px}
.deliveries form{display:inline;margin:0 0 0 6px}
.dot::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;background:var(--line);vertical-align:1px}
.dot--sent::before{background:var(--ok)}.dot--pending::before,.dot--sending::before{background:var(--warn)}.dot--failed::before{background:var(--action)}
.check{display:flex;gap:10px;align-items:center;font-weight:500}
.check input{width:18px;height:18px;accent-color:var(--action)}
@media (max-width:520px){.pairs{grid-template-columns:1fr}.pairs dd{margin-bottom:6px}}
.deliveries+h2{margin-top:1.6em}
/* Nine sections since v0.21.0: a tighter gap keeps the header on one row at 1440 px. */
.nav{gap:4px 14px}.who{margin-left:auto}
/* Stage 2: record forms and texts in five languages */
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.section{margin:18px 0}.section h2{margin-top:0}
.section-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:10px 20px;margin:24px 0 8px}
.section-head h2{margin:0}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));gap:14px 18px}
.field--wide{grid-column:1/-1}
.field-label{font-weight:500}
.field .help,.help{font-size:.8rem;font-weight:400;color:var(--muted)}
.field.invalid input,.field.invalid select,.field.invalid textarea{border-color:var(--action)}
.readonly{display:block;padding:10px 12px;border:1px dashed var(--line);border-radius:8px;background:#fafafa}
.group{border:1px solid var(--line);border-radius:12px;padding:12px 14px 14px;margin:0;min-width:0}
.group legend{font-weight:600;font-size:.9rem;padding:0 6px}
.list-item{border-top:1px solid #e4e4e4;padding:10px 0 6px}
.list-item:first-of-type{border-top:0}
.list-item-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.list-num{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;border-radius:100px;background:var(--paper);font-size:.78rem;font-weight:600}
.row-ops{display:inline-flex;align-items:center;gap:4px}
.op{min-width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-size:.9rem;cursor:pointer}
.op:hover{background:var(--ink);color:#fff}.op[disabled]{opacity:.35;cursor:default;background:#fff;color:var(--ink)}
.op--del:hover{background:var(--action);border-color:var(--action)}
.checks{display:flex;flex-wrap:wrap;gap:4px 14px;font-weight:400}
.checks--long{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,250px),1fr));max-height:220px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff}
.check{display:flex;align-items:flex-start;gap:8px;font-weight:400;font-size:.88rem;overflow-wrap:anywhere}
.check input{margin-top:3px;flex:none}
.err-list{margin:0 0 14px;padding:10px 14px 10px 30px;border-left:4px solid var(--action);background:#fff;border-radius:8px;color:var(--action);font-weight:500}
.tabs{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-size:.9rem}
.tabs-src{color:var(--muted);margin-right:4px}
.tabs a{padding:6px 12px;border-radius:100px;border:1px solid var(--line);text-decoration:none;color:var(--ink);background:#fff;font-weight:500}
.tabs a[aria-current=page]{background:var(--ink);border-color:var(--ink);color:#fff}
.tr-section{margin:0 0 14px;padding:16px}
.tr-section h3{margin:0 0 10px;font-size:1rem;font-weight:600;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.tr-row{display:grid;grid-template-columns:minmax(120px,170px) 1fr 1fr;gap:6px 14px;padding:10px 0;border-top:1px solid #ececec;align-items:start}
.tr-row:first-child{border-top:0}
.tr-label{display:flex;flex-direction:column;align-items:flex-start;gap:4px;font-size:.85rem;font-weight:500;padding-top:6px;overflow-wrap:anywhere}
.tr-cell{position:relative;display:grid;gap:4px;min-width:0}
.tr-cell--both{grid-column:2/-1}
.tr-cell textarea,.tr-cell input[type=text]{padding:8px 10px;font-size:.92rem}
.tr-cell textarea{min-height:70px;resize:vertical}
.tr-lang{position:absolute;top:-8px;right:8px;background:#fff;padding:0 4px;font-size:.66rem;font-weight:700;color:var(--muted);letter-spacing:.04em}
.tr-ref{font-size:.8rem;color:var(--muted);overflow-wrap:anywhere}
.tr-ro{margin:0;padding:8px 10px;border:1px dashed var(--line);border-radius:8px;background:#fafafa;font-size:.92rem;overflow-wrap:anywhere}
.tr-row--stale .tr-cell:last-child textarea,.tr-row--stale .tr-cell:last-child input[type=text]{border-color:var(--warn);background:#fffaf2}
.tr-row--missing .tr-cell:last-child textarea,.tr-row--missing .tr-cell:last-child input[type=text]{border-color:var(--action);background:#fff7f6}
.tr-row--draft .tr-cell:last-child textarea,.tr-row--draft .tr-cell:last-child input[type=text]{border-color:#3d6fb6;background:#f4f8ff}
.tr-box{border:0;border-left:3px solid #e4e4e4;margin:8px 0;padding:0 0 0 12px;min-width:0}
.tr-box legend{font-size:.8rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding:0}
.tr-item{border-top:1px dashed #e4e4e4;padding-top:6px;margin-top:6px}
.tr-item:first-of-type{border-top:0}
.st{display:inline-block;white-space:nowrap;font-size:.72rem;font-weight:600;padding:1px 8px;border-radius:100px;line-height:1.5}
.st--ok{background:#e5f2ea;color:var(--ok)}
.st--missing{background:#fbe4e2;color:#a3322c}
.st--stale{background:#fdf0dc;color:var(--warn)}
.st--draft{background:#e3ecfa;color:#2c5596}
.tr-count{white-space:nowrap}.tr-count a{text-decoration:none}
.card--link{display:block;color:inherit;text-decoration:none}
.card--link:hover{border-color:var(--ink)}
.langs{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px!important}
.filters{margin:8px 0 14px}.filters .field{min-width:min(100%,200px)}
.savebar{position:sticky;bottom:0;z-index:5;display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:flex-end;margin:20px -16px 0;padding:12px 16px;background:rgba(241,241,241,.96);border-top:1px solid var(--line);backdrop-filter:blur(4px)}
.savebar-note{flex:1 1 260px}
@media (max-width:760px){
  .tr-row{grid-template-columns:1fr}
  .tr-label{flex-direction:row;flex-wrap:wrap;align-items:center;padding-top:0}
  .tr-cell--both{grid-column:auto}
  .tr-box{padding-left:8px}
  .savebar .btn{flex:1 1 auto}
}
/* stage 2: fields keep their height in a row of the grid; selects match the inputs */
.field{align-content:start}
input[type=text],input[type=password],input[type=number],input[type=search],input:not([type]),select{height:44px}
details.files{margin:-6px 0 16px}details.files summary{cursor:pointer;width:max-content;max-width:100%}
details.files p{margin:6px 0 0;overflow-wrap:anywhere}
.tbl--langs{table-layout:fixed}.tbl--langs th:first-child{width:40%}
@media (max-width:600px){.tbl--langs{table-layout:auto}}

/* Техдокументы v0.23: visibility choices per kind and the preview a certificate publishes */
.radios label[hidden]{display:none}
.doc-thumb{display:inline-block;vertical-align:middle;margin-right:4px;line-height:0}
.doc-thumb img{width:40px;height:auto;border:1px solid var(--line);background:#fff}
/* Second factor (security.html, security_codes.html) */
.qr{display:block;width:min(100%,240px);height:auto;margin:6px 0 10px;background:#fff;border-radius:6px}
.key{font-size:1rem;letter-spacing:.04em}
.codes{columns:2 9em;margin:0;padding-left:1.6em;font-size:1rem;line-height:1.9}

/* Данные ERP (stage 5): one card per product, site and recipe_app side by side */
.erp-item{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;margin:16px 0}
.erp-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.erp-head h2{margin:0 6px 0 0;font-size:1.1rem}.erp-head h2 a{color:var(--ink);text-decoration:none}.erp-head h2 a:hover{color:var(--action)}
.erp-block{border-top:1px solid #e4e4e4;margin-top:14px;padding-top:12px}
.erp-block h3{margin:0 0 8px;font-size:.95rem;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.erp-compare{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:10px 24px}
.erp-side{margin:0 0 4px;font-size:.78rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;overflow-wrap:anywhere}
.erp-pairs{display:grid;grid-template-columns:minmax(110px,auto) 1fr;gap:2px 12px;margin:0;font-size:.9rem}
.erp-pairs dt{color:var(--muted)}.erp-pairs dd{margin:0;overflow-wrap:anywhere}
.erp-actions{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin-top:10px}.erp-actions form{margin:0}
.erp-keep{display:flex;flex-wrap:wrap;gap:8px;align-items:center;flex:1 1 320px}
.erp-keep input[type=text]{flex:1 1 180px;width:auto;min-width:0;height:34px;padding:6px 10px;font-size:.88rem}
.erp-block--kept{opacity:.55}.erp-block--kept:hover,.erp-block--kept:focus-within{opacity:1}
.erp-kept-note{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin:8px 0 0;color:var(--muted)}
.erp-inline{display:inline;margin:0}
.erp-docs{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.erp-docs li{border:1px solid #ececec;border-radius:10px;padding:10px 12px}
.erp-doc p{margin:0 0 2px;overflow-wrap:anywhere}
.erp-quality{margin-top:12px}.erp-quality summary{cursor:pointer;font-size:.9rem;font-weight:500;width:max-content;max-width:100%}
.erp-quality .tbl-wrap{margin-top:8px}
@media (max-width:520px){.erp-pairs{grid-template-columns:1fr}.erp-pairs dd{margin-bottom:4px}}

/* One line per row. Fields of one grid row are subgrids of four rows (caption, field, hint, error),
   so captions start together and the fields sit on one line whatever the caption's line count. */
@supports (grid-template-rows:subgrid){
  :is(.grid,.grid2)>.field:not(fieldset){grid-row:span 4;grid-template-rows:subgrid;row-gap:0}
  :is(.grid,.grid2)>.field:not(fieldset)>:not(.field-label){margin-top:6px}
  :is(.grid,.grid2)>.field:not(fieldset)>.check{grid-row:2}
  :is(.grid,.grid2)>:not(.field),:is(.grid,.grid2)>fieldset{grid-row:span 4;align-self:start}
}

/* --- Корзина и история настроек (миграция 008) --- */
.tbl td.settings-cell{min-width:16rem}
/* --- конец блока «Корзина и история настроек» --- */
/* === audit/admin-records: create, delete, restore records; image fields === */
.img-pick{display:flex;gap:8px;align-items:center;min-width:0}
.img-pick input{flex:1 1 auto;min-width:0}
.img-thumb{flex:0 0 auto;width:44px;height:44px;object-fit:cover;border:1px solid var(--line);border-radius:6px;background:#fff}
.record-actions{margin-top:24px;justify-content:flex-end}
/* === end audit/admin-records === */
/* Eleven sections since v0.39.0 (Корзина): on wide screens the logo alone names the admin, so
   the sections and «Выйти» stay on one row at 1440 px. */
@media (min-width:1200px){.brand span{display:none}}
/* «Сгенерировать превью» of a system (admin.js) */
.cutgen-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:4px 0 0}
.cutgen.is-busy{cursor:progress}
.cutgen-result{display:block;width:100%;max-width:600px;height:auto;margin-top:10px;border:1px solid var(--line);border-radius:6px;background:#fff}
