:root{
  --ink:#0d0517;
  --grad:linear-gradient(100deg,#ff5a8a 0%,#e04bd6 50%,#8b4dff 100%);
  --text-grad:linear-gradient(180deg,#fff 0%,#ffe3f5 60%,#e3c4ff 100%);
  --glass:rgba(255,255,255,.08);
  --line:rgba(255,255,255,.14);
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%;background:#05020a;font-family:system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;color:#fff}
body{display:flex;justify-content:center}
.app{position:relative;width:100%;max-width:480px;height:100dvh;min-height:640px;overflow:hidden;background:var(--ink);isolation:isolate}
img{display:block}

/* ===== ambient background ===== */
.amb{position:absolute;inset:0;z-index:0;overflow:hidden}
.amb .ph{position:absolute;inset:-40px;background-size:cover;background-position:50% 25%;filter:blur(30px) saturate(1.3) brightness(.55);opacity:0;transition:opacity .9s ease;transform:translate3d(0,0,0) scale(1.1);will-change:opacity;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.amb .ph.on{opacity:1}
.blob{position:absolute;border-radius:50%;opacity:.5;animation:drift 14s ease-in-out infinite alternate;will-change:transform;transform:translate3d(0,0,0)}
.blob.a{width:420px;height:420px;background:radial-gradient(circle,rgba(255,61,154,.9),rgba(255,61,154,0) 65%);left:-120px;top:8%}
.blob.b{width:380px;height:380px;background:radial-gradient(circle,rgba(123,61,255,.9),rgba(123,61,255,0) 65%);right:-110px;top:38%;animation-delay:-5s}
.blob.c{width:340px;height:340px;background:radial-gradient(circle,rgba(255,122,89,.9),rgba(255,122,89,0) 65%);left:20%;bottom:-120px;opacity:.35;animation-delay:-9s}
@keyframes drift{from{transform:translate3d(0,0,0)}to{transform:translate3d(40px,-30px,0) scale(1.1)}}
.grain{position:absolute;inset:0;opacity:.06;pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.amb::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(13,5,23,.3),rgba(13,5,23,.1) 30%,rgba(13,5,23,.75) 70%,var(--ink))}

/* ===== top ===== */
.top{position:absolute;z-index:20;top:0;left:0;right:0;padding:calc(env(safe-area-inset-top) + 14px) 18px 0;display:flex;align-items:center;justify-content:space-between}
.logo{display:flex;align-items:center;gap:8px;font-family:system-ui,sans-serif;font-weight:900;font-size:18px}
.logo{font-family:system-ui,"Hiragino Sans","Yu Gothic",sans-serif!important;letter-spacing:.06em}
.logo .mk{width:34px;height:34px;border-radius:10px;overflow:hidden;flex:none;box-shadow:0 0 0 1px rgba(255,255,255,.25),0 0 18px rgba(224,75,214,.55)}
.logo .mk img{width:100%;height:100%;object-fit:cover}
.badge{white-space:nowrap;font-size:12px;padding:6px 11px;border-radius:99px;background:rgba(13,5,23,.45);border:1px solid var(--line);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);display:flex;align-items:center;gap:5px}
.dots{position:absolute;z-index:20;top:calc(env(safe-area-inset-top) + 58px);left:18px;right:18px;display:flex;gap:5px}
.dots span{flex:1;height:3px;border-radius:3px;background:rgba(255,255,255,.18);overflow:hidden;position:relative}
.dots span::after{content:"";position:absolute;inset:0;background:var(--grad);transform:scaleX(0);transform-origin:left;transition:transform .6s cubic-bezier(.2,.8,.2,1)}
.dots span.on::after{transform:scaleX(1)}

/* ===== screens ===== */
.screen{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;padding:calc(env(safe-area-inset-top) + 76px) 20px calc(env(safe-area-inset-bottom) + 18px);
  opacity:0;visibility:hidden;transform:translate3d(30px,0,0);will-change:opacity,transform;backface-visibility:hidden;-webkit-backface-visibility:hidden;transition:opacity .45s ease,transform .55s cubic-bezier(.2,.8,.2,1),visibility 0s .5s}
.screen.active{opacity:1;visibility:visible;transform:translate3d(0,0,0);transition:opacity .45s ease,transform .55s cubic-bezier(.2,.8,.2,1),visibility 0s}
.screen.past{transform:translate3d(-30px,0,0)}
.screen:not(.active) *,.screen:not(.active) *::before,.screen:not(.active) *::after{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){.blob,.mosaic .col{animation:none!important}}
.stage{flex:1;position:relative;display:flex;align-items:center;justify-content:center;min-height:0}
.foot{flex:none;text-align:center}
.screen.active .foot>*{animation:rise .6s cubic-bezier(.2,.8,.2,1) both}
.foot>*:nth-child(2){animation-delay:.07s!important}.foot>*:nth-child(3){animation-delay:.14s!important}.foot>*:nth-child(4){animation-delay:.21s!important}.foot>*:nth-child(5){animation-delay:.28s!important}
@keyframes rise{from{opacity:0;transform:translate3d(0,18px,0)}to{opacity:1;transform:translate3d(0,0,0)}}

h1,h2{font-weight:900;letter-spacing:.03em;background:var(--text-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
h1{font-size:30px;line-height:1.25;margin-bottom:10px}
.q{font-size:15px;line-height:1.75;opacity:.85;margin:0 2px 20px;text-wrap:pretty}
.q b{color:#ffb2e6;font-weight:700}

/* buttons */
.btn{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;width:100%;height:56px;border:0;border-radius:18px;font:inherit;font-size:17px;font-weight:700;color:#fff;cursor:pointer;transition:transform .12s;overflow:hidden}
.btn:active{transform:scale(.97)}
.btn.primary{background:var(--grad);box-shadow:0 14px 34px -12px rgba(224,75,214,.9),inset 0 1px 0 rgba(255,255,255,.35)}
.btn.primary::after{content:"";position:absolute;top:0;bottom:0;left:0;width:60%;background:linear-gradient(110deg,transparent,rgba(255,255,255,.4),transparent);transform:translate3d(-120%,0,0);animation:sheen 3s infinite;will-change:transform}
@keyframes sheen{60%,100%{transform:translate3d(260%,0,0)}}
.btn.primary.pulse{animation:pulse 2.2s infinite}
@keyframes pulse{0%,100%{box-shadow:0 14px 34px -12px rgba(224,75,214,.9),0 0 0 0 rgba(224,75,214,.55)}60%{box-shadow:0 14px 34px -12px rgba(224,75,214,.9),0 0 0 14px rgba(224,75,214,0)}}
.btn.ghost{margin-top:10px;height:48px;font-size:15px;font-weight:500;background:transparent;color:rgba(255,255,255,.65)}
.fine{margin-top:8px;font-size:11px;opacity:.5;line-height:1.6}
.fine a{color:inherit}

/* ===== PAGE 1 : card stack ===== */
.deck{position:relative;height:min(46vh,380px);aspect-ratio:3/4.1}
.card{position:absolute;inset:0;border-radius:26px;overflow:hidden;background:#2a1440;
  box-shadow:0 30px 60px -20px rgba(0,0,0,.7),0 0 0 1px rgba(255,255,255,.12) inset;
  transition:transform .6s cubic-bezier(.3,1.2,.4,1),opacity .5s ease;will-change:transform,opacity;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.card::before{content:"";position:absolute;inset:0;z-index:3;background:#0d0517;opacity:0;transition:opacity .5s;pointer-events:none}
.card.p1::before{opacity:.4}.card.p2::before{opacity:.55}
.card img{width:100%;height:100%;object-fit:cover;object-position:50% 22%}
.card::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 50%,rgba(10,2,20,.85))}
.card .info{position:absolute;z-index:2;left:16px;right:16px;bottom:14px}
.card .nm{font-size:24px;font-weight:900;display:flex;align-items:center;gap:6px}
.card .nm svg{width:18px;height:18px;flex:none}
.card .tags{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}
.card .tags span{white-space:nowrap;font-size:11px;padding:4px 9px;border-radius:99px;background:rgba(255,255,255,.2)}
.card.p0{z-index:3;transform:translate3d(0,0,0)}
.card.p1{z-index:2;transform:translate3d(22px,12px,0) rotate(6deg) scale(.93)}
.card.p2{z-index:1;transform:translate3d(-22px,18px,0) rotate(-7deg) scale(.88)}
.card.out{z-index:4;transform:translate3d(140%,-30px,0) rotate(22deg);opacity:0}
.float{position:absolute;z-index:6;white-space:nowrap;font-size:12px;font-weight:500;padding:7px 12px;border-radius:99px;
  background:rgba(28,12,48,.82);border:1px solid var(--line);
  box-shadow:0 10px 24px -10px rgba(0,0,0,.6);animation:bob 4s ease-in-out infinite;will-change:transform}
.float.f1{left:-18px;top:16%}
.float.f2{right:-22px;top:46%;animation-delay:-1.4s}
.float.f3{left:-10px;bottom:22%;animation-delay:-2.6s}
.float i{font-style:normal;display:inline-block;width:7px;height:7px;border-radius:50%;background:#55ffb0;box-shadow:0 0 8px #55ffb0;margin-right:5px;vertical-align:1px}
@keyframes bob{0%,100%{transform:translate3d(0,0,0)}50%{transform:translate3d(0,-7px,0)}}

/* ===== PAGE 2 : age ===== */
.mosaic-wrap{position:absolute;inset:-10px -20px 10px;overflow:hidden}
.mosaic-wrap::after{content:"";position:absolute;inset:0;background:radial-gradient(60% 48% at 50% 48%,var(--ink) 25%,rgba(13,5,23,.6) 55%,rgba(13,5,23,.15) 85%);pointer-events:none}
.mosaic{position:absolute;inset:-20px -40px;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;opacity:.3;transform:rotate(-8deg) translateZ(0)}
.mosaic .col{display:flex;flex-direction:column;gap:10px;animation:colUp 30s linear infinite;will-change:transform;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.mosaic .col:nth-child(2){animation-direction:reverse;animation-duration:36s}
.mosaic .col img{width:100%;aspect-ratio:3/4;object-fit:cover;border-radius:16px}
@keyframes colUp{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,-50%,0)}}
.ring{position:relative;width:min(62vw,250px);aspect-ratio:1}
.ring svg{position:absolute;inset:0;transform:rotate(-90deg)}
.ring .track{stroke:rgba(255,255,255,.1)}
.ring .bar{stroke:url(#rg);stroke-dasharray:691;stroke-dashoffset:691}
.ring::before{content:"";position:absolute;inset:-6%;border-radius:50%;background:radial-gradient(circle,transparent 58%,rgba(224,75,214,.35) 66%,transparent 74%);pointer-events:none}
.screen.active .ring .bar{animation:fill 1.4s .25s cubic-bezier(.6,0,.2,1) forwards}
@keyframes fill{to{stroke-dashoffset:0}}
.ring .core{position:absolute;inset:22px;border-radius:50%;display:grid;place-items:center;align-content:center;
  background:radial-gradient(circle at 50% 30%,#2b1446,#170a28 70%);border:1px solid var(--line)}
.ring .num{font-family:system-ui,sans-serif;font-weight:900;font-size:64px;line-height:1;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.ring .lab{font-size:12px;letter-spacing:.3em;opacity:.6;margin-top:8px}
.ring .orb{position:absolute;inset:0;animation:spin 8s linear infinite;will-change:transform}
.ring .orb::before{content:"";position:absolute;top:-4px;left:50%;width:10px;height:10px;margin-left:-5px;border-radius:50%;background:#fff;box-shadow:0 0 14px #ff8be6,0 0 4px #fff}
@keyframes spin{from{transform:rotate(0) translateZ(0)}to{transform:rotate(360deg) translateZ(0)}}

/* ===== PAGE 3 : orbit ===== */
.orbit{position:relative;width:min(84vw,330px);aspect-ratio:1}
.orbit .rings i{position:absolute;inset:0;border-radius:50%;border:1px solid rgba(255,255,255,.12)}
.orbit .rings i:nth-child(2){inset:18%;border-color:rgba(255,255,255,.16)}
.orbit .rings i:nth-child(3){inset:-6%;border:1.5px solid rgba(224,75,214,.5);animation:wave 2.6s ease-out infinite}
.orbit .rings i:nth-child(4){inset:-6%;border:1.5px solid rgba(224,75,214,.5);animation:wave 2.6s 1.3s ease-out infinite}
.orbit .rings i:nth-child(3),.orbit .rings i:nth-child(4){will-change:transform,opacity}
@keyframes wave{from{transform:scale(.4) translateZ(0);opacity:1}to{transform:scale(1.15) translateZ(0);opacity:0}}
.center{position:absolute;inset:36%;border-radius:50%;background:var(--grad);display:grid;place-items:center;box-shadow:0 0 50px rgba(224,75,214,.7),inset 0 2px 0 rgba(255,255,255,.4)}
.center b{font-family:system-ui,sans-serif;font-size:26px;font-weight:900;line-height:1}
.center small{display:block;font-size:10px;opacity:.9;margin-top:4px;text-align:center}
.spin{position:absolute;inset:0;animation:spin 40s linear infinite;will-change:transform}
.av{position:absolute;width:23%;aspect-ratio:1;margin:-11.5% 0 0 -11.5%;}
.av .in{width:100%;height:100%;border-radius:50%;overflow:hidden;border:2.5px solid #fff;box-shadow:0 0 0 3px rgba(224,75,214,.45);animation:spin 40s linear infinite reverse;will-change:transform;-webkit-mask-image:-webkit-radial-gradient(white,black)}
.av .in img{width:100%;height:100%;object-fit:cover;object-position:50% 22%}
.av .ok{position:absolute;right:-2px;bottom:2px;width:20px;height:20px;border-radius:50%;background:#3ad1ff;border:2px solid var(--ink);display:grid;place-items:center;opacity:0;transition:opacity .3s}
.av.shown .ok{opacity:1}
.av.shown .in{animation:spin 40s linear infinite reverse,popin .55s cubic-bezier(.3,1.6,.5,1) forwards}
@keyframes popin{from{scale:0}to{scale:1}}
.av .in{scale:0}
/* page 3 enhancements */
.halo{position:absolute;inset:4%;border-radius:50%;background:radial-gradient(circle,rgba(224,75,214,.4),rgba(139,77,255,.12) 50%,transparent 70%);opacity:.5;transition:opacity .8s,transform .8s;will-change:transform,opacity}
.done .halo{opacity:1;transform:scale(1.15)}
.center{transition:transform .5s cubic-bezier(.3,1.6,.5,1);will-change:transform}
.center .cA,.center .cB{grid-area:1/1;text-align:center;transition:opacity .35s,transform .45s cubic-bezier(.3,1.6,.5,1)}
.center .cB{opacity:0;transform:scale(.4)}
.center .cB svg{width:34px;height:34px;display:block;margin:0 auto}
.done .center{transform:scale(1.08);animation:beat 1.4s .6s infinite}
.done .center .cA{opacity:0;transform:scale(.4)}
.done .center .cB{opacity:1;transform:none}
@keyframes beat{0%,100%{transform:scale(1.08) translateZ(0)}12%{transform:scale(1.16) translateZ(0)}24%{transform:scale(1.08) translateZ(0)}36%{transform:scale(1.13) translateZ(0)}}
.av .lblw{position:absolute;left:0;right:0;top:0;bottom:0;animation:spin 40s linear infinite reverse;will-change:transform;pointer-events:none}
.av .lbl{position:absolute;left:50%;top:104%;transform:translate(-50%,6px);white-space:nowrap;font-size:10px;font-weight:700;padding:2px 7px;border-radius:99px;background:rgba(28,12,48,.9);border:1px solid var(--line);opacity:0;transition:opacity .4s,transform .4s}
.done .av .lbl{opacity:1;transform:translate(-50%,0)}
.done .av .in{box-shadow:0 0 0 3px rgba(255,90,170,.85)}
.bubble{position:absolute;z-index:6;left:50%;top:-6%;transform:translate(-50%,8px) scale(.9);opacity:0;white-space:nowrap;font-size:12px;font-weight:500;
  padding:8px 12px 8px 8px;border-radius:16px;background:#fff;color:#2a0b45;display:flex;align-items:center;gap:7px;box-shadow:0 12px 30px -8px rgba(224,75,214,.7);transition:opacity .35s,transform .4s cubic-bezier(.3,1.5,.5,1);will-change:transform,opacity}
.bubble.show{opacity:1;transform:translate(-50%,0) scale(1)}
.bubble img{width:24px;height:24px;border-radius:50%;object-fit:cover;object-position:50% 22%}
.bubble b{color:#e04bd6}
.bubble::after{content:"";position:absolute;left:50%;bottom:-6px;margin-left:-6px;border:6px solid transparent;border-bottom:0;border-top-color:#fff}
.reveal h2{transition:transform .5s cubic-bezier(.3,1.6,.5,1)}
.done .reveal h2{animation:titlePop .6s cubic-bezier(.3,1.6,.5,1)}
@keyframes titlePop{0%{transform:scale(.7) translateZ(0);opacity:0}100%{transform:scale(1) translateZ(0);opacity:1}}
.conf{position:absolute;inset:0;z-index:15;pointer-events:none;overflow:hidden}
.conf i{position:absolute;left:50%;top:45%;border-radius:2px;background:var(--c);animation:boom 1.4s cubic-bezier(.1,.7,.3,1) forwards;will-change:transform,opacity}
@keyframes boom{from{transform:translate3d(0,0,0)}to{transform:translate3d(var(--x),var(--y),0) rotate(var(--r));opacity:0}}
.reveal{text-align:center;margin-bottom:6px}
.reveal h2{font-size:34px;line-height:1.15}
.reveal p{font-size:14px;opacity:.75;margin-top:6px;min-height:21px}
.trust{display:flex;justify-content:center;gap:14px;font-size:11px;opacity:.75;margin-top:12px}
.trust span::before{content:"✓ ";color:#7fe3ff}

/* toast */
.toast{position:absolute;z-index:30;left:50%;bottom:calc(env(safe-area-inset-bottom) + 150px);transform:translate(-50%,20px);opacity:0;pointer-events:none;
  font-size:13px;padding:10px 16px;border-radius:14px;background:rgba(28,12,48,.95);border:1px solid var(--line);white-space:nowrap;transition:opacity .3s,transform .3s}
.toast.show{opacity:1;transform:translate(-50%,0)}

@media (max-height:700px){
  .deck{height:40vh}
  h1{font-size:26px}
  .q{font-size:14px;margin-bottom:14px}
  .orbit{width:min(70vw,280px)}

}

/* Keep actions inside short mobile / in-app browser viewports. */
html{overflow-x:hidden;-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{touch-action:manipulation}
.app{height:100vh;height:100dvh;height:var(--view-h,100dvh);min-height:0}
.screen{overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}
.stage{flex:1 1 0;margin:20px 0;min-height:80px}
.deck{height:min(46vh,380px,100%);max-width:78%;cursor:pointer;touch-action:manipulation}
.ring{width:min(62vw,250px);max-height:100%;height:auto;max-width:100%;flex-shrink:0}
.orbit{width:min(84vw,330px);max-height:100%;height:auto;max-width:100%;flex-shrink:0}
.stage .ring,.stage .orbit{height:min(var(--stage-h,330px),330px);width:auto}
.stage .ring{height:min(var(--stage-h,250px),250px)}
.deck:focus-visible{outline:2px solid #fff;outline-offset:12px;border-radius:26px}
.fine button{border:0;background:none;color:inherit;font:inherit;text-decoration:underline;cursor:pointer;padding:4px 0}
.toast{max-width:90%;width:max-content;white-space:normal;text-align:center}
.paused *,.paused *::before,.paused *::after{animation-play-state:paused!important}
.policy[hidden]{display:none}
.policy{position:absolute;inset:0;z-index:40;background:#05020acc;display:grid;place-items:center;padding:24px}
.policy-box{width:100%;max-width:360px;padding:24px;border-radius:22px;background:#251132;border:1px solid var(--line);box-shadow:0 18px 60px #0008}
.policy-box h2{font-size:22px;margin-bottom:14px}
.policy-box p{font-size:14px;line-height:1.8;white-space:pre-line;margin-bottom:20px}
@media(max-height:700px){
 .stage{margin:14px 0}.deck{height:min(40vh,100%)}
 .stage .orbit{height:min(var(--stage-h,280px),280px)}
}
@media(max-height:580px){
 .top{padding-top:calc(env(safe-area-inset-top) + 8px)}
 .logo .mk{width:28px;height:28px}.logo{font-size:16px}.badge{font-size:10px;padding:5px 8px}
 .dots{top:calc(env(safe-area-inset-top) + 43px)}
 .screen{padding:calc(env(safe-area-inset-top) + 55px) 18px calc(env(safe-area-inset-bottom) + 8px)}
 .stage{margin:10px 0;min-height:65px}.deck{height:min(40vh,100%)}
 h1{font-size:22px;margin-bottom:6px}.q{font-size:12px;line-height:1.55;margin-bottom:10px!important}
 .btn{height:44px;font-size:15px;border-radius:14px}.btn.ghost{height:32px;margin-top:4px;font-size:13px}
 .float{font-size:10px;padding:5px 8px}.card .nm{font-size:18px}.card .tags{margin-top:4px}.card .tags span{font-size:9px;padding:3px 6px}
 .card .info{left:12px;bottom:10px}.ring .num{font-size:44px}.ring .lab{font-size:8px}.ring .core{inset:16px}
 .reveal h2{font-size:26px}.reveal p{font-size:12px;margin-top:3px}.trust{margin-top:8px;font-size:10px}.fine{margin-top:3px;font-size:10px}
 .bubble{font-size:10px;padding:5px 8px}.bubble img{width:20px;height:20px}
 .center b{font-size:22px}.center small{font-size:8px}.center .cB svg{width:24px;height:24px}
}
@media(max-height:430px){.stage{margin:6px 0}.q{font-size:11px;line-height:1.45}h1{font-size:20px}.float.f3{display:none}.trust{gap:10px}.reveal h2{font-size:23px}.reveal p{min-height:16px}.av .lbl{font-size:8px;padding:1px 4px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.av.shown .in{scale:1}}
