:root{--font-sans: "Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "Geist Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;--bg-app: #f4f4f5;--bg-panel: #ffffff;--bg-subtle: #fafafa;--bg-muted: #f4f4f5;--bg-hover: #f4f4f5;--border: #e4e4e7;--border-strong: #d4d4d8;--text: #18181b;--text-2: #3f3f46;--text-muted: #71717a;--text-faint: #a1a1aa;--primary: #2563eb;--primary-hover: #1d4ed8;--primary-soft: #eff6ff;--todo: #1d4ed8;--todo-bg: #eff6ff;--progress: #c2410c;--progress-bg: #fff7ed;--done: #15803d;--done-bg: #f0fdf4;--overdue: #b91c1c;--overdue-bg: #fef2f2;--blocked: #b45309;--blocked-bg: #fffbeb;--purple: #7e22ce;--purple-bg: #faf5ff;--prio-high: #dc2626;--prio-medium: #ea580c;--prio-low: #71717a;--radius-sm: 6px;--radius: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 2px rgba(24, 24, 27, .06);--shadow: 0 1px 3px rgba(24, 24, 27, .08), 0 1px 2px rgba(24, 24, 27, .04);--shadow-lg: 0 16px 40px rgba(24, 24, 27, .14), 0 2px 6px rgba(24, 24, 27, .06);--fs-page: 28px;--fs-h2: 18px;--fs-h3: 15px;--fs-body: 14px;--fs-sm: 13px;--fs-xs: 12px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font-sans);font-size:var(--fs-body);color:var(--text);background:var(--bg-app);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin:0}.mono{font-family:var(--font-mono);font-size:var(--fs-xs)}.muted{color:var(--text-muted)}.faint{color:var(--text-faint)}.sm{font-size:var(--fs-sm)}.xs{font-size:var(--fs-xs)}.row{display:flex;align-items:center;gap:8px}.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px}.grow{flex:1;min-width:0}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:4px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:34px;padding:0 12px;border-radius:var(--radius);border:1px solid var(--border);background:#fff;color:var(--text);font-size:var(--fs-sm);font-weight:500;cursor:pointer;white-space:nowrap;transition:background .12s,border-color .12s}.btn:hover{background:var(--bg-hover)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover)}.btn-danger{color:var(--overdue)}.btn-danger:hover{background:var(--overdue-bg)}.btn-danger-solid{background:#dc2626;border-color:#dc2626;color:#fff}.btn-danger-solid:hover{background:#b91c1c}.btn-ghost{border-color:transparent;background:transparent}.btn-sm{height:28px;padding:0 10px;font-size:var(--fs-xs)}.btn-block{width:100%;height:38px}.icon-btn{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text-muted);cursor:pointer}.icon-btn:hover{background:var(--bg-hover);color:var(--text)}.field{display:flex;flex-direction:column;gap:6px}.field>label,.label{font-size:var(--fs-sm);font-weight:500;color:var(--text)}.input,.select,.textarea{width:100%;height:36px;padding:0 10px;border:1px solid var(--border);border-radius:var(--radius);background:#fff;font-size:var(--fs-sm);outline:none}.textarea{height:auto;min-height:84px;padding:8px 10px;resize:vertical;line-height:1.5}.input:focus,.select:focus,.textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb26}.input-icon{position:relative}.input-icon>svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-faint)}.input-icon>.input{padding-left:32px}.field-error{color:var(--overdue);font-size:var(--fs-xs)}.form-error{display:flex;gap:8px;align-items:flex-start;padding:10px 12px;border-radius:var(--radius);background:var(--overdue-bg);color:var(--overdue);font-size:var(--fs-sm);border:1px solid #fecaca}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.check{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);cursor:pointer}.check input{width:16px;height:16px;accent-color:var(--primary)}.app{display:flex;height:100vh;overflow:hidden}.sidebar{width:236px;flex-shrink:0;display:flex;flex-direction:column;padding:12px 10px;background:var(--bg-app);overflow-y:auto}.ws-switch{display:flex;align-items:center;gap:10px;padding:6px 8px;border-radius:var(--radius)}.ws-logo{width:30px;height:30px;border-radius:8px;background:#fff;border:1px solid var(--border);display:grid;place-items:center}.ws-name{font-weight:600;font-size:var(--fs-sm)}.search-trigger{margin:10px 0 6px;display:flex;align-items:center;gap:8px;width:100%;height:34px;padding:0 10px;border:1px solid var(--border);border-radius:var(--radius);background:#fff;color:var(--text-muted);font-size:var(--fs-sm);cursor:pointer}.kbd{margin-left:auto;font-family:var(--font-mono);font-size:11px;padding:1px 6px;border:1px solid var(--border);border-radius:5px;background:var(--bg-subtle)}.nav-section{margin-top:14px}.nav-title{display:flex;align-items:center;justify-content:space-between;padding:0 8px 4px;font-size:var(--fs-xs);color:var(--text-muted)}.nav-item{display:flex;align-items:center;gap:9px;height:32px;padding:0 8px;border-radius:var(--radius-sm);font-size:var(--fs-sm);color:var(--text-2);cursor:pointer;border:none;background:none;width:100%;text-align:left}.nav-item:hover{background:#18181b0d}.nav-item.active{background:#fff;color:var(--text);font-weight:500;box-shadow:var(--shadow-sm)}.nav-item .count{margin-left:auto;font-size:var(--fs-xs);color:var(--text-muted)}.nav-sub{margin:2px 0 4px 18px}.nav-sub .nav-item{height:30px}.project-dot{width:18px;height:18px;border-radius:5px;display:grid;place-items:center;color:#fff;flex-shrink:0}.sidebar-footer{margin-top:auto;padding-top:12px;display:flex;flex-direction:column;gap:4px}.account{display:flex;align-items:center;gap:10px;padding:8px;border-radius:var(--radius);cursor:pointer;border:none;background:none;text-align:left;width:100%}.account:hover{background:#18181b0d}.main{flex:1;min-width:0;margin:8px 8px 8px 0;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden}.topbar{height:52px;flex-shrink:0;display:flex;align-items:center;gap:10px;padding:0 16px;border-bottom:1px solid var(--border)}.crumbs{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--text-muted)}.crumbs .current{color:var(--text);font-weight:500;display:flex;align-items:center;gap:8px}.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:6px}.dot-badge{position:relative}.dot-badge:after{content:"";position:absolute;top:6px;right:6px;width:7px;height:7px;border-radius:50%;background:#dc2626;border:1.5px solid #fff}.content{flex:1;overflow:auto}.page{padding:28px 32px 40px}.page-wide{padding:28px 32px 32px;min-height:100%;display:flex;flex-direction:column}.view-fill{flex:1;min-height:0;display:flex;flex-direction:column}.select-sm{height:28px;width:auto;padding:0 8px;font-size:var(--fs-xs)}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}.page-title{font-size:var(--fs-page);font-weight:600;letter-spacing:-.02em}.page-sub{margin-top:4px;color:var(--text-muted);font-size:var(--fs-sm)}.card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg)}.card-pad{padding:16px}.card-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px}.card-title{font-size:var(--fs-h3);font-weight:600}.divider{height:1px;background:var(--border)}.avatar{display:inline-grid;place-items:center;border-radius:50%;color:#fff;font-weight:600;flex-shrink:0;border:2px solid #fff;-webkit-user-select:none;user-select:none}.avatar-photo{object-fit:cover;background:var(--bg-muted)}.avatar-stack{display:inline-flex}.avatar-stack .avatar+.avatar{margin-left:-7px}.badge{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;border-radius:999px;font-size:var(--fs-xs);font-weight:500;white-space:nowrap}.badge-plain{background:transparent;padding:0;height:auto}.st-TODO{color:var(--todo)}.bg-TODO{background:var(--todo-bg)}.st-IN_PROGRESS{color:var(--progress)}.bg-IN_PROGRESS{background:var(--progress-bg)}.st-DONE{color:var(--done)}.bg-DONE{background:var(--done-bg)}.st-OVERDUE{color:var(--overdue)}.bg-OVERDUE{background:var(--overdue-bg)}.st-BLOCKED{color:var(--blocked)}.bg-BLOCKED{background:var(--blocked-bg)}.tag{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-xs);color:var(--text-2)}.tag-dot{width:10px;height:10px;border-radius:50%;border:2px solid var(--purple);background:var(--purple-bg)}.chip{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:var(--radius-sm);border:1px solid var(--border);font-size:var(--fs-xs);background:#fff;cursor:pointer}.chip.active{background:var(--text);color:#fff;border-color:var(--text)}.chip .n{color:inherit;opacity:.6}.custom-pill{font-size:11px;padding:1px 6px;border-radius:4px;background:var(--purple-bg);color:var(--purple);font-weight:500}.progress{height:6px;border-radius:99px;background:var(--bg-muted);overflow:hidden}.progress>span{display:block;height:100%;background:var(--primary);border-radius:99px}.seg-bar{display:flex;gap:4px;height:6px}.seg-bar>span{border-radius:99px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border)}.tab{display:flex;align-items:center;gap:7px;height:38px;padding:0 10px;border:none;background:none;cursor:pointer;color:var(--text-muted);font-size:var(--fs-sm);border-bottom:2px solid transparent;margin-bottom:-1px}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-color:var(--text);font-weight:500}.segmented{display:inline-flex;padding:2px;border-radius:var(--radius);background:var(--bg-muted)}.segmented button{height:26px;padding:0 10px;border:none;border-radius:6px;background:transparent;font-size:var(--fs-xs);cursor:pointer;color:var(--text-muted)}.segmented button.active{background:#fff;color:var(--text);box-shadow:var(--shadow-sm);font-weight:500}.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:8px;padding:40px 20px;color:var(--text-muted)}.empty-icon{width:44px;height:44px;border-radius:12px;background:var(--bg-muted);display:grid;place-items:center;color:var(--text-muted)}.empty h3{color:var(--text);font-size:var(--fs-h3)}.spinner{width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg,#f4f4f5 25%,#ececee,#f4f4f5 75%);background-size:200% 100%;animation:shimmer 1.2s infinite;border-radius:var(--radius)}@keyframes shimmer{to{background-position:-200% 0}}.overlay{position:fixed;inset:0;background:#18181b59;z-index:50;display:grid;place-items:center;padding:24px}.modal{width:100%;max-width:520px;max-height:calc(100vh - 48px);overflow:auto;background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.modal-lg{max-width:760px}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:18px 20px 6px}.modal-title{font-size:var(--fs-h3);font-weight:600}.modal-body{padding:12px 20px;display:flex;flex-direction:column;gap:14px}.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 18px}.drawer-overlay{position:fixed;inset:0;z-index:40;background:#18181b2e}.drawer{position:fixed;top:8px;right:8px;bottom:8px;width:480px;z-index:41;background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;overflow:hidden;animation:slidein .18s ease-out}@keyframes slidein{0%{transform:translate(24px);opacity:0}}.popover{position:absolute;z-index:60;min-width:200px;background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:4px}.menu-item{display:flex;align-items:center;gap:8px;width:100%;height:32px;padding:0 10px;border:none;background:none;border-radius:6px;font-size:var(--fs-sm);cursor:pointer;text-align:left}.menu-item:hover{background:var(--bg-hover)}.menu-item.danger{color:var(--overdue)}.menu-item:disabled{opacity:.5;cursor:not-allowed}.toasts{position:fixed;bottom:20px;left:50%;transform:translate(-50%);z-index:100;display:flex;flex-direction:column;gap:8px;align-items:center}.toast{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:var(--radius);background:var(--text);color:#fff;font-size:var(--fs-sm);box-shadow:var(--shadow-lg);max-width:520px}.toast.error{background:#7f1d1d}.table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}.table th{text-align:left;font-weight:500;font-size:var(--fs-xs);color:var(--text-muted);padding:10px 12px;border-bottom:1px solid var(--border);background:var(--bg-subtle)}.table td{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:middle}.table tr.clickable{cursor:pointer}.table tr.clickable:hover td{background:var(--bg-subtle)}.list-row{display:flex;align-items:center;gap:12px;padding:11px 14px;border-top:1px solid var(--border)}.list-row:first-child{border-top:none}.list-row.clickable{cursor:pointer}.list-row.clickable:hover{background:var(--bg-subtle)}.auth{display:grid;grid-template-columns:1fr 1fr;min-height:100vh;background:#fff}.auth-hero{background:linear-gradient(160deg,#eef4ff,#f5f8ff);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;text-align:center;gap:16px}.auth-logo{width:76px;height:76px;border-radius:20px;background:#fff;box-shadow:0 10px 28px #2563eb1f,0 2px 6px #2563eb0f;display:grid;place-items:center}.auth-brand{font-size:34px;font-weight:600;letter-spacing:-.02em}.auth-tagline{color:var(--text-2);max-width:320px;line-height:1.5}.auth-preview{width:380px;margin-top:18px;text-align:left}.auth-form-wrap{display:flex;align-items:center;justify-content:center;padding:48px}.auth-form{width:100%;max-width:340px;display:flex;flex-direction:column;gap:16px}.auth-form h1{font-size:22px;font-weight:600}.link{color:var(--primary);font-weight:500;cursor:pointer;background:none;border:none;padding:0;font-size:inherit}.link:hover{text-decoration:underline}.board{display:grid;grid-template-columns:repeat(3,minmax(260px,1fr));gap:14px;align-items:start}.col-head{display:flex;align-items:center;gap:8px;height:38px;padding:0 12px;border-radius:var(--radius);font-weight:500;font-size:var(--fs-sm);margin-bottom:10px}.col-head .n{font-size:var(--fs-xs);color:var(--text-muted);font-weight:400}.col-head .icon-btn{margin-left:auto;width:26px;height:26px}.col-body{display:flex;flex-direction:column;gap:10px;min-height:120px;border-radius:var(--radius);transition:background .12s}.col-body.drop{background:var(--primary-soft);outline:2px dashed #93c5fd;outline-offset:2px}.task-card{padding:12px;border:1px solid var(--border);border-radius:var(--radius-lg);background:#fff;cursor:pointer;display:flex;flex-direction:column;gap:8px;box-shadow:var(--shadow-sm)}.task-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow)}.task-card.dragging{opacity:.5}.task-card-title{font-weight:600;font-size:var(--fs-sm)}.task-card-desc{font-size:var(--fs-xs);color:var(--text-muted);line-height:1.45}.task-card-foot{display:flex;align-items:center;gap:10px;padding-top:8px;border-top:1px solid var(--border);font-size:var(--fs-xs);color:var(--text-muted)}.meta-ic{display:inline-flex;align-items:center;gap:3px}.calendar{flex:1;display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:14px}.calendar-main{display:flex;flex-direction:column;min-height:0}.cal-grid{flex:1;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.cal-dow{padding:8px;font-size:var(--fs-xs);color:var(--text-muted);background:var(--bg-subtle);border-bottom:1px solid var(--border)}.cal-cell{min-height:84px;padding:6px;border-right:1px solid var(--border);border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:3px}.cal-cell:nth-child(7n){border-right:none}.cal-cell.weekend,.cal-cell.out{background:var(--bg-subtle)}.cal-cell.out .cal-day{color:var(--text-faint)}.cal-day{font-size:var(--fs-xs);font-family:var(--font-mono);width:22px;height:22px;display:grid;place-items:center;border-radius:6px}.cal-day.today{background:var(--primary);color:#fff}.cal-ev{display:flex;align-items:center;gap:4px;padding:2px 5px;border-radius:5px;font-size:11px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cal-ev:hover{filter:brightness(.97)}.timeline{flex:1;min-height:320px;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:auto;position:relative}.tl-head{display:grid;position:sticky;top:0;background:#fff;z-index:2;border-bottom:1px solid var(--border)}.tl-day{text-align:center;padding:6px 0;font-size:11px;color:var(--text-muted);border-left:1px solid var(--border)}.tl-day b{display:block;font-size:var(--fs-sm);color:var(--text);font-weight:500;font-family:var(--font-mono)}.tl-day.today b{background:var(--primary);color:#fff;border-radius:6px;width:26px;margin:0 auto}.tl-body{position:relative}.tl-bar{position:absolute;height:26px;display:flex;align-items:center;gap:6px;padding:0 6px;border-radius:7px;border:1px solid;font-size:var(--fs-xs);font-weight:500;cursor:pointer;overflow:hidden;white-space:nowrap;z-index:1}.tl-bar:hover{filter:brightness(.97)}.tl-legend{display:flex;gap:14px;font-size:var(--fs-xs)}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.stat{padding:16px;display:flex;flex-direction:column;gap:10px}.stat-ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center}.stat-num{font-size:26px;font-weight:600;letter-spacing:-.02em}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}.project-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.project-card{padding:16px;display:flex;flex-direction:column;gap:12px}.kv{display:grid;grid-template-columns:90px 1fr;gap:8px 10px;align-items:center;font-size:var(--fs-sm)}.kv dt{color:var(--text-muted);display:flex;align-items:center;gap:6px}.kv dd{margin:0}.ring{width:34px;height:34px}.detail-head{padding:14px 18px 0}.detail-body{flex:1;overflow:auto;padding:4px 18px 18px;display:flex;flex-direction:column;gap:16px}.prop-grid{display:grid;grid-template-columns:130px 1fr;gap:6px 10px;align-items:center;font-size:var(--fs-sm)}.prop-grid>dt{color:var(--text-muted);display:flex;align-items:center;gap:8px;height:32px}.prop-grid>dd{margin:0;min-height:32px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.inline-select{height:30px;border:1px solid transparent;background:transparent;border-radius:6px;padding:0 6px;cursor:pointer;font-size:var(--fs-sm)}.inline-select:hover:not(:disabled){border-color:var(--border)}.inline-select:disabled{cursor:default}.comment{display:flex;gap:10px}.comment-box{border-top:1px solid var(--border);padding:12px 18px;display:flex;gap:8px;align-items:center}.section-title{font-size:var(--fs-xs);font-weight:500;color:var(--text-muted);margin-bottom:8px}.roles-layout{display:grid;grid-template-columns:280px 1fr;gap:16px;align-items:start}.role-item{display:flex;gap:10px;padding:12px;border-radius:var(--radius);cursor:pointer;border:1px solid transparent}.role-item:hover{background:var(--bg-subtle)}.role-item.active{background:var(--primary-soft);border-color:#bfdbfe}.perm-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;border-top:1px solid var(--border)}.switch{position:relative;width:36px;height:20px;flex-shrink:0}.switch input{opacity:0;width:0;height:0}.switch span{position:absolute;inset:0;border-radius:99px;background:var(--border-strong);transition:.15s;cursor:pointer}.switch span:before{content:"";position:absolute;width:16px;height:16px;left:2px;top:2px;border-radius:50%;background:#fff;transition:.15s;box-shadow:var(--shadow-sm)}.switch input:checked+span{background:var(--primary)}.switch input:checked+span:before{transform:translate(16px)}.switch input:disabled+span{opacity:.5;cursor:not-allowed}.switch input:focus-visible+span{outline:2px solid var(--primary);outline-offset:2px}.settings-section{display:grid;grid-template-columns:260px 1fr;gap:32px;padding:24px 0;border-top:1px solid var(--border)}.settings-section:first-of-type{border-top:none;padding-top:4px}.danger-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 0}.grid-2>.card{display:flex;flex-direction:column}.task-check{width:18px;height:18px;flex-shrink:0;display:grid;place-items:center;border:1.5px solid var(--border-strong);border-radius:5px;background:#fff;color:#fff;cursor:pointer;padding:0}.task-check:hover{border-color:var(--done)}.task-check.checked{background:#16a34a;border-color:#16a34a}.task-done-title{text-decoration:line-through;color:var(--text-muted)}.task-row-inline{min-width:0}.group-head{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--bg-subtle);border-bottom:1px solid var(--border);font-size:var(--fs-sm);font-weight:600}.group-head+.list-row{border-top:none}@media(max-width:1279px){.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.board{grid-template-columns:repeat(3,minmax(200px,1fr))}}
