@font-face{font-family:Lora;src:url("/fonts/lora-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Lora;src:url("/fonts/lora-600.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:Lora;src:url("/fonts/lora-700.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
:root{color-scheme:light;--bg:#ffffff;--panel:#ffffff;--panel2:#f3f6f3;--line:#deded5;--text:#282c27;--muted:#52594f;--accent:#155e78;--highlight:#36624e;--danger:#9c2030;font-family:Lora,Georgia,serif}
*{box-sizing:border-box} body{margin:0;background:var(--bg);min-height:100vh;color:var(--text)}button,input,select,textarea{font:inherit}button,a,input,select,textarea{touch-action:manipulation}a{color:var(--accent)}button{cursor:pointer}button:disabled{opacity:.52;cursor:default}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid var(--highlight);outline-offset:3px}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(1.55rem,3vw,2.05rem);line-height:1.2;letter-spacing:-.025em;margin-bottom:.7rem}h2{letter-spacing:-.025em;margin-bottom:.75rem}p{line-height:1.55}.muted,small{color:var(--muted)}.loading{padding:2rem}.error{color:var(--danger);white-space:pre-wrap}
#top{border-bottom:1px solid var(--line);background:#ffffff}.bar{max-width:1180px;margin:auto;display:flex;gap:1rem;align-items:center;justify-content:space-between;padding:.85rem 1.2rem}.brand{display:flex;align-items:center;gap:.65rem;text-decoration:none;color:var(--text);font-size:1.06rem;font-weight:700;white-space:nowrap}.mark{display:block;width:2.5rem;height:2.5rem;flex:none}.nav{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem}.nav a{color:var(--muted);padding:.55rem .7rem;text-decoration:none;border-radius:.5rem;font-weight:650}.nav a[aria-current],.nav a:hover{background:var(--panel2);color:var(--text)}
main{max-width:1180px;margin:auto;padding:2rem 1.2rem 4rem}.hero,.panel,.card,.gate{border:1px solid var(--line);background:var(--panel);border-radius:1.2rem;padding:1.3rem}.hero{background:linear-gradient(120deg,#faf5eb,#f8f9f4 68%,#edf4f5);padding:clamp(1.1rem,3vw,1.75rem);position:relative;overflow:hidden}.hero:after{content:"";position:absolute;right:-25px;top:-30px;width:320px;height:300px;background:repeating-conic-gradient(#1988bc 0% 25%,transparent 0% 50%) 50%/56px 56px;opacity:.055;transform:rotate(-17deg);pointer-events:none}.hero>*{position:relative;z-index:1}.kicker{color:var(--accent);font-size:.8rem;font-weight:600;letter-spacing:.025em;margin-bottom:.55rem}.hero p{color:#334155;max-width:39rem}.search{max-width:39rem;margin-top:1.2rem}.search input{width:100%;font-size:.95rem;padding:.7rem .8rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;min-height:42px;padding:.55rem .85rem;border:1px solid var(--line);border-radius:.65rem;background:var(--panel2);color:var(--text);font-weight:600;text-decoration:none;text-align:center}.btn:hover{filter:brightness(.94)}.primary{background:var(--accent);border-color:var(--accent);color:#fff}.big{font-size:.95rem;padding:.55rem .85rem}.quiet{background:transparent}.danger{color:var(--danger)}
.section-head,.row,.controls,.actions{display:flex;align-items:center;gap:.65rem;flex-wrap:wrap}.section-head,.row{justify-content:space-between}.section-head{margin:1.5rem 0 .85rem}.section-head h2,.row h3,.section-head p{margin:0}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:.85rem}.card h3{margin-bottom:.35rem}.card a{font-weight:600}.list{display:grid;gap:.6rem;margin-top:.75rem}.result,.request{padding:.75rem .9rem;background:#f6f8f5;border:1px solid var(--line);border-radius:.8rem}.result strong{font-size:1.08rem}.stack{display:grid;gap:.9rem}.heading{margin-bottom:1.1rem}.gate{max-width:520px;margin:5vh auto}.gate .brand{margin-bottom:1.3rem}.gate h1{font-size:1.65rem}
label{display:grid;gap:.35rem;font-weight:600}input,select,textarea{min-width:0;background:#ffffff;border:1px solid #8a978c;border-radius:.56rem;color:var(--text);padding:.6rem .7rem;width:100%}input[type=checkbox]{width:1.15rem;height:1.15rem;accent-color:var(--highlight);margin:0}input[type=file]{max-width:100%}form{display:grid;gap:.85rem}.controls label{min-width:145px}.controls{align-items:end;margin:.75rem 0}.scroll{overflow:auto;border-radius:.75rem;border:1px solid var(--line);max-height:65vh}table{width:100%;border-collapse:collapse;white-space:nowrap}th,td{padding:.7rem .75rem;border-bottom:1px solid var(--line);text-align:left}th{position:sticky;top:0;background:#f3f6f3;z-index:1;color:var(--muted);font-size:.84rem}tr:last-child td{border-bottom:0}.challenge-grid td:first-child,.challenge-grid th:first-child{position:sticky;left:0;background:#f7f8f5}.challenge-grid th:first-child{z-index:2}.done{color:var(--highlight);font-weight:800}.partial{color:var(--accent)}.chip{display:inline-flex;background:#eaf3ee;border:1px solid #ccdbd0;border-radius:999px;padding:.22rem .55rem;color:#143c55;font-weight:600;font-size:.84rem}.score{font-size:1.3rem;font-weight:700;color:var(--highlight)}.podium{background:linear-gradient(100deg,#eaf3ee,#fafbf8)}.podium:first-child .score{color:var(--accent)}.notice{padding:.8rem;border:1px solid #ccdbd0;border-radius:.65rem;color:var(--accent);background:#f3f6f3;margin-bottom:.9rem}.preview td{vertical-align:top}.preview select{min-width:11rem}.mapping{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,205px),1fr));gap:.6rem}
dialog{width:min(96vw,760px);max-height:90dvh;background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:1.1rem;padding:0}dialog::backdrop{background:#132b3d66}.dialog-inner{padding:1.2rem}.dialog-inner h2{margin:0}.checks{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:.65rem}.check-card{border:1px solid var(--line);background:#f6f8f5;padding:.75rem;border-radius:.65rem}.check-card h3{font-size:1rem;margin-bottom:.25rem}.check-card small{display:block;white-space:pre-line;margin-bottom:.4rem}.check-card label{display:flex;align-items:center;font-weight:500;margin:.4rem 0}.check-card input{flex:none}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,170px),1fr));gap:.6rem}.dialog-actions{position:sticky;bottom:0;background:var(--panel);padding:.65rem 0;border-top:1px solid var(--line)}#toast{position:fixed;z-index:4;bottom:1rem;right:1rem;max-width:min(24rem,90vw);background:#f5fbff;border:1px solid var(--line);border-radius:.75rem;padding:.75rem;color:var(--text)}#toast:empty{display:none}.projected h1{font-size:clamp(1.75rem,4vw,2.75rem)}.projected .result{font-size:clamp(1.15rem,2.7vw,1.85rem);padding:.85rem 1rem}.projected .result strong{font-size:inherit}body.present #top{display:none}
@media(max-width:720px){.hero:after{width:145px}.controls label{flex:1}.btn{min-height:44px}main{padding-top:1.25rem}}
[hidden]{display:none!important}
body { display: flex; flex-direction: column; min-height: 100dvh; }
main { width: 100%; margin: 0 auto; }
.site-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem;
  width: min(100%, 1640px);
  margin: auto auto 0;
  padding: 1.25rem clamp(.75rem, 3vw, 1.5rem) 1rem;
  border-top: 1px solid var(--line);
}
.footer-logo { flex: 0 0 min(36%, 250px); }
.site-footer img {
  display: block;
  width: 100%;
  height: auto;
}

/* Keep the brand, navigation and account controls on one horizontal line. */
#top .bar {
  max-width: 1640px;
  gap: clamp(.75rem, 2vw, 2rem);
  overflow-x: auto;
  padding-inline: clamp(.65rem, 1.6vw, 1.25rem);
}
#top .bar > .brand { margin-right: auto; }
#top .bar > * {
  flex-shrink: 0;
}
#top .bar .nav,
#top .bar .actions {
  flex-wrap: nowrap;
  gap: .3rem;
  white-space: nowrap;
}
#top .bar .nav a,
#top .bar .actions .btn {
  padding-inline: .48rem;
  font-size: .875rem;
}

.student-details > summary {
  width: fit-content;
  cursor: pointer;
  font-weight: 600;
}
.student-details > .form-grid {
  margin-top: .75rem;
}

body { font-size: .9375rem; }
h2 { font-size: 1.27rem; }
h3 { font-size: 1.02rem; }
.hero:after { opacity: .035; }
#results:empty { display: none; }
#app:has(.home-overview) { padding-top: clamp(1rem, 3vw, 2rem); }
.home-overview { display: grid; gap: 1rem; }
.home-overview .hero h1 { font-size: clamp(1.8rem, 4vw, 2.65rem); }
.home-walkthrough { padding-block: clamp(2rem, 4vw, 3.25rem); }
.home-walkthrough h2 { margin-bottom: 1.25rem; }
.home-walkthrough ol {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1.2rem 2rem;
  margin: 0;
  padding-inline-start: 1.35rem;
}
.home-walkthrough li::marker { color: var(--accent); font-weight: 700; }
.home-walkthrough h3 { margin: 0 0 .35rem; }
.home-walkthrough p { margin: 0; color: var(--muted); }
@media (max-width: 720px) {
  .home-walkthrough ol { grid-template-columns: 1fr; }
}
.student-search .search { margin-top: 0; }
.student-search .search input { min-height: 48px; font-size: 1rem; }
.student-search .search-help { margin: .6rem 0 0; color: var(--muted); font-size: .875rem; }
body.roster-expanded #top, body.roster-expanded .site-footer { display: none; }
body.roster-expanded #app {
  max-width: none;
  height: 100dvh;
  display: flex;
  flex-direction: column;
  padding: .65rem clamp(.65rem, 1.5vw, 1.25rem);
}
.roster-expanded #app > a { align-self: flex-start; }
.roster-expanded #app > .section-head { margin: .65rem 0 .3rem; }
.roster-expanded #app > .controls { margin: .3rem 0; }
.roster-expanded #roster-results { display: flex; flex: 1; min-height: 0; margin-top: .35rem; }
.roster-expanded .challenge-grid { width: 100%; align-self: flex-start; max-height: 100%; }
.roster-expanded .challenge-cell, .roster-expanded .challenge-grid .btn { min-height: 38px; }
.roster-expanded .challenge-grid td { padding-block: .15rem; }
.roster-expanded .challenge-grid .challenge-slot { padding: 0; }
.visually-hidden { position: absolute; width: 1px; height: 1px; clip-path: inset(50%); overflow: hidden; white-space: nowrap; }
.gate { background: #fbf8f1; }
.gate-help { margin: .9rem 0 0; padding-top: .85rem; border-top: 1px solid var(--line); }
@media (max-width: 720px) {
  .gate { margin: 1rem auto; }
}

.footer-signoff { font-size: .875rem; }
.footer-signoff p { margin: .2rem 0 .25rem; color: var(--muted); }
.footer-feedback { margin-top: .35rem; color: var(--accent); }
.sort-order select { min-width: 8rem; }
.admin-tools {
  position: fixed;
  inset: auto;
  margin: 0;
  width: 190px;
  padding: .35rem;
  background: var(--panel);
  color: var(--text);
  border: 1px solid var(--line);
  border-radius: .65rem;
  box-shadow: 0 6px 20px #28332824;
}
.admin-tools a { display: block; }
body.present .footer-feedback { display: none; }

.challenge-grid .challenge-slot { padding: 0; }
.challenge-cell {
  display: block;
  width: 100%;
  min-width: 3.5rem;
  min-height: 44px;
  padding: .35rem .65rem;
  border: 0;
  background: transparent;
  color: var(--muted);
  text-align: center;
  white-space: nowrap;
}
.challenge-cell:hover { background: var(--panel2); }
.challenge-cell:focus-visible { outline-offset: -3px; }
.challenge-cell.done { color: #247646; font-size: 1.3rem; }
.challenge-cell.partial { color: var(--danger); font-size: 1.2rem; font-weight: 700; }
.challenge-grid .roster-number { text-align: center; }
.challenge-editor {
  position: fixed;
  inset: auto;
  margin: 0;
  width: min(20rem, calc(100vw - 16px));
  max-height: calc(100dvh - 16px);
  overflow: auto;
  padding: .9rem;
  border: 1px solid var(--line);
  border-radius: .65rem;
  color: var(--text);
  background: var(--panel);
  box-shadow: 0 6px 20px #28332824;
}
.challenge-editor form { gap: .6rem; }
.challenge-editor label { display: flex; align-items: flex-start; gap: .5rem; }
.challenge-editor input { flex: none; }
.challenge-editor .error:empty { display: none; }

.mam-cell { color: var(--accent); font-weight: 700; text-decoration: underline; text-underline-offset: .17em; }
.mam-dialog > .row { align-items: flex-start; }
.mam-dialog > .row p { margin: .25rem 0 .8rem; }
.mam-dialog > .error { margin: .65rem 0 0; }
.mam-dialog > .error:empty { display: none; }
.mam-detail { display: flex; gap: 1rem 1.5rem; align-items: flex-start; flex-wrap: wrap; }
.mam-detail h3 { margin: .2rem 0 .55rem; }
.mam-detail img { display: block; width: min(100%, 230px); height: auto; }
.mam-actions { justify-items: start; }
.mam-chart {
  display: grid;
  grid-template-columns: repeat(auto-fill,minmax(90px,1fr));
  gap: .45rem;
  max-height: 64dvh;
  overflow: auto;
  padding: .4rem;
  align-items: stretch;
}
.mam-card { display: grid; grid-template-rows: 1fr auto; gap: .25rem; padding: .25rem; color: var(--text); background: var(--panel); border: 1px solid var(--line); border-radius: .5rem; }
.mam-card img { display: block; width: 100%; aspect-ratio: 1 / 1.65; object-fit: contain; }
.mam-card span { font-size: .75rem; font-weight: 700; }
.mam-card.mam-next { background: #eaf3ee; border: 2px solid var(--highlight); color: var(--highlight); }
@media (max-width: 480px) {
  .mam-detail img { width: min(100%, 155px); }
  .mam-chart { grid-template-columns: repeat(auto-fill,minmax(76px,1fr)); }
}

.section-views { margin: .55rem 0; }
.mam-assignment { flex-wrap: wrap; }
.mam-assignment label { min-width: 0; }
.mam-assignment input { width: 6.5rem; }
.controls .hide-completed, .controls .show-setups { display: flex; align-items: center; align-self: center; gap: .5rem; min-width: 0; }
.hide-completed input, .show-setups input { flex: none; }
#assignment-status { margin: 0 0 .4rem; }
#assignment-status:empty, #display-status:empty { display: none; }
.roster-expanded #roster-results { flex-direction: column; }
#app:has(.mam-display) { max-width: 1640px; }
body.roster-expanded #app:has(.mam-display) { max-width: none; overflow: auto; }
.display-challenges {
  display: grid;
  grid-template-columns: repeat(auto-fit,minmax(min(100%,155px),1fr));
  align-items: start;
  gap: clamp(.55rem, 1.5vw, 1.2rem);
}
.display-challenges article { min-width: 0; text-align: center; }
.display-challenges img { display: inline-block; width: min(100%,220px); height: auto; vertical-align: top; }
.roster-expanded .display-challenges img { width: min(100%,290px); }
@media (max-width: 500px) {
  .display-challenges { grid-template-columns: repeat(auto-fit,minmax(min(100%,120px),1fr)); }
}

.challenge-grid th:has(.mam-setup) { text-align: center; }
.mam-setup {
  display: block;
  width: 6rem;
  margin: .25rem auto 0;
  padding: .15rem;
  border: 1px solid var(--line);
  border-radius: .35rem;
  background: var(--panel);
  cursor: zoom-in;
}
.mam-setup:hover { border-color: var(--accent); }
.mam-setup img {
  display: block;
  width: 100%;
  height: clamp(4.5rem, 18dvh, 9rem);
  object-fit: contain;
}
.mam-setup-preview { margin-top: .75rem; }

.group-edit { display: block; margin: 0 .7rem .15rem; padding: .12rem .25rem; border: 0; border-radius: .2rem; background: transparent; color: var(--accent); font-size: .76rem; text-decoration: underline; }
.checkmate-setup { display: block; margin-top: .25rem; padding: .25rem .4rem; background: var(--panel); border: 1px solid var(--line); border-radius: .35rem; color: var(--text); text-align: left; }
.checkmate-setup:hover { border-color: var(--accent); }
.setup-material { display: inline-block; font-size: 1rem; }
.setup-material span { display: inline-block; min-width: 2.6rem; font-size: .75rem; }
.setup-directions, .student-info { white-space: pre-wrap; overflow-wrap: anywhere; }
.preview td:nth-child(4) { max-width: 20rem; white-space: normal; overflow-wrap: anywhere; }

.all-students-summary { display: flex; align-items: center; justify-content: space-between; gap: .75rem; margin: .35rem 0; }
.all-students-summary p { margin: 0; }
.all-students-table th { vertical-align: top; }
.student-sort { border: 0; padding: .2rem 0; background: transparent; color: inherit; font: inherit; cursor: pointer; text-align: left; white-space: nowrap; }
.student-sort span { margin-inline-start: .25rem; color: var(--accent); font-size: .8em; }

.sheet-import { min-width: 0; }
.sheet-sharing-note {
  margin: 0 0 .75rem;
  padding: .85rem 1rem;
  border-left: 4px solid var(--accent);
  border-radius: .35rem;
  background: var(--panel2);
}
.sheet-sharing-note strong { display: block; font-size: 1.15rem; line-height: 1.35; }
.sheet-sharing-note span { display: block; margin-top: .35rem; }

.roster-details { align-items: start; }
.roster-source { min-width: 0; margin: .5rem 0 0; padding: 0; border: 0; }
.roster-source legend { padding: 0; margin-bottom: .65rem; font-weight: 700; }
.roster-source-options { gap: .85rem; }
.roster-source-card { min-width: 0; padding: .85rem; border: 1px solid var(--line); border-radius: .7rem; background: var(--panel); }
.roster-details input, .roster-details select, .roster-source-card input { min-height: 2.75rem; }
.roster-source-card input[type="file"]::file-selector-button { margin-inline-end: .55rem; }
.roster-source-card > p { margin: .65rem 0 0; }
#source-error:empty { display: none; }
@media (max-width: 640px) {
  .roster-details, .roster-source-options { grid-template-columns: 1fr; }
}
