/* Shared controls and narrow-screen layouts. Loaded after the design system. */
.permission-row{flex-wrap:wrap;gap:10px!important;padding:10px 0!important;border-bottom:1px solid var(--border)}
.permission-check{display:inline-flex;align-items:center;gap:4px;white-space:nowrap;font-size:12px;cursor:pointer}
.permission-check input{width:16px;height:16px;accent-color:var(--primary)}
/* 表格里的操作栏一律一行显示：按钮不压缩、不换行；列宽不够时表格横向滚动。
   只作用于单元格内的操作栏，卡片/表格上方的同名工具条仍可换行（它们自带 flexWrap:wrap 的内联样式）。 */
.row-actions{display:flex;align-items:center;gap:6px}
.data-table td>div.row-actions,.data-table td:last-child>div:has(>button){display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;width:max-content;white-space:nowrap}
.data-table td>div.row-actions>button,.data-table td>div.row-actions>a,.data-table td:last-child>div:has(>button)>button{flex:0 0 auto;white-space:nowrap}
.data-table td:has(>div.row-actions),.data-table td:has(>div.student-row-actions){white-space:nowrap}
.data-table td button{min-height:30px;padding:4px 9px!important;border-radius:6px!important;font-size:12px!important;font-weight:500;box-shadow:none!important}
.data-table td button:not(.btn-danger):not(.btn-danger-ghost){background:var(--surface,#fff)!important;color:var(--primary)!important;border:1px solid var(--border)!important}
.data-table td button.btn-danger,.data-table td button.btn-danger-ghost{background:#fff5f5!important;color:#c24141!important;border:1px solid #fecaca!important}
.data-table td button:disabled{opacity:.4;cursor:not-allowed}
.model-list{display:grid;gap:16px;margin:20px 0}.model-card{border:1px solid var(--border);border-radius:12px;padding:18px;background:var(--surface,#fff)}
.model-card h4{margin:0 0 16px}.approval-snapshot{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.6 monospace;max-height:350px;overflow:auto}
/* AI 助手：这里只管尺寸，外观一律以 design-system.css 为准（不再覆盖圆角/配色/气泡样式） */
.ai-fab{width:48px!important;height:48px!important}
.ai-fab svg{pointer-events:none}
.ai-panel{width:min(420px,calc(100vw - 24px))!important;max-height:calc(100dvh - 96px)!important}
.ai-chat{min-height:0;flex:1}
.ai-btn{min-height:36px}.ai-settings{padding:16px}.ai-settings button{margin-top:4px}.ai-back{background:#f1f5f9!important;color:#334155!important}.ai-link{display:block;margin-top:8px}
@media(max-width:768px){
  html,body{width:100%;max-width:100%;overflow-x:hidden}#main{min-width:0;padding:14px!important}
  .page-head{align-items:flex-start!important;gap:12px!important;flex-wrap:wrap}.page-actions{flex-wrap:wrap;gap:8px!important;max-width:100%}.page-actions button{min-height:38px}
  .search-bar,.filter-bar{flex-wrap:wrap!important;height:auto!important;gap:8px!important}.search-bar>*{max-width:100%;min-width:0}.search-bar input,.search-bar select{flex:1;min-width:120px}
  .form-grid{grid-template-columns:1fr!important}.form-grid>*{grid-column:auto!important;min-width:0}input,select,textarea{font-size:16px!important;max-width:100%}
  .modal{width:calc(100vw - 20px)!important;max-width:calc(100vw - 20px)!important;max-height:calc(100dvh - 24px)!important;margin:12px auto!important}.modal-body{overflow:auto!important;min-height:0;padding:16px!important}.modal-footer{flex-wrap:wrap;gap:8px}
  .table-wrap{max-width:100%;overflow:auto;overscroll-behavior-x:contain}.data-table{min-width:0}.data-table td button{min-height:36px}.data-table .sticky-last{position:static!important}
  .roles-layout{flex-direction:column!important}.roles-layout>div{width:100%!important;box-sizing:border-box}.permission-row>span{width:100%!important}.permission-check{min-height:32px}
  .ai-panel{position:fixed!important;inset:8px!important;left:8px!important;right:8px!important;top:8px!important;bottom:8px!important;width:auto!important;max-width:none!important;height:auto!important;max-height:none!important}.ai-open .ai-fab{display:none}.ai-welcome p{margin:0 0 10px}.ai-quick button{font-size:12px!important}.ai-head{padding:12px!important}
}

.ai-head .ai-title{flex:1;min-width:0}.ai-head .ai-icon-btn{width:30px;height:30px;font-size:16px}
@media(max-width:850px){
  .sidebar,.sidebar.collapsed{width:240px!important;transform:translateX(-100%)!important;z-index:1600!important}
  body.drawer-open .sidebar{transform:translateX(0)!important}
  .topbar,body:has(.sidebar.collapsed) .topbar{left:0!important}
  .main,body:has(.sidebar.collapsed) .main{left:0!important}.main>*{min-width:0!important}
  #navDrawerButton{display:inline-flex!important;flex:none}
  /* 校区 / 岗位切换：手机端走导航抽屉，顶栏腾出位置（账号按钮本身仍留在右上角） */
  .drawer-context:not([hidden]){display:flex!important}
  .main .kpi-grid,.main .stat-grid,.main .card-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}
}

@media(max-width:850px){.main .card-grid:has(>.stat-card){display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:12px!important}.main .stat-card{min-width:0;padding:16px!important}.main .stat-card:last-child:nth-child(odd){grid-column:1/-1}.pager{flex-wrap:wrap}}
/* 窄屏：折叠按钮回到文档流内，跟随可见筛选项排在行尾 */
@media(max-width:768px){.search-bar.filter-collapsible{padding-right:20px}.filter-toggle{position:static;margin-left:auto}.search-bar.filter-collapsible>.filter-reset{position:static;top:auto;right:auto;height:32px;line-height:normal}}

.attachment-toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.attachment-list{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;max-width:none}.attachment-item{display:inline-flex;flex-direction:column;align-items:center;gap:4px;padding:0;border:0;background:none}.attachment-link{border:0!important;background:transparent!important;color:var(--primary)!important;text-align:left;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px;min-height:28px;padding:4px!important}
/* ★ 附件缩略图：列表、详情、表单统一用小图，点击进查看器 */
.attachment-thumb{width:56px;height:56px;padding:0;border:1px solid var(--border);border-radius:8px;background:#fff;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;overflow:hidden;cursor:pointer;flex:0 0 auto}
.attachment-thumb:hover{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-light)}
.attachment-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.attachment-thumb-icon{font-size:20px;line-height:1}
.attachment-thumb-name{max-width:52px;font-size:10px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.attachment-remove{min-height:22px;height:22px;padding:0 8px!important;font-size:11px!important}
/* ★ 多附件查看器：左右切换前后附件 */
.attachment-view{display:flex;flex-direction:column;gap:12px}
.attachment-view-stage{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-height:200px}
.attachment-view-bar{display:flex;justify-content:center;align-items:center;gap:10px}
.attachment-view-nav{min-width:44px;height:34px;min-height:34px;padding:0 14px!important;font-size:20px;line-height:1}
.attachment-view-counter{font-size:13px;color:var(--text-muted);min-width:56px;text-align:center}
.attachment-view-title{font-size:15px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:70vw}
.attachment-preview{display:flex;flex-direction:column;align-items:center;gap:16px}.scan-upload-panel{text-align:center}.attachment-field{grid-column:1/-1!important}.column-resizer{position:absolute;right:0;top:0;bottom:0;width:9px;cursor:col-resize;touch-action:none;z-index:5;border-right:2px solid transparent}.column-resizer:hover,.column-resizer:focus{border-color:var(--primary);outline:none}.data-table th{position:relative}.data-table td{overflow:hidden;text-overflow:ellipsis}

/* Compact mobile summaries without inheriting the desktop 24-column spans. */
@media(max-width:850px){
 .main .card-grid:has(>.stat-card)>*{grid-column:auto!important;grid-row:auto!important}
 .main .card-grid:has(>.stat-card)>.stat-card:last-child:nth-child(odd){grid-column:1/-1!important}
}
@media(max-width:650px){
 .main .card-grid:has(>.stat-card)>.stat-card{padding:12px!important;min-height:0!important;height:auto!important}
 .main .card-grid:has(>.stat-card) .stat-card-value{font-size:24px!important;margin:6px 0!important}
 .topbar .icon-btn,.modal-close,.attachment-remove{min-width:36px;min-height:36px}
 .schedule-month-bar select{flex:1 1 90px;width:auto!important;max-width:130px}
}

/* Progressive disclosure keeps optional data available without crowding the first view. */
.form-section{border:1px solid var(--border);border-radius:10px;margin:12px 0;background:var(--surface,#fff)}
.form-section>summary{padding:14px 16px;cursor:pointer;font-weight:600;min-height:44px;box-sizing:border-box}
.form-section>summary small{font-weight:400;color:var(--text-muted);margin-left:12px;font-size:12px}
.form-section>.form-grid{padding:4px 16px 16px}
.field-error{color:var(--danger);font-size:12px;margin-top:6px;line-height:1.5}
[aria-invalid="true"]{border-color:var(--danger)!important;outline-color:var(--danger)}
.compact-actions{display:contents}
.compact-actions>summary{display:none}
.compact-actions-items{display:flex;flex-wrap:wrap;gap:8px}
@media(max-width:600px){
 .compact-actions{display:block;position:relative;order:2}
 .compact-actions>summary{display:flex;align-items:center;min-height:44px;cursor:pointer;list-style:none}
 .compact-actions>summary::-webkit-details-marker{display:none}
 .compact-actions:not([open])>.compact-actions-items{display:none}
 .compact-actions-items{position:absolute;right:0;top:100%;min-width:180px;max-width:85vw;background:var(--surface,#fff);border:1px solid var(--border);border-radius:10px;padding:8px;z-index:40;box-shadow:0 6px 20px #0002}
 .compact-actions-items>button{width:100%;min-height:44px;text-align:left}
 .form-section>summary small{display:block;margin:6px 0 0}
}

.skip-link{position:fixed;top:8px;left:8px;transform:translateY(-150%);z-index:100001;background:#fff;color:#174c35;padding:12px 16px;border:2px solid currentColor;border-radius:6px}
.skip-link:focus{transform:none}
@media(min-width:601px){.compact-actions::details-content{content-visibility:visible;display:contents}}

.statistics-toggle{display:none}
@media(max-width:600px){.statistics-toggle{display:block;min-height:44px;margin:0 0 12px}.mobile-statistics:not(.expanded)>.card-grid{display:none!important}}

.form-section:not([open])>.form-grid{display:none}

/* Keep student actions together, including when persisted column widths are narrow. */
.data-table td>div.student-row-actions{display:inline-flex;flex-wrap:nowrap;gap:6px;width:max-content;white-space:nowrap}
.student-row-actions>button{flex:0 0 auto;white-space:nowrap}
.data-table td:has(>.student-row-actions){min-width:174px;white-space:nowrap}

/* Default sizing uses complete single-line cell contents; scroll only for real overflow. */
.data-table{min-width:0}
.data-table td{white-space:nowrap;word-break:normal}
.table-wrap{overflow-x:auto}

/* 列表里的附件格统一压成一行小缩略图（老板 2026-10-18：有附件的行比没附件的高一截，
   首列编号跟着和右边高低不齐）。详情/上传区不受影响，仍是 56px 大图。 */
.data-table .attachment-list{flex-wrap:nowrap;align-items:center;gap:4px;max-height:28px;overflow:hidden}
.data-table .attachment-thumb{width:28px;height:28px;min-width:28px;border-radius:6px;gap:0}
.data-table .attachment-thumb img{width:100%;height:100%;object-fit:cover}
.data-table .attachment-thumb-name{display:none}
.data-table .attachment-link{min-height:28px}
