*{
  box-sizing:border-box
}

body{
  margin:0;
  font-family:Arial,"Microsoft YaHei",sans-serif;
  background:#f5f7fa;
  color:#222
}

.hidden{
  display:none!important
}

.login{
  min-height:100vh;
  display:grid;
  place-items:center;
  background:#1677ff
}

.box,
.card{
  background:#fff;
  border-radius:14px;
  padding:20px
}

.box{
  width:360px
}

input,
select,
textarea{
  width:100%;
  padding:10px;
  margin:6px 0 12px;
  border:1px solid #ddd;
  border-radius:8px
}

button{
  padding:10px 14px;
  border:0;
  border-radius:8px;
  background:#1677ff;
  color:#fff;
  cursor:pointer
}

button:disabled{
  opacity:.55;
  cursor:not-allowed
}

.app{
  display:flex;
  height:100vh;
  min-height:0;
  overflow:hidden
}

aside{
  width:230px;
  min-width:230px;
  height:100vh;
  background:#111827;
  color:#fff;
  padding:0;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  border-right:1px solid #1f2937
}

aside>h3{
  margin:0;
  padding:20px 18px 16px;
  font-size:20px;
  line-height:1.2;
  flex:0 0 auto;
  background:#111827;
  border-bottom:1px solid #1f2937
}

nav{
  flex:1 1 auto;
  min-height:0;
  overflow-y:auto;
  overflow-x:hidden;
  padding:10px 10px 18px;
  scrollbar-width:thin;
  scrollbar-color:#475569 transparent
}

nav::-webkit-scrollbar{width:6px}
nav::-webkit-scrollbar-thumb{background:#475569;border-radius:999px}
nav::-webkit-scrollbar-track{background:transparent}

nav button{
  width:100%;
  text-align:left;
  background:transparent;
  color:#dbe3ef;
  margin:2px 0;
  padding:9px 12px;
  border-radius:8px;
  transition:.18s ease
}

nav button:hover{
  background:#1f2937;
  color:#fff
}

nav button.active{
  background:#1677ff;
  color:#fff;
  font-weight:700
}

main{
  flex:1 1 auto;
  height:100vh;
  min-width:0;
  overflow-y:auto;
  overflow-x:auto;
  padding:0 24px 28px;
  background:#f5f7fa
}

main>h1{
  position:sticky;
  top:0;
  z-index:20;
  margin:0 -24px 20px;
  padding:22px 24px 16px;
  background:#f5f7fa;
  border-bottom:1px solid #e5e7eb
}

table{
  width:100%;
  background:#fff;
  border-collapse:collapse
}

th,
td{
  padding:10px;
  border-bottom:1px solid #eee;
  text-align:left
}

.cards{
  display:grid;
  grid-template-columns:repeat(5,1fr);
  gap:12px
}

.modal{
  position:fixed;
  inset:0;
  background:#0007;
  display:grid;
  place-items:center;
  z-index:1000
}

.modal>div{
  background:var(--ui-panel,#fff);
  width:min(960px,95vw);
  max-height:90vh;
  overflow:auto;
  padding:20px;
  border-radius:14px
}

.grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px
}

.muted{
  color:#777;
  font-size:13px
}

.taskbar{
  display:flex;
  gap:10px;
  align-items:center;
  flex-wrap:wrap;
  margin-bottom:14px
}

.smallbtn{
  padding:7px 10px;
  font-size:13px
}

.badge{
  display:inline-block;
  padding:4px 9px;
  border-radius:999px;
  background:#eef5ff;
  color:#1677ff;
  font-size:12px
}

.progress{
  height:10px;
  background:#eef2f7;
  border-radius:999px;
  overflow:hidden
}

.progress>i{
  display:block;
  height:100%;
  background:#1677ff
}

.detail-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:10px;
  margin:12px 0
}

.detail-item{
  background:#f7f9fc;
  border-radius:10px;
  padding:12px
}

.detail-item b{
  display:block;
  margin-bottom:6px
}

.stop{
  border:1px solid #e5e7eb;
  border-radius:12px;
  padding:14px;
  margin:10px 0
}

.stop-head{
  display:flex;
  justify-content:space-between;
  gap:12px;
  align-items:center
}

.inspection{
  border:1px solid #dbeafe;
  background:#f8fbff;
  border-radius:12px;
  padding:14px;
  margin:10px 0
}

.photo-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(130px,1fr));
  gap:12px;
  margin-top:12px
}

.photo-item{
  background:#fff;
  border:1px solid #e5e7eb;
  border-radius:10px;
  padding:8px;
  cursor:pointer
}

.photo-item:hover{
  box-shadow:0 3px 12px #00000018
}

.photo-item img{
  width:100%;
  aspect-ratio:1/1;
  object-fit:cover;
  display:block;
  border-radius:8px;
  background:#eef2f7
}

.photo-title{
  font-size:12px;
  color:#555;
  margin-top:6px;
  text-align:center
}

.image-viewer{
  position:fixed;
  inset:0;
  background:#000c;
  z-index:3000;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:30px
}

.image-viewer.hidden{
  display:none!important
}

.image-viewer img{
  max-width:94vw;
  max-height:90vh;
  object-fit:contain;
  border-radius:8px;
  background:#fff
}

.image-close{
  position:fixed;
  right:24px;
  top:20px;
  width:42px;
  height:42px;
  border-radius:50%;
  font-size:22px;
  line-height:22px;
  background:#fff;
  color:#222
}

.error-photo{
  min-height:110px;
  display:flex;
  align-items:center;
  justify-content:center;
  background:#f3f4f6;
  color:#999;
  border-radius:8px;
  text-align:center;
  font-size:12px
}


.nav-group{margin:4px 0 8px}
.nav-title{
  width:100%;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  padding:9px 10px;
  margin:0 0 3px;
  border:0;
  border-radius:8px;
  background:transparent;
  color:#94a3b8;
  font-size:12px;
  font-weight:700;
  letter-spacing:.06em;
  cursor:pointer
}
.nav-title:hover{background:#172033;color:#cbd5e1}
.nav-arrow{font-size:11px;transition:transform .18s ease}
.nav-group.collapsed .nav-arrow{transform:rotate(-90deg)}
.nav-items{overflow:hidden}
.nav-group.collapsed .nav-items{display:none}
.nav-user{
  flex:0 0 auto;
  margin:0;
  padding:12px 14px 14px;
  background:#0f172a;
  border-top:1px solid #1f2937;
  font-size:13px;
  line-height:1.7
}
.nav-user button{width:100%;margin-top:8px;background:#374151}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar input,.toolbar select{width:auto;min-width:150px;margin:0}
.kpi-note{font-size:12px;color:#64748b;margin-top:4px}
.section-note{padding:18px;background:#fff;border-radius:12px;border:1px dashed #cbd5e1;color:#64748b}
.permission-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:12px 0}
.permission-item{display:flex;gap:8px;align-items:center;padding:9px;border:1px solid #e5e7eb;border-radius:8px}
.permission-item input{width:auto;margin:0}
.status-active{color:#059669}.status-disabled{color:#dc2626}
@media(max-width:900px){

  .detail-grid{
    grid-template-columns:1fr
  }

  .cards{
    grid-template-columns:1fr 1fr
  }

  aside{
    width:190px;
    min-width:190px
  }

  main{
    padding:0 14px 20px
  }

  main>h1{
    margin:0 -14px 16px;
    padding:18px 14px 14px
  }

  .photo-grid{
    grid-template-columns:repeat(2,1fr)
  }
}

/* v1.7.2 筛选与派单优化 */
.filter-panel{
  background:#fff;
  border:1px solid #e5e7eb;
  border-radius:12px;
  padding:14px;
  margin:12px 0 16px;
}
.filter-grid{
  display:grid;
  grid-template-columns:repeat(5,minmax(140px,1fr));
  gap:10px;
}
.filter-grid .wide{grid-column:span 2}
.filter-actions{
  display:flex;
  gap:8px;
  align-items:center;
  flex-wrap:wrap;
  margin-top:10px;
}
.store-picker{
  border:1px solid #dbe3ee;
  border-radius:12px;
  overflow:hidden;
  background:#fff;
}
.store-picker-head{
  display:grid;
  grid-template-columns:1.2fr 1fr 1fr;
  gap:10px;
  padding:12px;
  background:#f7f9fc;
  border-bottom:1px solid #e5e7eb;
}
.store-picker-list{
  max-height:330px;
  overflow:auto;
  padding:8px 12px;
}
.store-option{
  display:grid;
  grid-template-columns:28px 1.2fr .8fr 1.6fr;
  gap:10px;
  align-items:center;
  padding:10px 6px;
  border-bottom:1px solid #f0f2f5;
}
.store-option:last-child{border-bottom:0}
.store-option:hover{background:#f8fbff}
.store-option input[type=checkbox]{
  width:18px;
  height:18px;
}
.store-picker-empty{
  padding:28px 12px;
  text-align:center;
  color:#888;
}
.form-label{
  display:block;
  margin:10px 0 6px;
  font-size:13px;
  font-weight:700;
  color:#374151;
}
.inline-note{
  font-size:12px;
  color:#777;
  margin-top:4px;
}
@media(max-width:900px){
  .filter-grid{grid-template-columns:1fr 1fr}
  .filter-grid .wide{grid-column:span 2}
  .store-picker-head{grid-template-columns:1fr}
  .store-option{grid-template-columns:28px 1fr}
  .store-option .hide-mobile{display:none}
}


/* v1.9.0 司机/车辆档案与证件管理 */
.alert-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:14px 0}
.alert-card{background:#fff;border-radius:12px;padding:16px;border:1px solid #e5e7eb;cursor:pointer}
.alert-card b{font-size:26px;display:block;margin-top:6px}
.alert-card.danger{border-color:#fecaca;background:#fff7f7}.alert-card.danger b{color:#dc2626}
.alert-card.warn{border-color:#fed7aa;background:#fffaf3}.alert-card.warn b{color:#ea580c}
.alert-card.notice{border-color:#fde68a;background:#fffdf2}.alert-card.notice b{color:#ca8a04}
.doc-status{display:inline-block;padding:3px 8px;border-radius:999px;font-size:12px;background:#f3f4f6;color:#4b5563}
.doc-status.approved{background:#ecfdf5;color:#059669}.doc-status.pending{background:#fff7ed;color:#c2410c}.doc-status.rejected{background:#fef2f2;color:#dc2626}
.expiry{font-weight:700}.expiry.expired{color:#dc2626}.expiry.d7{color:#ea580c}.expiry.d30{color:#ca8a04}.expiry.ok{color:#059669}.expiry.none{color:#94a3b8}
.profile-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;flex-wrap:wrap;margin-bottom:14px}
.profile-title{font-size:22px;font-weight:800}.profile-sub{color:#64748b;font-size:13px;margin-top:4px}
.profile-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:12px 0}
.profile-box{background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:12px}.profile-box b{display:block;font-size:12px;color:#64748b;margin-bottom:5px}
.doc-section{margin-top:18px;border-top:1px solid #e5e7eb;padding-top:16px}
.doc-list{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.doc-card{border:1px solid #e5e7eb;border-radius:12px;padding:12px;background:#fff}
.doc-card-head{display:flex;justify-content:space-between;gap:10px;align-items:center}.doc-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.doc-form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.doc-file{border:1px dashed #cbd5e1;padding:12px;border-radius:10px;background:#f8fafc}
.review-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:14px;padding:12px;background:#f8fafc;border-radius:10px}
.review-bar textarea{margin:0;min-height:64px;flex:1;min-width:260px}.btn-red{background:#dc2626}.btn-green{background:#059669}.btn-amber{background:#d97706}
.table-wrap{overflow:auto}.table-wrap table{min-width:900px}
.file-note{font-size:12px;color:#64748b;margin-top:4px}
@media(max-width:900px){.alert-cards,.profile-grid,.doc-list,.doc-form-grid{grid-template-columns:1fr 1fr}}
@media(max-width:650px){.alert-cards,.profile-grid,.doc-list,.doc-form-grid{grid-template-columns:1fr}}


/* v2.0.0 邀请司机 + 处罚单 */
.qr-wrap{display:grid;grid-template-columns:220px 1fr;gap:20px;align-items:center}
.qr-box{width:210px;height:210px;display:grid;place-items:center;background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:10px}
.link-box{padding:12px;background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;word-break:break-all;font-size:13px}
.penalty-amount{font-weight:800;color:#dc2626}
.status-pending{color:#d97706}.status-approved{color:#059669}.status-rejected{color:#dc2626}.status-cancelled{color:#64748b}
@media(max-width:700px){.qr-wrap{grid-template-columns:1fr}.qr-box{margin:auto}}


/* ===== TMS v2.0 专业运营界面 ===== */
.v2-hero{display:flex;justify-content:space-between;gap:18px;align-items:flex-end;padding:22px;border-radius:18px;background:linear-gradient(135deg,#0f172a,#1e40af);color:#fff;margin-bottom:16px}
.v2-hero h2{margin:0 0 6px;font-size:24px}.v2-hero .sub{opacity:.82;font-size:13px}
.v2-grid{display:grid;grid-template-columns:repeat(6,minmax(120px,1fr));gap:12px;margin:14px 0 18px}
.v2-kpi{background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:15px;box-shadow:0 4px 16px rgba(15,23,42,.04);cursor:pointer}
.v2-kpi span{font-size:12px;color:#64748b}.v2-kpi strong{display:block;font-size:27px;margin-top:8px;color:#0f172a}.v2-kpi.warn strong{color:#d97706}.v2-kpi.danger strong{color:#dc2626}.v2-kpi.ok strong{color:#059669}
.v2-columns{display:grid;grid-template-columns:1.2fr .8fr;gap:16px;margin:16px 0}
.v2-panel{background:#fff;border:1px solid #e5e7eb;border-radius:16px;padding:16px;box-shadow:0 5px 18px rgba(15,23,42,.035)}
.v2-panel-head{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:12px}.v2-panel-head h3{margin:0;font-size:16px}
.v2-todo{display:flex;gap:10px;align-items:flex-start;padding:11px 0;border-bottom:1px solid #f1f5f9;cursor:pointer}.v2-todo:last-child{border:0}.v2-todo-icon{width:30px;height:30px;border-radius:9px;background:#eff6ff;display:grid;place-items:center}
.v2-progress{height:8px;border-radius:999px;background:#e2e8f0;overflow:hidden;margin-top:7px}.v2-progress>i{display:block;height:100%;background:#2563eb;border-radius:999px}
.dispatch-board{display:grid;grid-template-columns:1.15fr .85fr .85fr;gap:14px}.dispatch-col{background:#f8fafc;border:1px solid #e2e8f0;border-radius:14px;padding:13px;min-height:440px}.dispatch-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:12px;margin-bottom:9px}.dispatch-card.selected{border-color:#2563eb;box-shadow:0 0 0 2px rgba(37,99,235,.08)}
.dispatch-meta{font-size:12px;color:#64748b;line-height:1.7}.score{display:inline-block;padding:3px 8px;border-radius:999px;background:#ecfdf5;color:#047857;font-size:12px;font-weight:700}
.exec-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.exec-tab{border:1px solid #dbeafe;background:#fff;color:#1e40af;border-radius:999px;padding:8px 12px;cursor:pointer}.exec-tab.active{background:#2563eb;color:#fff}
.exec-card{border:1px solid #e5e7eb;background:#fff;border-radius:14px;padding:14px;margin-bottom:10px;display:grid;grid-template-columns:1.3fr 1fr 1fr auto;gap:14px;align-items:center}
.timeline{position:relative;margin-left:9px;padding-left:22px}.timeline:before{content:"";position:absolute;left:6px;top:7px;bottom:7px;width:2px;background:#dbeafe}.timeline-item{position:relative;padding:0 0 16px}.timeline-item:before{content:"";position:absolute;left:-21px;top:5px;width:10px;height:10px;border-radius:50%;background:#2563eb;border:2px solid #fff;box-shadow:0 0 0 2px #bfdbfe}
.timeline-time{font-size:12px;color:#64748b}.timeline-title{font-weight:700;margin:3px 0}.timeline-note{font-size:13px;color:#475569}
.exception-card{border:1px solid #fee2e2;border-left:4px solid #ef4444;background:#fff;border-radius:12px;padding:13px;margin-bottom:10px}.exception-card.resolved{border-color:#d1fae5;border-left-color:#10b981}
.project-ops-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.project-ops-card{border:1px solid #e5e7eb;background:#fff;border-radius:14px;padding:14px}
.smart-box{border:1px solid #bfdbfe;background:#eff6ff;border-radius:14px;padding:14px}.smart-rank{display:grid;grid-template-columns:48px 1fr auto;gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid #dbeafe}.smart-rank:last-child{border-bottom:0}
@media(max-width:1150px){.v2-grid{grid-template-columns:repeat(3,1fr)}.dispatch-board{grid-template-columns:1fr}.v2-columns{grid-template-columns:1fr}.exec-card{grid-template-columns:1fr 1fr}.project-ops-grid{grid-template-columns:1fr 1fr}}
@media(max-width:700px){.v2-grid{grid-template-columns:repeat(2,1fr)}.exec-card{grid-template-columns:1fr}.project-ops-grid{grid-template-columns:1fr}.v2-hero{align-items:flex-start;flex-direction:column}}


/* ===== v2.1.0 客户 / 项目 / 计费中心 ===== */
.customer-list-card{background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:15px;margin-bottom:10px;display:grid;grid-template-columns:1.4fr repeat(5,.7fr) auto;gap:12px;align-items:center}
.customer-name{font-size:16px;font-weight:800}.customer-code{font-size:12px;color:#64748b;margin-top:4px}
.metric-value{font-size:18px;font-weight:800;color:#0f172a}.metric-label{font-size:12px;color:#64748b}
.customer-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.customer-tab{background:#fff;color:#334155;border:1px solid #cbd5e1}.customer-tab.active{background:#1677ff;color:#fff;border-color:#1677ff}
.customer-section{background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:16px;margin-bottom:14px}
.customer-summary{display:grid;grid-template-columns:repeat(8,1fr);gap:10px}.customer-summary .box2{background:#f8fafc;border-radius:11px;padding:12px}.customer-summary .box2 b{font-size:20px;display:block;margin-top:5px}
.hierarchy{background:#f8fafc;border:1px dashed #cbd5e1;border-radius:12px;padding:14px;line-height:1.9}
.rate-rule{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:12px;margin:8px 0;display:grid;grid-template-columns:100px 1fr 1fr 1fr auto;gap:10px;align-items:center}
.section-actions{display:flex;gap:8px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin-bottom:12px}
.project-row-v21{display:grid;grid-template-columns:1.4fr 1.2fr .8fr .8fr .8fr auto;gap:10px;align-items:center;background:#fff;border-bottom:1px solid #eef2f7;padding:12px}
.nav-hint{font-size:11px;color:#64748b;margin:2px 10px 8px}
@media(max-width:1200px){.customer-summary{grid-template-columns:repeat(4,1fr)}.customer-list-card{grid-template-columns:1.4fr repeat(3,.8fr) auto}.customer-list-card .hide-mid{display:none}}
@media(max-width:760px){.customer-summary{grid-template-columns:repeat(2,1fr)}.customer-list-card{grid-template-columns:1fr 1fr}.rate-rule,.project-row-v21{grid-template-columns:1fr}}


/* ===== v2.1.1 专业简洁 UI ===== */
:root{--v211-bg:#f5f7fb;--v211-card:#fff;--v211-line:#e7ebf2;--v211-text:#172033;--v211-muted:#6b7280;--v211-radius:12px}
body{background:var(--v211-bg);color:var(--v211-text)}
.content{padding:22px 24px 34px}
.v2-hero{border-radius:14px;padding:20px 22px;box-shadow:0 6px 18px rgba(15,23,42,.06)}
.v2-hero h2{font-size:25px;letter-spacing:-.3px}
.customer-summary{margin-top:14px}
.customer-summary .box2{background:#fff;border:1px solid var(--v211-line);box-shadow:0 2px 8px rgba(15,23,42,.025);padding:14px}
.customer-summary .box2 b{font-size:19px}
.customer-tabs{background:#fff;border:1px solid var(--v211-line);border-radius:12px;padding:6px;gap:4px;display:inline-flex;margin:14px 0}
.customer-tab{border:0!important;background:transparent!important;border-radius:8px!important;padding:9px 14px!important;color:#475569!important}
.customer-tab:hover{background:#f1f5f9!important}
.customer-tab.active{background:#1677ff!important;color:#fff!important;box-shadow:0 2px 7px rgba(22,119,255,.18)}
.customer-section{border:1px solid var(--v211-line);box-shadow:0 3px 12px rgba(15,23,42,.035);padding:18px}
.customer-section h3{font-size:17px}
table{border-collapse:separate;border-spacing:0;width:100%}
th{background:#f8fafc;color:#64748b;font-size:13px;font-weight:650;border-bottom:1px solid var(--v211-line)}
td{border-bottom:1px solid #edf0f5;vertical-align:middle}
tr:last-child td{border-bottom:0}
button,.smallbtn{transition:.15s ease}
button:hover,.smallbtn:hover{transform:translateY(-1px)}
.contact-person{display:flex;align-items:center;gap:10px}
.contact-avatar{width:34px;height:34px;border-radius:9px;background:#eef5ff;display:flex;align-items:center;justify-content:center;font-weight:800;color:#1677ff}
.contact-role{font-size:12px;color:#64748b;margin-top:2px}
.action-cell{display:flex;gap:6px;justify-content:flex-end}
.btn-ghost{background:#fff!important;color:#334155!important;border:1px solid #dbe1ea!important}
.btn-ghost:hover{background:#f8fafc!important}
.form-section-title{font-size:13px;font-weight:750;color:#334155;margin:4px 0 2px;padding-bottom:8px;border-bottom:1px solid #edf0f5}
.modal{border-radius:14px!important;box-shadow:0 24px 70px rgba(15,23,42,.22)!important}
.modal input,.modal select,.modal textarea{border-color:#d8dee8;border-radius:9px;min-height:40px}
.modal input:focus,.modal select:focus,.modal textarea:focus{border-color:#1677ff;box-shadow:0 0 0 3px rgba(22,119,255,.09);outline:none}
.modal-actions{position:sticky;bottom:-1px;background:#fff;border-top:1px solid #edf0f5;padding-top:12px;margin-top:16px;display:flex;justify-content:flex-end}
@media(max-width:900px){.content{padding:16px}.customer-tabs{display:flex;overflow:auto}.customer-tab{white-space:nowrap}}


/* ===== v2.1.2 项目 / 合同 / 开票资料精细化 ===== */
.form-grid.project-form-grid{grid-template-columns:1fr 1fr;gap:14px 18px}
.form-grid.project-form-grid .hero-field{grid-column:1/-1}
.form-grid.project-form-grid .hero-field input{font-size:17px;font-weight:700;height:46px}
.form-grid.project-form-grid input,.form-grid.project-form-grid select{margin-bottom:4px}
.modal>div{width:min(920px,92vw)}
.modal .form-grid{gap:10px 16px}
.asset-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.asset-card{border:1px solid #e6eaf0;border-radius:12px;padding:14px;background:#fff;margin-bottom:10px}
.asset-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.asset-meta{font-size:12px;color:#64748b;margin-top:5px;line-height:1.6}
.asset-actions{display:flex;gap:6px;flex-wrap:wrap}
.attachment-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin-top:12px}
.attachment-tile{border:1px solid #e5e7eb;border-radius:10px;padding:8px;background:#f8fafc;cursor:pointer;min-height:98px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.attachment-tile:hover{border-color:#93c5fd;background:#eff6ff}
.attachment-tile .ico{font-size:26px;margin-bottom:6px}
.file-chip{display:inline-flex;align-items:center;gap:6px;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:999px;padding:5px 9px;font-size:12px;margin:3px}
.csv-drop{border:1px dashed #94a3b8;border-radius:12px;padding:18px;background:#f8fafc;text-align:center}
.quick-note{background:#f8fbff;border:1px solid #dbeafe;border-radius:10px;padding:10px 12px;font-size:12px;color:#475569}
@media(max-width:760px){.form-grid.project-form-grid{grid-template-columns:1fr}.form-grid.project-form-grid .hero-field{grid-column:auto}.modal>div{width:96vw}}


/* ===== v2.1.3 运营工作台 ===== */
.ops-wrap{display:flex;flex-direction:column;gap:16px}
.ops-topbar{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap}
.ops-title{font-size:26px;font-weight:800}.ops-date{color:#64748b;font-size:13px;margin-top:4px}
.ops-kpis{display:grid;grid-template-columns:repeat(5,minmax(130px,1fr));gap:12px}
.ops-kpi{background:#fff;border:1px solid #e5e7eb;border-radius:13px;padding:15px;cursor:pointer;box-shadow:0 3px 12px rgba(15,23,42,.035);transition:.15s ease}
.ops-kpi:hover{transform:translateY(-1px);box-shadow:0 7px 18px rgba(15,23,42,.07)}
.ops-kpi .label{font-size:12px;color:#64748b}.ops-kpi .num{font-size:26px;font-weight:800;margin-top:8px}.ops-kpi .note{font-size:11px;color:#94a3b8;margin-top:5px}
.ops-kpi.warn .num{color:#d97706}.ops-kpi.danger .num{color:#dc2626}.ops-kpi.ok .num{color:#059669}
.ops-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:16px}
.ops-card{background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:16px;box-shadow:0 3px 12px rgba(15,23,42,.03)}
.ops-card-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px}.ops-card-head h3{margin:0;font-size:16px}
.quick-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.quick-item{border:1px solid #e5e7eb;background:#fff;border-radius:12px;padding:13px;cursor:pointer;transition:.15s ease}
.quick-item:hover{border-color:#93c5fd;background:#f8fbff}
.quick-icon{width:34px;height:34px;border-radius:9px;background:#eef5ff;display:flex;align-items:center;justify-content:center;font-size:17px;margin-bottom:9px}
.quick-item b{display:block;font-size:14px}.quick-item span{display:block;font-size:11px;color:#64748b;margin-top:4px}
.ops-todo{display:flex;gap:10px;padding:11px 0;border-bottom:1px solid #eef2f7;cursor:pointer}.ops-todo:last-child{border-bottom:0}
.ops-todo:hover{background:#fafcff}
.ops-todo .dot{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:flex;align-items:center;justify-content:center;flex:none}
.ops-project-row{display:grid;grid-template-columns:150px 1fr 80px;gap:12px;align-items:center;padding:9px 0}
.ops-progress{height:7px;background:#e2e8f0;border-radius:999px;overflow:hidden}.ops-progress i{display:block;height:100%;background:#1677ff;border-radius:999px}
.ops-empty{padding:22px;text-align:center;color:#94a3b8}
.ops-error{padding:18px;background:#fff7f7;border:1px solid #fecaca;color:#991b1b;border-radius:12px}
@media(max-width:1200px){.ops-kpis{grid-template-columns:repeat(3,1fr)}.quick-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:850px){.ops-grid{grid-template-columns:1fr}.ops-kpis{grid-template-columns:repeat(2,1fr)}}


/* ===== v2.1.5 后台账号管理 ===== */
.user-badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:700}
.user-badge.active{background:#ecfdf5;color:#047857}
.user-badge.disabled{background:#f1f5f9;color:#64748b}
.user-badge.pending{background:#fff7ed;color:#c2410c}
.user-role{display:inline-flex;align-items:center;border-radius:8px;padding:4px 8px;background:#eff6ff;color:#1d4ed8;font-size:12px}
.danger-btn{background:#fff!important;color:#dc2626!important;border:1px solid #fecaca!important}
.danger-btn:hover{background:#fef2f2!important}
.admin-user-actions{display:flex;gap:6px;justify-content:flex-end}
.admin-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}
.admin-form-grid .wide{grid-column:1/-1}
.admin-form-grid label{display:block;font-size:12px;color:#475569;margin-bottom:6px;font-weight:700}
@media(max-width:760px){.admin-form-grid{grid-template-columns:1fr}.admin-form-grid .wide{grid-column:auto}}

/* ===== v2.1.6 列表筛选优化 ===== */
.list-filter{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:12px;margin:12px 0 14px;display:grid;grid-template-columns:repeat(5,minmax(140px,1fr));gap:10px;align-items:end}
.list-filter .field label{display:block;font-size:12px;color:#64748b;margin-bottom:5px;font-weight:700}
.list-filter input,.list-filter select{width:100%;height:38px;margin:0}
.filter-actions{display:flex;gap:8px;align-items:center}
.filter-summary{font-size:12px;color:#64748b}
.table-scroll{overflow:auto;border:1px solid #e5e7eb;border-radius:12px;background:#fff}
.table-scroll table{margin:0}
.sticky-head th{position:sticky;top:0;z-index:2;background:#f8fafc}
.expiry-danger{color:#dc2626;font-weight:700}.expiry-warn{color:#d97706;font-weight:700}.expiry-ok{color:#059669;font-weight:700}
@media(max-width:1100px){.list-filter{grid-template-columns:repeat(3,1fr)}}
@media(max-width:700px){.list-filter{grid-template-columns:1fr}}

/* ===== v2.1.7 证件预警交互 ===== */
.alert-card{cursor:pointer;transition:.15s ease}
.alert-card:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(15,23,42,.07)}
.alert-row{cursor:pointer}.alert-row:hover td{background:#f8fbff}
.alert-kind{display:inline-flex;padding:3px 8px;border-radius:999px;background:#f1f5f9;color:#475569;font-size:12px}
.alert-actions{display:flex;gap:6px;justify-content:flex-end;white-space:nowrap}

/* ===== v2.2.0 派单温区 / 门店筛选 / 实用交互 ===== */
.temp-preset-row{display:grid;grid-template-columns:220px 1fr;gap:10px;align-items:end}
.store-picker-head.v220{display:grid;grid-template-columns:1.2fr .8fr .8fr .8fr;gap:8px;padding:10px}
.store-picker-actions{display:flex;gap:7px;flex-wrap:wrap;padding:0 10px 10px}
.store-picker-status{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:8px 10px;border-top:1px solid #edf0f5;background:#f8fafc;font-size:12px;color:#64748b}
.store-option.selected{background:#eff6ff;border-color:#bfdbfe}
.zone-chip{display:inline-flex;padding:3px 8px;border-radius:999px;background:#eef5ff;color:#1d4ed8;font-size:12px;font-weight:700}
@media(max-width:900px){.temp-preset-row,.store-picker-head.v220{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.temp-preset-row,.store-picker-head.v220{grid-template-columns:1fr}}


/* ===== v2.3.0 明日任务池 ===== */
.tomorrow-pool{border:1px solid #bfdbfe;background:linear-gradient(135deg,#eff6ff,#fff);border-radius:15px;padding:16px;box-shadow:0 5px 18px rgba(37,99,235,.07)}
.tomorrow-head{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.tomorrow-head h3{margin:0;font-size:18px}
.tomorrow-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}
.tomorrow-stat{background:#fff;border:1px solid #dbeafe;border-radius:11px;padding:11px}
.tomorrow-stat span{font-size:12px;color:#64748b}.tomorrow-stat b{display:block;font-size:22px;margin-top:5px}
.tomorrow-stat.missing b{color:#dc2626}
.plan-row{display:grid;grid-template-columns:1.5fr .8fr .8fr .8fr .8fr auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid #e5edfa}
.plan-row:last-child{border-bottom:0}
.plan-progress{height:7px;background:#e5e7eb;border-radius:999px;overflow:hidden}.plan-progress i{display:block;height:100%;background:#1677ff}
.plan-missing{color:#dc2626;font-weight:800}.plan-ok{color:#059669;font-weight:800}
@media(max-width:900px){.tomorrow-summary{grid-template-columns:repeat(2,1fr)}.plan-row{grid-template-columns:1fr 1fr}}


/* ===== v2.3.1 项目主数据联动 ===== */
.project-context{display:flex;align-items:center;gap:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:10px;padding:8px 10px;margin:0 0 12px;font-size:12px;color:#1e3a8a}
.project-rel-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin:12px 0}
.project-rel-card{background:#fff;border:1px solid #e5e7eb;border-radius:11px;padding:12px;cursor:pointer}
.project-rel-card b{display:block;font-size:21px;margin-top:5px}
.project-link-actions{display:flex;gap:7px;flex-wrap:wrap}
@media(max-width:1000px){.project-rel-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:650px){.project-rel-grid{grid-template-columns:repeat(2,1fr)}}


/* ===== v2.3.3 明日任务池详情 / 筛选 ===== */
.tomorrow-filter{display:grid;grid-template-columns:1.1fr .9fr .9fr 1.2fr auto;gap:8px;align-items:end;background:#fff;border:1px solid #dbeafe;border-radius:11px;padding:10px;margin-bottom:10px}
.tomorrow-filter .field label{display:block;font-size:12px;color:#64748b;margin-bottom:5px;font-weight:700}
.tomorrow-filter input,.tomorrow-filter select{width:100%;height:38px;margin:0}
.tomorrow-filter-summary{font-size:12px;color:#64748b;white-space:nowrap}
.plan-row.clickable{cursor:pointer;border-radius:8px;padding-left:6px;padding-right:6px}
.plan-row.clickable:hover{background:#f8fbff}
.plan-detail-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:12px 0}
.plan-detail-item{border:1px solid #e5e7eb;border-radius:10px;padding:11px;background:#f8fafc}
.plan-detail-item b{display:block;font-size:12px;color:#64748b;margin-bottom:6px}
.matched-task-list{border:1px solid #e5e7eb;border-radius:10px;overflow:hidden}
.matched-task-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;padding:9px 10px;border-bottom:1px solid #edf0f5}
.matched-task-row:last-child{border-bottom:0}
@media(max-width:900px){.tomorrow-filter{grid-template-columns:1fr 1fr}.plan-detail-grid{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.tomorrow-filter,.plan-detail-grid{grid-template-columns:1fr}}


/* ===== v2.3.4 明日计划一键带入派单 ===== */
.plan-prefill-banner{background:#eff6ff;border:1px solid #bfdbfe;border-radius:11px;padding:11px 12px;margin-bottom:12px;display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}
.plan-prefill-banner b{color:#1d4ed8}
.plan-prefill-tags{display:flex;gap:6px;flex-wrap:wrap}
.plan-prefill-tag{font-size:12px;padding:4px 8px;border-radius:999px;background:#fff;border:1px solid #dbeafe;color:#334155}

/* ===== v2.4.0 首页 / 未来计划 / 异常录入 ===== */
.ops-v240{display:flex;flex-direction:column;gap:14px}
.future-pool{border:1px solid #bfdbfe;background:linear-gradient(135deg,#eff6ff 0%,#fff 70%);border-radius:15px;padding:16px;box-shadow:0 5px 18px rgba(37,99,235,.07)}
.future-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap;margin-bottom:12px}
.future-head h3{margin:0;font-size:19px}
.future-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}
.future-stat{background:#fff;border:1px solid #dbeafe;border-radius:11px;padding:11px}
.future-stat span{font-size:12px;color:#64748b}.future-stat b{display:block;font-size:22px;margin-top:5px}
.future-stat.danger b{color:#dc2626}
.future-date-card{border:1px solid #dbeafe;border-radius:12px;background:#fff;margin-top:10px;overflow:hidden}
.future-date-head{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:10px 12px;background:#f8fbff;cursor:pointer}
.future-date-head:hover{background:#f2f7ff}
.future-date-title{display:flex;gap:8px;align-items:center;font-weight:800}
.future-meta{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.future-pill{display:inline-flex;padding:3px 8px;border-radius:999px;background:#eef5ff;color:#1d4ed8;font-size:12px;font-weight:700}
.future-pill.danger{background:#fef2f2;color:#dc2626}.future-pill.ok{background:#ecfdf5;color:#047857}
.future-date-body{padding:0 10px 8px}
.future-folded{border:1px dashed #cbd5e1;background:#f8fafc;border-radius:11px;padding:10px 12px;margin-top:10px;display:flex;justify-content:space-between;gap:10px;align-items:center;cursor:pointer}
.future-folded:hover{background:#f1f5f9}
.ops-middle-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:14px}
.ops-shortcuts{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}
.ops-shortcut{border:1px solid #e5e7eb;background:#fff;border-radius:10px;padding:11px;cursor:pointer;min-height:76px}
.ops-shortcut:hover{border-color:#93c5fd;background:#f8fbff}
.ops-shortcut b{display:block;font-size:13px;margin-top:6px}.ops-shortcut span{display:block;color:#64748b;font-size:11px;margin-top:3px}
.ex-assignment-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.ex-photo-picker{border:1px dashed #bfdbfe;background:#f8fbff;border-radius:11px;padding:12px}
.ex-photo-preview{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}
.ex-photo-preview-item{border:1px solid #e5e7eb;border-radius:9px;background:#fff;padding:7px;position:relative}
.ex-photo-preview-item img{display:block;width:100%;height:86px;object-fit:cover;border-radius:6px}
.ex-photo-remove{position:absolute;right:3px;top:3px;border:0!important;background:rgba(0,0,0,.65)!important;color:#fff!important;border-radius:999px!important;width:24px;height:24px;padding:0!important}
@media(max-width:1000px){.future-summary{grid-template-columns:repeat(2,1fr)}.ops-middle-grid{grid-template-columns:1fr}.ops-shortcuts{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.ex-assignment-grid{grid-template-columns:1fr}.ex-photo-preview{grid-template-columns:repeat(2,1fr)}}


/* ===== v2.5.0 计费 / 财务 ===== */
.billing-groups{display:flex;flex-direction:column;gap:14px}
.billing-group{background:#fff;border:1px solid #e5e7eb;border-radius:14px;overflow:hidden}
.billing-group-head{padding:13px 15px;background:#f8fafc;display:flex;justify-content:space-between;align-items:center;gap:10px}
.billing-rule-row{display:grid;grid-template-columns:1.2fr 1.35fr .9fr .8fr .8fr 1.2fr auto;gap:10px;align-items:center;padding:12px 15px;border-top:1px solid #eef2f7}
.rule-type{font-size:12px;padding:4px 7px;border-radius:999px;background:#eef5ff;color:#1d4ed8;display:inline-flex}
.finance-v25-row{display:grid;grid-template-columns:110px 140px 1.2fr 110px 100px 110px 110px 110px 110px auto;gap:8px;align-items:center;padding:10px 12px;border-bottom:1px solid #edf0f5;background:#fff}
.finance-v25-row.head{background:#f8fafc;color:#64748b;font-size:12px;font-weight:700;position:sticky;top:0;z-index:1}
.finance-v25-row .money{font-weight:800;text-align:right}
.finance-status-warn{color:#d97706;font-size:11px}
.finance-status-ok{color:#059669;font-size:11px}
.fin-kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin:12px 0}
.fin-kpi{background:#fff;border:1px solid #e5e7eb;border-radius:11px;padding:12px}
.fin-kpi span{font-size:12px;color:#64748b}.fin-kpi b{font-size:20px;display:block;margin-top:4px}
@media(max-width:1100px){.billing-rule-row{grid-template-columns:1fr 1fr 1fr}.finance-v25-row{grid-template-columns:repeat(4,1fr)}.fin-kpis{grid-template-columns:repeat(3,1fr)}}


/* ===== v2.5.1 客户中心 / 计费中心专业化 ===== */
.customer-list-card.v251{cursor:pointer;transition:.15s ease}.customer-list-card.v251:hover{border-color:#93c5fd;background:#fbfdff;transform:translateY(-1px)}
.customer-branch-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:9px;margin:14px 0}
.customer-branch{background:#fff;border:1px solid #e5e7eb;border-radius:11px;padding:12px;cursor:pointer}.customer-branch:hover{border-color:#93c5fd;background:#f8fbff}.customer-branch b{display:block;font-size:13px}.customer-branch span{display:block;font-size:11px;color:#64748b;margin-top:4px}
.billing-formula{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;background:#f8fafc;border:1px solid #e5e7eb;border-radius:8px;padding:8px;line-height:1.55;color:#334155}
.billing-param-tags{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}.billing-param-tag{font-size:11px;border:1px solid #dbeafe;background:#eff6ff;color:#1d4ed8;border-radius:999px;padding:3px 7px}
.billing-rule-card-v251{border-top:1px solid #eef2f7;padding:13px 15px;display:grid;grid-template-columns:1.05fr 1.3fr 1.7fr auto;gap:12px;align-items:start}
.billing-actions{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}.danger-outline{background:#fff!important;color:#dc2626!important;border:1px solid #fecaca!important}
@media(max-width:1100px){.customer-branch-grid{grid-template-columns:repeat(3,1fr)}.billing-rule-card-v251{grid-template-columns:1fr 1fr}}
@media(max-width:700px){.customer-branch-grid{grid-template-columns:1fr 1fr}.billing-rule-card-v251{grid-template-columns:1fr}}


/* ===== v2.5.2 计费模板验证生成 ===== */
.billing-builder{display:flex;flex-direction:column;gap:14px}.billing-stepbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.billing-step{padding:7px 11px;border-radius:999px;background:#eef2f7;color:#64748b;font-size:12px;font-weight:700}.billing-step.active{background:#1677ff;color:#fff}
.billing-config,.billing-preview-card,.billing-generate{background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:16px}.billing-var-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}.billing-var-grid .wide2{grid-column:span 2}
.billing-preview-grid{display:grid;grid-template-columns:1fr 1.15fr;gap:14px}.billing-fee-row{display:grid;grid-template-columns:1.1fr 1.4fr .8fr;gap:10px;padding:10px;border-bottom:1px solid #eef2f7;align-items:center}.billing-fee-row.head{background:#f8fafc;color:#64748b;font-size:12px;font-weight:700}
.billing-result-total{font-size:28px;font-weight:900;color:#ef4444;text-align:right;margin-top:12px}.billing-formula-box{background:#eff6ff;border:1px solid #bfdbfe;border-radius:10px;padding:10px 12px;color:#1e40af;margin-top:10px}
.billing-template-row{display:grid;grid-template-columns:1.25fr .8fr 1fr .8fr .8fr auto;gap:10px;align-items:center;padding:11px;border-bottom:1px solid #eef2f7}.billing-status-active{color:#059669;font-weight:800}.billing-status-archived{color:#64748b}
@media(max-width:1100px){.billing-var-grid{grid-template-columns:repeat(3,1fr)}.billing-preview-grid{grid-template-columns:1fr}}@media(max-width:720px){.billing-var-grid{grid-template-columns:1fr 1fr}.billing-template-row{grid-template-columns:1fr 1fr}.billing-var-grid .wide2{grid-column:span 2}}


/* ===== v2.5.3 客户项目：关联现有项目 ===== */
.project-bind-toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.project-bind-list{max-height:420px;overflow:auto;border:1px solid #e5e7eb;border-radius:11px;background:#fff}
.project-bind-row{display:grid;grid-template-columns:34px 1.3fr 1fr .9fr;gap:10px;align-items:center;padding:11px 12px;border-bottom:1px solid #eef2f7}
.project-bind-row:last-child{border-bottom:0}
.project-bind-row:hover{background:#f8fbff}
.project-bind-row.disabled{opacity:.55;background:#f8fafc}
.project-bind-owner{font-size:12px;color:#64748b}
.project-mode-tabs{display:flex;gap:8px;margin-bottom:12px}
.project-mode-tab{padding:8px 14px;border-radius:9px;border:1px solid #dbe3ee;background:#fff;cursor:pointer;font-weight:700}
.project-mode-tab.active{background:#1677ff;color:#fff;border-color:#1677ff}


.bill-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
.bill-tab{padding:9px 14px;border-radius:9px;border:1px solid #dbe3ee;background:#fff;color:#334155;cursor:pointer;font-weight:700}
.bill-tab.active{background:#1677ff;color:#fff;border-color:#1677ff}
.builder-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:14px}
.builder-card{background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:16px}
.builder-param-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.formula-live{background:#0f172a;color:#fff;border-radius:12px;padding:16px;font-family:monospace;font-size:15px;line-height:1.7;min-height:86px}
.template-lib-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.template-lib-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:14px;cursor:pointer}
.template-lib-card:hover{border-color:#93c5fd;background:#f8fbff}
@media(max-width:1000px){.builder-grid{grid-template-columns:1fr}.template-lib-grid{grid-template-columns:1fr 1fr}}
@media(max-width:700px){.builder-param-grid,.template-lib-grid{grid-template-columns:1fr}}


/* ===== v2.5.5 计费中心：紧凑布局 / 折叠 / 导入导出 ===== */
.bill-shell{display:flex;flex-direction:column;gap:12px}
.bill-hero{background:linear-gradient(135deg,#12254d,#2447a8);color:#fff;border-radius:14px;padding:16px 18px;display:flex;justify-content:space-between;gap:12px;align-items:center}
.bill-hero h2{margin:0;font-size:24px}.bill-hero .sub{opacity:.82;margin-top:4px;font-size:13px}
.bill-top-actions{display:flex;gap:8px;flex-wrap:wrap}
.bill-tabs{display:flex;gap:6px;flex-wrap:wrap;padding:6px;background:#eef2f7;border-radius:12px;width:max-content;max-width:100%}
.bill-tab{padding:8px 13px;border-radius:8px;border:0;background:transparent;color:#475569;cursor:pointer;font-weight:700}
.bill-tab.active{background:#fff;color:#1677ff;box-shadow:0 1px 4px rgba(15,23,42,.08)}
.bill-section{background:#fff;border:1px solid #e5e7eb;border-radius:13px;overflow:hidden}
.bill-section-head{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:13px 15px;background:#fafbfc;border-bottom:1px solid #eef2f7}
.bill-section-head h3{margin:0;font-size:16px}
.bill-section-body{padding:14px 15px}
.bill-collapse-btn{border:0!important;background:transparent!important;color:#64748b!important;padding:4px 7px!important}
.bill-compact-note{font-size:12px;color:#64748b;margin-top:3px}
.bill-kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}
.bill-kpi{border:1px solid #e5e7eb;border-radius:10px;padding:10px 12px;background:#fff}
.bill-kpi span{font-size:11px;color:#64748b}.bill-kpi b{display:block;font-size:19px;margin-top:3px}
.template-lib-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:9px}
.template-lib-card{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:11px;cursor:pointer;min-height:82px}
.template-lib-card b{font-size:13px;margin-bottom:4px}.template-lib-card .muted{font-size:11px}
.template-lib-card:hover{border-color:#93c5fd;background:#f8fbff}
.bill-toolbar{display:grid;grid-template-columns:1.3fr .8fr .8fr auto;gap:8px;align-items:center}
.bill-table-wrap{overflow:auto;max-height:520px;border:1px solid #eef2f7;border-radius:10px}
.bill-table-wrap table{margin:0}.bill-table-wrap th{position:sticky;top:0;background:#f8fafc;z-index:1}
.builder-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(360px,.95fr);gap:12px}
.builder-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:14px;min-width:0}
.builder-card h3{margin-top:0}
.builder-param-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.formula-live{background:#0f172a;color:#e2e8f0;border-radius:10px;padding:14px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px;line-height:1.65;min-height:72px}
.advanced-toggle{display:flex;justify-content:space-between;align-items:center;gap:10px;border:1px solid #e5e7eb;border-radius:10px;padding:10px 12px;background:#f8fafc;cursor:pointer}
.advanced-panel{display:none;margin-top:8px}.advanced-panel.open{display:block}
.verify-layout{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:12px}
.verify-result-card{border:1px solid #e5e7eb;border-radius:12px;padding:14px;background:#fff}
.import-drop{border:1px dashed #93c5fd;background:#f8fbff;border-radius:11px;padding:16px;text-align:center}
.import-preview{max-height:300px;overflow:auto;border:1px solid #e5e7eb;border-radius:10px;margin-top:10px}
@media(max-width:1180px){.template-lib-grid{grid-template-columns:repeat(3,1fr)}.bill-kpi-row{grid-template-columns:repeat(2,1fr)}}
@media(max-width:900px){.builder-grid,.verify-layout{grid-template-columns:1fr}.bill-toolbar{grid-template-columns:1fr 1fr}.template-lib-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:620px){.bill-toolbar,.builder-param-grid,.template-lib-grid,.bill-kpi-row{grid-template-columns:1fr}}


/* ===== v2.5.6 后台长页面固定表头 / 操作区优化 ===== */

/* 页面标题本身原来已经 sticky，这里统一层级与背景 */
main>h1{
  z-index:60;
  box-shadow:0 1px 0 rgba(15,23,42,.04);
}

/* 大多数模块的首屏操作区固定在页面标题下方 */
#c>.v2-hero:first-child,
#c>.taskbar:first-child{
  position:sticky;
  top:72px;
  z-index:48;
  padding-top:8px;
  padding-bottom:8px;
}
#c>.taskbar:first-child{
  background:#f5f7fa;
}
#c>.v2-hero:first-child{
  background:linear-gradient(135deg,#0f172a,#1e40af);
  color:#fff;
}

/* v2-hero 自身有背景，外层固定时去掉多余间隙 */
#c>.v2-hero:first-child{
  margin-top:0;
}

/* 计费中心：顶部业务区整体冻结，避免下滑后失去导入/导出/页签 */
.billing-sticky-v256{
  position:sticky;
  top:72px;
  z-index:52;
  background:#f5f7fa;
  padding:6px 0 8px;
  margin-bottom:4px;
  box-shadow:0 8px 14px rgba(245,247,250,.92);
}
.billing-sticky-v256 .bill-hero{margin-bottom:9px}
.billing-sticky-v256 .bill-kpi-row{margin-bottom:8px}
.billing-sticky-v256 .bill-tabs{margin:0}

/* 固定区域高度控制，避免占据过多可视区 */
.billing-sticky-v256 .bill-hero{padding:12px 16px}
.billing-sticky-v256 .bill-hero h2{font-size:21px}
.billing-sticky-v256 .bill-kpi{padding:8px 10px}
.billing-sticky-v256 .bill-kpi b{font-size:17px}

/* 长表格统一在模块内部滚动，表头固定 */
#taskTableWrap,
#driverTableWrap,
#vehicleTableWrap,
#projectTableWrap,
#storeTableWrap,
#warehouseTableWrap,
#alertTableWrap,
#penaltyTableWrap{
  max-height:calc(100vh - 270px);
  overflow:auto;
  border:1px solid #e5e7eb;
  border-radius:12px;
  background:#fff;
}

#taskTableWrap table,
#driverTableWrap table,
#vehicleTableWrap table,
#projectTableWrap table,
#storeTableWrap table,
#warehouseTableWrap table,
#alertTableWrap table,
#penaltyTableWrap table{
  margin:0;
}

#taskTableWrap tr:first-child th,
#driverTableWrap tr:first-child th,
#vehicleTableWrap tr:first-child th,
#projectTableWrap tr:first-child th,
#storeTableWrap tr:first-child th,
#warehouseTableWrap tr:first-child th,
#alertTableWrap tr:first-child th,
#penaltyTableWrap tr:first-child th{
  position:sticky;
  top:0;
  z-index:8;
  background:#f8fafc;
  box-shadow:0 1px 0 #e5e7eb;
}

/* 原生 table-scroll 也统一限制高度，避免整页无限增长 */
.table-scroll{
  max-height:calc(100vh - 270px);
}
.table-scroll .sticky-head th,
.table-scroll tr:first-child th{
  position:sticky;
  top:0;
  z-index:8;
  background:#f8fafc;
}

/* 弹窗标题及关闭区固定，长表单滚动时仍能看到标题和关闭按钮 */
.modal>div{
  position:relative;
}
.modal>div>button[style*="float:right"]{
  position:sticky;
  top:0;
  z-index:12;
  float:none!important;
  margin-left:auto;
  display:block;
}
.modal>div>#mt{
  position:sticky;
  top:0;
  z-index:10;
  background:#fff;
  margin-top:-38px;
  padding:6px 90px 10px 0;
  border-bottom:1px solid #eef2f7;
}

/* 手机/窄屏不强制冻结太多区域 */
@media(max-width:820px){
  #c>.v2-hero:first-child,
  #c>.taskbar:first-child,
  .billing-sticky-v256{
    position:static;
    box-shadow:none;
  }
  #taskTableWrap,#driverTableWrap,#vehicleTableWrap,#projectTableWrap,
  #storeTableWrap,#warehouseTableWrap,#alertTableWrap,#penaltyTableWrap,
  .table-scroll{max-height:none}
}


/* ===== v2.6.0 统一修复深色业务头颜色 ===== */
.v2-hero,.bill-hero{
  background:linear-gradient(135deg,#0f172a,#1e40af)!important;
  color:#fff!important;
}
.v2-hero h2,.v2-hero h3,.v2-hero .sub,.bill-hero h2,.bill-hero .sub{color:#fff!important}
.v2-hero .sub,.bill-hero .sub{opacity:.82}
.v2-hero button:not(.btn-ghost),.bill-hero button:not(.btn-ghost){background:#1677ff;color:#fff}


.payroll-compose{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
@media(max-width:900px){.payroll-compose{grid-template-columns:1fr 1fr}}

/* ===== v2.6.3 页面滚动、未来计划详情、按钮间距统一优化 ===== */
html{scroll-behavior:auto}
body{overscroll-behavior-y:none}
main{
  scroll-behavior:auto;
  scrollbar-gutter:stable;
}
#c{padding-bottom:36px}

/* 取消 v2.5.6 对普通业务列表强制形成第二层滚动条。
   只保留真正需要的表格容器内部滚动，避免鼠标滚轮在父子容器间卡顿。 */
#taskTableWrap,
#driverTableWrap,
#vehicleTableWrap,
#projectTableWrap,
#storeTableWrap,
#warehouseTableWrap,
#alertTableWrap,
#penaltyTableWrap{
  max-height:none!important;
  overflow:visible!important;
  border:0!important;
}
.table-scroll{
  max-height:none!important;
  overflow-x:auto!important;
  overflow-y:visible!important;
}

/* 财务/模板这类超长表仍可局部滚动，但高度更大，减少滚轮频繁切换容器 */
.bill-table-wrap{
  max-height:68vh;
  overscroll-behavior:contain;
  scrollbar-gutter:stable;
}

/* 运营工作台不制造内部纵向滚动 */
.ops-v240,.future-pool,.future-date-card,.ops-card{
  overflow:visible;
}

/* 所有操作按钮有清晰间距，不再挤成一团 */
.section-actions,
.ops-card-head,
.future-head,
.ops-topbar,
.modal-actions{
  gap:10px!important;
}
td button+button,
.future-meta button+button,
.plan-row button+button,
.bill-top-actions button+button{
  margin-left:6px!important;
}
button,.smallbtn{
  min-height:34px;
}
.smallbtn{
  padding-left:11px!important;
  padding-right:11px!important;
}

/* 未来计划日期汇总行：明确可点击 */
.future-date-head{
  cursor:pointer;
  transition:background .15s ease,border-color .15s ease;
  border-radius:10px;
  padding:11px 12px;
}
.future-date-head:hover{
  background:#f8fbff;
}
.future-date-head:focus-visible{
  outline:2px solid #1677ff;
  outline-offset:2px;
}
.future-date-open{
  display:inline-flex;
  align-items:center;
  padding:4px 8px;
  border-radius:7px;
  background:#eef5ff;
  color:#1677ff;
  font-size:12px;
  font-weight:700;
  white-space:nowrap;
}
.future-date-toggle{
  width:30px;
  height:30px;
  border:1px solid #dbe3ee;
  border-radius:8px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  background:#fff;
  color:#64748b;
  margin-left:4px;
}
.future-date-detail-list{
  display:flex;
  flex-direction:column;
  gap:10px;
}
.future-date-detail-item{
  border:1px solid #e5e7eb;
  border-radius:12px;
  padding:12px;
  background:#fff;
}
.future-date-detail-top{
  display:flex;
  justify-content:space-between;
  gap:12px;
  align-items:flex-start;
}
.future-date-detail-actions{
  display:flex;
  flex-wrap:wrap;
  justify-content:flex-end;
  gap:8px;
  margin-top:10px;
}

/* 固定标题更轻，减少滚动时大面积重绘 */
#c>.v2-hero:first-child,
#c>.taskbar:first-child,
.billing-sticky-v256{
  box-shadow:0 2px 8px rgba(15,23,42,.06)!important;
}

/* 横向滚动区用更稳定的触控/滚轮行为 */
.bill-table-wrap,.table-scroll,.project-bind-list{
  -webkit-overflow-scrolling:touch;
}

@media(max-width:820px){
  .future-date-detail-top{flex-direction:column}
  .future-date-detail-actions{justify-content:flex-start}
}


/* ===== v2.6.3.1 未来计划日期行点击展开修复 ===== */
.future-date-head{
  user-select:none;
}
.future-date-head.is-open{
  background:#eef5ff!important;
  box-shadow:inset 0 0 0 1px #bfdbfe;
}
.future-inline-summary{
  display:flex;
  flex-wrap:wrap;
  gap:14px;
  align-items:center;
  padding:10px 12px;
  margin:0 0 8px;
  border:1px solid #dbeafe;
  border-radius:10px;
  background:#f8fbff;
  font-size:13px;
}
.future-date-body{
  padding-top:8px;
}
.future-date-open,.future-date-toggle{
  pointer-events:none;
}


/* ===== v2.6.3.2 首页未来计划统计卡片可点击 ===== */
.future-stat-click{
  cursor:pointer;
  position:relative;
  transition:transform .12s ease,box-shadow .12s ease,border-color .12s ease,background .12s ease;
  user-select:none;
}
.future-stat-click:hover{
  transform:translateY(-1px);
  border-color:#93c5fd!important;
  box-shadow:0 5px 14px rgba(15,23,42,.08);
  background:#fbfdff;
}
.future-stat-click:active{
  transform:translateY(0);
}
.future-stat-click:focus-visible{
  outline:2px solid #1677ff;
  outline-offset:2px;
}
.future-stat-click em{
  display:block;
  margin-top:5px;
  font-size:11px;
  font-style:normal;
  color:#1677ff;
  font-weight:700;
}
.future-summary-mini{
  display:flex;
  gap:14px;
  flex-wrap:wrap;
  align-items:center;
}
.future-summary-project-row{
  display:grid;
  grid-template-columns:minmax(220px,1.4fr) minmax(180px,.8fr) auto;
  gap:12px;
  align-items:center;
  padding:10px 0;
  border-top:1px solid #eef2f7;
}
.future-summary-project-num{
  display:flex;
  gap:10px;
  flex-wrap:wrap;
}
@media(max-width:820px){
  .future-summary-project-row{grid-template-columns:1fr}
}


.e6-kpi-click{cursor:pointer;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;user-select:none}
.e6-kpi-click:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(15,23,42,.10)}
.e6-kpi-click.active{outline:2px solid #2563eb;outline-offset:1px;box-shadow:0 0 0 4px rgba(37,99,235,.08)}
.e6-kpi-click.active span:after{content:' · 已筛选';font-size:12px;color:#2563eb;font-weight:700}

/* ===== v2.6.3.29 企业级浅色 UI 2.0 ===== */
:root{
  --ui-blue:#1677ff;
  --ui-blue-2:#4096ff;
  --ui-bg:#f4f8fc;
  --ui-card:#ffffff;
  --ui-text:#17233c;
  --ui-muted:#6f7f95;
  --ui-line:#e6edf5;
  --ui-soft:#f7faff;
  --ui-shadow:0 8px 24px rgba(31,68,113,.065);
}
body{
  font-family:Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;
  background:var(--ui-bg);
  color:var(--ui-text);
}
.login{
  background:
    radial-gradient(circle at 80% 10%,rgba(22,119,255,.15),transparent 28%),
    linear-gradient(135deg,#f7fbff,#eaf4ff);
}
.login .box{
  border:1px solid var(--ui-line);
  box-shadow:0 24px 70px rgba(38,85,135,.16);
}
.app{background:var(--ui-bg)}
aside{
  width:218px;
  min-width:218px;
  background:#fff;
  color:var(--ui-text);
  border-right:1px solid var(--ui-line);
  box-shadow:4px 0 18px rgba(32,70,110,.035);
}
aside>h3{
  position:relative;
  background:#fff;
  color:#12335f;
  border-bottom:1px solid var(--ui-line);
  padding:22px 16px 19px 54px;
  font-size:17px;
  letter-spacing:.01em;
}
aside>h3:before{
  content:"T";
  position:absolute;
  left:15px;top:15px;
  width:31px;height:31px;
  display:grid;place-items:center;
  border-radius:10px;
  color:#fff;
  font-size:17px;
  font-weight:900;
  background:linear-gradient(135deg,var(--ui-blue),#55a8ff);
  box-shadow:0 6px 14px rgba(22,119,255,.25);
}
aside>h3:after{
  content:"TRANSPORTATION MANAGEMENT";
  display:block;
  margin-top:4px;
  color:#9aa9bc;
  font-size:7px;
  letter-spacing:.09em;
  font-weight:600;
}
nav{
  padding:10px 9px 18px;
  scrollbar-color:#c9d7e7 transparent;
}
nav::-webkit-scrollbar-thumb{background:#c9d7e7}
.nav-group{margin:4px 0 10px}
.nav-title{
  padding:8px 10px 5px;
  color:#91a0b3;
  background:transparent;
  font-size:11px;
  letter-spacing:.08em;
}
.nav-title:hover{background:#f6f9fc;color:#63748b}
.nav-items{padding:1px 0}
nav button{
  color:#50627a;
  padding:10px 11px;
  border-radius:9px;
  font-size:13px;
  margin:2px 0;
  position:relative;
}
nav button:hover{
  background:#f0f6ff;
  color:#1769d3;
}
nav button.active{
  background:linear-gradient(90deg,#e9f3ff,#f4f9ff);
  color:#1268d8;
  font-weight:700;
  box-shadow:inset 3px 0 0 var(--ui-blue);
}
.nav-user{
  background:#fff;
  border-top:1px solid var(--ui-line);
  color:#53657b;
  padding:12px 14px 14px;
}
.nav-user .muted{color:#93a2b5!important}
.nav-user button{
  background:#f3f7fb;
  color:#566b83;
  border:1px solid var(--ui-line);
  padding:8px 10px;
}
.nav-user button:hover{background:#eaf3ff;color:#1769d3}
main{
  background:
    radial-gradient(circle at 100% 0,rgba(22,119,255,.045),transparent 25%),
    var(--ui-bg);
  padding:0 22px 32px;
}
main>h1{
  margin:0 -22px 20px;
  padding:19px 22px 15px;
  min-height:64px;
  display:flex;
  align-items:center;
  color:#172b4d;
  font-size:21px;
  font-weight:800;
  background:rgba(255,255,255,.93);
  backdrop-filter:blur(14px);
  border-bottom:1px solid var(--ui-line);
  box-shadow:0 2px 10px rgba(40,70,105,.025);
}
main>h1:after{
  content:"TMS · 企业运输数字化平台";
  margin-left:auto;
  color:#9aa9bb;
  font-size:11px;
  font-weight:500;
  letter-spacing:.03em;
}
.box,.card{
  border-radius:14px;
  border:1px solid var(--ui-line);
  box-shadow:var(--ui-shadow);
}
.card{padding:18px}
.cards{gap:12px}
.cards>.card{
  position:relative;
  overflow:hidden;
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;
}
.cards>.card:hover{
  transform:translateY(-2px);
  border-color:#cfe2fb;
  box-shadow:0 12px 28px rgba(31,68,113,.09);
}
table{
  border:1px solid var(--ui-line);
  border-radius:12px;
  overflow:hidden;
  box-shadow:0 4px 16px rgba(35,67,100,.035);
}
th{
  background:#f7faff;
  color:#60728a;
  font-size:12px;
  font-weight:700;
  border-bottom:1px solid var(--ui-line);
}
td{
  color:#34465e;
  border-bottom:1px solid #edf2f7;
}
tbody tr{transition:background .15s ease}
tbody tr:hover td{background:#f8fbff}
input,select,textarea{
  border:1px solid #dbe5ef;
  background:#fff;
  color:#273950;
  border-radius:9px;
  transition:.16s ease;
}
input:focus,select:focus,textarea:focus{
  outline:none;
  border-color:#77b5ff;
  box-shadow:0 0 0 3px rgba(22,119,255,.09);
}
button{
  border-radius:9px;
  background:linear-gradient(135deg,var(--ui-blue),#2d8cff);
  box-shadow:0 3px 8px rgba(22,119,255,.13);
  transition:.16s ease;
}
button:hover:not(:disabled){filter:brightness(.98);transform:translateY(-1px)}
.smallbtn{
  background:#fff;
  color:#41607e;
  border:1px solid #dce6f0;
  box-shadow:none;
}
.smallbtn:hover{border-color:#a9cdf7;color:#1769d3;background:#f7fbff}
.toolbar{
  background:#fff;
  border:1px solid var(--ui-line);
  padding:10px;
  border-radius:12px;
  box-shadow:0 4px 15px rgba(35,67,100,.03);
}
.toolbar input,.toolbar select{margin:0}
.modal{background:rgba(15,32,52,.38);backdrop-filter:blur(3px)}
.modal>div{
  border:1px solid var(--ui-line);
  box-shadow:0 28px 80px rgba(24,52,84,.22);
  border-radius:16px;
}
.section-note{
  background:#f8fbff;
  border-color:#cfe0f3;
  color:#657991;
}
.permission-item{
  border-color:var(--ui-line);
  background:#fbfdff;
}
.ops-topbar{
  background:linear-gradient(135deg,#fff,#f7fbff);
  border:1px solid var(--ui-line);
  border-radius:14px;
  padding:14px 16px;
  box-shadow:var(--ui-shadow);
}
.ops-kpi,.ops-card,.dispatch-card,.finance-kpi{
  border-color:var(--ui-line)!important;
  box-shadow:0 6px 20px rgba(31,68,113,.045)!important;
}
.e6-kpi-click{
  border-color:var(--ui-line)!important;
  background:linear-gradient(180deg,#fff,#fbfdff)!important;
}
.e6-kpi-click:hover{
  border-color:#bdd9fb!important;
  box-shadow:0 10px 24px rgba(22,119,255,.09)!important;
}
.e6-kpi-click.active{
  border-color:#73b1fa!important;
  box-shadow:0 0 0 3px rgba(22,119,255,.08),0 8px 20px rgba(22,119,255,.08)!important;
}
.muted{color:var(--ui-muted)}
.status-active{color:#07956f}.status-disabled{color:#d84646}
@media(max-width:900px){
  aside{width:190px;min-width:190px}
  main{padding:0 14px 20px}
  main>h1{margin:0 -14px 16px;padding:17px 14px 13px}
  main>h1:after{display:none}
}
