.portal-main{padding:64px 0 96px}
.portal-wrap{max-width:460px}
/* minmax(0,1fr), not the implicit `auto`: a grid item defaults to min-width
   auto, so a wide child (the access-code table, min-width 480px) grows the
   column past the container instead of scrolling inside .table-scroll, and
   the whole page picks up a horizontal scrollbar on a phone. */
.portal-wrap-wide{max-width:720px;display:grid;grid-template-columns:minmax(0,1fr);gap:24px}
.portal-wrap-data{max-width:960px;display:grid;grid-template-columns:minmax(0,1fr);gap:24px}
.portal-card h3{margin:24px 0 10px;font-size:1.05rem}
.portal-card ul{margin:0 0 16px;padding-left:20px}
.portal-card ul li{margin-bottom:8px}

/* fund-header/stat-grid/fund-summary-grid/fact-list moved to ../css/style.css so the public fund page can reuse them */
.portal-wrap-signup{
  max-width:960px;display:grid;gap:56px;
  grid-template-columns:1fr 1fr;align-items:start;
}
@media (max-width:820px){.portal-wrap-signup{grid-template-columns:1fr;gap:36px}}
.signup-intro{padding-top:8px}
.signup-intro h1{font-size:clamp(2.2rem,3.6vw,2.9rem)}
.benefit-list{list-style:none;margin:28px 0 0;padding:0;display:grid;gap:18px}
.benefit-list li{padding-left:22px;position:relative;color:var(--ink-soft)}
.benefit-list li::before{
  content:'';position:absolute;left:0;top:.55em;width:8px;height:8px;
  border-radius:50%;background:var(--ember);
}
.benefit-list strong{display:block;color:var(--ink);font-family:var(--font-display);font-weight:600;margin-bottom:2px}
.portal-card{
  background:var(--paper);
  border:1px solid var(--border);
  border-radius:4px;
  padding:36px;
}
.portal-card h1{margin:0 0 8px;font-size:1.9rem}
.portal-card h2{margin:0 0 14px;font-size:1.3rem}
.portal-card .lede{margin:0 0 28px}
#auth-form{margin-bottom:20px}
.doc-list{list-style:none;margin:0;padding:0;display:grid;gap:14px}
.doc-item{
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:16px 18px;border:1px solid var(--border);border-radius:4px;
}
.doc-item strong{display:block;color:var(--ink)}
.doc-item .form-note{margin:4px 0 0}

/* ---- access codes (admin) ----
   Reuses .field from the public stylesheet. select and date inputs have no
   placeholder for :not(:placeholder-shown) to hang on, so their label sits in
   the raised position permanently instead of floating on focus. */
.field-select select,.field-filled input{
  width:100%;font-family:var(--font-body);font-size:1.02rem;color:var(--ink);
  padding:24px 2px 10px;border:0;border-bottom:1.5px solid var(--border-strong);
  border-radius:0;background:transparent;appearance:none;
}
.field-select select:focus,.field-filled input:focus{outline:none;border-color:var(--ink)}
.field-select > label,.field-filled > label{
  top:2px;font-size:.74rem;letter-spacing:.06em;text-transform:uppercase;color:var(--navy);
}
.field-select::before{
  content:'';position:absolute;right:8px;bottom:20px;pointer-events:none;
  width:8px;height:8px;
  border-right:1.5px solid var(--ink-faint);border-bottom:1.5px solid var(--ink-faint);
  transform:rotate(45deg);
}

.code-form .form-row{margin-bottom:28px}
.code-form .field{margin-bottom:28px}
.code-form .form-row .field{margin-bottom:0}
.code-form .form-note{margin-bottom:24px}
.code-form #issue-status:empty{display:none}

/* A code is transcribed by hand off an email, so monospace here is doing the
   job monospace is for: unambiguous character-by-character reading. */
.code-result{
  margin-top:32px;padding:24px;border-radius:3px;
  background:var(--glacier);
}
.code-result-label{margin:0 0 12px;font-size:.9rem;color:var(--ink-soft)}
.code-result-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.code-result code{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:1.45rem;letter-spacing:.08em;color:var(--ink);
  user-select:all; /* one click selects the whole code */
}
@media (max-width:520px){.code-result code{font-size:1.15rem}}

.code-cell{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:.92rem;letter-spacing:.04em;user-select:all;
}
.code-lock{display:block;margin-top:2px}
.code-spent{color:var(--ink-faint)}
.btn-small{padding:8px 16px;font-size:.72rem}
#codes-table td{vertical-align:top}

/* ---- admin email step-up ---- */
.otp-input{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:1.5rem;letter-spacing:.5em;
}
/* the resend control is an action, not navigation, so it is a button wearing
   the text-link look rather than an anchor with a dead href */
.text-link-button{
  background:none;border:0;border-bottom:1px solid var(--border-strong);
  padding:0;cursor:pointer;font:inherit;
}
.text-link-button:disabled{opacity:.5;cursor:default}

/* ---- admin documents ---- */
.doc-filter{max-width:280px;margin-bottom:8px}
.doc-actions{white-space:nowrap}
.doc-actions .btn-small + .btn-small{margin-left:8px}
.doc-path{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:.82rem;color:var(--ink-soft);word-break:break-all;
}
#docs-table td{vertical-align:top}
#upload-status:empty{display:none}
.admin-links{display:flex;flex-wrap:wrap;gap:24px;margin:0}
