@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}
/* ===== talent dark theme ===== */
:root{--ink:#F3EBDD;--sub:#A9A4BE;--line:rgba(243,227,181,.16);--paper:#0E1024;--gold:#E9C46A;--c:#E9C46A;--c2:#2A2240;--card:rgba(255,255,255,.045)}
html,body{background:#0E1024}
body{background:radial-gradient(1px 1px at 20% 30%,rgba(255,255,255,.5),transparent),radial-gradient(1px 1px at 70% 12%,rgba(255,255,255,.4),transparent),radial-gradient(1.5px 1.5px at 85% 60%,rgba(255,240,200,.5),transparent),radial-gradient(1px 1px at 35% 80%,rgba(255,255,255,.35),transparent),radial-gradient(1200px 600px at 50% -10%,#1E2350,#0E1024 60%) fixed}
.btn{background:linear-gradient(135deg,#F3E3B5,#D9A94E);color:#1A1530}.btn.c{background:var(--c);color:#14112A}.btn.ghost{background:transparent;color:var(--ink);border:1.5px solid var(--line)}
.land h1{font-size:34px;margin-top:6px}.land h1 em{background:none;color:var(--gold);font-style:normal}
.orbit{position:relative;height:290px;margin:4px -24px 6px}
.orbit .em{position:absolute;animation:float 5s ease-in-out infinite;filter:drop-shadow(0 6px 16px rgba(0,0,0,.5))}
.orbit .core{position:absolute;left:50%;top:140px;transform:translate(-50%,-50%);text-align:center}.orbit .big{font-size:64px;line-height:1;color:var(--gold);margin:4px 0}
.meta div+div{border-left:1px solid var(--line)}
.invite,.opt,.back,.stat,.card,input.nick,.codein,.linkbox{background:var(--card)!important;color:var(--ink)}
.opt.on{background:var(--gold)!important;color:#14112A;border-color:var(--gold)}.opt.on span{background:#14112A;color:var(--gold);border-color:#14112A}
.prog i{background:linear-gradient(90deg,#F3E3B5,#D9A94E)}
.hero{background:radial-gradient(circle at 50% 35%,var(--c2),transparent 70%),linear-gradient(180deg,rgba(255,255,255,.04),transparent);border-bottom:1px solid var(--line)}
.hero .tl{background:rgba(255,255,255,.08);color:var(--ink)}
.sec p,.list li{color:#D9D2C4}.card p{color:#D9D2C4}
.word{background:linear-gradient(135deg,rgba(243,227,181,.14),rgba(255,255,255,.03));border:1px solid var(--line)}
.glow{box-shadow:0 0 0 1px var(--c),0 0 30px -8px var(--c)}
.chips{display:flex;flex-wrap:wrap;gap:10px}.chips span{padding:10px 14px;border-radius:999px;border:1px solid var(--c);color:var(--ink);font-size:13.5px;background:rgba(255,255,255,.04)}
.reveal{background:radial-gradient(circle at 50% 40%,var(--c2),#0B0D1E 75%)}
.reveal .big svg,.hero .art svg{width:100%;height:100%;filter:drop-shadow(0 0 30px var(--c))}
.orb i{border-color:var(--gold)}
.lockcard{background:#171A36;box-shadow:0 20px 50px rgba(0,0,0,.4)}.lk{background:var(--c);color:#14112A;border-color:#171A36}
.perks{background:rgba(255,255,255,.04)}
.blur{color:#D9D2C4}
.sheet{background:#171A36;color:var(--ink)}
.toast{background:#F3E3B5;color:#14112A}
.mask button{background:#F3E3B5}
.sec .fine,.note{color:#7E7A95}
.track{background:rgba(255,255,255,.08)}
.quote .q1{color:var(--ink)}
.linkbtn{color:var(--sub)}
.codein span{color:var(--sub)}.codein input{color:var(--ink)}
.mt svg{width:72px;height:72px}
.land .lead{color:#C9C2B4}.land .lead b{color:var(--ink)}.qtext{color:var(--ink)}
.linkbtn{background:none!important;box-shadow:none!important;color:var(--sub)!important;border:0}.linkbox{background:rgba(255,255,255,.06);color:var(--ink)}
/* ===== premium layer ===== */
body:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:60;opacity:.07;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.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{background:none;height:auto;border-radius:0;align-self:auto;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}
.rep .sec h3 small{margin-left:auto}
.card,.stat,.lockcard{background:linear-gradient(160deg,rgba(255,255,255,.08),rgba(255,255,255,.025));border:1px solid rgba(243,227,181,.14);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 1px 0 rgba(255,255,255,.06) inset,0 18px 40px rgba(0,0,0,.25)}
.sec p{color:#E6DFD2;line-height:1.95}
.card p b,.sec p b{color:var(--c);font-weight:600}
.scene{position:relative;padding:18px 18px 4px 18px;margin-bottom:12px;border-radius:20px;background:linear-gradient(135deg,color-mix(in srgb,var(--c) 14%,transparent),rgba(255,255,255,.02));border:1px solid rgba(243,227,181,.12)}
.scene .sh{display:flex;align-items:center;gap:10px;font-family:var(--serif);font-size:16px;margin-bottom:8px;color:var(--ink)}
.scene .sh span{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:rgba(255,255,255,.08);font-size:14px}
.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;color:var(--ink)}
.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;border:1px solid rgba(243,227,181,.14);background:rgba(255,255,255,.03);position:relative;overflow:hidden}
.fam>div:after{content:"✦";position:absolute;right:14px;top:12px;color:var(--c);opacity:.6}
.trap{border-radius:18px;overflow:hidden;margin-bottom:12px;border:1px solid rgba(243,227,181,.14)}
.trap .tq{padding:14px 18px;font-family:var(--serif);font-size:15px;background:rgba(255,255,255,.05)}.trap .tq:before{content:"⚠ ";color:#E9846A}
.trap .ta{padding:14px 18px;font-size:14px;line-height:1.8;color:#E6DFD2;background:color-mix(in srgb,var(--c) 10%,transparent)}.trap .ta b{color:var(--c)}
.plan{position:relative;padding-left:4px}.plan:before{content:"";position:absolute;left:19px;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:var(--paper);border:1.5px solid var(--c);color:var(--c);z-index:1}
.hero h1{font-size:44px;letter-spacing:.06em;background:linear-gradient(180deg,#FFF6E2,#E9C46A);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero .art{animation:float 6s ease-in-out infinite}
.sec{animation:in .6s cubic-bezier(.2,.8,.2,1) both}
.reveal{background:radial-gradient(600px 600px at 50% 45%,color-mix(in srgb,var(--c) 35%,#0E1024),#0B0D1E 70%)}
.reveal h2{background:linear-gradient(180deg,#FFF6E2,#E9C46A);-webkit-background-clip:text;color:transparent;letter-spacing:.08em}
