/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.start{inset-inline-start:var(--spacing)}.grid{display:grid}.hidden{display:none}.table{display:table}.outline{outline-style:var(--tw-outline-style);outline-width:1px}}:root{--navy:#14283b;--ink:#18242f;--muted:#71808e;--line:#e3e8ec;--paper:#fff;--bg:#f3f5f7;--teal:#159a8c;--orange:#e88933}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);margin:0;font-family:Microsoft YaHei,PingFang SC,Arial,sans-serif}.app-shell{min-height:100vh}.topbar{border-bottom:1px solid var(--line);z-index:5;background:#fff;align-items:center;height:72px;padding:0 28px;display:flex;position:sticky;top:0}.brand{align-items:center;gap:11px;min-width:230px;display:flex}.brand-mark{background:var(--navy);color:#fff;letter-spacing:-1px;border-radius:9px;place-items:center;width:39px;height:39px;font-weight:900;display:grid}.brand b{font-size:18px;display:block}.brand small{letter-spacing:1.5px;color:#91a0ad;font:9px/1.2 Arial;display:block}.view-switch{background:#edf0f2;border-radius:9px;margin:auto;padding:4px;display:flex}.view-switch button{color:#687683;cursor:pointer;background:0 0;border:0;border-radius:7px;padding:9px 18px}.view-switch .chosen{color:var(--navy);background:#fff;font-weight:700;box-shadow:0 1px 6px #12283b18}.user{text-align:right;min-width:230px;font-size:13px}.user i{background:#eaf0f3;border-radius:50%;place-items:center;width:34px;height:34px;margin-left:10px;font-style:normal;display:inline-grid}.online-dot{background:#21ad75;border-radius:50%;width:7px;height:7px;margin-right:7px;display:inline-block}.admin-layout{grid-template-columns:210px 1fr;min-height:calc(100vh - 72px);display:grid}aside{border-right:1px solid var(--line);background:#fff;padding:22px 14px}nav button{text-align:left;color:#596774;cursor:pointer;background:0 0;border:0;border-radius:8px;width:100%;height:46px;margin:3px 0;padding:0 15px;font-size:14px}nav button span{width:27px;font-size:18px;display:inline-block}nav button.active{background:var(--navy);color:#fff;font-weight:700}nav button em{float:right;color:#fff;background:#e57a2b;border-radius:10px;padding:2px 7px;font-size:10px;font-style:normal}.aside-help{background:#f5f7f8;border-radius:9px;width:180px;padding:14px;font-size:12px;position:absolute;bottom:22px}.aside-help p{color:#6b7882;margin:7px 0;line-height:1.8}.aside-help span{color:#168a65}.workspace{min-width:0;padding:28px 30px 50px}.page-head{justify-content:space-between;align-items:end;margin-bottom:20px;display:flex}.page-head p{color:#7c8994;margin:0;font-size:12px}.page-head h1{margin:3px 0 0;font-size:27px}.primary,.mini-primary{background:var(--orange);color:#fff;cursor:pointer;border:0;border-radius:7px;padding:12px 18px;font-weight:700}.stats{grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px;display:grid}.stats article{border:1px solid var(--line);background:#fff;border-radius:10px;align-items:center;gap:13px;padding:17px;display:flex}.stat-icon{border-radius:9px;place-items:center;width:44px;height:44px;font-weight:900;display:grid}.amber{color:#d87d20;background:#fff2df}.blue{color:#3a78b5;background:#e7f0fa}.green{color:#228562;background:#e4f4ec}.red{color:#cc5b49;background:#fceae7}.stats small{color:#778590;font-size:11px;display:block}.stats strong{font-size:25px}.stats p{color:#89959e;margin:1px 0;font-size:10px}.stats p b{color:#d46f25}.content-grid{grid-template-columns:minmax(650px,1fr) 310px;gap:16px;display:grid}.panel{border:1px solid var(--line);background:#fff;border-radius:10px;overflow:hidden}.panel-title{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;min-height:64px;padding:13px 17px;display:flex}.panel-title h2{margin:0;font-size:16px}.panel-title span{color:#87949e;font-size:10px}.search{color:#89949c;border:1px solid #d8dfe4;border-radius:6px;align-items:center;width:250px;height:35px;padding:0 10px;display:flex}.search input{border:0;outline:0;width:100%;padding-left:8px;font-size:11px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;font-size:11px}th{text-align:left;color:#7b8994;white-space:nowrap;background:#fafbfb;padding:11px 10px}td{vertical-align:middle;border-top:1px solid #eef1f3;padding:13px 10px}tr{cursor:pointer}tbody tr:hover,tbody tr.selected{background:#f4faf9}td b,td small{display:block}td small{color:#87939c;margin-top:3px}.qty{justify-content:space-between;display:flex}.bar{background:#e5e9ec;border-radius:3px;height:4px;margin-top:6px}.bar i{background:var(--teal);border-radius:3px;height:100%;display:block}.status{white-space:nowrap;border-radius:12px;padding:5px 9px}.status.加工中{color:#b76a24;background:#fff0df}.detail{border-right:1px solid var(--line);padding:0}.detail .panel-title button{background:0 0;border:0}.cargo{background:#f7f9fa;border-radius:8px;justify-content:space-between;margin:15px;padding:17px;display:flex}.cargo small{color:#85919a;font-size:10px}.cargo h3{margin:5px 0;font-size:14px}.cargo p{color:#77858f;margin:0;font-size:10px}.cargo>b{color:var(--teal);align-self:center;font-size:24px}.cargo>b small{display:inline}.route-title{justify-content:space-between;padding:4px 18px 8px;font-size:12px;display:flex}.route-title span{color:#76838d;font-size:10px}.timeline{padding:0 18px}.timeline>div{gap:11px;min-height:52px;display:flex;position:relative}.timeline>div:not(:last-child):before{content:"";border-left:1px solid #d7dde1;height:29px;position:absolute;top:25px;left:12px}.timeline i{color:#87939b;background:#e8ecef;border-radius:50%;place-items:center;width:25px;height:25px;font-size:10px;font-style:normal;display:grid}.timeline .done i{color:#17816e;background:#def2ed}.timeline .active i{background:var(--orange);color:#fff}.timeline p{margin:1px 0}.timeline b,.timeline small{font-size:11px;display:block}.timeline small{color:#87939c;margin-top:4px}.warning{border-left:3px solid var(--orange);background:#fff5e8;margin:8px 15px;padding:12px;font-size:11px}.warning p{color:#7b7065;margin:5px 0 0;line-height:1.5}.outline{color:#425360;background:#fff;border:1px solid #ccd5db;border-radius:6px;width:calc(100% - 30px);margin:0 15px 15px;padding:10px}.worker-stage{background:linear-gradient(135deg,#eef1f3 0 58%,#e3e8eb 58%);justify-content:center;align-items:center;gap:70px;min-height:calc(100vh - 72px);padding:35px;display:flex}.phone{background:#f3f5f6;border:9px solid #1d2933;border-radius:35px;width:375px;height:760px;position:relative;overflow:hidden;box-shadow:0 25px 70px #20313c30}.phone-status{background:#fff;justify-content:space-between;height:28px;padding:7px 21px;font:10px Arial;display:flex}.mini-head{background:#fff;justify-content:space-between;align-items:center;padding:11px 19px 15px;display:flex}.mini-head small{color:#83909a}.mini-head h2{margin:3px 0;font-size:18px}.mini-head i{background:var(--navy);color:#fff;border-radius:50%;place-items:center;width:42px;height:42px;font-style:normal;display:grid}.task-alert{background:var(--navy);color:#fff;border-radius:10px;align-items:center;gap:8px;margin:12px 14px;padding:13px 15px;display:flex}.task-alert span{opacity:.7;font-size:11px}.task-alert b{font-size:15px}.task-alert small{color:#ffc078;margin-left:auto}.mini-card,.action-card{background:#fff;border-radius:11px;margin:0 14px 12px;padding:15px;box-shadow:0 1px 4px #22313d0d}.mini-label{justify-content:space-between;display:flex}.mini-label span{color:#187e70;background:#dff2ee;border-radius:4px;padding:3px 7px;font-size:10px}.mini-label b{color:#7a8791;font-size:10px}.mini-card h3{margin:11px 0 3px;font-size:16px}.mini-card>p{color:#7d8a94;margin:0;font-size:10px}.from-to{justify-content:space-between;align-items:center;margin:14px 0;display:flex}.from-to div{align-items:center;gap:6px;display:flex}.from-to i{background:#e7edef;border-radius:50%;place-items:center;width:23px;height:23px;font-size:10px;font-style:normal;display:grid}.from-to small,.from-to b{font-size:9px;display:block}.from-to b{margin-top:2px;font-size:10px}.from-to em{color:#a0aab1}.mini-progress{background:#e8ecee;border-radius:5px;height:24px;position:relative;overflow:hidden}.mini-progress>span{background:#cfe9e4;height:100%;display:block}.mini-progress b,.mini-progress small{font-size:9px;position:absolute;top:6px}.mini-progress b{left:8px}.mini-progress small{color:#bb6825;right:8px}.steps{justify-content:space-between;margin-bottom:12px;display:flex}.steps span{color:#a0a9b0;border-bottom:2px solid #dfe3e6;padding-bottom:7px;font-size:9px}.steps .on{color:var(--teal);border-color:var(--teal)}.location-box{background:#f4f7f8;border-radius:8px;padding:12px}.location-box b,.location-box small{font-size:11px;display:block}.location-box small{color:#7c8993;margin:5px 0 9px}.location-box button,.photo-btn{color:#405464;background:#fff;border:1px solid #cbd4da;border-radius:6px;width:100%;padding:10px}.mini-primary{width:100%;margin-top:11px;padding:13px}.count-label{justify-content:space-between;font-size:12px;font-weight:700;display:flex}.count-label small{color:#82909a;font-weight:400}.counter{justify-content:center;align-items:center;margin:12px 0;display:flex}.counter button{background:#f7f9fa;border:1px solid #d6dde2;width:40px;height:40px;font-size:20px}.counter input{text-align:center;border:1px solid #d6dde2;width:70px;height:40px;font-size:20px;font-weight:700}.counter span{margin-left:7px}.calculation{background:#f4f7f8;border-radius:7px;grid-template-columns:1fr 1fr;margin-bottom:10px;padding:9px;display:grid}.calculation span{padding:3px;font-size:9px}.photo-btn{margin-top:5px}.success-mark{color:#16866d;background:#daf0e9;border-radius:50%;place-items:center;width:48px;height:48px;margin:15px auto 8px;font-size:25px;display:grid}.center{text-align:center}.muted{color:#7f8b94;font-size:10px}.mini-nav{background:#fff;border-top:1px solid #e1e5e8;justify-content:space-around;align-items:center;height:58px;display:flex;position:absolute;bottom:0;left:0;right:0}.mini-nav span,.mini-nav b{text-align:center;color:#7c8992;font-size:17px}.mini-nav b{color:var(--teal)}.mini-nav small{margin-top:3px;font-size:9px;display:block}.phone-notes{background:0 0;border:0;width:330px}.phone-notes>span{color:var(--orange);letter-spacing:2px;font-size:12px;font-weight:700}.phone-notes h2{margin:10px 0;font-size:32px}.phone-notes p{color:#697883;line-height:1.8}.phone-notes ul{color:#40515d;padding-left:18px;line-height:2}@media (width<=1100px){.content-grid{grid-template-columns:1fr}.detail{display:none}.stats{grid-template-columns:1fr 1fr}}@media (width<=760px){.topbar{padding:0 12px}.brand{min-width:auto}.brand div,.user{display:none}.admin-layout{grid-template-columns:1fr}.admin-layout>aside{display:none}.workspace{padding:16px}.stats{grid-template-columns:1fr 1fr}.stats article{padding:10px}.content-grid{display:block}.page-head .primary{display:none}.search{width:190px}.worker-stage{padding:8px}.phone{border:0;border-radius:0;width:100%;height:calc(100vh - 80px)}.phone-notes{display:none}}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}[hidden]{display:none!important}.syncing{color:#fff;z-index:30;background:#14283b;border-radius:20px;padding:8px 13px;font-size:11px;position:fixed;top:82px;right:20px;box-shadow:0 5px 20px #14283b33}.toast-error{color:#a84232;z-index:40;background:#fff0ed;border:1px solid #f0c2ba;border-radius:8px;padding:11px 16px;position:fixed;top:82px;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #61201420}.toast-error button{color:inherit;cursor:pointer;background:0 0;border:0;margin-left:18px}.empty{text-align:center!important;color:#87939c!important;padding:45px!important}.search-page{padding-bottom:20px}.search-hero{color:#fff;background:linear-gradient(120deg,#14283b,#25445e);padding:28px}.search-hero h2{margin:0 0 5px;font-size:22px}.search-hero p{color:#b8cad8;margin:0 0 20px;font-size:12px}.big-search{color:#687783;background:#fff;border-radius:8px;align-items:center;max-width:680px;height:48px;padding:0 16px;display:flex}.big-search input{border:0;outline:0;width:100%;padding-left:10px;font-size:14px}.task-grid{grid-template-columns:repeat(3,minmax(240px,1fr));gap:15px;display:grid}.task-card{background:#fff;border:1px solid #e3e8ec;border-radius:10px;padding:17px}.task-card h3{margin:15px 0 4px;font-size:16px}.task-card>p{color:#7d8993;font-size:11px}.row{justify-content:space-between;align-items:center;display:flex}.task-state,.enabled{color:#187e70;background:#e5f3ef;border-radius:12px;padding:5px 9px;font-size:10px}.task-state.done{color:#327b52;background:#e8f2e9}.task-state.waiting,.enabled.off{color:#7d8993;background:#edf0f2}.task-route{background:#f5f7f8;border-radius:7px;justify-content:space-between;align-items:center;margin:13px 0;padding:12px 10px;font-size:10px;display:flex}.manage .link-btn{color:#167f72;cursor:pointer;background:0 0;border:0}.modal-backdrop{z-index:50;background:#12233380;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:14px;width:min(640px,100%);max-height:90vh;padding:22px;overflow:auto;box-shadow:0 30px 90px #0d1c2940}.modal-head{justify-content:space-between;align-items:start;margin-bottom:20px;display:flex}.modal-head h2{margin:4px 0;font-size:22px}.modal-head small{color:#169184}.modal-head>button{cursor:pointer;background:#edf1f3;border:0;border-radius:50%;width:32px;height:32px;font-size:20px}.form-grid{grid-template-columns:1fr 1fr;gap:14px;display:grid}.modal label{flex-direction:column;gap:7px;margin-bottom:14px;font-size:12px;font-weight:700;display:flex}.modal label.wide{grid-column:1/-1}.modal input,.modal select{height:42px;font:inherit;background:#fff;border:1px solid #d6dde2;border-radius:7px;padding:0 11px;font-weight:400}.modal-actions{border-top:1px solid #e8ecef;justify-content:flex-end;gap:10px;padding-top:16px;display:flex}.modal-actions button{cursor:pointer;background:#fff;border:1px solid #d6dde2;border-radius:7px;padding:10px 18px}.modal-actions .primary{background:#e88933;border-color:#e88933}.empty-phone{text-align:center;height:500px;padding:80px 30px}.status.待处理{color:#667580;background:#eef1f3}.status.运输中{color:#187b70;background:#e4f2f0}.status.已完成{color:#2d7d56;background:#e8f4ec}@media (width<=1000px){.task-grid{grid-template-columns:1fr 1fr}}@media (width<=650px){.task-grid,.form-grid{grid-template-columns:1fr}.modal label.wide{grid-column:auto}}.form-tip{color:#176f66;background:#edf8f6;border-radius:8px;grid-column:1/-1;margin:-2px 0 14px;padding:11px 13px;font-size:12px;line-height:1.6}.record-modal{width:min(820px,100%)}.route-summary{color:#6e7d88;flex-wrap:wrap;align-items:center;gap:8px;margin:-8px 0 18px;font-size:12px;display:flex}.route-summary span{background:#f0f3f5;border-radius:15px;padding:6px 10px}.record-list{flex-direction:column;gap:12px;display:flex}.record-stage{background:#fff;border:1px solid #dfe6ea;border-radius:10px;padding:15px 16px 15px 24px;position:relative}.record-stage:before{content:"";background:#199488;border-radius:50%;width:7px;height:7px;position:absolute;top:20px;left:8px;box-shadow:0 0 0 4px #dff3ef}.stage-head{justify-content:space-between;align-items:start;gap:12px;margin-bottom:10px;display:flex}.stage-head h3{margin:0 0 5px;font-size:15px}.stage-head p{color:#778590;margin:0;font-size:11px}.record-item{border-top:1px dashed #dfe5e8;margin-top:10px;padding-top:12px}.record-meta{color:#6f7e89;flex-wrap:wrap;align-items:center;gap:8px;font-size:11px;display:flex}.record-meta strong{color:#20303d;font-size:12px}.record-item>p{color:#42515c;margin:9px 0;font-size:12px}.evidence{grid-template-columns:96px 1fr;align-items:center;gap:12px;display:grid}.evidence img{object-fit:cover;border:1px solid #dde4e8;border-radius:7px;width:96px;height:76px;display:block}.evidence a{color:#137d72;font-size:11px}.gps{color:#60717c;margin-top:5px;font-size:11px;display:block}.no-photo,.stage-empty{color:#9aa5ad;font-size:11px}.worker-phone{max-width:560px;margin:0 auto;padding:18px}.worker-phone h2{margin:4px 0}.worker-phone>p{color:#75838e;margin:5px 0 18px;font-size:12px}.task-picker,.operation-form{background:#fff;border:1px solid #dfe6ea;border-radius:11px;margin-bottom:13px;padding:15px}.task-picker label,.operation-form label{flex-direction:column;gap:7px;margin-bottom:12px;font-size:12px;font-weight:700;display:flex}.task-picker select,.operation-form input,.operation-form textarea{width:100%;font:inherit;background:#fff;border:1px solid #d6dee3;border-radius:7px;padding:10px}.operation-form textarea{resize:vertical;min-height:76px}.operation-summary{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:15px;display:grid}.operation-summary div{text-align:center;background:#f3f6f7;border-radius:8px;padding:10px}.operation-summary small{color:#82909a;font-size:10px;display:block}.operation-summary strong{margin-top:4px;font-size:17px;display:block}.gps-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.operation-form button{color:#fff;cursor:pointer;background:#e88933;border:0;border-radius:8px;width:100%;padding:12px;font-weight:700}.operation-form button:disabled{opacity:.55;cursor:not-allowed}.mobile-field input[type=file]{height:auto;padding:8px}.status.生产中{color:#a66418;background:#fff2df}@media (width<=650px){.record-modal{padding:16px}.stage-head{display:block}.stage-head .status{margin-top:8px;display:inline-block}.evidence{grid-template-columns:76px 1fr}.evidence img{width:76px;height:64px}.gps-grid{grid-template-columns:1fr}.operation-summary strong{font-size:14px}}.worker-phone{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scrollbar-gutter:stable;padding-bottom:0;overflow:hidden auto}.worker-phone .mini-nav{z-index:8;flex-shrink:0;width:calc(100% + 36px);margin:0 -18px -18px;position:sticky;bottom:0}.worker-phone .operation-form{margin-bottom:78px}.record-modal{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;background:#fff;border-radius:14px;max-height:calc(100vh - 40px);padding:22px;overflow:hidden auto;box-shadow:0 30px 90px #0d1c2940}.record-modal .modal-head{z-index:3;background:#fff;padding-top:22px;position:sticky;top:-22px}.modal-backdrop{overscroll-behavior:contain;overflow-y:auto}@media (width<=760px){.worker-phone{height:calc(100dvh - 80px);min-height:0}.record-modal{max-height:calc(100dvh - 20px);padding:16px}.record-modal .modal-head{padding-top:16px;top:-16px}.modal-backdrop{padding:10px}}.evidence-rule{color:#19877b!important;margin-top:5px!important}.evidence-notice{background:#edf8f6;border-left:3px solid #169588;border-radius:7px;flex-direction:column;gap:6px;margin-bottom:14px;padding:10px 12px;font-size:11px;display:flex}.evidence-notice span{color:#5e716f}.virtual-gps{background:#f3f6f7;border-radius:8px;margin-bottom:13px;padding:11px}.virtual-gps button{justify-content:center;align-items:center;gap:9px;display:flex;color:#304653!important;background:#fff!important;border:1px solid #cbd7dc!important}.virtual-gps button span{color:#168f82;font-size:23px}.virtual-gps button.located{color:#13796e!important;background:#eaf7f4!important;border-color:#65b9ae!important}.virtual-gps small{text-align:center;color:#5b6f79;margin-top:8px;display:block}.source-evidence{background:#fff8eb;border:1px solid #f1d7ad;border-radius:10px;margin:0 14px 12px;padding:12px;font-size:11px}.source-evidence>p{color:#7d674d;margin:6px 0}.source-evidence a{color:#986120;align-items:center;gap:10px;text-decoration:none;display:flex}.source-evidence img{object-fit:cover;border-radius:6px;width:58px;height:46px}.source-evidence span{font-weight:700}.batch-items-editor{border:1px solid #dce4e8;border-radius:10px;margin:4px 0 18px;overflow:hidden}.editor-head{background:#f5f8f9;justify-content:space-between;align-items:center;padding:12px 14px;display:flex}.editor-head b,.editor-head span{display:block}.editor-head span{color:#7b8993;margin-top:3px;font-size:10px}.editor-head button{color:#147d72;cursor:pointer;background:#fff;border:1px solid #8ccbc3;border-radius:6px;padding:8px 10px}.batch-item-row{border-top:1px solid #edf0f2;grid-template-columns:25px 2fr 1.4fr 80px 28px;align-items:end;gap:8px;padding:11px 12px;display:grid}.batch-item-row>i{color:#167d72;background:#e8f3f1;border-radius:50%;align-self:center;place-items:center;width:23px;height:23px;font-size:10px;font-style:normal;display:grid}.batch-item-row label{margin:0}.batch-item-row input{width:100%;height:38px}.remove-item{color:#b55343;cursor:pointer;background:#fff0ed;border:0;border-radius:6px;height:38px;font-size:18px}.items-total{background:#fafbfb;border-top:1px solid #e8ecef;justify-content:flex-end;gap:25px;padding:11px 14px;font-size:11px;display:flex}.items-total strong{color:#168779;font-size:16px}.item-summary{border:1px solid #e1e7ea;border-radius:8px;margin:0 15px 15px;overflow:hidden}.item-summary>div{background:#f5f8f9;justify-content:space-between;padding:9px 11px;font-size:10px;display:flex}.item-summary>p{border-top:1px solid #edf0f2;align-items:center;gap:8px;margin:0;padding:8px 10px;display:flex}.item-summary>p i{color:#168477;background:#e5f2ef;border-radius:50%;place-items:center;width:19px;height:19px;font-size:9px;font-style:normal;display:grid}.item-summary>p span{flex:1}.item-summary>p b,.item-summary>p small{font-size:10px;display:block}.item-summary>p small{color:#87949d}.item-summary>p strong{font-size:11px}.record-item-counts{flex-wrap:wrap;gap:6px;margin:9px 0;display:flex}.record-item-counts span{background:#eef5f4;border-radius:5px;padding:5px 8px;font-size:10px}.worker-item-counts{border:1px solid #dce4e8;border-radius:8px;margin-bottom:13px;overflow:hidden}.worker-item-counts>div{background:#f5f8f9;justify-content:space-between;padding:9px 10px;font-size:10px;display:flex}.worker-item-counts label{border-top:1px solid #edf0f2;grid-template-columns:1fr 70px;align-items:center;gap:8px;padding:9px 10px;margin:0!important;display:grid!important}.worker-item-counts label span b,.worker-item-counts label span small{display:block}.worker-item-counts label span small{color:#84919a;margin-top:3px;font-weight:400}.worker-item-counts input{text-align:center;height:36px!important;font-weight:700!important}@media (width<=650px){.batch-item-row{grid-template-columns:25px 1fr 65px}.batch-item-row label:nth-of-type(2){grid-column:2/4}.batch-item-row .remove-item{grid-column:3}.editor-head{align-items:flex-start}}.stat-link{cursor:pointer;transition:transform .15s,box-shadow .15s,border-color .15s}.stat-link:hover,.stat-link:focus{outline:none;transform:translateY(-2px);box-shadow:0 8px 24px #20313c14;border-color:#9bcfc8!important}.stat-link p{color:#16877b!important}.dashboard-detail-head{background:#fff;border:1px solid #e0e6ea;border-radius:10px;justify-content:space-between;align-items:center;margin-bottom:15px;padding:15px 17px;display:flex}.dashboard-detail-head b,.dashboard-detail-head span{display:block}.dashboard-detail-head b{font-size:17px}.dashboard-detail-head span{color:#7b8993;margin-top:4px;font-size:11px}.dashboard-detail-head button{color:#50616c;cursor:pointer;background:#fff;border:1px solid #cdd7dc;border-radius:7px;padding:8px 12px}.warehouse-choice select{height:42px;font:inherit;background:#fff;border:1px solid #d6dee3;border-radius:7px;padding:0 10px}.warehouse-choice small{color:#7d8a93;font-weight:400}.stats.three{grid-template-columns:repeat(3,1fr)}.locked-location{color:#176f66;background:#edf7f5;border:1px solid #b9ded8;border-radius:8px;flex-direction:column;gap:5px;margin-bottom:13px;padding:11px 12px;font-size:11px;display:flex}.locked-location span{color:#536e6a}.locked-location small{color:#758985}.locked-location.reused{color:#315967;background:#f2f6f7;border-color:#d4e0e4}@media (width<=760px){.stats.three{grid-template-columns:1fr 1fr}.stats.three article:last-child{grid-column:1/-1}}.manage-actions{gap:12px;display:flex}.manage .muted-link{color:#6f7d87}.worker-phone .phone-status,.worker-phone .mini-nav,.phone-notes{display:none!important}.worker-phone{padding-top:0}.worker-phone .mini-head{border-bottom:1px solid #e4e9ec;margin:0 -18px 12px;padding:15px 18px}.worker-phone .task-picker{margin-bottom:10px}.worker-phone .mini-card{box-shadow:none;border:1px solid #dfe6ea;margin:0 0 10px}.worker-phone .operation-form{box-shadow:none;margin:0 0 18px}.worker-phone .operation-summary{grid-template-columns:1fr 1fr}.worker-phone .evidence-notice{margin-bottom:10px;padding:8px 10px}.worker-phone .mobile-field{margin-bottom:10px}.worker-stage{align-items:flex-start}.worker-phone{margin-top:8px}@media (width<=760px){.worker-phone{margin-top:0}.worker-phone .mini-head{z-index:5;position:sticky;top:0}}.clean-worker{color:#111;background:#fbfcf8!important;max-width:520px!important;padding:18px!important;overflow-y:auto!important}.clean-task-switch{justify-content:flex-end;margin-bottom:16px;display:flex}.clean-task-switch select{color:#42514b;background:#eef1ed;border:0;border-radius:20px;max-width:250px;padding:8px 13px;font-size:11px}.clean-worker-head{grid-template-columns:34px 1fr;align-items:start;gap:8px;margin-bottom:20px;display:grid}.clean-back{color:#1b2823;font-size:38px;line-height:.8}.clean-worker-head span{color:#728078;font-size:11px}.clean-worker-head h1{letter-spacing:-1px;margin:4px 0 7px;font-size:29px;line-height:1.15}.clean-worker-head p{color:#3f4a45;margin:0;font-size:14px}.clean-overview{color:#fff;background:linear-gradient(135deg,#19ae63,#008447);border-radius:17px;grid-template-columns:1fr 1px 1fr;align-items:center;padding:20px 22px;display:grid;box-shadow:0 12px 26px #078d4930}.clean-overview>div{text-align:center}.clean-overview span{font-size:13px;display:block}.clean-overview strong{margin-top:7px;font-size:43px;line-height:1;display:block}.clean-overview strong small{margin-left:3px;font-size:16px}.clean-overview i{background:#fff5;height:58px}.clean-batch-meta{color:#4f5954;background:#eef0ed;border-radius:18px;justify-content:center;gap:0;margin:12px 0 16px;padding:9px 5px;font-size:11px;display:flex}.clean-batch-meta span{white-space:nowrap;border-right:1px solid #cdd3cf;padding:0 10px}.clean-batch-meta span:last-child{border:0}.clean-reference,.clean-item-card,.clean-field,.clean-success{background:#fff;border:1px solid #eceeea;border-radius:16px;box-shadow:0 8px 24px #35483b0b}.clean-reference{justify-content:space-between;align-items:center;margin-bottom:12px;padding:13px 15px;display:flex}.clean-reference b,.clean-reference span{display:block}.clean-reference span{color:#6d7872;margin-top:4px;font-size:11px}.clean-reference a{color:#087d47;font-size:12px;font-weight:700;text-decoration:none}.clean-items{flex-direction:column;gap:12px;display:flex}.clean-item-card{grid-template-columns:1fr 155px;align-items:center;gap:12px;padding:17px;display:grid}.clean-item-info span,.clean-item-info strong,.clean-item-info small{display:block}.clean-item-info span{font-size:13px;font-weight:700}.clean-item-info strong{margin:9px 0 7px;font-size:25px;line-height:1.1}.clean-item-info small{color:#77817b;font-size:10px}.clean-counter label{color:#626d67;text-align:right;font-size:10px;display:block}.clean-counter input{text-align:center;border:1px solid #d8ddd9;border-radius:10px;width:100%;height:42px;margin-top:5px;font-size:21px;font-weight:800}.clean-counter>div{grid-template-columns:1fr 1fr 1.25fr;gap:7px;margin-top:8px;display:grid}.clean-counter button{color:#19211d;background:#fff;border:1px solid #d7dcd8;border-radius:10px;height:37px;font-size:17px;font-weight:700}.clean-counter button:last-child{color:#087b46;background:#edf5f0;font-size:11px}.clean-field{flex-direction:column;gap:8px;margin-top:12px;padding:14px 16px;display:flex}.clean-field b{font-size:12px}.clean-field select{background:#fff;border:1px solid #d7ddd9;border-radius:10px;height:42px;padding:0 12px}.clean-field span{color:#77827c;font-size:10px}.clean-photo input{border:1px dashed #b9c8be;border-radius:10px;width:100%;padding:10px}.clean-location strong{color:#087b46;font-size:14px}.clean-gps button{color:#087b46;background:#f0faf4;border:1px solid #8fc8a9;border-radius:11px;height:43px;font-weight:800}.clean-gps button.located{color:#fff;background:#078648}.clean-submit{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:4;background:#fbfcf8ee;grid-template-columns:2fr 1fr;gap:0;margin:18px -18px -18px;padding:14px 18px 20px;display:grid;position:sticky;bottom:-18px}.clean-submit button{border:0;height:54px;font-size:15px;font-weight:800}.submit-main{color:#fff;background:#078648;border-radius:28px 0 0 28px}.submit-main:disabled{opacity:.45}.submit-all{color:#17201b;background:#ebeeeb;border-radius:0 28px 28px 0}.clean-success{text-align:center;padding:38px 22px}.clean-success>div{color:#fff;background:#078648;border-radius:50%;place-items:center;width:54px;height:54px;margin:0 auto 12px;font-size:28px;display:grid}.clean-success h2{margin:0}.clean-success p{color:#748078}.clean-success button{color:#fff;background:#078648;border:0;border-radius:24px;width:100%;height:48px;font-weight:800}@media (width<=760px){.clean-worker{height:calc(100dvh - 74px)!important;margin-top:0!important}.clean-worker-head h1{font-size:27px}}@media (width<=430px){.clean-worker{padding:14px!important}.clean-item-card{grid-template-columns:1fr 140px;padding:14px}.clean-batch-meta{font-size:9px}.clean-batch-meta span{padding:0 6px}.clean-submit{margin-left:-14px;margin-right:-14px;padding-left:14px;padding-right:14px;bottom:-14px}}.clean-photo img{object-fit:contain;cursor:pointer;background:#f2f4f2;border-radius:11px;width:100%;max-height:210px}.clean-photo strong{text-align:center;color:#087b46;border:1px solid #9ac8ad;border-radius:11px;padding:11px;font-size:11px;display:block}.location-v22-head{justify-content:space-between;align-items:center;display:flex}.location-v22-head i{background:#eef1ef;border-radius:14px;padding:4px 9px;font-size:10px;font-style:normal;height:auto!important}.location-v22-head .grade-a{color:#087b46;background:#dff5e8}.location-v22-head .grade-b{color:#986500;background:#fff2cf}.location-v22-head .grade-c{color:#ad3d2c;background:#ffe5df}.clean-gps button:disabled{opacity:.7}.clean-gps .cancel-location{color:#a14536;background:#fff;border-color:#e3b9b1}.location-quality{grid-template-columns:1fr 1fr;gap:6px;display:grid}.location-quality small{color:#56635c;background:#f4f6f4;border-radius:7px;padding:7px}.clean-gps>strong{color:#087b46;font-size:12px}
/* C# V2 多部件编辑区 */
.item-editor{margin-top:20px;border-top:1px solid #e5eaed;padding-top:16px}.item-editor-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.item-editor-head button,.remove-item{border:1px solid #cfd8dc;background:#fff;border-radius:8px;padding:8px 12px}.batch-item-row{display:grid;grid-template-columns:1.5fr 1.5fr .7fr auto;gap:10px;align-items:end;padding:10px 0;border-bottom:1px dashed #dfe5e8}.batch-item-row label{display:grid;gap:6px;font-weight:600}.batch-item-row input{border:1px solid #ccd6da;border-radius:8px;padding:10px}@media(max-width:760px){.batch-item-row{grid-template-columns:1fr}.modal{max-height:92vh;overflow:auto}}
.topbar>.user{margin-left:auto}

/* V9 管理信息 CRUD + 工作台卡片详情 */
.stat-link.selected-stat{border-color:#159a8c!important;box-shadow:0 8px 26px #159a8c18;background:#fbfffe}.dashboard-detail{margin-top:18px}.dashboard-detail table strong{color:#087b46}.dashboard-detail .table-wrap{max-height:520px;overflow:auto}.manage-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 20px;border-bottom:1px solid #e5eaed}.manage-head h2{margin:0;font-size:18px}.manage-head p{margin:5px 0 0;color:#7b8993;font-size:11px}.manage-head .primary{border:0;border-radius:8px;background:#159a8c;color:#fff;padding:10px 14px;cursor:pointer;font-weight:700}.manage-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.manage .danger-link{color:#b33a32}.manage .danger-link:hover{color:#8f1f19}.manage-modal{max-width:520px}.one-column{grid-template-columns:1fr!important}.switch-row{display:flex!important;align-items:center;justify-content:space-between;border:1px solid #dbe3e7;border-radius:8px;padding:10px 12px;margin-top:4px}.switch-row input{width:20px!important;height:20px!important;margin:0!important}.manage .table-wrap{overflow:auto}.manage td:last-child{min-width:190px}@media (max-width:760px){.manage-head{align-items:flex-start;flex-direction:column}.manage-head .primary{width:100%}.dashboard-detail-head{align-items:flex-start;gap:12px;flex-direction:column}.dashboard-detail-head button{width:100%}.manage-actions{min-width:185px}}

/* V13 部件图纸：上传、PDF定位页、全模块查看 */
.batch-create-modal{width:min(860px,100%)}
.item-editor-head>div{display:flex;flex-direction:column;gap:4px}.item-editor-head>div small{color:#7b8993;font-size:10px}
.batch-item-row{grid-template-columns:1.3fr 1.2fr .55fr 1.5fr auto;align-items:start;gap:12px;padding:14px 0}
.drawing-editor{border:1px solid #dbe3e7;background:#f8faf9;border-radius:9px;padding:10px;min-width:220px}
.drawing-editor-title{display:block;font-size:11px;font-weight:700;margin-bottom:7px}.drawing-editor-actions{display:flex;gap:7px;flex-wrap:wrap}
.drawing-add,.drawing-clear{cursor:pointer;border:1px solid #b8cec6;background:#fff;border-radius:7px;padding:7px 9px;font-size:10px}.drawing-add{color:#087b46;background:#eef8f2}.drawing-clear{color:#8a5a52}
.drawing-file-status{color:#66757f;display:block;margin-top:7px;word-break:break-all;font-size:9px}.drawing-page-wrap{margin:8px 0 0!important;padding-top:8px;border-top:1px dashed #d8e0dc}.drawing-page-wrap input{height:34px!important}.drawing-page-wrap small{color:#7b8993;font-size:9px;font-weight:400;line-height:1.5}
.drawing-link{white-space:nowrap;color:#087b46;background:#edf8f2;border:1px solid #a8ceb8;border-radius:7px;padding:6px 9px;font-size:10px;font-weight:700;cursor:pointer}.drawing-link:hover{background:#e0f3e8}.drawing-missing{color:#9aa5ac;font-size:10px;white-space:nowrap}
.item-summary-row .item-drawing-action{flex:0 0 auto!important}.item-summary-row .drawing-link{padding:5px 7px;font-size:9px}
.detail-actions{display:grid;gap:8px;padding:0 15px 15px}.detail-actions .outline{margin:0!important;width:100%}.drawing-outline{color:#087b46!important;border-color:#a9cdb8!important}
.drawing-list-modal{width:min(760px,100%)}.drawing-list{display:flex;flex-direction:column;gap:9px}.drawing-list-row{display:grid;grid-template-columns:30px minmax(150px,1fr) minmax(220px,1.4fr);gap:12px;align-items:center;border:1px solid #e1e7e4;border-radius:10px;padding:12px}.drawing-list-row>i{width:26px;height:26px;border-radius:50%;background:#e7f4ee;color:#087b46;display:grid;place-items:center;font-style:normal;font-size:10px;font-weight:700}.drawing-list-row b,.drawing-list-row small{display:block}.drawing-list-row small{color:#829088;margin-top:3px;font-size:10px}.drawing-list-file{display:flex;align-items:center;justify-content:flex-end;gap:9px;min-width:0}.drawing-list-file>span:not(.drawing-missing){color:#64726b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px}
.drawing-viewer-modal{width:min(1120px,96vw);height:min(860px,94vh);display:flex;flex-direction:column}.drawing-viewer-modal .modal-head{flex:0 0 auto}.drawing-viewer-meta{display:flex;gap:12px;align-items:center;flex-wrap:wrap;background:#f4f7f5;border-radius:8px;padding:9px 11px;margin-bottom:10px;font-size:11px}.drawing-viewer-meta span{color:#67756e}.drawing-viewer-meta b{color:#087b46}.drawing-viewer-meta a{margin-left:auto;color:#1677a5;font-weight:700}.drawing-viewer-body{flex:1;min-height:0;background:#eef1ef;border:1px solid #dfe5e1;border-radius:10px;overflow:hidden;display:grid;place-items:center}.drawing-viewer-body iframe{border:0;width:100%;height:100%;min-height:620px;background:#fff}.drawing-viewer-body img{max-width:100%;max-height:100%;object-fit:contain}.drawing-viewer-tip{color:#75827b;margin-top:8px;font-size:10px}.modal-head-actions{display:flex;gap:8px;align-items:center}.modal-head-actions>button{cursor:pointer}.modal-head-actions .drawing-head-button{width:auto;height:auto;border-radius:7px;padding:8px 11px;color:#087b46;background:#eef8f2;border:1px solid #a8ceb8;font-size:10px;font-weight:700}.modal-head-actions>button:last-child{background:#edf1f3;border:0;border-radius:50%;width:32px;height:32px;font-size:20px}
@media(max-width:900px){.batch-item-row{grid-template-columns:1fr 1fr}.drawing-editor{grid-column:1/-1}.remove-item{justify-self:end}.drawing-viewer-body iframe{min-height:520px}}
@media(max-width:650px){.batch-item-row{grid-template-columns:1fr}.drawing-editor{grid-column:auto}.drawing-list-row{grid-template-columns:28px 1fr}.drawing-list-file{grid-column:1/-1;justify-content:flex-start;padding-left:40px}.drawing-viewer-modal{height:92vh}.drawing-viewer-meta a{margin-left:0}.drawing-viewer-body iframe{min-height:420px}.item-summary-row{flex-wrap:wrap}.item-summary-row .item-drawing-action{width:100%;padding-left:27px}}
\n\n/* V13.2：强制新前端资源 + 图纸入口始终可见 */\n.version-badge{margin-left:10px;border:1px solid #8fc8a9;background:#edf8f2;color:#087b46;border-radius:999px;padding:3px 8px;font-size:9px;font-style:normal;white-space:nowrap}\n.batch-create-modal{width:min(980px,96vw)!important}\n.batch-item-row{grid-template-columns:minmax(180px,1.4fr) minmax(180px,1.4fr) 110px auto!important;align-items:end!important}\n.batch-item-row>.drawing-editor{grid-column:1/-1!important;min-width:0!important;margin-top:2px;border:2px solid #9fcdb2;background:#f4fbf7;padding:13px 14px}\n.drawing-editor-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}.drawing-editor-head strong{font-size:9px;color:#668176;background:#e4f4eb;border-radius:12px;padding:3px 7px}.drawing-editor-title{font-size:12px!important;color:#173b2a}.drawing-add{background:#078648!important;color:#fff!important;border-color:#078648!important;padding:9px 13px!important;font-weight:800}.drawing-clear{padding:9px 12px!important}.drawing-file-status{font-size:10px!important;line-height:1.6;margin-top:9px!important}.drawing-page-wrap{display:grid;grid-template-columns:150px 110px 1fr;align-items:center;gap:10px;font-size:11px}.drawing-page-wrap[hidden]{display:none!important}.drawing-page-wrap input{width:110px}.drawing-page-wrap small{font-size:10px!important}.item-drawing-action{display:flex!important;gap:5px!important;align-items:center!important;flex-wrap:wrap}.drawing-manage{white-space:nowrap;border:1px solid #8fc8a9;background:#f3faf6;color:#087b46;border-radius:7px;padding:5px 7px;font-size:9px;font-weight:700;cursor:pointer}.drawing-edit-modal{max-width:590px}.existing-drawing-status{background:#f4f7f5;color:#52655b;border-radius:8px;padding:11px 12px;margin-bottom:14px;font-size:11px}.drawing-edit-modal>label{display:grid;gap:7px;margin:11px 0;font-size:12px;font-weight:700}.drawing-edit-modal input[type=file],.drawing-edit-modal input[type=number]{border:1px solid #ccd6da;border-radius:8px;padding:10px;background:#fff}.drawing-edit-modal label small{font-weight:400;color:#75827b}.clear-existing{display:flex!important;grid-template-columns:auto 1fr!important;align-items:center!important;justify-content:flex-start;gap:8px!important;color:#a24a3b}.clear-existing input{width:18px;height:18px}.drawing-list-file .drawing-manage{font-size:9px}\n@media(max-width:900px){.batch-item-row{grid-template-columns:1fr 1fr!important}.batch-item-row>.drawing-editor{grid-column:1/-1!important}.batch-item-row>.remove-item{justify-self:end}.drawing-page-wrap{grid-template-columns:1fr}.drawing-page-wrap input{width:100%}}\n@media(max-width:650px){.batch-item-row{grid-template-columns:1fr!important}.batch-item-row>.drawing-editor{grid-column:1!important}}\n

/* V13.3 图纸功能：文件选择控件直接可见，避免隐藏按钮/旧缓存导致用户看不到入口。 */
.drawing-native-picker{display:grid!important;grid-template-columns:120px minmax(260px,1fr);gap:12px;align-items:center;margin:4px 0 10px!important;font-size:12px;font-weight:700;color:#254536}
.drawing-native-picker input[type=file]{display:block!important;width:100%;min-height:42px;border:1px solid #a9cdb8;border-radius:8px;background:#fff;padding:7px;color:#263b31;font-size:11px}
.drawing-editor{display:block!important;visibility:visible!important;opacity:1!important;border:2px solid #72b88e!important;background:#f2fbf6!important}
.drawing-editor-title{font-size:14px!important;font-weight:800!important;color:#087b46!important}
.drawing-file-status{background:#fff;border-radius:7px;padding:8px 10px!important;border:1px dashed #c8d9cf}
.drawing-page-wrap{display:grid!important;grid-template-columns:120px 100px 1fr!important;gap:12px!important;align-items:center!important;border-top:1px dashed #c8d9cf!important;padding-top:10px!important;margin-top:10px!important}
.drawing-page-wrap input{display:block!important;width:100px!important}
.version-badge{font-style:normal!important}
@media(max-width:700px){.drawing-native-picker,.drawing-page-wrap{grid-template-columns:1fr!important}.drawing-page-wrap input{width:100%!important}}


/* V13.4：新建批次部件图纸改为紧凑按钮，点击后弹窗选择文件/页码。 */
.batch-create-modal{width:min(900px,96vw)!important}
.batch-item-row{grid-template-columns:minmax(190px,1.35fr) minmax(180px,1.25fr) 105px 160px 74px!important;align-items:end!important;gap:12px!important;padding:14px 0!important}
.batch-item-row>.drawing-editor{display:none!important}
.new-item-drawing-cell{display:flex;flex-direction:column;gap:6px;min-width:0}
.new-item-drawing-label{font-size:11px;font-weight:700;color:#1d2a23}
.new-item-drawing-button{height:42px;border:1px solid #8fc8a9;background:#f2faf5;color:#087b46;border-radius:8px;padding:0 12px;font-size:11px;font-weight:800;cursor:pointer;white-space:nowrap}
.new-item-drawing-button:hover{background:#e7f6ed}
.new-item-drawing-summary{display:block;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#8a9590;font-size:9px}
.new-item-drawing-summary.has-drawing{color:#087b46;font-weight:700}
.drawing-create-modal{width:min(620px,94vw)!important}
.drawing-modal-current{background:#f5f7f6;border:1px solid #e0e6e2;border-radius:9px;padding:12px 14px;margin-bottom:15px;color:#77837d;font-size:11px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.drawing-modal-current.has-current{background:#eef8f2;border-color:#b7d7c3;color:#315d47}.drawing-modal-current b{color:#087b46}.drawing-modal-current span{word-break:break-all}
.drawing-modal-file-picker{display:grid!important;gap:8px!important;margin:0 0 10px!important;font-size:12px;font-weight:700}
.drawing-modal-file-picker input[type=file]{display:block;width:100%;border:1px solid #cbd6d0;border-radius:8px;background:#fff;padding:10px;font-size:11px}
.drawing-modal-file-status{background:#f7f9f8;border:1px dashed #d1dcd6;border-radius:8px;padding:10px 12px;color:#68766f;font-size:10px;line-height:1.55;word-break:break-all}
.drawing-modal-page-wrap{display:grid!important;grid-template-columns:110px 110px 1fr;gap:12px;align-items:center;margin:15px 0 0!important;padding-top:15px;border-top:1px solid #e5eae7;font-size:11px;font-weight:700}
.drawing-modal-page-wrap input{border:1px solid #ccd7d1;border-radius:8px;height:40px;padding:0 10px;background:#fff}
.drawing-modal-page-wrap small{font-weight:400;color:#75827b;line-height:1.55}
.drawing-modal-page-wrap.image-file{opacity:.65}.drawing-modal-page-wrap.image-file input{background:#f3f5f4}
.drawing-modal-actions{justify-content:space-between!important;align-items:center!important}.drawing-modal-actions>div{display:flex;gap:10px}.drawing-remove-selected{border:1px solid #e2b6ae;background:#fff6f4;color:#a14133;border-radius:8px;padding:10px 12px;cursor:pointer}
@media(max-width:820px){.batch-item-row{grid-template-columns:1fr 1fr!important}.new-item-drawing-cell{grid-column:1/2}.batch-item-row>.remove-item{justify-self:end}.new-item-drawing-summary{max-width:100%}}
@media(max-width:580px){.batch-item-row{grid-template-columns:1fr!important}.new-item-drawing-cell{grid-column:auto}.batch-item-row>.remove-item{justify-self:stretch}.drawing-modal-page-wrap{grid-template-columns:1fr}.drawing-modal-actions{align-items:stretch!important;flex-direction:column-reverse}.drawing-modal-actions>div{display:grid;grid-template-columns:1fr 1fr}.drawing-remove-selected{width:100%}}


/* V13.5：部件名称 / 件号 / 数量 / 图纸 / 删除保持同一行，输入框和按钮上下严格对齐。 */
.batch-create-modal{width:min(930px,96vw)!important}
.batch-item-row{
  grid-template-columns:minmax(210px,1.45fr) minmax(200px,1.35fr) 105px 170px 82px!important;
  align-items:end!important;
  column-gap:12px!important;
  row-gap:8px!important;
  padding:14px 0 18px!important;
}
.batch-item-field,
.new-item-drawing-cell{
  display:grid!important;
  grid-template-rows:20px 44px!important;
  gap:6px!important;
  align-self:end!important;
  min-width:0!important;
}
.batch-item-field>span,
.new-item-drawing-label{
  display:flex!important;
  align-items:center!important;
  height:20px!important;
  margin:0!important;
  font-size:11px!important;
  font-weight:700!important;
  line-height:20px!important;
  color:#1d2a23!important;
}
.batch-item-field>input,
.new-item-drawing-button,
.batch-item-remove{
  box-sizing:border-box!important;
  height:44px!important;
  min-height:44px!important;
  margin:0!important;
}
.batch-item-field>input{padding:0 12px!important;align-self:end!important}
.new-item-drawing-button{width:100%!important;padding:0 12px!important;align-self:end!important}
.batch-item-remove{align-self:end!important;padding:0 12px!important;white-space:nowrap!important}
/* 文件名状态仍保留在 DOM 中供脚本更新，但不占一行高度；选择后按钮文字会变为"修改图纸"。 */
.new-item-drawing-summary{display:none!important}
@media(max-width:820px){
  .batch-item-row{grid-template-columns:1fr 1fr!important}
  .batch-item-field,.new-item-drawing-cell{grid-template-rows:20px 44px!important}
  .batch-item-remove{justify-self:stretch!important;width:100%!important}
}
@media(max-width:580px){.batch-item-row{grid-template-columns:1fr!important}}

/* V13.8 单页图纸页码固定 */
.drawing-modal-page-wrap input[readonly],.drawing-edit-modal input[readonly]{background:#f1f3f2!important;color:#6f7973;cursor:not-allowed}
.drawing-edit-modal label.image-file{opacity:.72}


.drawing-gallery{display:grid;grid-template-columns:1fr;gap:16px;max-height:70vh;overflow:auto;padding:4px;}
.drawing-gallery-item{margin:0;background:#f5f7f5;border:1px solid #e2e9e3;border-radius:14px;padding:12px;}
.drawing-gallery-item img{display:block;max-width:100%;width:100%;height:auto;max-height:70vh;object-fit:contain;background:#fff;border-radius:10px;}
.drawing-gallery-item figcaption{margin-top:8px;font-size:12px;color:#516056;}

.account-tip{margin-top:14px;padding:12px 14px;border-radius:10px;background:#fff7df;color:#725a0b;font-size:12px;line-height:1.6}.manage code{background:#f2f5f2;padding:4px 7px;border-radius:6px;color:#234f38}.manage-modal input[type=password]{font-family:inherit}

/* V17.1：在原部件录入行内增加通用二次装配方案。 */
.batch-create-modal{width:min(1080px,96vw)!important}
.batch-item-row{grid-template-columns:minmax(165px,1.25fr) minmax(150px,1.1fr) 82px 145px 165px 70px!important}
.new-item-assembly-cell{display:grid;grid-template-rows:20px 44px;gap:6px;min-width:0;align-self:end}
.new-item-assembly-label{display:flex;align-items:center;height:20px;font-size:11px;font-weight:700;color:#1d2a23}
.assembly-setup-button{height:44px;border:1px solid #d7aa74;background:#fff8ef;color:#9a5815;border-radius:8px;padding:0 10px;font-size:11px;font-weight:800;cursor:pointer;white-space:nowrap}
.assembly-setup-button.configured{border-color:#3ca271;background:#edf9f2;color:#087b46}
.assembly-summary{display:none}
.assembly-create-modal{width:min(960px,95vw)!important;max-height:90vh;overflow:auto}
.assembly-count{display:grid;gap:7px;font-weight:700;margin-bottom:14px}.assembly-count select{height:42px;border:1px solid #ccd7d1;border-radius:8px;background:#fff;padding:0 10px}
.assembly-stage-editor{border:1px solid #dce5df;border-radius:12px;padding:15px;margin:12px 0;background:#fbfcfb}
.assembly-stage-editor h3{margin:0 0 12px;color:#175c3b}.assembly-stage-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.assembly-stage-grid label{display:grid;gap:6px;font-size:11px;font-weight:700}.assembly-stage-grid select,.assembly-stage-grid input{height:40px;border:1px solid #ccd7d1;border-radius:8px;padding:0 10px;background:#fff}
.assembly-req-head{display:flex;justify-content:space-between;align-items:center;margin:8px 0}.assembly-req-head button{border:1px solid #8fc8a9;background:#f2faf5;color:#087b46;border-radius:8px;padding:8px 12px;font-weight:700}
.assembly-req-row{display:grid;grid-template-columns:92px minmax(120px,1fr) minmax(110px,1fr) 80px 135px minmax(145px,1.2fr) 55px;gap:8px;align-items:end;padding:10px 0;border-top:1px dashed #dce5df}.assembly-req-row label{display:grid;gap:5px;font-size:10px;font-weight:700}.assembly-req-row input,.assembly-req-row select{height:38px;min-width:0;border:1px solid #ccd7d1;border-radius:7px;padding:0 8px;background:#fff}.assembly-req-row input[type=file]{padding:7px 5px;font-size:9px}.assembly-delete{height:38px;border:1px solid #e2b6ae;background:#fff6f4;color:#a14133;border-radius:7px;cursor:pointer}.assembly-clear{margin-right:auto;border-color:#e2b6ae!important;color:#a14133!important;background:#fff6f4!important}
@media(max-width:900px){.batch-item-row{grid-template-columns:1fr 1fr!important}.new-item-assembly-cell{grid-column:auto}.assembly-req-row{grid-template-columns:1fr 1fr}.assembly-stage-grid{grid-template-columns:1fr}}
@media(max-width:580px){.batch-item-row,.assembly-req-row{grid-template-columns:1fr!important}}
.assembly-mode-tip{margin:12px 0;padding:11px 13px;border:1px solid #d7e2dc;border-radius:9px;background:#f4f7f5;color:#526159;font-size:11px;line-height:1.6}
.assembly-mode-tip b{color:#175c3b}.assembly-req-head>div{display:grid;gap:3px}.assembly-req-head small{color:#7a8780;font-size:10px;font-weight:400}
.assembly-req-row>label{display:grid;gap:5px;min-width:0}.assembly-req-row>label>span{font-size:10px;font-weight:700;color:#53615a;white-space:nowrap}
.assembly-stage-editor.separate-processing{border-color:#e2a84d;background:#fffdf8;box-shadow:0 0 0 2px rgba(226,168,77,.10)}
.assembly-stage-editor.separate-processing .assembly-mode-tip{border-color:#efbd69;background:#fff4dd;color:#704b0e}
.assembly-stage-editor.separate-processing .assembly-route-field{padding:6px;border:2px solid #ef9a22;border-radius:9px;background:#fff1d6}
.assembly-stage-editor.separate-processing .assembly-route-field>span{color:#a65e00}
/* V17.4：二次装配快速录入、每套用量、库存匹配。 */
.new-item-assembly-cell{display:grid!important;grid-template-rows:20px auto auto auto!important;gap:5px!important}.assembly-enable{display:flex!important;align-items:center;gap:6px;height:26px;font-size:10px;font-weight:700;color:#7c561e}.assembly-enable input{width:16px;height:16px}.assembly-setup-button[hidden]{display:none!important}.assembly-setup-button{height:34px!important}
.assembly-create-modal{width:min(1220px,98vw)!important}.assembly-quick-bar{display:grid;grid-template-columns:1fr 220px 240px;gap:15px;padding:13px;background:#f5f8f6;border:1px solid #dce5df;border-radius:10px}.assembly-quick-bar label{display:grid;gap:6px;font-size:11px;font-weight:800}.assembly-quick-bar select,.assembly-quick-bar input{height:40px;border:1px solid #cbd7d0;border-radius:8px;background:#fff;padding:0 10px}.assembly-count{display:grid!important;grid-template-columns:1fr!important;margin:0!important}
.assembly-flow-preview{margin:12px 0;padding:12px 14px;border:1px solid #86c8a4;border-radius:10px;background:#f0fdf4;color:#14532d;line-height:1.65}.assembly-flow-preview small{color:#166534}
.assembly-recommendation{margin:9px 0;color:#087b46;font-size:10px;font-weight:700}.assembly-req-row{grid-template-columns:95px minmax(120px,1fr) minmax(105px,.9fr) 76px 82px 135px minmax(155px,1.2fr) 105px 52px!important;align-items:end!important}.assembly-total{display:grid;gap:3px;align-self:end}.assembly-total span{font-size:10px;font-weight:700;color:#53615a}.assembly-total b{height:38px;display:flex;align-items:center;justify-content:center;border-radius:7px;background:#e9f5ee;color:#087b46;font-size:15px}.assembly-total small{display:none}.assembly-inventory-status{align-self:end;min-height:38px;padding:6px 8px;border-radius:7px;background:#f5f7f6;font-size:9px;line-height:1.45;color:#5f6c65}.assembly-inventory-status b{margin:0 2px}.assembly-inventory-status .shortage{color:#c35432}.assembly-inventory-status .ready{color:#087b46}.assembly-drawing-details{align-self:end;font-size:9px}.assembly-drawing-details summary{height:38px;display:flex;align-items:center;cursor:pointer;color:#68766f}.assembly-drawing-details[open]{position:relative}.assembly-drawing-details[open] .assembly-drawing{position:absolute;z-index:5;right:0;width:260px;padding:10px;background:#fff;border:1px solid #ccd7d1;border-radius:8px;box-shadow:0 8px 20px #0002}.auto-previous-row{background:#eef7f2;border-radius:8px;padding-left:6px;padding-right:6px}.auto-previous-row .assembly-delete{color:#087b46;background:#e5f4eb;border-color:#acd2bc}
@media(max-width:1000px){.assembly-req-row{grid-template-columns:1fr 1fr 1fr!important}.assembly-quick-bar{grid-template-columns:1fr 1fr}}@media(max-width:620px){.assembly-req-row,.assembly-quick-bar{grid-template-columns:1fr!important}}

/* ===== 网页端 V17.20：登录、标题、批次列表/排序/详情、装配方案精简 ===== */
.web-topbar{display:flex;align-items:center;gap:14px;padding:10px 18px;background:#101a24;color:#fff}
.tb-center{flex:1;min-width:0;text-align:center}
.tb-center h1{margin:0;font-size:26px;color:#fff;letter-spacing:3px;line-height:1.2;white-space:nowrap}
.tb-center small{display:block;color:#9fb0c3;font-size:11px;letter-spacing:1px;margin-top:2px}
.tb-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.tb-user{display:flex;align-items:center;gap:8px}
.tb-user i{font-style:normal;display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:28px;padding:0 4px;border-radius:50%;background:#2d6cff;font-weight:700}
.tb-user b{color:#fff;font-size:13px;white-space:nowrap}
.tb-user small{display:block;color:#9fb0c3;font-size:11px;text-align:left}
.logout-btn{background:rgba(255,255,255,.08);color:#cfd9e5;border:1px solid rgba(255,255,255,.18);padding:5px 12px;border-radius:6px;cursor:pointer;font-size:12px}
.logout-btn:hover{background:#e02f2f;border-color:#e02f2f;color:#fff}
/* V23.28 顶部「更新于 hh:mm」与手动刷新按钮：自动刷新降到 3 分钟后提供一个随时可控的入口 */
.sync-time{color:#8fa3ba;font-size:12px;white-space:nowrap}
.btn-refresh{background:rgba(255,255,255,.08);color:#cfd9e5;border:1px solid rgba(255,255,255,.18);padding:5px 12px;border-radius:6px;cursor:pointer;font-size:12px;white-space:nowrap}
.btn-refresh:hover:not(:disabled){background:rgba(45,108,255,.9);border-color:rgba(45,108,255,.9);color:#fff}
.btn-refresh:disabled{opacity:.6;cursor:default}
.login-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0d1b2b,#1d3a5f 55%,#0d1b2b);padding:24px;box-sizing:border-box}
.login-card{width:340px;max-width:100%;background:#fff;border-radius:16px;padding:34px 30px;box-shadow:0 18px 50px rgba(0,0,0,.35);text-align:center}
.login-logo{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,#2d6cff,#12b7f5);color:#fff;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:800;margin:0 auto 14px;letter-spacing:1px}
.login-card h1{font-size:26px;margin:0 0 4px;color:#10233b;letter-spacing:2px}
.login-sub{color:#7d8ea3;font-size:12px;margin:0 0 20px}
.login-error{color:#c0301c;font-size:12px;margin:0 0 12px;text-align:left;background:#fdeeea;padding:7px 10px;border-radius:6px}
.login-card form{display:flex;flex-direction:column;gap:12px;text-align:left}
.login-card label{font-size:12px;color:#43566e}
.login-card input{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid #cdd8e4;border-radius:8px;font-size:14px}
.login-card button[type=submit]{margin-top:4px;width:100%;padding:11px;font-size:15px;border:0;border-radius:8px;background:#2d6cff;color:#fff;cursor:pointer;font-weight:700}
.login-card button[type=submit]:disabled{opacity:.6}

.sort-switch{display:inline-flex;background:#eef1f5;border-radius:8px;overflow:hidden;flex:none}
.sort-switch button{border:0;background:transparent;padding:7px 16px;cursor:pointer;font-size:12px;color:#5b6b7d}
.sort-switch button.chosen{background:#2d6cff;color:#fff}
.batches-title{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.batches .table-wrap table{min-width:880px}
.batches tbody tr{cursor:pointer}
.batches tbody tr:hover{background:#f2f7ff}
.batch-group{margin-top:14px}
.batch-group-title{display:flex;align-items:center;gap:8px;padding:6px 2px 8px}
.batch-group-title em{font-style:normal;color:#8b98a8;font-size:12px}
.batch-group .table-wrap{margin-top:0}

/* V23.26 批次列表分页条：只影响渲染行数，数据仍全量在内存；条数不超过一页时整条不显示。 */
.batch-pager{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;padding:8px 2px;color:#5b6b7d;font-size:13px}
.batch-pager-info b{color:#10233b;font-size:14px}
.batch-page-btn{border:1px solid #cdd8e4;background:#fff;color:#33475f;padding:6px 14px;border-radius:6px;cursor:pointer;font-size:13px}
.batch-page-btn:hover:not(:disabled){border-color:#2d6cff;color:#2d6cff}
.batch-page-btn:disabled{opacity:.45;cursor:not-allowed}
.batch-pager-size{display:inline-flex;align-items:center;gap:6px;margin-left:6px}
.batch-page-size{border:1px solid #cdd8e4;background:#fff;color:#33475f;padding:5px 12px;border-radius:6px;cursor:pointer;font-size:13px}
.batch-page-size.chosen{background:#2d6cff;border-color:#2d6cff;color:#fff}

.status.待处理{color:#5c6b73;background:#e8ecee}
.status.运输中{color:#c0301c;background:#fdeeea}
.status.已完成{color:#1e7d3f;background:#e5f4e8}
.stat-icon.green{background:#e4f4ea;color:#148b4a}

.detail-head{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;padding-bottom:14px;border-bottom:1px solid #e6ebf1;margin-bottom:16px}
.detail-title{flex:1;min-width:260px}
.detail-title small{display:block;color:#8a98a8;font-size:12px;margin-bottom:2px}
.detail-title h2{display:flex;align-items:center;gap:10px;margin:0 0 6px;font-size:22px;flex-wrap:wrap}
.detail-title span{color:#6a7b8e;font-size:13px}
.detail-actions{display:flex;gap:8px;flex-wrap:wrap}
.detail-grid{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:16px;align-items:start}
.detail-main,.detail-side{min-width:0}
.detail-block{background:#f7f9fb;border:1px solid #e6ebf1;border-radius:12px;padding:16px;margin-bottom:16px}
.block-title{display:flex;align-items:baseline;gap:8px;justify-content:space-between;margin-bottom:10px;flex-wrap:wrap}
.block-title b{font-size:15px}
.block-title span{color:#8b98a8;font-size:12px}
.kv-table{width:100%;border-collapse:collapse}
.kv-table td{padding:8px 10px;font-size:13px;border-bottom:1px dashed #e6ebf1;color:#1d2a38}
.kv-table td:first-child{color:#8b98a8;width:130px;white-space:nowrap}
.kv-table tr:last-child td{border-bottom:0}
@media(max-width:1100px){.detail-grid{grid-template-columns:1fr}}

.modal-head.center-head{position:relative}
.modal-head.center-head>div{display:block;flex:1;text-align:center;padding:0 40px}
.modal-head.center-head h2{text-align:center;width:100%}
.modal-head.center-head small{display:block;color:#93a1b2;font-size:12px;font-weight:400;margin-top:4px}
.modal-head.center-head>button{position:absolute;right:4px;top:2px}
.assembly-create-modal .assembly-stage-grid.single-col{grid-template-columns:minmax(0,1fr)}
/* ===== V17.21 配件需求计算方式：按每套用量 / 按整批总量 / 上一次装配半成品 ===== */
.assembly-mode,.assembly-qty-cell{display:grid;gap:5px;min-width:0;align-self:end}
.assembly-mode>span,.assembly-qty-cell label>span{font-size:10px;font-weight:700;color:#53615a;white-space:nowrap}
.assembly-qty-cell label{display:grid;gap:5px;min-width:0;font-size:10px;font-weight:700}
.assembly-mode select,.assembly-qty-cell input{height:38px;min-width:0;border:1px solid #ccd7d1;border-radius:7px;padding:0 8px;background:#fff}
.assembly-req-row label[hidden]{display:none!important}
.assembly-qty-cell .assembly-batch-total{border-color:#a9d0ba;background:#fbfefc}
.assembly-mode .assembly-mode-select[disabled]{color:#5f6c65;background:#eef2f0;cursor:not-allowed}
.assembly-req-row{grid-template-columns:92px minmax(112px,1fr) minmax(100px,.9fr) 120px 112px 84px 132px minmax(118px,1.1fr) 100px 48px!important}
@media(max-width:1000px){.assembly-req-row{grid-template-columns:1fr 1fr 1fr!important}}
@media(max-width:620px){.assembly-req-row{grid-template-columns:1fr!important}}
/* ===== 批次详情：配送流程节点点击 + 小程序填写提交明细 ===== */
.flow-node{cursor:pointer;border-radius:10px;transition:background .15s ease}
.flow-node:hover{background:#eef4f3}
.flow-node.node-selected{background:#e2f3ef;box-shadow:inset 0 0 0 2px #b4e3d8}
.flow-node.node-selected i{color:#17816e;background:#b9e5da}
.flow-node.node-selected b{color:#0b6e62}
.flow-fill-block{background:#fff}
.flow-fill-block .flow-fill-hint{line-height:1.8;padding:26px 18px;text-align:center;color:#8b98a8}
.flow-fill-list{display:flex;flex-direction:column;gap:14px}
.flow-fill-item{background:#f8fafb;border:1px solid #e8edf1;border-radius:10px;padding:12px 14px}
.record-item.flow-fill-item{border-top:1px solid #e8edf1}
.flow-fill-item .record-meta .flow-items{color:#42515c;max-width:560px}
.flow-fill-fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:6px 20px;background:#fff;border:1px solid #edf1f4;border-radius:8px;padding:9px 12px;margin-top:9px}
.flow-fill-fields>div{display:flex;align-items:baseline;gap:8px;min-width:0;font-size:12px;line-height:1.6}
.flow-fill-fields span{color:#8b98a8;white-space:nowrap;flex:none}
.flow-fill-fields p{color:#1d2a38;margin:0;overflow-wrap:anywhere}
.flow-fill-links{display:flex;gap:16px;flex-wrap:wrap;margin-top:9px}
.flow-link{color:#159a8c;font-size:12px;text-decoration:none}
.flow-link:hover{color:#0e776c;text-decoration:underline}

/* ===== V21.49 小程序填写提交明细：适老化结构化卡片 =====
   结构：记录头（操作人员 + 本次数量）→ 部件清单（多行表格）→
        提交信息 / 配送与定位（分组网格）→ 备注 → 照片附件。
   说明：只在展示层重排现有字段，字段来源、排序、时间格式、照片链接均未改动。 */
.batch-detail-page .flow-fill-block .block-title{display:flex;align-items:center;justify-content:space-between;gap:10px 14px;flex-wrap:wrap;padding-bottom:12px;margin-bottom:16px;border-bottom:1px solid #eef3f5}
.batch-detail-page .flow-fill-block .block-title b{font-size:18px;color:#16232f}
.batch-detail-page #flow-fill-title{font-size:15px;line-height:1.5;font-weight:400;color:#0b6e62;background:#eef8f4;border:1px solid #cfe9df;border-radius:999px;padding:4px 12px;overflow-wrap:anywhere}
.batch-detail-page .flow-fill-list{gap:18px}
.batch-detail-page .ff-record{display:flex;flex-direction:column;gap:16px;min-width:0;padding:20px 22px;background:#fff;border:1px solid #e1e9ef;border-radius:14px}
.batch-detail-page .ff-record-head{display:flex;align-items:center;justify-content:space-between;gap:10px 16px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px dashed #e2e9ef}
.batch-detail-page .ff-record-who{display:flex;align-items:center;gap:8px 10px;flex-wrap:wrap;min-width:0}
.batch-detail-page .ff-rec-index{flex:none;font-size:14px;line-height:1.5;color:#4a5b68;background:#f1f5f7;border:1px solid #e1e9ef;border-radius:999px;padding:2px 10px;white-space:nowrap}
.batch-detail-page .ff-operator{font-size:19px;line-height:1.4;color:#16232f;overflow-wrap:anywhere;word-break:break-word}
.batch-detail-page .ff-role{font-size:14px;line-height:1.5;color:#0b6e62;background:#eef8f4;border:1px solid #cfe9df;border-radius:6px;padding:1px 8px;white-space:normal}
.batch-detail-page .ff-record-qty{display:flex;align-items:baseline;gap:6px;flex:none;color:#0b7a4b;white-space:nowrap}
.batch-detail-page .ff-record-qty span{font-size:14px;color:#4a5b68}
.batch-detail-page .ff-record-qty b{font-size:26px;font-weight:800;line-height:1.1}
.batch-detail-page .ff-record-qty em{font-size:15px;font-style:normal;color:#3d4f5c}
.batch-detail-page .ff-section{min-width:0}
.batch-detail-page .ff-section-title{display:flex;align-items:baseline;gap:8px 10px;flex-wrap:wrap;margin:0 0 10px;font-size:16px;font-weight:700;color:#16232f}
.batch-detail-page .ff-section-title span{font-size:14px;font-weight:400;color:#4a5b68}
.batch-detail-page .ff-table-wrap{overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;background:#fbfdfe;border:1px solid #e6edf2;border-radius:10px}
.batch-detail-page .ff-item-table{width:100%;min-width:640px;border-collapse:collapse;font-size:15px;background:transparent}
.batch-detail-page .ff-item-table th{padding:10px 12px;font-size:14px;font-weight:700;color:#3d4f5c;text-align:left;white-space:nowrap;background:#f1f6f5;border-bottom:1px solid #e1e9ef}
.batch-detail-page .ff-item-table td{padding:11px 12px;color:#1d2a38;text-align:left;vertical-align:top;border-bottom:1px solid #eef3f5;overflow-wrap:anywhere;word-break:break-word}
.batch-detail-page .ff-item-table tbody tr:last-child td{border-bottom:0}
.batch-detail-page .ff-item-table .ff-col-no{width:52px;color:#4a5b68;white-space:nowrap}
.batch-detail-page .ff-item-table .ff-col-name{min-width:170px;font-weight:700}
.batch-detail-page .ff-item-table .ff-col-spec{min-width:150px}
.batch-detail-page .ff-item-table .ff-col-code{min-width:150px}
.batch-detail-page .ff-item-table .ff-col-qty{width:110px;text-align:right;white-space:nowrap}
.batch-detail-page .ff-item-table .ff-qty-num{display:inline;font-size:17px;font-weight:800;color:#0b7a4b}
.batch-detail-page .ff-item-table .ff-qty-unit{display:inline;margin-left:2px;font-size:15px;color:#3d4f5c;white-space:nowrap}
.batch-detail-page .ff-item-table .ff-col-qty small{display:block;margin-top:2px;font-size:13px;font-weight:400;color:#b0560a;white-space:normal}
.batch-detail-page .ff-info{display:flex;flex-direction:column;gap:18px;min-width:0}
.batch-detail-page .ff-group{min-width:0}
.batch-detail-page .ff-group-title{position:relative;margin:0 0 10px;padding-left:11px;font-size:15px;font-weight:700;color:#0b6e62;line-height:1.5}
.batch-detail-page .ff-group-title:before{content:'';position:absolute;left:0;top:50%;width:4px;height:15px;border-radius:2px;background:#0b7a4b;transform:translateY(-50%)}
.batch-detail-page .ff-kv{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 24px;margin:0;padding:0}
.batch-detail-page .ff-kv-item{display:flex;flex-direction:column;gap:2px;min-width:0}
.batch-detail-page .ff-kv-item.is-wide{grid-column:1/-1}
.batch-detail-page .ff-kv-item dt{font-size:14px;line-height:1.5;color:#4a5b68}
.batch-detail-page .ff-kv-item dd{margin:0;font-size:16px;line-height:1.7;color:#16232f;overflow-wrap:anywhere;word-break:break-word}
.batch-detail-page .ff-kv-item.is-strong dd{font-weight:700;color:#16232f}
.batch-detail-page .ff-note{padding:14px 16px;background:#fdf9f1;border:1px solid #f0e2c8;border-radius:10px;min-width:0}
.batch-detail-page .ff-note-title{margin:0 0 6px;font-size:15px;font-weight:700;color:#8a5a12;line-height:1.5}
.batch-detail-page .ff-note p{margin:0;font-size:16px;line-height:1.8;color:#1d2a38;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}
.batch-detail-page .ff-attach{min-width:0}
.batch-detail-page .ff-attach-title{margin:0 0 10px;font-size:15px;font-weight:700;color:#0b6e62;line-height:1.5}
.batch-detail-page .ff-attach-list{display:flex;flex-wrap:wrap;gap:10px;min-width:0}
.batch-detail-page .ff-attach-link{display:inline-flex;align-items:center;gap:10px;max-width:100%;min-width:0;padding:10px 14px;background:#f1faf7;border:1px solid #bfe3d8;border-radius:10px;color:#0b6e62;font-size:15px;line-height:1.45;text-decoration:none}
.batch-detail-page .ff-attach-link:hover{background:#e6f6f0;border-color:#8fd0bf;color:#0a5f55;text-decoration:none}
.batch-detail-page .ff-attach-link:focus-visible{outline:3px solid #1d5fd0;outline-offset:2px}
.batch-detail-page .ff-attach-icon{flex:none;display:inline-flex;width:22px;height:22px;color:#159a8c}
.batch-detail-page .ff-attach-icon svg{width:22px;height:22px;fill:currentColor}
.batch-detail-page .ff-attach-body{display:flex;flex-direction:column;min-width:0}
.batch-detail-page .ff-attach-body b{font-size:15px;font-weight:700;overflow-wrap:anywhere;word-break:break-word}
.batch-detail-page .ff-attach-body small{font-size:13px;line-height:1.5;color:#4a6b62;overflow-wrap:anywhere;word-break:break-word}
@media (max-width:1100px){
  .batch-detail-page .ff-kv{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:720px){
  .batch-detail-page .ff-record{padding:16px 14px;border-radius:12px;gap:14px}
  .batch-detail-page .ff-kv{grid-template-columns:1fr;gap:10px}
  .batch-detail-page .ff-record-qty b{font-size:23px}
  /* 手机：部件清单由表格改为纵向堆叠，字段不横滑、不挤压 */
  .batch-detail-page .ff-table-wrap{overflow:visible;background:transparent;border:0;border-radius:0}
  .batch-detail-page .ff-item-table{display:block;width:100%;min-width:0;font-size:15px}
  .batch-detail-page .ff-item-table thead{display:none}
  .batch-detail-page .ff-item-table tbody{display:block}
  .batch-detail-page .ff-item-table tr{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 10px;padding:12px 14px;margin-bottom:10px;background:#fff;border:1px solid #e6edf2;border-radius:10px}
  .batch-detail-page .ff-item-table tr:last-child{margin-bottom:0}
  .batch-detail-page .ff-item-table td{display:block;padding:0;border:0;text-align:left;white-space:normal;font-size:15px;line-height:1.6}
  .batch-detail-page .ff-item-table .ff-col-no{grid-column:1;grid-row:1;align-self:center;justify-self:start;width:auto;padding:0 8px;font-size:14px;color:#4a5b68;background:#f1f5f7;border-radius:999px}
  .batch-detail-page .ff-item-table .ff-col-name{grid-column:1/-1;grid-row:1;min-width:0;padding-left:44px;font-size:16px;font-weight:700}
  .batch-detail-page .ff-item-table .ff-col-spec{grid-column:1/-1;grid-row:2;color:#3d4f5c}
  .batch-detail-page .ff-item-table .ff-col-code{grid-column:1/-1;grid-row:3;color:#3d4f5c}
  .batch-detail-page .ff-item-table .ff-col-spec:before,.batch-detail-page .ff-item-table .ff-col-code:before{content:attr(data-label) '：';font-size:14px;color:#6b7a86}
  .batch-detail-page .ff-item-table .ff-col-qty{grid-column:1/-1;grid-row:4;width:auto;text-align:right;margin-top:4px}
  .batch-detail-page .ff-item-table .ff-col-qty:before{content:'数量：';font-size:14px;color:#6b7a86;margin-right:4px}
  .batch-detail-page .ff-attach-link{width:100%}
}
/* ===== V21.50 批次详情：右侧「配送流程」随页面滚动悬浮 =====
   面板原本 overflow:hidden 会让 position:sticky 失效（hidden 会生成滚动容器），
   这里改用 overflow:clip：仍然按圆角裁剪，但不产生滚动容器，粘性定位可正常工作。 */
@media (min-width:1101px){
  .batch-detail-page{overflow:clip}
  /* 底部留出悬浮「返回列表」按钮的高度，避免按钮压住流程节点的最后一项 */
  .batch-detail-page .detail-side{position:sticky;top:92px;align-self:start;max-height:calc(100vh - 176px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
}
/* ===== V21.51 批次详情：向下滚动时悬浮的「返回列表」按钮 =====
   顶部操作区滚出视口后由脚本加上 .is-visible 显示；按钮固定在右侧，滚动中随时可以返回列表。 */
.batch-detail-page .detail-back-float{position:fixed;right:30px;bottom:26px;z-index:55;display:none;align-items:center;justify-content:center;min-height:50px;padding:0 26px;border-radius:999px;box-shadow:0 12px 26px rgba(11,122,75,.30),0 2px 6px rgba(16,40,30,.18)}
.batch-detail-page .detail-back-float.is-visible{display:inline-flex}
@media (max-width:1100px){
  /* 窄屏时右侧栏不再悬浮，页面底部留出按钮空间，避免最后一块内容被遮挡 */
  .batch-detail-page{padding-bottom:76px}
}
@media (max-width:760px){
  .batch-detail-page .detail-back-float{right:16px;bottom:16px;min-height:48px;padding:0 20px}
}
/* ===== V21.54 左侧模块导航：页面向下滚动时导航跟随视口悬浮 =====
   悬浮的是 aside 内的 nav，aside 本身仍按栅格拉伸铺满整列，
   所以侧栏的宽度、白色底色与右侧分隔线都保持原样，只有菜单随滚动停靠。 */
@media (min-width:901px){
  .admin-layout > aside > nav{position:sticky;top:calc(var(--by-topbar-h, 76px) + 14px);max-height:calc(100vh - var(--by-topbar-h, 76px) - 28px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
}
/* ===== 配送批次列表页：标题居中、隐藏日期 ===== */
.page-head.batch-list-head{flex-direction:column;justify-content:center;align-items:center;text-align:center}
.page-head.batch-list-head h1{font-size:26px}
.page-head.batch-list-head .ph-title{display:flex;justify-content:center}
.page-head.batch-list-head .primary{margin-top:10px}
/* ===== 批次详情标题居中（只保留批号+状态）===== */
.detail-title-center{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.detail-title-center h2{justify-content:center;margin-bottom:0}
/* ===== 新建批次：镀锌/涂装单位下拉 ===== */
.batch-item-field select{width:100%;height:38px;border:1px solid #d8dfe4;border-radius:6px;padding:0 8px;background:#fff;color:#1d2a38;font-size:12px}

/* ===== 人员管理子模块：仓库管理 ===== */
.admin-layout aside nav .nav-sub{display:flex;flex-direction:column;gap:2px;margin:2px 0 6px}
.admin-layout aside nav .nav-sub-item{width:100%;border:0;background:transparent;color:#7d8b95;font-size:13px;text-align:left;padding:7px 12px 7px 42px;border-radius:8px;cursor:pointer;position:relative}
.admin-layout aside nav .nav-sub-item:before{content:'';position:absolute;left:28px;top:50%;width:5px;height:5px;border-radius:50%;background:#b9c4cb;transform:translateY(-50%)}
.admin-layout aside nav .nav-sub-item:hover{background:#f2f6f8;color:#1d2a38}
.admin-layout aside nav .nav-sub-item.active{background:#e8f1fb;color:#1a6fd4;font-weight:600}
.wh-source{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;line-height:18px;white-space:nowrap}
.wh-source.mini{background:#e6f7ee;color:#0f8a52}
.wh-source.web{background:#e8f1fb;color:#1a6fd4}
.wh-plus{color:#0f8a52;font-weight:600}
.wh-minus{color:#d93025;font-weight:600}
.wh-error{margin:0 0 12px;padding:10px 14px;border-radius:8px;background:#fdecea;color:#b3261e;font-size:13px}
.manage-head .manage-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* ===== V17.27 部件米数（选填，仅用于导出）：名称框缩短约1/3，数量后新增米数框 ===== */
.batch-item-row{grid-template-columns:minmax(110px,0.85fr) minmax(150px,1.1fr) 82px 145px 105px 165px 70px!important}
.item-length-field{min-width:0}
.item-length-meters{width:100%;box-sizing:border-box}
/* ===== V17.28 部件明细改为两行：行首序号；第一行 名称/代号/规格/数量/图纸，其余第二行 ===== */
.batch-item-row{display:grid;grid-template-columns:34px 1fr;gap:10px;align-items:end;padding:14px 0!important}
.batch-item-row .item-index{font-size:13px;font-weight:800;color:#7a8780;line-height:44px;text-align:center}
.item-line{display:grid;gap:12px;align-items:end;min-width:0}
.item-line-main{grid-template-columns:minmax(150px,1.1fr) minmax(150px,1.1fr) 110px 120px 165px}
.item-line-extra{grid-template-columns:minmax(130px,1fr) 118px 130px 165px auto auto;margin-top:10px}
@media(max-width:1200px){.item-line-extra{grid-template-columns:minmax(120px,1fr) 110px 120px 150px}.item-line-extra .new-item-assembly-cell{grid-column:1/-1}.item-line-extra .remove-item{grid-column:auto}}
@media(max-width:900px){.batch-item-row{grid-template-columns:26px 1fr!important}.item-line-main{grid-template-columns:1fr 1fr!important}.item-line-extra{grid-template-columns:1fr 1fr!important}}
@media(max-width:580px){.batch-item-row{grid-template-columns:1fr!important}.batch-item-row .item-index{text-align:left!important;line-height:20px}.item-line-main,.item-line-extra{grid-template-columns:1fr!important}}
/* 修正：两个 .item-line 都强制放在 col2（1fr 列），避免被挤到序号列 34px；序号跨两行 */
.batch-item-row>.item-line{grid-column:2!important}
.batch-item-row .item-index{grid-row:1/span 2;align-self:start;padding-top:6px}
/* 弹窗加大到 1280px，避免部件明细两行拥挤 */
.batch-create-modal{width:min(1280px,98vw)!important}
/* V17.28 修复：父 grid 6 列 2 行；item-index 跨两行；item-line-main 占 row1 col2-6 内部5等分；item-line-extra 占 row2 col2-6 内部 flex-wrap */
.batch-item-row{grid-template-columns:34px repeat(5,minmax(110px,1fr))!important;grid-template-rows:auto auto!important;row-gap:10px!important;align-items:end!important}
.batch-item-row .item-index{grid-column:1!important;grid-row:1/span 2!important;align-self:start!important;padding-top:24px!important;line-height:1!important}
.batch-item-row>.item-line-main{grid-column:2/span 5!important;grid-row:1!important;display:grid!important;grid-template-columns:repeat(5,minmax(0,1fr))!important;gap:10px!important;min-width:0!important}
.batch-item-row>.item-line-extra{grid-column:2/span 5!important;grid-row:2!important;display:flex!important;flex-wrap:wrap!important;gap:10px!important;min-width:0!important;margin-top:0!important}
.item-line-extra>*{flex:0 0 auto;min-width:130px;max-width:100%}
.item-line-extra .new-item-assembly-cell{min-width:200px}
.item-line-extra .remove-item{margin-left:auto}
@media(max-width:900px){.batch-item-row{grid-template-columns:30px repeat(2,minmax(120px,1fr))!important}.batch-item-row>.item-line-main{grid-template-columns:repeat(2,1fr)!important}}
/* V17.28 微调：序号缩小并靠最左；米数移到第一行数量之后（第一行 6 项） */
.batch-item-row .item-index{font-size:12px!important;font-weight:600!important;text-align:left!important;padding-left:0!important;padding-top:2px!important}
.batch-item-row>.item-line-main{grid-template-columns:1.4fr 1.2fr 1fr 90px 110px 165px!important}
@media(max-width:900px){.batch-item-row>.item-line-main{grid-template-columns:repeat(2,1fr)!important}}
/* V17.28 微调2：第一行含图纸+部件材料，7列固定宽度整体靠左（从序号后开始），不再均分占满 */
.batch-item-row>.item-line-main{grid-template-columns:190px 160px 105px 85px 95px 150px 135px!important;justify-content:start!important}
.batch-item-extras{display:flex;flex-wrap:wrap;gap:10px;min-width:0}
.batch-item-extras>*{flex:0 0 auto}
@media(max-width:900px){.batch-item-row>.item-line-main{grid-template-columns:repeat(2,minmax(130px,1fr))!important}}
/* 序号列与首列字段靠近：缩窄序号列 34→22px、列间距 10→6px */
.batch-item-row{grid-template-columns:22px repeat(5,minmax(110px,1fr))!important;column-gap:6px!important;row-gap:6px!important}
.batch-item-row .item-index{font-size:12px!important;line-height:1!important;padding-top:14px!important}
/* 去掉序号列，两行都从第 1 列开始整体靠左 */
.batch-item-row{grid-template-columns:minmax(0,1fr)!important;column-gap:0!important;row-gap:8px!important}
.batch-item-row>.item-line-main{grid-column:1!important;justify-content:start!important}
.batch-item-row>.item-line-extra{grid-column:1!important;justify-content:flex-start!important}
.batch-item-row .item-index{display:none!important}
/* V17.29：处理流程与镀锌/涂装单位、涂装代码紧跟部件材料同一行；二次装配与删除同一行；整体靠左 */
.batch-item-row{grid-template-columns:minmax(0,1fr)!important;row-gap:8px!important}
.batch-item-row>.item-line-main,.batch-item-row>.item-line-extra{grid-column:1!important;grid-row:auto!important;display:flex!important;flex-wrap:wrap!important;justify-content:flex-start!important;align-items:flex-end!important;gap:12px!important}
.item-line-main>*,.item-line-extra>*{flex:0 0 auto}
.item-line-main .item-name-field{width:180px}
.item-line-main .item-number-field{width:150px}
.item-line-main .item-spec-field{width:95px}
.item-line-main .item-qty-field{width:80px}
.item-line-main .item-length-field{width:90px}
.item-line-main .new-item-drawing-cell{width:150px}
.item-line-main .item-material-field{width:125px}
.item-line-main .item-route-field{width:150px}
.item-line-main .batch-item-extras{display:flex;flex-wrap:wrap;gap:12px;min-width:0}
.batch-item-extras[hidden]{display:none!important}
.item-line-main .batch-item-extras>*{width:125px}
.item-line-extra .new-item-assembly-cell{min-width:240px}
.item-line-extra .remove-item{margin-left:0}
.batch-create-modal{width:min(1500px,98vw)!important}
/* V17.29b：三行结构——第一行字段；第二行 处理流程+镀锌/涂装单位+涂装代码；第三行 二次装配+删除 */
.batch-item-row>.item-line{grid-column:1!important;grid-row:auto!important;display:flex!important;flex-wrap:wrap!important;justify-content:flex-start!important;align-items:flex-end!important;gap:12px!important;min-width:0}
.batch-item-row>.item-line>*{flex:0 0 auto}
.batch-item-row>.item-line-route{margin-top:2px}
.item-line-route .item-route-field{width:150px}
.item-line-route .batch-item-extras{display:flex;flex-wrap:wrap;gap:12px;min-width:0}
.item-line-route .batch-item-extras>*{width:140px}
/* 每行改为 grid 铺满整行：字段从左到右均匀分布 */
.batch-item-row>.item-line-main{display:grid!important;grid-template-columns:100px 100px minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) 50px 75px 190px!important;gap:12px!important;align-items:end!important}
.batch-item-row>.item-line-route{display:grid!important;grid-template-columns:190px minmax(0,1fr)!important;gap:12px!important;align-items:end!important}
.batch-item-row>.item-line-extra{display:grid!important;grid-template-columns:minmax(0,1fr) 120px!important;gap:12px!important;align-items:end!important}
.item-line-main>*{width:auto!important;min-width:0}
.item-line-route .batch-item-extras{display:flex;flex-wrap:wrap;gap:12px;min-width:0}
.item-line-route .batch-item-extras>*{width:150px;flex:0 0 auto}
.item-line-extra .new-item-assembly-cell{min-width:0;width:auto}
.item-line-extra .remove-item{width:120px;margin-left:0}
/* 每行 flex 均匀分布：7 字段固定宽+space-between 铺满，不留大片空白 */
.batch-item-row>.item-line-main{display:flex!important;flex-wrap:wrap!important;justify-content:space-between!important;align-items:flex-end!important;gap:12px!important;min-width:0}
.batch-item-row>.item-line-main>*{flex:0 0 auto}
.item-line-main .item-name-field{width:175px}
.item-line-main .item-number-field{width:150px}
.item-line-main .item-spec-field{width:100px}
.item-line-main .item-qty-field{width:80px}
.item-line-main .item-length-field{width:95px}
.item-line-main .new-item-drawing-cell{width:150px}
.item-line-main .item-material-field{width:130px}
.batch-item-row>.item-line-route{display:flex!important;flex-wrap:wrap!important;justify-content:space-between!important;align-items:flex-end!important;gap:12px!important;min-width:0}
.item-line-route>*{flex:0 0 auto}
.item-line-route .item-route-field{width:180px}
.item-line-route .batch-item-extras{display:flex;flex-wrap:wrap;gap:12px;min-width:0}
.item-line-route .batch-item-extras>*{width:155px;flex:0 0 auto}
.batch-item-row>.item-line-extra{display:flex!important;flex-wrap:wrap!important;justify-content:space-between!important;align-items:flex-end!important;gap:12px!important;min-width:0}
.item-line-extra .new-item-assembly-cell{flex:1 1 auto;min-width:240px}
.item-line-extra .remove-item{flex:0 0 120px;margin-left:0}
/* 每个字段：标题与输入框横向排列（标题在左、输入框在右），不再上下堆叠 */
.item-line .batch-item-field{display:flex!important;flex-direction:row!important;align-items:center!important;gap:8px!important;flex-wrap:nowrap!important;min-width:0}
.item-line .batch-item-field>span{flex:0 0 auto;white-space:nowrap;font-size:12px;font-weight:700;color:#26352c}
.item-line .batch-item-field>input,.item-line .batch-item-field>select{flex:1 1 auto;min-width:0;width:auto!important}
/* 字段加宽以容纳"标题+输入框"横向排列 */
.item-line-main .item-name-field{width:215px!important}
.item-line-main .item-number-field{width:205px!important}
.item-line-main .item-spec-field{width:175px!important}
.item-line-main .item-qty-field{width:150px!important}
.item-line-main .item-length-field{width:200px!important}
.item-line-main .item-material-field{width:195px!important}
.item-line-main .new-item-drawing-cell{width:170px!important}
.item-line-route .item-route-field{width:225px!important}
.item-line-route .batch-item-extras>*{width:225px!important}
/* 恢复字段为"标题在上、输入框在下"；第一行 7 个字段等分铺满整行 */
.item-line .batch-item-field{display:grid!important;gap:6px!important;align-items:stretch!important}
.item-line .batch-item-field>span{font-size:11px}
.item-line .batch-item-field>input,.item-line .batch-item-field>select{width:auto!important;min-width:0}
.item-line-main .item-name-field,
.item-line-main .item-number-field,
.item-line-main .item-spec-field,
.item-line-main .item-qty-field,
.item-line-main .item-length-field,
.item-line-main .item-material-field,
.item-line-main .new-item-drawing-cell{width:auto!important;min-width:0}
.batch-item-row>.item-line-main{display:grid!important;grid-template-columns:100px 100px minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) 50px 75px 190px!important;gap:12px!important;align-items:end!important;justify-content:stretch!important}
/* V21.24 添加图纸 / 删除紧跟在部件材料后面，横向并排、与输入框底边对齐 */
.batch-item-row>.item-line-main>.batch-item-actions{display:flex!important;align-items:flex-end!important;gap:10px!important;min-width:0!important}
/* 三行都左右两端对齐：整行铺满，首字段贴左、末字段贴右 */
.batch-item-row{width:100%!important;max-width:100%!important}
.item-rows,.item-editor{width:100%!important;max-width:100%!important}
.batch-item-row>.item-line{display:grid!important;gap:12px!important;align-items:end!important;width:100%!important;min-width:0}
.batch-item-row>.item-line-main{grid-template-columns:100px 100px minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) 50px 75px 190px!important;justify-content:stretch!important}
.batch-item-row>.item-line-route{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))!important;justify-content:stretch!important}
.batch-item-row>.item-line-extra{grid-template-columns:minmax(0,1fr) 140px!important;justify-content:stretch!important}
.batch-item-row>.item-line>*{min-width:0;justify-self:stretch}
.item-line-extra .new-item-assembly-cell{width:auto!important;min-width:0}
.item-line-extra .remove-item{width:140px!important;justify-self:end;margin-left:0}

/* V19.10 找货（找回）：有找货记录的批次，批号显示黄色。
   仅作为业务提示，不改变原有状态颜色（运输中/已完成/待处理）与任何流程、数量口径。 */

/* ===== V20.15 外购件任务分类标签（已完成 / 处理中；未下需求 / 未备货 / 未领取） ===== */
.wh-tabs{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 14px}
.wh-tabs.sub{margin-top:-4px}
.wh-tab{padding:9px 18px;border:1px solid #d7e0da;border-radius:999px;background:#fff;color:#3c4a42;font-size:14px;font-weight:700;cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.wh-tab:hover{background:#f2f7f4}
.wh-tab.active{background:#078648;border-color:#078648;color:#fff}
/* V20.15 外购件任务列表状态徽标 */
.wh-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:800}
.wh-badge.doing{background:#fff1d9;color:#995800}
.wh-badge.done{background:#e5f5eb;color:#078648}
.wh-tabs + .table-wrap td small{display:block;margin-top:4px;color:#7b8993;font-size:12px}
/* V20.22 外购件管理：处理中任务里「已备货、未领取」的批次整行标绿 */
.ready-pick-row{background:#e9f8ef}
.ready-pick-row:hover{background:#dcf3e6}

/* ===== V21.00 流程回溯 ===== */
.revert-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-top:12px}
.revert-form label{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:700;color:#5a6b62}
.revert-form select,.revert-form input{padding:9px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:#fff;color:var(--ink)}
.revert-form select:disabled,.revert-form input:disabled{background:#f4f6f8;color:#9aa5ad}
.revert-reason{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:700;color:#5a6b62;margin-top:14px}
.revert-reason textarea{padding:10px;border:1px solid var(--line);border-radius:8px;font-size:13px;font-family:inherit;resize:vertical}
.revert-info{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin-top:14px;padding:12px 14px;background:#f7f9fb;border:1px solid #e6ebf1;border-radius:10px}
.revert-info>div{display:flex;flex-direction:column;gap:4px}
.revert-info span{font-size:11px;color:var(--muted)}
.revert-info p{font-size:13px;font-weight:700;color:var(--ink)}
.revert-hint{margin-top:12px;font-size:11px;color:var(--muted);line-height:1.7}

/* ===================== V21.33 批次当前定位地图 ===================== */
/* 占位块高度固定，地图容器挂在 body 下并按它定位，页面重绘时不会清掉地图实例 */
.batch-map-block .batch-map-slot{position:relative;height:380px;border-radius:12px;background:#f4f7f5;border:1px dashed #cfdcd4;overflow:hidden;display:flex;align-items:center;justify-content:center}
.batch-map-empty{margin:0;padding:18px 22px;max-width:520px;text-align:center;font-size:13px;line-height:1.7;color:#7b8a82}
.batch-map-portal{position:fixed;z-index:60;border-radius:12px;overflow:hidden;background:#fff;box-shadow:0 10px 26px rgba(16,40,28,.12)}
.batch-map-canvas{width:100%;height:100%}
/* 聚合标记：圆角气泡 + 小三角 */
.batch-map-marker{position:relative;display:flex;align-items:center;justify-content:center;min-width:30px;height:30px;padding:0 8px;box-sizing:border-box;border:2px solid #fff;border-radius:15px;background:#0b7a4b;color:#fff;font-size:12px;font-weight:800;box-shadow:0 4px 10px rgba(6,60,36,.35)}
.batch-map-marker::after{content:"";position:absolute;left:50%;bottom:-5px;width:8px;height:8px;background:#0b7a4b;border-left:2px solid #fff;border-bottom:2px solid #fff;border-radius:0 0 0 2px;transform:translateX(-50%) rotate(-45deg)}
/* 标记弹窗 */
.batch-map-pop{min-width:220px;max-width:320px;padding:12px 14px;font-size:12px;line-height:1.6;color:#20342a}
.batch-map-pop-head{display:flex;flex-direction:column;gap:2px;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid #e6ede9;font-size:13px;font-weight:800}
.batch-map-pop-head span{font-size:11px;font-weight:600;color:#7b8a82}
.batch-map-pop-row+.batch-map-pop-row{margin-top:8px;padding-top:8px;border-top:1px dashed #eef3f0}
.batch-map-pop-line{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}
.batch-map-pop-line b{font-size:13px}
.batch-map-pop-line span{font-size:11px;color:#7b8a82}
.batch-map-pop-line em{margin-left:auto;font-style:normal;font-weight:800;color:#0b7a4b}
.batch-map-pop-row small{display:block;margin-top:2px;font-size:11px;color:#7b8a82;word-break:break-all}
@media(max-width:900px){.batch-map-block .batch-map-slot{height:300px}}
@media(max-width:580px){.batch-map-block .batch-map-slot{height:240px}.batch-map-pop{max-width:240px}}
/* V21.34 定位地图里的「重新登录」按钮 */
.batch-map-empty .batch-map-relogin{margin-left:8px;padding:3px 12px;border:1px solid #8fc8a9;border-radius:6px;background:#f2faf5;color:#087b46;font-size:12px;font-weight:700;cursor:pointer}
.batch-map-empty .batch-map-relogin:hover{background:#e7f6ed}
/* V21.39 部件导航清单：模块顶端列出所有定位点，点一下就在地图上跳到该位置 */
.batch-map-nav{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.batch-map-nav[hidden]{display:none}
.batch-map-nav-item{display:flex;flex-direction:column;align-items:flex-start;gap:2px;max-width:230px;padding:8px 12px;border:1px solid #d6e3db;border-radius:10px;background:#fff;cursor:pointer;text-align:left;font-family:inherit;font-size:12px;line-height:1.45;transition:border-color .15s,box-shadow .15s,background .15s}
.batch-map-nav-item:hover{border-color:#8fc8a9;background:#f6fbf8}
.batch-map-nav-item.active{border-color:#0b7a4b;background:#f2faf5;box-shadow:0 0 0 2px rgba(11,122,75,.12)}
.batch-map-nav-item b{color:#0b7a4b;font-size:13px}
.batch-map-nav-item span{color:#20342a;font-weight:700;word-break:break-all}
.batch-map-nav-item small{color:#7b8a82;font-size:11px;word-break:break-all}
@media(max-width:580px){.batch-map-nav-item{max-width:100%;flex:1 1 46%}}

/* ===== V21.42 批次详情标题：船号与批号同一行左右排布、中间留空，字号放大 2 倍并居中 ===== */
.detail-title-center h2{flex-direction:row;align-items:baseline;justify-content:center;flex-wrap:nowrap;gap:0 48px}
.detail-title-center .detail-ship-no{font-size:44px;font-weight:800;line-height:1.14;letter-spacing:1px;color:#20342a;white-space:nowrap}
.detail-title-center .detail-batch-no{display:flex;align-items:center;justify-content:center;flex-wrap:nowrap;gap:10px;font-size:44px;font-weight:800;line-height:1.14;color:#20342a;white-space:nowrap}
/* 窄屏时为保证「同一行左右」不折行，按宽度分档收字号（大屏仍是 2 倍的 44px） */
@media(max-width:1440px){.detail-title-center .detail-ship-no,.detail-title-center .detail-batch-no{font-size:34px}}
@media(max-width:1100px){.detail-title-center .detail-ship-no,.detail-title-center .detail-batch-no{font-size:26px}}
@media(max-width:760px){.detail-title-center .detail-ship-no,.detail-title-center .detail-batch-no{font-size:20px}}

/* ===== V21.40 部件明细：图纸与操作合并为同一格 =====
   V23.41 拆成「图纸」「绘图」两列后，格宽交给列宽控制，去掉写死的 min-width 以免撑破列；
   V23.42 单元格内容改为居中，按钮跟随居中对齐 */
.item-drawing-cell{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0}
.item-drawing-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:6px}
.item-drawing-actions .link-btn{white-space:nowrap}

/* ===== V21.46 工作台页头回到与其它模块一致的左对齐格式（原 V21.43 的居中放大规则已移除） ===== */

/* ===== V23.18 新建批次弹窗占满可用空间（兜底规则，与 v23 样式表内容一致） ===== */
.modal-backdrop .modal.batch-create-modal:not(.batch-edit-modal) {
  width: min(2136px, calc(100vw - 24px)) !important;
  max-width: calc(100vw - 24px) !important;
  height: calc(100vh - 24px) !important;
  max-height: calc(100vh - 24px) !important;
  display: flex !important;
  flex-direction: column !important;
  overflow: hidden !important;
}
.modal-backdrop .modal.batch-create-modal:not(.batch-edit-modal) > .modal-head,
.modal-backdrop .modal.batch-create-modal:not(.batch-edit-modal) > .form-grid,
.modal-backdrop .modal.batch-create-modal:not(.batch-edit-modal) > .modal-actions,
.modal-backdrop .modal.batch-create-modal:not(.batch-edit-modal) > datalist { flex: 0 0 auto; }
.modal-backdrop .modal.batch-create-modal:not(.batch-edit-modal) > .item-editor { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.modal-backdrop .modal.batch-create-modal:not(.batch-edit-modal) > .item-editor > .item-editor-head { flex: 0 0 auto; }
.modal-backdrop .modal.batch-create-modal:not(.batch-edit-modal) .item-rows { flex: 1 1 auto; min-height: 0; max-height: none !important; overflow: auto; }
