:root{--brand:#e02c50;--bg:#f4f5f8;--card:#fff;--ink:#1c2330;--muted:#7a8494;--line:#e4e8ee;--ok:#0a8f4e}
*{box-sizing:border-box}
.hidden{display:none!important}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.6 -apple-system,"PingFang SC","Microsoft YaHei",sans-serif}
header{display:flex;justify-content:space-between;align-items:center;padding:14px 22px 6px;flex-wrap:wrap;gap:8px}
header h1{margin:0;font-size:19px}
.sub{color:var(--muted);font-size:12.5px}
nav{display:flex;gap:2px;padding:8px 22px;border-bottom:1px solid var(--line);flex-wrap:wrap}
nav button{border:0;background:none;padding:8px 13px;border-radius:8px 8px 0 0;font:inherit;cursor:pointer;color:var(--muted)}
nav button.on{background:var(--card);color:var(--brand);font-weight:600;border:1px solid var(--line);border-bottom-color:var(--card)}
main{padding:16px 22px 60px;max-width:1280px;margin:0 auto}
.tab{display:none}.tab.on{display:block}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:14px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.row-between{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
input,select,textarea{padding:8px 10px;border:1px solid var(--line);border-radius:8px;font:inherit;background:#fbfcfe;color:var(--ink)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(224,44,80,.1)}
textarea{width:100%;font-family:ui-monospace,Menlo,monospace;font-size:12.5px}
.btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 14px;cursor:pointer;font:inherit}
.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.btn-primary:hover{filter:brightness(1.07)}
.btn:disabled{opacity:.5}
.btn-sm{padding:5px 10px;font-size:12.5px}
.inline{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--muted)}
.muted{color:var(--muted);font-size:12.5px}
.hint{color:var(--muted);font-size:12.5px}
.status{font-size:13px;color:var(--muted)}
.err-text{color:#dc2626;font-size:13px}
.linkish{background:none;border:0;color:var(--brand);cursor:pointer;font-size:12px;padding:0}
.log{background:#10141c;color:#c8d2e0;border-radius:8px;padding:12px;font:12.5px/1.7 ui-monospace,Menlo,monospace;max-height:280px;overflow:auto;white-space:pre-wrap;word-break:break-all}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:12px}
.chip{padding:3px 10px;border-radius:20px;background:#eef0f5;font-size:12.5px}
.chip.ok{background:#e5f6ec;color:var(--ok)}
.alert-bar{background:#fff3f4;border:1px solid #ffd4db;color:#b91c1c;border-radius:10px;padding:9px 14px;margin-bottom:12px;font-size:13px}
.basis-tabs{display:flex;gap:4px;background:#eef0f5;border-radius:9px;padding:3px}
.basis-tab{border:0;background:none;padding:5px 11px;border-radius:7px;cursor:pointer;font:inherit;font-size:13px;color:var(--muted)}
.basis-tab.active{background:#fff;color:var(--brand);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.prod{padding:12px}
.prod-top{display:flex;gap:10px}
.prod-top img{width:88px;height:88px;object-fit:cover;border-radius:8px;background:#f0f1f4}
.prod-info{display:flex;flex-direction:column;gap:2px;font-size:12.8px;min-width:0}
.prod-info .t2{font-weight:600;color:var(--ink);text-decoration:none}
.price{color:var(--brand);font-size:15px}
.wtab{width:100%;border-collapse:collapse;margin-top:8px;font-size:12.5px}
.wtab th{background:#f3f5f8;color:var(--muted);font-weight:500}
.wtab th,.wtab td{border:1px solid var(--line);padding:3px 6px;text-align:center}
.fav-btn{margin-top:8px;width:100%}
.thumb{width:44px;height:44px;object-fit:cover;border-radius:6px}
table{width:100%;border-collapse:collapse;font-size:13px;margin-top:6px}
th,td{border:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}
th{background:#f3f5f8;white-space:nowrap}
.rank-layout{display:grid;grid-template-columns:280px 1fr;gap:14px}
.rank-shops{max-height:80vh;overflow:auto}
.rshop{padding:9px 10px;border-radius:8px;cursor:pointer;display:flex;flex-direction:column;gap:2px}
.rshop:hover{background:#f6f7fa}
.rshop.on{background:#fdeef1;border:1px solid #ffc9d3}
.center{text-align:center;padding:14px}
.modal{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:50}
.modal-card{background:#fff;border-radius:14px;padding:20px;width:min(520px,92vw);display:flex;flex-direction:column;gap:12px}
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1c2330,#3a2230)}
.login-card{background:#fff;border-radius:16px;padding:34px 38px;width:min(380px,92vw);display:flex;flex-direction:column;gap:12px}
.login-card h1{font-size:19px;margin:0}
.role-badge{font-size:12px;color:var(--brand);border:1px solid var(--brand);border-radius:12px;padding:2px 9px}
.region-sel{width:auto}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.form-grid input[type=checkbox]{width:auto}
