/* Upgrade checker (web/upgrade.js, 23 Oct 2026): "Got a seat in Round 1? See your upgrade chances". Home card, results banner, sheet #r2. */
.up-card { display:flex; align-items:center; gap:12px; width:100%; margin:16px 0 4px; padding:14px 16px; text-align:left; background:#FED942; color:var(--ink);
  border:2px solid var(--ink); border-radius:18px; box-shadow:4px 4px 0 var(--ink); font:inherit; cursor:pointer; text-decoration:none }
.up-card > span:first-child { flex:1; display:grid; gap:2px }
.up-card b { font:700 18px/1.2 "Bricolage Grotesque", Geist, sans-serif; letter-spacing:-.01em }
.up-card small { font-size:13.5px; color:#3d3200 }
.up-card .up-go { flex:none; display:grid; place-items:center; width:40px; height:40px; border-radius:99px; background:var(--ink); color:#FED942; font-weight:700; font-size:20px }
.up-card:active { transform:translate(2px, 2px); box-shadow:2px 2px 0 var(--ink) }
#results > .up-card { margin:0 0 14px }
@media (min-width:1024px) { #s-rank > .up-card { width:auto; margin:28px var(--gx) 0; padding:16px 24px } }

/* The student's preferences, top of the sheet (Edit opens Preferences) */
.up-prefs { display:flex; align-items:center; gap:8px; margin:6px 0 4px }
.up-prefs > span { flex:1; min-width:0; display:flex; flex-wrap:wrap; gap:4px }
.up-pref { padding:3px 10px; border-radius:99px; background:var(--track); font-size:12.5px; font-weight:500 }
.up-prefs .link { flex:none; min-height:44px; font-size:14px; font-weight:600 }

/* Picker */
.up-pick .lbl { margin:16px 0 6px }
.up-colls { list-style:none; margin:6px 0 0; padding:0; display:grid; gap:6px }
.up-colls button { display:grid; gap:1px; width:100%; padding:10px 12px; text-align:left; background:var(--surface); border:1px solid var(--line); border-radius:var(--r); font:inherit; cursor:pointer }
.up-colls small { color:var(--muted) }
.up-chosen { display:flex; align-items:center; gap:10px; padding:10px 12px; background:var(--accent-soft); border:1px solid var(--accent); border-radius:var(--r) }
.up-chosen > span { flex:1; min-width:0; display:grid } .up-chosen small { color:var(--muted) }
.up-pick select { width:100%; min-height:48px; padding:0 12px; border:1px solid var(--line-strong); border-radius:var(--r); background:var(--surface) }
.up-pick .chips { display:flex; flex-wrap:wrap; gap:6px }
.up-pick .chip { min-height:44px }
.up-none { padding:8px 2px; color:var(--muted); font-size:14px }

/* Answer */
.up-hold { display:grid; gap:2px; padding:12px 14px; margin:8px 0 12px; background:var(--ink); color:#fff; border-radius:var(--r) }
.up-hold small { letter-spacing:.06em; font-size:11px; opacity:.75 } .up-hold b { font-size:17px } .up-hold span { font-size:14px; opacity:.85 }
.up-rec { padding:14px; margin-bottom:12px; background:#FED942; border:2px solid var(--ink); border-radius:16px; box-shadow:3px 3px 0 var(--ink) }
.up-rec b { display:block; font:700 19px/1.25 "Bricolage Grotesque", Geist, sans-serif; letter-spacing:-.01em }
.up-rec p { margin:6px 0 0; font-size:14px; color:#3d3200 }
.up-by { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 12px; padding:0; list-style:none }
.up-by li { display:inline-flex; align-items:center; gap:6px; padding:4px 10px; border-radius:99px; background:var(--surface); border:1px solid var(--line); font-size:13px }
.up-by li b { font-family:var(--mono); font-weight:600 }
.up-by i { width:9px; height:9px; border-radius:99px; display:inline-block }
.up-by .g-SAFE i, .up-row.g-SAFE .up-p { --c:var(--safe) } .up-by .g-LIKELY i, .up-row.g-LIKELY .up-p { --c:var(--accent) }
.up-by .g-POSSIBLE i, .up-row.g-POSSIBLE .up-p { --c:#a07a00 } .up-by .g-LATER i, .up-row.g-LATER .up-p { --c:#6b6d75 } .up-by .g-LONG i, .up-row.g-LONG .up-p { --c:#9a9a93 }
.up-by i { background:var(--c, #999) }
.up-sh { margin:4px 0 6px; font-size:12px; letter-spacing:.06em; text-transform:uppercase; color:var(--muted) }
.up-list { list-style:none; margin:0 0 12px; padding:0; display:grid; gap:8px }
.up-row { display:grid; grid-template-columns:1fr auto; gap:4px 12px; padding:12px; background:var(--surface); border:1px solid var(--line); border-radius:var(--r) }
.up-row .up-t { min-width:0; display:grid; gap:1px } .up-row .up-t b { font-size:15.5px } .up-row small { color:var(--muted); font-size:13px }
.up-why { justify-self:start; margin-top:4px; font-size:11.5px; font-weight:600; padding:1px 8px; border-radius:99px; background:var(--accent-soft); color:var(--accent) }
.up-p { display:grid; justify-items:end; align-content:start; text-align:right; gap:0 }
.up-p .num { font-size:24px; font-weight:600; line-height:1.1; color:var(--c, var(--ink)) }
.up-p small { font-size:11.5px; white-space:nowrap }
.up-sub { grid-column:1 / -1; display:flex; flex-wrap:wrap; align-items:center; gap:4px 12px; padding-top:8px; border-top:1px dashed var(--line); font-size:13px; color:var(--muted) }
.up-sub .num { color:var(--ink) } .up-sub .btn { margin-left:auto; min-height:44px; padding:0 14px; font-size:13.5px; display:inline-flex; align-items:center; gap:6px }
.up-sub .btn svg { width:16px; height:16px } .up-sub .btn[aria-pressed="true"] svg { fill:currentColor }
.up-lock { position:relative; margin-bottom:12px }
.up-lock .up-list { filter:blur(5px); opacity:.65; user-select:none; pointer-events:none; margin:0 }
.up-lock .up-over { position:absolute; inset:auto 0 50% 0; transform:translateY(50%); margin:0 8px; display:grid; gap:8px; padding:14px; background:var(--surface);
  border:2px solid var(--ink); border-radius:16px; box-shadow:3px 3px 0 var(--ink); text-align:center }
.up-over b { font:700 17px/1.2 "Bricolage Grotesque", Geist, sans-serif } .up-over span { font-size:13.5px; color:var(--muted) }
.up-rp { display:flex; align-items:center; gap:12px; padding:14px; margin:4px 0 8px; border:1px solid var(--line-strong); border-radius:16px; background:var(--surface); color:var(--ink); text-decoration:none }
.up-rp > span:first-child { flex:1; display:grid; gap:2px } .up-rp small { color:var(--muted); font-size:13.5px } .up-rp .btn { flex:none }
.up-fine { font-size:12.5px; color:var(--muted); margin:6px 0 4px }
.up-p .num i { font-style:normal; font-family:Geist, sans-serif; font-size:12px; font-weight:500; color:var(--muted) }
.up-lock { min-height:230px }

/* Not ready until a seat is picked (audit 24 Oct: looked tappable and did nothing) */
#r2-foot .btn:disabled { opacity:.45; cursor:not-allowed }
/* QA 24 Oct: no orphan word on the desktop headline */
#r2 h2, .up-rec b, .up-sh, .up-over b { text-wrap:balance }
