:root { --portal-brand: #b01f24; --portal-ink: #211b17; --portal-muted: #8d7f72; }
* { box-sizing: border-box; }
body.portal-body { margin: 0; min-height: 100vh; background: #f5f1eb; color: var(--portal-ink); font-family: -apple-system, BlinkMacSystemFont, "Microsoft YaHei", sans-serif; }
.portal-top { height: 68px; display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 0 24px; background: rgba(255,255,255,.86); border-bottom: 1px solid #ebe1d6; position: sticky; top: 0; z-index: 20; backdrop-filter: blur(14px); }
.portal-brand { display: flex; align-items: center; gap: 10px; text-decoration: none; color: inherit; }
.portal-brand img { width: 36px; height: 36px; object-fit: contain; }
.portal-brand strong { display: block; font-size: 14px; }
.portal-brand small { display: block; color: var(--portal-muted); font-size: 9px; margin-top: 2px; letter-spacing: .06em; }
.portal-help { color: #9b8c7e; font-size: 10px; text-decoration: none; }
.portal-main { max-width: 980px; margin: 0 auto; padding: 30px 18px 60px; }
#auth-view { display: grid; grid-template-columns: minmax(0,1fr) 430px; gap: 28px; align-items: start; }
.portal-hero { padding: 22px 4px; }
.portal-kicker { font-size: 9px; letter-spacing: .16em; color: #a58f7d; font-weight: 700; }
.portal-hero h1 { font-size: clamp(28px, 4vw, 46px); line-height: 1.1; letter-spacing: -.04em; margin: 12px 0 16px; }
.portal-hero p { color: var(--portal-muted); font-size: 12px; line-height: 1.9; max-width: 390px; }
.portal-card { background: #fff; border: 1px solid #e9dfd4; border-radius: 20px; padding: 22px; box-shadow: 0 18px 50px rgba(50,38,28,.08); }
.portal-tabs { display: flex; gap: 4px; padding: 4px; background: #f7f2ec; border-radius: 11px; margin-bottom: 18px; }
.portal-tabs button { flex: 1; height: 36px; border: 0; border-radius: 8px; background: transparent; color: #8f8174; font-size: 11px; font-weight: 650; cursor: pointer; }
.portal-tabs button.is-active { background: #fff; color: var(--portal-brand); box-shadow: 0 2px 8px rgba(50,38,28,.08); }
.portal-form { display: flex; flex-direction: column; gap: 12px; }
.portal-field { display: flex; flex-direction: column; gap: 5px; }
.portal-field > span { font-size: 10px; color: #75675b; font-weight: 600; }
.portal-field > span i { color: var(--portal-brand); font-style: normal; }
.portal-field input, .portal-field select, .portal-field textarea { width: 100%; border: 1px solid #e5dbd0; border-radius: 9px; background: #fff; color: #2b241e; font: inherit; font-size: 12px; padding: 10px 11px; outline: none; }
.portal-field input:focus, .portal-field select:focus, .portal-field textarea:focus { border-color: #c8928e; box-shadow: 0 0 0 3px rgba(176,31,36,.08); }
.portal-field textarea { min-height: 76px; resize: vertical; }
.portal-fields { display: flex; flex-direction: column; gap: 11px; }
.portal-fields:empty { display: none; }
.portal-btn { display: inline-flex; align-items: center; justify-content: center; height: 40px; padding: 0 16px; border-radius: 9px; border: 1px solid #e4d9cd; background: #fff; color: #5f5146; text-decoration: none; font-size: 11px; font-weight: 650; cursor: pointer; }
.portal-btn.primary { background: var(--portal-brand); border-color: var(--portal-brand); color: #fff; }
.portal-btn.primary:hover { background: #951b20; }
.portal-btn.ghost { height: 32px; font-size: 10px; }
.portal-divider { display: flex; align-items: center; gap: 10px; color: #b1a397; font-size: 9px; margin: 18px 0 12px; }
.portal-divider::before, .portal-divider::after { content: ""; flex: 1; height: 1px; background: #eee4d8; }
.portal-oauth { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.portal-oauth .oauth-qq { color: #1d6fb8; }
.portal-oauth .oauth-wx { color: #198754; }
.portal-note { color: #a39689; font-size: 9px; line-height: 1.6; margin: 12px 0 0; }
.portal-error { color: #b42318; background: #fff4f2; border: 1px solid #f2d4d1; border-radius: 7px; padding: 8px 9px; font-size: 10px; }
.portal-account-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 12px; margin-bottom: 16px; }
.portal-account-head h1 { font-size: 30px; margin: 5px 0 3px; letter-spacing: -.03em; }
.portal-account-head p { margin: 0; color: var(--portal-muted); font-size: 11px; }
.portal-status { border-radius: 12px; padding: 12px 14px; font-size: 11px; margin-bottom: 14px; border: 1px solid #eee4d8; background: #fffdf9; color: #6c5c4d; }
.portal-status.pending { background: #fffaf0; border-color: #f0dfbb; color: #8a641e; }
.portal-status.rejected { background: #fff5f3; border-color: #f1d5d1; color: #a3352b; }
.portal-status.approved { background: #f3fbf7; border-color: #cfeadd; color: #1d6b4f; }
.portal-qr-card { background: #fff; border: 1px solid #e9dfd4; border-radius: 20px; padding: 20px; box-shadow: 0 18px 50px rgba(50,38,28,.08); }
.portal-qr-head { display: flex; justify-content: space-between; gap: 10px; align-items: flex-start; }
.portal-qr-head h2 { margin: 4px 0 0; font-size: 18px; }
.portal-status-pill { font-size: 9px; color: #1d6b4f; background: #eefaf4; border: 1px solid #cfeadd; border-radius: 99px; padding: 4px 8px; white-space: nowrap; }
.portal-qr-frame { width: min(300px, 72vw); margin: 18px auto; padding: 12px; background: #fff; border: 1px solid #eee4d8; border-radius: 14px; }
.portal-qr-frame img { display: block; width: 100%; height: auto; }
.portal-qr-meta { text-align: center; color: #8f8174; font-size: 10px; line-height: 1.8; }
.portal-actions { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-top: 14px; }
.portal-card-head { margin-bottom: 14px; }
.portal-card-head h2 { margin: 0 0 3px; font-size: 17px; }
.portal-card-head p { margin: 0; color: var(--portal-muted); font-size: 10px; }
.portal-toast { position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%); background: #1f1b18; color: #fff; border-radius: 9px; padding: 10px 14px; font-size: 10px; z-index: 50; max-width: 90vw; }
.portal-toast[hidden] { display: none; }
@media (max-width: 760px) {
  .portal-top { height: 60px; padding: 0 14px; }
  .portal-main { padding: 18px 12px 40px; }
  #auth-view { grid-template-columns: 1fr; gap: 10px; }
  .portal-hero { padding: 4px 6px 8px; }
  .portal-hero h1 { font-size: 30px; }
  .portal-card { padding: 16px; border-radius: 15px; }
  .portal-account-head h1 { font-size: 25px; }
  .portal-oauth { grid-template-columns: 1fr; }
  .portal-qr-card { padding: 14px; border-radius: 15px; }
}
[hidden] { display: none !important; }
.portal-oauth a.is-disabled { opacity:.48; cursor:not-allowed; }
/* Modern cloud-console login */
:root { --portal-brand: #0052d9; --portal-ink: #15243a; --portal-muted: #7a8799; }
body.portal-body { background: #eef3f9; }
.portal-top { background: rgba(255,255,255,.92); border-bottom-color: #e3e9f2; }
.portal-main { max-width: 1120px; padding-top: 42px; }
#auth-view { grid-template-columns: minmax(0,1.15fr) 430px; gap: 0; background: #fff; border: 1px solid #e4eaf2; border-radius: 18px; box-shadow: 0 28px 80px rgba(24,44,74,.12); overflow: hidden; }
.portal-hero { min-height: 530px; padding: 48px 44px; margin: 0; color: #fff; background:
  radial-gradient(500px 300px at 95% 0%, rgba(0,82,217,.55), transparent 65%),
  linear-gradient(145deg, #0b1b33 0%, #10294d 55%, #0d3470 100%); position: relative; overflow: hidden; }
.portal-hero::after { content:""; position:absolute; inset:0; background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px); background-size:42px 42px; mask-image:radial-gradient(circle at 70% 20%,#000,transparent 72%); pointer-events:none; }
.portal-hero > * { position: relative; z-index: 1; }
.portal-hero .portal-kicker { color:#78a9ff; }
.portal-hero h1 { color:#fff; font-size:42px; line-height:1.15; margin-top:18px; }
.portal-hero p { color:rgba(226,238,255,.72); font-size:13px; line-height:2; max-width:420px; }
.portal-hero::before { content:"安全 · 可信 · 一人一码"; display:block; margin-top:34px; color:#8fb8ef; font-size:10px; letter-spacing:.12em; }
.portal-card { border-radius:0; border:0; box-shadow:none; padding:38px 34px; align-self:stretch; display:flex; flex-direction:column; justify-content:center; }
.portal-tabs { background:#f3f6fb; }
.portal-tabs button.is-active { color:#0052d9; }
.portal-field input, .portal-field select, .portal-field textarea { border-color:#dce4ef; font-size:12px; padding:11px 12px; border-radius:6px; }
.portal-field input:focus, .portal-field select:focus, .portal-field textarea:focus { border-color:#6b9cf5; box-shadow:0 0 0 3px rgba(0,82,217,.1); }
.portal-btn.primary { background:#0052d9; border-color:#0052d9; border-radius:6px; }
.portal-btn.primary:hover { background:#0046bb; }
.portal-btn { border-radius:6px; }
.portal-oauth .oauth-qq, .portal-oauth .oauth-wx { position:relative; padding-left:30px; }
.portal-oauth .oauth-qq::before, .portal-oauth .oauth-wx::before { position:absolute;left:9px;top:50%;transform:translateY(-50%);width:16px;height:16px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:8px;font-weight:700; }
.portal-oauth .oauth-qq::before { content:"Q";background:#12b7f5; }
.portal-oauth .oauth-wx::before { content:"微";background:#07c160;font-size:7px; }
.portal-login-mode { display:flex; gap:14px; border-bottom:1px solid #e6edf6; margin-bottom:2px; }
.portal-login-mode button { height:30px;border:0;background:transparent;color:#7c8999;font-size:10px;cursor:pointer;border-bottom:2px solid transparent; }
.portal-login-mode button.is-active { color:#0052d9;border-bottom-color:#0052d9;font-weight:650; }
.portal-code-row { display:flex; gap:6px; align-items:center; }
.portal-code-row input { flex:1; min-width:0; }
.portal-code-btn { flex:none; height:39px;padding:0 10px;border:1px solid #cbd8ea;border-radius:6px;background:#f7faff;color:#0052d9;font-size:10px;cursor:pointer;white-space:nowrap; }
.portal-code-btn:disabled { color:#9aabbf;cursor:wait; }
.portal-view-tabs { display:flex; gap:5px; padding:4px; background:#e9eff7; border-radius:8px; margin-bottom:14px; width:max-content; max-width:100%; }
.portal-view-tabs button { height:32px;padding:0 14px;border:0;border-radius:5px;background:transparent;color:#718096;font-size:10px;cursor:pointer; }
.portal-view-tabs button.is-active { background:#fff;color:#0052d9;font-weight:650;box-shadow:0 2px 7px rgba(24,44,74,.08); }
.portal-qr-card, .portal-card { background:#fff; border:1px solid #e4ebf4; box-shadow:0 14px 40px rgba(24,44,74,.07); border-radius:12px; }
.portal-status.approved { background:#edf9f3;border-color:#c8ead9;color:#137a4b; }
.portal-status.pending { background:#fff8e8;border-color:#f3dfb5;color:#8a641e; }
.portal-status.rejected { background:#fff4f2;border-color:#f0d3cf;color:#a3352b; }
.security-block { padding:14px 0; border-top:1px solid #edf1f7; }
.security-block:first-of-type { border-top:0; }
.security-title { display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:9px; }
.security-title b { display:block;font-size:12px;color:#1b2c44; }
.security-title span { display:block;font-size:9px;color:#8795a8;margin-top:2px; }
.security-state { font-size:9px;color:#6b7d92;background:#f2f6fb;border-radius:99px;padding:3px 7px;white-space:nowrap; }
.portal-form.compact { flex-direction:row;gap:7px; }
.portal-form.compact input { flex:1;min-width:0;height:36px;border:1px solid #dce4ef;border-radius:6px;padding:0 9px;font-size:10px; }
.portal-btn.small { height:34px;font-size:9.5px;white-space:nowrap; }
.portal-bind-actions { display:flex;gap:7px;flex-wrap:wrap; }
@media (max-width: 760px) {
  .portal-main { padding-top: 14px; }
  #auth-view { grid-template-columns: 1fr; border-radius: 12px; }
  .portal-hero { min-height: auto; padding: 26px 22px 22px; }
  .portal-hero h1 { font-size: 30px; margin-top: 10px; }
  .portal-hero::before { margin-top: 16px; }
  .portal-card { padding: 20px 16px; }
  .portal-form.compact { flex-direction:column; }
  .portal-view-tabs { width:100%; justify-content:space-between; }
  .portal-view-tabs button { flex:1; }
}
.form-grid.two { display:grid; grid-template-columns:1fr 1fr; gap:8px; } @media (max-width:600px){ .form-grid.two { grid-template-columns:1fr; } }
