:root{--bg:#070b1d;--bg-2:#0a0f24;--panel:#11183400;--panel-solid:#121a3d;--panel-edge:#d8b56b29;--ink:#f0ead8;--ink-dim:#a7b0cf;--ink-faint:#6d7799;--gold:#e3c078;--gold-deep:#cfa856;--gold-ink:#2a1f06;--ok:#63cf97;--ok-bg:#54be8721;--bad:#e07a6e;--bad-bg:#d6695e1f;--radius:20px;--shadow:0 24px 48px #02040c80, 0 4px 14px #02040c59, inset 0 1px 0 #fff4d60f;--serif:"Songti SC", "STSong", "Noto Serif SC", "Source Han Serif SC", Georgia, serif;--sans:-apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", sans-serif}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--sans);color:var(--ink);background:radial-gradient(1100px 520px at 85% -10%, #4054a847, transparent 60%), radial-gradient(900px 480px at -10% 30%, #2b3a7538, transparent 55%), radial-gradient(700px 380px at 55% 115%, #785c281a, transparent 60%), var(--bg);-webkit-font-smoothing:antialiased;background-attachment:fixed;min-height:100vh}button{cursor:pointer;font-family:inherit}button:disabled{cursor:not-allowed;opacity:.55}input{font-family:inherit}.serif{font-family:var(--serif);letter-spacing:.02em;font-weight:600}.muted{color:var(--ink-dim)}.small{font-size:.82rem}.gold-num{color:var(--gold);font-size:1.15em}.t-ok{color:var(--ok)}.t-bad{color:var(--bad)}.t-gold{color:var(--gold)}.loading{text-align:center;color:var(--ink-dim);padding:64px 0}.loading.full{padding-top:40vh}.card{border:1px solid var(--panel-edge);border-radius:var(--radius);box-shadow:var(--shadow);background:linear-gradient(#2632666b,#0f152fe0)}.card.pad{padding:26px 28px}.card h2.serif{margin:0 0 10px;font-size:1.45rem}.card h3.serif{margin:0 0 12px;font-size:1.15rem}.btn{color:var(--ink);background:#f0ead814;border:1px solid #0000;border-radius:999px;padding:10px 22px;font-size:.95rem;font-weight:600;transition:transform .15s,box-shadow .15s,background .15s}.btn:hover:not(:disabled){background:#f0ead824}.btn:active:not(:disabled){transform:scale(.98)}.btn.primary{background:linear-gradient(180deg, #ecd08a, var(--gold-deep));color:var(--gold-ink);box-shadow:0 8px 20px #cfa85647,inset 0 1px #ffffff8c}.btn.primary:hover:not(:disabled){background:linear-gradient(#f2d894,#d8b465)}.btn.ghost{color:var(--ink-dim);background:0 0;border-color:#f0ead82e}.btn.ghost:hover:not(:disabled){color:var(--ink);background:#f0ead80f}.btn.danger{color:#f0a49b;background:#d6695e29;border-color:#e07a6e73}.btn.big{width:100%;padding:13px 30px;font-size:1.02rem}.btn.small{padding:6px 14px;font-size:.85rem}.progress-track{background:#f0ead81a;border-radius:3px;flex:1;height:6px;overflow:hidden}.progress-fill{background:linear-gradient(90deg, #b98f3e, var(--gold));border-radius:3px;height:100%;transition:width .6s cubic-bezier(.22,1,.36,1);box-shadow:0 0 10px #e3c0788c}.form-error{background:var(--bad-bg);color:#f2b1a8;border:1px solid #e07a6e66;border-radius:12px;margin:10px 0;padding:10px 14px;font-size:.9rem}.ok-note{color:var(--ok);font-size:.9rem}.shell{max-width:1060px;margin:0 auto;padding:0 20px 40px}.topbar{z-index:40;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:linear-gradient(#070b1deb,#070b1dbf);align-items:center;gap:18px;padding:14px 4px;display:flex;position:sticky;top:0}.brand{color:var(--ink);font-family:var(--serif);background:0 0;border:none;align-items:center;gap:8px;padding:4px 0;font-size:1.22rem;font-weight:700;display:flex}.brand-mark{color:var(--gold);text-shadow:0 0 14px #e3c078cc}.topnav{gap:4px;margin-left:12px;display:flex}.topnav button{color:var(--ink-dim);background:0 0;border:none;border-radius:999px;padding:8px 14px;font-size:.98rem}.topnav button:hover{color:var(--ink)}.topnav button.on{color:var(--gold-ink);background:linear-gradient(180deg, #ecd08a, var(--gold-deep));font-weight:700}.topbar-user{align-items:center;gap:10px;margin-left:auto;display:flex}.user-chip{border:1px solid var(--panel-edge);color:var(--gold);background:#e3c07812;border-radius:999px;padding:5px 13px;font-size:.88rem}.main{padding-top:14px}.bottomnav{z-index:40;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);padding:6px 8px calc(6px + env(safe-area-inset-bottom));background:#090d1ff0;border-top:1px solid #d8b56b24;display:none;position:fixed;bottom:0;left:0;right:0}.bottomnav button{color:var(--ink-faint);background:0 0;border:none;border-radius:12px;flex-direction:column;flex:1;align-items:center;gap:2px;padding:5px 0 3px;font-size:.72rem;display:flex}.bottomnav button .bn-icon{font-size:1.05rem}.bottomnav button.on{color:var(--gold)}.auth-wrap{max-width:880px;margin:0 auto;padding:7vh 20px 40px}.auth-hero{text-align:center;padding:30px 0 8px;position:relative}.auth-stars{pointer-events:none;position:absolute;inset:0}.bg-star{opacity:.5;background:#dfe7ff;border-radius:50%;width:3px;height:3px;animation:3.4s ease-in-out infinite twinkle;position:absolute}.bg-star.s1{animation-delay:.6s}.bg-star.s2{animation-delay:1.2s}.bg-star.s3{animation-delay:1.9s}.bg-star.s4{animation-delay:2.6s}@keyframes twinkle{0%,to{opacity:.18}50%{opacity:.75}}.brand-title{font-family:var(--serif);letter-spacing:.06em;margin:0;font-size:3rem;font-weight:700}.brand-title .gold{color:var(--gold);text-shadow:0 0 26px #e3c07873}.brand-sub{color:var(--ink-dim);margin:12px 0 4px;font-size:1.05rem}.brand-note{color:var(--ink-faint);letter-spacing:.14em;margin:0;font-size:.85rem}.auth-card{max-width:420px;margin:30px auto 0;padding:26px 28px}.auth-tabs{background:#f0ead80f;border-radius:999px;margin-bottom:20px;padding:4px;display:flex}.auth-tabs button{color:var(--ink-dim);background:0 0;border:none;border-radius:999px;flex:1;padding:8px 0;font-size:.95rem;font-weight:600}.auth-tabs button.on{background:linear-gradient(180deg, #ecd08a, var(--gold-deep));color:var(--gold-ink)}.field{margin-bottom:14px;display:block}.field span{color:var(--ink-dim);margin-bottom:6px;font-size:.85rem;display:block}.field input{width:100%;color:var(--ink);background:#070b1d8c;border:1px solid #f0ead829;border-radius:12px;outline:none;padding:12px 14px;font-size:1rem;transition:border-color .15s,box-shadow .15s}.field input:focus{border-color:#e3c07899;box-shadow:0 0 0 3px #e3c07824}.auth-tip{color:var(--ink-faint);margin:14px 0 0;font-size:.8rem;line-height:1.55}.home{flex-direction:column;gap:18px;display:flex}.star-card{padding:22px 26px 18px;position:relative;overflow:hidden}.star-card.slim{padding:10px 14px 4px}.star-card-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.star-card-actions{flex-wrap:wrap;gap:10px;display:flex}.star-card-head h2{margin:0 0 4px;font-size:1.5rem}.star-card-head p{margin:0}.starmap{width:100%;height:auto;display:block}.starmap.compact{max-height:300px}.star-card .progress-track{margin-top:6px}.star-pulse{transform-box:fill-box;transform-origin:50%;animation:2s ease-in-out infinite starPulse}@keyframes starPulse{0%,to{opacity:.9;transform:scale(.75)}50%{opacity:.35;transform:scale(1.25)}}.home-grid{grid-template-columns:repeat(3,1fr);gap:18px;display:grid}.entry-card{text-align:left;color:var(--ink);flex-direction:column;gap:7px;padding:22px;font-size:1rem;transition:transform .18s,border-color .18s;display:flex}.entry-card:hover{border-color:#e3c07866;transform:translateY(-3px)}.entry-icon{color:var(--gold);font-size:1.5rem}.entry-title{font-family:var(--serif);font-size:1.18rem;font-weight:700}.entry-desc{color:var(--ink-dim);font-size:.88rem;line-height:1.55}.qcard{padding:28px 30px 24px}.qmeta{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.qtype{color:var(--gold-ink);background:linear-gradient(180deg, #ecd08a, var(--gold-deep));border-radius:999px;padding:3px 11px;font-size:.78rem;font-weight:700}.qid{color:var(--ink-faint);font-size:.85rem}.qhint{color:var(--ink-faint);font-size:.82rem}.qstem{margin:0 0 22px;font-size:1.22rem;font-weight:600;line-height:1.75}.opts{flex-direction:column;gap:11px;display:flex}.opt{text-align:left;width:100%;color:var(--ink);background:#101734a8;border:1px solid #f0ead821;border-radius:15px;align-items:center;gap:13px;padding:14px 16px;font-size:1rem;line-height:1.55;transition:border-color .15s,background .15s,opacity .2s;display:flex;box-shadow:0 6px 16px #02040c47,inset 0 1px #fff4d60d}button.opt:hover:not(:disabled){border-color:#e3c07873}.opt.picked{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold), 0 8px 18px #02040c4d;background:#e3c0781f}.opt.correct{background:var(--ok-bg);border:2px solid #63cf97d9}.opt.missed{border:2px dashed var(--gold);background:#e3c07814}.opt-tag{letter-spacing:.04em;border-radius:999px;flex:none;padding:2px 9px;font-size:.74rem;font-weight:700}.opt-tag.miss{background:var(--gold);color:var(--gold-ink)}.opt-tag.bad{background:var(--bad);color:#2c0b08}.opt.wrong{background:var(--bad-bg);border:2px solid #e07a6ed9;animation:.32s shakeX}.opt.dim{opacity:.42}.opt-key{width:30px;height:30px;color:var(--ink-dim);border:1px solid #f0ead84d;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:.88rem;font-weight:700;display:flex}.opt.picked .opt-key{background:var(--gold);border-color:var(--gold);color:var(--gold-ink)}.opt.correct .opt-key{background:var(--ok);border-color:var(--ok);color:#06250f}.opt.missed .opt-key{border:1.5px solid var(--gold);color:var(--gold);background:0 0}.opt.wrong .opt-key{background:var(--bad);border-color:var(--bad);color:#2c0b08}.opt-text{flex:1}.opt-mark{font-weight:800}.opt.correct .opt-mark{color:var(--ok)}.opt.missed .opt-mark{color:var(--gold)}.opt.wrong .opt-mark{color:var(--bad)}@keyframes shakeX{0%,to{transform:translate(0)}25%{transform:translate(-4px)}55%{transform:translate(3px)}80%{transform:translate(-1px)}}.q-need{color:var(--gold);margin:16px 0 0;font-size:.88rem}.study{flex-direction:column;gap:14px;display:flex}.study-top{align-items:center;gap:14px;display:flex}.study-progress{flex:1;align-items:center;gap:12px;display:flex}.feedback-bar{z-index:30;border:1px solid var(--panel-edge);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#111836eb;border-radius:16px;justify-content:space-between;align-items:center;gap:14px;padding:15px 20px;transition:background .25s,border-color .25s;display:flex;position:sticky;bottom:14px;box-shadow:0 16px 34px #02040c80}.feedback-bar.ok{background:#183e28eb;border-color:#63cf9773}.feedback-bar.bad{background:#42201deb;border-color:#e07a6e66}.fb-text{flex-direction:column;gap:2px;font-size:.98rem;display:flex}.fb-answer{color:var(--ink-dim);font-size:.88rem}.complete-card{text-align:center;padding-top:34px}.complete-title{margin:2px 0 6px;font-size:2rem}.starburst{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.complete-stats{flex-wrap:wrap;justify-content:center;gap:44px;margin:14px 0 8px;display:flex}.complete-stats div{flex-direction:column;gap:3px;display:flex}.complete-stats b{color:var(--gold);font-size:1.35rem}.complete-stats span{color:var(--ink-dim);font-size:.85rem}.complete-actions{margin-top:10px}.exam-intro .rule-list{color:var(--ink-dim);margin:6px 0 18px;padding-left:20px;line-height:2}.exam-intro .rule-list b{color:var(--gold)}.exam-count{margin:4px 0 18px}.exam-count-label{margin-bottom:9px;font-weight:700;display:block}.count-chips{flex-wrap:wrap;gap:8px;display:flex}.chip{border:1px solid var(--panel-edge);color:var(--ink-dim);cursor:pointer;background:#1017348c;border-radius:999px;padding:7px 16px;font-size:.95rem;font-weight:600;transition:border-color .12s,color .12s,background .12s}.chip:hover{border-color:#e3c07880}.chip.on{color:var(--gold);background:#e3c0781a;border-color:#e3c0788c}.chip.custom{cursor:text;align-items:center;gap:8px;display:inline-flex}.chip.custom input{width:76px;color:var(--ink);font:inherit;background:0 0;border:none;outline:none;padding:0}.chip.custom input::placeholder{color:var(--ink-faint);font-size:.85rem}.exam-spec-preview{margin-top:10px}.exam{flex-direction:column;gap:14px;display:flex}.exam-top{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.timer{font-variant-numeric:tabular-nums;border:1px solid var(--panel-edge);color:var(--gold);background:#e3c07812;border-radius:999px;padding:6px 15px;font-size:1.05rem;font-weight:700}.exam-top .btn.primary{margin-left:auto}.answer-card-pop{padding:18px 20px}.answer-grid{grid-template-columns:repeat(10,1fr);gap:7px;display:grid}.cell{aspect-ratio:1;color:var(--ink-dim);background:#101734b3;border:1px solid #f0ead829;border-radius:9px;justify-content:center;align-items:center;padding:0;font-size:.85rem;font-weight:600;transition:border-color .12s,background .12s;display:flex}.cell:hover{border-color:#e3c07880}.cell.done{color:var(--gold);background:#e3c07833;border-color:#e3c07873}.cell.cur{outline:2px solid var(--gold);outline-offset:1px;color:var(--ink)}.cell.ok{background:var(--ok-bg);color:var(--ok);border-color:#63cf9780}.cell.bad{background:var(--bad-bg);color:var(--bad);border-color:#e07a6e73}.exam-nav{justify-content:space-between;display:flex}.exam-result{flex-direction:column;gap:18px;display:flex}.score-card{text-align:center}.score-num{font-family:var(--serif);color:var(--gold);font-size:3rem}.score-num span{color:var(--ink-dim);font-size:1.4rem}.review-meta{color:var(--ink-dim);flex-wrap:wrap;gap:26px;margin-top:16px;font-size:.94rem;display:flex}.stats{flex-direction:column;gap:18px;display:flex}.stat-cards{grid-template-columns:repeat(4,1fr);gap:14px;display:grid}.stat-card{flex-direction:column;gap:5px;padding:18px 20px;display:flex}.stat-card b{color:var(--gold);font-size:1.5rem;font-family:var(--serif)}.stat-card span{color:var(--ink-dim);font-size:.84rem}.stat-card .progress-track{margin-top:7px}.wrong-list{flex-direction:column;display:flex}.wrong-item{border-bottom:1px solid #f0ead814}.wrong-item:last-child{border-bottom:none}.wrong-head{width:100%;color:var(--ink);text-align:left;background:0 0;border:none;align-items:center;gap:12px;padding:13px 2px;font-size:.95rem;display:flex}.wrong-title{flex:1}.wrong-state{color:var(--ink-faint);border:1px solid #f0ead829;border-radius:999px;padding:2px 9px;font-size:.8rem}.wrong-state.lit{color:var(--gold);border-color:#e3c07880}.chev{color:var(--ink-faint)}.wrong-body{padding:2px 0 16px}.wrong-body .qstem{margin-bottom:14px;font-size:1.05rem}.wrong-body .opt{padding:10px 13px;font-size:.94rem}.history-list{margin:0;padding:0;list-style:none}.history-list li{color:var(--ink-dim);border-bottom:1px solid #f0ead814;justify-content:space-between;padding:9px 0;display:flex}.history-list li:last-child{border-bottom:none}.history-list b{color:var(--gold)}.history-list .history-meta{text-align:right}.danger-zone p{margin:0 0 14px}.admin{flex-direction:column;gap:18px;display:flex}.admin h3.admin-sub{margin:20px 0 6px;font-size:1.05rem}.admin-stats{grid-template-columns:repeat(4,1fr);margin-top:14px}.stat-card b .unit{color:var(--ink-dim);font-size:.95rem;font-family:var(--sans)}.search-input{width:100%;max-width:340px;color:var(--ink);background:#070b1d8c;border:1px solid #f0ead829;border-radius:12px;outline:none;margin-top:12px;padding:10px 14px;font-size:.95rem}.search-input:focus{border-color:#e3c07899;box-shadow:0 0 0 3px #e3c07824}.user-table{flex-direction:column;margin-top:8px;display:flex}.user-block{border-bottom:1px solid #f0ead814}.user-block:last-child{border-bottom:none}.user-row{align-items:center;gap:14px;padding:12px 0;display:flex}.user-row.as-btn{width:100%;color:var(--ink);text-align:left;background:0 0;border:none;padding:13px 0;font-size:.95rem}.user-row.as-btn:hover{color:var(--gold)}.user-name{flex-wrap:wrap;flex:1;align-items:center;gap:8px;font-weight:600;display:flex}.badge{color:var(--gold-ink);background:var(--gold);border-radius:999px;padding:2px 8px;font-size:.72rem;font-weight:700}.badge.soft{color:var(--ink-dim);background:#f0ead824}.badge.danger-soft{color:#f0a49b;background:#d6695e33}.user-detail{padding:4px 0 16px;animation:.18s detailIn}@keyframes detailIn{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}.detail-grid{background:#070b1d66;border:1px solid #f0ead814;border-radius:14px;grid-template-columns:repeat(3,1fr);gap:10px 18px;padding:14px 16px;display:grid}.detail-grid div{flex-direction:column;gap:2px;min-width:0;display:flex}.detail-grid span{color:var(--ink-faint);font-size:.78rem}.detail-grid b{overflow-wrap:anywhere;font-size:.95rem;font-weight:600}.detail-actions{gap:10px;margin-top:12px;display:flex}.code-gen{flex-wrap:wrap;align-items:flex-end;gap:12px;margin-top:6px;display:flex}.code-count{color:var(--ink-dim);flex-direction:column;gap:6px;font-size:.85rem;display:flex}.code-count input{width:90px;color:var(--ink);background:#070b1d8c;border:1px solid #f0ead829;border-radius:12px;outline:none;padding:9px 12px;font-size:.95rem}.fresh-codes{color:var(--gold);letter-spacing:.06em;overflow-wrap:anywhere;background:#e3c07814;border:1px dashed #e3c0788c;border-radius:12px;margin-top:14px;padding:12px 16px;font-weight:700;line-height:2}.code-list{flex-direction:column;margin-top:12px;display:flex}.code-row{border-bottom:1px solid #f0ead814;flex-wrap:wrap;align-items:center;gap:12px;padding:9px 0;display:flex}.code-row:last-child{border-bottom:none}.code-text{letter-spacing:.08em;min-width:110px;font-weight:700}.rank{width:24px;height:24px;color:var(--gold);border:1px solid #e3c07880;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:.78rem;font-weight:700;display:flex}.acc-num{font-variant-numeric:tabular-nums;font-weight:700}.table-scroll{-webkit-overflow-scrolling:touch;margin-top:6px;overflow-x:auto}.atable{border-collapse:collapse;width:100%;min-width:480px;font-size:.94rem}.atable th,.atable td{text-align:left;white-space:nowrap;border-bottom:1px solid #f0ead814;padding:10px 12px}.atable th{color:var(--ink-faint);font-size:.82rem;font-weight:600}.atable tbody tr:hover{background:#f0ead808}.pw-form{max-width:420px;margin-top:6px}.modal-backdrop{z-index:80;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#03050ea8;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{border:1px solid var(--panel-edge);border-radius:var(--radius);width:100%;max-width:420px;box-shadow:var(--shadow);background:linear-gradient(#1a2349,#101736);padding:26px 28px}.modal h3{font-family:var(--serif);margin:0 0 10px;font-size:1.2rem}.modal p{color:var(--ink-dim);margin:0 0 20px;font-size:.94rem;line-height:1.65}.modal-actions{justify-content:flex-end;gap:10px;display:flex}@media (width<=720px){.shell{padding:0 13px 108px}.topbar{padding:10px 2px}.topnav{display:none}.brand{font-size:1.08rem}.user-chip{text-overflow:ellipsis;white-space:nowrap;max-width:110px;overflow:hidden}.bottomnav{display:flex}.main{padding-top:8px}.auth-wrap{padding-top:4vh}.brand-title{font-size:2.3rem}.auth-card{padding:22px 20px}.star-card{padding:17px 15px 13px}.home-grid{grid-template-columns:1fr;gap:12px}.entry-card{padding:17px 18px}.qcard{padding:20px 16px 16px}.qstem{font-size:1.08rem;line-height:1.7}.opt{padding:12px 13px;font-size:.97rem}.feedback-bar{padding:13px 15px;bottom:84px}.fb-answer{font-size:.82rem}.stat-cards{grid-template-columns:repeat(2,1fr)}.answer-grid{grid-template-columns:repeat(5,1fr)}.complete-stats{gap:24px}.card.pad{padding:20px 17px}.user-row{flex-wrap:wrap;gap:8px}.admin-stats,.detail-grid{grid-template-columns:repeat(2,1fr)}.search-input{max-width:none}.code-row{gap:8px}.pw-form{max-width:none}}@media (prefers-reduced-motion:reduce){.bg-star,.star-pulse,.opt.wrong{animation:none}.progress-fill{transition:none}}.bank-switch{flex-wrap:wrap;gap:10px;margin-bottom:14px;display:flex}.bank-card{text-align:left;cursor:pointer;color:inherit;font:inherit;background:#10142699;border:1px solid #e3c07838;border-radius:14px;flex-direction:column;flex:150px;gap:4px;padding:12px 14px;display:flex}.bank-card:hover{border-color:#e3c07880}.bank-card.on{background:#e3c0781a;border-color:#e3c078a6}.bank-card-title{font-size:16px;font-weight:600}.bank-card.on .bank-card-title{color:var(--gold,#e3c078)}.bank-card-meta{opacity:.75;font-size:12.5px}.bank-tag{vertical-align:middle;color:var(--gold,#e3c078);background:#e3c07814;border:1px solid #e3c07873;border-radius:999px;margin-left:10px;padding:2px 9px;font-size:12px;font-weight:500;display:inline-block}.study-top .bank-tag{align-self:center;margin-left:0;margin-right:10px}
