:root{--bg:#F6F7FA;--surface:#FFFFFF;--surface-2:#F1F3F9;--ink:#1E2238;--ink-soft:#6B7280;--ink-faint:#9AA0AE;--line:#E8EAF2;--primary:#4F6FE8;--primary-press:#4056C4;--primary-soft:#EAEEFC;--todo:#9AA0AE;--learn:#F2B600;--doing:#4285F4;--done:#2DA44E;--danger:#E5484D;--sidebar-bg:#1A1F3C;--sidebar-active:#2E3566;--sidebar-active-icon:#8094FF;--shadow:0 1px 2px rgba(20,25,40,.05), 0 2px 8px rgba(20,25,40,.05);--shadow-card:0 1px 1px rgba(20,25,40,.04), 0 1px 3px rgba(20,25,40,.07);--shadow-lift:0 12px 30px rgba(28,33,55,.22);--r:14px;--r-sm:10px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:Poppins,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink);background:radial-gradient(1200px 500px at 12% -8%,#ECEFFD 0%,transparent 60%),radial-gradient(1000px 460px at 105% 0%,#E9F0FB 0%,transparent 55%),var(--bg);-webkit-font-smoothing:antialiased}#root{display:flex;flex-direction:column;overflow:hidden}header{flex:0 0 auto;background:#ffffffb8;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);padding:14px clamp(14px,3.5vw,32px) 13px}.head-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.brand{width:42px;height:42px;border-radius:12px;background:linear-gradient(150deg,#6a86f0,#4f6fe8 55%,#4056c4);display:grid;place-items:center;box-shadow:0 6px 16px #4f6fe859;flex:0 0 auto}.brand svg{width:22px;height:22px}.title-wrap{flex:1 1 auto;min-width:0}h1{font-family:Poppins,-apple-system,Segoe UI,Roboto,sans-serif;font-weight:700;font-size:clamp(20px,3.4vw,27px);line-height:1.12;margin:0;letter-spacing:-.01em;cursor:text}.title-edit{font-family:Poppins,-apple-system,Segoe UI,Roboto,sans-serif;font-weight:700;font-size:clamp(20px,3.4vw,27px);line-height:1.12;border:none;border-bottom:2px solid var(--primary);background:transparent;outline:none;color:var(--ink);padding:0 0 2px;width:100%;max-width:360px;letter-spacing:-.01em}.subtitle{margin:2px 0 0;font-size:13.5px;color:var(--ink-soft);font-weight:500}.progress-box{flex:0 0 auto;display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);padding:8px 12px;box-shadow:var(--shadow)}.progress-meta{display:flex;flex-direction:column;gap:4px;min-width:128px}.progress-label{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;font-weight:600;color:var(--ink-soft)}.progress-pct{font-size:13px;font-weight:700;color:var(--done);font-variant-numeric:tabular-nums}.bar{height:7px;border-radius:99px;background:var(--line);overflow:hidden}.bar-fill{height:100%;width:0;border-radius:99px;background:linear-gradient(90deg,#2da44e,#46be6b);transition:width .35s cubic-bezier(.4,0,.2,1)}.btn-reset{border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);font-family:inherit;font-weight:600;font-size:13px;padding:8px 12px;border-radius:var(--r-sm);cursor:pointer;display:flex;align-items:center;gap:6px;transition:background .15s,color .15s,border-color .15s}.btn-reset:hover{background:var(--surface-2);color:var(--ink);border-color:#d4d9e6}.btn-reset svg{width:15px;height:15px}.search-row{margin-top:12px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.search{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:8px 11px;flex:1 1 320px;max-width:440px;box-shadow:var(--shadow)}.search:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px #4f6fe82e}.search svg{width:16px;height:16px;color:var(--ink-faint);flex:0 0 auto}.search input{flex:1 1 auto;border:none;outline:none;background:transparent;font-family:inherit;font-size:14px;color:var(--ink)}.search-clear{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:22px;height:22px;border-radius:6px;display:none;place-items:center;flex:0 0 auto}.search-clear.show{display:grid}.search-clear:hover{background:var(--surface-2);color:var(--ink)}.search-clear svg{width:13px;height:13px}.save-status{font-size:12px;color:var(--ink-faint);display:flex;align-items:center;gap:7px}.save-status .ok{width:7px;height:7px;border-radius:50%;background:var(--done);box-shadow:0 0 0 3px #2da44e29;flex:0 0 auto}.board-bar{display:flex;align-items:center;gap:8px;padding:8px clamp(14px,3.5vw,32px);background:#ffffff8c;border-bottom:1px solid var(--line);overflow-x:auto;flex:0 0 auto;scrollbar-width:thin}.board-bar::-webkit-scrollbar{height:0}.board-tab{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:9px;background:transparent;border:1px solid transparent;cursor:pointer;font-family:inherit;font-weight:600;font-size:13.5px;color:var(--ink-soft);white-space:nowrap;flex:0 0 auto;transition:background .15s,border-color .15s,color .15s}.board-tab:hover{background:var(--surface-2);color:var(--ink)}.board-tab.active{background:var(--surface);border-color:var(--line);color:var(--ink);box-shadow:var(--shadow)}.board-tab .bdot{width:9px;height:9px;border-radius:3px;background:var(--primary);flex:0 0 auto}.board-tab-x{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:18px;height:18px;border-radius:5px;display:none;place-items:center;flex:0 0 auto;margin-left:1px}.board-tab.active .board-tab-x{display:grid}.board-tab-x:hover{background:#fdecec;color:var(--danger)}.board-tab-x svg{width:12px;height:12px}.board-name-edit{border:none;border-bottom:2px solid var(--primary);background:transparent;outline:none;font-family:inherit;font-weight:600;font-size:13.5px;color:var(--ink);width:130px;padding:5px 2px}.board-new{display:inline-flex;align-items:center;gap:6px;padding:6px 11px;border-radius:9px;border:1px dashed #C3CADB;background:transparent;cursor:pointer;font-family:inherit;font-weight:600;font-size:13px;color:var(--ink-soft);white-space:nowrap;flex:0 0 auto;transition:border-color .15s,color .15s}.board-new:hover{border-color:var(--primary);color:var(--primary)}.board-new svg{width:15px;height:15px}.board{flex:1 1 auto;display:flex;gap:16px;align-items:flex-start;padding:18px clamp(14px,3.5vw,32px) 26px;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}.board::-webkit-scrollbar{height:10px}.board::-webkit-scrollbar-thumb{background:#ccd2e0;border-radius:99px;border:2px solid transparent;background-clip:content-box}.column{flex:0 0 312px;max-width:312px;max-height:100%;display:flex;flex-direction:column;background:#ffffff9e;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}.col-head{display:flex;align-items:center;gap:7px;padding:12px 12px 10px}.col-grip{border:none;background:none;cursor:grab;color:var(--ink-faint);width:22px;height:24px;display:grid;place-items:center;flex:0 0 auto;touch-action:none;border-radius:6px}.col-grip:hover{background:var(--surface-2);color:var(--ink-soft)}.col-grip svg{width:16px;height:16px}.stage-dot{width:11px;height:11px;border-radius:50%;flex:0 0 auto;box-shadow:0 0 0 4px #0000000a}.col-name{font-weight:700;font-size:15px;flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:text}.list-name-edit{flex:1 1 auto;min-width:0;font-family:inherit;font-weight:700;font-size:15px;border:none;border-bottom:2px solid var(--primary);background:transparent;outline:none;color:var(--ink);padding:0 0 2px}.count{font-size:12px;font-weight:700;color:var(--ink-soft);background:var(--surface-2);border:1px solid var(--line);min-width:24px;height:22px;padding:0 7px;border-radius:99px;display:grid;place-items:center;font-variant-numeric:tabular-nums}.col-del{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:26px;height:26px;border-radius:7px;display:grid;place-items:center;transition:background .15s,color .15s;flex:0 0 auto}.col-del:hover{background:#fdecec;color:var(--danger)}.col-del svg{width:15px;height:15px}.cards{flex:1 1 auto;overflow-y:auto;padding:2px 10px 6px;display:flex;flex-direction:column;gap:9px;scrollbar-width:thin;min-height:14px}.cards::-webkit-scrollbar{width:8px}.cards::-webkit-scrollbar-thumb{background:#d2d7e4;border-radius:99px;border:2px solid transparent;background-clip:content-box}.card{background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--accent,#CBD2E0);border-radius:var(--r-sm);padding:10px 12px 11px;font-size:14px;line-height:1.4;color:var(--ink);box-shadow:var(--shadow-card);cursor:grab;position:relative;user-select:none;-webkit-user-select:none;transition:box-shadow .15s,transform .12s,border-color .15s;word-break:break-word}@media (hover:hover){.card:hover{box-shadow:0 2px 4px #1419280f,0 4px 12px #1419281a}}.card-labels{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:7px}.label-chip{font-size:10.5px;font-weight:700;color:#fff;padding:2px 8px;border-radius:6px;letter-spacing:.02em;line-height:1.45}.card-meta{display:flex;align-items:center;gap:6px;margin-top:9px;flex-wrap:wrap}.badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:3px 7px;border-radius:7px;background:var(--surface-2);color:var(--ink-soft);border:1px solid var(--line);font-variant-numeric:tabular-nums}.badge svg{width:12px;height:12px}.badge.due-over{background:#fdecec;color:var(--danger);border-color:#f6c9d0}.badge.due-today{background:#fef6e6;color:#b7791f;border-color:#f6e0b0}.badge.cl-complete{background:#e7f8ee;color:#1a7f43;border-color:#bcead4}.card-avatars{display:flex;margin-left:auto;padding-left:6px}.avatar{border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:700;flex:0 0 auto}.card-avatars .avatar{width:23px;height:23px;font-size:9.5px;margin-left:-6px;border:2px solid #fff}.card-avatars .avatar:first-child{margin-left:0}.card-del{position:absolute;top:6px;right:6px;width:22px;height:22px;border:none;background:none;cursor:pointer;color:var(--ink-faint);border-radius:6px;display:grid;place-items:center;opacity:0;transition:opacity .15s,background .15s,color .15s}.card-del svg{width:13px;height:13px}@media (hover:hover){.card:hover .card-del{opacity:1}}@media (hover:none){.card-del{opacity:.5}}.card-del:hover{background:#fdecec;color:var(--danger)}.card-hidden{display:none!important}.drag-clone{position:fixed;z-index:9999;pointer-events:none;box-shadow:var(--shadow-lift);transform:rotate(2.5deg) scale(1.02);cursor:grabbing;opacity:.96;margin:0}body.is-dragging,body.is-dragging .card{cursor:grabbing}.placeholder{border:2px dashed #B9C0D4;background:#4f6fe80d;border-radius:var(--r-sm);min-height:42px}.col-clone{position:fixed;z-index:9999;pointer-events:none;box-shadow:var(--shadow-lift);transform:rotate(1.5deg);opacity:.96;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);max-height:78vh;overflow:hidden}.col-placeholder{border:2px dashed #B9C0D4;background:#4f6fe80f;border-radius:var(--r);min-height:150px;flex:0 0 auto}.col-hidden{display:none!important}.col-foot{padding:6px 10px 11px}.add-card-btn{width:100%;text-align:left;border:none;background:none;cursor:pointer;color:var(--ink-soft);font-family:inherit;font-weight:600;font-size:13.5px;padding:9px 10px;border-radius:var(--r-sm);display:flex;align-items:center;gap:7px;transition:background .15s,color .15s}.add-card-btn:hover{background:#4f6fe814;color:var(--primary)}.add-card-btn svg{width:16px;height:16px}.composer{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);padding:9px;box-shadow:var(--shadow-card)}.composer textarea{width:100%;border:none;outline:none;resize:none;font-family:inherit;font-size:14px;line-height:1.4;color:var(--ink);background:transparent;min-height:42px}.btn{font-family:inherit;font-weight:600;font-size:13.5px;border-radius:8px;padding:8px 14px;cursor:pointer;border:1px solid transparent;transition:background .15s,border-color .15s,color .15s,transform .08s}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-press)}.btn-ghost{background:transparent;color:var(--ink-soft);border-color:var(--line);padding:8px 12px}.btn-ghost:hover{background:var(--surface-2);color:var(--ink)}.btn-danger{background:#fff;color:var(--danger);border:1px solid #F3C7CE}.btn-danger:hover{background:#fdecec}.add-list{flex:0 0 280px;max-width:280px}.add-list-btn{width:100%;border:1.5px dashed #C3CADB;background:#fff6;color:var(--ink-soft);font-family:inherit;font-weight:600;font-size:14px;padding:13px;border-radius:var(--r);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;transition:background .15s,border-color .15s,color .15s}.add-list-btn:hover{background:#ffffffd9;border-color:var(--primary);color:var(--primary)}.add-list-btn svg{width:17px;height:17px}.add-list-form{background:#ffffffd9;border:1px solid var(--line);border-radius:var(--r);padding:11px;box-shadow:var(--shadow)}.add-list-form input{width:100%;border:1px solid var(--line);border-radius:8px;outline:none;font-family:inherit;font-size:14px;padding:9px 10px;color:var(--ink);background:var(--surface)}.add-list-form input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #4f6fe82e}.edit-actions{display:flex;gap:7px;margin-top:6px}button:focus-visible,textarea:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.empty-note{text-align:center;color:var(--ink-faint);font-size:12.5px;padding:14px 8px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#1419286b;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding:5vh 16px;overflow-y:auto}.modal{width:100%;max-width:560px;background:var(--surface);border-radius:16px;box-shadow:var(--shadow-lift);overflow:hidden;animation:pop .16s ease}@keyframes pop{0%{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}.modal-head{display:flex;gap:10px;align-items:flex-start;padding:16px 16px 13px;border-bottom:1px solid var(--line)}.modal-title{flex:1 1 auto;font-family:inherit;font-weight:700;font-size:17px;line-height:1.35;border:none;outline:none;resize:none;color:var(--ink);background:transparent;min-height:24px}.modal-close{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:30px;height:30px;border-radius:8px;display:grid;place-items:center;flex:0 0 auto}.modal-close:hover{background:var(--surface-2);color:var(--ink)}.modal-close svg{width:17px;height:17px}.modal-body{padding:4px 16px 8px;max-height:62vh;overflow-y:auto}.sec{padding:13px 0;border-bottom:1px solid var(--line)}.sec-label{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:10px;display:flex;align-items:center;gap:7px}.sec-label svg{width:14px;height:14px}.label-row{display:flex;align-items:center;gap:9px;padding:4px 0}.label-swatch{width:16px;height:16px;border-radius:5px;flex:0 0 auto}.label-name{flex:1 1 auto;min-width:0;border:1px solid transparent;border-radius:7px;background:var(--surface-2);padding:6px 9px;font-family:inherit;font-size:13.5px;color:var(--ink);outline:none}.label-name:focus{border-color:var(--primary);background:#fff}.label-check{width:26px;height:26px;border-radius:7px;border:1px solid var(--line);background:var(--surface);cursor:pointer;display:grid;place-items:center;color:transparent;flex:0 0 auto}.label-check.on{background:var(--primary);border-color:var(--primary);color:#fff}.label-check svg{width:14px;height:14px}.add-row{display:flex;gap:7px;margin-top:9px}.add-row input{flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:8px;padding:7px 9px;font-family:inherit;font-size:13.5px;outline:none;background:var(--surface);color:var(--ink)}.add-row input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #4f6fe82e}.due-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.due-row input[type=date]{border:1px solid var(--line);border-radius:8px;padding:7px 9px;font-family:inherit;font-size:13.5px;color:var(--ink);background:var(--surface)}.member-list{display:flex;flex-wrap:wrap;gap:8px}.member-chip{display:flex;align-items:center;gap:7px;padding:4px 11px 4px 4px;border:1px solid var(--line);border-radius:99px;background:var(--surface);cursor:pointer;font-size:13px;font-weight:600;color:var(--ink-soft)}.member-chip.on{border-color:var(--primary);background:var(--primary-soft);color:var(--ink)}.member-chip .avatar{width:24px;height:24px;font-size:10.5px}.cl-progress{height:6px;border-radius:99px;background:var(--line);overflow:hidden;margin-bottom:11px}.cl-fill{height:100%;background:linear-gradient(90deg,#2da44e,#46be6b);border-radius:99px;transition:width .25s}.cl-item{display:flex;align-items:center;gap:9px;padding:3px 0}.cl-check{width:22px;height:22px;border-radius:6px;border:1.5px solid var(--line);background:var(--surface);cursor:pointer;display:grid;place-items:center;color:transparent;flex:0 0 auto}.cl-check.on{background:var(--done);border-color:var(--done);color:#fff}.cl-check svg{width:13px;height:13px}.cl-text{flex:1 1 auto;min-width:0;border:1px solid transparent;border-radius:7px;padding:6px 8px;font-size:13.5px;background:transparent;color:var(--ink);outline:none}.cl-text:focus{border-color:var(--primary);background:var(--surface-2)}.cl-text.done{text-decoration:line-through;color:var(--ink-faint)}.cl-del{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:24px;height:24px;border-radius:6px;display:grid;place-items:center;flex:0 0 auto}.cl-del:hover{background:#fdecec;color:var(--danger)}.cl-del svg{width:13px;height:13px}.recur-select{border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-family:inherit;font-size:13.5px;color:var(--ink);background:var(--surface);width:100%;max-width:240px}.sec-hint{font-size:12.5px;color:var(--ink-faint);margin:9px 0 0;line-height:1.45}.modal-foot{padding:12px 16px;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:10px}.att-list{display:flex;flex-direction:column;gap:8px}.att-item{display:flex;align-items:center;gap:10px;padding:7px 9px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2)}.att-thumb{width:42px;height:42px;border-radius:7px;object-fit:cover;flex:0 0 auto;background:#fff;border:1px solid var(--line)}.att-icon{width:38px;height:38px;border-radius:7px;display:grid;place-items:center;background:#fff;border:1px solid var(--line);color:var(--ink-soft);flex:0 0 auto}.att-icon svg{width:17px;height:17px}.att-info{flex:1 1 auto;min-width:0}.att-name{font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;text-decoration:none}a.att-name:hover{color:var(--primary);text-decoration:underline}.att-sub{font-size:11.5px;color:var(--ink-faint)}.att-del{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:26px;height:26px;border-radius:6px;display:grid;place-items:center;flex:0 0 auto}.att-del:hover{background:#fdecec;color:var(--danger)}.att-del svg{width:14px;height:14px}.att-add{display:flex;flex-direction:column;gap:8px;margin-top:9px}.file-btn{display:inline-flex;align-items:center;gap:7px;border:1px dashed #C3CADB;background:var(--surface);color:var(--ink-soft);font-family:inherit;font-weight:600;font-size:13px;padding:8px 12px;border-radius:9px;cursor:pointer;width:max-content}.file-btn:hover{border-color:var(--primary);color:var(--primary)}.file-btn svg{width:15px;height:15px}.remark-list{display:flex;flex-direction:column;gap:11px;margin-bottom:4px}.remark{display:flex;gap:9px;align-items:flex-start}.remark .avatar{width:26px;height:26px;font-size:11px;flex:0 0 auto;margin-top:1px}.remark-body{flex:1 1 auto;min-width:0}.remark-head{display:flex;align-items:baseline;gap:8px;margin-bottom:2px}.remark-who{font-size:13px;font-weight:700;color:var(--ink)}.remark-time{font-size:11.5px;color:var(--ink-faint)}.remark-text{font-size:13.5px;color:var(--ink-soft);line-height:1.45;white-space:pre-wrap;word-break:break-word}.remark-del{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:24px;height:24px;border-radius:6px;display:grid;place-items:center;flex:0 0 auto}.remark-del:hover{background:#fdecec;color:var(--danger)}.remark-del svg{width:13px;height:13px}.remark-add{display:flex;gap:7px;margin-top:10px;align-items:flex-start}.remark-add textarea{flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:9px;padding:8px 10px;font-family:inherit;font-size:13.5px;color:var(--ink);background:var(--surface);outline:none;resize:none;min-height:38px;line-height:1.4}.remark-add textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #4f6fe82e}.sum-member{padding:14px 0;border-bottom:1px solid var(--line)}.sum-member:last-child{border-bottom:none}.sum-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.sum-head .avatar{width:32px;height:32px;font-size:12.5px}.sum-name{font-weight:700;font-size:15px;color:var(--ink)}.sum-count{margin-left:auto;font-size:12.5px;font-weight:700;color:var(--ink-soft)}.sum-pills{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:9px}.sum-pill{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:99px;background:var(--surface-2);border:1px solid var(--line);color:var(--ink-soft)}.sum-pill .pdot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}.sum-pill.overdue{background:#fdecec;border-color:#f6c9d0;color:var(--danger)}.sum-bar{height:6px;border-radius:99px;background:var(--line);overflow:hidden;margin-bottom:10px}.sum-bar-fill{height:100%;background:linear-gradient(90deg,#2da44e,#46be6b);border-radius:99px}.sum-tasks{display:flex;flex-direction:column;gap:5px}.sum-task{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;background:var(--surface-2);cursor:pointer;border:1px solid transparent}.sum-task:hover{border-color:var(--line);background:#fff}.sum-task .tdot{width:9px;height:9px;border-radius:50%;flex:0 0 auto}.sum-task-text{flex:1 1 auto;min-width:0;font-size:13px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sum-task-due{font-size:11px;font-weight:700;color:var(--ink-faint);flex:0 0 auto}.sum-task-due.over{color:var(--danger)}.sum-empty{font-size:12.5px;color:var(--ink-faint);padding:4px 0}.sum-section-label{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-faint);margin:2px 0 10px}.card-top{display:flex;align-items:flex-start;gap:8px}.card-check{width:18px;height:18px;border-radius:50%;border:1.5px solid var(--line);background:var(--surface);cursor:pointer;display:grid;place-items:center;color:transparent;flex:0 0 auto;margin-top:1px;opacity:0;transition:opacity .15s,background .15s,border-color .15s}@media (hover:hover){.card:hover .card-check{opacity:1}}@media (hover:none){.card-check{opacity:.55}}.card.complete .card-check{opacity:1;background:var(--done);border-color:var(--done);color:#fff}.card-check svg{width:11px;height:11px}.card.complete .card-text{text-decoration:line-through;color:var(--ink-faint)}.card-text{flex:1 1 auto;min-width:0}.desc-input{width:100%;border:1px solid var(--line);border-radius:9px;padding:9px 10px;font-family:inherit;font-size:13.5px;color:var(--ink);background:var(--surface);outline:none;resize:vertical;min-height:62px;line-height:1.5}.desc-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #4f6fe82e}.move-select{border:1px solid var(--line);border-radius:7px;padding:4px 8px;font-family:inherit;font-size:12.5px;color:var(--ink-soft);background:var(--surface);outline:none;max-width:210px}.move-select:focus{border-color:var(--primary)}.complete-btn{display:inline-flex;align-items:center;gap:9px;border:1px solid var(--line);background:var(--surface);border-radius:9px;padding:8px 13px;font-family:inherit;font-weight:600;font-size:13.5px;color:var(--ink-soft);cursor:pointer}.complete-btn .cdot{width:18px;height:18px;border-radius:50%;border:1.5px solid var(--ink-faint);display:grid;place-items:center;color:transparent;flex:0 0 auto}.complete-btn.on{border-color:var(--done);background:#e7f8ee;color:#1a7f43}.complete-btn.on .cdot{background:var(--done);border-color:var(--done);color:#fff}.complete-btn .cdot svg{width:12px;height:12px}.rule-item{padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);margin-bottom:9px}.rule-row{display:flex;align-items:flex-start;gap:10px}.rule-text{flex:1 1 auto;min-width:0;font-size:13.5px;color:var(--ink-soft);line-height:1.5}.rule-text b{font-weight:700;color:var(--ink)}.rule-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}.switch{position:relative;width:36px;height:20px;border-radius:99px;background:var(--line);border:none;cursor:pointer;flex:0 0 auto;transition:background .15s}.switch.on{background:var(--done)}.switch:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .15s}.switch.on:after{transform:translate(16px)}.rule-del{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:26px;height:26px;border-radius:6px;display:grid;place-items:center}.rule-del:hover{background:#fdecec;color:var(--danger)}.rule-del svg{width:14px;height:14px}.rule-form{border:1px dashed #C3CADB;border-radius:10px;padding:13px;margin-top:6px}.rule-form .frow{margin-bottom:12px}.rule-form .flabel{font-size:11.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:8px}.rule-num{width:62px;border:1px solid var(--line);border-radius:7px;padding:6px 8px;font-family:inherit;font-size:13.5px;text-align:center;outline:none;background:var(--surface);color:var(--ink)}.rule-num:focus{border-color:var(--primary)}.rule-num:disabled{opacity:.5}.chip-row{display:flex;flex-wrap:wrap;gap:7px}.toggle-chip{border:1px solid var(--line);background:var(--surface);border-radius:99px;padding:5px 11px;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--ink-soft);cursor:pointer;display:inline-flex;align-items:center;gap:6px}.toggle-chip.on{border-color:var(--primary);background:var(--primary-soft);color:var(--ink)}.toggle-chip .swt{width:11px;height:11px;border-radius:3px;flex:0 0 auto}.rule-empty{font-size:12.5px;color:var(--ink-faint);padding:6px 0 12px}.due-toggle{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.login-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#14192880;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:1500;display:flex;align-items:center;justify-content:center;padding:5vh 16px;overflow-y:auto}.login-card{width:100%;max-width:420px;background:var(--surface);border-radius:16px;box-shadow:var(--shadow-lift);padding:24px 22px;animation:pop .16s ease}.login-logo{display:block;height:30px;width:auto;margin:2px auto 18px;object-fit:contain}.login-card h2{margin:0 0 4px;font-family:Poppins,-apple-system,Segoe UI,Roboto,sans-serif;font-weight:700;font-size:21px;color:var(--ink);text-align:center}.login-sub{margin:0 0 18px;font-size:13px;color:var(--ink-soft);text-align:center}.login-users{display:flex;flex-direction:column;gap:9px;margin-bottom:16px}.login-user{display:flex;align-items:center;gap:11px;padding:10px 12px;border:1px solid var(--line);border-radius:11px;background:var(--surface);cursor:pointer;font-family:inherit;font-size:14.5px;font-weight:600;color:var(--ink);text-align:left;transition:border-color .15s,background .15s}.login-user:hover{border-color:var(--primary);background:var(--primary-soft)}.login-user .avatar{width:34px;height:34px;font-size:13px}.login-add{display:flex;gap:8px;margin-bottom:14px}.login-add input{flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:9px;padding:9px 11px;font-family:inherit;font-size:14px;outline:none;background:var(--surface);color:var(--ink)}.login-add input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #4f6fe82e}.login-note{font-size:11.5px;color:var(--ink-faint);line-height:1.55;border-top:1px solid var(--line);padding-top:12px;margin:14px 0 0}.login-field{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}.login-field input{border:1px solid var(--line);border-radius:9px;padding:10px 11px;font-family:inherit;font-size:14px;outline:none;background:var(--surface);color:var(--ink)}.login-field input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #4f6fe82e}.login-error{font-size:12.5px;color:var(--danger);margin:0 0 10px;text-align:center}.login-tabs{display:flex;gap:8px;margin-bottom:16px}.login-tab{flex:1 1 auto;text-align:center;padding:8px;border:1px solid var(--line);border-radius:9px;background:var(--surface);cursor:pointer;font-family:inherit;font-weight:600;font-size:13.5px;color:var(--ink-soft)}.login-tab.on{border-color:var(--primary);background:var(--primary-soft);color:var(--ink)}.user-chip{display:inline-flex;align-items:center;gap:8px;padding:5px 12px 5px 5px;border:1px solid var(--line);border-radius:99px;background:var(--surface);cursor:pointer;font-family:inherit;font-weight:600;font-size:13px;color:var(--ink);box-shadow:var(--shadow)}.user-chip:hover{border-color:var(--primary)}.user-chip .avatar{width:26px;height:26px;font-size:11px}.user-chip .uc-sub{font-size:10px;color:var(--ink-faint);font-weight:600}.filter-toggle{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:8px 12px;font-family:inherit;font-weight:600;font-size:13px;color:var(--ink-soft);cursor:pointer;box-shadow:var(--shadow);white-space:nowrap}.filter-toggle:hover{border-color:#d4d9e6;color:var(--ink)}.filter-toggle.on{border-color:var(--primary);background:var(--primary-soft);color:var(--ink)}.filter-toggle svg{width:15px;height:15px}.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%) translateY(20px);background:var(--ink);color:#fff;font-size:13px;font-weight:600;padding:10px 16px;border-radius:10px;box-shadow:var(--shadow-lift);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;z-index:2000}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}.app-loading{flex:1 1 auto;display:grid;place-items:center;color:var(--ink-faint);font-size:14px;font-weight:600}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}.drag-clone,.col-clone{transform:none}}@media (max-width:640px){.column,.add-list{flex-basis:80vw;max-width:80vw}}.shell{display:flex;height:100%;width:100%}.sidebar{width:252px;flex:0 0 auto;background:var(--sidebar-bg);border-right:none;display:flex;flex-direction:column;padding:16px 12px;gap:4px;overflow-y:auto}.sidebar-brand{display:flex;flex-direction:column;gap:8px;padding:4px 4px 14px}.logo-badge{background:#fff;border-radius:12px;padding:12px 14px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000002e}.logo-badge img{width:100%;height:auto;max-height:30px;object-fit:contain;display:block}.brand-title{color:#fff;font-family:Poppins,-apple-system,Segoe UI,Roboto,sans-serif;font-weight:600;font-size:13px;letter-spacing:.02em;padding-left:4px;display:flex;align-items:center;gap:7px}.brand-title .dot{width:6px;height:6px;border-radius:50%;background:var(--sidebar-active-icon)}.nav-label{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#fff6;padding:12px 10px 4px}.nav-item{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:10px;border:none;background:none;cursor:pointer;font-family:inherit;font-weight:500;font-size:14px;color:#ffffffa6;width:100%;text-align:left;transition:background .15s,color .15s}.nav-item:hover{background:#ffffff0f;color:#ffffffeb}.nav-item.active{background:var(--sidebar-active);color:var(--sidebar-active-icon)}.nav-item.active svg{color:var(--sidebar-active-icon)}.nav-item svg{width:18px;height:18px;flex:0 0 auto}.nav-spacer{flex:1 1 auto;min-height:10px}.side-user{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:#ffffff0d}.side-user .avatar{width:30px;height:30px;font-size:12px}.side-user .meta{display:flex;flex-direction:column;min-width:0}.side-user .nm{font-weight:600;font-size:13.5px;color:#ffffffeb;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.side-user .rl{font-size:11px;color:#ffffff8c;font-weight:500}.content{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;overflow:hidden}.topbar{flex:0 0 auto;display:flex;align-items:center;gap:14px;padding:16px clamp(16px,3vw,28px);border-bottom:1px solid var(--line);background:#ffffff8c;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.topbar h2{margin:0;font-family:Poppins,-apple-system,Segoe UI,Roboto,sans-serif;font-weight:700;font-size:21px;letter-spacing:-.01em}.topbar .sub{font-size:12.5px;color:var(--ink-faint);margin-top:2px}.topbar-actions{margin-left:auto;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.page{flex:1 1 auto;overflow-y:auto;padding:clamp(16px,3vw,28px)}.boards-page{flex:1 1 auto;display:flex;flex-direction:column;min-height:0;overflow:hidden}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:18px}.stat-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--shadow)}.stat-card .label{font-size:12.5px;font-weight:600;color:var(--ink-faint);display:flex;align-items:center;gap:8px}.stat-card .label svg{width:15px;height:15px}.stat-card .value{font-size:30px;font-weight:700;margin-top:8px;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.stat-card .sub{font-size:12px;color:var(--ink-soft);margin-top:2px}.panel-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:16px;align-items:start}@media (max-width:960px){.panel-grid{grid-template-columns:1fr}}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);margin-bottom:16px}.panel-head{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)}.panel-head h3{margin:0;font-size:15px;font-weight:700}.panel-head .pa{margin-left:auto}.panel-body{padding:14px 16px}.table{width:100%;border-collapse:collapse;font-size:13.5px}.table th{text-align:left;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint);padding:9px 10px;border-bottom:1px solid var(--line)}.table td{padding:10px;border-bottom:1px solid var(--line);vertical-align:middle}.table tr:last-child td{border-bottom:none}.role-badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:99px;font-size:11.5px;font-weight:700;background:var(--primary-soft);color:var(--primary)}.status-dot{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600}.status-dot .d{width:8px;height:8px;border-radius:50%}.muted{color:var(--ink-faint)}.row-actions{display:flex;gap:6px;justify-content:flex-end}.feed{display:flex;flex-direction:column}.feed-item{display:flex;gap:10px;padding:10px 4px;border-bottom:1px solid var(--surface-2)}.feed-item:last-child{border-bottom:none}.feed-dot{width:9px;height:9px;border-radius:50%;margin-top:5px;flex:0 0 auto}.feed-msg{font-size:13px;color:var(--ink);line-height:1.4}.feed-time{font-size:11px;color:var(--ink-faint);margin-top:2px}.chart-legend{display:flex;gap:16px;font-size:12px;font-weight:600;color:var(--ink-soft);margin-bottom:8px}.chart-legend .lg{display:inline-flex;align-items:center;gap:6px}.chart-legend .sw{width:10px;height:10px;border-radius:3px}.form-grid{display:flex;flex-direction:column;gap:12px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:12px;font-weight:700;color:var(--ink-soft)}.field input,.field select{border:1px solid var(--line);border-radius:9px;padding:9px 11px;font-family:inherit;font-size:14px;outline:none;background:var(--surface);color:var(--ink)}.field input:focus,.field select:focus{border-color:var(--primary);box-shadow:0 0 0 3px #4f6fe82e}.perm-group{margin-bottom:14px}.perm-group h4{margin:0 0 8px;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint)}.perm-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;margin-bottom:6px;cursor:pointer}.perm-row.on{border-color:var(--primary);background:var(--primary-soft)}.perm-row .pname{font-size:13.5px;font-weight:600}.perm-check{width:20px;height:20px;border-radius:6px;border:1.5px solid var(--line);background:var(--surface);display:grid;place-items:center;color:transparent;flex:0 0 auto}.perm-row.on .perm-check{background:var(--primary);border-color:var(--primary);color:#fff}.perm-check svg{width:12px;height:12px}.empty-state{text-align:center;color:var(--ink-faint);padding:30px;font-size:13.5px}.page-loading{padding:40px;text-align:center;color:var(--ink-faint);font-weight:600}.btn-sm{padding:6px 10px;font-size:12.5px}.section-title{font-size:13px;font-weight:700;color:var(--ink-soft);margin:0 0 10px}.assignee-box{position:relative}.assignee-selected{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.assignee-add-btn{display:inline-flex;align-items:center;gap:7px;border:1px dashed #C3CADB;background:var(--surface);color:var(--ink-soft);border-radius:99px;padding:6px 12px;font-family:inherit;font-weight:600;font-size:13px;cursor:pointer}.assignee-add-btn:hover{border-color:var(--primary);color:var(--primary)}.assignee-add-btn svg{width:14px;height:14px}.assignee-chip-x{border:none;background:none;cursor:pointer;color:var(--ink-faint);width:18px;height:18px;display:grid;place-items:center;border-radius:5px;margin-left:2px}.assignee-chip-x:hover{background:#fdecec;color:var(--danger)}.assignee-chip-x svg{width:11px;height:11px}.assign-dropdown{position:absolute;z-index:30;margin-top:6px;width:320px;max-width:100%;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-lift);overflow:hidden}.assign-search{padding:9px 11px;border-bottom:1px solid var(--line)}.assign-search input{width:100%;border:none;outline:none;font-family:inherit;font-size:13.5px;background:transparent;color:var(--ink)}.assign-list{max-height:240px;overflow-y:auto;padding:6px}.assign-option{display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:9px;cursor:pointer}.assign-option:hover{background:var(--surface-2)}.assign-option .info{flex:1 1 auto;min-width:0}.assign-option .nm{font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assign-option .em{font-size:11.5px;color:var(--ink-faint)}.assign-option .chk{width:20px;height:20px;border-radius:6px;border:1.5px solid var(--line);display:grid;place-items:center;color:transparent;flex:0 0 auto}.assign-option.on .chk{background:var(--primary);border-color:var(--primary);color:#fff}.assign-option .chk svg{width:12px;height:12px}.assign-empty{padding:14px;text-align:center;color:var(--ink-faint);font-size:12.5px}.theme-switch{padding:0 4px 6px}.theme-switch .theme-label{font-size:9.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#fff6;padding:8px 6px 5px}.theme-row{display:flex;gap:4px;background:#ffffff0d;border-radius:9px;padding:3px}.theme-opt{flex:1;display:flex;align-items:center;justify-content:center;gap:5px;padding:6px 4px;border:none;background:none;border-radius:7px;cursor:pointer;font-family:inherit;font-size:11px;font-weight:600;color:#fff9;white-space:nowrap}.theme-opt:hover{color:#ffffffeb}.theme-opt.on{background:var(--sidebar-active);color:var(--sidebar-active-icon)}.theme-opt svg{width:14px;height:14px;flex:0 0 auto}html[data-theme=dark]{--bg:#0E1118;--surface:#171B26;--surface-2:#1E2433;--line:#2A3142;--ink:rgba(255,255,255,.92);--ink-soft:rgba(255,255,255,.65);--ink-faint:rgba(255,255,255,.45);--primary-soft:rgba(79,111,232,.18);--danger:#FF6B6B;--shadow:0 1px 2px rgba(0,0,0,.4),0 2px 8px rgba(0,0,0,.35);--shadow-card:0 1px 2px rgba(0,0,0,.3);--shadow-lift:0 16px 40px rgba(0,0,0,.6)}html[data-theme=dark] body{background:radial-gradient(1200px 500px at 12% -8%,rgba(79,111,232,.1) 0%,transparent 60%),radial-gradient(1000px 460px at 105% 0%,rgba(66,133,244,.07) 0%,transparent 55%),var(--bg)}html[data-theme=dark] header,html[data-theme=dark] .topbar{background:#171b26b8}html[data-theme=dark] .board-bar{background:#ffffff05}html[data-theme=dark] .column,html[data-theme=dark] .add-list-btn{background:#ffffff08}html[data-theme=dark] .add-list-form,html[data-theme=dark] .sum-task:hover,html[data-theme=dark] .assign-option:hover{background:#ffffff0d}html[data-theme=dark] .table tr:hover td{background:#ffffff0a}html[data-theme=dark] .btn-ghost:hover{background:#ffffff0f}html[data-theme=dark] .btn-danger{background:transparent;color:#ff6b6b;border-color:#ff6b6b66}html[data-theme=dark] .btn-danger:hover{background:#ff6b6b1f}html[data-theme=dark] .col-del:hover,html[data-theme=dark] .card-del:hover,html[data-theme=dark] .cl-del:hover,html[data-theme=dark] .att-del:hover,html[data-theme=dark] .remark-del:hover,html[data-theme=dark] .rule-del:hover,html[data-theme=dark] .board-tab-x:hover,html[data-theme=dark] .assignee-chip-x:hover{background:#ff6b6b24;color:#ff6b6b}html[data-theme=dark] .badge.due-over{background:#e5484d29;color:#ff6b6b;border-color:#e5484d4d}html[data-theme=dark] .badge.due-today{background:#f2b60024;color:#f2b600;border-color:#f2b6004d}html[data-theme=dark] .badge.cl-complete,html[data-theme=dark] .complete-btn.on{background:#2da44e29;color:#46be6b;border-color:#2da44e4d}html[data-theme=dark] .sum-pill.overdue{background:#e5484d29;color:#ff6b6b;border-color:#e5484d4d}html[data-theme=dark] .overlay,html[data-theme=dark] .login-overlay{background:#0000008c}html[data-theme=dark] .login-logo{background:#fff;border-radius:10px;padding:8px 14px;height:auto;max-height:46px;box-shadow:0 2px 10px #0006}html[data-theme=dark] .sum-task:hover{border-color:var(--line)}html[data-density=compact] .page{padding:14px}html[data-density=compact] .panel{margin-bottom:12px}html[data-density=compact] .panel-body{padding:10px 12px}html[data-density=compact] .stat-card{padding:12px 14px}html[data-density=compact] .stat-grid{gap:10px;margin-bottom:12px}html[data-density=compact] .panel-grid{gap:12px}html[data-density=compact] .nav-item{padding:7px 11px}html[data-density=compact] .table th,html[data-density=compact] .table td{padding:7px 10px}html[data-density=compact] .card{padding:8px 10px 9px}html[data-density=compact] .topbar{padding:11px 20px}html[data-density=compact] .col-head{padding:9px 10px 8px}html[data-density=compact] .cards{gap:7px}html[data-density=compact] .stat-card .value{font-size:25px}
