:root {
  --ink: #17201d;
  --muted: #66736e;
  --line: #dce4df;
  --paper: #f3f6f3;
  --card: #ffffff;
  --green: #0f6b4f;
  --green-2: #1b8a68;
  --lime: #dff35d;
  --amber: #f3a83b;
  --red: #c34a45;
  --nav: #13241f;
  --shadow: 0 18px 50px rgba(20, 49, 39, .08);
  --sidebar-collapsed: 72px;
  --sidebar-expanded: 210px;
}

* { box-sizing: border-box; }
html, body { margin: 0; min-height: 100%; }
body { font-family: "Pretendard", "Noto Sans KR", "Malgun Gothic", system-ui, sans-serif; color: var(--ink); background: var(--paper); }
button, input, select, textarea { font: inherit; }
button { cursor: pointer; }
.hidden { display: none !important; }
.eyebrow { font-size: 11px; font-weight: 800; letter-spacing: .16em; color: var(--green); }
.brand-mark { width: 44px; height: 44px; display: grid; place-items: center; border-radius: 12px; background: var(--lime); color: var(--nav); font-weight: 950; letter-spacing: -.08em; }
.brand-mark.large { width: 112px; height: 112px; border-radius: 28px; font-size: 40px; }
.status-dot { width: 9px; height: 9px; display: inline-block; border-radius: 50%; background: #4fe0a7; box-shadow: 0 0 0 4px rgba(79,224,167,.12); }

.login-screen { min-height: 100vh; display: grid; grid-template-columns: minmax(360px, 1.05fr) minmax(460px, .95fr); background: var(--nav); }
.login-art { position: relative; overflow: hidden; padding: clamp(50px, 7vw, 110px); color: white; display: flex; flex-direction: column; justify-content: center; }
.login-art::before { content: ""; position: absolute; width: 680px; height: 680px; border: 1px solid rgba(223,243,93,.16); border-radius: 50%; right: -280px; top: -220px; box-shadow: 0 0 0 110px rgba(223,243,93,.035), 0 0 0 220px rgba(223,243,93,.025); }
.login-art p { position: relative; margin: 30px 0; font-size: clamp(32px, 4vw, 64px); line-height: .96; font-weight: 850; letter-spacing: -.04em; }
.route-line { display: flex; align-items: center; gap: 0; width: 75%; margin-top: 34px; }
.route-line::before, .route-line::after { content: ""; height: 1px; flex: 1; background: rgba(255,255,255,.26); }
.route-line span { width: 14px; height: 14px; border: 3px solid var(--nav); outline: 1px solid var(--lime); background: var(--lime); border-radius: 50%; margin: 0 11%; }
.login-card { background: #fff; padding: clamp(54px, 8vw, 130px); display: flex; flex-direction: column; justify-content: center; }
.login-card h1 { font-size: clamp(38px, 5vw, 68px); line-height: 1.04; margin: 18px 0 22px; letter-spacing: -.055em; }
.login-description { color: var(--muted); max-width: 490px; line-height: 1.7; margin: 0 0 34px; }
.login-card form { max-width: 460px; display: grid; gap: 10px; }
.login-card label { font-size: 13px; font-weight: 750; margin-top: 8px; }
input, select { border: 1px solid var(--line); border-radius: 9px; background: white; color: var(--ink); min-height: 42px; padding: 0 12px; outline: none; }
input:focus, select:focus, textarea:focus { border-color: var(--green-2); box-shadow: 0 0 0 3px rgba(27,138,104,.12); }
.login-card input { min-height: 52px; }
.form-error { color: var(--red); min-height: 22px; font-size: 13px; }
.login-footnote { margin-top: 22px; color: var(--muted); font-size: 12px; }

.primary, .secondary { border: 0; border-radius: 9px; min-height: 42px; padding: 0 17px; font-weight: 780; transition: transform .15s, background .15s; }
.primary { color: #fff; background: var(--green); box-shadow: 0 8px 18px rgba(15,107,79,.16); }
.primary:hover { background: #0b5a43; transform: translateY(-1px); }
.secondary { color: var(--ink); background: #edf2ee; border: 1px solid #dce6df; }
.secondary:hover { background: #e4ebe6; }
.wide { width: 100%; display: flex; align-items: center; justify-content: space-between; margin-top: 14px; }
.text-button { background: transparent; border: 0; color: var(--green); font-weight: 760; }

.app-shell { min-height: 100vh; display: grid; grid-template-columns: var(--sidebar-collapsed) minmax(0, 1fr); transition: grid-template-columns .2s ease; }
.app-shell.sidebar-pinned { grid-template-columns: var(--sidebar-expanded) minmax(0, 1fr); }
.sidebar { position: sticky; top: 0; z-index: 20; width: var(--sidebar-collapsed); height: 100vh; overflow: hidden; background: var(--nav); color: white; padding: 20px 10px; display: flex; flex-direction: column; transition: width .2s ease, padding .2s ease, box-shadow .2s ease; }
.app-shell.sidebar-expanded .sidebar { width: var(--sidebar-expanded); padding-inline: 14px; }
.app-shell.sidebar-expanded:not(.sidebar-pinned) .sidebar { box-shadow: 18px 0 38px rgba(8, 22, 17, .2); }
.sidebar-brand { display: flex; align-items: center; justify-content: center; gap: 0; padding: 0 0 16px; }
.app-shell.sidebar-expanded .sidebar-brand { justify-content: flex-start; gap: 12px; padding-inline: 10px; }
.sidebar-brand .brand-mark { flex: 0 0 44px; }
.sidebar-brand strong { display: block; font-size: 17px; }
.sidebar-brand small { display: block; color: #8ea49b; font-size: 9px; letter-spacing: .13em; margin-top: 4px; }
.sidebar-brand-copy, .sidebar-label, .sidebar-note-copy { max-width: 0; overflow: hidden; opacity: 0; transform: translateX(-6px); white-space: nowrap; transition: max-width .2s ease, opacity .14s ease, transform .2s ease; }
.app-shell.sidebar-expanded .sidebar-brand-copy, .app-shell.sidebar-expanded .sidebar-label, .app-shell.sidebar-expanded .sidebar-note-copy { max-width: 160px; opacity: 1; transform: translateX(0); }
.sidebar-pin { width: 100%; min-height: 34px; margin-bottom: 14px; border: 1px solid rgba(255,255,255,.11); border-radius: 9px; color: #9eb0a9; background: rgba(255,255,255,.025); display: flex; align-items: center; justify-content: center; gap: 0; font-size: 11px; font-weight: 800; }
.app-shell.sidebar-expanded .sidebar-pin { justify-content: flex-start; gap: 10px; padding: 0 13px; }
.sidebar-pin:hover { color: white; background: rgba(255,255,255,.07); }
.sidebar-pin[aria-pressed="true"] { color: var(--lime); border-color: rgba(223,243,93,.28); background: rgba(223,243,93,.08); }
.pin-icon { flex: 0 0 20px; font-size: 16px; line-height: 1; text-align: center; }
.sidebar nav { display: grid; gap: 6px; }
.nav-item { width: 100%; color: #b7c6c0; background: transparent; border: 0; border-radius: 10px; padding: 13px 0; text-align: left; font-weight: 700; display: flex; justify-content: center; gap: 0; align-items: center; }
.app-shell.sidebar-expanded .nav-item { justify-content: flex-start; gap: 12px; padding-inline: 14px; }
.nav-icon { flex: 0 0 20px; width: 20px; color: #80938b; font-size: 18px; text-align: center; }
.nav-item:hover { background: rgba(255,255,255,.05); color: white; }
.nav-item.active { color: var(--nav); background: var(--lime); }
.nav-item.active .nav-icon { color: var(--nav); }
.sidebar-note { margin-top: auto; border-top: 1px solid rgba(255,255,255,.1); padding: 22px 0; display: flex; align-items: center; justify-content: center; gap: 0; }
.app-shell.sidebar-expanded .sidebar-note { justify-content: flex-start; gap: 12px; padding-inline: 10px; }
.sidebar-note .status-dot { flex: 0 0 9px; }
.sidebar-note b, .sidebar-note small { display: block; }
.sidebar-note b { font-size: 12px; }
.sidebar-note small { color: #93a79e; margin-top: 4px; }
.role-badge { display: inline-flex; width: fit-content; margin-top: 6px; padding: 2px 7px; border: 1px solid rgba(255,255,255,.14); border-radius: 999px; color: #c8d5d0; background: rgba(255,255,255,.055); font-size: 8px; font-weight: 900; letter-spacing: .03em; }
.role-badge.admin { color: #14251f; border-color: var(--lime); background: var(--lime); }
.role-badge.editor { color: #d6ebe3; border-color: rgba(89,196,158,.34); background: rgba(89,196,158,.15); }
.role-badge.viewer { color: #ffe2b7; border-color: rgba(255,190,96,.32); background: rgba(255,190,96,.13); }
.logout-button { width: 100%; color: #a7b7b0; background: transparent; border: 1px solid rgba(255,255,255,.12); border-radius: 9px; min-height: 40px; display: flex; align-items: center; justify-content: center; gap: 0; }
.app-shell.sidebar-expanded .logout-button { gap: 9px; }
.logout-icon { flex: 0 0 20px; font-size: 17px; }

.workspace { min-width: 0; padding: 24px 24px 54px; }
.readonly-banner { margin: -10px 0 16px; padding: 10px 13px; border: 1px solid #ead19f; border-radius: 10px; color: #704a0d; background: #fff7e6; display: flex; align-items: center; gap: 10px; font-size: 11px; }
.readonly-banner strong { flex: none; padding: 3px 7px; border-radius: 999px; color: #fff; background: #aa7017; font-size: 9px; }
.topbar { display: flex; justify-content: space-between; align-items: flex-end; gap: 24px; margin-bottom: 26px; }
.topbar h1 { margin: 6px 0 0; font-size: 30px; letter-spacing: -.04em; }
.topbar-actions { display: flex; align-items: flex-end; gap: 9px; }
.date-control { font-size: 11px; font-weight: 750; color: var(--muted); display: grid; gap: 5px; }
.range-mode-control select { min-width: 88px; }
.view { display: none; }
.view.active { display: block; }
.date-summary { display: flex; align-items: baseline; gap: 12px; margin: 0 0 14px; }
.date-summary strong { font-size: 15px; }
.date-summary span { color: var(--muted); font-size: 12px; }
.stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px,1fr)); gap: 14px; margin-bottom: 14px; }
.stat-card { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 20px; box-shadow: var(--shadow); position: relative; overflow: hidden; }
.stat-card::after { content: ""; position: absolute; right: -28px; bottom: -42px; width: 110px; height: 110px; border-radius: 50%; background: rgba(15,107,79,.055); }
.stat-card.accent { background: var(--green); color: white; border-color: var(--green); }
.stat-card.accent::after { background: rgba(223,243,93,.16); }
.stat-card.warning::after { background: rgba(243,168,59,.13); }
.stat-card span { display: block; color: inherit; opacity: .72; font-size: 12px; font-weight: 700; }
.stat-card strong { display: inline-block; margin-top: 10px; font-size: 36px; letter-spacing: -.05em; }
.stat-card small { margin-left: 5px; opacity: .65; }
.panel { background: var(--card); border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow); }
.panel.compact { border-radius: 12px; }
.dashboard-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.panel-heading { padding: 20px 22px 10px; display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.panel-heading h2 { margin: 5px 0 0; font-size: 18px; letter-spacing: -.03em; }
.panel-heading small { display: block; margin-top: 5px; color: var(--muted); font-size: 10px; }
.bar-chart { min-height: 230px; padding: 18px 22px 24px; display: grid; align-content: center; gap: 14px; }
#workerBars { max-height: 390px; overflow-y: auto; align-content: start; }
.bar-item { display: grid; grid-template-columns: 80px minmax(0,1fr) 34px; align-items: center; gap: 10px; font-size: 12px; font-weight: 730; }
.bar-track { height: 11px; border-radius: 20px; background: #edf1ee; overflow: hidden; }
.bar-fill { display: block; height: 100%; border-radius: inherit; background: var(--green-2); min-width: 4px; }
.bar-item:nth-child(2n) .bar-fill { background: #5aa68b; }
.waste-amount-chart { align-content: start; }
.waste-amount-chart .bar-item { grid-template-columns: 72px minmax(0, 1fr) 40px; }
.bar-item.zero .bar-track { background: #f3f5f4; }
.bar-item.zero b { color: #98a49f; }
.daily-trend-panel { grid-column: 1 / -1; }
.trend-legend { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; color: var(--muted); font-size: 10px; font-weight: 750; }
.trend-legend span { display: inline-flex; align-items: center; gap: 5px; }
.trend-legend i { width: 9px; height: 9px; border-radius: 3px; background: var(--green-2); }
.trend-legend i.unassigned { background: var(--amber); }
.trend-legend i.available { background: white; border: 1px dashed #aebdb5; }
.trend-legend i.saturday { background: #6aaee0; }
.trend-legend i.sunday { background: #ef8585; }
.trend-legend i.holiday { background: #d85a79; }
.daily-chart { min-height: 210px; padding: 24px 22px 20px; display: flex; align-items: stretch; gap: 5px; overflow-x: auto; }
.daily-column { flex: 1 0 22px; min-width: 22px; height: 174px; padding: 0 2px 4px; display: grid; grid-template-rows: 20px 1fr 31px; align-items: end; justify-items: center; color: var(--muted); border-radius: 7px; font-size: 9px; box-sizing: border-box; cursor: pointer; transition: transform .16s ease, outline-color .16s ease, background-color .16s ease; }
.daily-column:hover { transform: translateY(-2px); }
.daily-column:focus-visible { outline: 2px solid var(--green-2); outline-offset: 2px; }
.daily-column.is-preview-target { outline: 2px solid var(--green); outline-offset: -2px; }
.daily-column.day-saturday { color: #246a9a; background: linear-gradient(180deg, rgba(106,174,224,0) 6%, rgba(106,174,224,.08) 42%, rgba(106,174,224,.22) 100%); }
.daily-column.day-sunday { color: #b54040; background: linear-gradient(180deg, rgba(239,133,133,0) 6%, rgba(239,133,133,.08) 42%, rgba(239,133,133,.22) 100%); }
.daily-column.day-holiday { color: #a42345; background: linear-gradient(180deg, rgba(216,90,121,0) 6%, rgba(216,90,121,.1) 42%, rgba(216,90,121,.25) 100%); box-shadow: inset 0 -2px 0 rgba(190,52,86,.35); }
.daily-column b { color: var(--green); font-size: 9px; }
.daily-column.day-saturday b { color: #246a9a; }
.daily-column.day-sunday b { color: #b54040; }
.daily-column.day-holiday b { color: #a42345; }
.daily-bar { width: min(15px, 80%); min-height: 2px; overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end; border-radius: 5px 5px 2px 2px; background: #edf2ee; }
.daily-segment { display: block; width: 100%; min-height: 2px; }
.daily-segment.assigned { background: linear-gradient(180deg, var(--green-2), #6ab197); }
.daily-segment.unassigned { background: var(--amber); }
.daily-bar.available-slot { width: 13px; height: 7px !important; min-height: 7px; border: 1px dashed #aebdb5; background: white; }
.daily-date-label { align-self: stretch; display: grid; place-items: center; align-content: end; gap: 1px; padding-top: 3px; font-weight: 750; line-height: 1; }
.daily-date-label span { padding: 0; }
.daily-date-label small { font-size: 8px; font-weight: 850; }
.weekly-summary { display: grid; grid-template-columns: repeat(5, minmax(100px, 1fr)); gap: 8px; padding: 0 22px 20px; }
.weekly-summary-item { display: grid; grid-template-columns: auto 1fr auto; gap: 8px; align-items: center; padding: 9px 10px; border: 1px solid #e1e9e4; border-radius: 9px; background: #f8fbf9; font-size: 10px; }
.weekly-summary-item b { color: var(--green); }
.weekly-summary-item span { color: var(--muted); }
.weekly-summary-item em { color: var(--green); font-style: normal; font-weight: 800; }
.weekly-summary-item em.has-unassigned { color: #9a5b12; }
.dashboard-table-panel { margin-top: 14px; }
.count-pill { background: #edf3ef; color: var(--green); border-radius: 30px; padding: 5px 10px; font-size: 11px; font-weight: 800; }
.preview-heading-tools { display: flex; align-items: center; gap: 9px; }
.preview-search-input { width: min(320px, 30vw); min-height: 36px; font-size: 11px; }
.preview-list { max-height: min(560px, 62vh); padding: 8px 22px 22px; overflow-y: auto; scrollbar-gutter: stable; }
.preview-row { display: grid; grid-template-columns: 100px 82px minmax(0, 1.6fr) 82px minmax(0, 1.1fr) 130px 80px; gap: 10px; align-items: center; padding: 12px 0; border-top: 1px solid #edf1ee; font-size: 12px; }
.preview-row.preview-date-start { margin-top: 4px; border-top: 4px solid #dce8e1; }
.preview-row.preview-date-target { border-radius: 8px; box-shadow: inset 4px 0 0 var(--green-2); animation: preview-date-target-pulse 2.2s ease-out; }
.dashboard-table-panel.preview-missing-date { animation: preview-missing-date-pulse 1.6s ease-out; }
@keyframes preview-date-target-pulse {
  0%, 35% { background: rgba(31, 143, 105, .16); }
  100% { background: rgba(31, 143, 105, 0); }
}
@keyframes preview-missing-date-pulse {
  0%, 35% { box-shadow: 0 0 0 3px rgba(230, 169, 55, .4), var(--shadow); }
  100% { box-shadow: var(--shadow); }
}
.preview-row time { font-weight: 800; color: var(--green); }
.preview-row b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.preview-row small { color: var(--muted); }
.preview-waste { display: inline-flex; min-height: 26px; align-items: center; justify-content: center; padding: 4px 8px; border: 1px solid #e6cf82; border-radius: 8px; background: #fff8df; color: #6f5710; font-size: 11px; font-weight: 850; white-space: nowrap; }
.preview-waste.support-work { border-color: #d8cbea; background: #f4eefb; color: #65428c; }
.preview-content { overflow: hidden; color: #52635b; font-size: 11px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; cursor: help; }
.preview-company, .preview-worker { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.empty-state { color: var(--muted); text-align: center; font-size: 13px; }

.toolbar { padding: 12px; display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
.toolbar-group { display: flex; align-items: flex-end; gap: 10px; }
.toolbar-group.end { margin-left: auto; }
.sort-actions { display: flex; gap: 6px; }
.compact-button { min-height: 38px; padding: 0 12px; font-size: 11px; }
.batch-save-button { min-height: 38px; padding: 0 15px; border: 1px solid var(--green); border-radius: 8px; background: var(--green); color: white; font-size: 11px; font-weight: 850; white-space: nowrap; box-shadow: 0 8px 20px rgba(17, 111, 80, .16); }
.batch-save-button:disabled { border-color: #dce4df; background: #e9eeeb; color: #94a29c; box-shadow: none; }
.toolbar label { display: grid; gap: 5px; color: var(--muted); font-size: 10px; font-weight: 800; }
.toolbar input[type=search] { width: min(330px, 30vw); }
.board-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; align-items: start; }
.schedule-grid-wrap { min-width: 0; overflow: hidden; }
.grid-meta { min-height: 46px; padding: 8px 14px; display: flex; align-items: center; justify-content: space-between; gap: 16px; color: var(--muted); font-size: 11px; border-bottom: 1px solid var(--line); }
.grid-meta b { color: var(--ink); }
.schedule-grid-scroll { overflow: auto; max-height: calc(100vh - 245px); }
.schedule-grid { border-collapse: separate; border-spacing: 0; min-width: 1108px; width: 100%; table-layout: fixed; font-size: 11px; }
.schedule-grid th { position: sticky; top: 0; z-index: 3; height: 38px; background: #f0f4f1; color: #52615b; border-bottom: 1px solid #ccd8d0; border-right: 1px solid #dce4df; padding: 0 9px; white-space: nowrap; text-align: left; font-size: 10px; }
.schedule-grid td { border-bottom: 1px solid #e2e9e4; border-right: 1px solid #edf1ee; padding: 7px 9px; vertical-align: middle; line-height: 1.35; background: white; }
.schedule-grid tr:hover td { background: #f8fbf9; }
.schedule-grid tr.dragging td { opacity: .42; background: #e7f2ec; }
.schedule-grid tr.drop-target td { border-top: 2px solid var(--green-2); }
.schedule-grid th:nth-child(1), .schedule-grid td:nth-child(1) { width: 36px; text-align: center; position: sticky; left: 0; z-index: 2; }
.schedule-grid th:nth-child(2), .schedule-grid td:nth-child(2) { width: 44px; text-align: center; position: sticky; left: 36px; z-index: 2; box-shadow: 8px 0 12px rgba(24, 51, 42, .05); }
.schedule-grid th:nth-child(3), .schedule-grid td:nth-child(3) { width: 118px; }
.schedule-grid th:nth-child(4), .schedule-grid td:nth-child(4) { width: 300px; }
.schedule-grid th:nth-child(5), .schedule-grid td:nth-child(5) { width: 320px; }
.schedule-grid th:nth-child(6), .schedule-grid td:nth-child(6) { width: 170px; }
.schedule-grid th:nth-child(7), .schedule-grid td:nth-child(7) { width: 120px; }
.schedule-grid th:nth-child(-n+2) { z-index: 5; background: #e7efe9; }
.schedule-grid td:nth-child(-n+2) { background: #fbfdfb; }
.schedule-grid tr:hover td:nth-child(-n+2) { background: #f1f7f3; }
.select-col { width: 44px; text-align: center !important; }
.drag-handle { border: 0; background: transparent; color: #779086; cursor: grab; font-size: 14px; padding: 1px; }
.order-cell { display: flex; align-items: center; justify-content: center; gap: 2px; }
.order-cell b { color: var(--green); font-size: 12px; }
.entry-time-cell { vertical-align: top !important; background: #f4faf6 !important; }
.time-editor { display: grid; grid-template-columns: minmax(0, 1fr); align-items: center; }
.entry-time-input { width: 100%; min-width: 0; min-height: 36px; padding: 6px 8px; border-color: #80bca2; background: #f2fbf6; color: #075d43; font-size: 12px; font-weight: 900; letter-spacing: -.02em; text-align: center; box-shadow: inset 4px 0 0 #39966f, 0 2px 7px rgba(19, 77, 57, .08); transition: background .15s, border-color .15s, color .15s, box-shadow .15s; }
.entry-time-input.time-morning { border-color: #72b9e2; background: #dff2ff; color: #0c5884; box-shadow: inset 4px 0 0 #3297d1, 0 2px 7px rgba(28, 105, 151, .11); }
.entry-time-input.time-late-afternoon { border-color: #dda160; background: #ffead3; color: #82420c; box-shadow: inset 4px 0 0 #d6802b, 0 2px 7px rgba(151, 83, 23, .11); }
.site-summary-cell, .job-detail-cell { vertical-align: top !important; }
.site-summary { min-width: 0; display: grid; gap: 5px; }
.site-meta { display: flex; flex-wrap: wrap; gap: 5px; }
.site-meta span { display: inline-flex; align-items: center; min-height: 19px; padding: 1px 6px; border-radius: 20px; color: #51615b; background: #edf3ef; font-size: 9px; font-weight: 800; }
.site-meta .date, .site-meta .time { color: #0e684d; background: #def1e7; }
.site-meta .group { color: #34526e; background: #e7f0f8; }
.site-meta .category { color: #674a86; background: #f0e9f8; }
.site-meta .progress { color: #80590c; background: #fff0ba; }
.site-address-row { display: flex; align-items: flex-start; gap: 8px; }
.site-address { flex: 1; min-width: 0; color: #13251f; font-size: 13px; line-height: 1.35; word-break: keep-all; overflow-wrap: anywhere; }
.address-copy { flex: none; min-height: 28px; padding: 0 8px; border: 1px solid #cbd9d1; border-radius: 7px; color: var(--green); background: #f5f9f6; font-size: 10px; font-weight: 800; white-space: nowrap; }
.address-copy:disabled { opacity: .45; }
.job-detail { min-width: 0; display: grid; gap: 4px; }
.job-contact { overflow: hidden; color: #24332e; font-size: 10px; font-weight: 800; text-overflow: ellipsis; white-space: nowrap; }
.job-content-trigger { display: block; width: 100%; min-width: 0; min-height: 28px; overflow: hidden; padding: 5px 8px; border: 1px solid #d9e3dd; border-radius: 7px; background: #fbfdfb; color: #5f6d68; font: inherit; font-size: 10px; line-height: 1.4; text-align: left; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.job-content-trigger::before { content: "내용 · "; color: var(--green); font-weight: 850; }
.job-content-trigger:hover, .job-content-trigger:focus, .job-content-trigger[aria-expanded="true"] { outline: 2px solid rgba(18, 119, 86, .13); border-color: var(--green); background: white; color: #263832; }
.entry-time-input:focus { outline: 2px solid rgba(18, 119, 86, .16); border-color: var(--green); }
.sync-note { color: #7b8984; font-size: 9px; }
.detail-save { min-height: 30px; color: white; background: var(--green); border-color: var(--green); }
.detail-save:disabled { color: #94a29c; background: #edf1ee; border-color: #e0e6e2; }
.job-waste { min-width: 0; min-height: 24px; overflow: hidden; display: flex; align-items: baseline; gap: 6px; padding: 3px 7px; border: 1px solid #e7dfc4; border-left: 3px solid #d4a72e; border-radius: 7px; background: rgba(255, 250, 232, .7); color: #66531c; white-space: nowrap; }
.job-waste-label { flex: none; color: #8a7640; font-size: 8px; font-weight: 900; letter-spacing: .03em; }
.job-waste-amount { flex: none; max-width: 58%; overflow: hidden; padding: 0; color: #654b00; font-size: 12px; font-weight: 950; line-height: 1.1; text-overflow: ellipsis; }
.job-waste-type { min-width: 0; overflow: hidden; padding: 0; color: #827552; font-size: 9px; font-weight: 750; text-overflow: ellipsis; }
.job-waste-type::before { content: "· "; color: #b2a581; }
.job-waste.support-work { border-color: #d8cceb; border-left-color: #8b69b4; background: rgba(246, 241, 252, .72); }
.job-waste.support-work .job-waste-label { color: #76559f; }
.job-waste.support-work .job-waste-amount { color: #533379; }
.job-waste.support-work .job-waste-type { color: #826da0; }
.job-content-popover { position: fixed; z-index: 200; display: grid; gap: 10px; width: min(470px, calc(100vw - 20px)); max-height: calc(100vh - 20px); overflow: auto; padding: 15px; border: 1px solid #cbd9d1; border-radius: 12px; background: white; box-shadow: 0 18px 54px rgba(16, 43, 34, .24); }
.job-content-popover-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.job-content-popover-heading > div { min-width: 0; display: grid; gap: 3px; }
.job-content-popover-heading small { color: var(--green); font-size: 9px; font-weight: 900; letter-spacing: .08em; }
.job-content-popover-title { overflow: hidden; color: #1e302a; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.job-content-popover-close { width: 30px; height: 30px; flex: none; border: 1px solid var(--line); border-radius: 8px; background: #f3f7f4; color: #52615b; font-size: 20px; line-height: 1; }
.job-content-popover-editor { width: 100%; min-height: 190px; max-height: 330px; resize: vertical; padding: 10px 11px; border: 1px solid #cfdad4; border-radius: 8px; background: #fbfdfb; color: #34443e; font: inherit; font-size: 12px; line-height: 1.55; white-space: pre-wrap; overflow: auto; }
.job-content-popover-editor:focus { outline: 2px solid rgba(18, 119, 86, .16); border-color: var(--green); }
.job-content-popover-waste { color: #7b5b18; background: #fff8e5; border-radius: 7px; padding: 6px 8px; font-size: 10px; font-weight: 800; }
.job-content-popover-footer { display: flex; align-items: center; justify-content: flex-start; gap: 10px; }
.job-content-popover-footer { justify-content: space-between; }
.job-content-popover-actions { display: flex; gap: 7px; }
.job-content-popover-actions button { min-height: 34px; padding: 0 12px; font-size: 11px; }
.job-content-popover.draft-dirty { border-color: #d6ae3a; box-shadow: 0 18px 54px rgba(95, 68, 8, .24); }
.job-content-popover.draft-dirty .sync-note { color: #8a5d05; font-weight: 800; }
.schedule-grid select { width: 100%; min-height: 38px; font-size: 11px; }
.worker-input-cell { background: #fff1cc !important; transition: background-color .16s ease; }
.worker-select { padding-right: 64px; border-color: #d6a941; background: #fff8e8; font-weight: 800; transition: background-color .16s ease, border-color .16s ease, box-shadow .16s ease; }
.schedule-grid tr.worker-team-empty { --worker-team-row-rgb: 214, 169, 65; }
.schedule-grid tr.worker-team-direct { --worker-team-row-rgb: 76, 142, 215; }
.schedule-grid tr.worker-team-ssdam { --worker-team-row-rgb: 69, 166, 107; }
.schedule-grid tr.worker-team-leebyoungeon { --worker-team-row-rgb: 216, 137, 59; }
.schedule-grid tr.worker-team-outsource { --worker-team-row-rgb: 141, 107, 180; }
.schedule-grid tr[class*="worker-team-"] {
  background: linear-gradient(90deg,
    rgba(var(--worker-team-row-rgb), .012) 0%,
    rgba(var(--worker-team-row-rgb), .035) 24%,
    rgba(var(--worker-team-row-rgb), .075) 48%,
    rgba(var(--worker-team-row-rgb), .125) 72%,
    rgba(var(--worker-team-row-rgb), .17) 100%);
}
.schedule-grid tr[class*="worker-team-"] td { background-color: transparent; }
.schedule-grid tr[class*="worker-team-"] td:nth-child(-n+2) { background-color: rgba(255, 255, 255, .965); }
.schedule-grid tr[class*="worker-team-"] .entry-time-cell,
.schedule-grid tr[class*="worker-team-"] .worker-input-cell { background-color: transparent !important; }
.schedule-grid tr[class*="worker-team-"]:hover td:not(.worker-input-cell) { box-shadow: inset 0 1px 0 rgba(var(--worker-team-row-rgb), .18), inset 0 -1px 0 rgba(var(--worker-team-row-rgb), .18); }
.schedule-grid tr.date-group-start td { border-top: 4px solid #dce8e1; }
.schedule-grid tr.date-group-start .site-meta .date { background: #cfeadd; box-shadow: 0 0 0 1px rgba(18, 119, 86, .14); }
.worker-select.worker-team-empty { border-color: #d6a941; background: #fff8e8; color: #5e4a19; box-shadow: inset 3px 0 0 #d6a941; }
.worker-select.worker-team-direct { border-color: #4c8ed7; background: #cfe5ff; color: #153f6b; box-shadow: inset 3px 0 0 #347ac7; }
.worker-select.worker-team-ssdam { border-color: #45a66b; background: #cfeeda; color: #17562f; box-shadow: inset 3px 0 0 #329257; }
.worker-select.worker-team-leebyoungeon { border-color: #d8893b; background: #ffdab5; color: #6b3a10; box-shadow: inset 3px 0 0 #c77628; }
.worker-select.worker-team-outsource { border-color: #8d6bb4; background: #e3d8f3; color: #4e356f; box-shadow: inset 3px 0 0 #7653a1; }
.worker-combobox { width: 100%; min-width: 0; }
.worker-combobox::placeholder { color: #7d8984; font-weight: 650; }
.worker-cell-content { display: grid; gap: 6px; }
.direct-only-hint { color: #65459a; font-size: 9px; font-weight: 900; }
.worker-assignment { position: relative; display: grid; grid-template-columns: minmax(0, 1fr); align-items: center; }
.worker-team-badge { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); pointer-events: none; padding: 2px 5px; border-radius: 999px; font-size: 8px; font-weight: 900; line-height: 1.2; white-space: nowrap; }
.worker-team-badge.worker-team-empty { background: #f4d98b; color: #674f12; }
.worker-team-badge.worker-team-direct { background: #4c8ed7; color: #fff; }
.worker-team-badge.worker-team-ssdam { background: #45a66b; color: #fff; }
.worker-team-badge.worker-team-leebyoungeon { background: #d8893b; color: #fff; }
.worker-team-badge.worker-team-outsource { background: #8d6bb4; color: #fff; }
.worker-combobox[aria-invalid="true"] { border-color: #de756a; background: #fff1ef; color: #9b332a; }
.row-action { border: 1px solid #d8e2dc; background: #f3f7f4; color: var(--green); border-radius: 7px; min-height: 30px; padding: 0 8px; font-size: 10px; font-weight: 750; white-space: nowrap; }
.row-action.alert { color: #875311; background: #fff8ec; border-color: #f1dfbd; }
.row-action.apply { color: white; background: var(--green); border-color: var(--green); }
.row-action.apply:disabled { color: #94a29c; background: #edf1ee; border-color: #e0e6e2; }
.row-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.row-actions .row-action { width: 100%; padding: 0 6px; }
.schedule-grid tr.pending-change td { background: #fffbed; }
.schedule-grid tr.pending-details td { box-shadow: inset 0 0 0 1px #e0be4a; }
.schedule-grid tr.dongbohang-row[class*="worker-team-"] {
  background: linear-gradient(90deg,
    rgba(122, 85, 174, .09) 0%,
    rgba(122, 85, 174, .06) 32%,
    rgba(var(--worker-team-row-rgb), .08) 58%,
    rgba(var(--worker-team-row-rgb), .17) 100%);
}
.schedule-grid tr.dongbohang-row td:nth-child(-n+2) { background-color: rgba(250, 248, 253, .965); }
.schedule-grid tr.dongbohang-row .site-meta .category { color: #573987; background: #ded0f5; }
.link-button { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; }
.availability-list { min-height: 230px; max-height: 310px; overflow: auto; padding: 12px 22px 22px; }
.availability-row { display: grid; grid-template-columns: 74px minmax(0,1fr) 68px 48px; gap: 8px; align-items: center; padding: 9px 0; border-top: 1px solid #edf1ee; font-size: 11px; }
.availability-row b { color: var(--ink); }
.availability-row span { color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.availability-row small { font-weight: 800; }
.availability-row small.mapped { color: var(--green); }
.availability-row small.unmapped { color: var(--red); }
.availability-row em { text-align: right; color: var(--green); font-style: normal; font-weight: 850; }
.availability-row.leave { background: #f6efff; }
.availability-row.leave em { color: #7b4aa1; }
.grid-empty { padding: 32px; }
.audit-table-wrap { overflow-x: auto; padding: 6px 22px 22px; }
.audit-heading { padding-bottom: 12px; }
.audit-actions { display: flex; gap: 8px; }
.audit-filters { display: grid; grid-template-columns: 138px 138px 180px 140px minmax(170px, 1fr); gap: 9px; padding: 0 22px 10px; }
.audit-filters label { display: grid; gap: 5px; color: var(--muted); font-size: 10px; font-weight: 800; }
.audit-filters input, .audit-filters select { min-height: 38px; font-size: 11px; }
.audit-table { border-collapse: collapse; width: 100%; min-width: 870px; font-size: 12px; }
.audit-table th, .audit-table td { padding: 11px; border-bottom: 1px solid #e7ede9; text-align: left; }
.audit-table th { color: var(--muted); font-size: 10px; }
.status-success { color: var(--green); font-weight: 800; }
.status-failed { color: var(--red); font-weight: 800; }
.audit-detail { max-width: 520px; }
.audit-detail summary { color: #30423b; font-weight: 760; cursor: pointer; word-break: break-word; }
.audit-detail summary::marker { color: var(--green); }
.audit-detail pre { max-height: 260px; overflow: auto; margin: 8px 0 0; padding: 10px; border: 1px solid #dfe8e2; border-radius: 8px; color: #31423c; background: #f7faf8; font: 10px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; word-break: break-word; }
.staff-panel .panel-heading p, .audit-heading p, .company-db-heading p { margin: 7px 0 0; color: var(--muted); font-size: 11px; line-height: 1.55; }
.staff-create-form { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(150px, 1fr) 135px minmax(180px, 1.3fr) auto; gap: 9px; align-items: end; padding: 4px 22px 14px; }
.staff-create-form label { min-width: 0; display: grid; gap: 5px; color: var(--muted); font-size: 10px; font-weight: 800; }
.staff-create-form input, .staff-create-form select { width: 100%; min-height: 40px; font-size: 11px; }
.staff-create-form button { min-height: 40px; white-space: nowrap; }
.staff-role-guide { display: flex; flex-wrap: wrap; gap: 7px; margin: 0 22px 12px; }
.staff-role-guide span { padding: 5px 8px; border: 1px solid #dfe8e2; border-radius: 999px; color: #5a6963; background: #f7faf8; font-size: 9px; }
.staff-role-guide b { margin-right: 3px; color: var(--green); }
.staff-table-wrap { overflow: auto; padding: 0 22px 22px; }
.staff-table { width: 100%; min-width: 1050px; border-collapse: collapse; font-size: 11px; }
.staff-table th, .staff-table td { padding: 9px 8px; border-bottom: 1px solid #e7ede9; text-align: left; vertical-align: middle; }
.staff-table th { color: var(--muted); font-size: 9px; }
.staff-table td input, .staff-table td select { width: 100%; min-height: 34px; padding: 0 8px; font-size: 10px; }
.staff-table tr.inactive { opacity: .58; background: #f4f5f4; }
.staff-active-toggle { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; font-weight: 800; }
.staff-active-toggle input { width: 15px !important; min-height: 15px !important; }
.company-db-heading { align-items: flex-start; }
.company-db-actions { display: flex; align-items: center; gap: 8px; }
.company-db-toolbar { display: grid; grid-template-columns: minmax(260px, 460px) auto 1fr; gap: 9px; align-items: end; padding: 0 22px 13px; }
.company-db-toolbar label { display: grid; gap: 5px; color: var(--muted); font-size: 10px; font-weight: 800; }
.company-db-toolbar input { width: 100%; min-height: 40px; font-size: 11px; }
.company-db-toolbar button { min-height: 40px; }
.company-db-toolbar > span { align-self: center; color: var(--muted); font-size: 10px; }
.company-db-table-wrap { max-height: calc(100vh - 285px); overflow: auto; border-top: 1px solid #e2eae5; }
.company-db-table { width: 100%; min-width: 820px; border-collapse: collapse; font-size: 11px; }
.company-db-table th, .company-db-table td { padding: 10px 12px; border-bottom: 1px solid #e7ede9; text-align: left; vertical-align: middle; }
.company-db-table th { position: sticky; top: 0; z-index: 1; color: var(--muted); background: #edf3ef; font-size: 9px; }
.company-db-table td:first-child { color: var(--green); font-weight: 900; }
.company-db-table td:nth-child(2) { color: #172a23; font-weight: 850; }

.facility-db-panel { padding: 0; overflow: hidden; }
.facility-db-heading { padding: 20px 22px 15px; }
.facility-db-heading p { max-width: 760px; margin: 7px 0 0; color: var(--muted); font-size: 11px; line-height: 1.6; }
.facility-db-toolbar { display: grid; grid-template-columns: minmax(260px, 1fr) 130px 140px auto minmax(190px, auto); align-items: end; gap: 9px; padding: 12px 22px; border-top: 1px solid #e3ebe6; background: #f8fbf9; }
.facility-db-toolbar label { display: grid; gap: 5px; color: #51645a; font-size: 9px; font-weight: 850; }
.facility-db-toolbar input, .facility-db-toolbar select { min-height: 38px; }
.facility-db-toolbar > span { align-self: center; color: #718078; font-size: 9px; text-align: right; }
.facility-db-table-wrap { max-height: calc(100vh - 300px); overflow: auto; border-top: 1px solid #e2eae5; }
.facility-db-table { width: 100%; min-width: 980px; border-collapse: collapse; font-size: 10px; }
.facility-db-table th, .facility-db-table td { padding: 10px 12px; border-bottom: 1px solid #e7ede9; text-align: left; vertical-align: middle; }
.facility-db-table th { position: sticky; top: 0; z-index: 1; color: var(--muted); background: #edf3ef; font-size: 9px; }
.facility-db-table tbody tr:hover { background: #f7fbf8; }
.facility-region, .facility-name, .facility-contact { display: grid; gap: 3px; }
.facility-region strong { color: #08744e; }
.facility-region span, .facility-name small, .facility-contact span { color: #78857e; font-size: 9px; }
.facility-name strong, .facility-contact strong { color: #20372d; font-weight: 850; }
.facility-contact strong { max-width: 480px; line-height: 1.45; }
.facility-materials, .map-facility-materials { display: flex; flex-wrap: wrap; gap: 5px; }
.facility-material { display: inline-flex; min-height: 23px; align-items: center; padding: 3px 7px; border: 1px solid transparent; border-radius: 999px; font-size: 9px; font-weight: 900; white-space: nowrap; }
.facility-material.mixed { border-color: #e3be65; background: #fff4cf; color: #775400; }
.facility-material.wood { border-color: #9dceaf; background: #e9f7ee; color: #176e3c; }
.facility-material.rubble { border-color: #a9c4dd; background: #edf5fc; color: #245f91; }
.facility-material.unknown { border-color: #d7dfda; background: #f2f5f3; color: #6f7c75; }
.facility-verification { display: flex; align-items: center; gap: 6px; }
.facility-verification-badge { padding: 4px 7px; border-radius: 999px; font-size: 8px; font-weight: 900; white-space: nowrap; }
.facility-verification-badge.official { background: #ddf4e7; color: #08744e; }
.facility-verification-badge.sheet { background: #eaf1f9; color: #33688f; }
.facility-verification-badge.manual { background: #eee7fb; color: #6845a2; }
.facility-verification-badge.needs-review { background: #fff1d9; color: #8b5b00; }
.facility-evidence-link { color: #08744e; font-size: 8px; font-weight: 850; text-decoration: underline; }
.facility-edit-button { min-height: 26px; padding: 3px 8px; border: 1px solid #cfdcd5; border-radius: 7px; background: #fff; color: #52635b; font-size: 8px; font-weight: 900; }
.facility-edit-button:hover { border-color: #7652ad; color: #6845a2; }
.facility-db-note { margin: 0; padding: 10px 22px 14px; color: #7b6850; background: #fffaf0; font-size: 9px; }
.facility-edit-card { width: min(620px, calc(100vw - 28px)); }
.facility-edit-form { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; padding: 18px 20px 20px; }
.facility-edit-form > label { display: grid; gap: 5px; color: #40564c; font-size: 10px; font-weight: 850; }
.facility-edit-form > label.full { grid-column: 1 / -1; }
.facility-edit-form input[type="text"], .facility-edit-form input:not([type]) { min-height: 40px; }
.facility-edit-materials { display: flex; grid-column: 1 / -1; align-items: center; gap: 10px; margin: 0; padding: 10px 12px; border: 1px solid #d9e4de; border-radius: 10px; }
.facility-edit-materials legend { padding: 0 5px; color: #40564c; font-size: 10px; font-weight: 900; }
.facility-edit-materials label { display: inline-flex; align-items: center; gap: 5px; padding: 5px 9px; border-radius: 999px; background: #f2f7f4; font-size: 10px; font-weight: 850; }
.facility-edit-materials input { width: 15px; height: 15px; accent-color: #0f7a58; }
.facility-edit-form > p { grid-column: 1 / -1; margin: 0; color: #786c59; font-size: 9px; }
.facility-edit-form > footer { display: flex; grid-column: 1 / -1; justify-content: flex-end; gap: 8px; }
.table-action { min-height: 32px; padding: 0 10px; border: 1px solid #d9e4dd; border-radius: 7px; color: var(--green); background: #f4f8f5; font-size: 10px; font-weight: 850; }
.table-action.confirm { color: white; border-color: var(--green); background: var(--green); }
.read-only-session .batch-save-button { display: none; }
.read-only-session .schedule-grid tr { cursor: default; }

.reception-list-card .panel-heading p { margin: 7px 0 0; color: var(--muted); font-size: 11px; line-height: 1.55; }
.reception-table-wrap { max-height: calc(100vh - 265px); overflow: auto; border-top: 1px solid #e2eae5; }
.reception-table { width: 100%; min-width: 1180px; border-collapse: separate; border-spacing: 0; table-layout: fixed; font-size: 11px; }
.reception-table th, .reception-table td { padding: 10px 9px; border-bottom: 1px solid #e5ece8; text-align: left; vertical-align: middle; }
.reception-table th { position: sticky; top: 0; z-index: 2; color: #596961; background: #edf3ef; font-size: 9px; letter-spacing: .02em; }
.reception-table th:nth-child(1) { width: 92px; }
.reception-table th:nth-child(2) { width: 145px; }
.reception-table th:nth-child(3) { width: 25%; }
.reception-table th:nth-child(4) { width: 21%; }
.reception-table th:nth-child(5) { width: 17%; }
.reception-table th:nth-child(6) { width: 110px; }
.reception-table th:nth-child(7) { width: 82px; }
.reception-table th:nth-child(8) { width: 190px; }
.reception-row.status-failed { background: #fff8f6; }
.reception-row.status-confirming { background: #fffbea; }
.reception-row.status-confirmed { background: #f5fbf7; }
.reception-row.status-cancelled { color: #83908a; background: #f3f5f4; }
.reception-status-stack, .reception-schedule, .reception-address, .reception-work, .reception-contact, .reception-actor { display: grid; gap: 4px; min-width: 0; }
.reception-status { justify-self: start; padding: 4px 7px; border-radius: 999px; font-size: 9px; font-weight: 900; white-space: nowrap; }
.reception-status.draft { color: #755716; background: #fff0bd; }
.reception-status.confirming { color: #795701; background: #ffe58d; }
.reception-status.confirmed { color: #086447; background: #d7efe5; }
.reception-status.failed { color: #a33c31; background: #fde0dc; }
.reception-status.cancelled { color: #66736d; background: #e2e8e4; }
.reception-blocked-label { color: #b53e33; font-weight: 900; }
.reception-warning-label { color: #9b6a05; font-weight: 850; }
.reception-schedule strong, .reception-address strong, .reception-contact strong { color: #172a23; overflow: hidden; text-overflow: ellipsis; }
.reception-schedule small, .reception-address small, .reception-contact span, .reception-actor small { color: var(--muted); }
.reception-time { justify-self: start; padding: 3px 6px; border: 1px solid #c8ded2; border-radius: 6px; color: #176f53; background: #f4faf7; font-weight: 850; }
.reception-time.morning { color: #145f8a; border-color: #9fd5f2; background: #e4f5ff; }
.reception-time.late { color: #9a5519; border-color: #edc49d; background: #fff0e0; }
.reception-work .reception-amount { justify-self: start; padding: 4px 8px; border-left: 3px solid #c78d13; border-radius: 5px; color: #704d06; background: #fff3cd; font-size: 12px; font-weight: 950; }
.reception-work .reception-amount.missing { color: #9d3f35; border-color: #d9685d; background: #fff0ee; }
.reception-warnings summary { color: #9a6500; font-size: 9px; font-weight: 850; cursor: pointer; }
.reception-warnings p { margin: 5px 0 0; color: #7e6130; font-size: 9px; line-height: 1.55; white-space: pre-line; }
.reception-sid { color: #87928d; font-weight: 800; }
.reception-sid.linked { color: var(--green); }
.reception-row-actions { display: flex; flex-wrap: wrap; gap: 5px; }
.table-action.danger { color: #9a3b32; border-color: #edd0cc; background: #fff5f3; }
.table-action:disabled { color: #9ca7a2; border-color: #e0e5e2; background: #f0f2f1; }
.reception-modal { position: fixed; inset: 0; z-index: 210; display: grid; place-items: center; padding: 18px; background: rgba(9, 30, 23, .58); backdrop-filter: blur(5px); }
.reception-modal.hidden { display: none; }
.reception-editor-card, .reception-confirm-card, .reception-result-card { width: min(1240px, calc(100vw - 36px)); max-height: calc(100vh - 36px); overflow: hidden; border: 1px solid #d3e0d8; border-radius: 17px; background: #fff; box-shadow: 0 30px 90px rgba(5, 30, 21, .30); }
.reception-confirm-card { width: min(620px, calc(100vw - 36px)); overflow: auto; }
.reception-result-card { width: min(520px, calc(100vw - 36px)); }
.reception-result-card.success { border-top: 6px solid #0c7b5a; }
.reception-result-card.failed { border-top: 6px solid #d94b40; }
.reception-result-body { display: grid; gap: 12px; padding: 28px 24px 30px; }
.reception-result-body strong { color: #10231c; font-size: 21px; line-height: 1.4; }
.reception-result-card.failed .reception-result-body strong { color: #b13229; }
.reception-result-body p { margin: 0; color: #52665d; font-size: 14px; line-height: 1.7; white-space: pre-line; }
.reception-modal-header { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 17px 20px; border-bottom: 1px solid #e3eae6; background: #f7faf8; }
.reception-modal-header h2 { margin: 4px 0 0; font-size: 20px; }
.reception-editor-layout { display: grid; grid-template-columns: minmax(330px, .72fr) minmax(580px, 1.28fr); max-height: calc(100vh - 110px); overflow: auto; }
.reception-source-pane, .reception-fields-pane { min-width: 0; padding: 18px 20px; }
.reception-source-pane { border-right: 1px solid #e0e9e3; background: #f6faf7; }
.reception-pane-heading { display: grid; gap: 3px; margin-bottom: 10px; }
.reception-pane-heading strong { color: #16372b; font-size: 13px; }
.reception-pane-heading small { color: var(--muted); font-size: 9px; }
.reception-source-pane textarea { width: 100%; min-height: 310px; resize: vertical; padding: 12px; border: 1px solid #cfdcd5; border-radius: 10px; background: #fff; font: 11px/1.62 ui-monospace, SFMono-Regular, Consolas, monospace; }
.analysis-button { width: 100%; min-height: 40px; margin-top: 9px; border: 1px solid #0f7654; border-radius: 9px; color: #fff; background: #0f7654; font-size: 11px; font-weight: 900; }
.reception-parse-summary { display: grid; gap: 7px; margin-top: 10px; padding: 10px; border: 1px solid #dce7e1; border-radius: 9px; background: #fff; font-size: 10px; }
.reception-parse-summary.empty { color: var(--muted); }
.reception-parse-summary.ready { border-color: #bcdccb; background: #f0faf5; color: #126548; }
.reception-parse-summary.warning { border-color: #ebd69b; background: #fffaf0; color: #855e06; }
.reception-parse-summary.blocked { border-color: #efc5c0; background: #fff4f2; color: #a43d33; }
.reception-parse-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.reception-parse-chips span { padding: 3px 6px; border-radius: 999px; color: #5d6d66; background: #edf2ef; font-size: 8px; font-weight: 850; }
.reception-parse-chips .block { color: #a23a31; background: #fbded9; }
.reception-parse-chips .warning { color: #8b6006; background: #ffedbd; }
.reception-parse-chips .flag { color: #5a3c83; background: #e9def7; }
.reception-parse-chips .ready { color: #116d4d; background: #d7eee4; }
.reception-form-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.reception-form-grid label { min-width: 0; display: grid; gap: 5px; color: #56665f; font-size: 9px; font-weight: 850; }
.reception-form-grid label.full { grid-column: 1 / -1; }
.reception-form-grid input, .reception-form-grid select, .reception-form-grid textarea { width: 100%; min-height: 38px; padding: 8px 9px; border: 1px solid #cedbd4; border-radius: 8px; color: #172820; background: #fff; font: inherit; font-size: 11px; }
.reception-form-grid textarea { resize: vertical; line-height: 1.45; }
.reception-form-grid .important-field input, .reception-form-grid .important-field textarea { border-color: #d5a62f; box-shadow: inset 3px 0 0 #d5a62f; background: #fffaf0; font-weight: 800; }
.reception-modal-actions { grid-column: 1 / -1; display: flex; align-items: center; justify-content: flex-end; gap: 8px; min-height: 63px; padding: 11px 20px; border-top: 1px solid #e3eae6; background: #fbfcfb; }
.reception-modal-actions > span { margin-right: auto; max-width: 60%; color: #a33e34; font-size: 10px; }
.reception-confirm-summary { display: grid; gap: 0; padding: 16px 20px; }
.reception-confirm-summary > div { display: grid; grid-template-columns: 90px 1fr; gap: 12px; padding: 9px 0; border-bottom: 1px solid #edf1ee; }
.reception-confirm-summary span { color: var(--muted); font-size: 10px; font-weight: 800; }
.reception-confirm-summary strong { color: #1b3028; font-size: 12px; line-height: 1.45; }
.reception-preflight-card { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin: 0 20px 12px; padding: 13px; border: 1px solid #c8dcd1; border-radius: 11px; background: #f1f8f4; }
.reception-preflight-card > div { display: grid; gap: 4px; }
.reception-preflight-card strong { color: #123e2f; font-size: 12px; }
.reception-preflight-card small { color: var(--muted); font-size: 9px; line-height: 1.45; }
.reception-preflight-card button { flex: none; min-height: 38px; }
.reception-preflight-result { display: grid; gap: 0; margin: 0 20px 13px; overflow: hidden; border: 1px solid #d8e4dd; border-radius: 10px; background: #fff; }
.reception-preflight-result.empty { padding: 13px; color: var(--muted); font-size: 10px; }
.reception-preflight-result.ready { border-color: #8fc9ae; box-shadow: inset 4px 0 0 #1f936a; }
.reception-preflight-result.warning { border-color: #ebc36b; box-shadow: inset 4px 0 0 #dda324; }
.reception-preflight-result.blocked { border-color: #e7aaa3; box-shadow: inset 4px 0 0 #cf5548; }
.reception-preflight-line { display: grid; grid-template-columns: 138px minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 8px 12px; border-bottom: 1px solid #edf1ee; }
.reception-preflight-line:last-child { border-bottom: 0; }
.reception-preflight-line > span { color: var(--muted); font-size: 9px; font-weight: 850; }
.reception-preflight-line > strong { min-width: 0; color: #1b3028; font-size: 11px; word-break: break-word; }
.reception-preflight-line > em { padding: 3px 6px; border-radius: 999px; color: #176d50; background: #dcf0e6; font-size: 8px; font-style: normal; font-weight: 900; }
.reception-preflight-line > em.warning { color: #8d5b03; background: #ffedbd; }
.reception-preflight-line > em.blocked { color: #a43d33; background: #fbded9; }
.reception-review-check { display: flex; align-items: flex-start; gap: 10px; margin: 0 20px 13px; padding: 13px; border: 1px solid #d6e3dc; border-radius: 10px; background: #f4f9f6; cursor: pointer; }
.reception-review-check.warning { border-color: #e8c56e; background: #fff8e7; }
.reception-review-check input { flex: none; margin-top: 2px; }
.reception-review-check span { display: grid; gap: 3px; }
.reception-review-check strong { font-size: 11px; }
.reception-review-check small { color: var(--muted); font-size: 9px; }
.reception-confirm-error { margin: 0 20px; }
.read-only-session #newReceptionButton { display: none; }

body.density-comfortable .schedule-grid { font-size: 12px; }
body.density-comfortable .schedule-grid th { height: 42px; font-size: 11px; }
body.density-comfortable .schedule-grid td { padding-block: 10px; }
body.density-comfortable .entry-time-input,
body.density-comfortable .job-contact,
body.density-comfortable .job-content-trigger,
body.density-comfortable .row-action { font-size: 12px; min-height: 36px; }
body.density-comfortable .entry-time-input { min-height: 40px; font-size: 13px; }
body.density-comfortable .site-meta span,
body.density-comfortable .job-waste-type,
body.density-comfortable .direct-only-hint { font-size: 11px; }
body.density-comfortable .job-waste-amount { font-size: 13px; }
body.density-comfortable .site-address { font-size: 14px; }

.progress-overlay { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; background: rgba(12,25,21,.52); backdrop-filter: blur(4px); }
.progress-card { width: min(420px, calc(100vw - 40px)); background: white; border-radius: 16px; padding: 28px; box-shadow: 0 30px 80px rgba(0,0,0,.25); display: grid; gap: 10px; text-align: center; }
.progress-card span { color: var(--muted); font-size: 12px; }
.spinner { width: 34px; height: 34px; margin: 0 auto 5px; border-radius: 50%; border: 3px solid #e3eae5; border-top-color: var(--green); animation: spin .8s linear infinite; }
.progress-track { height: 7px; background: #edf1ee; border-radius: 9px; overflow: hidden; margin-top: 10px; }
.progress-track i { display: block; height: 100%; width: 12%; background: var(--green-2); transition: width .25s; }
@keyframes spin { to { transform: rotate(360deg); } }
.toast-region { position: fixed; right: 22px; bottom: 22px; z-index: 80; display: grid; gap: 8px; }
.toast { width: min(390px, calc(100vw - 44px)); background: var(--nav); color: white; border-radius: 10px; padding: 13px 16px; box-shadow: 0 14px 42px rgba(0,0,0,.22); font-size: 12px; animation: toast-in .2s ease-out; }
.toast.error { border-left: 4px solid #f26b61; }
.toast.success { border-left: 4px solid var(--lime); }
@keyframes toast-in { from { opacity: 0; transform: translateY(8px); } }

@media (min-width: 851px) and (max-width: 1600px) {
  .workspace { padding: 18px 18px 42px; }
  .topbar { margin-bottom: 18px; }
  .topbar h1 { font-size: 28px; }
  .toolbar { gap: 8px; margin-bottom: 12px; }
  .toolbar input[type=search] { width: min(300px, 24vw); }
  .grid-meta { min-height: 42px; }
  .schedule-grid-scroll { max-height: calc(100vh - 220px); }
  .schedule-grid { min-width: 1066px; }
  .schedule-grid th:nth-child(1), .schedule-grid td:nth-child(1) { width: 34px; }
  .schedule-grid th:nth-child(2), .schedule-grid td:nth-child(2) { width: 42px; left: 34px; }
  .schedule-grid th:nth-child(3), .schedule-grid td:nth-child(3) { width: 112px; }
  .schedule-grid th:nth-child(4), .schedule-grid td:nth-child(4) { width: 290px; }
  .schedule-grid th:nth-child(5), .schedule-grid td:nth-child(5) { width: 310px; }
  .schedule-grid th:nth-child(6), .schedule-grid td:nth-child(6) { width: 160px; }
  .schedule-grid th:nth-child(7), .schedule-grid td:nth-child(7) { width: 118px; }
}

@media (max-width: 1180px) {
  .stat-grid { grid-template-columns: repeat(2, 1fr); }
  .dashboard-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .weekly-summary { grid-template-columns: repeat(3, minmax(100px, 1fr)); }
  .audit-filters { grid-template-columns: repeat(3, minmax(140px, 1fr)); }
  .staff-create-form { grid-template-columns: repeat(2, minmax(150px, 1fr)); }
  .staff-create-form .staff-note-input { grid-column: 1 / -1; }
  .staff-create-form button { justify-self: start; }
  .reception-editor-layout { grid-template-columns: 1fr; }
  .reception-source-pane { border-right: 0; border-bottom: 1px solid #e0e9e3; }
  .reception-source-pane textarea { min-height: 210px; }
}
@media (max-width: 850px) {
  .login-screen { grid-template-columns: 1fr; }
  .login-art { display: none; }
  .app-shell, .app-shell.sidebar-pinned { grid-template-columns: 1fr; }
  .sidebar, .app-shell.sidebar-expanded .sidebar { position: static; width: 100%; height: auto; padding: 14px; overflow: visible; }
  .sidebar-brand { justify-content: flex-start; gap: 12px; padding: 0 10px 14px; }
  .sidebar-brand-copy, .sidebar-label, .sidebar-note-copy { max-width: 160px; opacity: 1; transform: none; }
  .sidebar-pin { display: none; }
  .sidebar nav { display: flex; overflow-x: auto; }
  .nav-item, .app-shell.sidebar-expanded .nav-item { justify-content: flex-start; gap: 10px; padding: 11px 14px; }
  .sidebar-note, .logout-button { display: none; }
  .workspace { padding: 22px 16px 50px; }
  .topbar { align-items: stretch; flex-direction: column; }
  .topbar-actions { align-items: stretch; }
  .topbar-actions > * { flex: 1; }
  .dashboard-grid { grid-template-columns: 1fr; }
  .daily-trend-panel { grid-column: auto; }
  .toolbar { align-items: stretch; flex-direction: column; }
  .toolbar-group, .toolbar-group.end { margin: 0; flex-wrap: wrap; }
  .toolbar input[type=search] { width: 240px; }
  .preview-search-input { width: 240px; }
  .preview-row { grid-template-columns: 84px 72px minmax(0, 1.4fr) 76px minmax(0, 1fr) 72px; gap: 8px; }
  .preview-company { display: none; }
  .audit-filters { grid-template-columns: 1fr 1fr; }
  .reception-form-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 540px) {
  .stat-grid { grid-template-columns: 1fr 1fr; gap: 8px; }
  .stat-card { padding: 15px; }
  .stat-card strong { font-size: 28px; }
  .dashboard-table-panel .panel-heading { align-items: stretch; flex-direction: column; }
  .preview-heading-tools { width: 100%; }
  .preview-search-input { width: 100%; }
  .preview-row { grid-template-columns: 70px 62px minmax(0, 1fr) 70px; }
  .preview-content { grid-column: 3 / -1; }
  .preview-row .preview-company, .preview-row .preview-worker { display: none; }
  .staff-create-form { grid-template-columns: 1fr; }
  .staff-create-form .staff-note-input { grid-column: auto; }
  .company-db-heading { align-items: stretch; flex-direction: column; }
  .company-db-actions { justify-content: space-between; }
  .company-db-toolbar { grid-template-columns: 1fr; }
  .readonly-banner { align-items: flex-start; flex-direction: column; gap: 6px; }
  .reception-modal { padding: 0; }
  .reception-editor-card, .reception-confirm-card, .reception-result-card { width: 100vw; max-height: 100vh; border-radius: 0; }
  .reception-editor-layout { max-height: calc(100vh - 68px); }
  .reception-form-grid { grid-template-columns: 1fr; }
  .reception-form-grid label.full { grid-column: auto; }
}
.company-match-hint {
  display: block;
  min-height: 1.2em;
  margin-top: 4px;
  color: #735b00;
  font-size: 11px;
  font-weight: 700;
}

/* 지도 배차: GPS가 아닌 일정·도로시간 기반 가상 현황도 */
.map-dispatch-view { min-height: calc(100vh - 132px); }
.map-command-bar { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-bottom: 10px; }
.map-command-bar > div:first-child { display: grid; gap: 4px; }
.map-command-bar strong { font-size: 16px; }
.map-command-bar small { color: var(--muted); font-size: 11px; }
.map-command-actions { display: flex; align-items: flex-end; gap: 8px; }
.map-command-actions label { display: grid; gap: 5px; min-width: 220px; color: var(--muted); font-size: 10px; font-weight: 800; }
.map-command-actions input { min-height: 38px; }
.map-filter-bar { display: flex; min-height: 48px; align-items: center; gap: 14px; margin: 0 0 8px; padding: 7px 10px; overflow-x: auto; }
.map-filter-section { display: flex; flex: 0 0 auto; align-items: center; gap: 7px; }
.map-filter-section.workers { min-width: 0; flex: 1 1 auto; }
.map-filter-label { flex: 0 0 auto; color: #607168; font-size: 9px; font-weight: 900; letter-spacing: .03em; }
.map-filter-chips { display: flex; min-width: 0; align-items: center; gap: 5px; overflow-x: auto; scrollbar-width: none; }
.map-filter-chips::-webkit-scrollbar { display: none; }
.map-filter-chips button { --filter-color: #0f7a58; display: inline-flex; min-height: 29px; flex: 0 0 auto; align-items: center; gap: 5px; padding: 4px 9px; border: 1px solid #d5e1da; border-radius: 999px; background: #fff; color: #3f5349; font-size: 10px; font-weight: 850; }
.map-filter-chips button:hover, .map-filter-chips button:focus-visible { border-color: var(--filter-color); outline: 0; color: var(--filter-color); }
.map-filter-chips button.active { border-color: var(--filter-color); background: color-mix(in srgb, var(--filter-color) 13%, white); color: var(--filter-color); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--filter-color) 34%, transparent); }
.map-filter-chips small { display: grid; min-width: 18px; height: 18px; padding: 0 4px; place-items: center; border-radius: 999px; background: color-mix(in srgb, currentColor 10%, white); color: inherit; font-size: 8px; font-weight: 900; }
.map-filter-select { display: flex; flex: 0 0 auto; align-items: center; gap: 6px; }
.map-filter-select select { min-height: 30px; min-width: 92px; padding: 4px 27px 4px 9px; border-color: #d5e1da; border-radius: 8px; background-color: #fff; font-size: 10px; font-weight: 800; }
.map-route-toggle { display: inline-flex; min-height: 30px; align-items: center; gap: 6px; padding: 4px 9px; border: 1px solid #d5e1da; border-radius: 8px; background: #fff; color: #41554b; font-size: 10px; font-weight: 850; white-space: nowrap; }
.map-route-toggle input { width: 14px; height: 14px; accent-color: #0f7a58; }
.map-visible-count { flex: 0 0 auto; padding: 5px 8px; border-radius: 999px; background: #eaf5ef; color: #08744e; font-size: 9px; font-weight: 900; white-space: nowrap; }
.map-risk-summary { display: flex; min-height: 32px; align-items: center; gap: 6px; margin: 0 0 10px; overflow-x: auto; }
.map-risk { display: inline-flex; flex: 0 0 auto; min-height: 25px; align-items: center; padding: 4px 9px; border: 1px solid #dbe8e1; border-radius: 999px; background: #f7faf8; color: #52635b; font-size: 10px; font-weight: 850; }
.map-risk.success { border-color: #bde4d2; background: #eaf8f1; color: #08744e; }
.map-risk.info { border-color: #bad8ee; background: #edf7fd; color: #176a9e; }
.map-risk.warning { border-color: #f0d28d; background: #fff7df; color: #8a5c00; }
.map-risk.danger { border-color: #f0b8ae; background: #fff0ed; color: #b63b2c; }
.map-ops-layout { display: grid; grid-template-columns: minmax(205px, .72fr) minmax(540px, 2.6fr) minmax(235px, .9fr); gap: 10px; height: calc(100vh - 298px); min-height: 470px; }
.map-queue, .map-routes, .map-canvas-card { min-width: 0; min-height: 0; overflow: hidden; padding: 0; }
.map-queue > header, .map-routes > header { display: flex; align-items: center; justify-content: space-between; padding: 15px 14px 11px; border-bottom: 1px solid #e4ebe7; }
.map-queue h2, .map-routes h2 { margin: 3px 0 0; font-size: 15px; }
.map-queue-list, .map-worker-routes { height: calc(100% - 69px); overflow-y: auto; }
.map-queue-list.empty-state, .map-worker-routes.empty-state { display: grid; place-items: center; padding: 22px; color: var(--muted); font-size: 11px; text-align: center; }
.map-queue-item { display: grid; width: 100%; gap: 4px; padding: 11px 12px; border: 0; border-bottom: 1px solid #e9efeb; background: white; color: inherit; text-align: left; }
.map-queue-item:hover, .map-queue-item:focus-visible { outline: 0; background: #fff9e9; box-shadow: inset 4px 0 #dea82e; }
.map-queue-item .map-time { width: fit-content; padding: 3px 7px; border-radius: 6px; background: #e9f7f1; color: #08744e; font-size: 10px; font-weight: 900; }
.map-queue-item strong { overflow: hidden; font-size: 11px; line-height: 1.45; text-overflow: ellipsis; }
.map-queue-item small { overflow: hidden; color: #69776f; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.map-queue-item small b { color: #7b5b02; }
.map-queue-item em { color: #9b7121; font-size: 9px; font-style: normal; font-weight: 800; }
.map-canvas-card { position: relative; }
.map-canvas { width: 100%; height: 100%; background: #edf3ef; }
.map-fullscreen-filters { display: none; }
.map-view-controls { position: absolute; z-index: 27; top: 10px; right: 10px; display: flex; align-items: center; gap: 5px; padding: 4px; border: 1px solid rgba(207,220,213,.9); border-radius: 10px; background: rgba(255,255,255,.94); box-shadow: 0 7px 18px rgba(16,41,31,.1); backdrop-filter: blur(7px); }
.map-view-controls button { display: grid; min-width: 32px; height: 32px; padding: 0 8px; place-items: center; border: 1px solid #d5e1da; border-radius: 7px; background: #fff; color: #17392d; font-size: 16px; font-weight: 900; }
.map-view-controls button:hover, .map-view-controls button:focus-visible { border-color: #0f7a58; background: #eaf7f1; color: #08744e; }
.map-view-controls .map-fullscreen-button { min-width: 68px; font-size: 9px; }
.map-canvas-card:fullscreen { width: 100vw; height: 100vh; border: 0; border-radius: 0; background: #edf3ef; }
.map-canvas-card:fullscreen .map-canvas { height: 100%; }
.map-canvas-card:fullscreen .map-legend { bottom: 14px; }
.map-canvas-card:fullscreen .map-fullscreen-filters { position: absolute; z-index: 31; top: 12px; left: 12px; display: flex; max-width: calc(100% - 180px); align-items: center; gap: 6px; padding: 6px; overflow-x: auto; border: 1px solid rgba(205,219,211,.92); border-radius: 11px; background: rgba(255,255,255,.95); box-shadow: 0 8px 24px rgba(16,41,31,.13); backdrop-filter: blur(8px); }
.map-canvas-card:fullscreen .map-fullscreen-filters .map-filter-chips { flex: 0 1 auto; }
.map-canvas-card:fullscreen .map-fullscreen-filters input[type="search"] { min-height: 29px; width: 142px; flex: 0 0 142px; padding: 4px 8px; border-color: #d5e1da; border-radius: 8px; background: #fff; font-size: 9px; }
.map-canvas-card:fullscreen .map-fullscreen-filters select { min-height: 29px; min-width: 94px; padding: 4px 26px 4px 8px; border-color: #d5e1da; border-radius: 8px; background-color: #fff; font-size: 9px; font-weight: 800; }
.map-canvas-card:fullscreen .map-fallback-note { top: 58px; }
.map-fallback-note { position: absolute; z-index: 23; top: 10px; left: 10px; display: flex; align-items: center; gap: 7px; max-width: calc(100% - 190px); padding: 6px 9px; border: 1px solid rgba(168,207,231,.9); border-radius: 8px; background: rgba(242,250,255,.94); color: #386377; box-shadow: 0 7px 18px rgba(16,41,31,.08); backdrop-filter: blur(7px); }
.map-fallback-note strong { flex: 0 0 auto; color: #176a9e; font-size: 10px; }
.map-fallback-note span { overflow: hidden; font-size: 9px; font-weight: 750; text-overflow: ellipsis; white-space: nowrap; }
.map-fallback-svg { display: block; width: 100%; height: 100%; cursor: grab; touch-action: none; user-select: none; }
.map-fallback-svg.is-panning { cursor: grabbing; }
.map-fallback-route { fill: none; stroke: var(--route-color); stroke-width: calc(5px * var(--map-line-scale, 1)); stroke-linecap: round; stroke-linejoin: round; opacity: .68; stroke-dasharray: 11 7; vector-effect: non-scaling-stroke; animation: map-route-flow 1.4s linear infinite; }
.map-fallback-site { cursor: pointer; outline: none; }
.map-fallback-site-visual { transform: scale(var(--map-marker-scale, 1)); transform-origin: 0 0; }
.map-fallback-label-visual { transform: scale(var(--map-label-scale, 1)); transform-origin: 0 0; }
.map-fallback-avatar-visual { transform: scale(var(--map-avatar-scale, 1)); transform-origin: 0 0; }
.map-fallback-site circle { fill: var(--site-color); stroke: rgba(255,255,255,.98); stroke-width: 3.5; vector-effect: non-scaling-stroke; filter: drop-shadow(0 3px 4px rgba(16,41,31,.28)); }
.map-fallback-site:hover circle, .map-fallback-site:focus-visible circle { stroke: #e4fff4; stroke-width: 5; }
.map-fallback-number { fill: #fff; font-size: 11.5px; font-weight: 950; paint-order: stroke; stroke: rgba(16,41,31,.44); stroke-width: .9px; stroke-linejoin: round; pointer-events: none; }
.map-fallback-label { fill: #10291f; font-size: 11px; font-weight: 900; paint-order: stroke; stroke: rgba(255,255,255,.98); stroke-width: 4px; stroke-linejoin: round; pointer-events: none; transition: opacity .14s ease; }
.map-fallback-worker { fill: #52635b; font-size: 9px; font-weight: 800; paint-order: stroke; stroke: rgba(255,255,255,.98); stroke-width: 3px; pointer-events: none; transition: opacity .14s ease; }
.map-fallback-svg[data-label-mode="compact"] .map-fallback-label,
.map-fallback-svg[data-label-mode="compact"] .map-fallback-worker { opacity: 0; }
.map-fallback-svg[data-label-mode="compact"] .map-fallback-site:hover .map-fallback-label,
.map-fallback-svg[data-label-mode="compact"] .map-fallback-site:focus-visible .map-fallback-label { opacity: 1; }
.map-fallback-svg[data-label-mode="key"] .map-fallback-worker { opacity: 0; }
.map-fallback-avatar { pointer-events: none; animation: map-worker-float 1.8s ease-in-out infinite; }
.map-fallback-avatar-visual > circle { fill: #fff; stroke: var(--worker-color); stroke-width: 4; vector-effect: non-scaling-stroke; filter: drop-shadow(0 4px 5px rgba(16,41,31,.2)); }
.map-fallback-avatar-visual > text:first-of-type { fill: var(--worker-color); font-size: 12px; }
.map-fallback-avatar-visual rect { fill: var(--worker-color); }
.map-fallback-avatar-name { fill: #fff; font-size: 8px; font-weight: 900; }
.map-fallback-empty { display: grid; height: 100%; place-content: center; gap: 7px; color: #68766e; text-align: center; }
.map-fallback-empty strong { color: #10291f; font-size: 16px; }
.map-fallback-empty span { font-size: 11px; }
@keyframes map-route-flow { to { stroke-dashoffset: -42; } }
.map-loading-state { position: absolute; inset: 0; z-index: 30; display: grid; place-content: center; gap: 8px; background: linear-gradient(145deg, rgba(239,245,241,.96), rgba(255,255,255,.94)); color: #52635b; text-align: center; }
.map-loading-state strong { color: #10291f; font-size: 17px; }
.map-loading-state span { font-size: 11px; }
.map-legend { position: absolute; z-index: 24; left: 12px; bottom: 12px; display: flex; gap: 9px; padding: 7px 9px; border: 1px solid rgba(205,219,211,.9); border-radius: 9px; background: rgba(255,255,255,.92); box-shadow: 0 8px 20px rgba(16,41,31,.1); backdrop-filter: blur(8px); }
.map-legend span { display: inline-flex; align-items: center; gap: 4px; color: #52635b; font-size: 9px; font-weight: 800; }
.map-legend i { width: 8px; height: 8px; border-radius: 50%; background: #d19a22; }
.map-legend .marker-next { background: #3487d4; }
.map-legend .marker-active { background: #28a36e; box-shadow: 0 0 0 3px rgba(40,163,110,.2); }
.map-legend .marker-facility { border-radius: 3px; background: #0f7a58; box-shadow: inset 0 0 0 2px #dff5eb; }
.map-legend .route-line-legend { width: 16px; height: 4px; border-radius: 2px; background: #7652ad; }
.map-quota-status { position: absolute; z-index: 24; top: 10px; right: 10px; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 4px; max-width: 70%; }
.map-quota-status span { padding: 4px 7px; border: 1px solid rgba(205,219,211,.88); border-radius: 7px; background: rgba(255,255,255,.92); color: #52635b; font-size: 9px; font-weight: 800; backdrop-filter: blur(7px); }
.map-site-marker { position: relative; display: grid; min-width: 74px; grid-template-columns: 20px auto; align-items: center; gap: 2px 5px; padding: 5px 7px 6px; border: 2px solid var(--marker-color); border-radius: 9px; background: rgba(255,255,255,.97); color: #10291f; box-shadow: 0 5px 13px rgba(16,41,31,.2); text-align: left; transform: scale(var(--native-marker-scale, 1)); transform-origin: 50% 100%; }
.map-site-marker::after { content: ""; position: absolute; left: 50%; bottom: -7px; width: 10px; height: 10px; border-right: 2px solid var(--marker-color); border-bottom: 2px solid var(--marker-color); background: white; transform: translateX(-50%) rotate(45deg); }
.map-site-marker:hover, .map-site-marker:focus-visible { z-index: 30; outline: 0; transform: translateY(-3px) scale(var(--native-marker-scale, 1)); }
.map-site-marker.unassigned { --marker-color: #d19a22 !important; background: #fff9e8; }
.map-site-marker.active { box-shadow: 0 0 0 5px rgba(40,163,110,.18), 0 5px 15px rgba(16,41,31,.2); }
.map-site-marker.completed { opacity: .62; filter: saturate(.55); }
.map-site-marker .map-site-number { display: grid; width: 20px; height: 20px; grid-row: 1 / 3; place-items: center; border-radius: 50%; background: var(--marker-color); color: #fff; font-size: 9px; font-weight: 950; }
.map-site-marker .map-site-key { display: flex; min-width: 0; align-items: baseline; gap: 4px; white-space: nowrap; transform: scale(var(--native-label-scale, 1)); transform-origin: 0 50%; }
.map-site-marker .map-site-key b { color: #193d30; font-size: 9px; }
.map-site-marker .map-site-key strong { font-size: 10px; }
.map-site-marker .map-site-worker { grid-column: 2; color: #6a776f; font-size: 8px; font-weight: 800; transform: scale(var(--native-label-scale, 1)); transform-origin: 0 50%; }
.map-site-marker.label-compact { min-width: 30px; grid-template-columns: 1fr; padding: 4px; border-width: 0; border-radius: 50%; box-shadow: 0 4px 11px rgba(16,41,31,.22); }
.map-site-marker.label-compact::after { display: none; }
.map-site-marker.label-compact .map-site-number { width: 24px; height: 24px; grid-row: auto; }
.map-site-marker.label-compact .map-site-key,
.map-site-marker.label-compact .map-site-worker { display: none; }
.map-site-marker.label-key .map-site-worker { display: none; }
.map-facility-marker { display: grid; width: 25px; height: 25px; place-items: center; border: 2px solid #fff; border-radius: 7px; background: #0f7a58; color: #fff; box-shadow: 0 4px 11px rgba(16,41,31,.25); transform: scale(var(--native-facility-scale, 1)); transform-origin: 50% 50%; }
.map-facility-marker span { font-size: 13px; line-height: 1; }
.map-facility-marker strong { position: absolute; left: 29px; display: none; max-width: 150px; padding: 4px 6px; border: 1px solid #cfe0d7; border-radius: 6px; background: rgba(255,255,255,.96); color: #15392b; font-size: 9px; white-space: nowrap; box-shadow: 0 4px 11px rgba(16,41,31,.15); }
.map-facility-marker:hover, .map-facility-marker:focus-visible { z-index: 35; outline: 3px solid rgba(15,122,88,.22); }
.map-facility-marker:hover strong, .map-facility-marker:focus-visible strong { display: block; }
.map-fallback-facility { cursor: pointer; outline: none; }
.map-fallback-facility circle { fill: #0f7a58; stroke: #fff; stroke-width: 3; vector-effect: non-scaling-stroke; filter: drop-shadow(0 3px 4px rgba(16,41,31,.24)); }
.map-fallback-facility text { fill: #fff; font-size: 10px; font-weight: 900; pointer-events: none; }
.map-fallback-facility:hover circle, .map-fallback-facility:focus-visible circle { stroke: #dffff0; stroke-width: 5; }
.map-facility-card .map-job-detail { gap: 12px; }
.map-facility-card .map-job-detail > p { max-height: none; color: #7b6850; }
.map-worker-avatar { display: grid; min-width: 70px; grid-template-columns: 16px 1fr; align-items: center; padding: 5px 7px; border: 2px solid var(--worker-color); border-radius: 999px; background: #fff; box-shadow: 0 6px 16px rgba(16,41,31,.22); animation: map-worker-float 1.8s ease-in-out infinite; }
.map-worker-avatar i { grid-row: 1 / 3; color: var(--worker-color); font-size: 13px; font-style: normal; }
.map-worker-avatar strong { overflow: hidden; max-width: 75px; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.map-worker-avatar small { color: #69776f; font-size: 8px; }
@keyframes map-worker-float { 0%, 100% { transform: translateY(0) scale(var(--native-avatar-scale, 1)); } 50% { transform: translateY(-4px) scale(var(--native-avatar-scale, 1)); } }
.map-route-card { --team-color: #7652ad; padding: 11px 12px; border-bottom: 1px solid #e5ece8; box-shadow: inset 4px 0 var(--team-color); }
.map-route-card > header { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.map-route-card > header strong { color: var(--team-color); font-size: 12px; }
.map-route-card > header span { color: #68766e; font-size: 9px; }
.map-load-meter { height: 5px; margin-top: 8px; overflow: hidden; border-radius: 999px; background: #e9efeb; }
.map-load-meter i { display: block; height: 100%; border-radius: inherit; background: var(--team-color); }
.map-route-card > p { margin: 5px 0 8px; color: #6b776f; font-size: 9px; }
.map-route-card ol { display: grid; gap: 4px; margin: 0; padding: 0; list-style: none; }
.map-route-card li { display: grid; grid-template-columns: 18px 1fr; align-items: start; }
.map-route-card li > span { display: grid; width: 16px; height: 16px; place-items: center; border-radius: 50%; background: color-mix(in srgb, var(--team-color) 14%, white); color: var(--team-color); font-size: 8px; font-weight: 900; }
.map-route-card li button { display: grid; gap: 2px; padding: 1px 3px 5px; border: 0; background: transparent; color: #263b32; font-size: 9px; font-weight: 850; text-align: left; }
.map-route-card li button:hover { color: var(--team-color); }
.map-route-card li small { overflow: hidden; color: #718078; font-size: 8px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.map-job-dialog { position: fixed; z-index: 120; inset: 0; display: grid; place-items: center; padding: 20px; }
.map-dialog-backdrop { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; background: rgba(10,28,21,.42); backdrop-filter: blur(4px); }
.map-job-card { position: relative; z-index: 1; width: min(520px, calc(100vw - 28px)); max-height: calc(100vh - 40px); overflow-y: auto; padding: 20px; border: 1px solid #d9e4de; border-radius: 16px; background: white; box-shadow: 0 24px 70px rgba(12,37,27,.28); }
.map-job-card > header { display: flex; justify-content: space-between; }
.map-job-card h2 { margin: 4px 0 0; font-size: 20px; }
.map-job-detail { display: grid; gap: 9px; margin: 17px 0; padding: 14px; border-radius: 12px; background: #f5f9f6; }
.map-job-key { display: flex; align-items: center; justify-content: space-between; }
.map-job-key span { color: #08744e; font-size: 11px; font-weight: 900; }
.map-job-key b { padding: 4px 8px; border-radius: 7px; background: #fff1b8; color: #805e00; font-size: 11px; }
.map-job-detail > strong { font-size: 14px; line-height: 1.5; }
.map-job-detail > p { max-height: 72px; margin: 0; overflow-y: auto; color: #55665d; font-size: 11px; white-space: pre-wrap; }
.map-job-detail dl { display: grid; grid-template-columns: 78px 1fr; gap: 5px; margin: 0; font-size: 10px; }
.map-job-detail dt { color: #7a8780; }
.map-job-detail dd { margin: 0; font-weight: 800; }
.map-worker-field { display: grid; gap: 5px; color: #40564c; font-size: 11px; font-weight: 850; }
.map-worker-field input { min-height: 42px; border-color: #d5a934; background: #fff9e9; font-weight: 850; }
.map-worker-suggestions { display: flex; gap: 6px; margin-top: 8px; overflow-x: auto; }
.map-worker-suggestions button { display: grid; flex: 0 0 auto; gap: 2px; padding: 7px 9px; border: 1px solid #c9dcd1; border-radius: 9px; background: #f5faf7; text-align: left; }
.map-worker-suggestions button:hover { border-color: var(--green); background: #e9f7f0; }
.map-worker-suggestions strong { color: #08744e; font-size: 10px; }
.map-worker-suggestions span, .map-worker-suggestions small { color: #6b7a72; font-size: 9px; }
.map-job-card > footer { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }

@media (max-width: 1320px) {
  .map-ops-layout { grid-template-columns: 190px minmax(470px, 1fr) 220px; }
}
@media (max-width: 1050px) {
  .map-command-bar { align-items: stretch; flex-direction: column; }
  .map-command-actions { flex-wrap: wrap; }
  .map-filter-bar { align-items: flex-start; flex-wrap: wrap; }
  .map-filter-section.workers { width: 100%; }
  .map-ops-layout { grid-template-columns: 190px minmax(500px, 1fr); overflow-x: auto; }
  .map-routes { display: none; }
}
@media (max-width: 720px) {
  .map-command-actions label { min-width: 100%; }
  .map-ops-layout { display: flex; height: auto; min-height: 0; flex-direction: column; overflow: visible; }
  .map-canvas-card { height: 58vh; min-height: 420px; order: 1; }
  .map-queue { max-height: 270px; order: 2; }
  .map-routes { display: block; max-height: 320px; order: 3; }
}
