*{box-sizing:border-box}:root{font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,Segoe UI,Roboto,sans-serif;line-height:1.5;font-weight:400;color:#1d1d1f;background-color:#f5f5f7;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px;min-height:100vh}#root{width:100%}.gantt-container{font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,Segoe UI,Roboto,sans-serif;background:#fff;border-radius:16px;box-shadow:0 4px 24px #0000000f,0 1px 2px #0000000a;overflow:visible;max-width:100%}.gantt-wrapper{display:flex}.gantt-category-col{flex-shrink:0;width:160px;min-width:160px;border-right:1px solid #e8e8ed;display:flex;flex-direction:column;background:#f5f5f7}.gantt-category-col .gantt-header{background:#f5f5f7;border-bottom:1px solid #e8e8ed;height:53px;display:flex;align-items:center}.gantt-category-col .gantt-header-category{padding:16px 20px;font-weight:600;font-size:13px;color:#797989}.gantt-category-col .gantt-body{background:#f5f5f7;display:flex;flex-direction:column}.gantt-category-cell{padding:14px 20px;font-size:13px;font-weight:500;color:#1d1d1f;border-bottom:1px solid #e8e8ed;height:60px;display:flex;align-items:center;box-sizing:border-box;white-space:pre-wrap}.gantt-timeline-wrap{flex:1;overflow-x:auto;overflow-y:visible}.gantt-timeline-col{display:flex;flex-direction:column;min-width:max-content}.gantt-timeline-col .gantt-header{background:linear-gradient(180deg,#fff,#fafafa);border-bottom:1px solid #e8e8ed;height:53px;display:flex;align-items:center}.gantt-weeks{display:flex;height:100%}.gantt-week-label{padding:0 12px;font-size:12px;color:#86868b;text-align:center;border-right:1px solid #e5e5e5;font-weight:500;flex-shrink:0;display:flex;align-items:center;justify-content:center;height:100%;box-sizing:border-box}.gantt-week-label.current-week{background:#ffe0b2;color:#e65100;font-weight:700}.gantt-body{display:flex;flex-direction:column}.gantt-row{display:flex;height:60px;box-sizing:border-box}.gantt-timeline-cell{flex:1;position:relative}.gantt-timeline-track{position:relative;display:flex;height:100%}.gantt-week-grid{border-right:1px solid #f0f0f2;background:#fff;flex-shrink:0;height:100%}.gantt-week-grid:nth-child(2n){background:#fafafa}.gantt-today-line{position:absolute;top:0;bottom:0;width:2px;background:#008cbf;z-index:1;pointer-events:none}.gantt-week-grid.current-week{background:#ff9800!important}.gantt-week-label.current-week{background:#ff9800!important;color:#fff!important;font-weight:700}.gantt-row:last-child .gantt-category-cell{border-bottom:none}.gantt-bar{position:absolute;top:12px;height:36px;background:linear-gradient(135deg,#007aff,#0056cc);border-radius:6px;display:flex;align-items:center;padding:0 10px;cursor:pointer;transition:box-shadow .2s ease;overflow:visible;white-space:nowrap;z-index:2;min-width:50px;box-shadow:0 2px 8px #007aff40}.gantt-bar:hover{box-shadow:0 6px 16px #007aff59;z-index:20}.gantt-bar-content{display:flex;flex-direction:column;gap:1px;overflow:hidden;width:100%}.gantt-bar-title{font-size:11px;font-weight:500;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:4px}.gantt-status-tag{font-size:9px;padding:1px 4px;background:#ffffff40;border-radius:3px;flex-shrink:0;margin-left:auto}.gantt-bar-duration{font-size:10px;color:#ffffffd9;font-weight:400;display:flex;align-items:center;justify-content:space-between;gap:4px;width:100%}.gantt-status-tag{font-size:9px;padding:1px 4px;background:#ffffff40;border-radius:3px;flex-shrink:0}.gantt-tooltip{position:fixed;background:#1d1d1f;color:#fff;padding:10px 14px;border-radius:8px;font-size:12px;white-space:nowrap;box-shadow:0 4px 16px #0003;z-index:9999;pointer-events:none;transform:translate(-50%,-100%)}.gantt-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:6px solid transparent;border-top-color:#1d1d1f}.tooltip-title{font-weight:600;margin-bottom:4px}.tooltip-desc{color:#ffffffb3;font-size:11px;line-height:1.5;margin-bottom:6px;padding-bottom:6px;border-bottom:1px solid rgba(255,255,255,.15)}.tooltip-info{color:#fffc;font-size:11px;line-height:1.6}.gantt-loading{padding:40px;text-align:center;color:#86868b;font-size:14px}@media(max-width:768px){.gantt-container{border-radius:12px;box-shadow:0 2px 12px #0000000d}.gantt-category-col{width:70px;min-width:70px}.gantt-category-col .gantt-header{height:47px}.gantt-category-col .gantt-header-category{padding:14px 10px;font-size:12px}.gantt-category-cell{padding:10px;font-size:11px;height:52px}.gantt-timeline-col .gantt-header{height:47px}.gantt-week-label{padding:0 8px;font-size:10px;min-width:70px}.gantt-week-grid{min-width:70px}.gantt-timeline-track,.gantt-row{height:52px}.gantt-bar{top:8px;height:32px;border-radius:5px;min-width:45px;padding:0 8px;box-shadow:0 2px 6px #007aff33}.gantt-bar:hover{box-shadow:0 4px 12px #007aff4d;z-index:20}.gantt-bar-title{font-size:10px}.gantt-bar-duration{font-size:9px}.gantt-tooltip{padding:8px 12px;font-size:11px}}.gantt-controls{display:flex;justify-content:center;gap:12px;padding:16px;border-top:1px solid #e8e8ed;background:#fafafa;border-radius:0 0 16px 16px}.gantt-zoom-btn{width:36px;height:36px;border-radius:8px;border:1px solid #e0e0e0;background:#fff;color:#1d1d1f;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.gantt-zoom-btn:hover{background:#f0f0f0;border-color:silver}.gantt-zoom-btn:active{background:#e5e5e5}.gantt-zoom-reset{font-size:12px;font-weight:500}.app{min-height:100vh;background:#f5f5f7;padding:32px 24px}.app-header{text-align:center;margin-bottom:28px}.app-title{font-size:32px;font-weight:600;color:#1d1d1f;margin:0 0 6px;letter-spacing:-.02em}.app-subtitle{font-size:13px;color:#86868b;margin:0;font-weight:500;letter-spacing:.08em;text-transform:uppercase}.app-main{max-width:100%;margin:0 auto}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px;gap:16px;color:#86868b;font-size:14px}.loading-spinner{width:36px;height:36px;border:2.5px solid #e5e5e5;border-top-color:#007aff;border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:768px){.app{padding:20px 16px}.app-title{font-size:24px}.app-subtitle{font-size:11px}}
