:root{--noc-1:#05080F;--noc-2:#080D18;--noc-0:#02040A;--blue:#2563EB;--blue-light:#3B82F6;--blue-dark:#1D4ED8;--cyan:#22D3EE;--navy:#0F172A;--deco-grid:.028;--deco-map:.065;--deco-rings:.05;--deco-net:.055;--deco-particles:.10;--deco-wave:.06;--card:#FFFFFF;--ink:#111827;--ink-soft:#374151;--muted:#6B7280;--line:#E5E7EB;--line-soft:#F3F4F6;--field:#FFFFFF;--field-focus:#FFFFFF;--placeholder:#9CA3AF;--ok:#15803D;--ok-bg:#F0FDF4;--ok-line:#BBF7D0;--err:#B91C1C;--err-bg:#FEF2F2;--err-line:#FECACA;--warn:#B45309;--warn-bg:#FFFBEB;--warn-line:#FDE68A;--font:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;--r-card:26px;--r-ctl:12px;--card-w:500px;--card-minh:min(80vh,740px);--card-pad:40px;--field-h:46px;--btn-h:46px;--shadow-card:0 30px 80px rgba(0,0,0,.15);--shadow-btn:0 8px 24px -8px rgba(37,99,235,.55)}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{font-family:var(--font);color:var(--ink);background:var(--noc-1);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;overflow:hidden}.noc{position:fixed;inset:0;display:grid;grid-template-columns:60% 40%;min-height:100vh;overflow:hidden;--stage-cx:30%;background:radial-gradient(760px 640px at var(--stage-cx) 36%,rgba(37,99,235,.22),transparent 66%),radial-gradient(520px 380px at var(--stage-cx) 52%,rgba(34,211,238,.10),transparent 70%),linear-gradient(150deg,var(--noc-2) 0%,var(--noc-1) 52%,var(--noc-0) 100%)}.noc-stage{grid-column:1;grid-row:1;position:relative;z-index:1;min-width:0;display:flex;align-items:center;justify-content:center;padding:36px 56px}.noc-deco{grid-column:1 / -1;grid-row:1;position:relative;z-index:0;pointer-events:none;overflow:hidden}.noc-deco>*{position:absolute}.deco-grid{inset:-2px;opacity:var(--deco-grid);background-image:linear-gradient(to right,rgba(147,197,253,.9) 1px,transparent 1px),linear-gradient(to bottom,rgba(147,197,253,.9) 1px,transparent 1px);background-size:64px 64px;-webkit-mask-image:radial-gradient(78% 96% at var(--stage-cx) 45%,#000 22%,transparent 100%);mask-image:radial-gradient(78% 96% at var(--stage-cx) 45%,#000 22%,transparent 100%)}.deco-map{top:0;bottom:0;left:var(--stage-cx);width:104%;transform:translateX(-50%);opacity:var(--deco-map);background:url('/static/assets/brand/world-dots.svg') no-repeat center 46%;background-size:100% auto;-webkit-mask-image:radial-gradient(58% 78% at 50% 46%,#000 30%,transparent 100%);mask-image:radial-gradient(58% 78% at 50% 46%,#000 30%,transparent 100%)}.deco-rings{top:50%;left:var(--stage-cx);width:min(1180px,66%);height:auto;aspect-ratio:1;transform:translate(-50%,-54%);opacity:var(--deco-rings);overflow:visible}.deco-rings circle{fill:none;stroke:var(--cyan);stroke-width:1;transform-origin:450px 450px}.deco-rings .r-a{animation:ring-cw 120s linear infinite}.deco-rings .r-b{animation:ring-ccw 170s linear infinite;stroke:var(--blue-light)}.deco-rings .r-c{animation:ring-cw 220s linear infinite}@keyframes ring-cw{to{transform:rotate(360deg)}}@keyframes ring-ccw{to{transform:rotate(-360deg)}}.deco-net{inset:0;width:100%;height:100%;opacity:var(--deco-net)}.deco-net .link{fill:none;stroke:#93C5FD;stroke-width:1;stroke-linecap:round}.deco-net .node{fill:none;stroke:#BFDBFE;stroke-width:1.4}.deco-net .node-core{fill:#93C5FD;stroke:none}.deco-net .flow{fill:none;stroke:var(--cyan);stroke-width:1.6;stroke-linecap:round;stroke-dasharray:26 520;animation:flow 9s linear infinite}.deco-net .flow.f2{stroke:var(--blue-light);animation-duration:13s;animation-delay:-4s}.deco-net .flow.f3{animation-duration:16s;animation-delay:-9s}.deco-net .flow.f4{stroke:var(--blue-light);animation-duration:11s;animation-delay:-6s}@keyframes flow{from{stroke-dashoffset:546}to{stroke-dashoffset:0}}.deco-particles{inset:0;opacity:var(--deco-particles)}.deco-particles i{position:absolute;left:var(--x);top:var(--y);width:var(--s,3px);height:var(--s,3px);border-radius:50%;background:var(--cyan);box-shadow:0 0 8px 2px rgba(34,211,238,.55);animation:drift var(--d,26s) ease-in-out var(--t,0s) infinite alternate}.deco-particles i:nth-child(even){background:var(--blue-light);box-shadow:0 0 8px 2px rgba(59,130,246,.5)}@keyframes drift{from{transform:translate3d(0,0,0);opacity:.35}50%{opacity:1}to{transform:translate3d(var(--dx,18px),var(--dy,-34px),0);opacity:.45}}.deco-wave{left:0;right:0;bottom:0;width:100%;height:34%;opacity:var(--deco-wave);-webkit-mask-image:linear-gradient(to bottom,transparent 0%,#000 46%,#000 78%,transparent 100%);mask-image:linear-gradient(to bottom,transparent 0%,#000 46%,#000 78%,transparent 100%)}.deco-wave path{fill:none;stroke-width:1.2;stroke-linecap:round}.deco-wave .w1{stroke:#60A5FA}.deco-wave .w2{stroke:var(--cyan)}.deco-wave .w3{stroke:#3B82F6}.deco-wave circle{fill:var(--cyan)}.deco-wave .wd-b{fill:#60A5FA}.brand-panel{position:relative;z-index:1;width:100%;max-width:760px;display:flex;flex-direction:column;align-items:center;text-align:center;animation:brand-in .8s .05s both cubic-bezier(.2,.7,.2,1)}@keyframes brand-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.noc-logo{--logo-w:clamp(280px,36vw,620px);position:relative;display:block;line-height:0;margin-bottom:calc(var(--logo-w) * -.13)}.noc-logo::before{content:'';position:absolute;z-index:0;left:50%;top:45%;width:158%;height:158%;transform:translate(-50%,-50%);background:radial-gradient(circle,rgba(37,99,235,.36) 0%,rgba(34,211,238,.13) 40%,transparent 70%);filter:blur(6px);pointer-events:none}.noc-logo::after{content:'';position:absolute;z-index:0;left:50%;bottom:17%;width:40%;height:9%;transform:translateX(-50%);background:radial-gradient(closest-side ellipse,rgba(148,238,255,.80) 0%,rgba(34,211,238,.36) 44%,rgba(34,211,238,.07) 74%,transparent 100%);filter:blur(7px);pointer-events:none}.logo-plinth{position:absolute;z-index:0;left:50%;bottom:13%;width:86%;height:auto;transform:translateX(-50%);overflow:visible;pointer-events:none}.logo-plinth ellipse{fill:none;stroke:var(--cyan);stroke-width:1.4;vector-effect:non-scaling-stroke}.logo-plinth .pl-1{opacity:.55}.logo-plinth .pl-2{opacity:.30;stroke:#7DE8FF}.logo-plinth .pl-3{opacity:.14;stroke:var(--blue-light)}.noc-logo img{position:relative;z-index:1;display:block;width:var(--logo-w);height:auto;animation:logo-float 5s ease-in-out infinite}@keyframes logo-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}.brand-heading{font-size:31px;font-weight:700;line-height:1.2;letter-spacing:.2px;color:#FFFFFF;margin:0;text-wrap:balance}.brand-sub{margin-top:12px;max-width:520px;font-size:17px;font-weight:400;line-height:1.6;color:rgba(255,255,255,.66)}.brand-features{margin-top:30px;display:flex;align-items:center;justify-content:center;gap:42px;flex-wrap:wrap}.feat{display:flex;align-items:center;gap:11px}.feat svg{width:22px;height:22px;flex:none;fill:none;stroke:var(--blue-light);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.feat svg .solid{fill:var(--blue-light);stroke:none}.feat svg.ic-bars{stroke:none}.feat svg.ic-bars rect{fill:var(--blue-light)}.feat svg.ic-bars rect.b1{fill:#60A5FA}.feat span{font-size:15px;font-weight:500;letter-spacing:.1px;color:rgba(255,255,255,.80);white-space:nowrap}.noc-panel{grid-column:2;grid-row:1;z-index:2;position:relative;display:flex;align-items:center;justify-content:center;padding:24px 28px;overflow-y:auto;overscroll-behavior:contain}.login-card{position:relative;width:100%;max-width:var(--card-w);flex:none;background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow-card);padding:var(--card-pad);animation:card-in .4s ease-out both;min-height:var(--card-minh);display:flex;flex-direction:column;justify-content:center}@keyframes card-in{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}.card-title{font-size:30px;font-weight:700;line-height:1.15;letter-spacing:-.7px;color:var(--ink)}.card-sub{margin-top:7px;font-size:14px;font-weight:400;line-height:1.5;color:var(--muted)}.fields{margin-top:20px;display:flex;flex-direction:column;gap:13px}.banner{display:none;font-size:14px;font-weight:500;line-height:1.5;padding:14px 16px;border-radius:12px;border:1px solid transparent}.banner.warn{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn)}.banner.err{background:var(--err-bg);border-color:var(--err-line);color:var(--err)}.banner.err.locked{background:#FFF7ED;border-color:#FED7AA;color:#C2410C}.banner.ok{background:var(--ok-bg);border-color:var(--ok-line);color:var(--ok)}.field{display:flex;flex-direction:column;gap:5px}.field>label{font-size:12.5px;font-weight:500;color:var(--ink-soft);letter-spacing:.1px}.inp-wrap{position:relative;display:flex;align-items:center;height:var(--field-h);background:var(--field);border:1px solid var(--line);border-radius:var(--r-ctl);transition:border-color .2s ease,box-shadow .2s ease,background .2s ease}.inp-wrap:hover{border-color:#D1D5DB}.inp-wrap:focus-within{background:var(--field-focus);border-color:var(--blue);box-shadow:0 0 0 4px rgba(37,99,235,.10)}.inp-wrap .lead{flex:none;display:grid;place-items:center;width:44px;height:100%}.inp-wrap .lead svg{width:18px;height:18px;fill:none;stroke:var(--placeholder);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;transition:stroke .2s ease}.inp-wrap:focus-within .lead svg{stroke:var(--blue)}.inp-wrap input{flex:1;min-width:0;height:100%;border:0;outline:0;background:transparent;font-family:var(--font);font-size:14.5px;font-weight:400;color:var(--ink);padding:0 14px 0 0}.inp-wrap.has-eye input{padding-right:46px}.inp-wrap input::placeholder{color:var(--placeholder)}.inp-wrap input:-webkit-autofill{-webkit-text-fill-color:var(--ink);box-shadow:0 0 0 1000px #fff inset;transition:background-color 9999s ease-out}.eye{position:absolute;right:9px;top:50%;transform:translateY(-50%);width:30px;height:30px;border:0;background:transparent;cursor:pointer;display:grid;place-items:center;border-radius:10px;color:var(--placeholder);transition:color .2s ease,background .2s ease}.eye:hover{color:var(--blue);background:rgba(37,99,235,.07)}.eye:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.eye svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.opt-row{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:2px}.chk{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:400;color:var(--ink-soft);cursor:pointer;user-select:none}.chk input{position:absolute;opacity:0;width:0;height:0}.chk .box{flex:none;width:18px;height:18px;border-radius:5px;border:1.5px solid #D1D5DB;background:#fff;display:grid;place-items:center;transition:background .15s ease,border-color .15s ease}.chk .box svg{width:12px;height:12px;fill:none;stroke:#fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.6);transition:.15s ease}.chk input:checked + .box{background:var(--blue);border-color:var(--blue)}.chk input:checked + .box svg{opacity:1;transform:none}.chk input:focus-visible + .box{box-shadow:0 0 0 4px rgba(37,99,235,.18)}.link{border:0;background:none;padding:0;font-family:var(--font);font-size:13px;font-weight:500;color:var(--blue);cursor:pointer;text-decoration:none}.link:hover{color:var(--blue-dark);text-decoration:underline}.link:focus-visible{outline:2px solid var(--blue);outline-offset:3px;border-radius:4px}.btn-primary{margin-top:18px;width:100%;height:var(--btn-h);display:flex;align-items:center;justify-content:center;gap:10px;border:0;border-radius:var(--r-ctl);cursor:pointer;font-family:var(--font);font-size:15px;font-weight:700;letter-spacing:.2px;color:#fff;background:linear-gradient(180deg,var(--blue) 0%,var(--blue-dark) 100%);box-shadow:var(--shadow-btn);transition:transform .2s ease,box-shadow .2s ease,filter .2s ease}.btn-primary svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.btn-primary:hover{transform:translateY(-2px);box-shadow:0 14px 32px -8px rgba(37,99,235,.60);filter:brightness(1.04)}.btn-primary:active{transform:translateY(0)}.btn-primary:focus-visible{outline:2px solid var(--blue);outline-offset:3px}.btn-primary:disabled{opacity:.7;cursor:default;transform:none;box-shadow:none}.btn-sso{width:100%;height:44px;display:flex;align-items:center;justify-content:center;gap:10px;border:1.5px solid var(--blue);border-radius:var(--r-ctl);cursor:pointer;font-family:var(--font);font-size:14px;font-weight:600;color:var(--blue);background:#fff;transition:background .2s ease,border-color .2s ease}.btn-sso svg{width:18px;height:18px;fill:none;stroke:var(--blue);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.btn-sso:hover{background:#EFF6FF;border-color:var(--blue-dark)}.btn-sso:focus-visible{outline:2px solid var(--blue);outline-offset:3px}.divider{display:flex;align-items:center;gap:14px;margin:15px 0;color:#9CA3AF;font-size:12px;font-weight:500;letter-spacing:1px;text-transform:uppercase}.divider::before,.divider::after{content:'';height:1px;flex:1;background:var(--line)}.card-foot{margin-top:20px;text-align:center}.card-foot .back{font-size:13px;color:var(--muted);margin-bottom:12px}.meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;font-size:12px;color:var(--muted);opacity:.6}.meta .sep{width:3px;height:3px;border-radius:50%;background:#D1D5DB}.tls{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:6px;font-size:11.5px;color:var(--muted);opacity:.6}.tls svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.spin{width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(255,255,255,.45);border-top-color:#fff;animation:spin .7s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width:1500px){:root{--card-w:470px;--card-pad:34px}.brand-heading{font-size:28px}.brand-sub{font-size:15.5px;margin-top:11px}.brand-features{gap:32px;margin-top:26px}.card-title{font-size:28px}.card-sub{font-size:13.5px}}@media (max-width:1180px){.noc{grid-template-columns:46% 54%;--stage-cx:23%}.noc-stage{padding:28px 28px}:root{--card-w:440px;--card-pad:26px;--field-h:44px;--btn-h:44px}.brand-heading{font-size:24px}.brand-sub{font-size:14px;max-width:360px;margin-top:10px}.brand-features{gap:14px;margin-top:26px;flex-direction:column;align-items:flex-start;flex-wrap:nowrap;width:max-content;margin-left:auto;margin-right:auto}.noc-logo{--logo-w:clamp(190px,30vw,340px)}.card-title{font-size:23px}.card-sub{font-size:12.5px;margin-top:5px}.fields{margin-top:14px;gap:9px}.btn-primary{margin-top:13px}.card-foot{margin-top:14px}.card-foot .back{margin-bottom:10px}.divider{margin:11px 0}}@media (max-width:820px){html,body{overflow-x:hidden;overflow-y:auto}.noc{position:static;display:block;width:100%;min-height:100vh;overflow-x:hidden}.noc-stage,.noc-deco{display:none}.noc-panel{width:100%;min-height:100vh;padding:26px 20px;overflow:visible;background:radial-gradient(700px 520px at 50% 8%,rgba(37,99,235,.18),transparent 62%),linear-gradient(180deg,var(--noc-2),var(--noc-1))}.login-card{max-width:460px;margin:auto;min-height:auto}}@media (max-width:480px){:root{--card-pad:22px;--r-card:18px;--field-h:44px;--btn-h:46px}.noc-panel{padding:20px 14px}.card-title{font-size:24px;letter-spacing:-.5px}.card-sub{font-size:13px}.fields{margin-top:16px;gap:11px}.opt-row{flex-wrap:wrap;gap:10px}}@media (max-height:860px) and (min-width:821px){:root{--field-h:40px;--btn-h:42px;--card-pad:24px}.card-title{font-size:25px}.card-sub{font-size:13px;margin-top:5px}.fields{margin-top:14px;gap:9px}.btn-primary{margin-top:13px}.card-foot{margin-top:13px}.card-foot .back{margin-bottom:9px}.divider{margin:11px 0}.noc-panel{padding-top:14px;padding-bottom:14px}.noc-logo{--logo-w:clamp(220px,27vw,460px)}.brand-heading{font-size:27px}.brand-sub{font-size:15px;margin-top:10px}.brand-features{margin-top:22px;gap:34px}}@media (prefers-reduced-motion:reduce){.login-card,.brand-panel{animation:none!important}.noc-logo img,.deco-rings circle,.deco-net .flow,.deco-particles i{animation:none!important}.btn-primary:hover{transform:none}*,*::before,*::after{transition-duration:.01ms!important}}.login-card[hidden]{display:none}.rec-step[hidden]{display:none}.rec-step{display:flex;flex-direction:column;gap:13px}.rec-dots{display:flex;align-items:center;gap:7px;margin-top:14px}.rec-dots i{width:26px;height:4px;border-radius:2px;background:var(--line);transition:background .25s ease}.rec-dots i.on{background:var(--blue)}.rec-hint{margin:0;font-size:12px;font-weight:400;line-height:1.45;color:var(--muted)}.inp-wrap input.mono{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;font-size:15px;letter-spacing:1.4px;text-transform:uppercase}.inp-wrap input.mono::placeholder{letter-spacing:1.4px;text-transform:none}.banner.rec-shown{display:block}.rec-callout{font-size:13px;font-weight:400;line-height:1.55;color:var(--ink-soft);background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:12px;padding:13px 15px}.rec-callout strong{font-weight:600;color:var(--warn)}.rec-code-box{display:flex;align-items:center;gap:10px;background:var(--field);border:1px solid var(--line);border-radius:var(--r-ctl);padding:12px 12px 12px 15px}.rec-code-box code{flex:1;min-width:0;font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;font-size:17px;font-weight:600;letter-spacing:1.6px;color:var(--ink);word-break:break-all;user-select:all}.btn-copy{flex:none;border:1px solid var(--line);background:#fff;font-family:var(--font);font-size:12.5px;font-weight:600;color:var(--blue);padding:8px 13px;border-radius:9px;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}.btn-copy:hover{background:rgba(37,99,235,.07);border-color:var(--blue)}.btn-copy:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.btn-copy.done{color:var(--ok);border-color:var(--ok-line);background:var(--ok-bg)}.rec-back{align-self:center;margin-top:14px}@media (max-height:860px) and (min-width:821px){.rec-dots{margin-top:10px}.rec-step{gap:9px}.rec-back{margin-top:10px}}.btn-primary.busy{cursor:progress}.btn-primary.busy svg{display:none}.btn-primary.busy::before{content:"";width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(255,255,255,.45);border-top-color:#fff;animation:spin .7s linear infinite;display:inline-block;flex:none}@media (prefers-reduced-motion:reduce){.btn-primary.busy::before{animation:none}}