/* ETTOY 玩具宇宙 · components — v9 "Glowing Jelly". Only var(--…) from tokens.css. ONE shadow / glow layer per element.
   0 base · 1 utilities · 2 keyframes · 3 background · 4 type · 5 buttons · 6 progress · 7 inputs · 8 glass / tags
   9 HUD + tab bar · 10 jelly kit · 11 collectible cards · 12 home · 13 draw screen · 14 details sheet · 15 modal / rules / 圖鑑 / confirm
   16 opening + reveal · 17 cabinet · 18 account / orders / pet · 19 admin (calm) · 20 desktop · 21 reduced motion */

/* ---------- 0 · base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;background:var(--bg);overflow-x:clip}
body{margin:0;min-height:100vh;font-family:var(--font);font-weight:var(--fw-reg);font-size:var(--fs-body);line-height:var(--lh-body);letter-spacing:var(--ls-body);color:var(--fg);background:transparent;
  overflow-x:clip;position:relative;-webkit-font-smoothing:antialiased;--tb-h:calc(var(--tabbar) + var(--tab-gap) + env(safe-area-inset-bottom))}
body.no-tabbar,.admin{--tb-h:0px}
@media(min-width:900px){body{--tb-h:0px}}
a{color:var(--lime);text-decoration:none}
a:hover{text-decoration:underline;text-underline-offset:3px}
img{max-width:100%;display:block}
button,input,select,textarea{font-family:inherit}
button{color:inherit}
:focus-visible{outline:2px solid var(--lime);outline-offset:3px;border-radius:10px}
::selection{background:var(--violet);color:#fff}
code{font-family:ui-monospace,Menlo,monospace;font-size:.88em;background:var(--well);padding:1px 6px;border-radius:6px}
b,strong{font-weight:var(--fw-bold)}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 16px calc(var(--tb-h) + 40px);position:relative;z-index:1}
.wrap.wide{max-width:var(--wrap-wide)}
svg.ic{width:1.15em;height:1.15em;flex:none;vertical-align:-.18em;display:inline-block;stroke-width:2}
svg.ic.ic-sm{width:.95em;height:.95em}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ---------- 1 · utilities ---------- */
.m-0{margin:0!important}.p-0{padding:0}.p-4{padding:var(--s4)}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin:var(--s1) 0}
.mt-1{margin-top:var(--s1)}.mt-2{margin-top:var(--s2)}.mt-3{margin-top:var(--s3)}.mt-4{margin-top:var(--s4)}.mt-5{margin-top:var(--s5)}
.mb-1{margin-bottom:var(--s1)}.mb-2{margin-bottom:var(--s2)}.mb-3{margin-bottom:var(--s3)}.ml-auto{margin-left:auto}
.pt-3{padding-top:var(--s3)}.py-2{padding-top:var(--s2);padding-bottom:var(--s2)}.pl-5{padding-left:var(--s5)}.pad-sm{padding:6px 10px!important}
.fs-xs{font-size:var(--t12)}.fs-sm{font-size:var(--t14)}.fs-md{font-size:var(--t16)}.fs-lg{font-size:var(--t20)}
.ta-c{text-align:center}.ta-r{text-align:right}.jc-c{justify-content:center}.jc-sb{justify-content:space-between}.ai-start{align-items:flex-start}.as-end{align-self:end}
.flex-1{flex:1}.d-ib{display:inline-block}.w-auto{width:auto!important}.w-mascot{width:120px}.h-90{height:90px}
.gap-2{gap:var(--s2)}.gap-3{gap:var(--s3)}.span-all{grid-column:1/-1}.tap{min-height:44px}.rel{position:relative}
.mw-180{max-width:180px}.mw-220{max-width:220px}.mw-320{max-width:320px}.mw-520{max-width:520px}.minw-160{min-width:160px}.minw-280{min-width:280px}
.b-0{border:0}.bt-dash{border-top:1px solid var(--line)}.bb-dash{border-bottom:1px solid var(--line)}
.o-90{opacity:.92}.c-inherit{color:inherit}.c-ok{color:var(--ok)}.c-warn{color:var(--warn)}.c-a4{color:var(--yel)}.c-a5{color:var(--lav)}
.num{font-family:var(--font-num);font-weight:var(--fw-bold);font-variant-numeric:tabular-nums;letter-spacing:0}
.mute{color:var(--fg-mute);font-size:var(--t14)}
.row{display:flex;gap:var(--s2);align-items:center;flex-wrap:wrap}
.between{justify-content:space-between}
.pre{white-space:pre-line}

/* ---------- 2 · keyframes (transform / opacity only) ---------- */
@keyframes float{50%{transform:translateY(-8px)}}
@keyframes bob{50%{transform:translateY(-5px) rotate(-2deg)}}
@keyframes twinkle{0%,100%{opacity:.3;transform:scale(.7)}50%{opacity:1;transform:scale(1)}}
@keyframes spin-slow{to{transform:rotate(360deg)}}
@keyframes up{from{transform:translateY(40px);opacity:0}}
@keyframes popin{0%{transform:scale(.7);opacity:0}70%{transform:scale(1.04)}100%{transform:none;opacity:1}}
@keyframes shimmer{to{transform:translateX(100%)}}
@keyframes shake{0%,100%{transform:rotate(0)}20%{transform:rotate(-8deg) translateX(-6px)}40%{transform:rotate(7deg) translateX(6px)}60%{transform:rotate(-4deg)}80%{transform:rotate(3deg)}}
@keyframes star{0%{transform:translate(0,0) scale(.3) rotate(0)}100%{transform:translate(var(--dx),var(--dy)) scale(1) rotate(200deg);opacity:0}}
@keyframes fall{to{transform:translateY(112vh) rotate(720deg)}}
@keyframes ufoIn{0%{transform:translate(-160px,-160px) rotate(-16deg) scale(.6);opacity:0}70%{transform:translate(6px,4px) rotate(3deg)}100%{transform:none;opacity:1}}
@keyframes ufoAway{to{transform:translate(220px,-300px) rotate(14deg) scale(.5);opacity:0}}
@keyframes lift{60%{transform:translateY(-36px) scale(1.06)}100%{transform:translateY(-120px) scale(.3);opacity:0}}
@keyframes warm{50%{opacity:1;transform:scale(1.08)}}
@keyframes mq{to{transform:translateX(-50%)}}

/* ---------- 3 · background: violet→indigo gradient, faint fading checker, one huge faded word ---------- */
body::before{content:"";position:fixed;inset:0;z-index:-2;background:var(--bg-grad);pointer-events:none}
body::after{content:"";position:absolute;left:0;right:0;top:0;height:560px;z-index:-1;pointer-events:none;background:var(--checker);
  -webkit-mask-image:linear-gradient(180deg,#000 0%,transparent 100%);mask-image:linear-gradient(180deg,#000 0%,transparent 100%)}
.bgword{position:absolute;left:-14px;top:64px;z-index:0;font:var(--fw-black) 150px/1 var(--font-num);letter-spacing:-.02em;color:var(--bgword);white-space:nowrap;pointer-events:none;user-select:none;transform:skewX(-8deg)}

/* ---------- 4 · type ---------- */
h1,h2,h3{font-family:var(--font);font-weight:var(--fw-black);line-height:var(--lh-head);letter-spacing:var(--ls-head);margin:0 0 var(--s3)}
h1{font-size:var(--t24)} h2{font-size:var(--t20)} h3{font-size:var(--t16)}
.title-xl{font-size:var(--t32);line-height:1.25;margin:0}
.h-mega{font-size:var(--t32);line-height:1.25;margin:var(--s4) 0 var(--s2);overflow-wrap:anywhere}
.hl,.gtext{color:var(--lime);display:inline-block;transform:skewX(-10deg);padding:0 2px}
.hl.y{color:var(--yel)}
.sub{color:var(--fg-mute);font-size:var(--t14);margin:6px 0 0}
.cap{color:var(--fg-dim);font-size:var(--t12)}
/* section title with the small slanted lime tick */
.sec-h,.sh h2,.sh h3{display:flex;align-items:center;gap:8px;font-size:var(--t18);font-weight:var(--fw-black);letter-spacing:.04em}
.sec-h::after,.sh h2::after,.sh h3::after{content:"";flex:none;width:4px;height:10px;margin:-8px 0 0 -2px;border-radius:2px;background:var(--lime);transform:skewX(-20deg)}
.sec-h svg.ic,.sub-h svg.ic{color:var(--lime)}
.sub-h{display:flex;align-items:center;gap:8px;font-size:var(--t16);margin-top:var(--s5)}
.sh{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 14px}
.sh h2,.sh h3{margin:0}
.sh .cnt{font-size:var(--t14);color:var(--fg-mute);white-space:nowrap}
.sh .cnt b{color:#fff;font-weight:var(--fw-bold)}
.display{font-weight:var(--fw-black)}

/* ---------- 5 · buttons ---------- */
/* primary = lime action button; variants keep their v6–v8 class names */
/* v10.1 contrast fix: the text colour used to be `--ink:var(--ink)` — a self-referencing custom property, which CSS treats as invalid,
   so every lime / yellow button silently inherited WHITE text (1.2:1). Buttons now use their own --btn-fg. */
.btn{--bg:var(--lime);--btn-fg:var(--ink);--bh:48px;appearance:none;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bh);padding:0 22px;
  border-radius:14px;border:1px solid transparent;background:var(--bg);color:var(--btn-fg);font-family:var(--font);font-weight:var(--fw-black);font-size:var(--t15);line-height:1.1;letter-spacing:.06em;
  text-align:center;cursor:pointer;text-decoration:none!important;white-space:nowrap;transition:transform var(--t-fast) var(--ease-out),filter var(--t-fast),opacity var(--t-fast);-webkit-tap-highlight-color:transparent}
.btn:hover{filter:brightness(1.06);transform:translateY(-1px)}
.btn:active{transform:translateY(1px) scale(.98)}
.btn:disabled,.btn[aria-disabled=true]{cursor:not-allowed;opacity:.42;filter:saturate(.3);transform:none}
.btn.yellow{--bg:var(--yel)}
.btn.mint,.btn.confirm,.btn.purple{--bg:var(--violet-body);--btn-fg:#fff;border-color:rgba(255,255,255,.5);box-shadow:var(--sh-soft)}
.btn.ghost,.btn.grey{--bg:var(--glass-2);--btn-fg:#fff;border-color:var(--line);font-weight:var(--fw-med);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.btn.line{--bg:var(--line-green);--btn-fg:var(--ink)}   /* v10.1 AA: dark ink on LINE green (white was 2.3:1) */
.btn.danger,.btn.red{--bg:var(--bad);--btn-fg:var(--ink)}
.btn.blue,.btn.cyan{--bg:var(--cyan)}
.btn.link{--bg:transparent;--btn-fg:var(--lime);min-height:44px;padding:0 4px}
.btn.small{--bh:38px;padding:0 14px;font-size:var(--t13);border-radius:12px;gap:5px}
.btn.big{--bh:56px;font-size:var(--t18);padding:0 28px;border-radius:18px}
.btn.block{width:100%}
.btn.sq,.btn.icon-only{--bh:44px;width:var(--bh);min-width:40px;padding:0;border-radius:50%}
.btn.sq.small{--bh:40px}
.btn.sq svg.ic{width:20px;height:20px}
/* frosted round / pill button */
.gbtn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:0;background:var(--glass-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);border:1px solid var(--line);border-radius:var(--r-pill);
  color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform var(--t-fast) var(--ease-pop)}
.gbtn:active{transform:scale(.94)}
/* lime action chip (tasks / rows), slanted like the reference */
.lbtn{display:inline-flex;align-items:center;justify-content:center;gap:4px;height:36px;padding:0 18px;border:0;border-radius:12px;background:var(--lime);color:var(--ink);font-family:var(--font);font-weight:var(--fw-black);
  font-size:var(--t14);letter-spacing:.06em;cursor:pointer;transform:skewX(-8deg);white-space:nowrap;text-decoration:none!important}
.lbtn>span{display:inline-block;transform:skewX(8deg)}
.lbtn.ghost{background:var(--glass-2);color:#fff;border:1px solid var(--line);font-weight:var(--fw-med)}
.lbtn:disabled{opacity:.4;cursor:not-allowed}
/* Magic Button: glass body over a thick rainbow-refraction glass base (the only rainbow on a screen) */
.magic{position:relative;isolation:isolate;display:flex;width:100%;align-items:center;justify-content:center;gap:10px;height:62px;padding:0 24px;border:0;background:none;color:#fff;cursor:pointer;
  font-family:var(--font);font-size:var(--t18);font-weight:var(--fw-black);letter-spacing:.08em;white-space:nowrap;-webkit-tap-highlight-color:transparent;transition:transform var(--t-fast) var(--ease-out),filter var(--t-fast)}
.magic::before{content:"";position:absolute;z-index:0;left:0;right:0;top:12px;bottom:-10px;border-radius:var(--r-pill);background:var(--rainbow);box-shadow:var(--glow-magic)}
.magic::after{content:"";position:absolute;z-index:1;inset:0;border-radius:var(--r-pill);border:1.5px solid rgba(255,255,255,.6);background:var(--magic-body)}
.magic>*{position:relative;z-index:3}
.magic .spec{position:absolute;z-index:2;left:24px;top:6px;width:36%;height:16px;border-radius:var(--r-pill);background:linear-gradient(180deg,rgba(255,255,255,.7),rgba(255,255,255,0));pointer-events:none}
.magic img{width:22px;height:22px}
.magic .sep{width:1.5px;height:20px;background:rgba(255,255,255,.45);border-radius:2px}
.magic:hover{filter:brightness(1.06)}
.magic:active{transform:translateY(3px) scale(.99)}
.magic:disabled{cursor:not-allowed;filter:saturate(.55);opacity:.78;transform:none}
.x{position:absolute;right:14px;top:14px;z-index:3;width:40px;height:40px;border-radius:50%;cursor:pointer;display:grid;place-items:center;color:#fff;padding:0;
  border:1px solid var(--line);background:var(--glass-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.x svg.ic{width:20px;height:20px}
.x:active{transform:scale(.94)}
.linkbtn{display:inline-flex;align-items:center;gap:4px;margin-top:6px;padding:0;border:0;background:none;color:var(--lime);font-size:var(--t14);font-weight:var(--fw-bold);cursor:pointer;min-height:36px;text-decoration:none!important}

/* ---------- 6 · progress ---------- */
.gbar{position:relative;display:block;height:10px;border-radius:var(--r-pill);background:var(--bar-track);overflow:hidden}
.gbar i{position:absolute;left:0;top:0;bottom:0;display:block;border-radius:var(--r-pill);background:var(--bar-fill);transition:width .9s var(--ease-out);min-width:6px}
.gbar.cyan i{background:var(--bar-fill-cyan)} .gbar.pink i{background:var(--bar-fill-pink)} .gbar.warm i{background:var(--bar-fill-warm)}
.gbar.run i{background:var(--bar-fill-cyan);overflow:hidden}
.gbar.run i::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.6),transparent);animation:shimmer 1.1s linear infinite}
.gbar.sm{height:8px}.gbar.xs{height:6px}.gbar.big{height:12px}
.loading{display:flex;flex-direction:column;align-items:center;gap:10px;padding:22px 10px;color:var(--fg)}
.loading img,.loading .jelly{width:64px;height:auto;animation:float 2.4s ease-in-out infinite}
.loading b{font-size:var(--t15);letter-spacing:.12em;font-weight:var(--fw-med)}
.loading .gbar{width:min(220px,70%)}

/* ---------- 7 · inputs ---------- */
label.f{display:block;margin:var(--s4) 0 6px;font-weight:var(--fw-med);font-size:var(--t13);color:var(--fg-mute)}
input,textarea,select{width:100%;font:inherit;font-size:var(--t16);color:var(--fg);background:var(--well);border:1px solid var(--line);border-radius:14px;padding:12px 16px;min-height:48px;
  transition:border-color var(--t-fast),box-shadow var(--t-fast)}
textarea{line-height:1.5}
select{appearance:none;padding-right:40px;background-repeat:no-repeat;background-position:calc(100% - 14px) 50%;background-size:14px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23D6FF55' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")}
select option{background:#2E1C93;color:#fff}
input::placeholder,textarea::placeholder{color:var(--fg-dim)}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--lime);box-shadow:0 0 0 3px rgba(214,255,85,.2)}
/* v10.1: fully custom checkbox / radio — iOS Safari ignored accent-color and painted the native control as a black square */
:root input[type=checkbox],:root input[type=radio]{-webkit-appearance:none;appearance:none;flex:none;display:inline-grid;place-content:center;width:22px;height:22px;min-height:0;margin:0;padding:0;
  vertical-align:middle;border:2px solid rgba(255,255,255,.72);border-radius:7px;background:rgba(255,255,255,.1);box-shadow:none;cursor:pointer;transition:background .15s,border-color .15s}
:root input[type=radio]{border-radius:50%}
:root input[type=checkbox]::after{content:"";width:6px;height:11px;margin-top:-3px;border:solid var(--ink);border-width:0 3px 3px 0;transform:rotate(45deg) scale(0);transition:transform .15s}
:root input[type=radio]::after{content:"";width:10px;height:10px;border-radius:50%;background:var(--ink);transform:scale(0);transition:transform .15s}
:root input[type=checkbox]:checked,:root input[type=radio]:checked{background:var(--lime);border-color:var(--lime)}
:root input[type=checkbox]:checked::after,:root input[type=radio]:checked::after{transform:rotate(45deg) scale(1)}
:root input[type=radio]:checked::after{transform:scale(1)}
:root input[type=checkbox]:focus-visible,:root input[type=radio]:focus-visible{outline:2px solid #fff;outline-offset:2px}
:root input[type=checkbox]:disabled,:root input[type=radio]:disabled{opacity:.45;cursor:not-allowed}
input[type=file]{font-size:var(--t14);padding:10px 14px;border-style:dashed}
.err{color:var(--bad);font-size:var(--t13);margin-top:var(--s2);min-height:1em;font-weight:var(--fw-med)}
.short{color:var(--bad)}

/* ---------- 8 · glass panels / tags ---------- */
.glass{background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);border:1px solid var(--line);border-radius:var(--r-panel)}
.card,.panel{position:relative;margin:var(--s5) 0;padding:18px;border-radius:var(--r-panel);background:var(--glass);border:1px solid var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.panel{margin:var(--s4) 0;padding:16px}
.card>h3,.card>.sec-h{margin-bottom:var(--s3)}
.card.mute{color:var(--fg-mute);text-align:center}
.card.feat,.card-feat{border-color:var(--rim)}
.card.glass{background:var(--dark)}
.dark{background:var(--dark);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);border:1px solid rgba(255,255,255,.1);border-radius:var(--r-panel)}
.badge{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 9px;border-radius:var(--r-tag);font-size:var(--t12);font-weight:var(--fw-bold);line-height:1;vertical-align:middle;white-space:nowrap;letter-spacing:.04em;
  background:var(--glass-3);color:#fff;text-decoration:none!important}
.badge svg.ic{width:1em;height:1em}
.badge.xs{height:18px;padding:0 6px;font-size:var(--t11)}
.badge.stock{background:var(--cyan);color:var(--ink)}
.badge.preorder{background:var(--lav);color:var(--ink)}
.badge.paid{background:var(--lime);color:var(--ink)}
.badge.test{background:var(--yel);color:var(--ink)}
.badge.demo{background:var(--pink);color:var(--ink)}
.badge.refunded{background:var(--bad);color:var(--ink)}
.badge.grey{background:var(--glass-3);color:#fff}
.badge.hidden,.badge.hid{background:var(--iris);color:var(--ink)}
.badge.ip{background:var(--glass-2);padding-left:3px;border:1px solid var(--line);height:26px;border-radius:var(--r-pill)}
.badge.ip img{width:20px;height:20px;border-radius:50%;background:#fff;object-fit:cover}
.jtag{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:var(--r-tag);font-size:var(--t12);font-weight:var(--fw-black);color:var(--ink);letter-spacing:.06em;white-space:nowrap;background:var(--glass-3)}
.jtag.lime{background:var(--lime)}.jtag.cyan{background:var(--cyan)}.jtag.pink{background:var(--pink)}.jtag.yel{background:var(--yel)}.jtag.lav{background:var(--lav)}.jtag.iris{background:var(--iris)}
.jtag.soft{background:var(--glass-3);color:#fff;font-weight:var(--fw-med)}
.ipinit{display:inline-grid;place-items:center;width:1.6em;height:1.6em;border-radius:50%;background:var(--violet-body);color:#fff;font-weight:var(--fw-black);font-size:.8em}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;height:30px;background:var(--glass-2);border:1px solid var(--line);border-radius:var(--r-pill);padding:0 12px;font-size:var(--t13)}
.chip.hid{background:var(--iris);color:var(--ink);border-color:transparent;font-weight:var(--fw-bold)}
.note,.odds-note{border-radius:var(--r-well);padding:12px 14px;font-size:var(--t13);line-height:1.65;background:var(--well);border:1px solid var(--line);color:var(--fg-mute)}
.note.warn,.warnsoft{border:1px solid rgba(255,143,158,.45);background:rgba(255,143,158,.12);color:var(--fg);border-radius:var(--r-well);padding:12px 14px;font-size:var(--t14);line-height:1.6}
.note svg.ic,.warnsoft svg.ic{color:var(--bad);margin-right:4px}
.warnsoft b{font-size:var(--t15)}
.well{background:var(--well);border-radius:var(--r-well);padding:12px 14px}
.empty{text-align:center;padding:28px 12px}
.empty img,.empty .jelly{width:110px;margin:0 auto 12px;animation:float 4s ease-in-out infinite}
.empty p{color:var(--fg-mute)}
footer.foot{text-align:center;color:var(--fg-dim);font-size:var(--t13);margin:36px 0 0}
footer.foot .fl{width:96px;margin:0 auto 10px;opacity:.85}

/* ---------- 9 · HUD (sticky top) + floating tab bar ---------- */
header.top{position:sticky;top:0;z-index:40;transition:background var(--t-med),border-color var(--t-med);border-bottom:1px solid transparent}
header.top.scrolled{background:rgba(40,24,140,.62);border-bottom-color:var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
header.top .in{max-width:var(--wrap);margin:0 auto;height:var(--hud);display:flex;align-items:center;gap:10px;padding:0 16px}
body.home header.top .in,.admin header.top .in{max-width:var(--wrap-wide)}
.logo{display:flex;align-items:center;gap:10px;color:var(--fg);text-decoration:none!important}
.logo img.lg{height:36px;width:auto}
.logo .tag{display:none;font-size:var(--t12);color:var(--fg-mute);letter-spacing:.1em}
header.top .sp{flex:1}
.hdr-r{display:flex;align-items:center;gap:8px}
.hudcoin{display:inline-flex;align-items:center}
.coinpill{display:inline-flex;align-items:center;gap:7px;height:40px;padding:0 42px 0 8px;border-radius:var(--r-pill);background:var(--glass-2);border:1px solid var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  color:#fff;font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t16);text-decoration:none!important;min-width:96px}
.coinpill img{width:22px;height:22px}
.hudplus{position:relative;z-index:1;width:30px;height:30px;margin-left:-36px;padding:0;border:0;border-radius:50%;display:grid;place-items:center;cursor:pointer;background:var(--lime);color:var(--ink)}
.hudplus::before{content:"";position:absolute;inset:-7px}
.hudplus svg.ic{width:16px;height:16px;stroke-width:2.8}
.hudplus:active{transform:scale(.92)}
.hudnav{display:none}
nav.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:45;height:var(--tb-h);display:grid;grid-template-columns:repeat(5,1fr);align-items:start;
  padding:0 calc(var(--tab-gap) + 4px) calc(var(--tab-gap) + env(safe-area-inset-bottom));pointer-events:none}
nav.tabbar::before{content:"";position:absolute;z-index:-1;left:var(--tab-gap);right:var(--tab-gap);top:0;bottom:calc(var(--tab-gap) + env(safe-area-inset-bottom));border-radius:26px;
  background:rgba(30,18,90,.8);border:1px solid var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);box-shadow:var(--sh-soft)}
nav.tabbar a{pointer-events:auto;height:var(--tabbar);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--fg-dim);text-decoration:none!important;font-size:var(--t11);
  font-weight:var(--fw-med);-webkit-tap-highlight-color:transparent}
nav.tabbar .tb-ic{display:grid;place-items:center;height:24px;transition:transform var(--t-fast) var(--ease-pop)}
nav.tabbar .tb-ic svg.ic{width:22px;height:22px;stroke-width:1.9}
nav.tabbar a.on{color:#fff}
nav.tabbar a.on .tb-ic{color:var(--lime);transform:translateY(-1px)}
nav.tabbar a:active .tb-ic{transform:scale(.9)}
@media(min-width:900px){nav.tabbar{display:none}}
body.no-tabbar nav.tabbar,.admin nav.tabbar{display:none}
.toast{position:fixed;left:50%;bottom:calc(var(--tb-h) + 96px);transform:translateX(-50%);z-index:90;max-width:88vw;padding:12px 20px;border-radius:18px;color:#fff;font-weight:var(--fw-med);font-size:var(--t14);text-align:center;
  background:rgba(24,14,80,.88);border:1px solid var(--line-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);box-shadow:var(--sh-soft)}

/* ---------- 10 · jelly kit: mascots, Hi bubble, sparkles, spotlight, pedestal ---------- */
.jelly{position:relative;display:inline-block;flex:none;line-height:0}
.jelly svg{display:block;width:100%;height:auto;overflow:visible}
.hi{position:absolute;z-index:2;background:var(--yel);color:var(--ink);font:var(--fw-black) 14px/1 var(--font-num);padding:6px 10px 7px;border-radius:9px;transform:rotate(-9deg);letter-spacing:.02em}
.hi::after{content:"";position:absolute;left:8px;bottom:-6px;width:11px;height:9px;background:var(--yel);clip-path:polygon(0 0,100% 0,0 100%)}
.spark{position:absolute;display:block;width:16px;height:16px;color:#fff;pointer-events:none;animation:twinkle 3.2s ease-in-out infinite}
.spark svg{width:100%;height:100%;display:block;fill:currentColor}
.spark.y{color:var(--yel)}.spark.l{color:var(--lime)}.spark.d1{animation-delay:.8s}.spark.d2{animation-delay:1.6s}.spark.d3{animation-delay:2.4s}
.ped{position:relative;width:250px;height:86px;margin:0 auto}
.ped .base{position:absolute;left:0;right:0;top:18px;height:66px;border-radius:50%;background:linear-gradient(180deg,#5A3CD8,#2E1A92);box-shadow:var(--glow-ped)}
.ped .top{position:absolute;left:0;right:0;top:0;height:66px;border-radius:50%;border:1.5px solid rgba(255,255,255,.55);background:radial-gradient(ellipse at 50% 40%,#E8DDFF 0%,#A98BFF 45%,#6B4AE6 100%)}
.mp{position:relative;margin:-10px auto 0;width:78px;height:18px;border-radius:50%;background:radial-gradient(ellipse at 50% 40%,#E8DDFF,#9C7DF5 70%,#6A48E0);border:1px solid rgba(255,255,255,.5);box-shadow:0 0 18px rgba(170,140,255,.45)}

/* ---------- 11 · collectible cards + horizontal scrollers ---------- */
.cc{position:relative;display:block;padding:7px;border-radius:var(--r-card);background:var(--cc-bg);border:1px solid var(--rim);box-shadow:var(--sh-card);color:#fff;text-decoration:none!important;
  transition:transform var(--t-med) var(--ease-pop)}
.cc .strip{display:flex;justify-content:space-between;align-items:center;padding:1px 6px 6px;font:var(--fw-bold) 10px/1 var(--font-num);letter-spacing:.14em;color:rgba(255,255,255,.65)}
.cc .pic{position:relative;aspect-ratio:1;border-radius:14px;overflow:hidden;background:#fff}
.cc .pic img{width:100%;height:100%;object-fit:cover}
.cc .pic.contain img{object-fit:contain}
.cc .plate{padding:9px 6px 3px;min-width:0}
.cc .plate .nm{display:block;font-size:var(--t14);font-weight:var(--fw-black);line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cc .plate .meta{display:flex;align-items:center;gap:6px;margin-top:5px;font-size:var(--t11);color:var(--fg-mute);min-width:0;white-space:nowrap;overflow:hidden}
.cc .plate .meta .jtag{height:18px;font-size:10px;padding:0 6px;border-radius:5px;flex:none}
.cc .plate .meta .pp{display:inline-flex;align-items:center;gap:3px;margin-left:auto;color:#fff;font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t13)}
.cc .plate .meta .pp img{width:15px;height:15px}
.cc .plate .meta .ms{min-width:0;overflow:hidden;text-overflow:ellipsis}
.cc.iris{background:var(--iris);border-color:rgba(255,255,255,.75);box-shadow:var(--glow-iris)}
.cc.iris .plate .nm,.cc.iris .strip{color:var(--ink)}
.cc.iris .plate .meta{color:rgba(27,21,48,.7)}
.cflag{position:absolute;z-index:3;top:-14px;right:14px;height:30px;padding:0 13px;font-size:var(--t14);border-radius:9px}
.cflag::after{content:"";position:absolute;right:12px;bottom:-6px;width:11px;height:8px;background:inherit;clip-path:polygon(0 0,100% 0,100% 100%)}
.hscroll{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:none;margin:0 -16px;padding:4px 16px 12px;scroll-padding:0 16px}
.hscroll::-webkit-scrollbar{display:none}
.hscroll>*{scroll-snap-align:start;flex:none}
.hscroll.cards{padding-top:16px;padding-bottom:20px}
.hcard{width:132px;padding:6px 6px 10px;border-radius:var(--r-card);background:var(--glass-2);border:1px solid var(--line);color:#fff;text-decoration:none!important;transition:transform var(--t-fast) var(--ease-pop)}
.hcard:active{transform:scale(.97)}
.hcard .ph{position:relative;aspect-ratio:1;border-radius:15px;overflow:hidden;background:#fff}
.hcard .ph img{width:100%;height:100%;object-fit:cover}
.hcard .ph .jtag{position:absolute;left:6px;top:6px;height:20px;font-size:var(--t11)}
.hcard .nm{font-size:var(--t13);line-height:1.4;margin:8px 4px 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;height:2.8em}
.hcard .pr{display:flex;align-items:center;gap:4px;margin:6px 4px 0;font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t15)}
.hcard .pr img{width:16px;height:16px}
.hcard .pr small{font-size:var(--t11);color:var(--fg-dim);font-weight:var(--fw-reg);margin-left:auto}
.mini-cc{width:118px}
.mini-cc .plate .nm{font-size:var(--t13)}
.mini-cc:nth-child(odd){transform:rotate(-2deg)} .mini-cc:nth-child(even){transform:rotate(2deg)}
.allbtn{height:30px;padding:0 12px;font-size:var(--t12);color:var(--fg-mute);text-decoration:none!important}
.allbtn svg.ic{width:14px;height:14px}

/* ---------- 12 · home ---------- */
.homehero{position:relative}
.hhead{display:flex;align-items:flex-end;justify-content:space-between;gap:8px;margin:6px 0 0}
.hhead .cap{display:block;margin-bottom:4px;font-size:var(--t13)}
.hmascot{position:relative;width:92px;margin:0 2px 4px 0;animation:bob 4s ease-in-out infinite}
.hmascot .hi{left:-20px;top:-2px}
.hsteps{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:8px;font-size:var(--t12);color:var(--fg-mute)}
.hsteps::-webkit-scrollbar{display:none}
.hsteps li{flex:none;max-width:100%;display:flex;align-items:center;gap:6px;min-height:30px;padding:3px 12px 3px 4px;line-height:1.3;border-radius:var(--r-pill);background:var(--glass);border:1px solid var(--line)}
.hsteps b{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--glass-3);color:#fff;font-family:var(--font-num);font-size:var(--t12)}
.hh-acts{display:none}
.home-mq{margin:16px 0 0}
.ipbar{margin:14px -16px 0;padding:0}
.ipchips{display:flex;gap:12px;overflow-x:auto;scrollbar-width:none;scroll-padding:0 16px;padding:6px 16px 4px}
.ipchips::-webkit-scrollbar{display:none}
.ipchips button{flex:none;display:flex;flex-direction:column;align-items:center;gap:6px;width:60px;padding:0;border:0;background:none;cursor:pointer;color:var(--fg-dim);-webkit-tap-highlight-color:transparent}
.ipchips .ipic{position:relative;width:56px;height:56px;border-radius:50%;display:grid;place-items:center;background:var(--glass-2);border:1px solid var(--line);transition:transform var(--t-fast) var(--ease-pop)}
.ipchips .ipic::after{content:"";position:absolute;left:12px;top:5px;width:20px;height:8px;border-radius:50%;background:rgba(255,255,255,.4);filter:blur(2px);transform:rotate(-20deg);pointer-events:none}
.ipchips .ipic img{width:44px;height:44px;border-radius:50%;object-fit:cover;background:#fff}
.ipchips .ipic .ipinit{width:44px;height:44px;font-size:var(--t18)}
.ipchips .ipall{display:grid;place-items:center;color:#fff}
.ipchips .ipall svg.ic{width:24px;height:24px}
.ipchips .ipcnt{position:absolute;right:-5px;top:-3px;z-index:1;min-width:20px;height:20px;padding:0 5px;border-radius:var(--r-pill);display:grid;place-items:center;font:var(--fw-bold) 11px/1 var(--font-num);font-style:normal;
  background:rgba(30,18,90,.9);border:1px solid var(--line-2);color:#fff}
.ipchips .ipn{font-size:var(--t12);line-height:1.2;max-width:60px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ipchips button:active .ipic{transform:scale(.94)}
.ipchips button.on{color:#fff}
.ipchips button.on .ipic{border:2px solid var(--lime)}
.ipchips button.on .ipcnt{background:var(--lime);color:var(--ink);border-color:var(--lime)}
/* featured: two tilted collectible cards */
.feat{position:relative;height:268px;margin:24px 0 4px}
.feat .cc{position:absolute;width:47%;max-width:200px}
.feat .cc.c1{left:2px;top:28px;transform:rotate(-6deg)}
.feat .cc.c2{right:2px;top:4px;transform:rotate(5deg)}
.feat .cc:hover{z-index:4}
.feat .cc.solo{left:50%;top:10px;transform:translateX(-50%) rotate(-4deg)}
/* filters */
.gridh{margin:28px 0 10px}
.filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 14px}
.seg{display:inline-flex;padding:3px;border-radius:var(--r-pill);background:var(--well);border:1px solid var(--line)}
.seg button{border:0;background:none;min-height:36px;padding:0 14px;border-radius:var(--r-pill);font-weight:var(--fw-med);font-size:var(--t13);color:var(--fg-mute);cursor:pointer}
.seg button.on{color:#fff;background:var(--glass-3);font-weight:var(--fw-black)}
.filters .sel{display:inline-flex;align-items:center;gap:4px;padding-left:14px;border-radius:var(--r-pill);background:var(--glass);border:1px solid var(--line);font-size:var(--t13);color:var(--fg-mute)}
.filters .sel select{border:0;background-color:transparent;min-height:40px;padding:0 34px 0 4px;font-size:var(--t13);width:auto;border-radius:var(--r-pill);box-shadow:none}
.fcount{margin-left:auto;font-size:var(--t13);color:var(--fg-mute)}
@media(max-width:560px){.fcount{display:none}.filters{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 -16px 14px;padding:2px 16px 4px}.filters::-webkit-scrollbar{display:none}
  .filters>*{flex:none}.seg button{padding:0 12px}.filters .sel .lbl{display:none}}
.gridsec{position:relative}
/* product grid: frosted cards */
.pgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media(min-width:640px){.pgrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}}
@media(min-width:900px){.pgrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:18px}}
@media(min-width:1180px){.pgrid{grid-template-columns:repeat(5,minmax(0,1fr))}}
.pcard{position:relative;display:flex;flex-direction:column;min-width:0;padding:6px 6px 10px;color:var(--fg);text-decoration:none!important;border-radius:var(--r-card);background:var(--glass);
  border:1px solid var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);transition:transform var(--t-med) var(--ease-pop),border-color var(--t-fast);-webkit-tap-highlight-color:transparent}
.pcard:hover,.pcard:focus-visible{transform:translateY(-3px);border-color:var(--line-2)}
.pcard:active{transform:scale(.98)}
.pimg{position:relative;aspect-ratio:1/1;overflow:hidden;border-radius:15px;background:#fff}
.pimg img{width:100%;height:100%;object-fit:cover;transition:transform var(--t-med) var(--ease-out)}
.pcard:hover .pimg img{transform:scale(1.04)}
.pimg .tl{position:absolute;left:6px;top:6px;display:flex;gap:4px;z-index:1}
.pb{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:6px;font-size:var(--t11);font-weight:var(--fw-black);letter-spacing:.06em;color:var(--ink);background:var(--glass-3)}
.pb.new{background:var(--lime)} .pb.hot{background:var(--pink)} .pb.demo{background:var(--pink)} .pb.test{background:var(--yel)}
.soldout{position:absolute;inset:0;z-index:2;display:grid;place-items:center;background:var(--scrim);color:#fff;font-weight:var(--fw-black);font-size:var(--t18);letter-spacing:.12em}
.pbody{padding:9px 4px 0;display:flex;flex-direction:column;gap:6px;flex:1}
.pname{font-size:var(--t13);font-weight:var(--fw-med);line-height:1.45;height:2.9em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pmeta{display:flex;align-items:center;gap:6px;height:18px;font-size:var(--t11);color:var(--fg-mute);white-space:nowrap}
.pmeta .dot{flex:none;width:6px;height:6px;border-radius:50%;background:var(--cyan)}
.pmeta.preorder .dot{background:var(--lav)}
.pmeta .left{flex:1;overflow:hidden;text-overflow:ellipsis;min-width:0}
.pmeta .left.low{color:var(--pink)}
.pbuy{display:flex;align-items:center;gap:6px;margin-top:auto}
.pprice{display:inline-flex;align-items:center;gap:4px;flex:1;min-width:0;color:#fff}
.pprice img{width:18px;height:18px;flex:none}
.pprice b{font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t16);line-height:1}
.pprice small{font-size:var(--t11);color:var(--fg-dim)}
.buy{flex:none;display:grid;place-items:center;height:28px;padding:0 11px;border-radius:10px;font-size:var(--t12);font-weight:var(--fw-black);letter-spacing:.06em;color:var(--lime);
  background:rgba(214,255,85,.14);border:1px solid rgba(214,255,85,.45)}

/* ---------- 13 · draw screen (v3 02-draw: every box of the 中盒 on a lit glass display shelf) ---------- */
body.drawpage .wrap{padding-bottom:calc(216px + env(safe-area-inset-bottom))}
.titlepill{display:flex;align-items:center;gap:8px;height:52px;margin:4px 0 0;padding:0 6px 0 16px;border-radius:var(--r-pill);background:var(--glass);border:1px solid var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.titlepill h1{flex:1;min-width:0;margin:0;font-size:var(--t15);line-height:var(--lh-tight);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tp-price{flex:none;display:inline-flex;align-items:center;gap:4px;height:38px;padding:0 12px 0 8px;border-radius:var(--r-pill);background:var(--glass-2);border:1px solid var(--line)}
.tp-price img{width:20px;height:20px}
.tp-price b{font-size:var(--t16);line-height:1}
.tp-price small{font-size:var(--t11);color:var(--fg-dim)}
.marquee{position:relative;height:34px;margin:12px 0 0;overflow:hidden;border-radius:var(--r-pill);background:rgba(10,6,40,.28);
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 22px,#000 calc(100% - 22px),transparent 100%);mask-image:linear-gradient(90deg,transparent 0,#000 22px,#000 calc(100% - 22px),transparent 100%)}
.marquee[hidden]{display:none}
.mq-track{display:inline-flex;align-items:center;height:100%;padding-left:16px;white-space:nowrap;animation:mq var(--dur,40s) linear infinite;will-change:transform}
.marquee:hover .mq-track{animation-play-state:paused}
.wi{display:inline-flex;align-items:center;gap:6px;margin-right:30px;font-size:var(--t13);color:var(--fg-mute)}
.wi b{color:#fff;font-weight:var(--fw-med)}
.wi svg.ic{color:var(--lime);width:14px;height:14px}
.wi.hid{height:24px;padding:0 10px;border-radius:var(--r-pill);color:var(--ink);background:var(--iris)}
.wi.hid b{color:var(--ink);font-weight:var(--fw-black)} .wi.hid svg.ic{color:var(--ink)}
.dstage{margin-top:14px}
.dtools{display:flex;align-items:center;justify-content:space-between;gap:8px}
.sw{display:flex;align-items:center;gap:7px;min-width:0}
.sw .arrow{width:32px;height:32px;flex:none}
.sw .arrow svg.ic{width:16px;height:16px}
.sw .t{font-size:var(--t15);font-weight:var(--fw-black);white-space:nowrap}
.sw .t .cap{font-weight:var(--fw-reg);font-size:var(--t12);margin-left:4px}
.rstack{display:flex;gap:8px}
.rbtn{width:36px;height:36px;flex:none}
.rbtn svg.ic{width:17px;height:17px}
.rbtn.on{color:var(--lime);border-color:rgba(214,255,85,.5)}
.machine{position:relative;margin-top:14px;padding:28px 12px 2px;border-radius:28px;overflow:hidden;border:1px solid rgba(255,255,255,.18);
  background:radial-gradient(90% 60% at 50% 0%,rgba(255,255,255,.2),rgba(255,255,255,.04) 60%,rgba(255,255,255,.03)),rgba(20,12,70,.25)}
.machine::before{content:"";position:absolute;left:50%;top:-30px;width:110%;height:120px;transform:translateX(-50%);background:radial-gradient(50% 100% at 50% 0%,rgba(255,250,230,.28),transparent 70%);pointer-events:none}
.machine.has-q{padding-top:46px}
.qpill{position:absolute;z-index:3;left:12px;top:12px;display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px;border-radius:var(--r-pill);cursor:pointer;color:#fff;font-size:var(--t12);
  background:var(--glass-2);border:1px solid var(--line)}
.qpill svg.ic{width:14px;height:14px;color:var(--lime)}
.qpill .v{font-family:var(--font-num);font-weight:var(--fw-bold)}
.qpill.busy svg.ic{color:var(--pink)} .qpill.wait svg.ic{color:var(--lav)}
.qpill.mine{background:var(--lime);color:var(--ink);border-color:var(--lime)} .qpill.mine svg.ic{color:var(--ink)}
/* v11.1 shelf: equal-size boxes; --cols from JS (fewest empty cells); short rows centred; no plank / divider lines.
   Box height follows the slot width through container units, so boxes scale with the shelf (capped for 1–2 per row). */
.case{position:relative;container-type:inline-size;--cols:3;--gap:12px;--slotw:calc((100cqw - (var(--cols) - 1) * var(--gap)) / var(--cols));--boxh:min(150px,calc(var(--slotw) * 1.04));padding-bottom:14px}
.case.c2,.case.c1{--gap:28px;--boxh:min(140px,calc(var(--slotw) * .9))}
.case.dense{--gap:8px}
.case.xdense{--gap:6px}
.case .srow{position:relative;z-index:1;display:flex;justify-content:center;gap:0 var(--gap);padding:18px 0 0;margin:0 0 6px;   /* scoped: admin also has a .srow */
  grid-template:none;align-items:flex-end;border:0;border-radius:0;background:none;cursor:default}
.case .srow:hover,.case .srow:focus-visible{border-color:transparent}
.case .srow>.slot{flex:0 0 var(--slotw);width:var(--slotw)}
.case.dense .srow{padding-top:14px}
.slot{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:0;min-height:44px;padding:0;border:0;background:none;color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent}
.slot .lift{position:relative;display:block;width:100%;transition:transform .28s var(--ease-pop)}
.slot .bx,.slot .cssbox{position:relative;z-index:1;display:block;width:100%;height:var(--boxh);object-fit:contain;object-position:50% 100%;filter:drop-shadow(0 8px 8px rgba(15,6,60,.45));transition:filter var(--t-fast)}
.slot .pool{position:absolute;left:14%;right:14%;bottom:-6px;height:14px;border-radius:50%;background:rgba(255,255,255,.22);filter:blur(5px);transition:all var(--t-med)}
.slot .n{position:relative;z-index:2;margin-top:7px;min-width:28px;height:22px;padding:0 7px;border-radius:var(--r-pill);display:grid;place-items:center;font:var(--fw-bold) 13px/1 var(--font-num);
  background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.28)}
.case.dense .slot .n{min-width:24px;height:20px;font-size:var(--t12);margin-top:5px}
.slot:hover:not(.taken) .lift{transform:translateY(-4px)}
.slot:active:not(.taken) .lift{transform:translateY(-2px) scale(.96)}
.slot.sel .lift{transform:translateY(-16px) scale(1.08)}
.case.dense .slot.sel .lift{transform:translateY(-12px) scale(1.08)}
.slot.sel .bx,.slot.sel .cssbox{filter:drop-shadow(0 0 14px rgba(214,255,85,.75))}
.slot.sel .pool{background:rgba(214,255,85,.55);filter:blur(7px);bottom:-20px;height:18px}
.slot.sel .n{background:var(--lime);color:var(--ink);border-color:var(--lime);font-weight:var(--fw-black)}
.slot.sel::after{content:"";position:absolute;z-index:3;right:-2px;top:-22px;width:26px;height:26px;border-radius:50%;border:2px solid #fff;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231B1530' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/15px no-repeat,var(--lime)}
.case.dense .slot.sel::after{width:22px;height:22px;top:-16px;background-size:13px}
.slot.taken{cursor:not-allowed}
.slot.taken .bx,.slot.taken .cssbox{opacity:.3;filter:grayscale(.6)}
.slot.taken .pool{display:none}
.slot.taken .n{opacity:.45}
.slot .stamp{position:absolute;z-index:2;left:50%;top:46%;transform:translate(-50%,-50%) rotate(-12deg);font-size:var(--t12);letter-spacing:.12em;white-space:nowrap;color:rgba(255,255,255,.88);
  padding:3px 9px;border-radius:8px;background:rgba(30,18,90,.6);border:1px solid rgba(255,255,255,.3)}
.case.dense .slot .stamp{font-size:var(--t11);padding:2px 7px}
.case.xdense .slot .n{min-width:20px;height:18px;padding:0 5px;font-size:var(--t11);margin-top:4px}
.case.xdense .slot.sel::after{width:18px;height:18px;top:-12px;right:-3px;background-size:11px}
.case.xdense .slot .stamp{font-size:10px;padding:1px 5px;letter-spacing:.04em}
.case.xdense .slot.sel .lift{transform:translateY(-10px) scale(1.06)}
.slot.hinted::before{content:"";position:absolute;z-index:3;left:-2px;top:-14px;width:24px;height:24px;border-radius:50%;border:2px solid #fff;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231B1530' stroke-width='3' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6.5'/%3E%3Cpath d='m20 20-4-4'/%3E%3C/svg%3E") center/13px no-repeat,var(--cyan)}
/* fallback crate when a series has no box photo */
.cssbox{width:100%;aspect-ratio:300/340;position:relative;display:block}
.cssbox i{position:absolute;left:14%;right:14%;top:24%;bottom:2%;border-radius:16px;background:linear-gradient(160deg,#E7DAFF,#B48CFF 55%,#7B3DFF);border:1.5px solid rgba(255,255,255,.75)}
.cssbox i::before{content:"";position:absolute;left:-7%;right:-7%;top:-15%;height:22%;border-radius:10px;background:linear-gradient(180deg,#FFF6C8,#FFE45C);border:1.5px solid rgba(255,255,255,.8)}
.cssbox i::after{content:"?";position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-weight:var(--fw-black);font-size:var(--t32)}
.case.locked .srow{filter:grayscale(.6) opacity(.5);pointer-events:none}
.case.locked::after{content:attr(data-msg);position:absolute;z-index:4;left:50%;top:50%;transform:translate(-50%,-50%);color:#fff;font-weight:var(--fw-black);font-size:var(--t15);padding:10px 20px;border-radius:16px;white-space:nowrap;
  background:rgba(24,14,80,.86);border:1px solid var(--line-2)}
.soldbox{padding:30px 10px}
.boxinfo{margin:10px 0 0;text-align:center;font-size:var(--t12);color:var(--fg-dim)}
.boxinfo .serial{font-family:var(--font-num);letter-spacing:.12em}
.qbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:12px 0 0;padding:12px 14px;border-radius:18px;font-size:var(--t15);background:var(--glass);border:1px solid var(--line)}
.qbar.idle{display:none}
.qbar .qt{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0;line-height:1.5}
.qbar .qt b{font-size:var(--t15);font-weight:var(--fw-black)}
.qbar .qt .mute{font-size:var(--t13)}
.qbar .qt a{color:var(--lime)}
.qbar .qprog{flex-basis:100%}
.qbar.busy{border-color:rgba(255,154,203,.5)}
.qbar.wait{border-color:rgba(201,181,255,.6)}
.qbar.mine{border-color:rgba(214,255,85,.7);background:rgba(214,255,85,.1)}
.qbar.mine .big{display:grid;place-items:center;min-width:72px;height:42px;padding:0 12px;border-radius:14px;font-family:var(--font-num);font-size:var(--t24);font-weight:var(--fw-bold);color:var(--ink);background:var(--lime)}
.timer{font-family:var(--font-num);font-weight:var(--fw-bold);color:var(--lime)}
.trow{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:14px}
.tbtn{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 14px;border-radius:var(--r-pill);cursor:pointer;color:#fff;font-size:var(--t13);background:var(--glass-2);border:1px solid var(--line)}
.tbtn svg.ic{color:var(--lime);width:15px;height:15px}
.tbtn i{font-style:normal;min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-pill);display:grid;place-items:center;font:var(--fw-bold) 11px/1 var(--font-num);color:var(--ink);background:var(--lime)}
.tbtn:active{transform:scale(.97)}
.tnote{display:inline-flex;align-items:center;gap:6px;min-height:36px;font-size:var(--t13);color:var(--fg-mute)}
.myhints{margin:12px 0 0;padding:12px 16px;border-radius:var(--r-well);background:var(--well);font-size:var(--t13);border:1px solid var(--line)}
.hintlist{margin:6px 0 0;padding-left:1.2em}
.hintlist li{margin:4px 0} .hintlist b{margin:0 4px;color:var(--pink)}
/* bottom: selection summary · Magic Button CTA with a peeking jelly · details handle */
.drawbar{position:fixed;left:0;right:0;bottom:0;z-index:44;display:flex;flex-direction:column;align-items:center;gap:6px;padding:22px 22px calc(4px + env(safe-area-inset-bottom));
  background:linear-gradient(180deg,rgba(21,14,74,0) 0,var(--v4) 14px,var(--v4) 100%);pointer-events:none}   /* v10.1: solid behind the selection text */
.drawbar>*{pointer-events:auto}
.db-sum{display:flex;flex-wrap:wrap;justify-content:center;gap:2px 10px;font-size:var(--t13);color:var(--fg-mute);text-align:center;line-height:var(--lh-tight)}
.db-sum b{color:var(--lime);font-weight:var(--fw-black)}
.db-sum .short{color:var(--bad);font-weight:var(--fw-black)}
.cta{position:relative;isolation:isolate;width:100%;max-width:420px;margin-top:30px}
/* v10.1: the jelly peeks over the button's RIGHT corner inside a reserved 30px gap — never over the selection text or the CTA label */
.cta .peek{position:absolute;right:18px;top:-28px;z-index:0;width:60px;transform:rotate(10deg);pointer-events:none}
.cta .magic{z-index:1}
.dhandle{display:flex;flex-direction:column;align-items:center;gap:5px;min-height:40px;width:100%;padding:8px 0 2px;border:0;background:none;color:var(--fg-mute);font-size:var(--t13);cursor:pointer}
.dhandle span{display:flex;align-items:center;gap:4px}
.grab{display:block;width:40px;height:4px;border-radius:4px;background:rgba(255,255,255,.3)}

/* ---------- 14 · details sheet ---------- */
.dsheet{position:fixed;left:0;right:0;bottom:0;z-index:62;height:88vh;height:88dvh;display:flex;flex-direction:column;transform:translateY(105%);transition:transform .38s var(--ease-out);visibility:hidden;
  border-radius:28px 28px 0 0;background:var(--sheet);border-top:1px solid var(--line-2);box-shadow:var(--sh-up)}
.dsheet.open{transform:none;visibility:visible}
.ds-head{position:relative;display:flex;justify-content:center;align-items:center;padding:20px 56px 8px;font-size:var(--t16)}
.ds-head .grab{position:absolute;top:8px;left:50%;transform:translateX(-50%)}
.ds-head .x{top:8px;right:12px}
.ds-body{flex:1;overflow:auto;overscroll-behavior:contain;padding:6px 16px calc(32px + env(safe-area-inset-bottom))}
.dscrim{position:fixed;inset:0;z-index:61;background:var(--scrim);opacity:0;pointer-events:none;transition:opacity .3s}
.dscrim.on{opacity:1;pointer-events:auto}
body.sheet-open{overflow:hidden}
.dsec{margin:14px 0 0;padding:16px;border-radius:22px;background:var(--glass);border:1px solid var(--line)}
.dtags{display:flex;flex-wrap:wrap;gap:6px}
.dname{margin:12px 0 4px;font-size:var(--t20);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.dtag{margin:0 0 8px;font-size:var(--t14);color:var(--fg-mute)}
.kvr{margin:8px 0 0}
.kvr>div{display:grid;grid-template-columns:6.5em minmax(0,1fr);gap:12px;padding:11px 0;border-bottom:1px solid var(--line);align-items:baseline}
.kvr>div:last-child{border-bottom:0}
.kvr dt{font-size:var(--t13);color:var(--fg-mute)}
.kvr dd{margin:0;font-size:var(--t15);overflow-wrap:anywhere}
.kvr dd .mute{margin-left:4px;font-size:var(--t12)}
.dh{display:flex;align-items:center;gap:8px;margin:0 0 12px;font-size:var(--t16)}
.dh svg.ic{color:var(--lime)}
.prose{font-size:var(--t15);line-height:1.75;color:rgba(255,255,255,.88)}
.gallery{position:relative;border-radius:22px;overflow:hidden;background:#fff}
.gallery .track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;background:#fff}
.gallery .track::-webkit-scrollbar{display:none}
.gallery .track img{flex:0 0 100%;width:100%;aspect-ratio:1/1;object-fit:contain;scroll-snap-align:center;background:#fff}
.gallery .count,.gallery .cap{position:absolute;bottom:12px;border-radius:var(--r-pill);padding:3px 12px;color:#fff;background:rgba(24,14,80,.78)}
.gallery .count{right:12px;font:var(--fw-bold) 13px/1.4 var(--font-num)}
.gallery .cap{left:12px;max-width:65%;font-size:var(--t12)}
.gthumbs{display:flex;gap:8px;overflow-x:auto;padding:12px 2px 4px;scrollbar-width:none}
.gthumbs img{width:56px;height:56px;border-radius:14px;object-fit:cover;background:#fff;flex:none;opacity:.55;border:2px solid transparent;cursor:pointer;transition:opacity var(--t-fast)}
.gthumbs img.on{opacity:1;border-color:var(--lime)}
.specs{display:grid;grid-template-columns:auto 1fr;border-radius:var(--r-well);overflow:hidden;background:var(--well);font-size:var(--t14)}
.specs dt{padding:10px 14px;color:var(--fg-mute);white-space:nowrap;border-bottom:1px solid var(--line)}
.specs dd{margin:0;padding:10px 14px;white-space:pre-line;border-bottom:1px solid var(--line)}
.specs dt:last-of-type,.specs dd:last-of-type{border-bottom:0}
.lineup{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
@media(min-width:560px){.lineup{grid-template-columns:repeat(4,minmax(0,1fr))}}
.lineup .it{text-align:center;font-size:var(--t13);padding:6px 6px 8px;border-radius:18px;background:var(--glass-2);border:1px solid var(--line)}
.lineup .it .im{position:relative;aspect-ratio:1/1;border-radius:13px;overflow:hidden;background:#fff}
.lineup .it img{width:100%;height:100%;object-fit:contain}
.lineup .it.hid{background:rgba(255,255,255,.1);border-color:rgba(255,233,168,.55)}
.lineup .it.hid .im{background:radial-gradient(circle at 50% 40%,#8E6BFF,#3A2A9A)}
.lineup .it.hid img{filter:brightness(0) saturate(0) opacity(.7)}
.lineup .it.hid .im::after{content:"?";position:absolute;inset:0;display:grid;place-items:center;color:var(--lime);font-weight:var(--fw-black);font-size:46px}
.lineup .it b{display:block;margin-top:6px;line-height:1.3;font-weight:var(--fw-med);overflow-wrap:anywhere}
.lineup .pct{display:inline-flex;align-items:center;height:18px;margin-top:4px;padding:0 7px;border-radius:6px;font:var(--fw-bold) 11px/1 var(--font-num);color:var(--ink);background:var(--yel)}
.odds-note{margin-top:14px}
.rulelinks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.rl{display:flex;align-items:center;justify-content:space-between;gap:6px;min-height:46px;padding:0 12px 0 16px;border-radius:14px;cursor:pointer;color:#fff;font-size:var(--t13);background:var(--glass-2);border:1px solid var(--line)}
.rl svg.ic{color:var(--fg-dim)}
details.fold{border-top:1px solid var(--line);padding:10px 0 0;margin-top:12px}
details.fold summary{cursor:pointer;font-weight:var(--fw-bold);list-style:none;display:flex;justify-content:space-between;min-height:44px;align-items:center}
details.fold summary::-webkit-details-marker{display:none}
details.fold summary::after{content:"+";display:grid;place-items:center;width:28px;height:28px;border-radius:50%;font-size:var(--t18);color:#fff;background:var(--glass-2);border:1px solid var(--line)}
details.fold[open] summary::after{content:"–"}
details.fold div{font-size:var(--t15);color:var(--fg-mute);white-space:pre-line;margin-top:6px}

/* ---------- 15 · modal / sheet · rules · 圖鑑 · confirm ---------- */
.modal{position:fixed;inset:0;z-index:60;background:var(--scrim);display:flex;align-items:flex-end;justify-content:center;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.modal .sheet{position:relative;width:100%;max-width:560px;max-height:92vh;overflow:auto;padding:28px 18px calc(24px + env(safe-area-inset-bottom));border-radius:30px 30px 0 0;
  background:var(--sheet);border-top:1px solid var(--line-2);box-shadow:var(--sh-up);animation:up .3s var(--ease-out)}
.modal .sheet>*{position:relative}
.modal .sheet>h2:not(.sec-h){text-align:center;margin-top:4px}
.modal .sheet>.sec-h{margin:0 48px 16px 0}
@media(min-width:600px){.modal{align-items:center}.modal .sheet{border-radius:var(--r-panel);border:1px solid var(--line-2);animation:popin .3s var(--ease-pop)}}
.sheet-hero{position:relative;text-align:center}
.sheet-hero img,.sheet-hero .jelly{width:110px;margin:0 auto 8px;animation:float 4s ease-in-out infinite}
.sheet-hero img.sad,.sheet-hero .jelly.sad{width:120px}
.sheet-hero h2{font-size:var(--t20)}
.sumbox{background:var(--well);border-radius:var(--r-well);padding:12px 16px;margin:12px 0;border:1px solid var(--line)}
.sumbox .l{display:flex;justify-content:space-between;gap:10px;padding:3px 0;font-size:var(--t15)}
.sumbox .l span{color:var(--fg-mute)}
.sumbox .l b{font-family:var(--font-num);font-weight:var(--fw-bold)}
.sumbox .l.tot{border-top:1px solid var(--line);margin-top:6px;padding-top:8px;font-size:var(--t18)}
.sumbox .l.tot span{color:#fff}
.sumbox .l.tot b{color:var(--yel)}
.sumbox .l.tot b.short,.sumbox .l.short b{color:var(--bad)}
.tabs2{display:flex;padding:3px;margin-bottom:8px;border-radius:var(--r-pill);background:var(--well);border:1px solid var(--line)}
.tabs2 button{flex:1;min-height:42px;border:0;background:none;border-radius:var(--r-pill);font-size:var(--t15);color:var(--fg-mute);cursor:pointer}
.tabs2 button.on{color:#fff;background:var(--glass-3);font-weight:var(--fw-black)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;font-size:var(--t15)}
.kv dt{color:var(--fg-mute)} .kv dd{margin:0}
.rtabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:0 -18px 8px;padding:2px 18px 8px}
.rtabs::-webkit-scrollbar{display:none}
.rtabs button{flex:none;min-height:36px;padding:0 14px;border-radius:var(--r-pill);cursor:pointer;font-size:var(--t13);color:var(--fg-mute);background:var(--glass);border:1px solid var(--line)}
.rtabs button.on{color:var(--ink);background:var(--lime);border-color:var(--lime);font-weight:var(--fw-black)}
.rbody{min-height:46vh;padding:4px 18px 18px;border-radius:var(--r-well);background:var(--glass);border:1px solid var(--line)}
.notice-text{font-size:var(--t15);line-height:1.75;color:rgba(255,255,255,.9)}
.notice-text .nt-h{display:flex;align-items:center;gap:10px;margin:22px 0 8px;font-size:var(--t16);color:#fff}
.notice-text .nt-h::before{content:"";flex:none;width:4px;height:14px;border-radius:2px;background:var(--lime);transform:skewX(-20deg)}
.notice-text .nt-h:first-child{margin-top:14px}
.notice-text ul,.notice-text ol{margin:0;padding-left:1.4em}
.notice-text li{margin:6px 0;padding-left:2px}
.notice-text li::marker{color:var(--lime);font-family:var(--font-num)}
.notice-text p{margin:6px 0}
details.fold div .notice-text{font-size:var(--t14);color:var(--fg-mute)}
details.fold .notice-text .nt-h{font-size:var(--t14)}
.dex-top{margin:0 0 14px;padding:12px 16px;border-radius:var(--r-well);background:var(--glass);border:1px solid var(--line)}
.dex-top .gbar{margin-top:8px}
.lineup.dex .it.no:not(.hid) img{filter:grayscale(1) opacity(.42)}
.lineup.dex .it.got{border-color:rgba(214,255,85,.7);background:rgba(214,255,85,.1)}
.lineup.dex .it.hid.got img{filter:none}
.lineup.dex .it.hid.got .im{background:#fff}
.lineup.dex .it.hid.got .im::after{content:none}
.gotb{position:absolute;right:5px;top:5px;z-index:2;display:inline-flex;align-items:center;gap:2px;height:22px;padding:0 6px;border-radius:var(--r-pill);font:var(--fw-bold) 11px/1 var(--font-num);color:var(--ink);background:var(--lime)}
.gotb svg.ic{width:13px;height:13px;stroke-width:3}
.cf-item{display:flex;align-items:center;gap:14px}
.cf-item img.mini,.cf-item .cssbox{width:64px;height:64px;flex:none;object-fit:contain;background:transparent}
.cf-item>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.cf-name{font-size:var(--t16);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cf-hold{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:0;font-size:var(--t13);color:var(--fg-mute)}
.cf-notes{margin:14px 0 4px;padding:12px 16px 12px 2.2em;border-radius:var(--r-well);background:var(--glass);border:1px solid var(--line);font-size:var(--t13);color:var(--fg-mute)}
.cf-notes li{margin:4px 0}
.agree{display:flex;align-items:center;gap:10px;min-height:44px;margin:12px 0 4px;font-size:var(--t15);cursor:pointer}
.agree input{flex:none}
/* v10.1: 放棄這些號碼 = small secondary action, clearly separated from the 開盒 Magic Button */
.cf-cancel{display:flex;width:auto;min-width:150px;margin:28px auto 4px;--bh:40px;padding:0 18px;font-size:var(--t13)}

/* ---------- 16 · opening (v2 03-opening: UFO beam onto a glass dome on a glowing pedestal) + reveal (tilted collectible card) ---------- */
.reveal{position:fixed;inset:0;z-index:70;display:flex;flex-direction:column;align-items:center;padding:26px 16px calc(28px + env(safe-area-inset-bottom));overflow-x:hidden;overflow-y:auto;background:var(--bg-grad)}
.reveal::before{content:"";position:absolute;left:0;right:0;top:0;height:520px;pointer-events:none;background:var(--checker);-webkit-mask-image:linear-gradient(180deg,#000,transparent);mask-image:linear-gradient(180deg,#000,transparent)}
.reveal>*{position:relative;z-index:1}
.reveal>.rays,.reveal>.bgword{position:absolute;z-index:0}
.reveal>.bgword{top:84px}
.rays{width:170vmax;height:170vmax;left:50%;top:42%;margin:-85vmax 0 0 -85vmax;background:repeating-conic-gradient(rgba(255,255,255,.07) 0 8deg,transparent 8deg 22deg);animation:spin-slow 24s linear infinite;pointer-events:none;opacity:0;transition:opacity .6s}
.reveal.hidden-hit .rays{opacity:1}
.rop-head{text-align:center;margin-top:8px}
.rtitle{font-size:var(--t32);font-weight:var(--fw-black);margin:0;line-height:1.25}
.rstatus{margin:6px 0 0;color:var(--fg-mute);font-size:var(--t14);min-height:22px}
.stage{position:relative;width:300px;height:390px;margin-top:6px;flex:none}
.stage .ufo{position:absolute;z-index:4;left:50%;top:0;width:136px;margin-left:-68px;animation:ufoIn 1.1s var(--ease-pop) both}
.stage .ufo.away{animation:ufoAway .8s ease-in forwards}
.stage .beam{position:absolute;z-index:1;left:50%;top:92px;width:250px;height:230px;margin-left:-125px;clip-path:polygon(40% 0,60% 0,100% 100%,0 100%);opacity:0;transform:scaleY(.2);transform-origin:top;
  background:linear-gradient(180deg,rgba(255,240,180,.55),rgba(255,255,255,.1) 80%,transparent);transition:opacity .4s,transform .4s}
.stage .beam.on{opacity:1;transform:scaleY(1)}
.stage .warm{position:absolute;z-index:1;left:50%;bottom:70px;width:220px;height:200px;margin-left:-110px;border-radius:50%;background:radial-gradient(circle,rgba(255,190,90,.6),rgba(255,140,80,.18) 55%,transparent 70%);
  opacity:.65;animation:warm 1.6s ease-in-out infinite}
.stage .dome{position:absolute;z-index:3;left:50%;bottom:58px;width:186px;height:206px;margin-left:-93px;border-radius:93px 93px 22px 22px;border:1.5px solid rgba(255,255,255,.45);pointer-events:none;
  background:radial-gradient(120% 80% at 30% 15%,rgba(255,255,255,.22),rgba(255,255,255,.04) 55%,rgba(255,255,255,.08))}
.stage .dome::before{content:"";position:absolute;left:26px;top:22px;width:34px;height:70px;border-radius:50%;background:linear-gradient(180deg,rgba(255,255,255,.55),rgba(255,255,255,0));transform:rotate(18deg)}
.stage .rbox{position:absolute;z-index:2;left:50%;bottom:76px;width:132px;height:150px;margin-left:-66px;object-fit:contain;object-position:50% 100%;filter:drop-shadow(0 10px 8px rgba(15,6,60,.45))}
.stage .rbox.cssbox{height:150px;aspect-ratio:auto}
.stage .rbox.shake{animation:shake .45s ease-in-out infinite}
.stage .rbox.lift{animation:lift .7s ease-in forwards}
.stage .ped{position:absolute;z-index:1;left:50%;bottom:0;margin-left:-125px}
.burst{position:absolute;left:50%;top:60%;width:0;height:0;pointer-events:none;z-index:5}
.burst i{position:absolute;left:-10px;top:-10px;width:20px;height:20px;background:url(/img/star.svg) center/contain no-repeat;animation:star 1s ease-out forwards}
.rload{width:min(300px,86vw);text-align:center;margin-top:10px}
.rload .gbar{margin:0 0 8px}
.rload .gbar i{transition:width 1s linear}
.rload .rl-row{display:flex;justify-content:space-between;font-size:var(--t13);color:var(--fg-mute);margin-bottom:6px}
.rslogan{color:var(--fg-mute);font-size:var(--t14);margin:4px 0 0;text-align:center}
.rnote{color:var(--fg-dim);font-size:var(--t12);margin-top:14px}
/* result */
.rpanel{width:100%;max-width:460px;text-align:center;animation:popin .45s var(--ease-pop)}
.rp-cap{display:block;color:var(--fg-dim);font-size:var(--t12);letter-spacing:.2em;margin-top:6px}
.rp-title{font-size:var(--t24);line-height:1.35;margin:6px 0 0;overflow-wrap:anywhere}
.rp-sub{margin:6px 0 0;color:var(--fg-mute);font-size:var(--t13)}
.rcards{position:relative;display:flex;justify-content:center;align-items:flex-start;gap:14px;margin:22px -16px 6px;padding:22px 16px 26px}
.orb{position:absolute;z-index:0;border-radius:50%;pointer-events:none;background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.75),rgba(255,255,255,.12) 40%,rgba(255,255,255,.04) 70%);border:1px solid rgba(255,255,255,.25);animation:float 5s ease-in-out infinite}
.orb.o2{animation-delay:1.2s}.orb.o3{animation-delay:2.4s}
.rp-mascot{position:absolute;z-index:3;right:10px;bottom:-6px;width:84px;animation:bob 3s ease-in-out infinite}
.rp-note{display:flex;align-items:center;justify-content:center;gap:6px;font-size:var(--t13);margin:10px 0 14px;color:var(--fg-mute)}
.rp-note svg.ic{color:var(--lime)}
.rp-btns{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.rp-btns .btn{--bh:52px;border-radius:16px}
.rp-more{display:flex;justify-content:center;margin-top:8px}
/* v10.1 reveal >2 cards: horizontal snap carousel (touch-swipe) + count/dots, or 「全部結果」 grid */
.rtoggle{display:inline-flex;margin:16px auto 0}
.rcards.car{justify-content:flex-start;align-items:flex-start;gap:18px;margin:8px -16px 0;padding:22px calc(50% - 88px) 26px;overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;touch-action:pan-x pan-y;overscroll-behavior-x:contain;scrollbar-width:none}
.rcards.car::-webkit-scrollbar{display:none}
.rcards.car .flip{width:176px;scroll-snap-align:center;scroll-snap-stop:always}
.rcards.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 10px;margin:16px 0 4px;padding:6px 0 10px}
.rcards.grid .flip,.rcards.grid .flip:nth-of-type(n){width:auto;min-width:0;transform:none;margin-top:0}
.rcards.grid .flip figcaption{font-size:var(--t11);line-height:1.3}
.rcards.grid .plate .nm{font-size:var(--t11)}.rcards.grid .plate .meta,.rcards.grid .strip span:first-child{display:none}
.rdots{display:flex;flex-direction:column;align-items:center;gap:8px;margin:0 0 4px}
.rdots[hidden]{display:none}
.rdots .cnt{font-size:var(--t13);color:var(--fg-mute)}.rdots .cnt b{color:#fff}
.rdots .dots{display:flex;flex-wrap:wrap;justify-content:center;gap:2px}
.rdots .dots button{width:22px;height:22px;padding:0;border:0;background:none;cursor:pointer;display:grid;place-items:center}
.rdots .dots button::before{content:"";width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.3);transition:width .2s,background .2s}
.rdots .dots button.on::before{width:18px;border-radius:4px;background:var(--lime)}
.hidden-banner{display:inline-flex;align-items:center;gap:6px}
.hidden-banner svg.ic{color:var(--yel)}
/* flip collectible card (reveal + order page) */
.results{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:18px 14px;width:100%}
.flip{position:relative;z-index:1;flex:none;width:150px;margin:0;perspective:1000px;transition:transform var(--t-med) var(--ease-pop)}
.rcards .flip:nth-of-type(odd){transform:rotate(-5deg)} .rcards .flip:nth-of-type(even){transform:rotate(5deg);margin-top:14px}
.rcards.one .flip{width:min(232px,62vw);transform:rotate(-4deg)}
.flip .inner{position:relative;aspect-ratio:3/4.1;transition:transform .8s var(--ease-pop);transform-style:preserve-3d}
.flip.on .inner{transform:rotateY(180deg)}
.flip .face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:var(--r-card);overflow:hidden;padding:7px;display:flex;flex-direction:column}
.flip .front{cursor:pointer;align-items:center;justify-content:center;background:radial-gradient(90% 60% at 50% 20%,rgba(255,255,255,.28),rgba(255,255,255,.06) 70%),rgba(60,36,170,.75);border:1px solid var(--rim);box-shadow:var(--sh-card)}
.flip .front img,.flip .front .cssbox{width:78%;height:auto;max-height:70%;object-fit:contain;filter:drop-shadow(0 8px 6px rgba(15,6,60,.45))}
.flip .front .n{position:absolute;bottom:10px;left:50%;transform:translateX(-50%);height:22px;padding:0 10px;border-radius:var(--r-pill);display:grid;place-items:center;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.3);
  font:var(--fw-bold) 12px/1 var(--font-num);white-space:nowrap}
.flip .back{transform:rotateY(180deg);background:var(--cc-bg),rgba(56,34,160,.92);border:1px solid var(--rim);box-shadow:var(--sh-card);text-align:left}
.flip .back .strip{display:flex;justify-content:space-between;padding:1px 4px 6px;font:var(--fw-bold) 10px/1 var(--font-num);letter-spacing:.14em;color:rgba(255,255,255,.7)}
.flip .back .pic{flex:1;min-height:0;border-radius:14px;overflow:hidden;background:#fff}
.flip .back .pic img{width:100%;height:100%;object-fit:contain}
.flip .back .plate{padding:8px 4px 2px}
.flip .back .plate .nm{display:block;font-size:var(--t14);font-weight:var(--fw-black);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.flip .back .plate .meta{display:block;font-size:var(--t11);color:var(--fg-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.flip .back .pending{flex:1;display:grid;place-items:center;align-content:center;padding:10px;text-align:center;border-radius:14px;background:rgba(10,6,40,.35);color:#fff;font-size:var(--t13);line-height:1.6}
.flip .back .pending svg.ic{display:block;margin:0 auto 6px;width:26px;height:26px;color:var(--lav)}
.flip .back .strip{align-items:center;padding:0 2px 6px 4px}
.rtag{height:20px;font-size:var(--t11);padding:0 7px;border-radius:6px}
.flip.hidden-glow .back{background:var(--iris);border-color:rgba(255,255,255,.8);box-shadow:var(--glow-iris)}
.flip.hidden-glow .back .strip,.flip.hidden-glow .back .plate .nm{color:var(--ink)}
.flip.hidden-glow .back .plate .meta{color:rgba(27,21,48,.7)}
.flip figcaption{text-align:center;font-size:var(--t13);margin-top:10px;color:var(--fg-mute)}
.confetti{position:fixed;inset:0;pointer-events:none;z-index:80;overflow:hidden}
.confetti i{position:absolute;top:-20px;width:12px;height:12px;clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);animation:fall 2.6s linear forwards}

/* ---------- 17 · cabinet (v2 05) ---------- */
.phead{margin:6px 0 0}
.stats{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);margin:18px 0 0;padding:14px 4px;border-radius:22px;background:var(--glass);border:1px solid var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.stats>.st{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0;color:#fff;text-decoration:none!important}
.stats>.st+.st::before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:1px;background:var(--line)}
.stats .v{display:flex;align-items:center;gap:4px;font:var(--fw-bold) 22px/1.2 var(--font-num)}
.stats .v img{width:18px;height:18px}
.stats .k{font-size:var(--t12);color:var(--fg-mute);white-space:nowrap}
.sets .set{padding:12px 0;border-top:1px solid var(--line)}
.sets .set:first-child{border-top:0;padding-top:2px}
.set .sh2{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.set .sh2 a{min-width:0;color:#fff;font-weight:var(--fw-bold);font-size:var(--t14);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.set .sh2 .pc{flex:none;display:flex;align-items:center;gap:6px;font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t14);color:var(--fg-mute)}
.set .sh2 .pc b{color:var(--lime)}
.set .ms{display:flex;gap:6px;margin-top:10px;overflow-x:auto;scrollbar-width:none}
.set .ms::-webkit-scrollbar{display:none}
.set .m{position:relative;flex:none;width:40px;height:40px;border-radius:11px;overflow:hidden;background:#fff;display:grid;place-items:center}
.set .m img{width:100%;height:100%;object-fit:contain}
.set .m.no{background:rgba(255,255,255,.08);border:1px dashed rgba(255,255,255,.25);color:var(--fg-dim);font:var(--fw-bold) 15px/1 var(--font-num)}
.set .m.hid{padding:2px;background:var(--iris)}
.set .m.hid img{background:#fff;border-radius:9px}
.set .m .x2{position:absolute;right:2px;bottom:2px;font:var(--fw-bold) 10px/1 var(--font-num);color:var(--ink);background:var(--lime);border-radius:5px;padding:2px 3px}
.morebtn{display:flex;align-items:center;justify-content:center;gap:4px;width:100%;margin-top:4px;min-height:40px;border:0;background:none;color:var(--fg-mute);font-size:var(--t13);cursor:pointer}
.acts{display:flex;flex-direction:column}
.arow{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--line)}
.arow:first-child{border-top:0;padding-top:2px}
.arow .ai{flex:none;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--glass-2);border:1px solid var(--line);color:var(--lime)}
.arow .ai svg.ic{width:20px;height:20px}
.arow .at{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;line-height:1.4}
.arow .at b{font-size:var(--t15)}
.arow .at span{font-size:var(--t12);color:var(--fg-mute)}
.ctabs{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;padding:3px;margin:14px 0;border-radius:18px;background:var(--well);border:1px solid var(--line)}
.ctabs::-webkit-scrollbar{display:none}
.ctabs button{flex:1 0 auto;min-height:42px;border:0;background:none;border-radius:15px;padding:6px 12px;font-size:var(--t13);color:var(--fg-mute);cursor:pointer;white-space:nowrap}
.ctabs button i{font-style:normal;font-family:var(--font-num);font-size:var(--t11);margin-left:4px;background:rgba(255,255,255,.12);border-radius:var(--r-pill);padding:1px 7px}
.ctabs button.on{color:#fff;background:var(--glass-3);font-weight:var(--fw-black)}
.ctabs button.on i{background:var(--lime);color:var(--ink)}
.ctabs button small{font-size:var(--t11);opacity:.85}
@media(max-width:420px){.ctabs button{padding:5px 8px}.ctabs button small{display:block;line-height:1.1}.ctabs button i{margin-left:2px;padding:1px 5px}}
.cgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media(min-width:640px){.cgrid{grid-template-columns:repeat(3,minmax(0,1fr))}}
.citem{position:relative;display:flex;flex-direction:column;padding:6px 6px 10px;border-radius:var(--r-card);background:var(--glass);border:1px solid var(--line);transition:transform var(--t-fast) var(--ease-pop),border-color var(--t-fast)}
.citem.can{cursor:pointer}
.citem.can:active{transform:scale(.98)}
.citem.on{border-color:var(--lime);box-shadow:var(--glow-lime)}
.citem .im{aspect-ratio:1/1;background:#fff;position:relative;border-radius:15px;overflow:hidden}
.citem .im img{width:100%;height:100%;object-fit:contain}
.citem .ck{position:absolute;right:6px;top:6px;width:26px;height:26px;border-radius:50%;background:rgba(24,14,80,.55);border:2px solid #fff}
.citem.on .ck{background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231B1530' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/15px no-repeat,var(--lime)}
.citem .bd{padding:8px 4px 0;font-size:var(--t13);line-height:1.4;display:flex;flex-direction:column;gap:4px;flex:1}
.citem .nm{font-weight:var(--fw-bold);font-size:var(--t14)}
.citem .sr{color:var(--fg-mute);font-size:var(--t11);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.citem .st{margin-top:auto;display:flex;justify-content:space-between;align-items:center;gap:4px;font-size:var(--t11)}
.citem .st .rv{color:var(--yel);font-family:var(--font-num);font-weight:var(--fw-bold)}
.tagS{display:inline-flex;align-items:center;height:20px;border-radius:6px;padding:0 7px;font-size:var(--t11);font-weight:var(--fw-black);color:#fff;background:var(--glass-3);white-space:nowrap}
.tagS.ok{color:var(--ink);background:var(--lime)} .tagS.wait{color:var(--ink);background:var(--lav)} .tagS.ship{color:var(--ink);background:var(--cyan)}
.tagS.rec{color:var(--ink);background:var(--bad)} .tagS.warn{color:var(--ink);background:var(--yel)}
.etarow{display:flex;gap:8px;font-size:var(--t11);color:var(--fg-mute);line-height:1.5}
.etarow b{flex:none;color:var(--lav);font-weight:var(--fw-bold)}
.shipinfo{margin:0 0 14px;padding:12px 16px;border-radius:var(--r-well);background:var(--glass);border:1px solid var(--line)}
.shipinfo .kvr>div{padding:8px 0;grid-template-columns:5em minmax(0,1fr)}
.shipinfo .kvr dd{font-size:var(--t13)}
.ship-notice{margin-top:16px}
.ship-notice .notice-text{font-size:var(--t13)} .ship-notice .nt-h{font-size:var(--t14)}
.cbar{position:fixed;left:var(--tab-gap);right:var(--tab-gap);bottom:calc(var(--tb-h) + 8px);z-index:44;border-radius:22px;background:rgba(30,18,90,.9);border:1px solid var(--line-2);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);box-shadow:var(--sh-soft)}
body.no-tabbar .cbar{bottom:calc(8px + env(safe-area-inset-bottom))}
.cbar .in{max-width:var(--wrap);margin:0 auto;padding:9px 10px 9px 16px;display:flex;align-items:center;gap:8px}
.cbar .sum{flex:1;font-size:var(--t13);line-height:1.4;min-width:0}
.cbar .sum b{font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t18);color:var(--lime)}
.cbar .btn{--bh:44px;padding:0 14px}
.mopt{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:6px}
.mopt label{position:relative;display:block;min-height:44px;padding:10px 6px;text-align:center;font-size:var(--t13);font-weight:var(--fw-bold);cursor:pointer;border-radius:var(--r-well);background:var(--glass);border:1px solid var(--line)}
.mopt label small{display:block;font-weight:var(--fw-reg);color:var(--fg-mute);font-size:var(--t11);margin-top:2px}
.mopt input{position:absolute;opacity:0;pointer-events:none}
.mopt label:has(input:checked){border-color:var(--lime);background:rgba(214,255,85,.12)}
.mopt label:has(input:checked) small{color:#fff}
.mopt label:has(input:focus-visible){outline:2px solid var(--lime);outline-offset:2px}
.rlist{list-style:none;margin:8px 0;padding:0;max-height:220px;overflow:auto}
.rlist li{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);font-size:var(--t14)}
.rlist li img{width:44px;height:44px;border-radius:12px;object-fit:contain;background:#fff}
.rlist li .a{margin-left:auto;font-family:var(--font-num);font-weight:var(--fw-bold);color:var(--yel)}
.mini{width:44px;height:44px;border-radius:12px;object-fit:contain;background:#fff}

/* ---------- 18 · account (v2 06) · ledger · orders · pet (coming soon) ---------- */
.prof{margin:8px 0 0;padding:18px 16px 14px}
.prof .who{display:flex;align-items:center;gap:14px}
.prof .ava{flex:none;width:72px;height:72px;border-radius:50%;display:grid;place-items:end center;overflow:hidden;background:radial-gradient(circle at 50% 35%,rgba(255,255,255,.3),rgba(255,255,255,.08));border:1px solid var(--line-2)}
.prof .ava .jelly{width:62px;margin-bottom:3px}
.prof .nmw{min-width:0;flex:1}
.prof .nmw b{display:block;font-size:var(--t20);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prof .nmw span{font-size:var(--t12);color:var(--fg-dim);font-family:var(--font-num)}
.prof .stats{margin-top:16px;background:var(--well);border-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}
.invite{position:relative;display:flex;align-items:center;gap:12px;margin:16px 0 0;padding:12px 14px 12px 18px;border-radius:var(--r-pill);background:var(--violet-body);border:1px solid rgba(255,255,255,.45);overflow:hidden}
.invite b{font-size:var(--t16);white-space:nowrap}
.invite .sub{margin:0;flex:1;min-width:0;font-size:var(--t12);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgba(255,255,255,.75)}
.invite .jtag{flex:none}
.team{display:flex;justify-content:space-between;align-items:flex-end;gap:4px;padding:2px 2px 0;text-decoration:none!important}
.team .jelly{width:46px}
.wallet-card{position:relative;margin-top:var(--s4);border-radius:var(--r-panel);padding:18px 18px 14px;overflow:hidden;background:var(--glass);border:1px solid var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.wallet-card>*{position:relative}
.wallet-card .bal{display:inline-flex;align-items:center;gap:8px;margin-top:8px;height:56px;padding:0 20px 0 10px;border-radius:var(--r-pill);background:var(--well);border:1px solid var(--line);
  font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t32);line-height:1;color:#fff}
.wallet-card .bal img{width:36px;height:36px}
.wallet-card .mascot{position:absolute;right:10px;top:8px;width:78px;animation:bob 5s ease-in-out infinite}
.ledger{list-style:none;margin:0;padding:0}
.ledger li{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--line)}
.ledger li:last-child{border-bottom:0}
.ledger .lic{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;flex:none;color:var(--lav);background:var(--glass-2);border:1px solid var(--line)}
.ledger .lic svg.ic{width:18px;height:18px}
.ledger .lic.topup{color:var(--lime)} .ledger .lic.draw{color:var(--yel)} .ledger .lic.refund,.ledger .lic.buyback,.ledger .lic.ship{color:var(--cyan)} .ledger .lic.adjust{color:var(--pink)}
.ledger .mid{flex:1;min-width:0;font-size:var(--t15)}.ledger .mid .mute{font-size:var(--t12)}
.ledger .lr{display:block;font-size:var(--t12);color:var(--fg-mute)}
.ledger .amt{font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t18);text-align:right}
.ledger .amt small{display:block;font-size:var(--t11);color:var(--fg-dim);font-weight:var(--fw-reg)}
.plus{color:var(--lime)} .minus{color:var(--pink)}
.bigbal{font-family:var(--font-num);font-weight:var(--fw-bold);font-size:var(--t32);color:#fff;display:flex;align-items:center;gap:8px}
.bigbal img{width:32px}
.olite{list-style:none;margin:0;padding:0}
.olite li a{display:flex;flex-direction:column;gap:2px;padding:11px 0;border-bottom:1px solid var(--line);color:#fff;text-decoration:none}
.olite li:last-child a{border-bottom:0}
.olite .ol-n{font-size:var(--t14);font-weight:var(--fw-bold)} .olite .ol-m{font-size:var(--t12)}
.olist{display:flex;flex-direction:column;gap:12px}
.ocard{position:relative;display:flex;flex-direction:column;gap:6px;padding:14px 14px 12px;border-radius:var(--r-card);color:var(--fg);text-decoration:none!important;background:var(--glass);border:1px solid var(--line);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);transition:transform var(--t-fast)}
.ocard:active{transform:scale(.99)}
.o-top{display:flex;justify-content:space-between;align-items:center;gap:8px}
.o-exp{display:inline-flex;align-items:center;gap:6px}
.o-name{font-weight:var(--fw-bold);font-size:var(--t15);line-height:1.4}
.o-bot{display:flex;align-items:center;gap:10px}
.o-bot .mute{flex:1;min-width:0;font-size:var(--t11);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.o-bot .pprice{flex:none}
.o-go{--bh:32px;padding:0 14px}
.petfam{display:grid;grid-template-columns:repeat(3,1fr);gap:22px 8px;margin:26px 0 8px}
.pf{display:flex;flex-direction:column;align-items:center}
.pf .jelly{width:84px;animation:bob 4s ease-in-out infinite}
.pf:nth-child(2n) .jelly{animation-delay:1.1s}.pf:nth-child(3n) .jelly{animation-delay:2s}
.pf .nm{margin-top:10px;font-size:var(--t12);color:var(--fg-mute)}
.petsoon{text-align:center}
.petsoon ul{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:10px;text-align:left}
.petsoon li{display:flex;align-items:center;gap:10px;font-size:var(--t14);color:var(--fg-mute)}
.petsoon li svg.ic{color:var(--lime)}

/* ---------- 19 · admin: same fonts + buttons, calmer surfaces (no huge word, no checker, readability first) ---------- */
.admin{--fs-body:15px}
.admin::before{background:var(--bg-admin)}
.admin::after{display:none}
.admin .wrap{max-width:var(--wrap-wide);padding-bottom:60px}
.admin header.top{background:rgba(30,20,110,.7);border-bottom-color:var(--line);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.admin .card{-webkit-backdrop-filter:none;backdrop-filter:none;background:rgba(255,255,255,.07);border-radius:20px}
.admin .card>.sec-h:first-child{margin:0 0 12px}
.admin .btn{--bh:40px;font-size:var(--t14);padding:0 16px;border-radius:12px}
.admin .btn.small{--bh:34px;font-size:var(--t13);padding:0 12px;border-radius:10px}
.admin input,.admin textarea,.admin select{padding:9px 14px;min-height:42px;font-size:var(--t15);border-radius:12px}
.tabs{display:flex;gap:6px;overflow-x:auto;padding:14px 0 6px}
.tabs button{flex:none;min-height:42px;border:1px solid var(--line);background:var(--glass);border-radius:14px;padding:0 15px;color:var(--fg-mute);cursor:pointer;font-size:var(--t14)}
.tabs button.on{color:var(--ink);background:var(--lime);border-color:var(--lime);font-weight:var(--fw-black)}
.tabs .cnt{display:inline-block;min-width:20px;padding:0 6px;border-radius:10px;color:var(--ink);background:var(--pink);font-size:var(--t11);margin-left:4px;font-weight:var(--fw-bold)}
table.t{width:100%;border-collapse:collapse;font-size:var(--t14)}
table.t th,table.t td{padding:10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
table.t th{background:var(--well);font-size:var(--t13);white-space:nowrap;color:var(--fg-mute);font-weight:var(--fw-med)}
table.t tr.click{cursor:pointer} table.t tr.click:hover td{background:rgba(255,255,255,.06)}
.scroll{overflow-x:auto;border-radius:var(--r-well)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
@media(max-width:640px){.grid2,.grid3{grid-template-columns:1fr}}
.aslots{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px}
.aslot{border:1px solid var(--line);border-radius:14px;padding:8px;font-size:var(--t12);background:var(--well)}
.aslot.drawn{border-color:var(--lav)} .aslot.reserved{border-color:var(--yel)}
.aslot select{padding:4px 30px 4px 10px;min-height:34px;font-size:var(--t12);border-radius:10px}
.warnbox{border-radius:var(--r-well);padding:10px 14px;font-size:var(--t14);margin:8px 0;border:1px solid rgba(255,143,158,.45);background:rgba(255,143,158,.12)}
.gal-admin{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.gal-admin .g{background:var(--well);border-radius:var(--r-well);padding:6px;font-size:var(--t12)}
.gal-admin .g img{width:100%;aspect-ratio:1/1;object-fit:contain;border-radius:12px;background:#fff}
.gal-admin .g input{font-size:var(--t12);padding:5px 10px;min-height:32px;margin-top:4px;border-radius:10px}
.gal-admin .g .row{gap:4px;margin-top:4px}
.gal-admin .g .row button{flex:1}
.memo{white-space:pre-line;font-size:var(--t12);line-height:1.55;border-radius:14px;padding:10px 14px;background:var(--well);border:1px solid rgba(255,228,92,.4);color:var(--fg)}
.shipcard{border:1px solid var(--line);border-radius:var(--r-well);padding:12px 14px;margin:10px 0;background:var(--well)}
.shipcard.requested{border-color:var(--yel)} .shipcard.packed{border-color:var(--lav)} .shipcard.shipped{border-color:var(--lime);opacity:.85} .shipcard.cancelled{opacity:.55}
.shipcard ul{margin:6px 0;padding-left:18px;font-size:var(--t14)}
.ipicon{width:30px;height:30px;border-radius:50%;object-fit:cover;display:inline-block;vertical-align:middle;background:#fff}
.iprow{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px 12px;padding:14px 0;border-top:1px solid var(--line)}
.iprow:first-child{border-top:0}
.iprow .ipv{width:52px;height:52px;flex:none;display:grid;place-items:center;border-radius:50%;background:#fff;border:2px solid var(--line-2);overflow:hidden;color:var(--ink)}
.iprow .ipv .ipicon{width:100%;height:100%}
.iprow .ipv .ipinit{width:100%;height:100%;font-size:var(--t20)}
.iprow label{display:flex;flex-direction:column;gap:3px;font-size:var(--t12);color:var(--fg-mute);flex:1 1 140px;min-width:0}
.iprow label.sm{flex:1 1 180px}.iprow label.xs{flex:0 1 80px}
.iprow label.chk{flex:none;flex-direction:row;align-items:center;gap:6px;font-size:var(--t14);color:var(--fg);padding-bottom:10px}
.iprow label.up{flex:1 1 200px}
.iprow label.memo{flex:1 1 100%;background:none;border:0;padding:0;font-size:var(--t12)}
.iprow label.memo textarea{font-size:var(--t12);line-height:1.5;min-height:0}
.iprow .cnt{flex:none;padding-bottom:10px;font-size:var(--t14)}
.iprow .acts{display:flex;flex-direction:row;gap:6px;margin-left:auto;padding-bottom:2px}
.iprow.new{background:var(--well);border-radius:var(--r-well);padding:14px;border:1px dashed var(--line-2);margin-top:8px}
.alogin{max-width:400px;margin:40px auto;text-align:center}
.alogin .lg{width:200px;margin:0 auto -6px}
.alogin .ufo{width:120px;margin:0 auto;animation:float 4s ease-in-out infinite}

/* ---------- 20 · desktop ---------- */
@media(min-width:900px){
  header.top .in{max-width:var(--wrap-wide)}
  .logo .tag{display:block;white-space:nowrap}
  .hudnav{display:flex;gap:6px;margin-left:18px;white-space:nowrap}
  .hudnav a{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:0 16px;border-radius:var(--r-pill);color:var(--fg-mute);font-size:var(--t14);text-decoration:none;border:1px solid transparent}
  .hudnav a:hover{background:var(--glass);border-color:var(--line);color:#fff}
  .hudnav a.on{color:#fff;background:var(--glass-2);border-color:var(--line)}
  .hudnav a.on svg.ic{color:var(--lime)}
  .bgword{font-size:260px;top:40px}
  .homehero{display:grid;grid-template-columns:minmax(0,1fr) 470px;gap:40px;align-items:center;margin-top:18px}
  .hhead .title-xl{font-size:52px}
  .hmascot{width:120px}
  .hh-acts{display:flex;gap:10px;margin-top:20px}
  .feat{height:300px;margin:0}
  .feat .cc{max-width:220px}
  .ipbar{margin:18px 0 0}.ipchips{padding:6px 0 4px}
  body.drawpage .wrap{max-width:1180px;padding-bottom:60px}
  .draw{display:grid;grid-template-columns:minmax(0,500px) minmax(0,1fr);gap:36px;align-items:start}
  .dcol{position:sticky;top:calc(var(--hud) + 8px)}
  .drawbar{position:static;margin-top:16px;padding:6px 0 0;background:none}
  .dhandle,.dscrim,.ds-head{display:none}
  .dsheet{position:static;height:auto;transform:none;visibility:visible;transition:none;background:none;border:0;box-shadow:none;border-radius:0;z-index:auto;margin-top:4px}
  .ds-body{overflow:visible;padding:0}
  .dsheet .gallery .track img{aspect-ratio:4/3}
  .cbar{left:50%;right:auto;width:min(var(--wrap),calc(100% - 32px));transform:translateX(-50%);bottom:16px}
}

/* ---------- 21 · reduced motion ---------- */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
  .mq-track{animation:none!important;flex-wrap:wrap}
}
.results .flip{width:auto}
.results .flip .inner{aspect-ratio:3/4.1}
.price{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-num);font-weight:var(--fw-bold)}
.price img{width:18px;height:18px}
.price small{font-size:var(--t11);color:var(--fg-dim);font-weight:var(--fw-reg)}
.lh-body{line-height:var(--lh-body)}
.ol-s{margin-top:2px}

/* ---------- 22 · Noreen's IP poses — only home hero (planet), reveal (gift), empty/sold-out/error (think). ONE soft drop-shadow ---------- */
.pose{display:block;max-width:100%;height:auto;filter:drop-shadow(0 10px 12px rgba(8,4,40,.38));user-select:none;-webkit-user-drag:none}
.hmascot .pose{width:104px}
.hmascot .hi{left:-26px;top:6px}
.empty .pose{width:96px;margin:0 auto 10px;animation:float 4s ease-in-out infinite}
.rp-mascot.pose{right:2px;bottom:-14px;width:96px}
.sheet-hero .jelly.cele{animation:bob 1s ease-in-out infinite}
/* v10.1: Noreen's UFO pose flies in (saucer rim lines up with the beam at top:92px) */
.reveal .stage{margin-top:48px}   /* room above the stage so the UFO pose (top:-38px) never covers the status line */
.stage .pufo{display:block;top:-38px;width:132px;margin-left:-66px;line-height:0}
.pufo .ufo-pose{display:block;width:132px;height:auto}
.rcards:not(.one) .rp-mascot.pose{width:78px;right:-4px;bottom:-34px}

/* ---------- 23 · v10 果凍寵物 + 小窩 (approved v3 07* + v4 08*). Scoped to .petpage; ONE shadow layer per declaration ---------- */
.petpage .ptop{display:flex;align-items:center;gap:10px;min-height:62px;padding-top:6px}
.petpage .ptop .t{font-size:var(--t20);font-weight:var(--fw-bold);flex:1}
.petpage .gbtn.rb{width:44px;height:44px;flex:none;color:#fff}
.petpage .gbtn.rb:disabled{opacity:.4}
.petpage .gbtn.pill,.petpage .gbtn.snack{height:38px;padding:0 14px 0 6px;gap:6px;font-size:var(--t13);color:#fff;text-decoration:none}
.petpage .gbtn .num{font-family:var(--font-num);font-size:var(--t15);font-weight:var(--fw-bold)}
.petpage .c-full{color:#FFB24A}.petpage .c-mood{color:var(--yel)}.petpage .c-love{color:#FF8AC0}
.petpage .gbar.c-full i{background:linear-gradient(90deg,#FFD27A,#FF9A3D)}.petpage .gbar.c-mood i{background:linear-gradient(90deg,#FFF3A0,#FFD84A)}.petpage .gbar.c-love i{background:linear-gradient(90deg,#FFC2DD,#FF6FA8)}
.petpage .ls{letter-spacing:.16em}
/* adopt */
.padopt .hd{text-align:center;margin-top:8px}.padopt .title-xl{font-size:28px;margin-top:2px}
.padopt .ag{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:22px}
.padopt .t{position:relative;padding:18px 6px 14px;border-radius:22px;text-align:center;color:#fff;cursor:pointer;font:inherit}
.padopt .t .jelly{display:block;margin:0 auto;transition:transform var(--t-med) var(--ease-pop)}
.padopt .t .mp{display:block;width:44px;height:7px;margin:4px auto 0;border-radius:50%;background:rgba(10,6,40,.35)}
.padopt .t b{display:block;font-size:var(--t15);margin-top:8px}.padopt .t>span:last-child{font-size:var(--t11);color:var(--fg-dim)}
.padopt .t.on{background:rgba(255,255,255,.16);border:2px solid var(--lime);padding:17px 5px 13px}
.padopt .t.on .jelly{transform:translateY(-4px) scale(1.06)}
.petpage .chk{position:absolute;right:8px;top:8px;width:22px;height:22px;border-radius:50%;background:var(--lime);color:var(--ink);display:grid;place-items:center}.petpage .chk .ic{width:13px;height:13px;stroke-width:3}
.padopt .ainfo{margin-top:16px;padding:16px 18px;border-radius:22px}
.padopt .ainfo .r{display:flex;align-items:center;justify-content:space-between}.padopt .ainfo b{font-size:var(--t18)}
.padopt .ainfo p{font-size:var(--t13);color:var(--fg-mute);margin:6px 0 0;line-height:1.6}
.padopt .tr{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.padopt .tr span{height:24px;padding:0 10px;border-radius:var(--r-pill);font-size:var(--t12);display:grid;place-items:center;background:var(--glass-2);border:1px solid var(--line);color:var(--fg-mute)}
.padopt .petfam{margin-top:20px}
/* home: HUD + room + dock */
.phud{padding-top:12px}
.phud .r1{display:flex;align-items:center;justify-content:space-between;gap:8px}
.phud .np{height:44px;padding:0 14px 0 4px;gap:8px;color:#fff;text-decoration:none}
.phud .np .av,.pchat .av{width:36px;height:36px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:var(--glass-2);flex:none}
.phud .np .av .jelly{margin-top:8px}
.phud .np b{font-size:var(--t16)}.phud .np .jtag,.pchat .who .jtag{height:20px;font-size:var(--t11);padding:0 7px;border-radius:6px}
.phud .np .ex{width:54px;height:6px;border-radius:6px;background:rgba(10,6,40,.45);overflow:hidden}.phud .np .ex i{display:block;height:100%;background:linear-gradient(90deg,#9FF6FF,#5FD5FF)}
.phud .r2{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.phud .r2>span{height:28px;padding:0 10px;font-size:var(--t12);gap:5px;color:var(--fg-mute);line-height:1}.phud .r2 .ic{width:14px;height:14px}.phud .r2 .num{color:#fff;font-size:var(--t13)}
.petpage .pstage{margin-top:12px}
.petpage .rinfo{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:12px;min-height:44px;padding:4px 6px 4px 16px;border-radius:16px;font-size:var(--t13);color:var(--fg-mute)}
.petpage .rinfo b{color:#fff;margin-right:6px}.petpage .rinfo .allbtn{height:32px;padding:0 10px 0 14px;color:#fff;text-decoration:none;font-size:var(--t13)}
.pdock{display:grid;grid-template-columns:repeat(4,1fr);margin-top:18px}
.pdock a{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:var(--t12);color:var(--fg-mute);text-decoration:none}
.pdock .gbtn{width:54px;height:54px;color:#fff}.pdock .gbtn .ic{width:22px;height:22px}
.pdock .pri{color:#fff}.pdock .pri .gbtn{background:var(--lime);color:var(--ink);border-color:var(--lime);box-shadow:var(--glow-lime)}
.petpage .shelfrow{display:flex;align-items:center;gap:12px;margin-top:18px;padding:12px 12px 12px 14px;border-radius:20px;color:#fff;text-decoration:none}
.petpage .shelfrow .si{width:40px;height:40px;border-radius:14px;display:grid;place-items:center;background:var(--glass-2);color:var(--lime);flex:none}
.petpage .shelfrow .st{flex:1;min-width:0}.petpage .shelfrow .st b{display:block}.petpage .shelfrow small{font-size:var(--t11);color:var(--fg-dim)}
.petpage .shelfrow .sp{width:96px;display:flex;flex-direction:column;gap:3px;text-align:right}.petpage .shelfrow .sp small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.petpage .shelfrow .sp b{font-size:var(--t12)}
.petpage .shelfrow>svg.ic{color:var(--fg-dim);flex:none}
.pstats{margin-top:16px;padding:14px 18px;border-radius:22px;display:flex;flex-direction:column;gap:10px}
.pstat{display:grid;grid-template-columns:22px 34px 1fr 30px;align-items:center;gap:8px;font-size:var(--t13)}
.pstat .pi .ic{width:18px;height:18px}.pstat .num{text-align:right;font-family:var(--font-num);font-weight:var(--fw-bold)}
.ptasks{margin-top:16px;padding:18px 16px 12px;border-radius:24px}
.ptasks .tk{display:flex;align-items:center;gap:12px;padding:11px 0;border-top:1px solid rgba(255,255,255,.08)}
.ptasks .sh+.tk{border-top:0}
.ptasks .fd{width:46px;height:46px;border-radius:50%;flex:none;display:grid;place-items:center;background:var(--glass-2);border:1px solid var(--line)}
.ptasks .tx{flex:1;min-width:0}.ptasks .tx b{display:block;font-size:var(--t15)}.ptasks .tx span{font-size:var(--t12);color:var(--fg-dim)}.ptasks .tx em{font-style:normal;color:var(--lime)}
.ptasks .lbtn{height:34px;padding:0 14px;text-decoration:none;flex:none}
.petpage .invcode{display:flex;flex-direction:column;align-items:center;gap:4px;margin:14px 0;padding:14px;border-radius:18px;background:var(--well);border:1px dashed var(--rim)}
.petpage .invcode b{font-size:28px;letter-spacing:.14em;color:var(--lime)}
/* room scene 358 × 440, scaled by JS to the container */
.rmfit{position:relative;width:100%;max-width:448px;margin-left:auto;margin-right:auto;overflow:hidden;border-radius:32px}
.rmfit .rm{transform-origin:0 0}
.rm{position:relative;width:358px;height:440px;border-radius:32px;overflow:hidden;border:1px solid rgba(255,255,255,.2);isolation:isolate;touch-action:pan-y}
/* v10.1: only furniture in the editor captures touch (drag); everywhere else the page scrolls normally on iOS */
.rm.edit .it{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.rm>i,.rm>div,.rm>button{position:absolute}
.rm .wall{inset:0;background:radial-gradient(70% 50% at 50% 18%,rgba(255,255,255,.14),transparent 70%),repeating-linear-gradient(90deg,rgba(255,255,255,.035) 0 1px,transparent 1px 52px),linear-gradient(180deg,var(--w1),var(--w2))}
.rm .sideL{inset:0;background:var(--sd);clip-path:polygon(0 0,7% 4%,7% 68%,0 100%)}
.rm .sideR{inset:0;background:var(--sd);clip-path:polygon(100% 0,93% 4%,93% 68%,100% 100%)}
.rm .floor{inset:0;clip-path:polygon(7% 68%,93% 68%,100% 100%,0 100%);background:repeating-linear-gradient(90deg,rgba(255,255,255,.08) 0 1px,transparent 1px 44px),linear-gradient(180deg,var(--f1),var(--f2));opacity:.92}
.rm .base{left:7%;right:7%;top:68%;height:2px;background:rgba(255,255,255,.55)}
.rm .it{display:flex;align-items:flex-end;justify-content:center}
.rm .it .fi{width:100%;display:flex;justify-content:center;align-items:flex-end}
.rm .it .fi.flip{transform:scaleX(-1)}
.rm .it svg{display:block;overflow:visible}
.rm .k-pendant,.rm .k-jellyfish,.rm .k-stars{align-items:flex-start}.rm .k-pendant .fi,.rm .k-jellyfish .fi,.rm .k-stars .fi{align-items:flex-start}
.rm .lampglow{position:absolute;left:50%;top:60%;width:130px;height:150px;margin-left:-65px;border-radius:50%;background:radial-gradient(ellipse at 50% 30%,rgba(255,226,140,.45),transparent 70%);pointer-events:none;z-index:-1}
.rm .k-floorlamp .lampglow{top:-20%}
.rm .win{left:30px;top:40px;width:116px;height:116px;border-radius:50%;overflow:hidden;border:6px solid rgba(255,255,255,.26);background:radial-gradient(circle at 30% 30%,#2B1A88,#0F0838);z-index:1}
.rm .win i{position:absolute;display:block}
.rm .win .st{width:3px;height:3px;border-radius:50%;background:#fff}
.rm .win .pl{left:32px;top:30px;width:52px;height:52px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#FFE6A6,#FF9A5C 60%,#C2508A)}
.rm .win .pl.candy{background:radial-gradient(circle at 35% 30%,#FFF0F8,#FF9ACB 60%,#C2508A)}
.rm .win .ring{left:14px;top:48px;width:86px;height:18px;border-radius:50%;border:3px solid rgba(255,230,180,.75);transform:rotate(-16deg);z-index:1}
.rm .win.moon{background:radial-gradient(circle at 30% 30%,#1C2A78,#0A0F38)}
.rm .win .moon{left:30px;top:26px;width:54px;height:54px;border-radius:50%;box-shadow:12px -6px 0 0 #FFE7A0}
.rm .win.candy{background:radial-gradient(circle at 30% 30%,#7B3FB8,#3A1670)}
.rm .win .pl2{left:70px;top:66px;width:20px;height:20px;border-radius:50%;background:#9CF5E0}
.rm .win.sea{background:radial-gradient(circle at 40% 30%,#4FC4E8,#13508A)}
.rm .win .bub{border-radius:50%;border:1.5px solid rgba(255,255,255,.7);background:rgba(255,255,255,.15)}
.rm .poster{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;height:106px;border-radius:14px;background:linear-gradient(160deg,rgba(255,255,255,.28),rgba(255,255,255,.08));border:1.5px solid rgba(255,255,255,.5);transform:rotate(4deg)}
.rm .poster img{width:66px;height:auto}.rm .poster span{font:700 10px var(--font-num);letter-spacing:.2em;color:rgba(255,255,255,.75)}
.rm .rshelf{width:100%}
.rm .rshelf .imgs{display:flex;align-items:flex-end;justify-content:center;gap:4px;padding:0 6px;min-height:52px}
.rm .rshelf .fig{position:relative;display:block}
.rm .rshelf img{height:52px;width:auto;display:block}
.rm .rshelf .fig.hid img{filter:drop-shadow(0 0 8px rgba(220,190,255,.95))}
.rm .rshelf .fig.hid::after{content:"";position:absolute;right:-2px;top:-4px;width:9px;height:9px;background:#fff;clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%)}
.rm .rshelf .fig.empty{font-size:11px;color:rgba(255,255,255,.7);padding:6px 10px;border:1.5px dashed rgba(255,255,255,.4);border-radius:10px;margin-bottom:4px}
.rm .rshelf .pk{display:block;height:9px;border-radius:5px;margin-top:1px;background:linear-gradient(180deg,rgba(255,255,255,.6),rgba(190,170,255,.25));border:1px solid rgba(255,255,255,.5);box-shadow:var(--glow-shelf)}
.rm .rpet{top:262px;z-index:19;padding:0;border:0;background:none;cursor:pointer;animation:bob 3.2s ease-in-out infinite}
.rm .rpet.pop{animation:popin .5s var(--ease-pop)}
.rm .rbubble{left:40px;top:206px;z-index:20;max-width:150px;padding:9px 14px;border-radius:18px;background:#fff;color:var(--ink);font-size:13px;font-weight:var(--fw-bold);line-height:1.4}
.rm .rbubble::after{content:"";position:absolute;right:18px;bottom:-8px;width:14px;height:10px;background:#fff;clip-path:polygon(0 0,100% 0,80% 100%)}
.rm.edit .gridF{inset:0;clip-path:polygon(7% 68%,93% 68%,100% 100%,0 100%);background:radial-gradient(circle,rgba(255,255,255,.55) 1.4px,transparent 1.8px) 0 0/22px 22px;z-index:1;pointer-events:none}
.rm.edit .gridW{left:0;right:0;top:0;height:68%;background:radial-gradient(circle,rgba(255,255,255,.22) 1.2px,transparent 1.6px) 0 0/22px 22px;z-index:1;pointer-events:none}
.rm.edit .it{cursor:grab}.rm.edit .it:not(.sel),.rm.edit .win{opacity:.86}.rm.edit .rpet{pointer-events:none;opacity:.7;animation:none}
.rm .it.sel{outline:2px dashed var(--lime);outline-offset:4px;border-radius:12px;z-index:30 !important}
.rm .hdl{z-index:31;width:12px;height:12px;border-radius:4px;background:var(--lime);border:2px solid #fff;pointer-events:none}
.rm .tb{z-index:32;display:flex;gap:6px;padding:5px;border-radius:var(--r-pill);background:rgba(20,12,70,.86);border:1px solid rgba(255,255,255,.2)}
.rm .tb span,.rm .tb button{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:rgba(255,255,255,.12);color:#fff;border:0;padding:0;cursor:pointer}
.rm .tb span.on{background:var(--lime);color:var(--ink)}.rm .tb .del{color:#FF8AA8}.rm .tb .ic{width:17px;height:17px}
/* feed */
.pfeed .scene{position:relative;height:340px}
.pfeed .glow{position:absolute;left:50%;top:30px;width:320px;height:320px;margin-left:-160px;border-radius:50%;background:radial-gradient(circle,rgba(126,235,244,.35),transparent 65%)}
.pfeed .pet{position:absolute;left:50%;top:100px;transform:translateX(-50%);z-index:2}
.pfeed .pet .jelly.yum{animation:bob .5s ease-in-out 2}
.pfeed .scene .ped{position:absolute;left:50%;bottom:0;margin-left:-125px;transform:scale(.9)}
.pfeed .fly{position:absolute;left:40px;top:150px;z-index:3;animation:feedfly 1s var(--ease-out) forwards}
@keyframes feedfly{0%{transform:translate(0,40px) rotate(-20deg) scale(.8);opacity:0}30%{opacity:1}100%{transform:translate(120px,0) rotate(14deg) scale(.4);opacity:0}}
.pfeed .float{position:absolute;z-index:4;font-family:var(--font-num);font-weight:var(--fw-bold);animation:floatup 1.3s var(--ease-out) forwards}
.pfeed .f1{right:30px;top:78px;color:var(--lime);font-size:26px}.pfeed .f2{right:52px;top:120px;color:#FFB24A;font-size:16px}.pfeed .f3{left:30px;top:70px;color:#FF8AC0;font-size:16px}
@keyframes floatup{0%{transform:translateY(16px);opacity:0}25%{opacity:1}100%{transform:translateY(-26px);opacity:0}}
.pfeed .pstats{margin-top:6px}
.pfeed .tray{margin-top:16px;padding:16px 14px;border-radius:26px}
.pfeed .tray .sh{margin-bottom:6px;padding:0 4px}.pfeed .hint{font-size:var(--t12);color:var(--fg-dim);padding:0 4px;margin:0 0 12px}
.pfeed .items{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.pfeed .items .it{position:relative;padding:12px 4px 10px;border-radius:18px;text-align:center;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);color:#fff;font:inherit;cursor:pointer}
.pfeed .items .it .food{margin:0 auto;display:block}
.pfeed .items .it b{display:block;font-size:var(--t12);margin-top:6px}.pfeed .items .it small{display:block;font-size:10px;color:var(--fg-dim);margin-top:1px}
.pfeed .items .it .ct{position:absolute;right:6px;top:6px;font:600 11px var(--font-num);color:var(--fg-mute)}
.pfeed .items .it.on{background:rgba(214,255,85,.12);border:2px solid var(--lime);padding:11px 3px 9px}
.pfeed .items .it.none{opacity:.45}
.pfeed .left{text-align:center;margin-top:16px}
/* chat */
.pchat{display:flex;flex-direction:column;min-height:calc(100vh - var(--hud) - var(--tb-h) - 40px)}
.pchat .ptop{border-bottom:1px solid rgba(255,255,255,.08);padding-bottom:10px}
.pchat .av{width:46px;height:46px;border:2px solid var(--lime)}.pchat .av .jelly{margin-top:8px}
.pchat .who{flex:1}.pchat .who b{display:flex;align-items:center;gap:6px;font-size:var(--t16)}
.pchat .who>span{font-size:var(--t12);color:var(--fg-dim);display:flex;align-items:center;gap:5px}.pchat .who>span i{width:6px;height:6px;border-radius:50%;background:var(--lime)}
.pchat .list{flex:1;padding:18px 0 150px;display:flex;flex-direction:column;gap:12px}
.pchat .day{text-align:center;font-size:var(--t11);color:var(--fg-dim)}
.pchat .m{max-width:78%;padding:11px 15px;border-radius:20px;font-size:var(--t14);line-height:1.55}
.pchat .pet{display:flex;gap:8px;align-items:flex-end}.pchat .pet .cav{width:34px;flex:none}
.pchat .pet .m{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.14);border-bottom-left-radius:6px}
.pchat .m.me{align-self:flex-end;background:var(--lime);color:var(--ink);font-weight:var(--fw-med);border-bottom-right-radius:6px}
.pchat .rec{margin-left:42px;max-width:270px;padding:8px;border-radius:20px;display:flex;gap:10px;align-items:center;color:#fff;text-decoration:none}
.pchat .rec img{width:74px;height:74px;border-radius:14px;object-fit:cover;flex:none}
.pchat .rec .nm{font-size:var(--t13);font-weight:var(--fw-bold);line-height:1.4}
.pchat .rec .mt{display:flex;align-items:center;gap:4px;font-size:var(--t12);color:var(--fg-mute);margin-top:4px}.pchat .rec .mt img{width:15px;height:15px}
.pchat .rec .lbtn{height:28px;padding:0 12px;font-size:var(--t12);border-radius:9px;margin-top:6px}
.pchat .heart{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;border-radius:var(--r-pill);background:rgba(214,255,85,.16);color:var(--lime);font-size:var(--t11);margin-top:6px}.pchat .heart .ic{width:12px;height:12px}
.pchat .typing .dots{display:inline-flex;gap:4px;padding:12px 14px;border-radius:18px;background:rgba(255,255,255,.12)}
.pchat .typing .dots i{width:6px;height:6px;border-radius:50%;background:#fff;animation:twinkle 1s infinite}.pchat .typing .dots i:nth-child(2){animation-delay:.2s}.pchat .typing .dots i:nth-child(3){animation-delay:.4s}
.pchat .dock{position:fixed;left:0;right:0;bottom:var(--tb-h);z-index:40;padding:12px 0 12px;background:linear-gradient(180deg,rgba(21,14,74,0),rgba(21,14,74,.94) 30%)}
.pchat .dock>*{max-width:var(--wrap);margin-left:auto;margin-right:auto}
.pchat .chips{flex-wrap:nowrap;overflow-x:auto;gap:8px;padding:0 16px;scrollbar-width:none}
.pchat .chip{flex:none;height:36px;padding:0 15px;color:#fff;font:inherit;font-size:var(--t13);cursor:pointer}
.pchat .inp{display:flex;align-items:center;gap:10px;margin:10px 16px 0;height:52px;padding:0 6px 0 18px;border-radius:var(--r-pill)}
.pchat .inp input{flex:1;border:0;background:none;color:#fff;font:inherit;font-size:var(--t14);min-height:0;height:40px;padding:0;outline:none}
.pchat .inp .send{width:40px;height:40px;border-radius:50%;background:var(--lime);color:var(--ink);display:grid;place-items:center;border:0;cursor:pointer;flex:none}.pchat .inp .send .ic{width:18px;height:18px}
/* wardrobe */
.pwear .pv{position:relative;height:250px}
.pwear .cone{position:absolute;left:50%;top:0;margin-left:-130px;width:260px;height:240px;clip-path:polygon(40% 0,60% 0,100% 100%,0 100%);background:linear-gradient(180deg,rgba(255,255,255,.3),transparent)}
.pwear .pet{position:absolute;left:50%;top:40px;transform:translateX(-50%);z-index:2}
.pwear .ped{position:absolute;left:50%;bottom:0;margin-left:-125px;transform:scale(.78)}
.pwear .nm{position:absolute;right:4px;top:16px;text-align:right;z-index:3}.pwear .nm b{display:block;font-size:var(--t18)}.pwear .nm span{font-size:var(--t12);color:var(--fg-dim)}
.pwear .wear{position:absolute;left:4px;top:16px;display:flex;flex-direction:column;gap:6px;z-index:3}
.pwear .wear span{height:24px;padding:0 10px;border-radius:var(--r-pill);font-size:var(--t11);display:flex;align-items:center;gap:6px;background:var(--glass-2);border:1px solid var(--line)}.pwear .wear i{width:6px;height:6px;border-radius:50%;background:var(--lime)}
.pwear .seg{margin-top:14px;display:flex;width:100%}.pwear .seg button,.pwear .seg .segl{flex:1;text-align:center}
.pwear .seg .segl{display:flex;align-items:center;justify-content:center;min-height:36px;color:var(--fg-mute);font-size:var(--t13);text-decoration:none;border-radius:var(--r-pill)}
.pwear .wg{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}
.pwear .wg .it{position:relative;padding:14px 6px 12px;border-radius:20px;text-align:center;color:#fff;font:inherit;cursor:pointer}
.pwear .wg .ico{height:62px;display:grid;place-items:center}
.pwear .wg b{display:block;font-size:var(--t13);margin-top:6px}.pwear .wg small{font-size:var(--t11);color:var(--fg-dim)}
.pwear .wg .it.on{border:2px solid var(--lime);background:rgba(214,255,85,.10);padding:13px 5px 11px}.pwear .wg .it.on small{color:var(--lime)}
.petpage .lock .ico{opacity:.3;filter:grayscale(.7)}.petpage .lock b{color:var(--fg-dim)}
.petpage .lk{position:absolute;right:8px;top:8px;color:var(--fg-dim)}.petpage .lk .ic{width:16px;height:16px}
.pwear .rw{margin-top:20px;padding:16px;border-radius:24px}
.pwear .rws{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pwear .rws .r{padding:10px 8px;border-radius:16px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1);text-align:center}
.pwear .rws .jtag{height:18px;font-size:10px;padding:0 6px;border-radius:5px}
.pwear .rws b{display:block;font-size:var(--t12);margin-top:6px;line-height:1.4}.pwear .rws small{display:block;font-size:10px;color:var(--fg-dim);margin:2px 0 6px}
/* room editor */
.pedit .drawer{margin-top:14px;padding:12px 0 14px;border-radius:28px}
.pedit .cats{display:flex;gap:8px;padding:0 14px;overflow-x:auto;scrollbar-width:none}
.pedit .cats button,.pedit .cats a{flex:none;height:34px;padding:0 15px;display:flex;align-items:center;border-radius:var(--r-pill);font:inherit;font-weight:var(--fw-med);font-size:var(--t13);color:var(--fg-mute);background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.10);cursor:pointer;text-decoration:none}
.pedit .cats button.on{background:#fff;color:var(--ink);font-weight:var(--fw-bold)}
.pedit .meta{display:flex;justify-content:space-between;padding:14px 18px 10px;font-size:var(--t12);color:var(--fg-dim)}.pedit .meta b{color:#fff}
.pedit .fg{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:0 14px}
.pedit .c{position:relative;height:116px;border-radius:18px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);display:flex;flex-direction:column;align-items:center;padding:8px 4px 0;color:#fff;font:inherit;cursor:pointer}
.pedit .c .ico{height:56px;display:flex;align-items:flex-end;justify-content:center}.pedit .c .ico .poster{height:52px;transform:none}.pedit .c .ico .poster img{width:34px}
.pedit .c b{font-size:var(--t12);margin-top:6px;white-space:nowrap}.pedit .c small{font-size:10px;color:var(--fg-dim);margin-top:2px;white-space:nowrap}
.pedit .c.placed{border:2px solid var(--lime);background:rgba(214,255,85,.08)}.pedit .c.placed small{color:var(--lime)}
.pedit .c .lk{right:7px;top:7px}.pedit .c .tk{position:absolute;left:6px;top:6px;height:16px;font-size:9px;padding:0 5px;border-radius:5px}
.pedit .c.task small{color:#7FF0F5}
.pedit .drawer>.cap{padding:12px 16px 0;margin:0}
/* themes */
.pthemes .hd .title-xl{font-size:28px}
.pthemes .tg{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:22px}
.pthemes .tcard{position:relative;padding:8px 8px 14px;border-radius:24px;text-align:left;color:#fff;font:inherit;cursor:pointer}
.pthemes .tcard .pv{display:block;border-radius:18px}
.pthemes .tcard b{display:block;font-size:var(--t16);margin:12px 6px 0}
.pthemes .tcard .cond{display:flex;align-items:center;gap:6px;margin:4px 6px 8px;font-size:var(--t12);color:var(--fg-dim)}.pthemes .tcard .cond .ic{width:14px;height:14px}
.pthemes .tcard.on{border:2px solid var(--lime);padding:7px 7px 13px}.pthemes .tcard.on .cond{color:var(--lime)}
.pthemes .tcard .tagc{position:absolute;right:16px;top:16px;z-index:5}
.pthemes .tcard.lock .rm{filter:saturate(.55) brightness(.75)}
.pthemes .lockpill{position:absolute;left:50%;top:84px;transform:translateX(-50%);z-index:5;height:30px;padding:0 12px;display:flex;align-items:center;gap:6px;border-radius:var(--r-pill);font-size:var(--t12);background:rgba(20,12,70,.78);border:1px solid rgba(255,255,255,.25);white-space:nowrap}.pthemes .lockpill .ic{width:14px;height:14px}
.pthemes .tcard .gbar{margin:0 6px}
/* display shelf */
.pshelf .cab{position:relative;margin-top:8px;padding:16px 12px 6px;border-radius:28px;overflow:hidden;background:radial-gradient(90% 50% at 50% 0%,rgba(255,255,255,.2),rgba(255,255,255,.04) 70%),rgba(20,12,70,.3);border:1px solid rgba(255,255,255,.2)}
.pshelf .lbl{display:flex;justify-content:space-between;align-items:center;font-size:var(--t12);color:var(--fg-mute);padding:0 6px 4px}.pshelf .lbl b{color:#fff;font-size:var(--t14)}
.pshelf .row{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;align-items:end;position:relative;z-index:1;flex-wrap:nowrap}
.pshelf .s{position:relative;display:flex;flex-direction:column;align-items:center;min-width:0;padding:14px 0 0;border:0;background:none;color:#fff;font:inherit;cursor:pointer}
.pshelf .s img{height:84px;width:auto;max-width:100%;object-fit:contain;display:block;position:relative;z-index:2;filter:drop-shadow(0 6px 6px rgba(15,6,60,.45))}
.pshelf .s .bs{display:block;width:62px;height:12px;border-radius:50%;margin-top:-6px;background:rgba(255,255,255,.28);border:1px solid rgba(255,255,255,.45)}
.pshelf .s>span:last-child{font-size:var(--t11);color:var(--fg-mute);margin-top:6px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pshelf .s.hid img{filter:drop-shadow(0 0 12px rgba(220,190,255,.95))}
.pshelf .s.hid .bs{background:linear-gradient(90deg,#FFC0D2,#FFE9A8,#BFF7CF,#AEE7FF,#D9BCFF);border-color:#fff}
.pshelf .s.hid .cone{position:absolute;left:50%;top:-10px;transform:translateX(-50%);width:84px;height:120px;clip-path:polygon(38% 0,62% 0,100% 100%,0 100%);background:linear-gradient(180deg,rgba(255,255,255,.35),transparent);z-index:1}
.pshelf .s.hid .jtag{position:absolute;top:4px;right:2px;z-index:3;height:18px;font-size:10px;padding:0 6px}
.pshelf .s .spark{z-index:3}
.pshelf .s.empty .q{height:84px;width:60px;display:grid;place-items:center;border-radius:16px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);color:var(--fg-dim);font:600 22px var(--font-num)}
.pshelf .s.add .q{color:var(--lime);border-color:rgba(214,255,85,.45);background:rgba(214,255,85,.08)}.pshelf .s.add .q .ic{width:22px;height:22px}
.pshelf .s.add>span:last-child{color:var(--lime)}
.pshelf .plank{display:block;height:11px;margin:0 -4px 16px;border-radius:6px;background:linear-gradient(180deg,rgba(255,255,255,.55),rgba(190,170,255,.22));border:1px solid rgba(255,255,255,.4);box-shadow:var(--glow-shelf)}
.pshelf .pset{position:relative;margin-top:14px;padding:14px 16px;border-radius:22px}
.pshelf .pset .r{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.pshelf .pset .cnt{color:var(--fg-mute)}
.pshelf .pset .rw{font-size:var(--t12);color:var(--fg-dim);margin-top:8px;padding-right:50px}.pshelf .pset em{font-style:normal;color:var(--lime)}
.pshelf .pset .peek{position:absolute;right:-6px;bottom:-12px;z-index:3;transform:rotate(-12deg)}
.pshelf .drawer{margin-top:16px;padding:14px 14px 16px;border-radius:24px}
.pshelf .inv{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}
.pshelf .iv{width:78px;flex:none;height:92px;border-radius:16px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;position:relative;color:#fff;font:inherit;cursor:pointer;padding:4px}
.pshelf .iv img{height:52px;width:auto;max-width:100%;object-fit:contain}.pshelf .iv small{font-size:10px;color:var(--fg-dim);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pshelf .iv.hid{border-color:rgba(220,190,255,.8)}.pshelf .iv.hid img{filter:drop-shadow(0 0 8px rgba(220,190,255,.95))}
.pshelf .iv .ct{position:absolute;right:6px;top:5px;font:600 10px var(--font-num);color:var(--fg-mute)}
.pshelf .hint{font-size:var(--t12);color:var(--fg-dim)}
@media(min-width:900px){.petpage .rmfit{max-width:448px}.pchat .dock{bottom:0}}
.pthemes .tg>*{min-width:0}
.rm .rpet.still{cursor:default;animation:none}
.pshelf .cab .lbl b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.rm>span.rpet{position:absolute}
.pchat .inp input#ctext{border:0;background:transparent;box-shadow:none;border-radius:0;padding:0;height:40px}
.pchat .inp:focus-within{border-color:var(--lime)}
.pfeed .scene{height:270px}
.pfeed .glow{top:0;width:280px;height:280px;margin-left:-140px}
.pfeed .pet{top:56px}
.pfeed .fly{top:110px}.pfeed .f1{top:40px}.pfeed .f2{top:80px}.pfeed .f3{top:36px}

/* ---------- v10.1 admin 系列與中盒: list page + full-page edit / create ---------- */
.slhead .row.between{gap:10px;flex-wrap:wrap}
.sfilters{display:grid;grid-template-columns:minmax(0,2fr) repeat(3,minmax(0,1fr));gap:8px;margin-top:12px}
.sfilters input,.sfilters select{min-height:42px;margin:0}
@media(max-width:640px){.sfilters{grid-template-columns:repeat(3,minmax(0,1fr))}.sfilters input{grid-column:1/-1}}
.slist{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.srow{display:grid;grid-template-columns:64px minmax(0,1fr) auto;grid-template-areas:"img main price" "img acts acts";align-items:center;gap:6px 12px;padding:12px;margin:0;cursor:pointer;transition:border-color var(--t-fast)}
.srow:hover,.srow:focus-visible{border-color:rgba(255,255,255,.4);outline:none}
.srow .sthumb{grid-area:img;align-self:start;width:64px;height:64px;border-radius:12px;object-fit:cover;background:#fff}
.srow .sthumb.none{display:grid;place-items:center;background:var(--glass-2);color:var(--fg-dim)}
.srow .smain{grid-area:main;min-width:0}
.srow .nm{display:block;font-size:var(--t15);line-height:1.35;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.srow .smeta{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.srow .ssub{margin-top:4px;font-size:var(--t12);color:var(--fg-mute)}
.srow .sprice{grid-area:price;align-self:start;text-align:right;white-space:nowrap}.srow .sprice b{display:block;font-size:var(--t18);color:var(--price)}.srow .sprice small{font-size:var(--t11);color:var(--fg-mute)}
.srow .sacts{grid-area:acts;display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
@media(min-width:900px){.srow{grid-template-columns:72px minmax(0,1fr) 110px auto;grid-template-areas:"img main price acts"}.srow .sthumb{width:72px;height:72px}.srow .sprice{align-self:center}}
.sphead{position:sticky;top:calc(var(--hud, 64px) + 6px);z-index:20;display:flex;align-items:center;gap:12px;padding:10px 12px;margin:0 0 10px;border-radius:18px;background:rgba(21,14,74,.94);border:1px solid var(--line)}
.sphead .spt{flex:1;min-width:0}.sphead .spt h2{font-size:var(--t16);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sphead .cap{display:block;font-size:var(--t11);color:var(--fg-mute);letter-spacing:.08em}
.sjump{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:0 0 12px}
.sjump a{flex:none;display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border-radius:var(--r-pill);background:var(--glass-2);border:1px solid var(--line);color:#fff;font-size:var(--t13);text-decoration:none}
.nowrap{white-space:nowrap}
#sstyles td input[name=name]{min-width:150px}#sstyles td input[type=file]{min-width:170px}

/* ---------- v11: online top-up, LINE Login, legal ---------- */
.orline{display:flex;align-items:center;gap:10px;margin:14px 0 4px;color:var(--mute,#8a84a8);font-size:13px}
.orline::before,.orline::after{content:"";flex:1;height:1px;background:currentColor;opacity:.35}
footer.legal{display:flex;flex-wrap:wrap;gap:8px 16px;justify-content:center;padding:18px 16px 110px;font-size:12px;opacity:.85}
footer.legal a{color:inherit;text-decoration:underline}
footer.legal span{flex-basis:100%;text-align:center;opacity:.8}
.agenote{position:relative;z-index:1;margin:8px auto 0;max-width:960px;padding:0 12px}
.agenote .in{display:flex;gap:10px;align-items:center;background:#FFF6CC;color:#4a3b00;border-radius:14px;padding:10px 12px;font-size:13px;line-height:1.5}
.agenote .in svg{flex:none;width:20px;height:20px}
.agenote a{color:inherit;text-decoration:underline;margin-left:4px}
.agenote .btn{flex:none}
.pkgs{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.pkg{border:2px solid rgba(255,255,255,.14);border-radius:16px;padding:14px 10px;text-align:center;background:rgba(255,255,255,.07);cursor:pointer;font:inherit;color:inherit}
.pkg b{display:block;font-size:22px}.pkg small{display:block;opacity:.75;margin-top:2px}.pkg .lb{display:inline-block;margin-top:6px;font-size:11px;background:#D6FF55;color:#222;border-radius:99px;padding:1px 8px}
.pkg.on{border-color:#D6FF55;background:rgba(214,255,85,.12);box-shadow:0 0 0 3px rgba(214,255,85,.18)}
.paym{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.paym button{border:2px solid rgba(255,255,255,.14);border-radius:14px;padding:12px;background:rgba(255,255,255,.07);font:inherit;color:inherit;cursor:pointer;font-weight:600}
.paym button.on{border-color:#D6FF55;background:rgba(214,255,85,.12)}
.paybox{border-radius:14px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);padding:12px 14px;margin-top:10px}
.paybox .code{font-size:22px;font-weight:700;letter-spacing:1px;user-select:all}
.sandbox{display:inline-block;background:#FF9ACB;color:#222;border-radius:99px;padding:1px 10px;font-size:12px;margin-left:6px}
.pst{font-size:12px;border-radius:99px;padding:1px 8px;background:#eee;color:#333}.pst.paid{background:#D6FF55}.pst.pending{background:#FFE45C}.pst.failed,.pst.expired,.pst.cancelled{background:#ddd}.pst.refunded{background:#FF9ACB}
.legaldoc{line-height:1.8}.legaldoc h2{margin-top:22px}.legaldoc .draft{background:#FFE45C;color:#3a2d00;border-radius:12px;padding:10px 14px;font-weight:600}
.agreebox{display:flex;gap:8px;align-items:flex-start;font-size:13px;line-height:1.6}.agreebox>span{flex:1}.agreebox a{color:inherit;text-decoration:underline}.agreebox input{margin-top:4px;flex:none}

/* ---------- v11.1 outer-space layer (subtle, behind content; see spaceLayer() in common.js) ---------- */
.space{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;contain:strict}
.space i{position:absolute;display:block}
.sp-stars{inset:-10%;background-repeat:repeat;will-change:opacity}
.sp-stars.s1{opacity:.55;background-size:220px 220px;animation:sp-tw 5.5s ease-in-out infinite alternate;
  background-image:radial-gradient(1.2px 1.2px at 22px 34px,#fff 60%,transparent),radial-gradient(1px 1px at 120px 80px,#fff 60%,transparent),radial-gradient(1.5px 1.5px at 180px 160px,#fff6c2 60%,transparent),
  radial-gradient(1px 1px at 60px 190px,#fff 60%,transparent),radial-gradient(1px 1px at 200px 20px,#dff 60%,transparent)}
.sp-stars.s2{opacity:.35;background-size:330px 330px;animation:sp-tw 8s ease-in-out -3s infinite alternate-reverse;
  background-image:radial-gradient(1.6px 1.6px at 70px 120px,#fff 60%,transparent),radial-gradient(1px 1px at 260px 60px,#fff 60%,transparent),radial-gradient(1.2px 1.2px at 300px 280px,#ffd8f0 60%,transparent),
  radial-gradient(1px 1px at 150px 300px,#fff 60%,transparent)}
@keyframes sp-tw{from{opacity:.18}to{opacity:.6}}
.sp-neb{left:-30%;right:-30%;top:22%;height:42vh;transform:rotate(-16deg);opacity:.2;animation:sp-neb 70s ease-in-out infinite alternate;
  background:radial-gradient(40% 50% at 30% 50%,rgba(185,162,255,.55),transparent 70%),radial-gradient(35% 45% at 62% 46%,rgba(255,158,199,.4),transparent 70%),radial-gradient(30% 40% at 80% 56%,rgba(124,200,255,.35),transparent 70%)}
@keyframes sp-neb{from{transform:rotate(-16deg) translateX(-4%)}to{transform:rotate(-12deg) translateX(4%)}}
.sp-shoot{width:110px;height:1.5px;border-radius:2px;opacity:0;transform:rotate(-28deg);background:linear-gradient(90deg,rgba(255,255,255,.9),rgba(255,255,255,0));animation:sp-shoot 1.6s ease-out forwards}
@keyframes sp-shoot{0%{opacity:0;translate:0 0}12%{opacity:.75}100%{opacity:0;translate:-260px 140px}}
.sp-ufo{left:0;opacity:.32;animation:sp-ufo 22s linear forwards}
.sp-ufo svg{display:block;animation:sp-bob 3s ease-in-out infinite}
.sp-ufo.rtl{animation-name:sp-ufo-r}
@keyframes sp-ufo{from{transform:translate(-60px,0)}to{transform:translate(calc(100vw + 60px),var(--dy,0))}}
@keyframes sp-ufo-r{from{transform:translate(calc(100vw + 60px),0)}to{transform:translate(-60px,var(--dy,0))}}
@keyframes sp-bob{50%{transform:translateY(-4px) rotate(-3deg)}}
.sp-planet{left:0;width:var(--sz,36px);height:var(--sz,36px);opacity:.42;animation:sp-planet 70s linear forwards;filter:hue-rotate(var(--hue,0deg))}
.sp-planet::before{content:"";position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle at 32% 30%,#ffe6a8,#ff9ec7 45%,#7a5cff 100%)}
.sp-planet::after{content:"";position:absolute;left:-35%;right:-35%;top:42%;height:18%;border-radius:50%;border:2px solid rgba(255,240,200,.75);transform:rotate(-18deg)}
@keyframes sp-planet{from{transform:translateX(calc(100vw + 40px))}to{transform:translateX(-80px)}}
@media(prefers-reduced-motion:reduce){.space .sp-stars,.space .sp-neb{animation:none!important}.space .sp-shoot,.space .sp-ufo,.space .sp-planet{display:none!important}}

/* ---------- v11.1 draw CTA: the jelly sits beside the button (never under it, never over the label) ---------- */
.cta{display:flex;align-items:center;gap:8px;margin-top:6px}
.cta .peek{position:relative;inset:auto;flex:none;z-index:2;width:56px;height:auto;margin:-6px 0 0 -4px;transform:rotate(-8deg);transform-origin:50% 90%;animation:peek-bob 3.4s ease-in-out infinite;pointer-events:none}
.cta .magic{flex:1;min-width:0;width:auto}
@keyframes peek-bob{50%{transform:rotate(-2deg) translateY(-3px)}}
@media(prefers-reduced-motion:reduce){.cta .peek{animation:none}}

/* ---------- v11.1 每日星座運勢 card ---------- */
.horo-slot:empty{display:none}
.horo-slot{margin-top:16px;max-width:460px}
#birthday .horo{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12)}
#bdf .row input{flex:1;min-width:0}
/* lucky-number hint on the draw shelf: a tiny star on that box's number pill */
.slot.lucky .n::after{content:"";position:absolute;right:-5px;top:-5px;width:11px;height:11px;background:var(--lime);clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)}

/* ---------- v11.1 邀請好友: row + link fit 360px ---------- */
.invite{width:100%;box-sizing:border-box;text-align:left;color:#fff;font:inherit;cursor:pointer}
.invite .sub{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.35}
.invlink{display:flex;align-items:center;gap:8px;margin-top:14px;padding:6px 6px 6px 14px;border-radius:var(--r-pill);background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);min-width:0;max-width:100%;box-sizing:border-box}
.invlink .u{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--t13);color:var(--fg-mute)}
.invlink .btn{flex:none;white-space:nowrap}

/* v11.1 hero: each line stays on one row; scales down on narrow phones instead of breaking a word */
.homehero h1 .ln{display:block;white-space:nowrap}
@media(max-width:430px){.homehero h1.title-xl{font-size:min(var(--t32),7.4vw)}}

/* ---------- v11.2 jelly family: Noreen's 10 semi-transparent mascots, CSS jiggle (squash & stretch from the bottom, wobble, bob, hop) ---------- */
.jelly .jb{position:relative;display:block;transform-origin:50% 90%;animation:jl-idle var(--jt,7s) ease-in-out var(--jd,0s) infinite;will-change:transform}
.jelly .jb img{display:block;width:100%;height:auto;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;pointer-events:none}
.jelly .jb .jacc{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
@keyframes jl-idle{   /* two soft breaths + a wobble, then one small hop with a squash landing */
  0%,100%{transform:translateY(0) scale(1,1) skewX(0)}
  12%{transform:translateY(-1.5%) scale(.975,1.035) skewX(-1.2deg)}
  24%{transform:translateY(0) scale(1.03,.97) skewX(1deg)}
  36%{transform:translateY(-1.5%) scale(.98,1.03) skewX(-.8deg)}
  48%{transform:translateY(0) scale(1.025,.975) skewX(.6deg)}
  60%{transform:translateY(0) scale(1,1) skewX(0)}
  70%{transform:translateY(0) scale(1.06,.93)}
  78%{transform:translateY(-9%) scale(.95,1.06)}
  86%{transform:translateY(0) scale(1.08,.9)}
  92%{transform:translateY(0) scale(.98,1.03)}}
@keyframes jl-happy{0%,100%{transform:translateY(0) scale(1,1)}20%{transform:translateY(0) scale(1.07,.92)}45%{transform:translateY(-12%) scale(.94,1.07)}70%{transform:translateY(0) scale(1.06,.93)}85%{transform:scale(.99,1.02)}}
.jelly.m-happy .jb{animation-name:jl-happy;animation-duration:1.5s}
.jelly.m-calm .jb{animation-duration:calc(var(--jt,7s) * 1.4)}
.jelly.m-sad .jb{animation-duration:calc(var(--jt,7s) * 1.8)}.jelly.m-sad .jb img{filter:saturate(.7) brightness(.94)}
.jelly .jb.sq{animation:jl-squish .75s cubic-bezier(.3,1.5,.5,1) both}
@keyframes jl-squish{0%{transform:scale(1,1)}22%{transform:scale(1.24,.72)}48%{transform:translateY(-10%) scale(.86,1.16)}70%{transform:translateY(0) scale(1.07,.94)}86%{transform:scale(.98,1.03)}100%{transform:scale(1,1)}}
.jelly.liquid .jb img{filter:url(#jliquid)}
@media(prefers-reduced-motion:reduce){.jelly .jb,.jelly .jb.sq{animation:none!important}.jelly.liquid .jb img{filter:none!important}}
/* adoption: 10 mascots in a 5 × 2 picker */
.padopt .ag{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}
.padopt .t{padding:12px 2px 10px;border-radius:18px}.padopt .t.on{padding:11px 1px 9px}
.padopt .t b{font-size:var(--t13);margin-top:4px}.padopt .t>span:last-child{display:none}
.padopt .t .mp{width:34px;height:5px}
.padopt .t .chk{transform:scale(.8);transform-origin:top right}
.petfam{grid-template-columns:repeat(5,minmax(0,1fr));gap:16px 4px}.pf .jelly{width:60px}

/* ---------- v11.2 draw screen ---------- */
/* boxes are ALWAYS the same size: selection / press / hover only lift (translateY) + glow, never scale */
.slot:active:not(.taken) .lift{transform:translateY(-2px)}
.slot.sel .lift,.case.dense .slot.sel .lift,.case.xdense .slot.sel .lift{transform:translateY(-12px)}
.case.dense .slot.sel .lift{transform:translateY(-10px)}.case.xdense .slot.sel .lift{transform:translateY(-8px)}
/* the CTA is centred again (full width); the jelly lives in its own lane on the roof of the machine */
.cta{display:flex;justify-content:center;align-items:center;gap:0;margin-top:6px}
.cta .magic{flex:1 1 auto;width:100%;max-width:420px}
.machine,.machine.has-q{padding-top:70px}   /* roof lane (56px) + 10px clearance above lifted boxes */
.roof{position:absolute;z-index:2;left:14px;right:14px;top:4px;height:56px;container-type:inline-size;pointer-events:none}
.machine.has-q .roof{left:120px}
.roof .roller{position:absolute;left:0;bottom:0;width:54px;pointer-events:auto;transform:translateX(calc(100cqw - 54px));animation:roof-roll 26s ease-in-out infinite}
.roof .roller .jelly{width:54px;display:block}
@keyframes roof-roll{   /* drift left along the roof with a little roll, rest, drift back */
  0%,12%{transform:translateX(calc(100cqw - 54px)) rotate(0)}
  30%{transform:translateX(calc(62cqw - 23px)) rotate(-14deg)}
  36%,52%{transform:translateX(calc(55cqw - 23px)) rotate(0)}
  70%{transform:translateX(calc(85cqw - 40px)) rotate(12deg)}
  78%,100%{transform:translateX(calc(100cqw - 54px)) rotate(0)}}
@media(prefers-reduced-motion:reduce){.roof .roller{animation:none}}

/* ---------- v11.2 星座運勢: compact strip, tap to expand ---------- */
.horo{display:block;margin:0;padding:0;border-radius:var(--r-pill);overflow:hidden;max-width:100%}
.horo[open]{border-radius:20px}
.horo .hs{display:flex;align-items:center;gap:8px;min-height:40px;padding:6px 12px 6px 8px;list-style:none;cursor:pointer;white-space:nowrap;font-size:var(--t13);min-width:0}
.horo .hs::-webkit-details-marker{display:none}.horo .hs::marker{content:""}
.horo .hz{flex:none;display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--glass-3);color:var(--lime)}.horo .hz .ic{width:14px;height:14px}
.horo .sg{flex:none;font-size:var(--t13)}
.horo .hc{display:inline-flex;align-items:center;gap:4px;min-width:0;color:var(--fg-mute);overflow:hidden;text-overflow:ellipsis}
.horo .hc::before{content:"";flex:none;width:1px;height:12px;margin-right:4px;background:var(--line-2)}
.horo .hc.c{flex:0 1 auto}.horo .hc.d,.horo .hc.n{flex:none}
.horo .sw{flex:none;width:10px;height:10px;border-radius:50%;box-shadow:0 0 0 1.5px rgba(255,255,255,.6)}
.horo .hc .num{color:var(--lime);font-family:var(--font-num);font-size:var(--t15);margin-right:1px}
.horo .chev{flex:none;margin-left:auto;color:var(--fg-dim);transition:transform var(--t-fast)}
.horo[open] .chev{transform:rotate(180deg)}
.horo .hx{padding:0 14px 12px 42px}
.horo .hm{margin:0;font-size:var(--t13);line-height:1.5}
.horo .hn{margin:4px 0 0;font-size:var(--t11);color:var(--fg-dim);line-height:1.5}.horo .hn .num{color:var(--lime)}
.horo.empty{display:flex;align-items:center;gap:8px;min-height:40px;padding:6px 12px 6px 8px;font-size:var(--t13);color:#fff;text-decoration:none;white-space:nowrap}
.horo.empty small{color:var(--fg-mute);font-size:var(--t12)}.horo.empty .ic-sm{margin-left:auto}
