@font-face{font-family:"LoveSerif";src:url(serif.woff2) format("woff2");font-weight:700;font-display:swap}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
:root{--ink:#221E2E;--sub:#7A7486;--line:#ECE6DE;--paper:#FBF8F4;--c:#7B5CFF;--c2:#EEE8FF;--serif:"LoveSerif","Noto Serif SC","Songti SC","STSong",serif;--sans:-apple-system,"PingFang SC","Noto Sans SC","Microsoft YaHei",sans-serif}
html,body{background:var(--paper)}body{font-family:var(--sans);color:var(--ink);-webkit-font-smoothing:antialiased;overflow-x:hidden}
#app{max-width:460px;margin:0 auto;min-height:100vh;min-height:100dvh;position:relative}
.screen{min-height:100vh;min-height:100dvh;padding:28px 24px 48px;animation:in .55s cubic-bezier(.2,.8,.2,1) both}
.screen.out{animation:out .28s ease both}
@keyframes in{from{opacity:0;transform:translateY(18px)}}@keyframes out{to{opacity:0;transform:translateY(-12px)}}
.serif{font-family:var(--serif);font-weight:700}
.kicker{font-size:11px;letter-spacing:.32em;color:var(--sub);text-transform:uppercase}
.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;border:0;border-radius:999px;padding:17px;font-size:16px;font-weight:600;letter-spacing:.08em;color:#fff;background:var(--ink);cursor:pointer;transition:transform .15s}
.btn:active{transform:scale(.97)}.btn.c{background:var(--c)}.btn.ghost{background:transparent;color:var(--ink);border:1.5px solid var(--ink)}
.note{font-size:11px;color:#A8A2B0;text-align:center;line-height:1.7;margin-top:22px}
/* landing */
.land{display:flex;flex-direction:column;padding-top:34px}
.brand{display:flex;justify-content:space-between;align-items:center;font-size:11px;letter-spacing:.24em;color:var(--sub)}
.brand b{font-family:var(--serif);font-size:14px;letter-spacing:.1em;color:var(--ink)}
.stage{position:relative;height:300px;margin:18px -24px 0}
.stage .ch{position:absolute;animation:float 5s ease-in-out infinite}
.stage .ch svg{width:100%;height:100%;filter:drop-shadow(0 10px 18px rgba(34,30,46,.12))}
@keyframes float{50%{transform:translateY(-10px) rotate(2deg)}}
.land h1{font-family:var(--serif);font-size:40px;line-height:1.22;letter-spacing:.02em}
.land h1 em{font-style:normal;background:linear-gradient(transparent 62%,#FFD9C2 62%)}
.land .lead{margin:16px 0 26px;font-size:14.5px;line-height:1.95;color:#4B4558}
.meta{display:flex;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:26px}
.meta div{flex:1;padding:14px 0;text-align:center}.meta div+div{border-left:1px solid var(--line)}
.meta b{display:block;font-family:var(--serif);font-size:22px}.meta span{font-size:11px;color:var(--sub);letter-spacing:.1em}
.invite{background:#fff;border:1px solid var(--line);border-radius:18px;padding:14px 16px;display:flex;gap:12px;align-items:center;margin-bottom:18px}
.invite svg{width:52px;height:52px;flex:none}.invite p{font-size:13.5px;line-height:1.6}.invite b{color:var(--c)}
.linkbtn{background:none;border:0;color:var(--sub);font-size:13px;margin-top:14px;text-decoration:underline;text-underline-offset:4px;cursor:pointer;width:100%}
/* question */
.qtop{display:flex;align-items:center;gap:14px}
.back{width:38px;height:38px;border-radius:50%;border:1px solid var(--line);background:#fff;font-size:18px;color:var(--ink);cursor:pointer;flex:none}
.prog{flex:1;height:4px;border-radius:2px;background:var(--line);overflow:hidden}.prog i{display:block;height:100%;background:var(--ink);border-radius:2px;transition:width .5s cubic-bezier(.2,.8,.2,1)}
.qn{font-family:var(--serif);font-size:14px;min-width:46px;text-align:right}.qn small{color:var(--sub);font-size:11px}
.qbody{padding-top:9vh}
.chap{font-size:11px;letter-spacing:.3em;color:var(--sub)}
.qtext{font-family:var(--serif);font-size:24px;line-height:1.6;margin:14px 0 34px;letter-spacing:.01em}
.opt{display:flex;gap:14px;align-items:flex-start;width:100%;text-align:left;padding:17px 18px;margin-bottom:12px;border:1px solid var(--line);border-radius:18px;background:#fff;font-size:15.5px;line-height:1.6;color:var(--ink);cursor:pointer;transition:all .2s;animation:in .5s cubic-bezier(.2,.8,.2,1) both}
.opt span{flex:none;width:24px;height:24px;border-radius:50%;border:1px solid var(--line);font-size:11px;display:flex;align-items:center;justify-content:center;color:var(--sub);font-weight:600;margin-top:1px;transition:all .2s}
.opt.on{border-color:var(--ink);background:var(--ink);color:#fff;transform:scale(.985)}.opt.on span{background:#fff;color:var(--ink);border-color:#fff}
/* calc */
.calc{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.orb{position:relative;width:200px;height:200px;margin-bottom:40px}
.orb i{position:absolute;inset:0;border-radius:50%;border:1.5px solid var(--ink);opacity:.15;animation:ring 2.4s ease-out infinite}
.orb i:nth-child(2){animation-delay:.8s}.orb i:nth-child(3){animation-delay:1.6s}
@keyframes ring{from{transform:scale(.4);opacity:.5}to{transform:scale(1.2);opacity:0}}
.orb .core{position:absolute;inset:50px;border-radius:50%;overflow:hidden;animation:spin 6s linear infinite}
.orb .core svg{width:100%;height:100%}@keyframes spin{to{transform:rotate(360deg)}}
.calc h2{font-family:var(--serif);font-size:22px}.calc p{color:var(--sub);font-size:13px;margin-top:12px;min-height:20px;transition:opacity .3s}
.calc .pct{font-family:var(--serif);font-size:44px;margin-top:22px}
/* reveal */
.reveal{position:fixed;inset:0;background:var(--c2);z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;animation:fadein .4s both}
@keyframes fadein{from{opacity:0}}
.reveal .k{font-size:12px;letter-spacing:.4em;color:var(--sub);animation:in .6s .2s both}
.reveal .big{width:230px;height:230px;margin:22px 0;animation:pop .9s .4s cubic-bezier(.3,1.6,.5,1) both}
@keyframes pop{from{transform:scale(.2) rotate(-12deg);opacity:0}}
.reveal h2{font-family:var(--serif);font-size:42px;animation:in .6s 1s both}.reveal .en{font-family:Georgia,serif;font-style:italic;color:var(--sub);margin-top:6px;animation:in .6s 1.2s both}
.burst{position:absolute;width:8px;height:8px;border-radius:2px;animation:burst 1.4s .5s cubic-bezier(.1,.8,.3,1) both}
@keyframes burst{from{transform:translate(0,0) rotate(0);opacity:1}to{transform:translate(var(--x),var(--y)) rotate(540deg);opacity:0}}
/* report */
.rep{padding:0 0 60px}
.hero{background:var(--c2);padding:30px 24px 34px;text-align:center;border-radius:0 0 34px 34px;position:relative;overflow:hidden}
.hero .art{width:210px;height:210px;margin:6px auto 0}
.hero h1{font-family:var(--serif);font-size:40px;letter-spacing:.04em;margin-top:6px}
.hero .en{font-family:Georgia,serif;font-style:italic;color:var(--sub);font-size:14px}
.hero .tl{display:inline-block;margin-top:16px;font-family:var(--serif);font-size:15px;padding:8px 18px;border-radius:999px;background:rgba(255,255,255,.65)}
.code{position:absolute;top:22px;left:24px;right:24px;display:flex;justify-content:space-between;font-size:10px;letter-spacing:.28em;color:var(--sub)}
.sec{padding:30px 24px 0}
.sec h3{display:flex;align-items:baseline;gap:10px;font-family:var(--serif);font-size:20px;margin-bottom:14px}
.sec h3 small{font-family:var(--sans);font-size:10px;letter-spacing:.24em;color:var(--sub);font-weight:400}
.sec h3:before{content:"";width:4px;height:16px;border-radius:2px;background:var(--c);align-self:center}
.sec p{font-size:15px;line-height:2;color:#3D3848;margin-bottom:10px;text-align:justify}
.stats{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.stat{background:#fff;border:1px solid var(--line);border-radius:18px;padding:16px 8px;text-align:center}
.stat b{display:block;font-family:var(--serif);font-size:26px;color:var(--c)}.stat b sup{font-size:12px}.stat span{font-size:11.5px;color:var(--sub);line-height:1.5;display:block;margin-top:4px}
.sec .fine{font-size:10.5px;line-height:1.6;font-size:10.5px;color:#A8A2B0;margin-top:10px}
.dim{margin-bottom:18px}.dim .h{display:flex;justify-content:space-between;font-size:13px;margin-bottom:8px}.dim .h b{font-family:var(--serif);color:var(--c)}
.track{position:relative;height:8px;border-radius:4px;background:var(--line)}.track i{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:var(--c);width:0;transition:width 1.2s cubic-bezier(.2,.8,.2,1)}
.dim .ends{display:flex;justify-content:space-between;font-size:11px;color:var(--sub);margin-top:6px}
.card{background:#fff;border:1px solid var(--line);border-radius:20px;padding:20px}
.list li{list-style:none;position:relative;padding-left:22px;font-size:15px;line-height:1.85;margin-bottom:8px;color:#3D3848}
.list li:before{content:"";position:absolute;left:4px;top:11px;width:7px;height:7px;border-radius:50%;border:1.5px solid var(--c)}
.mt{display:flex;gap:14px;align-items:center;margin-bottom:12px}.mt svg{width:72px;height:72px;flex:none}
.mt .lb{font-size:11px;letter-spacing:.2em;color:var(--sub)}.mt h4{font-family:var(--serif);font-size:19px;margin-top:2px}
.word{background:var(--ink);color:#fff;border-radius:22px;padding:28px 24px;text-align:center}
.word .lb{font-size:10px;letter-spacing:.4em;opacity:.6}.word p{font-family:var(--serif);font-size:19px;line-height:1.8;color:#fff;margin:12px 0 0;text-align:center}
.quote{text-align:center;padding:10px 6px}.quote .q1{font-family:Georgia,serif;font-style:italic;font-size:17px;line-height:1.6}.quote .q2{font-family:var(--serif);color:var(--sub);font-size:14px;margin-top:10px}
.quote:before{content:"“";display:block;font-family:Georgia,serif;font-size:56px;line-height:.6;color:var(--c);opacity:.5;margin-bottom:6px}
.acts{padding:34px 24px 0;display:grid;gap:12px}
input.nick{width:100%;border:1px solid var(--line);border-radius:14px;padding:14px 16px;font-size:15px;background:#fff;outline:none;font-family:var(--sans)}input.nick:focus{border-color:var(--ink)}
/* compat */
.pair{display:flex;align-items:center;justify-content:center;gap:4px;margin-top:14px}.pair svg{width:130px;height:130px}
.pair .x{font-family:var(--serif);font-size:22px;color:var(--sub)}
.pnames{display:flex;justify-content:space-around;font-size:13px;color:var(--sub);margin-top:6px}.pnames b{display:block;font-family:var(--serif);font-size:16px;color:var(--ink)}
.score{position:relative;width:150px;height:150px;margin:20px auto 0}.score svg{width:100%;height:100%;transform:rotate(-90deg)}
.score>div{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}.score b{font-family:var(--serif);font-size:44px}.score span{font-size:11px;letter-spacing:.2em;color:var(--sub)}
/* modal */
.mask{position:fixed;inset:0;background:rgba(24,20,32,.88);backdrop-filter:blur(6px);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:30;padding:24px;animation:fadein .3s both}
.mask img{max-width:86%;max-height:74vh;border-radius:14px;box-shadow:0 20px 50px rgba(0,0,0,.4);animation:pop .6s cubic-bezier(.3,1.4,.5,1) both}
.mask p{color:#fff;margin:18px 0 14px;font-size:14px;letter-spacing:.08em}.mask button{background:#fff;border:0;border-radius:999px;padding:10px 30px;font-size:14px}
.toast{position:fixed;left:50%;bottom:40px;transform:translateX(-50%);background:var(--ink);color:#fff;padding:10px 20px;border-radius:999px;font-size:13px;z-index:40;animation:in .3s both}

.hero .kicker{margin-top:18px}

#app{opacity:0;transition:opacity .35s}html.fl #app{opacity:1}
.stat em{display:block;font-style:normal;font-family:var(--serif);font-weight:700;font-size:15px;margin-top:2px}
.tier{display:block;font-style:normal;margin-top:6px;font-size:12px;color:#fff;background:var(--c);padding:3px 10px;border-radius:999px;letter-spacing:.1em}
.sheet{background:var(--paper);border-radius:24px;padding:26px 22px;width:100%;max-width:380px;text-align:center}
.sheet .hint{color:var(--sub);font-size:13px;margin:8px 0 14px;letter-spacing:0}
.linkbox{background:#fff;border:1px dashed var(--line);border-radius:14px;padding:14px;font-size:13px;line-height:1.7;text-align:left;word-break:break-all;margin-bottom:14px;-webkit-user-select:text;user-select:text;color:var(--ink)}
.pnames b,.invite b{font-family:var(--sans)!important}

.locked{position:relative;margin-top:6px}
.blur{filter:blur(5px);opacity:.55;font-size:15px;line-height:2;user-select:none;pointer-events:none;height:150px;overflow:hidden}
.lockcard{position:relative;margin-top:-90px;background:#fff;border:1px solid var(--line);border-radius:24px;padding:26px 22px 22px;text-align:center;box-shadow:0 20px 50px rgba(34,30,46,.10)}
.lk{width:48px;height:48px;border-radius:50%;background:var(--c2);display:flex;align-items:center;justify-content:center;margin:-50px auto 12px;font-size:20px;border:4px solid #fff}
.perks{list-style:none;text-align:left;margin:16px 0 18px;padding:14px 16px;background:var(--paper);border-radius:16px}
.perks li{font-size:13.5px;line-height:2;color:#3D3848;padding-left:20px;position:relative}.perks li:before{content:"✓";position:absolute;left:0;color:var(--c);font-weight:700}
.codein{display:flex;align-items:center;border:1.5px solid var(--line);border-radius:16px;padding:0 16px;background:#fff;transition:border-color .2s}
.codein:focus-within{border-color:var(--ink)}.codein.bad{border-color:#E0525E;animation:shake .4s}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.codein span{font-family:ui-monospace,Menlo,monospace;color:var(--sub);font-size:17px;letter-spacing:.06em}
.codein input{flex:1;border:0;outline:0;padding:15px 4px;font-size:17px;font-family:ui-monospace,Menlo,monospace;letter-spacing:.12em;background:transparent;color:var(--ink);min-width:0}
.cerr{min-height:20px;color:#E0525E;font-size:12.5px;line-height:1.5;margin:8px 0 6px}
.chint{font-size:11.5px;color:var(--sub);margin-top:12px}
.btn:disabled{opacity:.6}
/* ===== premium layer ===== */
body:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:60;opacity:.045;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.land h1{letter-spacing:.03em}.rep{counter-reset:sec}
.rep .sec h3{counter-increment:sec;font-size:21px;letter-spacing:.04em;padding-top:18px;border-top:1px solid var(--line);flex-wrap:wrap}
.rep .sec h3:before{content:counter(sec,decimal-leading-zero);font-family:Georgia,serif;font-style:italic;font-size:13px;color:var(--c);width:100%;letter-spacing:.2em;margin-bottom:2px;background:none;height:auto;border-radius:0;align-self:auto}
.rep .sec h3 small{margin-left:auto}
.card,.stat,.lockcard{background:linear-gradient(160deg,rgba(255,255,255,.95),rgba(255,255,255,.72));backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 1px 0 #fff inset,0 14px 34px rgba(80,50,120,.07)}
.scene{padding:18px 18px 4px;margin-bottom:12px;border-radius:20px;background:linear-gradient(135deg,color-mix(in srgb,var(--c) 12%,#fff),#fff);border:1px solid var(--line);box-shadow:0 10px 26px rgba(80,50,120,.05)}
.scene .sh{display:flex;align-items:center;gap:10px;font-family:var(--serif);font-size:16px;margin-bottom:8px}
.scene .sh span{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#fff;font-size:14px;color:var(--c);box-shadow:0 4px 10px rgba(80,50,120,.08)}
.job{display:flex;gap:16px;padding:16px 0;border-bottom:1px solid var(--line)}.job:last-child{border:0}
.job b{font-family:Georgia,serif;font-style:italic;font-size:28px;color:var(--c);line-height:1;min-width:38px}
.job h4,.fam h4,.wk h4{font-family:var(--serif);font-size:16px;margin-bottom:4px}
.job p,.fam p,.wk p{font-size:14px!important;color:var(--sub)!important;margin:0!important;line-height:1.75!important}
.fam{display:grid;gap:10px}.fam>div{padding:16px 18px;border-radius:18px;background:#fff;border:1px solid var(--line);position:relative}
.fam>div:after{content:"♡";position:absolute;right:14px;top:12px;color:var(--c);opacity:.55}
.trap{border-radius:18px;overflow:hidden;margin-bottom:12px;border:1px solid var(--line);background:#fff}
.trap .tq{padding:14px 18px;font-family:var(--serif);font-size:15px}.trap .tq:before{content:"⚠ ";color:#E07A5F}
.trap .ta{padding:14px 18px;font-size:14px;line-height:1.8;background:var(--c2)}.trap .ta b{color:var(--c)}
.plan{position:relative}.plan:before{content:"";position:absolute;left:15px;top:10px;bottom:10px;width:1px;background:linear-gradient(var(--c),transparent)}
.wk{display:flex;gap:16px;padding:10px 0 14px;position:relative}
.wk i{flex:none;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font-style:normal;font-family:Georgia,serif;font-size:14px;background:#fff;border:1.5px solid var(--c);color:var(--c);z-index:1}
.hero h1{font-size:42px;letter-spacing:.06em}.hero .art{animation:float 6s ease-in-out infinite}
.card.glow{border-color:color-mix(in srgb,var(--c) 35%,var(--line));background:linear-gradient(180deg,var(--c2),#fff)}
.sec{animation:in .6s cubic-bezier(.2,.8,.2,1) both}
