:root{
  --bg:#eef1f8;
  --text:#0b0b0f;
  --muted:rgba(20,20,30,.58);
  --faint:rgba(20,20,30,.38);
  --glass:rgba(255,255,255,.42);
  --glass-strong:rgba(255,255,255,.62);
  --glass-edge:rgba(255,255,255,.85);
  --glass-shade:rgba(255,255,255,.18);
  --field:rgba(255,255,255,.55);
  --field-focus:rgba(255,255,255,.8);
  --hairline:rgba(15,20,40,.08);
  --shadow:0 30px 80px -20px rgba(40,50,110,.35),0 10px 30px -10px rgba(40,50,110,.18);
  --accent:#0a84ff;
  --ok:#30d158;
  --err:#ff3b30;
  --blob1:#7aa7ff;--blob2:#c79bff;--blob3:#7fe3d6;--blob4:#ffb4c8;
  --switch-off:rgba(120,120,128,.24);
  --seg-thumb:rgba(255,255,255,.9);
}
@media (prefers-color-scheme:dark){
  :root{
    --bg:#05060a;
    --text:#f5f5f7;
    --muted:rgba(235,235,245,.62);
    --faint:rgba(235,235,245,.35);
    --glass:rgba(40,42,54,.38);
    --glass-strong:rgba(58,60,74,.5);
    --glass-edge:rgba(255,255,255,.22);
    --glass-shade:rgba(255,255,255,.04);
    --field:rgba(255,255,255,.07);
    --field-focus:rgba(255,255,255,.12);
    --hairline:rgba(255,255,255,.08);
    --shadow:0 30px 90px -20px rgba(0,0,0,.7),0 10px 30px -10px rgba(0,0,0,.5);
    --blob1:#1d4ed8;--blob2:#7c3aed;--blob3:#0f766e;--blob4:#be185d;
    --switch-off:rgba(120,120,128,.36);
    --seg-thumb:rgba(255,255,255,.16);
  }
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{height:100%}
body{
  margin:0;min-height:100%;background:var(--bg);color:var(--text);
  font:17px/1.4 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,sans-serif;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:max(24px,env(safe-area-inset-top)) 16px max(24px,env(safe-area-inset-bottom));
  min-height:100svh;
}
body.top{justify-content:flex-start}

/* ---------- Animated backdrop ---------- */
.scene{position:fixed;inset:0;overflow:hidden;z-index:0;pointer-events:none}
.blob{position:absolute;width:62vmax;height:62vmax;border-radius:50%;filter:blur(70px);opacity:.75;will-change:transform}
.b1{background:radial-gradient(circle at 30% 30%,var(--blob1),transparent 65%);top:-22vmax;left:-18vmax;animation:drift1 22s ease-in-out infinite alternate}
.b2{background:radial-gradient(circle at 60% 40%,var(--blob2),transparent 65%);top:-10vmax;right:-26vmax;animation:drift2 26s ease-in-out infinite alternate}
.b3{background:radial-gradient(circle at 50% 50%,var(--blob3),transparent 65%);bottom:-28vmax;left:-10vmax;animation:drift3 30s ease-in-out infinite alternate}
.b4{background:radial-gradient(circle at 50% 50%,var(--blob4),transparent 65%);bottom:-24vmax;right:-20vmax;animation:drift1 34s ease-in-out infinite alternate-reverse}
@keyframes drift1{to{transform:translate(14vmax,10vmax) scale(1.12)}}
@keyframes drift2{to{transform:translate(-12vmax,14vmax) scale(.92)}}
@keyframes drift3{to{transform:translate(10vmax,-12vmax) scale(1.08)}}
.grain{position:absolute;inset:-50%;opacity:.05;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

/* ---------- Liquid glass ---------- */
.glass{
  position:relative;
  background:linear-gradient(160deg,var(--glass-strong),var(--glass) 45%,var(--glass-shade));
  -webkit-backdrop-filter:blur(28px) saturate(190%);
  backdrop-filter:blur(28px) saturate(190%);
  box-shadow:var(--shadow),inset 0 1px 0 var(--glass-edge),inset 0 -1px 0 var(--glass-shade),inset 0 0 0 1px var(--hairline);
}
.glass::before{
  content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;pointer-events:none;
  background:linear-gradient(135deg,rgba(255,255,255,.9),rgba(255,255,255,0) 30%,rgba(255,255,255,0) 70%,rgba(255,255,255,.35));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;opacity:.7;
}
.glass::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(120% 60% at 15% -10%,rgba(255,255,255,.45),transparent 55%);
  opacity:.55;mix-blend-mode:soft-light;
}
.card{z-index:1;width:100%;max-width:420px;border-radius:34px;padding:30px 24px 26px;
  animation:rise .9s cubic-bezier(.2,.9,.2,1) both}
.card.wide{max-width:540px}
.card+.card{margin-top:16px;animation-delay:.08s}
@keyframes rise{from{opacity:0;transform:translateY(24px) scale(.97);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}

/* ---------- Top bar ---------- */
.topbar{z-index:2;width:100%;max-width:540px;display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin-bottom:16px;animation:rise .7s cubic-bezier(.2,.9,.2,1) both}
.chip{display:flex;align-items:center;gap:10px;padding:6px 14px 6px 6px;border-radius:99px;font-size:15px;font-weight:600}
.avatar{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:15px;font-weight:700;text-transform:uppercase;
  background:linear-gradient(145deg,#4fa3ff,#0a84ff 50%,#5e5ce6);box-shadow:inset 0 1px 0 rgba(255,255,255,.5)}
.pill{height:40px;padding:0 16px;border:0;border-radius:99px;cursor:pointer;font:inherit;font-size:15px;font-weight:600;color:var(--text);
  display:inline-flex;align-items:center;gap:6px;transition:transform .2s}
.pill:active{transform:scale(.96)}
.pill svg{width:18px;height:18px}

/* ---------- Brand ---------- */
.brand{display:flex;flex-direction:column;align-items:center;text-align:center;margin-bottom:22px}
.brand.row{flex-direction:row;text-align:left;gap:16px;margin-bottom:20px}
.brand.row .icon{margin:0;width:60px;height:60px;border-radius:18px}
.icon{width:76px;height:76px;border-radius:22px;margin-bottom:14px;overflow:hidden;flex:none;
  box-shadow:0 14px 30px -8px rgba(10,132,255,.6),inset 0 1px 0 rgba(255,255,255,.55);animation:float 6s ease-in-out infinite}
.icon img{width:100%;height:100%;display:block}
@keyframes float{50%{transform:translateY(-4px) rotate(-2deg)}}
h1{font-size:28px;line-height:1.1;font-weight:700;letter-spacing:-.02em;margin:0 0 6px}
h2{font-size:21px;letter-spacing:-.015em;margin:0 0 4px}
h3{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:22px 4px 10px}
.sub{margin:0;color:var(--muted);font-size:15px}

/* ---------- Fields ---------- */
form{display:flex;flex-direction:column;gap:12px;margin:0}
.field{position:relative;border-radius:18px;background:var(--field);
  box-shadow:inset 0 0 0 1px var(--hairline),inset 0 1px 2px rgba(0,0,0,.04);transition:background .25s,box-shadow .25s}
.field:focus-within{background:var(--field-focus);box-shadow:inset 0 0 0 1.5px var(--accent),0 0 0 5px color-mix(in srgb,var(--accent) 18%,transparent)}
.field label{position:absolute;left:18px;top:17px;font-size:17px;color:var(--faint);pointer-events:none;
  transform-origin:left top;transition:transform .2s cubic-bezier(.2,.9,.2,1),color .2s}
.field input{width:100%;border:0;outline:0;background:transparent;color:var(--text);font:inherit;font-size:17px;
  padding:25px 18px 9px;border-radius:inherit}
.field input:focus+label,.field input:not(:placeholder-shown)+label{transform:translateY(-10px) scale(.72);color:var(--muted)}
.eye{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:40px;height:40px;border:0;border-radius:12px;
  background:transparent;color:var(--faint);display:grid;place-items:center;cursor:pointer;transition:color .2s,background .2s}
.eye:hover{color:var(--muted);background:var(--field)}
.eye svg{width:22px;height:22px}
.field.has-eye input{padding-right:52px}

.group{border-radius:18px;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);overflow:hidden}
.opt{display:flex;align-items:center;gap:12px;padding:13px 14px 13px 18px;cursor:pointer;user-select:none}
.opt+.opt,.row+.row{border-top:1px solid var(--hairline)}
.opt span{flex:1;font-size:15px}
.opt small,.row small{display:block;color:var(--muted);font-size:12.5px;margin-top:1px}
.switch{appearance:none;-webkit-appearance:none;flex:none;width:51px;height:31px;border-radius:99px;margin:0;cursor:pointer;
  background:var(--switch-off);position:relative;transition:background .3s}
.switch::after{content:"";position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;
  box-shadow:0 3px 8px rgba(0,0,0,.18),0 1px 1px rgba(0,0,0,.12);transition:transform .35s cubic-bezier(.3,1.4,.5,1),width .2s}
.switch:active::after{width:33px}
.switch:checked{background:var(--ok)}
.switch:checked::after{transform:translateX(20px)}
.switch:checked:active::after{transform:translateX(14px)}

/* key/value rows */
.row{display:flex;align-items:center;gap:10px;padding:12px 10px 12px 18px;min-height:56px}
.row .k{flex:1;min-width:0}
.row .k span{display:block;font-size:12.5px;color:var(--muted)}
.row .k code{display:block;font:15px/1.3 ui-monospace,"SF Mono",Menlo,monospace;overflow-wrap:anywhere;color:var(--text)}
.row .k .masked{letter-spacing:.12em}
.icon-btn{flex:none;width:38px;height:38px;border:0;border-radius:12px;background:transparent;color:var(--accent);
  display:grid;place-items:center;cursor:pointer;transition:background .2s,transform .2s}
.icon-btn:hover{background:var(--field-focus)}
.icon-btn:active{transform:scale(.92)}
.icon-btn svg{width:20px;height:20px}
.icon-btn.copied{color:var(--ok)}

/* ---------- Buttons ---------- */
.btn{position:relative;margin-top:4px;height:56px;width:100%;border:0;border-radius:18px;cursor:pointer;overflow:hidden;
  font:inherit;font-size:17px;font-weight:600;color:#fff;letter-spacing:-.01em;
  background:linear-gradient(180deg,#3d9bff,var(--accent) 55%,#0062d6);
  box-shadow:0 12px 26px -10px rgba(10,132,255,.75),inset 0 1px 0 rgba(255,255,255,.5),inset 0 -1px 0 rgba(0,0,0,.15);
  transition:transform .2s cubic-bezier(.2,.9,.2,1),box-shadow .2s,background .4s}
.btn::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.35),transparent 50%);border-radius:inherit}
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:scale(.97)}
.btn .label,.btn .spinner,.btn .done{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:8px;
  transition:opacity .25s,transform .35s cubic-bezier(.2,.9,.2,1)}
.btn .spinner,.btn .done{opacity:0;transform:translateY(12px)}
.btn svg{width:20px;height:20px}
.btn.loading{cursor:progress}
.btn.loading .label{opacity:0;transform:translateY(-12px)}
.btn.loading .spinner{opacity:1;transform:none}
.btn.loading::after{content:"";position:absolute;top:0;bottom:0;width:60%;left:-60%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.35),transparent);animation:shimmer 1.3s ease-in-out infinite}
@keyframes shimmer{to{left:120%}}
.btn.success{background:linear-gradient(180deg,#5be37f,var(--ok) 55%,#24a148);box-shadow:0 12px 26px -10px rgba(48,209,88,.7),inset 0 1px 0 rgba(255,255,255,.5)}
.btn.success .label,.btn.success .spinner{opacity:0}
.btn.success .done{opacity:1;transform:none}
.btn.secondary{color:var(--accent);background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline)}
.btn.secondary::before{display:none}
.btn.secondary .ring{border-color:color-mix(in srgb,var(--accent) 30%,transparent);border-top-color:var(--accent)}
.btn.secondary.success{color:#fff}
.ring{width:22px;height:22px;border-radius:50%;border:2.5px solid rgba(255,255,255,.35);border-top-color:#fff;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.check-sm path{stroke-dasharray:30;stroke-dashoffset:30;animation:draw .45s .1s cubic-bezier(.65,0,.35,1) forwards}
@keyframes draw{to{stroke-dashoffset:0}}

.alert{display:none;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:16px;font-size:14.5px;
  color:var(--err);background:color-mix(in srgb,var(--err) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--err) 25%,transparent)}
.alert.ok{color:#1f9a43;background:color-mix(in srgb,var(--ok) 14%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ok) 30%,transparent)}
@media (prefers-color-scheme:dark){.alert.ok{color:var(--ok)}}
.alert.show{display:flex;animation:pop .4s cubic-bezier(.2,1.3,.4,1)}
.alert svg{flex:none;width:18px;height:18px;margin-top:1px}
@keyframes pop{from{opacity:0;transform:scale(.95) translateY(-4px)}}
.shake{animation:shake .45s cubic-bezier(.36,.07,.19,.97)!important}
@keyframes shake{20%,60%{transform:translateX(-8px)}40%,80%{transform:translateX(8px)}}

/* ---------- Segmented control ---------- */
.seg{position:relative;display:grid;grid-template-columns:repeat(var(--n,3),1fr);padding:3px;border-radius:14px;margin:4px 0 6px;
  background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline)}
.seg button{position:relative;z-index:1;height:36px;border:0;background:transparent;font:inherit;font-size:14px;font-weight:600;
  color:var(--muted);cursor:pointer;border-radius:11px;transition:color .25s}
.seg button[aria-selected=true]{color:var(--text)}
.seg .thumb{position:absolute;top:3px;bottom:3px;left:3px;width:calc((100% - 6px)/var(--n,3));border-radius:11px;
  background:var(--seg-thumb);box-shadow:0 3px 10px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.08),inset 0 1px 0 rgba(255,255,255,.6);
  transform:translateX(calc(var(--i,0)*100%));transition:transform .45s cubic-bezier(.3,1.25,.5,1)}
.panel{display:none}
.panel.active{display:block;animation:fadeup .45s cubic-bezier(.2,.9,.2,1)}
@keyframes fadeup{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- Steps ---------- */
.steps{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.steps li{display:flex;gap:12px;align-items:flex-start;color:var(--muted);font-size:15px;line-height:1.4}
.steps b{color:var(--text);font-weight:600}
.num{flex:none;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:13px;font-weight:700;color:var(--text);
  background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline),inset 0 1px 0 var(--glass-edge);margin-top:-3px}
.steps li.hl .num{background:var(--accent);color:#fff;box-shadow:0 4px 12px -2px rgba(10,132,255,.6)}

/* ---------- FAQ ---------- */
.faq{display:grid;gap:8px}
.faq details{border-radius:16px;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);overflow:hidden;transition:background .25s}
.faq details[open]{background:var(--field-focus)}
.faq summary{list-style:none;cursor:pointer;padding:15px 48px 15px 18px;font-size:15.5px;font-weight:600;position:relative}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";position:absolute;right:20px;top:50%;width:9px;height:9px;margin-top:-7px;
  border-right:2px solid var(--faint);border-bottom:2px solid var(--faint);transform:rotate(45deg);transition:transform .3s cubic-bezier(.3,1.3,.5,1)}
.faq details[open] summary::after{transform:rotate(225deg);margin-top:-2px}
.faq .a{padding:0 18px 16px;color:var(--muted);font-size:14.5px;line-height:1.5}
.faq details[open] .a{animation:fadeup .35s cubic-bezier(.2,.9,.2,1)}
.faq .a b{color:var(--text)}

.note{margin:16px 0 0;text-align:center;font-size:12.5px;color:var(--faint)}
.note svg{width:12px;height:12px;vertical-align:-1px;margin-right:3px}
.hint{font-size:13px;color:var(--muted);margin:10px 4px 0}
.platform{display:none;margin-top:12px;padding:10px 14px;border-radius:14px;font-size:13px;color:var(--muted);background:var(--field);
  box-shadow:inset 0 0 0 1px var(--hairline);text-align:center}
.platform.show{display:block}
.fade-out{opacity:0!important;transform:scale(.97)!important;filter:blur(4px);transition:all .35s ease}

@media (max-width:420px){.card{padding:26px 18px 22px;border-radius:30px}}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* ================= App shell (portal) ================= */
body.app{justify-content:flex-start;align-items:stretch;padding:0;min-height:100svh}
.app-header{position:relative;z-index:2;width:100%;max-width:560px;margin:0 auto;
  padding:max(18px,env(safe-area-inset-top)) 20px 6px;display:flex;align-items:flex-end;justify-content:space-between;gap:12px}
.app-header .eyebrow{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 2px}
.app-header h1{font-size:34px;line-height:1.08;margin:0;letter-spacing:-.025em}
.app-header .avatar{width:44px;height:44px;font-size:18px;flex:none;box-shadow:0 8px 20px -6px rgba(10,132,255,.55),inset 0 1px 0 rgba(255,255,255,.5);
  border:0;cursor:pointer;transition:transform .2s}
.app-header .avatar:active{transform:scale(.92)}

.screens{position:relative;z-index:1;width:100%;max-width:560px;margin:0 auto;
  padding:14px 16px calc(112px + env(safe-area-inset-bottom))}
.screen{display:none}
.screen.active{display:block;animation:screenIn .5s cubic-bezier(.2,.9,.2,1)}
@keyframes screenIn{from{opacity:0;transform:translateY(14px) scale(.985);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
.screen .card{max-width:none;animation:none;padding:24px 20px 22px;border-radius:30px}
.screen .card+.card{margin-top:14px}
.screen-title{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:6px 6px 10px}

/* status tile on Home */
.tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}
.tile{border-radius:24px;padding:16px;display:flex;flex-direction:column;gap:10px;cursor:pointer;border:0;text-align:left;font:inherit;color:var(--text);
  transition:transform .25s cubic-bezier(.2,.9,.2,1)}
.tile:active{transform:scale(.97)}
.tile .ti{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;color:#fff}
.tile .ti svg{width:20px;height:20px}
.tile b{display:block;font-size:15px;line-height:1.25}
.tile small{display:block;margin-top:2px;color:var(--muted);font-size:12.5px;line-height:1.3}

/* Floating liquid-glass tab bar */
.tabbar{position:fixed;z-index:10;left:50%;transform:translateX(-50%);
  bottom:max(14px,calc(env(safe-area-inset-bottom) + 4px));
  width:calc(100% - 28px);max-width:460px;height:68px;border-radius:34px;padding:6px;
  display:grid;grid-template-columns:repeat(5,1fr);animation:barIn .7s .15s cubic-bezier(.2,.9,.2,1) both}
@keyframes barIn{from{opacity:0;transform:translate(-50%,30px) scale(.96)}to{opacity:1;transform:translateX(-50%)}}
.tabbar .bubble{position:absolute;top:6px;bottom:6px;left:6px;width:calc((100% - 12px)/5);border-radius:28px;
  background:var(--seg-thumb);box-shadow:0 4px 14px rgba(0,0,0,.10),inset 0 1px 0 rgba(255,255,255,.7),inset 0 0 0 1px var(--hairline);
  transform:translateX(calc(var(--i,0)*100%));transition:transform .5s cubic-bezier(.3,1.3,.5,1)}
.tabbar button{position:relative;z-index:1;border:0;background:transparent;cursor:pointer;font:inherit;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  color:var(--muted);font-size:10.5px;font-weight:600;letter-spacing:.01em;border-radius:28px;transition:color .25s}
.tabbar button svg{width:24px;height:24px;transition:transform .35s cubic-bezier(.3,1.5,.5,1)}
.tabbar button[aria-selected=true]{color:var(--accent)}
.tabbar button[aria-selected=true] svg{transform:scale(1.08)}
.tabbar button:active svg{transform:scale(.88)}

/* Account screen */
.profile-head{display:flex;align-items:center;gap:14px}
.profile-head .avatar{width:56px;height:56px;font-size:22px}
.profile-head b{display:block;font-size:19px}
.profile-head small{color:var(--muted);font-size:14px}
.btn.danger{color:var(--err);background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline)}
.btn.danger::before{display:none}

/* ================= Connection status card ================= */
.conn-head{display:flex;align-items:center;gap:14px;margin-bottom:16px}
.orb{position:relative;flex:none;width:54px;height:54px;border-radius:18px;display:grid;place-items:center;color:#fff;
  background:linear-gradient(145deg,#b8b8c2,#8e8e98);box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 10px 22px -10px rgba(0,0,0,.4);
  transition:background .5s}
.orb svg{width:28px;height:28px;position:relative;z-index:1}
.conn[data-state=on] .orb{background:linear-gradient(145deg,#6fe895,var(--ok) 55%,#22a046);box-shadow:inset 0 1px 0 rgba(255,255,255,.55),0 12px 26px -10px rgba(48,209,88,.8)}
.conn[data-state=on] .orb::before,.conn[data-state=on] .orb::after{content:"";position:absolute;inset:0;border-radius:inherit;
  border:2px solid var(--ok);animation:pulse 2.6s cubic-bezier(.2,.6,.3,1) infinite}
.conn[data-state=on] .orb::after{animation-delay:1.3s}
@keyframes pulse{from{transform:scale(1);opacity:.7}to{transform:scale(1.55);opacity:0}}
.conn[data-state=loading] .orb{animation:breathe 1.4s ease-in-out infinite}
@keyframes breathe{50%{opacity:.55}}
.conn-title{flex:1;min-width:0}
.conn-title span{display:block;font-size:12.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.conn-title b{display:block;font-size:21px;letter-spacing:-.015em;line-height:1.2}
.conn-title small{display:block;color:var(--muted);font-size:13.5px}
.conn .icon-btn.spin svg{animation:spin .8s linear infinite}

.stat{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px 13px 18px;min-height:52px}
.stat+.stat{border-top:1px solid var(--hairline)}
.stat .l{flex:none;white-space:nowrap;color:var(--muted);font-size:14.5px}
.stat .v{min-width:0;font-size:15px;font-weight:600;text-align:right;font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:8px;justify-content:flex-end;flex-wrap:wrap}
.stat .v small{font-weight:500;color:var(--muted);font-size:13px}
.mono{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-weight:500!important}
.badge{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:99px;white-space:nowrap;
  color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}
.badge.ok{color:#1f9a43;background:color-mix(in srgb,var(--ok) 16%,transparent)}
@media (prefers-color-scheme:dark){.badge.ok{color:var(--ok)}}
.badge.muted{color:var(--muted);background:var(--field)}
.badge i{width:6px;height:6px;border-radius:50%;background:currentColor}
.skel{display:inline-block;height:13px;width:90px;border-radius:7px;vertical-align:middle;
  background:linear-gradient(90deg,var(--field) 20%,var(--field-focus) 50%,var(--field) 80%);background-size:250% 100%;animation:skel 1.2s linear infinite}
@keyframes skel{from{background-position:100% 0}to{background-position:-150% 0}}
.conn-foot{margin:12px 4px 0;font-size:12.5px;color:var(--faint);text-align:center}

/* ================= Toolbar ================= */
.toolbar{position:sticky;top:0;z-index:20;width:100%;padding:max(8px,env(safe-area-inset-top)) 12px 0}
.tb-inner{max-width:1080px;margin:0 auto;height:56px;border-radius:22px;padding:0 8px 0 10px;
  display:flex;align-items:center;gap:10px;transition:background .3s,box-shadow .3s}
.toolbar:not(.scrolled) .tb-inner{background:linear-gradient(160deg,var(--glass),var(--glass-shade));
  box-shadow:inset 0 1px 0 var(--glass-edge),inset 0 0 0 1px var(--hairline)}
.tb-brand{display:flex;align-items:center;gap:10px;border:0;background:transparent;cursor:pointer;padding:6px 8px 6px 4px;border-radius:14px;
  font:inherit;font-size:17px;font-weight:700;letter-spacing:-.015em;color:var(--text);margin-right:auto}
.tb-brand img{width:34px;height:34px;border-radius:10px;box-shadow:0 6px 14px -6px rgba(10,132,255,.6)}
.tb-tabs{display:none}
.tb-right{display:flex;align-items:center;gap:8px}
.tb-right .avatar{width:38px;height:38px;font-size:16px;border:0;cursor:pointer;flex:none;
  box-shadow:0 6px 16px -6px rgba(10,132,255,.55),inset 0 1px 0 rgba(255,255,255,.5);transition:transform .2s}
.tb-right .avatar:active{transform:scale(.92)}
.tb-signout{display:none;margin:0}
.tb-signout .pill{height:38px;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);font-size:14px}
.app-header{padding-top:18px}

/* Account layout pieces */
.acct-signout{margin-top:14px}

/* ================= Desktop ================= */
@media (min-width:900px){
  body.app{padding-bottom:0}
  .tabbar{display:none}
  .tb-inner{height:64px;border-radius:24px;padding:0 10px 0 12px}
  .tb-brand{margin-right:0}
  .tb-tabs{display:flex;gap:4px;margin:0 auto;padding:4px;border-radius:16px;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline)}
  .tb-tabs button{display:flex;align-items:center;gap:7px;height:40px;padding:0 16px;border:0;border-radius:12px;background:transparent;cursor:pointer;
    font:inherit;font-size:14.5px;font-weight:600;color:var(--muted);transition:background .25s,color .25s,box-shadow .25s}
  .tb-tabs button svg{width:18px;height:18px}
  .tb-tabs button:hover{color:var(--text)}
  .tb-tabs button[aria-selected=true]{color:var(--accent);background:var(--seg-thumb);
    box-shadow:0 3px 10px rgba(0,0,0,.10),inset 0 1px 0 rgba(255,255,255,.6)}
  .tb-signout{display:block}

  .app-header,.screens{max-width:1080px}
  .app-header{padding:34px 28px 8px}
  .app-header h1{font-size:44px}
  .screens{padding:18px 24px 56px}
  .screen .card{padding:28px 26px 26px}
  .screen .card+.card{margin-top:0}

  #screen-home.active{display:grid;grid-template-columns:1.25fr 1fr;gap:18px;align-items:start}
  #screen-home .tiles{grid-template-columns:1fr 1fr;margin-top:0}
  #screen-home .tile{min-height:132px}
  #screen-setup.active{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start}
  #screen-faq .faq{grid-template-columns:1fr 1fr;gap:12px;align-items:start}
}
@media (min-width:900px) and (max-width:1060px){
  .tb-tabs button{padding:0 12px}
  .tb-brand span{display:none}
}

/* ================= Launch splash / offline ================= */
body.splash{justify-content:center;align-items:center;text-align:center}
.splash-main{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;padding:24px;transition:opacity .25s,transform .25s}
body.leaving .splash-main{opacity:0;transform:scale(1.03)}
.splash-icon{width:112px;height:112px;border-radius:30px;overflow:hidden;margin-bottom:20px;position:relative;
  box-shadow:0 24px 50px -14px rgba(10,132,255,.7),inset 0 1px 0 rgba(255,255,255,.5);animation:splashIn .7s cubic-bezier(.2,1.3,.4,1) both}
.splash-icon img{width:100%;height:100%;display:block}
.splash-icon::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.45) 50%,transparent 70%);
  transform:translateX(-120%);animation:sheen 2.4s 0.6s ease-in-out infinite}
@keyframes splashIn{from{opacity:0;transform:scale(.6)}}
@keyframes sheen{60%,100%{transform:translateX(120%)}}
body.splash h1{font-size:30px;margin:0 0 18px;animation:fadeup .6s .15s cubic-bezier(.2,.9,.2,1) both}
.splash-status{min-height:120px;animation:fadeup .6s .3s cubic-bezier(.2,.9,.2,1) both}
.when-connecting{display:flex;align-items:center;gap:10px;justify-content:center;color:var(--muted);font-size:15px;margin:0}
.ring.dark{width:18px;height:18px;border-width:2px;border-color:color-mix(in srgb,var(--text) 18%,transparent);border-top-color:var(--accent)}
.when-offline{display:none;max-width:300px}
.when-offline .btn{margin-top:18px}
.splash-title{font-size:19px;font-weight:700;margin:0 0 4px}
body.splash[data-state=offline] .when-connecting{display:none}
body.splash[data-state=offline] .when-offline{display:block;animation:fadeup .4s cubic-bezier(.2,.9,.2,1)}
body.splash[data-state=offline] .splash-icon{filter:saturate(.25);opacity:.85}

/* ================= Toast + location ================= */
.toast{position:fixed;z-index:30;left:50%;top:calc(max(8px,env(safe-area-inset-top)) + 66px);
  transform:translate(-50%,-16px) scale(.96);opacity:0;pointer-events:none;
  padding:11px 18px 11px 14px;border-radius:99px;font-size:14.5px;font-weight:600;white-space:nowrap;max-width:calc(100% - 32px);
  overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:8px;
  transition:opacity .3s,transform .45s cubic-bezier(.3,1.4,.5,1)}
.toast::before{content:"";flex:none;width:9px;height:9px;border-radius:50%;background:var(--accent)}
.toast.ok::before{background:var(--ok);box-shadow:0 0 0 4px color-mix(in srgb,var(--ok) 25%,transparent)}
.toast.warn::before{background:#ff9f0a;box-shadow:0 0 0 4px color-mix(in srgb,#ff9f0a 25%,transparent)}
.toast.show{opacity:1;transform:translate(-50%,0) scale(1)}
@media (min-width:900px){.toast{top:calc(max(8px,env(safe-area-inset-top)) + 76px)}}
.place{white-space:nowrap}

/* ================= Home dashboard ================= */
.home-grid{display:grid;gap:14px}
.card-h{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.card-h h2{flex:1;margin:0;font-size:18px}
.ci{flex:none;width:30px;height:30px;border-radius:9px;display:grid;place-items:center;color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,.45)}
.ci svg{width:17px;height:17px}
.card h3{margin:18px 4px 8px}
.badge.warn{color:#c76a00;background:color-mix(in srgb,#ff9f0a 18%,transparent)}
@media (prefers-color-scheme:dark){.badge.warn{color:#ffb340}}
.isp{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card .hint{margin:10px 6px 0}

/* live-only block */
.live-only{display:none}
.conn[data-state=on] .live-only{display:block;animation:fadeup .5s cubic-bezier(.2,.9,.2,1)}
.timer{font:600 44px/1 ui-monospace,"SF Mono",Menlo,monospace;letter-spacing:-.02em;font-variant-numeric:tabular-nums;
  margin:-2px 2px 14px;background:linear-gradient(180deg,var(--text),color-mix(in srgb,var(--text) 60%,transparent));
  -webkit-background-clip:text;background-clip:text;color:transparent}
.speeds{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
.meter{border-radius:18px;padding:12px 14px 8px;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);overflow:hidden}
.meter .mh{display:flex;flex-direction:column;gap:1px}
.meter .mh span{font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.meter .mh b{font-size:19px;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.spark{display:block;width:100%;height:38px;margin-top:6px;overflow:visible}
.spark .line{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}
.meter.down .line{stroke:var(--accent)} .meter.down .area{fill:color-mix(in srgb,var(--accent) 18%,transparent)}
.meter.up .line{stroke:#bf5af2} .meter.up .area{fill:color-mix(in srgb,#bf5af2 18%,transparent)}
.meter.down .mh b{color:var(--accent)} .meter.up .mh b{color:#a855f7}

/* usage chart */
.chart{margin:2px 0 14px}
.bars{display:grid;grid-template-columns:repeat(14,1fr);gap:5px;align-items:end;height:120px}
.bar{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:6px;cursor:default}
.bar span{width:100%;max-width:22px;min-height:3px;border-radius:7px 7px 4px 4px;
  background:linear-gradient(180deg,color-mix(in srgb,#bf5af2 80%,#fff),#7c5cff);opacity:.55;
  transform-origin:bottom;animation:grow .7s cubic-bezier(.2,.9,.2,1) both}
.bar span[style*="height:0%"]{background:var(--field);opacity:1;height:3px!important}
.bar.today span{opacity:1;box-shadow:0 6px 14px -6px #7c5cff}
.bar em{font-style:normal;font-size:11px;font-weight:600;color:var(--faint)}
.bar.today em{color:var(--text)}
.bar:hover span{opacity:.9}
@keyframes grow{from{transform:scaleY(0)}}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.kpi{border-radius:16px;padding:12px 10px;text-align:center;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline)}
.kpi b{display:block;font-size:16px;letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap}
.kpi span{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}
.attrib{margin-top:18px}
.attrib a{color:inherit}
@media (max-width:420px){.kpis{grid-template-columns:repeat(2,1fr)}.timer{font-size:38px}}

@media (min-width:900px){
  #screen-home.active{display:block}
  .home-grid{grid-template-columns:1.15fr 1fr;grid-template-areas:"conn device" "conn home";gap:18px;align-items:start}
  #conn{grid-area:conn} #deviceCard{grid-area:device} #homeCard{grid-area:home}
  #screen-home .tiles{grid-template-columns:repeat(4,1fr);margin-top:18px}
  #screen-home .tile{min-height:0}
  .usage{display:grid;grid-template-columns:1.3fr 1fr;column-gap:24px}
  .usage .card-h,.usage .chart,.usage .kpis{grid-column:1}
  .usage h3{grid-column:2;grid-row:1;margin-top:4px}
  .usage #recent{grid-column:2;grid-row:2/5;align-self:start}
}

/* ================= Setup sections / Usage tab ================= */
.section-title{margin:28px 6px 12px}
.section-title h2{font-size:22px;margin:0 0 2px}
#screen-usage .usage{margin-top:0}
@media (min-width:900px){
  #screen-setup .section-title{grid-column:1/-1;margin:14px 6px 0}
  #screen-usage.active{display:block}
}

/* ================= Per-device states, account, admin, speed ================= */
[hidden]{display:none!important}
small.block{display:block;font-weight:500;color:var(--muted);font-size:12.5px;margin-top:1px}
.who{font-weight:600}
.conn[data-state=home] .orb{background:linear-gradient(145deg,#64d2ff,#0a84ff);box-shadow:inset 0 1px 0 rgba(255,255,255,.55),0 12px 26px -10px rgba(10,132,255,.7)}
.conn[data-state=other] .orb{background:linear-gradient(145deg,#ffd60a,#ff9f0a);box-shadow:inset 0 1px 0 rgba(255,255,255,.55),0 12px 26px -10px rgba(255,159,10,.7)}
#connRows:empty{display:none}

.btn-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
.btn-row .btn{flex:1;min-width:150px;margin-top:0}
.mini-btn{height:32px;padding:0 12px;border:0;border-radius:10px;cursor:pointer;font:inherit;font-size:13px;font-weight:600;
  color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);transition:transform .15s,background .2s;white-space:nowrap}
.mini-btn:hover{background:color-mix(in srgb,var(--accent) 20%,transparent)}
.mini-btn:active{transform:scale(.95)}
.mini-btn.danger{color:var(--err);background:color-mix(in srgb,var(--err) 10%,transparent)}
.stat .v .mini-btn+.mini-btn{margin-left:6px}
.link-btn{display:block;margin:14px auto 0;border:0;background:none;color:var(--accent);font:inherit;font-size:14.5px;font-weight:600;cursor:pointer}
#notifyCard .group,#passkeyCard .group{margin-bottom:4px}
#passkeyCard .btn,#adminCard .btn{margin-top:12px}

/* results (invite links, temp passwords) */
.result{margin-top:14px;padding:14px;border-radius:16px;background:color-mix(in srgb,var(--ok) 10%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ok) 28%,transparent)}
.result-t{margin:0 0 8px;font-size:14px}
.linkbox{padding:10px 12px;border-radius:12px;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);overflow-wrap:anywhere}
.linkbox code{font:13.5px/1.4 ui-monospace,"SF Mono",Menlo,monospace}
.result .btn-row{margin-top:10px}
.pop-in{animation:pop .45s cubic-bezier(.2,1.3,.4,1)}

/* passkey step on sign-in */
.pk-step{text-align:center;animation:fadeup .45s cubic-bezier(.2,.9,.2,1)}
.pk-step h2{font-size:22px;margin:6px 0 4px}
.pk-step .sub{margin:0 auto 16px;max-width:30ch}
.pk-step .alert{text-align:left;margin-bottom:12px}
.pk-icon{width:64px;height:64px;margin:0 auto 6px;border-radius:20px;display:grid;place-items:center;color:#fff;
  background:linear-gradient(145deg,#34c759,#248a3d);box-shadow:0 14px 28px -10px rgba(52,199,89,.7),inset 0 1px 0 rgba(255,255,255,.5);
  animation:splashIn .6s cubic-bezier(.2,1.3,.4,1) both}
.pk-icon svg{width:34px;height:34px}

/* speed test */
.dials{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.dial{border-radius:18px;padding:14px 8px 12px;text-align:center;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);transition:box-shadow .3s,transform .3s}
.dial b{display:block;font:700 30px/1.1 ui-monospace,"SF Mono",Menlo,monospace;font-variant-numeric:tabular-nums;letter-spacing:-.03em}
.dial span{display:block;margin-top:4px;font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.dial span small{text-transform:none;font-weight:500}
.dial.down b{color:var(--accent)} .dial.up b{color:#a855f7}
.dial.active{box-shadow:inset 0 0 0 2px var(--accent),0 10px 24px -12px var(--accent);transform:translateY(-2px)}
.dial.up.active{box-shadow:inset 0 0 0 2px #a855f7,0 10px 24px -12px #a855f7}
.speed-bar{height:6px;border-radius:3px;background:var(--field);margin:14px 2px 2px;overflow:hidden}
.speed-bar span{display:block;height:100%;width:0;border-radius:3px;background:linear-gradient(90deg,var(--accent),#a855f7);transition:width .25s linear}
#speedCard .btn{margin-top:12px}
#screen-usage .card+.card{margin-top:14px}

/* account columns + admin grid */
.acct-cols{display:grid;gap:14px}
.acct-cols .col{display:grid;gap:14px;align-content:start}
.acct-cols .card+.card,.screen .acct-cols .card+.card{margin-top:0}
.acct-signout{margin-top:0}
.admin-grid{display:grid;gap:14px}
.admin-grid .card+.card{margin-top:0}
@media (min-width:900px){
  .acct-cols{grid-template-columns:1fr 1fr;gap:18px}
  .acct-cols .col{gap:18px}
  .admin-grid{grid-template-columns:1fr 1fr;gap:18px;align-items:start}
  #screen-usage.active{display:grid;grid-template-columns:1fr 1.6fr;gap:18px;align-items:start}
  #screen-usage .card+.card{margin-top:0}
  #screen-usage .usage{display:block}
  #screen-usage .usage h3{margin-top:18px}
}
.switch:disabled{opacity:.4;cursor:not-allowed;filter:grayscale(1)}

/* ================= WireGuard + Wi-Fi cards ================= */
#wgForm,#wifiForm{margin-top:12px}
#wgList{margin-bottom:4px}
.wg-qr{display:flex;flex-direction:column;align-items:center;gap:8px;margin:6px 0 4px}
.wg-qr svg{width:220px;height:220px;border-radius:16px;background:#fff;padding:6px;box-shadow:0 10px 30px -12px rgba(0,0,0,.35)}
.wg-qr small{color:var(--muted);font-size:12.5px}
a.btn{display:block;text-decoration:none}
.wg-result .btn-row .btn{min-width:180px}
.wg-conf{margin-top:12px}
.wg-conf summary{cursor:pointer;font-size:14px;font-weight:600;color:var(--accent)}
.wg-conf pre{margin:8px 0 0;padding:12px;border-radius:12px;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);
  font:12.5px/1.5 ui-monospace,"SF Mono",Menlo,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
.result .hint a{color:var(--accent)}
.select{flex:none;max-width:60%;height:34px;border-radius:10px;border:0;padding:0 10px;font:inherit;font-size:14.5px;
  color:var(--text);background:var(--field-focus);box-shadow:inset 0 0 0 1px var(--hairline)}

/* ================= Groups & plan ================= */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.grp-edit{margin-top:12px}
.grp-edit summary{cursor:pointer;font-weight:600;color:var(--accent);padding:6px 4px}
.grp-edit form{margin-top:10px}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 2px 4px}
.chip{position:relative;cursor:pointer}
.chip input{position:absolute;opacity:0;pointer-events:none}
.chip span{display:inline-block;padding:7px 12px;border-radius:99px;font-size:13.5px;font-weight:600;color:var(--muted);
  background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);transition:background .2s,color .2s}
.chip input:checked+span{color:#fff;background:var(--accent);box-shadow:0 6px 14px -6px var(--accent)}
.meter-row{margin:4px 2px 14px}
.mr-h{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:6px}
.mr-h span{color:var(--muted);font-size:14px}
.mr-h b{font-size:15px;font-variant-numeric:tabular-nums}
.mr-h b small{color:var(--muted);font-weight:500}
.mr-bar{height:10px;border-radius:5px;background:var(--field);box-shadow:inset 0 0 0 1px var(--hairline);overflow:hidden}
.mr-bar span{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,#30d158,#34c759);transition:width .6s cubic-bezier(.2,.9,.2,1)}
.mr-bar.warm span{background:linear-gradient(90deg,#ffd60a,#ff9f0a)}
.mr-bar.hot span{background:linear-gradient(90deg,#ff9f0a,#ff3b30)}
input[type=time].select,input[type=number].select{width:130px}

/* ================= Session log + delete ================= */
.log-filters{display:flex;gap:10px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.log-filters .select{flex:none;height:44px;max-width:none}
.field.compact{flex:1;min-width:200px}
.field.compact input{padding:20px 14px 6px;font-size:15px}
.field.compact label{top:13px;left:14px;font-size:15px}
.log-row .v{flex-direction:column;align-items:flex-end;gap:0}
.log-row .v small.block{text-align:right}
.log-row .l span{font-weight:600}
#histList,#adLogList{max-height:520px;overflow:auto}
.danger-box .opt.inline-opt{padding:10px 0;margin:4px 0}
.mini-btn.big{height:38px;padding:0 16px;font-size:14px}
.result:has(.danger-box){background:color-mix(in srgb,var(--err) 8%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--err) 25%,transparent)}
@media (min-width:900px){ .admin-grid .wide-card{grid-column:1/-1} }

/* ================= Session detail sheet ================= */
button.stat.tap{width:100%;border:0;background:transparent;font:inherit;color:inherit;text-align:left;cursor:pointer;
  position:relative;padding-right:36px;transition:background .2s}
button.stat.tap:hover,button.stat.tap:focus-visible{background:var(--field-focus);outline:0}
button.stat.tap:active{background:color-mix(in srgb,var(--accent) 10%,transparent)}
.stat .chev{position:absolute;right:12px;top:50%;width:16px;height:16px;transform:translateY(-50%);color:var(--faint)}
.sheet-bg{position:fixed;inset:0;z-index:40;background:rgba(0,0,0,.28);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  opacity:0;transition:opacity .3s}
.sheet-bg.open{opacity:1}
.sheet{position:fixed;z-index:41;left:0;right:0;bottom:0;max-height:88svh;overflow:auto;overscroll-behavior:contain;
  border-radius:30px 30px 0 0;padding:8px 18px calc(24px + env(safe-area-inset-bottom));
  transform:translateY(105%);transition:transform .45s cubic-bezier(.2,.9,.2,1)}
.sheet.open{transform:none}
.sheet-grab{width:40px;height:5px;border-radius:3px;background:var(--faint);margin:4px auto 10px;opacity:.6}
.sheet-h{display:flex;align-items:center;gap:12px;margin-bottom:14px;position:sticky;top:-8px;z-index:1;padding-top:4px}
.sheet-t{flex:1;min-width:0}
.sheet-t h2{margin:0;font-size:21px}
.sheet-t small{color:var(--muted);font-size:13.5px}
.orb.sm{width:44px;height:44px;border-radius:14px}
.orb.sm svg{width:24px;height:24px}
.orb.sm.on{background:linear-gradient(145deg,#6fe895,var(--ok) 55%,#22a046)}
.orb.sm.off{background:linear-gradient(145deg,#b8b8c2,#8e8e98)}
.sheet .timer{font-size:38px}
.sheet h3{margin:18px 4px 8px}
.mono.key{font-size:12px;overflow-wrap:anywhere;text-align:right}
.sheet .stat .v a{color:var(--accent)}
body.sheet-open{overflow:hidden}
@media (min-width:900px){
  .sheet{left:50%;right:auto;bottom:auto;top:50%;width:560px;max-height:84vh;border-radius:30px;padding:10px 24px 24px;
    transform:translate(-50%,-46%) scale(.96);opacity:0;transition:transform .4s cubic-bezier(.2,.9,.2,1),opacity .3s}
  .sheet.open{transform:translate(-50%,-50%);opacity:1}
  .sheet-grab{display:none}
}

/* Grid tracks must be allowed to shrink below their content, or one wide item pushes the
   whole page wider than the phone (and fixed overlays like the session sheet with it). */
.admin-grid,.acct-cols,.home-grid{grid-template-columns:minmax(0,1fr)}
.admin-grid>*,.acct-cols>*,.home-grid>*,.acct-cols .col>*{min-width:0}
.stat .l{min-width:0;overflow-wrap:anywhere}
.log-filters .select{max-width:100%}
@media (min-width:900px){
  .admin-grid,.acct-cols{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .home-grid{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr)}
}
.sheet-h{margin:0 -18px 14px;padding:8px 18px 10px;top:-8px;
  background:color-mix(in srgb,var(--bg) 84%,transparent);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);
  box-shadow:0 1px 0 var(--hairline)}
@media (min-width:900px){.sheet-h{margin:0 -24px 14px;padding:10px 24px 12px;top:-10px}}
.qr-seg{margin:6px auto 10px;max-width:280px}
