:root{
  --bg:#f4f6f8;--card:#fff;--ink:#172027;--muted:#66727d;--line:#dde3e8;
  --green:#14785d;--green-dark:#0e5d49;--green-soft:#e9f4ef;
  --cyan:#147d94;--cyan-soft:#e8f5f7;--orange:#b9691f;--orange-soft:#fff1df;
  --red:#bd4545;--red-soft:#fcebea;--blue:#356eaa;--blue-soft:#eaf2fb;
  --sidebar:#fbfcfc;--sidebar-hover:#eef3f1;--shadow:0 1px 2px rgba(21,35,43,.04),0 6px 20px rgba(21,35,43,.04);
  --topbar-h:64px;--sidebar-w:248px;
}
*{box-sizing:border-box}
html,body,#app,.shell{width:100%;height:100%;margin:0}
body{overflow:hidden;font-family:"Microsoft YaHei","PingFang SC",Arial,sans-serif;background:var(--bg);color:var(--ink);font-size:14px}
button,input,select,textarea{font:inherit;letter-spacing:0}button{cursor:pointer;border:0}.hidden{display:none!important}svg{display:block}

/* Login */
.login-page{height:100vh;display:grid;grid-template-columns:minmax(500px,1.05fr) minmax(500px,.95fr);background:#f6f8f8}
.login-art{padding:54px 9%;background:#123e36;color:#fff;position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between}
.login-art:after{content:"";position:absolute;inset:auto -18% -36% 28%;height:82%;border:1px solid rgba(255,255,255,.1);transform:rotate(-8deg);border-radius:48% 52% 0 0;box-shadow:0 0 0 70px rgba(255,255,255,.025),0 0 0 140px rgba(255,255,255,.018)}
.brand-mark{display:flex;align-items:center;gap:12px;font-size:18px;font-weight:700;position:relative;z-index:1}.brand-mark span{width:36px;height:36px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.35);font-size:12px}
.login-intro{position:relative;z-index:1;max-width:600px}.eyebrow{font-size:11px;letter-spacing:2px;color:#76c7aa;font-weight:700}.login-intro h1{font-size:46px;line-height:1.28;margin:18px 0 18px}.login-intro p{max-width:520px;font-size:16px;color:#c5dcd6;line-height:1.8;margin:0}.login-metrics{display:flex;gap:44px;margin-top:48px}.login-metrics div{display:flex;flex-direction:column;gap:6px}.login-metrics b{font-size:30px}.login-metrics span{font-size:12px;color:#a9c7bf}.login-foot{font-size:12px;color:#8fb1a8;position:relative;z-index:1}
.login-panel{display:grid;place-items:center;padding:40px}.login-card{width:min(420px,100%);background:#fff;padding:42px;border:1px solid #e2e7e5;border-radius:8px;box-shadow:0 24px 70px rgba(26,52,45,.09);position:relative}.login-badge{position:absolute;right:40px;top:38px;width:42px;height:42px;border-radius:8px;background:var(--green-soft);color:var(--green);display:grid;place-items:center}.login-badge svg{width:21px}.login-card h2{font-size:28px;margin:12px 0 7px}.muted{color:var(--muted);font-size:13px}.login-card form{margin-top:30px}.login-card label{display:block;font-size:12px;color:#4c5962;margin:18px 0}.input-shell{height:44px;margin-top:8px;border:1px solid var(--line);border-radius:6px;display:flex;align-items:center;padding:0 12px;gap:9px;transition:.16s}.input-shell:focus-within{border-color:var(--green);box-shadow:0 0 0 3px rgba(20,120,93,.1)}.input-shell svg{width:17px;color:#8a969e}.input-shell input{width:100%;height:100%;border:0;outline:0;background:transparent}.primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--green);color:#fff;border-radius:6px;padding:11px 16px;font-weight:600;transition:.15s}.primary:hover{background:var(--green-dark)}.primary svg{width:17px}.full{width:100%;margin-top:10px}.error{color:var(--red);font-size:12px;min-height:18px;margin-top:10px}.demo-account{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-top:24px;padding-top:18px;border-top:1px solid var(--line)}.demo-account b{color:#34414a}

/* Application shell: viewport is fixed; sidebar and content scroll independently. */
.admin-shell:not(.hidden){height:100vh;display:grid;grid-template-rows:var(--topbar-h) minmax(0,1fr);overflow:hidden}
.topbar{height:var(--topbar-h);background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 22px;z-index:30;min-width:0}
.topbar-left,.top-actions,.brand,.user-menu,.date-chip{display:flex;align-items:center}.topbar-left{gap:14px;min-width:0}.brand{gap:10px;font-size:16px;font-weight:700;white-space:nowrap}.brand small{font-weight:400;font-size:11px;color:#7a8790;padding-left:10px;border-left:1px solid var(--line)}.brand-icon{background:var(--green);color:#fff;border-radius:6px;width:32px;height:32px;display:grid;place-items:center;font-size:11px;font-weight:800}.page-context{height:34px;margin-left:12px;padding-left:20px;border-left:1px solid var(--line);display:flex;align-items:center;gap:8px;white-space:nowrap}.page-context span{font-size:11px;color:#8a959d}.page-context b{font-size:13px}.top-actions{gap:12px;color:var(--muted);font-size:12px}.icon-btn{width:34px;height:34px;padding:0;border-radius:6px;background:#f4f6f7;color:#53616a;display:grid;place-items:center}.icon-btn:hover{background:var(--green-soft);color:var(--green)}.icon-btn svg{width:17px}.date-chip{gap:7px;padding:0 10px;height:34px;background:#f7f8f9;border-radius:6px}.date-chip svg{width:15px}.user-menu{gap:9px;padding-left:12px;border-left:1px solid var(--line)}.avatar{width:32px;height:32px;border-radius:50%;background:#d8ede5;color:var(--green);display:grid;place-items:center;font-weight:700}.user-copy{display:flex;flex-direction:column;gap:2px}.user-copy b{font-size:12px;color:var(--ink)}.user-copy small{font-size:10px;color:#8a959d}.text-btn{background:none;color:#6c7881;font-size:12px;padding:8px}.text-btn:hover{color:var(--red)}
.layout{display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr);height:100%;min-height:0;overflow:hidden;transition:grid-template-columns .2s ease}
.sidebar{height:100%;min-height:0;background:var(--sidebar);border-right:1px solid var(--line);display:grid;grid-template-rows:auto minmax(0,1fr) auto;overflow:hidden;z-index:25}
.sidebar-workspace{display:flex;align-items:center;gap:11px;margin:16px 14px 8px;padding:13px;background:#f0f5f3;border:1px solid #e0e9e5;border-radius:8px;white-space:nowrap;overflow:hidden}.workspace-icon{width:34px;height:34px;flex:none;border-radius:6px;background:#fff;color:var(--green);display:grid;place-items:center;border:1px solid #d8e5df}.workspace-icon svg{width:18px}.sidebar-workspace div{display:flex;flex-direction:column;gap:3px}.sidebar-workspace b{font-size:13px}.sidebar-workspace small{font-size:10px;color:#78868e}
.nav-scroll{min-height:0;overflow-y:auto;overflow-x:hidden;padding:6px 10px 20px;scrollbar-width:thin;scrollbar-color:#cbd5d1 transparent}.nav-scroll::-webkit-scrollbar,.content::-webkit-scrollbar{width:7px;height:7px}.nav-scroll::-webkit-scrollbar-thumb,.content::-webkit-scrollbar-thumb{background:#cbd5d1;border-radius:10px}.nav-group{margin-bottom:5px}.nav-group[hidden]{display:none}.side-title{width:100%;height:34px;display:flex;align-items:center;justify-content:space-between;background:transparent;border-radius:5px;font-size:10px;font-weight:700;color:#7e8a92;padding:0 10px;white-space:nowrap;text-align:left}.side-title:hover{background:#f1f4f3;color:#4b5961}.side-title svg{width:14px;height:14px;transition:transform .18s ease}.nav-group.collapsed .side-title svg{transform:rotate(-90deg)}.nav-group.collapsed .nav-item{display:none!important}.nav-item{position:relative;width:100%;height:38px;background:transparent;color:#53616a;text-align:left;border-radius:6px;padding:0 11px;margin:2px 0;font-size:12px;display:flex;align-items:center;gap:11px;white-space:nowrap;overflow:hidden}.nav-item svg{width:17px;height:17px;flex:none;color:#78878f}.nav-item:hover{background:var(--sidebar-hover);color:#26333b}.nav-item.active{background:#dfeee8;color:var(--green-dark);font-weight:700}.nav-item.active:before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:0 3px 3px 0;background:var(--green)}.nav-item.active svg{color:var(--green)}
.sidebar-foot{height:62px;display:flex;align-items:center;gap:9px;padding:0 18px;border-top:1px solid var(--line);background:#fff;white-space:nowrap;overflow:hidden}.sidebar-foot>div{display:flex;flex-direction:column;gap:2px}.sidebar-foot b{font-size:11px;color:#526069}.sidebar-foot small{font-size:9px;color:#929da4}.status-dot{width:8px;height:8px;flex:none;background:#34a879;border-radius:50%;box-shadow:0 0 0 4px rgba(52,168,121,.12)}
.nav-scrim{display:none}
.sidebar-collapsed .layout{grid-template-columns:76px minmax(0,1fr)}.sidebar-collapsed .sidebar-workspace{justify-content:center;padding:10px;margin-inline:12px}.sidebar-collapsed .sidebar-workspace>div,.sidebar-collapsed .side-title,.sidebar-collapsed .nav-item span,.sidebar-collapsed .sidebar-foot>div{display:none}.sidebar-collapsed .nav-group.collapsed .nav-item{display:flex!important}.sidebar-collapsed .nav-item{justify-content:center;padding:0}.sidebar-collapsed .sidebar-foot{justify-content:center;padding:0}.sidebar-collapsed .menu-toggle svg{transform:rotate(180deg)}
.content{height:100%;min-width:0;overflow:auto;padding:26px clamp(20px,2.4vw,38px) 44px;scrollbar-width:thin;scrollbar-color:#cbd5d1 transparent}.content>*{max-width:1540px;margin-left:auto;margin-right:auto}

/* Page components */
.page-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:20px}.page-head h1{font-size:24px;line-height:1.2;margin:0 0 6px;letter-spacing:0}.page-head p{font-size:12px;color:var(--muted);margin:0}.head-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ghost{display:inline-flex;align-items:center;justify-content:center;background:#fff;border:1px solid var(--line);color:#4f5d66;border-radius:6px;padding:9px 13px;text-decoration:none}.ghost:hover{border-color:#b8c6c0;color:var(--green);background:#fbfdfc}
.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.kpi{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:18px;position:relative;box-shadow:var(--shadow);min-height:126px}.kpi .label{font-size:11px;color:var(--muted)}.kpi .value{font-size:28px;font-weight:750;margin:13px 0 8px}.kpi .trend{font-size:11px;color:var(--green)}.kpi .trend.warning{color:var(--orange)}.kpi .kpi-icon{position:absolute;right:16px;top:16px;width:36px;height:36px;border-radius:7px;background:var(--green-soft);display:grid;place-items:center;color:var(--green);font-size:17px}.kpi .kpi-icon svg{width:18px}.kpi .kpi-icon.cyan{background:var(--cyan-soft);color:var(--cyan)}.kpi .kpi-icon.warning{background:var(--orange-soft);color:var(--orange)}.grid-2{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(320px,.9fr);gap:14px;margin-top:14px}.card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:18px;box-shadow:var(--shadow)}.card-title{font-size:14px;font-weight:700;margin-bottom:16px;display:flex;justify-content:space-between;align-items:center;gap:12px}.card-title small{font-size:10px;font-weight:400;color:var(--muted)}
.chart{height:220px;display:flex;align-items:flex-end;gap:18px;padding:18px 10px 8px;border-bottom:1px solid var(--line);position:relative}.chart-empty{height:220px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8b969d;gap:7px}.chart-empty svg{width:30px;height:30px;color:#aab5ba;margin-bottom:4px}.chart-empty b{font-size:13px;color:#64717a}.chart-empty span{font-size:10px}.bar{flex:1;max-width:46px;background:linear-gradient(#52b69a,var(--green));border-radius:4px 4px 0 0;position:relative;min-height:12px}.bar span{position:absolute;bottom:-24px;left:50%;transform:translateX(-50%);font-size:10px;color:var(--muted)}.bar i{position:absolute;top:-18px;left:50%;transform:translateX(-50%);font-style:normal;font-size:10px;color:var(--muted)}.donut-wrap{display:flex;align-items:center;justify-content:center;gap:28px;height:220px}.donut{width:148px;height:148px;border-radius:50%;background:conic-gradient(var(--green) 0 42%,#4aa0b5 42% 70%,#e4a64c 70% 88%,#b579a0 88%);position:relative}.donut:after{content:"";position:absolute;inset:31px;background:#fff;border-radius:50%}.legend{font-size:11px;color:#5f6c75;line-height:2}.legend b{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:7px}
.table-card{margin-top:14px;padding:0;overflow:hidden}.table-card>.card-title{min-height:58px;margin:0;padding:14px 18px;border-bottom:1px solid var(--line);background:#fff}.table-card>.data-table,.table-card>#orderTable,.table-card>#productTable,.table-card>#userTable,.table-card>#moduleTable,.table-card>#recentOrders{display:block;width:100%;overflow:auto}.table-tools{display:flex;gap:8px;align-items:center}.search,.select{height:36px;border:1px solid var(--line);background:#fff;padding:0 11px;border-radius:6px;color:#4e5b64;outline:none}.search{min-width:230px}.search:focus,.select:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(20,120,93,.08)}.data-table{width:100%;min-width:760px;border-collapse:separate;border-spacing:0;font-size:12px}.data-table th{position:sticky;top:0;z-index:2;text-align:left;color:#687681;font-weight:600;background:#f5f7f8;padding:11px 14px;border-bottom:1px solid var(--line);white-space:nowrap}.data-table td{padding:13px 14px;border-bottom:1px solid #edf0f2;vertical-align:middle;color:#34414a}.data-table tr:last-child td{border-bottom:0}.data-table tbody tr:hover td{background:#f8fbfa}.data-table td b{color:#1e2a31}.product-cell{display:flex;align-items:center;gap:10px;min-width:190px}.product-cell img,.service-image-fallback{width:42px;height:42px;flex:none;border-radius:5px;object-fit:cover;background:#eef2f0;border:1px solid var(--line)}.service-image-fallback{display:grid!important;place-items:center;color:var(--green)}.service-image-fallback svg{width:17px}.product-cell div{display:flex;flex-direction:column;gap:4px}.product-cell span{font-size:10px;color:var(--muted);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge{display:inline-flex;align-items:center;font-size:10px;padding:4px 8px;border-radius:99px;background:#eef2f4;color:#5c6973;white-space:nowrap}.badge.green{background:#e4f3ec;color:#167354}.badge.orange{background:var(--orange-soft);color:var(--orange)}.badge.red{background:var(--red-soft);color:var(--red)}.badge.blue{background:var(--blue-soft);color:var(--blue)}.link-btn{background:none;color:var(--green);font-size:11px;margin-right:10px;padding:3px 0;font-weight:600}.link-btn:hover{text-decoration:underline}.link-btn.action{color:var(--blue)}.link-btn.danger{color:var(--red)}.row-actions{white-space:nowrap}.price{font-weight:700;color:#c65f32}.empty{padding:44px;text-align:center;color:var(--muted);font-size:12px}.empty.compact{padding:22px}
.feature-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:14px}.filter-card{align-self:start;position:sticky;top:0}.filter-card button{display:block;width:100%;text-align:left;background:none;padding:10px 11px;border-radius:5px;color:#5f6d76;font-size:11px}.filter-card button.active,.filter-card button:hover{background:var(--green-soft);color:var(--green);font-weight:700}.feature-list{max-height:calc(100vh - 190px);overflow:auto}.feature-item{padding:13px 0;border-bottom:1px solid var(--line);display:grid;grid-template-columns:130px 150px minmax(0,1fr);gap:12px;align-items:start}.feature-item:last-child{border-bottom:0}.feature-item b{font-size:12px}.feature-item p{margin:0;color:#6d7982;line-height:1.6;font-size:11px}
.modal-backdrop{position:fixed;inset:0;background:rgba(19,29,34,.48);display:grid;place-items:center;z-index:100;padding:24px}.modal{width:min(620px,100%);max-height:calc(100vh - 48px);overflow:auto;background:#fff;border-radius:8px;padding:24px;box-shadow:0 24px 80px rgba(0,0,0,.24)}.modal h3{margin:0 0 20px;font-size:19px}.form-heading{margin-bottom:20px}.form-heading span{font-size:10px;font-weight:700;letter-spacing:1px;color:var(--green)}.form-heading h3{margin:5px 0 7px}.form-heading p{margin:0;color:#78848c;font-size:11px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form-grid label{font-size:11px;color:#59666f}.form-grid label em,.dialog-field em{color:var(--red);font-style:normal;margin-left:3px}.form-grid input,.form-grid select,.form-grid textarea{width:100%;padding:10px;border:1px solid var(--line);border-radius:6px;margin-top:7px;outline:none}.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(20,120,93,.08)}.form-grid .full-row{grid-column:1/-1}.form-grid textarea{min-height:80px;resize:vertical}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:22px}.danger-button{background:var(--red);color:#fff;border-radius:6px;padding:11px 16px;font-weight:600}.danger-button:disabled,.primary:disabled{opacity:.55;cursor:wait}.dialog-field{display:block;font-size:11px;color:#59666f}.dialog-field textarea{width:100%;min-height:110px;margin-top:8px;padding:10px;border:1px solid var(--line);border-radius:6px;resize:vertical;outline:none}.dialog-field textarea:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(20,120,93,.08)}.upload-field>span{float:right;color:#8b969d;font-size:10px}.upload-field>input{height:auto;padding:9px;background:#f8faf9}.upload-preview{min-height:112px;margin-top:10px;padding:10px;border:1px dashed #cbd7d2;border-radius:6px;background:#f8faf9;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.upload-placeholder{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#77858d}.upload-placeholder svg{width:23px;color:var(--green)}.upload-placeholder b{font-size:11px}.upload-placeholder small{font-size:9px}.upload-thumb{width:88px;height:88px;position:relative;border-radius:5px;overflow:hidden;border:1px solid var(--line)}.upload-thumb img{width:100%;height:100%;object-fit:cover}.upload-thumb span{position:absolute;left:4px;bottom:4px;background:rgba(20,32,38,.72);color:#fff;padding:2px 5px;border-radius:3px;font-size:9px}.uploading,.upload-error{width:100%;text-align:center;color:#77858d;font-size:11px}.upload-error{color:var(--red)}.detail-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:20px}.detail-heading h3{margin:4px 0 0}.detail-kicker{font-size:10px;font-weight:700;color:var(--green);letter-spacing:1px}.detail-grid{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--line);border-radius:7px;overflow:hidden}.detail-grid>div{display:flex;flex-direction:column;gap:6px;padding:13px 15px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.detail-grid>div:nth-child(2n){border-right:0}.detail-grid>div:nth-last-child(-n+2){border-bottom:0}.detail-grid span{font-size:10px;color:#7a868e}.detail-grid b{font-size:12px}.detail-section{margin-top:22px}.material-list{display:flex;gap:8px;flex-wrap:wrap}.material-list a,.material-list>span{padding:8px 10px;border-radius:5px;background:var(--green-soft);color:var(--green);font-size:10px;text-decoration:none}.reject-note{display:flex;flex-direction:column;gap:5px;margin-top:18px;padding:12px;background:var(--red-soft);color:var(--red);border-radius:6px;font-size:11px}.event-list{border-left:1px solid #d8e4df;margin-left:6px}.detail-event{display:flex;gap:12px;padding:0 0 17px 15px;position:relative}.detail-event>i{position:absolute;left:-5px;top:4px;width:9px;height:9px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px var(--green-soft)}.detail-event div{display:flex;flex-direction:column;gap:4px}.detail-event b{font-size:12px}.detail-event span{font-size:11px;color:#5f6c75}.detail-event small{font-size:9px;color:#939da4}

@media(max-width:1180px){:root{--sidebar-w:220px}.kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-2{grid-template-columns:1fr}.date-chip{display:none}.page-context{display:none}}
@media(max-width:760px){.login-page{grid-template-columns:1fr}.login-art{display:none}.login-panel{padding:20px}.login-card{padding:30px}.admin-shell:not(.hidden){grid-template-rows:58px minmax(0,1fr)}.topbar{height:58px;padding:0 14px}.brand small,.user-copy,.top-actions>.icon-btn{display:none}.layout{display:block;position:relative}.sidebar{position:absolute;left:0;top:0;bottom:0;width:min(286px,84vw);transform:translateX(-102%);transition:transform .2s ease;box-shadow:12px 0 30px rgba(23,32,39,.16)}.sidebar-open .sidebar{transform:translateX(0)}.nav-scrim{position:absolute;inset:0;z-index:20;background:rgba(24,34,40,.38);border:0}.sidebar-open .nav-scrim{display:block}.sidebar-collapsed .layout{display:block}.sidebar-collapsed .sidebar-workspace{justify-content:flex-start;padding:13px}.sidebar-collapsed .sidebar-workspace>div,.sidebar-collapsed .side-title,.sidebar-collapsed .nav-item span,.sidebar-collapsed .sidebar-foot>div{display:flex}.sidebar-collapsed .side-title{display:flex}.sidebar-collapsed .nav-group.collapsed .nav-item{display:none!important}.sidebar-collapsed .nav-item{justify-content:flex-start;padding:0 11px}.sidebar-collapsed .sidebar-foot{justify-content:flex-start;padding:0 18px}.content{padding:18px 14px 36px}.page-head{align-items:flex-start;flex-direction:column}.head-actions{width:100%}.kpi-grid{grid-template-columns:1fr 1fr;gap:10px}.kpi{padding:15px;min-height:112px}.kpi .value{font-size:24px}.feature-layout{grid-template-columns:1fr}.feature-item{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}.form-grid .full-row{grid-column:auto}}
@media(max-width:480px){.kpi-grid{grid-template-columns:1fr}.brand>span:nth-child(2){display:none}.login-card{padding:26px}.modal{padding:18px}}
