:root {
  --dc-navy: #1E3A5F;
  --dc-navy-2: #16304f;
  --dc-accent: #E8A33D;
  --dc-bg: #F4F6F9;
  --dc-line: #E2E7EE;
  --dc-text: #1F2933;
  --dc-muted: #6B7785;
  --bs-primary: #1E3A5F;
  --bs-primary-rgb: 30, 58, 95;
  --bs-link-color: #1E5A9C;
  --bs-link-color-rgb: 30, 90, 156;
  --bs-body-font-family: "Segoe UI", system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif;
}
body { background: var(--dc-bg); color: var(--dc-text); font-size: .925rem; }
.btn-primary { --bs-btn-bg: var(--dc-navy); --bs-btn-border-color: var(--dc-navy); --bs-btn-hover-bg: var(--dc-navy-2);
  --bs-btn-hover-border-color: var(--dc-navy-2); --bs-btn-active-bg: #0f2540; --bs-btn-disabled-bg: #5b7190; }
.btn-outline-primary { --bs-btn-color: var(--dc-navy); --bs-btn-border-color: var(--dc-navy); --bs-btn-hover-bg: var(--dc-navy);
  --bs-btn-hover-border-color: var(--dc-navy); --bs-btn-active-bg: var(--dc-navy); }
.text-primary { color: var(--dc-navy) !important; }
.form-check-input:checked { background-color: var(--dc-navy); border-color: var(--dc-navy); }

/* layout */
.dc-shell { display: flex; min-height: 100vh; }
.dc-side { width: 232px; flex: 0 0 232px; background: var(--dc-navy); color: #cfd9e6; display: flex; flex-direction: column;
  position: sticky; top: 0; height: 100vh; }
.dc-brand { padding: 18px 20px; color: #fff; font-weight: 600; font-size: 1.1rem; display: flex; gap: 10px; align-items: center;
  border-bottom: 1px solid rgba(255,255,255,.08); text-decoration: none; }
.dc-brand .logo { width: 30px; height: 30px; border-radius: 7px; background: var(--dc-accent); color: var(--dc-navy);
  display: grid; place-items: center; font-size: 1rem; }
.dc-nav { padding: 12px 10px; flex: 1; overflow-y: auto; }
.dc-nav .section { font-size: .7rem; text-transform: uppercase; letter-spacing: .08em; color: #8ea3bd; padding: 14px 12px 6px; }
.dc-nav a { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 6px; color: #d7e1ec; text-decoration: none; margin-bottom: 2px; }
.dc-nav a:hover { background: rgba(255,255,255,.07); color: #fff; }
.dc-nav a.active { background: rgba(255,255,255,.13); color: #fff; box-shadow: inset 3px 0 0 var(--dc-accent); }
.dc-nav a i { font-size: 1.05rem; width: 20px; text-align: center; }
.dc-side-foot { padding: 12px 20px; font-size: .75rem; color: #8ea3bd; border-top: 1px solid rgba(255,255,255,.08); }
.dc-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.dc-top { height: 56px; background: #fff; border-bottom: 1px solid var(--dc-line); display: flex; align-items: center;
  padding: 0 24px; gap: 12px; position: sticky; top: 0; z-index: 20; }
.dc-top h1 { font-size: 1.05rem; margin: 0; font-weight: 600; }
.dc-content { padding: 24px; max-width: 1400px; width: 100%; }
.lang-switch .btn { padding: 2px 10px; font-size: .8rem; }
.dc-menu-toggle { display: none; }
@media (max-width: 900px) {
  .dc-side { position: fixed; left: -240px; z-index: 50; transition: left .2s; }
  .dc-side.open { left: 0; }
  .dc-menu-toggle { display: inline-block; }
  .dc-content { padding: 16px; }
}

/* cards */
.card { border: 1px solid var(--dc-line); border-radius: 10px; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.card-header { background: #fff; border-bottom: 1px solid var(--dc-line); font-weight: 600; padding: 12px 16px; }
.tool-card { transition: border-color .15s, box-shadow .15s; height: 100%; }
.tool-card:hover { border-color: #b8c6d8; box-shadow: 0 4px 14px rgba(16,24,40,.07); }
.tool-icon { width: 44px; height: 44px; border-radius: 10px; display: grid; place-items: center; font-size: 1.35rem; }
.ti-map { background: #E6EEF8; color: #1E5A9C; }
.ti-pdf { background: #FBEAEA; color: #B42318; }
.ti-bar { background: #FDF3E1; color: #A15C00; }
.ti-hist { background: #E9F5EE; color: #1B7A43; }
.muted { color: var(--dc-muted); }
.table > :not(caption) > * > * { padding: .55rem .7rem; }
.table thead th { font-size: .78rem; text-transform: uppercase; letter-spacing: .03em; color: var(--dc-muted); font-weight: 600;
  background: #FAFBFC; white-space: nowrap; }
.badge-soft { background: #EEF2F7; color: #3c4a5c; font-weight: 500; }
.empty { text-align: center; padding: 40px 20px; color: var(--dc-muted); }
.empty i { font-size: 2rem; display: block; margin-bottom: 8px; color: #b3bfcd; }

/* login */
.auth-wrap { min-height: 100vh; display: grid; place-items: center; background: linear-gradient(160deg, #1E3A5F 0%, #2c5282 55%, #F4F6F9 55.1%); padding: 20px; }
.auth-card { width: 100%; max-width: 410px; }
.auth-card .card-body { padding: 32px; }
.code-input { letter-spacing: .5em; font-size: 1.6rem; font-weight: 600; }

/* mapper */
.map-table td { vertical-align: top; }
.map-table .tgt { min-width: 190px; max-width: 260px; }
.map-table .tgt .h { font-weight: 600; word-break: break-word; }
.map-table select, .map-table input { font-size: .85rem; }
.map-table select.mode { min-width: 150px; }
.map-row.is-blank .tgt .h { color: var(--dc-muted); font-weight: 500; }
.map-row.is-blank { background: #fcfcfd; }
.sample { font-size: .78rem; color: var(--dc-muted); max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.adv { display: none; }
.map-row.show-adv .adv { display: block; }
.mode-pill { font-size: .72rem; }
.preview-wrap { max-height: 520px; overflow: auto; border: 1px solid var(--dc-line); border-radius: 8px; }
.preview-wrap table { font-size: .8rem; white-space: nowrap; margin: 0; }
.preview-wrap thead th { position: sticky; top: 0; z-index: 1; text-transform: none; letter-spacing: 0; }
.sticky-actions { position: sticky; bottom: 0; background: rgba(244,246,249,.96); padding: 12px 0; border-top: 1px solid var(--dc-line); z-index: 10; }
.drop { border: 2px dashed #c5d0dd; border-radius: 10px; padding: 22px; text-align: center; background: #fff; }
.drop.over { border-color: var(--dc-navy); background: #f0f4fa; }
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: .85rem; }
pre.notes { white-space: pre-wrap; background: #fafbfc; border: 1px solid var(--dc-line); border-radius: 8px; padding: 10px 12px; font-size: .82rem; margin: 0; }
.nav-pills { --bs-nav-pills-link-active-bg: var(--dc-navy); --bs-nav-link-color: var(--dc-navy); --bs-nav-link-hover-color: var(--dc-navy-2); }
