:root{font-family:Inter,Arial,sans-serif;color:#17283d;background:#f3f6fa;font-size:16px;--blue:#245ce4;--line:#e1e7ef}*{box-sizing:border-box}body{margin:0}aside{position:fixed;inset:0 auto 0 0;width:236px;background:#12243a;color:#fff;padding:30px 18px;display:flex;flex-direction:column}.brand{padding:0 16px 32px}.brand>b{font-size:32px;letter-spacing:-2px;display:block;margin-bottom:16px}.brand>b span{color:#779eff;margin-left:8px}.brand strong{display:block;font-size:20px}.brand small{display:block;font-size:11px;letter-spacing:2px;color:#99abc1;margin-top:10px}nav{display:grid;gap:8px}button,input,select{font:inherit}button{cursor:pointer;border:1px solid var(--line);border-radius:8px;background:white;color:#20344e;padding:11px 15px;font-size:14px;font-weight:600}button:hover{filter:brightness(.96)}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #7ea4ff}button:disabled{opacity:.45;cursor:not-allowed}nav button{border:0;background:transparent;color:#b5c3d4;text-align:left;padding:14px}nav button.active{background:#294361;color:white}nav button span{margin-right:12px}.asidefoot{margin-top:auto;font-size:12px;color:#9fb0c5;line-height:1.7}main{margin-left:236px}header{height:78px;padding:0 36px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;background:white;font-size:14px}#app{padding:32px 36px}.title{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:26px}h1{font-size:30px;letter-spacing:-.8px;margin:0 0 9px}h2{font-size:19px;margin:0 0 20px}h3{font-size:17px;margin:10px 0}p{line-height:1.6}.muted,.subtitle{color:#687b91}.subtitle{font-size:14px;margin:0}.primary{background:var(--blue);color:white;border-color:var(--blue)}.actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:26px}.stat,.panel,.card{background:white;border:1px solid var(--line);border-radius:12px;padding:22px}.stat label{font-size:14px;color:#697a8c}.stat strong{display:block;font-size:34px;font-weight:650;margin:15px 0 8px}.stat small{font-size:13px;color:#687b91}.split{display:grid;grid-template-columns:2fr 1fr;gap:22px}.panel{margin-bottom:22px}.panelhead{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:20px}.panelhead h2{margin:0}.pill{display:inline-block;border-radius:5px;padding:5px 8px;background:#edf2f8;color:#52657c;font-size:12px;font-weight:600;white-space:nowrap}.ready{background:#e8f0ff;color:#2555c6}.running{background:#fff0d9;color:#965c00}.done{background:#dff4e9;color:#167249}.blocked{background:#fde7e7;color:#b83232}.tag2{background:#e9edff;color:#5654b6}.tag3{background:#e2f1ff;color:#276794}.tag4{background:#e0f3ef;color:#1f7667}.tablewrap{overflow:auto}table{width:100%;border-collapse:collapse;text-align:left;font-size:14px}th{color:#687b91;font-size:12px;letter-spacing:.3px;font-weight:600;background:#f8fafc}th,td{padding:14px 12px;border-bottom:1px solid #edf0f5}td small{display:block;margin-top:5px;color:#748499}tr:last-child td{border-bottom:0}.progress{height:6px;background:#e9eef6;border-radius:8px;overflow:hidden;margin:9px 0}.progress i{display:block;background:#3b75ec;height:100%}.row{display:flex;justify-content:space-between;align-items:center;padding:15px 0;border-bottom:1px solid var(--line);gap:12px}.row:last-child{border:0}.notice{background:#edf3ff;border-left:3px solid #5d89ee;padding:14px 18px;font-size:14px;line-height:1.6;margin:20px 0}.warning{background:#fff4e3;border-color:#d79d39}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.card{border-top:4px solid #97afdd}.card.running{border-top-color:#eba944;color:inherit;background:white}.card.done{border-top-color:#2b986c;color:inherit;background:white}.card.blocked{border-top-color:#d46565;color:inherit;background:white}.card .qty{font-size:26px;font-weight:650;margin:20px 0}.card .actions button{flex:1}.filters{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:22px}input,select{border:1px solid #d5dde7;border-radius:7px;padding:10px;background:white;min-width:0}label{font-size:14px}label input,label select{display:block;width:100%;margin-top:8px}.formgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}.formgrid .wide{grid-column:1/-1}.timeline{overflow-x:auto}.gantt{min-width:860px}.ghead,.grow{display:grid;grid-template-columns:170px 1fr;border-bottom:1px solid var(--line)}.glabel{padding:17px 10px;font-size:13px}.glabel small{display:block;color:#7e8c9d;margin-top:5px}.gtrack{position:relative;min-height:70px;background:repeating-linear-gradient(to right,transparent 0,transparent calc(20% - 1px),#e8edf4 calc(20% - 1px),#e8edf4 20%)}.days{display:flex;justify-content:space-around;padding:14px;font-size:13px}.bar{position:absolute;top:10px;height:49px;border:0;border-left:3px solid currentColor;border-radius:5px;text-align:left;padding:7px;font-size:12px;overflow:hidden;white-space:nowrap}.bar small{display:block;font-size:11px;font-weight:400;margin-top:4px}dialog{border:1px solid var(--line);border-radius:14px;padding:28px;max-width:750px;width:calc(100% - 32px);max-height:90vh}dialog::backdrop{background:#12243a88}dialog h2{margin-top:0}#toast{position:fixed;bottom:25px;right:25px;padding:15px 22px;background:#172c44;color:white;border-radius:9px;display:none;z-index:50}.empty{text-align:center;padding:35px;color:#6e8095}.legend{display:flex;gap:12px;margin-top:15px;flex-wrap:wrap}.settingsrow{display:grid;grid-template-columns:1fr 110px 100px;gap:16px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.settingsrow input{width:100%}details{padding:15px 0}summary{cursor:pointer;font-weight:600}a{color:var(--blue)}@media(max-width:1100px){.cards{grid-template-columns:repeat(2,1fr)}.split{grid-template-columns:1fr}.stats{grid-template-columns:repeat(2,1fr)}aside{width:200px}main{margin-left:200px}#app{padding:24px}header{padding:0 24px}}@media(max-width:700px){aside{position:static;width:100%;padding:15px}.brand{padding:0 0 12px}.brand>b,.brand small,.asidefoot{display:none}nav{display:flex;overflow:auto}nav button{white-space:nowrap;padding:10px}main{margin:0}header{height:58px}header>.pill{display:none}#app{padding:20px 14px}.title{align-items:flex-start;flex-direction:column}h1{font-size:26px}.stats{gap:10px}.stat{padding:16px}.cards,.formgrid{grid-template-columns:1fr}.formgrid .wide{grid-column:auto}.settingsrow{grid-template-columns:1fr 80px 70px}}
.plan-toolbar{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin-bottom:20px}.plan-toolbar select{max-width:310px}.of-stages{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.of-stages>div+div{border-left:1px solid var(--line);padding-left:20px}.of-operation{border:1px solid var(--line);border-radius:9px;padding:12px;margin-bottom:10px;background:#f8faff}.of-focus{border:0;background:none;width:100%;text-align:left;padding:0;font-size:14px}.of-focus span:not(.pill),.of-focus small{display:block;font-weight:400;margin-top:8px}.of-focus small{color:#687b91;font-size:13px}.of-operation .actions{margin-top:12px}.of-operation .actions button{padding:7px 10px}.of-operation .muted{font-size:13px}.plan-gantt{position:relative}.plan-gantt .grow{min-height:84px}.plan-gantt .gtrack{min-height:84px;background-image:linear-gradient(to right,#e5ebf4 1px,transparent 1px);background-repeat:repeat;background-color:#fff}.time-axis{position:relative;min-height:46px}.time-axis>span{position:absolute;padding:14px 5px;font-size:13px}.plan-bar{top:18px;height:48px;min-width:5px;padding:4px 2px;border-radius:4px;z-index:2;cursor:grab;font-size:12px}.plan-bar[draggable="false"]{cursor:pointer}.plan-bar.linked{outline:2px solid #245ce4;z-index:3;box-shadow:0 0 0 4px #245ce419}.plan-bar.dimmed{opacity:.2}.plan-bar.status-running{border-top:4px solid #da920e}.plan-bar.status-done{border-top:4px solid #198058}.plan-bar.status-blocked{border-top:4px solid #c94a4a}.plan-bar.status-ready{border-top:4px solid #3976e6}.plan-bar.status-wait{border-top:4px solid #96a4b8}.plan-bar.dragging{opacity:.35}.drop-track.drop-valid{background-color:#e4f4ec!important;outline:2px dashed #269365;outline-offset:-2px}.drop-track.drop-invalid{background-color:#fce8e8!important}.drop-hint{font-size:14px;padding:16px 0 0;color:#51657d}#dependencyLinks{position:absolute;top:0;left:0;pointer-events:none;z-index:4;overflow:visible}.of-follow .panelhead{align-items:flex-start}.of-follow .subtitle{margin-top:8px}@media(max-width:750px){.of-stages{grid-template-columns:1fr}.of-stages>div+div{border-left:0;border-top:1px solid var(--line);padding-left:0;padding-top:12px}.plan-toolbar select{max-width:100%;width:100%}}
.plan-gantt .ghead,.plan-gantt .grow{grid-template-columns:260px 1fr}.atelier-heading{padding:13px 16px;display:flex;align-items:center;gap:20px;border-top:1px solid var(--line);font-size:15px}.atelier-heading span{font-size:13px}.plan-gantt .glabel>b{font-size:14px;line-height:1.4;display:block}.plan-gantt .glabel small{font-size:12px}.manual-label{display:inline-block;margin-top:8px;background:#eee8ff;color:#61449b;padding:4px 7px;border-radius:5px;font-size:12px}.plan-gantt .gtrack{min-height:90px}.plan-bar{height:61px;top:14px}.bar-operation{display:block;font-size:12px;font-weight:500;margin-top:4px}.resource-tasks{grid-column:2;display:flex;gap:6px;flex-wrap:wrap;padding:0 8px 10px}.task-caption{font-size:13px;padding:6px 9px;border-color:#e1e7ef;font-weight:400;text-align:left;background:#f8fafc}.task-caption b{margin-right:5px}.task-caption .pill{font-size:12px;padding:3px 5px;margin-left:4px}.task-caption.caption-selected{border-color:#245ce4;background:#edf3ff}.plan-gantt .grow{align-items:start}.atelier-heading+.grow{border-top:0}
.of-summary{display:flex;justify-content:space-between;align-items:center;gap:16px}.of-summary .subtitle{margin-top:8px}.lunch-band{position:absolute;top:0;bottom:0;display:block;background:repeating-linear-gradient(135deg,#e8e9ed 0,#e8e9ed 5px,#f5f5f7 5px,#f5f5f7 10px);border-left:1px solid #d4d7de;border-right:1px solid #d4d7de;pointer-events:none;z-index:0;overflow:hidden}.time-axis .lunch-axis{padding:28px 0 2px;text-align:center;font-size:12px;color:#616975;white-space:nowrap}.time-axis{min-height:62px}.time-axis>span:not(.lunch-band){z-index:1}.of-summary+.timeline{margin-top:0}@media(max-width:700px){.of-summary{align-items:flex-start;flex-direction:column}}
.order-number{display:inline-block;font-size:12px;font-weight:600;color:#42556d;margin-left:7px}.plan-bar .order-number{display:block;margin:2px 0 0;font-size:12px;color:inherit}.plan-bar{height:76px;top:10px}.plan-gantt .gtrack{min-height:100px}.plan-bar.linked{outline-color:var(--of-color,#245ce4)}.order-of-legend{display:flex;flex-wrap:wrap;gap:9px}.order-of-legend button{font-weight:400;text-align:left}.task-caption .order-number{margin-right:7px}.of-summary{flex-wrap:wrap}
.relationship-grid{display:grid;grid-template-columns:1fr 1.2fr 1fr;gap:16px}.relationship-grid>div{padding:16px;border-radius:10px;border-top:4px solid}.relationship-grid h3{margin-top:0;font-size:15px}.relationship-grid h3>span{float:right}.before-box{background:#fff8ec;border-color:#b97814!important}.current-box{background:#f2efff;border-color:#7250bb!important}.after-box{background:#edf6ff;border-color:#3375bd!important}.relation-item{display:block;width:100%;text-align:left;background:white;border:1px solid #dde3eb;padding:12px;margin-bottom:10px;font-size:14px;font-weight:400}.relation-item>span{display:block;margin-top:7px}.relation-item small{color:#687b91;font-size:13px}.relation-item .pill{display:inline-block}.relation-key{font-size:13px;padding:5px 10px;border-left:4px solid;background:#f6f8fb}.before-key{border-color:#b97814}.current-key{border-color:#7250bb}.after-key{border-color:#3375bd}.plan-bar.relation-current,.task-caption.relation-current{outline:3px solid #7250bb;outline-offset:1px;z-index:3;background:#f2efff}.plan-bar.relation-before,.task-caption.relation-before{outline:2px solid #b97814;outline-offset:1px;background:#fff3dc}.plan-bar.relation-after,.task-caption.relation-after{outline:2px solid #3375bd;outline-offset:1px;background:#e6f2ff}.plan-bar.relation-muted,.task-caption.relation-muted{opacity:.38}.relationship-panel .legend>.muted{font-size:13px}.relationship-panel .panelhead{align-items:flex-start}.relationship-panel h2{margin-bottom:8px}@media(max-width:900px){.relationship-grid{grid-template-columns:1fr}.relationship-panel .panelhead{flex-wrap:wrap}}
.night-band{background:repeating-linear-gradient(135deg,#dce2ec 0,#dce2ec 5px,#edf0f5 5px,#edf0f5 10px)}.weekend-band{background:repeating-linear-gradient(135deg,#ced7e5 0,#ced7e5 5px,#e1e6ef 5px,#e1e6ef 10px)}.time-axis>span:not(.lunch-band){font-size:12px;white-space:nowrap}

/* Production identity: OF background, explicit order allocation chips. */
.plan-bar.bar{background:var(--of-color);color:#fff;border:1px solid var(--of-color);border-left:5px solid var(--of-color)}
.plan-bar.bar.status-done{background:var(--of-color);opacity:.65}.plan-bar.bar.status-blocked{outline:3px solid #dc2626}.plan-bar.bar.status-running{outline:3px solid #101828}
.command-chip{display:inline-block;border:1px solid var(--command-color);border-left:5px solid var(--command-color);border-radius:5px;background:#fff;color:#182238;padding:2px 5px;margin:2px;font-size:11px;white-space:nowrap}.plan-bar .order-number{overflow:hidden}.task-caption{background:#fff}.manual-label{white-space:normal}

/* Compact tracks, coloured days, half-hour axis and delayed OF details. */
.plan-gantt .time-axis{height:86px;position:relative;overflow:hidden}.day-wash{position:absolute;top:0;bottom:0;opacity:.48;pointer-events:none}.day-heading{position:absolute;top:0;height:33px;padding:8px 12px;color:#233850;font-size:13px;font-weight:700;border-bottom:1px solid #ccd5e0;overflow:hidden;white-space:nowrap}.hour-heading{position:absolute;top:42px;font-size:10px;color:#34445b;transform:translateX(3px);white-space:nowrap}.hour-heading.end-hour{transform:translateX(-100%)}.hour-grid{position:absolute;top:0;bottom:0;border-left:1px dotted #cdd7e4;pointer-events:none}.hour-grid.major{border-left-style:solid;border-color:#c0cbda}.plan-gantt .time-axis .lunch-axis{padding-top:66px;font-size:10px}.plan-gantt .glabel{position:sticky;left:0;z-index:5;background:white}.plan-gantt .gtrack{min-height:100px}.plan-bar{z-index:2}.of-hover{position:fixed;z-index:1000;width:min(450px,calc(100vw - 16px));max-height:75vh;overflow:auto;background:white;color:#17283d;border:1px solid #cad5e4;border-radius:12px;box-shadow:0 12px 45px #12243a38;padding:18px;font-size:13px;line-height:1.45}.hover-heading{border-left:5px solid;padding-left:12px}.hover-heading>strong{font-size:20px;margin-right:12px}.of-hover h3{font-size:16px}.of-hover h4{margin:16px 0 7px;font-size:13px}.of-hover p{margin:7px 0;font-size:12px}.of-hover dl{display:grid;grid-template-columns:125px 1fr;gap:7px;margin:10px 0}.of-hover dt{color:#63768d}.of-hover dd{margin:0}.hover-allocation>span:last-child{display:block;font-size:12px;margin:3px}.hover-warning{background:#fff0d9;padding:8px;border-radius:5px}.hover-step{border-left:3px solid #d6dfeb;padding:6px 9px;margin:5px 0}.hover-step.active{border-color:#245ce4;background:#edf3ff}.hover-step>span{display:block;font-size:12px}.of-hover .pill{font-size:10px;padding:2px 5px}

.workshop-compact{padding:8px 12px}.workshop-compact td{padding:8px 9px;font-size:12px;vertical-align:middle}.workshop-compact th{padding:10px 9px}.workshop-compact td small{font-size:11px;max-width:230px;line-height:1.35;margin-top:3px}.workshop-compact button{padding:6px 9px;font-size:12px}.workshop-compact .of-link{padding:0;border:0;background:none;font-weight:700}.workshop-compact .machine-code{font-size:12px}.workshop-compact .pill{font-size:11px;padding:4px 6px}.workshop-orders{max-width:170px}.workshop-orders .command-chip{font-size:10px;padding:1px 4px}.workshop-progress{min-width:110px}.workshop-progress .progress{margin:5px 0 0;height:4px}.workshop-date{white-space:nowrap}.stock-line{border:1px solid #dce4ee;padding:15px;border-radius:9px;margin:12px 0}.stock-line .panelhead{margin-bottom:12px;align-items:flex-start;flex-wrap:wrap}.stock-line small{display:block;color:#697b90;font-size:11px;margin-top:4px}.stock-line p{font-size:12px}.stock-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.stock-metrics b{display:block;font-size:19px;margin-top:6px}.stock-total{background:#edf5f0;padding:10px;border-radius:6px;font-size:12px;line-height:1.7}.stock-alert{background:#fff0da}.stock-total strong{font-size:17px}@media(max-width:650px){.stock-metrics{grid-template-columns:repeat(2,1fr)}}

.danger-button{background:#b42332;color:white;border-color:#b42332}

.zoom-controls{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:12px 0}.zoom-controls>span:last-child{font-size:12px;color:#64748b}.zoom-controls button{padding:6px 13px}.plan-gantt{width:100%}
