/* Shared application chrome. Paper content and PDF dimensions stay in styles.css. */
:root {
  --ui-page: #fafafa;
  --ui-workspace: #f3f3f3;
  --ui-surface: #fff;
  --ui-ink: #1a1a1a;
  --ui-muted: #626976;
  --ui-primary: #06b6d4;
  --ui-primary-ink: #083344;
  --ui-hover: #22d3ee;
  --ui-selected: #ecfeff;
  --ui-focus: #0e7490;
  --ui-border: #ededed;
  --ui-control-border: #767676;
  --ui-radius: 8px;
  color: var(--ui-ink);
  background: var(--ui-page);
}
:where(button, input, select, textarea, .button-link, .file-button) { font-size: 14px; }
:root :where(a, button, input, select, textarea, summary, [tabindex], [contenteditable]):focus-visible {
  outline: 3px solid var(--ui-focus);
  outline-offset: 3px;
}
input, select, textarea { font-size: 14px; min-width: 0; max-width: 100%; min-height: 36px; padding: 6px 12px; border-color: var(--ui-control-border); border-radius: var(--ui-radius); color: var(--ui-ink); }
input::placeholder, textarea::placeholder { color: var(--ui-muted); opacity: 1; }
input[type="checkbox"], input[type="radio"] { accent-color: var(--ui-focus); }
button, .file-button, .button-link:not([hidden]) { min-height: 36px; padding: 6px 12px; border-radius: var(--ui-radius); font-size: 14px; font-weight: 600; color: var(--ui-ink); background: var(--ui-surface); border-color: var(--ui-control-border); }
.secondary { border-color: var(--ui-control-border); color: var(--ui-ink); background: white; }
.publication-visibility { border: 0; margin: 16px 0; padding: 0; }
.publication-visibility legend { font-weight: 600; margin-bottom: 8px; }
.publication-visibility label { display: inline-flex; align-items: center; gap: 6px; margin: 0 20px 0 0; min-height: 36px; }
.publication-visibility input[type="radio"] { width: 16px; height: 16px; min-height: 0; padding: 0; margin: 0; }
#label-publish-confirm, #label-publish-cancel { width: 80px; height: 44px; min-height: 44px; flex: none; }
button:hover:not(:disabled), .button-link:hover { background: var(--ui-workspace); }
.primary, #submit, #label-publish, #label-publish-confirm, #label-editor-save {
  min-height: 44px; background: var(--ui-primary); border-color: var(--ui-primary); color: var(--ui-primary-ink);
}
.primary:hover:not(:disabled), #submit:hover:not(:disabled), #label-publish:hover:not(:disabled), #label-publish-confirm:hover:not(:disabled), #label-editor-save:hover:not(:disabled) { background: var(--ui-hover); border-color: var(--ui-hover); }
/* Buttons that delete work (리셋, 모두 비우기): red text and edge, always behind a confirmation. */
button.danger-action { border-color: #d39a9a; color: #a12b2b; background: white; }
button.danger-action:hover:not(:disabled) { border-color: #a12b2b; background: #fdf0f0; }
html.ux-0-5 button.danger-action:not(:disabled) { border-color: #9d1c1c; color: #9d1c1c; background: #fff; font-weight: 800; box-shadow: inset 3px 0 0 #9d1c1c; }
html.ux-0-5 button.danger-action:hover:not(:disabled) { border-color: #7d1212; color: #7d1212; background: #fdecec; }
html.ux-0-5 .labeling-pane-actions button.danger-action:not(:disabled) { margin-left: .45rem; }
/* Off controls read as off at a glance on every page: pale fill, light text, no hover, and a dashed button edge. */
button:disabled, input:disabled, select:disabled { opacity: 1; background: #f1f2f4; border-color: #dfe2e6; color: #8c929c; cursor: not-allowed; box-shadow: none; }
button:disabled, .file-button:has(input:disabled) { border-style: dashed; }
/* Off danger buttons keep the grey off look above and only the red text; the bar and heavy weight mark the live ones. */
html.ux-0-5 button.danger-action:disabled { color: #9d1c1c; }
/* The id-styled primary buttons outrank button:disabled; keep their off state visibly grey too. */
#submit:disabled, #label-publish:disabled, #label-publish-confirm:disabled, #label-editor-save:disabled { background: #f1f2f4; border-color: #dfe2e6; color: #8c929c; }
label { color: var(--ui-ink); font-weight: 600; }
.muted, .help, .status, .panel-heading > p, .private-source-card p, .selection-summary-header p, .book-summary summary span, .book-summary details > p, .book-summary dt, #auto-flow-help { color: var(--ui-muted); }
.eyebrow, .step, .section-kicker { color: var(--ui-focus); }
.skip-link { position: fixed; top: 8px; left: 8px; z-index: 100; transform: translateY(-200%); padding: 12px 16px; border-radius: var(--ui-radius); background: white; color: var(--ui-focus); }
.skip-link:focus { transform: none; }
.app-header { min-height: 60px; padding: 8px 24px; gap: 16px; align-items: center; color: var(--ui-ink); background: white; border-bottom: 1px solid var(--ui-border); }
.app-header h1, .admin-header h1, .admin-header h2, .auth-card h1 { margin: 0; font-size: 20px; line-height: 1.4; }
.app-header .eyebrow { display: none; }
.header-status { gap: 4px; width: auto; max-width: 60%; font-size: 14px; }
.header-status:has(#global-status:empty)::after { display: none; }
.tab-nav { padding: 0 24px; gap: 16px; border-color: var(--ui-border); }
.tab-button { min-height: 44px; border: 0; border-bottom: 3px solid transparent; border-radius: 0; background: white; color: var(--ui-muted); }
.tab-button.active { color: var(--ui-focus); border-bottom-color: var(--ui-primary); }
.tab-panel, .auth-card, .panel, .private-source-card, .question-card, .selected-book, .filter-grid, .book-summary, .taxonomy-tree, .selection-summary-header, .paper-toolbar, .admin-session, .toolbar, .table-wrap, .statistics-filter {
  border-color: var(--ui-border); border-radius: var(--ui-radius); box-shadow: none; background: var(--ui-surface);
}
.tab-panel { padding: 24px; }
body:has(> .qbank-main) { min-width: 0; }
.qbank-main { max-width: none; padding-inline: 0; }
.qbank-main > .tab-panel { border-inline: 0; border-radius: 0; }
.panel-heading h2 { margin: 0; font-size: 20px; }
.panel-heading, .question-meta, .selection-summary, .filter-grid, .book-summary, .taxonomy-tree, .paper-toolbar, .labeling-toolbar, .labeling-page-controls, .private-source-card { font-size: 14px; }
.selection-summary-header { padding: 16px; }
.selection-summary-header strong, .book-summary dd { color: var(--ui-focus); }
.question-card { grid-template-columns: 24px minmax(0, 1fr); gap: 8px; padding: 16px; }
.question-check { position: static; width: 20px; height: 20px; min-height: 20px; padding: 0; margin: 3px 0; clip-path: none; }
.question-card:has(.question-check:checked) { border-color: var(--ui-focus); box-shadow: inset 0 0 0 1px var(--ui-focus); }
.question-card:focus-within { outline-color: var(--ui-focus); }
.selection-tag button, .solution-view-button, .correction-edit-button, .delete-my-paper { opacity: 1; pointer-events: auto; }
.selection-tag button, .delete-my-paper { min-width: 28px; min-height: 28px; }
.selection-tag, .badge:not(.warning):not(.error) { border-radius: 8px; background: var(--ui-workspace); color: var(--ui-muted); }
#book-suggestions { border-color: var(--ui-border); border-radius: var(--ui-radius); }
#book-suggestions button { width: 100%; justify-content: start; text-align: left; overflow-wrap: anywhere; border: 0; }
#book-suggestions button:hover, .taxonomy-node:hover { background: var(--ui-selected); color: var(--ui-focus); }
.taxonomy-node[aria-pressed="true"], .my-paper-choice[aria-pressed="true"], .editor-tabs [aria-pressed="true"], .source-page-tabs [aria-pressed="true"], .labeling-pane-heading [data-mode][aria-pressed="true"] { border-color: var(--ui-focus); background: var(--ui-selected); color: var(--ui-focus); box-shadow: none; }
.my-paper-choice { border-color: var(--ui-border); background: white; }
.action-controls { gap: 8px; align-items: center; }
.action-controls button, .action-controls select { min-height: 44px; padding: 8px 12px; font-size: 14px; line-height: 20px; border-radius: var(--ui-radius); }
.paper-toolbar { display: grid; top: 8px; padding: 16px; gap: 16px; }
.paper-toolbar-row { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: 16px; min-width: 0; }
.paper-action-group { display: flex; flex-wrap: wrap; gap: 8px; align-items: end; }
.paper-toolbar-row:last-child { border-top: 1px solid var(--ui-border); padding-top: 16px; }
.paper-output { margin-left: auto; justify-content: end; }
.paper-toolbar .auto-flow-setting { min-height: 44px; }
.paper-toolbar select { appearance: none; padding-right: 32px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='m1 1 5 5 5-5' fill='none' stroke='%23626976' stroke-width='2'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; }
#auto-flow-help, #orzo-help { margin: 0; }
#orzo-help { flex-basis: 100%; }
.paper-pages, .source-stage, .labeling-pane, .labeling-scroll, .private-source-thumbnail { background: var(--ui-workspace); border-color: var(--ui-border); }
.page-controls { color: var(--ui-ink); background: white; border: 1px solid var(--ui-border); }
.page-controls label { color: var(--ui-ink); }
.document-toolbar, .source-tools, .hangul-controls, .labeling-result-pane > h4 { background: var(--ui-page); border-color: var(--ui-border); }
.document-content:focus { box-shadow: inset 0 0 0 2px var(--ui-focus); }
.labeling-drop-zone { color: var(--ui-focus); background: white; border-color: var(--ui-focus); }
.labeling-drop-zone.drag-over { background: var(--ui-selected); border-color: var(--ui-focus); }
.labeling-page-edge { opacity: 1; }
.labeling-stage.drawing .labeling-box-delete { visibility: visible; }
.labeling-box-connect { position: absolute; left: 0; top: 0; z-index: 4; visibility: hidden; }
.labeling-stage.drawing .labeling-box:hover .labeling-box-connect,
.labeling-stage.drawing .labeling-box:focus-within .labeling-box-connect,
.labeling-stage.drawing .labeling-box-connect[aria-pressed="true"] { visibility: visible; }
.labeling-box-connect[aria-pressed="true"] { background: #09552d; color: white; }
.labeling-stage.drawing .labeling-box[data-queued] .labeling-box-connect { visibility: visible; pointer-events: auto; }
.labeling-box.unsaved:has(.labeling-box-recovery) { z-index: 5; }
.labeling-box-recovery { position: absolute; top: 100%; left: 0; display: flex; flex-wrap: wrap; gap: 4px; width: max-content; max-width: min(340px, 70vw); padding: 4px; border: 1px solid #b92929; border-radius: 4px; background: white; pointer-events: auto; }
.labeling-box-recovery button { min-height: 44px; font-size: 14px; white-space: normal; }
.labeling-box-types { flex-wrap: wrap; width: max-content; max-width: min(350px, 80vw); align-items: flex-start; }
.labeling-box-types .labeling-box-connect { position: static; visibility: inherit; }
.labeling-stage.drawing .labeling-box:has(.labeling-box-connect[aria-pressed="true"]) .labeling-box-types { visibility: visible; }
.labeling-box-number { max-width: 100%; overflow-wrap: anywhere; box-sizing: border-box; }
@media (hover: none) { .labeling-stage.drawing .labeling-box-connect { visibility: visible; } }
.box-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.box-fields input { width: 100%; }
/* Draft status and recovery controls stay stable during ordinary saves. */
.labeling-save-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
#labeling-root .labeling-save-actions button[hidden] { display: inline-flex !important; visibility: hidden; }
#label-notice { max-height: 8em; line-height: 1.55; overflow: auto; }
#label-draft-status { height: 3.1em; line-height: 1.55; overflow: auto; overflow-wrap: anywhere; }
.labeling-pane .labeling-pane-help { height: 4.65em; line-height: 1.55; overflow: auto; margin: 4px 12px 12px; font-size: 14px; color: var(--ui-muted); overflow-wrap: anywhere; }
#private-status:empty, #private-upload-status:empty, #private-preview-status:empty { display: none; }
#private-upload-dialog { width: min(560px, calc(100vw - 32px)); max-width: none; max-height: 90dvh; padding: 16px; overflow: hidden; }
#private-upload-dialog[open] { display: flex; flex-direction: column; gap: 12px; }
#private-upload-dialog > :not(#private-upload-list) { flex-shrink: 0; }
#private-upload-dialog .panel-heading { flex-direction: row; margin: 0; }
#private-upload-dialog p { margin: 0; }
#private-upload-dialog h3 { margin: 0; }
#private-upload-drop { min-height: 120px; padding: 16px; font-size: 14px; }
#private-upload-drop small { display: inline-block; margin-top: 8px; font-weight: 400; }
#private-storage { font-size: 13px; }
#private-upload-list { display: grid; gap: 12px; min-height: 0; max-height: 38dvh; overflow: auto; }
#private-upload-list:empty { display: none; }
.private-upload-file { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 4px 12px; padding: 12px; border: 1px solid var(--ui-border); border-radius: var(--ui-radius); font-size: 13px; }
.private-pdf-icon { grid-column: 1; grid-row: 1 / 3; justify-self: center; align-self: center; padding: 12px 6px; border: 1px solid var(--ui-control-border); border-radius: 4px; color: var(--ui-focus); font-weight: 700; }
.private-upload-file progress { grid-column: 1; grid-row: 3; width: 64px; height: 8px; align-self: center; accent-color: var(--ui-focus); }
.private-upload-file strong, .private-upload-file > span:not(.private-pdf-icon) { grid-column: 2; overflow-wrap: anywhere; }
.private-upload-file[data-state="failed"] > span:last-child { color: #a92121; }
#label-source-zone { display: grid; align-content: center; gap: 12px; }
#label-source-drop { width: 100%; min-height: 120px; padding: 12px; border: 0; background: transparent; color: inherit; white-space: normal; }
#label-source-zone:has(#label-source-progress:not([hidden])) #label-source-drop { min-height: 44px; }
#label-source-progress { text-align: left; background: white; }
#label-source-progress progress { grid-column: 2; grid-row: 3; width: 100%; height: 12px; }
#label-source-phase { grid-row: 4; }
#private-preview { max-width: 94vw; max-height: 90dvh; padding: 12px; overflow: hidden; }
#private-preview[open] { display: flex; flex-direction: column; gap: 8px; }
#private-preview-header { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 8px; align-items: center; }
#private-preview-name { margin: 0; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#private-preview-count { font-size: 13px; white-space: nowrap; }
#private-preview-status { margin: 0; font-size: 13px; }
#private-preview-stage { display: grid; grid-template-columns: 44px minmax(0, 1fr) 44px; gap: 8px; align-items: center; min-height: 0; }
#private-preview-stage button { width: 44px; height: 44px; padding: 0; font-size: 28px; }
#private-preview-image { display: block; min-width: 0; min-height: 0; object-fit: contain; }
#private-preview-image:not([src]) { visibility: hidden; }
.admin-layout { background: var(--ui-page); }
.admin-sidebar { color: var(--ui-ink); background: white; border-right: 1px solid var(--ui-border); }
.admin-brand { border-color: var(--ui-border); }
.admin-brand > p:last-child, .admin-session > span { color: var(--ui-muted); }
.admin-sidebar .eyebrow { color: var(--ui-focus); }
.admin-tab { border: 0; border-radius: 0; color: var(--ui-muted); background: white; }
.admin-tab.active { color: var(--ui-focus); background: var(--ui-selected); }
.admin-tab.active::before { background: var(--ui-primary); }
.admin-header { min-height: 60px; padding-bottom: 16px; border-color: var(--ui-border); }
.auth-card { padding: 32px; }
.auth-card h1 { margin-bottom: 24px; }
.auth-card .status.error { color: #8c2525; }
[aria-invalid="true"] { border-color: #a92121; }
.field-error { color: #a92121; font-size: 14px; }
.field-error:empty { display: none; }
dialog { color: var(--ui-ink); background: white; border-color: var(--ui-border); border-radius: var(--ui-radius); box-shadow: 0 0 14px rgba(0, 0, 0, .1); max-height: calc(100dvh - 32px); overflow: auto; }
dialog::backdrop { background: rgba(26, 26, 26, .4); }
#private-rename input { width: 100%; }
@media (pointer: coarse) {
  button, .button-link:not([hidden]), input:not([type="checkbox"]):not([type="radio"]), select, .labeling-page-controls button, .labeling-page-controls input, .labeling-page-controls select, .selection-tag button, .delete-my-paper { min-height: 44px; }
  .selection-tag button, .delete-my-paper { min-width: 44px; }
}
@media (max-width: 760px) {
  .app-header { padding: 12px 16px; align-items: stretch; gap: 8px; }
  .header-status { max-width: none; width: 100%; }
  .session-controls { flex-wrap: wrap; gap: 8px; }
  .tab-nav { padding-inline: 8px; gap: 0; }
  .tab-nav button { padding-inline: 8px; flex: 1; }
  main { padding: 16px 8px 32px; }
  .tab-panel { padding: 16px; }
  .paper-toolbar { position: static; }
  .paper-toolbar-row { flex-direction: column; align-items: stretch; }
  .paper-output { margin-left: 0; justify-content: start; }
  .paper-action-group > * { max-width: 100%; min-width: 0; }
  .labeling-dashboard > .labeling-dialog-heading { flex-direction: column; align-items: start; gap: 8px; }
  .private-source-grid { grid-template-columns: minmax(0, 1fr); }
  .admin-session { flex-wrap: wrap; }
  .labeling-toolbar > *, .labeling-toolbar input, .labeling-toolbar select { max-width: 100%; min-width: 0; }
  .private-source-actions { grid-template-columns: minmax(0, 1fr); }
  .box-fields { grid-template-columns: minmax(0, 1fr); }
  .labeling-pane-heading button { width: auto; }
  .auth-card { padding: 24px; }
}
@media print { .skip-link { display: none; } }

.labeling-result-pane, .labeling-item { border-color: var(--ui-border); border-radius: var(--ui-radius); }
.labeling-notice:not(.error) { background: var(--ui-selected); color: var(--ui-focus); }

/* Orzo upload toolbar, compact: two thin rows so the slides keep most of the screen.
   Labels sit beside their controls, controls are 30px high and the long help opens from "?". */
.paper-toolbar.paper-toolbar-compact { padding: 6px 10px; gap: 6px; top: 4px; }
.paper-toolbar-compact .paper-toolbar-row { align-items: center; gap: 6px 10px; }
.paper-toolbar-compact .paper-toolbar-row:last-child { padding-top: 6px; }
.paper-toolbar-compact .paper-action-group { gap: 5px; align-items: center; }
.paper-toolbar-compact label { display: inline-flex; align-items: center; gap: 4px; margin: 0; font-size: 13px; white-space: nowrap; }
.paper-toolbar-compact button, .paper-toolbar-compact select, .paper-toolbar-compact input:not([type="checkbox"]):not([type="radio"]) { min-height: 30px; height: 30px; padding: 2px 8px; font-size: 13px; line-height: 18px; }
.paper-toolbar-compact select { padding-right: 26px; background-position: right 8px center; }
.paper-toolbar-compact #pdf-page-range { width: 6rem; }
.paper-toolbar-compact .paper-action-group:not(:has(> :not([hidden]))) { display: none; }
.paper-toolbar-compact .auto-flow-setting { min-height: 30px; }
.paper-toolbar-compact .paper-toolbar-row { justify-content: flex-start; }
.paper-toolbar-compact .orzo-mode-controls { display: inline-flex; align-items: center; gap: 4px 10px; padding: 0 10px 0 0; margin: 0; min-height: 30px; border: 0; border-right: 1px solid var(--ui-border); border-radius: 0; background: none; }
.paper-toolbar-compact .orzo-mode-controls legend { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.paper-toolbar-compact .mode-label { font-size: 13px; color: var(--ui-muted); }
.paper-toolbar-compact .orzo-priority-option { flex: none; }
.paper-toolbar-compact .orzo-priority-option p { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.paper-toolbar-compact .template-choice select { max-width: 10rem; }
.paper-toolbar-compact .toolbar-help-toggle { width: 30px; padding: 0; border-radius: 999px; }
.paper-toolbar-compact #auto-flow-help { margin: 0; font-size: 12px; color: var(--ui-muted, #596579); }
.paper-toolbar-compact #orzo-help, .paper-toolbar-compact #orzo-target-status { flex: 0 1 auto; margin: 0; font-size: 12px; line-height: 1.3; color: var(--ui-muted, #596579); }
@media (max-width: 760px) {
  .paper-toolbar-compact .paper-toolbar-row { flex-direction: row; align-items: center; }
  .paper-toolbar-compact label { white-space: normal; }
}

/* Term help "?": a 24px circle with a 44px touch area; tap (or Enter) opens the plain explanation below it. */
button.term-help, .paper-toolbar-compact button.term-help { position: relative; display: inline-flex; align-items: center; justify-content: center; flex: none;
  width: 24px; min-width: 24px; height: 24px; min-height: 24px; margin: 0 2px; padding: 0; border: 1px solid var(--ui-control-border); border-radius: 999px;
  font: 700 13px/1 system-ui, sans-serif; vertical-align: middle; color: var(--ui-focus); background: var(--ui-surface); }
button.term-help::before { content: ""; position: absolute; inset: -10px; }
button.term-help[aria-expanded="true"]::after { content: attr(data-help); position: absolute; top: calc(100% + 6px); left: 0; z-index: 30;
  width: max-content; max-width: min(20rem, 46vw); padding: 8px 10px; border: 1px solid var(--ui-border); border-radius: var(--ui-radius);
  background: var(--ui-ink); color: #fff; font: 400 13px/1.45 system-ui, sans-serif; text-align: left; white-space: normal; box-shadow: 0 6px 18px rgb(0 0 0 / .18); }
button.term-help[data-align="end"][aria-expanded="true"]::after { left: auto; right: 0; }
html.ux-0-5 button.term-help[aria-expanded="true"]::after { position: fixed; top: var(--term-help-top, calc(100% + 6px)); left: var(--term-help-left, 8px); right: auto; z-index: 80; max-width: min(22rem, calc(100vw - 16px)); }
html.ux-0-5 button.term-help[data-align="end"][aria-expanded="true"]::after { left: auto; right: var(--term-help-right, 8px); }
/* A "?" beside a form control sits next to its <label for>, never inside it, so a label tap still reaches the control. */
.labelled-help { display: inline-flex; align-items: center; gap: 4px; }
.labelled-help[hidden], .paper-toolbar .labelled-help[hidden] { display: none; }
.panel-intro { margin: .35rem 0 0; color: var(--ui-muted); font-size: 14px; }
#composition-panel .panel-heading > #layout-status { flex: none; white-space: nowrap; }
/* Tab 5 is shown only to the administrator; its comparison line follows the tab. */
body:has(#worksheet-tab[hidden]) .panel-intro .worksheet-note { display: none; }
