/* v20 — denser project navigation, photo-first inspection, visible actual progress. */
.blueprint #main:has(.px-v20)>.project-heading{margin-bottom:16px}
.blueprint #main:has(.px-v20)>.project-heading h1{font-size:26px}
.blueprint #main:has(.px-v20)>.project-tabs{margin-bottom:18px}
.blueprint .px-v20>.pw-tabs{margin:0 0 24px}
.px-client-jumps{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.blueprint .px-client-jumps>button{padding:8px 14px;min-height:40px;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--ink);font-size:14px}
.blueprint .px-v20 .px-inventory{grid-template-columns:1fr 1fr;gap:12px 24px;padding:20px 24px;margin-bottom:24px}
.px-v20 .px-inventory p{font-size:14px;color:var(--muted);line-height:1.7;margin:8px 0}
.px-v20 .px-inventory-preview{grid-column:2;grid-row:1/3;height:110px;min-height:0}
.px-v20 .px-inventory-preview button{min-height:0;max-height:110px}
.px-inventory-links{display:flex;gap:20px;flex-wrap:wrap;font-size:14px;color:var(--muted)}
.blueprint .px-v20 .px-client-layout{gap:24px;grid-template-columns:minmax(0,1.2fr) minmax(300px,1fr)}
.px-v20 .px-family-column{position:static;display:grid;gap:20px}
.blueprint .px-v20 .px-retained{margin:0;padding:22px;background:var(--tint);border:1px solid var(--line);border-radius:12px}
.px-v20 .px-retained>.pw-heading{flex-wrap:wrap;align-items:start;gap:12px}
.px-v20 .px-retained h3{font-size:20px}
.px-v20 .px-retained-grid{grid-template-columns:1fr;gap:12px;margin-top:16px}
.px-v20 .px-retained-grid article{background:var(--surface);padding:14px;gap:14px}
.px-v20 .px-retained-grid article>img,.px-v20 .px-item-placeholder{width:82px;height:96px}
.px-v20 .px-retained-grid .actions{gap:8px;flex-wrap:wrap}
.px-v20 .px-retained .px-empty{padding:12px 0}
.blueprint .px-v20 .pw-form-end{position:sticky;bottom:0;background:var(--surface);padding:14px 0;border-top:1px solid var(--line);z-index:2}
.px-draft-status{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;font-size:13px;color:var(--muted);line-height:1.65;margin-top:16px}
.blueprint .px-v20 .wf-file-toolbar{display:flex;flex-wrap:wrap;padding-top:0}
.px-v20 .wf-file-toolbar select{max-width:100%}
.px-v20 .px-album-item .pw-file-preview[aria-pressed=true]{box-shadow:inset 0 0 0 3px var(--accent)}
.blueprint #dialog.px-viewer-dialog{width:min(1400px,calc(100vw - 48px));max-width:none;padding:20px 24px 24px;max-height:calc(100dvh - 40px);overflow:auto}
.px-viewer-heading{display:flex;gap:20px;align-items:center;justify-content:space-between;margin:0 0 14px}
.px-viewer-heading h2{font-size:21px;margin:0;overflow-wrap:anywhere;min-width:0}
.px-viewer-heading .actions{flex:none;font-size:14px}
.px-viewer-tools{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:14px}
.px-viewer-tools>.btn{min-height:38px;padding:7px 12px}
.px-viewer-tools>span{min-width:44px;text-align:center;font-variant-numeric:tabular-nums;font-size:14px}
.px-viewer-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:24px}
.px-viewer-layout.show-info{grid-template-columns:minmax(0,1fr) 300px}
.px-viewer-media{min-width:0}
.px-viewer-info{min-width:0;max-height:67dvh;overflow:auto;padding-right:4px}
.px-viewer-info[hidden]{display:none}
.px-viewer-info .pw-field-grid{grid-template-columns:1fr}
.px-viewer-info .field-label{margin-bottom:14px}
.px-viewer-info .pw-file-actions{display:flex;flex-direction:column;gap:10px;margin:16px 0}
.px-viewer-info .quiet-note{overflow-wrap:anywhere}
.blueprint .px-image-viewport{height:clamp(280px,63dvh,800px);width:100%;position:relative;overflow:hidden;border:1px solid var(--line);border-radius:8px;background:var(--tint);touch-action:none;user-select:none;padding:0;display:block}
.blueprint .px-image-viewport .px-image-stage{position:absolute;left:50%;top:50%;max-width:none!important;max-height:none!important;transform-origin:center;display:block;margin:0;padding:0}
.blueprint .px-image-stage>img{display:block;width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;object-fit:contain;pointer-events:none}
.px-image-viewport.can-pan{cursor:grab}.px-image-viewport.is-panning{cursor:grabbing}
.px-image-stage #wf-ann-overlay{position:absolute;inset:0}
.px-image-stage #wf-ann-overlay svg{display:block}
.px-viewer-annotations{position:absolute;inset:0;pointer-events:none}
.px-viewer-annotations svg{display:block}
.blueprint .wf-annotation .px-image-viewport{height:clamp(260px,54dvh,700px)}
.px-follow-summary{display:grid;grid-template-columns:1fr 1fr;gap:24px;padding:20px 24px;background:var(--tint);border:1px solid var(--line);border-radius:8px;margin-bottom:16px}
.px-follow-summary h3{font-size:20px;margin:0 0 14px}
.px-follow-next{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.px-follow-summary .wf-progress{border:0;padding:0;margin:0;display:block}
.px-follow-summary .quiet-note{margin-bottom:0}
.blueprint .px-v20 .wf-communications{margin:0 0 26px;padding:14px 0}
.blueprint .px-v20 .wf-communications{margin-bottom:12px}
.blueprint .px-v20 .sc-workspace{margin-top:16px;padding-top:20px;border-top-color:var(--line)}
.blueprint .px-v20 .sc-workspace>.pw-heading{gap:16px;flex-wrap:wrap;margin-bottom:16px}
.blueprint .px-v20 .sc-workspace>.pw-heading p{margin:6px 0}
.blueprint .px-v20 .sc-overview{padding:14px 18px;margin:0 0 10px}
.blueprint .px-v20 .sc-workspace>.quiet-note{font-size:13px;line-height:1.6}
.blueprint .px-v20 .sc-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,360px);align-items:start;gap:24px}
.px-schedule-side{min-width:0;display:grid;gap:20px}
.px-schedule-side .sc-calendar{width:100%;box-sizing:border-box;position:static}
.blueprint .px-schedule-side .px-node-editor{margin:0;padding:18px;border:1px solid var(--accent)}
.blueprint .px-schedule-side .px-node-fields{grid-template-columns:1fr 1fr;gap:12px}
.blueprint .px-schedule-side .px-node-fields>.field-label:first-child{grid-column:1/-1}
.px-schedule-side .px-node-editor .pw-field-grid{grid-template-columns:1fr}
.px-schedule-side .px-node-editor .dialog-actions{flex-wrap:wrap}
.px-schedule-switch{display:none}
.blueprint .px-v20 .wf-node>summary{align-items:start;padding:18px;gap:12px}
.blueprint .px-v20 .wf-node>summary>div:first-of-type{min-width:0;flex:1}
.blueprint .px-v20 .wf-node>summary strong{font-size:20px;margin-right:10px;color:var(--ink)}
.blueprint .px-v20 :is(.wf-node>summary small,.wf-node-status,.wf-node-body>p,.sc-week,.sc-legend,.sc-date-detail>small){color:var(--muted)}
.px-actual-badge{display:inline-block;font-size:13px;font-weight:650;background:var(--tint);color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:3px 8px;vertical-align:middle}
.px-actual-badge[data-status="进行中"]{color:var(--accent);border-color:var(--accent)}
.px-actual-badge[data-status="已完成"]{color:var(--ink);border-color:currentColor}
.blueprint .px-v20 .px-plan-label{display:block;background:none;padding:0;margin:8px 0 0;color:var(--muted);font-size:13px}
.blueprint .px-v20 .wf-node-mini{display:none}
.blueprint .px-v20 .wf-node-status{padding-top:4px}
.blueprint .px-v20 .wf-node>summary p{font-size:14px;margin:6px 0;line-height:1.65}
.blueprint .px-v20 .wf-node-body>p{overflow-wrap:anywhere}
.blueprint .px-v20 .wf-log{padding:18px 0}
.px-issues{border:1px solid var(--line);border-radius:8px;padding:16px;margin-top:24px}
@media(max-width:1150px){
 .blueprint .px-v20 .px-client-layout{grid-template-columns:1fr}
 .px-v20 .px-family-column{grid-template-columns:1fr 1fr;align-items:start}
 .blueprint .px-v20 .sc-layout{grid-template-columns:minmax(0,1fr) 310px;gap:18px}
 .px-follow-summary{grid-template-columns:1fr 1fr}.px-follow-next{grid-template-columns:1fr}
}
@media(max-width:850px){
 .blueprint .px-v20 .sc-layout{grid-template-columns:1fr}
 .px-schedule-switch{display:flex;gap:8px;margin:14px 0}
 .blueprint .px-schedule-switch .btn.active{background:var(--accent);color:var(--on-accent,#fff)}
 .sc-layout[data-mobile-view=nodes] .sc-calendar,.sc-layout[data-mobile-view=calendar] .wf-timeline,.sc-layout[data-mobile-view=calendar] .px-node-editor{display:none}
 .sc-layout.has-editor[data-mobile-view=nodes] .px-schedule-side{grid-row:1}
 .px-viewer-layout.show-info{grid-template-columns:1fr}
 .px-viewer-info{max-height:none;overflow:visible}
 .blueprint .px-viewer-layout.show-info .px-image-viewport{height:42dvh;min-height:240px}
 .px-v20 .px-family-column{grid-template-columns:1fr}
}
@media(max-width:600px){
 .blueprint #dialog.px-viewer-dialog{width:calc(100vw - 16px);max-height:calc(100dvh - 16px);padding:12px}
 .px-viewer-heading{flex-direction:column;align-items:start;gap:12px}
 .px-viewer-heading h2{font-size:20px}.px-viewer-tools{gap:6px}
 .px-viewer-tools .btn{min-height:40px;font-size:13px}
 .blueprint .px-image-viewport{height:55dvh;min-height:240px}
 .blueprint .px-v20 .px-inventory{grid-template-columns:1fr;padding:18px}
 .px-v20 .px-inventory-preview{grid-column:1;grid-row:auto;height:90px}
 .blueprint .px-v20 .px-retained{padding:18px}
 .px-client-jumps{gap:6px}.blueprint .px-client-jumps>button{padding:8px 10px;font-size:13px}
 .px-follow-summary{grid-template-columns:1fr;padding:18px;gap:14px}
 .px-follow-next{grid-template-columns:1fr 1fr}
 .blueprint .px-v20 .wf-node>summary{padding:16px}.blueprint .px-v20 .wf-node-status{white-space:normal}
 .px-draft-status{font-size:12px}
}
@media(prefers-reduced-motion:reduce){.px-v20 *{scroll-behavior:auto!important}}
