/* 배차 보드, 접수, 메시지, 표 정렬과 쪽 번호, 상태 화면 */
.skip { position: absolute; left: -999px; top: 8px; z-index: 200; background: #fff; border: 2px solid var(--pri); padding: 8px 14px; border-radius: 8px; font-weight: 700; }
.skip:focus { left: 8px; }
#content:focus { outline: none; }
.app.focus { grid-template-columns: minmax(0, 1fr); } .app.focus .side { display: none; } .app.focus .content { max-width: none; }

/* 연결 상태 */
.syncchip { display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 11px; border: 1px solid var(--line); border-radius: 16px; background: #fff; font-size: 12.5px; font-weight: 600; color: var(--ok); white-space: nowrap; }
.syncchip:hover { background: var(--line2); } .syncchip.off { color: var(--bad); border-color: #f1c8c8; background: var(--bad-t); } .syncchip.big { height: 38px; }
.netbar { display: flex; align-items: center; gap: 10px; padding: 9px 28px; background: #a52f2f; color: #fff; font-weight: 600; font-size: 13.5px; } .netbar span { flex: 1; } .netbar .btn { min-height: 30px; }
.net-sw { margin: 14px 0 8px; display: flex; }
.techbar { display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
.mb { font-style: normal; background: var(--bad); color: #fff; border-radius: 9px; min-width: 18px; height: 18px; font-size: 11px; line-height: 18px; text-align: center; padding: 0 5px; margin-left: 2px; }
.msgnote { display: flex; align-items: center; gap: 12px; padding: 12px 14px; background: var(--pri-t); border: 1px solid #d9d4f4; border-radius: var(--r); margin-bottom: 16px; color: var(--pri); }
.msgnote div { flex: 1; min-width: 0; } .msgnote b { display: block; font-size: 13px; } .msgnote span { display: block; color: var(--ink); font-size: 14px; }

/* 표 정렬, 쪽 번호 */
.th-s { display: inline-flex; align-items: center; gap: 4px; border: 0; background: none; padding: 0; font: inherit; font-weight: 600; color: inherit; } .th-s:hover { color: var(--pri); } .th-s i { font-style: normal; font-size: 9px; color: var(--pri); min-width: 9px; }
.pager { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 4px 0; flex-wrap: wrap; } .pg-s { font-size: 13px; color: var(--mut); } .pager > div { display: flex; gap: 4px; align-items: center; }
.pg { min-width: 34px; height: 34px; border: 1px solid var(--line); background: #fff; border-radius: 8px; font-weight: 600; display: inline-grid; place-items: center; padding: 0 6px; } .pg:hover:not([disabled]) { background: var(--line2); } .pg.on { background: var(--pri); border-color: var(--pri); color: #fff; } .pg[disabled] { opacity: .4; cursor: default; } .pg-e { color: var(--mut); padding: 0 2px; }

/* 빈 상태, 불러오는 중, 찾을 수 없음 */
.empty .empty-i { display: grid; place-items: center; width: 52px; height: 52px; border-radius: 50%; background: var(--line2); color: #9a98b0; margin: 0 auto 10px; } .empty b { display: block; color: var(--ink); margin-bottom: 2px; } .empty p { max-width: 380px; margin: 0 auto; }
.nf svg { color: #b3b0cc; }
.skel { padding-top: 6px; } .sk { display: block; border-radius: 10px; background: linear-gradient(90deg, #ecebf4 25%, #f7f6fb 50%, #ecebf4 75%); background-size: 200% 100%; animation: shim 1s linear infinite; }
.sk.t { width: 220px; height: 28px; margin-bottom: 10px; } .sk.s { width: 340px; max-width: 100%; height: 16px; margin-bottom: 22px; } .sk-g { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-bottom: 18px; } .sk.b { height: 84px; } .sk.l { height: 160px; margin-bottom: 14px; }
@keyframes shim { to { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { .sk { animation: none; } }

/* 배차 보드 */
.dr-sum { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; margin-bottom: 14px; }
.dr-sum > div { background: #fff; border: 1px solid var(--line); border-radius: var(--r); padding: 12px 16px; box-shadow: var(--sh); } .dr-sum small { display: block; } .dr-sum b { font-size: 22px; letter-spacing: -.01em; } .dr-sum .ok b { color: var(--ok); } .dr-sum .warn b { color: var(--warn); } .dr-sum .bad b { color: var(--bad); }
.dr-al { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; }
.al { display: inline-flex; align-items: center; gap: 7px; min-height: 34px; padding: 0 13px; border-radius: 17px; border: 1px solid transparent; font-weight: 600; font-size: 13px; } .al:hover { text-decoration: none; filter: brightness(.97); }
.al.bad { background: var(--bad-t); color: var(--bad); border-color: #f1c8c8; } .al.warn { background: var(--warn-t); color: var(--warn); border-color: #f0d9a8; } .al.info { background: var(--info-t); color: var(--info); border-color: #c8daf3; }
.dr-bar { margin-bottom: 12px; } .dr-upd { color: var(--mut); font-size: 12.5px; margin-left: auto; } .dr-tools { display: flex; gap: 8px; }
.dr-card { overflow: hidden; padding: 0; }
.dr-scroll { overflow-x: auto; }
.dr-grid { min-width: 980px; }
.dr-row { display: grid; grid-template-columns: 224px minmax(0, 1fr); border-bottom: 1px solid var(--line2); }
.dr-row:last-child { border-bottom: 0; }
.dr-row.hd { background: #faf9fe; border-bottom: 1px solid var(--line); position: sticky; top: 0; }
.dr-rail { display: flex; align-items: center; gap: 8px; padding: 10px 12px 10px 16px; border-right: 1px solid var(--line); background: #fff; min-width: 0; position: relative; flex-wrap: wrap; }
.dr-rail.hd { background: #faf9fe; font-size: 12.5px; font-weight: 600; color: var(--mut); }
.dr-who { display: flex; align-items: center; gap: 9px; min-width: 0; flex: 1 1 100%; padding-right: 34px; } .dr-who b { display: block; font-size: 14px; line-height: 1.25; } .dr-who small { display: block; line-height: 1.3; }
.dr-st { font-size: 12.5px; font-weight: 600; color: #45435c; display: flex; align-items: center; gap: 6px; padding-left: 43px; margin-top: -4px; }
.dot { width: 8px; height: 8px; border-radius: 50%; background: #b9b7cc; display: inline-block; } .dot.work { background: #e0a020; } .dot.move { background: #3b82d6; } .dot.idle { background: #8c8aa6; } .dot.end { background: #2aa376; } .dot.off { background: #cfcde0; }
.dr-msg { position: absolute; right: 8px; top: 10px; } .dr-msg em { position: absolute; top: -2px; right: -2px; min-width: 16px; height: 16px; border-radius: 8px; background: var(--bad); color: #fff; font: 700 10.5px/16px var(--font); font-style: normal; text-align: center; }
.dr-hours { display: grid; grid-template-columns: repeat(13, minmax(0, 1fr)); }
.dr-hours span { padding: 9px 0 9px 6px; font-size: 12px; color: var(--mut); border-left: 1px solid var(--line); font-variant-numeric: tabular-nums; }
.dr-lane { position: relative; height: 82px; background-image: linear-gradient(to right, var(--line2) 1px, transparent 1px); background-size: calc(100% / 13) 100%; cursor: copy; }
.dr-lane.over { background-color: var(--pri-t); }
.dr-b { position: absolute; top: 9px; bottom: 9px; min-width: 22px; border: 1px solid; border-left-width: 4px; border-radius: 8px; padding: 4px 6px 4px 7px; overflow: hidden; text-align: left; font-size: 12px; line-height: 1.3; display: flex; flex-direction: column; justify-content: center; gap: 1px; cursor: pointer; z-index: 2; }
.dr-b b { font-size: 12.5px; font-variant-numeric: tabular-nums; } .dr-b span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #34324a; } .dr-b em { font-style: normal; font-size: 10.5px; font-weight: 700; position: absolute; top: 4px; right: 5px; }
.dr-b[draggable=true] { cursor: grab; } .dr-b:hover { box-shadow: 0 2px 10px rgba(30, 25, 70, .18); z-index: 3; }
.dr-b.st-scheduled { background: #efedfb; border-color: #c9c3ee; border-left-color: var(--pri); }
.dr-b.st-enroute { background: #e8f0fb; border-color: #bcd2ef; border-left-color: #3b82d6; }
.dr-b.st-working { background: #fff4de; border-color: #f0d9a8; border-left-color: #e0a020; }
.dr-b.st-done { background: #e9f6f0; border-color: #bfe3d3; border-left-color: #2aa376; }
.dr-b.st-overdue { background: #fdeaea; border-color: #f1c8c8; border-left-color: #d9534f; }
.dr-b.urg { box-shadow: inset 0 0 0 1px #d9534f; } .dr-b.urg em { color: var(--bad); }
.dr-trav { position: absolute; top: 34px; height: 14px; border-radius: 7px; background: repeating-linear-gradient(135deg, #d8d6e6 0 4px, #ecebf4 4px 8px); z-index: 1; }
.dr-abs { position: absolute; inset: 9px 0; background: repeating-linear-gradient(135deg, #f1f0f6 0 8px, #fafafe 8px 16px); display: flex; align-items: center; padding-left: 14px; color: var(--mut); font-weight: 600; font-size: 12.5px; z-index: 1; } .dr-abs span { display: inline-flex; gap: 6px; align-items: center; }
.dr-now { position: absolute; top: 0; bottom: 0; width: 2px; background: #d9534f; z-index: 4; pointer-events: none; } .dr-now::before { content: ''; position: absolute; top: -1px; left: -4px; width: 10px; height: 10px; border-radius: 50%; background: #d9534f; }
.dr-leg { display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center; padding: 11px 16px; border-top: 1px solid var(--line); background: #faf9fe; font-size: 12.5px; color: #45435c; }
.dr-leg span { display: inline-flex; align-items: center; gap: 6px; } .dr-leg i { width: 14px; height: 14px; border-radius: 4px; border: 1px solid; display: inline-block; }
.dr-leg i.st-scheduled { background: #efedfb; border-color: var(--pri); } .dr-leg i.st-enroute { background: #e8f0fb; border-color: #3b82d6; } .dr-leg i.st-working { background: #fff4de; border-color: #e0a020; } .dr-leg i.st-done { background: #e9f6f0; border-color: #2aa376; } .dr-leg i.st-overdue { background: #fdeaea; border-color: #d9534f; }
.dr-leg i.trav { background: repeating-linear-gradient(135deg, #d8d6e6 0 3px, #ecebf4 3px 6px); border-color: #d8d6e6; } .dr-leg i.urgl { background: #fff; border-color: #d9534f; } .dr-leg small { margin-left: auto; }
.dr-leg i.pinl { width: 14px; height: 14px; border-radius: 50%; background: #4b3fae; border-color: #4b3fae; } .dr-leg i.truckl { background: #1d1b2e; border-color: #1d1b2e; border-radius: 4px; } .dr-leg i.diaml { background: #c43535; border-color: #c43535; transform: rotate(45deg) scale(.8); border-radius: 2px; }
/* 지도 */
.dr-mapwrap { display: grid; grid-template-columns: minmax(0, 1fr) 300px; }
.dr-mapbox { min-width: 0; border-right: 1px solid var(--line); } .dr-map { display: block; width: 100%; height: auto; }
.mz { fill: rgba(75, 63, 174, .06); stroke: rgba(75, 63, 174, .25); stroke-width: 2; stroke-dasharray: 8 6; } .mzl { font: 700 18px var(--font); fill: rgba(75, 63, 174, .5); }
.mriver { fill: none; stroke: #cfe0f5; stroke-width: 24; stroke-linecap: round; } .mroad { fill: none; stroke: #d8d6e6; stroke-width: 10; } .mroad2 { fill: none; stroke: #fff; stroke-width: 7; }
.mlbl { font: 600 13px var(--font); fill: #34324a; paint-order: stroke; stroke: #eef1f8; stroke-width: 4px; } .mlbl.b { font-weight: 700; } .mnum { font: 700 13px var(--font); } .mdep { font: 700 13px var(--font); fill: #fff; }
.mp, .mk { cursor: pointer; } .mp:hover circle:first-child { stroke-width: 4; } .mp:focus-visible, .mk:focus-visible { outline: none; } .mp:focus-visible circle:first-child { stroke-width: 5; }
.dr-leg.map { border-top: 1px solid var(--line); }
.dr-mside { padding: 14px 16px; max-height: 640px; overflow-y: auto; } .dr-mside h3 { font-size: 14px; margin-bottom: 8px; }
.mr { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--line2); } .mr:last-child { border-bottom: 0; } .mr div { flex: 1; min-width: 0; } .mr b { display: block; } .mr small { display: block; line-height: 1.35; }
.mr em { font-style: normal; font-weight: 700; text-align: right; font-size: 13.5px; } .mr em small { font-weight: 400; }
.sw-c { width: 10px; height: 36px; border-radius: 5px; flex: none; }
/* 접수, 배정 창 */
.tk-sum { background: var(--line2); border-radius: 12px; padding: 12px 14px; margin-bottom: 14px; } .tk-sum div { margin-bottom: 6px; display: flex; gap: 6px; flex-wrap: wrap; } .tk-sum b { font-size: 15.5px; } .tk-sum p { margin: 2px 0 4px; }
.rec-h { margin: 14px 0 8px; font-size: 14px; } .rec-h small { margin-left: 6px; font-weight: 400; }
.recs { display: grid; gap: 8px; }
.rec { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 12px; cursor: pointer; } .rec:has(input:checked) { border-color: var(--pri); background: var(--pri-t); } .rec.dis { opacity: .55; cursor: not-allowed; }
.rec input { accent-color: var(--pri); width: 18px; height: 18px; flex: none; } .rec b { display: block; } .rec small { display: block; line-height: 1.4; }
.form-msg:empty { display: none; }
/* 메시지 */
.msgs { max-height: 280px; overflow-y: auto; display: flex; flex-direction: column; gap: 10px; padding: 4px 2px 10px; }
.msg { max-width: 86%; align-self: flex-start; } .msg small { display: block; margin-bottom: 2px; } .msg p { background: var(--line2); padding: 9px 12px; border-radius: 4px 14px 14px 14px; }
.msg.me { align-self: flex-end; text-align: right; } .msg.me p { background: var(--pri); color: #fff; border-radius: 14px 4px 14px 14px; text-align: left; }
.quick { display: flex; gap: 6px; flex-wrap: wrap; margin: 4px 0 12px; }
/* 대시보드 접수 카드 */
.tkn { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 12px; } .tkn > div { background: var(--line2); border-radius: 10px; padding: 10px 12px; } .tkn b { display: block; font-size: 22px; } .tkn .bad b { color: var(--bad); } .tkn .warn b { color: var(--warn); } .tkn .ok b { color: var(--ok); }
.tkm { display: flex; gap: 18px; flex-wrap: wrap; margin-bottom: 8px; color: var(--mut); font-size: 13px; } .tkm b { color: var(--ink); }
.lr-v .dot { margin-right: 6px; }
/* 방문 상세 */
.tmb { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-bottom: 6px; } .tmb > div { background: var(--line2); border-radius: 10px; padding: 8px 10px; } .tmb small { display: block; } .tmb b { font-size: 17px; } .tmb em { display: block; font-style: normal; font-size: 11.5px; color: var(--mut); }
.trail { list-style: none; margin: 0; padding: 6px 8px 8px; position: relative; } .trail::before { content: ''; position: absolute; left: 24px; top: 20px; bottom: 20px; width: 2px; background: var(--line); }
.trail li { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; gap: 10px; align-items: start; padding: 7px 4px; position: relative; } .trail i { width: 34px; height: 34px; border-radius: 50%; background: #fff; border: 2px solid var(--line); display: grid; place-items: center; color: var(--pri); z-index: 1; }
.trail b { display: block; font-size: 13.5px; } .trail span { display: block; font-size: 12.5px; color: var(--mut); line-height: 1.4; } .trail time { font-size: 12px; color: var(--mut); white-space: nowrap; font-variant-numeric: tabular-nums; padding-top: 2px; }
.route { list-style: none; margin: 0; padding: 0; } .route li { display: flex; align-items: center; gap: 12px; padding: 9px 0; border-bottom: 1px solid var(--line2); } .route li:last-child { border-bottom: 0; } .route li div { flex: 1; min-width: 0; } .route b { display: block; font-size: 14px; } .route i { width: 26px; height: 26px; border-radius: 50%; background: var(--pri); color: #fff; font: 700 12.5px/26px var(--font); text-align: center; font-style: normal; flex: none; }
.route li.st-done i { background: #fff; color: var(--ok); border: 2px solid var(--ok); line-height: 22px; } .route li.st-working i { background: #e0a020; }
.route-map { display: block; width: 100%; height: auto; max-height: 240px; border-radius: 12px; margin-bottom: 12px; }

@media (max-width: 1280px) { .dr-row { grid-template-columns: 190px minmax(0, 1fr); } .dr-mapwrap { grid-template-columns: minmax(0, 1fr); } .dr-mapbox { border-right: 0; } .dr-mside { max-height: none; border-top: 1px solid var(--line); } }
@media (max-width: 760px) {
  .dr-sum { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .dr-sum b { font-size: 19px; } .dr-upd { margin-left: 0; width: 100%; } .dr-tools { width: 100%; } .dr-tools .btn { flex: 1; }
  .tkn { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sk-g { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .netbar { padding: 9px 14px; } .syncchip span { display: none; } .syncchip { padding: 0 9px; } .techbar .syncchip span { display: inline; }
  .msg { max-width: 94%; } .tmb b { font-size: 15px; }
  .pager { justify-content: center; } .dr-leg small { margin-left: 0; width: 100%; }
}
.dr-mapbox { background: #eef1f8; } .dr-map { max-height: 600px; }
.dr-lane.ro { cursor: default; }
