.civil-gantt{min-width:0;font-size:12px}.cg-toolbar{display:flex;gap:6px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin:6px 0}.cg-basis{font-size:11px;color:var(--sk-ink-2)}.cg-zoom{display:flex;gap:2px}.cg-zoom .sk-btn{padding:2px 7px;font-size:11px;min-height:30px}.cg-zoom [aria-pressed=true]{background:var(--sk-select-weak);color:var(--sk-select)}.cg-legend{display:flex;gap:10px;flex-wrap:wrap;font-size:10px;margin:6px 0}.cg-legend span:before{content:'';display:inline-block;width:16px;height:6px;margin-inline-end:4px;background:var(--sk-select)}.cg-legend .cg-key-critical:before{background:var(--sk-accent)}.cg-legend .cg-key-progress:before{background:var(--sk-ink)}.cg-legend .cg-key-buffer:before{background:repeating-linear-gradient(135deg,var(--sk-hatch),var(--sk-hatch) 1px,var(--sk-sheet) 1px,var(--sk-sheet) 4px)}.cg-notice{font-size:11px;color:var(--sk-warn);margin:4px 0}.cg-scroll{overflow:auto;max-width:100%;max-height:65dvh;border:1px solid var(--sk-line);background:var(--sk-sheet);direction:ltr;overscroll-behavior-x:contain}.cg-grid-wrap{display:flex;flex-direction:column;width:max-content;min-width:100%;direction:ltr}.cg-head-row{position:sticky;top:0;z-index:4;display:flex;align-items:flex-start;background:var(--sk-sunk)}.cg-timeline-head{display:block;flex-shrink:0;background:var(--sk-sunk)}.cg-grid{display:flex;align-items:flex-start;direction:ltr}.cg-table{position:sticky;left:0;z-index:2;width:230px;flex:0 0 230px;background:var(--sk-sheet);box-shadow:2px 0 0 var(--sk-line)}.cg-table-head{position:sticky;left:0;z-index:2;width:230px;flex:0 0 230px;height:46px;padding:5px 8px;box-sizing:border-box;background:var(--sk-sunk);display:flex;flex-direction:column;justify-content:center;border-bottom:1px solid var(--sk-line);font-size:11px}.cg-table-head span{font-size:10px;color:var(--sk-ink-3)}.cg-name{height:42px;box-sizing:border-box;padding:2px 6px;border-bottom:1px solid var(--sk-line);display:flex;flex-direction:column;justify-content:center;overflow:hidden}.civil-gantt[dir=rtl] .cg-table,.civil-gantt[dir=rtl] .cg-table-head{direction:rtl}.cg-name button{font:inherit;color:inherit;border:0;background:none;display:flex;gap:4px;align-items:center;width:100%;padding:0;text-align:start;min-height:23px;cursor:pointer}.cg-name button span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.cg-name small{font-size:10px;color:var(--sk-ink-3);line-height:12px;white-space:nowrap}.cg-project{font-weight:700;background:var(--sk-sunk)}.cg-task{font-weight:600;padding-inline-start:15px}.cg-node{padding-inline-start:27px}.cg-name button:focus-visible{outline:2px solid var(--sk-select);outline-offset:-2px}.cg-timeline{display:block;flex-shrink:0;overflow:visible;background:var(--sk-sheet);font-family:var(--sk-font);direction:ltr}.cg-head-fill{fill:var(--sk-sunk)}.cg-group-fill{fill:var(--sk-grid-minor)}.cg-grid-line,.cg-row-line{fill:none;stroke:var(--sk-line);stroke-width:1}.cg-tick{fill:var(--sk-ink-2);font-size:10px;text-anchor:start;direction:ltr}.cg-bar{fill:var(--sk-select);stroke:var(--sk-select);stroke-width:1}.cg-bar.cg-critical{fill:var(--sk-accent);stroke:var(--sk-accent)}.cg-estimated{stroke-dasharray:4 2;fill-opacity:.55}.cg-summary-bar{fill:var(--sk-ink)}.cg-summary-bar.cg-critical{fill:var(--sk-accent)}.cg-progress{fill:var(--sk-ink)}.cg-buffer{stroke:var(--sk-line-strong);stroke-width:.5}.cg-hatch{fill:none;stroke:var(--sk-sheet);stroke-width:2}.cg-dependency{fill:none;stroke:var(--sk-ink-3);stroke-width:1.2}.cg-critical-link{stroke:var(--sk-accent)}.cg-arrowhead{fill:var(--sk-ink-3)}.cg-unscheduled{font-size:10px;fill:var(--sk-ink-3)}.cg-now{stroke:var(--sk-ok);stroke-width:1.5;stroke-dasharray:3 3}.cg-now-label{fill:var(--sk-ok);font-size:10px}.cg-help{display:block;font-size:10px;color:var(--sk-ink-3);margin-top:5px}.cg-details{margin-top:6px}.cg-details:empty{display:none}.cg-details>b{display:block;margin:4px 0}.cg-details dl{display:grid;grid-template-columns:max-content 1fr;gap:3px 10px;margin:5px 0}.cg-details dd{margin:0;overflow-wrap:anywhere}.cg-details dt{color:var(--sk-ink-3)}@media(max-width:600px){.cg-table,.cg-table-head{width:138px;flex-basis:138px}.cg-name{font-size:11px}.cg-task{padding-inline-start:9px}.cg-node{padding-inline-start:17px}.cg-zoom .sk-btn{min-height:40px;min-width:40px}.cg-scroll{max-height:60dvh}.cg-name button{min-height:26px}}
.civil-gantt .cg-name{position:relative}.civil-gantt .cg-name button{position:absolute;inset:0;min-height:40px;padding:0 6px 13px;box-sizing:border-box}.civil-gantt .cg-task button{padding-inline-start:15px}.civil-gantt .cg-node button{padding-inline-start:27px}.civil-gantt .cg-name small{position:absolute;bottom:2px;inset-inline-start:6px;pointer-events:none}
.cg-date{fill:var(--sk-ink-3);font-size:9px;text-anchor:start;direction:ltr}.cg-tick{font-size:12px;font-weight:600}.cg-name small{max-width:calc(100% - 12px);overflow:hidden;text-overflow:ellipsis}
/* Gil 03.10: micro is 2.5 times denser than the former smallest (now Small). */
.cg-density-micro{--cg-row-height:3.1875px}.cg-density-compact{--cg-row-height:8px}.cg-density-medium{--cg-row-height:22px}.cg-density-large{--cg-row-height:42px}
.gantt-primary{margin:0 0 12px;border:0;padding:0}.gantt-primary>summary,.cg-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip-path:inset(50%);white-space:nowrap;border:0!important}
.civil-gantt .cg-name{height:var(--cg-row-height);border-bottom:0}
.civil-gantt .cg-row-line{stroke:none}
.cg-static-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.civil-gantt .cg-toolbar{flex-wrap:nowrap;margin:2px 0 4px;gap:4px}
.cg-density-control{margin:0;min-width:0}.cg-density-control .sk-select{min-width:0;width:auto;height:40px;padding-inline:5px 22px;font-size:11px}
.cg-toolbar .cg-zoom .sk-btn,.cg-refresh{height:40px;min-height:40px;min-width:40px;padding:2px 5px}
.cg-toolbar .cg-zoom{gap:0}.cg-refresh{margin-inline-start:auto}
.civil-gantt.cg-density-compact .cg-name{font-size:7px;line-height:8px;padding-block:0}
.civil-gantt.cg-density-medium .cg-name{font-size:11px;line-height:13px;padding-block:0}
.cg-density-compact .cg-name small{display:none}
/* Gil 04.10: medium (22px) has room for the status+estimate+ETA line -
   only compact/micro stay symbolic-only (text too small to read there).
   Label line-height (13px) + this line (9px) sum to exactly the 22px row
   so nothing overflows or gets clipped by .cg-name's overflow:hidden. */
.cg-density-medium .cg-name small{font-size:8px;line-height:9px;position:static;max-width:none;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cg-density-compact .cg-unscheduled{font-size:6px}
.cg-density-compact .cg-dependency{stroke-width:.6;opacity:.45}
.cg-density-medium .cg-dependency{stroke-width:.8}
.cg-density-compact .cg-grid-line{stroke-width:.4}
.cg-density-compact .cg-bar{stroke-width:.4}
.gantt-primary .cg-scroll{max-height:65dvh}
.civil-gantt.cg-density-micro .cg-name{font-size:3px;line-height:3.1875px;padding-block:0}
.cg-density-micro .cg-name small,.cg-density-micro .cg-unscheduled{display:none}
.cg-density-micro .cg-dependency{stroke-width:.25;opacity:.4}.cg-density-micro .cg-grid-line{stroke-width:.25}.cg-density-micro .cg-bar{stroke-width:.2}
.cg-execution-banner{display:grid;gap:2px;padding:6px 8px;margin-bottom:5px;background:var(--sk-sunk);border-inline-start:3px solid var(--sk-line-strong);font-size:12px;line-height:1.4;color:var(--sk-ink)}
.cg-execution-banner strong{font-size:13px}.cg-execution-banner span{color:var(--sk-ink-2)}
.cg-execution-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}.cg-execution-heading .sk-btn{min-height:40px;padding:3px 8px;font-size:12px}
.cg-bar.cg-planned{fill:var(--sk-ink-3);stroke:var(--sk-ink-3);fill-opacity:.3;stroke-dasharray:3 2}
.cg-bar.cg-planned.cg-critical{fill:var(--sk-accent);stroke:var(--sk-accent);fill-opacity:.3}
.cg-bar.cg-running{fill:var(--sk-ok);stroke:var(--sk-ok);fill-opacity:1;stroke-dasharray:none}
.cg-bar.cg-paused{fill:var(--sk-ink-3);stroke:var(--sk-ink-3);fill-opacity:.35;stroke-dasharray:3 2}
/* Gil 04.10 22:40: running pulses gently (fast), a paused mid-run pulses
   slowly on grey - opacity only, so nothing shifts layout. Respects
   prefers-reduced-motion: without it the colour/dash difference alone is
   the (static) indicator. */
@media (prefers-reduced-motion:no-preference){
 .cg-bar.cg-running{animation:cg-pulse-run 1.6s ease-in-out infinite}
 .cg-bar.cg-paused{animation:cg-pulse-pause 3.2s ease-in-out infinite}
}
@keyframes cg-pulse-run{0%,100%{opacity:1}50%{opacity:.55}}
@keyframes cg-pulse-pause{0%,100%{opacity:.35}50%{opacity:.6}}
.cg-legend .cg-key-work:before{background:var(--sk-ink-3);opacity:.45}.cg-legend .cg-key-running:before{background:var(--sk-ok)}.cg-legend .cg-key-delay:before{background:var(--sk-warn-weak);border:1px solid var(--sk-warn)}
.cg-view-choice{display:flex;gap:4px}.cg-view-choice .sk-btn{min-height:40px;font-size:12px;padding:3px 8px}.cg-view-choice [aria-pressed=true]{background:var(--sk-select-weak);color:var(--sk-select)}
.cg-late-notice{color:var(--sk-warn);cursor:help;text-decoration:underline dotted}.cg-bar.cg-late{stroke:var(--sk-warn);fill:var(--sk-warn);stroke-dasharray:2 2;fill-opacity:.4}.cg-no-slots{font-size:12px;fill:var(--sk-ink-2)}
/* Gil 04.10 23:xx: the primary bar now IS the live-forecast position; this
   is a faint amber ghost of the ORIGINAL planned slot, shown only when the
   forecast moved the bar away from it - distinct from the "late" overlay
   on the bar itself. */
.cg-delay{fill:var(--sk-warn-weak);stroke:var(--sk-warn);stroke-width:1;stroke-dasharray:1 1}
.cg-live-work{display:grid;gap:3px;margin:4px 0 6px;padding:8px;background:var(--sk-sheet);border:1px solid var(--sk-line);font-size:13px;line-height:1.4;overflow-wrap:anywhere}.cg-live-work>strong{font-size:14px}.cg-live-item{display:grid;gap:2px}.cg-live-item small{font-size:11px;color:var(--sk-ink-2)}.cg-density-large .cg-live-work[data-has-active=false]{display:none}
.cg-peek-help{font-size:12px;line-height:1.4;color:var(--sk-ink-2);margin:4px 0}.cg-density-large .cg-peek-help{display:none}.cg-selected:empty{display:none}.cg-selected{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;margin:4px 0;border:1px solid var(--sk-select);font-size:13px;line-height:1.4}.cg-selected>div{display:grid;gap:3px;min-width:0;overflow-wrap:anywhere}.cg-selected .sk-btn{flex-shrink:0;min-height:40px}
.cg-density-micro .cg-static-label{font-size:0;line-height:0;height:100%;width:100%;min-height:1px;background:linear-gradient(to right,var(--sk-line-strong) 0 35%,transparent 35%);cursor:pointer}.cg-density-micro .cg-project .cg-static-label{background:var(--sk-ink-2)}.cg-density-micro .cg-task .cg-static-label{background:linear-gradient(to right,var(--sk-ink-3) 0 65%,transparent 65%)}.cg-density-micro .cg-name{padding-inline:4px}.cg-static-label[data-cg-peek]:hover{background-color:var(--sk-select-weak)}
/* Round 4 (Gil 05.10): a step waiting for a person is grey and hatched, never drawn as if starting now. */
.cg-bar.cg-awaiting{fill:var(--sk-ink-3);fill-opacity:.2;stroke:var(--sk-warn);stroke-dasharray:4 2;animation:none}
.cg-bar.cg-awaiting.cg-awaiting-after{stroke:var(--sk-ink-3);fill-opacity:.1;stroke-dasharray:2 3}
.cg-bar.cg-planned.cg-awaiting.cg-critical{fill:var(--sk-ink-3);fill-opacity:.2;stroke:var(--sk-warn)}
.cg-await-hatch{pointer-events:none;opacity:.85}
.cg-legend .cg-key-await:before{background:repeating-linear-gradient(135deg,var(--sk-ink-3),var(--sk-ink-3) 1px,var(--sk-sheet) 1px,var(--sk-sheet) 4px);border:1px dashed var(--sk-warn)}
