:root{--blue:#1f4bff;--blue2:#3d7bff;--cyan:#38d6ff;--ink:#0b1530;--muted:#66708a;--silver:#eef1f7;--line:#dde3ee;--white:#fff;--ok:#12b76a;--warn:#f79009;--err:#e5484d;--r:18px;--shadow:0 10px 30px rgba(20,40,120,.10)}
*{box-sizing:border-box}html,body{margin:0}body{font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;color:var(--ink);background:linear-gradient(180deg,#f7f9fd 0%,#eef1f7 100%);min-height:100vh;-webkit-font-smoothing:antialiased}
a{color:var(--blue)}button,input,select,textarea{font:inherit}
.top{position:sticky;top:0;z-index:5;background:rgba(11,21,48,.96);backdrop-filter:blur(10px);color:#fff;padding:12px 18px;display:flex;align-items:center;gap:12px}
.logo{font-weight:800;letter-spacing:.14em;font-size:15px;display:flex;align-items:center;gap:8px}
.logo i{width:26px;height:26px;border-radius:8px;background:conic-gradient(from 200deg,var(--blue),var(--cyan),#c9d3e8,var(--blue));display:inline-block;box-shadow:0 0 18px rgba(56,214,255,.5)}
.top .shop{opacity:.7;font-size:13px;margin-left:auto}.top .x{background:none;border:0;color:#fff;font-size:24px;cursor:pointer;margin-left:6px}
.wrap{max-width:560px;margin:0 auto;padding:16px 16px 90px}
.wide{max-width:1080px}
.hero{background:radial-gradient(120% 140% at 0% 0%,#3d7bff 0%,#1f4bff 45%,#0b1a6b 100%);color:#fff;border-radius:24px;padding:22px;margin-bottom:16px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.hero h1{margin:0 0 6px;font-size:23px;line-height:1.2}.hero p{margin:0;opacity:.85;font-size:14px}
.hero:after{content:"";position:absolute;right:-40px;top:-40px;width:160px;height:160px;border-radius:50%;background:rgba(255,255,255,.12)}
.card{background:var(--white);border:1px solid var(--line);border-radius:var(--r);padding:16px;margin-bottom:14px;box-shadow:0 2px 10px rgba(20,40,120,.04)}
.card h2{font-size:16px;margin:0 0 12px;display:flex;align-items:center;gap:10px}
.num{width:26px;height:26px;border-radius:50%;background:var(--blue);color:#fff;display:inline-grid;place-items:center;font-size:13px;flex:none}
.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.prod{border:2px solid var(--line);border-radius:14px;overflow:hidden;cursor:pointer;background:#fff;transition:.15s;text-align:left;padding:0}
.prod img{width:100%;aspect-ratio:1;object-fit:cover;background:var(--silver);display:block}
.prod div{padding:8px 10px;font-size:13px}.prod b{display:block;font-weight:600;margin-bottom:2px}.prod span{color:var(--muted);font-size:12px}
.prod.sel{border-color:var(--blue);box-shadow:0 0 0 4px rgba(31,75,255,.12)}
.seg{display:flex;background:var(--silver);border-radius:12px;padding:4px;gap:4px;margin-bottom:12px}
.seg button{flex:1;border:0;background:none;padding:9px;border-radius:9px;cursor:pointer;color:var(--muted);font-weight:600;font-size:14px}
.seg button.on{background:#fff;color:var(--blue);box-shadow:0 2px 6px rgba(0,0,0,.08)}
label{font-size:13px;color:var(--muted);display:block;margin-bottom:5px}
.f{margin-bottom:12px}
input[type=number],input[type=text],input[type=password],select,textarea{width:100%;padding:12px 14px;border:1.5px solid var(--line);border-radius:12px;background:#fbfcff;outline:none;font-size:16px;color:var(--ink)}
input:focus,select:focus,textarea:focus{border-color:var(--blue);background:#fff}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.row3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:14px;padding:14px 18px;font-weight:700;cursor:pointer;font-size:15px;background:var(--silver);color:var(--ink);text-decoration:none}
.btn.primary{background:linear-gradient(135deg,var(--blue2),var(--blue));color:#fff;box-shadow:0 8px 20px rgba(31,75,255,.35)}
.btn.block{width:100%}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.sm{padding:8px 12px;font-size:13px;border-radius:10px}
.btn.danger{background:#fdecec;color:var(--err)}
.drop{border:2px dashed #b9c4dc;border-radius:16px;padding:18px;text-align:center;cursor:pointer;background:#fbfcff;color:var(--muted);font-size:14px;position:relative}
.drop img{max-width:100%;max-height:300px;border-radius:12px;display:block;margin:0 auto}
.drop input{position:absolute;inset:0;opacity:0;cursor:pointer}
.tips{font-size:12px;color:var(--muted);margin:8px 0 0;padding-left:18px}
details summary{cursor:pointer;color:var(--blue);font-weight:600;font-size:14px;margin:4px 0 10px}
.res-size{display:flex;align-items:center;gap:16px}
.badge{min-width:84px;height:84px;border-radius:22px;background:linear-gradient(135deg,var(--blue2),var(--blue));color:#fff;font-size:34px;font-weight:800;display:grid;place-items:center;box-shadow:0 10px 24px rgba(31,75,255,.3);padding:0 10px}
.notes{list-style:none;padding:0;margin:12px 0 0}.notes li{padding:8px 10px;background:var(--silver);border-radius:10px;margin-bottom:6px;font-size:14px}
.conf{height:8px;background:var(--silver);border-radius:9px;overflow:hidden;margin-top:6px}.conf i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),var(--blue))}
.muted{color:var(--muted);font-size:13px}.err{color:var(--err);font-size:14px}
.result img{width:100%;border-radius:16px;display:block}
.loader{padding:28px 10px;text-align:center}.scan{width:120px;height:160px;margin:0 auto 14px;border-radius:16px;background:linear-gradient(180deg,#eef1f7,#dfe6f5);position:relative;overflow:hidden}
.scan:after{content:"";position:absolute;left:0;right:0;height:3px;background:var(--cyan);box-shadow:0 0 16px var(--cyan);animation:scan 1.6s ease-in-out infinite}
@keyframes scan{0%{top:0}50%{top:100%}100%{top:0}}
.stick{position:fixed;left:0;right:0;bottom:0;padding:12px 16px calc(12px + env(safe-area-inset-bottom));background:linear-gradient(180deg,rgba(238,241,247,0),#eef1f7 35%);z-index:4}.stick .btn{max-width:528px;margin:0 auto;display:flex}
.hide{display:none!important}
.chip{display:inline-block;padding:4px 10px;border-radius:99px;background:#e8eeff;color:var(--blue);font-size:12px;font-weight:700}
.compare{display:grid;grid-template-columns:1fr 1fr;gap:8px}.compare img{width:100%;border-radius:12px}
/* admin */
.layout{display:grid;grid-template-columns:220px 1fr;gap:18px}
.side .btn{width:100%;justify-content:flex-start;margin-bottom:6px;background:transparent}.side .btn.on{background:#fff;color:var(--blue);box-shadow:var(--shadow)}
table{width:100%;border-collapse:collapse;font-size:14px}th,td{padding:8px;border-bottom:1px solid var(--line);text-align:left}th{color:var(--muted);font-weight:600;font-size:12px}
.chart-ed input{padding:7px 8px;font-size:13px;border-radius:8px;min-width:46px}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}.kpi{background:#fff;border:1px solid var(--line);border-radius:16px;padding:14px}.kpi b{font-size:28px;display:block;color:var(--blue)}.kpi span{color:var(--muted);font-size:13px}
.bars{display:flex;align-items:flex-end;gap:6px;height:150px;padding-top:10px}.bars div{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;font-size:10px;color:var(--muted);height:100%}.bars i{display:block;width:100%;background:linear-gradient(180deg,var(--cyan),var(--blue));border-radius:6px 6px 0 0;min-height:2px}
.plist img{width:52px;height:52px;object-fit:cover;border-radius:10px;background:var(--silver)}
pre.code{background:#0b1530;color:#cfe0ff;padding:14px;border-radius:12px;overflow:auto;font-size:12.5px;white-space:pre-wrap;word-break:break-all}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--ink);color:#fff;padding:10px 16px;border-radius:12px;font-size:14px;z-index:99}
@media(max-width:820px){.layout{grid-template-columns:1fr}.kpis{grid-template-columns:1fr 1fr}.side{display:flex;gap:6px;overflow:auto}.side .btn{width:auto}}
.chart-ed input{border:1px solid #dfe5f2;border-radius:8px;padding:6px 8px;font:inherit;background:#f7f9fd}
