/*!*************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[12].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[12].use[3]!./app/globals.css ***!
  \*************************************************************************************************************************************************************************************************************************************************************/
/* Transparent-AI-TA 테마 — Korea University Crimson + 피로도 낮은 그레이.
   채점기이므로 차분하고 'new' 한 느낌의 SaaS 톤. */
:root {
  --ku-crimson: #862633;
  --ku-crimson-600: #6f1f2a;
  --ku-crimson-50: #fbeef0;
  --gray-50: #f8f9fa;
  --gray-100: #f1f3f5;
  --gray-200: #e9ecef;
  --gray-300: #dee2e6;
  --gray-500: #868e96;
  --gray-700: #343a40;
  --gray-900: #212529;
  --radius: 10px;
  --sidebar-w: 280px;
}

* { box-sizing: border-box; }
html, body {
  margin: 0;
  padding: 0;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
    "Apple SD Gothic Neo", "Noto Sans KR", sans-serif;
  color: var(--gray-900);
  background: var(--gray-50);
}
a { color: var(--ku-crimson); text-decoration: none; }
button {
  font: inherit;
  cursor: pointer;
  border: none;
  border-radius: var(--radius);
  padding: 9px 16px;
  background: var(--ku-crimson);
  color: #fff;
  transition: background 0.15s ease;
}
button:hover { background: var(--ku-crimson-600); }
button.secondary { background: var(--gray-200); color: var(--gray-900); }
button.secondary:hover { background: var(--gray-300); }
button:disabled { opacity: 0.5; cursor: not-allowed; }

.card {
  background: #fff;
  border: 1px solid var(--gray-200);
  border-radius: var(--radius);
  padding: 20px;
}

/* --- 로그인 (요즘 SaaS 톤) --- */
.login-wrap {
  min-height: 100vh;
  display: grid;
  place-items: center;
  background: linear-gradient(135deg, var(--ku-crimson-50), var(--gray-100));
}
.login-card { width: 380px; text-align: center; }
.login-card h1 { color: var(--ku-crimson); margin: 0 0 4px; font-size: 24px; }
.login-card p.sub { color: var(--gray-500); margin: 0 0 24px; font-size: 14px; }
.login-card input {
  width: 100%; padding: 11px 13px; margin: 6px 0;
  border: 1px solid var(--gray-300); border-radius: var(--radius); font: inherit;
}
.login-card button { width: 100%; margin-top: 8px; }
.divider { display: flex; align-items: center; gap: 10px; color: var(--gray-500); margin: 16px 0; font-size: 13px; }
.divider::before, .divider::after { content: ""; flex: 1 1; height: 1px; background: var(--gray-200); }

/* --- 앱 셸 --- */
.app-shell { display: flex; min-height: 100vh; }
.sidebar {
  width: var(--sidebar-w);
  background: #fff;
  border-right: 1px solid var(--gray-200);
  padding: 16px 12px;
  transition: width 0.2s ease;
  overflow: hidden;
}
.sidebar.collapsed { width: 56px; padding: 16px 8px; }
.sidebar .brand { color: var(--ku-crimson); font-weight: 700; font-size: 16px; padding: 4px 8px 14px; }
.sidebar-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.sidebar-backdrop,
.sidebar-close { display: none; }
.tree-term { font-size: 12px; color: var(--gray-500); margin: 12px 6px 4px; text-transform: uppercase; letter-spacing: 0.5px; }
.tree-node { padding: 6px 8px; border-radius: 8px; cursor: pointer; font-size: 14px; }
.tree-node:hover { background: var(--gray-100); }
.tree-exam { padding: 5px 8px 5px 22px; border-radius: 8px; cursor: pointer; font-size: 13px; color: var(--gray-700); }
.tree-exam:hover { background: var(--ku-crimson-50); }
.tree-exam.active { background: var(--ku-crimson-50); color: var(--ku-crimson); font-weight: 600; }

.main { flex: 1 1; padding: 28px 36px; max-width: 1100px; }
.toolbar { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
.toolbar .collapse-btn { background: var(--gray-100); color: var(--gray-700); padding: 6px 10px; }

@media (max-width: 760px) {
  .app-shell { display: block; min-height: 100dvh; }
  .sidebar {
    position: fixed;
    inset: 0 auto 0 0;
    z-index: 40;
    width: min(var(--sidebar-w), 86vw);
    max-width: 320px;
    height: 100dvh;
    overflow-y: auto;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);
    transition: transform 0.2s ease;
  }
  .sidebar-backdrop {
    display: block;
    position: fixed;
    inset: 0;
    z-index: 35;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: rgba(17, 24, 39, 0.32);
  }
  .sidebar-backdrop:hover { background: rgba(17, 24, 39, 0.32); }
  .sidebar-close {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    min-width: 32px;
    padding: 3px 8px;
    background: var(--gray-100);
    color: var(--gray-700);
    font-size: 20px;
    line-height: 1;
  }
  .sidebar-close:hover { background: var(--gray-200); }
  .sidebar.collapsed {
    width: min(var(--sidebar-w), 86vw);
    padding: 16px 12px;
    transform: translateX(-105%);
    box-shadow: none;
  }
  .main {
    width: 100%;
    max-width: none;
    padding: 18px 14px 28px;
  }
  .toolbar {
    gap: 8px;
    flex-wrap: wrap;
    align-items: center;
  }
  .toolbar .collapse-btn {
    position: -webkit-sticky;
    position: sticky;
    top: 10px;
    z-index: 30;
  }
}


/* --- 업로드 드롭존 --- */
.dropzone {
  border: 2px dashed var(--gray-300);
  border-radius: var(--radius);
  padding: 32px;
  text-align: center;
  color: var(--gray-500);
  background: var(--gray-50);
  transition: all 0.15s ease;
}
.dropzone.drag { border-color: var(--ku-crimson); background: var(--ku-crimson-50); color: var(--ku-crimson); }
.file-row { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--gray-100); }
.file-row .name { flex: 1 1; font-size: 14px; }
.file-row select { padding: 6px 8px; border: 1px solid var(--gray-300); border-radius: 8px; font: inherit; }
.exam-input-requirements {
  margin-bottom: 14px;
  padding: 12px 14px;
  border: 1px solid var(--gray-200);
  border-radius: 8px;
  background: var(--gray-50);
}
.exam-input-requirements-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
}
.exam-input-requirements ul {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  grid-gap: 7px;
  gap: 7px;
  margin: 10px 0 0;
  padding: 0;
  list-style: none;
}
.exam-input-requirements li {
  display: grid;
  grid-template-columns: 20px minmax(0, 1fr) auto;
  align-items: center;
  grid-gap: 7px;
  gap: 7px;
  min-width: 0;
  padding: 7px 9px;
  border: 1px solid var(--gray-200);
  border-radius: 7px;
  background: #fff;
  font-size: 13px;
}
.exam-input-requirements li > :first-child {
  display: inline-grid;
  width: 18px;
  height: 18px;
  place-items: center;
  border-radius: 50%;
  font-size: 11px;
  font-weight: 700;
}
.exam-input-requirements li.complete > :first-child {
  background: #d3f9d8;
  color: #2b8a3e;
}
.exam-input-requirements li.missing {
  border-color: #f0c8ce;
  background: #fffafb;
}
.exam-input-requirements li.missing > :first-child {
  background: var(--ku-crimson-50);
  color: var(--ku-crimson);
}

/* --- 진행바 --- */
.progress { height: 10px; background: var(--gray-200); border-radius: 999px; overflow: hidden; }
.progress > div { height: 100%; background: var(--ku-crimson); transition: width 0.3s ease; }
.badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.badge.queued { background: var(--gray-200); color: var(--gray-700); }
.badge.running { background: #fff3cd; color: #8a6d00; }
.badge.succeeded { background: #d3f9d8; color: #2b8a3e; }
.badge.failed { background: #ffe3e3; color: #c92a2a; }

.muted { color: var(--gray-500); font-size: 13px; }
h2 { font-size: 18px; }
.workflow { display: flex; gap: 8px; flex-wrap: wrap; margin: 12px 0 20px; }
.wf-step { padding: 6px 12px; border-radius: 999px; background: var(--gray-100); color: var(--gray-500); font-size: 12px; }
.wf-step.active { background: var(--ku-crimson); color: #fff; }
.wf-step.done { background: #d3f9d8; color: #2b8a3e; }
.markdown-view .katex-display {
  overflow-x: auto;
  overflow-y: hidden;
  padding-bottom: 2px;
}

.markdown-view .katex-display > .katex {
  white-space: nowrap;
}

/* --- 검증 작업대 --- */
.main.review-main-wide {
  max-width: none;
}
.main:has(.review-shell) {
  max-width: none;
}
.review-shell {
  width: 100%;
  background: transparent;
  border: 0;
  border-radius: 0;
  padding: 0;
}
.review-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 14px;
}
.review-header h3 {
  margin: 0;
  font-size: 17px;
}
.review-subtitle {
  margin-top: 4px;
}
.review-toolbar {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  flex-wrap: wrap;
}
.review-workbench {
  display: grid;
  /* 드래그 리사이즈: --rail-w / --insp-w 는 ReviewWorkbench 가 인라인으로 지정 */
  grid-template-columns: minmax(180px, var(--rail-w, 260px)) 8px minmax(0, 1fr);
  grid-gap: 10px;
  gap: 10px;
  align-items: start;
}
.review-workbench.no-rail {
  grid-template-columns: minmax(0, 1fr);
}
.review-workbench.has-inspector {
  grid-template-columns: minmax(180px, var(--rail-w, 260px)) 8px minmax(0, 1fr) 8px minmax(260px, var(--insp-w, 340px));
}
.review-workbench.no-rail.has-inspector {
  grid-template-columns: minmax(0, 1fr) 8px minmax(260px, var(--insp-w, 430px));
}
.review-col-resize {
  width: 8px;
  min-width: 8px;
  align-self: stretch;
  cursor: col-resize;
  border-radius: 4px;
  background: linear-gradient(90deg, transparent, var(--gray-300), transparent);
  touch-action: none;
}
.review-col-resize:hover {
  background: linear-gradient(90deg, transparent, var(--ku-crimson), transparent);
}
.review-rail,
.review-inspector {
  min-width: 0;
  max-height: calc(100dvh - 220px);
  overflow: auto;
  border: 0;
  border-radius: 0;
  background: transparent;
  padding: 0;
}
.review-workspace {
  min-width: 0;
}
.review-detail-stack {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.review-detail-item {
  margin: 0;
  padding: 12px 0 16px;
  background: #fff;
}
.review-detail-item.flagged {
  margin-inline: -10px;
  padding-inline: 10px;
  background: color-mix(in srgb, var(--ku-crimson-50) 68%, #fff);
}
.review-detail-stack .review-detail-item + .review-detail-item,
.review-detail-item + .review-detail-item {
  padding-top: 16px;
}
.review-inline-panel {
  margin-bottom: 12px;
  padding: 10px 0;
  background: transparent;
}
.review-inline-panel.warning {
  padding: 8px 10px;
  background: #fff0f1;
}
.review-empty {
  padding: 36px;
  text-align: center;
  border: 0;
  border-radius: 0;
  background: transparent;
}
.page-viewer {
  min-width: 0;
}
.page-viewer-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}
.page-viewer-bar button {
  padding: 5px 10px;
  font-size: 12px;
}
.page-viewer-current {
  font-size: 13px;
  font-weight: 700;
}
.page-viewer-image-wrap {
  max-height: calc(100dvh - 260px);
  overflow: auto;
  border: 0;
  border-radius: 0;
  background: #fff;
}
.page-viewer-image {
  display: block;
  width: 100%;
  max-width: none;
  height: auto;
  background: #fff;
}
.scan-inline-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 8px;
  min-height: 30px;
}
.scan-zoom-controls {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  flex: 0 0 auto;
}
.scan-zoom-controls button {
  min-width: 30px;
  padding: 4px 8px;
  border-radius: 6px;
  font-size: 12px;
  line-height: 1.2;
}
.scan-zoom-controls .scan-zoom-percent {
  min-width: 56px;
  font-feature-settings: "tnum";
  font-variant-numeric: tabular-nums;
}
.scan-inline-image-wrap {
  max-height: 72dvh;
  overflow: auto;
  background: #fff;
}
.scan-inline-image {
  display: block;
  width: 100%;
  max-width: none;
  height: auto;
  background: #fff;
}
.image-zoom-backdrop {
  position: fixed;
  inset: 0;
  z-index: 1000;
  background: rgba(33, 37, 41, 0.55);
  display: grid;
  place-items: center;
  padding: 22px;
}
.image-zoom-panel {
  width: min(1180px, 94vw);
  height: min(860px, 92dvh);
  display: flex;
  flex-direction: column;
  border: 1px solid var(--gray-300);
  border-radius: 8px;
  background: #fff;
  box-shadow: 0 18px 50px rgba(0, 0, 0, 0.28);
  overflow: hidden;
}
.image-zoom-toolbar {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 9px 10px;
  border-bottom: 1px solid var(--gray-200);
  background: var(--gray-50);
}
.image-zoom-toolbar strong {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 13px;
}
.image-zoom-toolbar button {
  padding: 5px 9px;
  font-size: 12px;
  border-radius: 6px;
}
.image-zoom-stage {
  flex: 1 1;
  overflow: auto;
  background: var(--gray-100);
  padding: 16px;
}
.image-zoom-img {
  display: block;
  min-width: 360px;
  height: auto;
  margin: 0 auto;
  background: #fff;
  box-shadow: 0 1px 8px rgba(33, 37, 41, 0.18);
}
.page-strip {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 10px;
}
.page-strip button {
  padding: 4px 8px;
  font-size: 11px;
}
.review-list-item {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 7px 8px;
  border-radius: 8px;
  cursor: pointer;
  font-size: 13px;
}
.review-list-item:hover,
.review-list-item.active {
  background: var(--ku-crimson-50);
  color: var(--ku-crimson);
}
.review-list-item .label {
  flex: 1 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bubble-review-nav {
  min-width: min(100%, 640px);
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-gap: 7px 12px;
  gap: 7px 12px;
  align-items: center;
}
.bubble-review-progress {
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.bubble-review-progress.secondary-line {
  grid-column: 1 / -1;
  gap: 12px;
}
.bubble-review-current {
  font-size: 14px;
  font-weight: 700;
}
.bubble-review-actions {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}
.bubble-review-actions button {
  padding: 5px 10px;
  font-size: 12px;
}

/* Canvas-like review launcher */
.review-launch {
  background: transparent;
  border: 0;
  border-radius: 0;
  margin-bottom: 16px;
  overflow: visible;
}
.review-launch-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 0 0 14px;
  border-bottom: 0;
}
.review-launch-header h3 {
  margin: 0 0 4px;
  font-size: 17px;
}
.review-launch-grid {
  display: grid;
  grid-template-columns: minmax(150px, var(--review-menu-w, 245px)) 8px minmax(0, 1fr);
  min-height: 360px;
}
.review-menu {
  min-width: 0;
  padding: 0 8px 0 0;
  background: transparent;
  border-right: 0;
}
.review-menu-resize {
  width: 8px;
  min-width: 8px;
  align-self: stretch;
  padding: 0;
  border: 0;
  border-radius: 0;
  cursor: col-resize;
  background: linear-gradient(90deg, var(--gray-100), var(--gray-300), var(--gray-100));
}
.review-menu-resize:hover {
  background: linear-gradient(90deg, var(--ku-crimson-50), var(--ku-crimson), var(--ku-crimson-50));
}
.review-menu-item {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 10px;
  text-align: left;
  background: transparent;
  color: var(--gray-900);
  border-radius: 6px;
  padding: 10px 12px;
}
.review-menu-item:hover {
  background: #fff;
  color: var(--ku-crimson);
}
.review-menu-item.active {
  background: var(--ku-crimson-50);
  color: var(--ku-crimson);
  box-shadow: none;
}
.review-menu-copy {
  flex: 1 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.review-menu-title {
  font-size: 14px;
  font-weight: 650;
  line-height: 1.25;
}
.review-menu-desc {
  color: var(--gray-500);
  font-size: 12px;
  line-height: 1.3;
}
.review-menu-status {
  flex: 0 0 auto;
}
.review-menu-panel {
  min-width: 0;
  padding: 0;
}
.review-menu-empty {
  min-height: 280px;
  display: grid;
  align-content: center;
  justify-items: center;
  grid-gap: 6px;
  gap: 6px;
  text-align: center;
  color: var(--gray-700);
}

/* Per-question grading split workspace */
/* 문항별 채점 — 전체창 3분할 워크스페이스 (2b). 패널이 창을 가득 채우고 각 컬럼만 스크롤. */
.perq-workspace {
  flex: 1 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.perq-contextbar,
.perq-subbar {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.perq-context-spacer {
  flex: 1 1;
}
.perq-question-tabs {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
  min-width: 0;
}
.perq-question-tabs button {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 11px;
  font-size: 12.5px;
  font-weight: 600;
  border-radius: 7px;
  background: var(--gray-100);
  color: var(--gray-700);
}
.perq-question-tabs button:hover,
.perq-question-tabs button.active {
  background: var(--ku-crimson);
  color: #fff;
}
.perq-flag {
  color: inherit;
  font-size: 12px;
}
.perq-filter {
  display: inline-flex;
  gap: 3px;
  padding: 2px;
  border: 1px solid var(--gray-200);
  border-radius: 8px;
  background: var(--gray-100);
}
.perq-filter button {
  padding: 5px 11px;
  border-radius: 6px;
  background: transparent;
  color: var(--gray-500);
  font-size: 12px;
  font-weight: 600;
}
.perq-filter button.active {
  background: #fff;
  color: var(--ku-crimson);
}
.perq-student-stepper {
  display: flex;
  align-items: center;
  gap: 8px;
}
.perq-student-stepper button {
  padding: 5px 10px;
  font-size: 12px;
}
.perq-nextflag {
  padding: 7px 13px;
  font-size: 12.5px;
  font-weight: 600;
}
.perq-columns-label {
  font-size: 11px;
  color: var(--gray-500);
}
.perq-chip {
  padding: 5px 11px;
  border-radius: 8px;
  font-size: 12.5px;
  font-weight: 600;
  background: var(--gray-100);
  color: var(--gray-500);
  border: 1px solid var(--gray-200);
}
.perq-chip.on {
  background: var(--ku-crimson-50);
  color: var(--ku-crimson);
  border-color: color-mix(in srgb, var(--ku-crimson) 25%, #fff);
}
.perq-split {
  flex: 1 1;
  min-height: 0;
  display: flex;
  align-items: stretch;
  border: 1px solid var(--gray-200);
  border-radius: 12px;
  overflow: hidden;
  background: #fff;
}
.perq-pane {
  flex: 1 1;
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  background: #fff;
}
.perq-pane + .perq-pane {
  border-left: 1px solid var(--gray-200);
}
.perq-pane.scan {
  flex: 1.25 1;
}
.perq-pane.grade {
  flex: 1.05 1;
}
.perq-pane-head {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  padding: 10px 14px;
  background: var(--gray-50);
  border-bottom: 1px solid var(--gray-200);
}
.perq-pane.scan .perq-pane-head {
  background: #eef0f3;
}
.perq-pane-head strong {
  font-size: 13px;
}
.perq-pane-sub {
  font-size: 11.5px;
}
.perq-pane-body {
  flex: 1 1;
  min-height: 0;
  overflow: auto;
  padding: 14px 16px;
}
.perq-pane.scan .perq-pane-body {
  padding: 18px;
  background: #e7e9ec;
}
.perq-footer {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 9px 6px 2px;
  color: var(--gray-500);
  font-size: 12px;
}
.perq-kbd {
  border: 1px solid var(--gray-300);
  border-radius: 4px;
  padding: 1px 6px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  color: var(--gray-700);
}
.perq-saved {
  color: #2b8a3e;
  font-weight: 600;
}
.perq-saved-error {
  color: #c92a2a;
}
.answer-md-render,
.answer-md-empty {
  width: 100%;
  min-height: 180px;
  display: block;
  text-align: left;
  padding: 14px 16px;
  border: 1px solid var(--gray-200);
  border-radius: 8px;
  background: #fff;
  color: var(--gray-900);
}
.answer-md-render:hover,
.answer-md-empty:hover {
  border-color: color-mix(in srgb, var(--ku-crimson) 35%, var(--gray-200));
  background: var(--ku-crimson-50);
}
.answer-md-empty {
  display: grid;
  place-items: center;
  color: var(--gray-500);
  font-weight: 600;
}
.answer-md-editor {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.answer-md-editor textarea {
  width: 100%;
  min-height: 340px;
  padding: 12px 14px;
  border: 1px solid var(--gray-300);
  border-radius: 8px;
  font: 13px/1.55 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  resize: vertical;
}
.answer-md-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.answer-md-preview {
  padding: 12px 14px;
  border: 1px solid var(--gray-200);
  border-radius: 8px;
  background: var(--gray-50);
}
.answer-md-preview-label {
  margin-bottom: 8px;
  font-size: 12px;
  font-weight: 700;
}
.answer-md-meta {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.answer-md-info-row {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 9px 0;
  border-bottom: 1px solid var(--gray-100);
}
.answer-md-info-row strong {
  text-align: right;
  font-size: 13px;
  overflow-wrap: anywhere;
}
.answer-md-reasons {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 12px;
  border: 1px solid var(--gray-200);
  border-radius: 8px;
  background: var(--gray-50);
  font-size: 13px;
}
@media (max-width: 1120px) {
  .review-col-resize {
    display: none; /* 좁은 화면은 자동 레이아웃 — 드래그 핸들 숨김 */
  }
  .review-workbench,
  .review-workbench.has-inspector {
    grid-template-columns: minmax(180px, 240px) minmax(0, 1fr);
  }
  .review-workbench.no-rail.has-inspector {
    grid-template-columns: minmax(0, 1fr) minmax(320px, 0.9fr);
  }
  .review-inspector {
    grid-column: 1 / -1;
    max-height: none;
  }
  .review-workbench.no-rail.has-inspector .review-inspector {
    grid-column: auto;
  }
  .review-launch-grid {
    grid-template-columns: minmax(150px, var(--review-menu-w, 220px)) 8px minmax(0, 1fr);
  }
}
@media (max-width: 760px) {
  .review-shell {
    padding: 0;
  }
  .review-header {
    display: block;
  }
  .review-toolbar {
    justify-content: flex-start;
    margin-top: 10px;
  }
  .bubble-review-nav {
    min-width: 0;
    grid-template-columns: minmax(0, 1fr);
  }
  .bubble-review-actions {
    justify-content: flex-start;
  }
  .review-workbench,
  .review-workbench.has-inspector {
    display: block;
  }
  .review-rail,
  .review-inspector {
    max-height: 260px;
    margin-bottom: 12px;
  }
  .review-launch-grid {
    display: block;
  }
  .review-menu {
    border-right: 0;
    border-bottom: 0;
    padding: 0 0 10px;
  }
  .review-menu-resize {
    display: none;
  }
  .review-menu-panel {
    padding: 0;
  }
  .page-viewer-image-wrap {
    max-height: 68dvh;
  }
  .perq-workspace {
    display: block;
  }
  .perq-split {
    display: block;
    min-height: 0;
    border: 0;
    border-radius: 0;
  }
  .perq-pane {
    border-left: 0;
    border-bottom: 1px solid var(--gray-200);
  }
  .perq-pane-body {
    overflow: visible;
  }
  .perq-pane.scan .perq-pane-body {
    max-height: 70dvh;
    overflow: auto;
  }
}


/* Workflow profile runner */
.workflow-card h3,
.workflow-detail h4 {
  margin: 0;
}
.workflow-head {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 14px;
}
.workflow-head p {
  margin: 4px 0 0;
}
.workflow-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(320px, 0.75fr);
  grid-gap: 16px;
  gap: 16px;
  align-items: start;
}
.workflow-map {
  display: flex;
  gap: 8px;
  align-items: stretch;
  overflow-x: auto;
}
.workflow-phase-wrap {
  display: flex;
  gap: 8px;
  align-items: center;
}
.workflow-phase {
  min-width: 210px;
}
.workflow-arrow {
  color: var(--gray-300);
  font-size: 22px;
}
.workflow-step {
  width: 100%;
  min-height: 86px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 3px;
  text-align: left;
  margin-bottom: 8px;
  padding: 9px 10px;
  border: 1px solid var(--gray-200);
  border-radius: 8px;
  background: var(--gray-100);
  color: var(--gray-900);
}
.workflow-step:hover,
.workflow-step.selected {
  background: var(--ku-crimson-50);
  color: var(--ku-crimson);
  border-color: color-mix(in srgb, var(--ku-crimson) 34%, var(--gray-200));
}
.workflow-step.done { background: #d3f9d8; }
.workflow-step.running { background: #fff3cd; }
.workflow-step.ready { background: var(--ku-crimson-50); }
.workflow-step.locked { opacity: 0.72; }
.workflow-step-title {
  font-size: 13px;
  font-weight: 700;
  line-height: 1.25;
}
.workflow-step-desc,
.workflow-step-input {
  font-size: 11px;
  line-height: 1.35;
  color: var(--gray-500);
}
.workflow-detail {
  min-width: 0;
  padding-left: 14px;
  border-left: 1px solid var(--gray-200);
}
.workflow-empty {
  min-height: 220px;
  display: grid;
  align-content: center;
  justify-items: center;
  grid-gap: 6px;
  gap: 6px;
}
.workflow-detail-title {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 12px;
}
.workflow-detail-list {
  display: grid;
  grid-gap: 4px;
  gap: 4px;
  margin: 10px 0;
  font-size: 13px;
}
.workflow-detail-list span {
  color: var(--gray-700);
}
.workflow-warning {
  margin: 10px 0;
  padding: 8px 10px;
  border-radius: 6px;
  background: #fff3cd;
  color: #7c4a03;
  font-size: 12px;
  line-height: 1.4;
}
.workflow-profile-box {
  margin: 14px 0;
  display: grid;
  grid-gap: 8px;
  gap: 8px;
}
.workflow-profile-box select {
  width: 100%;
  margin-top: 4px;
  padding: 7px 9px;
  border: 1px solid var(--gray-300);
  border-radius: 6px;
  font: inherit;
}
.workflow-profile-summary {
  display: grid;
  grid-gap: 4px;
  gap: 4px;
  color: var(--gray-700);
  font-size: 12px;
  line-height: 1.4;
}
.workflow-role-list {
  display: grid;
  grid-gap: 2px;
  gap: 2px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px;
}
.job-llm-profile {
  display: inline-flex;
  align-items: center;
  padding: 2px 7px;
  border: 1px solid var(--gray-300);
  border-radius: 999px;
  font-size: 11px;
  line-height: 1.4;
  white-space: nowrap;
}
.job-llm-profile.saved {
  color: #862633;
  background: #fbf2f3;
  border-color: #e7cbd0;
}
.job-llm-profile.builtin {
  color: #3d4d5c;
  background: #f3f6f8;
  border-color: #d8e0e5;
}
.job-llm-profile.one_off {
  color: #7a4b00;
  background: #fff8e8;
  border-color: #ecd8a8;
}
.job-llm-profile.unused {
  color: var(--gray-500);
  background: var(--gray-100);
  border-color: var(--gray-200);
}

.job-run-models {
  margin-top: 7px;
  display: grid;
  grid-gap: 2px;
  gap: 2px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.job-run-models strong { font-family: inherit; }
.job-run-models span { overflow-wrap: anywhere; }

.job-progress-details {
  margin-top: 7px;
  color: var(--gray-700);
  font-size: 12px;
}
.job-progress-details summary {
  cursor: pointer;
  color: var(--gray-500);
}
.job-progress-details ul {
  margin: 6px 0 0 18px;
  padding: 0;
}

.dev-profile-visibility {
  display: flex;
  align-items: center;
  gap: 8px;
  padding-bottom: 2px;
  flex-wrap: wrap;
}
.dev-profile-visibility button {
  padding: 5px 10px;
  font-size: 12px;
}

/* Rubric review */
.rubric-review {
  min-width: 0;
}
/* 루브릭 검토·승인 — 배점·기준 카드 (3d) */
.rubric-banner {
  display: flex;
  align-items: center;
  gap: 10px;
  background: #fff8e6;
  border: 1px solid #f0e2b8;
  border-radius: 10px;
  padding: 12px 16px;
  margin-bottom: 16px;
  font-size: 12.5px;
  color: #8a6d00;
  line-height: 1.5;
}
.rubric-cards {
  display: flex;
  flex-direction: column;
  gap: 14px;
  margin-bottom: 18px;
}
.rubric-card {
  border: 1px solid var(--gray-200);
  border-radius: 12px;
  padding: 16px 18px;
}
.rubric-card-head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 12px;
}
.rubric-card-head strong {
  font-size: 15px;
}
.rubric-card-answer {
  font-size: 12.5px;
  color: var(--gray-500);
  margin-bottom: 10px;
  line-height: 1.5;
}
.rubric-markdown-block {
  margin: 10px 0 12px;
  min-width: 0;
}
.rubric-markdown-block.compact {
  margin-bottom: 8px;
}
.rubric-markdown-label {
  color: var(--gray-500);
  font-size: 12px;
  font-weight: 600;
  margin-bottom: 3px;
}
.rubric-markdown-block .markdown-view {
  color: var(--gray-800);
}
.rubric-markdown-block.compact .markdown-view {
  font-size: 13px !important;
}
.rubric-criteria {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.rubric-criterion {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 9px 12px;
  border-radius: 8px;
  background: #fbfcfd;
  border: 1px solid #eef0f2;
  font-size: 13px;
}
.rubric-criterion-text {
  flex: 1 1;
  min-width: 0;
  color: var(--gray-700);
}
.rubric-criterion-text .markdown-view {
  font-size: 13px !important;
  line-height: 1.45 !important;
}
.rubric-criterion-text .markdown-view p:last-child {
  margin-bottom: 0 !important;
}
.rubric-criterion-pts {
  flex: 0 0 auto;
  font-weight: 600;
  font-feature-settings: "tnum";
  font-variant-numeric: tabular-nums;
  padding-top: 1px;
}
.rubric-criterion.pos {
  background: #f4fbf6;
  border-color: #d6efdd;
}
.rubric-criterion.pos .rubric-criterion-pts {
  color: #2b8a3e;
}
.rubric-criterion.neg {
  background: #fdf3f4;
  border-color: #f3d3d8;
}
.rubric-criterion.neg .rubric-criterion-pts {
  color: var(--ku-crimson);
}
.rubric-criterion.zero .rubric-criterion-pts {
  color: var(--gray-500);
}
.rubric-criterion.empty {
  background: transparent;
  border: 0;
  padding: 4px 0;
  font-size: 12.5px;
}
.rubric-subgroup {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px dashed var(--gray-200);
}
.rubric-subgroup-head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
}
.rubric-subgroup-head strong {
  font-size: 13.5px;
}
.rubric-refine-block,
.rubric-advanced {
  margin-bottom: 16px;
  border: 1px solid var(--gray-200);
  border-radius: 10px;
  padding: 12px 14px;
}
.rubric-refine-block > summary,
.rubric-advanced > summary {
  cursor: pointer;
  font-weight: 600;
  font-size: 13px;
  color: var(--gray-700);
}
.rubric-refine-block .rubric-refinement-list {
  margin-top: 12px;
}
.rubric-advanced-body {
  margin-top: 12px;
}
.rubric-mode-toggle {
  display: inline-flex;
  gap: 6px;
}
.rubric-approve-bar {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  padding: 12px 14px;
  border-top: 1px solid var(--gray-200);
  /* 긴 문항 목록 어디서든 승인/저장이 보이게 화면 하단에 고정 (2026-08-31 UX).
     스크롤 컨테이너 기준 sticky — 문서 끝에선 자연스럽게 제자리로 돌아간다. */
  position: -webkit-sticky;
  position: sticky;
  bottom: 0;
  z-index: 30;
  background: var(--bg, #fff);
  box-shadow: 0 -4px 14px rgba(20, 16, 12, 0.06);
  border-radius: 10px 10px 0 0;
  margin-top: 10px;
}
.rubric-approve-bar > .muted {
  flex: 1 1;
  min-width: 160px;
  font-size: 12.5px;
}
.rubric-approve-bar button {
  padding: 11px 18px;
  font-size: 13.5px;
  font-weight: 600;
}
.rubric-review-summary {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
  grid-gap: 10px;
  gap: 10px;
  margin: 12px 0 16px;
}
.rubric-review-summary > div {
  display: grid;
  grid-gap: 3px;
  gap: 3px;
  padding: 9px 0;
  border-bottom: 1px solid var(--gray-200);
}
.rubric-review-summary strong {
  font-size: 15px;
}
.rubric-validation {
  margin-bottom: 14px;
  padding: 10px 12px;
  border-left: 3px solid var(--ku-crimson);
  background: var(--ku-crimson-50);
  color: var(--gray-900);
}
.rubric-validation pre,
.rubric-raw pre {
  margin: 8px 0 0;
  white-space: pre-wrap;
  overflow: auto;
  max-height: 280px;
  font-size: 12px;
  line-height: 1.45;
}
.rubric-review-grid {
  display: grid;
  grid-template-columns: minmax(320px, 1.2fr) minmax(260px, 0.8fr);
  grid-gap: 18px;
  gap: 18px;
  align-items: start;
}
.rubric-section-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 8px;
}
.rubric-section-head h4 {
  margin: 0;
}
.rubric-json-editor {
  width: 100%;
  min-height: 460px;
  padding: 10px;
  border: 1px solid var(--gray-300);
  border-radius: 6px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 12px;
  line-height: 1.45;
  resize: vertical;
}
.rubric-actions {
  display: flex;
  gap: 8px;
  margin-top: 8px;
  flex-wrap: wrap;
}
.rubric-refinement-list {
  display: grid;
  grid-gap: 8px;
  gap: 8px;
}
.rubric-refinement-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-gap: 10px;
  gap: 10px;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px solid var(--gray-200);
}
.rubric-refinement-row button {
  padding: 5px 10px;
  font-size: 12px;
}
.rubric-raw {
  margin-top: 14px;
  color: var(--gray-700);
  font-size: 12px;
}
.rubric-raw summary {
  cursor: pointer;
}
@media (max-width: 920px) {
  .rubric-review-grid { grid-template-columns: 1fr; }
}

@media (max-width: 920px) {
  .workflow-layout { grid-template-columns: 1fr; }
  .workflow-detail { padding-left: 0; border-left: 0; }
}

.rubric-mode-toggle {
  display: inline-flex;
  gap: 6px;
  align-items: center;
}

.rubric-mode-toggle button {
  padding: 5px 9px;
  font-size: 12px;
}
/* Fullscreen review workspace */
.review-fullscreen {
  /* height 고정 + 내부(-body) 스크롤: 상단 모드 탭이 항상 보이고, 루브릭 하단
     승인 바의 sticky 가 실제 스크롤 컨테이너(-body)에 걸린다 (2026-08-31 UX).
     min-height 였을 땐 문서 전체가 늘어나 -body 의 overflow:auto 가 무스크롤
     상태가 되고 sticky 가 그 안에 갇혀 동작하지 않았다. */
  height: 100dvh;
  display: flex;
  flex-direction: column;
  background: var(--gray-50);
}
.review-fullscreen-topbar {
  flex: 0 0 auto;
  display: grid;
  grid-template-columns: auto minmax(180px, 320px) minmax(0, 1fr);
  grid-gap: 12px;
  gap: 12px;
  align-items: center;
  padding: 12px 16px;
  border-bottom: 1px solid var(--gray-200);
  background: #fff;
}
.review-back-button {
  white-space: nowrap;
}
.review-fullscreen-title {
  min-width: 0;
  display: grid;
  grid-gap: 2px;
  gap: 2px;
}
.review-fullscreen-title strong,
.review-fullscreen-title span {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.review-fullscreen-nav {
  min-width: 0;
  display: flex;
  justify-content: flex-end;
  gap: 6px;
  overflow-x: auto;
  padding-bottom: 2px;
}
.review-fullscreen-nav button {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 10px;
  border-radius: 6px;
  font-size: 13px;
}
.review-fullscreen-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  padding: 18px 20px 24px;
  display: flex;
  flex-direction: column;
}
.review-fullscreen .review-shell,
.review-fullscreen .rubric-review {
  max-width: none;
}
.review-fullscreen .card {
  border: 0;
  border-radius: 0;
  background: transparent;
  padding: 0;
}
.review-fullscreen .review-rail,
.review-fullscreen .review-inspector {
  max-height: calc(100dvh - 150px);
}
.review-fullscreen .page-viewer-image-wrap {
  max-height: calc(100dvh - 180px);
}
@media (max-width: 760px) {
  .review-fullscreen-topbar {
    grid-template-columns: 1fr;
    align-items: stretch;
  }
  .review-back-button {
    justify-self: start;
  }
  .review-fullscreen-nav {
    justify-content: flex-start;
  }
  .review-fullscreen-body {
    padding: 14px;
  }
  .review-fullscreen .review-rail,
  .review-fullscreen .review-inspector,
  .review-fullscreen .page-viewer-image-wrap {
    max-height: none;
  }
}


.exam-config-panel {
  margin-top: 16px;
  padding: 14px;
  border: 1px solid var(--gray-200, #e9ecef);
  border-radius: 8px;
  background: #fff;
}
.exam-config-title {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}
.exam-config-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-gap: 12px;
  gap: 12px;
}
.exam-config-toggle {
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 14px;
}
.exam-config-toggle-line {
  display: flex;
  align-items: center;
  gap: 8px;
  font-weight: 600;
}
.exam-config-toggle .muted {
  font-size: 12px;
  line-height: 1.45;
  padding-left: 24px;
}
.exam-config-language {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
  font-size: 14px;
}
.exam-config-language select {
  font-size: 14px;
  padding: 3px 6px;
}
@media (max-width: 760px) {
  .exam-config-title { align-items: flex-start; flex-direction: column; }
  .exam-config-grid { grid-template-columns: 1fr; }
}

.rubric-diff-before { background: #fff5f5; border-left: 3px solid #ffa8a8; margin: 2px 0; padding: 6px 10px; border-radius: 0 6px 6px 0; }
.rubric-diff-after { background: #ebfbee; border-left: 3px solid #69db7c; margin: 2px 0; padding: 6px 10px; border-radius: 0 6px 6px 0; }
.rubric-refinement-detail { border-top: 1px solid var(--gray-200); margin-top: 10px; padding-top: 10px; }
.rubric-refinement-question { margin-bottom: 12px; }

/* 정교화 hunk 단위 검토/편집 */
.rubric-change-list { margin: 6px 0 8px 24px; display: flex; flex-direction: column; gap: 4px; }
.rubric-change-item { display: flex; gap: 8px; align-items: baseline; font-size: 13.5; line-height: 1.5; }
.rubric-change-note { margin: 4px 0 4px 24px; font-size: 13px; color: #7c4a03; }
.rubric-hunk { margin: 8px 0 8px 24px; padding: 8px 10px; border: 1px solid var(--gray-200); border-radius: 8px; }
.rubric-hunk-off { opacity: 0.55; }
.rubric-hunk-head { display: flex; gap: 8px; align-items: center; font-size: 12px; margin-bottom: 6px; cursor: pointer; }
.rubric-hunk-before { margin-top: 6px; font-size: 13px; }
.rubric-hunk-before > summary { cursor: pointer; font-size: 12px; color: var(--gray-500, #868e96); }
.rubric-hunk-json { margin: 0; padding: 8px; background: var(--gray-50); border-radius: 6px; font-size: 12px; white-space: pre-wrap; }
.rubric-ded-editor { display: flex; flex-direction: column; gap: 6px; }
.rubric-ded-row { display: flex; gap: 8px; align-items: flex-start; }
.rubric-ded-row > input[type="checkbox"] { margin-top: 4px; }
.rubric-ded-points { width: 72px; padding: 4px 6px; border: 1px solid var(--gray-300); border-radius: 6px; }
.rubric-ded-points-static { min-width: 44px; text-align: right; font-weight: 600; color: #c92a2a; }
.rubric-ded-criterion { flex: 1 1; min-width: 0; }
.rubric-item { margin: 6px 0 6px 24px; padding: 6px 8px; border: 1px solid var(--gray-200); border-radius: 8px; }
.rubric-item-head { display: flex; gap: 8px; align-items: center; cursor: pointer; margin-bottom: 4px; }
.rubric-item-label { font-size: 13.5px; font-weight: 600; }
.rubric-criterion-excluded { opacity: 0.45; }
.rubric-criterion-excluded .rubric-criterion-text { text-decoration: line-through; }
.rubric-criterion > input[type="checkbox"] { margin-top: 3px; flex-shrink: 0; }
.rubric-criterion-new { align-items: center; border-style: dashed; }
.rubric-criterion-input { flex: 1 1; min-width: 0; padding: 6px 8px; border: 1px solid var(--gray-300); border-radius: 6px; font-family: inherit; font-size: 13px; resize: vertical; }
.rubric-criterion-remove { padding: 2px 8px; line-height: 1; }
.rubric-add-criterion { align-self: flex-start; font-size: 12.5px; padding: 4px 10px; }

/* ── 개발자 크롬 (워크플로우 설계) ─────────────────────────────────────── */
.dev-panel { border-color: var(--ku-crimson); }
.dev-panel-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.dev-badge { background: var(--ku-crimson); color: #fff; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px; letter-spacing: 0.02em; }
.dev-validation-error, .dev-validation-warn { padding: 10px 12px; border-radius: 8px; font-size: 13px; margin-bottom: 10px; display: flex; flex-direction: column; gap: 3px; }
.dev-validation-error { border-left: 3px solid #c92a2a; background: #fff5f5; color: #c92a2a; }
.dev-validation-warn { border-left: 3px solid #f08c00; background: #fff9db; color: #7c4a03; }
.dev-workflow-grid { display: grid; grid-template-columns: minmax(0, 1fr) 300px; grid-gap: 16px; gap: 16px; align-items: start; }
@media (max-width: 1100px) { .dev-workflow-grid { grid-template-columns: 1fr; } }
.dev-step-row { display: flex; gap: 10px; align-items: flex-start; padding: 10px 8px; border-top: 1px solid var(--gray-100); }
.dev-step-row.disabled .dev-step-main { opacity: 0.5; }
.dev-step-order { display: flex; flex-direction: column; gap: 2px; }
.dev-step-order button { padding: 0 6px; font-size: 10px; line-height: 1.6; }
.dev-step-enable { padding-top: 6px; }
.dev-step-main { flex: 1 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.dev-step-title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 14px; }
.dev-step-title code { font-size: 11px; color: var(--gray-500); }
.dev-step-controls { display: flex; gap: 12px; flex-wrap: wrap; font-size: 12px; color: var(--gray-700); align-items: center; }
.dev-step-controls label { display: flex; align-items: center; gap: 4px; }
.dev-step-controls select { padding: 3px 6px; border: 1px solid var(--gray-300); border-radius: 6px; font-size: 12px; }
.dev-step-gates { display: flex; gap: 10px; }
.dev-step-gates label { display: flex; align-items: center; gap: 3px; cursor: pointer; }
.dev-step-label { width: 100%; padding: 5px 8px; border: 1px solid var(--gray-300); border-radius: 6px; font-size: 12.5px; }
.dev-step-models { display: flex; flex-direction: column; gap: 1px; font-family: ui-monospace, monospace; font-size: 11px; color: var(--gray-500); }
.dev-step-models .override { color: var(--ku-crimson); font-weight: 600; }
.dev-step-alternative-group { align-items: stretch; }
.dev-step-alternative-body { flex: 1 1; min-width: 0; }
.dev-step-alternative-head {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 12px;
  padding: 4px 6px 10px;
}
.dev-step-alternative-head .muted { margin-top: 3px; font-size: 12px; }
.dev-step-alternative-head label,
.dev-step-alternative-select { display: flex; align-items: center; gap: 5px; cursor: pointer; font-size: 12px; }
.dev-step-alternative-grid {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-gap: 10px; gap: 10px;
}
.dev-step-alternative-column {
  min-width: 0; padding: 10px; border: 1px solid var(--gray-200); border-radius: 9px;
  background: var(--gray-50);
}
.dev-step-alternative-column.selected {
  border-color: var(--ku-crimson); background: color-mix(in srgb, var(--ku-crimson) 4%, white);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--ku-crimson) 30%, transparent);
}
.dev-step-alternative-column.disabled .dev-step-main { opacity: 0.58; }
.dev-step-alternative-select { margin-bottom: 8px; font-weight: 600; }
@media (max-width: 1100px) {
  .dev-step-alternative-grid { grid-template-columns: 1fr; }
}
.dev-workflow-preview { position: -webkit-sticky; position: sticky; top: 12px; border: 1px solid var(--gray-200); border-radius: var(--radius); padding: 12px 14px; background: var(--gray-50); }
.dev-preview-list { margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 7px; font-size: 13px; }
.dev-preview-gate { font-size: 11.5px; color: #7c4a03; background: #fff9db; border-radius: 6px; padding: 2px 8px; margin-bottom: 3px; display: inline-block; }

/* ── 사용자 실행 패널 (RunPanel — 지금 할 일 중심) ───────────────────────── */
.run-panel-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.run-panel-headline { margin: 4px 0 0; color: var(--gray-700); font-size: 14.5px; }
.run-cancel { font-size: 12px; padding: 4px 10px; }
.run-next-action { display: flex; align-items: center; gap: 14px; border: 1.5px solid var(--ku-crimson); border-radius: 10px; padding: 14px 16px; margin-bottom: 14px; background: #fff; }
.run-next-action.low { border-color: var(--gray-300); }
.run-next-label { flex: 1 1; display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.run-next-label strong { font-size: 12px; color: var(--ku-crimson); letter-spacing: 0.02em; }
.run-next-action.low .run-next-label strong { color: var(--gray-500); }
.run-next-label span { font-size: 14.5px; }
.run-next-action button { min-width: 110px; padding: 9px 14px; font-size: 14px; flex-shrink: 0; }
.run-progress-bar { list-style: none; display: flex; gap: 0; margin: 0 0 12px; padding: 0; }
.run-progress-step { flex: 1 1; min-width: 76px; display: flex; flex-direction: column; align-items: center; gap: 3px; position: relative; padding-top: 4px; }
.run-progress-step::before { content: ""; position: absolute; top: 12px; left: -50%; width: 100%; height: 2px; background: var(--gray-200); }
.run-progress-step:first-child::before { display: none; }
.run-progress-marker { width: 16px; height: 16px; border-radius: 50%; border: 2px solid var(--gray-300); background: #fff; z-index: 1; }
.run-progress-step.complete .run-progress-marker { background: var(--ku-crimson); border-color: var(--ku-crimson); }
.run-progress-step.running .run-progress-marker, .run-progress-step.in_progress .run-progress-marker { border-color: var(--ku-crimson); animation: run-pulse 1.6s ease-in-out infinite; }
.run-progress-step.paused .run-progress-marker { border-color: #f08c00; background: #fff9db; }
.run-progress-step.failed .run-progress-marker { border-color: #c92a2a; background: #ffe3e3; }
.run-progress-step.ready .run-progress-marker { border-color: #f08c00; }
.run-progress-title { font-size: 11.5px; font-weight: 600; text-align: center; }
.run-progress-detail { font-size: 11px; color: var(--gray-500); text-align: center; min-height: 14px; max-width: 110px; }
.run-review-summary { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; font-size: 13px; }
.run-grade-steps { display: flex; flex-wrap: wrap; gap: 6px; margin: -2px 0 12px; }
.run-grade-step { display: inline-flex; align-items: center; gap: 5px; padding: 5px 8px; border: 1px solid var(--gray-200); border-radius: 999px; color: var(--gray-700); font-size: 12px; background: #fff; }
.run-grade-step-mark { width: 15px; height: 15px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--gray-300); border-radius: 50%; font-size: 10px; }
.run-grade-step.complete .run-grade-step-mark { color: #fff; background: var(--ku-crimson); border-color: var(--ku-crimson); }
.run-grade-step.running { border-color: var(--ku-crimson); }
.run-grade-step.failed { border-color: #c92a2a; background: #fff5f5; }
.run-grade-step.skipped { color: var(--gray-500); background: var(--gray-50); }
.dev-step-contract { display: grid; grid-gap: 3px; gap: 3px; margin-top: 6px; padding: 7px 9px; border-left: 3px solid var(--gray-300); color: var(--gray-500); font-size: 11.5px; line-height: 1.45; }
.dev-step-contract b { color: var(--gray-700); margin-right: 5px; }
.run-review-chip { font-size: 12.5px; padding: 4px 10px; }
.run-review-chip b { color: var(--ku-crimson); }
.run-blockers { list-style: none; margin: 0; padding: 8px 12px; background: var(--gray-50); border-left: 3px solid var(--gray-300); border-radius: 6px; font-size: 13px; display: flex; flex-direction: column; gap: 3px; }
@keyframes run-pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(134, 38, 51, 0.35); } 50% { box-shadow: 0 0 0 5px rgba(134, 38, 51, 0); } }

.review-readonly-notice { margin: 10px 16px 0; padding: 9px 12px; border-left: 3px solid var(--gray-400); background: var(--gray-50); color: var(--gray-700); font-size: 13px; }
.review-readonly-fieldset { min-width: 0; margin: 0; padding: 0; border: 0; }
.review-readonly-fieldset:disabled { opacity: 0.88; }

/* 6단계 진행 바 (채점 전/후 확인 분리, 2026-08-02) */
.run-progress-step.waiting .run-progress-marker { border-color: #f08c00; background: #fff9db; animation: run-pulse 1.6s ease-in-out infinite; }
.run-progress-step.in_progress .run-progress-detail, .run-progress-step.waiting .run-progress-detail { color: #7c4a03; font-weight: 600; }
.run-review-group { display: inline-flex; align-items: center; gap: 6px; }
.run-review-group + .run-review-group { margin-left: 10px; padding-left: 12px; border-left: 1px solid var(--gray-200); }
@media (max-width: 760px) {
  .run-progress-bar { flex-wrap: wrap; row-gap: 12px; }
  .run-progress-step { flex: 1 1 30%; }
  .run-progress-step::before { display: none; }  /* 줄바꿈 시 연결선이 어긋나므로 숨김 */
}
.run-panel-summary { margin: 2px 0 0; color: var(--gray-500); font-size: 12.5px; }

/* ── 루브릭 정교화 v4 — 제안 패널 (RubricReview) ───────────────────────── */
.badge.info { background: #d0ebff; color: #1971c2; }
.badge.warn { background: #ffe8cc; color: #d9480f; }
.refine-panel { border: 1px solid var(--gray-200); border-radius: 10px; padding: 14px; margin: 12px 0; background: #fff; }
.refine-banner {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 12px; border-radius: 8px; font-size: 13.5px;
  border: 1px solid color-mix(in srgb, var(--ku-crimson) 22%, #fff);
  background: var(--ku-crimson-50);
}
.refine-banner > .refine-dot { color: var(--ku-crimson); }
.refine-grid { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); grid-gap: 14px; gap: 14px; margin-top: 12px; }
@media (max-width: 960px) { .refine-grid { grid-template-columns: 1fr; } }
.refine-tabs { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.refine-tab {
  background: var(--gray-100); color: var(--gray-700);
  border: 1px solid var(--gray-200); border-radius: 999px;
  padding: 3px 12px; font-size: 12.5px; font-weight: 600;
}
.refine-tab:hover { background: var(--gray-200); }
.refine-tab.active { background: var(--ku-crimson); border-color: var(--ku-crimson); color: #fff; }
.refine-card { border: 1px solid var(--gray-200); border-radius: 8px; padding: 10px 12px; margin-bottom: 8px; font-size: 13.5px; }
.refine-card.accepted { border-color: #69db7c; background: #f7fdf8; }
.refine-card.dismissed { opacity: 0.55; }
.refine-card-head { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.refine-card-head > input[type="checkbox"] { flex-shrink: 0; }
.refine-card-proposal { margin-top: 6px; line-height: 1.5; }
.refine-card-rationale { margin-top: 4px; font-size: 12.5px; color: var(--gray-500); line-height: 1.5; }
.refine-evidence { margin-top: 6px; font-size: 12.5px; }
.refine-evidence > summary { cursor: pointer; color: var(--gray-500); }
.refine-evidence-quote {
  margin: 4px 0 0; padding: 5px 8px; background: var(--gray-50);
  border-left: 3px solid var(--gray-300); border-radius: 0 6px 6px 0;
  white-space: pre-wrap; word-break: break-word;
}
.refine-edit-form { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; padding: 8px 10px; border: 1px dashed var(--gray-300); border-radius: 8px; }
.refine-diff { border: 1px solid var(--gray-200); border-radius: 8px; padding: 10px 12px; background: var(--gray-50); font-size: 13px; line-height: 1.5; }
.refine-diff-node { margin-bottom: 10px; }
.refine-diff-node > strong { display: block; margin-bottom: 3px; }
.refine-diff-row { padding: 3px 8px; margin: 2px 0; border-radius: 0 6px 6px 0; border-left: 3px solid transparent; display: flex; gap: 8px; }
.refine-diff-row .pts { margin-left: auto; white-space: nowrap; font-feature-settings: "tnum"; font-variant-numeric: tabular-nums; }
.refine-diff-add { background: #ebfbee; border-left-color: #69db7c; }
.refine-diff-change { background: #fff4e6; border-left-color: #f08c00; }
.refine-old { text-decoration: line-through; color: var(--gray-500); }
.refine-new { color: #d9480f; font-weight: 600; }
.refine-new-text { background: #fff3bf; border-radius: 3px; padding: 0 2px; }

/* ── 대시보드 Action Home (2026-08-24) ─────────────────────────────────── */
.sidebar-home {
  display: block; width: calc(100% - 16px); margin: 0 8px 8px; padding: 8px 10px;
  text-align: left; font-size: 14px; font-weight: 600; border-radius: 8px;
  border: none; background: none; color: var(--gray-700); cursor: pointer;
}
.sidebar-home:hover { background: var(--gray-100); }
.sidebar-home.active { background: var(--ku-crimson-50); color: var(--ku-crimson); }
/* tree 행의 semantic button — 기존 div 시각을 유지.
   전역 button:hover(crimson) 특이도(0,1,1)가 단일 클래스(0,1,0)를 이기므로
   :hover 를 클래스+pseudo(0,2,0)로 명시해 색을 고정한다 (codex @15 P1-7). */
.tree-node-toggle, .tree-exam-open {
  flex: 1 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  text-align: left; background: none; border: none; padding: 0; cursor: pointer;
  color: inherit; font: inherit; min-height: 24px;
}
.tree-node-toggle:hover, .tree-exam-open:hover { background: transparent; color: inherit; }
.tree-node-toggle:focus-visible, .tree-exam-open:focus-visible, .sidebar-home:focus-visible {
  outline: 2px solid var(--ku-crimson); outline-offset: 1px; border-radius: 4px;
}
.tree-exam-open.tree-exam { display: block; width: 100%; }
.tree-exam-open.tree-exam:hover { background: var(--ku-crimson-50); }
@media (max-width: 760px) {
  .tree-node-toggle, .tree-exam-open, .sidebar-home { min-height: 44px; }
}

.dashboard-home { display: flex; flex-direction: column; gap: 14px; }
.dashboard-home-header { display: flex; align-items: flex-start; gap: 12px; flex-wrap: wrap; }
.dashboard-home-header h2 { margin: 0; }
.dashboard-home-workspace { margin: 2px 0 0; font-size: 13px; }
.dashboard-home-header-side {
  margin-left: auto; display: flex; align-items: center; gap: 10px; font-size: 12px;
}
.dashboard-home-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.dashboard-home-section h3 { margin: 4px 0 8px; font-size: 15px; }
.dashboard-exam-list {
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); grid-gap: 10px; gap: 10px;
}
.dashboard-exam-row {
  display: flex; align-items: center; gap: 10px; padding: 12px 14px;
  border: 1px solid var(--gray-200); border-left-width: 4px; border-radius: 10px;
  background: #fff;
}
.dashboard-exam-row.tone-danger { border-left-color: #e03131; }
.dashboard-exam-row.tone-warn { border-left-color: #f08c00; }
.dashboard-exam-row.tone-info { border-left-color: #1971c2; }
.dashboard-exam-row.tone-quiet { border-left-color: var(--gray-300); }
.dashboard-exam-main { flex: 1 1; min-width: 0; }
.dashboard-exam-course, .dashboard-exam-name {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.dashboard-exam-course { font-size: 12px; color: var(--gray-600); }
.dashboard-exam-name { font-weight: 600; margin: 2px 0; }
.dashboard-exam-status { font-size: 13px; color: var(--gray-700); }
.dashboard-exam-side {
  display: flex; flex-direction: column; align-items: flex-end; gap: 6px; font-size: 12px;
}
.dashboard-exam-side button { min-height: 34px; }
.dashboard-home-empty h3 { margin-top: 0; }
@media (max-width: 760px) {
  .dashboard-exam-list { grid-template-columns: 1fr; }
  .dashboard-exam-side button { min-height: 44px; }
}
@media (prefers-reduced-motion: reduce) {
  .dashboard-home * { transition: none !important; }
}

/* 시험 상세 2단 헤더 — 과목 맥락 + 시험명 (2026-08-24) */
.exam-header { margin-bottom: 4px; }
.exam-header-course {
  font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.exam-header-name {
  margin: 2px 0 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

