:root{--green:#087754;--dark:#073f32;--ink:#213d35;--muted:#82928c;--line:#e7ede9;--bg:#f4f7f5;--gold:#d6b15b}*{box-sizing:border-box}body{margin:0;color:var(--ink);font:14px 'Microsoft YaHei','Segoe UI',sans-serif}button,input,select{font:inherit}button{cursor:pointer;border:1px solid #dce6df;background:white;color:#456156;padding:10px 16px;border-radius:7px}button:hover{background:#edf5ef}button:disabled{opacity:.45;cursor:not-allowed}input,select{border:1px solid #dce5df;border-radius:7px;padding:10px;background:white;color:var(--ink)}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #d6b15b}label{display:block}.primary{background:var(--green);color:white;border-color:var(--green)}.primary:hover{background:#056447}[hidden]{display:none!important}#login{min-height:100vh;display:grid;grid-template-columns:55% 45%}.login-art{background:radial-gradient(ellipse at 80% 60%,#167d58,transparent 65%),#063f32;color:#fff;padding:48px 9%;position:relative;overflow:hidden}.brand{width:210px;background:white;padding:12px;border-radius:3px}.art-copy{margin-top:100px;position:relative;z-index:1}.eyebrow{letter-spacing:3px;font-size:11px;color:#a1b5aa}.art-copy h1{font-size:48px;line-height:1.55;font-weight:500;letter-spacing:3px;margin:24px 0}.art-copy p{color:#afcfc0;letter-spacing:4px}.login-art>small{position:absolute;bottom:35px;color:#a1beae}.warehouse{margin-top:62px;transform:skewY(-7deg);border-top:18px solid #719787;background:#d4ded4;padding:25px 25px 0;height:160px;box-shadow:25px 25px 0 #092d25;position:relative;color:#0a694b}.warehouse>div{font-weight:bold;margin-bottom:22px}.warehouse i{display:inline-block;width:12%;height:66px;background:repeating-linear-gradient(#33554b 0 5px,#4b6a5e 6px 8px);margin-right:3%}.login-form{display:flex;align-items:center;justify-content:center;position:relative;padding:42px}.login-box{width:380px}.login-box h2{font-size:32px;margin:22px 0 12px}.org{font-size:14px;color:#7b8a84;line-height:1.8;margin-bottom:35px}.login-box label{margin-top:22px;font-weight:600;font-size:13px}.login-box input{display:block;width:100%;margin-top:10px;height:48px}.login-box .primary{width:100%;margin-top:15px;padding:15px;text-align:left}.primary span{float:right}.login-hint{font-size:11px;color:#8a9990;margin-top:22px}.login-form footer{position:absolute;bottom:30px;font-size:9px;color:#a0aaa4;letter-spacing:1.4px}#loginError{color:#b64938;font-size:12px}#app{min-height:100vh;background:var(--bg)}aside{width:222px;position:fixed;inset:0 auto 0 0;background:#fff;border-right:1px solid var(--line);padding:28px 16px;display:flex;flex-direction:column}.side-brand{padding:0 14px 30px}.side-brand img{width:158px;display:block;margin-bottom:22px}.side-brand b{display:block;font-size:18px}.side-brand small{display:block;font-size:11px;color:var(--muted);margin-top:7px;letter-spacing:2px}.nav-label{font-size:11px;color:#a0ada5;padding:10px 15px}nav button{display:flex;align-items:center;width:100%;border:0;text-align:left;margin:7px 0;padding:13px 16px;color:#72837a;background:transparent;gap:13px}nav button.active{background:#e7f3ec;color:var(--green);font-weight:600}nav button span{font-size:17px;width:20px;font-weight:400}.side-bottom{margin-top:auto;padding:20px 12px;font-size:12px;color:#628171}.side-bottom small{display:block;margin:8px 0 0 13px;color:#9aa89f;font-size:10px}.online{display:inline-block;width:6px;height:6px;background:#3d9b65;border-radius:50%}main{margin-left:222px}header{background:#fff;min-height:100px;padding:23px 34px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}h2{margin:9px 0 0;font-size:23px}.breadcrumb{font-size:11px;color:#93a197}.header-actions{display:flex;align-items:center;gap:12px}.header-actions button{font-size:12px}.badge{background:#fff5db;color:#99782b;border:1px solid #f2e4b8;border-radius:5px;padding:6px 9px;font-size:11px}.badge.real{color:#087754;background:#e8f3ec;border-color:#cfe4d7}.content{padding:26px 34px}.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:23px}.toolbar b{font-size:16px}.toolbar p{font-size:11px;color:var(--muted);margin-bottom:0}.filters{display:flex;gap:10px;align-items:end}.filters label{font-size:10px;color:#819288}.filters input,.filters select{display:block;margin-top:6px;font-size:12px;height:36px}.filters button{font-size:12px;height:36px}.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:22px}.kpi{background:#fff;border:1px solid var(--line);border-radius:10px;padding:20px 22px;position:relative}.kpi:first-child{background:var(--green);color:white;border-color:var(--green)}.kpi-label{font-size:12px;color:#80938a}.kpi:first-child .kpi-label,.kpi:first-child small{color:#bbdbcb}.kpi strong{display:block;font-size:30px;letter-spacing:-1px;margin:12px 0 9px;font-family:'Segoe UI',sans-serif;font-weight:600}.kpi small{font-size:10px;color:#92a298}.chart-grid{display:grid;grid-template-columns:1.65fr 1fr;gap:20px}.panel{background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden}.panel-head{display:flex;align-items:center;justify-content:space-between;padding:21px 23px 0;gap:14px}h3{font-size:14px;margin:0;font-weight:600}.panel-head>span{font-size:10px;color:#9aa89f}.chart{height:290px;width:100%}.insight{display:flex;align-items:center;gap:19px;background:#eaf2ed;border:1px solid #dce9e0;border-radius:8px;padding:12px 19px;margin:20px 0}.insight>span{font-size:12px;color:var(--green);white-space:nowrap;font-weight:bold}.insight p{font-size:12px;color:#678072;line-height:1.8;margin:0}.details .panel-head{padding-bottom:16px}.panel-head p{font-size:11px;color:#96a39b;margin:8px 0 0;line-height:1.6}.table-wrap{overflow:auto;max-height:350px}table{width:100%;border-collapse:collapse;font-size:12px;white-space:nowrap}th,td{text-align:right;padding:13px 20px;border-bottom:1px solid #f0f3f1}th{background:#f8faf8;color:#85958a;font-weight:400;position:sticky;top:0}td:first-child,th:first-child{text-align:left}tr:hover td{background:#f8fbf9}.content footer{padding-top:23px;color:#a2ada5;font-size:10px;display:flex;justify-content:space-between}dialog{width:700px;max-width:95vw;border:0;border-radius:12px;padding:28px;color:var(--ink);box-shadow:0 25px 100px #0003}dialog::backdrop{background:#0c2d2366;backdrop-filter:blur(3px)}.modal-head{display:flex;justify-content:space-between;align-items:center}.modal-head h2{font-size:20px;margin:0}dialog p{font-size:12px;line-height:1.7;color:#7d8d83}dialog label{margin:16px 0;font-size:12px}dialog label input{display:block;margin-top:8px}.upload{padding:22px;background:#f3f8f4;border:1px dashed #b8d6c3;border-radius:7px}.modal-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:20px}.modal-actions button{font-size:12px}#importPreview{font-size:12px;line-height:1.8;max-height:220px;overflow:auto;color:#557562}hr{border:0;border-top:1px solid var(--line);margin:24px 0}#toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);background:#163e30;color:white;padding:12px 22px;border-radius:8px;display:none;z-index:100}.empty{padding:45px;color:#89978e;text-align:center}@media(max-width:1100px){.toolbar{align-items:start;gap:16px;flex-direction:column}.content{padding:22px}.kpi{padding:16px}.kpi strong{font-size:24px}.chart-grid{grid-template-columns:1fr 1fr}header{padding:22px}.header-actions{gap:6px}}@media(max-width:760px){#login{grid-template-columns:1fr}.login-art{display:none}.login-form{min-height:100vh;padding:28px}aside{position:static;width:100%;padding:16px}.side-brand{padding:0;display:flex;align-items:center;gap:12px}.side-brand img{width:110px;margin:0}.side-brand small,.side-bottom,.nav-label{display:none}nav{display:flex;overflow:auto;margin-top:15px}nav button{white-space:nowrap;width:auto;padding:10px}main{margin:0}header{align-items:start;gap:12px}.header-actions{flex-wrap:wrap;justify-content:end}.header-actions button{padding:7px}.kpis{grid-template-columns:repeat(2,1fr)}.chart-grid{grid-template-columns:1fr}.filters{flex-wrap:wrap}.content{padding:16px}.content footer span{display:none}}@media print{aside,header button,.filters,#login,dialog{display:none!important}main{margin:0}.content{padding:0}.chart-grid,.kpis{break-inside:avoid}.table-wrap{max-height:none}}
