:root{color-scheme:dark;--bg:#0a0a0b;--panel:#111113;--card:#151518;--card-2:#1b1b1f;--line:#232328;--line-2:#2e2e35;--text:#ececf1;--muted:#8b8b96;--dim:#5d5d68;--blue:#3d74f2;--blue-2:#6e97ff;--blue-soft:rgba(61,116,242,.14);--green:#3ecf8e;--yellow:#f5c84c;--red:#f2555a;--pink:#ee6aa7;--purple:#9b7bff;--orange:#f39a4a;--r:14px;--mono:"JetBrains Mono",ui-monospace,monospace}*{box-sizing:border-box}html,body{margin:0;height:100%}body{background:var(--bg);color:var(--text);font:14px/1.5 Inter,system-ui,sans-serif;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--blue-2);text-decoration:none}.loading{display:grid;place-items:center;height:100vh;color:var(--muted)}.mono{font-family:var(--mono)}.app{display:grid;grid-template-columns:260px 1fr;min-height:100vh}.side{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;padding:22px 20px 18px;font-weight:600;font-size:17px}.brand .dot{width:22px;height:22px;border-radius:50%;background:conic-gradient(var(--blue) 0 50%,#274488 50% 100%)}.side-sec{padding:14px 12px;border-top:1px solid var(--line)}.side-label{font-family:var(--mono);font-size:11.5px;color:var(--dim);padding:0 10px 8px}.nav a{display:flex;align-items:center;gap:11px;padding:9px 10px;border-radius:9px;color:var(--muted);margin-bottom:2px;border:1px solid transparent}.nav a:hover{color:var(--text);background:var(--card)}.nav a.on{color:var(--text);background:linear-gradient(180deg,#1f1f24,#18181c);border-color:var(--line-2);box-shadow:inset 0 1px #ffffff0a}.nav svg{width:17px;height:17px;flex:none;opacity:.85}.nav .count{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--dim)}.legend-row{display:flex;align-items:center;gap:11px;padding:7px 10px;color:var(--muted)}.legend-row .count{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--dim)}.pip{width:9px;height:9px;border-radius:50%;flex:none;box-shadow:0 0 8px currentColor}.side-foot{margin-top:auto;padding:14px 20px;border-top:1px solid var(--line);font-size:12.5px;color:var(--dim);display:flex;justify-content:space-between;gap:8px;align-items:center}.side-foot button{background:none;border:0;color:var(--muted);cursor:pointer;padding:0}.side-foot button:hover{color:var(--text)}.main{min-width:0;padding:22px 34px 60px}.crumb{display:flex;align-items:center;gap:10px;color:var(--text);font-weight:500;height:30px}.crumb svg{width:17px;height:17px;color:var(--muted)}.head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin:22px 0;flex-wrap:wrap}h1{font-size:40px;font-weight:500;letter-spacing:-.02em;margin:0;line-height:1.1}h1 span{color:var(--dim)}h2{font-size:15px;font-weight:500;margin:0 0 12px;color:var(--text)}.sub{color:var(--muted);margin-top:6px}.grid{display:grid;gap:16px}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g32{grid-template-columns:3fr 2fr}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:20px;box-shadow:inset 0 1px #ffffff08;min-width:0}.card.pad0{padding:0}.stat .label{color:var(--muted);font-size:13.5px}.stat .val{font-size:34px;font-weight:600;letter-spacing:-.02em;margin:6px 0 4px;line-height:1.1}.stat .note{font-family:var(--mono);font-size:12px;color:var(--dim)}.up{color:var(--green)}.down{color:var(--red)}.warn{color:var(--yellow)}.hero{position:relative;overflow:hidden}.hero:after{content:"";position:absolute;right:-60px;top:-60px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(61,116,242,.35),transparent 65%);pointer-events:none}.list{display:flex;flex-direction:column}.row{display:flex;align-items:center;gap:12px;padding:12px 20px;border-top:1px solid var(--line);cursor:pointer}.row:first-child{border-top:0}.row:hover{background:var(--card-2)}.row .t{flex:1;min-width:0}.row .t b{font-weight:500;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row .t small{color:var(--muted);font-size:12.5px}.row .when{font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}.empty{padding:28px 20px;color:var(--dim);text-align:center}.card-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px 12px}.card-head h2{margin:0}.chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:2px 9px;border-radius:99px;background:var(--card-2);border:1px solid var(--line-2);color:var(--muted);white-space:nowrap}.chip i{width:7px;height:7px;border-radius:50%;background:currentColor}.c-blue{color:var(--blue-2)}.c-green{color:var(--green)}.c-yellow{color:var(--yellow)}.c-red{color:var(--red)}.c-pink{color:var(--pink)}.c-purple{color:var(--purple)}.c-orange{color:var(--orange)}.c-gray{color:var(--muted)}.btn{display:inline-flex;align-items:center;gap:7px;background:var(--card-2);border:1px solid var(--line-2);border-radius:10px;padding:8px 14px;cursor:pointer;font-weight:500;white-space:nowrap}.btn:hover{border-color:#3b3b44}.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}.btn.primary:hover{background:#4c80f5}.btn.danger{color:var(--red)}.btn.sm{padding:5px 10px;font-size:13px}.btn svg{width:15px;height:15px}.tabs{display:inline-flex;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:3px;gap:2px}.tabs button{background:none;border:0;padding:6px 12px;border-radius:7px;color:var(--muted);cursor:pointer}.tabs button.on{background:var(--card-2);color:var(--text)}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap}label.f{display:flex;flex-direction:column;gap:6px;font-size:12.5px;color:var(--muted)}.input,select.input,textarea.input{background:var(--panel);border:1px solid var(--line-2);border-radius:10px;padding:9px 12px;width:100%;outline:none;color:var(--text)}textarea.input{min-height:90px;resize:vertical}.input:focus{border-color:var(--blue)}.form{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form .full{grid-column:1/-1}.checks{display:flex;flex-wrap:wrap;gap:6px}.checks label{display:inline-flex;gap:6px;align-items:center;background:var(--panel);border:1px solid var(--line-2);border-radius:99px;padding:4px 11px;color:var(--text);cursor:pointer;font-size:13px}.checks input{accent-color:var(--blue)}.tick{display:flex;gap:8px;align-items:center;color:var(--text);font-size:14px}.tick input{accent-color:var(--blue);width:16px;height:16px}.modal-bg{position:fixed;inset:0;background:#0009;backdrop-filter:blur(4px);display:grid;place-items:center;padding:16px;z-index:50}.modal{background:var(--card);border:1px solid var(--line-2);border-radius:18px;width:min(640px,100%);max-height:calc(100vh - 32px);overflow:auto;padding:24px}.modal h3{margin:0 0 18px;font-size:19px;font-weight:600}.modal-foot{display:flex;justify-content:space-between;gap:10px;margin-top:22px}.modal-foot .r{display:flex;gap:10px;margin-left:auto}.dcard{cursor:pointer;display:flex;flex-direction:column;gap:12px;transition:border-color .15s}.dcard:hover{border-color:var(--line-2)}.dcard .top{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.dcard h3{margin:0;font-size:16px;font-weight:600;line-height:1.3}.dcard .meta{color:var(--muted);font-size:13px}.bar{height:6px;border-radius:99px;background:var(--card-2);overflow:hidden}.bar>div{height:100%;background:linear-gradient(90deg,var(--blue),var(--blue-2));border-radius:99px}.kv{display:flex;justify-content:space-between;font-size:12.5px;color:var(--muted);font-family:var(--mono)}.countdown{font-family:var(--mono);font-size:12px;color:var(--blue-2)}.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-top:1px solid var(--line);border-left:1px solid var(--line)}.cal .dow{font-family:var(--mono);font-size:11.5px;color:var(--dim);padding:8px 10px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.cal .day{min-height:108px;padding:8px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:4px;min-width:0}.cal .day.out{background:#00000040}.cal .day.out .n{color:var(--dim)}.cal .n{font-family:var(--mono);font-size:12px;color:var(--muted)}.cal .day.today .n{color:#fff;background:var(--blue);border-radius:6px;padding:0 6px;align-self:flex-start}.ev{font-size:12px;padding:3px 7px;border-radius:6px;background:var(--card-2);border-left:3px solid var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.ev.t-hard{border-color:var(--red);background:#f2555a1f}.ev.t-match{border-color:var(--green);background:#3ecf8e1f}.ev.t-meet{border-color:var(--purple);background:#9b7bff1f}.ev.t-task{border-color:var(--blue)}.ev.done{opacity:.45;text-decoration:line-through}.board{display:grid;grid-template-columns:repeat(4,minmax(220px,1fr));gap:14px;overflow-x:auto;padding-bottom:6px}.col{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:12px;display:flex;flex-direction:column;gap:8px;min-height:120px}.col h4{margin:0 0 4px;font-size:13px;font-weight:500;color:var(--muted);display:flex;justify-content:space-between}.tcard{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px;cursor:pointer}.tcard:hover{border-color:var(--line-2)}.tcard b{font-weight:500;display:block;margin-bottom:6px}.tcard .m{display:flex;gap:6px;flex-wrap:wrap;align-items:center;font-size:12px;color:var(--muted)}.table{width:100%;border-collapse:collapse}.table th{font-family:var(--mono);font-weight:400;font-size:11.5px;color:var(--dim);text-align:left;padding:10px 20px;border-bottom:1px solid var(--line)}.table td{padding:11px 20px;border-bottom:1px solid var(--line);vertical-align:middle}.table tr:last-child td{border-bottom:0}.table tbody tr{cursor:pointer}.table tbody tr:hover td{background:var(--card-2)}.table .num{text-align:right;font-family:var(--mono)}.scroll-x{overflow-x:auto}.chart svg{width:100%;height:auto;display:block}.chart .axis{font-family:var(--mono);font-size:11px;fill:var(--dim)}.chart .grid-l{stroke:var(--line);stroke-width:1}.prose{white-space:pre-wrap;color:var(--text)}.sec-label{font-family:var(--mono);font-size:11.5px;color:var(--dim);margin:16px 0 6px}.login{min-height:100vh;display:grid;place-items:center;padding:16px;background:radial-gradient(circle at 50% 0%,rgba(61,116,242,.18),transparent 55%),var(--bg)}.login .box{width:min(380px,100%);background:var(--card);border:1px solid var(--line-2);border-radius:18px;padding:30px}.login .brand{padding:0 0 6px}.login p{color:var(--muted);margin:0 0 22px}.login form{display:flex;flex-direction:column;gap:12px}.login .alt{background:none;border:0;color:var(--muted);cursor:pointer;margin-top:4px;font-size:13px}.login .alt:hover{color:var(--text)}.msg{font-size:13px;padding:9px 12px;border-radius:9px;background:var(--card-2);color:var(--muted)}.msg.err{color:var(--red);background:#f2555a1a}.msg.ok{color:var(--green);background:#3ecf8e1a}#toast{position:fixed;bottom:20px;left:50%;transform:translate(-50%) translateY(20px);background:var(--card-2);border:1px solid var(--line-2);padding:10px 16px;border-radius:10px;opacity:0;transition:.2s;pointer-events:none;z-index:60}#toast.show{opacity:1;transform:translate(-50%)}.menu-btn{display:none}@media (max-width:1100px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g32{grid-template-columns:1fr}}@media (max-width:820px){.app{grid-template-columns:1fr}.side{position:fixed;inset:0 auto 0 0;width:270px;z-index:40;transform:translate(-100%);transition:transform .2s}.app.open .side{transform:none;box-shadow:0 0 0 100vmax #0000008c}.main{padding:14px 16px 50px}.menu-btn{display:inline-flex;background:none;border:1px solid var(--line-2);border-radius:9px;padding:6px;cursor:pointer;margin-right:4px}.menu-btn svg{width:18px;height:18px}h1{font-size:30px}.g2,.form{grid-template-columns:1fr}.stat .val{font-size:28px}.cal .day{min-height:72px;padding:5px}.cal .ev{font-size:10.5px;padding:2px 4px}.table th,.table td{padding:10px 12px}.board{grid-template-columns:repeat(4,minmax(240px,1fr))}}@media (max-width:480px){.g4{grid-template-columns:1fr 1fr}.stat .val{font-size:24px}.card{padding:16px}}.row .when.down{color:var(--red)}.row .t small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width:820px){.row{padding:12px 16px}.row .chip{display:none}}