*{box-sizing:border-box}:root{--accent: #2A6FDB;--accent-hover: #1E5BC6;--accent-soft: #E4EEFF;--bg: #FAFBFC;--surface: #FFFFFF;--surface-2: #F4F5F7;--surface-3: #EEF0F3;--border: #E4E7EC;--border-strong: #D1D5DB;--text: #15181E;--text-muted: #5C6470;--text-subtle: #8A93A0;--danger: #D03B3B;--danger-soft: #FCE8E8;--warn: #C77800;--warn-soft: #FFF1D6;--fs-xs: 11px;--fs-sm: 12.5px;--fs-base: 13.5px;--fs-md: 15px;--fs-lg: 18px;--fs-xl: 22px;--fs-2xl: 28px;--r-sm: 4px;--r: 6px;--r-md: 8px;--r-lg: 12px;--shadow-sm: 0 1px 2px rgba(15,18,30,.04);--shadow-md: 0 4px 12px rgba(15,18,30,.08);--shadow-lg: 0 16px 48px rgba(15,18,30,.18);--sidebar-w: 264px}html,body,#root{height:100%;margin:0}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:var(--fs-base);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button{font-family:inherit;cursor:pointer}input,textarea{font-family:inherit}.app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;height:100vh;overflow:hidden}.main{display:flex;flex-direction:column;overflow:hidden;background:var(--bg)}.content{flex:1;overflow:auto;padding:0 28px 28px}.sidebar{background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}.sidebar .sidebar__close{display:none;margin-left:auto}.sidebar__brand{display:flex;align-items:center;gap:10px;padding:18px 16px 16px;border-bottom:1px solid var(--border)}.brand-mark{width:32px;height:32px;border-radius:var(--r);background:linear-gradient(135deg,var(--accent),#6B5BD9);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px}.brand-name{font-weight:600;font-size:var(--fs-md);letter-spacing:-.01em}.brand-sub{font-size:var(--fs-xs);color:var(--text-subtle);margin-top:1px}.sidebar__section{padding:14px 12px}.sidebar__section+.sidebar__section{padding-top:4px}.sidebar__heading{display:flex;align-items:center;justify-content:space-between;padding:4px 8px 8px;font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--text-subtle);font-weight:600}.nav-item{display:flex;align-items:center;gap:10px;width:100%;padding:7px 8px;border:none;background:transparent;color:var(--text);border-radius:var(--r);font-size:var(--fs-base);text-align:left;transition:background .12s}.nav-item:hover{background:var(--surface-2)}.nav-item.is-active{background:var(--accent-soft);color:var(--accent-hover)}.nav-item.is-active .nav-item__count,.nav-item.is-active .project-key{color:var(--accent-hover)}.nav-item__icon{width:22px;display:inline-flex;justify-content:center;color:var(--text-muted);font-size:13px}.nav-item.is-active .nav-item__icon{color:var(--accent-hover)}.nav-item__label{flex:1;display:flex;flex-direction:column;min-width:0}.nav-item__label>.project-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-key{font-size:var(--fs-xs);color:var(--text-subtle);font-family:JetBrains Mono,ui-monospace,monospace;margin-top:1px}.nav-item__badge,.nav-item__count{font-size:var(--fs-xs);color:var(--text-subtle);background:var(--surface-2);padding:2px 7px;border-radius:10px;font-variant-numeric:tabular-nums}.nav-item.is-active .nav-item__badge{background:#fff}.project-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px}.project-dot{width:22px;height:22px;border-radius:var(--r-sm);display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:var(--fs-xs);font-weight:600;letter-spacing:.02em;flex-shrink:0}.project-dot--sm{width:8px;height:8px;border-radius:50%}.sidebar__footer{margin-top:auto;border-top:1px solid var(--border);padding:12px}.footer-user{display:flex;align-items:center;gap:10px}.footer-user__meta{flex:1;min-width:0}.footer-user__name{font-weight:500;font-size:var(--fs-base);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.footer-user__email{font-size:var(--fs-xs);color:var(--text-subtle);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.avatar{border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-weight:600;letter-spacing:.02em;flex-shrink:0}.avatar--empty{background:var(--surface-3);border:1px dashed var(--border-strong)}.topbar{background:var(--surface);border-bottom:1px solid var(--border);padding:18px 28px 0}.menu-btn{display:none;width:36px;height:36px;flex-shrink:0;margin-right:4px;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);color:var(--text);align-items:center;justify-content:center;font-size:15px}.menu-btn:hover{background:var(--surface-2)}.nav-scrim{display:none}.topbar__top{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:14px}.topbar__title{margin:0;font-size:var(--fs-2xl);font-weight:600;letter-spacing:-.02em}.topbar__sub{margin-top:2px;color:var(--text-muted);font-size:var(--fs-base)}.topbar__right{display:flex;align-items:center;gap:10px}.search{position:relative;display:flex;align-items:center}.search>i.fa-magnifying-glass{position:absolute;left:10px;color:var(--text-subtle);font-size:12px;pointer-events:none}.search input{height:34px;padding:0 28px 0 30px;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);font-size:var(--fs-base);width:280px;color:var(--text)}.search input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #2a6fdb1f}.search__clear{position:absolute;right:6px;background:transparent;border:none;color:var(--text-subtle);width:22px;height:22px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center}.search__clear:hover{background:var(--surface-2);color:var(--text)}.filterbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:16px 0 0}.filterbar__group{display:flex;align-items:center;gap:8px}.filterbar__label{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--text-subtle);font-weight:600}.filterbar__select{height:32px;font-family:inherit;font-size:var(--fs-sm);color:var(--text);border:1px solid var(--border);border-radius:var(--r);padding:0 8px;background:var(--surface)}.filterbar__select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #2a6fdb1a}.segmented{display:flex;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);padding:2px;gap:2px}.segmented__btn{border:none;background:transparent;font-size:var(--fs-sm);color:var(--text-muted);padding:4px 11px;border-radius:var(--r-sm);transition:all .12s}.segmented__btn:hover{color:var(--text)}.segmented__btn.is-active{background:var(--surface);color:var(--text);font-weight:500;box-shadow:var(--shadow-sm)}.filterbar__count{margin-left:auto;font-size:var(--fs-sm);color:var(--text-subtle);font-variant-numeric:tabular-nums}.filterbar .search input{width:260px}.tabs{display:flex;gap:2px;margin-top:4px}.tab{display:inline-flex;align-items:center;gap:7px;padding:9px 14px;background:transparent;border:none;font-size:var(--fs-base);color:var(--text-muted);border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s}.tab:hover:not(.is-disabled){color:var(--text)}.tab.is-active{color:var(--accent-hover);border-bottom-color:var(--accent);font-weight:500}.tab.is-disabled{color:var(--text-subtle);cursor:not-allowed}.tab__soon{font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;background:var(--surface-2);color:var(--text-subtle);padding:2px 5px;border-radius:3px;margin-left:4px}.btn{display:inline-flex;align-items:center;gap:6px;padding:0 14px;height:34px;border:1px solid transparent;border-radius:var(--r);font-size:var(--fs-base);font-weight:500;cursor:pointer;transition:all .12s}.btn--primary{background:var(--accent);color:#fff}.btn--primary:hover{background:var(--accent-hover)}.btn--ghost{background:transparent;color:var(--text-muted);border-color:var(--border)}.btn--ghost:hover{background:var(--surface-2);color:var(--text)}.btn--sm{height:28px;padding:0 10px;font-size:var(--fs-sm)}.btn-ghost{background:transparent;border:none;color:var(--text-muted);padding:6px 8px;border-radius:var(--r-sm);font-size:var(--fs-base);display:inline-flex;align-items:center;gap:6px}.btn-ghost:hover{background:var(--surface-2);color:var(--text)}.btn-ghost--sm{font-size:var(--fs-sm);padding:4px 8px}.icon-btn{width:30px;height:30px;border-radius:var(--r-sm);background:transparent;border:none;color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;font-size:13px;transition:background .12s}.icon-btn:hover{background:var(--surface-2);color:var(--text)}.icon-btn--xs{width:22px;height:22px;font-size:10px}.icon-btn--close:hover{background:var(--danger-soft);color:var(--danger)}.link-btn{background:none;border:none;color:var(--text-muted);padding:0;font-size:var(--fs-sm)}.link-btn:hover{color:var(--accent);text-decoration:underline}.link-btn--danger:hover{color:var(--danger)}.list-view{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);margin-top:14px;overflow:hidden;overflow-x:auto;box-shadow:var(--shadow-sm)}.list-header,.list-row{display:grid;grid-template-columns:110px minmax(180px,1fr) minmax(120px,180px) 110px 150px;min-width:780px;gap:14px;padding:0 16px;align-items:center}.list-view:not(:has(.list-col--project)) .list-header,.list-view:not(:has(.list-col--project)) .list-row{grid-template-columns:110px minmax(180px,1fr) minmax(140px,200px) 110px 150px;min-width:740px}.list-header{background:var(--surface-2);height:38px;font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--text-subtle);font-weight:600;border-bottom:1px solid var(--border)}.list-rows{list-style:none;margin:0;padding:0}.list-row{height:50px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .1s}.list-row:last-child{border-bottom:none}.list-row:hover{background:var(--surface-2)}.list-col{display:flex;align-items:center;min-width:0}.list-col--code{gap:8px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:var(--fs-sm);color:var(--text-muted)}.list-col--title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.task-code{font-weight:500;color:var(--text)}.type-icon{width:18px;height:18px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex-shrink:0}.type-icon--bug{background:var(--danger-soft);color:var(--danger)}.type-icon--task{background:var(--accent-soft);color:var(--accent)}.project-chip{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-sm);color:var(--text-muted)}.status-badge-wrap{position:relative;display:inline-block}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:3px 9px 3px 10px;border-radius:12px;border:none;font-size:var(--fs-sm);font-weight:500;white-space:nowrap}.status-badge__chev{font-size:9px;opacity:.55}.status-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100}.status-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:101;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow-md);padding:4px;min-width:160px}.status-menu__item{display:flex;align-items:center;gap:9px;width:100%;padding:7px 10px;background:transparent;border:none;border-radius:var(--r-sm);font-size:var(--fs-base);color:var(--text);text-align:left}.status-menu__item:hover{background:var(--surface-2)}.status-menu__check{margin-left:auto;color:var(--accent);font-size:11px}.status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.due-cell{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--text-muted);font-variant-numeric:tabular-nums}.due-cell>i{font-size:11px}.due-cell--late{color:var(--danger);font-weight:500}.due-cell--late>i{color:var(--danger)}.due-cell--empty{color:var(--text-subtle)}.empty-state{margin-top:60px;text-align:center;color:var(--text-subtle)}.empty-state i{font-size:32px;margin-bottom:10px}.board-view{display:grid;grid-template-columns:repeat(5,minmax(240px,1fr));gap:14px;margin-top:14px;min-height:calc(100vh - 230px)}.board-col{background:var(--surface-2);border-radius:var(--r-md);border:1px solid var(--border);display:flex;flex-direction:column;min-width:0;transition:background .15s,border-color .15s}.board-col.is-hover{background:var(--accent-soft);border-color:var(--accent)}.board-col__header{padding:12px 14px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border)}.board-col__title{display:inline-flex;align-items:center;gap:8px;font-size:var(--fs-sm);font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.board-col__count{background:var(--surface);border:1px solid var(--border);font-size:var(--fs-xs);padding:1px 7px;border-radius:10px;color:var(--text-muted);font-variant-numeric:tabular-nums}.board-col__body{padding:10px;display:flex;flex-direction:column;gap:8px;flex:1;overflow-y:auto}.board-col__empty{border:1px dashed var(--border-strong);border-radius:var(--r);padding:18px;text-align:center;color:var(--text-subtle);font-size:var(--fs-sm)}.board-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:10px 12px;cursor:grab;transition:box-shadow .12s,transform .12s,border-color .12s;display:flex;flex-direction:column;gap:8px}.board-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm)}.board-card:active{cursor:grabbing}.board-card.is-dragging{opacity:.4;transform:rotate(1deg)}.board-card__title{font-size:var(--fs-base);line-height:1.4;color:var(--text)}.board-card__footer{display:flex;align-items:center;justify-content:space-between;margin-top:2px}.board-card__code{display:inline-flex;align-items:center;gap:6px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:var(--fs-xs);color:var(--text-muted)}.board-card__avatar{width:22px;height:22px;border-radius:50%;background:var(--surface-3);border:1px dashed var(--border-strong)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f121e73;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:200;display:flex;align-items:center;justify-content:center;padding:32px;animation:fade-in .16s ease-out}@keyframes fade-in{0%{opacity:0}}.modal{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);width:min(860px,100%);max-height:calc(100vh - 64px);display:flex;flex-direction:column;overflow:hidden;animation:pop-in .18s ease-out}@keyframes pop-in{0%{transform:scale(.97);opacity:0}to{transform:scale(1);opacity:1}}.modal__header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--border)}.modal__breadcrumb{display:flex;align-items:center;gap:10px;font-size:var(--fs-sm);color:var(--text-muted)}.modal__sep{font-size:9px;color:var(--text-subtle)}.modal__code{display:inline-flex;align-items:center;gap:7px;font-family:JetBrains Mono,ui-monospace,monospace;font-weight:500;color:var(--text)}.modal__header-actions{display:flex;align-items:center;gap:6px}.modal__header-actions .status-badge-wrap{margin-right:4px}.modal__header-actions .status-menu{left:auto;right:0}.modal__body{display:flex;flex:1;overflow:hidden}.modal__meta{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:-14px 0 22px;font-size:var(--fs-sm);color:var(--text-muted)}.modal__meta-item{display:inline-flex;align-items:center;gap:7px}.modal__meta-sep{color:var(--text-subtle)}.modal__meta-icon{font-size:11px;color:var(--text-subtle)}.date-field{position:relative;display:inline-flex;align-items:center;border-radius:var(--r-sm);padding:2px 6px;margin:0 -6px;transition:background .12s;cursor:pointer}.date-field:hover{background:var(--surface-2)}.date-field.is-empty .date-field__label{color:var(--text-subtle)}.date-field__input{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;border:none;padding:0}.estimate-value{background:none;border:1px solid transparent;border-radius:var(--r-sm);padding:2px 7px;font-size:var(--fs-sm);font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;transition:background .12s,border-color .12s}.estimate-value:hover{background:var(--surface-2);border-color:var(--border)}.estimate-input{width:56px;font-family:inherit;font-size:var(--fs-sm);font-weight:600;border:1px solid var(--accent);border-radius:var(--r-sm);padding:2px 6px;color:var(--text);box-shadow:0 0 0 3px #2a6fdb1a}.estimate-input:focus{outline:none}.quote-value{background:none;border:1px solid transparent;border-radius:var(--r-sm);padding:2px 7px;margin:0 -7px;font-family:inherit;font-size:var(--fs-sm);color:var(--text);transition:background .12s,border-color .12s;text-align:left}.quote-value:hover{background:var(--surface-2);border-color:var(--border)}.quote-value.is-empty{color:var(--text-subtle)}.quote-picker{position:relative;display:inline-flex}.quote-value{display:inline-flex;align-items:center;gap:6px}.quote-value__chev{font-size:8px;color:var(--text-subtle)}.quote-picker__menu{min-width:260px;left:-8px}.status-menu__lead{font-size:11px;color:var(--text-subtle);width:12px;text-align:center}.status-menu__divider{height:1px;background:var(--border);margin:4px 0}.status-menu__item--muted{color:var(--text-muted)}.modal__main{flex:1;padding:24px 28px 28px;overflow-y:auto}.modal__title-input{display:block;width:100%;margin:0 0 24px;font-family:inherit;font-size:var(--fs-2xl);font-weight:600;letter-spacing:-.02em;line-height:1.25;color:var(--text);padding:6px 10px;border:1px solid var(--accent);border-radius:var(--r);box-shadow:0 0 0 3px #2a6fdb1a;resize:vertical}.modal__title-input:focus{outline:none}.modal__title-pen{font-size:12px;color:var(--text-subtle);margin-left:10px;opacity:0;transition:opacity .12s;vertical-align:middle}.modal__title:hover .modal__title-pen{opacity:1}.modal__title{cursor:text;border-radius:var(--r);padding:6px 10px;margin:0 0 24px -10px;transition:background .12s}.modal__title:hover{background:var(--surface-2)}.modal__title{font-size:var(--fs-2xl);font-weight:600;letter-spacing:-.02em;line-height:1.25;color:var(--text)}.modal__section{margin-bottom:28px}.modal__section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.modal__section-head h3{margin:0;font-size:var(--fs-md);font-weight:600;display:inline-flex;align-items:center;gap:8px}.count-pill{font-size:var(--fs-xs);background:var(--surface-2);color:var(--text-muted);padding:1px 7px;border-radius:10px;font-weight:500}.md-rendered{font-size:var(--fs-base);line-height:1.6;color:var(--text);padding:12px 14px;border-radius:var(--r);border:1px solid transparent;cursor:text;transition:background .12s,border-color .12s}.md-rendered:hover{background:var(--surface-2);border-color:var(--border)}.md-rendered p{margin:0 0 .8em}.md-rendered p:last-child{margin-bottom:0}.md-rendered h3{font-size:var(--fs-md);font-weight:600;margin:1.1em 0 .4em}.md-rendered h4{font-size:var(--fs-base);font-weight:600;margin:1em 0 .3em}.md-rendered h5{font-size:var(--fs-sm);font-weight:600;margin:.9em 0 .3em;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.md-rendered ul,.md-rendered ol{margin:.4em 0 .8em;padding-left:22px}.md-rendered li{margin-bottom:4px}.md-rendered code{background:var(--surface-2);font-family:JetBrains Mono,ui-monospace,monospace;font-size:.92em;padding:1px 5px;border-radius:3px}.md-rendered a{color:var(--accent)}.md-empty{color:var(--text-subtle);font-style:italic}.md-editor{display:flex;flex-direction:column;gap:8px}.md-editor__textarea{width:100%;min-height:200px;padding:12px 14px;border:1px solid var(--accent);border-radius:var(--r);font-size:var(--fs-base);font-family:inherit;line-height:1.55;resize:vertical;color:var(--text);box-shadow:0 0 0 3px #2a6fdb1a}.md-editor__textarea:focus{outline:none}.md-editor__hint{font-size:var(--fs-xs);color:var(--text-subtle);display:inline-flex;align-items:center;gap:6px}.md-editor__actions{display:flex;gap:8px;margin-top:4px}.type-picker{position:relative;display:inline-flex}.type-picker__btn{display:inline-flex;align-items:center;gap:4px;background:none;border:1px solid transparent;border-radius:var(--r-sm);padding:2px 4px;transition:background .12s,border-color .12s}.type-picker__btn:hover,.type-picker.is-open .type-picker__btn{background:var(--surface-2);border-color:var(--border)}.type-picker__chev{font-size:8px;color:var(--text-subtle)}.type-picker__menu{min-width:140px}.todo-progress{display:flex;align-items:center;gap:10px;margin-bottom:10px}.todo-progress__bar{flex:1;height:5px;background:var(--surface-3);border-radius:3px;overflow:hidden}.todo-progress__fill{height:100%;background:var(--accent);border-radius:3px;transition:width .2s}.todo-progress__pct{font-size:var(--fs-xs);color:var(--text-muted);font-variant-numeric:tabular-nums;min-width:30px;text-align:right}.todo-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px}.todo{display:flex;align-items:center;gap:9px;padding:5px 8px;border-radius:var(--r-sm);transition:background .12s}.todo:hover{background:var(--surface-2)}.todo__check{background:none;border:none;padding:0;width:18px;color:var(--text-subtle);font-size:14px;display:flex;align-items:center;justify-content:center}.todo__check:hover,.todo.is-done .todo__check{color:var(--accent)}.todo__text{flex:1;font-size:var(--fs-base);cursor:text;line-height:1.45}.todo.is-done .todo__text{color:var(--text-subtle);text-decoration:line-through}.todo__input{flex:1;font-family:inherit;font-size:var(--fs-base);border:1px solid var(--accent);border-radius:var(--r-sm);padding:3px 7px;color:var(--text)}.todo__input:focus{outline:none;box-shadow:0 0 0 3px #2a6fdb1a}.todo__del{background:none;border:none;color:var(--text-subtle);padding:2px 4px;border-radius:3px;font-size:12px;opacity:0;transition:opacity .12s}.todo:hover .todo__del{opacity:1}.todo__del:hover{background:var(--danger-soft);color:var(--danger)}.todo-add{display:flex;align-items:center;gap:9px;padding:5px 8px;margin-top:4px}.todo-add>i{width:18px;text-align:center;color:var(--text-subtle);font-size:11px}.todo-add input{flex:1;font-family:inherit;font-size:var(--fs-base);border:1px solid transparent;border-radius:var(--r-sm);padding:4px 7px;background:transparent;color:var(--text)}.todo-add input::placeholder{color:var(--text-subtle)}.todo-add input:focus{outline:none;border-color:var(--accent);background:var(--surface);box-shadow:0 0 0 3px #2a6fdb1a}.comment-composer{display:flex;gap:10px;margin-bottom:18px}.comment-composer__input{flex:1;display:flex;flex-direction:column;gap:8px}.comment-composer__input textarea{width:100%;border:1px solid var(--border);border-radius:var(--r);padding:9px 12px;font-size:var(--fs-base);resize:vertical;min-height:38px;background:var(--surface);transition:border-color .12s,box-shadow .12s}.comment-composer__input textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #2a6fdb1a}.comment-composer__actions{display:flex;gap:6px}.comment-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.comment-list__empty{text-align:center;color:var(--text-subtle);font-size:var(--fs-sm);padding:18px}.comment{display:flex;gap:10px}.comment__body{flex:1;min-width:0}.comment__head{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}.comment__author{font-weight:600;font-size:var(--fs-base)}.comment__ts{font-size:var(--fs-xs);color:var(--text-subtle)}.comment__edited{font-style:italic}.comment__text{font-size:var(--fs-base);line-height:1.5;color:var(--text);white-space:pre-wrap}.comment__actions{margin-top:4px;display:flex;align-items:center;gap:8px;opacity:0;transition:opacity .12s}.comment:hover .comment__actions{opacity:1}.comment__sep{color:var(--text-subtle);font-size:var(--fs-xs)}.comment__edit{display:flex;flex-direction:column;gap:8px}.comment__edit textarea{width:100%;border:1px solid var(--accent);border-radius:var(--r);padding:8px 10px;font-size:var(--fs-base);resize:vertical;box-shadow:0 0 0 3px #2a6fdb1a}.comment__edit textarea:focus{outline:none}.comment__edit-actions{display:flex;gap:6px}.modal--new{width:min(720px,100%)}.modal__footer{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--border);background:var(--surface-2)}.btn:disabled{opacity:.45;cursor:not-allowed}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:18px}.field{display:flex;flex-direction:column;gap:6px}.field--full{margin-bottom:18px}.field__label{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600}.field__opt{text-transform:none;letter-spacing:0;font-weight:400;color:var(--text-subtle)}.field__control{font-family:inherit;font-size:var(--fs-base);color:var(--text);border:1px solid var(--border);border-radius:var(--r);padding:8px 10px;background:var(--surface);width:100%}.field__control:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #2a6fdb1a}.field__control--title{font-size:var(--fs-md);font-weight:500}.field__control--area{min-height:150px;line-height:1.55;resize:vertical}.type-toggle{display:flex;gap:6px}.type-toggle__btn{display:inline-flex;align-items:center;gap:7px;padding:8px 12px;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);font-size:var(--fs-base);color:var(--text-muted);transition:all .12s}.type-toggle__btn:hover{border-color:var(--border-strong)}.type-toggle__btn.is-active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-hover);font-weight:500}.modal__side{background:var(--surface-2);overflow-y:auto}.side-panel{padding:20px;display:flex;flex-direction:column}.side-panel__row{display:grid;grid-template-columns:100px 1fr;gap:10px;align-items:center;padding:8px 0;font-size:var(--fs-sm)}.side-panel__row--status{padding-bottom:14px}.side-panel__label{color:var(--text-muted);font-weight:500}.side-panel__value{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-base)}.side-panel__value--user{font-size:var(--fs-sm)}.side-panel__divider{border-top:1px solid var(--border);margin:6px 0}.muted{color:var(--text-subtle)}.mono{font-family:JetBrains Mono,ui-monospace,monospace;font-size:var(--fs-sm)}.content::-webkit-scrollbar,.modal__main::-webkit-scrollbar,.modal__side::-webkit-scrollbar,.board-col__body::-webkit-scrollbar{width:10px;height:10px}.content::-webkit-scrollbar-thumb,.modal__main::-webkit-scrollbar-thumb,.modal__side::-webkit-scrollbar-thumb,.board-col__body::-webkit-scrollbar-thumb{background:var(--surface-3);border-radius:8px;border:2px solid var(--bg)}.content::-webkit-scrollbar-thumb:hover,.modal__main::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}@media(max-width:860px){.app{grid-template-columns:1fr}.menu-btn,.sidebar .sidebar__close{display:inline-flex}.sidebar{position:fixed;inset:0 auto 0 0;width:min(300px,86vw);z-index:300;transform:translate(-100%);transition:transform .22s ease;box-shadow:var(--shadow-lg)}.app.is-nav-open .sidebar{transform:none}.nav-scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0f121e66;z-index:299;opacity:0;pointer-events:none;transition:opacity .22s ease}.app.is-nav-open .nav-scrim{opacity:1;pointer-events:auto}.topbar{padding:14px 16px 0}.topbar__top{align-items:center;flex-wrap:wrap}.topbar__title{font-size:var(--fs-xl)}.content{padding:0 16px 20px}.filterbar{gap:12px}.filterbar .search input{width:100%}.filterbar .search{flex:1 1 100%}.filterbar__count{margin-left:0}.tabs{overflow-x:auto}.modal-backdrop{padding:0;align-items:stretch}.modal{max-height:100vh;border-radius:0;width:100%}.board-view{grid-template-columns:repeat(5,minmax(240px,1fr));overflow-x:auto}}.list-col--track{justify-content:flex-start;gap:8px}.tracked-total{font-family:JetBrains Mono,ui-monospace,monospace;font-size:var(--fs-sm);color:var(--text-muted);font-variant-numeric:tabular-nums}.list-row.is-tracking .tracked-total{color:var(--danger);font-weight:600}.list-view.has-track .list-header,.list-view.has-track .list-row{grid-template-columns:96px 110px minmax(180px,1fr) minmax(120px,180px) 110px 150px;min-width:890px}.list-view.has-track:not(:has(.list-col--project)) .list-header,.list-view.has-track:not(:has(.list-col--project)) .list-row{grid-template-columns:96px 110px minmax(180px,1fr) minmax(140px,200px) 110px 150px;min-width:850px}.task-quote{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-sm);color:var(--text-muted);min-width:0}.task-quote>i{font-size:11px;color:var(--text-subtle);flex-shrink:0}.task-quote>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task-quote--empty{color:var(--text-subtle)}.track-btn{width:30px;height:30px;border-radius:50%;border:1.5px solid var(--border-strong);background:var(--surface);color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;font-size:10px;flex-shrink:0;transition:all .12s}.track-btn:hover{border-color:var(--accent);color:var(--accent)}.track-btn.is-active{border-color:var(--danger);background:var(--danger-soft);color:var(--danger);animation:track-pulse 1.6s ease-in-out infinite}@keyframes track-pulse{0%,to{box-shadow:0 0 #d03b3b59}50%{box-shadow:0 0 0 5px #d03b3b00}}.list-row.is-tracking{background:var(--danger-soft);box-shadow:inset 3px 0 0 var(--danger)}.list-row.is-tracking:hover{background:#f9dede}.list-row.is-tracking .task-title{font-weight:600}.board-card.is-tracking{border-color:var(--danger);background:var(--danger-soft)}.modal--track{width:min(520px,100%);max-height:none}.track-modal__header{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--border)}.track-modal__icon{width:34px;height:34px;border-radius:var(--r);display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:13px;flex-shrink:0}.track-modal__icon--start{background:#1f8a5b}.track-modal__icon--stop{background:var(--danger)}.track-modal__titles{flex:1;min-width:0}.track-modal__title{font-weight:600;font-size:var(--fs-md)}.track-modal__sub{font-size:var(--fs-sm);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.track-modal__body{padding:18px 16px 20px;display:flex;flex-direction:column;gap:16px}.track-modal__body .field--full{margin-bottom:0}.track-modal__footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 16px;border-top:1px solid var(--border);background:var(--surface-2)}.track-modal__footer-right{display:flex;gap:8px;margin-left:auto}.input-icon{position:relative;display:flex;align-items:center}.input-icon>i{position:absolute;left:11px;color:var(--text-subtle);font-size:12px;pointer-events:none}.input-icon .field__control{padding-left:32px}.suggestions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.suggestion{display:inline-flex;align-items:center;gap:6px;font-family:inherit;font-size:var(--fs-sm);color:var(--text-muted);background:var(--surface-2);border:1px solid var(--border);border-radius:14px;padding:4px 10px;transition:all .12s}.suggestion:hover{border-color:var(--accent);color:var(--accent-hover);background:var(--accent-soft)}.suggestion>i{font-size:10px}.btn--go{background:#1f8a5b;color:#fff}.btn--go:hover{background:#186f49}.btn--stop{background:var(--danger);color:#fff}.btn--stop:hover{background:#b32f2f}.btn--danger-ghost{background:transparent;color:var(--danger);border-color:var(--danger-soft)}.btn--danger-ghost:hover{background:var(--danger-soft)}@media(max-width:860px){.modal--track{border-radius:var(--r-lg);margin:auto}}.quotes-view{margin-top:20px}.quotes-view .list-header,.quotes-view .list-row{grid-template-columns:minmax(240px,1fr) 180px 140px;min-width:600px}.quotes-view .list-row{cursor:default}.quote-name{display:inline-flex;align-items:center;gap:9px;min-width:0}.quote-name__icon{font-size:12px;color:var(--text-subtle)}.quote-name__text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.quote-name__id{font-family:JetBrains Mono,ui-monospace,monospace;font-size:var(--fs-xs);color:var(--text-subtle);background:var(--surface-2);padding:1px 6px;border-radius:4px;flex-shrink:0}.quote-date{font-size:var(--fs-sm);color:var(--text-muted);font-variant-numeric:tabular-nums}.status-badge--static{cursor:default}.login-wrapper{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f3f4f6;padding:1rem}.login-card{width:100%;max-width:400px;background:#fff;border-radius:1rem;padding:2.5rem;box-shadow:0 20px 60px #00000026,0 0 0 1px #ffffff1a;animation:login-slide-up .4s ease-out}@keyframes login-slide-up{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.login-head{text-align:center;margin-bottom:2rem}.login-logo{display:inline-flex;align-items:center;justify-content:center;width:3.5rem;height:3.5rem;border-radius:.75rem;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-size:1.25rem;margin-bottom:1.25rem}.login-title{margin:0;font-size:1.5rem;font-weight:700;letter-spacing:-.025em;color:#111827}.login-subtitle{margin:.25rem 0 0;font-size:.875rem;color:#6b7280}.login-form{display:flex;flex-direction:column;gap:1.25rem}.login-field label{display:block;font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}.login-input-wrapper{position:relative}.login-input-icon{position:absolute;left:.75rem;top:50%;transform:translateY(-50%);font-size:.875rem;color:#9ca3af;pointer-events:none}.login-input{display:block;width:100%;padding:.625rem .75rem .625rem 2.5rem;font-size:.875rem;line-height:1.5;color:#111827;background:#f9fafb;border:1px solid #e5e7eb;border-radius:.5rem;transition:all .2s ease;outline:none}.login-input::placeholder{color:#9ca3af}.login-input:focus{background:#fff;border-color:#818cf8;box-shadow:0 0 0 3px #818cf826}.login-error{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;border-radius:.5rem;padding:.5rem .75rem}.login-btn{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;padding:.625rem 1rem;font-size:.875rem;font-weight:600;color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:.5rem;cursor:pointer;transition:all .2s ease;letter-spacing:.025em}.login-btn:hover:not(:disabled){opacity:.9;transform:translateY(-1px);box-shadow:0 4px 12px #667eea66}.login-btn:active:not(:disabled){transform:translateY(0)}.login-btn:disabled{opacity:.5;cursor:not-allowed}.spinner{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.state-panel{margin-top:48px;text-align:center;color:var(--text-subtle);display:flex;flex-direction:column;align-items:center;gap:10px}.state-panel>i{font-size:30px}.state-panel__title{font-size:var(--fs-md);font-weight:600;color:var(--text)}.state-panel__body{max-width:460px;line-height:1.55}.state-panel--error>i{color:var(--danger)}.skeleton-rows{margin-top:14px;border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;background:var(--surface)}.skeleton-row{height:50px;border-bottom:1px solid var(--border);background:linear-gradient(90deg,var(--surface) 0%,var(--surface-2) 50%,var(--surface) 100%);background-size:200% 100%;animation:skeleton-shimmer 1.4s ease-in-out infinite}.skeleton-row:last-child{border-bottom:none}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.notice{display:flex;align-items:flex-start;gap:10px;padding:11px 14px;border-radius:var(--r);font-size:var(--fs-base);line-height:1.5;margin-top:14px;border:1px solid transparent}.notice>i{margin-top:2px;font-size:13px;flex-shrink:0}.notice__body{flex:1;min-width:0}.notice__title{font-weight:600}.notice__dismiss{background:none;border:none;color:inherit;opacity:.6;padding:0 2px;font-size:13px}.notice__dismiss:hover{opacity:1}.notice--info{background:var(--accent-soft);border-color:#c7dbfa;color:#1e4b94}.notice--success{background:#e0f4ea;border-color:#b9e3cd;color:#106b41}.notice--warn{background:var(--warn-soft);border-color:#f0dcb2;color:#7a5000}.notice--error{background:var(--danger-soft);border-color:#f4c7c7;color:#a32b2b}.readonly-tag{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.06em;font-weight:600;color:var(--text-subtle);background:var(--surface-2);border:1px solid var(--border);padding:2px 8px;border-radius:10px;margin-left:10px;vertical-align:middle}.sidebar__brand-link{display:contents;color:inherit;text-decoration:none}.nav-item{text-decoration:none;color:var(--text)}.user-type-chip{font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;padding:1px 5px;border-radius:3px;background:var(--surface-2);color:var(--text-subtle);margin-left:6px}.user-type-chip--internal{background:var(--accent-soft);color:var(--accent-hover)}.quotes-view .list-header,.quotes-view .list-row{grid-template-columns:minmax(240px,1fr) 150px 130px 130px;min-width:680px}.quotes-view .list-row{cursor:pointer}.quote-progress{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--text-muted);font-variant-numeric:tabular-nums}.quote-progress__bar{flex:1;height:5px;background:var(--surface-3);border-radius:3px;overflow:hidden;min-width:40px}.quote-progress__fill{height:100%;background:var(--accent);border-radius:3px}.quote-features{list-style:none;margin:0;padding:10px 16px 16px;background:var(--surface-2);border-bottom:1px solid var(--border)}.quote-features__section{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--text-subtle);font-weight:600;margin:12px 0 4px}.quote-features__section:first-child{margin-top:0}.quote-feature{display:flex;align-items:flex-start;gap:9px;padding:5px 0;font-size:var(--fs-base)}.quote-feature>i{margin-top:3px;font-size:12px;color:var(--text-subtle)}.quote-feature.is-done>i{color:#1f8a5b}.quote-feature.is-done .quote-feature__summary{color:var(--text-subtle)}.quote-feature__summary{font-weight:500}.quote-feature__description{color:var(--text-muted);font-size:var(--fs-sm);line-height:1.5;margin-top:2px}.quote-empty{padding:14px 16px;color:var(--text-subtle);font-size:var(--fs-sm);background:var(--surface-2);border-bottom:1px solid var(--border)}.priority-chip{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-sm);font-weight:500}.priority-chip--low{color:var(--text-muted)}.priority-chip--normal{color:var(--warn)}.priority-chip--urgent{color:var(--danger)}.modal__meta .static-value{color:var(--text);font-weight:500}.field__error{font-size:var(--fs-sm);color:var(--danger)}.field__hint{font-size:var(--fs-sm);color:var(--text-subtle)}.field__control:disabled{background:var(--surface-2);color:var(--text-subtle);cursor:progress}.field__control.has-error{border-color:var(--danger);box-shadow:0 0 0 3px #d03b3b1a}.form-error{display:flex;align-items:center;gap:8px;font-size:var(--fs-base);color:var(--danger);background:var(--danger-soft);border:1px solid #F4C7C7;border-radius:var(--r);padding:9px 12px;margin-bottom:16px}.list-view:has(.list-col--project) .list-header,.list-view:has(.list-col--project) .list-row{grid-template-columns:110px minmax(180px,1fr) minmax(170px,250px) 110px 150px;min-width:860px}.list-view.has-track:has(.list-col--project) .list-header,.list-view.has-track:has(.list-col--project) .list-row{grid-template-columns:96px 110px minmax(180px,1fr) minmax(170px,250px) 110px 150px;min-width:970px}.project-chip{min-width:0}.project-chip__text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nav-item__label>.project-name{min-width:0}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:400;display:flex;align-items:center;gap:10px;max-width:min(560px,calc(100vw - 32px));padding:11px 12px 11px 14px;background:#15181e;color:#fff;border-radius:var(--r-md);box-shadow:var(--shadow-lg);font-size:var(--fs-base);animation:toast-rise .2s ease-out}@keyframes toast-rise{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}.toast>i{color:#8fb6f2}.toast__message{flex:1;line-height:1.45}.toast__action{background:#ffffff1f;border:none;color:#fff;font-size:var(--fs-sm);font-weight:500;padding:5px 10px;border-radius:var(--r-sm);white-space:nowrap}.toast__action:hover{background:#fff3}.toast__dismiss{background:none;border:none;color:#fff9;padding:2px 4px;font-size:13px}.toast__dismiss:hover{color:#fff}.board-view{grid-template-columns:repeat(var(--board-cols, 5),minmax(240px,1fr))}@media(max-width:860px){.board-view{grid-template-columns:repeat(var(--board-cols, 5),minmax(240px,1fr));overflow-x:auto}}.board-col--readonly .board-card{cursor:pointer}
