:root{--bg:#fafafa;--surface:#fff;--surface-2:#f4f4f5;--border:#e4e4e7;--border-strong:#d4d4d8;--text:#18181b;--text-muted:#71717a;--text-subtle:#a1a1aa;--accent:#18181b;--accent-fg:#fff;--danger:#dc2626;--ok:#16a34a;--warn:#d97706;--info:#2563eb;--radius:8px;--radius-sm:6px;--shadow-sm:0 1px 2px #0000000a;--shadow-md:0 4px 12px #00000014;--header-h:52px}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.5}#root{min-height:100%}h1,h2,h3,h4{letter-spacing:-.01em;margin:0;font-weight:600}h1{font-size:18px}h2{font-size:15px}h3{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-size:13px}p{margin:0}a{color:var(--text);text-decoration:none}a:hover{text-decoration:underline}input,textarea,select,button{font:inherit;color:inherit}input,textarea,select{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);outline:none;width:100%;padding:8px 10px;transition:border-color .15s,box-shadow .15s}input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px #18181b14}textarea{resize:vertical;min-height:72px}select{cursor:pointer}button{cursor:pointer;border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-fg);padding:7px 12px;font-weight:500;transition:opacity .15s,background .15s}button:hover{opacity:.9}button:disabled{opacity:.5;cursor:not-allowed}button.ghost{color:var(--text);border-color:var(--border);background:0 0}button.ghost:hover{background:var(--surface-2);opacity:1}button.danger{color:var(--danger);border-color:var(--border);background:0 0}button.danger:hover{border-color:var(--danger);opacity:1;background:#fef2f2}button.icon{color:var(--text-muted);background:0 0;border-color:#0000;padding:6px 8px}button.icon:hover{background:var(--surface-2);color:var(--text);opacity:1}button.sm{padding:4px 8px;font-size:12px}.authShell{place-items:center;min-height:100vh;padding:24px;display:grid}.authCard{background:var(--surface);border:1px solid var(--border);width:100%;max-width:360px;box-shadow:var(--shadow-sm);border-radius:12px;padding:28px}.authCard h1{margin-bottom:4px;font-size:22px}.authCard .sub{color:var(--text-muted);margin-bottom:20px}.authCard form{gap:10px;display:grid}.authCard button[type=submit]{margin-top:4px;padding:9px}.authCard .footer{text-align:center;color:var(--text-muted);margin-top:16px;font-size:13px}.authCard .footer a{color:var(--text);font-weight:500}.app{grid-template-rows:var(--header-h) 1fr;height:100vh;display:grid}.topbar{background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:0 20px;display:flex}.topbar .brand{letter-spacing:-.01em;align-items:center;gap:10px;font-weight:600;display:flex}.brand .dot{background:var(--accent);border-radius:5px;width:18px;height:18px}.topbar .nav{align-items:center;gap:6px;display:flex}.topbar .nav a{border-radius:var(--radius-sm);color:var(--text-muted);padding:6px 10px;font-weight:500}.topbar .nav a:hover{background:var(--surface-2);color:var(--text);text-decoration:none}.topbar .nav a.active{background:var(--surface-2);color:var(--text)}.topbar .user{color:var(--text-muted);align-items:center;gap:10px;font-size:13px;display:flex}.avatar{background:var(--accent);width:28px;height:28px;color:var(--accent-fg);border-radius:50%;place-items:center;font-size:12px;font-weight:600;display:grid}.workspace{grid-template-columns:240px 1fr;display:grid;overflow:hidden}.workspace.noSidebar{grid-template-columns:1fr}.workspace.noSidebar .main{width:100%;max-width:1100px;margin:0 auto;padding:28px 32px}.sidebar{border-right:1px solid var(--border);background:var(--surface);flex-direction:column;gap:14px;padding:16px 12px;display:flex;overflow-y:auto}.sidebar .section{gap:6px;display:grid}.sidebar .section-head{justify-content:space-between;align-items:center;padding:0 6px;display:flex}.projectList{gap:1px;display:grid}.projectItem{border-radius:var(--radius-sm);color:var(--text);cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;width:100%;padding:6px 8px;font-size:13px;display:flex}.projectItem:hover{background:var(--surface-2);opacity:1}.projectItem.active{background:var(--surface-2);font-weight:500}.projectItem .count{color:var(--text-subtle);background:var(--bg);border:1px solid var(--border);text-align:center;border-radius:999px;min-width:22px;padding:1px 7px;font-size:11px}.projectItem.active .count{background:var(--surface)}.newProjectForm{gap:6px;padding:0 6px;display:flex}.newProjectForm input{padding:6px 8px;font-size:13px}.newProjectForm button{padding:6px 10px;font-size:12px}.main{flex-direction:column;gap:14px;padding:20px 24px;display:flex;overflow:auto}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.toolbar .title{align-items:baseline;gap:10px;display:flex}.toolbar .title h1{font-size:20px}.toolbar .title .meta{color:var(--text-muted);font-size:13px}.toolbar .spacer{flex:1}.toolbar select{background:var(--surface);width:auto;padding:6px 8px;font-size:13px}.viewSwitch{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);padding:2px;display:inline-flex}.viewSwitch button{color:var(--text-muted);background:0 0;border:none;border-radius:4px;padding:4px 10px;font-size:12px}.viewSwitch button.active{background:var(--surface-2);color:var(--text);opacity:1}.alert{border-radius:var(--radius-sm);color:var(--danger);background:#fef2f2;border:1px solid #fecaca;padding:8px 12px;font-size:13px}.empty{border:1px dashed var(--border);border-radius:var(--radius);text-align:center;color:var(--text-muted);background:var(--surface);padding:40px}.empty h3{color:var(--text);text-transform:none;letter-spacing:0;margin-bottom:4px;font-size:15px}.kanban{grid-template-columns:repeat(4,minmax(260px,1fr));align-items:start;gap:12px;display:grid}.column{background:var(--surface-2);border-radius:var(--radius);flex-direction:column;gap:8px;min-height:200px;padding:10px;display:flex}.columnHead{justify-content:space-between;align-items:center;padding:2px 4px 4px;display:flex}.columnHead .label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);align-items:center;gap:8px;font-size:12px;font-weight:600;display:flex}.columnHead .label .swatch{border-radius:50%;width:8px;height:8px}.columnHead .count{color:var(--text-subtle);font-size:12px}.swatch.todo{background:#94a3b8}.swatch.in_progress{background:#2563eb}.swatch.done{background:#16a34a}.swatch.cancelled{background:#d4d4d8}.columnBody{border-radius:var(--radius-sm);flex-direction:column;flex:1;gap:8px;min-height:60px;padding:2px;display:flex}.columnBody.dropActive{outline-offset:-4px;background:#2563eb14;outline:2px dashed #2563eb66}.taskCard{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:grab;box-shadow:var(--shadow-sm);gap:6px;padding:10px;transition:border-color .15s,box-shadow .15s;display:grid}.taskCard:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md)}.taskCard:active{cursor:grabbing}.taskCard .top{justify-content:space-between;align-items:flex-start;gap:8px;display:flex}.taskCard .title{font-weight:500;line-height:1.35}.taskCard .desc{color:var(--text-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12.5px;display:-webkit-box;overflow:hidden}.taskCard .footer{justify-content:space-between;align-items:center;margin-top:2px;display:flex}.taskCard .assignee{color:var(--text-muted);align-items:center;gap:6px;font-size:12px;display:flex}.priority{border:1px solid var(--border);color:var(--text-muted);background:var(--surface);border-radius:999px;align-items:center;gap:4px;padding:1px 7px;font-size:11px;font-weight:500;display:inline-flex}.priority.LOW{color:#475569}.priority.MEDIUM{color:var(--warn);background:#fff7ed;border-color:#fed7aa}.priority.HIGH{color:var(--danger);background:#fef2f2;border-color:#fecaca}.miniAvatar{background:var(--surface-2);border:1px solid var(--border);width:22px;height:22px;color:var(--text-muted);border-radius:50%;place-items:center;font-size:11px;font-weight:600;display:grid}.tableWrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--border);padding:10px 14px;font-size:13px}th{background:var(--surface-2);color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:500}tbody tr:last-child td{border-bottom:none}tbody tr:hover{background:var(--surface-2)}td select{width:auto;padding:4px 6px;font-size:12px}.badge{border:1px solid var(--border);background:var(--surface);color:var(--text-muted);border-radius:999px;align-items:center;gap:6px;padding:2px 8px;font-size:11px;display:inline-flex}.badge.APPROVED{color:var(--ok);background:#f0fdf4;border-color:#bbf7d0}.badge.PENDING{color:var(--warn);background:#fff7ed;border-color:#fed7aa}.badge.REJECTED{color:var(--danger);background:#fef2f2;border-color:#fecaca}.badge.ADMIN{color:var(--info);background:#eff6ff;border-color:#bfdbfe}.userMenu{position:relative}.userTrigger{color:var(--text-muted);background:0 0;border:1px solid #0000;border-radius:999px;align-items:center;gap:10px;padding:4px 8px 4px 10px;font-size:13px;display:flex}.userTrigger:hover{background:var(--surface-2);color:var(--text);border-color:var(--border);opacity:1}.dropdown{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-width:220px;box-shadow:var(--shadow-md);z-index:50;flex-direction:column;gap:2px;padding:6px;display:flex;position:absolute;top:calc(100% + 6px);right:0}.dropdown .dropdownHead{border-bottom:1px solid var(--border);color:var(--text-muted);margin-bottom:4px;padding:8px 10px 10px}.dropdown button[role=menuitem]{text-align:left;color:var(--text);border-radius:var(--radius-sm);background:0 0;border:none;padding:7px 10px;font-size:13px;font-weight:400}.dropdown button[role=menuitem]:hover{background:var(--surface-2);opacity:1}.dropdown button[role=menuitem].danger{color:var(--danger)}.dropdown button[role=menuitem].danger:hover{background:#fef2f2}.profileGrid{grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:16px;display:grid}.profileCard{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.profileCardHead{border-bottom:1px solid var(--border);background:var(--surface-2);padding:16px 20px}.profileCardHead h2{font-size:15px}.profileCardHead p{color:var(--text-muted);margin-top:4px;font-size:13px}.profileForm{gap:12px;padding:20px;display:grid}.profileFooter{color:var(--text-muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-top:4px;font-size:12px;display:flex}.rte{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);transition:border-color .15s,box-shadow .15s;overflow:hidden}.rte:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px #18181b14}.rteToolbar{background:var(--surface-2);border-bottom:1px solid var(--border);flex-wrap:wrap;gap:2px;padding:6px 8px;display:flex}.rteBtn{color:var(--text-muted);background:0 0;border:1px solid #0000;border-radius:5px;justify-content:center;align-items:center;min-width:28px;height:28px;padding:4px 8px;font-size:12px;font-weight:500;display:inline-flex}.rteBtn:hover:not(:disabled){background:var(--surface);color:var(--text);border-color:var(--border);opacity:1}.rteBtn.active{background:var(--surface);color:var(--text);border-color:var(--border-strong)}.rteBtn:disabled{opacity:.4;cursor:not-allowed}.rteSep{background:var(--border);width:1px;margin:2px 4px}.rteContent{color:var(--text);outline:none;max-height:320px;padding:10px 12px;font-size:14px;line-height:1.5;overflow-y:auto}.rteContent p{margin:0 0 8px}.rteContent p:last-child{margin-bottom:0}.rteContent h1,.rteContent h2,.rteContent h3{margin:12px 0 6px;line-height:1.3}.rteContent h1{font-size:18px}.rteContent h2{font-size:16px}.rteContent h3{text-transform:none;letter-spacing:0;color:var(--text);font-size:14px}.rteContent ul,.rteContent ol{margin:0 0 8px;padding-left:22px}.rteContent li{margin:2px 0}.rteContent blockquote{border-left:3px solid var(--border-strong);color:var(--text-muted);margin:8px 0;padding-left:10px}.rteContent code{background:var(--surface-2);border-radius:4px;padding:1px 5px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.92em}.rteContent pre{background:var(--surface-2);border-radius:var(--radius-sm);margin:8px 0;padding:10px 12px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12.5px;overflow-x:auto}.rteContent pre code{background:0 0;padding:0}.rteContent a{color:var(--info);text-decoration:underline}.rteContent[data-placeholder]:empty:before,.rteContent .is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--text-subtle);pointer-events:none;float:left;height:0}.ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--text-subtle);float:left;pointer-events:none;height:0}.taskDesc{color:var(--text-muted);max-height:5.8em;font-size:12.5px;line-height:1.45;position:relative;overflow:hidden}.taskDesc>:first-child{margin-top:0}.taskDesc>:last-child{margin-bottom:0}.taskDesc p{margin:0 0 4px}.taskDesc h1,.taskDesc h2,.taskDesc h3{color:var(--text);text-transform:none;letter-spacing:0;margin:4px 0 2px;font-size:13px}.taskDesc ul,.taskDesc ol{margin:0 0 4px;padding-left:18px}.taskDesc code{background:var(--surface-2);border-radius:3px;padding:0 4px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.92em}.taskDesc a{color:var(--info)}.taskMeta{background:var(--surface-2);border-radius:var(--radius-sm);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 12px;font-size:13px;display:flex}.taskMetaItem{align-items:center;gap:6px;display:inline-flex}.comments{border-top:1px solid var(--border);gap:10px;margin-top:4px;padding-top:14px;display:grid}.comments h3{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-size:12px}.commentList{gap:10px;max-height:320px;margin:0;padding:0;list-style:none;display:grid;overflow-y:auto}.commentItem{align-items:flex-start;gap:10px;display:flex}.commentBody{background:var(--surface-2);border-radius:var(--radius-sm);flex:1;min-width:0;padding:8px 10px}.commentHead{align-items:center;gap:8px;margin-bottom:2px;display:flex}.commentAuthor{color:var(--text);font-size:13px;font-weight:500}.commentTime{color:var(--text-subtle);font-size:11px}.commentHead .icon{margin-left:auto}.commentText{color:var(--text);white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.45}.commentForm{gap:8px;display:grid}.commentForm textarea{min-height:56px;font-size:13px}.commentForm button{justify-self:end}.memberList{gap:4px;margin:0;padding:0;list-style:none;display:grid}.memberRow{border-radius:var(--radius-sm);align-items:center;gap:10px;padding:6px 8px;display:flex}.memberRow:hover{background:var(--surface-2)}.memberInfo{flex:1;min-width:0;display:grid}.memberName{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:500;overflow:hidden}.memberEmail{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.modalBackdrop{z-index:100;background:#0006;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);width:100%;max-width:460px;box-shadow:var(--shadow-md);border-radius:12px;overflow:hidden}.modal header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal header h2{font-size:16px}.modal .body{gap:12px;padding:20px;display:grid}.modal .footer{border-top:1px solid var(--border);background:var(--surface-2);justify-content:flex-end;gap:8px;padding:12px 20px;display:flex}label.field{gap:6px;display:grid}label.field .lbl{color:var(--text-muted);font-size:12px;font-weight:500}.fieldRow{grid-template-columns:1fr 1fr;gap:12px;display:grid}@media (width<=900px){.workspace{grid-template-columns:1fr}.sidebar{border-right:none;border-bottom:1px solid var(--border)}.kanban,.fieldRow{grid-template-columns:1fr}}
