:root{--navy:#0b1f3a;--navy2:#13305a;--gold:#c9a227;--gold2:#e8c860;--line:#e3e7ee;--crit:#c0392b}*{box-sizing:border-box}body,html{margin:0;height:100%;font:13px/1.3 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:#1b2430}.app{display:flex;flex-direction:column;height:100vh;height:100dvh}.top{background:var(--navy);color:#fff;flex-wrap:wrap;gap:6px 16px;padding:8px 12px;border-bottom:3px solid var(--gold)}.brand,.top{display:flex;align-items:center}.brand{font-weight:700;color:var(--gold);gap:8px;font-size:15px}.logo{width:14px;height:14px;background:var(--gold);border-radius:3px}.pname{flex:1 1;min-width:140px;opacity:.9}.stats{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.stats b{color:var(--gold2)}.stats button{background:var(--gold);color:var(--navy);border:0;border-radius:4px;padding:4px 10px;font-weight:600;cursor:pointer}.err{background:#fde8e8;color:var(--crit);padding:6px 12px}.main{flex:1 1;display:flex;min-height:0}.grid{width:560px;flex:none;overflow:auto;border-right:2px solid var(--navy)}.row{display:flex;height:26px;align-items:center;border-bottom:1px solid var(--line);white-space:nowrap;cursor:pointer}.row span{padding:0 6px;overflow:hidden;text-overflow:ellipsis}.row.sel{background:#fff6d8}.row.crit .c-id{color:var(--crit);font-weight:600}.ghead{position:-webkit-sticky;position:sticky;top:0;background:var(--navy2);color:#fff;font-weight:600;z-index:2;height:30px}.c-id{width:56px;flex:none}.c-name{flex:1 1;min-width:120px}.c-n{width:40px;flex:none;text-align:right}.c-d{width:86px;flex:none}.gantt{flex:1 1;overflow:auto;position:relative;touch-action:none}.scale{position:-webkit-sticky;position:sticky;top:0;height:30px;background:var(--navy2);color:#fff;z-index:2}.scale span{position:absolute;top:8px;padding-left:4px;font-size:11px;border-left:1px solid #fff4;height:22px}.bars{position:relative}.vline{top:0;bottom:0;border-left:1px solid var(--line)}.brow,.vline{position:absolute}.brow{left:0;right:0;height:26px;border-bottom:1px solid #f2f4f8}.bar{position:absolute;top:6px;height:14px;background:var(--navy);border-radius:3px;cursor:-webkit-grab;cursor:grab}.bar.crit{background:var(--crit)}.bar.sel{outline:2px solid var(--gold)}.base{top:20px;height:4px;opacity:.7;border-radius:2px}.base,.grip{position:absolute;background:var(--gold)}.grip{right:-3px;top:0;width:8px;height:14px;cursor:ew-resize;border-radius:0 3px 3px 0}.ms{position:absolute;top:7px;width:12px;height:12px;background:var(--gold);transform:rotate(45deg);cursor:-webkit-grab;cursor:grab}.ms.crit{background:var(--crit)}.detail{height:200px;flex:none;overflow:auto;border-top:3px solid var(--gold);background:#f7f8fb;padding:8px 12px}.dhead{font-size:14px;margin-bottom:6px;color:var(--navy)}.tag{background:var(--crit);color:#fff;font-style:normal;border-radius:3px;padding:1px 6px;font-size:11px}.dgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));grid-gap:8px;gap:8px}.dgrid small{color:#667}.dgrid input{width:100%;padding:3px;border:1px solid #c8cfdb;border-radius:3px}.hint{color:#667}@media (max-width:640px){.span2{grid-column:span 1}.grid{width:45%}.c-d,.c-n{display:none}.c-name{min-width:60px}.hide-sm{display:none}.detail{height:150px}.pname{display:none}}@media print{.detail,.stats button{display:none}.app{height:auto}.gantt,.grid{overflow:visible}}.signin{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--navy);padding:16px}.card{background:#fff;border-top:4px solid var(--gold);border-radius:8px;padding:24px;max-width:400px;width:100%}.card .brand{color:var(--navy);margin-bottom:8px}.card input{width:100%;padding:10px;font-size:16px;border:1px solid #c8cfdb;border-radius:4px;margin:8px 0}.card button{width:100%;padding:10px;background:var(--navy);color:var(--gold2);border:0;border-radius:4px;font-weight:600;font-size:15px;cursor:pointer}.note{color:#334}.devlink{display:block;margin-top:8px;color:var(--navy);font-weight:600}.plist{padding-left:18px}.saved{background:#1e8e3e;color:#fff;padding:3px 10px;font-weight:700}.dirty,.saved{border-radius:4px}.dirty{background:#fff3cd;color:#7a5b00;padding:3px 8px}.ro{background:#ffffff22;border:1px solid var(--gold);color:var(--gold2);border-radius:4px;padding:2px 8px}.stats .ghost{background:transparent;color:#fff;border:1px solid #fff6}.share{background:#fff;border-bottom:2px solid var(--gold);padding:8px 12px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}.share input,.share select{padding:5px;border:1px solid #c8cfdb;border-radius:3px}.share button{background:var(--navy);color:#fff;border:0;border-radius:3px;padding:5px 10px}.links{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.chip{background:#e8edf5;border-radius:3px;padding:1px 6px}.chip button{border:0;background:none;color:var(--crit);cursor:pointer}.span2{grid-column:span 2;min-width:0}.addl{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.addl input{width:70px!important}.dgrid .addl select{width:auto}.addl button{background:var(--navy);color:#fff;border:0;border-radius:3px;padding:3px 10px;cursor:pointer}.dgrid select{width:100%;padding:3px;border:1px solid #c8cfdb;border-radius:3px}.notice{background:#e8f0fe;color:var(--navy);padding:4px 12px}.toolbar{flex-wrap:wrap;gap:6px 12px;padding:6px 12px;background:#f2f4f8;border-bottom:1px solid var(--line);color:var(--navy)}.toolbar,.toolbar label{display:flex;align-items:center}.toolbar label{gap:4px;font-weight:600}.toolbar input[type=date],.toolbar select{padding:3px;border:1px solid #c8cfdb;border-radius:3px;font:inherit}.toolbar .count b{color:var(--navy)}.toolbar .sp{flex:1 1}.toolbar .chk{font-weight:400}.btn{background:var(--navy);color:#fff!important;border:0;border-radius:4px;padding:4px 10px;font-weight:600;cursor:pointer;text-decoration:none;display:inline-block}.btn.ghost{background:#fff;color:var(--navy)!important;border:1px solid var(--navy)}.err ul{margin:4px 0 0 18px;padding:0}.err .x,.notice .x{float:right;border:0;background:none;font-size:16px;cursor:pointer}@media (max-width:640px){.toolbar{gap:4px 8px;font-size:12px}.toolbar .sp{display:none}}.gantt .lawin{position:absolute;top:0;bottom:0;background:rgba(201,162,39,.1);border-left:2px solid #c9a227;border-right:1px dashed #c9a227;pointer-events:none}.billbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:6px 12px;background:#fff8e6;border-bottom:1px solid #c9a227;color:#0b1f3a;font-size:13px}.billbar.locked{background:#fdecea;border-color:#b3261e}.billbar button{padding:4px 10px}.divider{flex:none;touch-action:none;width:0;position:relative;z-index:3}.divider:before{content:"";position:absolute;top:0;bottom:0;left:-6px;width:12px;cursor:col-resize;touch-action:none}.row.sum .c-name{font-weight:700}.tog{border:0;background:none;padding:0 4px 0 0;cursor:pointer;color:var(--navy);font:inherit}.sumbar{position:absolute;top:8px;height:5px;background:var(--navy)}.sumbar:after,.sumbar:before{content:"";position:absolute;top:0;width:0;height:0;border-top:7px solid var(--navy);border-left:4px solid transparent;border-right:4px solid transparent}.sumbar:before{left:-4px}.sumbar:after{right:-4px}.toolbar.edit{padding:4px 12px}.toolbar button:disabled{opacity:.45;cursor:default}.jobp{background:#fff;border-bottom:2px solid var(--gold);padding:8px 12px;max-height:45vh;overflow:auto}.jobp h3{margin:0 0 6px;color:var(--navy);font-size:14px}.jobp .dgrid label{display:flex;flex-direction:column;font-weight:600;color:var(--navy)}.jobp .kpi b{color:var(--navy)}.jobp .help{cursor:help;border:1px solid var(--navy);border-radius:50%;padding:0 5px;font-size:11px}.dl{border-collapse:collapse;width:100%;font-size:12px}.dl th{background:var(--navy2);color:#fff;text-align:left;padding:3px}.dl td{border-bottom:1px solid var(--line);padding:2px}.dl input,.dl select{width:100%;padding:2px;border:1px solid #c8cfdb;border-radius:3px}.jobline{opacity:.85;font-size:11px}.dband{position:absolute;top:0;bottom:0;border-left:1px dashed;border-right:1px dashed;pointer-events:none;z-index:1}.dband span{position:-webkit-sticky;position:sticky;top:0;display:inline-block;font-size:10px;font-weight:700;background:#fffd;padding:0 3px}.dband span,.drow{pointer-events:auto}.drow{height:7px;border:1px solid;z-index:3}.drow,.drow span{position:absolute}.drow span{left:100%;top:-5px;margin-left:3px;font-size:10px;font-weight:700;white-space:nowrap;background:#fffd;padding:0 2px}.dlegend{display:flex;gap:12px;align-items:center;flex-wrap:wrap;font-size:12px;padding:3px 10px;border-bottom:1px solid var(--line)}.dlegend i{display:inline-block;width:18px;height:9px;margin-right:4px;vertical-align:middle;border:1px solid #0002}.ghead .ch{position:relative;overflow:visible}.colrs{position:absolute;top:0;right:-5px;width:10px;height:100%;cursor:col-resize;touch-action:none;z-index:3}.colrs:after{content:"";position:absolute;left:4px;top:5px;bottom:5px;width:2px;background:rgba(255,255,255,.35);border-radius:1px}.colrs:active:after,.colrs:hover:after{background:#f0c040;top:0;bottom:0}@media (pointer:coarse){.colrs{width:16px;right:-8px}.colrs:after{left:7px}}.tabs{display:flex;gap:4px;margin:4px 0 8px;border-bottom:1px solid var(--line)}.tabs button{border:1px solid var(--line);border-bottom:0;background:#f3f5f8;padding:5px 12px;border-radius:6px 6px 0 0;cursor:pointer;font:inherit}.tabs button.on{background:#fff;font-weight:700;color:var(--navy)}.lists input{width:100%;min-width:70px}.row-add{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}.row-add input{flex:1 1;min-width:110px}.ghead span{background:var(--navy2)}.sumbar{background:#111}.sumbar:after,.sumbar:before{border-top-color:#111}.sumbar.crit{background:var(--crit)}.sumbar.crit:after,.sumbar.crit:before{border-top-color:var(--crit)}.ldot{position:absolute;top:2px;width:10px;height:10px;border-radius:50%;background:#fff;border:2px solid var(--navy);opacity:0;cursor:crosshair;touch-action:none;z-index:4;box-sizing:border-box}.ldot.s{left:-12px}.ldot.f{right:-12px}.bar.sel .ldot,.brow:hover .ldot,.mswrap.sel .ldot{opacity:1}.ldot:hover{background:#f0c040}.mswrap{position:absolute;top:0;width:12px;height:26px}.mswrap .ms{left:0}.mswrap .ldot{top:8px}.mswrap .ldot.s{left:-14px}.mswrap .ldot.f{right:-14px}.sublbl{top:6px;font-size:10px;line-height:14px;color:#7a8494;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.band,.sublbl{position:absolute;pointer-events:none}.band{left:0;top:0;z-index:6}.band line{stroke:#d08b00;stroke-width:2;stroke-dasharray:5 3}.band circle{fill:#d08b00}.ctxmenu{position:fixed;z-index:50;background:#fff;border:1px solid #ccd3de;border-radius:6px;box-shadow:0 6px 20px rgba(0,0,0,.18);padding:4px;min-width:170px;display:flex;flex-direction:column}.ctxmenu button{border:0;background:none;text-align:left;padding:8px 12px;font:inherit;cursor:pointer;border-radius:4px}.ctxmenu button:hover{background:#eef2f8}.ctxh{font-size:11px;color:#667;padding:4px 12px}.toast{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:60;background:#1e3a5f;color:#fff;padding:9px 14px;border-radius:6px;display:flex;gap:12px;align-items:center;box-shadow:0 4px 14px rgba(0,0,0,.25);max-width:92vw}.toast.bad{background:#a32020}.toast button{background:none;border:1px solid rgba(255,255,255,.6);color:#fff;border-radius:4px;padding:2px 10px;cursor:pointer;font:inherit}.toast .x{border:0;font-size:16px;padding:0 2px}.grid:focus{outline:none}.grid:focus-visible{outline:2px solid #f0c040;outline-offset:-2px}button.pd-save,button.pd-save:disabled{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:0 20px;border:0;border-radius:12px;font-size:14px;line-height:20px;font-weight:700;text-transform:uppercase;letter-spacing:.025em;color:#fff;opacity:1;cursor:pointer}button.pd-save:active{transform:scale(.99)}button.pd-save.sow-wait{background:color-mix(in srgb,#9b2f2a 88%,#3a1010)}button.pd-save.sow-yes{background:color-mix(in srgb,#1e6b4a 92%,#0b3d24);box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 8px 18px -12px rgba(11,92,46,.55);cursor:default}