[hidden]{display:none!important}
.auth-page{min-height:100vh;background:var(--bg);padding:40px 24px}
.auth-brand{font-size:22px;font-weight:650;max-width:1200px;margin:0 auto;border-top:1px solid var(--ink);padding-top:18px;display:flex;justify-content:space-between;gap:16px}
.auth-brand span{font:11px var(--mono);letter-spacing:1px;color:var(--muted)}
.auth-panel{max-width:430px;margin:72px auto;padding-top:24px;border-top:1px solid var(--ink)}
.auth-panel h1{font-size:30px;letter-spacing:-1px;margin:12px 0 20px}
.auth-panel .intro{margin-bottom:28px}
.auth-panel .fields{gap:18px}
.current-user{font-size:12px;white-space:nowrap;color:var(--on-dark)}
.top-actions>.btn.link{color:var(--on-dark)}
.global-nav{gap:22px}.topbar{gap:20px}.wordmark{margin-right:8px}
.manual-schedule{border-top:1px solid var(--ink)}
.manual-schedule-row{display:grid;grid-template-columns:180px minmax(0,1fr);gap:16px;padding:16px 12px;border-bottom:1px dotted var(--line);min-height:70px}
.manual-schedule-row:hover{background:var(--selected)}
.manual-schedule-row .day-grid span{font:11px var(--mono);border-left:1px solid var(--line);padding-left:6px}
.manual-lanes{position:relative;min-height:36px}
.manual-lanes .gantt-bar{display:block;text-align:left;border:1px solid var(--line);color:var(--ink);background:var(--selected);padding-bottom:14px}
.manual-lanes .gantt-bar:hover{color:var(--surface);background:var(--ink)}
.manual-lanes .gantt-bar .gantt-title{font-size:11px}
.resource-number{font-size:32px;line-height:1.4}
.resource-number .muted{font-size:16px}
.schedule-status-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.form-actions button[type=submit]:disabled{cursor:wait}
.drawer .table-wrap{margin:18px 0}
.drawer table{min-width:600px}
.project-pixel{max-width:14px}.project-progress .project-pixels{max-height:90px;overflow:auto}
.page-head .actions{max-width:55%}
.grid>*{min-width:0}
@media(max-width:1250px){.global-nav{gap:14px}.topbar{padding-left:24px;padding-right:24px}.current-user{max-width:80px;text-overflow:ellipsis;overflow:hidden}.top-actions{gap:8px}}
@media(max-width:1050px){.global-nav{display:none}.mobile-nav{display:block}.topbar{flex-wrap:wrap;gap:12px;padding-top:14px;padding-bottom:14px}.top-actions{margin-left:auto}.topbar .mobile-nav{max-width:130px}.wordmark{font-size:19px}}
@media(max-width:760px){.auth-page{padding:24px 18px}.auth-panel{margin:48px auto}.auth-brand{font-size:18px}.auth-brand span{max-width:120px}.current-user{display:none}.topbar{padding-left:16px;padding-right:16px}.page-head{flex-direction:column}.page-head .actions{max-width:100%}.banner{padding:10px 16px}.tabs{overflow:auto;gap:12px}.stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.schedule-status-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.app-footer{flex-wrap:wrap;padding:12px 16px}.drawer .fields .pair{grid-template-columns:1fr}.btn{min-height:40px}.manual-schedule-row{grid-template-columns:140px minmax(0,1fr)}}
@media(prefers-reduced-motion:reduce){.manual-schedule-row{transition:none}}

.resource-percent{font-size:52px;line-height:1.1;margin:10px 0 18px;letter-spacing:-2px}
.resource-breakdown{display:flex;flex-wrap:wrap;gap:12px 24px;border-bottom:1px dotted var(--line);padding:18px 0;margin-bottom:12px;font-size:13px}
.resource-breakdown b{font:16px var(--mono)}
.resource-card .project-pixels{display:flex;gap:4px;flex-wrap:nowrap}
.resource-card .project-pixel{flex:1;max-width:none;height:12px}

/* Home instrument: restore the approved monochrome historical snapshot band. */
.overview-instrument .instrument-inner{max-width:none;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 190px;padding:30px 32px 26px;min-height:250px}
.overview-instrument .metric-image{width:340px;max-width:49%;mix-blend-mode:screen}
.overview-instrument .instrument-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.overview-instrument .instrument-head .instrument-label{margin-bottom:0}
.overview-instrument .instrument-refresh{color:var(--on-dark);background:transparent;border-color:var(--strong);min-height:32px;padding:6px 12px}
.overview-instrument .instrument-refresh:disabled{opacity:.55;cursor:wait}
.overview-instrument .metric-fallback{font:500 64px var(--mono);letter-spacing:-2px;line-height:.9;width:340px;max-width:49%}
.overview-instrument .instrument-label{font-size:13px;letter-spacing:.03em}
.overview-instrument .instrument-detail{min-width:0}
.overview-instrument .instrument-detail p{white-space:normal}
.overview-instrument .instrument-model{padding:8px 0;transition:background 160ms ease}
.overview-instrument .instrument-model:hover{background:#1c1c1c}
.overview-instrument .instrument-meter{height:14px}
.overview-halftone{background-image:url('../assets/halftone-boundary.png');height:36px}
@media(min-width:1700px){.overview-instrument .instrument-inner{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 220px;min-height:300px;padding-top:36px;padding-bottom:36px;gap:36px}.overview-instrument .metric-image{width:440px}.overview-instrument .instrument-detail{font-size:16px}.overview-instrument .instrument-detail b{font-size:26px}.overview-instrument .instrument-models .row{font-size:16px}.overview-instrument .instrument-nodes b{font-size:32px}}
@media(max-width:1100px){.overview-instrument .instrument-inner{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);padding:24px;gap:24px}.overview-instrument .instrument-nodes{display:flex;grid-column:1/-1;border-left:0;border-top:1px dotted var(--muted);padding:16px 0 0;flex-direction:row;align-items:center;gap:20px}.overview-instrument .instrument-nodes .instrument-label,.overview-instrument .instrument-nodes b{margin:0}.overview-instrument .instrument-nodes .instrument-meter{width:120px;margin:0}.overview-instrument .instrument-nodes .instrument-rule{border:0;margin:0;padding:0}}
@media(max-width:760px){.overview-instrument .metric-fallback{width:180px;font-size:42px}.overview-instrument .instrument-inner{grid-template-columns:1fr;padding:22px 16px;gap:22px}.overview-instrument .instrument-models{display:flex;padding:18px 0 0;border-top:1px dotted var(--muted);gap:12px}.overview-instrument .instrument-models .row{flex-direction:row;font-size:12px}.overview-instrument .metric-image{max-width:47%;width:240px}.overview-instrument .instrument-primary{gap:16px}.overview-instrument .instrument-detail{font-size:11px}.overview-instrument .instrument-detail b{font-size:17px}.overview-instrument .instrument-rule{font-size:11px}.overview-instrument .instrument-nodes{gap:12px;flex-wrap:wrap}.overview-instrument .instrument-nodes b{font-size:22px}.overview-instrument .instrument-nodes .instrument-meter{flex:1;min-width:70px}.overview-instrument .instrument-nodes .instrument-rule{flex-basis:100%}.overview-halftone{height:24px}}
@media(prefers-reduced-motion:reduce){.overview-instrument .instrument-model{transition:none}}

/* One fluid content frame for navigation, instrument, and page content. */
.workspace{--page-gutter:32px}
.workspace>.main{width:100%;max-width:none;margin-inline:0;padding-inline:var(--page-gutter)}
.workspace>.topbar,.workspace>.banner,.overview-instrument .instrument-inner{padding-inline:var(--page-gutter)}
.overview-instrument .instrument-inner>*{min-width:0}
.overview-instrument .instrument-nodes b{max-width:100%}
@media(max-width:1250px){.workspace{--page-gutter:24px}}
@media(max-width:760px){.workspace{--page-gutter:16px}}

.workspace>.app-footer{width:100%;max-width:none;margin-inline:0;padding-inline:var(--page-gutter)}

.schedule-status-grid{grid-template-columns:repeat(5,minmax(0,1fr))}
.unscheduled-list{margin-top:24px;border-top:1px solid var(--ink);padding-top:14px}
.unscheduled-list summary{cursor:pointer;font-weight:600;padding:8px 0}
.unscheduled-list summary:hover{background:var(--selected)}
@media(max-width:760px){.schedule-status-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

.personnel-grid th,.personnel-grid td{min-width:126px;vertical-align:top}.personnel-grid th:first-child,.personnel-grid td:first-child{min-width:190px}.personnel-cell{padding:6px 8px;min-width:80px}.personnel-pixels{display:grid;grid-template-columns:repeat(10,6px);gap:3px;margin:10px 0}.personnel-pixels i{height:6px;border:1px solid currentColor;opacity:.25}.personnel-pixels i.filled{background:currentColor;opacity:1}

/* A persistent update hint stays visible both above lists and inside drawers. */
.change-notice {display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0;padding:12px 32px;border-bottom:1px solid #bdbdbd;background:#fff;color:#161616;font-size:13px;}
.change-notice[hidden] {display:none;}
.drawer .change-notice {padding:12px 0;margin:12px 0;}
@media(max-width:720px){.change-notice{padding:12px 16px;flex-wrap:wrap;}}

/* Read-only source instance panel: same monochrome card, dotted rules, mono figures. */
.source-panel{margin:16px 0;padding:20px 24px}
.source-panel-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;border-bottom:1px dotted var(--muted);padding-bottom:12px;margin-bottom:12px}
.source-panel h3{font-size:13px;letter-spacing:.03em;margin:14px 0 6px}
.source-panel .source-figure{font-size:20px;margin:4px 0}
.source-panel .source-figure b{font-size:32px}
.source-times{display:grid;grid-template-columns:max-content 1fr;gap:4px 12px;font-size:12px;margin:10px 0}
.source-times dt{color:var(--muted)}
.source-times dd{margin:0}
/* 研发排期（钉钉） Gantt + 集群调度占用 (read only) */
.dev-fresh .dev-fail,.dev-fail{color:var(--danger,#b42318)}
.dev-gantt{border-top:1px solid var(--ink);margin-top:12px}
.dev-lane{display:grid;grid-template-columns:160px minmax(0,1fr);gap:12px;border-bottom:1px dotted var(--line);min-height:44px;align-items:center}
.dev-lane:hover{background:var(--selected)}
.dev-person{padding:6px 8px;font-weight:600}.dev-person small{display:block;font:11px var(--mono);font-weight:400;color:var(--muted,#666)}
.dev-track{position:relative;height:40px;margin-right:8px}
.dev-axis .dev-track{height:24px}.dev-axis .dev-person{font:11px var(--mono)}
.dev-tick{position:absolute;top:4px;font:11px var(--mono);border-left:1px solid var(--line);padding-left:3px;height:16px;white-space:nowrap}
.dev-bar{position:absolute;top:5px;height:30px;box-sizing:border-box;border:1px solid var(--ink);background:var(--selected,#eef);overflow:hidden;white-space:nowrap;padding:2px 4px;font-size:12px;line-height:13px;cursor:default}
.dev-bar b{display:block;overflow:hidden;text-overflow:ellipsis}.dev-bar small{font:10px var(--mono)}
.dev-bar.active{background:var(--accent-soft,#dbe8ff)}
.dev-today{position:absolute;top:0;bottom:0;width:0;border-left:2px solid var(--danger,#d92d20);z-index:2}
.dev-stale{opacity:.45;filter:grayscale(1)}
.dev-incomplete{margin-top:12px}.dev-incomplete li{margin:4px 0}
.dev-util{display:grid;gap:8px;margin:8px 0 24px}
.dev-util-row{display:grid;grid-template-columns:200px minmax(0,1fr) 180px;gap:12px;align-items:center}
.dev-flag{display:inline-block;font:11px var(--mono);color:#fff;background:var(--danger,#d92d20);padding:0 4px;margin-left:4px}
.dev-bar.conflict{border-color:var(--danger,#d92d20);border-style:dashed}
.dev-conflicts{margin-top:12px}.dev-conflicts table{width:100%;border-collapse:collapse}.dev-conflicts td,.dev-conflicts th{border-bottom:1px dotted var(--line);padding:6px;text-align:left;vertical-align:top}
.dev-tables{margin:6px 0 0 18px;padding:0}
.dev-tracks{position:relative;padding:2px 0}
.dev-tracks .dev-track{height:22px}
.dev-tracks .dev-bar{top:2px;height:18px;padding:1px 3px;font-size:11px;line-height:15px}
.dev-bar.overlap{border-color:#b54708;background:#fef0c7}
.dev-bar.overdue{background:repeating-linear-gradient(45deg,#fee4e2,#fee4e2 4px,#fff 4px,#fff 8px)}
.dev-bar.overlap.overdue{background:repeating-linear-gradient(45deg,#fef0c7,#fef0c7 4px,#fee4e2 4px,#fee4e2 8px)}
.dev-overlap{position:absolute;top:0;bottom:0;background:rgba(247,144,9,.12);pointer-events:auto;z-index:0}
.dev-flag-overlap{background:#b54708}
.dev-done{font-weight:400;font-size:12px}.dev-done ul{margin:4px 0 0 14px;padding:0;max-height:220px;overflow:auto}
.dev-none{position:absolute;top:3px;left:4px}
.dev-unpaired{margin:8px 0 0 18px;padding:0}
.dev-bar .dev-src{font:9px var(--mono);margin-left:4px;opacity:.7}
.dev-train-layer{margin-top:28px;border-top:2px solid var(--ink);padding-top:8px}
.dev-bar.clip-start{border-left:3px double var(--ink)}.dev-bar.clip-end{border-right:3px double var(--ink)}
.dev-lane-empty{min-height:28px;opacity:.75}.dev-lane-empty .dev-track{height:20px}
.dev-reconcile b{font-family:var(--mono)}
.dev-bucket{margin-top:12px}.dev-bucket-person{margin:4px 0 4px 14px}.dev-bucket table{width:100%;border-collapse:collapse;font-size:12px}.dev-bucket td,.dev-bucket th{border-bottom:1px dotted var(--line);padding:4px;text-align:left}
.dev-alias{display:inline-block;font:11px var(--mono);border:1px dashed var(--ink);padding:0 3px;margin-left:3px;cursor:help}
.dev-void{font-style:normal;font-size:10px;color:#fff;background:var(--danger,#d92d20);padding:0 2px;margin-right:2px}.dev-closed summary{color:var(--muted,#555)}
.auto-sync{margin-top:4px}.auto-stale{opacity:.55;filter:grayscale(1)}
