:root{--ink:#17251f;--muted:#748078;--line:#e6ebe7;--green:#1e684b;--green2:#2f8060;--cream:#f7f6f1;--white:#fff;--gold:#e5b858}*{box-sizing:border-box}body,html{margin:0;min-height:100%;background:var(--cream);color:var(--ink);font-family:Microsoft YaHei,PingFang SC,Arial,sans-serif}button,select{font:inherit}.app-shell{min-height:100vh;display:grid;grid-template-columns:244px 1fr}.sidebar{position:-webkit-sticky;position:sticky;top:0;height:100vh;background:#153d2f;color:#fff;padding:28px 18px 18px;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:12px;padding:0 8px 30px}.brand-mark{display:grid;place-items:center;width:40px;height:40px;border-radius:12px;background:var(--gold);color:#153d2f;font-size:20px;font-weight:900}.brand div,.profile>div:not(.avatar),.sync-card div{display:flex;flex-direction:column}.brand strong{font-size:17px;letter-spacing:.06em}.brand small,.profile small,.sync-card small{margin-top:3px;opacity:.63;font-size:11px}.sidebar nav{display:flex;flex-direction:column;gap:5px}.sidebar nav button{border:0;background:transparent;color:#bfd0c8;text-align:left;padding:10px 12px;border-radius:10px;cursor:pointer;display:flex;gap:11px;align-items:center}.sidebar nav button>span{width:28px;height:28px;display:grid;place-items:center;border:1px solid #ffffff1f;border-radius:8px;font-size:12px;font-weight:700}.sidebar nav button div{display:flex;flex-direction:column;gap:2px}.sidebar nav button b{font-size:13px}.sidebar nav button small{font-size:9px;opacity:.55}.sidebar nav button.active,.sidebar nav button:hover{background:#2a5a46;color:#fff}.sidebar nav button.active>span{background:#f3c966;color:#183d30;border-color:#f3c966}.sync-card{margin-top:auto;background:#204c3b;border:1px solid #376451;border-radius:11px;padding:12px;display:flex;gap:9px;align-items:center}.sync-card i{width:8px;height:8px;border-radius:50%;background:#6dd397;box-shadow:0 0 0 4px #68d39124}.sync-card strong{font-size:11px}.sync-card small{font-size:9px}.profile{display:flex;align-items:center;gap:9px;margin-top:12px;padding:12px 6px 0;border-top:1px solid #ffffff17}.profile strong{font-size:12px}.profile>span{margin-left:auto;opacity:.5}.avatar{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--gold);color:#173f31;font-weight:800}.content{padding:34px 42px 60px;max-width:1500px;width:100%;margin:auto}header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:28px}h1{font-size:28px;margin:4px 0 7px}header p{margin:0;color:var(--muted);font-size:13px}.eyebrow{font-size:10px!important;color:#978760!important;letter-spacing:.13em}.header-actions{display:flex;gap:9px}.ghost,.header-actions select,.primary{height:39px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:0 14px;color:var(--ink);cursor:pointer;white-space:nowrap}.primary{background:var(--green);color:#fff;border-color:var(--green);font-weight:600}.primary:hover{background:var(--green2)}.metrics{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:14px;gap:14px;margin-bottom:14px}.metrics article,.module-grid article,.module-hero,.panel{background:#fff;border:1px solid var(--line);border-radius:13px;box-shadow:0 4px 20px #183e2d08}.metrics article{display:flex;align-items:center;padding:18px;gap:13px}.metric-icon{width:43px;height:43px;display:grid;place-items:center;border-radius:11px;background:#e4f1ea;color:#287053;font-weight:700}.metric-icon.c1{background:#fff0dc;color:#a9661d}.metric-icon.c2{background:#e9efff;color:#4a66a1}.metric-icon.c3{background:#fdecea;color:#a94c43}.metrics p,.metrics small{margin:0;color:var(--muted);font-size:11px;display:block}.metrics strong{font-size:25px;margin-right:9px}.grid-main{display:grid;grid-template-columns:1.8fr 1fr;grid-gap:14px;gap:14px;margin-bottom:14px}.panel{padding:21px}.panel-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:17px}.panel-head h2{font-size:15px;margin:0 0 5px}.panel-head p{font-size:10px;color:var(--muted);margin:0}.panel-head button{border:0;background:transparent;color:var(--green);font-size:10px;cursor:pointer}.lesson{display:grid;grid-template-columns:57px 3px minmax(150px,1fr) 62px 38px 76px;grid-gap:12px;gap:12px;align-items:center;padding:12px 0;border-top:1px solid var(--line)}.lesson time{font-weight:700;font-size:13px}.lesson time small,.lesson-info span{display:block;font-size:9px;color:var(--muted);font-weight:400;margin-top:4px}.lesson>i{height:34px;border-radius:3px;background:#e2b554}.lesson>i.green{background:#63a982}.lesson>i.blue{background:#6c91c4}.lesson>i.red{background:#d9796d}.lesson-info strong{font-size:12px}.capacity{height:5px;background:#edf0ed;border-radius:8px;overflow:hidden}.capacity span{display:block;background:#58a77f;height:100%}.lesson b{font-size:10px}.lesson>button{border:1px solid #cddbd3;background:#f8fbf9;color:var(--green);border-radius:6px;padding:7px;cursor:pointer;font-size:9px}.task{display:flex;align-items:center;gap:10px;padding:13px 0;border-top:1px solid var(--line)}.task>span{font-size:9px;font-weight:800;padding:4px 6px;border-radius:5px}.p0{color:#a43f36;background:#fde9e7}.p1{color:#a46b23;background:#fff1dc}.task div{display:flex;flex-direction:column;flex:1 1}.task strong{font-size:11px}.task small{font-size:9px;color:var(--muted);margin-top:4px}.task button{border:1px solid var(--line);background:#fff;border-radius:50%;width:25px;height:25px;color:#8ba094;cursor:pointer}.grid-bottom{display:grid;grid-template-columns:2.1fr 1fr;grid-gap:14px;gap:14px}.table-wrap{width:100%;overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:10px;white-space:nowrap}th{text-align:left;color:#98a099;font-size:9px;font-weight:500;padding:8px}td,th{border-bottom:1px solid var(--line)}td{padding:11px 8px}td small{display:block;color:var(--muted);margin-top:3px}.strong-cell{font-weight:700}.stage{background:#eef5f1;color:#3c735a;border-radius:5px;padding:4px 7px}.due{color:#a34b42}.renewal{display:grid;grid-template-columns:115px 1fr}.renewal .panel-head{grid-column:1/-1}.ring{width:96px;height:96px;background:conic-gradient(#de796d 0 40%,#e6b65d 40% 60%,#5790c5 60% 100%);display:grid;place-items:center}.ring,.ring>div{border-radius:50%}.ring>div{width:68px;height:68px;background:#fff;display:grid;place-content:center;text-align:center}.ring strong{font-size:22px}.legend p,.ring small{color:var(--muted);font-size:9px}.legend p{margin:8px 0}.legend i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px}.legend b{float:right;color:var(--ink)}.red{background:#de796d}.orange{background:#e6b65d}.blue{background:#5790c5}.toast{position:fixed;z-index:20;right:30px;bottom:30px;background:#183f31;color:#fff;padding:13px 18px;border-radius:9px;box-shadow:0 8px 30px #0002;font-size:11px}.module-hero{padding:22px;display:flex;gap:16px;align-items:center}.module-hero>span{font-size:18px;font-weight:800;width:54px;height:54px;display:grid;place-items:center;background:#eaf2ed;border-radius:13px;color:var(--green)}.module-hero h2{margin:0 0 5px;font-size:19px}.module-hero p{margin:0;color:var(--muted);font-size:11px}.module-hero button{margin-left:auto}.module-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:14px;gap:14px;margin:14px 0}.module-grid article{padding:18px}.module-grid p,.module-grid small{display:block;color:var(--muted);font-size:9px;margin:0}.module-grid strong{display:block;font-size:25px;margin:6px 0}.module-table{min-height:330px}.module-table table{font-size:11px}.module-table td{padding:16px 10px}.row-avatar{display:inline-grid;place-items:center;width:27px;height:27px;border-radius:8px;background:#edf4f0;color:var(--green);margin-right:8px}.empty{text-align:center;padding:45px;color:var(--muted);font-size:11px}@media(max-width:1050px){.app-shell{grid-template-columns:78px 1fr}.sidebar{padding:22px 10px}.brand div,.profile>div:not(.avatar),.profile>span,.sidebar nav button div,.sync-card{display:none}.brand{padding:0 9px 25px}.sidebar nav button{justify-content:center}.content{padding:26px 22px}.metrics{grid-template-columns:repeat(2,1fr)}.grid-bottom,.grid-main{grid-template-columns:1fr}}@media(max-width:700px){.app-shell{display:block}.sidebar{position:fixed;z-index:10;bottom:0;top:auto;width:100%;height:67px;padding:7px}.brand,.profile,.sync-card{display:none}.sidebar nav{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:0;gap:0}.sidebar nav button{padding:9px 2px}.sidebar nav button>span{width:30px;height:30px}.content{padding:22px 14px 84px}header{display:block}.header-actions{margin-top:17px;overflow:auto}.metrics{grid-template-columns:1fr 1fr}.metrics article{padding:13px}.metric-icon{display:none}.lesson{grid-template-columns:51px 3px 1fr 36px}.lesson .capacity,.lesson>button{display:none}.renewal{grid-template-columns:100px 1fr}.module-grid{grid-template-columns:1fr}.module-hero{align-items:flex-start}.module-hero button{display:none}}:root{--font-sans:"Microsoft YaHei","PingFang SC","Noto Sans CJK SC","Source Han Sans SC",Arial,sans-serif;--text-xs:11px;--text-sm:13px;--text-md:15px;--text-lg:18px;--text-xl:28px;--weight-normal:400;--weight-medium:600;--weight-bold:700;--section-gap:24px}body,html{font-family:var(--font-sans);font-size:var(--text-sm);font-weight:var(--weight-normal);line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button,input,select,textarea{font-family:var(--font-sans);font-size:inherit;color:inherit}b,h1,h2,h3,strong{font-family:var(--font-sans)}h1{font-size:var(--text-xl);line-height:1.25}h1,h2{font-weight:var(--weight-bold)}h2{font-size:var(--text-lg);line-height:1.35}small{font-size:var(--text-xs);line-height:1.5}.grid-bottom{gap:20px;margin-top:var(--section-gap)}.grid-bottom .panel-head h2{font-size:var(--text-lg);font-weight:var(--weight-bold)}.grid-bottom .legend p,.grid-bottom .panel-head p,.grid-bottom th{font-size:var(--text-xs)}.grid-bottom table{font-size:var(--text-sm)}.sync-card div{min-width:0;flex:1 1}.sync-card i{flex:0 0 auto}.sync-card small{max-width:122px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sync-card button{border:1px solid #ffffff2d;border-radius:6px;background:#ffffff12;padding:5px 7px;color:#fff;font-size:var(--text-xs);cursor:pointer}.sync-card button:disabled{cursor:wait;opacity:.55}.sync-card.sync-error i{background:#ef8b7f;box-shadow:0 0 0 4px #ef8b7f24}@media (max-width:700px){:root{--section-gap:18px}.grid-bottom{gap:18px}}