/* WeChat Mini Program web-view layout. It only applies when source=wechat-miniapp. */
html.wechat-miniapp,
html.wechat-miniapp body {
  width: 100%;
  max-width: 100%;
  min-height: 100%;
  overflow-x: hidden;
  background: #eef2f5;
}

html.wechat-miniapp * { box-sizing: border-box; }
html.wechat-miniapp button,
html.wechat-miniapp input,
html.wechat-miniapp select,
html.wechat-miniapp textarea { letter-spacing: 0; }

html.wechat-miniapp.miniapp-module-entry body { background: #eef2f5; }
html.wechat-miniapp.miniapp-module-entry .shell,
html.wechat-miniapp.miniapp-module-entry .message-center { display: none !important; }
html.wechat-miniapp.miniapp-module-entry body::before {
  content: "正在打开";
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: grid;
  place-items: center;
  background: #eef2f5;
  color: #667589;
  font-size: 13px;
  font-weight: 700;
}
html.wechat-miniapp.miniapp-module-entry.miniapp-module-ready body::before { display: none; }

@media (max-width: 800px) {
  html.wechat-miniapp { --miniapp-side-nav: 82px; font-size: 13px; }
  html.wechat-miniapp header {
    min-height: 58px;
    height: auto;
    padding: 9px 12px;
    gap: 8px;
  }

  html.wechat-miniapp header .logo { width: 110px; height: 36px; }
  html.wechat-miniapp header .title { display: none; }
  html.wechat-miniapp .header-right { min-width: 0; max-width: calc(100% - 118px); margin-left: auto; }
  html.wechat-miniapp .account-area { max-width: 100%; gap: 5px; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; }
  html.wechat-miniapp .account-area::-webkit-scrollbar { display: none; }
  html.wechat-miniapp .user-badge { display: none; }
  html.wechat-miniapp .admin-button,
  html.wechat-miniapp .logout-button { min-width: 0; height: 34px; padding: 0 8px; white-space: nowrap; font-size: 11px; }

  html.wechat-miniapp main { padding: 18px 12px 28px; }
  html.wechat-miniapp .intro { margin-bottom: 14px; }
  html.wechat-miniapp .intro h2 { font-size: 20px; }
  html.wechat-miniapp .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  html.wechat-miniapp .card { min-width: 0; min-height: 154px; padding: 18px 15px; }
  html.wechat-miniapp .card h3 { font-size: 16px; }
  html.wechat-miniapp .card p { font-size: 11px; line-height: 1.5; }

  html.wechat-miniapp dialog,
  html.wechat-miniapp .performance-dialog,
  html.wechat-miniapp .schedule-dialog,
  html.wechat-miniapp .contact-dialog,
  html.wechat-miniapp .leave-dialog,
  html.wechat-miniapp .admin-dialog {
    position: fixed;
    inset: 0;
    width: 100vw;
    max-width: none;
    height: 100dvh;
    max-height: none;
    margin: 0;
    border-radius: 0;
  }

  html.wechat-miniapp dialog::backdrop { background: #eef2f5; backdrop-filter: none; }
  html.wechat-miniapp .panel { min-width: 0; width: 100%; height: 100%; }
  html.wechat-miniapp .panel-head,
  html.wechat-miniapp .performance-head,
  html.wechat-miniapp .schedule-head,
  html.wechat-miniapp .admin-head {
    position: sticky;
    top: 0;
    z-index: 12;
    min-height: 48px;
    padding: 7px 9px;
    gap: 6px;
    background: #fff;
  }

  html.wechat-miniapp .panel-head .panel-title,
  html.wechat-miniapp .performance-head > div,
  html.wechat-miniapp .schedule-head > div { min-width: 0; }
  html.wechat-miniapp .performance-head h2,
  html.wechat-miniapp .schedule-head h2,
  html.wechat-miniapp .admin-head h2,
  html.wechat-miniapp .panel-title h2 { font-size: 14px; }
  html.wechat-miniapp .performance-head p,
  html.wechat-miniapp .schedule-head p,
  html.wechat-miniapp .panel-title span { display: none; }
  html.wechat-miniapp .close { flex: 0 0 32px; width: 32px; height: 32px; margin-left: auto; font-size: 18px; }

  html.wechat-miniapp .contact-dialog .panel,
  html.wechat-miniapp .leave-dialog .panel,
  html.wechat-miniapp .performance-dialog .panel {
    display: grid;
    grid-template-columns: var(--miniapp-side-nav) minmax(0, 1fr);
    grid-template-rows: 48px minmax(0, 1fr);
    overflow: hidden;
  }
  html.wechat-miniapp .contact-dialog .panel-head,
  html.wechat-miniapp .leave-dialog .panel-head,
  html.wechat-miniapp .performance-dialog .performance-head { grid-column: 1 / -1; grid-row: 1; }
  html.wechat-miniapp .expense-main-tabs,
  html.wechat-miniapp .contact-tabs,
  html.wechat-miniapp .leave-tabs {
    position: static;
    z-index: 11;
    display: flex;
    grid-column: 1;
    grid-row: 2;
    width: var(--miniapp-side-nav);
    min-width: 0;
    height: 100%;
    padding: 6px 4px;
    gap: 4px;
    flex-direction: column;
    overflow-x: hidden;
    overflow-y: auto;
    background: #edf2f5;
    border-right: 1px solid #d5dde4;
    border-bottom: 0;
    scrollbar-width: thin;
  }
  html.wechat-miniapp .contact-dialog .contact-view,
  html.wechat-miniapp .leave-dialog .leave-view,
  html.wechat-miniapp .performance-dialog > .panel > .expense-main-panel {
    grid-column: 2;
    grid-row: 2;
    width: 100%;
    min-width: 0;
    height: 100%;
    overflow: auto;
  }
  html.wechat-miniapp .contact-dialog .contact-view[hidden] { display: none !important; }
  html.wechat-miniapp .expense-main-tab,
  html.wechat-miniapp .contact-tab,
  html.wechat-miniapp .leave-tab {
    flex: 0 0 auto;
    width: 100%;
    min-width: 0;
    padding: 8px 4px;
    white-space: normal;
    overflow-wrap: anywhere;
    line-height: 1.3;
    text-align: center;
    font-size: 10.5px;
  }

  html.wechat-miniapp .contact-dialog .panel-head {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) 32px;
    align-items: center;
    min-height: 48px;
    padding: 7px 8px;
    gap: 6px;
  }
  html.wechat-miniapp .contact-dialog .panel-title { grid-column: 1; grid-row: 1; min-width: 0; }
  html.wechat-miniapp .contact-dialog .search {
    grid-column: 2;
    grid-row: 1;
    order: initial;
    width: 100%;
    min-width: 0;
    height: 32px;
    padding: 6px 8px;
    border-radius: 4px;
    font-size: 12px;
  }
  html.wechat-miniapp .contact-dialog .close { grid-column: 3; grid-row: 1; width: 32px; height: 32px; }

  html.wechat-miniapp .expense-main-panel,
  html.wechat-miniapp .performance-content,
  html.wechat-miniapp .schedule-panel,
  html.wechat-miniapp .office-resource-view,
  html.wechat-miniapp .leave-view,
  html.wechat-miniapp .admin-form { min-width: 0; padding: 9px 9px 18px; overflow-x: hidden; }

  html.wechat-miniapp .contact-dialog #officeLinksView .results { padding: 8px; }
  html.wechat-miniapp .contact-dialog .url-group { margin-bottom: 12px; }
  html.wechat-miniapp .contact-dialog .group-head { margin-bottom: 6px; }
  html.wechat-miniapp .contact-dialog #officeLinksView .group-head h3 { font-size: 13px; }
  html.wechat-miniapp .contact-dialog .tile-grid { grid-template-columns: minmax(0, 1fr) !important; gap: 6px; }
  html.wechat-miniapp .contact-dialog .link {
    aspect-ratio: auto !important;
    min-height: 52px !important;
    padding: 6px 8px !important;
    gap: 8px !important;
    flex-direction: row;
    justify-content: flex-start;
    text-align: left;
  }
  html.wechat-miniapp .contact-dialog .link .favicon { width: 22px !important; height: 22px !important; font-size: 9px !important; border-radius: 4px; }
  html.wechat-miniapp .contact-dialog .link-copy { text-align: left; }
  html.wechat-miniapp .contact-dialog #officeLinksView .link-title { font-size: 12px; line-height: 1.3; }
  html.wechat-miniapp .contact-dialog #officeLinksView .link-host { margin-top: 2px; font-size: 9px; }

  html.wechat-miniapp #policyFilePanel {
    display: grid;
    grid-template-columns: 78px minmax(0, 1fr);
    padding: 0;
    overflow: hidden;
  }
  html.wechat-miniapp #policyFilePanel[hidden] { display: none; }
  html.wechat-miniapp #policyFilePanel .performance-tabs {
    display: flex;
    width: 78px;
    height: 100%;
    padding: 7px 5px;
    gap: 5px;
    flex-direction: column;
    overflow-y: auto;
    background: #f6f8fa;
    border-right: 1px solid #dce3e9;
  }
  html.wechat-miniapp #policyFilePanel .performance-tab {
    width: 100%;
    min-width: 0;
    padding: 7px 4px;
    white-space: normal;
    line-height: 1.35;
    font-size: 10px;
  }
  html.wechat-miniapp #policyFilePanel .performance-content { min-width: 0; height: 100%; padding: 12px; overflow: auto; }

  html.wechat-miniapp .expense-form,
  html.wechat-miniapp .cash-controls,
  html.wechat-miniapp .cash-expense-form,
  html.wechat-miniapp .refund-form,
  html.wechat-miniapp .redemption-form,
  html.wechat-miniapp .resource-import-form,
  html.wechat-miniapp .contract-upload-form,
  html.wechat-miniapp .leave-request-form,
  html.wechat-miniapp .form-grid,
  html.wechat-miniapp .admin-fields {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 10px;
  }

  html.wechat-miniapp .expense-form > *,
  html.wechat-miniapp .cash-controls > *,
  html.wechat-miniapp .refund-form > *,
  html.wechat-miniapp .redemption-form > *,
  html.wechat-miniapp .admin-fields > * { min-width: 0; width: 100%; grid-column: 1 !important; }
  html.wechat-miniapp input,
  html.wechat-miniapp select,
  html.wechat-miniapp textarea { max-width: 100%; min-width: 0; font-size: 12px; }
  html.wechat-miniapp textarea { min-height: 92px; resize: vertical; }

  html.wechat-miniapp .cash-summary { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 8px; }
  html.wechat-miniapp .cash-stat { min-width: 0; padding: 12px 10px; }
  html.wechat-miniapp .cash-stat strong { font-size: 18px; overflow-wrap: anywhere; }
  html.wechat-miniapp .expense-month-summary { align-items: flex-start; flex-direction: column; gap: 4px; }
  html.wechat-miniapp .expense-admin-filters,
  html.wechat-miniapp .cash-history-filters { display: grid; grid-template-columns: 1fr; gap: 8px; }

  html.wechat-miniapp .table-wrap,
  html.wechat-miniapp .week-scroll,
  html.wechat-miniapp .data-table-wrap,
  html.wechat-miniapp .resource-table-wrap {
    width: 100%;
    max-width: 100%;
    overflow-x: auto;
    overflow-y: visible;
    -webkit-overflow-scrolling: touch;
  }

  html.wechat-miniapp table { min-width: 720px; table-layout: auto; }
  html.wechat-miniapp table th,
  html.wechat-miniapp table td { padding: 9px 8px; white-space: nowrap; vertical-align: middle; font-size: 12px; }
  html.wechat-miniapp table td { max-width: 220px; overflow: hidden; text-overflow: ellipsis; }
  html.wechat-miniapp table thead th { position: sticky; top: 0; z-index: 2; }

  html.wechat-miniapp .expense-list,
  html.wechat-miniapp .approval-list,
  html.wechat-miniapp .contact-list,
  html.wechat-miniapp .contract-list { min-width: 0; }
  html.wechat-miniapp .expense-row,
  html.wechat-miniapp .approval-item,
  html.wechat-miniapp .contract-row { min-width: 0; grid-template-columns: 1fr; gap: 7px; padding: 13px 10px; }

  html.wechat-miniapp .salary-management-panel { height: calc(100dvh - 112px); padding: 0; }
  html.wechat-miniapp .salary-management-frame { width: 100%; height: 100%; border: 0; }

  html.wechat-miniapp.schedule-page-mode header { display: none; }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog[open] { inset: 0; height: 100dvh; }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog { position: static; width: 100%; height: 100dvh; min-height: 100dvh; }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog > .panel {
    position: relative;
    display: block;
    padding-left: var(--miniapp-side-nav);
    overflow: hidden;
  }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-head { display: none; }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-mode-tabs,
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-tabs {
    position: absolute;
    left: 0;
    z-index: 15;
    display: flex;
    width: var(--miniapp-side-nav);
    padding: 6px 4px;
    gap: 4px;
    flex-direction: column;
    overflow-x: hidden;
    overflow-y: auto;
    background: #edf2f5;
    border-right: 1px solid #d5dde4;
  }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-mode-tabs { top: 0; height: 111px; border-bottom: 1px solid #d5dde4; }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-tabs { top: 111px; bottom: 0; height: auto; }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-mode-tab,
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-tab {
    flex: 0 0 auto;
    width: 100%;
    min-width: 0;
    padding: 7px 4px;
    white-space: normal;
    line-height: 1.3;
    text-align: center;
    font-size: 10.5px;
  }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-body,
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-mode-empty { width: 100%; height: 100%; min-height: 100%; }
  html.wechat-miniapp .mobile-booking-form-grid { grid-template-columns: 1fr; }
  html.wechat-miniapp .mobile-booking-field,
  html.wechat-miniapp .mobile-booking-field.wide { grid-column: 1; min-width: 0; }
  html.wechat-miniapp .schedule-editor { padding: 12px; }
  html.wechat-miniapp .editor-box { width: 100%; max-width: none; padding: 16px 12px; }
  html.wechat-miniapp .editor-actions { flex-wrap: wrap; }

  /* Order system pages */
  html.wechat-miniapp .oa-header { position: sticky; top: 0; z-index: 20; min-height: 48px; padding: 6px 8px; }
  html.wechat-miniapp .oa-brand img { width: 78px; max-height: 31px; }
  html.wechat-miniapp .oa-brand > span,
  html.wechat-miniapp .oa-brand small { display: none; }
  html.wechat-miniapp .oa-brand strong { font-size: 13px; }
  html.wechat-miniapp .oa-user { min-width: 0; gap: 6px; font-size: 11px; }
  html.wechat-miniapp .oa-user span { max-width: 98px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  html.wechat-miniapp .oa-user a { padding: 7px 8px; white-space: nowrap; }
  html.wechat-miniapp .oa-shell { display: grid; grid-template-columns: var(--miniapp-side-nav) minmax(0, 1fr); width: 100%; min-width: 0; }
  html.wechat-miniapp .oa-nav {
    position: sticky;
    top: 48px;
    z-index: 19;
    display: flex;
    width: var(--miniapp-side-nav);
    height: calc(100dvh - 48px);
    padding: 6px 4px;
    gap: 4px;
    flex-direction: column;
    overflow-x: hidden;
    overflow-y: auto;
    background: #edf1f4;
    scrollbar-width: none;
  }
  html.wechat-miniapp .oa-nav::-webkit-scrollbar { display: none; }
  html.wechat-miniapp .oa-nav-item { flex: 0 0 auto; width: 100%; min-width: 0; padding: 8px 4px; white-space: normal; line-height: 1.25; text-align: center; font-size: 10.5px; }
  html.wechat-miniapp .oa-main { width: 100%; min-width: 0; padding: 9px 8px 18px; }
  html.wechat-miniapp .view-title { align-items: flex-start; gap: 8px; margin-bottom: 12px; }
  html.wechat-miniapp .view-title h1 { font-size: 17px; }
  html.wechat-miniapp .view-title p { display: none; }
  html.wechat-miniapp .view-actions { width: auto; gap: 5px; flex-wrap: wrap; justify-content: flex-end; }
  html.wechat-miniapp .view-actions button { padding: 8px 9px; font-size: 11px; white-space: nowrap; }
  html.wechat-miniapp .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 8px; }
  html.wechat-miniapp .metric { min-width: 0; padding: 12px 10px; }
  html.wechat-miniapp .metric strong { font-size: 18px; overflow-wrap: anywhere; }

  html.wechat-miniapp .filter-row,
  html.wechat-miniapp .customer-filter-row,
  html.wechat-miniapp .order-filter-main,
  html.wechat-miniapp .customer-bulk-actions,
  html.wechat-miniapp .order-bulk-actions,
  html.wechat-miniapp .product-bulk,
  html.wechat-miniapp .progress-filter-row { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; align-items: stretch; }
  html.wechat-miniapp .filter-row > *,
  html.wechat-miniapp .customer-filter-row > *,
  html.wechat-miniapp .order-filter-main > *,
  html.wechat-miniapp .progress-filter-row > * { min-width: 0 !important; width: 100%; }
  html.wechat-miniapp .order-filter-shortcuts { width: 100%; overflow-x: auto; padding-bottom: 3px; }
  html.wechat-miniapp .order-date-range { grid-template-columns: 1fr auto 1fr; }
  html.wechat-miniapp .order-filter-summary { min-height: 50px; width: 100%; }
  html.wechat-miniapp .order-view-grant-form { display: grid; grid-template-columns: 1fr; align-items: stretch; }
  html.wechat-miniapp .order-view-grant-form > * { width: 100%; min-width: 0; }
  html.wechat-miniapp .order-view-grant-row { align-items: flex-start; flex-direction: column; }
  html.wechat-miniapp .order-view-grant-row > span { min-width: 0; flex-direction: column; gap: 3px; }
  html.wechat-miniapp .order-view-grant-row button { margin-left: 0; }

  html.wechat-miniapp #customersView table,
  html.wechat-miniapp #ordersView table { min-width: 920px !important; }
  html.wechat-miniapp #salaryView .data-table { min-width: 2520px !important; }
  html.wechat-miniapp #editorDialog,
  html.wechat-miniapp .competition-dialog { width: 100vw; max-width: none; height: 100dvh; max-height: none; }
  html.wechat-miniapp .editor { min-height: 100%; }
  html.wechat-miniapp .editor-head { position: sticky; top: 0; z-index: 3; background: #fff; }
  html.wechat-miniapp .editor-fields,
  html.wechat-miniapp .progress-entry-grid { grid-template-columns: minmax(0, 1fr); }

  html.wechat-miniapp .competition-layout { display: block; }
  html.wechat-miniapp .competition-sidebar { width: 100%; max-height: 220px; margin-bottom: 10px; }

  /* Archive management */
  html.wechat-miniapp body.locked .shell { display: none; }
  html.wechat-miniapp .login-view { min-height: 100dvh; padding: 18px 12px; }
  html.wechat-miniapp .login-card { width: 100%; max-width: 420px; padding: 22px 16px; }
  html.wechat-miniapp.archive-miniapp .shell { display: grid; grid-template-columns: var(--miniapp-side-nav) minmax(0, 1fr); min-width: 0; }
  html.wechat-miniapp .sidebar {
    position: sticky;
    top: 0;
    z-index: 20;
    width: var(--miniapp-side-nav);
    height: 100dvh;
    padding: 6px 4px;
    overflow-y: auto;
    background: #173f73;
  }
  html.wechat-miniapp .sidebar .brand { display: none; }
  html.wechat-miniapp .nav {
    display: flex;
    flex-direction: column;
    width: 100%;
    gap: 5px;
    overflow-x: hidden;
    overflow-y: auto;
    scrollbar-width: none;
  }
  html.wechat-miniapp .nav::-webkit-scrollbar { display: none; }
  html.wechat-miniapp .nav-item { flex: 0 0 auto; width: 100%; min-width: 0; padding: 8px 4px; white-space: normal; line-height: 1.25; text-align: center; font-size: 10.5px; }
  html.wechat-miniapp .main { min-width: 0; padding: 0 8px 18px; }
  html.wechat-miniapp .topbar {
    position: sticky;
    top: 0;
    z-index: 18;
    display: flex;
    flex-direction: row;
    align-items: center;
    min-height: 54px;
    padding: 8px 2px;
    gap: 8px;
    background: #eef2f5;
  }
  html.wechat-miniapp .topbar h1 { font-size: 19px; }
  html.wechat-miniapp .topbar p { display: none; }
  html.wechat-miniapp .top-actions { flex: 1 1 auto; min-width: 0; flex-wrap: nowrap; justify-content: flex-end; overflow-x: auto; }
  html.wechat-miniapp .top-actions .btn { flex: 0 0 auto; padding: 8px 9px; white-space: nowrap; font-size: 11px; }
  html.wechat-miniapp .panel { min-width: 0; padding: 12px 10px; }
  html.wechat-miniapp .panel-head { gap: 9px; }
  html.wechat-miniapp .toolbar { display: grid; grid-template-columns: minmax(0, 1fr); gap: 7px; }
  html.wechat-miniapp .toolbar > * { width: 100%; min-width: 0; }
  html.wechat-miniapp .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  html.wechat-miniapp .stat-card { min-width: 0; padding: 12px 10px; }
  html.wechat-miniapp .dashboard-grid,
  html.wechat-miniapp .exchange-grid,
  html.wechat-miniapp .gaokao-summary { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  html.wechat-miniapp .dialog { width: 100vw; max-width: none; height: 100dvh; max-height: none; }
  html.wechat-miniapp .dialog-inner { width: 100%; min-height: 100%; border-radius: 0; }
  html.wechat-miniapp .dialog-head { position: sticky; top: 0; z-index: 3; background: #fff; }
  html.wechat-miniapp .dialog-body { padding: 12px; }
  html.wechat-miniapp .dialog-actions { position: sticky; bottom: 0; background: #fff; }

  html.wechat-miniapp .return-link,
  html.wechat-miniapp .oa-user a,
  html.wechat-miniapp.schedule-page-mode #closeSchedule { display: none !important; }

  /* Unified mobile module drawer. */
  html.wechat-miniapp .miniapp-drawer-toggle {
    position: relative;
    z-index: 1002;
    display: grid;
    flex: 0 0 36px;
    width: 36px;
    height: 36px;
    place-items: center;
    border: 1px solid #c9d3dd;
    border-radius: 5px;
    padding: 0;
    background: #fff;
    color: #173f73;
    box-shadow: 0 2px 7px rgba(25, 47, 72, .08);
    cursor: pointer;
  }
  html.wechat-miniapp .miniapp-drawer-toggle > span,
  html.wechat-miniapp .miniapp-drawer-toggle > span::before,
  html.wechat-miniapp .miniapp-drawer-toggle > span::after {
    display: block;
    width: 17px;
    height: 2px;
    border-radius: 1px;
    background: currentColor;
  }
  html.wechat-miniapp .miniapp-drawer-toggle > span { position: relative; }
  html.wechat-miniapp .miniapp-drawer-toggle > span::before,
  html.wechat-miniapp .miniapp-drawer-toggle > span::after { position: absolute; left: 0; content: ""; }
  html.wechat-miniapp .miniapp-drawer-toggle > span::before { top: -6px; }
  html.wechat-miniapp .miniapp-drawer-toggle > span::after { top: 6px; }
  html.wechat-miniapp .miniapp-drawer-backdrop {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: block;
    border: 0;
    padding: 0;
    background: rgba(17, 28, 42, .48);
    opacity: 0;
    pointer-events: none;
    transition: opacity .2s ease;
  }
  html.wechat-miniapp .miniapp-drawer {
    position: fixed !important;
    inset: 0 auto 0 0 !important;
    z-index: 1001 !important;
    display: flex !important;
    width: min(64vw, 260px) !important;
    min-width: 0 !important;
    height: 100dvh !important;
    max-height: 100dvh !important;
    padding: 18px 10px !important;
    gap: 6px !important;
    flex-direction: column !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    border: 0 !important;
    border-right: 1px solid rgba(255, 255, 255, .1) !important;
    background: #173f73 !important;
    box-shadow: 14px 0 34px rgba(15, 31, 48, .25);
    transform: translateX(-102%);
    transition: transform .2s ease;
    scrollbar-width: thin;
  }
  html.wechat-miniapp.miniapp-drawer-open body { overflow: hidden; }
  html.wechat-miniapp.miniapp-drawer-open .miniapp-drawer { transform: translateX(0); }
  html.wechat-miniapp.miniapp-drawer-open .miniapp-drawer-backdrop { opacity: 1; pointer-events: auto; }
  html.wechat-miniapp .miniapp-drawer [hidden] { display: none !important; }
  html.wechat-miniapp .miniapp-drawer .contact-tab,
  html.wechat-miniapp .miniapp-drawer .leave-tab,
  html.wechat-miniapp .miniapp-drawer .expense-main-tab,
  html.wechat-miniapp .miniapp-drawer .schedule-mode-tab,
  html.wechat-miniapp .miniapp-drawer .schedule-tab,
  html.wechat-miniapp .miniapp-drawer .oa-nav-item,
  html.wechat-miniapp .miniapp-drawer .nav-item {
    display: flex;
    flex: 0 0 auto;
    width: 100%;
    min-height: 42px;
    align-items: center;
    justify-content: flex-start;
    border: 0;
    border-radius: 5px;
    padding: 10px 12px;
    background: transparent;
    color: rgba(255, 255, 255, .82);
    font-size: 13px;
    font-weight: 700;
    line-height: 1.35;
    text-align: left;
    white-space: normal;
    overflow-wrap: anywhere;
  }
  html.wechat-miniapp .miniapp-drawer .contact-tab[aria-selected="true"],
  html.wechat-miniapp .miniapp-drawer .leave-tab[aria-selected="true"],
  html.wechat-miniapp .miniapp-drawer .expense-main-tab[aria-selected="true"],
  html.wechat-miniapp .miniapp-drawer .schedule-mode-tab[aria-selected="true"],
  html.wechat-miniapp .miniapp-drawer .schedule-tab[aria-selected="true"],
  html.wechat-miniapp .miniapp-drawer .oa-nav-item.active,
  html.wechat-miniapp .miniapp-drawer .nav-item.active {
    background: #fff;
    color: #173f73;
    box-shadow: 0 4px 12px rgba(5, 22, 43, .16);
  }

  html.wechat-miniapp .contact-dialog .panel,
  html.wechat-miniapp .leave-dialog .panel,
  html.wechat-miniapp .performance-dialog .panel {
    grid-template-columns: minmax(0, 1fr);
  }
  html.wechat-miniapp .contact-dialog .contact-view,
  html.wechat-miniapp .leave-dialog .leave-view,
  html.wechat-miniapp .performance-dialog > .panel > .expense-main-panel {
    grid-column: 1;
  }
  html.wechat-miniapp .contact-dialog .panel-head {
    grid-template-columns: 36px auto minmax(0, 1fr) 32px;
  }
  html.wechat-miniapp .contact-dialog .miniapp-drawer-toggle { grid-column: 1; grid-row: 1; }
  html.wechat-miniapp .contact-dialog .panel-title { grid-column: 2; }
  html.wechat-miniapp .contact-dialog .search { grid-column: 3; }
  html.wechat-miniapp .contact-dialog .close { grid-column: 4; }

  html.wechat-miniapp.schedule-page-mode #scheduleDialog > .panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: 48px minmax(0, 1fr);
    padding-left: 0;
  }
  html.wechat-miniapp .miniapp-drawer-page-head {
    position: relative;
    z-index: 18;
    display: flex;
    grid-column: 1;
    grid-row: 1;
    min-width: 0;
    align-items: center;
    gap: 9px;
    padding: 6px 9px;
    border-bottom: 1px solid #dbe2e8;
    background: #fff;
  }
  html.wechat-miniapp .miniapp-drawer-page-head strong { color: #23364c; font-size: 15px; }
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-body,
  html.wechat-miniapp.schedule-page-mode #scheduleDialog .schedule-mode-empty {
    grid-column: 1;
    grid-row: 2;
    width: 100%;
    height: 100% !important;
    min-height: 0;
    overflow: auto;
  }
  html.wechat-miniapp .miniapp-schedule-drawer .schedule-mode-tabs,
  html.wechat-miniapp .miniapp-schedule-drawer .schedule-tabs {
    position: static !important;
    display: contents !important;
  }
  html.wechat-miniapp .miniapp-schedule-drawer .schedule-toolbar { display: none !important; }
  html.wechat-miniapp .oa-shell,
  html.wechat-miniapp.archive-miniapp .shell { display: block; }
  html.wechat-miniapp .oa-header { gap: 8px; }
  html.wechat-miniapp .oa-brand { min-width: 0; }
  html.wechat-miniapp .oa-main,
  html.wechat-miniapp.archive-miniapp .main { width: 100%; min-width: 0; }
  html.wechat-miniapp.archive-miniapp .topbar { padding-left: 2px; }

  /* Finance embeds must never expose order-system navigation or sibling views. */
  html.wechat-miniapp.embedded-salary .oa-header,
  html.wechat-miniapp.embedded-salary .oa-nav { display: none !important; }
  html.wechat-miniapp.embedded-salary:not(.embedded-performance) .oa-view:not(#salaryView),
  html.wechat-miniapp.embedded-performance .oa-view:not(#performanceAssessmentView) { display: none !important; }
  html.wechat-miniapp.embedded-salary .oa-shell { display: block !important; min-height: 100%; }

  /* Secondary pages use titles only; brand marks belong on the home page. */
  html.wechat-miniapp header .logo,
  html.wechat-miniapp .oa-brand img,
  html.wechat-miniapp .sidebar .brand,
  html.wechat-miniapp .sidebar .brand-mark { display: none !important; }

  html.wechat-miniapp .personal-password-form {
    grid-template-columns: minmax(0, 1fr) !important;
    align-items: stretch;
  }
  html.wechat-miniapp .personal-password-form > * { width: 100%; min-width: 0; }

  /* Leave requests are a compact chronological list on phones. */
  html.wechat-miniapp .leave-calendar {
    display: block;
    border: 1px solid #dce3e9;
    background: #fff;
  }
  html.wechat-miniapp .leave-weekday,
  html.wechat-miniapp .leave-day.empty { display: none !important; }
  html.wechat-miniapp .leave-day {
    min-height: 0;
    border: 0;
    border-bottom: 1px solid #e2e7ec;
    padding: 0;
    background: #fff;
  }
  html.wechat-miniapp .leave-day:last-child { border-bottom: 0; }
  html.wechat-miniapp .leave-day .leave-day-main {
    display: grid;
    grid-template-columns: minmax(112px, auto) minmax(0, 1fr) auto;
    width: 100%;
    min-height: 52px;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    text-align: left;
  }
  html.wechat-miniapp .leave-day-main strong { margin: 0; font-size: 12px; white-space: nowrap; }
  html.wechat-miniapp .leave-day-number { display: none; }
  html.wechat-miniapp .leave-day-date { display: inline; }
  html.wechat-miniapp .leave-day .leave-state { margin: 0; min-width: 0; font-size: 10px; }
  html.wechat-miniapp .leave-day .leave-row-action {
    display: inline-flex;
    min-width: 50px;
    min-height: 30px;
    align-items: center;
    justify-content: center;
    border: 1px solid #8a5a96;
    border-radius: 4px;
    padding: 5px 7px;
    color: #70437d;
    font-size: 10px;
    font-weight: 800;
    white-space: nowrap;
  }
  html.wechat-miniapp .leave-day-main:disabled .leave-row-action { border-color: #d5dce3; color: #7d8895; }
  html.wechat-miniapp .leave-day .leave-cancel-random { margin: 0 10px 8px auto; }
  html.wechat-miniapp .leave-request-form { grid-template-columns: minmax(0, 1fr); }

  /* Customer and progress lists show summaries; names open complete details. */
  html.wechat-miniapp #customersView .data-table-wrap,
  html.wechat-miniapp #progressView .data-table-wrap { overflow: visible; border: 0; background: transparent; }
  html.wechat-miniapp #customersView .customer-table,
  html.wechat-miniapp #progressView .progress-table {
    display: block;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    table-layout: auto !important;
    background: transparent;
  }
  html.wechat-miniapp #customersView .customer-table thead,
  html.wechat-miniapp #progressView .progress-table thead { display: none; }
  html.wechat-miniapp #customersView .customer-table tbody,
  html.wechat-miniapp #progressView .progress-table tbody { display: grid; gap: 7px; }
  html.wechat-miniapp #customersView .customer-table tr,
  html.wechat-miniapp #progressView .progress-table tr {
    display: grid;
    min-width: 0;
    border: 1px solid #dce3ea;
    border-left: 4px solid #155b98;
    background: #fff;
  }
  html.wechat-miniapp #customersView .customer-table tr { grid-template-columns: 30px 28px minmax(0, 1fr) auto; align-items: center; }
  html.wechat-miniapp #customersView .customer-table td,
  html.wechat-miniapp #progressView .progress-table td {
    width: auto !important;
    min-width: 0 !important;
    max-width: none;
    border: 0;
    padding: 9px 6px;
    white-space: normal;
    overflow: visible;
  }
  html.wechat-miniapp #customersView .customer-table td:nth-child(4),
  html.wechat-miniapp #customersView .customer-table td:nth-child(5),
  html.wechat-miniapp #customersView .customer-table td:nth-child(6),
  html.wechat-miniapp #customersView .customer-table td:nth-child(7) { display: none; }
  html.wechat-miniapp #progressView .progress-table tr { grid-template-columns: minmax(0, 1fr) auto; padding: 8px 9px; }
  html.wechat-miniapp #progressView .progress-table td:nth-child(1) { grid-column: 1; grid-row: 1; }
  html.wechat-miniapp #progressView .progress-table td:nth-child(2) { grid-column: 1; grid-row: 2; color: #687486; }
  html.wechat-miniapp #progressView .progress-table td:nth-child(6) { grid-column: 2; grid-row: 1; }
  html.wechat-miniapp #progressView .progress-table td:nth-child(9) { grid-column: 1 / -1; grid-row: 3; padding-top: 5px; }
  html.wechat-miniapp #progressView .progress-table td:nth-child(3),
  html.wechat-miniapp #progressView .progress-table td:nth-child(4),
  html.wechat-miniapp #progressView .progress-table td:nth-child(5),
  html.wechat-miniapp #progressView .progress-table td:nth-child(7),
  html.wechat-miniapp #progressView .progress-table td:nth-child(8) { display: none; }
  html.wechat-miniapp #customersView .empty-row,
  html.wechat-miniapp #progressView .empty-row { display: block !important; padding: 28px 10px !important; }

  /* Every secondary page uses the same compact logo-blue title bar. */
  html.wechat-miniapp .miniapp-module-titlebar {
    display: grid !important;
    grid-template-columns: 36px minmax(0, 1fr) 36px !important;
    align-items: center !important;
    column-gap: 8px !important;
    min-height: 48px !important;
    border: 0 !important;
    border-bottom: 1px solid #0a3c7c !important;
    padding: 6px 9px !important;
    background: #0d4c9b !important;
    color: #fff !important;
    box-shadow: 0 2px 8px rgba(13, 76, 155, .18);
  }
  html.wechat-miniapp .miniapp-module-titlebar h1,
  html.wechat-miniapp .miniapp-module-titlebar h2,
  html.wechat-miniapp .miniapp-module-titlebar strong,
  html.wechat-miniapp .miniapp-module-titlebar .brand-name,
  html.wechat-miniapp .miniapp-module-titlebar .oa-brand { color: #fff !important; }
  html.wechat-miniapp .miniapp-module-titlebar img,
  html.wechat-miniapp .miniapp-module-titlebar .oa-brand > span,
  html.wechat-miniapp .miniapp-module-titlebar .oa-brand small,
  html.wechat-miniapp .miniapp-module-titlebar .oa-user { display: none !important; }
  html.wechat-miniapp .miniapp-module-titlebar .close,
  html.wechat-miniapp .miniapp-module-titlebar .icon-close {
    border-color: rgba(255, 255, 255, .5) !important;
    background: rgba(255, 255, 255, .12) !important;
    color: #fff !important;
  }
  html.wechat-miniapp .miniapp-module-titlebar .miniapp-drawer-toggle {
    grid-column: 1 !important;
    grid-row: 1 !important;
    justify-self: start;
    border-color: rgba(255, 255, 255, .55);
    background: rgba(255, 255, 255, .12);
    color: #fff;
    box-shadow: none;
  }
  html.wechat-miniapp .miniapp-module-titlebar > h1,
  html.wechat-miniapp .miniapp-module-titlebar > h2,
  html.wechat-miniapp .miniapp-module-titlebar > strong,
  html.wechat-miniapp .miniapp-module-titlebar > div:not(.top-actions),
  html.wechat-miniapp .miniapp-module-titlebar .panel-title,
  html.wechat-miniapp .miniapp-module-titlebar .oa-brand {
    grid-column: 2 !important;
    grid-row: 1 !important;
    min-width: 0;
    justify-self: stretch;
    text-align: center;
  }
  html.wechat-miniapp .miniapp-module-titlebar .close,
  html.wechat-miniapp .miniapp-module-titlebar .icon-close {
    grid-column: 3 !important;
    grid-row: 1 !important;
    justify-self: end;
  }
  html.wechat-miniapp .contact-dialog .panel-head.miniapp-module-titlebar {
    grid-template-columns: 36px minmax(0, 1fr) 32px;
  }
  html.wechat-miniapp .contact-dialog .panel-head.miniapp-module-titlebar .panel-title { grid-column: 2; }
  html.wechat-miniapp .contact-dialog .panel-head.miniapp-module-titlebar .close { grid-column: 3; }
  html.wechat-miniapp .miniapp-inline-search {
    display: block;
    width: calc(100% - 16px) !important;
    height: 36px !important;
    margin: 8px 8px 0;
    padding: 7px 9px !important;
    border: 1px solid #cbd5df;
    border-radius: 4px;
    background: #fff;
  }
  html.wechat-miniapp .miniapp-module-titlebar h1,
  html.wechat-miniapp .miniapp-module-titlebar h2 { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  html.wechat-miniapp.archive-miniapp .miniapp-inline-actions {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    width: 100%;
    margin: 0 0 9px;
    gap: 7px;
    overflow: visible;
  }
  html.wechat-miniapp.archive-miniapp .miniapp-inline-actions .btn {
    width: 100%;
    min-width: 0;
    min-height: 36px;
    padding: 7px 8px;
    white-space: normal;
  }

  /* Wide secondary-page tables become one-column field cards on phones. */
  html.wechat-miniapp .miniapp-stacked-wrap {
    width: 100%;
    max-width: 100%;
    overflow: visible !important;
  }
  html.wechat-miniapp table.miniapp-stacked-table {
    display: block;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    border: 0;
    background: transparent;
  }
  html.wechat-miniapp #ordersView table.miniapp-stacked-table,
  html.wechat-miniapp #salaryView table.miniapp-stacked-table { min-width: 0 !important; }
  html.wechat-miniapp #ordersView table.miniapp-stacked-table tbody tr { height: auto !important; }
  html.wechat-miniapp #ordersView table.miniapp-stacked-table td br { display: initial; }
  html.wechat-miniapp #ordersView table.miniapp-stacked-table td strong::before,
  html.wechat-miniapp #ordersView table.miniapp-stacked-table td strong::after { content: none !important; }
  html.wechat-miniapp table.miniapp-stacked-table thead { display: none; }
  html.wechat-miniapp table.miniapp-stacked-table tbody {
    display: grid;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    gap: 8px;
  }
  html.wechat-miniapp table.miniapp-stacked-table tbody + tbody { margin-top: 8px; }
  html.wechat-miniapp table.miniapp-stacked-table tbody tr {
    display: grid;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    border: 1px solid #d9e1e8;
    border-left: 4px solid #0d4c9b;
    border-radius: 4px;
    background: #fff;
    box-shadow: none;
    contain: layout paint style;
    content-visibility: auto;
    contain-intrinsic-size: auto 160px;
  }
  html.wechat-miniapp table.miniapp-stacked-table tbody tr[hidden] { display: none !important; }
  html.wechat-miniapp table.miniapp-stacked-table tbody td,
  html.wechat-miniapp table.miniapp-stacked-table tbody th {
    display: grid;
    grid-template-columns: minmax(76px, 30%) minmax(0, 1fr);
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    align-items: center;
    gap: 8px;
    border: 0;
    border-bottom: 1px solid #edf1f4;
    padding: 8px 9px;
    overflow: visible;
    color: #263548;
    font-size: 12px;
    text-align: left;
    text-overflow: clip;
    white-space: normal;
    overflow-wrap: anywhere;
  }
  html.wechat-miniapp table.miniapp-stacked-table tbody td:last-child,
  html.wechat-miniapp table.miniapp-stacked-table tbody th:last-child { border-bottom: 0; }
  html.wechat-miniapp table.miniapp-stacked-table tbody td::before,
  html.wechat-miniapp table.miniapp-stacked-table tbody th::before {
    content: attr(data-label);
    color: #697789;
    font-size: 10px;
    font-weight: 800;
    line-height: 1.35;
  }
  html.wechat-miniapp table.miniapp-stacked-table .miniapp-empty-cell { display: none; }
  html.wechat-miniapp table.miniapp-stacked-table input,
  html.wechat-miniapp table.miniapp-stacked-table select,
  html.wechat-miniapp table.miniapp-stacked-table textarea { width: 100%; min-width: 0; }
  html.wechat-miniapp table.miniapp-stacked-table button,
  html.wechat-miniapp table.miniapp-stacked-table td:last-child > div { flex-wrap: wrap; }

  /* Current subsection title and a visible, single-tap close action. */
  html.wechat-miniapp.schedule-page-mode #closeSchedule { display: grid !important; }
  html.wechat-miniapp .miniapp-module-close {
    display: grid;
    width: 32px;
    height: 32px;
    place-items: center;
    margin: 0;
    border: 1px solid rgba(255, 255, 255, .5);
    border-radius: 5px;
    padding: 0;
    background: rgba(255, 255, 255, .12);
    color: #fff;
    font-size: 20px;
    line-height: 1;
  }
  html.wechat-miniapp .miniapp-drawer-page-head.miniapp-module-titlebar {
    position: sticky;
    top: 0;
    grid-template-columns: 36px minmax(0, 1fr) 32px !important;
    padding-top: max(6px, env(safe-area-inset-top)) !important;
  }
  html.wechat-miniapp .miniapp-drawer-page-head.miniapp-module-titlebar > strong {
    grid-column: 2 !important;
    text-align: center;
  }
  html.wechat-miniapp .miniapp-drawer-page-head.miniapp-module-titlebar #closeSchedule {
    grid-column: 3 !important;
    grid-row: 1 !important;
    justify-self: end;
  }

  /* Redemption pages start directly with the application form. */
  html.wechat-miniapp .resource-summary { display: none !important; }

  /* Attendance clock stays inside narrow phone screens. */
  html.wechat-miniapp .attendance-top {
    grid-template-columns: minmax(0, 1fr);
    gap: 10px;
    padding: 12px 10px;
  }
  html.wechat-miniapp .attendance-top > * { width: 100%; min-width: 0; }
  html.wechat-miniapp .attendance-clock { min-width: 0; text-align: center; }
  html.wechat-miniapp .attendance-clock strong {
    max-width: 100%;
    font-size: 24px;
    line-height: 1.2;
    white-space: nowrap;
  }
  html.wechat-miniapp .attendance-action { min-width: 0; }

  /* Employee and month filters share one balanced row. */
  html.wechat-miniapp .expense-admin-filters {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: center;
  }
  html.wechat-miniapp .expense-admin-filters label {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    min-width: 0;
    align-items: center;
    gap: 6px;
  }
  html.wechat-miniapp .expense-admin-filters select,
  html.wechat-miniapp .expense-admin-filters input { width: 100%; min-width: 0; }
  html.wechat-miniapp .expense-filter-count { grid-column: 1 / -1; margin: 0; }

  /* Customer filters use four equal control rows. */
  html.wechat-miniapp #customersView .customer-filter-row {
    grid-template-columns: 48px repeat(2, minmax(0, 1fr));
    gap: 8px 7px;
  }
  html.wechat-miniapp #customersView .customer-filter-row::before {
    content: "搜索";
    grid-column: 1;
    grid-row: 1;
    align-self: center;
    color: #526071;
    font-size: 12px;
    font-weight: 800;
  }
  html.wechat-miniapp #customersView #customerSearch {
    grid-column: 2 / -1;
    grid-row: 1;
    width: 100%;
  }
  html.wechat-miniapp #customersView .customer-filter-row > label {
    display: grid;
    grid-column: 1 / -1;
    grid-template-columns: 48px minmax(0, 1fr);
    min-width: 0;
    align-items: center;
    gap: 7px;
    color: #526071;
    font-size: 12px;
    font-weight: 800;
  }
  html.wechat-miniapp #customersView .customer-filter-row > label select {
    width: 100%;
    min-width: 0;
  }
  html.wechat-miniapp #customersView #queryCustomerFilters { grid-column: 2; }
  html.wechat-miniapp #customersView #clearCustomerFilters { grid-column: 3; }
  html.wechat-miniapp #customersView #customerCount { grid-column: 1 / -1; }

  html.wechat-miniapp .oa-header.miniapp-module-titlebar .oa-brand { justify-content: center; }

  /* Teacher records stay horizontal and compact. */
  html.wechat-miniapp #teacherManagementList { grid-template-columns: minmax(0, 1fr); }
  html.wechat-miniapp #teacherManagementList .management-row {
    display: grid;
    grid-template-columns: minmax(88px, 1fr) auto auto;
    min-width: 0;
    gap: 6px;
    padding: 9px 8px;
  }
  html.wechat-miniapp #teacherManagementList .management-main {
    display: flex;
    min-width: 0;
    align-items: center;
    gap: 6px;
    white-space: nowrap;
  }
  html.wechat-miniapp #teacherManagementList .management-main strong,
  html.wechat-miniapp #teacherManagementList .management-main span {
    display: inline;
    min-width: 0;
    margin: 0;
    font-size: 12px;
    white-space: nowrap;
  }
  html.wechat-miniapp #teacherManagementList .teacher-prices { gap: 5px; white-space: nowrap; }
  html.wechat-miniapp #teacherManagementList .teacher-prices .management-money { min-width: 0; font-size: 11px; }
  html.wechat-miniapp #teacherManagementList .teacher-prices .management-money span { display: none; }
  html.wechat-miniapp #teacherManagementList .management-actions { flex-wrap: nowrap; gap: 3px; }
  html.wechat-miniapp #teacherManagementList .management-actions button { padding: 5px 6px; font-size: 10px; white-space: nowrap; }

  /* Mini-program-only action scope: retain create actions and remove desktop data tools. */
  html.wechat-miniapp #customersView [data-download-template="customers"],
  html.wechat-miniapp #customersView [data-pick-import="customerImport"],
  html.wechat-miniapp #customersView [data-export-all="customers"],
  html.wechat-miniapp #customersView .customer-bulk-actions,
  html.wechat-miniapp #ordersView [data-download-template="orders"],
  html.wechat-miniapp #ordersView [data-pick-import="orderImport"],
  html.wechat-miniapp #ordersView [data-export-all="orders"],
  html.wechat-miniapp #ordersView .order-bulk-actions,
  html.wechat-miniapp #productsView [data-download-template="products"],
  html.wechat-miniapp #productsView [data-pick-import="productImport"],
  html.wechat-miniapp #productsView .product-bulk,
  html.wechat-miniapp #productsView [data-product-select],
  html.wechat-miniapp #productsView [data-edit-product],
  html.wechat-miniapp #productsView [data-delete-product] { display: none !important; }
  html.wechat-miniapp #productsView td[data-label="选择"],
  html.wechat-miniapp #productsView td[data-label="操作"] { display: none !important; }

  /* All module title bars use one compact typographic scale. */
  html.wechat-miniapp .miniapp-module-titlebar .oa-brand strong,
  html.wechat-miniapp .miniapp-module-titlebar h1,
  html.wechat-miniapp .miniapp-module-titlebar h2,
  html.wechat-miniapp .miniapp-module-titlebar > strong {
    margin: 0 !important;
    font-size: 14px !important;
    line-height: 1.25 !important;
    font-weight: 800 !important;
  }

  /* Customer, order, trash and course summaries use the same three-column rhythm. */
  html.wechat-miniapp #customersView .customer-table tr,
  html.wechat-miniapp #ordersView .order-table tr,
  html.wechat-miniapp #orderTrashView .order-trash-table tr,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table tr,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table tr {
    display: grid;
    grid-template-columns: 28px minmax(72px, 1fr) auto;
    width: 100%;
    min-width: 0;
    align-items: center;
    gap: 6px;
    border: 1px solid #dce3ea;
    border-left: 4px solid #155b98;
    background: #fff;
  }
  html.wechat-miniapp #ordersView .order-table,
  html.wechat-miniapp #orderTrashView .order-trash-table,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table {
    display: block;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    table-layout: auto !important;
    background: transparent;
  }
  html.wechat-miniapp #ordersView .order-table thead,
  html.wechat-miniapp #orderTrashView .order-trash-table thead,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table thead,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table thead { display: none; }
  html.wechat-miniapp #ordersView .order-table tbody,
  html.wechat-miniapp #orderTrashView .order-trash-table tbody,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table tbody,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table tbody { display: grid; gap: 7px; }
  html.wechat-miniapp #customersView .customer-table td,
  html.wechat-miniapp #ordersView .order-table td,
  html.wechat-miniapp #orderTrashView .order-trash-table td,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table td,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table td {
    display: block;
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    border: 0;
    padding: 9px 5px;
    font-size: 12px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  html.wechat-miniapp .miniapp-row-actions,
  html.wechat-miniapp .miniapp-course-actions {
    display: flex !important;
    align-items: center;
    justify-content: flex-end;
    gap: 4px;
    overflow: visible !important;
  }
  html.wechat-miniapp .miniapp-row-actions button,
  html.wechat-miniapp .miniapp-course-actions button {
    min-width: 36px;
    padding: 6px 7px;
    border: 0;
    border-radius: 3px;
    color: #fff;
    font-size: 10px;
    font-weight: 800;
    line-height: 1.2;
    white-space: nowrap;
  }
  html.wechat-miniapp .miniapp-row-actions .view,
  html.wechat-miniapp .miniapp-course-actions .view { background: #176b91; }
  html.wechat-miniapp .miniapp-row-actions .edit,
  html.wechat-miniapp .miniapp-course-actions .edit { background: #8a651f; }
  html.wechat-miniapp .miniapp-row-actions .success { background: #24735f; }
  html.wechat-miniapp .miniapp-row-actions .danger,
  html.wechat-miniapp .miniapp-course-actions .delete { background: #a34842; }
  html.wechat-miniapp .miniapp-action-status { color: #8a651f; font-size: 10px; font-weight: 800; }
  html.wechat-miniapp #ordersView .data-table-wrap,
  html.wechat-miniapp #orderTrashView .data-table-wrap,
  html.wechat-miniapp #scheduleStudentRecords .week-scroll,
  html.wechat-miniapp #scheduleTeacherRecords .week-scroll { overflow: visible; border: 0; background: transparent; }

  /* Keep summary records compact and cheap to paint while vertically scrolling. */
  html.wechat-miniapp #customersView .customer-table tbody,
  html.wechat-miniapp #ordersView .order-table tbody,
  html.wechat-miniapp #progressView .progress-table tbody,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table tbody,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table tbody { gap: 5px; }
  html.wechat-miniapp #customersView .customer-table tbody,
  html.wechat-miniapp #ordersView .order-table tbody,
  html.wechat-miniapp #orderTrashView .order-trash-table tbody,
  html.wechat-miniapp #progressView .progress-table tbody,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table tbody,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table tbody,
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table tbody {
    contain: layout style;
  }
  html.wechat-miniapp #customersView .customer-table tr,
  html.wechat-miniapp #ordersView .order-table tr,
  html.wechat-miniapp #orderTrashView .order-trash-table tr,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table tr,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table tr {
    grid-template-columns: repeat(var(--miniapp-columns, 5), minmax(0, 1fr));
    justify-content: stretch;
    gap: 0;
    min-height: 42px;
    box-shadow: none;
    contain: layout paint style;
    contain-intrinsic-size: auto 42px;
  }
  html.wechat-miniapp #customersView .customer-table td,
  html.wechat-miniapp #ordersView .order-table td,
  html.wechat-miniapp #orderTrashView .order-trash-table td,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table td,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table td {
    padding: 7px 3px;
    line-height: 1.25;
  }
  html.wechat-miniapp #customersView .customer-table td:first-child,
  html.wechat-miniapp #ordersView .order-table td:first-child,
  html.wechat-miniapp #orderTrashView .order-trash-table td:first-child,
  html.wechat-miniapp #scheduleStudentRecords .student-record-table td:first-child,
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table td:first-child {
    padding-right: 0;
    padding-left: 2px;
    color: #6d7988;
    font-size: 10px;
    text-align: center;
  }
  html.wechat-miniapp #customersView .customer-table td:nth-child(2),
  html.wechat-miniapp #ordersView .order-table td:nth-child(2),
  html.wechat-miniapp #orderTrashView .order-trash-table td:nth-child(2),
  html.wechat-miniapp #scheduleStudentRecords .student-record-table td:nth-child(2),
  html.wechat-miniapp #scheduleTeacherRecords .teacher-record-table td:nth-child(2) {
    max-width: none !important;
    padding-left: 2px;
    text-align: center;
  }
  html.wechat-miniapp .miniapp-action-cell {
    display: flex !important;
    width: auto !important;
    min-width: 0 !important;
    height: 100%;
    align-items: center;
    justify-content: center;
    overflow: hidden !important;
    text-align: center;
  }
  html.wechat-miniapp .miniapp-action-cell button {
    width: auto;
    min-width: 36px !important;
    max-width: calc(100% - 4px);
    margin: 0 auto;
    padding: 5px 4px;
    border: 0;
    border-radius: 3px;
    color: #fff;
    font-size: 10px;
    font-weight: 800;
    line-height: 1.2;
    white-space: nowrap;
  }
  html.wechat-miniapp .miniapp-action-cell .view { background: #176b91; }
  html.wechat-miniapp .miniapp-action-cell .edit { background: #8a651f; }
  html.wechat-miniapp .miniapp-action-cell .success { background: #24735f; }
  html.wechat-miniapp .miniapp-action-cell .danger,
  html.wechat-miniapp .miniapp-action-cell .delete { background: #a34842; }

  /* Employees see compact salary summaries and open the full payslip in a dialog. */
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table {
    display: block;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    table-layout: auto !important;
    background: transparent;
  }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table thead { display: none; }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table tbody { display: grid; gap: 6px; }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table tr {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    min-height: 46px;
    align-items: center;
    border: 1px solid #dce3ea;
    border-left: 4px solid #155b98;
    background: #fff;
    contain: layout paint style;
    contain-intrinsic-size: auto 46px;
  }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table td {
    display: flex;
    width: auto !important;
    min-width: 0 !important;
    height: 100%;
    align-items: center;
    justify-content: center;
    border: 0;
    padding: 7px 4px;
    overflow: hidden;
    font-size: 11px;
    text-align: center;
    white-space: nowrap;
  }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table td:nth-child(2) { flex-direction: column; gap: 2px; }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table td:nth-child(2) small { color: #24735f; font-size: 10px; font-weight: 800; }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table td::before { display: none !important; content: none !important; }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table .table-action.view {
    min-width: 38px;
    border: 0;
    border-radius: 3px;
    padding: 6px 8px;
    background: #176b91;
    color: #fff;
    font-size: 10px;
    font-weight: 800;
  }
  html.wechat-miniapp #salaryView table.miniapp-salary-summary-table .empty-row {
    display: block !important;
    grid-column: 1 / -1;
    padding: 24px 10px !important;
    text-align: center;
  }

  /* Progress records use one stable row: sequence, name, category, view, mark. */
  html.wechat-miniapp #progressView .progress-table tr {
    grid-template-columns: repeat(var(--miniapp-columns, 5), minmax(0, 1fr));
    justify-content: stretch;
    min-height: 42px;
    align-items: center;
    gap: 3px;
    padding: 0 4px;
    box-shadow: none;
    contain: layout paint style;
    contain-intrinsic-size: auto 42px;
  }
  html.wechat-miniapp #progressView .progress-table td,
  html.wechat-miniapp #progressView .progress-table td:nth-child(1),
  html.wechat-miniapp #progressView .progress-table td:nth-child(2),
  html.wechat-miniapp #progressView .progress-table td:nth-child(3),
  html.wechat-miniapp #progressView .progress-table td:nth-child(4),
  html.wechat-miniapp #progressView .progress-table td:nth-child(5) {
    display: block !important;
    grid-column: auto;
    grid-row: auto;
    min-width: 0;
    padding: 7px 2px;
    overflow: hidden;
    font-size: 10.5px;
    line-height: 1.2;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  html.wechat-miniapp #progressView .progress-table td:first-child {
    color: #6d7988;
    font-size: 10px;
    text-align: center;
  }
  html.wechat-miniapp #progressView .progress-table td:nth-child(4),
  html.wechat-miniapp #progressView .progress-table td:nth-child(5) {
    display: flex !important;
    align-items: center;
    justify-content: center;
    overflow: visible;
  }
  html.wechat-miniapp #progressView .progress-table .table-action.view,
  html.wechat-miniapp #progressView .progress-table .table-action.mark {
    min-width: 32px;
    border: 0;
    border-radius: 3px;
    padding: 5px 4px;
    color: #fff;
    font-size: 10px;
    font-weight: 800;
    line-height: 1.2;
    white-space: nowrap;
  }
  html.wechat-miniapp #progressView .progress-table .table-action.view { background: #176b91; }
  html.wechat-miniapp #progressView .progress-table .table-action.mark { background: #24735f; }
  html.wechat-miniapp .miniapp-progress-done {
    color: #24735f;
    font-size: 10px;
    font-weight: 800;
    white-space: nowrap;
  }
  html.wechat-miniapp #customersView .empty-row,
  html.wechat-miniapp #ordersView .empty-row,
  html.wechat-miniapp #progressView .empty-row,
  html.wechat-miniapp #scheduleStudentRecords .schedule-empty,
  html.wechat-miniapp #scheduleTeacherRecords .schedule-empty {
    display: block !important;
    grid-column: 1 / -1 !important;
    padding: 24px 10px !important;
    text-align: center !important;
  }

  /* Permission dates align on three equal label/control rows. */
  html.wechat-miniapp .order-view-grant-form { gap: 8px; }
  html.wechat-miniapp .order-view-grant-form > label,
  html.wechat-miniapp .order-view-grant-form > .miniapp-grant-field {
    display: grid;
    grid-template-columns: 68px minmax(0, 1fr);
    width: 100%;
    min-width: 0;
    align-items: center;
    gap: 8px;
    color: #526071;
    font-size: 12px;
    font-weight: 800;
  }
  html.wechat-miniapp .order-view-grant-form > label input,
  html.wechat-miniapp .order-view-grant-form > .miniapp-grant-field select {
    width: 100%;
    min-width: 0;
    height: 38px;
    justify-self: end;
  }

  /* Performance-file navigation is horizontal; the download action stays on its own row. */
  html.wechat-miniapp #policyFilePanel {
    display: block;
    padding: 10px;
    overflow: auto;
  }
  html.wechat-miniapp #policyFilePanel .miniapp-policy-download {
    display: flex !important;
    width: 100%;
    min-height: 36px;
    align-items: center;
    justify-content: center;
    margin: 0 0 8px;
    padding: 7px 9px;
    border: 1px solid #9eb6ce;
    border-radius: 4px;
    background: #eef4fa;
    color: #155b98;
    font-size: 11px;
    font-weight: 800;
    white-space: nowrap;
  }
  html.wechat-miniapp #policyFilePanel .performance-tabs {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    width: 100%;
    height: auto;
    padding: 0;
    gap: 5px;
    overflow: visible;
    border: 0;
    background: transparent;
  }
  html.wechat-miniapp #policyFilePanel .performance-tab {
    width: 100%;
    min-width: 0;
    padding: 7px 3px;
    font-size: 9.5px;
    line-height: 1.2;
    white-space: nowrap;
  }
  html.wechat-miniapp #policyFilePanel .performance-content { height: auto; padding: 9px 0 0; overflow: visible; }
  html.wechat-miniapp #policyFilePanel .table-wrap { width: 100%; max-width: 100%; overflow-x: auto; }
  html.wechat-miniapp #policyFilePanel .policy-table { min-width: 640px; table-layout: auto; }
  html.wechat-miniapp #policyFilePanel .policy-table th,
  html.wechat-miniapp #policyFilePanel .policy-table td { padding: 7px 6px; font-size: 10px; white-space: nowrap; }

  /* Teacher course details use a phone-sized modal instead of navigating away. */
  html.wechat-miniapp .miniapp-course-record-dialog {
    width: calc(100vw - 22px);
    max-width: 520px;
    max-height: calc(100dvh - 28px);
    border: 0;
    padding: 0;
    background: #fff;
  }
  html.wechat-miniapp .miniapp-course-record-dialog::backdrop { background: rgba(21, 34, 48, .46); }
  html.wechat-miniapp .miniapp-course-record-shell { display: flex; max-height: calc(100dvh - 28px); flex-direction: column; }
  html.wechat-miniapp .miniapp-course-record-head { display: flex; align-items: center; gap: 8px; padding: 11px 12px; border-bottom: 1px solid #dce3ea; }
  html.wechat-miniapp .miniapp-course-record-head h2 { min-width: 0; margin: 0; font-size: 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  html.wechat-miniapp .miniapp-course-record-head .icon-close { margin-left: auto; }
  html.wechat-miniapp .miniapp-course-record-body { padding: 10px; overflow-y: auto; }
  html.wechat-miniapp .miniapp-course-summary { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }
  html.wechat-miniapp .miniapp-course-summary span { padding: 8px; background: #f2f5f8; color: #657284; font-size: 10px; }
  html.wechat-miniapp .miniapp-course-summary strong { display: block; margin-top: 4px; color: #243448; font-size: 13px; }
  html.wechat-miniapp .miniapp-course-bookings { display: grid; gap: 6px; margin-top: 9px; }
  html.wechat-miniapp .miniapp-course-bookings article { position: relative; display: grid; gap: 3px; padding: 8px 50px 8px 9px; border: 1px solid #dce3ea; }
  html.wechat-miniapp .miniapp-course-bookings article strong { font-size: 11px; }
  html.wechat-miniapp .miniapp-course-bookings article span { color: #697789; font-size: 10px; }
  html.wechat-miniapp .miniapp-course-bookings article em { position: absolute; right: 8px; top: 50%; color: #24735f; font-size: 10px; font-style: normal; font-weight: 800; transform: translateY(-50%); }

  /* Keep phone scrolling on the compositor and avoid layout work on every gesture. */
  html.wechat-miniapp .contact-view,
  html.wechat-miniapp .leave-view,
  html.wechat-miniapp .expense-main-panel,
  html.wechat-miniapp .schedule-body,
  html.wechat-miniapp .schedule-mode-empty,
  html.wechat-miniapp .oa-main,
  html.wechat-miniapp.archive-miniapp .main {
    scroll-behavior: auto !important;
    overscroll-behavior-y: contain;
    -webkit-overflow-scrolling: touch;
    touch-action: pan-y;
  }
  html.wechat-miniapp.archive-miniapp .view > .panel,
  html.wechat-miniapp.archive-miniapp .table-wrap { contain: layout paint; }

}

@media (max-width: 340px) {
  html.wechat-miniapp .grid,
  html.wechat-miniapp .metric-grid,
  html.wechat-miniapp .cash-summary { grid-template-columns: 1fr !important; }
  html.wechat-miniapp .oa-brand img,
  html.wechat-miniapp .oa-user span { display: none; }
}
