:root{--ink:#0b1b3a;--ink2:#2a3a5c;--mute:#6578a0;--line:#dfe9fb;--soft:#f3f8ff;--blue:#2563eb;--blue2:#3b82f6;--sky:#60a5fa;--ice:#eaf2ff;--green:#10b981;--red:#ef4444;--warn:#f59e0b;--r:20px;--w:980px;--sh:0 1px 2px rgba(37,99,235,.05),0 14px 34px -14px rgba(37,99,235,.22);--sh2:0 2px 4px rgba(37,99,235,.06),0 24px 48px -16px rgba(37,99,235,.34);--font:'Plus Jakarta Sans',system-ui,-apple-system,'Segoe UI','Noto Sans Bengali','Hind Siliguri',Roboto,sans-serif;--mono:'JetBrains Mono',ui-monospace,Menlo,Consolas,monospace}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;touch-action:manipulation}
body{margin:0;min-height:100vh;min-height:100dvh;background:radial-gradient(520px 520px at 100% 0,rgba(59,130,246,.15),transparent 70%) no-repeat,radial-gradient(460px 460px at 0 100%,rgba(96,165,250,.11),transparent 70%) no-repeat,#fff;color:var(--ink);font:500 14px/1.55 var(--font);-webkit-font-smoothing:antialiased}
body.lock{overflow:hidden}
a{color:inherit;text-decoration:none}button,input,textarea,select{font:inherit;color:inherit}
input,textarea,select{font-size:16px}
img,svg{max-width:100%}
.glow{display:none}
.g1{width:520px;height:520px;right:-200px;top:-220px;background:radial-gradient(circle,rgba(59,130,246,.2),transparent 68%)}
.g2{width:460px;height:460px;left:-220px;bottom:-200px;background:radial-gradient(circle,rgba(96,165,250,.15),transparent 70%)}
.top{position:sticky;top:0;z-index:40;padding-top:env(safe-area-inset-top,0);background:rgba(255,255,255,.96);border-bottom:1px solid var(--line)}
.top-in{position:relative;z-index:3;max-width:var(--w);margin:0 auto;height:64px;padding:0 18px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.brand{display:flex;align-items:center;gap:11px;font-weight:800;font-size:16px;letter-spacing:-.3px;min-width:0}
.brand b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.brand img,.mark{width:38px;height:38px;border-radius:12px;object-fit:cover;flex:none}
.mark{display:grid;place-items:center;color:#fff;font-weight:800;font-size:19px;background:linear-gradient(135deg,#60a5fa,#2563eb);box-shadow:0 8px 20px -6px rgba(37,99,235,.65),inset 0 1px 0 rgba(255,255,255,.4)}
.icon-btn{width:42px;height:42px;border:0;cursor:pointer;border-radius:14px;display:grid;place-items:center;color:var(--blue);background:var(--ice);transition:.2s;flex:none}
.icon-btn:hover,.icon-btn[aria-expanded=true]{background:var(--blue);color:#fff;box-shadow:0 8px 20px -6px rgba(37,99,235,.6)}
/* three-dot admin menu */
.menu-wrap{position:relative}
.menu-bg{position:fixed;inset:0;z-index:1;background:rgba(11,27,58,.22);opacity:0;pointer-events:none;transition:opacity .18s}
.menu-bg.open{opacity:1;pointer-events:auto}
.menu{position:absolute;right:0;top:calc(100% + 12px);z-index:2;width:268px;max-width:calc(100vw - 28px);background:#fff;border:1px solid var(--line);border-radius:20px;box-shadow:var(--sh2);padding:8px;opacity:0;transform:translateY(-8px) scale(.97);transform-origin:top right;pointer-events:none;transition:opacity .18s,transform .18s}
.menu.open{opacity:1;transform:none;pointer-events:auto}
.menu-t{padding:10px 12px 8px;font-size:11.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--mute)}
.menu a{display:flex;align-items:center;gap:12px;padding:13px 12px;border-radius:14px;font-weight:700;font-size:14.5px;color:var(--ink2);transition:.18s}
.menu a:hover{background:var(--soft);color:var(--blue)}
.menu a.on{color:#fff;background:linear-gradient(135deg,#4f9bff,#2563eb);box-shadow:0 10px 22px -10px rgba(37,99,235,.75),inset 0 1px 0 rgba(255,255,255,.35)}
.menu a.out{color:var(--red)}.menu a.out:hover{background:#fff0f0;color:#dc2626}
.menu hr{border:0;border-top:1px solid var(--line);margin:6px 6px}
.wrap>*{min-width:0}
.wrap{max-width:var(--w);margin:0 auto;padding:22px 18px 56px;min-height:calc(100vh - 140px);min-height:calc(100dvh - 140px)}
.foot{text-align:center;color:var(--mute);font-size:12px;padding:22px 12px calc(22px + env(safe-area-inset-bottom,0))}
.flash{padding:13px 16px;border-radius:14px;margin-bottom:16px;font-size:13px;font-weight:600;line-height:1.5;animation:fadeIn .25s both;overflow-wrap:anywhere}
.flash.ok{background:#e8fbf3;color:#047857;border:1px solid #bdf0d9}.flash.error{background:#fff0f0;color:#b91c1c;border:1px solid #ffd0d0}
h1,h2,h3{margin:0;letter-spacing:-.03em;line-height:1.15}
h1{font-size:clamp(28px,6vw,40px);font-weight:800}h2{font-size:18px;font-weight:800}h3{font-size:15px;font-weight:700}
.sub{color:var(--mute);margin:8px 0 0;font-size:14px}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:20px;margin-bottom:16px;position:relative;transition:box-shadow .25s,transform .25s,border-color .25s;animation:fadeIn .25s ease both}
.card.lift:hover{box-shadow:var(--sh2);border-color:#bcd3fa;transform:translateY(-2px)}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}
.card-h p{margin:4px 0 0;color:var(--mute);font-size:13px}
.ic{flex:none}
/* premium buttons (user + admin) */
.btn{position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;gap:9px;border:0;cursor:pointer;color:#fff;font-weight:700;font-size:14px;padding:13px 20px;border-radius:15px;background:linear-gradient(135deg,#4f9bff 0%,#2563eb 100%);box-shadow:0 12px 26px -10px rgba(37,99,235,.75),inset 0 1px 0 rgba(255,255,255,.38);transition:transform .18s,box-shadow .25s,filter .2s;white-space:nowrap;text-decoration:none;touch-action:manipulation}
.btn::after{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.45) 50%,transparent 65%);transform:translateX(-120%);transition:transform .7s;pointer-events:none}
.btn:hover{transform:translateY(-2px);box-shadow:0 18px 34px -12px rgba(37,99,235,.85),inset 0 1px 0 rgba(255,255,255,.4)}
.btn:hover::after{transform:translateX(120%)}
.btn:active{transform:translateY(0) scale(.97)}
.btn.ghost{background:#fff;color:var(--blue);border:1px solid var(--line);box-shadow:var(--sh)}
.btn.ghost:hover{border-color:var(--sky);background:var(--soft)}
.btn.red{background:linear-gradient(135deg,#ff7a6b,#ef4444);box-shadow:0 12px 26px -10px rgba(239,68,68,.75),inset 0 1px 0 rgba(255,255,255,.35)}
.btn.red:hover{box-shadow:0 18px 34px -12px rgba(239,68,68,.85),inset 0 1px 0 rgba(255,255,255,.4)}
.btn.green{background:linear-gradient(135deg,#34d399,#059669);box-shadow:0 12px 26px -10px rgba(16,185,129,.75),inset 0 1px 0 rgba(255,255,255,.35)}
.btn.green:hover{box-shadow:0 18px 34px -12px rgba(16,185,129,.85),inset 0 1px 0 rgba(255,255,255,.4)}
.btn.sm{padding:9px 14px;font-size:13px;border-radius:12px}
.btn.xl{width:100%;padding:0;height:72px;font-size:19px;border-radius:22px;gap:12px}
.btn.xl .ic{width:26px;height:26px}
.btn.full{width:100%}
.btn.busy{pointer-events:none;filter:saturate(.7) brightness(1.05)}
.btn.busy span::after{content:"…"}
.btn:disabled,.btn.dis{opacity:.55;pointer-events:none;filter:grayscale(.3)}
.af{margin:0;display:contents}
.row-btns{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.row-btns .af,.row-btns>*{display:block}.row-btns .btn{width:100%}
/* inputs */
.field{display:block;margin-bottom:14px;font-size:13px;font-weight:700;color:var(--ink2)}
.field input:not([type=checkbox]):not([type=radio]):not([type=file]),.field textarea,.field select{display:block;width:100%;margin-top:7px;padding:14px 15px;border:1.5px solid var(--line);border-radius:14px;background:var(--soft);outline:none;font-weight:500;transition:.2s;-webkit-appearance:none;appearance:none}
.field textarea{min-height:150px;resize:vertical;line-height:1.55}
.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--blue2);background:#fff;box-shadow:0 0 0 5px rgba(59,130,246,.14)}
.field small{display:block;margin-top:5px;font-weight:500;color:var(--mute);font-size:12px}
.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
.fgrid .wide{grid-column:1/-1}
.drop{display:flex;align-items:center;gap:14px;margin-top:7px;padding:16px;border:1.5px dashed #b7cffa;border-radius:16px;background:linear-gradient(180deg,#f8fbff,#eef5ff);cursor:pointer;transition:.25s;position:relative}
.drop:hover,.drop.on{border-color:var(--blue);background:#eaf2ff;box-shadow:0 0 0 5px rgba(59,130,246,.1)}
.drop input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.drop .di{width:44px;height:44px;border-radius:14px;background:#fff;color:var(--blue);display:grid;place-items:center;box-shadow:var(--sh);flex:none}
.drop b{display:block;font-size:14px;overflow-wrap:anywhere}.drop small{color:var(--mute);font-weight:500;font-size:12px}
.chk{display:flex;align-items:center;gap:10px;font-size:13px;font-weight:600;color:var(--ink2);margin:4px 0 16px}
.chk input{width:18px;height:18px;accent-color:var(--blue);flex:none}
/* status */
.pill{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:99px;font-size:12px;font-weight:700;background:#eef2f9;color:#5b6b8a;white-space:nowrap}
.pill i{width:7px;height:7px;border-radius:50%;background:currentColor}
.pill.running,.pill.ok{background:#e6faf1;color:#059669}.pill.running i{animation:blink 1.6s infinite;box-shadow:0 0 0 4px rgba(16,185,129,.18)}
.pill.error{background:#fff0f0;color:#dc2626}.pill.warn{background:#fff7e6;color:#d97706}
/* hero + stats */
.hero{margin:6px 0 22px}
.hero .sub{max-width:520px}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}
.stats.four{grid-template-columns:repeat(2,1fr)}
.stat{padding:16px 16px 15px;margin:0}
.stat span{display:block;color:var(--mute);font-size:12px;font-weight:600}
.stat strong{display:block;margin-top:6px;font-size:22px;font-weight:800;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.stat strong.t{font-size:18px}
.cols{display:grid;grid-template-columns:1fr;gap:0 16px}
/* bot cards */
.bot{display:flex;align-items:center;gap:14px;padding:16px}
.av{width:52px;height:52px;border-radius:16px;display:grid;place-items:center;color:#fff;font-weight:800;font-size:20px;background:linear-gradient(135deg,#7db6ff,#2563eb);box-shadow:0 10px 22px -8px rgba(37,99,235,.6),inset 0 1px 0 rgba(255,255,255,.4);flex:none}
.bot .meta{min-width:0;flex:1}.bot .meta h3{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bot .meta small{color:var(--mute);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:12px}
.bot .acts{display:flex;gap:8px;align-items:center}
.empty{text-align:center;padding:36px 16px;color:var(--mute)}
.empty .di{width:60px;height:60px;margin:0 auto 12px;border-radius:20px;background:var(--ice);color:var(--blue);display:grid;place-items:center}
.bh{display:flex;gap:16px;align-items:center;margin-bottom:16px;animation:fadeIn .25s ease both}
.bh .av{width:62px;height:62px;font-size:25px;border-radius:19px}
.bh h1{font-size:26px;overflow-wrap:anywhere}.bh small{color:var(--mute)}
.bh .pill{margin-top:8px}
/* tabs (scroll sideways: the 5th tab "Broadcast" sits to the right) */
.tabs{position:sticky;top:calc(64px + env(safe-area-inset-top,0px));z-index:15;display:flex;gap:4px;padding:5px;margin:0 0 18px;background:rgba(255,255,255,.97);border:1px solid var(--line);border-radius:18px;box-shadow:var(--sh);overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.tabs::-webkit-scrollbar{display:none}
.tabs a{flex:1 0 auto;display:flex;align-items:center;justify-content:center;gap:7px;padding:11px 16px;border-radius:13px;font-weight:700;font-size:13.5px;color:var(--mute);transition:.25s;white-space:nowrap}
.tabs a:hover{color:var(--blue);background:var(--soft)}
.tabs a.on{color:#fff;background:linear-gradient(135deg,#4f9bff,#2563eb);box-shadow:0 10px 22px -8px rgba(37,99,235,.7),inset 0 1px 0 rgba(255,255,255,.35)}
/* list rows */
.list{margin:-6px 0}
.li{display:flex;align-items:center;gap:13px;padding:14px 4px;border-bottom:1px solid #edf3fd;transition:.2s}
.li:last-child{border-bottom:0}
a.li:hover{padding-left:10px;color:var(--blue)}
.li .di{width:40px;height:40px;border-radius:13px;background:var(--ice);color:var(--blue);display:grid;place-items:center;flex:none}
.li .t{flex:1;min-width:0}.li .t b{display:block;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.li .t small{color:var(--mute);font-size:12px;display:block;overflow:hidden;text-overflow:ellipsis}
.li .go{color:#9db4de}
.li .mini{display:flex;gap:6px}
.mb{width:36px;height:36px;border-radius:11px;border:1px solid var(--line);background:#fff;color:var(--blue);display:grid;place-items:center;cursor:pointer;transition:.2s;flex:none;padding:0;touch-action:manipulation}
.mb:hover{background:var(--blue);color:#fff;border-color:var(--blue)}.mb.d{color:var(--red)}.mb.d:hover{background:var(--red);color:#fff;border-color:var(--red)}
.mb.done{background:var(--green);color:#fff;border-color:var(--green)}
.mb-f{margin:0}
.danger{border-color:#ffd9d9;background:linear-gradient(180deg,#fff,#fff8f8)}
.log{background:#0c1a36;color:#cfe0ff;border-radius:16px;padding:16px;min-height:300px;max-height:62vh;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.7 var(--mono);margin:0;box-shadow:inset 0 0 0 1px #1c2e55}
.note{font-size:12.5px;color:var(--mute);margin:12px 0 0;line-height:1.7}
.note code,.sub code{background:var(--ice);color:var(--blue);padding:2px 7px;border-radius:7px;font-size:12px}
/* login */
.auth{min-height:calc(100vh - 190px);min-height:calc(100dvh - 190px);display:grid;place-items:center}
.auth-card{width:100%;max-width:430px;padding:30px 26px}
.auth-card .big{width:58px;height:58px;border-radius:19px;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,#7db6ff,#2563eb);box-shadow:0 16px 30px -10px rgba(37,99,235,.7),inset 0 1px 0 rgba(255,255,255,.4);margin-bottom:20px}
.auth-card h1{font-size:30px;margin-bottom:8px}
.feats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:24px}
.ft{padding:14px;border:1px solid var(--line);border-radius:16px;background:linear-gradient(180deg,#fff,#f6faff)}
.ft .di{width:36px;height:36px;border-radius:12px;background:var(--ice);color:var(--blue);display:grid;place-items:center;margin-bottom:10px}
.ft b{display:block;font-size:13.5px;letter-spacing:-.01em}.ft small{display:block;margin-top:3px;color:var(--mute);font-size:11.5px;line-height:1.45;font-weight:500}
.sups{display:grid;gap:10px;margin-top:16px}
.sup{position:relative;overflow:hidden;display:flex;align-items:center;gap:12px;padding:12px 16px 12px 12px;border-radius:20px;color:#fff;transition:transform .18s,box-shadow .25s}
.sup::after{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.4) 50%,transparent 65%);transform:translateX(-120%);transition:transform .7s;pointer-events:none}
.sup:hover{transform:translateY(-2px)}.sup:hover::after{transform:translateX(120%)}.sup:active{transform:scale(.98)}
.sup.tg{background:linear-gradient(135deg,#3bb4e8,#1c93c6);box-shadow:0 14px 28px -12px rgba(34,158,217,.8),inset 0 1px 0 rgba(255,255,255,.4)}
.sup.wa{background:linear-gradient(135deg,#3fdc78,#128c7e);box-shadow:0 14px 28px -12px rgba(18,140,126,.8),inset 0 1px 0 rgba(255,255,255,.4)}
.sup .sl{width:46px;height:46px;border-radius:15px;background:#fff;display:grid;place-items:center;flex:none;box-shadow:0 6px 14px -6px rgba(0,0,0,.3)}
.sup .st{flex:1;min-width:0}.sup .st b{display:block;font-size:15.5px;font-weight:800;letter-spacing:-.01em}.sup .st small{display:block;font-weight:500;opacity:.92;font-size:12px}
/* access key cards (admin) */
.kh{display:flex;align-items:center;gap:12px}
.kh .av{width:44px;height:44px;border-radius:14px;font-size:17px}
.kt{flex:1;min-width:0}.kt h3{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kt small{color:var(--mute);font-size:12px}
.kbox{display:flex;align-items:center;gap:8px;margin:14px 0 4px;padding:8px 8px 8px 14px;border:1.5px dashed #b7cffa;border-radius:14px;background:linear-gradient(180deg,#f8fbff,#eef5ff)}
.kc{flex:1;min-width:0;font:600 13px/1.4 var(--mono);color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:.02em;background:none;padding:0}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 2px}
.chip{padding:6px 11px;border-radius:99px;background:var(--ice);color:var(--blue);font-size:12px;font-weight:700}
.kacts{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.kacts form{margin:0}
details.kedit{margin-top:12px;border-top:1px solid #edf3fd;padding-top:12px}
details.kedit summary{cursor:pointer;font-weight:700;color:var(--blue);font-size:13px;list-style:none;display:flex;align-items:center;gap:6px}
details.kedit summary::-webkit-details-marker{display:none}
.kgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:0 10px;margin-top:12px}
.fresh{border-color:#bdf0d9;background:linear-gradient(180deg,#fff,#f1fcf7)}
.qd{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 16px;font-size:12px;color:var(--mute);font-weight:600}
.qd button{border:1px solid var(--line);background:#fff;color:var(--blue);border-radius:99px;padding:7px 13px;font-weight:700;cursor:pointer;font-size:12.5px;transition:.2s}
.qd button:hover{background:var(--blue);color:#fff;border-color:var(--blue)}
.arow{display:flex;gap:12px;padding:12px 2px;border-bottom:1px solid #edf3fd;align-items:flex-start}
.arow:last-child{border-bottom:0}
.arow .di{width:34px;height:34px;border-radius:11px;background:var(--ice);color:var(--blue);display:grid;place-items:center;flex:none}
.arow .t{flex:1;min-width:0}.arow .t b{display:block;font-size:13.5px}.arow .t small{display:block;color:var(--mute);font-size:12px;overflow-wrap:anywhere}
/* bot users + broadcast */
.sbar{display:flex;gap:8px;margin-bottom:6px}
.sbar input{flex:1;min-width:0;padding:12px 14px;border:1.5px solid var(--line);border-radius:14px;background:var(--soft);outline:none;font-weight:500}
.sbar input:focus{border-color:var(--blue2);background:#fff;box-shadow:0 0 0 5px rgba(59,130,246,.14)}
.urow{display:flex;align-items:center;gap:12px;padding:12px 2px;border-bottom:1px solid #edf3fd}
.urow:last-child{border-bottom:0}
.uav{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;background:var(--ice);color:var(--blue);font-weight:800;flex:none}
.ut{flex:1;min-width:0}
.ut b{display:block;font-size:14.5px;font-variant-numeric:tabular-nums;letter-spacing:.01em;overflow:hidden;text-overflow:ellipsis}
.ut small{display:block;color:var(--mute);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.urow.blocked .uav{background:#fff0f0;color:var(--red)}.urow.blocked .ut b{color:#b91c1c}
.urow .btn{min-width:96px}
.pager{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:14px;color:var(--mute);font-size:13px;font-weight:600}
.tok{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sheet-bg{position:fixed;inset:0;z-index:80;background:rgba(11,27,58,.5);display:none;align-items:flex-end;justify-content:center}
.sheet-bg.open{display:flex}
.sheet{width:100%;max-width:560px;max-height:92vh;max-height:92dvh;overflow:auto;background:#fff;border-radius:26px 26px 0 0;padding:20px 20px calc(22px + env(safe-area-inset-bottom,0));box-shadow:0 -20px 60px -20px rgba(11,27,58,.5);animation:sheetUp .28s ease both;-webkit-overflow-scrolling:touch}
.sheet-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.prog{height:12px;border-radius:99px;background:var(--ice);overflow:hidden;margin:6px 0 10px}
.prog i{display:block;height:100%;width:0;background:linear-gradient(90deg,#60a5fa,#2563eb);border-radius:99px;transition:width .25s}
.res{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:14px 0}
.res div{background:var(--soft);border:1px solid var(--line);border-radius:16px;padding:12px 8px;text-align:center}
.res b{display:block;font-size:24px;font-weight:800;letter-spacing:-.03em;font-variant-numeric:tabular-nums}.res small{color:var(--mute);font-size:12px;font-weight:600}
.res .ok b{color:#059669}.res .bad b{color:#dc2626}
.fails{max-height:220px;overflow:auto;border:1px solid var(--line);border-radius:14px;margin-top:8px}
.fails div{display:flex;justify-content:space-between;gap:10px;padding:9px 12px;border-bottom:1px solid #edf3fd;font-size:12.5px}
.fails div:last-child{border-bottom:0}.fails b{font-variant-numeric:tabular-nums}.fails span{color:var(--mute);text-align:right}
.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0));transform:translate(-50%,20px);opacity:0;pointer-events:none;padding:12px 18px;border-radius:14px;font-weight:700;font-size:13px;color:#fff;box-shadow:0 18px 40px -12px rgba(11,27,58,.5);transition:.3s;z-index:120;max-width:calc(100vw - 32px);text-align:center}
.toast.show{opacity:1;transform:translate(-50%,0)}.toast.ok{background:linear-gradient(135deg,#34d399,#059669)}.toast.err{background:linear-gradient(135deg,#ff7a6b,#ef4444)}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes sheetUp{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}
@keyframes ring{0%{box-shadow:0 12px 26px -10px rgba(37,99,235,.75),0 0 0 0 rgba(59,130,246,.42),inset 0 1px 0 rgba(255,255,255,.38)}70%,100%{box-shadow:0 12px 26px -10px rgba(37,99,235,.75),0 0 0 16px rgba(59,130,246,0),inset 0 1px 0 rgba(255,255,255,.38)}}
@keyframes blink{50%{opacity:.35}}
@keyframes pop{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
/* desktop = real desktop layout */
@media(min-width:700px){.stats{grid-template-columns:repeat(3,1fr)}.stats.four{grid-template-columns:repeat(4,1fr)}.wrap{padding-top:34px}}
@media(min-width:900px){:root{--w:1060px}.cols{grid-template-columns:1fr 1fr}.top-in{height:70px}.tabs{top:calc(70px + env(safe-area-inset-top,0px))}.stats.admin{grid-template-columns:repeat(4,1fr)}}
@media(max-width:520px){.bot{flex-wrap:wrap}.bot .acts{width:100%}.bot .acts .btn,.bot .acts .af{flex:1}.bot .acts .btn{width:100%}.top-in{height:60px}.tabs{top:calc(60px + env(safe-area-inset-top,0px))}.kgrid{grid-template-columns:1fr 1fr 1fr}}
@media(max-width:360px){.fgrid{grid-template-columns:1fr}.feats{grid-template-columns:1fr}.kgrid{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* code editor */
body.ed{height:100vh;height:100dvh;overflow:hidden;background:#f7faff}
body.ed{overscroll-behavior:none}
.ed-form{display:flex;flex-direction:column;height:100%}
.ed-top{display:flex;align-items:center;gap:12px;padding:calc(10px + env(safe-area-inset-top,0)) 14px 10px;background:rgba(255,255,255,.97);border-bottom:1px solid var(--line);box-shadow:0 10px 30px -22px rgba(37,99,235,.5);z-index:5}
.ed-title{min-width:0;flex:1}.ed-title b{display:block;font-size:15px;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.02em}
.ed-title small{color:var(--mute);font-size:12px}
.ed-rs{margin:0;padding:8px 11px;border:1px solid var(--line);border-radius:12px;background:#fff;font-size:12.5px}
.ed-rs input{width:16px;height:16px}
.ed-flash{margin:10px 14px 0}
.ed-body{flex:1;min-height:0;display:flex;margin:12px 12px 0;border:1px solid var(--line);border-radius:18px;background:#fff;box-shadow:var(--sh);overflow:hidden}
.gut,#code{font:400 13px/1.7 var(--mono);padding:16px 0 60px;margin:0;tab-size:4}
#code{font-size:13px}
.gut{flex:none;overflow:hidden;text-align:right;padding-left:10px;padding-right:12px;color:#9db4de;background:linear-gradient(90deg,#f1f6ff,#f8fbff);border-right:1px solid #e6eefc;user-select:none;white-space:pre}
#code{flex:1;min-width:0;border:0;outline:0;resize:none;padding-left:14px;padding-right:16px;color:#0f2147;background:transparent;white-space:pre;overflow:auto;caret-color:var(--blue);-webkit-overflow-scrolling:touch}
#code::selection{background:#cfe2ff}
.ed-bar{display:flex;justify-content:space-between;gap:10px;padding:8px 16px calc(8px + env(safe-area-inset-bottom,0));font-size:12px;color:var(--mute);font-weight:600}
.ed-bar .dirty{color:var(--warn)}

/* ---- scrolling & touch: smooth in the browser AND in the installed app ---- */
.log,.fails,.sheet,#code,.tabs,.menu{overscroll-behavior:contain}
.sheet,.log,.fails{-webkit-overflow-scrolling:touch}
@media (display-mode:standalone){html,body{overscroll-behavior-y:none}}
@media (hover:none){
  .card.lift:hover{transform:none;box-shadow:var(--sh);border-color:var(--line)}
  .btn:hover{transform:none}.btn:hover::after{transform:translateX(-120%)}
  a.li:hover{padding-left:4px;color:inherit}
  .sup:hover{transform:none}.sup:hover::after{transform:translateX(-120%)}
}
/* ---- Install APK (login page) ---- */
.inst{margin-top:22px}
.inst[hidden]{display:none}
.inst .inst-btn{height:64px;font-size:17px;border-radius:20px}
.inst .inst-web{margin-top:10px}
.inst .inst-web[hidden]{display:none}
.inst-note{text-align:center;margin:10px 4px 0}
.steps{margin:6px 0 0;padding-left:22px;line-height:2;font-weight:600;color:var(--ink2)}
.dl-top{margin-top:12px}

/* ===== v4: smooth scrolling, no heavy animation, nothing that traps the finger ===== */
html{scroll-behavior:auto}
.card,.bh,.flash{animation:none!important}
.tabs{overscroll-behavior:auto;overscroll-behavior-x:contain;touch-action:pan-x pan-y}
.log,.fails{overscroll-behavior:auto;touch-action:pan-x pan-y}
#code{touch-action:pan-x pan-y}
@media (hover:none){
  .btn::after,.sup::after{display:none}
  .card,.btn,.sup,.li,.tabs a,.mb,.icon-btn{transition:none!important}
  .btn:hover,.card:hover,.sup:hover{transform:none!important}
  .pill.running i{animation:none}
}
@media (display-mode:standalone){html,body{overscroll-behavior-y:contain}}

/* live logs: only the error text is red */
.log .er{color:#ff6b6b;font-weight:600}
.log .ts{color:#7f95c4}
/* a user who just started the bot */
.urow.new{background:#eaf3ff;border-radius:12px;transition:background 1s}
a.btn.inst-btn{text-decoration:none}
