/* 在原型样式基础上，为真实业务增加的样式 */
.login-page{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 20% 10%,#e3f4ee 0,transparent 45%),linear-gradient(160deg,#f7faf9,#eef5f2)}
.login-card{width:400px;max-width:92vw;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 20px 60px #17372f14;padding:38px 36px 30px}
.login-card .brand{height:auto;padding:0 0 22px}
.login-card h1{font-size:22px;margin:0 0 6px}
.login-card p{margin:0 0 24px;color:var(--muted);font-size:12px}
.login-card .field{margin-bottom:16px}
.login-card button.primary{width:100%;height:42px;font-size:14px}
.login-foot{margin-top:20px;font-size:11px;color:#a5b0b3;text-align:center}
.field input[type=checkbox]{width:auto}
.user{cursor:pointer;position:relative}
.user-menu{position:absolute;right:0;top:40px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 10px 30px #17372f1a;min-width:150px;z-index:40;padding:6px}
.user-menu button{width:100%;justify-content:flex-start;border:0;min-height:34px}
.leaflet-map{width:100%;height:100%;background:#e9ede6}
.leaflet-container{font:inherit}
.pin{width:28px;height:32px;background:var(--green);border:3px solid #fff;border-radius:15px 15px 15px 3px;box-shadow:0 3px 6px #0b665342;transform:rotate(-45deg);display:grid;place-items:center}
.pin span{transform:rotate(45deg);font:700 9px Arial;color:#fff}
.pin.nophoto{background:#d8a548}
.pin.selected{background:#004d43;box-shadow:0 0 0 6px #009b7533,0 3px 8px #0039}
.pin-label{background:#fff;border:1px solid #cfe2db;border-radius:3px;padding:0 4px;font:600 11px Arial;color:#0f5a4f;white-space:nowrap;box-shadow:0 1px 3px #0002}
.map-banner{position:absolute;left:50%;top:14px;transform:translateX(-50%);z-index:500;background:#fff;border:1px solid #cfe2db;border-radius:8px;box-shadow:0 6px 20px #14472c22;padding:10px 14px;display:flex;gap:8px;align-items:center;font-size:12px;flex-wrap:wrap;max-width:94%}
.map-banner input{width:120px;height:32px;padding:4px 8px;font-size:12px}
.map-top-tools{position:absolute;right:12px;top:12px;z-index:500;display:flex;gap:6px}
.map-top-tools button{min-height:32px;font-size:12px;box-shadow:0 2px 8px #0001}
.map-top-tools button.active{color:#fff;background:var(--green);border-color:var(--green)}
.map-wrap .map-popup{z-index:600}
.map-nokey{position:absolute;left:12px;bottom:12px;z-index:500;background:#fff7e9;color:#a87237;font-size:11px;padding:7px 10px;border-radius:6px;max-width:60%}
.cabinet-item .badge{font-weight:400}
.check-col{width:36px}
td input[type=checkbox],th input[type=checkbox]{accent-color:var(--green);width:15px;height:15px}
.pill-group{display:flex;gap:6px;flex-wrap:wrap}
.pill-group label{border:1px solid #e1e8e5;border-radius:16px;padding:4px 11px;font-size:12px;cursor:pointer;display:flex;gap:5px;align-items:center}
.pill-group label.on{border-color:var(--green);background:#eef8f4;color:var(--green)}
.district-checks{max-height:220px;overflow:auto;border:1px solid var(--line);border-radius:6px;padding:8px;display:grid;grid-template-columns:1fr 1fr;gap:4px 10px;font-size:12px}
.district-checks label{display:flex;gap:6px;align-items:center}
.batch-bar{display:flex;align-items:center;gap:10px;padding:10px 20px;background:#f2faf7;border-top:1px solid var(--line);font-size:12px;color:#4b6d63}
.photo-pair{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:10px 10px 0}
.photo-slot{height:150px;border-radius:6px;background:#f5f8f7;border:1px dashed #cfe0d9;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:6px;color:#89a49a;font-size:11px;position:relative;overflow:hidden}
.photo-slot img{width:100%;height:100%;object-fit:cover;cursor:zoom-in}
.photo-slot .tag{position:absolute;left:6px;top:6px;background:#0008;color:#fff;font-size:10px;padding:1px 6px;border-radius:3px}
.photo-slot .more{position:absolute;right:6px;top:6px;background:#fff;color:#0f5a4f;font-size:10px;padding:1px 6px;border-radius:3px}
.photo-slot.missing{border-color:#efd3a1;background:#fffaf1;color:#c39a4b}
.photo-actions{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:11px}
.photo-actions a,.photo-actions .text-btn{font-size:11px}
.file-btn{position:relative;overflow:hidden}
.file-btn input{position:absolute;inset:0;opacity:0;cursor:pointer}
a{color:var(--green)}
.status-new{background:#eef8f2;color:#29917a}.status-update{background:#eef4ff;color:#5f84c4}.status-same{background:#f3f5f4;color:#8b969b}.status-error{background:#fff1ee;color:#c0533a}
.err-text{color:#c0533a;font-size:11px;white-space:normal}.warn-text{color:#b78538;font-size:11px;white-space:normal}
.mode-choose{display:flex;gap:18px;font-size:12px;margin:12px 0}
.mode-choose label{display:flex;gap:6px;align-items:center}
.small-table td{height:40px}
.empty-state{padding:60px 20px;text-align:center;color:#8d9f97}
.empty-state .icon{width:36px;height:36px;color:#9cc4b7;margin-bottom:10px}
.drawer-photo .ph{width:100%;height:127px;object-fit:cover;border-radius:6px;background:#f4f7f6;display:grid;place-items:center;color:#a6b8b0;font-size:11px}
.kv{display:flex;gap:8px;font-size:12px;color:#6f817b;margin:4px 0}.kv b{color:#384e48;font-weight:500}
.spinner{width:18px;height:18px;border:2px solid #cfe2db;border-top-color:var(--green);border-radius:50%;animation:spin .8s linear infinite;display:inline-block}
@keyframes spin{to{transform:rotate(360deg)}}
.loading{padding:50px;text-align:center;color:#8d9f97;font-size:12px}
.danger{color:#c0533a}
button.danger-btn{color:#fff;background:#c0533a;border-color:#c0533a}
.log-detail{white-space:normal;max-width:420px}
.tip{font-size:11px;color:#9aa6a9}
a.nav-item{align-items:center}
.donut-inner strong{font-size:19px}
.map-nokey{left:60px;top:12px;bottom:auto;max-width:50%}
.pin{width:22px;height:26px;border-radius:12px 12px 12px 2px;border-width:2px}
.pin span{display:none}
.drawer-photo .ph{display:flex!important;align-items:center;justify-content:center;margin:0}

.map-nokey{top:auto!important;bottom:40px!important;left:12px!important}
/* 地图放进独立层叠上下文，避免标注和按钮压在弹窗上面 */
.map-wrap,.leaflet-map{isolation:isolate}
.leaflet-map{position:relative;z-index:0}
.drawer-backdrop,.modal-backdrop{z-index:3000!important}
#toast{z-index:4000!important}
