*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-bg: #f8f9fa;--color-surface: #ffffff;--color-border: #dee2e6;--color-text: #212529;--color-text-muted: #6c757d;--color-primary: #0d6efd;--color-primary-hover: #0b5ed7;--color-header-bg: #1e2a3a;--color-header-text: #ffffff;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;font-size:14px}body{font-family:var(--font);background:var(--color-bg);color:var(--color-text);line-height:1.5}button{cursor:pointer;font-family:inherit;font-size:inherit}a{color:inherit}select{font-family:inherit;font-size:inherit}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.app-header{display:flex;align-items:center;justify-content:space-between;padding:0 16px;height:52px;background:var(--color-header-bg);color:var(--color-header-text);flex-shrink:0;gap:16px}.header-left{display:flex;align-items:center;gap:12px}.app-title{font-size:18px;font-weight:700;letter-spacing:.5px}.space-badge{background:#ffffff26;border-radius:4px;padding:2px 8px;font-size:12px;color:#fffc}.header-right{display:flex;align-items:center;gap:12px}.error-banner{display:flex;align-items:center;gap:8px;background:#f8d7da;border-bottom:1px solid #f5c2c7;color:#842029;padding:8px 16px;font-size:13px}.error-close{margin-left:auto;background:none;border:none;color:inherit;font-size:16px;padding:0 4px}.app-main{flex:1;overflow:hidden;display:flex;flex-direction:column}.settings-panel{position:relative}.settings-toggle{background:#ffffff1a;border:1px solid rgba(255,255,255,.25);border-radius:6px;color:#fff;padding:6px 12px;font-size:13px;transition:background .15s}.settings-toggle:hover{background:#fff3}.settings-form-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:100;display:flex;align-items:center;justify-content:center}.settings-form{background:#fff;border-radius:10px;padding:28px 32px;width:420px;box-shadow:0 8px 32px #0003}.settings-form h2{font-size:16px;font-weight:700;margin-bottom:20px;color:var(--color-text)}.form-group{margin-bottom:16px}.form-group label{display:block;font-weight:600;margin-bottom:4px;font-size:13px}.input-hint{font-size:11px;color:var(--color-text-muted);margin-bottom:6px}.form-group input{width:100%;border:1px solid var(--color-border);border-radius:6px;padding:8px 10px;font-size:13px;outline:none;transition:border-color .15s}.form-group input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #0d6efd26}.form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}.btn-primary{background:var(--color-primary);color:#fff;border:none;border-radius:6px;padding:8px 18px;font-size:13px;font-weight:600;transition:background .15s}.btn-primary:hover{background:var(--color-primary-hover)}.btn-secondary{background:none;border:1px solid var(--color-border);border-radius:6px;padding:8px 16px;font-size:13px;color:var(--color-text-muted);transition:border-color .15s}.btn-secondary:hover{border-color:#adb5bd}.project-selector{display:flex;align-items:center;gap:8px}.project-selector label{font-size:12px;color:#ffffffbf;white-space:nowrap}.project-selector select{background:#ffffff1a;border:1px solid rgba(255,255,255,.25);border-radius:6px;color:#fff;padding:6px 10px;font-size:13px;min-width:200px;outline:none}.project-selector select option{background:var(--color-header-bg)}.loading-text{font-size:12px;color:#ffffffb3}.gantt-wrapper{display:flex;flex-direction:column;height:100%;overflow:hidden}.gantt-toolbar{display:flex;align-items:center;gap:16px;padding:8px 16px;background:#fff;border-bottom:1px solid var(--color-border);flex-shrink:0}.view-mode-buttons{display:flex;border:1px solid var(--color-border);border-radius:6px;overflow:hidden}.view-btn{background:#fff;border:none;padding:5px 14px;font-size:12px;color:var(--color-text-muted);border-right:1px solid var(--color-border);transition:background .1s,color .1s}.view-btn:last-child{border-right:none}.view-btn.active{background:var(--color-primary);color:#fff}.view-btn:hover:not(.active){background:#f0f2f5;color:var(--color-text)}.filter-status{display:flex;align-items:center;gap:8px;font-size:12px}.filter-status label{color:var(--color-text-muted)}.filter-status select{border:1px solid var(--color-border);border-radius:5px;padding:4px 8px;font-size:12px;outline:none}.issue-count{font-size:12px;color:var(--color-text-muted);margin-left:auto}.gantt-container{display:flex;flex:1;overflow:hidden}.gantt-labels{flex-shrink:0;border-right:2px solid var(--color-border);display:flex;flex-direction:column;overflow:hidden}.gantt-label-header{display:flex;align-items:center;height:40px;background:#f1f3f5;border-bottom:2px solid var(--color-border);font-size:11px;font-weight:700;color:var(--color-text-muted);text-transform:uppercase;padding:0 4px;flex-shrink:0}.gantt-label-body{flex:1;overflow-y:auto;overflow-x:hidden}.gantt-label-row{display:flex;align-items:center;border-bottom:1px solid var(--color-border);padding:0 4px;font-size:12px}.gantt-label-row:hover{background:#f8f9fa}.col-key{width:90px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-summary{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 6px}.col-assignee{width:80px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-text-muted);font-size:11px}.issue-key-link{text-decoration:none;font-weight:600;font-size:11px}.issue-key-link:hover{text-decoration:underline}.gantt-timeline{flex:1;overflow:auto;position:relative}.gantt-header{position:sticky;top:0;z-index:10;background:#f1f3f5;border-bottom:2px solid var(--color-border)}.gantt-header-cell{position:absolute;top:0;bottom:0;display:flex;align-items:center;padding-left:6px;font-size:11px;font-weight:600;color:var(--color-text-muted);border-right:1px solid var(--color-border);white-space:nowrap;overflow:hidden}.gantt-body{position:relative;min-height:100%}.gantt-row{position:absolute;left:0;right:0;border-bottom:1px solid var(--color-border);box-sizing:border-box}.gantt-row:hover{background:#0d6efd0a}.gantt-bar{position:absolute;top:6px;height:22px;border-radius:4px;cursor:pointer;overflow:hidden;transition:opacity .1s;display:flex;align-items:center}.gantt-bar:hover{opacity:.85}.bar-label{padding:0 6px;font-size:11px;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}.today-line{position:absolute;top:0;bottom:0;width:2px;background:#dc3545;z-index:5;opacity:.7}.today-line:before{content:"今日";position:absolute;top:4px;left:4px;font-size:10px;color:#dc3545;font-weight:600;white-space:nowrap}.weekend-shade{position:absolute;top:0;bottom:0;background:#00000008}.gantt-legend{display:flex;align-items:center;gap:16px;padding:6px 16px;background:#fff;border-top:1px solid var(--color-border);font-size:11px;flex-shrink:0}.legend-item{display:flex;align-items:center;gap:5px;color:var(--color-text-muted)}.legend-color{width:12px;height:12px;border-radius:2px;display:inline-block}.today-legend{background:#dc3545;width:2px;height:14px;border-radius:1px}.gantt-loading,.gantt-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:12px;color:var(--color-text-muted);font-size:14px}.spinner{width:32px;height:32px;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
