/* ==========================================================================
   Class marking · ieltswithmourad (FREE-HANDIN.md §4, assets/course-desk.js)
   Every rule is scoped to a desk- class, so nothing else on the site changes.
   Same tokens as course.css. Works down to 320 px; the report prints on A4.
   ========================================================================== */

.desk-loading{color:var(--muted);margin:10px 0}
.desk-fine{font-size:14.5px;color:var(--muted);margin:14px 0 0;max-width:66ch}
.desk-hint{display:block;font-size:14.5px;color:var(--muted);margin:0 0 6px;max-width:62ch}
.desk-status{margin:0 0 18px;color:var(--ink-2)}
.desk-state{padding:20px 22px;margin:0 0 18px;background:var(--white);border:1px dashed var(--line-2);border-radius:var(--radius);color:var(--ink-2)}
.desk-state p{margin:0 0 6px}
.desk-state p:last-child{margin-bottom:0}
.desk-state-title{font:700 18px/1.3 var(--serif);color:var(--ink)}
.desk-reminder{align-items:center;flex-wrap:wrap}
.desk-sub-h{font-size:17px;margin:18px 0 8px}
.desk-rows{margin:0 0 18px}

/* ---- Forms ------------------------------------------------------------------ */

.desk-form{max-width:40rem}
.desk-row{margin:0 0 18px;min-width:0}
.desk-row .field{margin:0 0 6px}
.desk-input{
  display:block;width:100%;max-width:100%;min-height:48px;
  padding:10px 12px;font:inherit;color:var(--ink);
  background:var(--white);border:1px solid var(--line-2);border-radius:var(--radius);
}
textarea.desk-input{min-height:80px;resize:vertical;line-height:1.5}
select.desk-input{padding-right:8px}
.desk-input:focus-visible{outline:3px solid var(--gold);outline-offset:1px;border-color:var(--ink-2)}
.desk-input[aria-invalid="true"]{border-color:var(--red);box-shadow:inset 0 0 0 1px var(--red)}
.desk-code{font-family:ui-monospace,Consolas,"Courier New",monospace;font-size:14px;word-break:break-all}
.desk-error{margin:6px 0 0;color:var(--red-dark);font-weight:600;font-size:15px}
.desk-fieldset{border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px 4px;margin:0 0 20px;min-width:0;background:var(--white)}
.desk-legend{font:700 17px/1.3 var(--serif);padding:0 6px}
.desk-choices{margin:-8px 0 16px}
.desk-choices:empty{display:none}
.desk-choice{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}
.desk-choice:last-child{border-bottom:0}
.desk-choice input{flex:none;width:20px;height:20px;margin:3px 0 0;accent-color:var(--red)}
.desk-choice label{cursor:pointer;min-width:0;overflow-wrap:anywhere}
.desk-choice-title{display:block;font-weight:600}
.desk-chosen{margin:0 0 12px;font-weight:600;color:var(--ink-2)}
.desk-check{display:flex;align-items:flex-start;gap:10px;margin:0 0 14px}
.desk-check input{flex:none;width:22px;height:22px;margin:2px 0 0;accent-color:var(--red)}
.desk-check label{display:block;min-height:26px;cursor:pointer}
.desk-check label .desk-hint{margin:2px 0 0}
.desk-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:6px 0 14px}
.desk-msg{margin:0 0 10px}
.desk-msg:empty{display:none}
.desk-msg--error,.desk-msg--ok{padding:12px 14px;border-radius:var(--radius);font-weight:600;border-left:4px solid}
.desk-msg--error{background:var(--red-soft);border-color:var(--red);color:var(--red-dark)}
.desk-msg--ok{background:var(--navy-soft);border-color:var(--ink-2);color:var(--ink)}
.desk-confirm{margin:10px 0 0;padding:14px 16px;background:var(--paper);border:1px solid var(--line-2);border-left:4px solid var(--red);border-radius:var(--radius)}
.desk-confirm p{margin:0 0 6px}
.desk-preview{margin:10px 0 0;padding:14px 16px;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius)}
.desk-preview p{margin:0 0 8px}
.desk-disclosure{margin:0 0 18px}
.desk-restore-file{margin-top:4px}

/* ---- Task link and QR -------------------------------------------------------- */

.desk-qr{margin:8px 0 0}
.desk-qr-fig{margin:0;display:flex;flex-direction:column;align-items:center;gap:10px;padding:16px;background:#fff;border:1px solid var(--line);border-radius:var(--radius)}
.desk-qr-fig svg{display:block;width:min(100%,520px);height:auto}
.desk-qr-fig figcaption{font-size:15px;color:var(--ink-2);text-align:center;overflow-wrap:anywhere}

/* ---- Hand-ins ----------------------------------------------------------------- */

.desk-drop{
  position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;
  padding:26px 16px;margin:0 0 20px;cursor:pointer;
  background:var(--paper);border:2px dashed var(--line-2);border-radius:var(--radius);
}
.desk-drop:hover{background:var(--paper-2)}
.desk-drop.is-over{border-color:var(--red);background:var(--red-soft)}
.desk-drop-title{font:700 19px/1.3 var(--serif);color:var(--ink)}
.desk-drop .desk-hint{margin:0}
.desk-drop-btn{margin-top:8px}
/* The real file input: visually hidden, still focusable; the drop zone shows its focus. */
.desk-file{position:absolute;width:1px;height:1px;min-height:0;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0;opacity:0}
.desk-drop:focus-within{outline:3px solid var(--gold);outline-offset:2px}
.desk-scan{margin:4px 0 8px}
.desk-cam{margin:6px 0 0}
.desk-video{display:block;width:100%;max-width:420px;border-radius:var(--radius);background:#000}
.desk-summary{font-weight:600;margin:0 0 10px}
.desk-result-list{list-style:none;margin:0 0 18px;padding:0}
.desk-result{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline;padding:10px 14px;margin:0 0 8px;background:var(--white);border:1px solid var(--line);border-left:4px solid var(--line-2);border-radius:var(--radius)}
.desk-result--added{border-left-color:var(--ink-2)}
.desk-result--duplicate{border-left-color:var(--gold)}
.desk-result--problem{border-left-color:var(--red);background:var(--red-soft)}
.desk-result--clash{border-left-color:var(--red)}
.desk-result-label{font-weight:700;overflow-wrap:anywhere}
.desk-result-text{flex:1 1 16rem;min-width:0;overflow-wrap:anywhere}

/* ---- Class table -------------------------------------------------------------- */

.desk-filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 16px}
.desk-filters>*{min-width:0}
.desk .table-wrap{position:relative}   /* keeps the screen-reader-only text inside the scrolling box */
.desk-table{font-size:14.5px}
.desk-table th{white-space:normal}
.desk-table td:first-child{white-space:normal}
.desk-who-name,.desk-who-code{display:block}
.desk-who-code{white-space:nowrap}
.desk-who-name + .desk-who-code{font-weight:400;font-size:13px;color:var(--muted)}
.desk-th-title{display:block;text-transform:none;letter-spacing:0;font-size:13.5px;color:var(--ink);min-width:8rem}
.desk-th-due{display:block;font-weight:400;text-transform:none;letter-spacing:0;font-size:12.5px;color:var(--muted)}
.desk-who{font:600 14.5px/1.3 var(--sans)!important;text-transform:none!important;letter-spacing:0!important;color:var(--ink)!important;background:var(--white)!important;overflow-wrap:anywhere}
.desk-cell--none{color:var(--muted)}
.desk-cell--todo{background:var(--gold-soft)}
.desk-cell-link{display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-height:44px;color:var(--ink);text-decoration:none}
.desk-cell-link:hover .desk-cell-main{text-decoration:underline;text-underline-offset:3px}
.desk-cell-main{font-weight:600}
.desk-tag{display:inline-block;font-size:12.5px;line-height:1.3;padding:1px 7px;border-radius:999px;background:var(--navy-soft);color:var(--ink)}
.desk-tag--late{background:var(--red-soft);color:var(--red-dark)}
.desk-clash{margin:0 0 18px}

/* ---- Marking ------------------------------------------------------------------- */

.desk-attempts{margin:-10px 0 12px;font-size:15px}
.desk-marks{list-style:none;margin:0;padding:0}
.desk-marks li{display:grid;grid-template-columns:minmax(0,9rem) minmax(0,1fr) auto;gap:2px 14px;padding:8px 0;border-top:1px solid var(--line)}
.desk-marks li .desk-mark-a.desk-hint{grid-column:2}
.desk-mark-q{font-weight:600}
.desk-mark-a{overflow-wrap:anywhere;min-width:0}
.desk-mark-a.desk-hint{margin:0}
.desk-mark-k{color:var(--muted)}
.desk-mark-v{font-weight:600;grid-column:3;grid-row:1}
.desk-marks .is-wrong .desk-mark-v{color:var(--red-dark)}
.desk-work-part{margin:0 0 16px}
.desk-work-text{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;line-height:1.6}
.desk-line{margin:0 0 6px;overflow-wrap:anywhere}
.desk-sent p{margin:0 0 8px;overflow-wrap:anywhere}

/* ---- The A4 report --------------------------------------------------------------- */

.desk-report{page:desk-a4}
.desk-report-head{margin:0 0 20px}
.desk-brand{margin:0 0 8px;font:600 13px/1.3 var(--sans);letter-spacing:.02em;color:var(--gold-ink)}
.desk-report-class{margin:0 0 4px;color:var(--muted)}
.desk-report-head h1{font-size:clamp(28px,4vw,38px);margin:0 0 8px;overflow-wrap:anywhere}
.desk-report-head h1:focus{outline:none}
.desk-report-note{margin:10px 0 0;font-weight:600;color:var(--ink-2)}
.desk-report-table td:first-child{white-space:normal}
.desk-support{color:var(--muted)}
.desk-report-fb{break-inside:avoid;page-break-inside:avoid;margin:0 0 12px}
.desk-report-fb p{margin:0 0 6px;overflow-wrap:anywhere}
.desk-report-foot{font-size:13px;color:var(--muted);margin:18px 0 0}
.desk-report .desk-hint{max-width:none}

@page desk-a4{size:A4;margin:14mm}

@media (max-width:720px){
  .desk-filters{grid-template-columns:1fr}
  .desk-actions .btn{width:100%}
  .desk-marks li{grid-template-columns:minmax(0,1fr) auto}
  .desk-marks li .desk-mark-a,.desk-marks li .desk-mark-a.desk-hint{grid-column:1 / -1}
  .desk-mark-v{grid-column:2}
  .desk-reminder .btn{width:100%}
}

@media print{
  body[data-view="desk"] .desk-actions,body[data-view="desk"] .desk-check,body[data-view="desk"] .desk-msg{display:none!important}
  .desk-report{font-size:10.5pt}
  .desk-report-head h1{font-size:20pt}
  .desk-brand{color:#000}
  .desk-report .table-wrap{border-color:#999}
  .desk-report-table{font-size:9.5pt}
  .desk-report-foot{color:#333}
  .desk-report .desk-hint{font-size:inherit;color:#333}
}
