:root{--bg:#f4f6fb;--panel:#ffffff;--panel2:#f0f3fa;--line:#dde3ee;--txt:#1a2030;--muted:#697489;--acc:#3f6cff;--acc2:#2f5bf0;--green:#1f9d5a;--gold:#b8852a;--red:#d63a2e;--radius:12px;--perm-bg:#fbf3df;--perm-bd:#e7d4a3;--paid-bg:#e2f5ea;--paid-bd:#b9e3cb;--pay-bg:#e6edff;--pay-bd:#c2d2ff;--member-bg:#f6f4ff;--member-bar:#bcb0f2;--shadow:0 1px 3px rgba(20,30,60,.06),0 6px 20px rgba(20,30,60,.05)}[data-theme=night]{--bg:#0f1115;--panel:#171a21;--panel2:#1f232c;--line:#2a2f3a;--txt:#e8eaed;--muted:#9aa3b2;--acc:#4f7cff;--acc2:#6c8cff;--green:#2fbf71;--gold:#e0b13a;--red:#e2574c;--perm-bg:#211d12;--perm-bd:#4a3f1f;--paid-bg:#122119;--paid-bd:#1f4a33;--pay-bg:#121a2e;--pay-bd:#27407a;--member-bg:#1c1a26;--member-bar:#6f60b3;--shadow:none}*{box-sizing:border-box}body,html{padding:0;margin:0}body{background:var(--bg);color:var(--txt);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:15px}button{cursor:pointer}button,input,select{font-family:inherit}a{color:var(--acc2);text-decoration:none}h1,h2,h3{margin:0}.logo{font-weight:700;letter-spacing:.3px}.logo span{color:var(--acc2)}.muted{color:var(--muted)}.btn{background:var(--acc);color:#fff;border:none;padding:10px 16px;border-radius:10px;font-weight:600;font-size:14px;cursor:pointer}.btn:hover{background:var(--acc2)}.btn:disabled{opacity:.4;cursor:default}.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--txt)}.btn.ghost:hover:not(:disabled){border-color:var(--acc);background:transparent}.btn.sm{padding:6px 12px;font-size:13px}.btn.danger{background:transparent;border:1px solid var(--line);color:var(--red)}.btn.danger:hover:not(:disabled){border-color:var(--red)}.iconbtn{border:1px solid var(--line);background:var(--panel2);border-radius:7px;width:30px;height:30px;display:grid;place-items:center;font-size:14px;cursor:pointer}.iconbtn:hover:not(:disabled){border-color:var(--acc)}.iconbtn:disabled{opacity:.35;cursor:default}.theme-toggle{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--panel2);color:var(--txt);border-radius:999px;padding:7px 12px;font-size:13px;font-weight:600;cursor:pointer}.theme-toggle:hover{border-color:var(--acc)}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.sub{color:var(--muted);font-size:13px}.field{margin-bottom:14px}.field label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}.field input,.field select,.field textarea,.fselect,.input{width:100%;padding:11px 12px;border-radius:10px;border:1px solid var(--line);background:var(--panel2);color:var(--txt);font-size:14px;outline:none;font-family:inherit}.field textarea{resize:vertical;min-height:70px;line-height:1.35}.fselect{width:auto;padding:9px 12px;cursor:pointer}.field input:focus,.field select:focus,.field textarea:focus,.fselect:focus,.input:focus{border-color:var(--acc)}.search{padding:9px 12px;border-radius:10px;border:1px solid var(--line);background:var(--panel2);color:var(--txt);font-size:14px;outline:none;min-width:220px}.search:focus{border-color:var(--acc)}.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);color:var(--muted);text-transform:uppercase;letter-spacing:.5px}.badge.admin{color:var(--gold);border-color:var(--perm-bd)}.chip{font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px;border:1px solid var(--line);white-space:nowrap}.chip.ok{color:var(--green);border-color:var(--paid-bd);background:var(--paid-bg)}.chip.off{color:var(--muted)}.chip.perm{color:var(--gold);border-color:var(--perm-bd);background:var(--perm-bg)}.chip.paid{color:var(--green);border-color:var(--paid-bd);background:var(--paid-bg)}.chip.pay{color:var(--acc2);border-color:var(--pay-bd);background:var(--pay-bg)}.tag{font-size:11px;font-weight:600;padding:1px 8px;border-radius:999px;border:1px solid var(--line)}.numpill{display:inline-block;min-width:28px;text-align:center;font-weight:700;padding:2px 9px;border-radius:8px;background:var(--panel2);border:1px solid var(--line);color:var(--muted)}.numpill.has{color:var(--gold);border-color:var(--perm-bd);background:var(--perm-bg)}.tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px}.tbl{width:100%;border-collapse:collapse;font-size:14px}.tbl td,.tbl th{text-align:left;padding:11px 13px;border-bottom:1px solid var(--line);white-space:nowrap}.tbl tbody tr:last-child td{border-bottom:none}.tbl thead th{font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.4px;background:var(--panel2);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tbl thead th.nosort{cursor:default}.tbl thead th:hover:not(.nosort){color:var(--txt)}.tbl tbody tr.click{cursor:pointer}.tbl tbody tr.click:hover{background:var(--panel2)}.tbl tbody tr.blocked td{opacity:.55}.tbl tbody tr.blocked .actions{opacity:1}.tbl tbody tr.rowcurrent{background:var(--pay-bg)}.actions{display:flex;gap:8px;flex-wrap:wrap}.cellname{display:flex;align-items:center;gap:10px}.avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#3a4a7a,#2a3350);display:grid;place-items:center;font-weight:700;font-size:12px;color:#cdd6f4;flex-shrink:0}.submeta{font-size:12px}.empty,.submeta{color:var(--muted)}.empty{font-size:13px;padding:20px;text-align:center}.pagination{display:flex;justify-content:center;align-items:center;gap:6px;margin-top:18px;flex-wrap:wrap}.pagination button{min-width:36px;height:36px;padding:0 12px;border:1px solid var(--line);background:var(--panel2);color:var(--txt);border-radius:10px;font-weight:600;font-size:14px;cursor:pointer}.pagination button.on{background:var(--acc);color:#fff;border-color:var(--acc)}.pagination button:disabled{opacity:.35;cursor:default}.pagination .info{color:var(--muted);font-size:13px;margin-left:10px}.landing{min-height:100vh}.lp-wrap{max-width:980px;margin:0 auto;padding:0 20px}.lp-head{border-bottom:1px solid var(--line);background:var(--panel)}.lp-head-in{display:flex;align-items:center;justify-content:space-between;padding-top:14px;padding-bottom:14px}.lp-head .logo{font-size:20px}.lp-plain{display:grid;place-items:center;min-height:60vh;text-align:center}.lp-plain h1{font-size:34px;font-weight:700}.lp-hero{padding:72px 20px 48px;text-align:center}.lp-hero h1{font-size:40px;line-height:1.15;margin-bottom:16px}.lp-lead{font-size:18px;color:var(--muted);max-width:640px;margin:0 auto 28px;line-height:1.5}.lp-cta{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.lp-cta .btn{padding:12px 22px}.lp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));grid-gap:16px;gap:16px}.lp-card h3{font-size:16px;margin-bottom:6px}.lp-card p{color:var(--muted);font-size:14px;line-height:1.5;margin:0}.lp-ico{font-size:24px;margin-bottom:8px}.lp-steps{padding:56px 20px 8px}.lp-contact h2,.lp-steps h2{font-size:26px;margin-bottom:20px}.lp-step{display:flex;gap:14px;align-items:flex-start}.lp-step h3{font-size:16px;margin-bottom:4px}.lp-step p{color:var(--muted);font-size:14px;line-height:1.5;margin:0}.lp-num{flex:none;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--acc);color:#fff;font-weight:700}.lp-contact{margin:56px 0;text-align:center;padding:32px 24px}.lp-contact p{color:var(--muted);max-width:560px;margin:0 auto 20px;line-height:1.5}.lp-foot{display:flex;justify-content:space-between;padding-top:20px;padding-bottom:28px;border-top:1px solid var(--line);color:var(--muted);font-size:13px}@media (max-width:640px){.lp-hero{padding-top:48px}.lp-hero h1{font-size:30px}}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px}.login-card{width:100%;max-width:380px}.login-card .logo{font-size:24px;text-align:center;margin-bottom:10px}.error{color:var(--red);font-size:13px;margin-top:8px}.app{display:flex;min-height:100vh}.sidebar{width:240px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh;transition:width .15s}.side-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:16px;border-bottom:1px solid var(--line)}.side-brand{min-width:0}.side-org{font-size:12px;color:var(--acc2);font-weight:600;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.side-toggle{border:1px solid var(--line);background:var(--panel2);color:var(--txt);width:30px;height:30px;border-radius:8px;flex-shrink:0}.side-toggle:hover{border-color:var(--acc)}.side-nav{flex:1 1;padding:12px 10px;display:flex;flex-direction:column;gap:6px;overflow:auto}.side-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border:none;background:none;color:var(--txt);border-radius:10px;font-weight:600;font-size:14px;text-align:left;width:100%;cursor:pointer;white-space:nowrap;overflow:hidden}.side-item:hover{background:var(--panel2)}.side-item.on{background:var(--acc);color:#fff}.side-item .ic{font-size:18px;width:22px;text-align:center;flex-shrink:0}.side-foot{border-top:1px solid var(--line);padding:12px 10px;gap:8px}.side-foot,.side-user{display:flex;flex-direction:column}.side-user{gap:6px;padding:8px 12px 2px}.sidebar-collapsed .sidebar{width:64px}.sidebar-collapsed .side-brand,.sidebar-collapsed .side-item .lbl,.sidebar-collapsed .side-user .name,.sidebar-collapsed .side-version,.sidebar-collapsed .theme-toggle .lbl{display:none}.side-version{font-size:11px;color:var(--muted);text-align:left;padding-left:2px}.sidebar-collapsed .side-item{justify-content:center;padding:10px 0}.sidebar-collapsed .side-head{justify-content:center;padding:16px 8px}.main{flex:1 1;min-width:0}.content{padding:26px 22px;max-width:1400px}.back{display:inline-flex;gap:6px;align-items:center;color:var(--muted);background:none;border:none;font-size:14px;margin-bottom:16px;padding:0;cursor:pointer}.back:hover{color:var(--txt)}.head-bar{justify-content:space-between;gap:24px;flex-wrap:wrap;margin-bottom:18px}.head-bar,.head-id{display:flex;align-items:center}.head-id{gap:14px}.head-id .avatar{width:52px;height:52px;font-size:19px}.head-stats{display:flex;gap:10px;flex-wrap:wrap}.stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 14px;min-width:150px;display:flex;align-items:center;justify-content:space-between;gap:12px;box-shadow:var(--shadow)}.stat .num{font-size:20px;font-weight:700}.stat .lbl{font-size:12px;color:var(--muted)}.cal-grid2{display:grid;grid-template-columns:1fr 300px;grid-gap:18px;gap:18px;align-items:start}@media (max-width:1000px){.cal-grid2{grid-template-columns:1fr}}.cal-head{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;grid-gap:10px;gap:10px;margin-bottom:16px}.cal-left{justify-self:start}.cal-nav{display:flex;align-items:center;gap:14px;justify-self:center}.cal-head .mname{font-size:18px;font-weight:700;min-width:150px;text-align:center}.nav{width:36px;height:36px;border-radius:10px;border:1px solid var(--line);background:var(--panel2);color:var(--txt);font-size:18px;cursor:pointer}.nav:hover{border-color:var(--acc)}.cal-actions{justify-self:end;display:flex;gap:8px;flex-wrap:wrap}@media (max-width:900px){.cal-head{grid-template-columns:1fr;justify-items:center}.cal-actions,.cal-left{justify-self:center}}.dow{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:6px;gap:6px;margin-bottom:6px}.dow div{text-align:center;font-size:12px;color:var(--muted);font-weight:600}.grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-gap:6px;gap:6px}.day{min-height:84px;border:1px solid var(--line);border-radius:10px;background:var(--panel2);padding:8px;display:flex;flex-direction:column;cursor:pointer;transition:.12s;min-width:0;overflow:hidden}.day.empty{background:transparent;border:none;min-height:0;cursor:default}.day:not(.empty):hover{border-color:var(--acc)}.day.member-on{background:var(--member-bg)}.day.member-start{box-shadow:inset 3px 0 0 var(--member-bar)}.day.member-end{box-shadow:inset -3px 0 0 var(--member-bar)}.day.member-start.member-end{box-shadow:inset 3px 0 0 var(--member-bar),inset -3px 0 0 var(--member-bar)}.day.today{border-color:var(--acc)}.day.today .dn{color:var(--acc2)}.day.sel{outline:2px solid var(--acc);outline-offset:-2px}.day .dn{font-size:13px;font-weight:600;display:flex;justify-content:space-between;align-items:center}.day .edit-hint{opacity:0;color:var(--muted);font-weight:400;transition:.12s}.day.sel .edit-hint,.day:not(.empty):hover .edit-hint{opacity:.7}.day .dmarks{margin-top:auto;display:flex;flex-wrap:wrap;gap:4px;align-items:center;min-width:0}.dmark{font-size:11px;font-weight:700;padding:1px 5px;border-radius:6px;line-height:1.5}.dmark.perm{background:var(--perm-bg);border:1px solid var(--perm-bd)}.dmark.paid{background:var(--paid-bg);border:1px solid var(--paid-bd)}.dmark.pass{background:var(--pay-bg);color:var(--acc2);border:1px solid var(--pay-bd)}.dmark.member{background:var(--pay-bg);border:1px dashed var(--pay-bd)}.day .dnote{margin-top:5px;font-size:11px;line-height:1.3;color:var(--txt);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.legend{display:flex;gap:16px;margin-top:16px;font-size:12px;color:var(--muted);flex-wrap:wrap}.legend i{width:10px;height:10px;border-radius:3px;display:inline-block;margin-right:5px}.legend i.swatch-member{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--member-bar)}.sidebox{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-top:14px}.sidebox:first-child{margin-top:0}.sidebox h3{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:10px}.kv{display:grid;grid-template-columns:auto 1fr;grid-gap:4px 10px;gap:4px 10px;font-size:13px;align-items:baseline}.kv span{color:var(--muted)}.kv b{text-align:right;white-space:nowrap}.daynote{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acc);border-radius:8px;padding:8px 10px;margin-top:8px;font-size:14px;line-height:1.35}.dayline{font-size:13px;margin-top:6px}.bar{height:6px;border-radius:999px;background:var(--line);overflow:hidden;margin-top:10px}.bar i{display:block;height:100%;background:var(--gold)}.boxfoot{display:flex;justify-content:flex-end;gap:14px;margin-top:10px;flex-wrap:wrap}.linkbtn{background:none;border:none;padding:0;color:var(--acc2);font-size:13px;font-weight:600;font-family:inherit}.linkbtn:hover{text-decoration:underline}.passrow{border:1px solid var(--line);border-radius:9px;padding:9px 11px;background:var(--panel);margin-bottom:8px}.passrow.active{border-color:var(--gold);background:var(--perm-bg)}.passtop{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;font-weight:600}.passmeta{font-size:12px;color:var(--muted);margin-top:3px}.ctabs{display:flex;gap:8px;margin-bottom:16px}.overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);display:grid;place-items:center;z-index:20;padding:20px}.modal{width:100%;max-width:420px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px;box-shadow:var(--shadow)}.modal-actions{display:flex;gap:10px;margin-top:8px}.modal-actions .btn{flex:1 1}.toggles{display:flex;gap:8px}.toggle{flex:1 1;padding:10px 8px;border-radius:10px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);font-size:13px;font-weight:600}.toggle:hover:not(.on){color:var(--txt);border-color:var(--acc)}.toggle.on{background:var(--acc);border-color:var(--acc);color:#fff}@media (max-width:640px){.overlay{place-items:end center;padding:0}.modal{max-width:none;border-radius:14px 14px 0 0;max-height:92vh;overflow-y:auto}}.checkrow{display:flex;gap:8px;align-items:center;font-size:14px;margin-bottom:10px;cursor:pointer}.collapse{margin-top:6px;border-top:1px solid var(--line);padding-top:8px}.collapse>summary{cursor:pointer;list-style:none;font-size:13px;font-weight:600;color:var(--muted);display:flex;align-items:center;gap:6px;padding:4px 0}.collapse>summary::-webkit-details-marker{display:none}.collapse>summary:before{content:"▸";font-size:11px;transition:transform .12s}.collapse[open]>summary:before{transform:rotate(90deg)}.collapse>summary:hover{color:var(--txt)}.collapse-body{margin-top:8px;max-height:260px;overflow-y:auto}