:root{--bg:#f5f6f7;--card:#fff;--border:#e3e4e7;--text:#171717;--muted:#6b7280;--brand-black:#111;--brand-red:#e0201a;--brand-red-hover:#c81913;--danger:#dc2626;--todo:#9ca3af;--in_progress:#d97706;--done:#16a34a;--radius:10px}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.hidden{display:none!important}button{cursor:pointer;border:none;border-radius:8px;font-size:14px;font-weight:600;padding:10px 14px;font-family:inherit;display:inline-flex;align-items:center;justify-content:center;transition:background .15s ease,border-color .15s ease,opacity .15s ease,transform .05s ease}button:active{transform:translateY(1px)}button:disabled{opacity:.55;cursor:not-allowed;transform:none}button:focus-visible{outline:2px solid var(--brand-red);outline-offset:2px}input[type=date],input[type=email],input[type=password],input[type=text],select,textarea{width:100%;padding:9px 11px;border:1px solid var(--border);border-radius:8px;font-size:14px;background:#fff;color:var(--text);font-family:inherit;transition:border-color .15s ease,box-shadow .15s ease}input[type=date]:hover,input[type=email]:hover,input[type=password]:hover,input[type=text]:hover,select:hover,textarea:hover{border-color:#c7cad1}input[type=date]:focus,input[type=email]:focus,input[type=password]:focus,input[type=text]:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand-red);box-shadow:0 0 0 3px rgba(224,32,26,.12)}textarea{resize:vertical;min-height:60px}select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right 10px center;background-size:16px;padding-right:32px;cursor:pointer}select:disabled{cursor:not-allowed;opacity:.6}.btn-primary{background:var(--brand-red);color:#fff;width:100%}.btn-primary:hover:not(:disabled){background:var(--brand-red-hover)}.btn-secondary{background:#eef0f4;color:var(--text);border:1px solid #e2e5ea}.btn-secondary:hover:not(:disabled){background:#e2e5ea;border-color:#d7dae0}.btn-danger{background:#fee2e2;color:var(--danger);border:1px solid #fbcfcf}.btn-danger:hover:not(:disabled){background:#fecaca;border-color:#f8b4b4}.btn-small{padding:5px 10px;font-size:12px}.btn-icon{padding:6px;border-radius:6px}.msg{font-size:13px;margin-top:10px}.msg.error{color:var(--danger)}.msg.ok{color:#16a34a}.auth-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.auth-box{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:32px;width:100%;max-width:380px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.auth-brand-strip{background:var(--brand-black);margin:-32px -32px 22px;padding:22px 32px;border-radius:var(--radius) var(--radius) 0 0}.link-sent-icon{width:44px;height:44px;border-radius:50%;background:#ecfdf3;color:var(--done);display:flex;align-items:center;justify-content:center;margin:0 auto 14px}.auth-box h1{font-size:20px;margin:0 0 4px}.auth-box p.sub{color:var(--muted);font-size:14px;margin:0 0 20px}.field{margin-bottom:14px}.field label{display:block;font-size:13px;font-weight:600;margin-bottom:6px;color:#374151}.wordmark{font-weight:800;letter-spacing:-.01em}.wordmark-md{font-size:16px}.wordmark-lg{font-size:22px}.wordmark-kays{color:var(--brand-black)}.wordmark-kays-inverted{color:#fff}.wordmark-it{color:var(--brand-red)}.app-layout{min-height:100vh;display:flex}.sidebar{width:232px;flex-shrink:0;background:var(--brand-black);color:#fff;display:flex;flex-direction:column;padding:22px 16px;position:-webkit-sticky;position:sticky;top:0;height:100vh}.sidebar-brand{padding:0 8px 22px;border-bottom:1px solid hsla(0,0%,100%,.1);margin-bottom:18px}.sidebar-subtitle{color:#9ca0aa;font-size:12px;margin-top:4px;text-transform:uppercase;letter-spacing:.06em}.sidebar-nav{display:flex;flex-direction:column;gap:4px;flex:1 1}.sidebar-nav button{background:transparent;color:#c7c9cf;text-align:left;padding:10px 12px;border-radius:8px;font-size:14px;display:flex;align-items:center}.sidebar-nav button:hover{background:hsla(0,0%,100%,.06);color:#fff}.sidebar-nav button.active{background:var(--brand-red);color:#fff}.sidebar-who{border-top:1px solid hsla(0,0%,100%,.1);padding-top:14px;margin-top:14px}.sidebar-who-name{font-size:13px;font-weight:600;margin-bottom:6px}.sidebar-who .role-badge{background:hsla(0,0%,100%,.12)}.role-badge{text-transform:uppercase;font-size:10px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:999px;background:#4b5563;color:#fff}.role-badge.admin{background:var(--brand-red)}.main-area{flex:1 1;min-width:0}main.content{max-width:1100px;margin:0 auto;padding:28px 24px 60px}.grid-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-gap:14px;gap:14px;margin-bottom:24px}.stat-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px}.stat-card .num{font-size:28px;font-weight:700}.stat-card .label{font-size:13px;color:var(--muted);margin-top:2px}.stat-icon{color:var(--brand-red);margin-bottom:8px}.stat-icon-warn{color:var(--danger)}.overload-flag{display:inline-flex;align-items:center;gap:4px}section.panel{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px;margin-bottom:20px}section.panel h2{font-size:15px;margin:0 0 14px}.panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap;gap:10px}.panel-head h2{margin:0}table{width:100%;border-collapse:collapse;font-size:13px}td,th{text-align:left;padding:9px 8px;border-bottom:1px solid var(--border);vertical-align:middle}th{color:var(--muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em}tr:last-child td{border-bottom:none}.task-row{cursor:pointer}.task-row:hover{background:#fafafb}.empty-row td{color:var(--muted);text-align:center;padding:20px}.badge{display:inline-block;padding:3px 9px;border-radius:999px;font-size:11px;font-weight:700;color:#fff;letter-spacing:.01em;white-space:nowrap}.badge.todo{background:var(--todo)}.badge.in_progress{background:var(--in_progress)}.badge.done{background:var(--done)}.badge.active{background:var(--brand-red)}.badge.closed{background:#374151}.status-select{font-size:12px;font-weight:600;padding:5px 26px 5px 10px;border-radius:999px;background-position:right 8px center;background-size:13px;width:auto;min-width:0}.project-card{border:1px solid var(--border);border-radius:var(--radius);margin-bottom:14px;overflow:hidden}.project-card .p-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;cursor:pointer;background:#fafafb;gap:10px}.project-card .p-head h3{margin:0;font-size:15px;display:flex;align-items:center;gap:8px}.project-card .p-head .p-sub{font-size:12px;color:var(--muted);margin-top:2px}.project-card .p-body{padding:16px;border-top:1px solid var(--border)}.project-card .p-body.hidden{display:none}.row-flex{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin-bottom:14px}.row-flex .field{margin-bottom:0;flex:1 1;min-width:140px}.chip{display:inline-flex;align-items:center;gap:6px;background:#fdeceb;border-radius:999px;padding:4px 10px 4px 12px;font-size:12px;font-weight:600;margin:0 6px 6px 0}.chip,.chip button{color:var(--brand-red)}.chip button{background:none;padding:2px;font-size:14px;line-height:1;border-radius:50%}.chip button:hover:not(:disabled){background:rgba(224,32,26,.16)}.member-list{display:flex;flex-wrap:wrap;margin-bottom:12px}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.35);display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.modal{background:#fff;border-radius:var(--radius);padding:22px;width:100%;max-width:420px}.modal h3{margin:0 0 16px;font-size:16px}.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:6px}.toolbar{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}footer.note{text-align:center;color:var(--muted);font-size:12px;padding:20px}.range-picker{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.range-picker button{background:#eef0f4;color:var(--text);padding:6px 12px;font-size:12px}.range-picker button.active{background:var(--brand-black);color:#fff}.range-picker input[type=date]{width:auto;padding:6px 8px;font-size:12px}.access-denied{text-align:center;padding:60px 20px;color:var(--muted)}.badge.priority-low{background:#6b7280}.badge.priority-medium{background:#2563eb}.badge.priority-high{background:var(--brand-red)}.workload-row-overloaded{background:#fef2f2}.overload-flag{color:var(--brand-red);font-weight:700;font-size:12px}.task-detail-modal{max-width:560px;max-height:85vh;display:flex;flex-direction:column}.task-detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:14px}.task-detail-fields{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:12px 16px;gap:12px 16px;margin-bottom:14px}.task-detail-fields .field{margin-bottom:0}.task-detail-description{font-size:13px;color:#374151;background:#f9fafb;border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:16px;white-space:pre-wrap}.task-detail-timeline{overflow-y:auto;flex:1 1;margin-bottom:14px;min-height:80px}.timeline-list{display:flex;flex-direction:column;gap:10px;margin-top:10px}.timeline-item{font-size:13px;border-radius:8px;padding:8px 10px}.timeline-activity{color:var(--muted);background:#f9fafb;font-style:italic;display:flex;justify-content:space-between;gap:10px}.timeline-activity time{font-size:11px;white-space:nowrap}.timeline-comment{background:#fdeceb}.timeline-comment-head{display:flex;justify-content:space-between;gap:10px;margin-bottom:4px;font-size:12px}.timeline-comment-head time{color:var(--muted);font-weight:400}.task-detail-comment-box{display:flex;gap:8px;align-items:flex-end;border-top:1px solid var(--border);padding-top:14px}.task-detail-comment-box textarea{min-height:42px}.icon{flex-shrink:0}.sidebar-nav button svg,button svg{vertical-align:-3px;margin-right:7px}.btn-danger svg,.btn-primary svg,.btn-secondary svg{vertical-align:-2px;margin-right:6px}.btn-small svg{margin-right:4px}.spin{animation:spin .8s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.loading-spinner{display:flex;flex-direction:column;align-items:center;gap:12px;color:var(--muted)}.loading-spinner .spin{color:var(--brand-red)}.skeleton-line{background:linear-gradient(90deg,#eef0f2 25%,#e4e6e9 37%,#eef0f2 63%);background-size:400% 100%;animation:skeleton-shimmer 1.4s ease infinite;border-radius:6px;height:14px;margin-bottom:8px}@keyframes skeleton-shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}.toast-stack{position:fixed;bottom:20px;right:20px;display:flex;flex-direction:column;gap:10px;z-index:100;max-width:340px}.toast{display:flex;align-items:center;gap:8px;padding:12px 14px;border-radius:8px;background:#fff;box-shadow:0 4px 16px rgba(0,0,0,.12);font-size:13px;border-left:3px solid var(--muted);animation:toast-in .2s ease}@keyframes toast-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.toast span{flex:1 1}.toast-success{border-left-color:var(--done)}.toast-success svg{color:var(--done)}.toast-error{border-left-color:var(--brand-red)}.toast-error svg{color:var(--brand-red)}.toast-info{border-left-color:#2563eb}.toast-info svg{color:#2563eb}.toast-close{background:none;padding:2px;color:var(--muted)}.confirm-modal{text-align:center;max-width:360px}.confirm-icon{width:44px;height:44px;border-radius:50%;background:#fdeceb;color:var(--brand-red);display:flex;align-items:center;justify-content:center;margin:0 auto 14px}.confirm-modal h3{margin-bottom:6px}.confirm-modal p{color:var(--muted);font-size:13px;margin:0 0 18px}.confirm-modal .modal-actions{justify-content:center}.chevron{color:var(--muted);transition:transform .18s ease;flex-shrink:0}.chevron-open{transform:rotate(180deg)}.empty-state{text-align:center;padding:40px 20px;color:var(--muted)}.empty-state .icon{color:#cbd0d8;margin-bottom:10px}.empty-state p{margin:0;font-size:13px}