/* YourTech·F — тёмная тема в стиле панели (Bootstrap 5.3 dark, фирменный #2f6fed). */
:root {
  --brand: #2f6fed;
  --bg: #0d1117; --bg2: #151b25; --bg3: #1b2331; --line: #263042; --text: #e1e8f4; --dim: #8a97ab;
  --ok: #4ade80; --warn: #fbbf24; --bad: #f87171; --cyan: #38bdf8; --violet: #a78bfa;
}
html, body { height: 100%; margin: 0; overflow: hidden; background: var(--bg); color: var(--text); }
.ctf-app { height: 100vh; display: flex; flex-direction: column; }
[hidden] { display: none !important; }

/* ── старт ── */
.ctf-start { height: 100vh; overflow: auto; background: radial-gradient(1200px 500px at 20% -10%, #16243f 0%, var(--bg) 60%); }
.start-wrap { max-width: 1040px; margin: 0 auto; padding: 48px 20px; }
.start-wrap.center { text-align: center; padding-top: 22vh; }
.start-head { margin-bottom: 28px; max-width: 760px; }
.proj-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 14px; }
.proj-new, .proj-card { background: var(--bg2); border: 1px solid var(--line); border-radius: 12px; padding: 18px; min-height: 120px; text-align: left; color: var(--text); position: relative; transition: border-color .15s, transform .15s; cursor: pointer; }
.proj-new { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; border-style: dashed; color: var(--brand); font-weight: 600; }
.proj-new i { font-size: 1.8rem; }
.proj-new:hover, .proj-card:hover, .proj-card:focus-visible { border-color: var(--brand); transform: translateY(-1px); outline: 0; }
.pc-name { font-weight: 600; font-size: 1.05rem; margin-bottom: 6px; word-break: break-word; }
.pc-meta { color: var(--dim); font-size: .85rem; }
.pc-date { color: var(--dim); font-size: .75rem; margin-top: 10px; }
.pc-actions { position: absolute; right: 8px; top: 8px; display: flex; gap: 2px; opacity: 0; transition: opacity .15s; }
.proj-card:hover .pc-actions, .proj-card:focus-within .pc-actions { opacity: 1; }
.pc-btn { background: none; border: 0; color: var(--dim); padding: 4px 6px; border-radius: 6px; }
.pc-btn:hover { color: var(--brand); background: rgba(47,111,237,.12); }
.pc-del:hover { color: var(--bad); background: rgba(248,113,113,.1); }
.pc-who { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; color: var(--dim); font-size: .75rem; margin-top: 8px; }
.pc-role { border-radius: 999px; padding: 1px 8px; font-weight: 600; background: var(--bg3); border: 1px solid var(--line); }
.pc-role.owner { color: var(--ok); border-color: rgba(74,222,128,.35); }
.pc-role.editor { color: var(--cyan); border-color: rgba(56,189,248,.35); }
.start-top { display: flex; align-items: center; gap: 12px; }
.start-top h1 { margin: 0; }
.start-all { color: var(--dim); font-size: .85rem; display: inline-flex; gap: 6px; align-items: center; cursor: pointer; }
.tb-presence { display: inline-flex; align-items: center; gap: 6px; }
.tb-co { display: inline-flex; }
.tb-avatar { width: 24px; height: 24px; border-radius: 50%; background: var(--violet); color: #111; font-size: .72rem; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; border: 2px solid var(--bg2); margin-left: -6px; }
.tb-avatar:first-child { margin-left: 0; }
.tb-avatar.more { background: var(--bg3); color: var(--dim); }
.tb-sync { border-color: var(--warn); color: var(--warn); }
.tb-user span { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ── вход и регистрация ── */
.auth-wrap { padding-top: 12vh; }
.auth-card { max-width: 380px; margin: 0 auto; background: var(--bg2); border: 1px solid var(--line); border-radius: 14px; padding: 26px 24px; text-align: left; box-shadow: 0 20px 60px rgba(0,0,0,.35); }
.auth-card h1, .auth-card > p { text-align: center; }
.auth-tabs { display: flex; gap: 4px; background: var(--bg3); border-radius: 10px; padding: 3px; margin: 14px 0; }
.auth-tab { flex: 1; background: none; border: 0; color: var(--dim); border-radius: 8px; padding: 6px; font-weight: 600; font-size: .9rem; }
.auth-tab.on { background: var(--brand); color: #fff; }
.auth-form .form-control { margin-bottom: 8px; }

/* ── участники проекта ── */
.mem-list { display: flex; flex-direction: column; gap: 6px; }
.mem-row { display: flex; align-items: center; gap: 8px; padding: 8px 10px; background: var(--bg3); border: 1px solid var(--line); border-radius: 10px; }
.mem-who { flex: 1; min-width: 0; }
.mem-name { font-weight: 600; font-size: .9rem; overflow: hidden; text-overflow: ellipsis; }
.mem-mail { color: var(--dim); font-size: .78rem; overflow: hidden; text-overflow: ellipsis; }
.mem-role { font-size: .75rem; font-weight: 600; border-radius: 999px; padding: 1px 8px; border: 1px solid var(--line); }
.mem-role.owner { color: var(--ok); }
.mem-role.editor { color: var(--cyan); }
.mem-add-row { display: flex; gap: 6px; align-items: flex-start; }
.mem-q-wrap { flex: 1; position: relative; min-width: 0; }
.mem-role-sel { width: auto; }
.mem-sug { position: absolute; left: 0; right: 0; top: 100%; z-index: 5; background: var(--bg2); border: 1px solid var(--line); border-radius: 8px; margin-top: 2px; overflow: hidden; }
.mem-sug:empty { display: none; }
.mem-sug-item { display: flex; justify-content: space-between; gap: 10px; width: 100%; background: none; border: 0; color: var(--text); padding: 6px 10px; font-size: .85rem; text-align: left; }
.mem-sug-item:hover { background: var(--bg3); }
.start-foot { margin-top: 30px; font-size: .9rem; }

/* ── верхняя строка ── */
.ctf-top { display: flex; align-items: center; gap: 8px; padding: 6px 10px; background: var(--bg2); border-bottom: 1px solid var(--line); min-height: 44px; }
.tb-brand { display: flex; align-items: center; gap: 6px; background: none; border: 0; color: var(--brand); font-weight: 700; padding: 4px 8px; border-radius: 8px; }
.tb-brand:hover { background: rgba(47,111,237,.12); }
.tb-proj { background: none; border: 0; color: var(--text); font-weight: 600; padding: 4px 8px; border-radius: 8px; max-width: 26vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tb-proj:hover { background: var(--bg3); }
.tb-sep { width: 1px; height: 22px; background: var(--line); }
.tb-spacer { flex: 1; }
.tb-ucs { display: flex; align-items: center; gap: 6px; font-size: .75rem; color: var(--dim); }
.tb-ucs select { min-width: 190px; max-width: 280px; }
.tb-btn, .tb-tog { display: inline-flex; align-items: center; gap: 5px; background: var(--bg3); border: 1px solid var(--line); color: var(--text); border-radius: 8px; padding: 4px 9px; font-size: .78rem; font-weight: 600; }
.tb-btn:hover:not(:disabled), .tb-tog:hover { border-color: var(--brand); }
.tb-btn:disabled { opacity: .35; }
.tb-tog.on { background: rgba(74,222,128,.15); border-color: var(--ok); color: var(--ok); }

/* ── лента ── */
.ctf-ribbon { display: flex; flex-wrap: wrap; gap: 0; padding: 3px 6px 0; background: var(--bg2); border-bottom: 1px solid var(--line); }
.rb-group { display: flex; flex-direction: column; padding: 1px 4px 2px; border-right: 1px solid var(--line); }
.rb-group:last-child { border-right: 0; }
.rb-items { display: flex; gap: 1px; }
.rb-title { text-align: center; font-size: .55rem; letter-spacing: .07em; text-transform: uppercase; color: var(--dim); margin-top: 0; }
.rb-btn { display: flex; flex-direction: column; align-items: center; gap: 1px; min-width: 37px; padding: 3px 2px 2px; background: none; border: 1px solid transparent; border-radius: 7px; color: var(--text); font-size: .57rem; }
.rb-btn i { font-size: .95rem; line-height: 1; }
.rb-btn:hover { background: var(--bg3); }
.rb-btn.on { background: rgba(47,111,237,.22); border-color: var(--brand); color: #cfe0ff; }
.rb-btn.dim { opacity: .38; }

/* ── рабочая область ── */
.ctf-work { flex: 1; min-height: 0; display: grid; grid-template-columns: var(--cx, 62%) 6px minmax(0, 1fr); background: var(--bg); }
.ctf-col { display: flex; flex-direction: column; min-width: 0; min-height: 0; --ry: 50%; }
.ctf-col > #pane-profile { flex: 0 0 var(--ry); }
.ctf-col > #pane-iso { flex: 1 1 0; }
.ctf-col > #pane-profile[hidden] + .ctf-split + #pane-iso, .ctf-col > #pane-iso:only-child { flex: 1; }
.pane { position: relative; min-width: 0; min-height: 0; overflow: hidden; background: #0a0e14; border: 1px solid var(--line); }
#pane-main { grid-column: 1; }
.ctf-split { background: var(--bg2); transition: background .12s; z-index: 5; }
.ctf-split-x { grid-column: 2; cursor: col-resize; }
.ctf-split-y { height: 6px; cursor: row-resize; flex: 0 0 6px; }
.ctf-split:hover, .ctf-split[data-drag] { background: var(--brand); }
#col { grid-column: 3; }
.vp-bg, .vp-gl, .vp-ov { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.vp-ov { z-index: 2; outline: 0; cursor: crosshair; touch-action: none; }
.pane-label { position: absolute; left: 10px; top: 8px; z-index: 4; font-size: .68rem; letter-spacing: .06em; color: var(--violet); background: rgba(13,17,23,.75); padding: 2px 8px; border-radius: 6px; pointer-events: none; }
.pane-btns { position: absolute; right: 8px; top: 6px; z-index: 6; display: flex; gap: 4px; }
.eye-btn { width: 26px; height: 26px; display: inline-flex; align-items: center; justify-content: center; background: rgba(21,27,37,.9); border: 1px solid var(--line); color: var(--text); border-radius: 50%; padding: 0; font-size: .8rem; }
.eye-btn:hover { border-color: var(--brand); }
.eye-btn.off { color: var(--dim); opacity: .6; }
.cloud-pop { position: absolute; right: 8px; top: 38px; z-index: 8; width: 240px; background: var(--bg2); border: 1px solid var(--line); border-radius: 10px; padding: 10px; box-shadow: 0 8px 24px rgba(0,0,0,.5); }
.cp-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: .78rem; margin-bottom: 6px; }
.cp-row input[type=range] { width: 110px; }
.cp-row select { width: 130px; }
.main-bar { position: absolute; left: 50%; top: 8px; transform: translateX(-50%); z-index: 5; display: flex; align-items: center; gap: 10px; background: rgba(21,27,37,.94); border: 1px solid var(--line); border-radius: 10px; padding: 5px 10px; font-size: .74rem; color: var(--dim); max-width: 92%; flex-wrap: wrap; }
.main-bar label { display: flex; align-items: center; gap: 5px; }
.main-bar input { width: 84px; }
.mb-title { color: var(--warn); font-weight: 700; letter-spacing: .05em; }
.mb-range, .mb-info { color: var(--text); }
.pill { border: 1px solid var(--line); background: var(--bg3); color: var(--dim); border-radius: 999px; padding: 2px 12px; font-weight: 700; font-size: .72rem; }
.pill.on { background: rgba(56,189,248,.2); color: var(--cyan); border-color: var(--cyan); }
.seg2 { display: inline-flex; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }
.seg2 button { background: var(--bg3); color: var(--dim); border: 0; padding: 3px 9px; font-size: .7rem; font-weight: 700; border-right: 1px solid var(--line); }
.seg2 button:last-child { border-right: 0; }
.seg2 button.on { background: var(--brand); color: #fff; }
.pane-bar { position: absolute; left: 8px; bottom: 8px; z-index: 5; display: flex; align-items: center; gap: 10px; background: rgba(21,27,37,.92); border: 1px solid var(--line); border-radius: 10px; padding: 4px 8px; font-size: .72rem; color: var(--dim); }
.pane-bar label { display: flex; align-items: center; gap: 4px; }
.pane-bar input { width: 58px; }
.restore-chips { position: absolute; right: 42px; top: 8px; z-index: 6; display: flex; gap: 6px; }
.chip { background: var(--bg3); border: 1px solid var(--line); color: var(--text); border-radius: 999px; padding: 2px 10px; font-size: .68rem; font-weight: 700; }
.chip:hover { border-color: var(--brand); }
.iso-area { position: absolute; left: 8px; bottom: 8px; z-index: 5; display: flex; align-items: center; gap: 8px; font-size: .68rem; color: var(--dim); background: rgba(21,27,37,.92); border: 1px solid var(--line); border-radius: 10px; padding: 4px 10px; }
.iso-area input { width: 120px; }

/* ── статус ── */
.ctf-status { display: flex; align-items: center; gap: 14px; padding: 4px 12px; background: var(--bg2); border-top: 1px solid var(--line); font-size: .76rem; min-height: 32px; }
.st-hint { flex: 1; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.st-coords { min-width: 220px; color: var(--cyan); font-variant-numeric: tabular-nums; }
.st-right { display: flex; align-items: center; gap: 12px; }
.st-layer { display: flex; align-items: center; gap: 6px; }
.st-layer select { width: 150px; }
.st-layer select.has-sel { border-color: var(--cyan); color: var(--cyan); }
.st-color { width: 12px; height: 12px; border-radius: 3px; display: inline-block; border: 1px solid var(--line); }
.st-item { color: var(--dim); font-variant-numeric: tabular-nums; }

/* ── плавающие панели ── */
.ctf-float { position: fixed; z-index: 30; right: 20px; top: 130px; width: 330px; background: var(--bg2); border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 12px 34px rgba(0,0,0,.55); }
.float-head { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; font-weight: 600; font-size: .85rem; border-bottom: 1px solid var(--line); cursor: move; user-select: none; }
.float-foot { display: flex; gap: 8px; padding: 8px 10px; border-top: 1px solid var(--line); }
.layers-list { max-height: 46vh; overflow: auto; padding: 4px 6px; }
.layer-row { display: grid; grid-template-columns: 22px 26px 1fr 96px 62px 28px 26px 26px; align-items: center; gap: 4px; padding: 3px 0; font-size: .76rem; }
.layer-row.cur { background: rgba(47,111,237,.14); border-radius: 6px; }
.layer-row.hidden-layer .lr-name { opacity: .45; }
.layer-row select { font-size: .7rem; padding: 1px 3px; background: var(--bg3); border: 1px solid var(--line); color: var(--text); border-radius: 5px; }
.lr-radio, .lr-eye, .lr-del { background: none; border: 0; color: var(--text); padding: 0; }
.lr-del:hover { color: var(--bad); }
.lr-color { width: 24px; height: 20px; padding: 0; border: 1px solid var(--line); background: none; border-radius: 4px; }
.lr-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: text; }
.lr-n { color: var(--dim); text-align: right; }
.op-body { padding: 10px 12px; display: flex; flex-direction: column; gap: 9px; font-size: .78rem; }
.op-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.op-actions .active { background: var(--brand); color: #fff; border-color: var(--brand); }
.op-color { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.op-check { display: flex; align-items: center; gap: 6px; }
.op-samples { display: inline-flex; gap: 3px; cursor: pointer; }
.op-samples i { width: 16px; height: 16px; border-radius: 4px; border: 1px solid var(--line); display: inline-block; }
.op-row { display: grid; grid-template-columns: 116px 1fr 62px; align-items: center; gap: 8px; }
.op-val { text-align: right; color: var(--dim); font-variant-numeric: tabular-nums; }
.op-more summary { cursor: pointer; color: var(--warn); font-weight: 700; letter-spacing: .04em; margin-bottom: 6px; }
.op-result b.g { color: var(--ok); } .op-result b.a { color: var(--warn); } .op-result b.r { color: var(--bad); }

/* ── модальные и уведомления ── */
.ctf-modal-back { position: fixed; inset: 0; z-index: 100; background: rgba(4,7,12,.66); display: flex; align-items: center; justify-content: center; padding: 20px; }
.ctf-modal { width: min(620px, 100%); max-height: 90vh; overflow: auto; background: var(--bg2); border: 1px solid var(--line); border-radius: 14px; box-shadow: 0 20px 60px rgba(0,0,0,.6); }
.ctf-modal-head { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; font-weight: 600; border-bottom: 1px solid var(--line); }
.ctf-modal-body { padding: 16px; }
.ctf-modal-foot { display: flex; justify-content: flex-end; gap: 8px; padding: 10px 16px; border-top: 1px solid var(--line); }
.toast-host { position: fixed; right: 16px; bottom: 44px; z-index: 200; display: flex; flex-direction: column; gap: 8px; align-items: flex-end; }
.toast-item { background: var(--bg3); border: 1px solid var(--line); border-left: 4px solid var(--brand); color: var(--text); padding: 8px 14px; border-radius: 8px; max-width: 460px; font-size: .84rem; box-shadow: 0 8px 22px rgba(0,0,0,.45); transition: opacity .35s; }
.toast-item.ok { border-left-color: var(--ok); } .toast-item.warn { border-left-color: var(--warn); } .toast-item.danger { border-left-color: var(--bad); }
.toast-item.out { opacity: 0; }
.imp-drop { border: 2px dashed var(--line); border-radius: 12px; padding: 22px; text-align: center; cursor: pointer; }
.imp-drop i { font-size: 2rem; color: var(--brand); }
.imp-drop.over, .imp-drop:hover { border-color: var(--brand); background: rgba(47,111,237,.07); }
.imp-list { margin: 12px 0; display: flex; flex-direction: column; gap: 6px; }
.imp-row { display: grid; grid-template-columns: 1fr 76px 140px 22px; gap: 8px; align-items: center; font-size: .8rem; }
.imp-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.imp-size { color: var(--dim); text-align: right; }
.progress { height: 8px; background: var(--bg3); }
.help-steps { padding-left: 1.2rem; }
.help-keys td:first-child { white-space: nowrap; width: 150px; }
kbd { background: var(--bg3); border: 1px solid var(--line); color: var(--text); }

@media (max-width: 900px) {
  .ctf-work { grid-template-columns: 1fr; grid-template-rows: 1fr; }
  #split-x, #col { display: none; }
}

/* ── плашка сбоев ── */
.fault-bar { display: flex; align-items: center; gap: 10px; padding: 5px 12px; font-size: .78rem; background: rgba(120,40,40,.35); border-top: 1px solid var(--bad); color: var(--text); }
.fault-bar[data-severity="stop"] { background: rgba(160,30,30,.5); }
.fault-bar[data-severity="advice"] { background: rgba(47,111,237,.18); border-top-color: var(--brand); }
.fault-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--bad); flex: none; }
.fault-bar[data-severity="advice"] .fault-dot { background: var(--brand); }
.fault-text { flex: 1; }
.fault-btn { background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.25); color: var(--text); border-radius: 6px; padding: 2px 10px; font-size: .72rem; }
.fault-btn:hover { background: rgba(255,255,255,.16); }

/* ═══ Режим «Оцифровка» ═══ */
.ctf-app:not(.dz-mode) .rb-group[data-grp="dz"] { display: none; }
.ctf-app.dz-mode .rb-group[data-grp="wall"], .ctf-app.dz-mode .rb-group[data-grp="draw"], .ctf-app.dz-mode .rb-group[data-grp="export"], .ctf-app.dz-mode .rb-group[data-grp="view"] { display: none; }
.ctf-work.dz-on > #col { display: none; }
.dz-panel { display: none; min-width: 0; min-height: 0; flex-direction: column; background: var(--bg2); border-left: 1px solid var(--line); }
.ctf-work.dz-on > .dz-panel { display: flex; }
.dz-tabs { display: flex; border-bottom: 1px solid var(--line); background: var(--bg); }
.dz-tab { flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px; padding: 9px 6px; background: none; border: 0; border-bottom: 2px solid transparent; color: var(--dim); font-size: .8rem; font-weight: 600; }
.dz-tab:hover { color: var(--text); }
.dz-tab.on { color: #cfe0ff; border-bottom-color: var(--brand); background: var(--bg2); }
.dz-body { flex: 1; min-height: 0; overflow-y: auto; padding: 10px; }
.dz-pane { display: flex; flex-direction: column; gap: 10px; }
.dz-card { background: var(--bg3); border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; }
.dz-h { font-size: .74rem; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--dim); margin-bottom: 8px; display: flex; align-items: center; gap: 6px; }
.dz-h.mt { margin-top: 12px; }
.dz-row { display: grid; grid-template-columns: 96px 1fr; align-items: center; gap: 8px; margin: 6px 0; font-size: .8rem; }
.dz-row > label { color: var(--dim); }
.dz-row > input[type=range] { width: 100%; }
.dz-note { font-size: .74rem; color: var(--dim); margin: 6px 0; line-height: 1.35; }
.dz-note.bad { color: var(--bad); }
.dz-dim { color: var(--dim); font-size: .74rem; }
.dz-check { display: flex; gap: 8px; align-items: flex-start; font-size: .78rem; margin: 6px 0; }
.dz-chips { display: flex; flex-direction: column; gap: 8px; }
.dz-chiph { font-size: .72rem; color: var(--dim); margin-bottom: 3px; }
.dz-chiph a { color: var(--cyan); text-decoration: none; }
.dz-chipgrp { display: flex; flex-wrap: wrap; gap: 4px 10px; }
.dz-chipgrp .dz-chiph { flex: 0 0 100%; }
.dz-chip { display: inline-flex; align-items: center; gap: 5px; font-size: .76rem; padding: 2px 4px; border-radius: 6px; cursor: pointer; }
.dz-chip:hover { background: rgba(255,255,255,.05); }
.dz-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; flex: 0 0 10px; border: 1px solid rgba(0,0,0,.45); }
.dz-seg { display: flex; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; margin-bottom: 6px; }
.dz-seg button { flex: 1; background: none; border: 0; border-right: 1px solid var(--line); color: var(--dim); font-size: .74rem; font-weight: 600; padding: 6px 4px; }
.dz-seg button:last-child { border-right: 0; }
.dz-seg button.on { background: rgba(47,111,237,.24); color: #cfe0ff; }
.dz-prog .dz-phase { font-size: .78rem; margin-top: 6px; }
.dz-log { font-size: .68rem; color: var(--dim); margin-top: 6px; font-family: ui-monospace, monospace; max-height: 130px; overflow: auto; }
.dz-done { border-color: rgba(74,222,128,.4); }
.dz-chips2 { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 6px; }
.dz-badge { display: inline-flex; align-items: center; gap: 5px; font-size: .74rem; padding: 2px 8px; border: 1px solid; border-radius: 999px; background: rgba(0,0,0,.2); }
.dz-run { padding: 6px 0; border-top: 1px solid var(--line); font-size: .78rem; }
.dz-run:first-of-type { border-top: 0; }
.dz-run-b { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.dz-st { font-weight: 700; }
.dz-st.done { color: var(--ok); } .dz-st.error { color: var(--bad); } .dz-st.cancelled { color: var(--warn); } .dz-st.running, .dz-st.queued { color: var(--cyan); }
.dz-bulk { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.dz-list { padding: 4px; max-height: 42vh; overflow-y: auto; }
.dz-item { display: flex; align-items: center; gap: 8px; padding: 5px 8px; border-radius: 8px; cursor: pointer; font-size: .8rem; }
.dz-item:hover { background: rgba(255,255,255,.05); }
.dz-item.sel { background: rgba(47,111,237,.25); outline: 1px solid var(--brand); }
.dz-item.rej { opacity: .5; }
.dz-item-t { flex: 1; min-width: 0; }
.dz-item-n { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dz-item-s { color: var(--dim); font-size: .72rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dz-item-r { display: flex; align-items: center; gap: 6px; }
.dz-conf { width: 34px; height: 5px; background: rgba(255,255,255,.12); border-radius: 3px; overflow: hidden; display: inline-block; }
.dz-conf i { display: block; height: 100%; }
.dz-stt { width: 14px; text-align: center; font-weight: 700; color: var(--dim); }
.dz-stt.accepted { color: var(--ok); } .dz-stt.rejected { color: var(--bad); }
.dz-detail textarea { resize: vertical; }
.dz-meas { width: 100%; font-size: .74rem; margin: 6px 0; }
.dz-meas td { padding: 1px 0; border-bottom: 1px dotted var(--line); }
.dz-meas td:last-child { text-align: right; font-variant-numeric: tabular-nums; }
.dz-cls { display: flex; align-items: center; gap: 8px; padding: 5px 4px; border-bottom: 1px solid var(--line); font-size: .8rem; }
.dz-cls.off { opacity: .5; }
.dz-cls-t { flex: 1; min-width: 0; }
.dz-cls .lr-color { width: 24px; height: 20px; padding: 0; border: 0; background: none; }
.dz-form { display: grid; gap: 6px; }
.dz-form label { font-size: .74rem; color: var(--dim); margin-top: 4px; }
.dz-shots figure { margin: 0 0 14px; }
.dz-shots img { max-width: 100%; border: 1px solid var(--line); border-radius: 6px; image-rendering: pixelated; }
.dz-shots figcaption { font-size: .7rem; color: var(--dim); }
.dz-pre { white-space: pre-wrap; font-size: .68rem; background: var(--bg); padding: 8px; border-radius: 6px; max-height: 260px; overflow: auto; }
.dz-modal-wide .ctf-modal { width: min(1000px, 94vw); max-height: 90vh; overflow: auto; }

/* ═══ Ортофотопланы ═══ */
.ortho-panel { width: 420px; max-height: 78vh; display: flex; flex-direction: column; }
.ortho-body { padding: 10px 12px; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
.ortho-actions { display: flex; gap: 6px; }
.ortho-note { font-size: .72rem; color: var(--dim); line-height: 1.35; }
.ortho-warn { font-size: .74rem; color: var(--warn); margin: 4px 0; line-height: 1.35; }
.ortho-empty { color: var(--dim); font-size: .8rem; padding: 6px 0; }
.ortho-tools { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: .78rem; }
.ortho-chk, .ortho-op { display: flex; align-items: center; gap: 5px; }
.ortho-op input { width: 90px; }
.ortho-sum { font-size: .74rem; color: var(--dim); }
.ortho-up { background: var(--bg3); border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; font-size: .76rem; }
.ortho-group { background: var(--bg3); border: 1px solid var(--line); border-radius: 8px; padding: 6px 8px; }
.og-head { display: flex; align-items: center; gap: 4px; }
.og-name { flex: 1; text-align: left; background: none; border: 0; color: var(--text); font-weight: 600; font-size: .82rem; padding: 2px 4px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.og-n { color: var(--dim); font-weight: 400; }
.og-eye, .og-btn { background: none; border: 0; color: var(--dim); padding: 2px 6px; border-radius: 6px; }
.og-eye:hover, .og-btn:hover { color: var(--text); background: rgba(255,255,255,.06); }
.og-btn.danger:hover { color: var(--bad); }
.og-stat { font-size: .7rem; color: var(--dim); padding: 0 4px 3px; }
.og-list { max-height: 30vh; overflow-y: auto; margin-top: 4px; border-top: 1px solid var(--line); }
.og-row { display: flex; align-items: center; gap: 6px; padding: 4px 4px; border-bottom: 1px dotted var(--line); font-size: .76rem; }
.og-row:hover { background: rgba(251,191,36,.08); }
.og-row-t { flex: 1; min-width: 0; }
.og-row-n { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.og-row-s { color: var(--dim); font-size: .68rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.og-row.warn .og-row-s { color: var(--warn); } .og-row.bad .og-row-s { color: var(--bad); } .og-row.busy .og-row-s { color: var(--cyan); }
.dz-form-l { font-size: .74rem; color: var(--dim); margin-top: 4px; }
.ortho-fail { background: rgba(248,113,113,.1); border: 1px solid rgba(248,113,113,.5); border-radius: 8px; padding: 6px 10px; font-size: .74rem; color: #fecaca; }
.ortho-fail-h { display: flex; align-items: center; gap: 6px; font-weight: 700; margin-bottom: 3px; }
.ortho-fail-h .og-btn { margin-left: auto; }
.ortho-fail-r { word-break: break-word; margin: 2px 0; }

/* Оцифровка: происхождение объектов, знак по умолчанию, обучение */
.dz-org { display: inline-flex; align-items: center; font-size: .8rem; margin-right: 2px; }
.dz-org.manual { color: #4ade80; }
.dz-org.ai { color: #93a4bf; }
.dz-org.ai_edited { color: #fbbf24; }
.dz-origin-box { border: 1px solid var(--line); border-left-width: 3px; border-radius: 8px; padding: 6px 9px; margin-bottom: 6px; background: rgba(255,255,255,.03); }
.dz-origin-box.manual { border-left-color: #4ade80; }
.dz-origin-box.ai { border-left-color: #93a4bf; }
.dz-origin-box.ai_edited { border-left-color: #fbbf24; }
.dz-origin-t { font-weight: 600; font-size: .82rem; }
.dz-sec { margin: 8px 0 4px; font-size: .68rem; text-transform: uppercase; letter-spacing: .07em; color: var(--dim); border-bottom: 1px solid var(--line); padding-bottom: 2px; }
.dz-row.dz-active > label { color: #cfe0ff; font-weight: 600; }
.dz-badge.on { background: rgba(47,111,237,.28); color: #cfe0ff; }
button.dz-badge { color: var(--text); cursor: pointer; }
.dz-model { border: 1px solid var(--line); border-radius: 8px; padding: 6px 8px; margin-top: 6px; }
.dz-model.on { border-color: rgba(74,222,128,.55); }
.dz-model-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.dz-model-h .dz-dim { flex: 1; font-size: .74rem; }
.dz-tab { padding: 9px 3px; font-size: .78rem; }
.cp-sub { font-size: .66rem; text-transform: uppercase; letter-spacing: .07em; color: var(--dim); margin: 4px 0 4px; border-top: 1px solid var(--line); padding-top: 6px; }
.cp-int .cp-row input[type=range] { width: 100px; }
.cloud-pop { max-height: 70vh; overflow-y: auto; width: 270px; }

/* Перенос данных: диски сервера и скачивание */
.sfs { display: flex; flex-direction: column; gap: 8px; min-width: min(760px, 88vw); }
.sfs-path { display: flex; gap: 6px; }
.sfs-how { font-size: .78rem; min-height: 1.1em; color: var(--dim); }
.sfs-how.ok { color: #4ade80; }
.sfs-how.bad { color: #f87171; }
.sfs-roots { display: flex; flex-wrap: wrap; gap: 6px; }
.sfs-crumb { display: flex; align-items: center; gap: 8px; }
.sfs-path-t { flex: 1; font-size: .78rem; color: var(--dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; direction: rtl; text-align: left; }
.sfs-list { border: 1px solid var(--line); border-radius: 8px; max-height: 46vh; min-height: 120px; overflow-y: auto; }
.sfs-row { display: flex; align-items: center; gap: 8px; padding: 4px 10px; font-size: .84rem; border-bottom: 1px solid rgba(255,255,255,.04); }
.sfs-row:hover { background: rgba(255,255,255,.04); }
.sfs-row.dim { opacity: .4; }
.sfs-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text); }
a.sfs-name { color: #9cc0ff; text-decoration: none; }
.sfs-kind { width: 110px; font-size: .72rem; color: var(--dim); }
.sfs-size { width: 84px; text-align: right; font-size: .76rem; color: var(--dim); }
.sfs-sum { font-size: .8rem; color: #cfe0ff; }
.sfs-mode { display: grid; grid-template-columns: 130px 1fr; gap: 8px; align-items: center; }
.dl { display: flex; flex-direction: column; gap: 6px; min-width: min(720px, 88vw); max-height: 70vh; overflow-y: auto; }
.dl-row { display: flex; align-items: center; gap: 10px; padding: 5px 8px; border: 1px solid var(--line); border-radius: 8px; }
.dl-t { flex: 1; min-width: 0; font-size: .82rem; overflow: hidden; text-overflow: ellipsis; }
.dl-b { display: flex; gap: 6px; flex-wrap: wrap; }
.dl-all { display: flex; flex-direction: column; gap: 4px; }
.dl-fmt { display: flex; align-items: center; gap: 8px; padding-left: 22px; }
.dl-fmt select { width: 300px; }
