/* v1.1 shared, measured reading scale. Keep this as the final theme layer. */
:root{--reading-body:16px;--reading-small:14px;--reading-ink:#23334b;--reading-muted:#53637a;--reading-border:#dce3ed}
body.app-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:var(--reading-body);line-height:1.65;color:var(--reading-ink)}
.app-body .page-content,.app-body.screen-production .page-content{max-width:none;width:100%;padding:24px;min-width:0}
.app-body .page-heading{margin-bottom:22px;gap:16px}.app-body .page-heading h1{font-size:30px;line-height:1.4;letter-spacing:0}.app-body .page-heading p{font-size:16px;color:var(--reading-muted);margin-top:6px}
.app-body.screen-dashboard .page-heading{padding:0;min-height:0;background:none;border:0;box-shadow:none}.app-body.screen-dashboard .page-heading:after{display:none}
.app-body .eyebrow,.app-body .section-kicker{display:none}.app-body .card{border:1px solid var(--reading-border);box-shadow:0 4px 18px #24365305}.app-body .card-head,.app-body .card-body{padding:22px}
.app-body h2,.app-body .card-head h2{font-size:22px;line-height:1.45}.app-body h3{line-height:1.5}.app-body .card-head p,.app-body .list-copy p,.app-body .mission-card p{font-size:16px;color:var(--reading-muted);line-height:1.65}
.app-body small,.app-body .data-table th,.app-body .secondary-cell,.app-body .stat-meta,.app-body .badge,.app-body .step-pill,.app-body .field-hint,.app-body .detail-meta,.app-body .mission-type,.app-body .mission-stars,.app-body .mission-badge,.app-body .mission-bottom,.app-body .schedule-note small,.app-body .contract-no-chip,.app-body .nav-count,.app-body .mobile-nav>a,.app-body .mobile-nav>button{font-size:14px!important;line-height:1.6;color:var(--reading-muted)}
.app-body .data-table th{font-weight:650;color:#475970;background:#f5f7fb}.app-body .data-table td,.app-body .primary-cell,.app-body .form-grid label,.app-body .form-section,.app-body .nav-item,.app-body .list-copy strong,.app-body .issue-record-details p,.app-body .service-flow small,.app-body .plain-tip{font-size:16px;line-height:1.65}
.app-body input:not([type=checkbox]):not([type=radio]):not([type=hidden]),.app-body select,.app-body textarea{font:inherit;font-size:16px;min-height:46px;max-width:100%;min-width:0;border-color:#ccd6e4}.app-body textarea{line-height:1.7;min-height:100px}.app-body .button{font-size:16px;min-height:44px;line-height:1.45;white-space:normal}.app-body .badge{color:inherit}.app-body .countdown{font-size:16px;line-height:1.5}
.app-body .table-wrap,.app-body .card-body,.app-body .form-grid{min-width:0;max-width:100%}.app-body .form-card{max-width:none}.app-body .form-grid{gap:20px;align-items:start}.app-body .form-grid label{min-width:0;overflow-wrap:anywhere}.app-body .form-actions{margin-top:12px;gap:12px;flex-wrap:wrap}
.app-body .stat-card{min-height:150px;padding:22px}.app-body .stat-card h3{font-size:34px;margin:10px 0}.app-body .stat-head{font-size:16px}.app-body .list-row{gap:18px;align-items:start;flex-wrap:wrap}.app-body .list-copy{min-width:0;flex:1 1 220px}.app-body .list-copy strong{font-size:18px}.app-body details>summary{cursor:pointer;font-size:16px;font-weight:650;padding:16px 20px;min-height:48px}.app-body .plan-specs{margin-bottom:20px}
.app-body .contract-plan-board .contract-map-layout{grid-template-columns:minmax(270px,320px) minmax(0,1fr);gap:16px;padding:20px}.app-body .contract-map-grid.map-seven-days{grid-template-columns:180px repeat(7,minmax(190px,1fr));min-width:1550px}.app-body .contract-map-scroll{max-width:100%;overflow:auto;max-height:72vh}.app-body .package-list{max-height:72vh;overflow:auto;padding:12px}.app-body .mission-card{padding:16px;min-width:0;border-radius:14px;margin-bottom:12px}.app-body .mission-card strong{font-size:17px;line-height:1.5;overflow-wrap:anywhere}.app-body .mission-top{gap:10px;flex-wrap:wrap}.app-body .mission-actions{display:flex;justify-content:flex-start;margin-top:12px}.app-body .touch-task-edit{display:inline-flex}.app-body .mission-card p{margin:8px 0}.app-body .schedule-cell{min-height:160px;padding:10px}.app-body .schedule-cell.is-overloaded{background:#fff1ef;border-color:#db7567}.app-body .load-label{display:block;margin-bottom:10px}.app-body .contract-plan-board.is-fullscreen,.app-body .contract-plan-board:fullscreen{background:#f7f9fc}.app-body .contract-plan-board.is-fullscreen .contract-map-scroll,.app-body .contract-plan-board:fullscreen .contract-map-scroll{max-height:none}.app-body .contract-plan-board.is-fullscreen .package-list{max-height:65vh}
.form-group{grid-column:1/-1;border:1px solid var(--reading-border);border-radius:12px;min-width:0}.form-group[open]>summary{border-bottom:1px solid var(--reading-border);background:#f8faff;border-radius:12px 12px 0 0}.form-group-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;padding:20px}.form-group-body>.full{grid-column:1/-1}.mobile-save-bar{display:none}.app-body .notice{font-size:16px;line-height:1.65}.app-body a:focus-visible,.app-body button:focus-visible,.app-body summary:focus-visible{outline:3px solid #1d61d3;outline-offset:3px}
.app-body.screen-dashboard .stat-grid{grid-template-columns:repeat(auto-fit,minmax(185px,1fr))}.app-body.screen-dashboard .stat-card{min-height:155px}.app-body .contract-plan-board-tools{display:flex;flex-wrap:wrap;gap:8px}.app-body .contract-plan-board-tools .inline-form{margin:0}
.app-body .detail-grid{grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr)}.app-body .detail-grid>*,.app-body .detail-grid .card{min-width:0;max-width:100%}.app-body .key-values dt{font-size:14px;color:var(--reading-muted)}.app-body .key-values dd{font-size:16px}.app-body .spec-grid small{font-size:14px}
@media(max-width:1200px){.app-body .detail-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:1023px){.app-body .page-content{padding:20px 16px 100px}.app-body .contract-plan-board .contract-map-layout{grid-template-columns:minmax(0,1fr);padding:14px}.app-body .package-list{max-height:none}.app-body .contract-map-scroll{max-height:70vh}.app-body .stat-card{min-height:130px;padding:16px}}
@media(max-width:760px){.app-body .page-heading h1{font-size:25px}.app-body .card-head,.app-body .card-body{padding:18px 16px}.app-body h2,.app-body .card-head h2{font-size:21px}.form-group-body{grid-template-columns:minmax(0,1fr);padding:16px;gap:18px}.app-body .form-grid{grid-template-columns:minmax(0,1fr)}.app-body .toolbar{flex-wrap:wrap;gap:10px}.app-body .list-row{flex-direction:column;padding:18px 16px}.app-body .list-copy{flex:initial;width:100%}.app-body .stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.app-body .stat-card h3{font-size:29px}.app-body .card-head .button{width:auto}.app-body .contract-plan-board-tools{display:flex;flex-wrap:wrap;width:100%;gap:8px}.app-body .contract-plan-board-tools>*{flex:1 1 130px}.app-body .contract-plan-board-tools button{width:100%}.mobile-save-bar{display:flex;position:fixed;bottom:calc(70px + env(safe-area-inset-bottom));left:0;right:0;z-index:75;background:#ffffffed;border-top:1px solid var(--reading-border);padding:10px 16px;gap:12px;align-items:center;backdrop-filter:blur(12px)}.mobile-save-bar .button{flex:1}.has-save-bar .page-content{padding-bottom:calc(180px + env(safe-area-inset-bottom))!important}.mobile-save-bar span{font-size:14px;color:var(--reading-muted)}.keyboard-open .mobile-save-bar,.keyboard-open .mobile-nav{display:none}.app-body .form-grid select{width:100%}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}

/* The date controls are a standalone component, not a generic column toolbar. */
.app-body .contract-plan-board .map-date-nav{display:grid;grid-template-columns:minmax(230px,1fr) minmax(260px,340px);align-items:end;gap:16px;width:100%;min-width:0;margin:0;padding:16px 20px;flex:none}
.app-body .map-week-nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;min-width:0}
.app-body .map-date-filter{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px;min-width:0}
.app-body .map-date-filter label{display:grid;gap:6px;min-width:0;margin:0;font-size:16px;text-align:left}
.app-body .map-date-nav .button{width:100%;height:46px;min-height:46px;min-width:0;margin:0;padding:10px 12px;white-space:nowrap}
.app-body .map-date-nav input[type=date]{box-sizing:border-box;display:block;width:100%;max-width:100%;min-width:0;height:46px;min-height:46px;margin:0;padding:10px 12px;line-height:1.4}
.app-body .contract-plan-board .contract-map-grid.map-seven-days{grid-template-columns:180px repeat(7,minmax(190px,1fr));min-width:1550px}
.app-body .contract-plan-board.is-fullscreen{border:0;border-radius:0}
.app-body .contract-plan-board.is-fullscreen .mobile-map-tabs{flex:none}
.app-body .contract-plan-board .package-list>.empty-state{padding:24px 12px!important;margin:0;min-height:0}
@media(max-width:760px){
 .app-body .contract-plan-board .contract-plan-board-tools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
 .app-body .contract-plan-board .contract-plan-board-tools>*{grid-column:auto;min-width:0;margin:0}
 .app-body .contract-plan-board .contract-plan-board-tools>:only-child{grid-column:1/-1}
 .app-body .contract-plan-board .contract-plan-board-tools .button{width:100%;height:100%;min-width:0}
}
@media(max-width:1023px){
 .app-body .contract-plan-board .map-date-nav{grid-template-columns:minmax(0,1fr);gap:12px;padding:16px}
 .app-body .contract-plan-board .contract-map-grid.map-seven-days{grid-template-columns:132px repeat(7,minmax(168px,1fr));min-width:1364px}
 .app-body .contract-plan-board.is-fullscreen{height:100dvh;max-height:100dvh;overflow:auto}
 .app-body .contract-plan-board.is-fullscreen .contract-plan-board-head{flex:none}
 .app-body .contract-plan-board.is-fullscreen .contract-map-layout{flex:1 0 200px;min-height:200px}
 .app-body .contract-plan-board.is-fullscreen .contract-map-scroll{height:auto;min-height:200px;max-height:65dvh}
 .app-body .contract-plan-board.is-fullscreen .package-list{max-height:none}
}

/* Desktop navigation has its own bounded scroll area; never shrink menu text. */
.sidebar-scrollable>.sidebar-menu{flex-shrink:0}
@media(min-width:1024px){
 .app-body .sidebar.sidebar-scrollable{height:100vh;height:100dvh;max-height:100dvh;min-height:0;overflow:hidden}
 .app-body .sidebar-scrollable>.sidebar-brand{flex:0 0 auto}
 .app-body .sidebar-scrollable>.sidebar-menu{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:#a8b8cc transparent;padding:0 4px 8px 0;scroll-padding-block:8px}
 .sidebar-menu::-webkit-scrollbar{width:6px}
 .sidebar-menu::-webkit-scrollbar-thumb{background:#a8b8cc;border-radius:8px}
 .sidebar-menu::-webkit-scrollbar-track{background:transparent}
 .app-body .sidebar-scrollable>.sidebar-bottom{flex:0 0 auto;position:static;margin-top:0;padding:12px 7px 0}
 .app-body .sidebar-scrollable .sidebar-nav{flex:none}
 .app-body .sidebar-scrollable .nav-item{flex-shrink:0;min-height:46px}
}
@media(min-width:1024px) and (max-height:800px){
 .app-body .sidebar.sidebar-scrollable{padding-top:12px;padding-bottom:12px}
 .app-body .sidebar-scrollable>.sidebar-brand{height:58px;padding-bottom:12px}
 .app-body .sidebar-scrollable .sidebar-label{margin-top:16px;margin-bottom:7px}
 .app-body .sidebar-scrollable .sidebar-nav{gap:2px}
 .app-body .sidebar-scrollable .nav-item{min-height:44px;margin:0;padding-top:8px;padding-bottom:8px}
 .app-body .sidebar-scrollable>.sidebar-bottom{padding-top:8px}
 .app-body .sidebar-scrollable .sidebar-version{display:none}
}
@media print{.sidebar,.topbar,.mobile-nav,.mobile-save-bar,.form-actions,.toolbar,.button{display:none!important}.app-body .app-main{margin:0;width:100%}.app-body .page-content{padding:0}.card{break-inside:avoid;box-shadow:none!important}.form-group-body{display:grid!important}details:not([open])>*:not(summary){display:block!important}}

/* Non-blocking form feedback replaces native beforeunload prompts. */
.form-save-notice{padding:12px 16px;border-radius:10px;background:#fff7e7;color:#815713;font-size:16px;line-height:1.65;border:1px solid #edddb9;margin:0 0 12px;grid-column:1/-1}.form-save-notice[hidden]{display:none}
