:root{--c:#07c160;--cd:#06a050;--cl:#e6f7ee;--r:#ee4a50;--rl:#fff1f0;--w:#fa8c16;--wl:#fff7e6;--bl:#3b82f6;--bll:#eff6ff;--t:#1a1a1a;--t2:#555;--t3:#999;--bg:#f5f6fa;--bd:#eee;--rd:14px}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Helvetica Neue',sans-serif;background:var(--bg);color:var(--t);font-size:14px;-webkit-font-smoothing:antialiased;line-height:1.5}
input,select,textarea,button{font-family:inherit;font-size:inherit}
.page{padding-bottom:68px;min-height:100vh}

/* ---- Header ---- */
.page-header{background:linear-gradient(135deg,#07c160 0%,#10b981 50%,#059669 100%);color:#fff;padding:20px 20px 56px;position:relative}
.page-header .title{font-size:20px;font-weight:700;letter-spacing:.5px;display:flex;align-items:center;gap:6px}
.page-header .title svg{width:20px;height:20px}
.page-header .subtitle{font-size:12px;opacity:.75;margin-top:3px}
.page-header .hd-right{position:absolute;top:20px;right:16px;display:flex;align-items:center;gap:4px;color:rgba(255,255,255,.85);font-size:13px;cursor:pointer;padding:4px 10px;border-radius:20px;background:rgba(255,255,255,.15);backdrop-filter:blur(4px)}
.page-header .hd-right svg{width:16px;height:16px}

/* ---- Tab bar ---- */
.tab-bar{position:fixed;bottom:0;left:0;right:0;height:58px;background:#fff;border-top:1px solid #f0f0f0;display:flex;z-index:99;padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -2px 12px rgba(0,0,0,.04)}
.tab-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:10px;color:var(--t3);cursor:pointer;transition:color .2s;gap:2px;position:relative}
.tab-item svg{width:22px;height:22px;transition:all .2s}
.tab-item.active{color:var(--c);font-weight:600}
.tab-item.active svg{transform:scale(1.1)}
.tab-item.active::after{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:20px;height:2px;background:var(--c);border-radius:0 0 2px 2px}

/* ---- Login ---- */
.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#07c160 0%,#10b981 50%,#059669 100%);padding:24px}
.login-box{background:#fff;border-radius:20px;padding:40px 24px 32px;width:100%;max-width:340px;box-shadow:0 16px 48px rgba(0,0,0,.12)}
.login-logo{text-align:center;margin-bottom:28px}
.login-logo .logo-icon{width:56px;height:56px;border-radius:16px;background:var(--cl);display:flex;align-items:center;justify-content:center;margin:0 auto 12px}
.login-logo .logo-icon svg{width:32px;height:32px;color:var(--c)}
.login-logo h2{font-size:22px;font-weight:700;margin-top:0}
.login-logo p{font-size:13px;color:var(--t3);margin-top:4px}

/* ---- Forms ---- */
.form-group{margin-bottom:16px}
.form-group label{display:flex;align-items:center;gap:4px;font-size:13px;color:var(--t2);margin-bottom:6px;font-weight:500}
.form-group label svg{width:14px;height:14px;color:var(--t3)}
.form-group input,.form-group select{width:100%;padding:12px 14px;border:1.5px solid #e8e8e8;border-radius:12px;font-size:15px;outline:none;transition:border-color .2s,box-shadow .2s;background:#fafbfc}
.form-group input:focus{border-color:var(--c);box-shadow:0 0 0 3px rgba(7,193,96,.1);background:#fff}
.form-group input:disabled{background:#f5f5f5;color:var(--t3)}

/* ---- Buttons ---- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:10px 20px;border:none;border-radius:10px;font-size:14px;font-weight:500;cursor:pointer;transition:all .15s;background:#f0f1f3;color:var(--t)}
.btn:active{transform:scale(.97);opacity:.9}
.btn-primary{background:var(--c);color:#fff}
.btn-primary:active{background:var(--cd)}
.btn-danger{background:var(--r);color:#fff}
.btn-warn{background:var(--w);color:#fff}
.btn-blue{background:var(--bl);color:#fff}
.btn-block{display:flex;width:100%;padding:14px;font-size:16px;border-radius:12px;font-weight:600}
.btn-sm{padding:7px 14px;font-size:12px;border-radius:8px}

/* ---- Stat grid ---- */
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:0 16px;margin-top:-36px;position:relative;z-index:2}
.stat-card{background:#fff;border-radius:var(--rd);padding:18px 10px 14px;text-align:center;box-shadow:0 2px 12px rgba(0,0,0,.06)}
.stat-card .val{font-size:28px;font-weight:800;line-height:1}
.stat-card .val.green{color:var(--c)}
.stat-card .val.red{color:var(--r)}
.stat-card .val.blue{color:var(--bl)}
.stat-card .lbl{font-size:11px;color:var(--t3);margin-top:8px;font-weight:500}

/* ---- Quick Actions ---- */
.quick-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0;padding:0 16px;margin-top:16px}
.quick-item{display:flex;flex-direction:column;align-items:center;padding:14px 4px;cursor:pointer;transition:background .15s;border-radius:12px}
.quick-item:active{background:rgba(0,0,0,.03)}
.quick-icon{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;margin-bottom:6px}
.quick-icon svg{width:22px;height:22px}
.quick-icon.gi{background:var(--cl);color:var(--c)}
.quick-icon.ri{background:var(--rl);color:var(--r)}
.quick-icon.wi{background:var(--wl);color:var(--w)}
.quick-icon.bi{background:var(--bll);color:var(--bl)}
.quick-label{font-size:12px;color:var(--t2)}

/* ---- Section ---- */
.section{padding:0 16px;margin-top:20px}
.section-hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.section-title{font-size:16px;font-weight:700;display:flex;align-items:center;gap:6px}
.section-title svg{width:18px;height:18px;color:var(--c)}
.section-more{font-size:13px;color:var(--t3);cursor:pointer}

/* ---- Cards ---- */
.card{background:#fff;border-radius:var(--rd);margin:12px 16px;padding:18px;box-shadow:0 1px 6px rgba(0,0,0,.04)}
.card-title{font-size:16px;font-weight:700;margin-bottom:14px;display:flex;align-items:center;gap:6px}
.card-title svg{width:18px;height:18px;color:var(--c)}

/* ---- Order cards ---- */
.order-card{background:#fff;border-radius:var(--rd);margin:10px 16px;padding:16px;box-shadow:0 1px 6px rgba(0,0,0,.04)}
.order-hd{display:flex;justify-content:space-between;align-items:center}
.order-no{font-size:12px;color:var(--t3);font-family:'SF Mono',Menlo,Consolas,monospace}
.order-goods{margin:10px 0;font-size:13px;color:var(--t2);line-height:1.7}
.order-ft{display:flex;justify-content:space-between;align-items:center}
.order-price{font-size:20px;font-weight:800;color:var(--t)}
.order-meta{font-size:11px;color:var(--t3)}
.order-actions{display:flex;gap:8px;margin-top:12px}
.order-actions .btn{flex:1}

/* mini order card for dashboard */
.mini-order{display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #f5f5f5;gap:12px}
.mini-order:last-child{border-bottom:none}
.mini-order .mo-icon{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.mini-order .mo-icon.paid{background:var(--wl);color:var(--w)}
.mini-order .mo-icon.preparing{background:var(--bll);color:var(--bl)}
.mini-order .mo-icon.delivering{background:var(--cl);color:var(--c)}
.mini-order .mo-icon.completed{background:#f5f5f5;color:#999}
.mini-order .mo-icon svg{width:18px;height:18px}
.mini-order .mo-info{flex:1;min-width:0}
.mini-order .mo-title{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mini-order .mo-sub{font-size:12px;color:var(--t3);margin-top:2px}
.mini-order .mo-price{font-size:15px;font-weight:700;flex-shrink:0}

/* ---- Goods cards ---- */
.goods-card{background:#fff;border-radius:var(--rd);margin:10px 16px;padding:16px;box-shadow:0 1px 6px rgba(0,0,0,.04)}
.goods-hd{display:flex;justify-content:space-between;align-items:flex-start}
.goods-name{font-size:15px;font-weight:600;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.goods-sub{font-size:12px;color:var(--t3);margin-top:4px}
.goods-ft{display:flex;align-items:center;justify-content:space-between;margin-top:14px}
.stock-wrap{display:flex;align-items:center;gap:8px}
.stock-wrap span{font-size:13px;color:var(--t2);font-weight:500}
.stock-input{width:64px;padding:7px 8px;border:1.5px solid #e8e8e8;border-radius:8px;font-size:14px;text-align:center;outline:none}
.stock-input:focus{border-color:var(--c);box-shadow:0 0 0 3px rgba(7,193,96,.1)}

/* ---- Badges ---- */
.badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:10px;font-size:11px;font-weight:600}
.badge-green{background:#e6f7ee;color:#07c160}
.badge-yellow{background:#fff7e6;color:#e8890c}
.badge-red{background:#fff1f0;color:#ee4a50}
.badge-blue{background:#eff6ff;color:#3b82f6}
.badge-gray{background:#f5f5f5;color:#999}

/* ---- Filters ---- */
.filter-bar{display:flex;gap:8px;padding:12px 16px;overflow-x:auto;-webkit-overflow-scrolling:touch}
.filter-bar::-webkit-scrollbar{display:none}
.chip{padding:8px 18px;border-radius:20px;font-size:13px;background:#fff;color:var(--t2);cursor:pointer;border:1.5px solid #ebebeb;white-space:nowrap;transition:all .15s;font-weight:500}
.chip.active{background:var(--cl);color:var(--c);border-color:#b7ebd0;font-weight:600}

/* ---- Empty ---- */
.empty{text-align:center;padding:52px 20px;color:var(--t3);font-size:14px}
.empty svg{width:56px;height:56px;color:#ddd;margin-bottom:12px;display:block;margin-left:auto;margin-right:auto}

/* ---- Table ---- */
.trend-table{width:100%;font-size:13px;border-collapse:collapse}
.trend-table th{text-align:left;color:var(--t3);font-weight:500;padding:8px 0;border-bottom:1.5px solid var(--bd);font-size:12px}
.trend-table td{padding:11px 0;border-bottom:1px solid #fafafa;font-weight:500}
.trend-table tr:last-child td{border-bottom:none}

/* ---- Tip banner ---- */
.tip-banner{background:linear-gradient(135deg,#fffbe6 0%,#fff7e6 100%);border:1px solid #ffe58f;border-radius:var(--rd);padding:14px 16px;margin:0 16px;margin-top:16px;display:flex;align-items:center;gap:10px;font-size:13px;color:#ad6800}
.tip-banner svg{width:20px;height:20px;flex-shrink:0;color:#faad14}

/* ---- Animations ---- */
@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
.card,.order-card,.goods-card{animation:fadeUp .3s ease}
.stat-card{animation:fadeUp .35s ease}
.stat-grid:nth-child(2) .stat-card{animation-delay:.05s}
