:root{--bg: #e8ecef;--panel: #f7f8fa;--ink: #1a2332;--muted: #5c6b7a;--line: #c5ced6;--accent: #1f6b5a;--accent-soft: #d7ebe5;--critical: #c45c48;--critical-soft: #f7e4df;--bar: #3d7ea6;--bar-progress: #1f4f6d;--summary: #2c3a4a;--header: #243447;--danger: #9b3b2f;--shadow: 0 1px 0 rgba(26, 35, 50, .06);font-family:IBM Plex Sans,Segoe UI,sans-serif;font-size:13px;color:var(--ink);background:var(--bg);line-height:1.35}*{box-sizing:border-box}html,body,#root{margin:0;height:100%}button,input{font:inherit}.app{display:grid;grid-template-rows:auto auto 1fr auto;height:100%;min-height:100vh;background:radial-gradient(1200px 500px at 10% -10%,#d9e4df 0%,transparent 55%),linear-gradient(180deg,#dfe5ea 0%,var(--bg) 40%)}.topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:.75rem 1rem;background:linear-gradient(180deg,#2a3b50 0%,var(--header) 100%);color:#f2f5f7;box-shadow:var(--shadow)}.topbar .actions{flex:1}.brand{display:flex;align-items:center;gap:.75rem;min-width:0;padding-top:.15rem}.brand-mark{display:grid;place-items:center;width:2.25rem;height:2.25rem;border-radius:.35rem;background:var(--accent);color:#fff;font-weight:700;letter-spacing:.04em}.project-title{background:transparent;border:0;color:inherit;font-size:1.05rem;font-weight:600;padding:0;width:min(420px,40vw)}.project-title:focus{outline:1px solid rgba(255,255,255,.35);border-radius:.2rem}.meta{color:#a9b7c6;font-size:.78rem}.actions{display:flex;flex-wrap:wrap;align-items:flex-start;gap:.4rem;justify-content:flex-end}.actions-leading{display:flex;align-items:flex-start;padding-top:0}.actions-main{display:flex;flex-direction:column;align-items:flex-start;gap:.4rem;min-width:0}.actions-row{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}.actions button{border:1px solid rgba(255,255,255,.16);background:#ffffff0f;color:#f2f5f7;border-radius:.3rem;padding:.35rem .65rem;cursor:pointer}.actions button:hover:not(:disabled){background:#ffffff24}.actions button:disabled{opacity:.4;cursor:not-allowed}.project-switcher{max-width:220px;border:1px solid rgba(255,255,255,.16);background:#ffffff14;color:#f2f5f7;border-radius:.3rem;padding:.35rem .5rem}.actions button.danger:hover:not(:disabled){background:#c45c4859;border-color:#c45c4899}.sep{width:1px;align-self:stretch;background:#ffffff2e;margin:0 .2rem}.banner{padding:.45rem 1rem;background:var(--critical-soft);color:var(--danger);border-bottom:1px solid #e2b7ad}.banner.info{background:var(--accent-soft);color:#1a4a3e;border-bottom:1px solid #b7d5cc}.workspace{display:grid;grid-template-columns:minmax(420px,1.05fr) minmax(360px,1fr);min-height:0;gap:0;border-top:1px solid var(--line)}.pane{min-height:0;overflow:auto;background:var(--panel)}.sheet-pane{border-right:1px solid var(--line)}.sheet table{width:100%;border-collapse:collapse;table-layout:fixed}.sheet th,.sheet td{border-bottom:1px solid var(--line);border-right:1px solid #dbe2e8;padding:0;height:28px}.sheet th{position:sticky;top:0;z-index:1;background:#eef2f5;color:var(--muted);font-weight:600;text-align:left;padding:0 .5rem;font-size:.72rem;letter-spacing:.04em;text-transform:uppercase}.sheet td input{width:100%;height:28px;border:0;background:transparent;padding:0 .5rem;color:var(--ink)}.sheet td input:focus{outline:2px solid var(--accent);outline-offset:-2px;background:#fff}.sheet tr.selected td{background:var(--accent-soft)}.sheet tr.critical:not(.summary) td.col-id{color:var(--critical);font-weight:700}.sheet tr.summary td input,.sheet tr.summary td{font-weight:650;background:#eef1f4}.sheet .muted{padding:0 .5rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-id{width:44px;text-align:center;padding:0 .25rem!important}.col-name{width:auto}.col-dur{width:56px}.col-date{width:72px;font-variant-numeric:tabular-nums;white-space:nowrap}.col-pred{width:110px}.col-pct{width:52px}.col-res{width:160px}.col-cost{width:72px;font-variant-numeric:tabular-nums;text-align:right;padding-right:.5rem!important}.col-init{width:48px}.col-type{width:88px}.col-units{width:64px}.col-rate,.col-label{width:72px}.sheet tr.overallocated td{background:#fdeceb}.sheet tr.overallocated.selected td{background:#f8d7d4}.overalloc-text{color:#b42318!important;font-weight:650}.col-flag{width:28px;text-align:center;padding:0!important}.col-peak{width:64px;text-align:right;padding-right:.5rem!important;font-variant-numeric:tabular-nums}.col-work{width:72px;text-align:right;padding-right:.5rem!important;font-variant-numeric:tabular-nums}.overalloc-icon{display:inline-flex;align-items:center;justify-content:center;color:#b42318}.hidden-pane{display:none!important}.usage-pane{flex:1 1 auto;min-width:0;overflow:hidden;grid-column:1 / -1}.usage-view,.graph-view{display:grid;grid-template-columns:minmax(220px,300px) 1fr;height:100%;min-height:100%;overflow:hidden}.usage-view.export,.graph-view.export{height:auto;overflow:visible}.usage-left,.graph-left{border-right:1px solid var(--line);background:#f7f8fa;overflow:auto}.usage-left-header,.graph-left-header{position:sticky;top:0;z-index:1;display:flex;align-items:center;justify-content:space-between;padding:0 .5rem;background:#eef2f5;color:var(--muted);font-size:.72rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;border-bottom:1px solid var(--line)}.graph-left-header{height:44px}.usage-col-work{width:64px;text-align:right}.usage-col-cost{width:88px;text-align:right}.usage-left-row{display:flex;align-items:center;gap:.25rem;padding:0 .35rem;border-bottom:1px solid #e4e9ee;font-size:.82rem;cursor:default}.usage-left-row.parent{font-weight:650;cursor:pointer}.usage-left-row.child{color:var(--muted)}.usage-left-row.selected{background:var(--accent-soft)}.usage-left-row.overallocated{background:#fdeceb}.usage-left-row.overallocated.selected{background:#f8d7d4}.usage-left-row.total{font-weight:700;background:#e8eef2;border-top:1px solid var(--line);color:var(--ink)}.usage-left-row.total .usage-work,.usage-left-row.total .usage-cost{color:var(--ink)}.usage-expand{width:1.2rem;border:0;background:transparent;color:var(--muted);cursor:pointer;padding:0;flex:0 0 auto}.usage-expand.spacer{display:inline-block;width:1.2rem}.usage-name{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.usage-work{width:64px;text-align:right;font-variant-numeric:tabular-nums;color:var(--muted);flex:0 0 auto}.usage-cost{width:88px;text-align:right;font-variant-numeric:tabular-nums;color:var(--muted);flex:0 0 auto}.usage-view.metric-cost{grid-template-columns:minmax(240px,320px) 1fr}.usage-right,.graph-right{min-width:0}.usage-row-bg{fill:transparent}.usage-row-bg.selected{fill:#1f6b5a14}.usage-row-bg.overallocated{fill:#fdeceb}.usage-row-bg.total{fill:#e8eef2}.usage-cell-text{fill:var(--ink);font-size:10px;font-family:IBM Plex Sans,Segoe UI,sans-serif}.usage-cell-text.overallocated{fill:#b42318;font-weight:700}.usage-cell-text.total{font-weight:700}.graph-resource-list{list-style:none;margin:0;padding:.35rem}.graph-resource-list button{width:100%;display:flex;align-items:center;justify-content:space-between;gap:.5rem;text-align:left;border:1px solid transparent;background:transparent;color:var(--ink);padding:.45rem .55rem;border-radius:.3rem;cursor:pointer}.graph-resource-list button:hover{background:#eef2f5}.graph-resource-list button.active{background:var(--accent-soft);border-color:#1f6b5a40;color:var(--accent);font-weight:650}.graph-resource-list button.overallocated{color:#b42318}.graph-resource-list .over-tag{font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;color:#b42318}.graph-resource-list .muted{padding:.5rem;color:var(--muted);font-size:.85rem}.graph-bar{fill:#3d7ea6}.graph-bar.over{fill:#c45c48}.graph-cap-line{stroke:#c45c48;stroke-width:1.5;stroke-dasharray:4 3}.graph-grid-line{stroke:#d7dee5;stroke-width:1}.sheet-pane-wide{flex:1 1 auto;max-width:none;border-right:none}.sheet-toolbar{display:flex;flex-wrap:wrap;gap:.35rem;padding:.4rem .5rem;border-bottom:1px solid var(--line);background:#f3f5f7}.sheet td select{width:100%;height:28px;border:0;background:transparent;padding:0 .35rem;color:var(--ink)}.view-toggle{display:inline-flex;border:1px solid var(--line);background:#fff}.view-toggle button{border:0;border-radius:0;background:transparent;padding:.35rem .7rem;color:#4a5560}.view-toggle button:hover:not(:disabled){background:#f0f3f5;color:#2c353f}.view-toggle button.active{background:var(--accent-soft);color:var(--accent);font-weight:650}.gantt-resource-label{fill:#3a4654;font-size:10px;font-family:IBM Plex Sans,Segoe UI,sans-serif;pointer-events:none}.assignment-picker{width:min(560px,100%)}.modal-body{margin-top:.75rem}.modal-footer{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1rem}.picker-table{width:100%;border-collapse:collapse;font-size:.85rem;background:#fff;border:1px solid var(--line)}.picker-table th,.picker-table td{text-align:left;padding:.4rem .55rem;border-bottom:1px solid var(--line)}.picker-table th{background:#eef2f5;font-size:.72rem;text-transform:uppercase;color:var(--muted)}.picker-table input[type=number]{width:4.5rem;margin-right:.35rem}.picker-table .unit-suffix{color:var(--muted);font-size:.8rem}.picker-table tr.overallocated td{background:#fdeceb}.modal-footer .primary{background:var(--accent);color:#fff;border-color:var(--accent)}.gantt{height:100%;min-height:100%;overflow:auto;padding-bottom:1.5rem}.gantt-pane{overflow:hidden}.gantt-bg{fill:#f7f8fa}.gantt-header-bg{fill:#eef2f5}.gantt-header-div{stroke:#d0d8e0;stroke-width:1}.gantt-weekend{fill:#eef1f4}.gantt-grid{stroke:#d7dee5;stroke-width:1}.gantt-axis{stroke:var(--line);stroke-width:1}.gantt-tick{fill:var(--muted);font-size:10px}.gantt-tick-top{font-weight:600;font-size:10px}.gantt-today{stroke:#c45c48;stroke-width:1.5;stroke-dasharray:4 3}.gantt-row{fill:transparent}.gantt-row.selected{fill:#1f6b5a14}.bar{fill:var(--bar)}.bar.critical{fill:var(--critical)}.bar.summary{fill:var(--summary);height:10px}.bar.selected{stroke:#0f1720;stroke-width:1.5}.bar-progress{fill:var(--bar-progress);opacity:.85}.milestone{fill:var(--bar);stroke:#1a2332;stroke-width:1}.milestone.critical{fill:var(--critical)}.milestone.selected{stroke:#0f1720;stroke-width:1.75}.dep{stroke:#6b7c8c;stroke-width:1.25}.dep.critical{stroke:var(--critical)}.dep-arrow{fill:#6b7c8c}.gantt-caption{position:sticky;bottom:0;padding:.35rem .75rem;color:var(--muted);background:#f7f8faeb;border-top:1px solid var(--line);font-size:.75rem}.scale-menu{position:relative;flex-shrink:0}.scale-trigger{display:inline-flex;align-items:center;gap:.4rem}.scale-trigger-value{opacity:.85;font-weight:600}.scale-caret{font-size:.7rem;opacity:.75}.scale-dropdown{position:absolute;top:calc(100% + .35rem);left:0;z-index:50;min-width:140px;background:#f7f8fa;border:1px solid var(--line);box-shadow:0 14px 32px #0f172047;color:var(--ink);padding:.3rem 0}.scale-dropdown button{display:flex;align-items:center;gap:.45rem;width:100%;text-align:left;border:0!important;border-radius:0!important;background:transparent;color:var(--ink);padding:.45rem .75rem;cursor:pointer}.scale-dropdown button:hover{background:#e8eef2}.scale-dropdown button.selected{font-weight:600}.scale-tick{display:inline-block;width:.9rem;color:var(--accent);font-weight:700}.scale-fit-item{border-top:1px solid var(--line)!important;margin-top:.2rem}.statusbar{display:flex;justify-content:space-between;gap:1rem;padding:.35rem 1rem;background:#dfe5ea;border-top:1px solid var(--line);color:var(--muted);font-size:.75rem}.statusbar code{font-family:IBM Plex Mono,ui-monospace,monospace;background:#ffffff8c;padding:.05rem .25rem;border-radius:.2rem}.user-chip{font-size:.8rem;color:#c9d4df;white-space:nowrap;max-width:16rem;overflow:hidden;text-overflow:ellipsis}.profile-menu{position:relative;flex-shrink:0}.profile-trigger{display:inline-flex;align-items:center;gap:.45rem;border:1px solid rgba(255,255,255,.18);background:#ffffff14;color:#f2f5f7;border-radius:999px;padding:.2rem .65rem .2rem .2rem;cursor:pointer}.profile-trigger:hover{background:#ffffff29}.profile-avatar{display:grid;place-items:center;width:1.7rem;height:1.7rem;border-radius:999px;background:var(--accent);color:#fff;font-weight:700;font-size:.8rem}.profile-firstname{font-size:.85rem;font-weight:600;padding-right:.15rem}.profile-dropdown{position:absolute;top:calc(100% + .4rem);right:0;z-index:50;min-width:220px;background:#f7f8fa;border:1px solid var(--line);box-shadow:0 14px 32px #0f172047;color:var(--ink);padding:.35rem 0}.profile-dropdown-head{padding:.55rem .85rem .65rem;border-bottom:1px solid var(--line);margin-bottom:.25rem}.profile-dropdown-name{font-weight:600;font-size:.9rem}.profile-dropdown-meta{color:var(--muted);font-size:.75rem;margin-top:.15rem}.profile-dropdown button{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--ink);padding:.5rem .85rem;cursor:pointer;border-radius:0}.profile-dropdown button:hover{background:#e8eef2}.profile-dropdown .profile-logout{border-top:1px solid var(--line);margin-top:.25rem;color:var(--danger)}.modal-panel-sm{width:min(420px,100%)}.login-page{min-height:100vh;display:grid;place-items:center;padding:1.5rem;background:radial-gradient(900px 420px at 15% 0%,#d9e4df 0%,transparent 55%),linear-gradient(165deg,#2a3b50,#1a2332 45%,#243447)}.boot-msg{color:#e8eef3;font-size:1rem}.login-card{width:min(420px,100%);display:grid;gap:.85rem;padding:1.5rem;background:#f7f8fa;border:1px solid #c5ced6;box-shadow:0 18px 40px #0f172047}.login-brand{display:flex;align-items:center;gap:.85rem;margin-bottom:.35rem}.login-brand h1{margin:0;font-size:1.25rem;color:var(--ink)}.login-brand p{margin:.15rem 0 0;color:var(--muted);font-size:.85rem}.login-card label{display:grid;gap:.3rem;font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.login-card input{border:1px solid var(--line);background:#fff;padding:.55rem .65rem;color:var(--ink);text-transform:none;letter-spacing:normal;font-size:.95rem}.login-submit{margin-top:.25rem;border:0;background:var(--accent);color:#fff;padding:.65rem .85rem;font-weight:600;cursor:pointer}.login-submit:disabled{opacity:.65;cursor:wait}.login-error{margin:0;color:var(--danger);font-size:.85rem}.login-roles{margin-top:.35rem;padding-top:.75rem;border-top:1px solid var(--line);color:var(--muted);font-size:.8rem}.login-roles p{margin:.2rem 0}.login-hint{margin-top:.55rem!important;font-size:.75rem;opacity:.9}.modal-backdrop{position:fixed;inset:0;z-index:40;display:grid;place-items:center;padding:1rem;background:#0f17208c}.modal-panel{width:min(640px,100%);max-height:min(90vh,820px);overflow:auto;background:#f7f8fa;border:1px solid var(--line);box-shadow:0 22px 48px #0f172059;padding:1.1rem 1.25rem 1.35rem}.modal-header{display:flex;align-items:center;justify-content:space-between;gap:1rem}.modal-header h2{margin:0;font-size:1.15rem}.modal-close{border:1px solid var(--line);background:#fff;padding:.35rem .65rem;cursor:pointer}.modal-lead{margin:.55rem 0 .9rem;color:var(--muted);font-size:.85rem}.settings-section-title{margin:1rem 0 .45rem;font-size:.78rem;font-weight:650;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.settings-check{display:flex;align-items:center;gap:.55rem;text-transform:none;letter-spacing:normal;font-size:.9rem;color:var(--ink)}.settings-check input[type=checkbox]{width:auto;margin:0}.settings-derived{margin:.35rem 0 .75rem;font-size:.85rem;color:var(--muted)}.users-table-wrap{border:1px solid var(--line);background:#fff;max-height:220px;overflow:auto}.users-table{width:100%;border-collapse:collapse;font-size:.85rem}.users-table th,.users-table td{text-align:left;padding:.45rem .6rem;border-bottom:1px solid var(--line)}.users-table th{background:#eef2f5;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.role-badge{display:inline-block;padding:.1rem .4rem;font-size:.75rem;background:var(--accent-soft);color:var(--accent)}.role-badge.role-project_manager{background:#dfe8f5;color:#1f4f6d}.role-badge.role-board_member{background:#efe6d8;color:#6b4f2a}.users-form{margin-top:1rem;display:grid;gap:.65rem}.users-form h3{margin:0;font-size:.95rem}.users-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:.65rem}.users-form label{display:grid;gap:.25rem;font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.users-form input,.users-form select{border:1px solid var(--line);background:#fff;padding:.45rem .55rem;color:var(--ink);text-transform:none;letter-spacing:normal;font-size:.9rem}.form-success{margin:0;color:var(--accent);font-size:.85rem}@media(max-width:640px){.users-form-grid{grid-template-columns:1fr}}@media(max-width:960px){.workspace{grid-template-columns:1fr;grid-template-rows:1fr 1fr}.sheet-pane{border-right:0;border-bottom:1px solid var(--line)}}
