@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-BJItruJi.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-C1SKuNhx.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-400-normal-BPWuI_CM.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-400-normal-CTUnhTqV.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-greek-400-normal-n6oPB5VF.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-400-normal-DSasf_jt.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-vietnamese-400-normal-B97dYap6.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-400-normal-OKGpH0gQ.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-ext-400-normal-BHf956ki.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-400-normal-CyDjbWPV.woff) format("woff");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-400-normal-CdZtFfYS.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-400-normal-BU83cd9M.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cfrm0EKX.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-DujcQJCN.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-500-normal-D1zm99-P.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-500-normal-BEypoZQd.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-greek-500-normal-By04ZBDJ.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-500-normal-BwBTeJfm.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-vietnamese-500-normal-rpgY82Kd.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-500-normal-V_-bWxzT.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-ext-500-normal-DprGrCew.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-500-normal-CgrnmiIU.woff) format("woff");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-500-normal-BFLYOLbL.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-500-normal-Dh0NORqx.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-jBHiQjEG.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-CJ5MtzOJ.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-600-normal-DM9A4i1K.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-600-normal-BuRiwhxF.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-greek-600-normal-FZrtz_q-.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-600-normal-BJUfoJTU.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-vietnamese-600-normal-DHNi5J5O.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-600-normal-D03elqKW.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-ext-600-normal-dAZVOL-H.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-600-normal-bp4QDljZ.woff) format("woff");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-600-normal-BGOKnPO6.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-600-normal-ZykYOGKL.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-B3hZxag_.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-ZyMXPjaT.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-DvQQgHTq.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CJUKFyLa.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BFiUPp6R.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DLynVohM.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-DxDDqVQb.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-uwM7KshN.woff) format("woff");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-Dm_PoFIZ.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-O6-GRVqx.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-CmcxpzmF.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-yqk7_qG0.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-BtGHVI3Q.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-N1TV9ACq.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-CevHOlzG.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-QhwQXayn.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-Dn-cqWhb.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-BhDX_RLI.woff) format("woff");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-C_OblDzq.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-zoSM89R3.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,*:before,*:after{box-sizing:border-box}:root{--font-sans: "IBM Plex Sans", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--radius: 10px;--radius-sm: 6px;--gutter: 20px}html,body,#root{height:100%;margin:0}body{font-family:var(--font-sans);font-size:13px;line-height:1.45;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}body.resizing,body.resizing *{cursor:col-resize!important;-webkit-user-select:none;user-select:none}button,select,input{font:inherit;color:inherit}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.muted{color:var(--text-muted)}.var-late{color:var(--critical)}.var-early{color:var(--done)}.var-zero{color:var(--text-muted)}.is-critical{color:var(--critical)}.app{height:100%;display:flex;flex-direction:column;overflow:hidden}.topbar{display:flex;align-items:center;gap:20px;height:56px;padding:0 var(--gutter);background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0}.brand{display:flex;align-items:center;gap:10px}.logo{display:flex}.brand-name{font-weight:600;font-size:15px;letter-spacing:-.01em}.project-id{display:flex;flex-direction:column;min-width:0;padding-left:20px;border-left:1px solid var(--border)}.project-title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-meta{display:flex;align-items:center;gap:6px;color:var(--text-muted);font-size:12px;white-space:nowrap}.project-meta .sep{width:3px;height:3px;border-radius:50%;background:var(--text-faint);margin:0 4px}.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:4px}.btn{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;white-space:nowrap;transition:background .12s,border-color .12s}.btn:hover{background:var(--surface-alt)}.btn:disabled{opacity:.6;cursor:progress}.btn-ghost{border-color:transparent;background:transparent;color:var(--text-muted)}.btn-ghost:hover{color:var(--text);background:var(--surface-alt)}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:500}.btn-primary:hover{background:var(--accent);filter:brightness(1.06)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);cursor:pointer}.icon-btn:hover{background:var(--surface-alt);color:var(--text)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.dashboard{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;padding:16px var(--gutter) 4px;flex-shrink:0}.kpi{position:relative;display:flex;flex-direction:column;gap:4px;padding:14px 16px 12px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);text-align:left;min-width:0}.kpi-click{cursor:pointer;transition:border-color .12s,box-shadow .12s}.kpi-click:hover:not(:disabled){border-color:var(--accent);box-shadow:0 2px 10px var(--shadow)}.kpi-label{font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}.kpi-value{font-size:26px;font-weight:500;line-height:1.15;letter-spacing:-.02em}.kpi-value small{font-size:13px;font-weight:400;color:var(--text-muted);letter-spacing:0}.kpi-value.var-late small{color:inherit}.kpi-sub{font-size:12px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kpi-bar{height:4px;border-radius:2px;background:var(--accent-soft);overflow:hidden;margin:4px 0 2px}.kpi-bar span{display:block;height:100%;background:var(--accent);border-radius:2px}.kpi-milestone{display:flex;align-items:center;gap:7px;font-weight:500;min-width:0}.kpi-ms-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ms-glyph{flex-shrink:0;width:8px;height:8px;background:var(--milestone);transform:rotate(45deg);border-radius:1px;margin:0 2px}.ms-glyph.is-soutenance,.is-soutenance .ms-glyph{background:var(--soutenance)}.toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:12px var(--gutter);flex-shrink:0}.toolbar-sep{width:1px;height:20px;background:var(--border);margin:0 4px}.toolbar-right{margin-left:auto;display:flex;align-items:center;gap:10px}.seg{display:inline-flex;padding:2px;background:var(--surface-alt);border-radius:8px}.seg button{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 12px;border:none;border-radius:6px;background:transparent;color:var(--text-muted);cursor:pointer}.seg button:hover{color:var(--text)}.seg button.on{background:var(--surface);color:var(--text);font-weight:500;box-shadow:0 1px 3px var(--shadow)}.switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer;color:var(--text-muted);-webkit-user-select:none;user-select:none;padding:0 4px}.switch.on{color:var(--critical);font-weight:500}.switch input{position:absolute;opacity:0;pointer-events:none}.switch-track{position:relative;width:30px;height:17px;border-radius:9px;background:var(--grid-line-strong);transition:background .15s}.switch.on .switch-track{background:var(--critical)}.switch-thumb{position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0003;transition:transform .15s}.switch.on .switch-thumb{transform:translate(13px)}.switch input:focus-visible+.switch-track{outline:2px solid var(--accent);outline-offset:2px}.select{display:inline-flex;align-items:center;gap:8px;color:var(--text-muted)}.select select{height:32px;padding:0 28px 0 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%238494A8' stroke-width='1.5'/%3E%3C/svg%3E") no-repeat right 10px center;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:var(--font-mono);color:var(--text);cursor:pointer}.export{position:relative}.popover{position:absolute;right:0;top:calc(100% + 6px);z-index:30;width:290px;padding:14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 12px 32px var(--shadow)}.popover-title{font-weight:600;margin-bottom:10px}.radio-group{display:flex;flex-direction:column;gap:6px}.radio-group label{display:flex;align-items:center;gap:8px;cursor:pointer}.radio-group input{accent-color:var(--accent)}.popover-note{margin:10px 0 12px;font-size:12px;color:var(--text-muted)}.popover-actions{display:flex;gap:8px}.popover-actions .btn{flex:1;justify-content:center}.main{flex:1;min-height:0;display:flex;margin:0 var(--gutter) var(--gutter);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.gantt{position:relative;flex:1;min-width:0;overflow:auto;overscroll-behavior:contain;scroll-behavior:auto}.gantt-inner{position:relative;min-height:100%}.gantt-head{position:sticky;top:0;z-index:3;display:flex;background:var(--surface)}.gantt-body{display:flex}.timeline-head,.timeline-body{display:block;flex-shrink:0}.table-head,.task-row{display:grid;grid-template-columns:52px minmax(100px,1fr) 54px 74px 74px 96px;align-items:center}.table-head{position:sticky;left:0;z-index:4;height:56px;flex-shrink:0;padding-top:22px;background:var(--surface);border-right:1px solid var(--border);border-bottom:1px solid var(--border);font-size:11px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;color:var(--text-muted);overflow:hidden}.table-body{position:sticky;left:0;z-index:2;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);box-shadow:6px 0 12px -10px var(--shadow)}.table-head>span,.task-row>span{padding:0 8px;white-space:nowrap;overflow:hidden}.c-dur,.c-date,.c-work,.c-peak{text-align:right}.table-head .c-pct{text-align:left}.resize-handle{position:absolute;top:0;right:-3px;bottom:0;width:7px;cursor:col-resize;z-index:5}.resize-handle:after{content:"";position:absolute;top:0;bottom:0;left:3px;width:1px;background:transparent;transition:background .12s}.resize-handle:hover:after,body.resizing .resize-handle:after{background:var(--accent);width:2px}.task-row{position:relative;border-bottom:1px solid var(--grid-line);cursor:pointer;font-size:12.5px}.task-row:hover,.task-row.is-hovered{background:var(--row-hover)}.task-row.is-selected{background:var(--row-selected)}.task-row.is-selected:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent)}.task-row.is-critical:not(.is-summary) .c-wbs{color:var(--critical)}.task-row.is-summary{font-weight:600}.task-row .c-wbs{color:var(--text-muted);font-size:11.5px}.task-row .c-dur,.task-row .c-date{font-size:11.5px}.task-row .c-date{color:var(--text-muted)}.task-row.is-summary .c-date,.task-row.is-summary .c-dur{color:var(--text);font-weight:500}.c-name{display:flex;align-items:center;gap:4px;min-width:0}.name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chevron{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:none;border-radius:4px;background:transparent;color:var(--text-muted);cursor:pointer;transition:transform .15s}.chevron:hover{background:var(--surface-alt);color:var(--text)}.chevron.is-collapsed{transform:rotate(-90deg)}.chevron-spacer{flex-shrink:0;width:18px}.c-pct{display:flex;align-items:center;gap:8px}.pct-track{flex:1;max-width:44px;height:4px;border-radius:2px;background:var(--grid-line-strong);overflow:hidden}.pct-track.big{max-width:none;height:6px;border-radius:3px}.pct-fill{display:block;height:100%;background:var(--accent)}.pct-fill.is-done{background:var(--done)}.pct-text{font-size:11px;color:var(--text-muted);min-width:34px;text-align:right}.gantt-empty{position:sticky;left:0;padding:40px;color:var(--text-muted);text-align:center}.tooltip{position:fixed;z-index:50;max-width:300px;padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 10px 28px var(--shadow);pointer-events:none;font-size:12px}.tooltip-title{font-weight:600;margin-bottom:6px}.tooltip dl{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;margin:0}.tooltip dt{color:var(--text-muted)}.tooltip dd{margin:0}.tooltip-list{margin:6px 0 0;padding:0;list-style:none}.tooltip-list li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tooltip-foot{margin-top:6px;padding-top:6px;border-top:1px solid var(--border);color:var(--overload)}.detail{width:380px;flex-shrink:0;display:flex;flex-direction:column;border-left:1px solid var(--border);background:var(--surface);animation:slide-in .18s ease-out;min-height:0}@keyframes slide-in{0%{transform:translate(16px);opacity:0}}.detail-head{position:relative;padding:16px 18px 14px;border-bottom:1px solid var(--border)}.detail-head .icon-btn{position:absolute;top:10px;right:10px}.detail-kicker{display:flex;gap:8px;align-items:baseline;font-size:11.5px;color:var(--text-muted);padding-right:32px;white-space:nowrap;overflow:hidden}.detail-kicker .muted{overflow:hidden;text-overflow:ellipsis}.detail h2{margin:6px 0 10px;font-size:17px;font-weight:600;line-height:1.3}.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:11px;font-size:11.5px;font-weight:500}.st-done{background:var(--done-soft);color:var(--done)}.st-progress{background:var(--accent-soft);color:var(--accent)}.st-todo{background:var(--surface-alt);color:var(--text-muted)}.st-late,.st-critical{background:var(--critical-soft);color:var(--critical)}.st-milestone{background:color-mix(in srgb,var(--milestone) 16%,transparent);color:var(--milestone)}.st-soutenance{background:color-mix(in srgb,var(--soutenance) 16%,transparent);color:var(--soutenance)}.detail-body{flex:1;overflow-y:auto;padding:4px 18px 24px}.detail-progress{display:flex;align-items:center;gap:12px;margin-top:14px}.detail section{margin-top:20px}.detail h3{margin:0 0 8px;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}.kv{width:100%;border-collapse:collapse;font-size:12.5px}.kv th{text-align:left;font-weight:500;font-size:11px;color:var(--text-faint);padding:0 0 4px}.kv td{padding:5px 0;border-top:1px solid var(--grid-line)}.kv td:first-child{color:var(--text-muted);width:30%}.facts{margin:12px 0 0;display:grid;gap:6px}.facts>div{display:flex;justify-content:space-between;gap:12px}.facts dt{color:var(--text-muted)}.facts dd{margin:0;text-align:right}.link-list,.res-list{list-style:none;margin:0;padding:0}.link-list button{display:grid;grid-template-columns:34px 1fr auto;gap:8px;align-items:center;width:100%;padding:6px 8px;margin:0 -8px;width:calc(100% + 16px);border:none;border-radius:6px;background:transparent;text-align:left;cursor:pointer;font-size:12.5px}.link-list button:hover{background:var(--surface-alt)}.link-list .wbs{color:var(--text-muted);font-size:11.5px}.link-list .is-critical .wbs{color:var(--critical)}.link-list .is-critical .lname{color:var(--text)}.link-list .lname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.link-list .muted{font-size:11px}.res-list li{display:flex;align-items:center;gap:10px;padding:5px 0}.res-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.avatar{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:var(--task-soft);color:var(--task);font-size:10.5px;font-weight:600}.notes{margin:0;white-space:pre-wrap;font-size:12.5px;line-height:1.55;padding:10px 12px;background:var(--surface-alt);border-radius:8px}.resources .table-head{grid-template-columns:1fr 64px 64px;padding-left:20px}.res-banner{position:sticky;left:0;display:flex;align-items:center;gap:8px;padding:8px 16px;background:var(--overload-soft);color:var(--overload);font-size:12.5px;font-weight:500}.res-cell{display:grid;grid-template-columns:22px 32px minmax(0,1fr) 64px 64px;align-items:center;gap:4px;padding:0 8px 0 10px;border-bottom:1px solid var(--border);cursor:pointer}.res-cell:hover{background:var(--row-hover)}.res-meta{display:flex;flex-direction:column;min-width:0;padding-left:6px}.res-meta .res-name{font-weight:600}.res-sub{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--text-muted);white-space:nowrap}.overload-chip,.ok-chip{padding:0 7px;border-radius:9px;font-size:10.5px;font-weight:500;line-height:17px}.overload-chip{background:var(--overload-soft);color:var(--overload)}.ok-chip{background:var(--accent-soft);color:var(--accent)}.c-peak.is-over{color:var(--overload);font-weight:500}.res-assign{display:grid;grid-template-columns:40px minmax(0,1fr) 48px;align-items:center;gap:6px;padding:0 10px 0 62px;font-size:12px;border-bottom:1px solid var(--grid-line);cursor:pointer}.res-assign:hover{background:var(--row-hover)}.res-assign .mono{font-size:11px}.welcome{flex:1;display:flex;align-items:center;justify-content:center;padding:32px;overflow:auto}.welcome-card{max-width:520px;text-align:center}.welcome-art{width:240px;margin-bottom:20px}.welcome h1{margin:0 0 8px;font-size:24px;font-weight:600;letter-spacing:-.01em}.welcome p{color:var(--text-muted);margin:0 0 22px}.welcome-actions{display:flex;justify-content:center;gap:10px}.welcome-actions .btn{height:38px;padding:0 18px}.welcome-privacy{margin-top:26px!important;font-size:12px}.error{display:flex;align-items:flex-start;gap:8px;margin-top:20px;padding:10px 14px;border-radius:8px;background:var(--critical-soft);color:var(--critical);text-align:left}.error svg{flex-shrink:0;margin-top:2px}.drop-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--bg) 75%,transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);pointer-events:none}.drop-box{display:flex;flex-direction:column;align-items:center;gap:12px;padding:40px 56px;border:2px dashed var(--accent);border-radius:16px;background:var(--surface);color:var(--accent);font-size:15px;font-weight:500}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:90;max-width:560px;padding:10px 16px;border-radius:8px;background:var(--text);color:var(--bg);box-shadow:0 10px 30px var(--shadow);font-size:12.5px;animation:toast-in .18s ease-out}@keyframes toast-in{0%{transform:translate(-50%,8px);opacity:0}}@media (max-width: 1100px){.dashboard{grid-template-columns:repeat(2,minmax(0,1fr))}.detail{position:absolute;right:var(--gutter);top:0;bottom:var(--gutter);z-index:20;box-shadow:-12px 0 30px var(--shadow)}.main{position:relative}}@media (max-width: 720px){:root{--gutter: 12px}.project-id,.topbar-actions .btn span{display:none}.dashboard{grid-template-columns:minmax(0,1fr)}}
