:root{
  /* The Scene: bright flyer palette. Ink is a deep violet, never flat black. */
  --ink:#17122B; --orange:#FF5B14; --violet:#6D3BFF; --lime:#C6F432; --sky:#1FA8FF; --red:#E5383B;
  --bg:#FAF9FF; --panel:#FFFFFF; --panel2:#F1EEFF; --line:#17122B14; --line2:#17122B29;
  --text:var(--ink); --muted:#6B6585; --accent:var(--violet); --accent2:var(--orange);
  --grad:linear-gradient(115deg,#FF5B14,#6D3BFF);
  --shadow:0 14px 34px -16px #2A1A6B55;
  --display:"Bricolage Grotesque",ui-sans-serif,system-ui,sans-serif;
  --body:"Figtree",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  --tab-h:64px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--text);font:16px/1.45 var(--body);
  overscroll-behavior:none;padding-bottom:env(safe-area-inset-bottom)}
a{color:var(--violet);text-decoration:none}
img{max-width:100%;display:block}
.grow{flex:1}
.muted{color:var(--muted)}
.tiny{font-size:12px}
.spin,.empty{padding:32px 16px;text-align:center;color:var(--muted)}
.section-title{font-family:var(--display);font-size:19px;color:var(--text);margin:22px 4px 8px;font-weight:800;letter-spacing:-.01em}
.vtitle{margin:14px 4px 10px;font-family:var(--display);font-weight:800;font-size:30px;letter-spacing:-.02em;line-height:1.05}
.err{color:var(--red);font-size:13px;min-height:16px;margin:4px 2px}
.lbl{display:block;font-size:13px;font-weight:700;color:var(--muted);margin:14px 2px 4px}

main{max-width:560px;margin:0 auto;padding:8px 12px calc(var(--tab-h) + 20px)}

/* ---------- header + tab bar ---------- */
header{position:relative;z-index:20;display:flex;align-items:center;gap:10px;
  padding:14px 16px 8px;background:none}
.logo{font-family:var(--display);font-weight:800;font-stretch:80%;letter-spacing:-.03em;font-size:26px;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;cursor:pointer}
.logo.big{font-size:56px}
#online{font-size:12px}

#tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;height:calc(var(--tab-h) + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);display:flex;align-items:center;justify-content:space-around;
  background:#FFFFFFeb;backdrop-filter:blur(14px);border-top:1px solid var(--line)}
.tab{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;background:none;border:0;color:var(--muted);height:54px;width:64px;border-radius:16px;cursor:pointer;transition:background .15s,color .15s,transform .15s}
.tab:active{transform:scale(.94)}
.tablabel{font-size:11px;font-weight:700;letter-spacing:.01em;line-height:1}
.tab .ic{stroke-width:2.2}
.tab .navavatar{width:26px;height:26px;font-size:12px}
.dndmark{position:absolute;top:4px;right:12px;display:grid;place-items:center;width:17px;height:17px;border-radius:50%;background:var(--violet);color:#fff}
.dndmark[hidden]{display:none}
.tab.active{background:var(--panel2)}
.tab.active{color:var(--violet)}
.tab.active::after{content:none}
.tab.cam{color:var(--text);width:60px;height:60px;border-radius:20px;box-shadow:inset 0 0 0 1.5px var(--line2)}
.tab.cam svg{width:30px;height:30px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.tab.cam.active{background:var(--grad);color:#fff;box-shadow:0 8px 22px #6D3BFF55}
.tab.cam.active::after{background:#fff}
.badge-count{position:absolute;top:2px;right:8px;min-width:16px;height:16px;padding:0 4px;border-radius:9px;
  background:var(--orange);color:#fff;font-size:10px;line-height:16px;font-weight:800;display:none}
.badge-count.on{display:block}
.navavatar{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;overflow:hidden;
  background:var(--panel2);font-size:14px;font-weight:700;color:var(--text);margin:0 auto}
.navavatar img{width:100%;height:100%;object-fit:cover}

/* ---------- Clips ---------- */
.clipswrap{max-width:560px;padding-top:0}
.cliptop{display:flex;align-items:center;gap:8px;margin:4px 4px 10px}
.clipchips{display:flex;flex-wrap:wrap;gap:7px;padding:0 4px 9px}.clipchips button{flex:none;border:1px solid var(--line);border-radius:999px;background:var(--panel);color:var(--muted);padding:6px 11px;font:inherit;font-size:12px;cursor:pointer}.clipchips button.on{background:var(--grad);border-color:transparent;color:#fff;font-weight:700}
.clipreload{border:1px solid var(--line);border-radius:999px;background:var(--panel);color:var(--text);padding:8px 12px;cursor:pointer;font:inherit;font-size:13px}
.clipstage{position:relative;height:min(68vh,720px);min-height:420px;border-radius:24px;overflow:hidden;background:#000;touch-action:pan-x;isolation:isolate}
.clipplayer{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000}
.clipmeta{position:absolute;z-index:2;left:0;right:0;bottom:0;display:grid;gap:2px;padding:52px 16px 16px;background:linear-gradient(transparent,#000d);pointer-events:none}.clipmeta button{pointer-events:auto}
.clipmeta b{font-size:16px}.clipmeta span,.clipmeta small{color:#ddd;font-size:13px}.clipmeta small{color:#aaa}
.clipchannel,.clipfollow,.clipmini{border:0;background:none;color:inherit;font:inherit;cursor:pointer;padding:0}.clipchannel{text-decoration:underline;text-underline-offset:3px}.clipfollow{margin-left:9px;color:var(--accent2);font-size:12px}.clipactions{display:flex;gap:8px;margin-top:3px}.clipmini{border:1px solid #ffffff44;border-radius:999px;padding:3px 8px;color:#fff;font-size:12px}.clipmini.on{background:var(--grad);border-color:transparent;color:#08080c}.clipnote,.cliphint{text-align:center;padding:6px 4px;margin:0;color:var(--muted);font-size:12px}.cliphint{color:var(--accent2)}
.clipbubble{max-width:min(330px,82vw);padding:8px}.clipembed{display:block;width:100%;aspect-ratio:16/9;border:0;border-radius:10px;background:#000;margin:4px 0 7px}
.clipcaption{margin-top:8px;padding-top:8px;border-top:1px solid var(--line);white-space:pre-wrap}
.clipcontrols{position:absolute;z-index:3;left:12px;bottom:88px;display:grid;gap:8px;pointer-events:none}.clipprevious,.clipnext{font-size:34px;font-weight:400}
.clipcontrol{border:1px solid #ffffff44;border-radius:999px;background:#000a;color:#fff;min-width:48px;min-height:48px;padding:8px 12px;font:inherit;font-size:24px;font-weight:700;line-height:1;cursor:pointer;pointer-events:auto}
.clipshare{position:fixed;z-index:100;inset:0;display:flex;align-items:flex-end;justify-content:center;padding:16px;background:#17122B66}
.clipsharecard{width:min(560px,100%);max-height:75vh;overflow:auto;border:1px solid var(--line);border-radius:24px;background:var(--panel);padding:16px}
.clipsharehead{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.clipsharehead b,.clipsharehead span{display:block}.clipsharehead span{color:var(--muted);font-size:13px;margin-top:2px}
.clipquick{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 9px}.clipquick button{border:1px solid var(--line);border-radius:999px;background:var(--panel2);color:var(--text);padding:6px 10px;font:inherit;font-size:12px;cursor:pointer}
.clipclose{border:0;background:var(--panel2);color:var(--text);width:34px;height:34px;border-radius:50%;font-size:22px;cursor:pointer}

/* ---------- avatars / rows ---------- */
.avatar{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;overflow:hidden;flex:none;
  background:var(--panel2);font-family:var(--display);font-weight:800;color:var(--violet)}
.avatar img{width:100%;height:100%;object-fit:cover}
.avatar.big{width:96px;height:96px;font-size:34px}
.urow,.snaprow{display:flex;align-items:center;gap:12px;width:100%;text-align:left;
  background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:10px 12px;margin:8px 0;color:var(--text)}
.profilelink{border:0;background:none;color:var(--text);padding:0;font:inherit;font-weight:700;cursor:pointer;text-align:left}.profilelink:hover,.profilelink:focus-visible{color:var(--violet);text-decoration:underline;text-underline-offset:3px}
.snaprow{cursor:pointer}
.snaprow.opening{opacity:.5}
.who{min-width:0;flex:1}
.who .sub{font-size:12px;color:var(--muted);margin-top:2px}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 1.5px var(--ink);margin-right:6px;vertical-align:middle}
.acts{display:flex;gap:6px}
.rowaction{display:grid;place-items:center;width:40px;height:40px;padding:0;border:1px solid var(--line2);border-radius:12px;background:var(--panel);color:var(--text);cursor:pointer}.rowaction:hover,.rowaction:focus-visible{border-color:var(--violet);color:var(--violet);background:var(--panel2);box-shadow:0 0 0 3px #6D3BFF1f}
.thumb{width:46px;height:60px;border-radius:10px;background-size:cover;background-position:center;filter:blur(6px) saturate(1.3);flex:none}

.pill{background:var(--panel);border:1px solid var(--line2);color:var(--text);padding:8px 16px;border-radius:999px;font-weight:700;font-size:14px;cursor:pointer;transition:transform .12s}.pill:active{transform:scale(.96)}
.pill.primary{background:var(--grad);border:0;color:#fff;box-shadow:0 8px 20px -10px #6D3BFFaa}
.pill.danger{border-color:var(--red);color:var(--red)}
.pill:disabled{opacity:.5}

/* ---------- buttons / fields ---------- */
.btn{width:100%;background:var(--grad);color:#fff;border:0;border-radius:14px;padding:14px;font-size:16px;font-weight:700;cursor:pointer;margin-top:12px}
.btn:disabled{opacity:.45}
.btn.ghost{background:none;color:var(--muted);font-weight:600}
.btn.ghost.inline{display:inline;width:auto;padding:0 4px}
.field{width:100%;background:var(--panel);border:1px solid var(--line);color:var(--text);
  padding:14px;border-radius:14px;font-size:16px;outline:none}
.field:focus{border-color:var(--accent)}
.profilebio{min-height:86px;resize:vertical;font-family:inherit;line-height:1.4}.publicprofile{display:flex;flex-direction:column;align-items:center;text-align:center;padding-top:18px}.publicavatar{width:min(72vw,260px)!important;height:min(72vw,260px)!important;font-size:76px;margin:14px 0 2px;box-shadow:var(--shadow)}.publicbio{max-width:420px;white-space:pre-wrap;line-height:1.45;color:var(--muted);margin:0 8px 16px}.profileactions{display:flex;gap:8px}
.searchbar{margin:6px 0 4px}
.profilestats{display:flex;align-items:center;justify-content:center;gap:7px;color:var(--muted);font-size:13px;margin:1px 0 13px}.statdot{color:var(--line2)}
.memorieshead{display:flex;align-items:center;justify-content:space-between;gap:12px}.memorieshead .vtitle{margin-bottom:0}.memorieshead p{margin:2px 4px 10px}
.memoriesgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.memoriesgrid .empty,.memoriesgrid .spin{grid-column:1/-1}
.memorycard{position:relative;min-height:160px;overflow:hidden;border-radius:16px;background:var(--panel2);border:1px solid var(--line);cursor:pointer}.memorycard:hover,.memorycard:focus-visible{border-color:var(--orange);box-shadow:0 0 0 3px #FF5B1426}.memorycard img,.memorycard video{display:block;width:100%;height:190px;object-fit:cover;background:#000;pointer-events:none}
.memorymeta{display:grid;gap:2px;padding:7px 9px;font-size:12px}.memorymeta span{color:var(--muted)}.memorymeta b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.memorydelete{position:absolute;z-index:1;top:7px;right:7px;width:30px;height:30px;border:0;border-radius:50%;background:#000b;color:#fff;font-size:21px;cursor:pointer}.memoryplay{position:absolute;left:9px;top:9px;padding:4px 7px;border-radius:999px;background:#000a;color:#fff;font-size:13px}

/* ---------- camera ---------- */
.camwrap{display:flex;flex-direction:column;height:calc(100vh - var(--tab-h));max-width:560px;padding:0 0 var(--tab-h)}
.viewport{position:relative;flex:1;border-radius:24px;overflow:hidden;margin:6px 12px;background:#000}
.viewport video{width:100%;height:100%;object-fit:cover;pointer-events:none}
.viewport #filterpreview{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}
.viewport video::-webkit-media-controls{display:none!important}
.viewport video::-webkit-media-controls-enclosure{display:none!important}
.camerr{position:absolute;z-index:1;inset:auto 16px 16px;color:#fff;background:#000000aa;padding:10px 14px;border-radius:12px;font-size:13px;text-align:center}
.cambar{display:flex;align-items:center;justify-content:space-around;padding:16px 24px}
.filterselect{align-self:center;margin:-6px auto 8px;padding:8px 12px;border:1px solid var(--line);border-radius:999px;background:var(--panel);color:var(--text);font:inherit;font-size:13px;cursor:pointer}
.shutter{width:74px;height:74px;border-radius:50%;border:5px solid var(--ink);background:transparent;cursor:pointer;transition:.1s;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.shutter:active{transform:scale(.92);background:#17122B1a}
.shutter.recording{border-color:var(--orange);background:var(--orange);box-shadow:0 0 0 8px #FF5B1433}
.cbtn{width:52px;height:52px;border-radius:50%;border:1px solid var(--line);background:var(--panel);font-size:22px;cursor:pointer;color:var(--text)}

/* ---------- compose ---------- */
.composewrap{padding-top:0}
.preview{position:relative;aspect-ratio:9/16;max-height:64vh;border-radius:24px;background-size:cover;background-position:center;margin:6px auto;overflow:hidden}
.preview.video{background:#000}
.preview.video video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.capinput{position:absolute;left:0;right:0;bottom:76px;background:#000000aa;border:0;color:#fff;text-align:center;
  padding:12px;font-size:16px;outline:none}
.capinput::placeholder{color:#ffffff99}
.timerpick{position:absolute;left:12px;bottom:16px;display:flex;gap:8px}
.tchip{background:#000000aa;border:1px solid #ffffff44;color:#fff;border-radius:999px;padding:8px 14px;font-weight:700;cursor:pointer}
.tchip.on{background:var(--grad);border:0;color:#fff}
.retake{position:absolute;top:12px;right:12px;width:40px;height:40px;border-radius:50%;border:0;background:#000000aa;color:#fff;font-size:18px;cursor:pointer}
.sendrow{margin-top:6px}
.sendto{font-size:13px;color:var(--muted);margin:6px 2px}
.recipsearch{width:100%;box-sizing:border-box;margin:4px 0 6px;padding:11px 13px;border:1px solid var(--line);border-radius:12px;background:var(--panel);color:var(--text);font:inherit;outline:none}
.recipsearch:focus{border-color:var(--accent)}
.recipmeta{min-height:18px;margin:0 2px 6px;color:var(--muted);font-size:12px}
.recips{display:flex;flex-wrap:wrap;gap:8px;min-height:40px;max-height:242px;overflow-y:auto;align-content:flex-start;padding:1px 2px 4px}
.recip{display:flex;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--line);color:var(--text);
  border-radius:999px;padding:6px 14px 6px 6px;cursor:pointer;font-weight:600}
.recip .avatar{width:28px;height:28px;font-size:13px}
.recip i.dot{margin:0}
.recip.on{background:var(--grad);color:#fff;border:0}
.recipmore{width:100%;color:var(--muted);font-size:12px;padding:5px 2px}
.send{margin-top:14px}

/* ---------- view-once player ---------- */
.player{position:fixed;inset:0;z-index:100;background:#000;display:flex;align-items:center;justify-content:center;animation:pop .18s ease}
.player img,.player video{max-width:100%;max-height:100%;object-fit:contain}
.pcap{position:absolute;left:0;right:0;bottom:14%;text-align:center;color:#fff;font-size:20px;font-weight:600;
  text-shadow:0 2px 12px #000;padding:0 24px}
.pname{position:absolute;left:16px;top:calc(16px + env(safe-area-inset-top));color:#fff;font-weight:700;text-shadow:0 1px 6px #000}
.pbar{position:absolute;left:0;right:0;top:calc(env(safe-area-inset-top));height:4px;background:#ffffff22}
.pbar i{display:block;height:100%;width:100%;transform-origin:left;transform:scaleX(1);background:var(--grad)}
.pbar i.run{transform:scaleX(0);transition:transform linear}
@keyframes pop{from{opacity:0;transform:scale(1.04)}to{opacity:1;transform:none}}

/* ---------- me ---------- */
.mehead{display:flex;flex-direction:column;align-items:center;gap:12px;padding:20px 0 8px}
.settingrow{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:16px 0 4px;padding:12px 0;border-top:1px solid var(--line)}
.settingrow b{display:block;font-size:15px;margin-bottom:2px}
.switch{position:relative;width:46px;height:27px;flex:none;cursor:pointer}
.switch input{position:absolute;opacity:0;width:1px;height:1px}
.switch span{position:absolute;inset:0;border-radius:999px;background:var(--panel2);border:1px solid var(--line);transition:.18s}
.switch span::after{content:'';position:absolute;width:21px;height:21px;left:2px;top:2px;border-radius:50%;background:var(--muted);transition:.18s}
.switch input:checked + span{background:var(--accent);border-color:var(--accent)}
.switch input:checked + span::after{transform:translateX(19px);background:#fff}
.switch input:focus-visible + span{outline:2px solid var(--accent2);outline-offset:2px}
.adminpanel{margin:18px 0 6px;padding:15px 14px 12px;border:1px solid #E5383B44;border-radius:16px;background:#E5383B0a}
.adminpanel>b{display:block;color:var(--red);font-size:15px}.adminpanel p{margin:5px 0 12px}.adminresults{margin-top:8px}.adminresults .urow{margin:7px 0;background:var(--panel)}
.adminactions{flex:0 0 auto;max-width:112px;min-height:36px;border:1px solid var(--line);border-radius:11px;background:var(--panel2);color:var(--text);padding:0 8px;font:inherit;font-size:13px}

/* ---------- gate ---------- */
#gate{max-width:360px;margin:0 auto;padding:14vh 20px 20px;text-align:center}
#gate .tagline{color:var(--muted);margin:6px 0 26px}
#gate form{display:flex;flex-direction:column;gap:10px;text-align:left}
.swap{margin-top:18px;color:var(--muted);font-size:14px}

/* ---------- stories bar + rings ---------- */
.storiesbar{display:flex;gap:14px;overflow-x:auto;padding:6px 2px 12px;scrollbar-width:none}
.storiesbar::-webkit-scrollbar{display:none}
.storyitem{background:none;border:0;color:var(--text);display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer;flex:none;width:64px}
.ring{display:grid;place-items:center;width:62px;height:62px;border-radius:50%;padding:3px;background:var(--panel2)}
.ring .avatar{width:100%;height:100%;border:3px solid var(--bg);box-sizing:border-box}
.ring.fresh{background:var(--grad)}
.ring.seen{background:#D9D4EA}
.ring.mine{background:var(--grad)}
.ring.add{background:var(--panel);border:2px dashed var(--line2);font-size:24px;color:var(--violet)}
.sname{font-size:11px;color:var(--muted);max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.recip.story .ring{width:28px;height:28px;padding:0;font-size:15px}
.recip.story.on .ring{background:#ffffff40}

/* ---------- story player ---------- */
.player.stories{background:#000;flex-direction:column}
.player.stories img{position:absolute;inset:0;margin:auto;max-height:100%;transition:filter .3s}
.segs{position:absolute;top:calc(8px + env(safe-area-inset-top));left:8px;right:52px;display:flex;gap:4px;z-index:3}
.segs span{flex:1;height:3px;background:#ffffff33;border-radius:2px;overflow:hidden}
.segs i{display:block;height:100%;width:0;background:#fff}
.tapzones{position:absolute;inset:0;display:flex;z-index:2}
.tz{flex:1}.tz.right{flex:2}
.storyclose,.storymore,.storyprev,.storynext{position:absolute;z-index:5;width:34px;height:34px;border:0;border-radius:50%;background:#0008;color:#fff;font-size:28px;line-height:30px;cursor:pointer}
.storyclose{top:calc(4px + env(safe-area-inset-top));right:10px}
.storymore{top:calc(4px + env(safe-area-inset-top));right:50px;font-size:24px}
.storymenu{position:absolute;z-index:6;top:calc(44px + env(safe-area-inset-top));right:50px;background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:var(--shadow)}
.storymenu button{border:0;background:none;color:var(--red);font:inherit;font-weight:700;padding:10px 14px;cursor:pointer;white-space:nowrap}
.storyreply{position:absolute;z-index:5;left:12px;right:12px;bottom:calc(14px + env(safe-area-inset-bottom));display:flex;gap:8px;padding:8px;border-radius:999px;background:#08080cdd;border:1px solid #ffffff22}
.storyreply[hidden],.storymore[hidden],.storymenu[hidden]{display:none}
.storyreply input{min-width:0;flex:1;border:0;outline:0;background:transparent;color:#fff;font:inherit;padding:7px 10px}
.storyreply input::placeholder{color:#ffffff99}
.storyreply button{border:0;border-radius:999px;background:var(--grad);color:#fff;font:inherit;font-weight:700;padding:7px 14px;cursor:pointer}
.storyprev{top:50%;left:10px;transform:translateY(-50%);font-size:34px}
.storynext{top:50%;right:10px;transform:translateY(-50%);font-size:34px}
.viewers{position:absolute;left:16px;bottom:calc(16px + env(safe-area-inset-bottom));color:#fff;font-size:13px;z-index:4;text-shadow:0 1px 6px #000}
.viewers.tappable{cursor:pointer;background:#0006;padding:5px 11px;border-radius:999px;backdrop-filter:blur(4px);text-shadow:none}
/* a viewer who has a live Story of their own: ring their avatar, tap it to play */
.storyavatar{display:inline-flex;background:none;border:0;padding:0;margin:0;cursor:pointer;flex:none;line-height:0;border-radius:50%}
.avatar.hasstory{box-shadow:0 0 0 2px var(--panel),0 0 0 4px var(--accent2)}

/* ---------- chat ---------- */
/* Group chats sit below the app header, so reserve space for it as well as the tab bar.
   --app-vh follows the mobile visual viewport while browser chrome moves. */
.chatview{display:flex;flex-direction:column;height:calc(var(--app-vh, 100dvh) - 56px - var(--tab-h));min-height:0;padding:0}
.chathead{position:relative;display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line)}
.chathead .back{font-size:26px}
.group-title{margin:0;padding:0;border:0;background:none;color:var(--text);font:inherit;font-weight:700;cursor:pointer;text-align:left}
.group-title:hover,.group-list-name:hover{color:var(--violet);text-decoration:underline;text-underline-offset:3px}
.group-list-name{cursor:pointer}
.cdot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 1.5px var(--ink);margin-right:5px}
.icon{background:none;border:0;color:var(--text);font-size:20px;cursor:pointer;padding:4px 8px;display:inline-flex;align-items:center;justify-content:center}
.ic{display:block;flex:none}
.icon.off{color:var(--red)}
.chatlog{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:16px 14px 20px;display:flex;flex-direction:column;gap:9px}
/* Shared direct/group conversation language: blue is yours, charcoal is theirs.
   The small tail keeps the friendly, lightweight Snapchat chat feel without
   introducing a bright surface into Mayfly's dark theme. */
.b{max-width:min(78%,460px);box-sizing:border-box;padding:10px 13px 11px;border-radius:19px;font-size:15px;line-height:1.34;word-wrap:break-word;box-shadow:0 1px 1px #0002}
.b.me{align-self:flex-end;background:var(--violet);color:#fff;border-bottom-right-radius:6px}
.b.them{align-self:flex-start;background:var(--panel);color:var(--text);border:1px solid var(--line);border-bottom-left-radius:6px}
.b.sys{align-self:center;background:none;color:var(--muted);box-shadow:none;font-size:12px}
.messagewrap{position:relative;align-self:flex-start;max-width:min(78%,460px)}.messagewrap.me{align-self:flex-end}.messagewrap .b{max-width:100%}.messagemore{position:absolute;top:50%;right:-29px;transform:translateY(-50%);display:grid;place-items:center;width:25px;height:25px;padding:0;border:0;border-radius:50%;background:var(--panel2);color:var(--muted);cursor:pointer;opacity:.55}.messagewrap.me .messagemore{right:auto;left:-29px}.messagewrap:hover .messagemore,.messagewrap:focus-within .messagemore{opacity:1}.messagemenu{position:absolute;z-index:5;left:0;bottom:calc(100% + 7px);display:flex;width:max-content;max-width:calc(100vw - 44px);padding:4px;border:1px solid var(--line);border-radius:12px;background:var(--panel);box-shadow:var(--shadow)}.messagewrap.me .messagemenu{right:0;left:auto}.messagemenu[hidden]{display:none}.messagemenu button{display:grid;place-items:center;width:32px;height:32px;padding:0;border:0;border-radius:8px;background:none;color:var(--text);cursor:pointer}.messagemenu button:hover,.messagemenu button:focus-visible{background:var(--panel2);color:var(--accent2)}.replyquote{margin:-3px -4px 6px;padding:4px 6px;border-left:2px solid currentColor;background:#00000012;border-radius:3px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.saved{box-shadow:inset 0 0 0 2px var(--lime)}.localreaction{display:block;width:max-content;margin:6px 0 -4px auto;padding:1px 5px;border-radius:999px;background:var(--panel2);font-size:13px}.replydraft{display:flex;align-items:center;gap:8px;padding:5px 12px;border-top:1px solid var(--line);background:var(--panel);font-size:12px;color:var(--muted)}.replydraft[hidden]{display:none}.replydraft span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.replydraft button{border:0;border-radius:50%;width:24px;height:24px;background:var(--panel2);color:var(--text);font-size:18px;cursor:pointer}
/* Compact action controls and the separate standard-emoji picker mirror the
   quick reaction surface used by Snapchat, while remaining readable in dark mode. */
.messagemenu,.reactiontray{position:absolute;z-index:5;left:0;bottom:calc(100% + 7px);display:flex;width:max-content;max-width:calc(100vw - 44px);padding:4px 6px;border:1px solid var(--line2);border-radius:999px;background:var(--panel);box-shadow:var(--shadow)}.messagewrap.me .messagemenu,.messagewrap.me .reactiontray{right:0;left:auto}.messagemenu[hidden],.reactiontray[hidden]{display:none}.messagemenu button{display:grid;place-items:center;width:38px;height:38px;padding:0;border:0;border-radius:50%;background:none;color:var(--text);cursor:pointer}.messagemenu button+button{border-left:1px solid var(--line);border-radius:0}.messagemenu button:hover,.messagemenu button:focus-visible{background:var(--panel2);color:var(--violet)}.reactiontray{gap:2px;padding:5px 7px}.reactiontray button{display:grid;place-items:center;width:36px;height:36px;padding:0;border:0;border-radius:50%;background:none;font-size:22px;line-height:1;cursor:pointer}.reactiontray button:hover,.reactiontray button:focus-visible{background:var(--panel2);transform:scale(1.12)}
/* Text messages use a compact transcript card instead of speech bubbles. */
.chattext{align-self:stretch;max-width:none;width:100%;padding:10px 12px 11px;border:1px solid var(--line);border-radius:16px;background:var(--panel);color:var(--text);box-shadow:none}.chattext.me,.chattext.them{align-self:stretch;background:var(--panel);color:var(--text);border-color:var(--line)}.chatmeta{display:flex;align-items:center;min-width:0;margin-bottom:6px;font-family:var(--display);font-size:14px;font-weight:800;letter-spacing:-.01em}.chatsender{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chattime{margin-left:auto;padding-left:10px;padding-right:28px;color:var(--muted);font-size:11px;font-weight:700;letter-spacing:0;text-transform:none;white-space:nowrap}.chattext.me .chatsender{color:var(--orange)}.chattext.them .chatsender{color:var(--violet)}.chatbody{min-height:20px;padding-left:9px;border-left:3px solid var(--violet);font-size:16px;font-weight:600;line-height:1.35;text-align:left}.chattext.me .chatbody{border-left-color:var(--orange)}.messagewrap.textcard{align-self:stretch;max-width:none}.messagewrap.textcard .messagemore{top:20px;right:8px;left:auto}.messagewrap.textcard .messagemenu,.messagewrap.textcard .reactiontray{right:8px;left:auto}
.ctyping{min-height:16px;padding:0 14px 4px;color:var(--muted);font-size:12px}
.chatin{display:flex;gap:8px;padding:8px 10px calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line);flex:none;background:var(--bg)}
.chatin input{flex:1;background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:999px;padding:11px 16px;outline:none;font-size:16px}
.chatin button{background:var(--grad);color:#fff;border:0;border-radius:999px;padding:0 20px;font-weight:700;cursor:pointer}
.groupin{align-items:center}
.groupin .icon{background:none;color:var(--text);padding:4px 6px;font-size:20px;flex:none}
.groupin .gmic.recording{color:var(--red);animation:pulse 1s infinite}
.groupin .ginput{flex:1;min-width:0;background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:999px;padding:11px 14px;outline:none;font-size:16px}
.groupin .ginput:focus{border-color:var(--accent)}
.grecord{display:flex;align-items:center;gap:10px;padding:7px 12px;color:var(--red);font-size:13px;font-weight:700;border-top:1px solid var(--line);background:#E5383B12}
.grecord[hidden]{display:none}
.grecord button{margin-left:auto;border:0;border-radius:999px;padding:6px 12px;cursor:pointer;background:var(--panel2);color:var(--text);font-weight:700}
.grecord .gstop{margin-left:0;background:var(--grad);color:#fff}
.grecord audio{height:32px;max-width:min(220px,58vw)}
.urow.unread{border-color:var(--accent)}
.unreaddot{width:10px;height:10px;border-radius:50%;background:var(--orange);flex:none}
.reddot{position:absolute;top:8px;right:14px;width:9px;height:9px;border-radius:50%;background:var(--orange);display:none}
.reddot.on{display:block}

/* ---------- chat media ---------- */
.b.media{padding:4px;background:none!important}
.chatmedia{max-width:220px;max-height:280px;border-radius:14px;display:block}
.chatmedia.expandable{cursor:zoom-in}
.snapcaption{max-width:220px;padding:7px 9px 3px;font-size:13px;line-height:1.3;color:var(--text)}
.chatfile{display:inline-block;background:var(--panel2);border:1px solid var(--line);color:var(--text);padding:10px 14px;border-radius:14px}
.b audio{height:38px}
.media-viewer{position:fixed;inset:0;z-index:160;display:flex;align-items:center;justify-content:center;padding:18px;background:#000e;animation:pop .18s ease}
.media-viewer img,.media-viewer video{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px}
.media-close{position:absolute;top:calc(14px + env(safe-area-inset-top));right:14px;z-index:1;width:42px;height:42px;border:0;border-radius:50%;background:#000b;color:#fff;font-size:24px;cursor:pointer}
.tin .mic.recording{color:var(--red);animation:pulse 1s infinite}
@keyframes pulse{50%{opacity:.4}}

/* ---------- 1:1 video call ---------- */
#incall{position:fixed;inset:0;z-index:150;display:none;align-items:center;justify-content:center;
  padding:max(20px,env(safe-area-inset-top)) max(20px,env(safe-area-inset-right)) max(20px,env(safe-area-inset-bottom)) max(20px,env(safe-area-inset-left));background:#0009;backdrop-filter:blur(8px)}
#incall.on{display:flex}
.incomingcard{width:min(100%,390px);display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 24px 24px;text-align:center;background:#171720fa;border:1px solid #ffffff22;border-radius:24px;box-shadow:0 20px 60px #000b}
.avatar.ib{width:72px;height:72px;background:var(--grad);color:#fff;font-size:24px}
.incomingwho b{display:block;font-size:22px;line-height:1.2}.incomingwho div{margin-top:5px;color:var(--muted);font-size:15px}
.incomingactions{display:flex;width:100%;gap:10px;margin-top:8px}.incomingactions .pill{flex:1;min-height:52px;border-radius:14px;font-size:16px;font-weight:700}
#callo{position:fixed;inset:0;z-index:140;height:100dvh;background:#000;display:none;flex-direction:column}
#callo.on{display:flex}
.stagev{position:relative;flex:1;min-height:0;overflow:hidden;background:#000}
/* Preserve the entire remote/local frame in both portrait and landscape. The
   black stage provides the unavoidable letterbox when aspect ratios differ. */
#rv{display:block;width:100%;height:100%;object-fit:contain;background:#000}
#lv{position:absolute;right:max(14px,env(safe-area-inset-right));bottom:max(14px,env(safe-area-inset-bottom));width:clamp(96px,26vw,200px);aspect-ratio:3/4;height:auto;object-fit:contain;background:#111;border-radius:14px;border:2px solid #ffffff66;cursor:pointer;box-shadow:0 5px 18px #0009}
#lv:focus-visible{outline:3px solid var(--accent2);outline-offset:2px}
.cstat{position:absolute;z-index:4;left:12px;right:12px;top:max(14px,env(safe-area-inset-top));text-align:center;color:#fff;font-size:16px;text-shadow:0 1px 6px #000}
.cbar{position:absolute;z-index:2;left:0;right:0;bottom:0;display:flex;justify-content:center;gap:clamp(10px,5vw,22px);padding:34px 0 calc(18px + env(safe-area-inset-bottom));background:linear-gradient(transparent,#000b 55%)}
.cbar button{width:clamp(48px,14vw,60px);height:clamp(48px,14vw,60px);border-radius:50%;border:0;background:#ffffff1c;color:#fff;cursor:pointer}
.cbar .hang{background:#ff3b5c;color:#fff}
#callapps{position:absolute;inset:0;z-index:3;pointer-events:none}
.callappdock{position:absolute;top:max(50px,calc(env(safe-area-inset-top) + 40px));left:12px;right:12px;display:none;align-items:center;justify-content:center;gap:8px;pointer-events:auto}
#callapps.menuopen .callappdock{display:flex}.callappdock label{display:flex;align-items:center;gap:7px;padding:7px 9px 7px 12px;border:1px solid #ffffff2a;border-radius:13px;background:#111d;color:#fff;font-size:12px;backdrop-filter:blur(10px)}
.callappdock select{max-width:min(52vw,250px);border:0;background:transparent;color:#fff;font:inherit;outline:0}.callappdock option{background:#171720;color:#fff}.callappclose{width:34px;height:34px;border:1px solid #ffffff2a;border-radius:50%;background:#111d;color:#fff;font-size:22px;line-height:1;cursor:pointer}
.callappstage{position:absolute;inset:max(92px,calc(env(safe-area-inset-top) + 78px)) 8px calc(82px + env(safe-area-inset-bottom));display:none;align-items:center;justify-content:center;pointer-events:none}.callappstage.open{display:flex;pointer-events:auto}
.callappstage .app-col{display:flex;flex-direction:column;align-items:center;gap:8px;max-width:100%;max-height:100%;pointer-events:auto}.callappstage .app-bar{display:flex;align-items:center;gap:10px;width:100%;padding:0 4px;color:#fff;text-shadow:0 1px 3px #000}.callappstage .app-bar .stat{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.callappstage .app-btn{border:0;border-radius:7px;background:#0009;color:#fff;padding:7px 10px;font:inherit;cursor:pointer}.callapploading{padding:12px 16px;border-radius:13px;background:#111d;color:#fff;font-size:14px;backdrop-filter:blur(10px)}
/* voice call: no video, show a calm gradient + the peer's name */
#callo.voice{background:linear-gradient(160deg,#1b1436,#0a0a12)}
#callo.voice #rv,#callo.voice #lv{display:none}
#callo.voice .cstat{top:max(14px,env(safe-area-inset-top));font-size:16px;font-weight:600}
/* video/voice picker popover */
.callmenu{position:fixed;z-index:160;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:6px;
  box-shadow:var(--shadow);display:flex;flex-direction:column;gap:2px;min-width:172px}
.cmi{display:flex;align-items:center;gap:10px;background:none;border:0;color:var(--text);padding:10px 12px;border-radius:10px;cursor:pointer;font-size:15px;font-weight:600;text-align:left}
.cmi:hover{background:var(--panel2)}
.cmi .ic{color:var(--violet)}
/* The remote frame remains uncropped while the call stage follows either phone
   orientation. Move the small preview away from the landscape controls. */
@media (orientation:landscape) and (max-height:600px){
  #lv{top:max(14px,env(safe-area-inset-top));bottom:auto;width:clamp(92px,19vw,180px);aspect-ratio:4/3}
  .cbar{padding-top:24px;padding-bottom:max(12px,env(safe-area-inset-bottom))}
}

/* ---------- groups (mesh video + avatars) ---------- */
.gavatars{display:flex}
.gavatars .gav{width:34px;height:34px;margin-left:-10px;border:2px solid var(--bg);font-size:13px}
.gavatars .gav:first-child{margin-left:0}
.gwho{display:block;margin-bottom:3px;color:var(--violet);font-size:11px;font-weight:700;letter-spacing:.01em}
.gvideos{display:none;gap:4px;padding:4px;background:#000}
.chatview.group.incall .gvideos{display:grid}
.gvideos[data-n="1"]{grid-template-columns:1fr}
.gvideos[data-n="2"],.gvideos[data-n="3"],.gvideos[data-n="4"]{grid-template-columns:1fr 1fr}
.gtile{position:relative;aspect-ratio:3/4;background:#111;border-radius:12px;overflow:hidden}
.gtile video{width:100%;height:100%;object-fit:cover}
.gname{position:absolute;left:6px;bottom:6px;color:#fff;font-size:11px;text-shadow:0 1px 4px #000}
.icon.ring{animation:pulse 1s infinite;color:var(--accent2)}
/* group in-call controls */
.gcallbar{display:none;justify-content:center;gap:18px;padding:10px 0;background:#000}
.chatview.group.incall .gcallbar{display:flex}
.gcallbar button{width:52px;height:52px;border-radius:50%;background:#ffffff1c;color:#fff}
.gcallbar .hang{background:#ff3b5c;color:#fff}
.chatview.group.voicecall .gcam{display:none}

/* ---------- modal (people picker) ---------- */
.modal{position:fixed;inset:0;z-index:120;background:#17122B73;display:flex;align-items:center;justify-content:center;padding:16px}
.sheet{background:var(--panel);width:100%;max-width:560px;max-height:80dvh;border-radius:20px;display:flex;flex-direction:column;overflow:hidden}
.mhead{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;font-weight:600;border-bottom:1px solid var(--line)}
.mbody{overflow-y:auto;padding:8px 12px 16px}
.picklabel{padding:9px 3px 0;color:var(--muted);font-size:13px;font-weight:700}

/* ---------- unified conversations (Snapchat-style) ---------- */
main.chats{max-width:960px;padding:0;display:flex;height:calc(var(--app-vh, 100dvh) - 56px - var(--tab-h));overflow:hidden}
/* chat views drop the app header and fill the whole screen (sidebar flush left) */
body.inchat header{display:none}
body.inchat main.chats{max-width:none;height:calc(var(--app-vh, 100dvh) - var(--tab-h));padding-top:env(safe-area-inset-top)}
.convlist{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}
.convlist .storiesbar{padding:10px 10px 12px}
.grouphead,.convhead{display:flex;justify-content:space-between;align-items:center;font-family:var(--display);font-size:20px;letter-spacing:-.01em;color:var(--text);padding:14px 12px 4px;font-weight:800}
.convhead{position:relative}
.headmenu{position:absolute;z-index:20;right:8px;top:calc(100% - 2px);min-width:220px;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
.headmenu[hidden]{display:none}
.headmenu button{display:block;width:100%;border:0;background:none;color:var(--red);text-align:left;padding:11px 13px;font:inherit;font-size:13px;font-weight:700;cursor:pointer;text-transform:none;letter-spacing:0}
.headmenu button:hover{background:#E5383B12}
.grouphead .pill{padding:5px 12px;font-size:14px}
.conv{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:none;border:0;border-bottom:1px solid var(--line);padding:11px 12px;color:var(--text);cursor:pointer}
.convhide{display:grid;place-items:center;width:18px;height:18px;flex:none;border-radius:50%;color:var(--muted);font-size:20px;line-height:1;cursor:pointer}
.convhide:hover,.convhide:focus-visible{background:var(--panel2);color:var(--red);outline:none}
.conv.active{background:var(--panel2)}
.conv .who{flex:1;min-width:0}
.conv .who b{font-weight:600}
.conv .sub{font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.conv.unread .sub.hot{color:var(--text);font-weight:600}
.conv.unread .who b{font-weight:800}
.camicon{display:grid;place-items:center;width:40px;height:40px;padding:0;flex:none;border:1px solid var(--line2);border-radius:12px;background:var(--panel);color:var(--text)}.camicon:hover,.camicon:focus-visible{border-color:var(--orange);color:var(--orange);background:var(--panel2);box-shadow:0 0 0 3px #FF5B141f}

.threadpane{display:none;flex:1;min-width:0;min-height:0;overflow:hidden;flex-direction:column}
/* a group opens inside the thread pane — fill it rather than the whole viewport */
.threadpane .chatview{height:100%}
.threadempty{margin:auto;color:var(--muted);padding:24px;text-align:center}
.thread{display:flex;flex-direction:column;height:100%;min-height:0;width:100%;overflow:hidden}
.thead{position:relative;display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line);flex:none}
.thead .who{flex:1;min-width:0}
.thead .back{font-size:26px}
.cdot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 1.5px var(--ink);margin-right:5px}
.tbody{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;padding:16px 14px 20px;display:flex;flex-direction:column;gap:9px}
.threadhint{margin:auto;color:var(--muted);font-size:13px;text-align:center;padding:20px}
.snapcard{position:relative;align-self:flex-start;display:flex;align-items:center;gap:8px;overflow:hidden;background:var(--panel2);border:1px solid var(--accent);color:var(--text);border-radius:16px;border-bottom-left-radius:5px;padding:12px 16px;cursor:pointer;font-weight:600}
.snapcard.photo{border-color:var(--orange);background:#FF5B1414}
.snapcard.video{border-color:var(--violet);background:#6D3BFF14}
.snapcard.photo .sq,.conv.snap-photo .sub.hot{color:var(--orange)}
.snapcard.video .sq,.conv.snap-video .sub.hot{color:var(--violet)}
.snapcard .sqt{color:var(--muted);font-weight:400;font-size:12px}
.snapcard.opening{opacity:.82}
.snapload{position:absolute;inset:auto 0 0;height:4px;background:var(--line2)}.snapload i{display:block;width:calc(var(--snap-progress,0) * 100%);height:100%;background:currentColor;transition:width .12s linear}.snapload b{position:absolute;right:8px;bottom:6px;padding:2px 6px;border-radius:999px;background:#08080cdd;color:#fff;font-size:10px;font-weight:700;white-space:nowrap}.snapload[hidden]{display:none}
/* sender-side delivery receipt (Snapchat-style): filled = Delivered, hollow = Opened.
   colour marks the type — red = photo snap, purple = video snap, blue = chat (later). */
.msgstatus{align-self:flex-start;display:flex;align-items:center;gap:5px;margin:-2px 6px 2px;font-size:11px;font-weight:600;color:var(--muted)}
.msgstatus .si{width:9px;height:9px;border-radius:2px;border:1.6px solid currentColor;box-sizing:border-box;flex:none}
.msgstatus.delivered .si{background:currentColor}
.msgstatus.opened .si{background:transparent}
.msgstatus.sent .si{background:transparent;opacity:.65}
.msgstatus.expired{color:var(--muted)}
.msgstatus.photo{color:var(--orange)}
.msgstatus.video{color:var(--violet)}
.msgstatus.text{color:var(--sky)}
.storyreplymsg{align-self:stretch!important;flex:none;width:auto!important;max-width:none!important;box-sizing:border-box;padding:7px!important;overflow:hidden;display:flex;flex-direction:column;gap:5px}
.storyreplypreview{display:grid;place-items:center;width:100%;max-height:420px;overflow:hidden;background:#000;border-radius:10px}
.storyreplypreview img{display:block;width:100%;height:100%;max-height:none;object-fit:contain}
.storyreplymsg .storyreplylabel{font-size:11px;font-weight:700;color:var(--muted);margin:2px 2px 7px}
.storyreplymsg .storyreplytext{padding:0 4px 4px;line-height:1.35;font-weight:600}
@media (min-width:600px){.storyreplymsg{align-self:flex-start!important;width:min(100%,400px)!important;max-width:100%!important}}
.ctyping{min-height:0;padding:2px 14px;color:var(--muted);font-size:12px}
.tin{display:flex;align-items:center;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line);flex:none;position:relative;z-index:2;background:var(--bg)}
.tin .icon{font-size:20px;flex:none}
.gifmark{font-size:10px;font-weight:900;letter-spacing:-.04em}
.gifpicker{position:fixed;z-index:170;inset:0;display:flex;align-items:flex-end;justify-content:center;padding:16px;background:#17122B66}.gifpickercard{width:min(560px,100%);max-height:76vh;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:24px;background:var(--panel);padding:14px;overflow:hidden}.gifpickerhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.gifclose{border:0;border-radius:50%;width:32px;height:32px;background:var(--panel2);color:var(--text);font-size:22px;cursor:pointer}.giftypes{display:flex;gap:7px;margin-bottom:7px}.giftypes button{border:1px solid var(--line);border-radius:999px;background:var(--panel2);color:var(--muted);padding:6px 11px;font:inherit;font-size:12px;cursor:pointer}.giftypes button.on{background:var(--grad);border-color:transparent;color:#fff;font-weight:700}.gifresults{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;overflow-y:auto;min-height:170px;padding:3px}.gifresults .spin,.gifresults .empty{grid-column:1/-1}.gifresult{min-height:86px;padding:0;border:0;border-radius:9px;overflow:hidden;background:var(--panel2);cursor:pointer}.gifresult img{width:100%;height:100%;object-fit:cover}.gifcredit{text-align:center;padding-top:8px;color:var(--muted);font-size:11px}.gifbubble{padding:5px!important;background:var(--panel2)!important}.gifbubble img{display:block;max-width:240px;max-height:260px;border-radius:11px}.gifbubble.sticker{background:transparent!important}.gifbubble span{display:block;padding:4px 3px 1px;color:var(--muted);font-size:10px}
.voicepreview{display:flex;align-items:center;gap:8px;padding:7px 10px;border-top:1px solid var(--line);background:var(--panel)}
.voicepreview[hidden]{display:none}
.voicepreview audio{height:32px;max-width:min(240px,60vw)}
.voicepreview button{border:0;border-radius:999px;padding:6px 12px;cursor:pointer;background:var(--panel2);color:var(--text);font-weight:700}
.voicepreview .vsend{background:var(--grad);color:#fff}
.tinput{flex:1;min-width:0;background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:999px;padding:10px 16px;outline:none;font-size:16px}
.tinput:focus{border-color:var(--accent)}

main.chats.showthread .convlist{display:none}
main.chats.showthread .threadpane{display:flex}
@media(min-width:720px){
  .convlist{width:340px;flex:none;border-right:1px solid var(--line)}
  main.chats .threadpane{display:flex}
  main.chats.showthread .convlist{display:block}
  .thead .back,.chathead .back{display:none}
}

/* ---------- toast ---------- */
.toast{position:fixed;left:50%;bottom:calc(var(--tab-h) + 20px);transform:translate(-50%,20px);z-index:200;
  background:var(--ink);border:0;color:#fff;padding:12px 18px;border-radius:999px;font-weight:700;box-shadow:var(--shadow);
  opacity:0;pointer-events:none;transition:.25s;max-width:88vw;text-align:center;font-size:14px}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* Phones keep the tab bar at the bottom, within thumb reach. Inside an open
   conversation it steps aside so the message box sits at the bottom edge. */
header{padding-top:max(14px, env(safe-area-inset-top))}
@media(max-width:719px){
  .camwrap{height:calc(var(--app-vh, 100dvh) - var(--tab-h) - env(safe-area-inset-bottom) - 64px - env(safe-area-inset-top));padding-bottom:0}
  .clipstage{height:calc(var(--app-vh, 100dvh) - var(--tab-h) - env(safe-area-inset-bottom) - 150px);min-height:360px}
  body.inchat main.chats{height:calc(var(--app-vh, 100dvh) - var(--tab-h) - env(safe-area-inset-bottom))}
  body.inthread #tabbar{display:none}
  body.inthread main.chats{height:var(--app-vh, 100dvh)}
  .toast{bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 16px)}
  body.inthread .toast{bottom:calc(80px + env(safe-area-inset-bottom))}
}

/* Call navigation stays outside the video and activity layers. */
.callwindowbar{position:relative;z-index:6;display:flex;align-items:center;gap:8px;padding:max(8px,env(safe-area-inset-top)) 12px 8px;background:#14141e;color:#fff;flex-shrink:0}
#cdrag{flex:1;min-width:0;font-size:12px;user-select:none;touch-action:none}
.callwindowbar button{width:44px;height:44px;border:1px solid #ffffff40;border-radius:12px;background:#252535;color:#fff;font-size:24px;cursor:pointer}
.callwindowbar button[hidden]{display:none}
#callo.mini{inset:auto;width:min(224px,calc(100vw - 16px));height:min(280px,calc(var(--app-vh,100dvh) - 16px));border:1px solid #ffffff40;border-radius:16px;overflow:hidden;box-shadow:0 8px 35px #0008}
#callo.mini .callwindowbar{padding:4px 6px;gap:4px}
#callo.mini #cdrag{cursor:move;font-size:11px}
#callo.mini .callwindowbar button{width:40px;height:40px}
#callo.mini .cstat{top:6px;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
#callo.mini #lv{width:54px;right:6px;bottom:6px;top:auto;border-radius:8px}
#callo.mini #callapps,#callo.mini #capps{display:none}
#callo.mini .cbar{position:relative;padding:6px;gap:8px;background:#14141e;flex-shrink:0}
#callo.mini .cbar .icon{width:44px;height:44px;min-width:0;padding:10px}
#callo.mini.voice{height:160px}
.commandstatus:empty{display:none}.commandstatus{padding:6px 12px;font-size:12px;color:var(--muted);flex-shrink:0}.chatbody a{color:inherit;text-decoration:underline;overflow-wrap:anywhere}

.commandstatus{white-space:pre-line;max-height:35dvh;overflow:auto}

/* ===================== feed ===================== */
/* A wall of flyers: media runs edge to edge, text posts become colour posters. */
main.feed{max-width:600px;padding-left:0;padding-right:0}
.feed .storiesbar{padding:8px 14px 12px}

/* who's on now */
.livenow{display:flex;align-items:center;gap:10px;width:calc(100% - 28px);margin:0 14px 12px;padding:7px 14px 7px 8px;border:0;border-radius:999px;background:var(--lime);color:var(--ink);font:inherit;font-size:14px;font-weight:700;text-align:left;cursor:pointer}
.livenow[hidden]{display:none}
.livestack{display:flex}
.livestack .avatar{width:30px;height:30px;font-size:13px;margin-left:-9px;box-shadow:0 0 0 2px var(--lime)}
.livestack .avatar:first-child{margin-left:0}
.livepulse{width:9px;height:9px;margin-left:auto;border-radius:50%;background:var(--ink);flex:none;animation:livepulse 1.8s ease-out infinite}
@keyframes livepulse{0%{box-shadow:0 0 0 0 #17122B70}100%{box-shadow:0 0 0 11px #17122B00}}

/* composer launcher + sheet */
.launcher{display:flex;align-items:center;gap:12px;width:calc(100% - 28px);margin:0 14px 22px;padding:8px;border:1.5px solid var(--line2);border-radius:24px;background:var(--panel);color:var(--muted);font:inherit;text-align:left;cursor:pointer;box-shadow:var(--shadow);transition:transform .15s}
.launcher:active{transform:scale(.985)}
.launchtext{flex:1;font-size:16px;font-weight:500}
.launchcam{display:grid;place-items:center;width:44px;height:44px;border-radius:16px;background:var(--grad);color:#fff;flex:none}
.sheetback{position:fixed;inset:0;z-index:110;display:flex;align-items:flex-end;justify-content:center;background:#17122B59;animation:fadein .2s ease}
.composersheet{width:min(600px,100%);max-height:92dvh;overflow:auto;display:flex;flex-direction:column;gap:12px;padding:18px 16px calc(16px + env(safe-area-inset-bottom));border-radius:30px 30px 0 0;background:var(--panel);animation:sheetup .3s cubic-bezier(.2,.9,.25,1.12)}
@media(min-width:720px){.sheetback{align-items:center}.composersheet{border-radius:30px}}
.sheethead{display:flex;align-items:center;justify-content:space-between;gap:12px}
.sheethead h2{margin:0;font-family:var(--display);font-size:28px;font-weight:800;letter-spacing:-.02em}
.sheetclose{width:40px;height:40px;border:0;border-radius:50%;background:var(--panel2);color:var(--text);font-size:22px;cursor:pointer}
.composersheet textarea{min-height:120px;padding:2px;border:0;outline:none;resize:none;background:none;color:var(--text);font-family:var(--display);font-size:25px;font-weight:700;line-height:1.18;letter-spacing:-.01em}
.composersheet textarea::placeholder{color:#B9B3CF}
.composerbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.composerbar .attach{display:inline-flex;align-items:center;gap:6px}
.audience{flex:1;min-width:120px;width:auto;padding:9px 14px;border:1px solid var(--line2);border-radius:999px;background:var(--panel2);color:var(--violet);font:inherit;font-weight:700}
#postsend{margin-left:auto;padding:11px 24px;font-size:15px}
@media(max-width:430px){.composerbar .attach span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.composerbar .attach{padding:9px 13px}}
.postpreview{position:relative;overflow:hidden;max-height:340px;border-radius:18px;background:#120d22}
.postpreview img,.postpreview video{display:block;width:100%;max-height:340px;object-fit:contain}
.removemedia{position:absolute;top:8px;right:8px;width:32px;height:32px;border:0;border-radius:50%;background:#17122Bcc;color:#fff;cursor:pointer}
.postprogress{height:5px;overflow:hidden;border-radius:5px;background:var(--panel2)}
.postprogress i{display:block;width:0;height:100%;background:var(--grad);transition:width .2s}
@keyframes sheetup{from{transform:translateY(48px);opacity:0}to{transform:none;opacity:1}}
@keyframes fadein{from{opacity:0}}

/* new posts + pull to refresh */
.newposts{position:sticky;z-index:5;top:calc(env(safe-area-inset-top,0px) + 10px);display:block;margin:0 auto 12px;border:0;background:var(--ink);color:#fff;box-shadow:var(--shadow);animation:dropin .45s cubic-bezier(.2,1.5,.4,1)}
@keyframes dropin{from{transform:translateY(-16px) scale(.9);opacity:0}}
.ptr{position:fixed;z-index:25;left:50%;top:calc(env(safe-area-inset-top,0px) + 10px);width:38px;height:38px;margin-left:-19px;display:grid;place-items:center;border-radius:50%;background:var(--panel);box-shadow:var(--shadow);color:var(--violet);opacity:0;transform:translateY(-20px);pointer-events:none}
.ptr.spin svg{animation:spinround .8s linear infinite}
@keyframes spinround{to{transform:rotate(360deg)}}

/* posts */
.post{position:relative;margin:0 0 26px}
.post.fresh .frame,.post.fresh .poster{animation:freshglow 2.6s ease-out}
@keyframes freshglow{0%{box-shadow:0 0 0 5px var(--lime),0 0 34px var(--lime)}100%{box-shadow:0 0 0 5px #C6F43200,0 0 34px #C6F43200}}
.frame{position:relative;margin:0;overflow:hidden;background:#120d22;touch-action:manipulation;-webkit-user-select:none;user-select:none}
.frame img,.frame video{display:block;width:100%;height:auto;max-height:80vh;object-fit:cover;cursor:zoom-in}
.frame .missing{padding:40px 16px;text-align:center;color:#ffffffaa}
.scrim{position:absolute;inset:0 0 auto;z-index:1;display:flex;align-items:center;gap:10px;padding:12px 14px 44px;background:linear-gradient(#17122Bb0,#17122B00);color:#fff;pointer-events:none}
.scrim>*{pointer-events:auto}
.scrim .avatar{width:38px;height:38px;font-size:15px;box-shadow:0 0 0 2px #fff}
.scrim .profilelink{color:#fff}
.scrim .when{color:#ffffffd0}
@media(min-width:620px){.frame{border-radius:26px}.post>.postfoot{padding-left:4px;padding-right:4px}}
.byline{display:flex;align-items:center;gap:10px;min-width:0}
.byline .who{min-width:0}
.when{font-size:13px;color:var(--muted)}
.grouptag{display:inline-block;margin-left:6px;padding:2px 9px;border-radius:999px;background:var(--lime);color:var(--ink);font-size:12px;font-weight:800;vertical-align:1px}
.postmenu{position:relative;margin-left:auto}
.postmenu .icon{color:inherit}
.postmenu .headmenu{top:100%;right:0;min-width:140px}
.postfoot{padding:10px 14px 0}
.postbody{margin:2px 0 4px;white-space:pre-wrap;overflow-wrap:anywhere;font-size:16px;line-height:1.45}
.postbody a,.cmtbody a{color:var(--violet);font-weight:600}

/* text-only posts: colour posters */
.poster{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:22px;min-height:230px;margin:0 14px;padding:20px 20px 18px;border-radius:28px;overflow:hidden}
.poster.t0{background:var(--orange);color:#fff}
.poster.t1{background:var(--violet);color:#fff}
.poster.t2{background:var(--lime);color:var(--ink)}
.poster.t3{background:var(--sky);color:var(--ink)}
.poster .byline{align-self:flex-start;padding:4px 12px 4px 4px;border-radius:999px;background:#fff;color:var(--ink)}
.poster .byline .avatar{width:30px;height:30px;font-size:13px}
.poster .byline .profilelink{font-size:14px}
.poster .when{color:var(--muted);font-size:12px}
.postertext{font-family:var(--display);font-size:clamp(30px,8.4vw,48px);font-weight:800;font-stretch:85%;line-height:1.02;letter-spacing:-.025em;white-space:pre-wrap;overflow-wrap:anywhere}
.postertext.long{font-size:clamp(21px,5.4vw,29px);font-weight:700;font-stretch:95%;line-height:1.16;letter-spacing:-.01em}
.postertext a{color:inherit;text-decoration:underline;text-decoration-thickness:2px}
.poster .postmenu .icon{background:#fff;border-radius:50%;width:34px;height:34px;padding:0;color:var(--ink)}
.postertop{display:flex;align-items:center;gap:10px}

/* actions */
.postactions{display:flex;align-items:center;gap:2px;margin:4px -8px 0}
.act{display:inline-flex;align-items:center;gap:6px;padding:8px 10px;border:0;border-radius:14px;background:none;color:var(--ink);font:inherit;font-size:15px;font-weight:800;cursor:pointer}
.act:hover{background:var(--panel2)}
.act svg{transition:transform .2s}
.act.like.on{color:var(--orange)}
.act.like.on svg{fill:currentColor}
.act.pop svg{animation:likepop .5s cubic-bezier(.2,1.7,.4,1)}
@keyframes likepop{0%{transform:scale(1)}30%{transform:scale(1.5) rotate(-8deg)}100%{transform:scale(1)}}
.act span.bump{display:inline-block;animation:numbump .45s ease}
@keyframes numbump{40%{transform:translateY(-5px);color:var(--orange)}}
.burst{position:absolute;z-index:2;left:50%;top:50%;width:120px;height:120px;margin:-60px 0 0 -60px;pointer-events:none;animation:burst .85s ease-out forwards}
.burst svg{width:100%;height:100%;fill:var(--orange);stroke:#fff;stroke-width:1.2;filter:drop-shadow(0 8px 22px #FF5B14aa)}
@keyframes burst{0%{transform:scale(.2);opacity:0}22%{transform:scale(1.12);opacity:1}50%{transform:scale(.94)}100%{transform:scale(1.3) translateY(-20px);opacity:0}}

/* edit + comments */
.postedit{display:flex;flex-direction:column;gap:8px;margin:6px 0}
.postedit .row{display:flex;gap:8px;justify-content:flex-end}
.poster .postedit .field{background:#fff;color:var(--ink)}
.comments{display:flex;flex-direction:column;gap:12px;margin-top:8px;padding:14px;border-radius:20px;background:var(--panel2)}
.cmt{display:flex;align-items:flex-start;gap:9px}
.cmt.reply{margin-left:38px}
.avatar.sm{width:30px;height:30px;font-size:12px}
.cmtmain{min-width:0;flex:1}
.cmtbody{overflow-wrap:anywhere;line-height:1.4}
.cmt .sub{margin-top:3px;font-size:12px;color:var(--muted)}
.linkbtn{padding:0;border:0;background:none;color:var(--violet);font:inherit;font-weight:700;cursor:pointer}
.linkbtn.danger{color:var(--red)}
.cmtform{display:flex;gap:8px}
.cmtform .field{flex:1;min-width:0;padding:11px 14px;border-radius:999px;background:var(--panel)}
#profileposts{width:100%;margin-top:16px;text-align:left}

/* full-screen viewer */
.fsviewer{position:fixed;inset:0;z-index:180;display:flex;flex-direction:column;background:#0d0a18;animation:fadein .2s ease;touch-action:none}
.fsstage{position:relative;flex:1;overflow:hidden}
.fsslide{position:absolute;inset:0;display:grid;place-items:center;transition:transform .32s cubic-bezier(.2,.9,.25,1),opacity .32s}
.fsslide img,.fsslide video{max-width:100%;max-height:100%;object-fit:contain;-webkit-user-drag:none}
.fstop{position:absolute;z-index:2;top:0;left:0;right:0;display:flex;align-items:center;gap:10px;padding:calc(12px + env(safe-area-inset-top)) 14px 36px;background:linear-gradient(#000a,#0000);color:#fff}
.fstop .profilelink{color:#fff}
.fstop .when{color:#ffffffbb}
.fsclose{margin-left:auto;width:42px;height:42px;border:0;border-radius:50%;background:#ffffff26;color:#fff;font-size:24px;cursor:pointer}
.fsbottom{position:absolute;z-index:2;left:0;right:0;bottom:0;display:flex;align-items:flex-end;gap:12px;padding:40px 16px calc(16px + env(safe-area-inset-bottom));background:linear-gradient(#0000,#000b);color:#fff}
.fscaption{flex:1;min-width:0;max-height:30vh;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.4}
.fsbottom .act{color:#fff;background:#ffffff1f}
.fsbottom .act.like.on{color:var(--orange);background:#fff}
.fscount{font-size:12px;font-weight:700;color:#ffffffaa}
.fsnav{position:absolute;z-index:2;top:50%;width:46px;height:46px;margin-top:-23px;border:0;border-radius:50%;background:#ffffff26;color:#fff;font-size:28px;cursor:pointer}
.fsnav.prev{left:12px}.fsnav.next{right:12px}
.fsnav[hidden]{display:none}
@media(hover:none){.fsnav{display:none}}

.newposts[hidden],.comments[hidden],.postmenu .headmenu[hidden],.postbody[hidden],.postpreview[hidden],.postprogress[hidden]{display:none}
@media (prefers-reduced-motion:reduce){
  .launcher,.composersheet,.sheetback,.newposts,.post.fresh .frame,.post.fresh .poster,.act svg,.act.pop svg,.act span.bump,.burst,.fsslide,.livepulse,.pill{animation:none!important;transition:none!important}
}

/* ===================== discover ===================== */
.tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.tile{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-height:150px;padding:16px;border:0;border-radius:26px;text-align:left;font:inherit;cursor:pointer;transition:transform .15s}
.tile:active{transform:scale(.97)}
.tile b{margin-top:auto;font-family:var(--display);font-size:24px;font-weight:800;letter-spacing:-.02em;line-height:1}
.tiletext{font-size:13px;font-weight:600;line-height:1.3;opacity:.85}
.tileicon{display:grid;place-items:center;width:46px;height:46px;border-radius:16px;background:#ffffff33}
.tile.t0{background:var(--orange);color:#fff}
.tile.t1{background:var(--violet);color:#fff}
.tile.t2{background:var(--lime);color:var(--ink)}
.tile.t3{background:var(--sky);color:var(--ink)}
.tile.t4{background:var(--ink);color:#fff}
.tile.t4 .tileicon{background:#C6F43233;color:var(--lime)}
.tile.t2 .tileicon,.tile.t3 .tileicon{background:#17122B14}
.tile.plain{grid-column:1/-1;min-height:96px;background:var(--panel);border:1.5px solid var(--line2);color:var(--ink);flex-direction:row;align-items:center;gap:14px}
.tile.plain b{margin-top:0}
.tile.plain .tileicon{background:var(--panel2);color:var(--violet)}
.tile.plain .tiletext{flex:1}

/* ===================== do not disturb ===================== */
.rowaction.favbtn.on{background:var(--lime);border-color:var(--ink);color:var(--ink)}
.rowaction.favbtn.on svg{fill:currentColor}
.screenedbar{display:flex;align-items:center;gap:10px;width:calc(100% - 20px);margin:10px 10px 0;padding:11px 14px;border:0;border-radius:18px;background:var(--panel2);color:var(--violet);font:inherit;font-weight:800;text-align:left;cursor:pointer}
.screenedbar span{flex:1;color:var(--ink)}
.screenedbar b{font-size:13px}
.screenedbar.fresh{background:var(--violet);color:#fff}
.screenedbar.fresh span{color:#fff}
.screenedlist{display:flex;flex-direction:column}
.screenedlist .urow.unread{border-color:var(--violet);border-width:1.5px}

/* ===================== section pages (creators, market, tickets) ===================== */
.backlink{display:inline-flex;align-items:center;gap:4px;margin:4px 0 0;padding:6px 10px 6px 4px;border:0;border-radius:999px;background:none;color:var(--violet);font:inherit;font-weight:700;cursor:pointer}
.lede{margin:-4px 4px 14px;color:var(--muted);font-size:15px;line-height:1.4;max-width:60ch}
.chips{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 14px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;padding:8px 15px;border:1.5px solid var(--line2);border-radius:999px;background:var(--panel);color:var(--ink);font:inherit;font-size:14px;font-weight:700;cursor:pointer}
.chip.on{background:var(--ink);border-color:var(--ink);color:#fff}
#adminbar:not(:empty){margin:0 0 14px}
#adminbar .pill,.pill.withicon{display:inline-flex;align-items:center;gap:6px}
.checkrow{display:flex;align-items:center;gap:8px;margin:12px 2px 0;font-weight:600}

/* creators */
.creatorgrid{display:grid;grid-template-columns:1fr;gap:16px}
@media(min-width:560px){.creatorgrid{grid-template-columns:1fr 1fr}}
.creator{overflow:hidden;border-radius:26px;background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow)}
.cover{position:relative;aspect-ratio:4/3;display:grid;place-items:center;overflow:hidden}
.cover img{width:100%;height:100%;object-fit:cover}
.cover.tone0{background:var(--orange)}.cover.tone1{background:var(--violet)}.cover.tone2{background:var(--lime)}.cover.tone3{background:var(--sky)}
.mono{font-family:var(--display);font-size:84px;font-weight:800;font-stretch:80%;letter-spacing:-.04em;color:#ffffffe6}
.cover.tone2 .mono,.cover.tone3 .mono{color:var(--ink)}
.featured{position:absolute;top:12px;left:12px;padding:4px 11px;border-radius:999px;background:var(--ink);color:#fff;font-size:12px;font-weight:800}
.cbody{display:flex;flex-direction:column;gap:6px;padding:16px}
.kindtag{align-self:flex-start;padding:3px 10px;border-radius:999px;background:var(--lime);color:var(--ink);font-size:12px;font-weight:800}
.cbody h3{margin:2px 0 0;font-family:var(--display);font-size:26px;font-weight:800;letter-spacing:-.02em;line-height:1.05}
.tagline{margin:0;color:var(--ink);line-height:1.4}
.city{color:var(--muted);font-size:14px;font-weight:600}
.cacts{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.cacts .pill{display:inline-flex;align-items:center;gap:6px;text-decoration:none}
.adminrow{display:flex;align-items:center;gap:14px;margin-top:8px;padding-top:10px;border-top:1px solid var(--line)}
.adminrow .muted{flex:1}
.creatorform .lbl{margin-top:8px}

/* ===================== tickets + payments ===================== */
.eventlist{display:flex;flex-direction:column;gap:12px}
.eventcard,.ticketrow{display:flex;align-items:center;gap:14px;width:100%;padding:12px;border:0;border-radius:24px;text-align:left;font:inherit;cursor:pointer;transition:transform .15s}
.eventcard:active,.ticketrow:active{transform:scale(.985)}
.eventcard.tone0,.ticketrow.tone0{background:var(--orange);color:#fff}
.eventcard.tone1,.ticketrow.tone1{background:var(--violet);color:#fff}
.eventcard.tone2,.ticketrow.tone2{background:var(--lime);color:var(--ink)}
.eventcard.tone3,.ticketrow.tone3{background:var(--sky);color:var(--ink)}
.datebox{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:none;width:64px;height:68px;border-radius:18px;background:#fff;color:var(--ink)}
.datebox b{font-family:var(--display);font-size:30px;font-weight:800;line-height:1}
.datebox span{font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--orange)}
.datebox.big{width:84px;height:90px}.datebox.big b{font-size:42px}
.evbody{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.evtitle{font-family:var(--display);font-size:21px;font-weight:800;letter-spacing:-.015em;line-height:1.08}
.evvenue{font-size:14px;font-weight:600;opacity:.85}
.evprice{align-self:flex-start;margin-top:4px;padding:3px 10px;border-radius:999px;background:#ffffff33;font-size:13px;font-weight:800}
.eventcard.tone2 .evprice,.eventcard.tone3 .evprice{background:#17122B14}
.tstatus{align-self:flex-start;margin-top:4px;padding:3px 10px;border-radius:999px;background:#fff;color:var(--ink);font-size:12px;font-weight:800}
.qrhint{flex:none;display:grid;place-items:center;width:44px;height:44px;border-radius:14px;background:#ffffff33}
.evhero{position:relative;overflow:hidden;margin:6px 0 14px;border-radius:28px;background:var(--violet);color:#fff;min-height:200px;display:flex;align-items:flex-end}
.evhero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.evherotext{position:relative;display:flex;align-items:flex-end;gap:14px;width:100%;padding:18px;background:linear-gradient(#17122B00,#17122Bcc)}
.evhero h1{margin:0;font-family:var(--display);font-size:clamp(28px,7vw,40px);font-weight:800;font-stretch:85%;letter-spacing:-.025em;line-height:1}
.evfacts{display:grid;gap:10px;margin:0 0 12px}
.evfacts div{display:flex;flex-direction:column;padding:12px 14px;border-radius:18px;background:var(--panel);border:1px solid var(--line)}
.evfacts b{font-size:13px;color:var(--muted)}
.evdesc{margin:0 4px 6px;line-height:1.5}
.tiers{display:flex;flex-direction:column;gap:10px}
.tier{display:flex;align-items:center;gap:12px;padding:14px;border:2px solid var(--line2);border-radius:20px;background:var(--panel);cursor:pointer}
.tier:has(input:checked){border-color:var(--violet);background:var(--panel2)}
.tier input{accent-color:var(--violet);width:20px;height:20px}
.tiername{flex:1;display:flex;flex-direction:column;font-weight:800}
.tiername small{font-weight:600;color:var(--muted)}
.tier b{font-family:var(--display);font-size:20px}
.tier.soldout{opacity:.5;cursor:not-allowed}
.buybar{position:sticky;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 10px);z-index:4;display:flex;gap:10px;align-items:center;margin-top:16px;padding:10px;border-radius:24px;background:var(--panel);box-shadow:var(--shadow)}
.buybar .btn{margin:0;flex:1}
.qty{display:flex;align-items:center;gap:4px;padding:4px;border-radius:999px;background:var(--panel2)}
.qbtn{width:38px;height:38px;border:0;border-radius:50%;background:var(--panel);color:var(--ink);font-size:22px;font-weight:700;cursor:pointer}
.qty output{min-width:22px;text-align:center;font-weight:800}
.qrbox{display:grid;place-items:center;padding:18px;border-radius:24px;background:#fff;border:2px solid var(--ink)}
.qrbox img{width:min(260px,70vw);height:auto;image-rendering:pixelated}
.center{text-align:center}
.payoutform .muted{margin:0}
.addr{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:0}
.payoutrow{display:flex;align-items:center;gap:10px;margin:0 0 14px;padding:12px 14px;border-radius:20px;background:var(--panel2);color:var(--violet);font-size:14px}
.payoutrow span{flex:1;min-width:0;color:var(--ink)}
.ticketrow.waiting{cursor:default;background:var(--panel2);color:var(--ink);box-shadow:inset 0 0 0 2px var(--orange)}
.ticketrow.waiting .finish{flex:none}

/* ===================== marketplace ===================== */
.markettop{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.markettop .chips{padding-bottom:10px}
.chips.cats{padding-top:0}
.chip.small{padding:6px 12px;font-size:13px}
.marketgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(min-width:560px){.marketgrid{grid-template-columns:repeat(3,1fr)}}
.marketgrid .empty,.marketgrid .spin{grid-column:1/-1}
.listing{display:flex;flex-direction:column;gap:2px;padding:0;border:0;background:none;text-align:left;font:inherit;color:var(--ink);cursor:pointer}
.lphoto{position:relative;display:grid;place-items:center;aspect-ratio:1;overflow:hidden;margin-bottom:6px;border-radius:22px}
.lphoto img{width:100%;height:100%;object-fit:cover}
.lphoto.tone0{background:var(--orange)}.lphoto.tone1{background:var(--violet)}.lphoto.tone2{background:var(--lime)}.lphoto.tone3{background:var(--sky)}
.lmono{font-family:var(--display);font-size:64px;font-weight:800;color:#ffffffe0}
.lphoto.tone2 .lmono,.lphoto.tone3 .lmono{color:var(--ink)}
.lprice{font-family:var(--display);font-size:20px;font-weight:800;letter-spacing:-.01em}
.ltitle{font-size:14px;font-weight:600;line-height:1.3;color:var(--muted);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.lstatus{position:absolute;left:8px;top:8px;padding:3px 9px;border-radius:999px;background:var(--ink);color:#fff;font-size:11px;font-weight:800}
.lstatus.pending{background:var(--lime);color:var(--ink)}
.lstatus.inline{position:static}
.lgallery{display:flex;gap:8px;overflow-x:auto;scroll-snap-type:x mandatory;margin:6px -12px 8px;padding:0 12px;scrollbar-width:none}
.lgallery::-webkit-scrollbar{display:none}
.lgallery img,.lgallery .lphoto{flex:none;width:100%;aspect-ratio:1;max-height:70vh;object-fit:cover;border-radius:26px;scroll-snap-align:center}
.lphoto.big .lmono{font-size:120px}
.lhead{display:flex;align-items:center;gap:10px;margin-top:6px}
.lprice.big{font-size:38px}
.ltitle.big{margin:4px 0 8px;color:var(--ink);font-family:var(--display);font-size:26px;font-weight:800;letter-spacing:-.02em;line-height:1.1;-webkit-line-clamp:unset;display:block}
.lmeta{display:flex;align-items:center;gap:10px;font-size:14px}
.ldesc{margin:12px 2px;white-space:pre-wrap;line-height:1.5}
.sellerrow{display:flex;align-items:center;gap:12px;width:100%;margin:12px 0;padding:12px;border:1px solid var(--line);border-radius:20px;background:var(--panel);text-align:left;font:inherit;color:var(--ink);cursor:pointer}
.sellerrow>span{display:flex;flex-direction:column}
.lactions{display:flex;flex-direction:column;gap:6px}
.lactions .btn{margin-top:4px}
.btn.withicon{display:inline-flex;align-items:center;justify-content:center;gap:8px}
.notice{padding:14px 16px;border-radius:18px;background:var(--panel2);font-weight:600;line-height:1.4}
.notice.good{background:var(--lime);color:var(--ink)}
.sellphotos{display:flex;gap:8px;flex-wrap:wrap}
.addphoto{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;width:88px;height:88px;border:2px dashed var(--line2);border-radius:18px;color:var(--violet);font-size:12px;font-weight:700;cursor:pointer}
.addphoto[hidden]{display:none}
.sellthumb{position:relative;width:88px;height:88px;border-radius:18px;overflow:hidden}
.sellthumb img{width:100%;height:100%;object-fit:cover}
.sellthumb button{position:absolute;top:4px;right:4px;width:24px;height:24px;border:0;border-radius:50%;background:#17122Bcc;color:#fff;font-size:12px;cursor:pointer}

.storyhint{align-self:center;max-width:220px;margin:0 0 18px;color:var(--muted);font-size:13px;line-height:1.35}
.storyitem .ring.add{font-family:var(--display);font-size:30px;font-weight:700}

/* ===================== caribbean tv ===================== */
.tvsub{margin:-4px 4px 12px;color:var(--muted);font-size:14px;font-weight:600;line-height:1.4}
.tvsearch{margin:0 0 14px}
.flaggrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.flaggrid .empty{grid-column:1/-1}
.flaggrid[hidden]{display:none}
.flagtile{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:10px 10px 12px;border:0;border-radius:22px;background:var(--panel);box-shadow:var(--shadow);text-align:left;font:inherit;color:var(--ink);cursor:pointer;transition:transform .15s}
.flagtile:active{transform:scale(.97)}
.flagtile .flag{width:100%;aspect-ratio:4/3;max-width:100%;object-fit:cover;border-radius:14px;margin-bottom:6px;box-shadow:inset 0 0 0 1px var(--line)}
.flagtile b{font-family:var(--display);font-size:17px;font-weight:800;letter-spacing:-.01em;line-height:1.1}
.flagtile span{font-size:13px;font-weight:700;color:var(--violet)}
.flagtile.none{background:var(--panel2);box-shadow:none}
.kindart{display:grid;place-items:center;width:100%;aspect-ratio:4/3;max-width:100%;border-radius:14px;margin-bottom:6px}
.kindart.big{width:86px;flex:none;margin:0;box-shadow:var(--shadow)}
.kindart.t0{background:var(--orange);color:#fff}.kindart.t1{background:var(--violet);color:#fff}.kindart.t2{background:var(--lime);color:var(--ink)}
.kindart.t3{background:var(--sky);color:var(--ink)}.kindart.t4{background:var(--ink);color:var(--lime)}
#tvfound:not(:empty){margin-top:4px}
.flagtile.none .flag{filter:grayscale(.7);opacity:.7}
.flagtile.none span{color:var(--muted);font-weight:600}
.countryhead{display:flex;align-items:center;gap:14px;margin:8px 0 10px}
.countryhead .vtitle{margin:0}
.countryhead .tvsub{margin:4px 0 0}
.flag.big{width:86px;aspect-ratio:4/3;object-fit:cover;border-radius:14px;flex:none;box-shadow:var(--shadow)}
.chlist{display:flex;flex-direction:column;gap:8px}
.chrow{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;border:0;border-radius:20px;background:var(--panel);text-align:left;font:inherit;color:var(--ink);cursor:pointer}
.chrow:active{transform:scale(.99)}
.chrow.off{opacity:.6}
.chbody{flex:1;min-width:0;display:flex;flex-direction:column}
.chbody b{font-weight:800;font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chbody span{font-size:13px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chlogo{position:relative;flex:none;display:grid;place-items:center;width:52px;height:52px;border-radius:14px;background:var(--panel2);overflow:hidden}
.chlogo b{font-family:var(--display);font-size:22px;font-weight:800;color:var(--violet)}
.chlogo img{position:absolute;inset:6px;width:calc(100% - 12px);height:calc(100% - 12px);object-fit:contain}
.chlogo.hasimg{background:#fff;box-shadow:inset 0 0 0 1px var(--line)}
.chlogo.hasimg b{visibility:hidden}
.chlogo.big{width:58px;height:58px}
.livepill{flex:none;display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:999px;background:var(--orange);color:#fff;font-size:13px;font-weight:800}
.offlist{margin-top:18px}
.offlist summary{cursor:pointer;padding:6px 4px 10px;color:var(--muted);font-weight:700}
.tv.watch .screen{position:relative;margin:8px -12px 12px;background:#000;aspect-ratio:16/9;max-width:calc(100% + 24px)}
.tv.watch video{width:100%;height:100%;display:block;background:#000}
.screenmsg{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:20px;text-align:center;background:#0d0a18e6;color:#fff}
.screenmsg span{font-size:14px;opacity:.8;max-width:34ch}
.screenmsg[hidden]{display:none}
.nowplaying{display:flex;align-items:center;gap:12px;margin-bottom:8px}
@media (min-width:600px){.tv.watch .screen{margin:8px 0 12px;border-radius:20px;overflow:hidden;max-width:100%}}

/* ===================== livestreams ===================== */
body.onlive header,body.onlive #tabbar{display:none}
main.live{position:fixed;inset:0;z-index:60;max-width:none;margin:0;padding:0;overflow:hidden;background:#0d0a18;color:#fff}
.lpreview,.lplayer,.lstage,.lguestview video#lhostcam{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#0d0a18}
@media (min-aspect-ratio:4/5){.lplayer,.lstage,.lguestview video#lhostcam{object-fit:contain}}
.ltop{position:absolute;z-index:3;top:calc(env(safe-area-inset-top) + 12px);left:12px;right:12px;display:flex;align-items:center;gap:8px}
.lback,.lclose{display:grid;place-items:center;width:40px;height:40px;border:0;border-radius:50%;background:#00000059;color:#fff;font-size:26px;cursor:pointer}
.lclose{position:absolute;z-index:3;top:calc(env(safe-area-inset-top) + 12px);left:12px}
.lhost{display:flex;align-items:center;gap:8px;min-width:0;padding:4px 12px 4px 4px;border:0;border-radius:999px;background:#00000059;color:#fff;font:inherit;text-align:left;cursor:pointer}
.lhost .avatar{width:32px;height:32px;font-size:14px}
.lhost span{display:flex;flex-direction:column;min-width:0}
.lhost b{font-size:14px;font-weight:800}
.lhost small{font-size:12px;opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:40vw}
.lbadge{flex:none;padding:4px 10px;border-radius:8px;background:var(--orange);color:#fff;font-size:12px;font-weight:900;letter-spacing:.06em}
.lviewers{flex:none;display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:8px;background:#00000059;font-size:13px;font-weight:700}
.lstate{font-size:13px;font-weight:700;opacity:.9;text-shadow:0 1px 3px #000a}
.lend{margin-left:auto;background:#00000080;color:#fff;border-color:transparent}
.lguests{position:absolute;z-index:3;top:calc(env(safe-area-inset-top) + 62px);left:12px;right:12px;display:flex;flex-wrap:wrap;gap:6px}
.lguest{display:inline-flex;align-items:center;gap:8px;padding:4px 4px 4px 12px;border-radius:999px;background:#00000080;font-size:13px;font-weight:700}
.lguest button{padding:4px 10px;border:0;border-radius:999px;background:#fff;color:var(--red);font:inherit;font-size:12px;font-weight:800;cursor:pointer}
.lbottom{position:absolute;z-index:3;left:12px;right:12px;bottom:calc(env(safe-area-inset-bottom) + 12px);display:flex;flex-direction:column;gap:8px}
.lcomments{max-height:36vh;overflow-y:auto;display:flex;flex-direction:column;gap:8px;scrollbar-width:none;-webkit-mask-image:linear-gradient(transparent,#000 30%)}
.lcomments::-webkit-scrollbar{display:none}
.lcomment{display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height:1.35;text-shadow:0 1px 3px #000a}
.lcomment .avatar{width:28px;height:28px;font-size:12px}
.lcomment span{flex:1;min-width:0;overflow-wrap:anywhere}
.lcomment b{font-weight:800;margin-right:2px}
.linvite{flex:none;padding:4px 10px;border:0;border-radius:999px;background:var(--lime);color:var(--ink);font:inherit;font-size:12px;font-weight:800;cursor:pointer}
.lsay{display:flex;gap:8px}
.lsay input{flex:1;min-width:0;padding:12px 16px;border:1px solid #ffffff40;border-radius:999px;background:#00000059;color:#fff;font:inherit;font-size:15px}
.lsay input::placeholder{color:#ffffffb3}
.lheart{flex:none;width:46px;height:46px;border:0;border-radius:50%;background:#00000059;font-size:22px;cursor:pointer}
.lfloat{position:absolute;z-index:4;bottom:calc(env(safe-area-inset-bottom) + 70px);font-size:30px;pointer-events:none;animation:lfloat 2.2s ease-out forwards}
@keyframes lfloat{0%{transform:translateY(0) scale(.6);opacity:0}15%{opacity:1;transform:translateY(-20px) scale(1)}100%{transform:translateY(-320px) scale(1.2);opacity:0}}
.lmsg{position:absolute;z-index:2;inset:0;display:grid;place-items:center;padding:24px;text-align:center;font-size:16px;font-weight:700;pointer-events:none}
.lmsg[hidden]{display:none}
.lmsg span{padding:12px 18px;border-radius:16px;background:#00000080;max-width:34ch}
.lunmute{position:absolute;z-index:3;left:50%;top:calc(env(safe-area-inset-top) + 70px);transform:translateX(-50%);display:inline-flex;align-items:center;gap:6px;background:#fff;color:var(--ink);border:0}
.lunmute[hidden]{display:none}
.linvite-banner{position:absolute;z-index:5;left:16px;right:16px;top:30%;display:flex;flex-direction:column;gap:6px;padding:18px;border-radius:24px;background:var(--panel);color:var(--ink);box-shadow:var(--shadow)}
.linvite-banner[hidden]{display:none}
.linvite-banner b{font-family:var(--display);font-size:20px;font-weight:800;line-height:1.15}
.linvite-banner span{color:var(--muted);font-size:14px}
.linvite-banner div{display:flex;gap:8px}.linvite-banner .btn{margin-top:8px}
.lguestview{position:absolute;inset:0;z-index:1}
.lguestview[hidden]{display:none}
.lguestview #lmycam{position:absolute;z-index:2;right:12px;top:calc(env(safe-area-inset-top) + 64px);width:30%;max-width:180px;aspect-ratio:3/4;object-fit:cover;border-radius:16px;border:2px solid #fff;transform:scaleX(-1)}
.lonair{position:absolute;z-index:3;left:50%;top:calc(env(safe-area-inset-top) + 64px);transform:translateX(-50%);padding:6px 12px;border-radius:999px;background:var(--lime);color:var(--ink);font-size:13px;font-weight:800}
.lguestview #lleave{position:absolute;z-index:3;right:12px;top:calc(env(safe-area-inset-top) + 64px + min(40vw,240px) + 8px);background:#fff}
.lsetup{position:absolute;inset:0;z-index:2;display:flex;align-items:flex-end;padding:16px 16px calc(env(safe-area-inset-bottom) + 16px);background:linear-gradient(transparent 40%,#0d0a18d9)}
.lsetupcard{width:min(480px,100%);margin:0 auto;padding:18px;border-radius:26px;background:var(--panel);color:var(--ink)}
.lsetupcard h1{margin:0 0 10px;font-family:var(--display);font-size:28px;font-weight:800;letter-spacing:-.02em}
.golive{display:flex;align-items:center;justify-content:center;gap:8px;background:var(--orange)}
.onair:empty{display:none}
.onairrow{display:flex;gap:10px;overflow-x:auto;padding:2px 2px 12px;scrollbar-width:none}
.onairrow::-webkit-scrollbar{display:none}
.onaircard{position:relative;flex:none;display:flex;flex-direction:column;align-items:center;gap:4px;width:96px;padding:12px 8px 10px;border:0;border-radius:22px;background:var(--ink);color:#fff;font:inherit;cursor:pointer}
.onaircard .avatar{width:52px;height:52px;box-shadow:0 0 0 3px var(--orange)}
.onaircard .lbadge{position:absolute;top:54px;padding:2px 7px;font-size:10px}
.onaircard b{margin-top:8px;font-size:13px;font-weight:800;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.onaircard small{font-size:11px;opacity:.75;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.onaircard.go{background:var(--orange)}
.onairgo{display:grid;place-items:center;width:52px;height:52px;border-radius:50%;background:#ffffff33}
.onaircard.go b{margin-top:6px}
.liveinvite{position:fixed;z-index:200;left:50%;top:calc(env(safe-area-inset-top) + 12px);transform:translateX(-50%);display:flex;align-items:center;gap:10px;width:min(440px,calc(100% - 24px));padding:10px 14px;border:0;border-radius:20px;background:var(--ink);color:#fff;font:inherit;text-align:left;box-shadow:var(--shadow);cursor:pointer}
.liveinvite span{display:flex;flex-direction:column}.liveinvite small{opacity:.75}
@media (prefers-reduced-motion:reduce){.lfloat{animation-duration:.01s}}

/* ---------- unlock Live (connect Telegram) ---------- */
main.live.unlock{position:static;inset:auto;z-index:auto;overflow:visible;background:var(--bg);color:var(--ink)}
.unlockwrap{max-width:520px;margin:0 auto;padding:calc(env(safe-area-inset-top) + 12px) 16px calc(env(safe-area-inset-bottom) + 24px)}
.ustep{display:flex;gap:14px;margin:12px 0;padding:16px;border-radius:24px;background:var(--panel);box-shadow:var(--shadow)}
.ustep>div{flex:1;min-width:0}
.ustep>div>b{display:block;font-family:var(--display);font-size:19px;font-weight:800;margin-bottom:4px}
.ustep .muted{margin:0 0 10px;font-size:14px;line-height:1.45}
.unum{flex:none;display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--violet);color:#fff;font-weight:800}
.ustep form{display:flex;flex-direction:column;gap:8px}.ustep form .btn{margin-top:0}
.ustep .linkbtn{margin-top:10px;font-size:14px}
.qrframe{display:grid;place-items:center;width:min(300px,100%);aspect-ratio:1;margin:4px auto;border-radius:16px;background:#fff;box-shadow:inset 0 0 0 1px var(--line)}
.qrframe svg{width:100%;height:100%;display:block}
.qrtimer{margin:6px 0 0;text-align:center;font-size:14px;font-weight:700;color:var(--violet)}
#uphone[hidden],#uqr[hidden],#ucodeform[hidden],#upwform[hidden]{display:none}
#uqrbig{display:block;margin:8px auto 0}
.qrbig{position:fixed;inset:0;z-index:300;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:16px;background:#fff;color:var(--ink)}
.qrbig #uqrbigbox{width:min(92vmin,640px);aspect-ratio:1}
.qrbig #uqrbigbox svg{width:100%;height:100%;display:block}
.qrbig p{margin:0;font-weight:800;color:var(--violet)}
.usteps{margin:0 0 10px;padding-left:20px;font-size:14px;line-height:1.5;color:var(--muted)}
.usteps b{color:var(--ink)}

/* ---------- master dashboard (#/admin, desktop) ---------- */
body.inadmin main{max-width:1240px;padding:8px 28px 40px}
body.inadmin #tabbar{display:none}
.admindashlink{margin:10px 0 2px;display:inline-flex}
.ahead{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.ahead .vtitle{font-size:40px;margin-bottom:4px}.ahead p{margin:0 4px 6px}
#arefresh{display:inline-flex;flex-direction:row;align-items:center;gap:7px}
.aalert{margin:14px 0 0;padding:12px 16px;border-radius:14px;background:#E5383B14;border:1px solid #E5383B44;color:var(--red);font-weight:700}
.astats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin:20px 0 14px}
.astats .astat{background:var(--ink);color:#fff;border-radius:20px;padding:18px 20px 16px}
.astats .astat .muted{color:#ffffffa6}
.astats .astat b{font-family:var(--display);font-size:44px;line-height:1.05;letter-spacing:-.03em;font-weight:800}
.astats .astat:nth-child(1) b{color:var(--lime)}
.astat{display:flex;flex-direction:column;gap:2px;min-width:0}
.agrid{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:14px}
.apanel{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:18px 20px;min-width:0}
.apanel h2{font-family:var(--display);font-size:19px;font-weight:800;margin:0 0 12px;letter-spacing:-.01em}
.apanel.afull{grid-column:1/-1}
.achart{width:100%;height:auto;display:block}
.achart .bar{fill:var(--violet)}.achart .bar.zero{fill:var(--line2)}.achart .bar:hover{fill:var(--orange)}
.achart text{font-size:11px;fill:var(--muted);font-family:var(--body)}
.achart .grid{stroke:var(--line);stroke-dasharray:3 4}.achart .base{stroke:var(--line2)}
.astep{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,2fr) minmax(0,1fr);gap:14px;align-items:center;padding:9px 0;border-top:1px solid var(--line)}
.astep:first-of-type{border-top:0}
.astephead{display:flex;flex-direction:column;min-width:0}
.abar{height:14px;border-radius:8px;background:var(--panel2);overflow:hidden}
.abar span{display:block;height:100%;border-radius:8px;background:var(--grad)}
.astepnum{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}.astepnum b{font-size:18px}
.alost{font-size:12px;color:var(--orange);font-weight:700}
.alist{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}
.alist .astat b{font-size:24px;font-family:var(--display);font-weight:800}
.alist .astat>.muted:first-child{font-size:13px}
.ahealth{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.ahealth li{display:grid;grid-template-columns:12px minmax(0,1fr) auto;gap:12px;align-items:center;padding:10px 12px;border-radius:14px;background:var(--panel2)}
.adot{width:12px;height:12px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 3px #C6F43244}
.ahealth li.down .adot{background:var(--red);box-shadow:0 0 0 3px #E5383B33}
.astate{font-weight:800;font-size:13px}.ahealth li.down .astate{color:var(--red)}
.anow{list-style:none;padding:0;margin:14px 0 0;display:flex;flex-direction:column;gap:8px}
.anow li{display:flex;justify-content:space-between;gap:10px}
.atable{overflow-x:auto}
.atable table{width:100%;border-collapse:collapse;font-size:14px}
.atable th{text-align:left;font-size:12px;color:var(--muted);font-weight:700;padding:6px 10px;border-bottom:1px solid var(--line2)}
.atable td{padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.atable tbody tr:hover{background:var(--panel2)}
.atick{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:7px;background:var(--panel2);color:var(--ink)}
.atick.on{background:var(--lime)}
@media (max-width:900px){.astats{grid-template-columns:repeat(2,minmax(0,1fr))}.agrid{grid-template-columns:minmax(0,1fr)}body.inadmin main{padding:8px 16px 40px}}
.apanel.awide .alist{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:900px){.apanel.awide .alist{grid-template-columns:1fr 1fr}}
