*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;background:#03050c;color:#e6e8eb}a{color:#7cc4ff;text-decoration:none}a:hover{text-decoration:underline}.app{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:24px;padding:12px 24px;background:#14171c;border-bottom:1px solid #23262c}.brand{font-weight:700;font-size:16px;color:#fff}.topbar nav{display:flex;gap:16px;margin-left:8px}.topbar nav a{color:#aab0b8;font-size:14px;padding:4px 8px;border-radius:4px}.topbar nav a.active{color:#fff;background:#23262c}.topbar .spacer{flex:1}.topbar .health{display:flex;align-items:center;gap:12px;margin-left:auto}main{flex:1;padding:24px;max-width:1200px;width:100%;margin:0 auto}.page{display:flex;flex-direction:column;gap:16px}.card{background:#14171c;border:1px solid #23262c;border-radius:8px;padding:20px}.muted{color:#8b909a;font-size:13px}button{padding:8px 16px;border-radius:6px;border:1px solid #2f3339;background:#1e2126;color:#e6e8eb;font-size:14px;cursor:pointer}button:hover:not(:disabled){background:#26292f}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:#4b7cff;border-color:#4b7cff;color:#fff}button.primary:hover:not(:disabled){background:#3a68e6}button.danger{background:transparent;border-color:#b04949;color:#ff8080}input,select,textarea{padding:8px 12px;border-radius:6px;border:1px solid #2f3339;background:#0f1114;color:#e6e8eb;font-size:14px;font-family:inherit;width:100%}input:focus,select:focus,textarea:focus{outline:none;border-color:#4b7cff}label{display:block;margin-bottom:6px;font-size:13px;color:#b8bec7}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:10px 8px;text-align:left;border-bottom:1px solid #23262c}th{color:#8b909a;font-weight:500}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;background:#2a2f38;color:#cfd3da}.badge.admin{background:#3d2e5c;color:#d5b8ff}.badge.inactive{background:#4a2a2a;color:#ffb0b0}.badge.temp{background:#4a3a2a;color:#ffd08a}.ok{color:#6ede8a;font-size:12px}.err{color:#ff8080;font-size:12px}.center{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px}.auth-card{width:100%;max-width:400px;background:#14171c;border:1px solid #23262c;border-radius:10px;padding:32px}.auth-card h2{margin:0 0 8px}.auth-card .form-group{margin-bottom:16px}.auth-card button{width:100%;margin-top:8px}.tool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.tool-card{background:#14171c;border:1px solid #23262c;border-radius:10px;padding:20px;cursor:pointer;transition:border-color .15s}.tool-card:hover{border-color:#4b7cff}.tool-card h3{margin:0 0 8px;font-size:16px}.tool-card .desc{color:#8b909a;font-size:13px;margin-bottom:12px}*.tool-card .stats{display:flex;gap:16px;font-size:12px;color:#b8bec7}.cosmos-root{position:fixed;inset:0;overflow:hidden;background:#01020a}.cosmos-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0}.orbit-svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}.scene{position:absolute;inset:0;z-index:1}.main-fullscreen{padding:0!important;max-width:100%!important;margin:0!important;flex:1}.star-brand{position:absolute;left:50%;top:50%;width:8px;height:8px;cursor:pointer;transform:translate(-50%,-50%)}.star-core{position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle at 40% 35%,#fff9e6 0%,#ffd54f 40%,#ff9800 70%,transparent 100%);box-shadow:0 0 3px 1px #ffd54fcc,0 0 7px 2px #ff980066,0 0 14px 5px #ff570033;animation:starBreathe 2.8s ease-in-out infinite}.star-brand:after{content:none}.star-brand.paused .star-core{box-shadow:0 0 3px 1px #fffc,0 0 8px 3px #acf8,0 0 18px 6px #69f4;animation:none;opacity:.7}.star-ripple{position:absolute;width:8px;height:8px;border-radius:50%;transform:translate(-50%,-50%);border:1.5px solid rgba(255,213,79,.8);box-shadow:0 0 12px 4px #ffc8324d;animation:rippleExpand 1s ease-out forwards;pointer-events:none}@keyframes starBreathe{0%,to{opacity:1;transform:scale(1);box-shadow:0 0 3px 1px #ffd54fcc,0 0 7px 2px #ff980066,0 0 14px 5px #ff570033}50%{opacity:.6;transform:scale(.82);box-shadow:0 0 2px 1px #ffd54f88,0 0 5px 2px #ff980033,0 0 9px 3px #ff570018}}@keyframes rippleExpand{0%{transform:translate(-50%,-50%) scale(1);opacity:.9}to{transform:translate(-50%,-50%) scale(4.5);opacity:0}}.portal{position:absolute;transform:translate(-50%,-50%);border-radius:50%;cursor:pointer;text-decoration:none;transition:transform .35s ease}.portal:hover{transform:translate(-50%,-50%) scale(1.1);text-decoration:none}.portal:before{content:"";position:absolute;inset:-18px;border-radius:50%;opacity:.18;transition:opacity .4s ease;background:conic-gradient(from 0deg,var(--ca),var(--cb),transparent 55%,var(--ca));animation:portalSpin 6s linear infinite;filter:blur(8px)}.scene.activated .portal:before,.portal:hover:before{opacity:.92}.portal:after{content:"";position:absolute;inset:-6px;border-radius:50%;opacity:.12;background:conic-gradient(from 180deg,transparent 10%,var(--cb) 35%,var(--ca) 55%,transparent 70%);filter:blur(3px);transition:opacity .4s ease;animation:portalSpin 3.5s linear infinite reverse}.scene.activated .portal:after,.portal:hover:after{opacity:.72}.accretion-disk,.accretion-disk-front{position:absolute;width:200%;height:20%;left:50%;top:50%;border-radius:50%;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--cb) 50%,#fff 50%) 20%,#ffffff 38%,color-mix(in srgb,var(--ca) 60%,#fff 40%) 55%,color-mix(in srgb,var(--cb) 70%,#fff 30%) 72%,transparent 100%);background-size:200% 100%;filter:blur(4px);transition:opacity .4s ease}.accretion-disk{transform:translate(-50%,-50%);z-index:0;opacity:.11;animation:diskScroll 4s linear infinite,diskPulse 7s ease-in-out infinite}.accretion-disk-front{transform:translate(-50%,-50%);z-index:2;opacity:.175;clip-path:inset(50% 0 0 0);animation:diskScroll 4s linear infinite,diskPulse 7s ease-in-out infinite}.scene.activated .accretion-disk,.portal:hover .accretion-disk{opacity:.225}.scene.activated .accretion-disk-front,.portal:hover .accretion-disk-front{opacity:.36;filter:blur(2px)}@keyframes diskScroll{0%{background-position:0% 50%}to{background-position:200% 50%}}@keyframes diskPulse{0%{width:200%;height:20%}18%{width:185%;height:15%}35%{width:215%;height:24%}52%{width:190%;height:17%}70%{width:225%;height:22%}85%{width:195%;height:16%}to{width:200%;height:20%}}@keyframes diskSpin{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.portal-core{position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle at 38% 32%,#1a0a2e 0%,#07041a 45%,#000 65%,transparent 100%);box-shadow:inset 0 0 32px #000000fa,0 0 18px 10px #000000d9,0 0 8px 3px #5050b433;z-index:1;transition:box-shadow .4s ease}.portal:hover .portal-core,.scene.activated .portal .portal-core{box-shadow:inset 0 0 24px #000000f2,0 0 22px 8px var(--ca),0 0 55px 22px var(--cb)}@keyframes glowPulse{0%,to{opacity:.88}50%{opacity:.55}}.scene.activated .portal:before{animation:portalSpin 6s linear infinite,glowPulse 2.5s ease-in-out infinite}.portal-label{position:absolute;top:calc(100% + 18px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:3px;opacity:.3;transition:opacity .35s ease;pointer-events:none;white-space:nowrap;z-index:2}@keyframes portalSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.portal-particles circle{opacity:0;filter:blur(.4px)}.portal-label{position:absolute;top:calc(100% + 12px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:3px;opacity:.3;transition:opacity .35s ease;pointer-events:none;white-space:nowrap;z-index:2}.scene.activated .portal-label,.portal:hover .portal-label{opacity:1}.portal-name{font-size:15px;font-weight:700;color:#f0f2f5;letter-spacing:.03em}.portal-desc{font-size:10px;color:#8a90a0;letter-spacing:.06em}.portal-stats{display:flex;flex-direction:column;align-items:center;gap:2px;margin-top:4px;font-size:10px;color:#b8bec7}.portal-err{font-size:10px;color:#ff8080}.user-indicator{position:absolute;top:20px;right:20px;display:flex;align-items:center;gap:8px;padding:6px 14px;border-radius:20px;background:#14171e99;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(100,120,180,.2);cursor:pointer;font-size:13px;color:#c8cdd6;-webkit-user-select:none;user-select:none;z-index:10}.user-indicator:hover{background:#1e2332bf}.user-indicator-name{display:flex;align-items:center;gap:6px}.user-indicator-admin{font-size:10px;color:#d5b8ff;background:#6432b44d;padding:1px 6px;border-radius:8px}.user-indicator-caret{font-size:10px;color:#8b909a}.user-menu{position:absolute;top:calc(100% + 8px);right:0;background:#0e121eeb;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(100,120,180,.25);border-radius:8px;padding:6px;min-width:130px}.user-menu button{width:100%;background:transparent;border:none;color:#c8cdd6;font-size:13px;padding:8px 12px;text-align:left;border-radius:6px}.user-menu button:hover{background:#ffffff12}.admin-float{position:absolute;bottom:32px;display:flex;align-items:center;gap:8px;padding:10px 18px;border-radius:24px;background:#0e121eb3;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(100,120,180,.25);color:#c8cdd6;font-size:13px;cursor:pointer;transition:background .2s,border-color .2s;z-index:10}.admin-float:hover{background:#1e2846d9;border-color:#648cff66}.admin-float-users{left:32px}.admin-float-anomalies{right:32px}.admin-float-icon{font-size:15px}.admin-float-label{letter-spacing:.03em}.cabin-overlay{filter:brightness(.05);transition:filter 3s ease-out}.cabin-overlay.cabin-lit{filter:brightness(1)}.porthole{opacity:0;transition:opacity .8s ease}.porthole.porthole-visible{opacity:1}.porthole{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:280px;padding:28px 28px 24px;border-radius:50%;background:#06091459;-webkit-backdrop-filter:blur(14px) saturate(1.4);backdrop-filter:blur(14px) saturate(1.4);border:none;z-index:10}.porthole-brand{text-align:center;font-size:13px;letter-spacing:.48em;color:#c8dcffb3;margin-bottom:34px;text-transform:uppercase}.brand-star{display:inline-block;animation:brandStarBreathe 2.4s ease-in-out infinite}@keyframes brandStarBreathe{0%,to{opacity:1;text-shadow:0 0 6px rgba(200,220,255,.9),0 0 14px rgba(160,190,255,.5)}50%{opacity:.3;text-shadow:none}}.porthole-field{margin-bottom:34px}.porthole input{background:transparent;border:none;border-bottom:1px solid rgba(130,160,255,.28);color:#e6e8eb;width:100%;padding:10px 4px;font-size:15px;outline:none;transition:border-color .25s;border-radius:0}.porthole input::placeholder{color:#8c9bb480}.porthole input:focus{border-bottom-color:#8caaffb3}.porthole-err{font-size:12px;color:#ff8080;margin-bottom:12px;text-align:center}.porthole-actions{display:flex;align-items:center;justify-content:space-between;margin-top:34px;padding:0 4px}.porthole .porthole-btn-primary{width:96px;padding:9px 0;background:transparent;border:1px solid transparent;border-radius:6px;color:#d2e1ffbf;font-size:14px;letter-spacing:.06em;cursor:pointer;text-align:center;transition:box-shadow .25s ease,border-color .25s ease,color .25s ease}.porthole .porthole-btn-primary:hover:not(:disabled){color:#fff;border-color:#ffffffa6;background:transparent;box-shadow:0 0 10px 3px #ffffff8c,0 0 28px 8px #c8d7ff40,inset 0 0 12px #ffffff0f}.porthole .porthole-btn-primary:disabled{opacity:.4;cursor:not-allowed}.porthole .porthole-btn-ghost{width:96px;padding:9px 0;font-size:13px;color:#aab9dcb3;text-decoration:none;border-radius:6px;border:1px solid transparent;background:transparent;white-space:nowrap;text-align:center;transition:color .25s ease,border-color .25s ease,box-shadow .25s ease;display:inline-block;cursor:pointer;line-height:1}.porthole .porthole-btn-ghost:hover{color:#fff;text-decoration:none;border-color:#ffffff8c;background:transparent;box-shadow:0 0 10px 3px #ffffff80,0 0 26px 7px #c8d7ff33}.back-btn{padding:5px 12px;font-size:13px;background:transparent;border:1px solid #2f3339;color:#8b909a;border-radius:6px;cursor:pointer}.back-btn:hover{color:#e6e8eb;border-color:#4b7cff}.rocket-launcher{position:fixed;right:28px;bottom:108px;z-index:500;pointer-events:none}.rocket-btn{pointer-events:auto;position:relative;width:64px;height:64px;border-radius:50%;border:1px solid rgba(120,180,255,.25);background:radial-gradient(circle at 30% 30%,#8cbeff59,#141e3ce6 60%),#0a0e1ed9;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 20px #5082ff40,inset 0 0 12px #78b4ff26;transition:transform .25s ease,box-shadow .25s ease;animation:rocket-hover 3.2s ease-in-out infinite;padding:0}.rocket-btn:hover{transform:scale(1.08) translateY(-2px);box-shadow:0 6px 28px #78b4ff80,inset 0 0 16px #96c8ff40}@keyframes rocket-hover{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}.rocket-icon{font-size:28px;line-height:1;display:inline-block;transform:rotate(-45deg);filter:drop-shadow(0 0 6px rgba(160,200,255,.7))}.rocket-flame{position:absolute;bottom:6px;right:10px;width:8px;height:14px;background:radial-gradient(ellipse at top,#fff 0%,#ffb84d 45%,transparent 75%);border-radius:50% 50% 40% 40%;transform:rotate(45deg);opacity:.75;animation:rocket-flame-flicker .18s steps(2) infinite;filter:blur(.4px)}@keyframes rocket-flame-flicker{0%{transform:rotate(45deg) scaleY(1);opacity:.75}to{transform:rotate(45deg) scaleY(.7);opacity:.9}}.rocket-hint{position:absolute;right:76px;top:50%;transform:translateY(-50%);padding:6px 12px;background:#0a0e1ee6;border:1px solid rgba(120,180,255,.25);border-radius:20px;font-size:12px;color:#d5e4ff;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;transform:translateY(-50%) translate(6px)}.rocket-btn:hover .rocket-hint{opacity:1;transform:translateY(-50%) translate(0)}.rocket-btn-flying{pointer-events:none;animation:rocket-launch 1.4s cubic-bezier(.4,.05,.7,.3) forwards}@keyframes rocket-launch{0%{transform:translate(0) rotate(0) scale(1);opacity:1}20%{transform:translate(calc((60px - 50vw)*.08),calc((140px - 50vh)*.35)) rotate(-20deg) scale(.95);opacity:1}45%{transform:translate(calc((60px - 50vw)*.28),calc((140px - 50vh)*.7)) rotate(-32deg) scale(.8);opacity:1}70%{transform:translate(calc((60px - 50vw)*.6),calc((140px - 50vh)*.92)) rotate(-42deg) scale(.55);opacity:1}90%{transform:translate(calc(60px - 50vw),calc(140px - 50vh)) rotate(-50deg) scale(.25);opacity:1}to{transform:translate(calc(60px - 50vw),calc(140px - 50vh)) rotate(-50deg) scale(.1);opacity:0}}.rocket-star-target{position:fixed;left:50%;top:50%;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:#fff;box-shadow:0 0 #fff0;opacity:0;animation:rocket-star-appear 2.4s ease-out forwards}@keyframes rocket-star-appear{0%,45%{opacity:0;transform:scale(.5);box-shadow:0 0 #fff0}58%{opacity:1;transform:scale(1);box-shadow:0 0 24px 6px #c8dcffd9}75%{opacity:1;transform:scale(2.6);box-shadow:0 0 80px 24px #fff0c8}to{opacity:0;transform:scale(1.2);box-shadow:0 0 40px 8px #fff0}}.rocket-explosion{position:fixed;left:50%;top:50%;width:4px;height:4px;margin:-2px 0 0 -2px;border-radius:50%;background:#fff;opacity:0;animation:rocket-explosion 2.4s ease-out forwards;pointer-events:none}@keyframes rocket-explosion{0%,55%{opacity:0;transform:scale(.5);box-shadow:0 0 #fff0}62%{opacity:1;transform:scale(1);box-shadow:0 0 40px 20px #fff0c8f2,0 0 120px 40px #ffb46499}to{opacity:0;transform:scale(6);box-shadow:0 0 20px 8px #fff0}}.rocket-meteor{position:fixed;left:50%;top:50%;width:200px;height:2px;background:linear-gradient(to left,#fff0,#ffffffe6 30%,#b4d2ff 70%,#fff);border-radius:2px;opacity:0;transform-origin:right center;animation:rocket-meteor 2.4s ease-out forwards;filter:drop-shadow(0 0 6px rgba(180,220,255,.9));pointer-events:none}@keyframes rocket-meteor{0%,62%{opacity:0;transform:translate(0) rotate(15deg) scaleX(.2)}68%{opacity:1;transform:translate(0) rotate(15deg) scaleX(1)}to{opacity:0;transform:translate(140vw,-30vh) rotate(15deg) scaleX(1.5)}}.rocket-message{pointer-events:none;position:absolute;right:0;bottom:84px;padding:10px 18px;background:linear-gradient(135deg,#1e2850f2,#3c1e64e6);border:1px solid rgba(180,210,255,.35);border-radius:22px;font-size:14px;letter-spacing:.5px;color:#fff;white-space:nowrap;box-shadow:0 6px 24px #78b4ff59;animation:rocket-msg 3s ease-out forwards}@keyframes rocket-msg{0%{opacity:0;transform:translateY(8px) scale(.9)}15%{opacity:1;transform:translateY(0) scale(1)}80%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-6px) scale(.95)}}.rocket-safari-guide{position:absolute;right:0;bottom:84px;min-width:200px;padding:14px 36px 12px 16px;background:linear-gradient(135deg,#1e2850f7,#3c1e64ed);border:1px solid rgba(180,210,255,.35);border-radius:16px;box-shadow:0 6px 24px #78b4ff59;animation:rocket-safari-in .3s ease-out forwards}.rocket-safari-guide-title{font-size:11px;color:#b4d2ffa6;margin-bottom:6px;letter-spacing:.5px}.rocket-safari-guide-step{font-size:14px;color:#fff;letter-spacing:.3px;line-height:1.5}.rocket-safari-guide-close{position:absolute;top:8px;right:8px;background:none;border:none;color:#b4d2ff8c;cursor:pointer;font-size:12px;padding:2px 5px;line-height:1;border-radius:4px}.rocket-safari-guide-close:hover{color:#fff;background:#b4d2ff1f}@keyframes rocket-safari-in{0%{opacity:0;transform:translateY(8px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@media(prefers-reduced-motion:reduce){.rocket-btn{animation:none}.rocket-flame{animation:none;opacity:.7}}.binary-star-link{position:absolute;top:18%;right:18%;display:flex;flex-direction:column;align-items:center;gap:10px;text-decoration:none;z-index:10;opacity:.45;transition:opacity .3s ease}.binary-star-link:hover{opacity:1;text-decoration:none}.binary-system{position:relative;width:52px;height:52px}.binary-arm{position:absolute;top:50%;left:50%;width:19px;height:0;transform-origin:0 0}.binary-arm-a{animation:binaryOrbit 2.8s linear infinite}.binary-arm-b{animation:binaryOrbit 2.8s linear infinite;animation-delay:-1.4s}.binary-dot{position:absolute;left:19px;top:-4px;width:8px;height:8px;border-radius:50%}.binary-dot-a{background:radial-gradient(circle at 35% 30%,#fff 0%,#c8e8ff 40%,#7ab8ff 70%,transparent 100%);box-shadow:0 0 3px 1px #a8d4ffcc,0 0 8px 3px #5090ff66,0 0 18px 6px #3060ff22;animation:binaryBreath 2.8s ease-in-out infinite}.binary-dot-b{background:radial-gradient(circle at 35% 30%,#fff9e0 0%,#ffd580 40%,#ff8c30 70%,transparent 100%);box-shadow:0 0 3px 1px #ffd060cc,0 0 8px 3px #ff900066,0 0 18px 6px #ff600022;animation:binaryBreath 2.8s ease-in-out infinite reverse}@keyframes binaryOrbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes binaryBreath{0%,to{opacity:1;transform:scale(1)}50%{opacity:.65;transform:scale(.8)}}.binary-star-link:hover .binary-arm-a,.binary-star-link:hover .binary-arm-b,.scene.activated .binary-star-link .binary-arm-a,.scene.activated .binary-star-link .binary-arm-b{animation-duration:1.1s}.binary-star-link:hover .binary-dot-a,.scene.activated .binary-star-link .binary-dot-a{box-shadow:0 0 5px 2px #c0dcffee,0 0 14px 5px #5090ffcc,0 0 30px 10px #3060ff55}.binary-star-link:hover .binary-dot-b,.scene.activated .binary-star-link .binary-dot-b{box-shadow:0 0 5px 2px #ffe090ee,0 0 14px 5px #ff9000cc,0 0 30px 10px #ff600055}.scene.activated .binary-star-link{opacity:1}.binary-label{display:flex;flex-direction:column;align-items:center;gap:2px;pointer-events:none}.binary-name{font-size:13px;font-weight:700;color:#c8dcf8;letter-spacing:.03em}.binary-desc{font-size:10px;color:#7a9abf;letter-spacing:.06em}
