/* App shell: top bar, tabs, stage, status strip. */
.shell{position:relative;z-index:2;height:100%;display:grid;grid-template-rows:auto auto 1fr auto;grid-template-columns:minmax(0,1fr);
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));max-width:1280px;margin:0 auto}

/* ---------- top bar ---------- */
.top{display:flex;flex-direction:column;gap:10px;padding-block:12px;border-bottom:1px solid var(--line)}
.top-banner{display:flex;align-items:center;justify-content:space-between;width:100%}
.top-nav{display:flex;align-items:center;justify-content:space-between;gap:14px;width:100%;flex-wrap:nowrap}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--frost)}
.brand svg{width:34px;height:34px;color:var(--kush);filter:drop-shadow(0 0 calc(8px * var(--glow)) color-mix(in srgb,var(--kush) 60%,transparent));animation:sway 6s ease-in-out infinite;transform-origin:50% 100%}
@keyframes sway{50%{transform:rotate(6deg)}}
.brand b{font-family:var(--f-display);font-weight:400;font-size:24px;letter-spacing:1px;line-height:1}
.brand b span{color:var(--kush)}
.brand small{display:block;font-family:var(--f-data);color:var(--mute);font-size:15px;line-height:1;letter-spacing:1px}
.tabs{display:flex;gap:4px;background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:4px;overflow-x:auto;max-width:100%;margin-left:0;position:relative;scrollbar-width:none;flex-shrink:0}
.tab-ind{position:absolute;top:4px;left:0;height:calc(100% - 8px);width:0;border-radius:999px;background:var(--kush);box-shadow:0 0 calc(18px * var(--glow)) color-mix(in srgb,var(--kush) 50%,transparent);transition:transform .38s cubic-bezier(.3,1.3,.5,1),width .38s cubic-bezier(.3,1.3,.5,1);pointer-events:none;z-index:0}
.tab{border:0;background:none;padding:7px 14px;border-radius:999px;font-weight:600;font-size:13px;letter-spacing:1.2px;text-transform:uppercase;color:var(--mute);white-space:nowrap;transition:color .25s;display:flex;align-items:center;gap:6px;position:relative;z-index:1}
.tab:hover{color:var(--frost)}
.tab[aria-selected="true"]{color:var(--ink)}
.tab .lock{font-size:10px;opacity:.7}
.cluster{display:flex;align-items:center;gap:12px;margin-left:auto;flex-shrink:0}
.swatches{display:flex;gap:6px;padding:6px 8px;border:1px solid var(--line);border-radius:999px;background:var(--panel)}
.sw-dot{width:16px;height:16px;border-radius:50%;border:2px solid var(--bg);padding:0;transition:transform .2s,box-shadow .2s;outline-offset:3px}
.sw-dot:hover,.sw-dot[aria-pressed="true"]{transform:scale(1.25);box-shadow:0 0 0 2px var(--frost),0 0 12px var(--frost)}
.xp{display:flex;align-items:center;gap:8px;font-family:var(--f-data);font-size:18px;line-height:1;color:var(--soft);min-width:118px}
.xp .bar{flex:1;height:6px;border-radius:99px;background:var(--line);overflow:hidden;min-width:44px}
.xp .bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--kush),var(--resin));box-shadow:0 0 8px var(--kush);transition:width .4s}
.xp b{font-weight:400;color:var(--resin)}
.xp.bump{animation:bump .35s}
@keyframes bump{50%{transform:scale(1.08)}}
.who{display:flex;align-items:center;gap:8px;border:0;background:var(--discord);color:#fff;padding:7px 14px 7px 10px;border-radius:999px;font-weight:700;font-size:13px;letter-spacing:.5px;position:relative;overflow:hidden;box-shadow:0 0 16px rgba(88,101,242,.45)}
.who svg{width:18px;height:18px}
.who.in{background:var(--panel);border:1px solid var(--line);box-shadow:none;color:var(--frost);padding:4px 12px 4px 4px}
.ava{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:13px;color:var(--ink);background:var(--kush);flex:none}
.shine{position:absolute;top:0;left:-100%;width:60%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.22),transparent);animation:shine 3.2s ease-in-out infinite;pointer-events:none}
@keyframes shine{0%{left:-100%}55%,100%{left:130%}}

/* ---------- stage ---------- */
.stage{min-height:0;position:relative;padding-block:20px}
.panel{height:100%;animation:rise .45s cubic-bezier(.2,.8,.2,1)}
@keyframes rise{from{transform:translateY(10px);opacity:.4}}
.eyebrow{font-family:var(--f-data);font-size:18px;color:var(--resin);letter-spacing:2px;text-transform:uppercase}
h1,h2{font-family:var(--f-display);font-weight:400;margin:0;text-wrap:balance;line-height:1}
h2{font-size:clamp(26px,3.4vw,40px)}
.lede{color:var(--mute);max-width:56ch;margin:8px 0 0}
/* status strip */
.status{display:flex;gap:18px;align-items:center;padding-block:10px;border-top:1px solid var(--line);font-family:var(--f-data);font-size:17px;color:var(--mute);overflow:hidden;white-space:nowrap}
.status .live{color:var(--kush);display:flex;align-items:center;gap:8px}
.status .live i{width:8px;height:8px;border-radius:50%;background:var(--kush);animation:blink 1.6s infinite}
@keyframes blink{50%{opacity:.25}}
.tick{flex:1;overflow:hidden;mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
#tick{display:flex;width:max-content;animation:tick var(--dur,40s) linear infinite;will-change:transform}
.tg{display:flex;flex:none}
.tg span{flex:none;padding-right:44px}
.tick:hover #tick{animation-play-state:paused}
.tick span b{color:var(--resin);font-weight:400}
@keyframes tick{to{transform:translateX(-50%)}}
.clock{color:var(--frost)}
.status-link{color:var(--frost);text-decoration:none;border:1px solid var(--line);border-radius:99px;padding:1px 10px;transition:color .2s,border-color .2s}
.status-link:hover{color:var(--kush);border-color:var(--kush)}
img.ava{object-fit:cover;background:var(--panel-2);padding:0}

.top{grid-row:1}.announce{grid-row:2}.stage{grid-row:3}.status{grid-row:4}

/* announcement bar (Admin → Config) */
.announce{margin-top:10px;border:1px solid color-mix(in srgb,var(--kush) 45%,var(--line));border-radius:10px;background:color-mix(in srgb,var(--kush) 8%,var(--panel));font-size:14px;text-align:center;overflow:hidden}
.announce > *{display:flex;justify-content:center;align-items:center;gap:8px;padding:8px 14px;color:var(--frost);text-decoration:none}
.announce a:hover{color:var(--kush)}
.announce b{color:var(--kush)}
.announce.tone-sale{border-color:color-mix(in srgb,var(--resin) 55%,var(--line));background:color-mix(in srgb,var(--resin) 9%,var(--panel))}
.announce.tone-sale b{color:var(--resin)}
.announce.tone-warn{border-color:color-mix(in srgb,var(--ember) 55%,var(--line));background:color-mix(in srgb,var(--ember) 9%,var(--panel))}
.announce.tone-warn b{color:var(--ember)}

/* status line states */
.status .live.updating{color:var(--resin)}
.status .live.updating i{background:var(--resin)}
.status .live.down{color:var(--ember)}
.status .live.down i{background:var(--ember);animation:none}

/* staff see a reminder while maintenance is on */
.maint-staff .status::before{content:"maintenance on";font-family:var(--f-body);font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--ink);background:var(--resin);border-radius:4px;padding:2px 7px}
.lockout.maint{z-index:75}
.maint-card > svg{width:70px;height:70px;color:var(--kush);filter:drop-shadow(0 0 18px var(--kush))}

/* xp meter for guests */
.xp.guest{opacity:.6}

/* home stats: the member count is live */
.meta .live-stat{position:relative}
.meta .live-stat::after{content:"";position:absolute;top:2px;right:-10px;width:6px;height:6px;border-radius:50%;background:var(--kush);box-shadow:0 0 8px var(--kush);animation:blink 1.6s infinite}
