:root{--brand:#0E3B2E;--brand-d:#082A20;--brand-mid:#17503F;--brand-soft:#E8F0EB;--green:#35C26E;--ok:#1E9E50;--blue:#2E6FDB;--accent:var(--brand);--accent-d:var(--brand-d);--ink:#1E2A24;--muted:#66756D;--line:#DCE5DE;--bg:#F6F8F6;--card:#FFFFFF;--chip:var(--brand-soft);--warn:#D97706;--bad:#C0392B;--font-sans:-apple-system,"PingFang SC","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--font-serif:Georgia,"Times New Roman","Songti SC","STSong","SimSun","Noto Serif SC",serif}*{box-sizing:border-box}body{margin:0;font-family:var(--font-sans);background:var(--bg);color:var(--ink);font-size:14px;line-height:1.55}a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}button{cursor:pointer;font:inherit}input,select,textarea{font:inherit;padding:7px 9px;border:1px solid var(--line);border-radius:6px;background:#fff;width:100%;color:var(--ink)}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(14,59,46,.12)}label{display:block;font-size:12px;color:var(--muted);margin:8px 0 3px}.btn{display:inline-block;background:var(--brand);color:#fff;border:none;padding:7px 14px;border-radius:6px;transition:background .15s ease}.btn:hover{background:var(--brand-d)}.btn.ghost{background:#fff;color:var(--brand);border:1px solid var(--brand)}.btn.ghost:hover{background:var(--brand-soft)}.btn.small{padding:3px 9px;font-size:12px}.btn.danger{background:var(--bad)}.btn:disabled{opacity:.5;cursor:not-allowed}.topbar{background:var(--brand);color:#fff;padding:10px 18px;display:flex;align-items:center;gap:18px;flex-wrap:wrap;box-shadow:0 1px 0 var(--brand-d),0 4px 14px rgba(14,59,46,.18)}.topbar .brand{font-family:var(--font-serif);font-weight:700;font-size:18px;letter-spacing:.06em}.topbar .company{color:#A9C6B8;font-size:12px;letter-spacing:.08em}.topbar nav{display:flex;gap:4px;flex-wrap:wrap}.topbar nav a{color:#D5E6DC;padding:5px 10px;border-radius:6px;border-bottom:2px solid transparent}.topbar nav a:hover{text-decoration:none}.topbar nav a.on,.topbar nav a:hover{background:var(--brand-mid);color:#fff}.topbar nav a.on{border-bottom-color:var(--green)}.topbar .who{margin-left:auto;color:#D5E6DC;font-size:12px;display:flex;gap:10px;align-items:center}.topbar .btn.ghost{background:transparent;color:#EAF3ED;border-color:#7FA693}.topbar .btn.ghost:hover{background:var(--brand-mid)}.wrap{max-width:1240px;margin:0 auto;padding:20px 16px 28px}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px 18px;margin-bottom:16px}.card h2{margin:0 0 12px;font-family:var(--font-serif);font-size:19px;font-weight:700;letter-spacing:.02em}.card h2,.card h3{color:var(--brand)}.card h3{margin:14px 0 6px;font-size:14px}.grid{display:grid;grid-gap:10px;gap:10px}.grid.c2{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.grid.c3{grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}.grid.c4{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}table{width:100%;border-collapse:collapse;font-size:13px}td,th{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}th{background:var(--brand-soft);color:var(--brand);font-weight:600;white-space:nowrap}.chip{display:inline-block;background:var(--chip);border:1px solid var(--line);border-radius:20px;padding:2px 9px;font-size:12px;margin:0 4px 4px 0;color:var(--ink)}button.chip{cursor:pointer}.chip.on{background:var(--brand);color:#fff;border-color:var(--brand)}.tag{display:inline-block;border-radius:4px;padding:1px 6px;font-size:11px;color:#fff}.tag.ok{background:var(--ok)}.tag.warn{background:var(--warn)}.tag.bad{background:var(--bad)}.tag.info{background:var(--blue)}.tag.grey{background:#8A978F}.muted{color:var(--muted)}.small{font-size:12px}.red{color:var(--bad);font-weight:600}.kpi{display:flex;gap:12px;flex-wrap:wrap}.kpi .box{background:#fff;border:1px solid var(--line);border-top:3px solid var(--brand);border-radius:8px;padding:10px 14px;min-width:130px}.kpi .box b{display:block;font-family:var(--font-serif);font-size:21px;color:var(--brand);letter-spacing:.01em}.cube{border:1px solid var(--line);border-radius:10px;padding:10px;background:#fff;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}.cube:hover{border-color:var(--brand);box-shadow:0 2px 10px rgba(14,59,46,.08)}.cube b{display:block;margin-bottom:2px}.err{background:#FDECEA;color:var(--bad);border:1px solid #f2c1bb;border-radius:6px}.err,.okmsg{padding:8px 12px;margin-bottom:10px}.okmsg{background:#EAF7EF;color:var(--ok);border:1px solid #bfe6cc}.okmsg,.progress{border-radius:6px}.progress{height:10px;background:var(--brand-soft);overflow:hidden;display:flex}.progress .own{background:var(--brand)}.progress .join{background:var(--green)}details.fold>summary{cursor:pointer;font-weight:600;padding:4px 0;color:var(--brand)}.inline-form{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-gap:0 10px;gap:0 10px}.auth-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px 16px;background:linear-gradient(160deg,rgba(53,194,110,.16) 0,rgba(53,194,110,0) 42%),repeating-linear-gradient(0deg,rgba(255,255,255,.045) 0 2px,transparent 2px 74px),repeating-linear-gradient(90deg,rgba(255,255,255,.03) 0 2px,transparent 2px 148px),linear-gradient(150deg,#114534 0,var(--brand) 46%,var(--brand-d) 100%)}.auth-panel{width:100%;max-width:430px}.auth-brand{text-align:center;color:#fff;margin-bottom:22px}.auth-brand .en{font-size:11px;letter-spacing:.42em;color:var(--green);text-transform:uppercase;margin-bottom:10px}.auth-brand h1{font-family:var(--font-serif);font-size:34px;font-weight:700;letter-spacing:.1em;margin:0 0 8px}.auth-brand .rule{width:54px;height:3px;background:var(--green);border-radius:2px;margin:12px auto}.auth-brand .co{font-size:12px;letter-spacing:.14em;color:#A9C6B8}.auth-panel .card{box-shadow:0 18px 44px rgba(0,0,0,.28);border:none;margin-bottom:0}.auth-panel .card h2{text-align:center}.auth-wrap{max-width:400px;margin:8vh auto}canvas.pack3d{width:100%;height:460px;display:block;background:#0A241C;border-radius:8px}