@font-face{font-family:InstrumentSans;src:url(/assets/InstrumentSans-Regular-Crsnzn7o.ttf) format("truetype");font-weight:400;font-display:swap}@font-face{font-family:InstrumentSans;src:url(/assets/InstrumentSans-Bold-CEAwMKe7.ttf) format("truetype");font-weight:700;font-display:swap}:root{--n0:#FFFFFF;--n50:#F7F9FB;--n100:#F0F3F7;--n200:#E4E9F0;--n300:#D3DBE5;--n400:#9AA6B7;--n500:#66738A;--n600:#4A5668;--n700:#333D4E;--n800:#222B3A;--n900:#161D29;--teal-50:#ECF8F7;--teal-100:#D6EFEE;--teal-500:#0EA5A4;--teal-600:#0C8B8A;--teal-700:#0F766E;--indigo-50:#EEEFFD;--indigo-500:#6366F1;--indigo-600:#4F54E0;--green-50:#E6F5EF;--green-500:#2FA87E;--amber-50:#FBF2E1;--amber-500:#DE9A35;--amber-700:#9A641A;--red-50:#FBEBEA;--red-500:#DE6159;--red-700:#C0453E;--sky-50:#EAF2FC;--sky-600:#2F6FB8;--sky-700:#245A96;--c-a:#6366F1;--c-a-soft:#EEEFFD;--c-b:#0EA5A4;--c-b-soft:#ECF8F7;--c-c:#DE9A35;--c-c-soft:#FBF2E1;--e1:0 1px 2px rgba(34,43,58,.05),0 6px 18px rgba(34,43,58,.05);--e2:0 2px 6px rgba(34,43,58,.06),0 16px 40px rgba(34,43,58,.09);--r-sm:8px;--r-md:12px;--r-lg:16px;--r-xl:20px;--r-pill:999px;--font-ui:"InstrumentSans","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;--sidebar-w:232px}html[data-theme=dark]{color-scheme:dark;--n0:#171C24;--n50:#0E1218;--n100:#1F252F;--n200:#2A323D;--n300:#3A4351;--n400:#8B95A5;--n500:#A0AABA;--n600:#BFC8D5;--n700:#D5DCE6;--n800:#E8EDF4;--n900:#F4F7FB;--teal-50:#123130;--teal-100:#16403E;--teal-500:#2BBDBB;--teal-600:#22A6A4;--teal-700:#7FDCDA;--indigo-50:#1B1E38;--indigo-500:#8B8CF8;--indigo-600:#A5A6FB;--green-50:#12302A;--green-500:#4FC49B;--amber-50:#33270F;--amber-500:#E7B268;--amber-700:#F0C894;--red-50:#33191A;--red-500:#E9827A;--red-700:#F0A9A3;--sky-50:#152236;--sky-600:#79B0E8;--sky-700:#A6CBF2;--c-a-soft:#1B1E38;--c-b-soft:#123130;--c-c-soft:#33270F;--e1:0 1px 2px rgba(0,0,0,.4),0 6px 18px rgba(0,0,0,.35);--e2:0 2px 6px rgba(0,0,0,.45),0 16px 40px rgba(0,0,0,.5)}html[data-theme=dark] .app-nav{border-right-color:var(--n200)}html[data-theme=dark] img{filter:none}body.density-compact .task{padding:9px 11px}body.density-compact .pcard{padding:14px 16px}body.density-compact .dlg-row,body.density-compact .sub-item{padding-top:6px;padding-bottom:6px}.avatar-picker{display:flex;gap:10px;margin:4px 0 14px}.av-dot{width:30px;height:30px;border-radius:50%;cursor:pointer;border:2.5px solid transparent;transition:transform .15s,border-color .15s}.av-dot:hover{transform:scale(1.08)}.av-dot.on{border-color:var(--n800)}.av-dot.sm{width:22px;height:22px;border-width:2px}.cl-edit{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 0}.cl-edit input{height:32px;padding:0 10px;border:1.5px solid var(--n300);border-radius:9px;background:var(--n0);color:var(--n800);font:inherit;font-size:12.5px;outline:none;width:150px}.cl-edit input:focus{border-color:var(--teal-600);box-shadow:0 0 0 3px var(--teal-100)}.cl-colors{display:flex;gap:5px}.btn-xs{height:28px;padding:0 10px;font-size:12px;border-radius:8px}.cell.week-cell{min-height:172px}*{margin:0;padding:0;box-sizing:border-box}html{-webkit-font-smoothing:antialiased}body{font-family:var(--font-ui);font-size:14px;line-height:1.65;color:var(--n800);background:radial-gradient(900px 460px at 6% -4%,rgba(14,165,164,.06),transparent 60%),radial-gradient(1000px 560px at 97% 2%,rgba(99,102,241,.05),transparent 60%),var(--n50)}.num{font-variant-numeric:tabular-nums}a{text-decoration:none;color:inherit}button{font-family:var(--font-ui);cursor:pointer}::selection{background:var(--teal-100)}:focus-visible{outline:2px solid var(--teal-600);outline-offset:2px}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.app-content>*:not(.drawer-mask):not(.drawer):not(.modal-mask){animation:rise .5s cubic-bezier(.2,.7,.3,1) both}.app-content>*:nth-child(2){animation-delay:.05s}.app-content>*:nth-child(3){animation-delay:.1s}.app-content>*:nth-child(4){animation-delay:.15s}.app-content>*:nth-child(5){animation-delay:.2s}.app-content>.drawer-mask,.app-content>.drawer,.app-content>.modal-mask{animation:none}.app-nav{position:fixed;inset:0 auto 0 0;width:var(--sidebar-w);z-index:20;background:var(--n0);border-right:1px solid var(--n200);padding:20px 14px;display:flex;flex-direction:column;gap:24px}.logo{display:flex;align-items:center;gap:11px;padding:0 8px}.logo-mark{width:34px;height:34px;border-radius:11px;flex:none;background:linear-gradient(135deg,var(--teal-500),var(--indigo-500));display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:16px;box-shadow:0 6px 14px #0ea5a44d}.logo b{font-size:16px;display:block;line-height:1.3}.logo span{display:block;font-size:11px;color:var(--n500)}.nav{display:grid;gap:3px}.nav-item{display:flex;align-items:center;gap:11px;font-size:13.5px;font-weight:700;color:var(--n500);padding:9px 10px;border-radius:10px;transition:background .15s ease-out,color .15s ease-out}.nav-item:hover{background:var(--n100);color:var(--n800)}.nav-item svg{width:17px;height:17px;flex:none}.nav-item.active{color:var(--teal-700);background:var(--teal-50)}.nav-item .count{margin-left:auto;font-size:11px;background:var(--red-500);color:#fff;border-radius:99px;padding:1px 7px}.side-foot{margin-top:auto;display:flex;align-items:center;gap:10px;padding:14px 10px 4px;border-top:1px solid var(--n200)}.side-foot .avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--indigo-500),var(--teal-500));color:#fff;display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:700;flex:none}.side-foot b{font-size:13px;display:block;line-height:1.3}.side-foot span{font-size:11.5px;color:var(--n500)}.side-foot .gear{margin-left:auto;width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:var(--n400);flex:none;transition:all .15s}.side-foot .gear:hover{background:var(--n100);color:var(--teal-700)}.side-foot .gear svg{width:16px;height:16px}.user-menu{position:absolute;left:10px;bottom:62px;background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);box-shadow:var(--e2);padding:6px;display:none;width:196px;z-index:30}.user-menu.show{display:block;animation:rise .18s both}.user-menu a{display:flex;align-items:center;gap:9px;font-size:12.5px;font-weight:700;color:var(--n600);padding:9px 11px;border-radius:8px}.user-menu a:hover{background:var(--n50);color:var(--n800)}.user-menu a.danger{color:var(--red-700)}.user-menu a.danger:hover{background:var(--red-50)}.user-menu svg{width:15px;height:15px;flex:none}.side-clients{flex:1;min-height:0;overflow-y:auto;display:grid;gap:2px;align-content:start}.sc-title{font-size:11px;font-weight:700;color:var(--n400);letter-spacing:.12em;padding:0 8px 7px}.sc-head{display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:9px;cursor:pointer;font-size:12.5px;font-weight:700;color:var(--n700);transition:background .15s;-webkit-user-select:none;user-select:none}.sc-head:hover{background:var(--n100)}.sc-head.empty{cursor:default;opacity:.75}.sc-head.empty:hover{background:transparent}.sc-head .chev{margin-left:auto;width:13px;height:13px;color:var(--n400);flex:none;transition:transform .2s}.sc-group.closed .chev{transform:rotate(-90deg)}.sc-group.closed .sc-list{display:none}.sc-list{display:grid;gap:2px;padding:2px 0 6px}.sc-item{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--n500);padding:5px 8px 5px 39px;border-radius:8px;transition:all .15s}.sc-item:hover{background:var(--n100);color:var(--n800)}.sc-item i{width:6px;height:6px;border-radius:2px;flex:none}.sc-item .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sc-item .pct{margin-left:auto;font-size:10.5px;font-weight:700;color:var(--n400);flex:none}.sc-item.risk .pct{color:var(--red-700)}.app-content{margin-left:var(--sidebar-w);padding:26px 30px 40px;min-height:100vh}.topbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.topbar h2{font-size:21px;font-weight:700}.topbar .sub{font-size:12.5px;color:var(--n500);margin-top:2px}.topbar .sub b{color:var(--teal-700)}.top-right{margin-left:auto;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.search{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--n400);background:var(--n0);border:1px solid var(--n200);border-radius:11px;padding:9px 14px;width:210px}.search svg{width:14px;height:14px;flex:none}.search input{border:none;outline:none;background:transparent;font:inherit;color:var(--n800);width:100%}.search kbd{margin-left:auto;font-size:10.5px;font-family:inherit;background:var(--n50);border:1px solid var(--n200);border-radius:5px;padding:1px 6px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:13.5px;font-weight:700;line-height:1;padding:0 18px;height:38px;border-radius:11px;border:1px solid transparent;white-space:nowrap;transition:all .15s ease-out}.btn-sm{height:32px;padding:0 13px;font-size:12.5px;border-radius:9px}.btn-pri{color:#fff;background:var(--teal-700);box-shadow:0 4px 12px #0f766e38}.btn-pri:hover{background:var(--teal-600)}.btn-pri:active{transform:translateY(1px)}.btn-sec{color:var(--n800);background:var(--n0);border-color:var(--n300)}.btn-sec:hover{border-color:var(--n400);background:var(--n50)}.btn-ghost{color:var(--n500);background:transparent}.btn-ghost:hover{background:var(--n100);color:var(--n800)}.btn.is-disabled{opacity:.55;pointer-events:none}.btn .spin{width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:rot .7s linear infinite}@keyframes rot{to{transform:rotate(360deg)}}.pill{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;padding:3px 11px;border-radius:var(--r-pill);white-space:nowrap}.pill i{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}.pill-high{color:var(--red-700);background:var(--red-50)}.pill-mid{color:var(--amber-700);background:var(--amber-50)}.pill-low{color:var(--n500);background:var(--n100)}.pill-doing{color:var(--indigo-600);background:var(--indigo-50)}.pill-done{color:var(--green-500);background:var(--green-50)}.pill-risk{color:var(--red-700);background:var(--red-50)}.pill-todo{color:var(--n500);background:var(--n100)}.pill-feedback{color:var(--sky-700);background:var(--sky-50)}.pill-feedback.is-stale{color:var(--amber-700);background:var(--amber-50)}.fchip{font-size:12.5px;font-weight:700;color:var(--n500);background:var(--n0);border:1px solid var(--n200);padding:6px 14px;border-radius:var(--r-pill);cursor:pointer;transition:all .15s ease-out;-webkit-user-select:none;user-select:none}.fchip:hover{border-color:var(--n300);color:var(--n800)}.fchip.on{color:var(--teal-700);background:var(--teal-50);border-color:var(--teal-100)}.panel{background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);box-shadow:var(--e1)}.track{height:8px;background:var(--n100);border-radius:99px;overflow:hidden}.fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--teal-500),var(--indigo-500));transition:width .8s cubic-bezier(.2,.7,.3,1)}.fill.risk{background:linear-gradient(90deg,var(--amber-500),var(--red-500))}.avatar-sm{width:22px;height:22px;border-radius:50%;background:var(--indigo-50);color:var(--indigo-600);display:inline-flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:700;flex:none}.check{width:16px;height:16px;border-radius:6px;border:1.5px solid var(--n300);background:var(--n0);flex:none;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:10px;cursor:pointer;transition:all .15s}.check.yes{background:var(--green-500);border-color:var(--green-500)}.check.tgl{transition:all .15s}.check.tgl:not(.yes):hover{border-color:var(--teal-600);box-shadow:0 0 0 3px var(--teal-100)}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:22px}.stat{background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);padding:16px 18px;display:flex;align-items:center;gap:14px;box-shadow:var(--e1)}.stat .ic{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex:none}.stat .ic svg{width:19px;height:19px}.ic-teal{background:var(--teal-50);color:var(--teal-700)}.ic-indigo{background:var(--indigo-50);color:var(--indigo-600)}.ic-red{background:var(--red-50);color:var(--red-700)}.ic-green{background:var(--green-50);color:var(--green-500)}.stat b{font-size:23px;font-weight:700;line-height:1.2}.stat .lbl{font-size:12px;color:var(--n500)}.stat .delta{margin-left:auto;font-size:11px;font-weight:700;color:var(--green-500)}.stat .delta.bad{color:var(--red-700)}.stat.alert{border-color:#de61598c;background:linear-gradient(0deg,#fbebeab3,#fbebeab3),var(--n0);box-shadow:0 0 0 1px #de61591f,var(--e1)}.stat.alert .num{color:var(--red-700)}.stat.alert .delta.bad{background:var(--red-50);border-radius:99px;padding:2px 8px}.overdue-badge{display:inline-flex;align-items:center;gap:5px;margin-left:10px;font-size:12px;font-weight:700;color:var(--red-700);background:var(--red-50);border:1px solid rgba(222,97,89,.35);border-radius:99px;padding:2px 10px;vertical-align:middle}.board-head{display:flex;align-items:center;gap:14px;margin-top:26px;flex-wrap:wrap}.board-head h3{font-size:16.5px;font-weight:700}.board-head .sub{font-size:12px;color:var(--n500)}.filter-chips{display:flex;gap:8px;flex-wrap:wrap}.kanban{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:14px;align-items:start}.kanban-3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px;align-items:start}.col{background:#ffffffa6;border:1px solid var(--n200);border-radius:var(--r-md);padding:13px}.col-head{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;padding:2px 4px 11px}.col-head i{width:8px;height:8px;border-radius:50%}.dot-todo{background:var(--n400)}.dot-doing{background:var(--indigo-500)}.dot-done{background:var(--green-500)}.dot-feedback{background:var(--sky-600)}.col-head .n{margin-left:auto;font-size:11px;color:var(--n500);background:var(--n0);border:1px solid var(--n200);border-radius:99px;padding:0 8px}.cards{display:grid;gap:10px}.task{display:block;background:var(--n0);border:1px solid var(--n200);border-radius:10px;padding:12px 13px;box-shadow:var(--e1);cursor:pointer;transition:transform .15s ease-out,box-shadow .15s ease-out,border-color .15s}.task:hover{transform:translateY(-2px);box-shadow:var(--e2);border-color:var(--n300)}.task.overdue{border-color:#de61598c;background:linear-gradient(0deg,#fbebea8c,#fbebea8c),var(--n0)}.task .tags{display:flex;align-items:center;gap:7px}.task .tags .pill{font-size:11px;padding:2px 9px}.task h4{font-size:13.5px;font-weight:700;margin-top:8px;line-height:1.45}.task .proj-line{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--n500);margin-top:4px}.task .proj-line i{width:6px;height:6px;border-radius:2px;flex:none}.task .foot{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:9px;border-top:1px dashed var(--n200);font-size:11.5px;color:var(--n500)}.task .foot .due.late{color:var(--red-700);font-weight:700}.task .foot .who{margin-left:auto}.task.done-card{opacity:.6}.task.done-card h4{text-decoration:line-through;text-decoration-color:var(--n400)}.add-card{border:1.5px dashed var(--n300);border-radius:10px;padding:10px;text-align:center;font-size:12.5px;color:var(--n400);cursor:pointer;transition:all .15s}.add-card:hover{color:var(--teal-700);border-color:var(--teal-500);background:var(--teal-50)}.prog-panel{margin-top:24px;background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);box-shadow:var(--e1);overflow:hidden}.prog-head{display:flex;align-items:center;gap:14px;padding:16px 20px 12px}.prog-head h3{font-size:16.5px}.prog-head .sub{font-size:12px;color:var(--n500)}.prog-row{display:grid;grid-template-columns:170px 1.3fr 1.5fr 84px 90px;align-items:center;gap:14px;padding:12px 20px;border-top:1px solid var(--n200);cursor:pointer;transition:background .15s}.prog-row:hover{background:var(--n50)}.pr-client{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:700}.client-avatar{width:22px;height:22px;border-radius:7px;flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#fff}.pr-proj{font-size:13.5px;font-weight:700}.pr-proj small{display:block;font-size:11.5px;color:var(--n500);font-weight:400;margin-top:1px}.pr-bar{display:flex;align-items:center;gap:11px}.pr-bar .track{flex:1}.pr-bar .pct{font-size:13px;font-weight:700;width:38px;text-align:right}.pr-tasks{font-size:12.5px;color:var(--n500)}.pr-date{font-size:12px;color:var(--n400)}.client-group{margin-top:22px}.cg-head{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.cg-head .client-avatar{width:28px;height:28px;border-radius:9px;font-size:12.5px}.cg-head h3{font-size:15.5px}.cg-head .meta{font-size:12px;color:var(--n500)}.cg-head .overall{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:12px;color:var(--n500)}.cg-head .overall .track{width:110px;height:7px}.cg-head .overall b{font-size:13px;color:var(--n800)}.sc-plus{width:16px;height:16px;padding:0;border-radius:50%;border:1px dashed var(--n300);background:transparent;color:var(--n400);font-size:12px;line-height:1;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:none;opacity:0;transition:all .15s ease}.sc-head:hover .sc-plus{opacity:1}.sc-plus:hover{border-style:solid;border-color:var(--teal-600);color:var(--teal-700)}.sc-head .chev{margin-left:auto}.lock-line{font-size:13px;color:var(--n700);padding:8px 12px;background:var(--n50);border:1px solid var(--n200);border-radius:9px}.proj-cards{display:grid;grid-template-columns:1fr 1fr;gap:14px}.pcard{display:block;background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);padding:18px 20px;box-shadow:var(--e1);cursor:pointer;transition:transform .15s ease-out,box-shadow .15s ease-out,border-color .15s}.pcard:hover{transform:translateY(-3px);box-shadow:var(--e2);border-color:var(--n300)}.pcard.risk{border-color:#de615966}.pcard .ph{display:flex;align-items:center;gap:10px}.pcard .ph b{font-size:15px}.pcard .ph .pill{margin-left:auto}.pcard .stage{font-size:12px;color:var(--n500);margin-top:6px}.pcard .bar{display:flex;align-items:center;gap:11px;margin-top:14px}.pcard .bar .track{flex:1}.pcard .bar b{font-size:14px}.pcard .meta{display:flex;align-items:center;gap:16px;margin-top:12px;padding-top:12px;border-top:1px dashed var(--n200);font-size:11.5px;color:var(--n500);flex-wrap:wrap}.pcard .meta .ms b{color:var(--n700);font-weight:700}.pcard .meta .team{margin-left:auto;display:flex}.pcard .meta .team .avatar-sm{border:2px solid var(--n0);margin-left:-6px}.back-link{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--n500);margin-bottom:14px}.back-link:hover{color:var(--teal-700)}.back-link svg{width:14px;height:14px}.detail-hero{background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-lg);box-shadow:var(--e1);padding:22px 24px}.dh-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.dh-top h2{font-size:21px}.dh-top .acts{margin-left:auto;display:flex;gap:10px}.dh-meta{display:flex;align-items:center;gap:18px;margin-top:8px;font-size:12.5px;color:var(--n500);flex-wrap:wrap}.dh-stats{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:18px;margin-top:18px;padding-top:18px;border-top:1px dashed var(--n200)}.dh-stat .k{font-size:11.5px;color:var(--n500);margin-bottom:6px}.dh-stat .v{font-size:19px;font-weight:700}.dh-stat .v small{font-size:12px;color:var(--n400);font-weight:400}.dh-stat .bar{display:flex;align-items:center;gap:11px}.dh-stat .bar .track{flex:1}.dh-stat .team{display:flex}.dh-stat .team .avatar-sm{border:2px solid var(--n0);margin-left:-6px;width:26px;height:26px;font-size:11.5px}.risk-note{margin-top:14px;display:flex;gap:9px;align-items:flex-start;font-size:12.5px;color:var(--red-700);background:var(--red-50);border:1px solid rgba(222,97,89,.25);border-radius:10px;padding:10px 13px}.risk-note svg{width:15px;height:15px;flex:none;margin-top:2px}.tabs{display:flex;gap:4px;margin-top:22px;border-bottom:1px solid var(--n200)}.tab{font-size:13.5px;font-weight:700;color:var(--n500);padding:9px 16px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s;-webkit-user-select:none;user-select:none}.tab:hover{color:var(--n800)}.tab.on{color:var(--teal-700);border-bottom-color:var(--teal-600)}.tab-pane{display:none;padding-top:16px}.tab-pane.show{display:block;animation:rise .35s both}.tl{position:relative;padding-left:22px;display:grid;gap:18px;margin-top:6px}.tl:before{content:"";position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:var(--n200)}.tl-item{position:relative}.tl-item:before{content:"";position:absolute;left:-19px;top:5px;width:10px;height:10px;border-radius:50%;background:var(--n0);border:2.5px solid var(--n300)}.tl-item.done:before{background:var(--green-500);border-color:var(--green-500)}.tl-item.now:before{background:var(--teal-500);border-color:var(--teal-600);box-shadow:0 0 0 4px var(--teal-50)}.tl-item b{font-size:13.5px}.tl-item .d{font-size:11.5px;color:var(--n400);margin-left:8px}.tl-item p{font-size:12px;color:var(--n500);margin-top:2px}.tl-item .pill{margin-left:8px}.feed{display:grid;gap:0}.feed-item{display:flex;gap:12px;padding:12px 0;border-bottom:1px dashed var(--n200);font-size:13px}.feed-item:last-child{border-bottom:none}.feed-item .txt{flex:1}.feed-item .txt b{font-weight:700}.feed-item .time{font-size:11.5px;color:var(--n400);flex:none}.toolbar{display:flex;align-items:center;gap:10px;margin-top:20px;flex-wrap:wrap}.sel{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:700;color:var(--n700);background:var(--n0);border:1px solid var(--n300);border-radius:10px;padding:7px 13px;cursor:pointer;transition:border-color .15s}.sel:hover{border-color:var(--n400)}.sel span{color:var(--n400);font-weight:400;font-size:11px}select.sel{appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-right:30px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23808A9B' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;background-size:12px;outline:none}select.sel:focus{border-color:var(--teal-600);box-shadow:0 0 0 3px var(--teal-100)}.table-panel{margin-top:14px;background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);box-shadow:var(--e1);overflow:hidden}table.tasks{width:100%;border-collapse:collapse}.tasks th{font-size:11px;letter-spacing:.1em;color:var(--n400);font-weight:700;text-align:left;padding:11px 16px;border-bottom:1px solid var(--n200);background:var(--n50)}.tasks td{font-size:13px;padding:12px 16px;border-bottom:1px solid var(--n200);vertical-align:middle}.tasks tbody tr{cursor:pointer;transition:background .12s}.tasks tbody tr:hover{background:var(--n50)}.tasks tbody tr:last-child td{border-bottom:none}.tasks tr.overdue td{background:#fbebea59}.tasks tr.overdue:hover td{background:#fbebea8c}.tasks tr.done td{color:var(--n400)}.tasks tr.done .tt{text-decoration:line-through}.tasks .tt{font-weight:700;display:block}.tasks .cchip{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--n700)}.tasks .cchip i{width:8px;height:8px;border-radius:50%;flex:none}.tasks .pn{font-size:12.5px;color:var(--n500)}.tasks .tp{font-size:11.5px;color:var(--n400);font-weight:400}.due-late{color:var(--red-700);font-weight:700}.table-foot{display:flex;align-items:center;padding:11px 16px;font-size:12px;color:var(--n500)}.table-foot .pages{margin-left:auto;display:flex;gap:6px}.table-foot .pages i{font-style:normal;width:26px;height:26px;border-radius:8px;border:1px solid var(--n200);background:var(--n0);display:flex;align-items:center;justify-content:center;font-size:11.5px;cursor:pointer}.table-foot .pages i.on{background:var(--teal-700);color:#fff;border-color:var(--teal-700)}.cal-wrap{display:flex;gap:16px;margin-top:20px;align-items:flex-start}.cal{flex:1;background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);box-shadow:var(--e1);overflow:hidden}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr)}.cal-grid .dow{font-size:11px;font-weight:700;letter-spacing:.08em;color:var(--n400);text-align:center;padding:10px 0;border-bottom:1px solid var(--n200);background:var(--n50)}.cell{min-height:88px;border-bottom:1px solid var(--n100);border-right:1px solid var(--n100);padding:6px 7px;font-size:11.5px}.cell:nth-child(7n+7){border-right:none}.cell .d{font-weight:700;color:var(--n600);display:inline-flex;width:22px;height:22px;align-items:center;justify-content:center;border-radius:7px}.cell.dim{background:var(--n50)}.cell.dim .d{color:var(--n300);font-weight:400}.cell.today{background:var(--teal-50)}.cell.today .d{background:var(--teal-700);color:#fff}.chip{display:block;font-size:10.5px;font-weight:700;border-radius:6px;padding:2px 7px;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;transition:filter .15s}.chip:hover{filter:brightness(.96)}.chip.more{color:var(--n400);background:var(--n100)}.agenda{width:250px;flex:none;background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);box-shadow:var(--e1);padding:18px}.agenda h4{font-size:14px}.agenda .sub{font-size:11.5px;color:var(--n500);margin:2px 0 6px}.ag-item{display:flex;gap:10px;padding:10px 0;border-top:1px dashed var(--n200);font-size:12.5px;cursor:pointer}.ag-item:hover b{color:var(--teal-700)}.ag-item .t{font-weight:700;color:var(--teal-700);font-family:InstrumentSans,monospace;flex:none;width:44px}.ag-item b{display:block;font-size:12.5px}.ag-item span{font-size:11px;color:var(--n500)}.set-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:20px}.set-panel{background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);box-shadow:var(--e1);padding:22px}.set-panel h3{font-size:15px;margin-bottom:4px}.set-panel .sub{font-size:12px;color:var(--n500);margin-bottom:16px}.profile-row{display:flex;align-items:center;gap:14px;margin-bottom:16px}.profile-row .avatar{width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,var(--indigo-500),var(--teal-500));color:#fff;display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:700}.field{display:grid;gap:6px;margin-bottom:12px}.field label{font-size:12.5px;font-weight:700}.input{display:flex;align-items:center;height:38px;padding:0 13px;border-radius:10px;background:var(--n0);border:1.5px solid var(--n300);transition:border-color .15s,box-shadow .15s}.input:focus-within,.input:focus{border-color:var(--teal-600);box-shadow:0 0 0 3px var(--teal-100);outline:none}.input input{border:none;outline:none;background:transparent;font:inherit;color:var(--n800);width:100%}.field.is-err .input{border-color:var(--red-500)}.err-msg{display:none;font-size:11.5px;color:var(--red-700)}.field.is-err .err-msg{display:block}.cl-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px dashed var(--n200);font-size:13px}.cl-row:last-of-type{border-bottom:none}.cl-row .dot{width:12px;height:12px;border-radius:4px}.cl-row .pc{font-size:11.5px;color:var(--n400);margin-left:2px}.cl-row .edit{margin-left:auto;font-size:12px;font-weight:700;color:var(--teal-700);cursor:pointer}.cl-row .edit:hover{text-decoration:underline}.cl-row .row-acts{margin-left:auto;display:flex;align-items:center;gap:14px}.cl-row .row-acts .edit{margin-left:0}.cl-row .edit.del{color:var(--red-700)}.cl-row .del-tip{margin-left:auto;font-size:12px;color:var(--red-700)}.btn-del{color:#fff;background:var(--red-700);border:1px solid var(--red-700)}.btn-del:hover{background:var(--red-500);border-color:var(--red-500)}.sw-row-line{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px dashed var(--n200);font-size:13px}.sw-row-line:last-of-type{border-bottom:none}.sw-row-line small{display:block;font-size:11px;color:var(--n400)}.switch{margin-left:auto;width:38px;height:22px;border-radius:99px;background:var(--n300);position:relative;flex:none;cursor:pointer;transition:background .2s}.switch:after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003;transition:left .2s}.switch.on{background:var(--teal-700)}.switch.on:after{left:19px}.seg{display:inline-flex;background:var(--n100);border-radius:10px;padding:3px;gap:2px}.seg i{font-style:normal;font-size:12px;font-weight:700;color:var(--n500);padding:5px 14px;border-radius:8px;cursor:pointer;transition:all .15s}.seg i.on{background:var(--n0);color:var(--n800);box-shadow:var(--e1)}.skeleton{border-radius:8px;background:linear-gradient(90deg,var(--n100) 25%,var(--n50) 50%,var(--n100) 75%);background-size:200% 100%;animation:shimmer 1.2s infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.empty{text-align:center;padding:48px 20px;color:var(--n400)}.empty svg{width:40px;height:40px;margin-bottom:12px;color:var(--n300)}.empty b{display:block;font-size:14px;color:var(--n600);margin-bottom:4px}.empty p{font-size:12.5px}#toast{position:fixed;top:22px;left:50%;transform:translate(-50%) translateY(-16px);z-index:99;background:var(--n900);color:#fff;font-size:13px;font-weight:700;padding:10px 20px;border-radius:11px;box-shadow:var(--e2);opacity:0;pointer-events:none;transition:all .3s cubic-bezier(.2,.7,.3,1)}#toast.show{opacity:1;transform:translate(-50%) translateY(0)}.auth{display:flex;min-height:100vh}.auth-side{width:44%;flex:none;position:relative;overflow:hidden;color:#fff;background:linear-gradient(160deg,#0c8b8a,#0f766e 42%,#1e2a78 130%);display:flex;flex-direction:column;padding:46px 52px}.auth-side:before{content:"";position:absolute;width:480px;height:480px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.14),transparent 65%);top:-140px;right:-120px}.auth-side:after{content:"";position:absolute;width:380px;height:380px;border-radius:50%;background:radial-gradient(circle,rgba(99,102,241,.35),transparent 65%);bottom:-120px;left:-100px}.auth-side .logo{position:relative;z-index:1;padding:0}.auth-side .logo b{color:#fff}.auth-side .logo span{color:#ffffffa6}.auth-hero{position:relative;z-index:1;margin:auto 0}.auth-hero h1{font-size:36px;line-height:1.35;font-weight:700}.auth-hero p{margin-top:14px;font-size:14px;color:#ffffffbf;max-width:340px}.auth-points{margin-top:30px;display:grid;gap:12px}.auth-points span{display:flex;align-items:center;gap:10px;font-size:13px;color:#ffffffd9}.auth-points svg{width:16px;height:16px;flex:none}.auth-main{flex:1;display:flex;align-items:center;justify-content:center;padding:40px}.auth-box{width:100%;max-width:380px}.auth-box h2{font-size:24px;font-weight:700}.auth-box .sub{font-size:13px;color:var(--n500);margin:6px 0 26px}.auth-box .sub b{color:var(--teal-700);font-weight:700}.auth-row{display:flex;align-items:center;font-size:12.5px;color:var(--n500);margin:2px 0 20px}.auth-row .link{margin-left:auto;color:var(--teal-700);font-weight:700;cursor:pointer}.auth-row .link:hover{text-decoration:underline}.remember{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.auth-btn{width:100%;height:44px;font-size:14.5px;border-radius:12px}.auth-foot{margin-top:26px;text-align:center;font-size:12.5px;color:var(--n500)}.auth-foot b{color:var(--teal-700);cursor:pointer}.prog-strip-head{display:flex;align-items:center;gap:12px;margin-top:26px}.prog-strip-head h3{font-size:16.5px;font-weight:700}.prog-strip-head .sub{font-size:12px;color:var(--n500)}.prog-strip-head .more{margin-left:auto;display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:700;color:var(--teal-700)}.prog-strip-head .more:hover{text-decoration:underline}.prog-strip{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-top:12px}.prog-mini{display:block;background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);padding:12px 14px;box-shadow:var(--e1);transition:transform .15s ease-out,box-shadow .15s ease-out,border-color .15s}.prog-mini:hover{transform:translateY(-2px);box-shadow:var(--e2);border-color:var(--n300)}.prog-mini.risk{border-color:#de615959}.prog-mini .c{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--n500)}.prog-mini .c i{width:6px;height:6px;border-radius:2px;flex:none}.prog-mini .t{font-size:13px;font-weight:700;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.prog-mini .track{height:6px;margin-top:9px}.prog-mini .p{display:flex;align-items:center;margin-top:6px;font-size:12px;font-weight:700}.prog-mini .p .flag{margin-left:auto;font-size:10.5px;font-weight:700;color:var(--red-700)}.td-head{background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-lg);box-shadow:var(--e1);padding:20px 24px}.td-head .h1{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.td-head .h1 h2{font-size:20px;font-weight:700}.td-head .crumb{font-size:12px;color:var(--n500);margin-bottom:6px;display:flex;align-items:center;gap:7px}.td-head .crumb b{color:var(--teal-700)}.td-layout{display:grid;grid-template-columns:1fr 316px;gap:16px;margin-top:16px;align-items:start}.td-col{display:grid;gap:16px}.blk{background:var(--n0);border:1px solid var(--n200);border-radius:var(--r-md);box-shadow:var(--e1);padding:18px 20px}.blk h3{font-size:14px;margin-bottom:10px;display:flex;align-items:center;gap:8px}.blk h3 .n{margin-left:auto;font-size:11px;font-weight:700;color:var(--n500);background:var(--n100);border-radius:99px;padding:1px 8px}.blk p.desc{font-size:13px;color:var(--n600);line-height:1.8}.prop-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px dashed var(--n200);font-size:12.5px}.prop-row:last-child{border-bottom:none}.prop-row .k{color:var(--n500);width:62px;flex:none}.prop-row .v{font-weight:700}.prop-row .v a{color:var(--teal-700)}.prop-row .v a:hover{text-decoration:underline}.sub-item{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--n200);font-size:12.5px}.sub-item:last-child{border-bottom:none}.sub-item.done{color:var(--n400)}.sub-item.done .st{text-decoration:line-through}.sub-item .st{flex:1;min-width:0}.sub-del{width:18px;height:18px;padding:0;border:none;background:transparent;color:var(--n400);font-size:12px;line-height:1;border-radius:50%;cursor:pointer;flex:none;opacity:0;transition:all .15s ease}.sub-item:hover .sub-del{opacity:1}.sub-del:hover{color:var(--red-500);background:var(--red-50, rgba(229,72,77,.08))}.sub-status{height:22px;padding:0 20px 0 9px;flex:none;border-radius:99px;border:1px solid transparent;font:inherit;font-size:10.5px;font-weight:700;color:var(--n500);background-color:var(--n100);-moz-appearance:none;appearance:none;-webkit-appearance:none;cursor:pointer;outline:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23929DB0' stroke-width='2.4'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 7px center;background-size:8px;transition:background-color .15s,color .15s}.sub-status:hover{filter:brightness(.97)}.sub-status.ss-doing{background-color:var(--indigo-50);color:var(--indigo-600)}.sub-status.ss-feedback{background-color:var(--amber-50);color:var(--amber-700)}.sub-status.ss-done{background-color:var(--green-50);color:var(--green-700)}.attach-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px dashed var(--n200);font-size:12.5px}.attach-row:last-child{border-bottom:none}.attach-row svg{width:15px;height:15px;color:var(--n400);flex:none}.attach-row .sz{margin-left:auto;font-size:11.5px;color:var(--n400)}.cm-item{display:flex;gap:10px;padding:11px 0;border-bottom:1px dashed var(--n200);font-size:12.5px}.cm-item:last-child{border-bottom:none}.cm-item .body{flex:1}.cm-item .body b{font-size:12.5px}.cm-item .body time{font-size:11px;color:var(--n400);margin-left:8px}.cm-item .body p{color:var(--n600);margin-top:2px;line-height:1.7}.cm-input{display:flex;gap:8px;margin-top:12px}.cm-input .input{flex:1}.td-actions{display:grid;gap:8px}.td-actions .btn{width:100%}.btn-danger-ghost{color:var(--red-700);background:transparent}.btn-danger-ghost:hover{background:var(--red-50)}.td-foot-note{font-size:11px;color:var(--n400);text-align:center;margin-top:4px}.sub-badge{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:700;color:var(--n500);background:var(--n100);border-radius:99px;padding:1px 8px;flex:none}.cal-filter{margin-top:16px;display:flex;gap:8px;flex-wrap:wrap}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#161d2952;opacity:0;pointer-events:none;transition:opacity .2s;z-index:40}.drawer-mask.show{opacity:1;pointer-events:auto}.drawer{position:fixed;top:0;right:0;bottom:0;width:480px;max-width:92vw;background:var(--n50);z-index:50;transform:translate(102%);transition:transform .28s cubic-bezier(.2,.7,.3,1);box-shadow:var(--e2);display:flex;flex-direction:column}.drawer.show{transform:none}.drawer-hd{display:flex;align-items:center;gap:10px;padding:15px 20px;border-bottom:1px solid var(--n200);background:var(--n0);flex-wrap:wrap}.drawer-hd .crumb{font-size:11.5px;color:var(--n500);display:flex;align-items:center;gap:6px}.drawer-hd .close{margin-left:auto;width:30px;height:30px;border-radius:9px;border:none;background:transparent;color:var(--n400);font-size:15px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s}.drawer-hd .close:hover{background:var(--n100);color:var(--n800)}.drawer-bd{flex:1;overflow-y:auto;padding:16px 20px 20px;display:grid;gap:14px;align-content:start}.drawer-bd .blk{box-shadow:none}.drawer-bd h2{font-size:17px;font-weight:700;line-height:1.5}.drawer-bd .meta-line{display:flex;align-items:center;gap:14px;font-size:12px;color:var(--n500);flex-wrap:wrap}.drawer-ft{padding:12px 20px;border-top:1px solid var(--n200);background:var(--n0);display:flex;gap:10px;align-items:center}.drawer-ft .sub{font-size:11px;color:var(--n400)}.status-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.st-btn{font-size:12px;font-weight:700;color:var(--n600);background:var(--n0);border:1px solid var(--n300);border-radius:99px;padding:5px 12px;cursor:pointer;transition:all .15s}.st-btn:hover{border-color:var(--n400);color:var(--n800)}.st-btn.on{color:#fff;border-color:var(--teal-600);background:var(--teal-600)}.st-btn.is-cur:not(.on){border-style:dashed;color:var(--n500)}.st-btn:disabled{opacity:.6;cursor:not-allowed}.status-commit{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}.hint{font-size:11.5px;color:var(--n400);margin-top:8px}.cm-form,.sub-add{display:flex;gap:8px;margin-top:10px}.sub-add input{flex:1;min-width:0;height:34px;padding:0 12px;border-radius:10px;border:1.5px dashed var(--n300);background:var(--n0);font:inherit;font-size:12.5px;color:var(--n800);outline:none;transition:border-color .15s,box-shadow .15s}.sub-add input:focus{border-color:var(--teal-600);border-style:solid;box-shadow:0 0 0 3px var(--teal-100)}.sub-add .btn{height:34px;padding:0 12px;flex:none}.cm-form input{flex:1;min-width:0;height:36px;padding:0 12px;border-radius:10px;border:1.5px solid var(--n300);background:var(--n0);font:inherit;font-size:12.5px;color:var(--n800);outline:none;transition:border-color .15s,box-shadow .15s}.cm-form input:focus{border-color:var(--teal-600);box-shadow:0 0 0 3px var(--teal-100)}.cm-form .btn{height:36px;padding:0 14px;flex:none}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#161d2952;z-index:60;display:flex;align-items:center;justify-content:center;animation:rise .18s both}.modal{width:520px;max-width:92vw;max-height:88vh;overflow-y:auto;background:var(--n0);border-radius:var(--r-lg);box-shadow:var(--e2);padding:22px 24px}.modal-hd{display:flex;align-items:center;margin-bottom:16px}.modal-hd h3{font-size:16.5px}.modal-hd .close{margin-left:auto;width:30px;height:30px;border-radius:9px;border:none;background:transparent;color:var(--n400);font-size:15px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s}.modal-hd .close:hover{background:var(--n100);color:var(--n800)}.modal .field textarea{border:1.5px solid var(--n300);border-radius:10px;padding:9px 13px;font:inherit;color:var(--n800);background:var(--n0);width:100%;min-height:84px;resize:vertical;outline:none;transition:border-color .15s,box-shadow .15s}.modal .field textarea:focus{border-color:var(--teal-600);box-shadow:0 0 0 3px var(--teal-100)}.modal .field select{height:38px;padding:0 13px;border-radius:10px;background:var(--n0);border:1.5px solid var(--n300);font:inherit;color:var(--n800);width:100%;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.modal .field select:focus{border-color:var(--teal-600);box-shadow:0 0 0 3px var(--teal-100)}.modal-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.modal-ft{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.fb-check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--n600);cursor:pointer;-webkit-user-select:none;user-select:none}@media (max-width:1100px){.stats{grid-template-columns:1fr 1fr}.kanban,.proj-cards,.set-grid{grid-template-columns:1fr}.dh-stats{grid-template-columns:1fr 1fr}.cal-wrap{flex-direction:column}.agenda{width:100%}.auth-side{display:none}.prog-row{grid-template-columns:1fr 1fr;row-gap:8px}}
