/* Faculty setup, writing assistant, and grading surfaces. Extends writenow.css tokens: warm
   paper, brick actions, plain rows with thin rules. No new palette and no status badges. */

/* Setup checklist ------------------------------------------------------------------------------ */
.setup-panel{max-width:880px;margin:0 0 36px;padding:22px 28px 10px;background:#fff;border:1px solid var(--line);border-radius:6px}
.setup-panel h2{margin:0 0 4px}
.setup-steps{list-style:none;margin:0;padding:0}
.setup-step{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:16px;align-items:center;padding:16px 0;border-top:1px solid var(--line)}
.setup-step:first-child{border-top:0}
.step-mark{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:13px;font-weight:650;color:var(--muted);border:1.5px solid #cbc6be;background:#fff;font-variant-numeric:tabular-nums}
.step-mark svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.3;stroke-linecap:round;stroke-linejoin:round}
.setup-step.is-done .step-mark{background:#266448;border-color:#266448;color:#fff}
.setup-step.is-current .step-mark{border-color:var(--brick);color:var(--brick);border-width:2px}
.step-text{min-width:0}
.step-text h3{margin:0 0 2px;font-size:16px;font-weight:650;line-height:1.35}
.step-text p{margin:0;font-size:14px;overflow-wrap:anywhere}
.setup-step:not(.is-done):not(.is-current) h3{color:var(--muted)}
.step-tag{margin-left:8px;font-size:12px;font-weight:500;color:var(--muted)}
.step-link{font-size:13px;white-space:nowrap}
.setup-done{margin-top:36px;padding-top:16px;border-top:1px solid var(--line)}
.setup-done>summary{font-size:14px;color:var(--muted);width:fit-content}
.setup-done>.setup-steps{margin-top:8px}

/* Invite students ------------------------------------------------------------------------------ */
.share-panel{max-width:none;margin:0 0 8px}
.share-panel h2{margin-bottom:6px}
.share-panel>p{max-width:68ch}
.copy-field{display:flex;gap:8px;max-width:640px;margin:14px 0 10px}
.copy-field input{flex:1;min-width:0;padding:10px 12px;border:1px solid #c9c6c0;border-radius:5px;background:#f2f1ed;color:var(--ink);font:inherit;font-size:14px}
.copy-details>summary{width:fit-content;font-size:14px;color:var(--brick)}
.copy-text{max-width:640px;margin:12px 0;padding:16px 18px;background:#fff;border:1px solid var(--line);border-radius:5px;white-space:pre-wrap;overflow-wrap:anywhere;font:14px/1.65 var(--sans);color:var(--ink)}
.quiet-empty{font-size:14px;color:var(--muted)}

/* Canvas connection ---------------------------------------------------------------------------- */
.connection-panel{margin-bottom:8px}
.connection-panel>p{max-width:70ch}
.connection-panel>.button.primary{margin-top:4px}
.canvas-benefits{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);gap:20px 40px;max-width:960px;margin:8px 0 24px}
.canvas-benefits h3{margin:0 0 12px;font-size:16px}
.benefit-list{display:grid;gap:10px;margin:0;padding:0;list-style:none;font-size:14px;line-height:1.55;color:var(--ink)}
.benefit-list li{position:relative;padding-left:26px}
.benefit-list li::before{content:"";position:absolute;left:6px;top:.28em;width:5px;height:10px;border:solid #266448;border-width:0 2px 2px 0;transform:rotate(45deg)}
.benefit-list.never li{color:var(--muted)}
.benefit-list.never li::before{left:3px;top:.72em;width:10px;height:0;border-width:2px 0 0;border-color:var(--muted);transform:none}
.token-steps{max-width:760px;margin:0 0 28px;padding:20px 24px;background:#fff;border:1px solid var(--line);border-radius:6px}
.token-steps h2{margin:0 0 12px;font-size:18px}
.token-steps ol{display:grid;gap:9px;margin:0 0 12px;padding-left:22px;font-size:15px}
.token-steps li::marker{font-weight:650;color:var(--brick)}
.token-steps .field-hint{margin:0}
.token-form{margin-bottom:12px}
.token-footnote{max-width:760px}

/* Writing assistant ---------------------------------------------------------------------------- */
.status-line{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 10px;margin:-14px 0 28px;font-size:14px;color:var(--muted)}
.status-line .state{font-weight:650;color:var(--ink)}
.status-line .state-on{color:#266448}
.status-line .state-problem{color:#95291f}
.assistant-layout{display:grid;grid-template-columns:minmax(0,760px) minmax(280px,360px);gap:48px;align-items:start}
.assistant-form{gap:0}
.assistant-section{display:grid;gap:16px;padding:28px 0;border-top:1px solid var(--line)}
.assistant-section:first-of-type{padding-top:0;border-top:0}
.assistant-section h2,.assistant-section .section-heading{margin:0}
.section-intro{margin:-10px 0 0;max-width:65ch;font-size:14px}
.stack-form .provider-choice{display:grid;gap:10px;min-width:0;margin:0;padding:0;border:0;border-radius:0}
.stack-form .choice-row{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;background:#fff;border:1px solid var(--line);border-radius:6px;cursor:pointer;font-weight:400}
.choice-row:has(input:checked){border-color:var(--brick);box-shadow:0 0 0 1px var(--brick)}
.stack-form .choice-row input[type=radio]{flex:none;width:18px;height:18px;min-width:18px;margin:3px 0 0;padding:0;accent-color:var(--brick)}
.choice-row b{display:block;font-size:15px}
.choice-row .field-hint{display:block;margin-top:2px;font-size:13px;line-height:1.5}
.field-group{display:grid;gap:16px}
.assistant-form select{width:100%;padding:11px 12px;border:1px solid #c6c4bf;border-radius:7px;background:#fff;color:var(--ink);font:inherit}
.model-picks{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:-6px}
.model-picks>.field-hint{flex-basis:100%}
.pick{display:inline-flex;flex-direction:column;align-items:flex-start;gap:1px;padding:7px 12px;border:1px solid #cbc6be;border-radius:5px;background:#fff;color:var(--ink);font:inherit;font-size:13px;font-weight:600;text-align:left;cursor:pointer}
.pick span{font-size:12px;font-weight:400;color:var(--muted)}
.pick:hover{background:#efede8}
.privacy-note{max-width:70ch;padding:12px 16px;border-radius:5px;background:#f2f1ed;font-size:13.5px}
.privacy-note p{margin:0;color:var(--ink)}
.assistant-section .check-row{margin:0}
.notes-field textarea{min-height:140px}
.prompt-field textarea{min-height:340px;font-size:14.5px;line-height:1.6}
.short-field input{max-width:140px}
.assignment-switches h3{margin:4px 0 8px;font-size:15px}
.assignment-switches ul{margin:0;padding:0;list-style:none;border-top:1px solid var(--line)}
.assignment-switches li{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}
.assignment-switches li>span:first-child{flex:1 1 240px;min-width:0}
.switch-state{font-size:13px;color:var(--muted)}
.disclosure-preview{max-width:65ch;padding:16px 18px;background:#fff;border:1px solid var(--line);border-radius:6px;font-size:14px}
.disclosure-preview p{margin:0 0 8px;color:var(--ink)}
.disclosure-preview p:last-child{margin:0;color:var(--muted)}
.save-bar{position:sticky;bottom:0;z-index:2;margin:0;padding:16px 0;background:var(--bg);border-top:1px solid var(--line)}
.assistant-try{position:sticky;top:calc(var(--header) + 24px);padding:20px;background:#fff;border:1px solid var(--line);border-radius:6px}
.assistant-try h2{margin:0 0 6px;font-size:18px}
.assistant-try>.field-hint{display:block;line-height:1.55}
.try-form{gap:14px;margin-top:16px}
.try-form textarea{min-height:0}
.try-reply{margin-top:16px;padding:12px 14px;border-radius:6px;background:#f4f2ef;color:var(--ink);font-size:14px;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere}
.try-reply.waiting{color:var(--muted)}
.try-reply.failed{background:#fff7f5;color:#95291f}
.try-empty{margin:12px 0 0;font-size:14px}

/* Preferences: assistant agreements ----------------------------------------------------------- */
.consent-list{margin:0;padding:0;list-style:none;border-top:1px solid var(--line)}
.consent-list li{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;padding:8px 0;border-bottom:1px solid var(--line);font-size:14px}

/* Grader --------------------------------------------------------------------------------------- */
.grader-page .space-layout{grid-template-columns:minmax(0,1fr)}
.grader-page .space-sidebar{display:none}
.grader-page .library-content{max-width:none;padding:0 0 32px}
.grader-page .library-content>.notice{margin:16px 24px 0}
.grader-bar{position:sticky;top:var(--header);z-index:15;display:flex;flex-wrap:wrap;align-items:center;gap:10px 24px;padding:10px 24px;background:#fff;border-bottom:1px solid var(--line)}
.grader-back{display:inline-flex;align-items:center;gap:6px;max-width:300px;min-height:40px;color:var(--ink);font-size:14px;font-weight:600;text-decoration:none}
.grader-back span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.grader-back:hover{color:var(--brick)}
.grader-back svg,.icon-button svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.grader-switch{display:flex;flex:1 1 420px;align-items:center;justify-content:center;gap:8px;min-width:0}
.grader-switch select{flex:0 1 380px;min-width:0;min-height:40px;padding:8px 12px;border:1px solid #c6c4bf;border-radius:5px;background:#fff;color:var(--ink);font:inherit;font-size:14px}
.icon-button{width:40px;min-height:40px;padding:0}
.icon-button[aria-disabled]{opacity:.4;pointer-events:none}
.grader-count{font-size:13px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.grader-progress{margin:0;font-size:13px;white-space:nowrap}
.grader-layout{display:grid;grid-template-columns:minmax(0,1fr) 260px 360px;gap:24px;align-items:start;padding:24px}
.grader-paper{min-width:0}
.paper-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 16px}
.paper-meta h1{margin:0;font-size:26px}
.paper-meta p{margin:0;font-size:13px}
.paper-hint{margin:4px 0 12px;font-size:13px}
.grader-paper .review-paper{max-width:none;min-height:70vh;padding:32px 36px;box-shadow:0 2px 6px #23262b12}
.grader-rail{position:sticky;top:calc(var(--header) + 84px);max-height:calc(100dvh - var(--header) - 104px);overflow:auto;padding:2px 4px 2px 0}
.grade-panel{position:sticky;top:calc(var(--header) + 84px);display:flex;flex-direction:column;max-height:calc(100dvh - var(--header) - 104px);overflow:auto;background:#fff;border:1px solid var(--line);border-radius:6px}
.grade-form{padding:18px 18px 0}
.grade-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:2px 12px}
.grade-head h2{margin:0;font-size:18px}
.grade-state{margin:0;font-size:12.5px}
.grade-panel .grade-total{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 4px;margin:10px 0 12px;color:var(--ink);font-size:30px;font-weight:650;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.grade-total .of{color:var(--muted);font-size:18px;font-weight:500}
.grade-progress{flex-basis:100%;color:var(--muted);font-size:12.5px;font-weight:400;letter-spacing:0}
.criterion{min-width:0;margin:0;padding:14px 0;border:0;border-top:1px solid var(--line)}
.criterion legend{float:left;display:flex;justify-content:space-between;gap:12px;width:100%;margin:0 0 8px;padding:0;font-size:14.5px;font-weight:650}
.criterion legend+*{clear:both}
.criterion-max{color:var(--muted);font-size:12.5px;font-weight:500;white-space:nowrap}
.level-picker{display:flex;flex-wrap:wrap;gap:6px}
.level-option{position:relative}
.level-option input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}
.level-option span{display:block;padding:6px 11px;border:1px solid #cbc6be;border-radius:5px;background:#fff;color:var(--ink);font-size:13px;font-weight:600}
.level-option:hover span{background:#efede8}
.level-option input:checked+span{background:var(--brick);border-color:var(--brick);color:#fff}
.level-option input:focus-visible+span{outline:2px solid var(--brick);outline-offset:2px}
.level-desc{margin:8px 0 0;font-size:12.5px;line-height:1.5}
.level-desc:empty{display:none}
.criterion-points{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:13px;font-weight:600}
.criterion-points input{width:84px;padding:7px 9px;border:1px solid #c6c4bf;border-radius:5px;background:#fff;color:var(--ink);font:inherit;font-variant-numeric:tabular-nums}
.criterion-points span{color:var(--muted);font-weight:400}
.criterion-comment{display:block}
.criterion-comment textarea,.overall textarea{display:block;width:100%;min-height:56px;margin-top:8px;padding:8px 10px;border:1px solid #c6c4bf;border-radius:5px;background:#fff;color:var(--ink);font:inherit;font-size:13.5px;line-height:1.5;resize:vertical}
.criterion:disabled :is(input,textarea),.overall textarea:disabled{background:#f2f1ed}
.overall{display:block;padding:14px 0;border-top:1px solid var(--line);font-size:14px;font-weight:650}
.grade-empty{padding:8px 0 18px}
.grade-empty p{font-size:14px}
.grade-actions{position:sticky;bottom:0;display:grid;gap:8px;margin:0 -18px;padding:12px 18px 16px;background:#fff;border-top:1px solid var(--line)}
.grade-actions .button{width:100%}
.grade-actions .text-button{justify-self:start;padding:6px 0}
.grade-actions .field-hint{margin:0}
.save-state{min-height:1.4em;margin:0;font-size:12.5px}
.save-state.failed{color:#95291f}

@media(max-width:1200px){
  .assistant-layout{grid-template-columns:minmax(0,1fr)}
  .assistant-try{position:static;max-width:760px}
  .grader-layout{grid-template-columns:minmax(0,1fr) 340px}
  .grader-rail{grid-column:1;grid-row:2;position:static;max-height:none}
  .grade-panel{grid-column:2;grid-row:1/span 2}
}
@media(max-width:900px){
  .canvas-benefits{grid-template-columns:minmax(0,1fr)}
  .grader-bar{padding:10px 16px}
  .grader-switch{flex-basis:100%;justify-content:flex-start}
  .grader-progress{white-space:normal}
  .grader-layout{grid-template-columns:minmax(0,1fr);padding:16px}
  .grader-rail,.grade-panel{grid-column:auto;grid-row:auto;position:static;max-height:none}
  .grader-paper .review-paper{min-height:240px;padding:22px 18px}
}
@media(max-width:650px){
  .setup-panel{padding:18px 16px 4px}
  .setup-step{grid-template-columns:28px minmax(0,1fr);gap:12px}
  .setup-step>.button,.setup-step>.step-link{grid-column:2;justify-self:start}
  .copy-field{flex-direction:column}
  .token-steps{padding:16px 18px}
  .paper-meta h1{font-size:22px}
}

/* Assignment settings -------------------------------------------------------------------------- */
.assignment-form{gap:0}
.form-group{display:grid;gap:16px;padding:26px 0;border-top:1px solid var(--line)}
.form-group:first-of-type{padding-top:0;border-top:0}
.form-group h2{margin:0;font-size:18px}
.form-group .check-row{margin:0}
.assignment-form>.settings-section{margin:0 0 4px}
.assignment-form{margin-bottom:28px}
.assignment-form>.button{justify-self:start;margin-top:20px}
.stack-form .choice-set{display:grid;gap:12px;margin:0;padding:0;border:0}
.stack-form .choice-set legend{margin:0 0 4px;padding:0;font-size:14px;font-weight:600}
.check-row input[type=radio]{flex-shrink:0;width:18px;height:18px;margin:4px 0 0;accent-color:var(--brick)}

/* Assignment overview -------------------------------------------------------------------------- */
.overview-counts{margin:-18px 0 20px;font-size:14px}
.overview-counts b{color:var(--ink)}
.release-all{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin:0 0 20px}
.release-all .field-hint{max-width:56ch}
.row-links{display:flex;flex-wrap:wrap;gap:4px 14px;white-space:nowrap}

/* People & TAs --------------------------------------------------------------------------------- */
.section-lead{max-width:72ch;font-size:14px}
.invite-ta{margin-top:24px;padding-top:4px}
.invite-ta h3{margin:0 0 12px;font-size:16px}
.invite-ta h4{margin:0 0 4px;font-size:16px}
.invite-ta .review-version{margin-bottom:8px}

/* Privacy & records ---------------------------------------------------------------------------- */
.privacy-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px 40px;max-width:1200px;margin-bottom:12px}
.privacy-block h2{margin:0 0 12px;font-size:18px}
.plain-list{display:grid;gap:10px;margin:0 0 14px;padding:0;list-style:none;font-size:14px;line-height:1.55;color:var(--ink)}
.plain-list li{padding-left:14px;position:relative}
.plain-list li::before{content:"";position:absolute;left:0;top:.62em;width:5px;height:5px;border-radius:50%;background:#ad9f95}
.privacy-footnote{max-width:75ch;margin-top:24px}
@media(max-width:1100px){.privacy-grid{grid-template-columns:minmax(0,1fr);max-width:760px}}

/* Finish-review fixes ---------------------------------------------------------------------------- */
.section-block>.assignment-row:last-of-type,.section-block>.course-row:last-of-type,.invite-ta>form.course-row:last-of-type,.section-block>article.member-row:last-of-type{border-bottom:0}
.home-assignments{margin-top:0;padding-top:0;border-top:0}
.setup-panel+.home-assignments{margin-top:30px;padding-top:22px;border-top:1px solid var(--line)}
.share-panel{margin-top:30px;padding-top:22px;border-top:1px solid var(--line)}
.share-panel .copy-field{margin-top:4px}
.assignment-form+details,.assignment-form+.settings-section{margin-top:12px}
.faculty-row-actions .text-button,.form-actions .text-button{padding-inline:0}
.grader-rail .wc-head b{color:var(--ink);font-size:18px;font-weight:650;letter-spacing:0;text-transform:none}
.grader-rail .wc-head span{font-size:13px}
.grade-actions .button[aria-disabled=true]{opacity:.55;cursor:not-allowed}
.jump-grade{display:none;width:fit-content;margin-top:6px;font-weight:600;white-space:nowrap}
@media(max-width:900px){
  .jump-grade{display:block}
  .grader-paper .review-paper .ql-container,.grader-paper .review-paper .ql-editor{min-height:0}
}
@media(max-width:650px){
  .grader-bar{position:static;gap:8px}
  .grader-progress{font-size:12px}
}

/* Portal accents: selectable within portal content only (Scoped Portal Rule). ------------------------ */
.accent-plum{--brick:#6e3f6d;--brick-hover:#572f56}
.accent-slate{--brick:#3f5068;--brick-hover:#2f3c50}
.accent-ochre{--brick:#8a5a12;--brick-hover:#6e470d}

/* Roadmap: linked writing stages and peer review in order ----------------------------------------- */
.roadmap{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(190px,1fr);margin:16px 0 8px;padding:0;list-style:none;overflow-x:auto}
.roadmap-step{position:relative;min-width:0;padding:0 20px 8px 0}
.roadmap-step::before{content:"";position:absolute;top:14px;left:32px;right:4px;height:2px;background:var(--line)}
.roadmap-step:last-child::before{display:none}
.roadmap-step.is-done::before{background:#266448}
.roadmap-mark{position:relative;z-index:1;display:grid;place-items:center;width:30px;height:30px;border:1.5px solid #cbc6be;border-radius:50%;background:#fff;color:var(--muted);font-size:13px;font-weight:650;font-variant-numeric:tabular-nums}
.roadmap-mark svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.3;stroke-linecap:round;stroke-linejoin:round}
.roadmap-step.is-done .roadmap-mark{background:#266448;border-color:#266448;color:#fff}
.roadmap-step.is-next .roadmap-mark,.roadmap-step.is-here .roadmap-mark{border:2px solid var(--brick);color:var(--brick)}
.roadmap-body{margin-top:10px;padding-right:8px}
.roadmap-body h4{margin:0;font-size:15px;font-weight:650;line-height:1.35;overflow-wrap:anywhere}
.roadmap-here{display:block;margin-top:2px;color:var(--brick);font-size:12px;font-weight:600}
.roadmap-kind,.roadmap-dates,.roadmap-status{margin:4px 0 0;font-size:13px}
.roadmap-dates{color:var(--ink);font-variant-numeric:tabular-nums}
.roadmap-status{margin-bottom:10px}
.roadmap-step.is-locked .roadmap-body h4,.roadmap-step.is-upcoming .roadmap-body h4,.roadmap-step.is-closed .roadmap-body h4{color:var(--muted)}
.roadmap .button{min-height:36px;padding:7px 12px;font-size:13px}
.roadmap-link{font-size:13px}

/* Portal page --------------------------------------------------------------------------------------- */
.portal-hero{margin:0 0 28px}
.portal-cover{display:block;width:100%;height:clamp(140px,22vw,260px);margin-bottom:24px;object-fit:cover;border-radius:6px;background:#f2f1ed}
.portal-band{height:120px;margin-bottom:24px;border-radius:6px;background:color-mix(in srgb,var(--brick) 14%,#fff)}
.portal-next{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;flex-basis:100%}
.portal-next p{flex-basis:100%;margin:0;color:var(--ink);font-size:15px}
.portal-heading h1{max-width:22ch;margin:0 0 6px;font-size:40px;letter-spacing:-.035em;text-wrap:balance}
.portal-byline{margin:0 0 14px;color:var(--ink);font-size:16px;font-weight:550}
.portal-intro{max-width:65ch;margin:0 0 18px;font-size:16px;line-height:1.65}
.portal-columns{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:48px;align-items:start;padding-top:28px;border-top:1px solid var(--line)}
.portal-main{min-width:0}
.portal-main>section+section{margin-top:40px}
.portal-main h2{margin:0 0 12px}
.portal-course+.portal-course{margin-top:28px}
.portal-course>h3{margin:0 0 4px;color:var(--muted);font-size:15px;font-weight:600}
.portal-project{padding:20px 0;border-bottom:1px solid var(--line)}
.project-head h3{margin:0 0 2px;font-size:18px}
.project-head p{margin:0;font-size:13px}
.project-notes{margin:4px 0 0;font-size:13px}
.portal-page .portal-assignment{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 24px;padding:20px 0;border-bottom:1px solid var(--line)}
.portal-assignment>div{flex:1 1 320px;min-width:0}
.portal-assignment h3{margin:0 0 4px;font-size:18px}
.portal-assignment p{margin:0;font-size:13px}
.assignment-status{margin:6px 0 0!important;color:var(--ink);font-size:13px}
.assignment-status.is-done{color:#266448}
.assignment-status.is-locked,.assignment-status.is-upcoming,.assignment-status.is-closed{color:var(--muted)}
.draft-tag{margin-left:10px;color:#67451d;font-size:12px;font-weight:500}
.portal-aside{position:sticky;top:calc(var(--header) + 24px);display:grid;gap:28px}
.portal-aside h2{margin:0 0 10px;font-size:16px}
.instructor-card{display:flex;align-items:center;gap:14px;margin-bottom:12px}
.instructor-card img{width:64px;height:64px;border-radius:50%;object-fit:cover}
.instructor-card div{display:grid;gap:2px;min-width:0;font-size:14px}
.instructor-card a{overflow-wrap:anywhere;font-size:13px}
.portal-about h3{margin:12px 0 4px;font-size:13px}
.portal-about p,.portal-privacy p{margin:0;font-size:14px}
.portal-about p+p{margin-top:10px}
.portal-links ul{display:grid;gap:8px;margin:0;padding:0;list-style:none;font-size:14px}
.announcement-list{margin:0;padding:0;list-style:none;border-top:1px solid var(--line)}
.announcement-list li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:4px 16px;padding:12px 0;border-bottom:1px solid var(--line)}
.announcement-list time{min-width:88px;padding-top:2px;white-space:nowrap;color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums}
.announcement-list p{margin:0;color:var(--ink);font-size:15px}
.announcement-list .text-button{padding:2px 0}
.earlier-notes>summary{width:fit-content;margin-top:10px;color:var(--brick);font-size:14px}
.preview-strip{max-width:none;margin:0 0 20px;padding:10px 14px;border:1px solid #ecd3a8;border-radius:6px;background:#fff5e5;color:#67451d;font-size:14px}
body.portal-preview :is(a,button,form,summary){pointer-events:none}

/* Portal builder ------------------------------------------------------------------------------------ */
.builder-layout{display:grid;grid-template-columns:minmax(0,560px) minmax(440px,1fr);gap:40px;align-items:start}
.builder-main{min-width:0}
.portal-form{gap:0}
.stack-form .theme-picker{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;border:0}
.stack-form .theme-picker legend{margin-bottom:8px;padding:0;font-size:14px;font-weight:600}
.stack-form .swatch{position:relative;display:flex;align-items:center;gap:7px;padding:7px 10px 7px 7px;border:1px solid var(--line);border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer}
.stack-form .swatch input[type=radio]{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:pointer}
.swatch-chip{width:20px;height:20px;border-radius:50%;background:var(--brick)}
.swatch:has(input:checked){border-color:var(--ink);box-shadow:0 0 0 1px var(--ink)}
.swatch:has(input:focus-visible){outline:2px solid var(--ink);outline-offset:2px}
.image-field{display:grid;gap:8px}
.image-label{font-size:14px;font-weight:600}
.image-thumb{display:block;max-width:100%;border:1px solid var(--line);border-radius:6px}
.cover-thumb{width:100%;max-width:520px;height:120px;object-fit:cover}
.photo-thumb{width:72px;height:72px;border-radius:50%;object-fit:cover}
.image-actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.file-button{cursor:pointer}
.stack-form .file-button input.sr-only{width:1px;padding:0}
.file-button:focus-within{outline:2px solid var(--brick);outline-offset:3px}
.link-rows{display:grid;gap:10px}
.link-rows+.button{justify-self:start}
.link-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr) auto;gap:10px;align-items:end}
.stack-form .link-row label{font-size:13px}
.builder-preview{position:sticky;top:calc(var(--header) + 24px);min-width:0}
.builder-preview>summary{width:fit-content;cursor:pointer}
.builder-preview>summary h2{display:inline;margin:0;font-size:18px}
.builder-preview[open]>summary{margin-bottom:8px}
.preview-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px}
.preview-head .field-hint{margin:0}
.preview-size{display:inline-flex;overflow:hidden;border:1px solid #cbc6be;border-radius:5px}
.preview-size button{padding:6px 12px;border:0;background:#fff;color:var(--ink);font:inherit;font-size:13px;font-weight:600}
.preview-size button.is-on{background:var(--ink);color:#fff}
.preview-frame{position:relative;overflow:hidden;margin-top:10px;border:1px solid var(--line);border-radius:6px;background:#fff;box-shadow:0 2px 6px #23262b12}
.preview-frame[data-mode=phone]{max-width:392px;margin-inline:auto}
.preview-frame iframe{display:block;border:0;transform-origin:0 0}
.announcements-editor{margin:0 0 12px}
.announcements-editor>form{margin-bottom:16px}

/* Assignment pages: projects, test student ------------------------------------------------------------ */
.project-block{padding:12px 0 0;border-bottom:1px solid var(--line)}
.project-block .roadmap{margin-bottom:0}
.project-block>.assignment-row:last-of-type{border-bottom:0}
.course-group>h2{margin-bottom:6px}
.roadmap-section .section-heading p{margin:4px 0 0;font-size:14px}
.test-strip{margin:0 0 24px;padding:16px 20px;border:1px solid var(--line);border-radius:6px;background:#fff}
.test-strip h2{margin:0 0 4px;font-size:16px}
.test-strip p{max-width:72ch;margin:0 0 10px;font-size:14px}

@media(max-width:1200px){
  .builder-layout{grid-template-columns:minmax(0,1fr)}
  .builder-preview{order:-1;position:static;max-width:760px;padding-bottom:20px;border-bottom:1px solid var(--line)}
}
@media(max-width:1000px){
  .portal-columns{grid-template-columns:minmax(0,1fr)}
  .portal-aside{position:static}
}
@media(max-width:760px){
  .roadmap{grid-auto-flow:row;grid-auto-columns:auto;overflow:visible}
  .roadmap-step{display:grid;grid-template-columns:30px minmax(0,1fr);gap:12px;padding:0 0 16px}
  .roadmap-step::before{top:30px;bottom:0;left:14px;right:auto;width:2px;height:auto}
  .roadmap-body{margin-top:3px}
}
@media(max-width:650px){
  .portal-heading h1{font-size:30px}
  .announcement-list li{grid-template-columns:minmax(0,1fr)}
  .link-row{grid-template-columns:minmax(0,1fr)}
}

/* Classes: one per Canvas course ------------------------------------------------------------------- */
.class-block{padding:22px 0;border-bottom:1px solid var(--line)}
.class-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px 24px}
.class-head h3{margin:0 0 4px;font-size:18px}
.class-head h3 a{color:var(--ink);text-decoration:none}
.class-head h3 a:hover{color:var(--brick);text-decoration:underline}
.class-head p{margin:0;color:var(--muted);font-size:13px}
.state-off{color:var(--muted);font-size:13px;font-weight:600}
.class-courses{display:grid;gap:8px;margin:14px 0 0;padding:0;list-style:none}
.class-courses li{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 20px;padding:10px 14px;border-radius:6px;background:#f2f1ed}
.class-courses li>div:first-child{display:grid;gap:2px;min-width:0}
.class-courses b{font-size:14px;font-weight:600}
.class-courses span{color:var(--muted);font-size:13px}
.class-courses .faculty-row-actions{gap:14px}
.class-list>.field-hint{margin-top:14px}
.removed-courses .course-row{padding:14px 0}
.add-class-row{align-items:flex-start}
.add-class-actions{display:grid;justify-items:end;gap:8px;flex-shrink:0;min-width:0;max-width:100%}
.join-class{max-width:100%}
.join-class select{width:min(320px,100%);min-width:0}
.join-class>summary{width:fit-content;color:var(--brick);font-size:13px;cursor:pointer}
.join-class .review-version{margin:8px 0 4px}
.join-class .field-hint{max-width:40ch;margin:0}
.share-class{padding:14px 0 4px;border-top:1px solid var(--line)}
.share-class h3{margin:0 0 8px;font-size:16px}
.share-class>p{margin:0;font-size:14px}
.class-pick{margin:0}
.class-pick select{max-width:320px}
.class-list~.connection-panel{margin-top:36px;padding-top:24px;border-top:1px solid var(--line)}
@media(max-width:760px){
  .add-class-actions{justify-items:start}
  .class-courses li{align-items:flex-start}
}
.records-line{margin:2px 0 0!important;color:var(--muted);font-size:13px}
.records-notice{margin-bottom:12px}

/* Getting started guide ------------------------------------------------------------------------------ */
.guide-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:48px;align-items:start}
.guide-toc{position:sticky;top:calc(var(--header) + 24px);display:grid;gap:6px;font-size:14px}
.guide-toc>a{color:var(--ink);font-weight:650;text-decoration:none}
.guide-toc ol{margin:0 0 14px;padding:0 0 0 18px;display:grid;gap:4px;color:var(--muted);font-size:13px}
.guide-toc ol a{color:var(--muted)}
.guide-toc ol a:hover{color:var(--brick)}
.guide-body{max-width:68ch;min-width:0}
.guide-body>section+section{margin-top:44px;padding-top:28px;border-top:1px solid var(--line)}
.guide-body h2{margin:0 0 18px}
.guide-steps{list-style:none;margin:0;padding:0;counter-reset:guide}
.guide-steps>li{position:relative;padding:0 0 26px 44px;counter-increment:guide;scroll-margin-top:8px}
.guide-steps>li::before{content:counter(guide);position:absolute;left:0;top:0;display:grid;place-items:center;width:28px;height:28px;border:1.5px solid #cbc6be;border-radius:50%;background:#fff;color:var(--muted);font-size:13px;font-weight:650;font-variant-numeric:tabular-nums}
.guide-steps>li:target::before{border-color:var(--brick);color:var(--brick)}
.guide-steps h3{margin:3px 0 8px;font-size:17px}
.guide-steps p,.guide-steps li li{max-width:65ch;margin:0 0 8px;color:var(--ink);font-size:15px;line-height:1.6}
.guide-steps ul{margin:0 0 8px;padding-left:20px}
.guide-where{color:var(--muted)!important;font-size:13px!important}
.guide-help{margin-top:8px}
.setup-panel .section-heading{align-items:baseline}
.setup-panel .section-heading a{font-size:14px}
@media(max-width:900px){
  .guide-layout{grid-template-columns:minmax(0,1fr);gap:24px}
  .guide-toc{position:static;padding-bottom:16px;border-bottom:1px solid var(--line)}
}
.settings-section>summary>.summary-hint{display:block;margin:2px 0 0 18px}
.settings-separate{margin:28px 0 -8px}
.grade-general-title{margin:18px 0 4px;font-size:15px}
.inline-comments-note{margin-bottom:8px}

/* Public demo -------------------------------------------------------------------------------------- */
.demo-banner .demo-actions{display:flex;flex-wrap:wrap;gap:8px}
.demo-home{max-width:880px;padding:12px 0 32px}
.demo-home h1{margin:0 0 10px;font-size:40px;letter-spacing:-.035em}
.demo-lead{max-width:62ch;margin:0 0 28px;color:var(--ink);font-size:17px;line-height:1.6}
.demo-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px;margin:0 0 24px;padding:24px 0;border-block:1px solid var(--line)}
.demo-choice h2{margin:0 0 6px;font-size:20px}
.demo-choice p{max-width:42ch;margin:0 0 16px;font-size:15px;line-height:1.6}
.demo-choice button[aria-busy=true]{opacity:.7;cursor:progress}
@media(max-width:650px){
  .demo-home h1{font-size:30px}
  .demo-choices{grid-template-columns:minmax(0,1fr);gap:20px}
}

/* Folded sections: a set-once section shows its current value on one line and opens to change it. */
.fold{border-top:1px solid var(--line)}
.fold>summary{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:16px;row-gap:3px;align-items:center;min-height:44px;padding:18px 0;cursor:pointer;list-style:none}
.fold>summary::-webkit-details-marker{display:none}
.fold>summary h2{margin:0;font-size:17px;line-height:1.35}
.fold>summary:focus-visible{outline:2px solid var(--brick);outline-offset:4px;border-radius:4px}
.fold-value,.fold-edited{grid-column:1;min-width:0;overflow:hidden;font-size:14px;color:var(--muted);text-overflow:ellipsis;white-space:nowrap}
.fold-value.needs-attention,.fold-edited{color:#8a4a12}
.fold-value.needs-attention::before{content:"";display:inline-block;width:7px;height:7px;margin-right:8px;border-radius:50%;background:#c47a1a;vertical-align:1px}
.fold-edited{font-weight:600}
.fold-action{grid-column:2;grid-row:1/span 3;display:inline-flex;align-items:center;gap:9px;font-size:14px;font-weight:600;color:var(--brick)}
.fold-action::after{content:"";width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .16s ease-out}
.fold>summary:hover .fold-action>span{text-decoration:underline;text-underline-offset:3px}
.fold[open]>summary .fold-action::after{transform:translateY(2px) rotate(-135deg)}
.fold:not([open]) .when-open,.fold[open] .when-closed,.fold[open]>summary .fold-value{display:none}
.fold-body{display:grid;gap:16px;padding:2px 0 28px}
.fold-body>.section-intro{margin:0}
.open-group{padding-block:20px}
@media(prefers-reduced-motion:reduce){.fold-action::after{transition:none}}
.fold-body>.check-row{margin:0}
.prompt-details{border-top:1px solid var(--line);padding-top:14px}
.prompt-details>summary{display:inline-flex;align-items:center;min-height:40px;font-size:14px;font-weight:600;color:var(--brick);cursor:pointer}
.prompt-details[open]>summary{margin-bottom:12px}
.prompt-details>.section-heading h3{margin:0;font-size:16px}
.prompt-details>.section-intro{margin:6px 0 12px}
.access-table .times{margin-left:6px;padding:1px 7px;border-radius:999px;background:var(--quiet);color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap}
.earlier-access{margin-top:14px}
.earlier-access>summary{display:inline-flex;align-items:center;min-height:40px;font-size:14px;font-weight:600;color:var(--brick);cursor:pointer}
.earlier-access[open]>summary{margin-bottom:10px}
/* The test-student strip is a quiet one-line aside, not a second call to action. */
.test-strip{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:2px 24px;padding:14px 18px;border:0;background:var(--quiet)}
.test-strip h2{grid-column:1;margin:0;font-size:15px}
.test-strip p{grid-column:1;margin:0;color:var(--muted)}
.test-strip>.faculty-row-actions{grid-column:2;grid-row:1/span 2;margin:0}
@media(max-width:760px){.test-strip{grid-template-columns:minmax(0,1fr)}.test-strip>.faculty-row-actions{grid-column:1;grid-row:auto;margin-top:10px}}
