/* 全站移动端补充样式;各页保留原有桌面版式。 */
@media (max-width: 860px) {
  :root { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
  html { scroll-padding-top: 16px; }
  .wrap, .view, .score-workspace, .grid2 > *, .split > *, .entry-body,
  .admin-cols > *, .card, .q, .qi, .qp, .prow-main { min-width: 0; }
  .top-bar { flex-wrap: wrap; gap: 8px 16px; }
  .top-bar .tb-nav, .tb-user, .mast-right, .mast-top .acct {
    min-width: 0; max-width: 100%; flex-wrap: wrap;
  }
  .acct-name, .tb-user, .ch-desc, .ch-title, .title, .authors, .abs, .abs-zh,
  .ai-card, .err, .admin-err, .admin-msg, .todo-title, .todo-desc, .q-stem,
  .qi-stem, .qp-stem, .q-opt, .qi-opt, .qp-opt, .prow-main, .chat-bubble {
    overflow-wrap: anywhere;
  }
  .view-tabs, .sub-tabs, .subj-tabs, .admin-tabs {
    max-width: 100%; min-width: 0; flex-wrap: nowrap; overflow-x: auto;
    overflow-y: hidden; -webkit-overflow-scrolling: touch;
    scrollbar-width: none; overscroll-behavior-x: contain;
  }
  .view-tabs::-webkit-scrollbar, .sub-tabs::-webkit-scrollbar,
  .subj-tabs::-webkit-scrollbar, .admin-tabs::-webkit-scrollbar { display: none; }
  .view-tabs > button, .sub-tabs > button, .subj-tabs > button, .admin-tabs > button {
    flex: 0 0 auto; white-space: nowrap; min-height: 44px;
  }
  .table-scroll, .admin-pane { max-width: 100%; min-width: 0; overscroll-behavior: contain; }
  img, svg.trend-svg { max-width: 100%; }
  .stem-fig, .qimg { height: auto; }
  .math-block, .katex-display { max-width: 100%; overflow-x: auto; overflow-y: hidden; }
  .math, .q-stem > .katex, .q-ans .val > .katex, .qi-stem > .katex, .qp-stem > .katex {
    display: inline-block; max-width: 100%; overflow-x: auto; overflow-y: hidden; vertical-align: middle;
  }
  .math.math-block { display: block; }
  input:not([type="checkbox"]):not([type="radio"]):not([type="file"]), select, textarea {
    min-width: 0; max-width: 100%; font-size: 16px !important;
  }
  input:not([type="checkbox"]):not([type="radio"]):not([type="file"]), select { min-height: 44px; }
  button, .chip, .t-btn, .badge.pdf, .badge.star, .badge.act, .chat-upload {
    min-height: 44px; touch-action: manipulation;
  }
  .acct-btn, .row-act, .rv, .hd-close, .cal-nav button, .log-pager button,
  .kw-x, .pg-num, .pg-btn, .rel-close, .rel-star, .rel-dl { min-width: 44px; }
  .field-row, .metabar, .filter-bar, .asm-top { min-width: 0; }
  .field, .field-row > *, .f-field, .qg, .qitems { min-width: 0; }
  .field input, .field textarea, .field select { box-sizing: border-box; }
  .qg-items, .qitems { flex-wrap: wrap; }
  .card-head-row, .qg-head, .qg-hd, .mt-head, .pq-hd, .prow, .asm-sec { flex-wrap: wrap; }
  .acts, .q-acts, .paper-acts { flex-wrap: wrap; gap: 8px; }
  .overlay, .login-mask {
    top: var(--mobile-top, 0px); bottom: auto;
    height: 100vh; height: var(--mobile-vh, 100dvh);
    box-sizing: border-box; padding: 16px;
    padding-top: max(16px, env(safe-area-inset-top));
    padding-bottom: max(16px, env(safe-area-inset-bottom));
    overflow-y: auto; overscroll-behavior-y: contain;
  }
  .dialog, .login-box {
    box-sizing: border-box; width: min(100%, 440px); min-width: 0; margin: auto;
    max-height: calc(100vh - 32px); max-height: calc(var(--mobile-vh, 100dvh) - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
  }
  body:has(.overlay), body:has(.login-mask:not([hidden])), body:has(.chat-panel.open) { overflow: hidden; }
  .dialog-acts, .login-actions { gap: 10px; flex-wrap: wrap; }
  .dialog-acts { background: var(--panel); padding: 10px 0 0; }
  .chat-panel { top: var(--mobile-top, 0px); bottom: auto; height: 100vh; height: var(--mobile-vh, 100dvh); max-height: var(--mobile-vh, 100dvh); }
  .chat-panel-hd { padding-top: max(14px, env(safe-area-inset-top)); }
  .chat-panel-hd, .chat-input-area { flex-shrink: 0; }
  .chat-input-area { padding-bottom: max(14px, env(safe-area-inset-bottom)); }
  .chat-msgs { min-height: 0; overscroll-behavior-y: contain; }
  .chat-msg > div:last-child { min-width: 0; }
  .chat-fab { bottom: max(18px, env(safe-area-inset-bottom)); }
  .log-bar, .log-pager, .admin-cfg { flex-wrap: wrap; gap: 10px; }
  .admin-newuser input[type="checkbox"] { width: 20px; height: 20px; padding: 0; flex: none; }
  .admin-chk { display: flex; align-items: center; gap: 8px; min-height: 44px; }
  .admin-ops button { white-space: nowrap; }
  .admin-pane:has(.admin-newuser) .admin-tbl { min-width: 620px; }
  .admin-pane:has(.log-bar) .admin-tbl { min-width: 900px; }
  .admin-tbl .td-sm { white-space: normal; overflow-wrap: anywhere; min-width: 160px; max-width: 240px; }
  .admin-tbl td:nth-child(2) { min-width: 140px; max-width: 240px; overflow-wrap: anywhere; white-space: normal; }
  .console, .filters, .filter, .kw-tags, .kw-group, .related-panel, .rel-title { min-width: 0; }
  .modes, .pdf-filter, .res-actions, .res-head { flex-wrap: wrap; }
  .kw-tags { flex: 1 1 0; }
  .kw-group { max-width: 100%; }
  .kw-tag { max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
  .kw-x { flex-shrink: 0; }
  .search-field .lead { flex: 0 0 auto; }
  .search-field .go { flex-shrink: 0; }
  .rel-item { flex-wrap: wrap; }
  .rel-title { flex: 1 1 160px; overflow-wrap: anywhere; }
  .related-panel, .ai-card, .entry-body { max-width: 100%; }
  footer.foot { overflow-wrap: anywhere; }
}

@media (max-width: 640px) {
  .wrap { padding-left: max(16px, env(safe-area-inset-left)); padding-right: max(16px, env(safe-area-inset-right)); }
  main.wrap { padding-bottom: max(80px, env(safe-area-inset-bottom)); }
  .top-bar { padding: 8px max(16px, env(safe-area-inset-right)) 8px max(16px, env(safe-area-inset-left)); letter-spacing: .1em; }
  .top-bar a { display: inline-flex; min-height: 44px; align-items: center; }
  .top-bar .tb-nav { flex-wrap: wrap; gap: 8px 14px; }
  .mast-right { width: 100%; gap: 8px 12px; }
  .mast-top .acct { flex: 1 1 0; }
  .acct-name { flex: 1 1 100px; }
  .acct-btn { flex-shrink: 0; }
  .card { padding: 18px 14px; }
  .ph-title { font-size: clamp(28px, 8vw, 38px); }
  .page-head { gap: 10px; flex-wrap: wrap; }
  .page-head .line { min-width: 24px; }
  .view-tabs, .sub-tabs { gap: 12px; }
  .subj-tabs { gap: 18px; }
  .view-tabs .nav-count { min-width: 3ch; }
  .sub-tabs .nav-count { width: 3ch; font-size: 10px; }
  .sub-tabs .nav-count.paper-count { width: 7ch; }
  .grid2, .split { grid-template-columns: minmax(0, 1fr); }
  .metabar { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .filter-bar[style] { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .qchip { min-height: 44px; }
  .qchip input { width: 48px; }
  .data-table.matrix { table-layout: auto; width: max-content; min-width: 100%; }
  .data-table.matrix th.stick, .data-table.matrix td.stick { min-width: 82px; width: 82px; max-width: 82px; }
  .data-table.matrix th.stick2, .data-table.matrix td.stick2 { left: 82px; min-width: 108px; width: 108px; max-width: 108px; }
  .data-table.matrix td.cell, .data-table.matrix th.cell { min-width: 36px; }
  /* 记录变为竖向纸卡,复盘和修改/删除都留在当前屏幕内。 */
  .rec-table { display: block; width: 100%; }
  .rec-table thead { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .rec-table tbody { display: grid; gap: 14px; }
  .rec-table tbody tr { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 10px; border: 1px solid var(--line-soft); }
  .rec-table td, .rec-table td:nth-child(6) { display: block; padding: 8px 4px; border: 0; min-width: 0; white-space: normal; overflow-wrap: anywhere; text-align: left; }
  .rec-table td::before { content: attr(data-label); display: block; font-size: 10px; color: var(--ink-faint); margin-bottom: 4px; }
  .rec-table td:nth-child(3), .rec-table td:last-child { grid-column: 1 / -1; }
  .rec-table td:last-child { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: 8px; }
  .rec-table td:last-child::before { display: none; }
  .filters { display: grid; grid-template-columns: minmax(0, 1fr); width: 100%; gap: 14px; }
  .filter { max-width: 100%; }
  .filter .yr { display: flex; width: 100%; min-width: 0; }
  .filter .select-wrap { min-width: 0; flex: 1; }
  .filter .box, .filter .box[style] { width: 100% !important; min-width: 0; box-sizing: border-box; }
  .console { grid-template-columns: minmax(0, 1fr); }
  .search-field { gap: 8px; }
  .search-field .lead { display: none; }
  .kw-tags input { width: 100%; min-width: 50px; }
  .res-actions { display: flex; gap: 8px; }
  .res-actions > * { flex: 1 1 auto; }
  .cal-head { flex-wrap: wrap; gap: 8px; }
  .cal-day { min-width: 0; min-height: 40px; }
  .todo-check { width: 44px; height: 44px; flex: 0 0 44px; }
  .todo-item { flex-wrap: wrap; }
  .todo-main { flex-basis: calc(100% - 60px); }
  .todo-meta { margin-left: 54px; flex-wrap: wrap; }
  .dialog { border-radius: 4px; padding: 20px 16px; }
  .chat-panel { width: 100%; max-width: 100%; }
  .chat-panel .chat-input-area textarea { max-height: 25dvh; }
  .asm-sec .as-label, .asm-sec .as-s { width: auto; max-width: 100%; }
  .q-hd, .q-foot, .paper-hd, .pq-hd { flex-wrap: wrap; gap: 8px; }
  .q-opts, .qi-opts, .qp-opts { min-width: 0; }
  .q-opt, .qi-opt, .qp-opt { min-height: 44px; }
  .color-dots { flex-wrap: wrap; gap: 8px; }
  .color-dot { width: 36px; height: 36px; }
}

@media (max-height: 500px) and (pointer: coarse) {
  .overlay, .login-mask { align-items: flex-start; }
  .chat-panel-hd { padding-block: 8px; }
  .chat-suggest, .chat-empty { display: none; }
}
