:root{--bg: #f4f4f2;--panel: #ffffff;--ink: #0e0e0e;--muted: #5f5f5c;--faint: #9a9a95;--line: #e4e4df;--line-2: #d0d0ca;--field: #fafaf8;--danger: #b42318;--danger-bg: #fbedeb;--sans: "IBM Plex Sans", sans-serif;--mono: "IBM Plex Mono", monospace}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--sans);background:var(--bg);color:var(--ink);min-height:100vh;-webkit-font-smoothing:antialiased}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.panel{width:100%;max-width:408px;background:var(--panel);border:1px solid var(--line-2);border-top:3px solid var(--ink);border-radius:2px}.head{display:flex;align-items:center;gap:10px;padding:18px 28px;border-bottom:1px solid var(--line)}.mark{width:30px;height:30px;border:1.5px solid var(--ink);border-radius:2px;display:grid;place-items:center;flex-shrink:0}.mark svg{width:16px;height:16px}.brand b{font-size:14px;font-weight:600;letter-spacing:-.2px;display:block;line-height:1.15}.brand span{font-family:var(--mono);font-size:10px;color:var(--faint);letter-spacing:.2px}.steps{display:flex;border-bottom:1px solid var(--line)}.step{flex:1;padding:11px 28px;font-family:var(--mono);font-size:11px;letter-spacing:.3px;color:var(--faint);display:flex;align-items:center;gap:8px;transition:color .3s}.step:not(:first-child){border-left:1px solid var(--line)}.step .n{color:var(--faint);transition:color .3s}.step.active,.step.active .n{color:var(--ink)}.step.done{color:var(--muted)}.step.done .n{color:var(--ink)}.pad{padding:28px}.view{display:none}.view.show{display:block;animation:fade .3s}@keyframes fade{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}h1{font-size:19px;font-weight:600;letter-spacing:-.3px;margin-bottom:18px}.lead{font-size:13px;color:var(--muted);line-height:1.55;margin-bottom:22px}.lead .mono{font-family:var(--mono);font-size:12px;color:var(--ink);background:var(--field);border:1px solid var(--line);padding:1px 5px;border-radius:2px;word-break:break-all}.field{margin-bottom:15px}.lbl{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);margin-bottom:7px}input.text{width:100%;background:var(--field);border:1px solid var(--line-2);border-radius:2px;color:var(--ink);font-family:var(--sans);font-size:14px;padding:12px 13px;transition:border-color .15s,box-shadow .15s,background .15s}input.text::placeholder{color:var(--faint)}input.text:focus{outline:none;border-color:var(--ink);background:#fff;box-shadow:0 0 0 3px #0e0e0e14}.pw-wrap{position:relative;display:flex;align-items:center}.pw-wrap input{padding-right:42px}.toggle-pw{position:absolute;right:6px;background:none;border:none;cursor:pointer;color:var(--faint);padding:7px;display:flex;border-radius:2px;transition:color .15s,background .15s}.toggle-pw:hover{color:var(--ink);background:var(--field)}.toggle-pw svg{width:17px;height:17px}.row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:7px}.link{background:none;border:none;cursor:pointer;color:var(--ink);font-family:var(--mono);font-size:10.5px;letter-spacing:.3px;padding:0;border-bottom:1px solid var(--line-2);transition:border-color .15s}.link:hover{border-color:var(--ink)}.btn{width:100%;background:var(--ink);color:#fff;font-family:var(--sans);font-weight:600;font-size:13.5px;border:1px solid var(--ink);border-radius:2px;padding:13px;cursor:pointer;margin-top:6px;display:flex;align-items:center;justify-content:center;gap:9px;transition:background .15s,opacity .15s}.btn:hover{background:#000}.btn:active{opacity:.85}.btn:disabled{opacity:.45;cursor:not-allowed}.btn .spin{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;display:none}.btn.loading .spin{display:block}@keyframes spin{to{transform:rotate(360deg)}}.back{background:none;border:none;cursor:pointer;color:var(--muted);font-family:var(--mono);font-size:10.5px;letter-spacing:.3px;display:inline-flex;align-items:center;gap:5px;padding:0;margin-bottom:16px;transition:color .15s}.back:hover{color:var(--ink)}.back svg{width:13px;height:13px}.methods{display:flex;border:1px solid var(--line-2);border-radius:2px;margin-bottom:22px}.method{flex:1;background:#fff;border:none;cursor:pointer;border-right:1px solid var(--line-2);padding:11px 4px 9px;color:var(--muted);font-family:var(--mono);font-size:10px;letter-spacing:.3px;text-transform:uppercase;display:flex;flex-direction:column;align-items:center;gap:6px;border-bottom:2px solid transparent;transition:color .15s,background .15s}.method:last-child{border-right:none}.method svg{width:16px;height:16px}.method:hover{color:var(--ink);background:var(--field)}.method.active{color:var(--ink);background:var(--field);border-bottom-color:var(--ink)}.otp{display:flex;gap:8px;margin-bottom:14px}.otp.error{animation:shake .4s}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}.otp input{flex:1;width:0;aspect-ratio:1 / 1.1;text-align:center;background:var(--field);border:1px solid var(--line-2);border-radius:2px;color:var(--ink);font-family:var(--mono);font-size:20px;font-weight:500;transition:border-color .12s,box-shadow .12s,background .12s}.otp input:focus{outline:none;border-color:var(--ink);background:#fff;box-shadow:0 0 0 3px #0e0e0e14}.otp input.filled{border-color:var(--ink);background:#fff}.otp.error input{border-color:var(--danger)}.totp-row{display:flex;justify-content:space-between;align-items:center;font-family:var(--mono);font-size:10.5px;letter-spacing:.3px;color:var(--muted);margin-bottom:7px;text-transform:uppercase}.totp-num{color:var(--ink);font-weight:600}.totp-track{height:4px;background:var(--line);border-radius:2px;overflow:hidden}.totp-bar{height:100%;background:var(--ink);transform-origin:left}input.backup{width:100%;text-align:center;letter-spacing:5px;background:var(--field);border:1px solid var(--line-2);border-radius:2px;color:var(--ink);font-family:var(--mono);font-size:16px;font-weight:500;padding:14px;margin-bottom:14px;transition:border-color .15s,box-shadow .15s,background .15s}input.backup::placeholder{color:var(--faint);letter-spacing:5px}input.backup:focus{outline:none;border-color:var(--ink);background:#fff;box-shadow:0 0 0 3px #0e0e0e14}input.backup.error{border-color:var(--danger)}.hint{font-size:11.5px;color:var(--muted);line-height:1.5;display:flex;gap:7px}.hint svg{width:14px;height:14px;flex-shrink:0;margin-top:1px}.resend{font-family:var(--mono);font-size:10.5px;color:var(--muted);text-align:center;letter-spacing:.2px}.resend .timer{color:var(--faint)}.alert{display:none;align-items:center;gap:8px;background:var(--danger-bg);border:1px solid var(--danger);border-radius:2px;color:var(--danger);font-size:12px;font-weight:500;padding:9px 11px;margin-bottom:15px}.alert.show{display:flex;animation:fade .2s}.alert svg{width:15px;height:15px;flex-shrink:0}.success-view{text-align:center;padding:6px 0 2px}.check{width:52px;height:52px;margin:0 auto 16px;border:1.5px solid var(--ink);border-radius:2px;display:grid;place-items:center;animation:fade .35s}.check svg{width:26px;height:26px;color:var(--ink)}.check svg path{stroke-dasharray:30;stroke-dashoffset:30;animation:draw .45s .15s forwards ease}@keyframes draw{to{stroke-dashoffset:0}}.success-view h1{margin-bottom:6px}.success-view p{font-size:13px;color:var(--muted)}.consumed{border:1px solid var(--line-2);border-radius:2px;background:var(--field);padding:16px;margin-bottom:18px;text-align:left}.consumed .top{display:flex;justify-content:space-between;align-items:center;margin-bottom:11px}.consumed .toplbl{font-family:var(--mono);font-size:10px;letter-spacing:.5px;text-transform:uppercase;color:var(--muted)}.stamp{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.6px;color:var(--danger);border:1.5px solid var(--danger);padding:2px 7px;border-radius:2px;transform:rotate(-3deg);opacity:0;animation:stampin .35s .55s forwards}@keyframes stampin{0%{opacity:0;transform:rotate(-3deg) scale(1.4)}to{opacity:1;transform:rotate(-3deg) scale(1)}}.codeline{position:relative;display:inline-block;font-family:var(--mono);font-size:18px;font-weight:600;letter-spacing:2px;color:var(--muted)}.codeline:after{content:"";position:absolute;left:-2px;top:50%;height:2px;width:0;background:var(--danger);animation:strike .5s .15s forwards cubic-bezier(.6,0,.2,1)}@keyframes strike{to{width:calc(100% + 4px)}}.consumed .msg{font-size:12px;color:var(--ink);line-height:1.5;margin-top:11px;display:flex;gap:7px}.consumed .msg svg{width:15px;height:15px;flex-shrink:0;margin-top:1px;color:var(--danger)}@media (max-width: 440px){.pad{padding:22px 20px}.head{padding:18px 20px}.step{padding:11px 20px}.otp{gap:6px}}@media (prefers-reduced-motion: reduce){*{animation-duration:1ms!important;transition-duration:.05s!important}}.dash{max-width:1080px;margin:0 auto;padding:28px 24px 60px}.dash-topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:28px}.dash-brand{display:flex;align-items:center;gap:10px}.dash-logout{font-family:var(--mono);font-size:10.5px;letter-spacing:.3px}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line-2);border:1px solid var(--line-2);margin-bottom:24px}.kpi-card{background:var(--panel);padding:18px 20px}.kpi-label{font-family:var(--mono);font-size:10px;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);margin-bottom:10px}.kpi-value{font-size:28px;font-weight:600;letter-spacing:-.5px}.kpi-value.danger{color:var(--danger)}.kpi-sub{font-family:var(--mono);font-size:11px;color:var(--faint);margin-top:4px}.panel-block{background:var(--panel);border:1px solid var(--line-2);margin-bottom:24px}.panel-block-head{display:flex;align-items:baseline;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--line)}.panel-block-title{font-size:14px;font-weight:600;letter-spacing:-.2px}.panel-block-meta{font-family:var(--mono);font-size:10.5px;color:var(--faint);letter-spacing:.2px}.panel-block-body{padding:18px 20px}.dash-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:24px}table.dtable{width:100%;border-collapse:collapse}table.dtable th{text-align:left;font-family:var(--mono);font-size:10px;letter-spacing:.4px;text-transform:uppercase;color:var(--muted);padding:0 10px 10px 0;border-bottom:1px solid var(--line)}table.dtable td{padding:9px 10px 9px 0;border-bottom:1px solid var(--line);font-size:13px}table.dtable tr:last-child td{border-bottom:none}table.dtable td.mono,table.dtable th.mono{font-family:var(--mono);font-size:12px}.badge{display:inline-flex;align-items:center;gap:4px;font-family:var(--mono);font-size:10.5px;font-weight:600;letter-spacing:.3px;padding:2px 7px;border-radius:2px;border:1px solid var(--line-2);color:var(--muted)}.badge.pass{border-color:var(--ink);color:var(--ink)}.badge.fail{border-color:var(--danger);color:var(--danger);background:var(--danger-bg)}.empty-state{text-align:center;padding:40px 20px;color:var(--muted);font-size:13px}.empty-state .mono{font-family:var(--mono);font-size:12px;color:var(--ink);background:var(--field);border:1px solid var(--line);padding:1px 5px;border-radius:2px}.loading-row{font-family:var(--mono);font-size:11px;color:var(--faint);letter-spacing:.3px;padding:20px;text-align:center}@media (max-width: 860px){.kpi-grid{grid-template-columns:repeat(2,1fr)}.dash-grid-2{grid-template-columns:1fr}}
