/* Вёрстка формы 2026-10 (v96) — поверх стилей index.html и layout.js (один лист).
   Светлый фон, белые карточки без рамок, залитые поля с подписью внутри, пилюли, одна тёмная кнопка,
   один акцентный синий + цветные метки блоков. Ничего из контролов не скрывается навсегда:
   #ship-kind (дубль технологии) и #dngclass-fld (класс опасности) спрятаны до нужного контекста. */
/* Цвета — как на сайте (решение пользователя 22.10.2026): акцент #1985c5, голубая подложка, стальной тёмный.
   Новые только метки блоков у заголовков и подложка залитых полей. */
body.op-proto{
  --bg:var(--paper); --field:#f3f4f6;
  --ok-soft:#e4efe8; --ok-ink:#357a52;
  --c-route:var(--accent); --c-cargo:#f59e0b; --c-wagon:#43946b; --c-fees:#7c3aed; --c-door:#475569;
  --shadow:0 1px 2px rgba(15,23,42,.04),0 12px 32px rgba(15,23,42,.07);
  background:var(--bg); color:var(--ink);
  font-family:Inter,"Segoe UI",system-ui,-apple-system,Roboto,sans-serif;
}
body.op-proto h1{font-size:1.65rem;font-weight:800;letter-spacing:-.02em}
body.op-proto .calc-date{background:#fff;border-radius:999px;padding:4px 6px 4px 14px;box-shadow:var(--shadow);font-weight:500}
body.op-proto .calc-date input[type=date]{border:0;background:var(--field);border-radius:999px;padding:0 10px;height:32px}
body.op-proto .calc-date button{border:0;background:var(--field);color:var(--muted);border-radius:999px;height:32px;padding:0 12px}
body.op-proto .calc-date button:hover{background:var(--accent-soft);color:var(--accent)}

/* ---- лист: отдельные карточки на сером фоне, расчёт справа прилипает ---- */
body.op-proto .op-sheet{background:transparent;border:0;box-shadow:none;gap:16px;margin-top:-54px;align-items:start}
body.op-proto .op-in{background:transparent;padding:0;border-radius:0}
body.op-proto .op-out{background:var(--card);border:0;border-radius:22px;padding:22px 24px 24px;box-shadow:var(--shadow);
  position:sticky;top:16px;max-height:calc(100vh - 32px);overflow:auto}
body.op-proto .op-in .hero-panel,body.op-proto .op-in .sect,body.op-proto .op-in .rc-zone{
  background:var(--card);border-radius:20px;padding:18px 20px 16px;box-shadow:var(--shadow);margin-top:12px}
body.op-proto .op-in .hero-panel{margin-top:0}
body.op-proto .op-in .rc-zone{margin-top:12px}
body.op-proto .hero{--hmap:300px}
body.op-proto .hero .rmap{border-radius:22px}

/* ---- заголовки блоков: без капса, с цветной меткой ---- */
body.op-proto .op-h,body.op-proto .op-in .sect-h{font-size:.98rem;font-weight:700;letter-spacing:0;text-transform:none;color:var(--ink);
  margin:0 0 12px;display:flex;align-items:center;gap:9px}
body.op-proto .op-h::after{display:none}
body.op-proto .op-h::before,body.op-proto .op-in .sect-h::before{content:"";width:10px;height:10px;border-radius:50%;flex:none;background:var(--c-route)}
body.op-proto .op-h-out::before{background:var(--steel)}
body.op-proto .op-in .op-s0 .sect-h::before{background:var(--c-cargo)}
body.op-proto .op-in .op-s1 .sect-h::before{background:var(--c-wagon)}
body.op-proto .op-in .op-s2 .sect-h::before{background:var(--c-fees)}

/* ---- поля: залитые, подпись внутри ---- */
body.op-proto .op-in .field,body.op-proto .op-in .fld,body.op-proto .rc-drawer .fld{
  background:var(--field);border-radius:14px;padding:8px 14px 7px;margin:0 0 10px}
body.op-proto .op-in label,body.op-proto .op-out label,body.op-proto .rc-drawer label{
  font-size:.74rem;text-transform:none;letter-spacing:0;color:var(--muted);font-weight:500;margin:0 0 1px}
body.op-proto .op-in .field label,body.op-proto .op-in .fld label{display:flex}
body.op-proto .op-in label .lbl-dim{margin-left:.3em}   /* «Станция распыления — срок…»: в flex-подписи пробел перед пояснением пропадал */
body.op-proto .op-in input[type=text],body.op-proto .op-in input[type=number],body.op-proto .op-in input[type=search],
body.op-proto .op-in select,body.op-proto .rc-drawer input[type=text],body.op-proto .rc-drawer input[type=number],
body.op-proto .rc-drawer input[type=date],body.op-proto .rc-drawer input[type=datetime-local],body.op-proto .rc-drawer select{
  border:0;background:transparent;padding:0;min-height:26px;font-size:.98rem;border-radius:0;color:var(--ink);width:100%}
body.op-proto .op-in input:focus,body.op-proto .op-in select:focus,body.op-proto .rc-drawer input:focus,body.op-proto .rc-drawer select:focus{outline:none}
body.op-proto .op-in .field:focus-within,body.op-proto .op-in .fld:focus-within,body.op-proto .rc-drawer .fld:focus-within{box-shadow:0 0 0 2px var(--accent) inset}
body.op-proto .op-in select,body.op-proto .rc-drawer select{appearance:none;-webkit-appearance:none;padding-right:18px;
  background:transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%236b7280' stroke-width='2'/%3E%3C/svg%3E") no-repeat right 2px center;text-overflow:ellipsis}
body.op-proto .op-in .grid2{gap:10px;margin-top:0!important}
body.op-proto .op-in .field[style],body.op-proto .op-in .fld[style]{margin-top:0!important}
body.op-proto .op-in .hint,body.op-proto .op-in .st-par-info{font-size:.78rem;color:var(--muted);margin:2px 0 8px}
body.op-proto .op-in .tip-btn,body.op-proto .op-out .tip-btn{background:#e4e7ec;color:var(--muted)}
body.op-proto .op-in .chk-row{margin-top:8px}
body.op-proto .op-in .chk{font-size:.92rem;line-height:1.35}
body.op-proto .op-in .chk input,body.op-proto .rc-drawer .chk input{width:18px;height:18px;accent-color:var(--accent)}
body.op-proto .op-in .pl-note{font-size:.8rem;color:var(--muted)}
body.op-proto .op-in .swap button{border:0;background:var(--field);width:36px;height:36px;color:var(--muted)}
body.op-proto .op-in .swap button:hover{color:var(--accent)}
/* 2 (26.10.2026). Станции — друг под другом во всю ширину на любом экране (в два столбца названия обрезались);
   кнопка обмена ⇅ — между ними у правого края, как в приложениях такси и карт. Узел .op-c2 — нулевой высоты
   в зазоре между карточками, кнопка центрируется на зазоре и не сдвигает поля. */
body.op-proto .op-stations{display:flex;flex-direction:column;gap:0;align-items:stretch}
body.op-proto .op-stations > .op-c1,body.op-proto .op-stations > .op-c3{margin:0}
body.op-proto .op-stations > .op-c1{margin-bottom:10px}
body.op-proto .op-stations > .op-c3{margin-bottom:10px}
body.op-proto .op-stations > .op-c2{position:relative;z-index:6;height:0;margin:0;padding:0!important;display:block;align-self:stretch}
body.op-proto .op-in .op-stations .swap button{position:absolute;right:7px;top:-5px;transform:translateY(-50%);width:34px;height:34px;
  border:0;border-radius:50%;background:#fff;color:var(--steel);font-size:1.05rem;line-height:1;padding:0;
  display:flex;align-items:center;justify-content:center;box-shadow:0 1px 2px rgba(15,23,42,.08),0 4px 14px rgba(15,23,42,.13)}
body.op-proto .op-in .op-stations .swap button:hover{color:var(--accent)}
body.op-proto .op-stations > .op-c1:focus-within + .op-c2{opacity:0;pointer-events:none}   /* не торчит над подсказками станции;
   прозрачная, а не скрытая: Tab из «Откуда» попадает на ⇅ (она тут же видна), как и прежде */
body.op-proto .op-stations .drop{min-width:0;max-width:none;left:0;right:0}
body.op-proto .op-stations .op-road{max-width:calc(100% - 40px)}
body.op-proto .op-cross{border:0;background:var(--accent-soft);border-radius:14px}
body.op-proto .op-cross .oc-h{text-transform:none;letter-spacing:0;font-size:.8rem;color:var(--ink)}
/* 1 (26.10.2026). Крестик сброса — у правого края карточки поля, на строке значения (а не сразу за текстом
   посреди поля); отступ от края — как слева. Позиционируется от карточки .field / .fld: у всех полей одинаково. */
body.op-proto .op-in .field,body.op-proto .op-in .fld{position:relative}
body.op-proto .op-in .inp{position:static}
body.op-proto .op-in .inp > input{padding-right:30px;text-overflow:ellipsis}   /* крестик не наезжает на текст (зазор 8 px), длинное название — с многоточием */
body.op-proto .op-in .clr{top:40px;right:12px;transform:translateY(-50%);width:24px;height:24px;
  background:#dfe3e8;color:#4b5563;font-size:15px;font-weight:500;transition:background .12s,color .12s}
body.op-proto .op-in .clr:hover{background:var(--accent);color:#fff}
/* 7 (26.10.2026). Станция введена, но не выбрана из подсказок — сообщение у поля */
body.op-proto .op-in .field.field-need{box-shadow:0 0 0 2px var(--accent) inset;background:var(--accent-soft)}
body.op-proto .op-in .field-err{margin:4px 0 2px;font-size:.8rem;line-height:1.4;color:var(--accent);font-weight:600}

/* ---- 1. технология + число вагонов одним рядом над станциями ---- */
body.op-proto .op-tech{display:grid;grid-template-columns:minmax(0,1fr) 182px;gap:10px;margin-bottom:10px}
body.op-proto .op-tech > .field,body.op-proto .op-tech > .fld{margin:0!important}
/* 3. пояснение к технологии (что такое ВО, ГО, коэффициент Табл. № 5) — по клику */
body.op-proto .op-in #ship-hint.op-hidden{display:none!important}
body.op-proto .op-hint-btn{display:inline-block;margin:-2px 0 10px;font-size:.8rem}
body.op-proto .op-in #ship-hint{margin:-2px 0 10px}
body.op-proto .op-shipdup{display:none!important}   /* дубль селекта технологии остаётся в разметке */
body.op-proto .op-in .dist{margin-top:4px}
body.op-proto .op-in .dist-lbl{text-transform:none;letter-spacing:0;font-size:.8rem;font-weight:500}
body.op-proto .op-in .dist-val{font-size:1.35rem;font-weight:800;letter-spacing:-.02em}

/* ---- 2. ГНГ сразу под ЕТСНГ ---- */
body.op-proto .op-in .cargo-info{gap:10px 18px;margin-top:0;padding-top:0;border-top:0;font-size:.82rem}
body.op-proto .op-in .cargo-info.show{display:flex}
/* 27.10.2026 (v100). «Код ГНГ» — поле с поиском сразу под грузом: карточка и подсветка — как у поля груза,
   крестик (сброс кода) — у правого края на строке значения при любой длине подписи; список — белая карточка
   во всю ширину поля, поверх полей ниже */
body.op-proto #gng-field > label{flex-wrap:wrap;align-items:center;gap:2px 8px}
body.op-proto #gng-field .gng-box{position:relative}
body.op-proto #gng-field .inp{position:static}
body.op-proto #gng-field .clr{top:50%;right:-2px}
body.op-proto #gng-field.gng-list .inp:not(.filled) > input{background-position:right 2px center}
body.op-proto #gng-field .gng-note{font-size:.76rem;margin:3px 0 2px}
body.op-proto #gng-field .gng-note.flag{margin:6px 0 4px;padding:7px 11px;font-weight:500}
body.op-proto #gng-field.op-need{box-shadow:0 0 0 2px var(--accent) inset;background:var(--accent-soft)}
body.op-proto #gng-field .gng-drop{left:-14px;right:-14px;top:calc(100% + 10px);margin:0;border:0;border-radius:18px;padding:8px;
  max-height:min(440px,56vh);box-shadow:0 2px 6px rgba(15,23,42,.06),0 18px 44px rgba(15,23,42,.16)}
body.op-proto #gng-field .gng-o,body.op-proto #gng-field .gng-head{border-radius:12px}
body.op-proto #gng-field .gng-o.on{background:var(--accent-soft)}
body.op-proto .op-req{font-size:.7rem;font-weight:600;color:var(--accent);background:var(--accent-soft);border-radius:999px;padding:1px 8px}
body.op-proto .op-opt{font-size:.7rem;font-weight:500;color:var(--muted)}
body.op-proto .op-in .field.gng-flash{animation:gngFlash 1.8s ease-out}   /* груз сменён по коду ГНГ — подсветка карточки поля груза */
body.op-proto .op-in .field.gng-flash input{animation:none}
@media(prefers-reduced-motion:reduce){ body.op-proto .op-in .field.gng-flash{animation:none} }
body.op-proto .op-in .cargo-info .metric .lbl{text-transform:none;letter-spacing:0;font-size:.72rem}
body.op-proto .op-in .cargo-info .metric .val{font-size:.95rem}
body.op-proto .badge{border-radius:999px}
body.op-proto .op-pair-one{grid-template-columns:minmax(0,1fr)}
body.op-proto .gng-dictionary-open{font-size:.8rem;margin:0 0 8px}
/* 3 (26.10.2026). Общий код позиции: «Уточните груз» — точные грузы позиции пилюлями вместо пустого списка ГНГ */
body.op-proto #gng-field .gng-refine{margin:6px 0 4px}
body.op-proto #gng-field .gng-refine button{background:#fff;box-shadow:none}
body.op-proto #gng-field .gng-refine button:hover{box-shadow:inset 0 0 0 1px var(--accent)}
body.op-proto #gng-field .gng-refine .gng-refine-more{background:none}
body.op-proto .op-req .op-req-hint{font-weight:500}
body.op-proto .gng-dictionary{border:0;border-radius:22px}
body.op-proto .gng-dictionary-head{border-bottom:0;padding-bottom:6px}
body.op-proto .gng-dictionary-close{border:0;border-radius:50%;width:34px;height:34px;padding:0;background:#f3f4f6;color:var(--muted)}
body.op-proto .gng-dictionary label{text-transform:none;letter-spacing:0;font-size:.8rem;font-weight:500}

/* ---- 3. класс опасности: статус вместо поля ---- */
body.op-proto .op-dng{display:flex;align-items:center;gap:10px;background:var(--field);border-radius:14px;padding:10px 14px;margin:12px 0 10px;font-size:.9rem}
body.op-proto .op-dng.ok{background:var(--ok-soft)}
body.op-proto .op-dng.ok .op-dng-ic{color:var(--ok-ink)}
body.op-proto .op-dng.warn{background:var(--accent-soft)}
body.op-proto .op-dng.warn .op-dng-ic{color:var(--accent)}
body.op-proto .op-dng.idle{color:var(--muted)}
body.op-proto .op-dng-ic{font-weight:800;width:18px;text-align:center;flex:none}
body.op-proto .op-dng-tx{flex:1;min-width:0}
body.op-proto .op-dim{color:var(--muted);font-weight:400}
body.op-proto .op-link{margin-left:auto;border:0;background:none;padding:0;color:var(--accent);font:inherit;font-size:.86rem;font-weight:500;cursor:pointer;white-space:nowrap}
body.op-proto .op-collapsed{display:none!important}
body.op-proto #dng-eff{margin:-4px 0 10px;font-size:.8rem}

/* ---- сегмент «повагонная / контейнерная» ---- */
body.op-proto .op-in .ship-switch{display:flex;background:var(--field);border-radius:14px;padding:4px;gap:2px;margin-bottom:12px}
body.op-proto .op-in .ship-switch .ssw{flex:1;border:0;background:transparent;border-radius:11px;padding:8px 10px;color:var(--muted);box-shadow:none}
body.op-proto .op-in .ship-switch .ssw.active{background:#fff;color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
body.op-proto .op-in .ship-switch .ssw b{color:inherit}

/* ---- 5. рейс вагона: пилюли вместо трёх плиток ---- */
body.op-proto .op-in .trip{margin:4px 0 14px}   /* 4 (26.10.2026): пилюли не прилипают к «Грузоподъёмности» */
body.op-proto .op-in .trip-h{font-size:.8rem;color:var(--muted);font-weight:500;text-transform:none;letter-spacing:0;margin-bottom:6px}
body.op-proto .op-in .trip-seg{display:flex;flex-wrap:wrap;gap:8px}
body.op-proto .op-in .trip-opt{flex:0 1 auto;border:0;background:var(--field);border-radius:999px;padding:9px 15px;box-shadow:none;cursor:pointer}
body.op-proto .op-in .trip-opt small{display:none}
body.op-proto .op-in .trip-opt b{font-size:.9rem;color:var(--ink);white-space:nowrap}
body.op-proto .op-in .trip-opt:hover{background:#e4e7ec}
body.op-proto .op-in .trip-opt.on{background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent)}
body.op-proto .op-in .trip-opt.on b{color:var(--accent)}
body.op-proto .op-in .trip-opt.off{opacity:.45}
body.op-proto .op-in .trip-why,body.op-proto .op-in .trip-fixed{font-size:.8rem;color:var(--muted);margin-top:6px}
body.op-proto .op-in .trip-more{margin-top:10px}
body.op-proto .op-in .trip .fld.trip-cnt[style]{margin-top:10px!important;max-width:340px}   /* v100: количество порожних контейнеров — под пилюлей «Только порожний» */

/* ---- дверь и чипы ---- */
body.op-proto .op-in .rc-door{border:0;background:var(--field);border-radius:16px;padding:13px 16px}
body.op-proto .op-in .rc-door .di{background:#fff;border-radius:12px}
body.op-proto .op-in .rc-door .db{border-radius:999px}
body.op-proto .op-in .rc-chips-h{text-transform:none;letter-spacing:0;font-size:.78rem}
body.op-proto .op-in .rc-chip{border-radius:999px}
body.op-proto .op-in .rc-hc{border-radius:14px}
body.op-proto .rc-drawer .rc-dp{border:0;border-radius:18px;box-shadow:var(--shadow)}
body.op-proto .rc-drawer .rc-nv.on{border-radius:12px}
body.op-proto .rc-drawer .rc-search input{border:0;border-radius:14px;background:#fff;box-shadow:var(--shadow)}

/* ---- 6. плавающая «Рассчитать» ---- */
body.op-proto .op-in .go{position:sticky;bottom:14px;z-index:30;margin:14px 0 0;width:100%;
  border-radius:999px;padding:15px 20px;font-size:1.02rem;font-weight:700;
  box-shadow:0 10px 26px rgba(25,133,197,.28),0 0 0 6px var(--bg)}
body.op-proto .op-in .go:hover{background:#1573ab!important}
body.op-proto .op-in .step-err{margin:10px 0 0;border-radius:14px}
body.op-proto .op-bar{border-top:0;box-shadow:0 -8px 30px rgba(15,23,42,.1)}
body.op-proto .op-bar button{border-radius:999px;padding:12px 22px}

/* ---- расчёт справа ---- */
body.op-proto .op-empty{border:2px dashed var(--line);border-radius:16px;background:transparent}
/* 5. формулы строк (схема, Табл. № 5, коэффициенты) и пояснения без значка — по клику «показать формулы» */
body.op-proto .op-out:not(.op-formulas) .pl-det{display:none}
body.op-proto .op-out:not(.op-formulas) .pl-note.op-explain{display:none}
/* 5 (26.10.2026). «Показать формулы» раскрывает формулы строк во всём расчёте — и там, где их прятали правила
   index.html (блок расчёта с регистром, свёрнутый блок, короткий срок доставки); иначе кнопка ничего не меняла */
body.op-proto .op-out.op-formulas #plata-result .pl-det{display:inline!important}
body.op-proto .op-out.op-formulas #plata-result .row>span>.pl-det:last-child,
body.op-proto .op-out.op-formulas #plata-result .pl-srok>span>.pl-det:last-child{display:block!important}
body.op-proto .op-formulas-btn{display:block;margin:8px 0 10px;font-size:.82rem;white-space:normal;text-align:left;max-width:100%}
@media(min-width:641px){   /* сумма строки остаётся справа от названия, формула переносится под ним */
  body.op-proto .op-out.op-formulas #plata-result .pl-break .row{flex-wrap:nowrap;align-items:flex-start}
  body.op-proto .op-out.op-formulas #plata-result .pl-break .row>span{flex:1 1 auto;min-width:0}
  body.op-proto .op-out.op-formulas #plata-result .pl-break .row>b{flex:none;white-space:nowrap}
}
body.op-proto .op-out .pl-total{font-size:2.3rem;font-weight:800;letter-spacing:-.03em;color:var(--ink)}
body.op-proto .op-actions .btn-dl,body.op-proto .op-actions .go{border-radius:999px}
body.op-proto .how summary{color:var(--accent)}
body.op-proto .disc,body.op-proto .foot,body.op-proto .hero-foot{color:var(--muted)}

/* ---- 6 (26.10.2026). Обратная связь не закрывает кнопки расчёта ----
   ПК: компактная круглая кнопка в углу, подпись — подсказкой при наведении; когда под кнопкой оказывается
   содержимое (строка «Скачать / Новый расчёт», суммы, ссылки), она плавно уходит (ui.js, .op-fab-away).
   Узкий экран: плавающей кнопки нет — значок 💬 в нижней полоске рядом с «Рассчитать». Форма та же. */
body.op-proto .fb-fab{width:46px;height:46px;padding:0;gap:0;justify-content:center;border-radius:50%;right:14px;bottom:14px;
  transition:opacity .18s ease,visibility .18s ease,transform .15s ease,box-shadow .15s ease}
body.op-proto .fb-fab .fb-fab-ico{width:auto;height:auto;font-size:1.2rem}
body.op-proto .fb-fab .fb-fab-txt{display:none;position:absolute;right:calc(100% + 10px);top:50%;transform:translateY(-50%);
  background:var(--steel);color:#fff;border-radius:999px;padding:8px 14px;font-size:.82rem;font-weight:600;white-space:nowrap;
  box-shadow:0 6px 18px rgba(15,23,42,.18);pointer-events:none}
@media(hover:hover){ body.op-proto .fb-fab:hover .fb-fab-txt{display:block} }
body.op-proto .fb-fab:focus-visible .fb-fab-txt{display:block}
body.op-proto .fb-fab.op-fab-away{opacity:0;visibility:hidden;pointer-events:none}
body.op-proto .op-bar .op-bar-fb{display:none}
body.op-proto .fb-overlay{z-index:8600}   /* окно обратной связи — над нижней полоской (она 8500), раньше полоска оставалась поверх затемнения */

/* ---- узкий экран ---- */
@media(max-width:1000px){
  body.op-proto .op-out{position:static;max-height:none;overflow:visible;border-top:0;border-radius:22px;margin-top:12px}
  body.op-proto .op-in .hero-panel,body.op-proto .op-in .sect,body.op-proto .op-in .rc-zone{border-radius:18px;padding:16px}
  body.op-proto .op-tech{grid-template-columns:minmax(0,1fr) 170px}
  body.op-proto .op-in .go{display:none}      /* на узком экране «Рассчитать» — в нижней полоске layout.js */
  body.op-proto .fb-fab{display:none}         /* 6: вместо плавающей кнопки — значок в нижней полоске */
  body.op-proto .op-bar .op-bar-fb{display:flex;flex:none;align-items:center;justify-content:center;width:44px;height:44px;margin:0;padding:0;
    border:0;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:1.15rem;line-height:1;cursor:pointer}
  body.op-proto .op-bar #op-bar-btn{margin-left:0}
}
@media(max-width:640px){
  body.op-proto #gng-field{scroll-margin-top:12px}
  body.op-proto #gng-field .gng-drop{max-height:50vh}   /* телефон: список над клавиатурой, во всю ширину поля */
  body.op-proto .head-row{margin-bottom:14px}      /* 1. дата расчёта не прилипает к карте */
  body.op-proto .calc-date{margin:0;font-size:.82rem}
  body.op-proto .calc-date span{max-width:none;white-space:nowrap}
}
@media(max-width:360px){   /* 320 px: дата расчёта не шире экрана (раньше 338 px — горизонтальная прокрутка) */
  body.op-proto .calc-date{gap:5px;padding:4px 4px 4px 10px;max-width:100%;font-size:.78rem}
  body.op-proto .calc-date input[type=date]{padding:0 6px;min-width:0}
  body.op-proto .calc-date button{padding:0 9px}
}
@media(max-width:480px){
  body.op-proto .op-tech{grid-template-columns:minmax(0,1fr)}
  body.op-proto .op-in .grid2{grid-template-columns:minmax(0,1fr)}
}
@media print{
  body.op-proto .op-out{position:static;max-height:none;overflow:visible;box-shadow:none}
  body.op-proto .op-in .go{display:none}
}
/* ==== coverage:begin ==== */
/* ---- 9. «Что считаем»: значок и окно охвата (страны и маршруты), 23.10.2026 ----
   Работает и в режиме мастера (?wizard=1), поэтому не привязано к body.op-proto; цвета — переменные страницы.
   ПК — поповер под значком, телефон (до 640 px) — нижняя шторка с затемнением. */
.rc-cov-btn{display:inline-flex;align-items:center;gap:7px;flex:none;height:30px;margin:0;padding:0 12px 0 5px;border:0;border-radius:999px;
  background:var(--accent-soft,#e9f3fa);color:var(--accent,#1985c5);font:inherit;font-size:.8rem;font-weight:600;line-height:1;
  letter-spacing:0;text-transform:none;white-space:nowrap;cursor:pointer;transition:background .15s,color .15s}
.rc-cov-btn:hover{background:#d9ebf7}
.rc-cov-btn:focus-visible{outline:2px solid var(--accent,#1985c5);outline-offset:2px}
.rc-cov-btn.on{background:var(--accent,#1985c5);color:#fff}
.rc-cov-ic{width:20px;height:20px;flex:none;border-radius:50%;background:var(--accent,#1985c5);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;font:italic 700 .78rem/1 Georgia,"Times New Roman",serif}
.rc-cov-btn.on .rc-cov-ic{background:#fff;color:var(--accent,#1985c5)}
.rc-cov-btn-card{margin-left:auto}
.rc-cov-btn-head{align-self:center}

.rc-cov-bd{position:fixed;inset:0;z-index:9090;background:rgba(15,23,42,.38)}
.rc-cov{position:absolute;z-index:9100;top:0;left:0;width:460px;max-height:80vh;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;
  background:var(--card,#fff);color:var(--ink,#16202b);border:1px solid rgba(15,23,42,.06);border-radius:20px;
  box-shadow:0 2px 6px rgba(15,23,42,.06),0 22px 56px rgba(15,23,42,.18);
  font-family:Inter,"Segoe UI",system-ui,-apple-system,Roboto,sans-serif;font-size:.9rem;line-height:1.4;text-align:left}
.rc-cov[hidden],.rc-cov-bd[hidden],.rc-cov-more[hidden]{display:none!important}
.rc-cov:focus{outline:none}
.rc-cov-head{display:flex;align-items:center;gap:10px;flex:none;padding:16px 14px 8px 20px}
.rc-cov-head h2{flex:1;min-width:0;margin:0;font-size:1.05rem;font-weight:800;letter-spacing:-.01em;color:inherit}
.rc-cov-x{width:32px;height:32px;flex:none;padding:0;border:0;border-radius:50%;background:#f3f4f6;color:var(--muted,#5b6572);
  font:inherit;font-size:1.3rem;line-height:1;cursor:pointer}
.rc-cov-x:hover{background:#e4e7ec;color:var(--ink,#16202b)}
.rc-cov-x:focus-visible{outline:2px solid var(--accent,#1985c5);outline-offset:1px}
.rc-cov-grab{display:none}
.rc-cov-body{overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:0 20px 18px}
.rc-cov-intro{margin:0;color:var(--muted,#5b6572);font-size:.84rem}

/* группы: цветная метка — считаем весь путь / до границы / пока не считаем / справка */
.rc-cov-ok{--cv-soft:#e4efe8;--cv-ink:#2f6b48;--cv-dot:#43946b}
.rc-cov-part{--cv-soft:#fdf2dc;--cv-ink:#8a5300;--cv-dot:#f59e0b}
.rc-cov-no{--cv-soft:#eef0f3;--cv-ink:#4b5563;--cv-dot:#94a3b8}
.rc-cov-info{--cv-soft:#e9f3fa;--cv-ink:#155e8c;--cv-dot:#1985c5}
.rc-cov-g{margin-top:16px}
.rc-cov-g h3{display:flex;align-items:center;gap:8px;margin:0 0 6px;font-size:.84rem;font-weight:700;letter-spacing:0;text-transform:none;color:inherit}
.rc-cov-tag{display:inline-flex;align-items:center;gap:7px;padding:4px 11px 4px 9px;border-radius:999px;background:var(--cv-soft);color:var(--cv-ink)}
.rc-cov-dot{width:8px;height:8px;flex:none;border-radius:50%;background:var(--cv-dot)}
.rc-cov-n{font-size:.74rem;font-weight:600;color:var(--muted,#5b6572)}
.rc-cov-note{margin:0 0 8px;color:var(--muted,#5b6572);font-size:.78rem}

/* пункты: название и одна строка сразу, подробности — по нажатию */
.rc-cov-list,.rc-cov-more{list-style:none;margin:0;padding:0}
.rc-cov-it{margin:0 0 6px;border-radius:14px;background:#f3f4f6}
.rc-cov-q{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:10px;width:100%;box-sizing:border-box;margin:0;padding:9px 12px;
  border:0;border-radius:14px;background:none;color:inherit;font:inherit;text-align:left}
button.rc-cov-q{cursor:pointer}
button.rc-cov-q:hover{background:#eceef1}
.rc-cov-q:focus-visible{outline:2px solid var(--accent,#1985c5);outline-offset:-2px}
.rc-cov-t{grid-column:1;font-size:.9rem;font-weight:650}
.rc-cov-l{grid-column:1;margin-top:1px;color:var(--muted,#5b6572);font-size:.8rem}
.rc-cov-chev{grid-column:2;grid-row:1 / span 2;align-self:center;width:12px;height:8px;transition:transform .15s;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%2394a3b8' stroke-width='2'/%3E%3C/svg%3E") no-repeat center}
.rc-cov-it.open .rc-cov-chev{transform:rotate(180deg)}
.rc-cov-more{padding:0 12px 10px}
.rc-cov-more li{position:relative;margin-top:5px;padding-left:14px;font-size:.8rem;color:var(--ink,#16202b)}
.rc-cov-more li::before{content:"";position:absolute;left:2px;top:.55em;width:5px;height:5px;border-radius:50%;background:var(--cv-dot,#94a3b8)}

.rc-cov-foot{margin-top:18px;padding-top:12px;border-top:1px solid var(--line,#e2e6ea);color:var(--muted,#5b6572);font-size:.8rem}
.rc-cov-foot p{margin:0 0 8px}
.rc-cov-foot-row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.rc-cov-date{font-size:.76rem}
.rc-cov-fb{padding:7px 14px;border:0;border-radius:999px;background:var(--accent,#1985c5);color:#fff;font:inherit;font-size:.8rem;font-weight:600;cursor:pointer}
.rc-cov-fb:hover{background:#1573ab}
.rc-cov-fb:focus-visible{outline:2px solid var(--accent,#1985c5);outline-offset:2px}

@keyframes rcCovIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@keyframes rcCovUp{from{opacity:.6;transform:translateY(24px)}to{opacity:1;transform:none}}
.rc-cov:not([hidden]){animation:rcCovIn .14s ease-out}
@media(max-width:640px){
  .rc-cov{position:fixed!important;top:auto!important;left:0!important;right:0;bottom:0;width:auto!important;
    max-height:86vh!important;max-height:86dvh!important;border:0;border-radius:20px 20px 0 0;padding-bottom:env(safe-area-inset-bottom,0px)}
  .rc-cov:not([hidden]){animation:rcCovUp .2s ease-out}
  .rc-cov-grab{display:block;position:absolute;top:7px;left:50%;width:40px;height:4px;margin-left:-20px;border-radius:2px;background:#d6dae0}
  .rc-cov-head{position:relative;padding:20px 12px 8px 16px}
  .rc-cov-body{padding:0 16px 16px}
  html.rc-cov-open,html.rc-cov-open body{overflow:hidden}
}
@media(min-width:641px){ .rc-cov-bd{display:none!important} }
@media(prefers-reduced-motion:reduce){ .rc-cov:not([hidden]){animation:none} .rc-cov-chev{transition:none} }
@media print{ .rc-cov-btn,.rc-cov,.rc-cov-bd{display:none!important} }
/* ==== coverage:end ==== */
