*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--header-bg: #1a1a2e;--header-text: #ffffff;--toolbar-bg: #f8f9fa;--toolbar-border: #dee2e6;--task-list-bg: #ffffff;--task-list-width: 380px;--timeline-bg: #ffffff;--border-color: #e9ecef;--text-primary: #212529;--text-secondary: #6c757d;--text-muted: #adb5bd;--today-marker: #ef4444;--row-hover: #f0f7ff;--row-alt: #f8f9fa;--weekend-bg: #f1f3f5;--primary: #3b82f6;--primary-hover: #2563eb;--danger: #ef4444;--danger-hover: #dc2626;--radius: 6px;--shadow: 0 2px 8px rgba(0,0,0,.1);--shadow-lg: 0 8px 32px rgba(0,0,0,.15)}html,body,#root{height:100%;width:100%;overflow:hidden}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;color:var(--text-primary);background:var(--timeline-bg)}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.header{display:flex;align-items:center;justify-content:space-between;background:var(--header-bg);color:var(--header-text);padding:0 20px;height:52px;flex-shrink:0}.header-left{display:flex;align-items:center;gap:12px}.header-logo{font-size:24px}.header-name{font-size:16px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px}.header-edit-icon{font-size:14px;opacity:0;transition:opacity .2s}.project-switcher{position:relative}.project-switcher-trigger{max-width:min(430px,48vw);display:flex;align-items:center;gap:8px;padding:7px 9px;border:1px solid transparent;border-radius:9px;background:transparent;color:#fff;cursor:pointer;font-size:17px;font-weight:600;letter-spacing:-.02em;text-align:left}.project-switcher-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-switcher-trigger:hover,.project-switcher-trigger[aria-expanded=true]{background:#ffffff14;border-color:#ffffff17}.project-switcher-trigger svg{flex:0 0 auto;transition:transform .16s ease;opacity:.75}.project-switcher-trigger svg.open{transform:rotate(180deg)}.project-menu{position:absolute;top:calc(100% + 9px);left:0;width:330px;max-width:calc(100vw - 28px);padding:7px;color:var(--text-primary);background:#fff;border:1px solid #dbe3ee;border-radius:13px;box-shadow:0 18px 48px #0f172a3d;z-index:200;animation:projectMenuIn .14s ease-out}.project-menu-heading{padding:7px 9px 8px;color:#64748b;font-size:10px;font-weight:700;letter-spacing:.11em;text-transform:uppercase}.project-menu-list{max-height:280px;overflow-y:auto}.project-menu-item{display:flex;align-items:center;border-radius:8px}.project-menu-item:hover{background:#f8fafc}.project-menu-item.active{background:#eff6ff}.project-menu-select{min-width:0;flex:1;display:flex;align-items:center;gap:9px;padding:9px;border:0;background:transparent;color:#334155;cursor:pointer;text-align:left}.project-menu-select>span:nth-child(2){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-menu-dot{width:8px;height:8px;flex:0 0 auto;border-radius:50%;background:#94a3b8}.project-menu-item.active .project-menu-dot{background:#2563eb;box-shadow:0 0 0 3px #dbeafe}.project-menu-check{margin-left:auto;color:#2563eb;font-weight:700}.project-menu-action{width:28px;height:28px;flex:0 0 auto;display:grid;place-items:center;margin-right:3px;border:0;border-radius:7px;background:transparent;color:#64748b;cursor:pointer}.project-menu-action:hover{color:#0f172a;background:#e2e8f0}.project-menu-action.danger:hover{color:#dc2626;background:#fee2e2}.project-menu-action:disabled{opacity:.25;cursor:not-allowed;background:transparent;color:#64748b}.project-menu-new{width:100%;display:flex;align-items:center;gap:8px;margin-top:6px;padding:10px;border:0;border-top:1px solid #e2e8f0;background:transparent;color:#2563eb;cursor:pointer;font-weight:600;text-align:left}.project-menu-new:hover{background:#eff6ff;border-radius:0 0 8px 8px}.project-create-form{display:flex;gap:7px;margin-top:6px;padding:9px 4px 3px;border-top:1px solid #e2e8f0}.project-create-form input{min-width:0;flex:1;padding:8px 9px;border:1px solid #cbd5e1;border-radius:8px;outline:none}.project-create-form input:focus{border-color:#2563eb;box-shadow:0 0 0 3px #2563eb1a}.project-create-form button{padding:8px 11px;border:0;border-radius:8px;background:#2563eb;color:#fff;cursor:pointer;font-weight:600}.project-create-form button:disabled{opacity:.45;cursor:not-allowed}@keyframes projectMenuIn{0%{opacity:0;transform:translateY(-5px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.header-name:hover .header-edit-icon{opacity:.7}.header-name-input{background:#ffffff26;border:1px solid rgba(255,255,255,.3);color:#fff;font-size:16px;font-weight:600;padding:4px 8px;border-radius:var(--radius);outline:none;width:300px}.header-right{display:flex;gap:8px}.sync-indicator{display:inline-flex;align-items:center;gap:6px;max-width:190px;padding:5px 8px;border:1px solid rgba(255,255,255,.2);border-radius:999px;background:#ffffff14;color:inherit;font:inherit;font-size:11px;cursor:default}.sync-indicator.connected,.sync-indicator.syncing,.sync-indicator.error{cursor:pointer}.sync-indicator-dot{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:#94a3b8}.sync-indicator.connected .sync-indicator-dot{background:#22c55e;box-shadow:0 0 0 3px #22c55e26}.sync-indicator.error .sync-indicator-dot{background:#ef4444;box-shadow:0 0 0 3px #ef444426}.sync-indicator.syncing .sync-indicator-dot{border:2px solid rgba(59,130,246,.25);border-top-color:#3b82f6;background:transparent;animation:sync-spin .8s linear infinite}.sync-indicator-folder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes sync-spin{to{transform:rotate(360deg)}}.header-tab{padding:8px 16px;border-radius:var(--radius);font-size:13px;cursor:pointer;opacity:.7;transition:opacity .2s}.header-tab.active{opacity:1;background:#ffffff1a;border-bottom:2px solid var(--primary)}.install-btn{display:flex;align-items:center;gap:6px;background:var(--primary);color:#fff;border:none;border-radius:var(--radius);padding:6px 14px;font-size:12px;font-weight:600;cursor:pointer;transition:background .15s;font-family:inherit}.install-btn:hover{background:var(--primary-hover)}.install-btn svg{flex-shrink:0}.toolbar{display:flex;align-items:center;justify-content:space-between;background:var(--toolbar-bg);border-bottom:1px solid var(--toolbar-border);padding:8px 16px;height:48px;flex-shrink:0}.toolbar-left,.toolbar-center,.toolbar-right{display:flex;align-items:center;gap:8px}.toolbar-btn{background:#fff;border:1px solid var(--border-color);border-radius:var(--radius);padding:6px 12px;cursor:pointer;font-size:13px;color:var(--text-primary);transition:all .15s;display:flex;align-items:center;justify-content:center;gap:4px}.toolbar-btn:hover{background:#e9ecef;border-color:#adb5bd}.toolbar-btn-today{font-weight:600;color:var(--primary);border-color:var(--primary)}.toolbar-btn-today:hover{background:var(--primary);color:#fff}.toolbar-date{font-size:13px;font-weight:500;color:var(--text-primary);min-width:90px;text-align:center}.toolbar-separator{color:var(--text-muted);margin:0 4px}.gantt-container{display:flex;flex:1;overflow:hidden;position:relative}.gantt-task-list{width:var(--task-list-width);min-width:var(--task-list-width);display:flex;flex-direction:column;border-right:2px solid var(--border-color);background:var(--task-list-bg);flex-shrink:0}.gantt-task-list-header{display:flex;align-items:center;justify-content:space-between;padding:0 12px;height:56px;border-bottom:1px solid var(--border-color);background:var(--toolbar-bg);flex-shrink:0;position:relative}.collapse-btn,.expand-btn{background:none;border:1px solid var(--border-color);border-radius:var(--radius);padding:4px 8px;cursor:pointer;font-size:11px;color:var(--text-secondary);transition:all .15s}.collapse-btn:hover,.expand-btn:hover{background:var(--border-color);color:var(--text-primary)}.expand-btn{position:absolute;left:4px;top:8px;z-index:10;background:#fff;box-shadow:var(--shadow)}.task-list-title{font-weight:600;font-size:12px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.add-task-btn{background:var(--primary);color:#fff;border:none;border-radius:50%;width:28px;height:28px;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s;line-height:1}.add-task-btn:hover{background:var(--primary-hover)}.gantt-task-list-body{flex:1;overflow-y:auto;overflow-x:hidden}.gantt-task-list-body::-webkit-scrollbar{width:0}.gantt-task-list-body{scrollbar-width:none}.task-row{display:flex;align-items:center;position:relative;padding:0 12px;border-bottom:1px solid var(--border-color);cursor:pointer;transition:background .1s;gap:10px}.task-row:hover{background:var(--row-hover)}.task-row:nth-child(2n){background:var(--row-alt)}.task-row:nth-child(2n):hover{background:var(--row-hover)}.task-row.dragging-row{opacity:.38}.task-row.drop-before:before,.task-row.drop-after:after{content:"";position:absolute;left:8px;right:8px;z-index:12;height:3px;border-radius:999px;background:#2563eb;box-shadow:0 0 0 1px #ffffffd9;pointer-events:none}.task-row.drop-before:before{top:-2px}.task-row.drop-after:after{bottom:-2px}.task-row.drop-inside{background:#dbeafe!important;box-shadow:inset 0 0 0 2px #3b82f6!important}.task-row.drop-inside .task-row-name:after{content:"  ·  Make child";color:#2563eb;font-size:10px;font-weight:700}.task-collapse-chevron{width:18px;height:24px;flex:0 0 18px;border:0;padding:0;background:transparent;color:#64748b;font-size:17px;line-height:1;cursor:pointer}.task-collapse-chevron:hover{color:var(--primary)}.task-collapse-chevron.placeholder{cursor:default;pointer-events:none}.task-row-attachments{position:relative;flex:0 0 auto}.task-attachment-trigger{display:inline-flex;align-items:center;gap:3px;height:26px;padding:0 6px;border:1px solid #dbe2ea;border-radius:999px;background:#f8fafc;color:#64748b;font:inherit;font-size:10px;cursor:pointer}.task-attachment-trigger:hover,.task-attachment-trigger[aria-expanded=true]{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}.task-attachment-popover{position:absolute;top:calc(100% + 7px);right:0;z-index:45;width:250px;max-height:220px;overflow-y:auto;padding:6px;border:1px solid #dbe2ea;border-radius:10px;background:#fff;box-shadow:0 12px 30px #0f172a29}.task-attachment-heading{padding:5px 7px 7px;color:#64748b;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.task-attachment-popover a,.task-attachment-invalid{display:flex;align-items:center;gap:8px;min-width:0;padding:8px;border-radius:7px;color:#334155;font-size:11px;text-decoration:none}.task-attachment-popover a:hover{color:#1d4ed8;background:#eff6ff}.task-attachment-popover a span:last-child,.task-attachment-invalid span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-attachment-link-icon{color:#2563eb;font-weight:700}.task-attachment-invalid{color:#b91c1c;background:#fef2f2}.paste-root-btn{margin-left:auto;margin-right:7px;padding:5px 9px;border:1px solid #cbd5e1;border-radius:7px;background:#fff;color:#334155;font:inherit;font-size:11px;font-weight:600;cursor:pointer}.paste-root-btn:hover{border-color:var(--primary);color:var(--primary);background:#eff6ff}.paste-root-btn:disabled{opacity:.5;cursor:not-allowed}.task-row-color{width:5px;height:36px;border-radius:3px;flex-shrink:0}.task-row-info{flex:1;min-width:0}.task-row-name{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-primary)}.task-row-dates{font-size:11px;color:var(--text-secondary);margin-top:2px}.task-row-assignee{background:#6c757d;color:#fff;font-size:10px;font-weight:600;padding:3px 8px;border-radius:10px;white-space:nowrap;flex-shrink:0}.task-row-menu{position:relative;padding:0;color:var(--text-secondary);border-radius:var(--radius);flex-shrink:0;line-height:1}.task-row-menu:hover{background:var(--border-color)}.task-row-menu-trigger{width:28px;height:30px;display:grid;place-items:center;border:0;border-radius:7px;background:transparent;color:inherit;cursor:pointer;font-size:18px;line-height:1}.task-menu-dropdown{position:absolute;right:0;top:100%;background:#fff;border:1px solid var(--border-color);border-radius:var(--radius);box-shadow:var(--shadow);z-index:100;width:248px;overflow:visible;padding:6px}.task-menu-dropdown button{display:flex;align-items:center;gap:10px;width:100%;min-height:36px;padding:7px 9px;border:none;border-radius:7px;background:transparent;text-align:left;cursor:pointer;font-size:13px;color:var(--text-primary)}.task-menu-dropdown button:hover{background:var(--row-hover)}.task-menu-dropdown button:disabled{color:#a8b1bf;cursor:not-allowed;background:transparent}.task-menu-dropdown button.danger{color:var(--danger)}.task-menu-dropdown button.danger:hover{background:#fef2f2}.task-menu-divider{height:1px;margin:5px 4px;background:#e7ebf0}.task-menu-icon{width:20px;height:20px;flex:0 0 auto;display:grid;place-items:center;color:#64748b;font-size:17px;font-weight:500}.task-menu-chevron{margin-left:auto;color:#94a3b8;font-size:20px}.task-menu-check{margin-left:auto;color:#2563eb;font-weight:700}.task-status-submenu{width:100%}.task-menu-dropdown.status-view>:not(.task-status-submenu){display:none}.task-status-submenu .task-status-back{color:#475569;font-weight:700}.task-status-submenu button.selected{color:#1d4ed8;background:#eff6ff;font-weight:600}.task-row-branch{width:11px;height:20px;flex:0 0 auto;margin-left:-12px;border-left:1px solid #cbd5e1;border-bottom:1px solid #cbd5e1;border-radius:0 0 0 5px;transform:translateY(-5px)}.add-task-menu{position:absolute;top:46px;right:8px;width:220px;padding:6px;background:#fff;border:1px solid #dbe3ee;border-radius:11px;box-shadow:var(--shadow);z-index:50}.add-task-menu>button,.add-task-template>button:first-child{width:100%;min-height:34px;padding:7px 9px;border:0;border-radius:7px;background:transparent;color:#334155;cursor:pointer;text-align:left}.add-task-menu button:hover{background:#eff6ff}.add-task-menu-label{padding:6px 9px 4px;color:#94a3b8;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.add-task-template{display:flex;align-items:center}.add-task-template>button:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-task-template>button.danger{width:28px;height:28px;flex:0 0 auto;border:0;border-radius:7px;background:transparent;color:#94a3b8;cursor:pointer;font-size:17px}.add-task-template>button.danger:hover{color:#dc2626;background:#fee2e2}.gantt-timeline{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.gantt-timeline-header{overflow:hidden;border-bottom:1px solid var(--border-color);background:var(--toolbar-bg);flex-shrink:0;height:56px}.timeline-header-row{display:flex;height:56px}.timeline-header-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;border-right:1px solid var(--border-color);font-size:12px;color:var(--text-secondary);flex-shrink:0;-webkit-user-select:none;user-select:none}.timeline-header-cell.today{background:#ef444414;color:var(--today-marker);font-weight:600}.timeline-header-cell.weekend{background:var(--weekend-bg)}.timeline-month{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted)}.timeline-day{font-size:14px;font-weight:500}.gantt-timeline-body{flex:1;overflow:auto;position:relative}.timeline-grid{position:relative;min-height:100%}.timeline-col{position:absolute;top:0;border-right:1px solid var(--border-color)}.timeline-col.weekend{background:var(--weekend-bg)}.timeline-row{position:absolute;left:0;right:0;border-bottom:1px solid var(--border-color)}.timeline-row.alt{background:var(--row-alt)}.today-marker{position:absolute;top:0;width:2px;background:var(--today-marker);z-index:5;pointer-events:none}.today-marker:before{content:"";position:absolute;top:-4px;left:-5px;width:12px;height:12px;background:var(--today-marker);border-radius:50%}.task-bar{position:absolute;border-radius:var(--radius);cursor:pointer;z-index:3;display:flex;align-items:center;overflow:visible;transition:box-shadow .15s,filter .15s;box-shadow:0 1px 3px #0003}.task-bar:hover{box-shadow:0 3px 10px #0000004d;filter:brightness(1.05);z-index:4}.task-bar.dragging{opacity:.85;z-index:10;cursor:grabbing;box-shadow:0 4px 16px #0000004d}.task-bar-progress{position:absolute;left:0;top:0;height:100%;background:#fff3;border-radius:var(--radius) 0 0 var(--radius);pointer-events:none;overflow:hidden}.task-progress-handle{position:absolute;top:-4px;z-index:8;width:17px;height:17px;padding:0;border:3px solid #2563eb;border-radius:50%;background:#fff;box-shadow:0 2px 7px #0f172a47;cursor:ew-resize;opacity:0;transform:translate(-50%,4px) scale(.82);transition:opacity .14s ease,transform .14s ease,box-shadow .14s ease;touch-action:none}.task-bar:hover .task-progress-handle,.task-progress-handle:focus-visible,.task-progress-handle.dragging{opacity:1;transform:translate(-50%) scale(1)}.task-progress-handle:hover,.task-progress-handle.dragging{box-shadow:0 0 0 4px #2563eb2b,0 3px 9px #0f172a4d}.task-progress-handle:focus-visible{outline:2px solid #93c5fd;outline-offset:3px}.task-progress-value{position:absolute;left:50%;bottom:calc(100% + 6px);min-width:36px;padding:3px 5px;border-radius:5px;background:#0f172a;color:#fff;font-size:9px;font-weight:700;line-height:1;pointer-events:none;opacity:0;transform:translate(-50%) translateY(3px);transition:opacity .12s ease,transform .12s ease}.task-progress-handle:hover .task-progress-value,.task-progress-handle:focus-visible .task-progress-value,.task-progress-handle.dragging .task-progress-value{opacity:1;transform:translate(-50%) translateY(0)}.task-bar-content{flex:1;padding:2px 10px;min-width:0;cursor:grab;z-index:1}.task-bar-name{font-size:11px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.task-bar-dates{font-size:9px;opacity:.85;white-space:nowrap;line-height:1.3}.task-bar-handle{position:absolute;top:0;width:8px;height:100%;cursor:col-resize;z-index:2;transition:background .15s}.task-bar-handle.left{left:0;border-radius:var(--radius) 0 0 var(--radius)}.task-bar-handle.right{right:0;border-radius:0 var(--radius) var(--radius) 0}.task-bar-handle:hover{background:#ffffff4d}.task-bar-complete{position:absolute;right:6px;top:50%;transform:translateY(-50%);font-size:14px;font-weight:700;z-index:2}.task-bar-status-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;z-index:3;margin-left:6px}.task-row-status{flex-shrink:0;display:flex;align-items:center}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{background:#fff;border-radius:12px;box-shadow:var(--shadow-lg);width:480px;max-width:95vw;max-height:90vh;overflow-y:auto;animation:modalIn .2s ease-out}.task-modal{width:560px;overflow:visible}@keyframes modalIn{0%{opacity:0;transform:scale(.95) translateY(-10px)}to{opacity:1;transform:scale(1) translateY(0)}}.modal-tabs{display:flex;border-bottom:2px solid var(--border-color);padding:0 8px}.modal-tab{background:none;border:none;padding:14px 20px;font-size:14px;color:var(--text-secondary);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .15s;font-family:inherit}.modal-tab:hover{color:var(--text-primary)}.modal-tab.active{color:var(--danger);border-bottom-color:var(--danger);font-weight:500}.tab-content{padding:20px 24px;min-height:220px}.tf-row{display:flex;align-items:flex-end;gap:12px;margin-bottom:16px}.tf-field{display:flex;flex-direction:column}.tf-field label{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}.tf-field input[type=text],.tf-field input[type=date],.tf-field input[type=number],.tf-field input[type=url],.tf-field select,.tf-field textarea{padding:8px 10px;border:1px solid var(--border-color);border-radius:var(--radius);font-size:13px;outline:none;font-family:inherit;transition:border-color .15s}.tf-field input:focus,.tf-field select:focus,.tf-field textarea:focus{border-color:var(--primary);box-shadow:0 0 0 2px #3b82f61a}.tf-field-label{flex:1}.tf-field-color{width:60px;align-items:center}.tf-field-type{width:110px}.tf-field-type select{width:100%}.tf-field-weekdays{width:80px;text-align:center}.tf-field-weekdays input{text-align:center;width:100%}.tf-field-status{flex:1}.tf-field-progress{width:100px}.tf-row-top,.tf-row-dates,.tf-row-status{align-items:flex-end}.tf-arrow{color:var(--text-muted);font-size:18px;padding-bottom:8px;flex-shrink:0}.tf-color-btn-wrap{position:relative}.tf-color-btn{width:36px;height:36px;border-radius:var(--radius);border:2px solid var(--border-color);cursor:pointer;transition:transform .15s}.tf-color-btn:hover{transform:scale(1.1)}.tf-color-dropdown{position:absolute;top:42px;left:0;background:#fff;border:1px solid var(--border-color);border-radius:var(--radius);box-shadow:var(--shadow);padding:8px;display:flex;gap:6px;flex-wrap:wrap;width:180px;z-index:10}.color-swatch-sm{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:all .15s}.color-swatch-sm:hover{transform:scale(1.15)}.color-swatch-sm.selected{border-color:var(--text-primary);box-shadow:0 0 0 2px #fff,0 0 0 3px var(--text-primary)}.tf-custom-color{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:6px;border-top:1px solid var(--border-color);color:var(--text-secondary);font-size:12px;cursor:pointer}.tf-custom-color input{width:34px;height:26px;padding:0;border:0;background:none;cursor:pointer}.tf-gradient-toggle{display:flex;align-items:center;gap:5px;margin-top:7px;font-size:11px;color:var(--text-secondary);cursor:pointer}.tf-gradient-toggle input{margin:0}.tf-status-wrap{position:relative}.tf-status-btn{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border-color);border-radius:var(--radius);background:#fff;cursor:pointer;font-size:13px;font-family:inherit;min-width:160px;transition:border-color .15s}.tf-status-btn:hover{border-color:#adb5bd}.tf-chevron{margin-left:auto;font-size:8px;color:var(--text-muted)}.tf-status-dropdown{position:absolute;top:auto;bottom:calc(100% + 4px);left:0;background:#fff;border:1px solid var(--border-color);border-radius:var(--radius);box-shadow:var(--shadow);z-index:10;min-width:180px;overflow:hidden;margin-top:0}.tf-status-option{display:flex;align-items:center;gap:10px;width:100%;padding:8px 14px;border:none;background:none;cursor:pointer;font-size:13px;font-family:inherit;color:var(--text-primary);text-align:left}.tf-status-option:hover{background:var(--row-hover)}.tf-status-option.selected{background:#eff6ff;font-weight:500}.tf-progress-input{display:flex;align-items:center;gap:4px}.tf-progress-input input{width:60px;padding:8px 10px;border:1px solid var(--border-color);border-radius:var(--radius);font-size:13px;outline:none;font-family:inherit;text-align:center}.tf-progress-input input:focus{border-color:var(--primary)}.tf-progress-input span{color:var(--text-secondary);font-size:13px}.tf-description{width:100%;min-height:180px;padding:12px;border:1px solid var(--border-color);border-radius:var(--radius);font-size:14px;font-family:inherit;outline:none;resize:vertical;line-height:1.5}.tf-description:focus{border-color:var(--primary);box-shadow:0 0 0 2px #3b82f61a}.tf-section{margin-bottom:20px;padding:16px;border:1px solid var(--border-color);border-radius:var(--radius)}.tf-section label{display:block;font-size:11px;font-weight:600;color:var(--text-secondary);margin-bottom:10px}.tf-resources-list{display:flex;flex-wrap:wrap;gap:8px;min-height:32px}.tf-resource-tag{display:inline-flex;align-items:center;gap:6px;background:#f0f0f0;border:1px solid var(--border-color);border-radius:16px;padding:4px 10px;font-size:13px}.tf-resource-diamond{color:var(--primary);font-size:10px}.tf-resource-remove{background:none;border:none;cursor:pointer;color:var(--text-secondary);font-size:14px;padding:0 2px;line-height:1}.tf-resource-remove:hover{color:var(--danger)}.tf-empty{color:var(--text-muted);font-size:13px;font-style:italic}.tf-add-resource{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.tf-add-resource input{flex:1;min-width:120px;padding:8px 10px;border:1px solid var(--border-color);border-radius:var(--radius);font-size:13px;outline:none;font-family:inherit}.tf-add-resource input:focus{border-color:var(--primary)}.tf-saved-resources{margin-top:14px;padding-top:12px;border-top:1px solid var(--border-color)}.tf-saved-resources>span{display:block;margin-bottom:8px;color:var(--text-muted);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.tf-saved-resources>div{display:flex;flex-wrap:wrap;gap:6px;max-height:118px;overflow-y:auto}.tf-saved-resources button{padding:5px 9px;border:1px solid #dbe2ea;border-radius:999px;background:#f8fafc;color:#475569;font:inherit;font-size:11px;cursor:pointer}.tf-saved-resources button:hover{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}.tf-btn-sm{padding:8px 14px!important;font-size:13px!important}.tf-btn-directory{display:flex!important;align-items:center;gap:6px;font-size:13px!important;padding:8px 14px!important}.tf-btn-directory:disabled{opacity:.5;cursor:not-allowed}.tf-hint{color:var(--text-secondary);font-size:13px;margin-bottom:16px;line-height:1.5}.tf-hint-small{color:var(--text-muted);font-size:11px;font-style:italic;margin:4px 0 12px}.tf-attachment-row{display:flex;align-items:center;gap:8px;margin-bottom:10px}.tf-attachment-icon{color:var(--danger);font-size:18px;flex-shrink:0}.tf-attachment-row input{flex:1;padding:10px 12px;border:1px solid var(--border-color);border-radius:var(--radius);font-size:13px;outline:none;font-family:inherit}.tf-attachment-row input:focus{border-color:var(--primary)}.tf-attachment-remove{background:none;border:none;cursor:pointer;color:var(--text-muted);font-size:16px;padding:4px;flex-shrink:0}.tf-attachment-remove:hover{color:var(--danger)}.modal-footer{display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:14px 24px;border-top:1px solid var(--border-color);background:var(--toolbar-bg);border-radius:0 0 12px 12px}.modal-footer-left{margin-right:auto}.modal-footer-right{display:flex;gap:10px}.btn-danger-outline{background:#fff;color:var(--text-primary);border:1px solid var(--border-color);padding:8px 18px;border-radius:var(--radius);font-size:13px;cursor:pointer;font-family:inherit;transition:all .15s}.btn-danger-outline:hover{border-color:var(--danger);color:var(--danger)}.btn-save{background:var(--danger);color:#fff;border:none;padding:8px 28px;border-radius:var(--radius);font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .15s}.btn-save:hover{background:var(--danger-hover)}.btn-primary{background:var(--primary);color:#fff;border:none;padding:10px 24px;border-radius:var(--radius);font-size:14px;font-weight:500;cursor:pointer;transition:background .15s;font-family:inherit}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{background:#fff;color:var(--text-primary);border:1px solid var(--border-color);padding:8px 18px;border-radius:var(--radius);font-size:13px;cursor:pointer;font-family:inherit;transition:all .15s}.btn-secondary:hover{background:var(--toolbar-bg)}.btn-danger{background:#fff;color:var(--danger);border:1px solid var(--danger);padding:10px 24px;border-radius:var(--radius);font-size:14px;font-weight:500;cursor:pointer;transition:all .15s;font-family:inherit}.btn-danger:hover{background:var(--danger);color:#fff}.license-gate{display:flex;align-items:center;justify-content:center;height:100vh;background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460)}.license-loading{text-align:center;color:#fff}.spinner{width:40px;height:40px;border:3px solid rgba(255,255,255,.2);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;margin:0 auto 16px}@keyframes spin{to{transform:rotate(360deg)}}.license-card{background:#fff;border-radius:16px;padding:48px;text-align:center;box-shadow:var(--shadow-lg);width:420px;max-width:90vw;animation:modalIn .3s ease-out}.license-logo{font-size:48px;margin-bottom:16px}.license-card h1{font-size:24px;font-weight:700;margin-bottom:8px;color:var(--text-primary)}.license-card>p{color:var(--text-secondary);margin-bottom:24px;font-size:14px}.license-input{width:100%;padding:12px 16px;border:2px solid var(--border-color);border-radius:var(--radius);font-size:16px;text-align:center;letter-spacing:2px;font-family:Consolas,Courier New,monospace;outline:none;transition:border-color .15s;margin-bottom:8px}.license-input:focus{border-color:var(--primary)}.license-error{color:var(--danger);font-size:13px;margin:8px 0}.license-btn{width:100%;margin-top:16px;padding:14px!important;font-size:16px!important}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#a1a1a1}:root{--header-bg: #0f172a;--toolbar-bg: #f8fafc;--toolbar-border: #e2e8f0;--border-color: #e2e8f0;--text-primary: #0f172a;--text-secondary: #64748b;--text-muted: #94a3b8;--timeline-bg: #ffffff;--row-hover: #eff6ff;--row-alt: #f8fafc;--weekend-bg: #f4f7fb;--primary: #2563eb;--primary-hover: #1d4ed8;--radius: 8px;--shadow: 0 8px 24px rgba(15, 23, 42, .1);--shadow-lg: 0 24px 64px rgba(15, 23, 42, .2)}body{letter-spacing:-.005em}button,input,select,textarea{font:inherit}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid rgba(37,99,235,.22);outline-offset:2px}.header{height:60px;padding:0 22px;background:linear-gradient(115deg,#0f172a,#172554);border-bottom:1px solid rgba(255,255,255,.08);box-shadow:0 6px 24px #0f172a2e;z-index:20}.header-left{gap:11px}.header-logo{width:38px;height:38px;display:grid;place-items:center;color:#dbeafe;background:#ffffff17;border:1px solid rgba(255,255,255,.11);border-radius:11px;box-shadow:inset 0 1px #ffffff14}.app-menu-wrap{position:relative}.app-menu-trigger{border:1px solid rgba(255,255,255,.11);cursor:pointer;font:inherit}.app-menu{position:absolute;top:calc(100% + 11px);left:0;width:292px;max-height:min(610px,calc(100vh - 80px));overflow-y:auto;padding:7px;color:#1e293b;background:#fff;border:1px solid #dbe3ee;border-radius:13px;box-shadow:0 20px 55px #0f172a40;z-index:500;animation:projectMenuIn .14s ease-out}.app-menu>button{width:100%;min-height:42px;display:flex;align-items:center;gap:11px;padding:8px 10px;border:0;border-radius:8px;background:transparent;color:#334155;cursor:pointer;text-align:left}.app-menu>button:hover,.app-menu>button.selected{background:#eff6ff;color:#1d4ed8}.app-menu>button:disabled{color:#a8b1bf;cursor:not-allowed;background:transparent}.app-menu>button.danger{color:#dc2626}.app-menu-glyph{width:25px;flex:0 0 auto;display:grid;place-items:center;color:#64748b;font-size:18px}.app-menu-arrow,.app-menu-meta{margin-left:auto;color:#94a3b8;font-size:12px}.app-menu-divider{height:1px;margin:5px 7px;background:#e7ebf0}.app-menu-back{font-weight:700;border-bottom:1px solid #e7ebf0!important;border-radius:7px 7px 0 0!important}.app-menu-section-label{padding:9px 10px 5px;color:#94a3b8;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.app-menu-note{margin:5px;padding:9px 10px;color:#64748b;background:#f8fafc;border-radius:8px;font-size:12px;line-height:1.45}.app-menu-password{display:flex;gap:6px;padding:7px 5px}.app-menu-password input{min-width:0;flex:1;padding:9px;border:1px solid #cbd5e1;border-radius:8px;outline:none}.app-menu-password input:focus{border-color:#2563eb;box-shadow:0 0 0 3px #2563eb1a}.app-menu-password button{padding:8px 11px;border:0;border-radius:8px;color:#fff;background:#2563eb;cursor:pointer;font-weight:600}.app-menu-error{padding:2px 9px 7px;color:#dc2626;font-size:12px}.header-name{font-size:17px;letter-spacing:-.02em}.header-edit-icon{display:inline-flex;transform:translateY(1px)}.header-tab{opacity:1;padding:7px 12px;color:#cbd5e1;background:#ffffff0f;border:1px solid rgba(255,255,255,.08);border-radius:999px}.header-tab.active{border-bottom:1px solid rgba(255,255,255,.08);background:#ffffff1a}.toolbar{height:54px;padding:8px 18px;background:#f8fafcf5;box-shadow:0 1px #0f172a08}.toolbar-left{gap:5px;padding:3px;background:#eef2f7;border-radius:10px}.toolbar-group-divider{width:1px;height:21px;margin:0 2px;background:#cbd5e1}.toolbar-btn:disabled{opacity:.38;cursor:not-allowed;transform:none}.toolbar-search{width:190px;height:34px;display:flex;align-items:center;gap:7px;padding:0 9px;color:#64748b;background:#fff;border:1px solid #dbe3ee;border-radius:8px}.toolbar-search:focus-within{border-color:#93c5fd;box-shadow:0 0 0 3px #2563eb14}.toolbar-search input{min-width:0;flex:1;border:0;outline:0;color:#334155;background:transparent;font-size:12px}.toolbar-search button{border:0;background:transparent;color:#94a3b8;cursor:pointer;font-size:16px}.toolbar-resource-filter{height:34px;display:flex;align-items:center;gap:6px;padding:0 7px;border:1px solid #d9e0e8;border-radius:9px;background:#fff;color:#64748b}.toolbar-resource-filter:focus-within{border-color:#93c5fd;box-shadow:0 0 0 3px #2563eb14}.toolbar-resource-filter select{max-width:140px;border:0;outline:0;background:transparent;color:#334155;font:inherit;font-size:11px;cursor:pointer}.toolbar-filter-badge{padding:5px 8px;color:#1d4ed8;background:#dbeafe;border-radius:999px;font-size:10px;font-weight:700;text-transform:capitalize}.combined-filter{position:relative;flex:0 0 auto}.combined-filter-trigger{width:170px;height:34px;display:flex;align-items:center;gap:7px;padding:0 10px;border:1px solid #d7dde5;border-radius:8px;background:#fff;color:#64748b;font:inherit;font-size:12px;text-align:left;cursor:pointer}.combined-filter-trigger:hover,.combined-filter-trigger[aria-expanded=true]{border-color:#94a3b8;background:#f8fafc}.combined-filter-trigger.active{color:#1d4ed8;border-color:#93c5fd;background:#eff6ff}.combined-filter-caret{margin-left:auto;color:#334155}.combined-filter-count{min-width:18px;height:18px;display:inline-grid;place-items:center;padding:0 5px;border-radius:999px;color:#fff;background:#2563eb;font-size:9px;font-weight:700}.combined-filter-menu,.combined-filter-states{position:absolute;z-index:80;width:248px;padding:9px 0;border:1px solid #d9dee5;border-radius:3px;background:#fff;box-shadow:0 6px 18px #0f172a2e}.combined-filter-menu{top:calc(100% + 5px);left:0}.combined-filter-states{top:calc(100% - 77px);left:calc(100% + 1px);width:215px}.combined-filter-resources{max-height:225px;overflow-y:auto}.combined-filter-option{min-height:48px;display:flex;align-items:center;gap:13px;padding:6px 20px;color:#334155;font-size:13px;cursor:pointer}.combined-filter-option:hover{background:#f1f5f9}.combined-filter-option input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;flex:0 0 20px;margin:0;border:2px solid #8b9298;border-radius:3px;background:#fff;cursor:pointer}.combined-filter-option input:checked{border-color:#2563eb;background:#2563eb;box-shadow:inset 0 0 0 3px #fff}.combined-filter-divider{height:1px;margin:8px 0;background:#e2e8f0}.combined-filter-state-trigger,.combined-filter-clear{width:100%;min-height:49px;display:grid;grid-template-columns:28px 1fr auto;align-items:center;gap:8px;padding:8px 20px;border:0;background:#fff;color:#334155;font:inherit;font-size:13px;text-align:left;cursor:pointer}.combined-filter-state-trigger:hover,.combined-filter-clear:not(:disabled):hover{background:#f1f5f9}.combined-filter-funnel{color:#6b7280}.combined-filter-clear{color:#64748b}.combined-filter-clear:disabled{color:#b5bbc3;cursor:default}.combined-filter-empty{padding:15px 20px;color:#94a3b8;font-size:12px}.combined-filter-states .state-option{min-height:49px}.write-lock-banner{position:fixed;left:50%;bottom:16px;transform:translate(-50%);z-index:200;padding:9px 14px;color:#7c2d12;background:#ffedd5;border:1px solid #fed7aa;border-radius:999px;box-shadow:var(--shadow);font-size:12px;font-weight:600}.toolbar-btn{min-height:34px;padding:6px 12px;border-color:#dbe3ee;color:#334155;box-shadow:0 1px 2px #0f172a0a}.toolbar-btn:hover{background:#f8fafc;border-color:#cbd5e1;color:#0f172a;transform:translateY(-1px)}.toolbar-icon-btn{width:34px;padding:0}.toolbar-center{gap:7px}.toolbar-date{min-width:102px;color:#334155;font-weight:600}.toolbar-separator{margin:0 1px;color:#94a3b8;font-size:11px;text-transform:uppercase}.toolbar-btn-today{padding-inline:15px;border-color:#bfdbfe;color:#1d4ed8;background:#eff6ff}.gantt-task-list{border-right:1px solid #dbe3ee;box-shadow:7px 0 20px #0f172a09;z-index:7}.gantt-task-list-header,.gantt-timeline-header{height:58px;background:#f8fafc;border-bottom-color:#dbe3ee}.gantt-task-list-header{padding:0 14px}.task-list-title{font-size:11px;letter-spacing:.11em;color:#475569}.collapse-btn,.expand-btn{width:28px;height:28px;padding:0;display:grid;place-items:center;border-color:#dbe3ee;background:#fff;box-shadow:0 1px 2px #0f172a0a}.collapsed-task-rail{position:relative;width:38px;min-width:38px;height:100%;flex-shrink:0;background:#fff;border-right:1px solid #dbe3ee;box-shadow:4px 0 12px #0f172a0a;z-index:8}.collapsed-task-rail .expand-btn{position:absolute;top:14px;left:50%;transform:translate(-50%);z-index:1}.add-task-btn{width:30px;height:30px;border-radius:9px;box-shadow:0 4px 10px #2563eb38}.add-task-btn:hover{transform:translateY(-1px);box-shadow:0 6px 14px #2563eb47}.task-row{padding:0 14px;gap:9px;border-bottom-color:#edf1f5;transition:background .15s ease,box-shadow .15s ease}.task-row:hover{background:#eff6ff;box-shadow:inset 3px 0 #3b82f6}.task-row:nth-child(2n){background:#fbfcfe}.task-row:nth-child(2n):hover{background:#eff6ff}.task-row-color{width:4px;height:34px;border-radius:999px;opacity:.9}.task-row-name{color:#1e293b;font-weight:600;letter-spacing:-.01em}.task-row-dates{color:#8492a6}.task-row-assignee{background:#e2e8f0;color:#475569;padding:4px 8px}.task-row-menu{opacity:.35;transition:opacity .15s,background .15s}.task-row:hover .task-row-menu,.task-row-menu:focus,.task-row-menu:focus-within{opacity:1}.timeline-header-row{height:58px}.timeline-header-cell{border-right-color:#e5eaf0}.timeline-month{color:#64748b}.timeline-day{color:#334155;font-weight:600}.timeline-header-cell.today{background:#fff1f2}.timeline-col{border-right-color:#edf1f5}.timeline-row{border-bottom-color:#edf1f5}.today-marker{width:1px;box-shadow:0 0 0 1px #ef444414}.today-marker:before{width:9px;height:9px;left:-4px;top:-2px;box-shadow:0 0 0 3px #ef444421}.task-bar{border-radius:8px;box-shadow:0 2px 7px #0f172a33,inset 0 1px #ffffff2e;transition:box-shadow .16s ease,filter .16s ease,transform .16s ease}.task-bar:hover{transform:translateY(-1px);box-shadow:0 7px 18px #0f172a40}.task-bar-progress{background:#fff3;border-right:1px solid rgba(255,255,255,.25)}.task-bar-name{letter-spacing:-.005em}.status-icon{flex:0 0 auto;overflow:visible;color:var(--status-color)}.status-icon__backdrop{fill:var(--status-color);opacity:.1}.status-icon__stroke,.status-icon__mark{fill:none;stroke:var(--status-color);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.status-icon__stroke--strong{stroke-width:2.2}.status-icon__fill{fill:var(--status-color)}.status-icon__mark--inverse{stroke:#fff;stroke-width:1.9}.status-icon__fill--inverse{fill:#fff}.status-icon__spinner{transform-origin:12px 12px;animation:status-spin 1.15s linear infinite}.status-icon--in-progress .status-icon__backdrop{animation:status-pulse 1.6s ease-in-out infinite}.task-row-status{width:24px;height:24px;display:grid;place-items:center;border:1px solid color-mix(in srgb,var(--status-color, #94a3b8) 13%,transparent);border-radius:8px}.task-bar-status-icon{margin-right:0;margin-left:8px}.task-bar-status-icon .status-icon__backdrop{fill:#fff;opacity:.92}@keyframes status-spin{to{transform:rotate(360deg)}}@keyframes status-pulse{50%{opacity:.2;transform:scale(1.06);transform-origin:center}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important}.status-icon--in-progress .status-icon__backdrop{animation:none}.task-bar,.toolbar-btn,.modal{transition:none}}.modal-overlay{background:#0f172a7a;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.modal{border:1px solid rgba(255,255,255,.75);border-radius:16px}.modal-tabs{padding:5px 10px 0;border-bottom:1px solid #e2e8f0;background:#f8fafc;border-radius:16px 16px 0 0}.modal-tab{padding:14px 16px}.modal-tab.active{color:#2563eb;border-bottom-color:#2563eb;font-weight:600}.tf-field input[type=text],.tf-field input[type=date],.tf-field input[type=number],.tf-field input[type=url],.tf-field select,.tf-field textarea,.tf-status-btn{min-height:38px;border-color:#dbe3ee;background:#fff}.tf-field input:hover,.tf-field select:hover,.tf-field textarea:hover,.tf-status-btn:hover{border-color:#b8c5d6}.tf-field input:focus,.tf-field select:focus,.tf-field textarea:focus{box-shadow:0 0 0 3px #2563eb1a}.tf-status-dropdown,.task-menu-dropdown{border-color:#dbe3ee;border-radius:10px;box-shadow:var(--shadow)}.tf-status-option{min-height:38px}.tf-status-option.selected{background:#eff6ff;color:#1d4ed8}.modal-footer{background:#f8fafc;border-top-color:#e2e8f0}.btn-save{background:#2563eb;box-shadow:0 3px 9px #2563eb33}::-webkit-scrollbar-track{background:#f1f5f9}::-webkit-scrollbar-thumb{background:#cbd5e1;border:2px solid #f1f5f9;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}@media(max-width:720px){:root{--task-list-width: 320px}.header{padding:0 14px}.header-tab{display:none}.toolbar{padding-inline:10px}.toolbar-date{min-width:auto;font-size:12px}.toolbar-separator{display:none}}
