/* Internal pages use the storefront's type, spacing and shape system. */
.st-operations,.crm-overlay,.flow-popup {
  --ops-text:var(--ink,#162446);
  --ops-blue:var(--blue,#081f80);
  --ops-muted:var(--muted,#677080);
  --ops-line:#16244612;
  --ops-soft:#f5f7fb;
  --ops-radius:var(--st-radius-card,12px);
  color:var(--ops-text);
  font-family:inherit;
  font-size:var(--st-font-body,14px);
  line-height:1.6;
}
body .commerce-dialog.st-operations>.dialog-head.st-page-header {
  grid-template-columns:36px minmax(0,1fr) auto;
  gap:8px;
  min-height:54px;
  padding:6px max(12px,calc((100vw - 1160px)/2));
}
body .commerce-dialog.st-operations>.dialog-head>.st-page-heading-copy {
  grid-column:2;grid-row:1;justify-self:start;text-align:left;margin:0;min-width:0;
}
body .commerce-dialog.st-operations>.dialog-head [data-close] {
  grid-column:1;grid-row:1;width:36px;height:36px;min-height:36px;font-size:22px;
}
body .commerce-dialog.st-operations>.dialog-head #st-dialog-title {
  font-size:15px;font-weight:750;line-height:1.25;letter-spacing:-.02em;text-align:left;
}
body .commerce-dialog.st-operations>.dialog-head>.dialog-head-actions {
  grid-column:3;grid-row:1;position:static;transform:none;justify-self:end;margin:0;gap:6px;
}
body .commerce-dialog.st-operations>.dialog-head .st-page-heading-copy small {font-size:7px;letter-spacing:1px}
body .commerce-dialog.st-operations:not([data-view="报价单"])>.dialog-body {
  width:min(1160px,100%);padding:12px 16px 40px;box-sizing:border-box;
}
.st-operations :is(h2,h3,p){overflow-wrap:anywhere}
.commerce-dialog.st-operations[aria-busy="true"]>.dialog-head::after{content:"";position:absolute;inset:auto 0 0;height:2px;background:var(--ops-blue);opacity:.35;pointer-events:none}
.st-operations :is(h2,h3){letter-spacing:-.02em}
body .commerce-dialog.st-operations .history-heading{padding:0;margin:0 0 8px}
body .commerce-dialog.st-operations .history-heading h2{font-size:18px;line-height:1.35;margin:0 0 4px}
body .commerce-dialog.st-operations .history-heading p{font-size:11px;margin:0;color:var(--ops-muted)}
.st-operations .history-heading>.eyebrow{display:none}
.st-operations .workbench-tiles {padding:0;gap:8px}
.st-operations .workbench-tile {padding:12px;gap:2px 10px;background:#fff;border-color:var(--ops-line);border-radius:var(--ops-radius);box-shadow:0 2px 10px #16244604}
.st-operations .workbench-tile strong{font-size:14px;line-height:1.4}
.st-operations .workbench-tile small{font-size:11px;line-height:1.45}
.st-operations .workbench-tile-mark{width:36px;height:36px;border-radius:9px;background:var(--ops-soft);color:var(--ops-blue)}
.st-operations .workbench-tile-mark svg{width:18px;height:18px}
.st-operations :is(.workbench-sync,.wb-status-panel,.quote-preview){margin:12px 0;padding:12px;border-color:var(--ops-line);border-radius:var(--ops-radius)}
body .commerce-dialog.st-operations .workbench-sync{margin:0 0 12px;padding:12px;border-color:var(--ops-line);border-radius:var(--ops-radius)}
body .commerce-dialog.st-operations .workbench-sync h2,body .commerce-dialog.st-operations .workbench-sync h3{font-size:16px;margin:0 0 4px}
.st-operations .workbench-sync p{font-size:11px;line-height:1.5;margin:8px 0}
.st-operations .workbench-sync .eyebrow{font-size:9px;margin:0 0 6px}
body .commerce-dialog.st-operations .workbench-sync :is(button,.button){min-height:40px;padding:8px 12px;font-size:12px;border-radius:8px}
body .commerce-dialog.st-operations .workbench-sync-head{flex-direction:row;align-items:center;gap:8px}
body .commerce-dialog.st-operations .workbench-sync-head>.button{width:auto;flex:none}
body .commerce-dialog.st-operations .workbench-sync .button i{width:24px;height:24px;min-width:24px;border-radius:6px}
body .commerce-dialog.st-operations .workbench-sync .button i svg{width:14px;height:14px}
body .commerce-dialog.st-operations .workbench-sync-hint{margin:8px 0 0;font-size:11px;line-height:1.5}
body .commerce-dialog.st-operations .workbench-sync-list{gap:6px;margin-top:8px}
body .commerce-dialog.st-operations .workbench-sync-loading{margin:0;padding:6px 0;font-size:11px}
body .commerce-dialog.st-operations .workbench-sync-foot:empty{display:none}
.st-operations .workbench-sync-item{padding:10px;gap:8px}

/* Shared rhythm: 8px inside a group, 16px between groups, 24px between sections. */
.st-operations .crm-page,.crm-overlay .crm-page {gap:var(--st-space-4,16px);padding:0;margin:0;max-width:none;font:inherit;color:inherit}
.st-operations .crm-page h2{font-size:var(--st-font-heading,22px);line-height:1.35;margin:0;letter-spacing:-.02em}
.st-operations .crm-page h3,.crm-overlay .crm-page h3{font-size:var(--st-font-subheading,16px);line-height:1.4;margin:0}
.st-operations .crm-page p,.crm-overlay .crm-page p{margin:0;font-size:var(--st-font-body,14px);line-height:1.6}
.st-operations .crm-page :is(button,input,select,textarea),.crm-overlay .crm-page :is(button,input,select,textarea){font-family:inherit;font-size:var(--st-font-body,14px)}
.st-operations .crm-page button,.crm-overlay .crm-page button {
  min-height:var(--st-control-height,44px);padding:10px 14px;border-radius:var(--st-radius-control,8px);line-height:1.4;
}
.st-operations .crm-page .button,.crm-overlay .crm-page .button{justify-content:center;gap:8px}
.st-operations .crm-page :is(input,select),.crm-overlay .crm-page :is(input,select) {
  min-height:var(--st-control-height,44px);padding:10px 12px;border-radius:var(--st-radius-control,8px);font-size:var(--st-font-body,14px);
}
.st-operations .crm-page textarea,.crm-overlay .crm-page textarea {min-height:72px;padding:9px 10px;font-size:var(--st-font-body,14px);border-radius:8px}
.st-operations .crm-page .crm-check,.crm-overlay .crm-page .crm-check{min-height:44px;align-items:center}
.st-operations .crm-page label,.crm-overlay .crm-page label{font-size:var(--st-font-caption,12px);gap:6px;line-height:1.5}
.st-operations .crm-page .crm-form label,.crm-overlay .crm-page .crm-form label{font-size:var(--st-font-caption,12px)}
.st-operations .crm-page :is(input[type=checkbox],input[type=radio]),.crm-overlay .crm-page :is(input[type=checkbox],input[type=radio]){width:16px;height:16px;min-height:16px;padding:0;flex:none}
.st-operations :is(.crm-card,.crm-notice,.crm-form,.crm-window,.crm-visit-plan,.crm-driver-card),.crm-overlay :is(.crm-card,.crm-notice,.crm-form,.crm-window) {
  padding:var(--st-space-3,12px);border-radius:var(--ops-radius);border-color:var(--ops-line);box-shadow:0 2px 10px #16244603;
}
.st-operations .crm-form,.crm-overlay .crm-form{gap:var(--st-space-2,8px)}
.st-operations .crm-form fieldset,.crm-overlay fieldset{padding:10px;border-radius:10px;border-color:var(--ops-line)}
.st-operations :is(.crm-form fieldset,.crm-window){gap:8px}
.st-operations .crm-grid,.crm-overlay .crm-grid{gap:8px}
.st-operations :is(.crm-notice,.crm-muted,.crm-details small),.crm-overlay :is(.crm-muted,.crm-notice){font-size:var(--st-font-caption,12px);line-height:1.6;color:var(--ops-muted)}
.st-operations .crm-error:empty,.crm-overlay .crm-error:empty{display:none}
.st-operations .crm-notice{background:var(--ops-soft);border:0;padding:10px 12px}
.st-operations .crm-card{display:grid;gap:6px;align-content:start}
.st-operations .crm-card p{line-height:1.5}
.st-operations .crm-badge,.st-operations .crm-status-pill {width:max-content;max-width:100%;padding:4px 8px;font-size:var(--st-font-caption,12px);line-height:1.5;border-radius:6px;white-space:normal}
.st-operations .crm-toolbar,.st-operations .crm-actions,.crm-overlay .crm-actions{gap:8px}

.st-operations .crm-toolbar>.crm-muted{flex-basis:100%}
.st-operations .crm-section-heading{gap:8px;align-items:center}
.st-operations .crm-section-heading h2{font-size:var(--st-font-heading,22px)}
.st-operations .crm-section-heading p{margin:4px 0 0;font-size:var(--st-font-body,14px)}
.st-operations .crm-eyebrow{font-size:9px;letter-spacing:1.2px;line-height:1.4}
.st-operations .crm-section-heading .crm-eyebrow{display:none}
.st-operations .crm-customer-summary{display:grid;gap:8px;padding:var(--st-space-3,12px);border-bottom:1px solid var(--ops-line);background:var(--ops-soft);border-radius:var(--ops-radius)}
.st-operations .crm-customer-summary>header,.st-operations .crm-record-group>header,.st-operations .crm-appointment-card>header{display:flex;align-items:center;justify-content:space-between;gap:8px}
.st-operations .crm-customer-summary>header h2{font-size:var(--st-font-heading,22px);min-width:0;overflow-wrap:anywhere}
.st-operations .crm-customer-summary>header{flex-wrap:wrap}
.st-operations .crm-customer-summary>header .crm-actions{flex:none;max-width:100%;flex-wrap:wrap}
.st-operations .crm-customer-summary>header button{min-height:var(--st-control-height,44px);padding:10px 12px;font-size:var(--st-font-body,14px);white-space:normal}
.st-operations .crm-record-group .crm-card>button{min-height:var(--st-control-height,44px);padding:10px 12px;font-size:var(--st-font-body,14px);justify-self:start}
.st-operations .crm-customer-meta{display:flex;gap:8px 16px;flex-wrap:wrap;color:var(--ops-muted);font-size:var(--st-font-body,14px);line-height:1.6}
.st-operations .crm-customer-meta>span{min-width:0;overflow-wrap:anywhere}
.st-operations .crm-record-group{display:grid;min-width:0}
.st-operations .crm-record-group .crm-card>p{font-size:var(--st-font-body,14px);overflow-wrap:anywhere}
.st-operations .crm-record-group>header h3{font-size:var(--st-font-subheading,16px);font-weight:700}
.st-operations .crm-record-group>header button {min-height:var(--st-control-height,44px);padding:10px 12px;font-size:var(--st-font-body,14px)}
.st-operations .crm-details {margin:0;padding:10px 12px;border:1px solid var(--ops-line);border-radius:var(--ops-radius);background:#fff}
.st-operations .crm-details>summary{min-height:var(--st-control-height,44px);font-size:var(--st-font-body,14px);font-weight:600;line-height:1.5}
.st-operations .crm-details[open]>.crm-form{margin-top:8px}
.st-operations .crm-page .crm-appointment-card{padding:var(--st-space-3,12px);gap:8px}
.st-operations .crm-appointment-card>header{flex-wrap:wrap;align-items:start}
.st-operations .crm-appointment-card>header>div{min-width:0;flex:1;overflow-wrap:anywhere}
.st-operations .crm-details>.crm-appointment-card{padding:8px 0;border:0;border-top:1px solid var(--ops-line);border-radius:0;background:transparent;box-shadow:none}
.st-operations .crm-appointment-times{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0;background:transparent;border-radius:0}
.st-operations .crm-appointment-times>div{min-width:0;overflow-wrap:anywhere}
.st-operations .crm-appointment-times>div+div{border-left:2px solid var(--ops-blue);padding-left:10px}
.st-operations .crm-appointment-times small{display:block;font-size:var(--st-font-caption,12px);color:var(--ops-muted)}
.st-operations .crm-appointment-times strong{font-size:var(--st-font-body,14px);font-weight:650;line-height:1.6}
.st-operations .crm-appointment-card>header>.crm-badge,.st-operations .crm-record-card-heading>.crm-badge{flex:none;max-width:100%;white-space:normal;overflow-wrap:anywhere}
.st-operations .crm-appointment-card>[data-edit-appointment]{justify-self:start;min-height:44px;padding:10px 12px;font-size:var(--st-font-body,14px)}
.st-operations .crm-page [data-new-role]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;background:transparent;border:0;box-shadow:none;padding:8px 0 0}
.st-operations .crm-page [data-new-role]>button{grid-column:1/-1;justify-self:start}
.st-operations .crm-page [data-role]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px}
.st-operations .crm-page [data-role]>h3{grid-column:1/-1;margin-bottom:2px}
.st-operations .crm-page [data-role] .crm-check{display:flex;align-items:center;gap:6px;font-size:12px}
.st-operations .crm-page [data-role]>button{grid-column:1/-1;justify-self:start}

/* Order identity, arrival and location form three aligned information groups. */
.st-operations .crm-order-grid{gap:8px;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr))}
.st-operations .crm-order-card{gap:var(--st-space-2,8px);padding:var(--st-space-3,12px);border-radius:var(--ops-radius)}
.st-operations .crm-order-card .crm-order-card-top{grid-template-columns:28px minmax(0,1fr) 64px;gap:8px}
.st-operations .crm-order-card .crm-order-card-top>.crm-status-pill{width:64px;font-size:12px;text-align:center}
.st-operations .crm-order-card-top h3{font-size:var(--st-font-subheading,16px);font-weight:750;line-height:1.4}
.st-operations .crm-order-card button.crm-order-title-link{font-size:var(--st-font-subheading,16px);font-weight:750;min-height:44px;line-height:1.4;padding:0;border:0;background:transparent;box-shadow:none;text-align:left;justify-content:flex-start;width:100%}
.st-operations .crm-order-number{width:28px;height:32px;border-radius:7px;font-size:12px}
.st-operations .crm-order-meta{gap:4px 8px;font-size:12px;color:var(--ops-muted);line-height:1.5}
.st-operations .crm-order-ref{font-size:12px;color:var(--ops-muted)}
.st-operations .crm-record-card-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}
.st-operations .crm-order-card .crm-inline-edit{width:64px;min-width:64px;min-height:44px;padding:8px;font-size:12px}
.st-operations .crm-order-card .crm-order-recipient{margin:0;padding:0;font-size:12px;color:var(--ops-muted)}
.st-operations .crm-order-card .crm-order-main-actions{gap:6px;margin:0}
.st-operations .crm-order-card .crm-order-main-actions :is(a,button){height:auto;min-height:44px;padding:10px 12px;font-size:14px;border-radius:8px}

/* Route selection stays compact; distance and duration retain visual priority. */
.st-operations .crm-visit-choice{gap:8px;font-size:12px}
.st-operations .crm-visit-choice span{gap:2px}

.st-operations .crm-visit-stop{font-size:14px}
.st-operations .crm-visit-stop p{font-size:12px;margin:4px 0;line-height:1.6}
.st-operations .crm-stop-number{width:24px;height:24px;border-radius:7px;font-size:11px}
.st-operations .crm-visit-stop .crm-order-controls .round-control{width:44px;height:44px;min-height:44px;padding:0;font-size:16px}
.st-operations .crm-visit-plan .crm-map{margin-top:10px;border-radius:10px}
.st-operations .crm-route-metrics{gap:12px;padding:0}
.st-operations .crm-route-metrics>div{grid-template-rows:1fr auto}
.st-operations .crm-route-metrics strong{font-size:28px;color:#0b2d87;line-height:1.15;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.st-operations .crm-route-metrics small{font-size:var(--st-font-caption,12px)}
.st-operations .crm-route-metrics span{font-size:var(--st-font-caption,12px)}
.st-operations .crm-route-result{border-radius:12px}
.st-operations .crm-route-result :is(button,a){font-size:var(--st-font-body,14px);height:auto;min-height:44px;padding:10px 12px;border-radius:8px}
.st-operations [data-route-details]{padding:8px 0 0;gap:8px}
.st-operations .crm-route-meta{padding:8px 0;font-size:var(--st-font-caption,12px);line-height:1.6;color:var(--ops-muted)}
.st-operations .crm-route-summary-actions{padding:0;gap:8px}
.st-operations .crm-route-summary-actions>button,.st-operations .crm-route-nav-segments summary{height:auto;min-height:44px;font-size:var(--st-font-body,14px)}
.st-operations .crm-route-detail-options label,.st-operations .crm-route-timeline small,.st-operations .crm-route-return :is(span,small),.st-operations .crm-route-fuel,.st-operations .crm-route-fuel small{font-size:var(--st-font-caption,12px);line-height:1.6;color:var(--ops-muted)}
.st-operations .crm-route-timeline strong,.st-operations .crm-route-timeline time,.st-operations .crm-route-return strong,.st-operations .crm-route-fuel strong,.st-operations .crm-route-footnote{font-size:var(--st-font-body,14px);line-height:1.6}
.st-operations .crm-route-return{padding:8px 0 8px 10px;background:transparent;border-radius:0;border-left:2px solid var(--ops-blue);margin:0}
.st-operations .crm-route-fuel>div>span{padding:0 8px;border:0;border-radius:0;background:transparent;font-size:var(--st-font-caption,12px);min-width:0;overflow-wrap:anywhere}
.st-operations .crm-route-fuel>div>span+span{border-left:1px solid var(--ops-line)}
.st-operations .crm-route-fuel>div>span.is-selected{background:transparent;color:var(--ops-blue)}
.st-operations .crm-route-timeline li{padding:8px 0}
.st-operations .crm-empty {padding:20px 10px;font-size:12px}

/* Inquiry queue and detail: one status group, one quote, one contact group. */
.st-operations .flow-board{padding:0;gap:10px}
.st-operations .flow-board header h2{font-size:var(--st-font-heading,22px);line-height:1.35}
.st-operations .flow-board header{gap:6px}
.st-operations .flow-board-metrics{font-size:var(--st-font-caption,12px);min-width:0;min-height:16px}
.st-operations .flow-board-help{font-size:var(--st-font-body,14px);color:var(--ops-muted);line-height:1.5}
.st-operations .flow-scope-tabs{gap:4px;padding:3px;border-radius:9px;width:max-content}
.st-operations .flow-scope-tabs button{min-height:34px;padding:7px 12px;font-size:12px;border:0;border-radius:7px;background:transparent}
.st-operations .flow-scope-tabs button[aria-pressed=true]{background:var(--ops-blue);color:#fff}
.st-operations .flow-filters{gap:8px;margin:0}
.st-operations .flow-board .st-select-trigger{min-height:36px;font-size:12px;border-radius:8px}
.st-operations .flow-card{padding:10px 12px;border-color:var(--ops-line);border-radius:var(--ops-radius);gap:8px}
.st-operations .flow-card b{font-size:var(--st-font-card-title,16px);line-height:1.4}
.st-operations .flow-card small{font-size:var(--st-font-caption,12px);line-height:1.45;color:var(--ops-muted)}
.st-operations .flow-card-link{font-size:var(--st-font-body,14px);margin-top:2px}
.st-operations .flow-card-side{font-size:var(--st-font-caption,12px);gap:4px}
.st-operations .flow-card-side>strong{font-weight:650;padding:4px 7px;background:var(--ops-soft);border-radius:6px}
.st-operations .flow-card-side button{font-size:var(--st-font-body,14px);min-height:36px;padding:7px 10px;border-radius:8px}
.st-operations .flow-panel{padding:12px;margin:0 0 12px;gap:10px;border-radius:var(--ops-radius);border-color:var(--ops-line);box-shadow:0 2px 10px #16244603;font-size:var(--st-font-body,14px)}
.st-operations .flow-panel header>strong{font-size:16px;line-height:1.4}
.st-operations .flow-panel small{font-size:var(--st-font-caption,12px);line-height:1.5}
.st-operations .flow-panel .flow-processing-help{font-size:var(--st-font-body,14px);line-height:1.6}
.st-operations .flow-actions{gap:8px}
.st-operations .flow-actions button,.st-operations .flow-contact{min-height:36px;padding:7px 12px;line-height:20px;font-size:var(--st-font-body,14px);border-radius:8px}
.st-operations .flow-quote{padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;gap:6px;min-width:0}
.st-operations .flow-line{font-size:var(--st-font-body,14px);padding-top:8px;gap:8px;min-width:0}
.st-operations .flow-line>span{min-width:0;overflow-wrap:anywhere}
.st-operations .flow-quote .flow-line small{font-size:var(--st-font-body,14px);line-height:1.5}
.st-operations .flow-line>strong{font-size:var(--st-font-body,14px);max-width:45%;overflow-wrap:anywhere;white-space:normal;text-align:right}
.st-operations .flow-total{flex-wrap:wrap;gap:8px}
.st-operations .flow-total strong{font-size:22px;font-variant-numeric:tabular-nums}
body .commerce-dialog.st-operations .order-contact{padding:12px;margin:0 0 12px;border:1px solid var(--ops-line);background:#fff;border-radius:var(--ops-radius)}
.st-operations .order-contact h3{font-size:var(--st-font-card-title,16px);margin:0 0 8px}
.st-operations .order-contact dl{margin:0;gap:6px}
body .commerce-dialog.st-operations .order-contact dl>div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:8px;margin:0;font-size:var(--st-font-body,14px);line-height:1.5}
.st-operations .order-contact dt{color:var(--ops-muted);font-size:var(--st-font-caption,12px);min-width:0;overflow-wrap:anywhere}
.st-operations .order-contact dd{min-width:0;overflow-wrap:anywhere}
.st-operations .order-contact .crm-appointment-summary{padding:8px 0 0;margin:8px 0 0;border-top:1px solid var(--ops-line);border-radius:0;background:transparent;box-shadow:none;font-size:var(--st-font-body,14px);line-height:1.6}
.st-operations .order-contact .crm-appointment-summary h3{font-size:var(--st-font-card-title,16px);margin:0 0 6px}
.st-operations .order-contact .crm-appointment-summary p{font-size:var(--st-font-body,14px);line-height:1.6;margin:4px 0;overflow-wrap:anywhere}
.st-operations .flow-panel>[data-flow-action=assign]{justify-self:start;min-height:36px;padding:7px 12px;line-height:20px;font-size:var(--st-font-body,14px);border-radius:8px}
.st-operations .flow-original,.st-operations .flow-erp{padding:0;border:0;border-top:1px solid var(--ops-line);border-radius:0;background:transparent;box-shadow:none;margin:8px 0;font-size:var(--st-font-body,14px)}
.st-operations :is(.flow-original,.flow-erp)>summary,.st-operations .flow-panel>details>summary{display:flex;align-items:center;min-height:34px;font-size:var(--st-font-body,14px);line-height:20px;cursor:pointer}
.st-operations .flow-panel>button{min-height:36px;padding:7px 12px;line-height:20px;font-size:var(--st-font-body,14px)}
.st-operations .order-line h3{font-size:14px}
.st-operations .order-line p,.st-operations .order-line small{font-size:var(--st-font-body,14px)}
.st-operations .order-line-total{font-size:var(--st-font-body,14px)}

/* Dialogs inherit the same type scale without stretching the parent page. */
.crm-overlay,.flow-popup {border-radius:var(--st-radius-sheet,16px);padding:12px;max-height:calc(100dvh - 24px)}
.crm-overlay{padding:0;overflow:hidden}
.crm-overlay[open]{display:flex;flex-direction:column}
.crm-overlay>.crm-page{min-height:0;overflow:auto;padding:16px;overscroll-behavior:contain;scrollbar-gutter:stable}
.crm-overlay .crm-overlay-head{grid-template-columns:minmax(0,1fr) 30px;flex:0 0 auto;gap:12px;padding:13px 16px;margin:0;border-bottom:1px solid var(--ops-line)}
.crm-overlay .crm-overlay-head h2,.flow-popup h3{font-size:16px;line-height:1.35;margin:0;letter-spacing:-.02em}
.crm-overlay .crm-overlay-head button{width:30px;height:30px;min-height:0;padding:0;border-radius:8px;font-size:19px;line-height:1}
.flow-popup header button{width:44px;height:44px;min-height:44px;padding:8px;border-radius:8px;font-size:18px}
.flow-popup :is(input,select:not(.st-select-native),textarea,.st-select-trigger){font-size:var(--st-font-body,14px);border-radius:8px;min-height:44px;padding:8px 10px}
.flow-popup label{font-size:var(--st-font-caption,12px);gap:4px;min-width:0;overflow-wrap:anywhere}
.flow-popup small{font-size:var(--st-font-body,14px);line-height:1.6;overflow-wrap:anywhere}
.flow-popup button:where(:not(.st-option)){font-size:var(--st-font-body,14px);border-radius:8px;min-height:44px;padding:10px 12px}
.flow-popup[open]:has(>form){display:flex;flex-direction:column;overflow:hidden}
.flow-popup:has(>form)>header{flex:none;margin-bottom:8px}
.flow-popup>form{min-width:0;min-height:0;overflow:auto;overscroll-behavior:contain}
.flow-popup .st-select{min-width:0;max-width:100%}
.flow-popup .st-select-trigger{width:100%;min-width:0;height:auto}
.flow-popup .st-select-value{white-space:normal;overflow-wrap:anywhere;text-overflow:clip}
.flow-popup>form>button[type=submit]{position:sticky;bottom:0;z-index:1;box-shadow:0 -4px 8px #ffffffeb}
.crm-overlay .crm-map {min-height:220px;height:280px;border-radius:10px}
.crm-overlay .crm-form,.st-operations :is(.crm-card,.crm-details)>.crm-form,.st-operations .crm-form .crm-window{padding:0;border:0;background:transparent;box-shadow:none}
.crm-overlay .crm-map-popup,.st-operations .crm-map-popup{font-size:12px}
.st-operations .crm-order-popover{padding:12px;border-radius:var(--ops-radius)}
.st-operations .crm-popup-heading h3{font-size:14px}
.st-operations .crm-page .st-select-native,.crm-overlay .crm-page .st-select-native{min-height:0;padding:0}
.quote-inquiry-editor .quote-inquiry-settings{border-color:var(--ops-line);border-radius:var(--ops-radius)}
.quote-inquiry-editor .quote-inquiry-settings>summary{font-size:var(--st-font-body,14px);min-height:34px;padding:7px 12px;line-height:20px}
.quote-inquiry-editor .quote-settings-content{gap:8px}
.quote-inquiry-editor .quote-fee-conversion{padding:0;background:transparent;border-radius:0;overflow-wrap:anywhere}
.quote-inquiry-editor .quote-settings-content label{font-size:var(--st-font-caption,12px);line-height:1.5}
.quote-inquiry-editor .quote-settings-content small{font-size:var(--st-font-body,14px);line-height:1.5}
.quote-inquiry-editor .quote-settings-content :is(input,select,textarea,.st-select-trigger){font-size:var(--st-font-body,14px);min-height:36px}
.quote-inquiry-editor .quote-add-products{font-size:var(--st-font-body,14px);min-height:36px;border-radius:8px}
.quote-inquiry-editor .quote-price .quote-tier-label{font-size:var(--st-font-caption,12px);line-height:1.5;white-space:normal;overflow-wrap:anywhere}

/* Drivers retain generous tap targets and a deliberately short action path. */
.st-operations .crm-driver,.st-operations .crm-driver-list{gap:10px}
.st-operations .crm-driver-heading h2{font-size:var(--st-font-heading,22px)}
.st-operations .crm-driver-heading p{font-size:var(--st-font-caption,12px);margin-top:4px}
.st-operations .crm-driver-heading{flex-wrap:wrap}
.st-operations .crm-driver-card>header{align-items:start;flex-wrap:wrap}
.st-operations .crm-driver-card>header>div{min-width:0;overflow-wrap:anywhere}
.st-operations .crm-driver-card[data-task-status="exception"] .crm-status-pill{background:#fff4df;color:#8d4500;border:1px solid #8d450026}
.st-operations .crm-driver-card:is([data-task-status="draft"],[data-task-status="cancelled"]) .crm-status-pill{background:var(--ops-soft);color:var(--ops-muted)}
.st-operations .crm-driver-card .crm-status-pill{font-size:var(--st-font-caption,12px);max-width:100%;white-space:normal;overflow-wrap:anywhere}
.st-operations .crm-driver-card[data-task-status="delivered"] .crm-status-pill{background:var(--ops-blue);color:#fff}
.st-operations .crm-driver-card .crm-driver-actions [data-task-action="handed_over"]{background:transparent;border-color:var(--ops-blue);color:var(--ops-blue)}
.st-operations .crm-driver-card{gap:8px;padding:var(--st-space-3,12px)}
.st-operations .crm-driver-card h3{font-size:18px}
.st-operations .crm-driver-time{padding:8px 0 8px 10px;border-radius:0;border-left:2px solid var(--ops-blue);background:transparent}
.st-operations .crm-driver-time strong{font-size:19px;line-height:1.5;font-variant-numeric:tabular-nums}
.st-operations .crm-driver-card .crm-driver-address{font-size:15px;line-height:1.6}
.st-operations .crm-driver-links,.st-operations .crm-driver-actions{gap:6px}
.st-operations .crm-driver-links :is(a,button),.st-operations .crm-driver-actions button{min-height:44px;padding:10px 12px;font-size:14px;border-radius:8px}
.st-operations .crm-driver-detail summary{font-size:var(--st-font-body,14px);min-height:var(--st-control-height,44px);align-items:center;gap:8px;flex-wrap:wrap;color:var(--ops-muted)}
.st-operations .crm-driver-detail li{font-size:var(--st-font-body,14px)}
.st-operations .crm-driver-feedback{padding:12px;gap:8px}
.st-operations .crm-page .st-select-trigger,.crm-overlay .st-select-trigger{min-height:44px;font-size:14px;border-radius:8px}
.st-operations :is(button,a,summary):focus-visible {outline:2px solid var(--ops-blue);outline-offset:2px}
.st-operations [hidden],.crm-overlay [hidden],.flow-popup [hidden]{display:none!important}
@media(min-width:721px){
  body .commerce-dialog.st-operations>.dialog-head.st-page-header{min-height:66px}
  body .commerce-dialog.st-operations>.dialog-head #st-dialog-title{font-size:16px}
  body .commerce-dialog.st-operations:not([data-view="报价单"])>.dialog-body{padding-top:16px}
  .st-operations[data-view="内部工作台"] .workbench-tiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
}
@media(max-width:480px){
  body .commerce-dialog.st-operations:not([data-view="报价单"])>.dialog-body{padding:10px 12px 32px}
  .st-operations .crm-order-grid{grid-template-columns:1fr}
  .st-operations .crm-appointment-times{grid-template-columns:1fr;gap:5px}
  .st-operations .flow-board header{align-items:start}
  .st-operations .flow-board-metrics{text-align:left}
  .st-operations .crm-route-metrics strong{font-size:22px}
}
@media(prefers-reduced-motion:reduce){.st-operations *,.crm-overlay *,.flow-popup *{scroll-behavior:auto;transition:none}}
/* Storefront material system: warm white, pale blue, white bezel, layered light. */
body .commerce-dialog.st-operations {
 --ops-ink:var(--ink,#14254b);--ops-blue:var(--blue,#0b2d87);--ops-muted:var(--muted,#677080);--ops-line:#dfe6f2;
 --ops-card-shadow:var(--card-shadow,0 2px 4px #18326009,0 10px 22px #18326010,0 22px 34px #18326007,inset 0 1px 0 #fffffff5);
 background:linear-gradient(155deg,#f8f9fd 0,#fff 44%,#fdfcf9 100%);color:var(--ops-ink);
}
.st-operations .crm-page {background:none}
.st-operations :is(.crm-card,.crm-order-card,.flow-card,.flow-panel,.workbench-tile,.crm-driver-card,.crm-record-group>.crm-details) {
 border:1px solid #ffffffeb;background:linear-gradient(130deg,#fffffff5,#fcfdffe8 58%,#f7faffdf);
 box-shadow:var(--ops-card-shadow);color:var(--ops-ink);
}
.st-operations :is(.crm-section-heading,.history-heading,.crm-driver-heading) {padding:2px 0 6px}
.st-operations .crm-page :is(h2,h3),.st-operations .flow-board h2,.st-operations .history-heading h2 {color:#10245a}
.st-operations .crm-toolbar {background:transparent;border:0;border-bottom:1px solid #dfe6f2a8;border-radius:0;padding:0 0 12px;box-shadow:none;gap:8px}
.st-operations .crm-toolbar label{color:var(--ops-muted)}
.st-operations .crm-toolbar :is(input,select,.st-select-trigger) {background:linear-gradient(150deg,#fff,#f8faff);border-color:#dfe6f2;border-radius:10px;box-shadow:inset 0 1px 0 #fff}
.st-operations .crm-toolbar button[type=submit],.st-operations .flow-filters .st-select-trigger {
 background:linear-gradient(150deg,#fff,#f5f8fd);color:var(--ops-blue);border:1px solid #dfe6f2;box-shadow:inset 0 1px 0 #fff;border-radius:10px;
}
.st-operations .workbench-tile-mark,.st-operations .crm-customer-monogram {background:linear-gradient(140deg,#edf3ff,#fff);border:1px solid #fff;box-shadow:inset 0 1px 0 #fff,0 2px 7px #18326009;color:var(--ops-blue)}
.st-operations .workbench-tile:hover,.st-operations .flow-card:hover {box-shadow:0 4px 10px #1832600e,0 14px 28px #18326012,inset 0 1px 0 #fff}
.st-operations :is(button,a):active {transform:translateY(1px)}
.st-operations :is(button,a) {transition:box-shadow .18s var(--curve,cubic-bezier(.22,.8,.25,1)),background-color .18s var(--curve,cubic-bezier(.22,.8,.25,1))}
.st-operations .crm-page button[type=submit],.st-operations :is([data-visit-route],[data-route-next=plan],[data-flow-action=claim],[data-flow-action=publish],[data-flow-action=won],[data-new-delivery]),.flow-popup button[type=submit],.flow-popup [data-confirm] {
 background:linear-gradient(130deg,#ff9309,#f97800);border:1px solid #ff970d;color:var(--st-color-action-ink,#081f80);box-shadow:inset 0 1px 0 #ffffff80,0 4px 10px #f978001b;font-weight:700;
}
.st-operations .crm-page .crm-toolbar button[type=submit] {background:linear-gradient(150deg,#fff,#f5f8fd);color:var(--ops-blue);border-color:#dfe6f2;box-shadow:inset 0 1px 0 #fff}
.st-operations [data-full-route],.st-operations .flow-actions [data-flow-action=edit_quote] {background:linear-gradient(140deg,#17358a,#0b2089);border-color:#0b2089;color:white;box-shadow:inset 0 1px 0 #ffffff26,0 3px 8px #0b208918}
.st-operations .crm-notice,.st-operations .crm-customer-summary,.st-operations .crm-address-order-help {
 background:linear-gradient(130deg,#f0f4fc,#f7f9fd);border:1px solid #ffffffd9;box-shadow:inset 0 1px 0 #fff;
}
.st-operations .crm-record-group {padding:0 0 8px;border-bottom:1px solid #e6ebf3;gap:8px}
.st-operations .crm-record-group:last-child{border:0}
.st-operations .crm-customer-card header{display:flex;align-items:center;gap:8px;margin:0}
.st-operations .crm-customer-monogram{display:grid;place-items:center;width:36px;height:36px;border-radius:9px;font-size:15px;font-weight:700;flex:none}
.st-operations .crm-customer-card header h3{flex:1;min-width:0}
.st-operations .crm-customer-card>p{color:var(--ops-muted);font-size:var(--st-font-body,14px);overflow-wrap:anywhere}
.st-operations .crm-customer-card>button{margin-top:0;min-height:var(--st-control-height,44px);padding:10px 12px;font-size:var(--st-font-body,14px)}
.st-operations .flow-journey {display:grid;grid-template-columns:repeat(4,minmax(0,1fr));list-style:none;gap:4px;padding:0;margin:4px 0 8px}
.st-operations .flow-journey li{display:flex;align-items:center;gap:4px;font-size:var(--st-font-caption,12px);color:var(--ops-muted);padding:8px 0;border-bottom:2px solid var(--ops-line);white-space:normal;overflow-wrap:anywhere}
.st-operations .flow-journey span{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#edf1f8;font-size:12px;flex:none}
.st-operations .flow-journey li[data-state=done]{color:#4d6597;border-bottom-color:#adc0e6}
.st-operations .flow-journey li[data-state=current]{color:#0b2d87;border-bottom-color:#f58200;font-weight:700}
.st-operations .flow-journey li[data-state=current] span{background:#0b2d87;color:#fff}
.st-operations .flow-panel>header>strong{color:#0b2d87;font-size:16px}

.st-operations .flow-scope-tabs{border:1px solid #fff;background:#eaf0fa70;box-shadow:inset 0 1px 0 #fff}
.st-operations .flow-card-side [data-flow-claim]{background:linear-gradient(130deg,#ff9309,#f97800);color:var(--st-color-action-ink,#081f80);border-color:#ff970d}
.st-operations[data-view="询价详情"]>.dialog-body {max-width:860px}
.st-operations .crm-route-steps {display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;padding:0;border:0;border-bottom:1px solid var(--ops-line);border-radius:0;background:transparent;box-shadow:none}
.st-operations .crm-route-steps button{display:flex;align-items:center;justify-content:center;gap:7px;min-height:44px;padding:7px 10px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--ops-muted);font-size:12px;font-weight:600}
.st-operations .crm-route-steps button>span{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#dde7f7;font-size:10px;flex:none}
.st-operations .crm-route-steps button[aria-selected=true]{background:transparent;color:var(--ops-blue);border-color:transparent;border-bottom-color:var(--ops-blue);border-radius:0;box-shadow:none}
.st-operations .crm-route-steps button[aria-selected=true]>span{background:#0b2d87;color:#fff}
.st-operations .crm-route-workspace{display:grid;gap:8px;min-height:0}
.st-operations [data-route-panel]{display:grid;gap:8px;align-content:start;min-width:0}
.st-operations [data-route-panel][hidden]{display:none!important}
.st-operations .crm-page .crm-route-selection{padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}
.st-operations .crm-visit-choice{border:1px solid #e5ebf6;background:#ffffffd1;padding:10px;border-radius:10px;color:#14254b}
.st-operations .crm-visit-choice:has(input:checked){border-color:#b9cbed;background:linear-gradient(130deg,#eef4ff,#fff);box-shadow:inset 3px 0 0 #0b2d87}
.st-operations .crm-visit-choice strong{font-size:14px;color:#10245a}
.st-operations .crm-visit-choice small{font-size:12px;line-height:1.6}
.st-operations .crm-visit-stop{border-bottom:1px solid #e2e9f5;padding:10px 0;gap:8px}
.st-operations .crm-stop-number{background:#edf3ff;color:#0b2d87}
.st-operations .crm-route-map-stage{border-radius:12px}
.st-operations .crm-route-map-stage>.crm-map{height:360px;min-height:280px;border-radius:12px;box-shadow:var(--ops-card-shadow)}
.st-operations .crm-route-result{margin-top:0;padding:var(--st-space-3,12px);background:linear-gradient(135deg,#eef4ff,#fff);border:1px solid #fff;box-shadow:var(--ops-card-shadow)}
.st-operations .crm-route-empty{display:grid;justify-items:center;align-content:center;gap:10px;min-height:180px;padding:16px;border:1px solid #fff;border-radius:12px;background:linear-gradient(130deg,#f6f8fc,#fff);text-align:center;box-shadow:var(--ops-card-shadow)}
.st-operations .crm-route-empty-icon{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;background:linear-gradient(140deg,#e8f0ff,#fff);color:#0b2d87;font-size:22px;box-shadow:inset 0 1px 0 #fff}
.st-operations .crm-route-empty p{max-width:32em;color:var(--ops-muted)}
.st-operations .crm-route-help{font-size:var(--st-font-body,14px);border-top:1px solid var(--ops-line);padding-top:8px}
.st-operations .crm-route-help summary{display:flex;align-items:center;min-height:44px;cursor:pointer}
.st-operations .crm-page .crm-route-help p{font-size:var(--st-font-body,14px);line-height:1.6;margin:8px 0 0}
.crm-overlay,.flow-popup{background:linear-gradient(145deg,#fff,#fafcff 70%,#fdfcf9);border:1px solid #ffffffeb;box-shadow:0 18px 60px #10214821,inset 0 1px 0 #fff;color:#14254b}
.crm-overlay::backdrop,.flow-popup::backdrop{background:#14234966;backdrop-filter:blur(5px)}
.crm-overlay .crm-overlay-head,.flow-popup header{padding-bottom:10px;border-bottom:1px solid #e6ebf4}
.quote-fee-conversion{padding:8px 10px;border-radius:8px;background:#f0f5ff;color:#526990;font-size:11px;line-height:1.5}
@media(min-width:801px){
 .st-operations:is([data-view="内部工作台"],[data-view="询价单总览"],[data-view="订单路线"],[data-view="拜访路线"])>.dialog-body{max-width:1080px}
 .st-operations .crm-task-picker{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
 .st-operations [data-visit-order]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:20px}
 .st-operations .crm-route-map-stage>.crm-map{height:460px}
}
@media(max-width:480px){
 .st-operations .crm-route-steps button{gap:4px;padding:7px 5px;font-size:var(--st-font-caption,12px)}
 .st-operations .crm-route-options,.st-operations .crm-route-detail-options{grid-template-columns:minmax(0,1fr)}
 .st-operations .crm-route-timeline li{grid-template-columns:22px minmax(0,1fr)}
 .st-operations .crm-route-timeline time{grid-column:2;text-align:left;overflow-wrap:anywhere}
 .st-operations .flow-journey{grid-template-columns:repeat(4,minmax(0,1fr))}
 .quote-inquiry-editor .flow-fields{grid-template-columns:minmax(0,1fr)}
 .st-operations .crm-route-metrics strong{font-size:26px}
 .st-operations .crm-route-map-stage>.crm-map{height:300px}
}
.st-operations .flow-panel button[data-flow-action=claim],.st-operations .flow-panel button[data-flow-action=publish],.st-operations .flow-panel button[data-flow-action=won]{background:linear-gradient(130deg,#ff9309,#f97800);border-color:#ff970d;color:var(--st-color-action-ink,#081f80);box-shadow:inset 0 1px 0 #ffffff80,0 4px 10px #f978001b}
.st-operations .crm-order-main-actions>a:first-child{background:linear-gradient(140deg,#17358a,#0b2089);border-color:#0b2089;color:white;box-shadow:inset 0 1px 0 #ffffff26,0 3px 8px #0b208918}

.st-operations .crm-route-map-status:empty{display:none}
.st-operations .crm-route-map-status{padding:8px 10px;border:1px solid #e0e8f4;border-radius:9px;background:#f3f7fd;color:#526990;font-size:11px;line-height:1.5}
.st-operations .crm-page .crm-visit-plan .crm-actions .button{min-height:44px;font-size:14px;background:linear-gradient(130deg,#ff9309,#f97800);border-color:#ff970d;color:var(--st-color-action-ink,#081f80);box-shadow:inset 0 1px 0 #ffffff80,0 4px 10px #f978001b}

/* Workspace pages have one viewport and one scroll owner across every child view. */
body .commerce-dialog.commerce-page.page-workbench {
  flex-direction:column;height:100dvh;max-height:100dvh;
  overflow:hidden;animation:none;transform:none;
}
body .commerce-dialog.commerce-page.page-workbench[open] {display:flex}
body .commerce-dialog.commerce-page.page-workbench>.dialog-head {
  flex:0 0 auto;position:relative;top:auto;transform:none;
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
body .commerce-dialog.commerce-page.page-workbench>.dialog-head .st-search-open {animation:none;transform:none}
body .commerce-dialog.commerce-page.page-workbench>.dialog-body {
  flex:1 1 0;min-height:0;overflow:auto;overflow-anchor:none;
  overscroll-behavior:contain;scroll-behavior:auto;scrollbar-gutter:stable;
}

/* A record owns its inset; supporting sections are flat rather than nested cards. */
.st-operations .crm-field-caption{display:inline-flex;align-items:center;gap:6px}
.st-operations .crm-field-icon{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}

/* One flat product summary is shared by dispatcher and driver records. */
.st-operations .crm-record-products{padding:8px 0 0;border-top:1px solid var(--ops-line);margin:0}
.st-operations .crm-record-products>.crm-field-caption{font-size:var(--st-font-caption,12px);color:var(--ops-muted)}
.st-operations .crm-record-product-list{list-style:none;margin:4px 0 0;padding:0;display:grid;gap:4px}
.st-operations .crm-record-product-list li{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,40%);gap:8px;padding:0;background:transparent;border:0;font-size:var(--st-font-body,14px);line-height:1.5}
.st-operations .crm-record-product-list li>span{overflow-wrap:anywhere}
.st-operations .crm-record-product-list strong{font-weight:700;white-space:normal;overflow-wrap:anywhere;text-align:right;font-variant-numeric:tabular-nums;color:var(--ops-blue)}
.st-operations .crm-driver-card[data-task-status="exception"] .crm-driver-actions [data-task-action="delivered"]{background:transparent;border-color:var(--ops-blue);color:var(--ops-blue)}

/* Expanded records reuse the same flat list and spacing as their summary. */
.st-operations .crm-driver-detail>.crm-record-product-list{margin:8px 0;padding:0}

/* Selection lists have one page inset, with flat shared rows. */
.st-operations .crm-route-selection .crm-task-picker{gap:0;column-gap:16px}
.st-operations .crm-route-selection .crm-visit-choice{min-width:0;padding:12px 8px;border:0;border-bottom:1px solid var(--ops-line);border-radius:0;background:transparent;box-shadow:none;align-items:flex-start}
.st-operations .crm-route-selection .crm-visit-choice>span{min-width:0;gap:4px;overflow-wrap:anywhere}
.st-operations .crm-route-selection .crm-visit-choice strong{font-size:var(--st-font-card-title,16px)}
.st-operations .crm-route-selection .crm-visit-choice small{font-size:var(--st-font-body,14px);line-height:1.5}
.st-operations .crm-route-selection .crm-visit-choice input{margin-top:3px}

/* Route stops reuse flat record content and comfortable controls. */
.st-operations .crm-page .crm-visit-stop{display:grid;grid-template-columns:24px minmax(0,1fr);gap:8px;padding:12px 0;align-items:start}
.st-operations .crm-visit-stop>div:nth-child(2){min-width:0;grid-column:2;overflow-wrap:anywhere}
.st-operations .crm-visit-stop strong{font-size:var(--st-font-card-title,16px);line-height:1.5}
.st-operations .crm-visit-stop .crm-stop-ref{display:block;font-size:var(--st-font-caption,12px);line-height:1.5;color:var(--ops-muted)}
.st-operations .crm-visit-stop p.crm-stop-address{display:flex;align-items:flex-start;gap:6px;font-size:var(--st-font-body,14px);line-height:1.5;margin:8px 0}
.st-operations .crm-stop-address .crm-field-icon{margin-top:2px}
.st-operations .crm-stop-address>span{min-width:0;overflow-wrap:anywhere}
.st-operations .crm-visit-stop .crm-actions{display:flex;gap:8px;flex-wrap:wrap;margin:0}
.st-operations .crm-visit-stop .crm-actions>a{display:inline-flex;align-items:center;min-height:var(--st-control-height,44px);box-sizing:border-box;padding:8px 10px;border:1px solid var(--ops-line);border-radius:var(--st-radius-control,8px);font-size:var(--st-font-body,14px);text-decoration:none}
.st-operations .crm-visit-stop>.crm-order-controls{grid-column:2;display:flex;gap:8px;flex-wrap:wrap}
.st-operations .crm-visit-stop>.crm-order-controls button{width:44px;height:44px;min-height:44px;padding:0;font-size:16px}

/* Existing order details and history: flat groups, readable chronology. */

.st-operations .crm-order-card .crm-order-alert{padding:0 0 0 8px;border-left:2px solid var(--ops-orange,#db6500);border-radius:0;background:transparent;font-size:var(--st-font-body,14px);line-height:1.5;margin:0;overflow-wrap:anywhere}

/* ══ 订单地图：地图铺满 + 底部可抽拉操作面板 ══════════════════════════════
   移动端＝地图整屏铺底、面板浮在上面（三档高度、可拖拽）；桌面端＝左面板右地图。
   同一份 DOM，两种排布，避免为两种端各写一套结构。 */
body .commerce-dialog.st-operations:is([data-view="订单地图"],[data-view="客户管理"],[data-view="客户地图"])>.dialog-body{
  width:100%;max-width:none;margin:0;padding:0;overflow:hidden;scrollbar-gutter:auto;
}
.st-operations:is([data-view="订单地图"],[data-view="客户管理"],[data-view="客户地图"])>.dialog-body>.crm-page{display:block;height:100%;min-height:0;padding:0;gap:0}
.st-operations:is([data-view="订单地图"],[data-view="客户管理"],[data-view="客户地图"])>.dialog-body>.crm-page>.crm-error{padding:8px 14px 0;background:#fff}

/* ── 订单地图：地图铺底 + 可抽拉操作面板 ──
   移动端面板是浮层（三档高度），桌面端同一份 DOM 变为左栏。

   权重说明（本文件 line 84）：.st-operations .crm-page button 是「类+类+元素」=(0,2,1)，
   会接管面板内所有按钮的 min-height / padding / border-radius。面板内的按钮规则一律写成
   .crm-page .crm-map-shell … =(0,3,0) 才能生效，否则抓手会被撑成 44px 白底描边方块。

   高度账（390×844，mid=56%）：抓手 16 + 标题 52 + 操作 50 + 标签 52 = 170px 壳，
   留 272px 给列表；改动前是 269px 壳 / 173px 列表。
   44px 触控高度按 DESIGN.md 保持不动，压缩只靠删行、删重复容器、收紧间距。 */
.crm-map-shell{position:relative;height:100%;min-height:0;overflow:hidden;background:#e8edf5}
.crm-map-stage{position:absolute;inset:0;z-index:1}
.crm-map-stage>.crm-map.crm-map-full{position:absolute;inset:0;width:100%;height:auto;min-height:0;border-radius:0}

/* 地图上只在「一个定位点都没有」时给一句可操作提示，其余情况保持零浮层 */
.crm-map-status{
  position:absolute;left:12px;top:12px;right:68px;z-index:3;margin:0;
  padding:9px 11px;border-radius:10px;background:#fffffff2;color:#3d4d6d;
  font-size:12px;line-height:1.5;box-shadow:0 6px 20px #1021481f;backdrop-filter:blur(10px);
}
.crm-page .crm-map-shell .crm-map-status[hidden],
.crm-page .crm-map-shell .crm-map-status:empty{display:none}
/* 地图右上角的视野工具：控件长在哪看它作用于谁 ——
   「显示全部订单位置」改的是地图视野，所以长在地图上（第四轮曾误收进面板标题行，
   第七轮按用户「移回右上角」纠正）。36px 标准档，命中区 ≥36px。 */
.crm-page .crm-map-shell .crm-map-tools{position:absolute;right:12px;top:12px;z-index:3;display:grid;gap:8px}
.crm-page .crm-map-shell .crm-map-tool{
  display:grid;place-items:center;
  width:var(--ctl-h);height:var(--ctl-h);min-height:0;padding:0;
  border:0;border-radius:11px;background:#fffffff2;color:var(--ops-blue);
  line-height:1;cursor:pointer;box-shadow:0 6px 20px #1021481f;
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  transition:background .18s cubic-bezier(.22,.8,.25,1);
}
.crm-page .crm-map-shell .crm-map-tool svg{width:18px;height:18px;display:block}
.crm-page .crm-map-shell .crm-map-tool:hover{background:#fff}
.crm-page .crm-map-shell .crm-map-tool:active{transform:translateY(1px)}
/* 面板本体（移动端＝浮层） */
.crm-sheet{
  position:absolute;left:0;right:0;bottom:0;z-index:5;
  display:flex;flex-direction:column;min-height:0;height:var(--sheet-h,56%);
  border-radius:18px 18px 0 0;background:#fff;
  box-shadow:0 -16px 44px #1021482e;
  transition:height .26s cubic-bezier(.22,.8,.25,1);
}
.crm-map-shell.is-dragging .crm-sheet{transition:none}

/* 抓手就是一条 4px 灰条，不带任何按钮外观 */
.crm-page .crm-map-shell .crm-sheet-grab{
  flex:0 0 auto;display:grid;place-items:center;width:100%;height:16px;min-height:16px;padding:0;
  border:0;border-radius:18px 18px 0 0;background:transparent;cursor:grab;touch-action:none;
}
.crm-page .crm-map-shell .crm-sheet-grab>span{width:36px;height:4px;border-radius:99px;background:#d3dbeb}
.crm-page .crm-map-shell .crm-sheet-grab:focus-visible{outline:2px solid var(--ops-blue);outline-offset:-4px}

/* 标题行：标题 + 定位状态摘要共用一个左侧栏，右侧是筛选与工具组 */
.crm-page .crm-map-shell .crm-sheet-head{
  flex:0 0 auto;display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:0 6px;
  padding:0 14px 5px;
}
/* 标题行右上角的工具组：只留「面板高度」循环。
   归属判据（第七轮收敛）：控件长在哪，看它作用于谁 ——
   「面板高度」改的是面板 → 留在面板标题行；
   「显示全部订单位置」改的是地图视野 → 回到地图右上角（.crm-map-tools）。 */
.crm-page .crm-map-shell .crm-sheet-tools{display:flex;align-items:center;gap:2px;flex:none}
.crm-page .crm-map-shell .crm-sheet-tool{
  display:grid;place-items:center;position:relative;
  width:var(--ctl-icon);height:var(--ctl-icon);min-height:0;padding:0;
  border:0;border-radius:8px;background:transparent;color:#647699;line-height:1;cursor:pointer;
  transition:background .18s cubic-bezier(.22,.8,.25,1),color .18s cubic-bezier(.22,.8,.25,1);
}
.crm-page .crm-map-shell .crm-sheet-tool::after{content:"";position:absolute;inset:-3px;border-radius:11px}
.crm-page .crm-map-shell .crm-sheet-tool svg{width:17px;height:17px;display:block}
.crm-page .crm-map-shell .crm-sheet-tool:hover{background:#eef2f9;color:var(--ops-blue)}
.crm-page .crm-map-shell .crm-sheet-tool:active{color:var(--ops-blue);background:#e4eaf6}
.crm-page .crm-map-shell .crm-sheet-title{min-width:0}
.crm-page .crm-map-shell .crm-sheet-title h2{
  font-size:16px;font-weight:750;line-height:1.3;margin:0;letter-spacing:-.02em;color:#10245a;
}
.crm-page .crm-map-shell .crm-sheet-title p{
  display:flex;flex-wrap:wrap;gap:0 10px;margin:3px 0 0;
  font-size:12px;line-height:1.45;color:var(--ops-muted);font-variant-numeric:tabular-nums;
}
.crm-page .crm-map-shell .crm-sheet-title p i{width:7px;height:7px;border-radius:50%;background:#1f9d55;align-self:center}
.crm-page .crm-map-shell .crm-sheet-title p i.is-warn{background:#db6500}
.crm-page .crm-map-shell .crm-sheet-title p span{display:inline-flex;align-items:center;gap:5px}

/* 筛选：收进标题行右侧，不再独占一整行 50px。
   「选订单 · 看路线」已删除 —— 它与「配送路线」标签指向同一个动作，是纯重复。 */
.crm-page .crm-map-shell .crm-sheet-filter{
  display:inline-flex;align-items:center;gap:4px;
  height:var(--ctl-icon);min-height:0;padding:0 9px;
  border:0;border-radius:8px;background:#eef2f9;color:#3d4d6d;
  font-size:12px;font-weight:600;line-height:1;white-space:nowrap;cursor:pointer;
  transition:background .18s cubic-bezier(.22,.8,.25,1),color .18s cubic-bezier(.22,.8,.25,1);
}
.crm-page .crm-map-shell .crm-sheet-filter:hover{background:#e4eaf6}
.crm-page .crm-map-shell .crm-sheet-filter[aria-expanded=true]{background:#dfe7f6;color:var(--ops-blue)}
.crm-page .crm-map-shell .crm-sheet-filter sup{
  padding:1px 4px;border-radius:99px;background:var(--ops-blue);color:#fff;
  font:700 9px/1 var(--mono,ui-monospace,monospace);
}

/* 标签页栏：从"分段胶囊"改成"下划线标签"。
   用户：「不要做按钮，做成标签页栏，减少空隙」—— 胶囊有底色 + 圆角 + 内边距，
   三个视觉包袱却只表达一个「当前在哪一页」；下划线只用一条 2px 线，
   底部再压一条 1px 分隔线把这行"钉"进面板结构里。
   高度从 36（胶囊）降到 34，两侧内边距从 3px 收到 0 —— 标签直接对齐内容边缘，
   与卡片的 14px 内容轨同一条竖线。 */
.crm-page .crm-map-shell .crm-sheet-tabs{
  flex:0 0 auto;display:flex;gap:0;margin:0;padding:0 14px;
  border-bottom:1px solid var(--ops-line);background:transparent;
}
.crm-page .crm-map-shell .crm-sheet-tabs button{
  position:relative;flex:1 1 0;display:flex;align-items:center;justify-content:center;min-height:0;height:var(--ctl-h-sm);
  padding:0 14px;border:0;border-radius:0;background:transparent;box-shadow:none;
  font-size:13px;font-weight:600;color:var(--muted);cursor:pointer;
  transition:color .18s cubic-bezier(.22,.8,.25,1);
}
.crm-page .crm-map-shell .crm-sheet-tabs button::after{
  content:"";position:absolute;left:14px;right:14px;bottom:-1px;height:2px;border-radius:2px 2px 0 0;
  background:transparent;transition:background .18s cubic-bezier(.22,.8,.25,1);
}
.crm-page .crm-map-shell .crm-sheet-tabs button:hover{color:#3d4d6d}
.crm-page .crm-map-shell .crm-sheet-tabs button[aria-current=true]{color:var(--ops-blue);font-weight:700}
.crm-page .crm-map-shell .crm-sheet-tabs button[aria-current=true]::after{background:var(--ops-blue)}

.crm-map-shell .crm-sheet-body{
  flex:1 1 0;min-height:0;overflow:auto;overscroll-behavior:contain;
  padding:12px 14px calc(18px + env(safe-area-inset-bottom));
}
.crm-sheet-panel{display:grid;gap:10px;align-content:start}
.crm-sheet-panel[hidden]{display:none!important}
/* 卡片自带 display 会盖掉 hidden 的 UA 样式，本地筛选需要显式声明 */
.crm-sheet .crm-order-card[hidden]{display:none!important}

/* 面板里的筛选与卡片：沿用同一套控件，只收紧间距 */
.crm-sheet .crm-order-grid{grid-template-columns:1fr;gap:8px}
.crm-sheet [data-route-host]>.crm-section-heading{display:none}
/* 行内含「·」分隔的元信息改为弹性排布，窄宽度下不再把分隔符挤成孤字 */
.crm-visit-choice small.crm-choice-meta{display:flex;flex-wrap:wrap;gap:2px 10px}
.crm-page .crm-map-shell .crm-sheet .crm-toolbar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;align-items:end;padding:0;border:0;background:transparent}
.crm-page .crm-map-shell .crm-sheet .crm-toolbar>button[type=submit]{grid-column:1/-1;justify-self:end;min-width:104px}
.crm-sheet .crm-route-steps{margin:0}
.crm-sheet .crm-route-workspace{gap:10px}
.crm-sheet .crm-route-map-stage>.crm-map{height:220px;min-height:180px}

/* 收起的档位只剩抓手与标题 */
@media(max-width:899px){
  .crm-map-shell[data-sheet-state="collapsed"] .crm-sheet-tabs,
  .crm-map-shell[data-sheet-state="collapsed"] .crm-sheet-title p,
  .crm-map-shell[data-sheet-state="collapsed"] .crm-sheet-body{display:none}
}

/* 地图编号与列表卡片互相高亮 */
.crm-order-card.is-selected{border-color:var(--ops-blue);box-shadow:0 0 0 2px #081f801a}

/* ── 订单卡：两列「内容 + 44px 操作轨」──
   卡的边界只由一层浅色表面表达，不再叠边框＋阴影；
   调整操作收进右侧竖轨，与内容行对齐，避免每行右侧挂一个宽按钮。 */
.st-operations .crm-page .crm-order-card,
.st-operations .crm-order-grid>.crm-order-card{
  position:relative;display:grid;grid-template-columns:minmax(0,1fr) 44px;
  gap:8px;padding:12px 12px 12px 14px;
  border:0;border-radius:var(--ops-radius);
  background:#f7f9fd;box-shadow:none;align-content:start;
}
.st-operations .crm-order-card>*{grid-column:1/-1}
.st-operations .crm-order-card .crm-inline-edit{
  grid-column:2;align-self:center;justify-self:end;
  width:44px;min-width:44px;height:44px;min-height:44px;padding:0;
  border:0;border-radius:10px;background:#fff;color:var(--ops-blue);
  font-size:12px;font-weight:600;box-shadow:inset 0 0 0 1px #dce4f4;
  transition:background .18s cubic-bezier(.22,.8,.25,1);
}
.st-operations .crm-order-card .crm-inline-edit:hover{background:#eef2f9}

/* 身份行 */
.st-operations .crm-order-card .crm-order-card-top{
  grid-template-columns:24px minmax(0,1fr) auto;gap:8px;align-items:start;
}
.st-operations .crm-order-card .crm-order-number{
  width:24px;height:24px;border-radius:7px;font-size:12px;font-weight:700;
  background:#e7edfa;color:var(--ops-blue);margin-top:2px;
}
.st-operations .crm-order-card .crm-order-ident{min-width:0}
.st-operations .crm-order-card .crm-order-card-top h3{
  font-size:15px;font-weight:700;line-height:1.35;
}
.st-operations .crm-order-card button.crm-order-title-link{
  font-size:15px;font-weight:700;min-height:44px;line-height:1.35;padding:0;border:0;background:transparent;
  box-shadow:none;text-align:left;justify-content:flex-start;width:100%;color:var(--ops-text);
}
.st-operations .crm-order-card button.crm-order-title-link:hover{color:var(--ops-blue)}
.st-operations .crm-order-card .crm-order-meta{
  display:flex;flex-wrap:wrap;gap:2px 10px;margin:1px 0 0;font-size:12px;line-height:1.5;color:var(--ops-muted);
}
.st-operations .crm-order-card .crm-status-pill{
  align-self:start;width:auto;min-width:56px;padding:3px 8px;font-size:11px;line-height:1.5;
}

/* 到货与地址：说明与值同一行，右侧留给操作轨 */
.st-operations .crm-order-card .crm-field-caption{
  flex:none;display:inline-flex;align-items:center;gap:6px;
  font-size:12px;font-weight:500;line-height:1.5;color:var(--ops-muted);
}
.st-operations .crm-order-card .crm-order-when{
  display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;min-width:0;
}
.st-operations .crm-order-card .crm-address-preview{
  flex:1 1 auto;min-width:0;min-height:0;margin:0;padding:0;
  border:0;background:transparent;box-shadow:none;text-align:left;
  font-size:13px;line-height:1.5;color:var(--ops-text);
}
.st-operations .crm-order-card .crm-order-recipient{
  display:flex;flex-wrap:wrap;gap:2px 12px;margin:0;padding:0;
  font-size:12px;line-height:1.5;color:var(--ops-muted);
}
.st-operations .crm-order-card .crm-order-recipient a{color:var(--ops-blue);font-weight:600;font-variant-numeric:tabular-nums}
.st-operations .crm-order-card .crm-order-alert{
  margin:0;padding:0 0 0 9px;border-left:2px solid #db6500;border-radius:0;
  background:transparent;font-size:12px;line-height:1.5;overflow-wrap:anywhere;
}

/* 商品：卡上只留一行摘要，明细在「订单详情」里 */
.st-operations .crm-order-card .crm-order-products-list{
  flex:1 1 auto;min-width:0;font-size:12px;line-height:1.5;color:var(--ops-text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* 到货徽标与定位圆点 */
.crm-when-badge{
  flex:none;padding:2px 7px;border-radius:6px;background:#e7edfa;color:#4a5875;
  font-size:11px;font-style:normal;font-weight:600;line-height:1.5;
}
.crm-when-badge.is-today{background:#e2ebff;color:var(--ops-blue)}
.crm-when-badge.is-late{background:#ffeedd;color:#b0490a}
.crm-locate-dot{display:inline-block;flex:none;width:7px;height:7px;border-radius:50%;background:#1f9d55}
.crm-locate-dot.is-missing{background:#db6500}

/* 主操作：描边次级，与右侧操作轨同一重量 */
.st-operations .crm-order-card .crm-order-main-actions :is(a,button):hover{background:#eef2f9}

/* ── 桌面端：左操作面板、右地图，面板不再是浮层 ── */
@media(min-width:900px){
  .crm-map-shell{display:grid;grid-template-columns:minmax(330px,.8fr) minmax(0,1.2fr);grid-template-rows:minmax(0,1fr)}
  .crm-map-shell .crm-sheet{
    position:relative;grid-column:1;grid-row:1;align-self:stretch;height:auto;min-height:0;border-radius:0;
    box-shadow:none;border-right:1px solid var(--ops-line);padding-top:10px;
  }
  .crm-page .crm-map-shell .crm-sheet-grab{display:none!important}
  .crm-page .crm-map-shell .crm-sheet-head{grid-template-columns:minmax(0,1fr) auto auto;padding:0 16px 6px}
  .crm-page .crm-map-shell .crm-sheet-tabs{padding:0 16px}
  .crm-map-shell .crm-sheet-body{padding:12px 16px 20px}
  .crm-map-stage{position:relative;inset:auto;grid-column:2;grid-row:1;min-height:0}
  .crm-map-status{right:60px}
}

/* ════════════════════════════════════════════════════════════════════
   第二轮重构（2026-10-09）
   目标：把「订单卡」从 7 行随意堆叠，改成 图标栏(22) + 字段(1fr) + 操作(44)
   的三列栅格；字段值统一「标签在上、值在下」，所有值左边缘对齐，可纵向扫读。
   同时清掉上一轮遗留的渐变装饰、重复的「修改」文字按钮与死代码规则。
   44px 触控高度不变（DESIGN.md）；高度下降全部来自删重复容器与收紧间距。
   ════════════════════════════════════════════════════════════════════ */

/* ── 订单卡本体：单列 + 统一 6px 块间距 ── */
.st-operations .crm-page .crm-order-card,
.st-operations .crm-order-grid>.crm-order-card{
  display:grid;grid-template-columns:minmax(0,1fr);
  /* 区块间 10px：卡头 / 字段区 / 辅助行 / 操作行 四个区块的呼吸 */
  gap:10px;padding:12px 12px 10px 14px;
  border:0;border-radius:var(--ops-radius);
  background:#f7f9fd;box-shadow:none;align-content:start;
}
.st-operations .crm-order-card>header.crm-order-card-top{margin:0}

/* 左侧状态色条：蓝＝已确认 / 橙＝待确认（编号顺序与列表一致） */
.st-operations .crm-order-card::before{
  content:"";position:absolute;left:0;top:12px;bottom:12px;width:3px;border-radius:0 3px 3px 0;
  background:var(--ops-blue);opacity:.85;
}
.st-operations .crm-order-card.is-pending::before{background:#db6500}

/* ── 字段区：三列栅格，标签在上、值在下 ── */
.st-operations .crm-order-card .crm-order-fields{display:grid;gap:8px;margin:0}
.st-operations .crm-order-card .crm-order-field{
  display:grid;grid-template-columns:22px minmax(0,1fr) 44px;
  align-items:start;gap:0 8px;min-width:0;padding:0;
}
/* 商品字段没有编辑操作，去掉第三列，值自然占满 */
.st-operations .crm-order-card .crm-field-glyph{
  display:grid;place-items:center;align-self:start;width:22px;height:22px;margin-top:1px;color:#93a1ba;
}
.st-operations .crm-order-card .crm-field-glyph .crm-field-icon{width:15px;height:15px}
.st-operations .crm-order-card .crm-order-field-body{display:grid;gap:3px;min-width:0}
.st-operations .crm-order-card .crm-order-field .crm-field-caption{
  display:inline-flex;align-items:center;gap:4px;
  font-size:11px;font-weight:600;line-height:1.4;color:var(--muted);
}
/* 圆点与状态文字是一个整体：圆点后不再叠加额外间距 */
.st-operations .crm-order-card .crm-order-field .crm-field-caption .crm-locate-dot{margin-left:1px}
.st-operations .crm-order-card .crm-order-field .crm-field-caption .crm-locate-state{margin-left:0}

/* ── 编辑操作：44×44 铅笔图标，收在右侧竖轨 ──
   两个「修改」文字按钮改为带 aria-label 的图标，意图由所在字段说明。 */
.st-operations .crm-order-card .crm-inline-edit{
  grid-column:3;justify-self:end;align-self:center;
  width:44px;min-width:44px;height:44px;min-height:44px;padding:0;
  border:0;border-radius:10px;background:#fff;color:var(--ops-blue);cursor:pointer;
  box-shadow:inset 0 0 0 1px #dce4f4;
  transition:background .18s cubic-bezier(.22,.8,.25,1),box-shadow .18s cubic-bezier(.22,.8,.25,1);
}
.st-operations .crm-order-card .crm-inline-edit svg{width:16px;height:16px;display:block;margin:auto}
.st-operations .crm-order-card .crm-inline-edit:hover{background:#eef2f9;box-shadow:inset 0 0 0 1px #c3d2ee}
.st-operations .crm-order-card .crm-inline-edit:active{transform:translateY(1px)}

/* 待补定位时地址本身就是补录入口：转成橙色，提示"这里能点" */
.st-operations .crm-order-card button.crm-address-preview.is-missing{color:#b8550a}
.st-operations .crm-order-card button.crm-address-preview.is-missing:hover{color:#db6500}
.st-operations .crm-order-card button.crm-address-preview.is-missing:disabled{cursor:default;color:var(--ops-muted)}

/* 「补定位」是待办而不是次级操作：给实心橙，让它在卡片底部成为唯一的重心 */

/* ── 商品摘要：跟在字段区之后的一行次信息 ──
   原来它是「第三行等价字段」，有图标、有标签、有值，占掉一整个字段位；
   本轮把图标与标签都去掉，只留一行摘要（12px 灰），层级自然落到第四级。 */
.st-operations .crm-order-card .crm-order-goods-line{
  /* 与「收货地址」的值左边缘对齐：卡内 padding-left(14) + 图标轨(24) + 栏间距(8) = 46px */
  margin:0;padding-left:calc(var(--crm-rail) + 8px);
  font-size:12px;line-height:1.5;color:var(--ops-muted);
  min-width:0;overflow:hidden;
}
.st-operations .crm-order-card .crm-order-goods-line .crm-order-products-list{
  display:block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.st-operations .crm-order-card .crm-order-goods-line strong{font-weight:700;color:#3d4d6d;font-variant-numeric:tabular-nums}

/* ── 到货时间：卡里唯一的大字号数据 ── */
.st-operations .crm-order-card .crm-order-when{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;min-width:0}
.st-operations .crm-order-card .crm-order-when span{font-size:12px;line-height:1.5;color:var(--ops-muted)}
.st-operations .crm-order-card .crm-order-when strong{
  font-size:17px;line-height:1.3;letter-spacing:-.02em;color:var(--ops-blue);font-variant-numeric:tabular-nums;
}

/* ── 收货地址标签行：圆点 + 「已定位 / 待补定位」跟在后面，
      不再另起一行（用户：「直接跟在收货地址后面的圆点后面就行，不用多加一行」）。
      圆点用颜色表达状态，文字用同一色系的浅色，读起来是一个整体而不是两个元素。 */
.st-operations .crm-order-card .crm-locate-state{
  margin-left:0;font-size:11px;font-weight:600;font-style:normal;line-height:1.4;color:#176b3a;
}
.st-operations .crm-order-card .crm-locate-state.is-missing{color:#b8550a}
.st-operations .crm-order-card .crm-field-caption .crm-locate-dot.is-missing+ .crm-locate-state{color:#b8550a}

/* ── 收货地址：单行截断，点一下在地图上定位到这一单 ── */
.st-operations .crm-order-card .crm-address-preview{
  min-width:0;margin:0;padding:0;border:0;background:transparent;box-shadow:none;text-align:left;
  font-size:13px;line-height:1.5;color:var(--ops-text);
}
.st-operations .crm-order-card button.crm-address-preview{
  cursor:pointer;min-height:0;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.st-operations .crm-order-card button.crm-address-preview:hover{color:var(--ops-blue)}

/* ── 商品：卡上只留一行摘要，明细在「订单详情」里 ── */
.st-operations .crm-order-card .crm-order-field-body .crm-order-products-list{
  min-width:0;font-size:12px;line-height:1.5;color:var(--ops-text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.st-operations .crm-order-card .crm-order-products-list strong{font-weight:700;color:var(--ops-blue);font-variant-numeric:tabular-nums}
.st-operations .crm-order-card .crm-order-products-list i{font-style:normal;color:var(--ops-muted)}

/* ── 主操作：导航实心、联系描边，一张卡只有一个重心 ── */
.st-operations .crm-order-card .crm-order-main-actions{gap:8px;margin:0}
.st-operations .crm-order-card .crm-order-main-actions :is(a,button){
  flex:1 1 0;height:auto;min-height:36px;padding:0 12px;font-size:13px;font-weight:600;
  border:1px solid #dce4f4;border-radius:9px;background:#fff;color:var(--ops-blue);
  display:inline-flex;align-items:center;justify-content:center;
  transition:background .18s cubic-bezier(.22,.8,.25,1);
}
.st-operations .crm-order-card .crm-order-main-actions>a[href^="https://www.google.com/maps/"]{
  background:var(--ops-blue);border-color:var(--ops-blue);color:#fff;box-shadow:0 3px 10px #081f8026;
}
.st-operations .crm-order-card .crm-order-main-actions>a[href^="https://www.google.com/maps/"]:hover{background:#0a2490}
.st-operations .crm-order-card .crm-order-main-actions>button:hover{background:#eef2f9}

/* ══ 路线页「选订单」：候选从 3 行文本墙改成可扫读的一行式 ══ */
.crm-page .crm-map-shell .crm-sheet .crm-route-steps{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:100%;justify-self:stretch;margin:0 0 10px;
  gap:4px;padding:3px;border:0;border-radius:10px;background:#eff3fa;
}
.crm-page .crm-map-shell .crm-sheet .crm-route-steps button{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  min-height:44px;padding:4px 11px;border:0;border-radius:8px;background:transparent;
  color:#52627e;font-size:12px;font-weight:600;
  transition:background .18s cubic-bezier(.22,.8,.25,1),color .18s cubic-bezier(.22,.8,.25,1);
}
.crm-page .crm-map-shell .crm-sheet .crm-route-steps button>span{
  display:grid;place-items:center;flex:none;width:17px;height:17px;border-radius:50%;background:#d8e2f4;font-size:10px;
}
.crm-page .crm-map-shell .crm-sheet .crm-route-steps button[aria-selected=true]{
  background:#fff;color:var(--ops-blue);box-shadow:0 1px 5px #1021480f;
}
.crm-page .crm-map-shell .crm-sheet .crm-route-steps button[aria-selected=true]>span{background:var(--ops-blue);color:#fff}

/* 筛选行：查询按钮并入同一行，不再独占一行 52px */
.crm-page .crm-map-shell .crm-sheet .crm-toolbar{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto}
.crm-page .crm-map-shell .crm-sheet .crm-toolbar>button[type=submit]{grid-column:auto;justify-self:stretch;min-width:0;padding:10px 14px}

/* 候选订单：主行 = 客户 + 到货判断，次行 = 地址，尾行 = 编号 + 业务员 */
.st-operations .crm-route-selection .crm-task-picker{gap:0}
.st-operations .crm-route-selection .crm-visit-choice{
  display:grid;grid-template-columns:20px minmax(0,1fr);align-items:start;gap:0 10px;
  min-width:0;padding:11px 8px;border:0;border-bottom:1px solid var(--ops-line);border-radius:0;
  background:transparent;box-shadow:none;
}
.st-operations .crm-route-selection .crm-visit-choice:last-child{border-bottom:0}
.st-operations .crm-route-selection .crm-visit-choice:has(input:checked){background:#eef4ff;box-shadow:inset 3px 0 0 var(--ops-blue)}
.st-operations .crm-route-selection .crm-visit-choice input{margin:2px 0 0}
.st-operations .crm-route-selection .crm-visit-choice>span{min-width:0;display:grid;gap:3px}
.st-operations .crm-choice-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;min-width:0}
.st-operations .crm-choice-head strong{font-size:15px;font-weight:700;line-height:1.35;color:#10245a;overflow-wrap:anywhere}
.st-operations .crm-choice-when{
  flex:none;padding:2px 7px;border-radius:6px;background:#e7edfa;color:#4a5875;
  font-size:11px;font-style:normal;font-weight:600;line-height:1.5;white-space:nowrap;font-variant-numeric:tabular-nums;
}
.st-operations .crm-choice-when.is-today{background:#e2ebff;color:var(--ops-blue)}
.st-operations .crm-choice-when.is-late{background:#ffeedd;color:#b0490a}
.st-operations .crm-choice-when.is-status{background:#eef2f9;color:#52627e}
.st-operations .crm-choice-addr{font-size:13px;line-height:1.5;color:var(--ops-text);overflow-wrap:anywhere}
.st-operations .crm-choice-meta{display:flex;flex-wrap:wrap;gap:2px 10px;font-size:11px;line-height:1.5;color:var(--ops-muted)}

/* ── 空状态：给出下一步，而不是一句「没有数据」 ── */
.st-operations .crm-sheet .crm-empty{
  display:grid;justify-items:center;gap:6px;padding:28px 16px;text-align:center;
  border:1px dashed #ccd7ea;border-radius:var(--ops-radius);background:#fafcff;
}
.st-operations .crm-sheet .crm-empty h3{font-size:14px;font-weight:700;color:#10245a;margin:0}
.st-operations .crm-sheet .crm-empty p{max-width:34ch;margin:0;font-size:12px;line-height:1.6;color:var(--ops-muted)}

/* 桌面端：面板变左栏后，卡片操作行不必再撑满 */
@media(min-width:900px){
  .st-operations .crm-order-grid>.crm-order-card{padding:13px 14px 9px 16px}
  .st-operations .crm-order-card .crm-order-main-actions :is(a,button){flex:0 1 auto;min-width:116px}
}

/* ── 收尾打磨（同一轮） ── */
/* 商品摘要收成一行：标签与明细并排，值仍与其他字段左对齐（省 16px 高度） */

/* 辅助行：业务员 / 收货人 / N 项商品 统一 12px 灰，用发丝点分隔 */
.st-operations .crm-order-card .crm-order-meta{
  display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;
  margin:0;font-size:12px;line-height:1.5;color:var(--ops-muted);
}
.st-operations .crm-order-card .crm-order-meta>span{position:relative;padding-left:9px}
.st-operations .crm-order-card .crm-order-meta>span:first-child{padding-left:0}
.st-operations .crm-order-card .crm-order-meta>span+span::before{
  content:"";position:absolute;left:0;top:50%;width:3px;height:3px;border-radius:50%;
  transform:translateY(-50%);background:#c4cee0;
}
.st-operations .crm-order-card .crm-order-meta :is(.crm-order-ref,.crm-order-owner,.crm-order-recipient,.crm-order-goods){
  font-size:12px;line-height:1.5;color:var(--ops-muted);letter-spacing:0;
}
/* 到货日期抬到 14px 半粗，与 17px 的承诺时段形成同一行内的两级层级 */
.st-operations .crm-order-card .crm-order-when span{font-size:14px;font-weight:600;color:#3d4d6d}

/* 顶部定位摘要：用发丝竖线分隔，不再只靠空白分开 */
.crm-page .crm-map-shell .crm-sheet-title p span+span{position:relative;padding-left:11px}
.crm-page .crm-map-shell .crm-sheet-title p span+span::before{
  content:"";position:absolute;left:0;top:50%;width:1px;height:11px;transform:translateY(-50%);background:#d7dfee;
}

/* 地图提示条只在「零定位点」时出现，给它一个合理的宽度而不是横贯整张地图 */
.crm-page .crm-map-shell .crm-map-status{max-width:min(340px,calc(100% - 80px))}

/* 面板里的候选只有一个宽度可用的列：>=801px 的双列规则是给整页拜访视图的，
   在 500px 宽的侧栏里会把每列压到 236px，客户名和地址全被折成碎行。 */
.crm-page .crm-map-shell .crm-sheet .crm-route-selection .crm-task-picker{grid-template-columns:minmax(0,1fr)}

/* 桌面端切到「配送路线」时，规划更吃宽度：把左栏放宽一档 */
@media(min-width:900px){
  .crm-map-shell[data-sheet-tab="route"]{grid-template-columns:minmax(430px,1.05fr) minmax(0,1fr)}
}

/* ── 路线加载骨架：与「选订单」终态同形（一行步骤条 + 三行候选），不用转圈 ── */
.crm-sheet .crm-route-loading{display:grid;gap:8px;margin:0;padding:0}
.crm-sheet .crm-route-loading span{
  display:block;height:14px;border-radius:7px;
  background:linear-gradient(90deg,#eef2f9 25%,#e2e9f6 37%,#eef2f9 63%);
  background-size:400% 100%;animation:crm-skeleton 1.4s ease-in-out infinite;
}
.crm-sheet .crm-route-loading span:nth-child(1){width:46%;height:36px;border-radius:10px}
.crm-sheet .crm-route-loading span:nth-child(n+2){height:64px;border-radius:var(--ops-radius)}
@keyframes crm-skeleton{from{background-position:100% 0}to{background-position:0 0}}
@media(prefers-reduced-motion:reduce){.crm-sheet .crm-route-loading span{animation:none}}

/* ════════════════════════════════════════════════════════════════════
   第三轮（2026-10-09 晚）：控件尺寸分档 + 面板头部去重 + 卡头对齐
   ────────────────────────────────────────────────────────────────────
   用户截图反馈的三件事：
     1) 「选订单 · 看路线」大药丸与「订单列表 / 配送路线」标签条是同一个动作，
        两行控件干一件事，光这一行就吃掉 50px（面板头部实测 178px）；
     2) 卡头标题停在 x=60、字段正文停在 x=58 —— 编号列 24px vs 图标列 22px，
        存在两条图标轨；「已确认」胶囊 align-self:start 停在 y=604 而标题文字在
        y=615，差 11px，视觉上「没对齐」；
     3) 面板内所有可控件一律 44px（铅笔按钮 44×44 像一块空方块）、内边距也按
        44px 给，在 390px 宽的密集工作区里显得笨重。
   本轮确立的尺寸档位：
     --ctl-h    36px  面板内标准控件：标签页 / 工具条 / 表单按钮 / 卡内主操作
     --ctl-h-sm 34px  次级：卡内详情入口、详情内按钮
     --ctl-icon 30px  图标按钮：卡内编辑、面板内小控件
     --crm-rail 24px  卡内图标轨：编号徽标与字段图标共用一条轨，正文统一 x=60
   注：--st-control-height 是全局变量（门店前台也在用），只在 .crm-map-shell
       作用域内覆写为 36px，不动全局；表单/对话框主操作仍是 44px。
   ════════════════════════════════════════════════════════════════════ */
.st-operations,.crm-overlay,.crm-page{
  --ctl-h:36px;--ctl-h-sm:34px;--ctl-icon:30px;--crm-rail:24px;
}
/* 面板内控件基线下调（覆写全局变量，作用域仅限地图面板） */
.crm-page .crm-map-shell{--st-control-height:var(--ctl-h)}

/* ── 卡头：一条图标轨 + 标题与状态共基线 ── */
.st-operations .crm-order-card .crm-order-card-top{
  display:grid;grid-template-columns:var(--crm-rail) minmax(0,1fr);gap:0 8px;align-items:start;
}
.st-operations .crm-order-card .crm-order-number{
  width:var(--crm-rail);height:var(--crm-rail);border-radius:6px;font-size:11px;font-weight:700;margin-top:1px;
}
.st-operations .crm-order-card .crm-order-ident{display:grid;gap:4px;min-width:0}
/* 标题与状态胶囊按基线对齐（原来胶囊 align-self:start，比标题文字高 11px） */
.st-operations .crm-order-card .crm-order-headline{
  display:flex;align-items:baseline;justify-content:space-between;gap:10px;min-width:0;
}
.st-operations .crm-order-card .crm-order-headline h3{margin:0;font-size:16px;font-weight:750;line-height:1.35;letter-spacing:-.01em;min-width:0}
.st-operations .crm-order-card button.crm-order-title-link{
  min-height:0;padding:2px 0;font-size:16px;font-weight:750;line-height:1.35;letter-spacing:-.01em;
}
.st-operations .crm-order-card .crm-order-headline .crm-status-pill{
  flex:none;align-self:baseline;width:auto;min-width:0;padding:2px 7px;font-size:11px;line-height:1.45;
}
.st-operations .crm-order-card .crm-order-meta{margin:0}

/* ── 字段轨与图标统一到 --crm-rail ── */
.st-operations .crm-order-card .crm-order-field{
  grid-template-columns:var(--crm-rail) minmax(0,1fr) var(--ctl-icon);
}
.st-operations .crm-order-card .crm-field-glyph{width:var(--crm-rail);height:var(--crm-rail);margin-top:1px}
.st-operations .crm-order-card .crm-field-glyph .crm-field-icon{width:16px;height:16px}

/* ── 编辑：30px 图标、灰蓝描边，不再是一块高亮空方块 ── */
.st-operations .crm-order-card .crm-inline-edit{
  grid-column:3;justify-self:end;align-self:center;
  width:var(--ctl-icon);min-width:var(--ctl-icon);height:var(--ctl-icon);min-height:0;padding:0;
  border:0;border-radius:8px;background:#fff;color:#5b7099;
  box-shadow:inset 0 0 0 1px #e0e7f5;
  transition:background .18s cubic-bezier(.22,.8,.25,1),box-shadow .18s cubic-bezier(.22,.8,.25,1),color .18s cubic-bezier(.22,.8,.25,1);
}
.st-operations .crm-order-card .crm-inline-edit svg{width:15px;height:15px;display:block;margin:auto}
.st-operations .crm-order-card .crm-inline-edit:hover{color:var(--ops-blue);background:#f2f6fd;box-shadow:inset 0 0 0 1px #c3d2ee}

/* ── 卡内其余控件降到分档高度 ── */
.st-operations .crm-order-card .crm-order-main-actions :is(a,button){
  min-height:var(--ctl-h);height:auto;padding:0 12px;font-size:13px;border-radius:9px;
}
.st-operations .crm-order-card button.crm-address-preview{min-height:0}

/* ── 路线页：步骤条与页脚按钮同步收小 ── */
.crm-page .crm-map-shell .crm-sheet .crm-route-steps{padding:3px;border-radius:10px}
.crm-page .crm-map-shell .crm-sheet .crm-route-steps button{min-height:0;height:var(--ctl-icon);padding:0 10px;border-radius:7px}
.crm-page .crm-map-shell .crm-sheet .crm-route-steps button>span{width:16px;height:16px}

.crm-page .crm-map-shell .crm-sheet .crm-visit-plan .crm-actions .button{min-height:var(--ctl-h);padding:0 14px;font-size:13px}
.crm-page .crm-map-shell .crm-sheet .crm-route-help summary{min-height:var(--ctl-h-sm)}

/* ════════════════════════════════════════════════════════════════════
   第三轮补充（2026-10-09 晚）：地图满屏铺底 + 地图工具收小 + 面板高度循环
   ────────────────────────────────────────────────────────────────────
   1) 地图要铺满整页背景、并伸到标题栏底下透出来：把地图舞台向上顶一个标题栏高度；
      为此要放开两级裁剪（.dialog-body 与 .crm-map-shell 的 overflow:hidden）。
      标题栏高度不写死断点（≥721px 是 66px、以下是 54px），由 JS 量出来写进
      --crm-head-h，CSS 只消费这个变量。
   2) 标题栏改磨砂玻璃，地图从底下透出来。
   3) 地图右上角工具 44 → 36px，第一个按钮改为面板高度循环：
      半屏 → 大半屏 → 收起 → 半屏。三档下面板都盖不住它（大半屏时面板顶在 110px），
      所以随时能按回来。面板标题行里的箭头保留为「快速收起 / 展开」。
   ════════════════════════════════════════════════════════════════════ */
.crm-page .crm-map-shell{--crm-head-h:54px}


@media(max-width:899px){
  /* 放开裁剪，让地图舞台向上顶一个标题栏高度 */
  body .commerce-dialog.st-operations:is([data-view="订单地图"],[data-view="客户管理"],[data-view="客户地图"])>.dialog-body{overflow:visible}
  .st-operations:is([data-view="订单地图"],[data-view="客户管理"],[data-view="客户地图"]) .crm-map-shell{overflow:visible}
  .st-operations:is([data-view="订单地图"],[data-view="客户管理"],[data-view="客户地图"]) .crm-map-stage{inset:calc(-1 * var(--crm-head-h)) 0 0 0}
  /* 浮层跟着下移，避免钻到标题栏后面 */
  .st-operations:is([data-view="订单地图"],[data-view="客户管理"],[data-view="客户地图"]) .crm-map-tools,
  .st-operations:is([data-view="订单地图"],[data-view="客户管理"],[data-view="客户地图"]) .crm-map-status{top:calc(var(--crm-head-h) + 10px)}
}

/* 标题栏改磨砂玻璃：地图从底下透出来（太实就看不见地图，太透会压不住标题的可读性） */
body .commerce-dialog.st-operations>.dialog-head.st-page-header{
  background:linear-gradient(180deg,#ffffffd6,#ffffffa6);
  -webkit-backdrop-filter:blur(18px) saturate(1.5);
  backdrop-filter:blur(18px) saturate(1.5);
}

/* 桌面端面板是固定栏位，高度循环无意义 —— 标题行工具组整体隐藏 */
@media(min-width:900px){
  .crm-page .crm-map-shell .crm-sheet-tools{display:none}
}

/* ════════════════════════════════════════════════════════════════════
   第四轮（2026-10-09 深夜）：订单卡层级 + 编辑弹窗
   ────────────────────────────────────────────────────────────────────
   用户截图反馈的两件事：
     1) 「订单卡片信息太多，层级不明，间距基本一样，分不清关系，重点找不到」
        —— 根因是「所有东西等间距」＝没有分组。本轮建立间距梯度 4/8/10/14
        与字号四级（16 标题 / 15 时间 / 13 正文 / 12 辅助），并且把原来的三行
        等价字段压成「时间 + 地址」两行主信息，商品摘要降为一行次信息。
     2) 「地址修改、时间修改页面还没改」—— 两个弹窗仍沿用卡片套卡片 + 44px 控件。
        本轮改成「一条主表面 + 语义区块」，控件落到分档 36/30。
   ════════════════════════════════════════════════════════════════════ */

/* ── 编辑弹窗：表单本身不再是卡片 ──
   原来 .crm-form 在 overlay 里被剥掉表面还不够 —— 里面的 details / 区块各自
   又带一层边框或底色，视觉上是「卡片套卡片套卡片」。
   现在：overlay 的一条主表面 + 区块之间只有间距与一条发丝分隔线。 */
.crm-overlay .crm-edit-form{
  display:grid;gap:14px;margin:0;padding:0;
  border:0;background:transparent;box-shadow:none;
}
/* 语义区块：details 与普通 div 同构，靠 title 行区分，不再各自加边框 */
.crm-overlay .crm-edit-form .crm-edit-block{
  display:grid;gap:10px;margin:0;padding:0;
  border:0;background:transparent;box-shadow:none;
}
.crm-overlay .crm-edit-form .crm-edit-block+.crm-edit-block,
.crm-overlay .crm-edit-form .crm-edit-facts+.crm-edit-block{
  padding-top:14px;border-top:1px solid #eef1f7;
}

/* 已保存地址：折叠标题行 = 标题 + 一句说明；展开后是一个占满宽的下拉 */
.crm-overlay .crm-edit-form .crm-saved-picker>summary{
  display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  min-height:24px;font-size:13px;font-weight:650;color:#3d4d6d;cursor:pointer;list-style:none;
}
.crm-overlay .crm-edit-form .crm-saved-picker>summary::-webkit-details-marker{display:none}
.crm-overlay .crm-edit-form .crm-saved-picker>summary small{font-size:12px;font-weight:500;color:var(--ops-muted)}
.crm-overlay .crm-edit-form .crm-saved-picker[open]>summary{color:var(--ops-blue)}
.crm-overlay .crm-edit-form .crm-edit-picker{display:grid;gap:6px;margin:0;font-size:12px}

/* 事实表：客户希望 / 有效预约。左右两栏，标签在上值在下（与订单卡同一语言） */
.crm-overlay .crm-edit-facts{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0;padding:11px 12px;
  border-radius:10px;background:#f4f7fc;
}
.crm-overlay .crm-edit-facts>div{display:grid;gap:3px;min-width:0}
.crm-overlay .crm-edit-facts dt{font-size:11px;font-weight:600;line-height:1.4;color:var(--muted)}
.crm-overlay .crm-edit-facts dd{
  margin:0;font-size:13px;font-weight:600;line-height:1.5;color:#10245a;
  font-variant-numeric:tabular-nums;overflow-wrap:anywhere;
}

/* 操作行：取消在前、主按钮在后，成组靠右下角（原来左右分居两头，中间空出 200px） */
.crm-overlay .crm-edit-actions{
  display:flex;align-items:center;justify-content:flex-end;gap:8px;margin:0;
  padding-top:14px;border-top:1px solid #eef1f7;
}
.crm-overlay .crm-edit-actions>.button{
  flex:0 0 auto;min-height:36px;padding:0 18px;font-size:13px;font-weight:650;border-radius:9px;
}
.crm-overlay .crm-edit-actions>button:not(.button){
  order:-1;min-height:36px;padding:0 12px;border:0;background:transparent;
  color:var(--ops-muted);font-size:13px;font-weight:600;box-shadow:none;
}
.crm-overlay .crm-edit-actions>button:not(.button):hover{color:#3d4d6d;background:#f2f5fa}

/* 弹窗里的地址表单块：地图控制台与文字地址不再各占一张卡 */
.crm-overlay .crm-edit-form .crm-location-panel{
  display:grid;gap:10px;margin:0 0 2px;padding:0;border:0;background:transparent;box-shadow:none;
}
.crm-overlay .crm-edit-form .crm-map-controls{display:flex;gap:8px}
.crm-overlay .crm-edit-form .crm-map-controls>button{min-height:34px;padding:0 12px;font-size:12px}
.crm-overlay .crm-edit-form label:not(.crm-check){display:grid;gap:5px;font-size:12px;font-weight:600;color:#5b6b88}
.crm-overlay .crm-edit-form :is(input,select,textarea){
  min-height:36px;padding:0 10px;border-radius:8px;font-size:14px;font-weight:400;color:var(--ops-text);
}
.crm-overlay .crm-edit-form textarea{min-height:64px;padding:9px 10px;line-height:1.55}
.crm-overlay .crm-edit-form .crm-details.crm-address-contact{gap:8px;margin-top:4px}
.crm-overlay .crm-edit-form .crm-details.crm-address-contact>summary{
  display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  min-height:24px;font-size:13px;font-weight:650;color:#3d4d6d;list-style:none;
}
.crm-overlay .crm-edit-form .crm-details.crm-address-contact>summary::-webkit-details-marker{display:none}
.crm-overlay .crm-edit-form .crm-window{display:grid;gap:10px;margin:0;padding:0;border:0;background:transparent;box-shadow:none}
.crm-overlay .crm-edit-form .crm-window .crm-grid{gap:8px}
.crm-overlay .crm-edit-form .crm-check{display:flex;align-items:center;gap:8px;min-height:36px;font-size:13px;font-weight:600;color:#3d4d6d}
.crm-overlay .crm-edit-form .crm-muted{font-size:12px;line-height:1.6;color:var(--ops-muted)}

/* 时间弹窗的键值表在窄屏折成一列 */
@media(max-width:479px){
  .crm-overlay .crm-edit-facts{grid-template-columns:minmax(0,1fr)}
  .crm-overlay .crm-edit-actions{flex-wrap:wrap}
}


/* ── 编辑弹窗收尾 ──────────────────────────────────────────────────
   ① 关闭按钮落到 30px（--ctl-icon 档），与面板内其它图标按钮同一重量。
   ② 原来的「地图选位置」被 .st-operations .crm-page button 的默认样式染成
      深蓝实心，与「保存地址」（橙色渐变主按钮）抢重心 —— 一张弹窗只能有一个
      实心按钮。这里把两个地图控制按钮统一成描边次级。
   ③ 底部留白：overlay 的 16px 内边距 + 操作行的 14px 上边距会叠出 30px 空档，
      操作行改成靠上一条发丝线分隔，不再另加下边距。 */
.crm-overlay .crm-edit-form .crm-map-controls>button{
  background:#fff;border:1px solid #dce4f4;color:var(--ops-blue);
  box-shadow:none;font-weight:600;border-radius:8px;
}
.crm-overlay .crm-edit-form .crm-map-controls>button:hover{background:#f2f6fd;border-color:#c3d2ee}
.crm-overlay .crm-edit-form .crm-map-controls>button:first-child{color:var(--ops-blue)}

.crm-overlay>.crm-page{padding:14px 16px 16px}
.crm-overlay .crm-overlay-head+.crm-page{padding-top:14px}


/* ══════════════════════════════════════════════════════════════════════
   第八轮：询价详情页 + 报价页 分档归一（2026-10-10）
   判据：内部工作台控件不再继承门店前台的 44px ——
     36 单行按钮 / 操作行 / 单行输入、34 折叠摘要与次级入口、30 密集工具条。
   ⚠️ 关键：min-height 只是「下限」。14px 文字行高 22.4px + 8px 内边距 + 2px 边框
     会把控件顶到 40~41px，所以单行控件必须同时定住 line-height(20) 与 padding(7/0)。
   ⚠️ 例外：报价单底部 .estimate-dock 沿用门店前台共用 cart dock
     （st-multilingual-layout.css 的 !important 48/44 与 --st-cart-dock-* 令牌），
     与「购物车悬浮条」是同一组件，本轮不动，见 DESIGN.md 第八轮说明。
   作用域一律收到「工作台（.st-operations）」或「具体视图」，门店前台保持 44px。
   ══════════════════════════════════════════════════════════════════════ */

/* ① 单行按钮定档 36px（7 + 7 内边距 + 20 行高 + 2 边框） */
.st-operations .flow-panel>button,
.st-operations .flow-actions button,
.st-operations .flow-card-side button,
.st-operations .flow-popup button:where(:not(.st-option)){
  min-height:var(--ctl-h,36px);padding:7px 12px;line-height:20px;
}
.st-operations .flow-card-side button{padding-left:10px;padding-right:10px}
.st-operations .flow-actions .flow-contact,.st-operations .flow-contact{
  display:inline-flex;align-items:center;min-height:var(--ctl-h,36px);padding:7px 0;line-height:20px;
}

/* ② 次级入口：返回链接与流程弹窗关闭按钮 = 34px */
.st-operations .back-link{min-height:var(--ctl-h-sm,34px);padding:7px 0;line-height:20px;font-size:var(--st-font-body,14px)}
.st-operations .flow-popup header button{width:34px;height:34px;min-height:34px;padding:0}

/* ③ 单行输入/选择定档 36px（textarea 保持多行，不在此列） */
.st-operations .flow-popup :is(input,select:not(.st-select-native),.st-select-trigger),
.quote-inquiry-editor .quote-settings-content :is(input,select,.st-select-trigger){
  height:var(--ctl-h,36px);min-height:var(--ctl-h,36px);padding:0 10px;
}
.quote-inquiry-editor .quote-settings-content textarea{min-height:60px;padding:8px 10px}

/* ④ 报价单：批量管理条（原 29px / 10.5px，低于标签 11px 下限） */
body .commerce-dialog.st-operations[data-view="报价单"] .inquiry-bulk-toolbar button{
  min-height:30px;padding:0 10px;font-size:var(--st-font-caption,12px);
}

/* ⑤ 报价单：行内迷你控件回到 30px 图标档（原单位选择 25、加减 26、删除 28） */
body .commerce-dialog.st-operations[data-view="报价单"] [data-quote-index] :is(.st-select-trigger,[data-quote-change],[data-quote-remove]){
  width:30px;min-width:30px;height:30px;min-height:30px;border-radius:8px;
}
body .commerce-dialog.st-operations[data-view="报价单"] [data-quote-index] .st-select-trigger.st-select-sm{
  width:auto;min-width:52px;font-size:var(--st-font-caption,12px);padding:0 8px;
}
body .commerce-dialog.st-operations[data-view="报价单"] [data-quote-index] [data-quote-quantity]{
  width:30px;height:30px;min-height:30px;padding:0;font-size:var(--st-font-caption,12px);
}

/* ══════════════════════════════════════════════════════════════════════════
   第九轮（2026-10-10）：4 处可见缺陷
  ① 询价进度条 2×2 → 一行：见文件中部 @media(max-width:480px) 的 .flow-journey 覆盖（已 2→4 列）。
  ② 订单地图 标签页 + 路线步骤条 居中并撑满：
     ②a .crm-sheet-tabs button 由 flex:0 0 auto 改 flex:1 1 0 + 内容居中（两项各半、文字居中）；
     ②b .crm-sheet .crm-route-steps 由 inline-flex/width:max-content/justify-self:start
        改为 grid repeat(3,1fr)/width:100%（三步各三分之一、内容居中）。
  ③ 报价单底栏按钮比底栏内容盒高 4px（按钮 44 塞进 48-4*2=40 的内容盒）⇒ 溢出下沿。
     根因在共用 cart dock：st-multilingual-layout.css 的 48px 高 + 4px 内边距 vs 44px 按钮。
     已在 st-multilingual-layout.css 就地改为「跟随内容盒」（min-height:0 + align-self:stretch），
     门店前台 catalog dock 与询价/报价底栏同源，一并修正。
  ④ r8 把行内 -/+ 加到 30px 后，72px 的 .stepper 容器装不下（30+30+输入框），
     数字输入框被 flex 挤到 10px ⇒ 「10」显示成「1(」。
     修法：容器 72 → 76px；-/+ 30 → 24px（≥WCAG 2.2 的 24px 硬线）；输入框拿到 26px 且 flex:none。
  ⚠️ 单位选择器与删除按钮仍保持 r8 的 30px 图标档，本轮不动（用户只报了数量控件）。
  ══════════════════════════════════════════════════════════════════════════ */
body .commerce-dialog.st-operations[data-view="报价单"] [data-quote-index] .stepper{width:76px}
body .commerce-dialog.st-operations[data-view="报价单"] [data-quote-index] [data-quote-change]{
  width:24px;min-width:24px;height:24px;min-height:0;padding:0;
}
body .commerce-dialog.st-operations[data-view="报价单"] [data-quote-index] [data-quote-quantity]{
  width:26px;min-width:26px;height:24px;min-height:0;flex:none;
}

/* ══════════════════════════════════════════════════════════════════════════
   第十轮（2026-10-10）：询价详情操作行 —— 主次分层（次级动作改圆形图标）
   判据 1（"四个按钮高度不一致"的实测结论）：
     四个按钮高度实测**完全一致 = 36px**（claim / edit_quote / flow-contact / close）。
     肉眼差异来自两点，都不是高度：
       a) 主按钮带投影（橙 0 4px 10px #f978001b / 蓝 0 3px 8px #0b208918），白底描边按钮没有；
          投影落在盒子下方 3~4px，截图里就成了"彩色按钮更高"。
       b) `.flow-contact` 命中同文件 :1329 的 `.st-operations .flow-actions .flow-contact{padding:7px 0}`
          (0,3,0)，压过 :242 的 `padding:7px 12px` (0,2,0) ⇒ 左右内边距为 0，盒宽 58 = 56 文字 + 2 边框，
          文字与边框焊死，看起来是另一种比例。
   判据 2（结构）：主行动保留文字按钮；次级动作（联系客户 / 关闭询价）收成 36×36 圆形图标，
     两者用不同色相区分（联系客户 青绿 #0f8f84 / 关闭询价 砖红 #c25a41），都弱于主行动。
   判据 3（两段式）：折叠 → 点击展开文字 → 再点击才执行。终态动作（关闭询价）必须先亮出文字再确认。
   判据 4（动效）：展开宽度用 `grid-template-columns:0fr→1fr`，不猜 max-width 魔数；
     同节奏过渡 gap / padding / 背景 / 颜色 / 阴影（260~280ms，统一 --curve）。
   ⚠️ 特异性：一律用 `body .flow-panel .flow-actions .flow-mini`(0,3,1) —— 同时压过
      `.st-operations .flow-actions button`(0,2,1)、`.st-operations .flow-actions .flow-contact`(0,3,0)、
      基础 `.flow-panel button`(0,1,1)，且不依赖源码顺序；也不依赖 `.st-operations` 是否存在（.flow-panel 恒在）。
   ⚠️ 门店前台（非工作台）的操作行不渲染 .flow-mini，仍是文字按钮，不受影响。
   ══════════════════════════════════════════════════════════════════════════ */
/* 折叠态几何：8(左) + 18(图标) + 8(右) + 2(边框) = 36 —— 与 min-width 相等，
   所以不靠 justify-content 补位；首版写 9px 时实测 38px（边框 2px 没算进去）。 */
body .flow-panel .flow-actions .flow-mini{
  --mini-tint:#e7f6f3;--mini-ink:#0b7d74;--mini-line:#cbe9e4;--mini-tint-hover:#d6efeb;--mini-line-hover:#a9dcd4;--mini-solid:#0f8f84;--mini-solid-hover:#0c8075;--mini-shadow:#0f8f8445;
  display:inline-flex;align-items:center;justify-content:flex-start;
  gap:0;width:auto;min-width:36px;height:36px;min-height:36px;
  padding:0 8px;border:1px solid var(--mini-line);border-radius:18px;
  background:var(--mini-tint);color:var(--mini-ink);
  font-size:var(--st-font-body,14px);font-weight:640;line-height:20px;
  white-space:nowrap;overflow:hidden;text-decoration:none;cursor:pointer;
  -webkit-tap-highlight-color:transparent;
  transition:background-color .26s var(--curve,cubic-bezier(.22,.8,.25,1)),color .26s var(--curve,cubic-bezier(.22,.8,.25,1)),border-color .26s var(--curve,cubic-bezier(.22,.8,.25,1)),box-shadow .26s var(--curve,cubic-bezier(.22,.8,.25,1)),gap .26s var(--curve,cubic-bezier(.22,.8,.25,1)),padding .26s var(--curve,cubic-bezier(.22,.8,.25,1)),transform .16s var(--curve,cubic-bezier(.22,.8,.25,1));
}
body .flow-panel .flow-actions .flow-mini[data-flow-action=close]{
  --mini-tint:#fdeee9;--mini-ink:#b0523a;--mini-line:#f6d8ce;--mini-tint-hover:#fbe0d7;--mini-line-hover:#efbcaa;--mini-solid:#c25a41;--mini-solid-hover:#b4523a;--mini-shadow:#c25a4145;
}
body .flow-panel .flow-actions .flow-mini .flow-mini-icon{
  display:grid;place-items:center;width:18px;height:18px;flex:none;
  transition:transform .3s var(--curve,cubic-bezier(.22,.8,.25,1));
}
body .flow-panel .flow-actions .flow-mini .flow-mini-icon svg{width:18px;height:18px;display:block}
body .flow-panel .flow-actions .flow-mini .flow-mini-label{
  display:grid;grid-template-columns:0fr;opacity:0;min-width:0;
  transition:grid-template-columns .28s var(--curve,cubic-bezier(.22,.8,.25,1)),opacity .22s linear;
}
body .flow-panel .flow-actions .flow-mini .flow-mini-label>span{
  min-width:0;overflow:hidden;white-space:nowrap;transform:translateX(-6px);
  transition:transform .28s var(--curve,cubic-bezier(.22,.8,.25,1));
}
body .flow-panel .flow-actions .flow-mini:hover{
  background:var(--mini-tint-hover);border-color:var(--mini-line-hover);box-shadow:0 4px 12px -6px var(--mini-shadow);
}
body .flow-panel .flow-actions .flow-mini:active{transform:scale(.94)}
body .flow-panel .flow-actions .flow-mini:focus-visible{outline:2px solid var(--mini-solid);outline-offset:2px}
body .flow-panel .flow-actions .flow-mini[aria-expanded=true]{
  gap:6px;padding:0 14px;background:var(--mini-solid);border-color:var(--mini-solid);color:#fff;
  box-shadow:0 10px 22px -10px var(--mini-shadow),inset 0 1px 0 #ffffff33;
}
body .flow-panel .flow-actions .flow-mini[aria-expanded=true]:hover{background:var(--mini-solid-hover);border-color:var(--mini-solid-hover)}
body .flow-panel .flow-actions .flow-mini[aria-expanded=true] .flow-mini-icon{transform:scale(1.06)}
body .flow-panel .flow-actions .flow-mini[aria-expanded=true] .flow-mini-label{grid-template-columns:1fr;opacity:1}
body .flow-panel .flow-actions .flow-mini[aria-expanded=true] .flow-mini-label>span{transform:none}
@media (prefers-reduced-motion:reduce){
  body .flow-panel .flow-actions .flow-mini,
  body .flow-panel .flow-actions .flow-mini .flow-mini-icon,
  body .flow-panel .flow-actions .flow-mini .flow-mini-label,
  body .flow-panel .flow-actions .flow-mini .flow-mini-label>span{transition-duration:.001s}
}

/* ══════════════════════════════════════════════════════════════════════════════
   第十一轮（2026-10-10）：客户管理 对齐订单地图的「满屏地图铺底 + 可抽拉面板」

   骨架（.crm-map-shell / .crm-map-stage / .crm-sheet / .crm-sheet-head /
   .crm-sheet-tabs / .crm-sheet-body / 三档高度 / 拖拽吸附 / 筛选收进标题行）
   早在第三轮就已落地，而且作用域是 .crm-map-shell 这一层通用前缀 ——
   客户管理 直接套用即可，本轮只补它自己的三处差异：

     1) 标题行多一颗「新增客户」主按钮 ⇒ 栅格由 3 格变 4 格。
        用 :has(> .crm-sheet-primary) 自限作用域：订单地图没有这颗按钮，
        而两者的标题行共用同一条 .crm-sheet-head 规则 —— 不做自限就会把
        订单地图的「筛选 / 面板高度」也推走一格。
     2) 面板里的客户网格与筛选表单沿用订单地图那一套（单列 + 两列 + 末行整行操作），
        并让「更多筛选」独占一整行（它展开后是三个字段，挤在半列里会截断）。
     3) 客户端内联编辑器 [data-customer-editor] 从「列表下方一块」改成
        「盖在面板之上的底栏浮层」—— 新布局是全屏壳，流内已经没有任何下方空间。
        只在 .crm-map-shell 里生效：客户详情页的同名节点保持原状。
   ══════════════════════════════════════════════════════════════════════════════ */

/* 面板里的客户卡片走单列（与订单卡一致），不再用自适应多列 */
.crm-page .crm-map-shell .crm-sheet .crm-grid{grid-template-columns:1fr;gap:8px}
.crm-page .crm-map-shell .crm-sheet-title p:empty{display:none}

/* 标题行 4 格：标题+统计 / 新增客户 / 筛选 / 面板高度 */
.crm-page .crm-map-shell .crm-sheet-head:has(>.crm-sheet-primary){grid-template-columns:minmax(0,1fr) auto auto auto}
.crm-page .crm-map-shell .crm-sheet-primary{
  display:inline-flex;align-items:center;justify-content:center;
  height:var(--ctl-icon);min-height:0;padding:0 11px;
  border:0;border-radius:8px;background:var(--ops-blue);color:#fff;
  font-size:12px;font-weight:700;line-height:1;white-space:nowrap;cursor:pointer;
  transition:background .18s cubic-bezier(.22,.8,.25,1),transform .18s cubic-bezier(.22,.8,.25,1);
}
.crm-page .crm-map-shell .crm-sheet-primary:hover{background:#0a2aa0}
.crm-page .crm-map-shell .crm-sheet-primary:active{transform:translateY(1px)}
.crm-page .crm-map-shell .crm-sheet-primary:focus-visible{outline:2px solid var(--ops-blue);outline-offset:2px}

/* 客户筛选表单进面板：两列 +「更多筛选」整行 + 末行操作整行右对齐 */

/* 客户端内联编辑器：盖住面板的底栏浮层（一条主表面，内层不再叠一张白卡） */
.crm-map-shell>[data-customer-editor]:not(:empty){
  position:absolute;left:0;right:0;bottom:0;z-index:8;max-height:100%;overflow:auto;overscroll-behavior:contain;
  padding:14px 14px calc(16px + env(safe-area-inset-bottom));
  background:#fff;border-radius:18px 18px 0 0;box-shadow:0 -16px 44px #1021482e;
}
.crm-map-shell>[data-customer-editor] .crm-form{border:0;border-radius:0;box-shadow:none;padding:0;background:transparent}
.crm-map-shell>[data-customer-editor] .crm-form>h3{margin:0 0 10px}
.crm-map-shell>[data-customer-editor] .crm-actions{margin-top:12px}

/* 桌面端标题行只剩 3 格（面板高度按钮整组隐藏） */
@media(min-width:900px){
  .crm-page .crm-map-shell .crm-sheet-head:has(>.crm-sheet-primary){grid-template-columns:minmax(0,1fr) auto auto}
}

/* ════════════════════════════════════════════════════════════════════
   第十三轮（2026-10-10）：筛选改弹窗 / 路线页脚改共用浮动栏 / 载入动画
   ════════════════════════════════════════════════════════════════════ */

/* ── 筛选弹窗（复用 .crm-overlay）。表单外观沿用既有 .crm-form，这里只补动作行。 ── */
.crm-overlay .crm-filter-form{gap:8px}
.crm-overlay .crm-filter-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:2px}
.crm-overlay .crm-filter-actions>.button{min-width:96px;margin-left:auto}
.crm-overlay .crm-filter-actions>:is([data-customer-reset],[data-order-reset]){margin-right:auto}

/* ── 路线页脚 → 浮动栏：与询价单底栏同一组件几何（.st-cart-dock 的内件规则在 multilingual 里，
      这里只补「容器定位 + 单行主文案」。底/左右与底部导航同位（两端各 12px）。
      ⚠️ 高度**必须写死 48px**，不能用 --st-cart-dock-min-height：该令牌在 shape-system 的
         @media(max-width:720px) 里会降到 44px，而询价单底栏被 multilingual 用
         `height:48px!important` 钉死 —— 于是「同一个组件」在手机端会一根 44 一根 48。
         用户要的是「和询价单的一致」，所以按询价单的实际像素钉。 ── */
html body .crm-route-dock.st-cart-dock{
  position:fixed!important;left:12px!important;right:12px!important;width:auto!important;max-width:510px!important;
  margin:0 auto!important;bottom:24px!important;z-index:6!important;
  display:grid!important;grid-template-columns:minmax(0,1fr) auto!important;align-items:center!important;gap:10px!important;
  box-sizing:border-box!important;height:48px!important;min-height:48px!important;
  padding:5px 6px 5px 14px!important;border:1px solid #1b3797!important;border-radius:12px!important;
  background:linear-gradient(110deg,#071744,#052675)!important;color:#fff!important;
  box-shadow:0 7px 20px rgba(8,31,128,.18),inset 0 1px 0 rgba(255,255,255,.14)!important;
}
html body .crm-route-dock .st-dock-copy{display:block;flex:1;min-width:0;margin:0;padding:0}
html body .crm-route-dock .st-dock-copy strong{display:block;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0;color:#fff;font-size:14px;font-weight:700;line-height:1.3;font-variant-numeric:tabular-nums}
@media(max-width:720px){
  html body .crm-route-dock.st-cart-dock{bottom:calc(10px + env(safe-area-inset-bottom,0px))!important;padding:4px 6px 4px 14px!important;border-radius:9px!important}
}

/* ── 载入动画：转圈 + 微光骨架行（骨架沿用同文件的 @keyframes crm-skeleton）。
      给「要读数据才能进入」的页面用，替代静态「正在读取…」文案（慢网络下与卡住无法区分）。 ── */
.st-loading{display:grid;place-content:center;justify-items:center;min-height:clamp(180px,40dvh,360px);width:100%;padding:20px 2px;box-sizing:border-box}
.goods-grid>.st-loading{grid-column:1/-1}
.commerce-page>.dialog-body:has(>.st-loading:only-child){min-height:calc(100dvh - 100px);display:grid;place-items:center}
.st-loading>i{position:relative;display:block;width:var(--st-luma-size,52px);height:var(--st-luma-size,52px);border:0;border-radius:0;animation:none}
.st-loading>i::before,.st-loading>i::after{content:"";position:absolute;inset:0 53.85% 53.85% 0;border-radius:50px;box-shadow:inset 0 0 0 3px #0b2d87;opacity:var(--st-luma-opacity,.4);animation:st-luma 2.5s infinite}
.st-loading>i::after{box-shadow:inset 0 0 0 3px #db6500;animation-delay:-1.25s}
@keyframes st-luma{
  0%,100%{top:0;right:53.85%;bottom:53.85%;left:0}
  12.5%{top:0;right:53.85%;bottom:0;left:0}
  25%{top:53.85%;right:53.85%;bottom:0;left:0}
  37.5%{top:53.85%;right:0;bottom:0;left:0}
  50%{top:53.85%;right:0;bottom:0;left:53.85%}
  62.5%{top:0;right:0;bottom:0;left:53.85%}
  75%{top:0;right:0;bottom:53.85%;left:53.85%}
  87.5%{top:0;right:0;bottom:53.85%;left:0}
}
@media(prefers-reduced-motion:reduce){.st-loading>i::before,.st-loading>i::after{animation:none}.st-loading>i::after{top:53.85%;right:0;bottom:0;left:53.85%}}


/* ══════════════════════════════════════════════════════════════════════════════
   第十四轮
   ──────────────────────────────────────────────────────────────────────────────
   ① 客户卡压缩高度：不删信息、不动关键字号（标题 16px / 正文 14px 保持），
      只收「容器 padding + 行间隙 + 头像块 + 动作行高度」这四类可压缩量。
      meta 行 14px → 12px 是**对齐订单卡**（.st-operations .crm-order-meta 本就是 12px），
      不是把正文压小 —— 全站口径：正文 14px / 辅助 12px。
      实测 390px：172px → 129px（−25%），两枚按钮仍同宽同位（r12/r13 的位序契约不变）。
   ② 全局返回按钮：把文字字符「←」换成 sprite 里的同一套 icon 组件（#arrowBack = #arrow 的水平镜像），
      容器沿用同一行里兄弟控件（.st-search-open）的胶囊规格 —— 一行三枚控件视觉语言统一。
   ══════════════════════════════════════════════════════════════════════════════ */

/* ① 客户卡：容器与节奏 */
.st-operations .crm-customer-card,
.crm-page .crm-map-shell .crm-sheet .crm-card.crm-customer-card { padding: 10px; gap: 3px; }
.st-operations .crm-customer-card header { gap: 7px; }
.st-operations .crm-customer-monogram { width: 28px; height: 28px; border-radius: 8px; font-size: 13px; }
/* meta 两行：与订单卡同档 12px / lh 1.5（订单卡 .crm-order-meta{font-size:12px;line-height:1.5}） */
.st-operations .crm-customer-card > p { font-size: 12px; line-height: 1.5; }
/* 动作行：不再自带 margin-top（走卡片 grid 的 3px 间隙），按钮收到工作台 34px 档 */
.st-operations .crm-customer-card .crm-customer-actions { margin-top: 0; gap: 8px; }
.st-operations .crm-customer-card .crm-customer-actions > button {
  min-height: 34px; height: 34px; padding: 0 12px; line-height: 1.35;
}

/* ② 全局返回按钮：与同一行兄弟控件（搜索）同一胶囊规格。
   ⚠️ 必须带 `body` 前缀拿到 (0,4,1) —— 页面头部早有两条同特异度 (0,4,1) 的规则在抢这个按钮：
      st-crm-v1.css:375 `body .commerce-dialog:has(.crm-page)>.dialog-head>[data-close]`（把底色刷成 transparent）
      st-operations-v1.css:23 `body .commerce-dialog.st-operations>.dialog-head [data-close]`（把宽高钉在 36px）
      写成 (0,4,0) 会被它们逐条压掉：只剩 border-radius 生效、宽高与底色仍是旧的（实测 36×36 透明）。 */
body .commerce-dialog .dialog-head > .round-control.st-back-control {
  width: 32px; height: 32px; min-height: 32px; padding: 0;
  border: 1px solid rgba(255, 255, 255, .9);
  border-radius: 999px;
  background: rgba(255, 255, 255, .66);
  color: var(--blue, #081f80);
  box-shadow: 0 5px 18px rgba(13, 36, 96, .1), inset 0 1px 0 #fff;
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  font-size: 0;
  transition: transform .22s ease, background .22s ease;
}
body .commerce-dialog>.dialog-head>.dialog-head-actions>[data-close],
body .crm-overlay>.crm-overlay-head>[data-overlay-close],
body .flow-popup>header>[data-flow-close]{width:36px;height:36px;min-width:36px;min-height:36px;padding:0;flex:none;display:grid;place-items:center;border:1px solid #e3e9f3;border-radius:50%;background:#fff;color:var(--blue,#081f80);font-size:22px;line-height:1}
body .commerce-dialog[data-view="工程清单"][open]{animation:none}
body .commerce-dialog .dialog-head > .round-control.st-back-control:hover { background: rgba(255, 255, 255, .92); transform: translateY(-1px); }
body .commerce-dialog .dialog-head > .round-control.st-back-control:active { transform: scale(.96); }
body .commerce-dialog .dialog-head > .round-control.st-back-control svg {
  width: 18px; height: 18px; display: block;
  fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
}
/* 尺寸跟着兄弟控件走：.st-search-open 在 ≤720 是 32px、>720 是 44px（实测 360/390/480/560/720→32，900/1280→44）。
   这里复刻同一组断点，免得两头一大一小。 */
@media (min-width: 721px) {
  body .commerce-dialog .dialog-head > .round-control.st-back-control { width: 44px; height: 44px; min-height: 44px; }
  body .commerce-dialog .dialog-head > .round-control.st-back-control svg { width: 20px; height: 20px; }
}
@media (prefers-reduced-motion: reduce) {
  body .commerce-dialog .dialog-head > .round-control.st-back-control,
  body .commerce-dialog .dialog-head > .round-control.st-back-control:hover { transition: none; transform: none; }
}


/* ══════════════════════════════════════════════════════════════════════════════
   第十五轮
   ──────────────────────────────────────────────────────────────────────────────
   ① 载入环：加一层透明度（--st-luma-opacity，默认 .4），不再是一块实心重色。
   ② 订单地图的订单卡：按图 1 上的箭头「把内容往下挪一行」，信息一条不删 ——
      状态徽章从标题行让位到次行（标题因此独占整行，长客户名不再被徽章挤成两行）；
      「N 项商品」计数从「业务员」那行下移，与商品清单同处一行。
   ③ 路线规划站点卡：原来只有一条 border-bottom，卡与卡分不开 ⇒ 卡片化。
      内容按用户口径**全保留**（客户名 + 订单号 + 到货时间 + 完整地址 + 操作），
      只重排：↑↓× 从卡下方移到卡片右侧，并收成 28px 圆形按钮；删除走二次确认。
   ④ 本次订单顺序：两个下拉并排（原 ≤480px 被压成一列）、下拉 44→32px、块内间距收紧。
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── ② 订单卡：徽章不再和标题抢同一行 ── */
.st-operations .crm-order-card .crm-order-headline{display:block}
/* 徽章成为 meta 行第一个元素：它前面不能再有 ::before 发丝点（规则在 .crm-order-meta>span+span） */
.st-operations .crm-order-card .crm-order-meta>.crm-status-pill{
  position:static;flex:none;width:auto;min-width:0;padding:2px 7px;font-size:11px;line-height:1.45;
}
/* 商品计数与清单同行：原来计数在 meta 行、清单在卡底，两头分居才是「箭头想说的」那件事 */
.st-operations .crm-order-card .crm-order-goods-line{
  display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;overflow:visible;
}
.st-operations .crm-order-card .crm-order-goods-line>.crm-order-goods{flex:none;color:var(--ops-muted)}
.st-operations .crm-order-card .crm-order-goods-line .crm-order-products-list{flex:1 1 auto;min-width:0}

/* ── ③ 路线站点卡：一张卡一个有边界的块（原来只有一条 border-bottom） ── */
.st-operations .crm-page [data-visit-order]{display:grid;gap:8px}
@media (min-width: 801px) {
  .st-operations .crm-page [data-visit-order]{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:12px}
}
.st-operations .crm-page .crm-visit-stop{
  display:grid;grid-template-columns:24px minmax(0,1fr) auto;gap:6px 10px;align-items:start;
  padding:10px 12px;border:1px solid var(--ops-line);border-radius:12px;background:#fff;
  box-shadow:0 1px 2px rgba(13, 36, 96, .05);
}
.st-operations .crm-page .crm-visit-stop>.crm-stop-number{grid-row:1;margin-top:1px}
.st-operations .crm-page .crm-visit-stop>.crm-stop-body{
  grid-column:2;display:grid;gap:2px;min-width:0;overflow-wrap:anywhere;
}
.st-operations .crm-page .crm-visit-stop .crm-stop-body>strong{line-height:1.35}
.st-operations .crm-page .crm-visit-stop .crm-stop-when{
  display:flex;align-items:flex-start;gap:6px;margin:2px 0 0;
  font-size:var(--st-font-body, 14px);font-weight:600;line-height:1.5;color:var(--ops-text);
}
.st-operations .crm-page .crm-visit-stop p.crm-stop-address{
  display:flex;align-items:flex-start;gap:6px;margin:2px 0 0;line-height:1.5;
}
.st-operations .crm-page .crm-visit-stop :is(.crm-stop-when,.crm-stop-address)>.crm-field-icon{margin-top:3px}
.st-operations .crm-page .crm-visit-stop .crm-stop-body>.crm-actions{margin-top:4px}
/* 控件移到右侧并收成小圆钮：原来在卡下方、44px 方块式按钮 */
.st-operations .crm-page .crm-visit-stop>.crm-order-controls{
  grid-column:3;grid-row:1;display:grid;gap:4px;justify-items:center;align-content:start;margin:0;
}
.st-operations .crm-page .crm-visit-stop>.crm-order-controls>.round-control{
  width:28px;height:28px;min-height:28px;padding:0;border-radius:50%;font-size:13px;line-height:1;
}
.st-operations .crm-page .crm-visit-stop>.crm-order-controls>.round-control:disabled{opacity:.35}

/* ── ④ 本次订单顺序：两个下拉并排 + 收紧（原来 ≤480px 会掉成一列，块高 144px） ── */
.st-operations .crm-page .crm-route-plan-heading{margin-bottom:6px}
.st-operations .crm-page .crm-route-plan-heading h3{font-size:14px}
.st-operations .crm-page .crm-route-plan-heading button{min-height:28px;padding:3px 8px;font-size:11px}
.st-operations .crm-page .crm-route-options{
  grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;align-items:end;
}
.st-operations .crm-page .crm-route-options label{gap:2px;line-height:1.35}
.st-operations .crm-page .crm-route-options .st-select-trigger{
  min-height:32px;height:32px;padding:5px 9px;font-size:12px;border-radius:8px;
}
.st-operations .crm-page .crm-route-options .st-select-chevron{width:13px;height:13px}
.st-operations .crm-page .crm-route-hint{line-height:1.45;margin:4px 0}


/* 第十五轮 · 补：站点卡时间行拆节点后的样式（<em> 只在「未定时间」时出现） */
.st-operations .crm-page .crm-visit-stop .crm-stop-when>strong{font-weight:700;color:var(--ops-text)}
.st-operations .crm-page .crm-visit-stop .crm-stop-when>em{font-style:normal;font-weight:500;color:var(--ops-muted)}

/* ══════════════════════════════════════════════════════════════════════════════
   第十六轮（2026-10-11）
   ──────────────────────────────────────────────────────────────────────────────
   ① 站点卡：时间行 / 地址行 的图标移到「序号徽章」那条竖轨（卡片最左 12px），
      两行文字随之左移到与「客户名」同一条左边界（12 + 24 + 10 = 46px）。
      做法：.crm-stop-body 用 display:contents 把子元素提升到卡片的网格里统一排版，
      不再用负边距 / 绝对定位去凑位置（结构级修复，不缩关键文字、不减信息）。
   ──────────────────────────────────────────────────────────────────────────── */
.st-operations .crm-page .crm-visit-stop{row-gap:2px}
.st-operations .crm-page .crm-visit-stop>.crm-stop-number{grid-column:1;grid-row:1;margin-top:1px}
.st-operations .crm-page .crm-visit-stop>.crm-stop-body{display:contents}
.st-operations .crm-page .crm-visit-stop .crm-stop-body>strong{grid-column:2;grid-row:1;min-width:0;line-height:1.35}
.st-operations .crm-page .crm-visit-stop .crm-stop-body>.crm-stop-ref{grid-column:2;grid-row:2;min-width:0}
/* ⚠️ 只能跨到第 2 列（1/3）。写成 1/-1 会横跨第 3 列（↑↓× 控件列），
   长地址换行后正文会压在圆钮上（第十七轮实测重叠 28px）。 */
.st-operations .crm-page .crm-visit-stop .crm-stop-body>.crm-stop-when{grid-column:1/3;grid-row:3}
.st-operations .crm-page .crm-visit-stop .crm-stop-body>.crm-stop-address{grid-column:1/3;grid-row:4}
.st-operations .crm-page .crm-visit-stop .crm-stop-body>.crm-actions{grid-column:2;grid-row:5;margin-top:4px}
.st-operations .crm-page .crm-visit-stop .crm-stop-body>:is(.crm-stop-when,.crm-stop-address){
  display:grid;grid-template-columns:24px minmax(0,1fr);column-gap:10px;align-items:start;
}
.st-operations .crm-page .crm-visit-stop .crm-stop-body>:is(.crm-stop-when,.crm-stop-address)>.crm-field-icon{
  grid-column:1;justify-self:center;margin:3px 0 0;
}
.st-operations .crm-page .crm-visit-stop .crm-stop-body .crm-stop-text{
  grid-column:2;min-width:0;overflow-wrap:anywhere;
}
/* 时间行里「当天时间灵活 / 未定时间」原先继承 16px（跟客户名同号），统一回 14px，
   只留加粗作为强调。⚠️ 这两条取代 r15 的 .crm-stop-when>strong / >em：文本外面多了一层
   .crm-stop-text，直系（>）关系断了（r15 那两条从此不再命中，保留不删）。 */
.st-operations .crm-page .crm-visit-stop .crm-stop-body .crm-stop-text>strong{font-size:inherit;font-weight:700;color:var(--ops-text);line-height:1.5}
.st-operations .crm-page .crm-visit-stop .crm-stop-body .crm-stop-text>em{font-size:inherit;font-style:normal;font-weight:500;color:var(--ops-muted)}

/* ──────────────────────────────────────────────────────────────────────────────
   ② 本次订单顺序：页脚「计算订单路线」从普通橙色按钮改成与「规划路线」同一个
      蓝 bar 浮动栏（.crm-route-dock.st-cart-dock，几何与询价单底栏一致）。
      浮动栏是 position:fixed，不占流内空间 ⇒ 面板必须自己留底部空档，否则最后一张
      站点卡 / 报错文案会被压在栏下面（栏底 24px + 栏高 48px = 占底部 72px）。
   ──────────────────────────────────────────────────────────────────────────── */
.st-operations .crm-page .crm-visit-plan[data-route-panel="plan"]{padding-bottom:76px}

/* 第十六轮 · 补：控件列跨满整列所有行。
   ⚠️ r15 的 grid-row:1 会让「3 枚 28px 圆钮 + 2×4px 间隙 = 92px」把网格第 1 行撑高，
      第 2 行的「单号」就被顶到控件下方（实测 客户名 y=718 / 单号 y=812，卡高 205 → 272）。
      站点卡模板固定 5 行（客户名 → 单号 → 时间 → 地址 → 操作），所以明确跨 1/6。 */
.st-operations .crm-page .crm-visit-stop>.crm-order-controls{grid-row:1/6}

/* Customer details and account forms share the existing type and control tiers. */
.st-operations>.dialog-body>.crm-page>.crm-customer-detail{display:grid;gap:16px;max-width:960px;width:100%;margin:0 auto}
.st-operations .crm-customer-detail .crm-customer-summary{padding:14px;gap:12px;background:var(--ops-soft);border:1px solid var(--ops-line);box-shadow:none}
.st-operations .crm-customer-detail .crm-customer-summary>header{align-items:flex-start}
.st-operations .crm-customer-detail .crm-customer-summary>header h2{font-size:22px;line-height:1.4;flex:1 1 220px}
.st-operations .crm-customer-detail .crm-customer-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 16px;margin:0}
.st-operations .crm-customer-detail .crm-customer-facts>div{display:grid;gap:3px}
.st-operations .crm-customer-detail dt{font-size:12px;color:var(--ops-muted)}
.st-operations .crm-customer-detail dd{margin:0;font-size:14px;overflow-wrap:anywhere}
.st-operations .crm-customer-detail .crm-record-group{gap:10px;padding:0 0 14px}
.st-operations .crm-customer-detail .crm-record-group>.crm-grid{gap:10px}
.st-operations .crm-customer-detail .crm-card{padding:12px;background:#fff;background-image:none;box-shadow:none;border:1px solid var(--ops-line);border-radius:12px}
.st-operations .crm-customer-detail .crm-card :is(h3,p){margin:0}
.st-operations .crm-customer-detail .crm-card{display:grid;gap:6px;align-content:start}
.st-operations .crm-customer-detail .crm-card header{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.st-operations .crm-customer-detail :is(.crm-customer-summary>header,.crm-record-group>header,.crm-card) button{min-height:36px;padding:7px 12px;line-height:20px;border-radius:8px;font-size:14px}
.st-operations .crm-customer-detail .crm-detail-address-actions{display:flex;justify-content:space-between;align-items:center;gap:8px;padding-top:6px}
.st-operations .crm-customer-detail .crm-followup{padding:10px 0;border-bottom:1px solid var(--ops-line)}
.st-operations .crm-customer-detail .crm-followup:last-child{border:0}
.st-operations .crm-customer-detail .crm-followup p{margin:0 0 4px;font-size:14px}
.st-operations .crm-customer-detail .crm-business-history{padding:10px 12px;background:#fff;border-radius:12px}
.st-operations .crm-customer-detail .crm-history-records{display:grid;gap:10px;margin-top:12px}
.crm-overlay .crm-location-view{display:grid;gap:10px}
.crm-overlay .crm-location-view :is(h3,p){margin:0}
.crm-overlay .crm-location-view .crm-map{height:320px;min-height:240px;border-radius:12px}
.crm-overlay .crm-address-editor .crm-location-panel{padding:0;background:transparent;border:0}
.crm-overlay .crm-edit-form label:not(.crm-check){display:grid;gap:6px;font-size:12px;color:var(--ops-muted)}
.crm-overlay .crm-edit-form :is(input,textarea,select){width:100%;border:1px solid #dce3f1;border-radius:8px;color:var(--ops-text);background:#fff;font:inherit}
.crm-overlay .crm-edit-form input:not([type=checkbox]),.crm-overlay .crm-edit-form select{height:36px;min-height:36px;padding:0 10px;font-size:14px}
.crm-overlay .crm-edit-form select.st-select-native{width:1px;height:1px;min-height:0;padding:0;border:0}
.crm-overlay .crm-edit-form textarea{min-height:80px;padding:8px 10px;font-size:14px;resize:vertical}
.crm-overlay .crm-edit-form :is(button,.st-select-trigger){min-height:36px;line-height:20px;padding:7px 12px;border-radius:8px}
.crm-overlay .crm-edit-form .crm-details{padding:10px 0;border:0;border-top:1px solid var(--ops-line);background:transparent;border-radius:0}
.crm-overlay .crm-location-view~.crm-card{padding:12px 0;border:0;border-top:1px solid var(--ops-line);background:transparent;box-shadow:none}

/* 共用地点编辑组件：地图与地址保持紧凑，完整联系人仍可展开。 */
.crm-overlay .crm-edit-form:is(.crm-address-editor,.crm-order-address-form){gap:10px}
.crm-overlay .crm-edit-form .crm-location-panel{gap:6px;margin:0}
.crm-overlay .crm-edit-form .crm-location-panel .crm-map-controls{margin:0;gap:8px}
.crm-overlay .crm-edit-form .crm-location-panel .crm-muted{margin:0;line-height:1.5}
.crm-overlay .crm-edit-form .crm-location-panel gmp-place-autocomplete{margin:0}
.crm-overlay .crm-edit-form .crm-location-panel .crm-map{height:clamp(180px,30dvh,240px);min-height:180px;border-radius:10px}
.crm-overlay .crm-edit-form:is(.crm-address-editor,.crm-order-address-form) textarea{height:64px;min-height:56px;padding:7px 10px}
.crm-overlay .crm-edit-form .crm-details.crm-address-contact{margin:0;padding:6px 0}
.crm-overlay .crm-edit-form:is(.crm-address-editor,.crm-order-address-form) .crm-edit-actions{margin-top:0;padding-top:8px;gap:8px}
body .commerce-dialog.page-profile>.dialog-body{box-sizing:border-box;width:100%;padding:20px 20px 40px}
body .commerce-dialog.page-profile>.dialog-head{display:grid;grid-template-columns:32px minmax(0,1fr) auto;gap:8px;align-items:center}
body .commerce-dialog.page-profile>.dialog-head>.st-page-heading-copy{position:static;transform:none;grid-column:2;grid-row:1;justify-self:start;text-align:left;min-width:0;margin:0}
body .commerce-dialog.page-profile>.dialog-head>[data-close]{grid-column:1;grid-row:1}
body .commerce-dialog.page-profile>.dialog-head>.dialog-head-actions{grid-column:3;grid-row:1;position:static;transform:none;justify-self:end}
@media(min-width:721px){body .commerce-dialog.page-profile>.dialog-head{grid-template-columns:44px minmax(0,1fr) auto}}
body .commerce-dialog.page-profile .profile-layout{max-width:680px;margin:0 auto;display:grid;gap:16px}
body .commerce-dialog.page-profile .profile-intro h2{margin:0 0 8px;font-size:22px;line-height:1.4;color:var(--blue)}
body .commerce-dialog.page-profile .profile-intro p{margin:0;font-size:14px;color:var(--muted);line-height:1.6}
body .commerce-dialog.page-profile .profile-layout .checkout-form{padding:0;display:grid;gap:16px;border:0;border-radius:0;background:transparent;box-shadow:none}
body .commerce-dialog.page-profile .profile-layout .checkout-form>label{margin:0}
body .commerce-dialog.page-profile .profile-layout .checkout-actions{margin:0;display:flex;justify-content:center}
body .commerce-dialog.page-profile .profile-layout .checkout-actions button{width:min(260px,100%);flex:none}
body .commerce-dialog.page-profile .profile-layout .is-locked{background:var(--ops-soft,#f5f7fb);color:var(--muted);box-shadow:none}

/* 我的页面：相邻内容区采用一致的 12px 下边距。 */
body .commerce-dialog.page-account .account-content{margin-bottom:12px}
body .commerce-dialog.page-account .account-links{margin-bottom:12px}
body .commerce-dialog.page-account .account-explainer{margin-bottom:12px}
/* 联系与配送：地图弹窗入口优先，时间与备注各保留一处。 */
body .commerce-dialog[data-view="联系与配送"] .checkout-layout{max-width:680px;margin:0 auto;grid-template-columns:minmax(0,1fr);gap:0}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout{gap:14px;padding:0;margin:16px 0 20px;min-width:0}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout h3{margin:0 0 10px;font-size:16px}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout .crm-muted{margin:8px 0 0;font-size:12px;line-height:1.6}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout .crm-checkout-map-entry{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:48px;padding:12px 16px;border:1px solid #081f80;border-radius:12px;background:var(--blue,#081f80);color:#fff;font-size:14px;font-weight:700}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout .crm-window{padding:0;border:0;background:transparent;gap:12px}
body .commerce-dialog[data-view="联系与配送"] .crm-window>.crm-grid:first-child{grid-template-columns:minmax(0,1fr)}
body .commerce-dialog[data-view="联系与配送"] .crm-window .crm-flexible-group{display:grid;gap:0}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout .crm-flexible-group>.crm-muted{margin:0}
body .commerce-dialog[data-view="联系与配送"] .crm-window label.crm-check{display:flex;align-items:center;justify-content:flex-start;gap:8px;min-height:36px}
body .commerce-dialog[data-view="联系与配送"] .crm-window label.crm-check input[type=checkbox]{appearance:auto;flex:0 0 18px;width:18px;height:18px;min-width:18px;min-height:18px;margin:0;padding:0;box-shadow:none;accent-color:var(--blue,#081f80)}
body .commerce-dialog[data-view="联系与配送"] .crm-window label.crm-check span{white-space:normal;overflow-wrap:anywhere;line-height:1.5}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout-time{padding-top:14px;border-top:1px solid #e3e9f3}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout .address-field{display:none}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout-confirm-note{margin:12px 0;font-size:12px;line-height:1.6;color:var(--muted)}
body .commerce-dialog[data-view="联系与配送"] .checkout-form>[hidden]{display:none!important}
body .commerce-dialog[data-view="联系与配送"] .crm-checkout [hidden]{display:none!important}
@media(max-width:720px){body .commerce-dialog[data-view="联系与配送"] .dialog-body{padding:20px}}
.st-home-hero-copy .st-home-hero-eyebrow{display:flex}
.st-chapter-heading .eyebrow{display:flex}
@media(max-width:600px){.st-operations .crm-customer-detail .crm-customer-summary>header h2{flex-basis:100%}}
@media(min-width:721px){body .commerce-dialog.st-operations>.dialog-head.st-page-header{grid-template-columns:44px minmax(0,1fr) auto}}

.crm-overlay .crm-saved-routes{display:grid;gap:12px}
.crm-overlay .crm-saved-route{display:grid;gap:6px;padding:0 0 12px;border-bottom:1px solid var(--ops-line)}
.crm-overlay .crm-saved-route:last-child{border:0;padding-bottom:0}
.crm-overlay .crm-saved-route :is(h3,p){margin:0}
.crm-overlay .crm-saved-route h3{font-size:16px}
.crm-overlay .crm-saved-route .crm-edit-actions{margin-top:6px}
.crm-page .crm-saved-summary{display:grid;gap:6px}
.crm-page .crm-saved-summary :is(h3,p){margin:0}
.crm-page .crm-saved-stop-list{display:grid;gap:10px;margin:14px 0 0;padding-left:24px}
.crm-page .crm-saved-stop-list p{margin:4px 0 0;font-size:13px;color:var(--muted)}

/* New customer location reuses the shared address dialog in draft mode. */
.crm-overlay .crm-customer-location{display:grid;gap:8px}
.crm-overlay .crm-customer-location h3{margin:0;font-size:14px}
.crm-overlay .crm-customer-location h3 small{font-size:12px;font-weight:400;color:var(--ops-muted)}
.crm-overlay .crm-customer-location>[data-customer-location]{width:100%;background:var(--blue,#081f80);border-color:var(--blue,#081f80);color:#fff}
.crm-overlay .crm-customer-location>.crm-muted{margin:0;overflow-wrap:anywhere}

/* Saved plans belong to selecting stops; saving belongs to the route result. */
.crm-page .crm-route-selection>.crm-section-heading{align-items:center;gap:8px}
.crm-route-selection-title{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;min-width:0}
.crm-route-selection-title h3{margin:0}
.crm-page .crm-route-selection .crm-route-saved-entry{flex-shrink:0;min-height:32px;margin:0;padding:4px 0;border:0;border-radius:0;background:transparent;box-shadow:none;color:var(--ops-blue,#081f80);font-size:12px;font-weight:600;white-space:nowrap}
.crm-page .crm-route-selection .crm-route-saved-entry:hover{text-decoration:underline}
.crm-route-save-status:empty{display:none}

.crm-receivable-totals{display:grid;gap:6px}.crm-receivable-totals>div{display:flex;justify-content:space-between;gap:8px}.crm-receivable-cny{margin:8px 0;font-size:14px}.crm-receivables>.crm-muted{margin:4px 0}.crm-receivable-list{display:grid;gap:8px;margin-top:10px}.crm-receivable-list article{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px;border:1px solid var(--line,#dfe5f1);border-radius:10px}.crm-receivable-list article>div{flex:1;min-width:120px;overflow-wrap:anywhere}.crm-receivable-list small{display:block;color:var(--muted);font-size:12px}

/* Customer overview: flat information rows and whole-document navigation. */
body dialog .dialog-body>.crm-page>.crm-customer-detail.crm-customer-overview{display:grid;gap:20px;max-width:760px}
body .crm-customer-detail.crm-customer-overview .crm-customer-summary{padding:0 0 14px;gap:6px;border:0;border-bottom:1px solid var(--ops-line,#e5eaf3);border-radius:0;background:transparent;box-shadow:none}
body .crm-customer-overview .crm-customer-summary>header{display:flex;align-items:center;flex-wrap:nowrap;gap:12px}
body .crm-customer-detail.crm-customer-overview .crm-customer-summary>header h2{min-width:0;flex:1;word-break:break-word;font-size:20px;line-height:1.4}
body .crm-customer-overview .crm-customer-summary .crm-actions{flex:none}
body .crm-customer-overview .crm-customer-summary button{padding:4px 0;min-height:36px;border:0;background:transparent;font-size:13px;box-shadow:none}
body .crm-customer-overview .crm-customer-company{margin:0;font-size:13px;color:var(--ops-muted,#61718b);line-height:1.5;overflow-wrap:anywhere}
body .crm-customer-overview .crm-customer-phone{font-size:13px;justify-self:start}
body .crm-customer-overview .crm-customer-more{font-size:12px;color:var(--ops-muted);padding-top:4px}
body .crm-customer-overview .crm-customer-more summary{cursor:pointer}
body .crm-customer-overview .crm-customer-more dl{margin:10px 0 0}
body .crm-customer-detail.crm-customer-overview .crm-receivables{border:0;padding:0;gap:6px}
body .crm-customer-overview .crm-receivables header{display:flex;align-items:center;justify-content:space-between}
body .crm-customer-overview .crm-receivables h3{font-size:16px;margin:0}
body .crm-customer-overview .crm-receivable-totals{display:grid;gap:0}
body .crm-customer-overview .crm-currency-ledger{border-bottom:1px solid var(--ops-line,#e5eaf3)}
body .crm-customer-overview .crm-currency-ledger>summary{display:flex;align-items:center;gap:8px;min-height:44px;padding:8px 0;cursor:pointer;list-style:none;font-size:14px}
body .crm-customer-overview .crm-currency-ledger>summary::-webkit-details-marker{display:none}
body .crm-customer-overview .crm-currency-ledger>summary::before{content:'▸';color:var(--ops-muted);width:12px;flex:none}
body .crm-customer-overview .crm-currency-ledger[open]>summary::before{content:'▾'}
body .crm-customer-overview .crm-currency-ledger>summary small{color:var(--ops-muted);font-size:11px}
body .crm-customer-overview .crm-currency-ledger>summary strong{margin-left:auto;font-size:15px;font-variant-numeric:tabular-nums}
body .crm-customer-overview .crm-receivable-list{display:grid;gap:0;margin:0 0 8px 20px;border-left:2px solid #e5ebf6;padding-left:10px}
body .crm-customer-overview .crm-receivable-document{display:grid;grid-template-columns:minmax(0,1fr) auto 12px;align-items:center;gap:10px;width:100%;min-width:0;padding:10px 0;text-align:left;border:0;border-radius:0;background:transparent;box-shadow:none;color:inherit;font:inherit;cursor:pointer}
body .crm-customer-overview .crm-document-copy{display:grid;gap:3px;min-width:0}
body .crm-customer-overview .crm-document-copy b{font-size:12px;overflow-wrap:anywhere;font-weight:600}
body .crm-customer-overview .crm-document-copy small{font-size:12px;color:var(--ops-muted)}
body .crm-customer-overview .crm-receivable-document>strong{font-size:13px;font-variant-numeric:tabular-nums}
body .crm-customer-overview .crm-row-arrow{display:inline-flex;align-items:center;justify-content:center;width:12px;height:12px;font-size:16px;color:var(--ops-muted);text-align:right;line-height:1}
body .crm-customer-overview button:is(.crm-receivable-document,.crm-related-document):hover{color:var(--blue);background:#f6f8fc}
body .crm-customer-overview button:is(.crm-receivable-document,.crm-related-document):focus-visible{outline:2px solid var(--blue);outline-offset:2px;border-radius:4px}
body .crm-customer-overview .crm-receivable-conversion{padding:10px 0 0;background:transparent;border-radius:0;display:grid;gap:3px}
body .crm-customer-overview .crm-receivable-cny{display:flex;justify-content:space-between;flex-wrap:wrap;gap:4px 10px;margin:0;font-size:13px}
body .crm-customer-overview .crm-receivable-conversion>small{font-size:11px}
body .crm-customer-overview .crm-customer-information{border-top:1px solid var(--ops-line,#e5eaf3);padding-top:14px}
body .crm-customer-overview .crm-customer-information>h3{font-size:16px;margin:0 0 6px}
body .crm-customer-overview .crm-info-row{padding:0;border:0;border-bottom:1px solid var(--ops-line,#e5eaf3);border-radius:0;background:transparent;box-shadow:none}
body .crm-customer-overview .crm-info-summary{display:grid;grid-template-columns:minmax(0,auto) minmax(0,1fr) 12px;align-items:center;gap:12px;padding:12px 0;min-height:48px;cursor:pointer;list-style:none}
body .crm-customer-overview .crm-info-summary::-webkit-details-marker{display:none}
body .crm-customer-overview .crm-info-summary>b{font-size:13px;font-weight:600}
body .crm-customer-overview .crm-info-preview{font-size:12px;color:var(--ops-muted);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
body .crm-customer-overview .crm-info-preview>span{display:inline}
body .crm-customer-overview .crm-info-row[open]>.crm-info-summary>.crm-row-arrow{font-size:0;transform:none}
body .crm-customer-overview .crm-info-row[open]>.crm-info-summary>.crm-row-arrow::before{content:'⌄';font-size:16px}
body .crm-customer-overview .crm-info-content{padding:0 0 14px;display:grid;gap:10px;min-width:0}
body .crm-customer-overview .crm-info-actions{display:flex;justify-content:flex-end;gap:8px}
body .crm-customer-overview .crm-info-actions button,body .crm-customer-overview .crm-primary-contact button{font-size:12px;padding:6px 10px;min-height:36px}
body .crm-customer-overview .crm-info-content .crm-grid{gap:10px}
body .crm-customer-overview .crm-info-content .crm-grid:has(>.crm-muted){display:block}
body .crm-customer-overview .crm-info-content p.crm-muted{margin:0;font-size:12px}
body .crm-customer-overview .crm-primary-contact{display:grid;grid-template-columns:1fr auto;gap:6px;font-size:13px}
body .crm-customer-overview .crm-primary-contact>a,body .crm-customer-overview .crm-primary-contact>.crm-muted{grid-column:1}
body .crm-customer-overview .crm-primary-contact>button{grid-column:2;grid-row:1/3;align-self:center}
body .crm-customer-overview .crm-related-document{display:flex;align-items:center;gap:8px;text-align:left;border:0;background:transparent;border-radius:0;padding:10px 0;min-height:44px;font-size:13px;box-shadow:none}
body .crm-customer-overview .crm-related-document>span:first-child{flex:1;min-width:0;overflow-wrap:anywhere}
body .crm-customer-overview .crm-related-document>small{color:var(--ops-muted);font-size:12px}
@media(max-width:360px){body .crm-customer-overview .crm-info-summary{gap:8px}body .crm-customer-overview .crm-receivable-document{grid-template-columns:minmax(0,1fr) 12px}body .crm-customer-overview .crm-receivable-document>strong{grid-column:1;grid-row:2}body .crm-customer-overview .crm-receivable-document>.crm-row-arrow{grid-column:2;grid-row:1/3}}

/* Customer records: shared disclosure geometry and compact aligned rows. */
body .crm-customer-overview .crm-disclosure-arrow{width:16px;height:16px;display:block;transition:transform .18s ease;justify-self:end}
body .crm-customer-overview .crm-info-row[open]>.crm-info-summary>.crm-disclosure-arrow{transform:rotate(180deg)}
body .crm-customer-overview .crm-history-records{gap:0}
body .crm-customer-overview .crm-history-records>.crm-related-document{display:grid;grid-template-columns:minmax(0,1fr) auto 12px;align-items:center;column-gap:10px;width:100%;min-width:0;min-height:40px;height:auto;margin:0;padding:9px 0;line-height:1.4;border-bottom:1px solid var(--ops-line,#e5eaf3);font-size:13px}
body .crm-customer-overview .crm-related-document>span:first-child{display:grid;gap:3px}
body .crm-customer-overview .crm-related-document>span:first-child>b{font-size:11px;font-weight:400;color:var(--ops-muted)}
body .crm-customer-overview .crm-related-document>small{font-size:12px;font-weight:400;white-space:nowrap;align-self:center}
body .crm-customer-overview .crm-receivable-cny>strong{color:#f77c07}
body .crm-customer-overview [data-order-followups]{justify-self:start;font-size:12px;min-height:32px;padding:5px 9px}

/* Compact customer map list: actions align with their owning rows. */
body .crm-page .crm-map-shell .crm-customer-compact{padding:10px 12px;gap:5px}
body .crm-customer-compact>header{display:flex;gap:7px;align-items:center;margin:0}
body .crm-customer-compact>header h3{flex:1;min-width:0;font-size:14px;line-height:1.4;margin:0;overflow-wrap:anywhere}
body .crm-customer-compact>header>button{flex:none;min-height:32px;padding:5px 8px;font-size:12px;white-space:nowrap}
body .crm-customer-compact .crm-customer-monogram{width:26px;height:26px;font-size:13px;flex:none}
body .crm-customer-compact .crm-customer-meta{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center}
body .crm-customer-compact .crm-customer-meta p{margin:0;font-size:12px;line-height:1.5;color:var(--ops-muted);overflow-wrap:anywhere}
body .crm-customer-compact .crm-customer-actions{display:flex;margin:0;gap:0}
body .crm-customer-compact .crm-customer-actions>button{width:auto;min-height:32px;margin:0;padding:5px 8px;font-size:12px;white-space:nowrap}
body .crm-customer-compact .crm-customer-actions svg{width:13px;height:13px}
body .crm-customer-marker-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin:0 0 9px;font-size:11px;color:var(--ops-muted)}
body .crm-customer-marker-legend>span{display:flex;align-items:center;gap:5px}
body .crm-customer-marker-legend i{width:7px;height:7px;border-radius:50%;background:#081f80}
body .crm-customer-marker-legend i.is-pending{background:#db6500}
body .crm-map-shell>.crm-order-popover{z-index:40}

/* Customer information: inline actions and a shared indented detail rail. */
body .crm-customer-overview .crm-receivable-cny{align-items:center}
body .crm-customer-overview .crm-receivable-cny>strong{font-size:20px;line-height:1.3;font-variant-numeric:tabular-nums}
body .crm-customer-overview .crm-info-summary{grid-template-columns:auto minmax(0,1fr) 28px 16px;gap:8px;min-height:46px;padding:8px 0}
body .crm-customer-overview .crm-info-add{display:inline-flex;align-items:center;justify-content:center;width:28px;height:32px;min-height:0;padding:0;margin:0;border:0;border-radius:0;background:transparent;box-shadow:none;font-size:22px;font-weight:400;color:var(--ops-blue);cursor:pointer}
body .crm-customer-overview .crm-info-add:hover{color:var(--orange-ink)}
body .crm-customer-overview .crm-info-add:focus-visible{outline:2px solid var(--ops-blue);outline-offset:1px;border-radius:4px}
body .crm-customer-overview .crm-info-content{margin:0 0 12px 12px;padding:0 0 0 12px;border-left:2px solid #e5ebf6;gap:7px}
body .crm-customer-overview .crm-info-content .crm-card{padding:8px 0;border:0;border-radius:0;box-shadow:none;background:transparent}
body .crm-customer-overview .crm-info-content .crm-card header{display:flex;align-items:center;justify-content:space-between;gap:8px}
body .crm-customer-overview .crm-info-content .crm-card h3{font-size:13px;margin:0}
body .crm-customer-overview .crm-primary-contact>button,body .crm-customer-overview .crm-info-content .crm-card button{border:0;background:transparent;box-shadow:none;padding:3px 0;min-height:28px;font-size:12px}
body .crm-customer-overview .crm-history-records>.crm-related-document{grid-template-columns:minmax(0,1fr) auto 12px;padding:8px 0}
body .crm-customer-overview .crm-order-state.is-active{color:var(--orange-ink);background:#fff3e8;border-radius:5px;padding:3px 6px;font-weight:600}
body .crm-customer-overview .crm-document-copy>small{font-size:11px;font-weight:400;color:var(--ops-muted)}
body .crm-customer-overview .crm-history-records .crm-document-copy>b{font-size:13px;font-weight:600;color:inherit}
body .crm-customer-compact .crm-customer-name{display:inline-flex;align-items:center;gap:5px;width:auto;max-width:100%;padding:0;margin:0;min-height:32px;border:0;background:transparent;box-shadow:none;color:inherit;text-align:left;font:inherit;font-weight:inherit;cursor:pointer}
body .crm-customer-compact .crm-customer-name>span{min-width:0;overflow-wrap:anywhere}
body .crm-customer-compact .crm-name-arrow{width:14px;height:14px;flex:none;transform:rotate(-90deg)}
body .crm-customer-compact .crm-customer-name:focus-visible{outline:2px solid var(--ops-blue);outline-offset:3px;border-radius:3px}

/* Quote assistant uses the workspace rhythm; no viewport-specific price tokens. */
body .commerce-dialog.st-operations[data-view="报价助手"]>.dialog-body{padding:12px 14px 24px;max-width:1100px;width:100%;margin:auto;box-sizing:border-box}
body .commerce-dialog[data-view="报价助手"] .quote-lines{padding:0;gap:12px}
body .commerce-dialog[data-view="报价助手"] .history-heading{margin:0 0 16px}
body .commerce-dialog[data-view="报价助手"] .history-heading h2{font-size:20px;margin:4px 0 8px}
body .commerce-dialog[data-view="报价助手"] .history-heading p{font-size:13px;line-height:1.6}
body .commerce-dialog[data-view="报价助手"] .quote-line{margin:0;border:1px solid #dfe5f1;border-radius:14px;background:#fff;box-shadow:none}
body .commerce-dialog[data-view="报价助手"] .quote-line-head{padding:10px}
body .commerce-dialog[data-view="报价助手"] .quote-line-fields{padding:10px;gap:8px}
body .commerce-dialog[data-view="报价助手"] .quote-line-fields label{font-size:12px;gap:5px;min-width:0}
body .commerce-dialog[data-view="报价助手"] .quote-line-fields :is(input,select,.st-select-trigger){font-size:14px;min-height:40px;height:40px;padding:7px 10px}
body .commerce-dialog[data-view="报价助手"] .quote-candidate{padding:9px 10px;gap:9px}
body .commerce-dialog[data-view="报价助手"] .quote-candidate-info strong{font-size:14px}
body .commerce-dialog[data-view="报价助手"] .quote-candidate-info :is(small,p){font-size:12px}
body .commerce-dialog[data-view="报价助手"] .quote-candidate-price{font-size:16px;color:#f77c07}
body .commerce-dialog[data-view="报价助手"] .quote-preview{top:auto;bottom:12px;right:14px;margin:0;padding:0;width:320px;max-height:min(34vh,280px);border:1px solid #dbe3f1;border-radius:14px;background:#fff;box-shadow:0 6px 28px #142d5726}
body .commerce-dialog[data-view="报价助手"] .quote-preview-head{background:#f3f6fc;color:#142d57;padding:6px 10px;font-size:12px}
body .commerce-dialog[data-view="报价助手"] .quote-preview-head button{color:#142d57;border:0;background:transparent;font-size:12px;min-height:32px;padding:4px 6px}
body .commerce-dialog[data-view="报价助手"] .quote-preview-grab{display:flex;align-items:center;justify-content:center;width:100%;height:18px;min-height:18px;padding:0;margin:0;border:0;background:#f3f6fc;cursor:ns-resize;touch-action:none}
body .commerce-dialog[data-view="报价助手"] .quote-preview-grab span{width:36px;height:3px;border-radius:3px;background:#aebbd3}
body .commerce-dialog[data-view="报价助手"] .quote-preview-grab:focus-visible{outline:2px solid #142d57;outline-offset:-2px}
body .commerce-dialog[data-view="报价助手"] .dialog-body:has(.quote-preview){padding-bottom:calc(min(34vh,280px) + 32px)}
body .commerce-dialog[data-view="报价助手"] .dialog-body:has(.quote-preview.is-collapsed){padding-bottom:92px}
@media(max-width:760px){body .commerce-dialog[data-view="报价助手"] .quote-preview{left:10px;right:10px;width:auto}}
