/* ============================================================
   login.css — sign-in / request-access page. Tokens and the left menu come from public-shell.css.
   (auth.css stays for the access-approval page.)
   ============================================================ */
*{box-sizing:border-box}
.center{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;padding:32px clamp(16px,3vw,40px)}
.card{width:100%;max-width:420px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:28px}
h1{font-family:var(--display);font-weight:700;font-size:34px;line-height:1.05;letter-spacing:.01em}
.lead{color:var(--muted);margin:6px 0 18px}

.tabs{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-bottom:18px}
.tab-btn{flex:1;font:600 15px var(--display);letter-spacing:.03em;color:var(--muted);background:none;border:0;border-right:1px solid var(--line);padding:8px 12px;cursor:pointer}
.tab-btn:last-child{border-right:0}
.tab-btn.on{background:var(--ink);color:var(--bg)}

.panel{display:none}.panel.on{display:block}
.form{display:flex;flex-direction:column;gap:14px}
.notice+.form{margin-top:14px}
.field{display:flex;flex-direction:column;gap:4px}
.field label{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.field .opt{text-transform:none;letter-spacing:0}
.field input,.field textarea{font:400 15px var(--body);color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:10px 12px;width:100%}
.field textarea{resize:vertical}
.field input::placeholder,.field textarea::placeholder{color:var(--muted)}
.field input:focus,.field textarea:focus{outline:2px solid var(--focus);outline-offset:-1px}

.btn-primary{width:100%;font:600 16px var(--body);color:var(--bg);background:var(--brand);border:0;border-radius:6px;padding:11px 16px;cursor:pointer}
.btn-primary:hover{opacity:.88}
.btn-primary:disabled{opacity:.5;cursor:not-allowed}
.spinner{display:inline-block;width:14px;height:14px;border:2px solid color-mix(in srgb,var(--bg) 35%,transparent);border-top-color:var(--bg);border-radius:50%;animation:spin .7s linear infinite;vertical-align:middle;margin-right:6px}
@keyframes spin{to{transform:rotate(360deg)}}

.err{display:none;background:color-mix(in srgb,var(--bad) 10%,var(--surface));border:1px solid color-mix(in srgb,var(--bad) 45%,var(--line));border-radius:6px;padding:9px 12px;font-size:14px;color:var(--bad)}
.err.on{display:block}
.ok-msg{display:none;background:color-mix(in srgb,var(--ok) 10%,var(--surface));border:1px solid color-mix(in srgb,var(--ok) 45%,var(--line));border-radius:6px;padding:12px 14px;font-size:14px;line-height:1.5}
.ok-msg strong{color:var(--ok)}
.notice{background:color-mix(in srgb,var(--brand) 10%,var(--surface));border:1px solid color-mix(in srgb,var(--brand) 40%,var(--line));border-radius:6px;padding:12px 14px;font-size:14px;line-height:1.5;color:var(--muted)}
.notice strong{color:var(--ink);font-weight:600}

.public{width:100%;max-width:760px}
.public h2{font-family:var(--display);font-weight:600;font-size:22px;margin-bottom:2px}
.public p{color:var(--muted);margin-bottom:12px}
.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.tile{display:flex;flex-direction:column;gap:6px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px;text-decoration:none;color:var(--ink)}
.tile:hover{border-color:var(--brand)}
.tile svg{width:22px;height:22px;stroke:var(--brand);fill:none;stroke-width:1.6}
.tile b{font:600 18px var(--display);letter-spacing:.02em}
.tile span{color:var(--muted);font-size:13.5px}

@media (max-width:820px){
  .tiles{grid-template-columns:1fr}
  .center{justify-content:flex-start;padding-top:24px}
  h1{font-size:28px}
}
