.gantt-container{height:100%;overflow:auto;width:100%}.gantt-chart{display:flex;flex-direction:column;min-width:800px}.gantt-header{background:#34495e;color:#fff;display:flex;font-weight:700;position:-webkit-sticky;position:sticky;top:0;z-index:100}.gantt-lane-header{align-items:center;border-right:1px solid #2c3e50;display:flex;font-size:12px;justify-content:center;line-height:1;max-width:60px;min-width:60px;padding:0 5px;text-orientation:mixed;width:60px;word-break:break-all;writing-mode:vertical-rl}.gantt-timeline{display:flex;flex:1 1;overflow-x:auto}.gantt-day{border-right:1px solid #2c3e50;box-sizing:border-box;font-size:12px;max-width:60px;min-width:60px;padding:10px 5px;text-align:center;width:60px}.gantt-day.weekend{background:#e74c3c;color:#fff}.gantt-lane{border-bottom:1px solid #bdc3c7;display:flex;height:60px}.gantt-lane-label{align-items:center;background:#ecf0f1;border-right:1px solid #bdc3c7;color:#2c3e50;display:flex;font-size:12px;font-weight:700;justify-content:center;line-height:1;max-width:60px;min-width:60px;padding:0 5px;text-orientation:mixed;width:60px;word-break:break-all;writing-mode:vertical-rl}.gantt-lane-content{background:#fff;display:flex;flex:1 1;position:relative}.gantt-day-column{border-right:1px solid #ecf0f1;box-sizing:border-box;max-width:60px;min-width:60px;position:relative;width:60px}.gantt-day-column.weekend{background:#e74c3c1a}.gantt-task{align-items:center;border-radius:6px;box-shadow:0 2px 4px #0000001a;color:#fff;cursor:grab;display:flex;font-size:12px;font-weight:700;height:40px;justify-content:center;overflow:hidden;position:absolute;text-overflow:ellipsis;top:10px;transition:box-shadow .3s,transform .3s;-webkit-user-select:none;user-select:none;white-space:nowrap;z-index:10}.gantt-task.dragging{box-shadow:0 6px 12px #0000004d;cursor:grabbing;transform:scale(1.02);transition:none;z-index:100}.gantt-task .resize-handle{background:#fff6;cursor:ew-resize;height:100%;opacity:0;position:absolute;transition:opacity .3s;width:8px}.gantt-task:hover .resize-handle{opacity:1}.gantt-task .resize-handle.left{border-radius:6px 0 0 6px;left:0}.gantt-task .resize-handle.right{border-radius:0 6px 6px 0;right:0}.gantt-task:hover{box-shadow:0 4px 8px #0003;transform:translateY(-2px)}.gantt-task.water-electric{background:linear-gradient(135deg,#00b894,#00a085)}.gantt-task.masonry{background:linear-gradient(135deg,#fd79a8,#e84393)}.gantt-task.carpentry{background:linear-gradient(135deg,#fdcb6e,#e17055)}.gantt-task.painting{background:linear-gradient(135deg,#74b9ff,#0984e3)}.gantt-task.flooring{background:linear-gradient(135deg,#a29bfe,#6c5ce7)}.calendar-view{height:100%;padding:20px}.calendar-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:20px}.calendar-header h3{color:#2c3e50;font-size:1.5em;margin:0}.calendar-nav{align-items:center;display:flex;gap:10px}.calendar-nav button{background:#3498db;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:8px 12px;transition:all .3s}.calendar-nav button:hover{background:#2980b9;transform:translateY(-1px)}.calendar-grid{grid-gap:1px;background:#ddd;border-radius:8px;box-shadow:0 2px 4px #0000001a;display:grid;gap:1px;grid-template-columns:repeat(7,1fr);overflow:hidden}.calendar-weekday{background:#2c3e50;color:#fff;font-size:14px;font-weight:700;padding:15px 8px;text-align:center}.calendar-day{background:#fff;border-bottom:1px solid #ecf0f1;min-height:120px;padding:8px;position:relative}.calendar-day.other-month{background:#f8f9fa;color:#aaa}.calendar-day.weekend{background:#fff5f5}.calendar-day.other-month.weekend{background:#f5f5f5}.calendar-day-number{color:#2c3e50;font-size:14px;font-weight:700;margin-bottom:5px}.calendar-day.other-month .calendar-day-number{color:#bdc3c7}.calendar-task{border-radius:3px;box-shadow:0 1px 2px #0000001a;color:#fff;cursor:pointer;font-size:11px;margin:2px 0;overflow:hidden;padding:2px 6px;text-overflow:ellipsis;transition:all .2s;white-space:nowrap}.calendar-task:hover{box-shadow:0 2px 4px #0003;transform:translateY(-1px)}.calendar-task.water-electric{background:linear-gradient(135deg,#00b894,#00a085)}.calendar-task.masonry{background:linear-gradient(135deg,#fd79a8,#e84393)}.calendar-task.carpentry{background:linear-gradient(135deg,#fdcb6e,#e17055)}.calendar-task.painting{background:linear-gradient(135deg,#74b9ff,#0984e3)}.calendar-task.flooring{background:linear-gradient(135deg,#a29bfe,#6c5ce7)}@media (max-width:768px){.calendar-grid{font-size:12px}.calendar-day{min-height:80px;padding:4px}.calendar-task{font-size:10px;padding:1px 4px}.calendar-header{flex-direction:column;gap:10px;text-align:center}}.kanban-view{height:100%;padding:20px}.kanban-board{grid-gap:20px;display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));height:calc(100vh - 160px);overflow-y:auto}.kanban-column{background:#f8f9fa;border-radius:8px;display:flex;flex-direction:column;max-height:100%;padding:15px}.kanban-header{align-items:center;border-radius:6px;color:#fff;display:flex;font-weight:700;justify-content:center;margin-bottom:15px;min-height:50px;padding:12px;position:relative;text-align:center}.kanban-header .task-count{font-size:.9em;opacity:.9;position:absolute;right:12px}.kanban-header.water-electric{background:linear-gradient(135deg,#00b894,#00a085)}.kanban-header.masonry{background:linear-gradient(135deg,#fd79a8,#e84393)}.kanban-header.carpentry{background:linear-gradient(135deg,#fdcb6e,#e17055)}.kanban-header.painting{background:linear-gradient(135deg,#74b9ff,#0984e3)}.kanban-header.flooring{background:linear-gradient(135deg,#a29bfe,#6c5ce7)}.kanban-header.planned{background:linear-gradient(135deg,#f39c12,#e67e22)}.kanban-header.in-progress{background:linear-gradient(135deg,#3498db,#2980b9)}.kanban-header.completed{background:linear-gradient(135deg,#27ae60,#229954)}.kanban-header.blocked{background:linear-gradient(135deg,#e74c3c,#c0392b)}.kanban-content{flex:1 1;min-height:200px;overflow-y:auto}.kanban-empty{background:#7f8c8d0d;border:2px dashed #bdc3c7;border-radius:6px;color:#7f8c8d;font-style:italic;padding:40px 20px;text-align:center}.kanban-card{background:#fff;border-left:4px solid #3498db;border-radius:6px;box-shadow:0 2px 4px #0000001a;cursor:pointer;margin-bottom:10px;padding:12px;transition:all .3s}.kanban-card:hover{box-shadow:0 4px 8px #00000026;transform:translateY(-2px)}.kanban-card:last-child{margin-bottom:0}.kanban-card-title{color:#2c3e50;font-size:14px;font-weight:700;margin-bottom:8px}.kanban-card-details{color:#666;font-size:12px;line-height:1.4;margin-bottom:8px}.kanban-card-financial{background:#3498db1a;border-radius:4px;color:#555;font-size:11px;line-height:1.3;padding:6px 8px}.kanban-card-status{margin-top:8px;text-align:center}.status-indicator{border-radius:12px;color:#fff;cursor:pointer;display:inline-block;font-size:10px;font-weight:700;padding:4px 8px;transition:all .2s}.status-indicator:hover{transform:scale(1.05)}.status-indicator.planned{background:#f39c12}.status-indicator.inprogress{background:#3498db}.status-indicator.completed{background:#27ae60}.status-indicator.blocked{background:#e74c3c}.kanban-help{background:#3498db1a;border-radius:6px;color:#7f8c8d;font-size:14px;margin-top:15px;padding:10px;text-align:center}@media (max-width:768px){.kanban-board{gap:15px;grid-template-columns:1fr;height:auto}.kanban-column{max-height:400px}.kanban-view{padding:10px}}@media (max-width:480px){.kanban-card{padding:8px}.kanban-card-title{font-size:13px}.kanban-card-details{font-size:11px}.kanban-card-financial{font-size:10px;padding:4px 6px}}.version-info{align-items:center;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#34495ee6;border-radius:8px;bottom:10px;box-shadow:0 2px 8px #0003;color:#fff;display:flex;font-size:11px;gap:12px;padding:8px 12px;position:fixed;right:10px;transition:all .3s;z-index:1000}.version-info:hover{background:#34495ef2;box-shadow:0 4px 12px #0000004d;transform:translateY(-1px)}.version-item{align-items:center;display:flex;gap:4px}.version-label{font-size:12px}.version-value{font-family:Consolas,Monaco,monospace;font-weight:700}.version-value a{color:#3498db;text-decoration:none;transition:color .3s}.version-value a:hover{color:#5dade2;text-decoration:underline}@media (max-width:768px){.version-info{bottom:80px;font-size:10px;gap:8px;padding:6px 8px}.version-item{gap:2px}}*{box-sizing:border-box;margin:0;padding:0}body{background:#f5f6fa;font-family:Arial,Microsoft JhengHei,sans-serif}.App,body{min-height:100vh}.header{align-items:center;background:linear-gradient(135deg,#2c3e50,#3498db);box-shadow:0 2px 10px #0000001a;color:#fff;display:flex;justify-content:space-between;padding:15px 20px}.header h1{font-size:1.8em;margin:0}.view-tabs{display:flex;gap:10px}.tab-btn{background:#fff3;border:none;border-radius:20px;color:#fff;cursor:pointer;font-size:14px;padding:8px 16px;transition:all .3s}.tab-btn.active{background:#fff;color:#2c3e50;font-weight:700}.tab-btn:hover{background:#ffffff4d}.tab-btn.active:hover{background:#fff}.main-container{display:grid;grid-template-columns:380px 1fr;height:calc(100vh - 70px)}@media (max-width:768px){.main-container{grid-template-columns:1fr;grid-template-rows:auto 1fr}.sidebar{border-bottom:2px solid #e9ecef;border-right:none;height:auto;max-height:40vh}}@media (max-width:480px){.header{flex-direction:column;gap:10px;padding:10px 15px;text-align:center}.header h1{font-size:1.4em}.view-tabs{flex-wrap:wrap;justify-content:center}.tab-btn{font-size:12px;padding:6px 12px}.sidebar{padding:15px}.control-section{margin-bottom:20px;padding:15px}}.sidebar{border-right:2px solid #e9ecef;overflow-y:auto}.content-area,.sidebar{background:#fff;padding:20px}.content-area{overflow:auto;position:relative}.control-section{background:#f8f9fa;border:1px solid #e9ecef;border-radius:10px;margin-bottom:25px;padding:20px}.control-section h3{border-bottom:2px solid #3498db;color:#2c3e50;font-size:1.2em;margin-bottom:15px;padding-bottom:8px}.input-group{margin-bottom:15px}.input-group label{color:#34495e;display:block;font-size:.9em;font-weight:700;margin-bottom:5px}.input-group input,.input-group select{border:2px solid #ddd;border-radius:6px;font-size:14px;padding:10px;transition:border-color .3s;width:100%}.input-group input:focus,.input-group select:focus{border-color:#3498db;outline:none}.input-row{grid-gap:10px;display:grid;gap:10px;grid-template-columns:1fr 1fr}.btn{background:linear-gradient(135deg,#3498db,#2980b9);border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:14px;font-weight:700;margin-bottom:8px;padding:10px 20px;transition:all .3s;width:100%}.btn:hover{box-shadow:0 4px 12px #3498db4d;transform:translateY(-1px)}.btn-success{background:linear-gradient(135deg,#27ae60,#229954)}.btn-danger{background:linear-gradient(135deg,#e74c3c,#c0392b)}.btn-warning{background:linear-gradient(135deg,#f39c12,#e67e22)}.btn-small{background:#e74c3c;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:12px;margin:0 2px;padding:4px 8px;width:auto}.project-list,.task-list{background:#fff;border:1px solid #e9ecef;border-radius:6px;max-height:400px;overflow-y:auto}.project-item,.task-item{align-items:center;background:#fff;border-bottom:1px solid #e9ecef;border-left:4px solid #3498db;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between;margin-bottom:2px;padding:12px;transition:all .3s}.project-item:hover,.task-item:hover{background:#f8f9fa;box-shadow:0 2px 8px #0000001a;transform:translateX(3px)}.project-item.active{background:#e3f2fd;border-left-color:#2196f3}.task-item.water-electric{border-left-color:#00b894}.task-item.masonry{border-left-color:#fd79a8}.task-item.carpentry{border-left-color:#fdcb6e}.task-item.painting{border-left-color:#74b9ff}.task-item.flooring{border-left-color:#a29bfe}.project-info,.task-info{flex:1 1}.project-name,.task-name{color:#2c3e50;font-weight:700;margin-bottom:3px}.project-details,.task-details{color:#7f8c8d;font-size:.8em}.project-actions,.task-actions{display:flex;gap:5px}.list-table{background:#fff;border-collapse:collapse;border-radius:8px;box-shadow:0 2px 4px #0000001a;overflow:hidden;width:100%}.list-table th{background:#2c3e50;color:#fff;font-weight:700;padding:12px;text-align:left}.list-table td{border-bottom:1px solid #e9ecef;padding:12px}.list-table tr:hover{background:#f8f9fa}.status-badge{border-radius:12px;font-size:12px;font-weight:700;padding:4px 8px}.status-planned{background:#f39c12;color:#fff}.status-inprogress{background:#3498db;color:#fff}.status-completed{background:#27ae60;color:#fff}.status-blocked{background:#e74c3c;color:#fff}.empty-state{color:#7f8c8d;padding:40px 20px;text-align:center}.empty-state h3{margin-bottom:10px}.empty-state p{font-size:.9em}.modal-overlay{align-items:center;background:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.modal-content{background:#fff;border-radius:8px;max-height:80vh;max-width:500px;overflow-y:auto;padding:20px;width:90%}.modal-header{align-items:center;border-bottom:1px solid #e9ecef;display:flex;justify-content:space-between;margin-bottom:20px;padding-bottom:10px}.modal-header h3{color:#2c3e50;margin:0}.close-btn{background:none;border:none;color:#7f8c8d;cursor:pointer;font-size:24px}.close-btn:hover{color:#e74c3c}.error-boundary{align-items:center;background:#f8f9fa;display:flex;justify-content:center;min-height:100vh;padding:20px}.error-content{background:#fff;border-radius:8px;box-shadow:0 4px 12px #0000001a;max-width:500px;padding:40px;text-align:center}.error-content h2{color:#e74c3c;margin-bottom:20px}.error-actions{display:flex;gap:15px;justify-content:center;margin-top:30px}.error-details{border:1px solid #ddd;border-radius:4px;margin-top:20px;text-align:left}.error-details summary{background:#f5f5f5;cursor:pointer;font-weight:700;padding:10px}.view-header{margin-bottom:20px;position:relative}.view-header h2{border-bottom:2px solid #3498db;color:#2c3e50;margin:0;padding:10px 0}.floating-add-btn{align-items:center;background:linear-gradient(135deg,#27ae60,#229954);border:none;border-radius:50%;bottom:30px;box-shadow:0 4px 12px #27ae6066;color:#fff;cursor:pointer;display:flex;font-size:24px;height:60px;justify-content:center;position:fixed;right:30px;transition:all .3s ease;width:60px;z-index:1000}.floating-add-btn:hover{background:linear-gradient(135deg,#2ecc71,#27ae60);box-shadow:0 6px 16px #27ae6080;transform:translateY(-2px) scale(1.05)}.floating-add-btn:active{transform:translateY(0) scale(.95)}@media (max-width:768px){.floating-add-btn{bottom:20px;font-size:20px;height:50px;right:20px;width:50px}}
/*# sourceMappingURL=main.b13081fc.css.map*/