@font-face{font-family:Manrope;font-style:normal;font-weight:500;font-display:swap;src:url(/oauth-font-manrope-500.woff2) format("woff2")}
@font-face{font-family:Manrope;font-style:normal;font-weight:600;font-display:swap;src:url(/oauth-font-manrope-600.woff2) format("woff2")}
@font-face{font-family:"Calling Code";font-style:normal;font-weight:400;font-display:swap;src:url(/oauth-font-callingcode-400.woff2) format("woff2")}
:root{--black:#151515;--grey300:#949492;--grey200:#c0bfb9;--grey100:#e9e7e4;--green:#1ca55c;--green600:#1d9957;--red:#ff4e59;--white:#fff;--font-primary:Manrope,sans-serif;--font-secondary:"Calling Code",ui-monospace,monospace}
*{box-sizing:border-box}
/* The hidden attribute is only a user-agent display:none, so any author display
   rule silently beats it. The form rule below would otherwise render the email,
   code and two-factor steps stacked on one page. */
[hidden]{display:none!important}
html{background:var(--white)}
body{margin:0;background:var(--white);color:var(--black);font-family:var(--font-primary);-webkit-font-smoothing:antialiased}
.appHeader{position:relative;display:flex;align-items:center;justify-content:center;height:88px;padding:0 20px;border-bottom:1px solid var(--grey100)}
.logo{height:30px;width:auto;display:block}
.progress{position:absolute;left:0;bottom:-1px;height:2px;width:0;background:linear-gradient(68.14deg,#0c8444 0%,#4dae51 100%);transition:width .35s ease}
main{max-width:468px;margin:0 auto;padding:56px 20px 40px}
.stepHeader{display:flex;flex-direction:column;gap:8px;margin-bottom:24px}
.stepHeader h2{margin:0;color:var(--black);font-size:32px;font-weight:600;line-height:32px;letter-spacing:-.64px}
.stepHeader p{margin:0;color:var(--grey300);font-size:16px;line-height:24px}
.stepHeader p b{color:var(--black);font-weight:600}
form{display:flex;flex-direction:column;gap:32px}
label{display:flex;flex-direction:column;gap:8px;font-size:14px;line-height:18px;font-weight:600;color:var(--black)}
input[type=email]{width:100%;height:48px;border-radius:8px;border:0;outline:1px solid transparent;background:rgba(21,21,21,.04);padding:0 16px;color:var(--black);font-family:var(--font-secondary);font-size:16px;line-height:20px;letter-spacing:-.48px}
input[type=email]:focus{outline-color:rgba(21,21,21,.2)}
/* PinCodeInput, variant "gray": provider-specific boxes, 4px gap, dash placeholder that
   disappears once a box is filled. */
.pin{display:flex;align-items:center;gap:4px;height:48px}
.pin .cell{position:relative;flex:1;height:100%;border-radius:4px;background:rgba(21,21,21,.04);outline:1px solid transparent;transition:all .2s ease}
.pin .cell:focus-within{outline-color:rgba(21,21,21,.2)}
.pin .cell:before{content:"";position:absolute;width:12px;height:2px;background:var(--grey200);left:50%;bottom:25%;transform:translateX(-50%);transition:all .2s ease}
.pin .cell.filled:before{display:none}
.pin .cell input{width:100%;height:100%;border:0;background:transparent;text-align:center;color:var(--black);font-family:var(--font-secondary);font-size:16px;line-height:20px;letter-spacing:-.48px;caret-color:transparent;cursor:pointer}
.pin .cell input:focus{outline:0}
.pin.error .cell{outline:1px solid var(--red);background:rgba(255,78,89,.05)}
.pin.error .cell input{color:var(--red)}
button{display:flex;justify-content:center;align-items:center;min-height:48px;padding:10px 24px;border:0;border-radius:4px;cursor:pointer;font-family:var(--font-secondary);font-size:16px;line-height:20px;letter-spacing:-.48px;transition:all .2s ease;white-space:nowrap}
button.green{background:var(--green);color:var(--white)}
button.green:hover:not(:disabled){background:var(--green600)}
button.greenOutlined{background:transparent;outline:1px solid var(--green);color:var(--green)}
button.greenOutlined:hover:not(:disabled){background:rgba(28,165,92,.06)}
button.blackGrayOutlined{background:transparent;border:1px solid rgba(21,21,21,.08);color:var(--black)}
button:disabled{opacity:.5;cursor:default}
dl{display:grid;grid-template-columns:minmax(96px,36%) 1fr;gap:12px 16px;margin:0;padding:16px;background:rgba(21,21,21,.03);border-radius:8px;font-size:14px;line-height:18px}
dt{color:var(--grey300)}
dd{margin:0;overflow-wrap:anywhere;font-weight:600;color:var(--black)}
.actions{display:flex;flex-direction:column;gap:8px}
/* Consent provenance. The dashed, muted claim block must never be mistaken for
   the solid fact list above it: one is the app's own text, the other is what
   Nebeus established. */
.optIn{display:flex;gap:10px;align-items:flex-start;margin:0 0 20px;padding:14px 16px;border-radius:8px;border:1px solid var(--grey100);font-size:14px;line-height:20px;color:var(--black);cursor:pointer}
.optIn input{margin:2px 0 0;width:18px;height:18px;accent-color:var(--green);flex:none}
.moneyNotice{margin:0 0 20px;padding:14px 16px;border-radius:8px;background:rgba(255,78,89,.06);border:1px solid rgba(255,78,89,.35);color:var(--black);font-size:14px;line-height:20px;font-weight:600}
.claimBlock{margin:0 0 20px;padding:14px 16px;border-radius:8px;border:1px dashed var(--grey200);background:transparent}
.claimLabel{margin:0 0 4px;font-size:12px;line-height:16px;letter-spacing:.02em;text-transform:uppercase;color:var(--grey300)}
.claimValue{margin:0 0 6px;font-size:16px;line-height:22px;font-weight:600;color:var(--black);overflow-wrap:anywhere}
.claimNote{margin:0;font-size:12px;line-height:16px;color:var(--grey300);overflow-wrap:anywhere}
#disconnect-all{width:100%;margin-bottom:12px}
#account-connections-list{margin-top:24px}
#connections>.claimNote{margin-bottom:16px}
#connections .claimNote,#connections .stepHeader p,#connections .connEmpty{color:#666}
#connections .conn.revoked{opacity:1;background:#fafafa}
#connections .connState.off{color:#666}
#connections~#message{margin-top:16px}
.factsLabel{margin:0 0 8px;font-size:12px;line-height:16px;letter-spacing:.02em;text-transform:uppercase;color:var(--grey300)}
#consent-permissions{margin:0 0 8px;padding:0 0 0 18px;font-size:14px;line-height:20px;color:var(--black)}
#consent-permissions li{margin-bottom:8px}
#consent-permissions li.money{font-weight:600}
dd.warn{color:var(--red)}
/* Connection list. Each card repeats the same provenance split as the consent
   screen: the app's own name is muted and labelled as a claim, what Nebeus
   established is stated plainly. */
.conn{padding:16px;border:1px solid var(--grey100);border-radius:8px;margin-bottom:12px}
.conn .claimLabel{margin-bottom:2px}
.conn .claimValue{margin-bottom:10px}
.conn dl{margin-bottom:12px}
.conn button{width:100%}
.conn.revoked{opacity:.6}
.connState{margin:0 0 10px;font-size:12px;line-height:16px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--green)}
.connState.off{color:var(--grey300)}
.connEmpty{margin:0;padding:16px;border:1px dashed var(--grey200);border-radius:8px;font-size:14px;line-height:20px;color:var(--grey300)}
#message{margin:0;font-size:14px;line-height:18px;color:var(--grey300);min-height:18px}
#message.error{color:var(--red);font-weight:600}
footer{max-width:468px;margin:32px auto;padding:0 20px;font-size:12px;line-height:16px;letter-spacing:-.24px;color:var(--grey300);text-align:center}
@media (max-width:480px){main{padding-top:32px}.stepHeader h2{font-size:28px;line-height:30px}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}