/* Shared helpers for the ported module pages (layered on shell.css) */
.page-title, .page-subtitle { padding-top: 2px; }
.card .card-desc { font-size: 0.8rem; color: var(--text-muted); margin: -6px 0 14px; }
.section-title-row { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:12px; }
.stat-grid.sm { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }
.stat-grid .stat-hint { font-size: 0.7rem; color: var(--text-dim); margin-top: 2px; }
.table-sub { font-size: 0.72rem; color: var(--text-muted); }
.empty-state.compact { padding: 24px 12px; }
.muted { color: var(--text-muted); }
.small { font-size: 0.78rem; }
.grid-2 { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.grid-3 { display:grid; grid-template-columns:repeat(auto-fit, minmax(220px, 1fr)); gap:12px; }
.grid-4 { display:grid; grid-template-columns:repeat(auto-fit, minmax(200px, 1fr)); gap:12px; }
.toolbar { display:flex; gap:10px; flex-wrap:wrap; align-items:flex-end; margin-bottom:14px; }
.toolbar .form-group { flex:1 1 200px; min-width:160px; }
.alert-box {
    display:flex; gap:10px; align-items:flex-start; padding:10px 14px;
    background: var(--accent-bg); color: var(--accent);
    border-radius:8px; font-size:0.8rem; line-height:1.45; margin-bottom:12px;
}
.alert-box.warn { background: var(--yellow-bg); color: var(--yellow); }
.alert-box.danger { background: var(--red-bg); color: var(--red); }
.alert-box .alert-icon { display:inline-flex; margin-top:1px; }
.tabs {
    display:flex; gap:4px; overflow-x:auto; border-bottom:1px solid var(--border);
    margin-bottom:16px; padding-bottom:0;
}
.tabs button {
    background:none; border:none; color:var(--text-muted); font-size:0.85rem; font-weight:600;
    padding:9px 14px; border-bottom:2px solid transparent; cursor:pointer; white-space:nowrap;
}
.tabs button.active { color:var(--accent); border-bottom-color:var(--accent); }
.tab-panel { display:none; }
.tab-panel.active { display:block; }
.progress { height:8px; background:var(--surface-3); border-radius:999px; overflow:hidden; }
.progress .bar { height:100%; background:var(--accent); transition:width 0.3s; }
.progress.green .bar { background:var(--green); }
.progress.red .bar { background:var(--red); }
.detail-list { display:flex; flex-direction:column; gap:10px; }
.detail-row { display:flex; justify-content:space-between; gap:10px; align-items:baseline; }
.detail-row .k { color:var(--text-muted); font-size:0.78rem; }
.detail-row .v { font-weight:600; text-align:right; }
.upload-dropzone {
    border:2px dashed var(--border-strong); border-radius:8px; padding:18px; text-align:center;
    color:var(--text-muted); cursor:pointer; font-size:0.85rem; transition:border-color .15s;
}
.upload-dropzone:hover { border-color: var(--accent); }
.upload-dropzone.dragover { border-color:var(--accent); background:var(--accent-bg); }
.upload-dropzone .dz-icon { margin-bottom:6px; color:var(--text-dim); }
.upload-meta { font-size:0.78rem; color:var(--text-muted); margin-top:6px; }
@media (max-width: 640px) {
    .grid-2 { grid-template-columns:1fr; }
}

/* Analytics */
.qa-list { display:flex; flex-direction:column; gap:12px; }
.qa-item { border:1px solid var(--border); border-radius:8px; padding:12px; }
.qa-head { display:flex; align-items:center; gap:6px; margin-bottom:4px; }
.qa-bar { margin-top:8px; width:100%; }
.challenge-list { list-style:none; display:flex; flex-direction:column; gap:10px; }
.challenge-item { display:flex; align-items:center; gap:10px; font-size:0.85rem; }
.challenge-num { width:24px; height:24px; border-radius:50%; background:var(--accent-bg); color:var(--accent); display:inline-flex; align-items:center; justify-content:center; font-size:0.75rem; font-weight:700; flex-shrink:0; }

/* Search wrapper (used by question bank & roster) */
.search-wrap { position:relative; }
.search-wrap .search-icon { position:absolute; left:11px; top:50%; transform:translateY(-50%); color:var(--text-dim); display:inline-flex; }
.search-wrap input { width:100%; padding:9px 12px 9px 34px; background:var(--surface-2); border:1px solid var(--border-strong); border-radius:8px; color:var(--text); font-size:0.85rem; outline:none; transition:border-color .15s; }
.search-wrap input:focus { border-color:var(--accent); }

/* Exam marking: uploaded page list */
.mk-file-list { border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; max-height: 220px; overflow-y: auto; }
.mk-file-row { display: flex; align-items: center; gap: 10px; padding: 4px 6px; border-bottom: 1px solid var(--border); }
.mk-file-row:last-child { border-bottom: none; }
.mk-file-row .mk-file-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.82rem; }
.mk-file-row .mk-page-btn { padding: 2px 8px; min-height: 24px; }

/* ---------- Full-width fluid layout ---------- */
.phase-configure { max-width: 100%; }
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; align-items: stretch; }
.grid-3 .form-group:last-child { justify-content: flex-end; }
.grid-3 .form-group .btn { width: 100%; height: 38px; }

@media (max-width: 900px) {
    .grid-2 { grid-template-columns: 1fr; }
    .grid-3 { grid-template-columns: 1fr; }
}
@media (min-width: 1600px) {
    .grid-2 { grid-template-columns: repeat(2, 1fr); gap: 18px; }
    .grid-3 { grid-template-columns: repeat(3, 1fr); }
}

/* Preview and action buttons wrap properly */
.toolbar { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; justify-content: flex-end; }

