.sidebar .wordmark { margin-bottom: 24px; }
.sidebar > nav { flex: 1; min-height: 0; overflow-y: auto; margin: -6px; padding: 6px; }
.sidebar-header { flex-shrink: 0; }
.mobile-nav-toggle { display: none; }
.nav-group + .nav-group { margin-top: 13px; }
.nav-group .nav-label { color: #b5ccbd; font-size: 12px; line-height: 18px; font-weight: 500; letter-spacing: .06em; margin: 12px 12px 8px; }
.nav-group .nav-item { min-height: 44px; font-size: 14px; line-height: 20px; padding: 11px 12px; gap: 10px; margin-bottom: 3px; }
.nav-icon { flex: 0 0 18px; }
.nav-group-toggle > span:nth-child(2) { min-width: 0; }
.nav-group-toggle.has-active { color: #f4f2e4; }
.nav-group-toggle.has-active[aria-expanded="false"] { background: #ffffff12; }
.nav-chevron { width: 8px; height: 8px; flex: 0 0 8px; margin-left: auto; border: solid currentColor; border-width: 0 2px 2px 0; transform: rotate(-45deg); }
.nav-group-toggle[aria-expanded="true"] .nav-chevron, .mobile-nav-toggle[aria-expanded="true"] .nav-chevron { transform: rotate(45deg); }
.nav-submenu { margin: 4px 0 6px 23px; padding-left: 9px; border-left: 1px solid #ffffff24; }
.nav-submenu[hidden] { display: none; }
.nav-submenu .nav-item { font-size: 14px; }
.nav-submenu .nav-icon { display: none; }
.sidebar-footer { margin-top: 18px; padding-top: 16px; color: #b5ccbd; font-size: 12px; line-height: 18px; }
.tabs { overflow-x: auto; }
.tab { white-space: nowrap; }
.legacy-filter { display: grid; grid-template-columns: repeat(6, minmax(120px, 1fr)); gap: 12px; padding-bottom: 18px; border-bottom: 1px solid var(--line); }
.legacy-filter label { margin: 0; }
.operation-bar { display: flex; align-items: center; gap: 8px; padding: 15px 0; overflow-x: auto; }
.operation-bar .btn { padding: 8px 12px; font-size: 12px; }
.operation-spacer { flex: 1; }
.check-all { margin: 0 8px 0 0; white-space: nowrap; }
.check-all input { margin: 0 5px 0 0; }
.student-card td:first-child, .student-card th:first-child { width: 34px; padding-right: 4px; }
.student-card input[type=checkbox] { margin: 0; }
.inline-field { max-width: 280px; }
.form-section h3, details summary { font-size: 13px; color: var(--green); font-weight: 600; }
.form-section h3 { margin: 0 0 12px; }
details { border-top: 1px solid var(--line); padding-top: 14px; margin-top: 14px; }
details summary { cursor: pointer; margin-bottom: 14px; }
.detail-grid { padding-top: 5px; }
.guardian-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
.guardian-grid fieldset { border: 1px solid var(--line); border-radius: 9px; padding: 14px; }
.guardian-grid legend { color: var(--muted); font-size: 11px; padding: 0 6px; }
.profile-summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 24px; }
.profile-summary div { background: #f5f7f2; border-radius: 8px; padding: 12px; }
.profile-summary small, .profile-summary strong { display: block; }
.profile-summary strong { margin-top: 6px; }
.import-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 20px; }
.import-steps > div { display: grid; grid-template-columns: 34px 1fr; grid-template-rows: auto auto; background: #eef2e9; border-radius: 10px; padding: 15px; }
.import-steps span { grid-row: 1 / 3; width: 26px; height: 26px; background: var(--green); color: #fff; border-radius: 50%; display: grid; place-items: center; }
.import-steps strong { font-size: 13px; }
.import-steps small { margin-top: 4px; }
.file-drop { border: 1px dashed #aebda8; border-radius: 10px; padding: 26px; text-align: center; background: #f8faf5; }
.file-drop input { max-width: 440px; margin: 14px auto; }
.file-drop small { margin: 0; }
.import-result > p { color: var(--muted); }

@media (max-width: 1250px) {
  .legacy-filter { grid-template-columns: repeat(3, 1fr); }
}

@media (max-width: 760px) {
  .sidebar-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
  .sidebar .wordmark { margin: 0 4px; }
  .mobile-nav-toggle { display: inline-flex; align-items: center; justify-content: center; gap: 10px; min-height: 44px; padding: 10px 12px; border-radius: 9px; background: #ffffff0b; color: #f4f2e4; font-size: 14px; line-height: 20px; }
  .mobile-nav-toggle:hover { background: #ffffff12; }
  .mobile-nav-toggle > svg { width: 20px; height: 20px; flex: 0 0 20px; }
  .sidebar > nav { display: none; overflow: visible; margin: 12px -6px -6px; padding: 6px; }
  .sidebar[data-mobile-nav-open] > nav { display: block; }
  .nav-group { display: block; }
  .nav-group .nav-label { display: block; }
  .nav-group .nav-item { width: 100%; white-space: normal; }
  .nav-group + .nav-group { margin-top: 13px; }
  .nav-submenu { margin: 4px 0 6px 23px; padding-left: 9px; }
  .guardian-grid { grid-template-columns: 1fr; }
  .legacy-filter { grid-template-columns: repeat(2, 1fr); }
  .profile-summary { grid-template-columns: repeat(2, 1fr); }
  .import-steps { grid-template-columns: 1fr; }
}

/* Meal plan list: filters and pagination remain usable at narrow widths. */
.plan-list-card{padding:20px;min-width:0}.plan-filters{display:flex;flex-wrap:wrap;align-items:end;gap:14px}.plan-filters label{display:grid;gap:7px;min-width:0;font-size:12px;margin:0}.plan-filters input,.plan-filters select{width:100%;min-width:0;box-sizing:border-box}.plan-filters label:has(select){flex:1 1 210px;max-width:320px}.plan-filters .plan-keyword{flex:2 1 240px}.plan-list-note{font-size:12px;color:var(--muted);margin:18px 0}.plan-list-table{min-width:740px}.plan-list-table td{vertical-align:top}.plan-name-link{font-weight:600;color:var(--green);display:inline-block;max-width:280px;white-space:normal;overflow-wrap:anywhere}.plan-period{white-space:nowrap;font-size:12px}.plan-recipes{display:block;max-width:290px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plan-list-table small{display:block;color:var(--muted);margin-top:5px}.plan-pagination{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:10px;margin-top:20px;font-size:12px}.plan-pagination label{display:flex;align-items:center;gap:8px;margin:0}.plan-pagination select{width:auto;padding:7px}.plan-pagination .btn{padding:8px 12px;font-size:12px}.plan-pagination button:disabled{opacity:.45;cursor:default}.plan-list-card a.btn,.page-heading [data-plan-link].btn{text-decoration:none}.plan-list-card a:focus-visible{outline:2px solid var(--green);outline-offset:3px}@media(max-width:600px){.plan-list-card{padding:14px}.plan-filters{gap:12px}.plan-filters label{flex:1 1 calc(50% - 12px)}.plan-filters label:has(select),.plan-filters .plan-keyword{flex-basis:100%;max-width:none}.plan-filters input[type=date]{max-width:100%;font-size:12px}.plan-pagination>span{width:100%}.plan-pagination label{flex-basis:100%}}

.plan-list-results{margin-top:20px}

/* Manually selected academic term and recipe week. */
.plan-week,.plan-week-unset{display:block;max-width:230px;margin-bottom:5px;font-size:13px;line-height:1.5}.plan-week-unset{color:var(--muted);font-size:12px}.plan-week-details{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.plan-week-details>span{margin:0}

.plan-row-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:280px}.plan-row-actions a{white-space:nowrap}.plan-action-separator{color:var(--line)}.plan-workspace .heading-actions{flex-wrap:wrap}.plan-workspace .heading-actions .plan-row-actions{min-width:0}.plan-identity h2{font-size:17px;overflow-wrap:anywhere}.plan-identity p{color:var(--muted);font-size:13px;line-height:1.7}.plan-report-controls{flex-wrap:wrap}.plan-delete-check{display:flex;align-items:center;gap:8px}.plan-delete-check input{width:auto}.plan-workspace .page-heading h1{overflow-wrap:anywhere}
@media(max-width:600px){.plan-workspace .page-heading{flex-direction:column;align-items:stretch;gap:16px}.plan-workspace .heading-actions{justify-content:flex-start}.plan-workspace .form-grid{grid-template-columns:1fr}.plan-report-controls label{width:100%}.plan-report-controls select{max-width:100%}}
.plan-purchase-table{min-width:800px}.plan-purchase-table td:nth-child(-n+2){white-space:nowrap}.plan-analysis-table{min-width:1600px}
@media print{.plan-workspace .heading-actions,.plan-workspace .plan-report-controls{display:none}.plan-workspace .table-wrap{overflow:visible}.plan-workspace table{min-width:0;font-size:10px}}
/* Original plan pages (详情 / 采购清单 / 营养分析): bordered report tables, tabs and charts as in the legacy JSPs. */
.legacy-tabs{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--line)}.legacy-tab{display:inline-block;padding:10px 16px;color:#819078;text-decoration:none;border-bottom:2px solid transparent}.legacy-tab.active{color:var(--green);border-color:var(--green);font-weight:600}
.legacy-title{text-align:center;margin:8px 0 14px}.legacy-sheet-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px 20px;font-size:12px;color:#5d6b60;margin-bottom:10px}
.legacy-table{border:1px solid var(--line);font-size:12px}.legacy-table th,.legacy-table td{border:1px solid var(--line);padding:6px 8px;text-align:center;vertical-align:middle;white-space:nowrap}.legacy-table td.numeric{text-align:right;font-variant-numeric:tabular-nums}
.legacy-week>tbody>tr>td{vertical-align:top;padding:4px;min-width:170px}.legacy-cell{border:0;font-size:12px}.legacy-cell td{border:0;border-bottom:1px dashed #edf0e9;padding:3px 4px;text-align:left;white-space:normal}.legacy-cell tr:last-child td{border-bottom:0}.legacy-table td.legacy-amount{white-space:normal;word-break:break-all;text-align:left;vertical-align:top}.legacy-cell td.legacy-gram{text-align:right;white-space:nowrap}
.legacy-vertical{writing-mode:vertical-rl;letter-spacing:.2em;width:28px}.legacy-options{margin-bottom:12px}.legacy-check{display:flex;align-items:center;gap:6px}
.legacy-hide-analysis .legacy-analysis{display:none}.legacy-hide-grams .legacy-gram{display:none}.legacy-analysis{margin-top:16px}.legacy-analysis .table-wrap,.legacy-edit-analysis .table-wrap{margin-bottom:14px}
.legacy-plan-nums{margin-bottom:12px}.legacy-plan-nums summary,.legacy-gram-day summary{cursor:pointer;color:var(--green);font-weight:600;margin:6px 0}.legacy-missing{color:#b24b42;margin-left:2px}
.legacy-pair{display:grid;grid-template-columns:1fr 1fr;gap:16px}.legacy-conclusion p{margin:0 0 6px;white-space:pre-wrap;line-height:1.8}.legacy-type-start td{border-top:2px solid #c0504e}.legacy-border-left{border-left:2px solid var(--line)}
.legacy-report{min-width:1100px}.plan-purchase-week{min-width:760px}.legacy-bar{width:100%;min-width:720px;max-height:420px;font-size:11px;color:#5d6b60}.legacy-bar text{fill:currentColor}.legacy-bar-fill{fill:#5bc0de}
.legacy-pies{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:16px}.legacy-pie{margin:0;border:1px solid var(--line);border-radius:10px;padding:12px}.legacy-pie figcaption{text-align:center;font-weight:600;margin-bottom:8px}.legacy-pie svg{display:block;width:180px;max-width:100%;margin:0 auto}.legacy-pie ul{list-style:none;padding:0;margin:10px 0 0;font-size:12px}.legacy-pie li{display:flex;align-items:center;gap:6px;margin:4px 0}
.legacy-swatch{display:inline-block;flex:none;width:10px;height:10px;border-radius:2px}.legacy-color-green{fill:#9bbb58;background:#9bbb58}.legacy-color-red{fill:#c0504e;background:#c0504e}.legacy-color-blue{fill:#4f81bc;background:#4f81bc}.legacy-color-leaf{fill:#7ba35d;background:#7ba35d}.legacy-color-orange{fill:#d4a65f;background:#d4a65f}.legacy-color-sky{fill:#6289bf;background:#6289bf}.legacy-color-purple{fill:#aa6bc7;background:#aa6bc7}.legacy-color-yellow{fill:#eadb37;background:#eadb37}.legacy-slice-empty{fill:#eef0ee}
@media(max-width:760px){.legacy-pair,.legacy-pies{grid-template-columns:1fr}}
@media print{.campus-filter,.legacy-tabs,.legacy-options,.legacy-plan-nums summary,.legacy-report-filter{display:none}.legacy-table th,.legacy-table td{padding:3px 4px}.legacy-bar{min-width:0}}
.legacy-rank{padding:0 2px;font-size:inherit;font-weight:600;text-decoration:underline dotted;text-underline-offset:3px}
.legacy-empty{text-align:center;margin:48px 0 160px;font-size:16px}.legacy-choose{margin:24px 0}.legacy-range-plans{margin:0 0 12px;font-size:12px}.legacy-range-plans summary{cursor:pointer;color:var(--green);font-weight:600}.legacy-range-plans ul{columns:2;margin:6px 0 0;padding-left:18px}.legacy-range-plans li{break-inside:avoid;margin:2px 0}
.legacy-extras{margin-top:28px;padding-top:18px;border-top:1px solid var(--line)}.legacy-extras-title{font-size:16px;margin:0 0 12px}
@media(max-width:760px){.legacy-range-plans ul{columns:1}}
.legacy-print{display:none}
@media print{.legacy-printing>:not(.legacy-print){display:none!important}.legacy-printing>.legacy-print{display:block}.legacy-print-section{page:legacy-landscape}.legacy-print-section+.legacy-print-section{break-before:page}body:has(.legacy-printing) .workspace-topbar{display:none}}
@page legacy-landscape{size:A4 landscape;margin:1.5cm}
/* 修改 (recipeMealModify.jsp): the day's dishes with every food and quantity, the analysis beside them, one save. */
.plan-menu-form small{margin-bottom:0}.plan-menu-info .form-grid{grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr)}.plan-menu-info h2{font-size:15px;margin-bottom:14px}.plan-menu-facts{margin:0;font-size:12px;color:var(--muted);line-height:1.8}
.plan-menu-weeks{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:14px}.plan-menu-weeks label{display:flex;align-items:center;gap:8px;margin:0;white-space:nowrap}.plan-menu-weeks input{margin:0;max-width:165px}
.plan-menu-tabbar{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:16px;border-bottom:1px solid var(--line)}
.plan-menu-tabs{display:flex;flex-wrap:wrap;gap:4px;min-width:0}.plan-menu-tools{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}
.plan-menu-tab{display:grid;gap:2px;padding:9px 14px 10px;border-bottom:2px solid transparent;color:#6f7f70;text-decoration:none;border-radius:8px 8px 0 0}.plan-menu-tab:hover{background:#f1f4ed}
.plan-menu-tab strong{font-weight:600;font-size:13px}.plan-menu-tab small{font-size:11px;white-space:nowrap}.plan-menu-tab.active{color:var(--green);border-color:var(--green);background:#eef3ea}
/* 食谱日期 in the same row (showRecipeDate): an unchecked day is not a tab but an empty, hatched slot with a dashed
   outline, which opens the panel to add the day back; a checked day without dishes says 留空 in amber. */
.plan-menu-tab-off{display:grid;gap:2px;align-self:center;margin:0 2px;padding:6px 12px 7px;border:1px dashed #c9d1c6;border-radius:8px;background:repeating-linear-gradient(135deg,#f4f6f1 0 5px,#fbfbf9 5px 10px);color:#9aa39b;text-align:left}
.plan-menu-tab-off strong{font-weight:500;font-size:13px}.plan-menu-tab-off small{display:flex;align-items:center;gap:3px;font-size:11px;white-space:nowrap}
.plan-menu-tab-off:hover,.plan-menu-tab-off[aria-expanded=true]{border-color:#94a690;background:#f1f4ed;color:#5f6f61}
.plan-menu-blank-tab{color:#a8741f;font-weight:600}.plan-menu-todo-tab{color:#8a968c}
.plan-menu-changed{color:#9b6a1c;font-weight:600}
.plan-menu-blank{margin:0 0 14px}
.plan-menu-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,400px);gap:20px;align-items:start}
/* 称重膳调: the day editor without the analysis beside it. */
.plan-menu-layout.plan-menu-single{grid-template-columns:minmax(0,1fr)}.plan-menu-weighed{min-width:480px}
.plan-menu-layout>.card{margin-bottom:0;min-width:0}.plan-menu-day{padding:18px}
.plan-menu-day-head{flex-wrap:wrap;justify-content:flex-start;margin-bottom:14px}.plan-menu-day-head h2{font-size:16px}.plan-menu-day-actions{display:flex;flex-wrap:wrap;gap:2px;margin-left:auto}
/* Icons (icons.js) stand before their labels at the text size. */
.cg-icon{width:1.1em;height:1.1em;flex:none;vertical-align:-.18em}
.plan-menu-page .text-btn:has(>.cg-icon){display:inline-flex;align-items:center;gap:4px}
.plan-menu-table{min-width:620px;border:1px solid var(--line);table-layout:fixed}.plan-menu-col-meal{width:92px}.plan-menu-col-dish{width:30%}.plan-menu-col-grams{width:130px}
.plan-menu-table th,.plan-menu-table td{border:1px solid var(--line);padding:8px 10px;vertical-align:top;text-align:left}.plan-menu-table thead th small{font-weight:400;margin-left:2px}.plan-menu-table thead th.numeric{text-align:right}
.plan-menu-table tbody{border-top:2px solid #d9e1d4}.plan-menu-meal{background:#f7f8f4;color:var(--ink,#233c34);font-size:13px;font-weight:600;white-space:normal}
/* 添加食物 closes a dish's foods and 添加菜谱 a meal's dishes, quieter than the items above them. */
.plan-menu-table .plan-menu-add-row td{padding:2px 10px;background:#fcfcfa}.plan-menu-table .plan-menu-add-food-row td{border-top-style:dashed}
.plan-menu-add{margin-left:-6px;padding:4px 6px;font-size:12px;color:#5f7a66}.plan-menu-add:hover{color:var(--green)}.plan-menu-empty{color:var(--muted);font-size:12px}
/* A meal without dishes (a new plan) offers its first dish across the row: the main thing to do there. */
.plan-menu-table .plan-menu-first{padding:10px}
.plan-menu-first-dish{display:flex;align-items:center;gap:12px;width:100%;min-height:64px;padding:12px 16px;border:1.5px dashed #bccbb8;border-radius:10px;background:#f8faf5;color:var(--green);text-align:left;transition:background-color .15s,border-color .15s}
.plan-menu-first-dish:hover,.plan-menu-first-dish[aria-expanded=true]{background:#edf3e9;border-color:var(--green)}
.plan-menu-first-icon{display:grid;place-items:center;flex:none;width:32px;height:32px;border-radius:50%;background:var(--green);color:#fff}.plan-menu-first-icon .cg-icon{width:18px;height:18px}
.plan-menu-first-text{min-width:0}.plan-menu-first-text strong{display:block;font-size:14px;font-weight:600}.plan-menu-first-text small{display:block;margin:2px 0 0;font-size:12px;line-height:1.5;color:var(--muted)}
/* The recipe button is only as wide as its name and hint; the rest of the cell is not a link. */
.plan-menu-recipe{display:inline-flex;flex-direction:column;align-items:flex-start;max-width:100%;background:none;padding:2px 0;text-align:left;color:var(--green);border-radius:6px}.plan-menu-recipe strong{display:block;font-size:13px;overflow-wrap:anywhere}.plan-menu-recipe small{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--muted)}.plan-menu-recipe:hover strong{text-decoration:underline}
.plan-menu-actions{display:flex;flex-wrap:wrap;gap:0 2px;margin:4px 0 0 -6px}.plan-menu-actions .text-btn{font-size:12px;padding:4px 6px}
.plan-menu-food-line{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px}.plan-menu-food-line .plan-menu-actions{margin:0 0 0 auto}
.plan-menu-food-name{display:inline-flex;align-items:center;gap:2px;background:none;padding:2px 0;text-align:left;color:#264638;font-weight:550;overflow-wrap:anywhere;border-radius:6px}.plan-menu-food-name:hover{text-decoration:underline}.plan-menu-food-name .cg-icon{width:.95em;height:.95em;color:var(--muted)}
.plan-menu-info-button{display:inline-grid;place-items:center;flex:none;width:24px;height:24px;border-radius:50%;background:none;color:#5f8a73}.plan-menu-info-button .cg-icon{width:16px;height:16px}.plan-menu-info-button:hover,.plan-menu-info-button[aria-expanded=true]{background:#e4eee7;color:var(--green)}
/* Quantities are plain text fields (no spin buttons), right aligned; the field being filled stands out with its row,
   at a fixed height so the row does not move. */
.plan-menu-grams input{height:36px;margin:0;padding:6px 9px;text-align:right;font-variant-numeric:tabular-nums;transition:font-size .12s,background-color .12s}
.plan-menu-grams input:focus{font-size:17px;font-weight:650;color:var(--green);background:#fffaf0;border-color:#c7ae75}
.plan-menu-grams input[aria-invalid=true]{border-color:#c2554b;background:#fdf3f1}
/* The row is marked for the food being worked on, not for the dish controls that share its first row. */
.plan-menu-table tr:has(>.plan-menu-food :focus,>.plan-menu-grams :focus)>:is(.plan-menu-food,.plan-menu-grams){background:#fbf6e6}
.plan-menu-analysis{position:sticky;top:16px;max-height:calc(100vh - 32px);overflow:auto;padding:18px}
/* Recalculating never dims the analysis: values roll to their new figures (rolling-number.js) and the cells that
   changed are marked for a moment, so the effect of an edit shows where it happened. Rolling digits stay inside
   their cells, so no scrollbar appears while they move. */
number-flow-group{display:block}cg-number{font-variant-numeric:tabular-nums}
.plan-menu-analysis td,.plan-popover td,.plan-menu-live{overflow:clip}
.plan-roll-changed{animation:plan-roll-changed 1.8s ease-out}
@keyframes plan-roll-changed{0%,25%{background-color:#f3e2b3}100%{background-color:transparent}}
.plan-menu-analysis[aria-busy=true] .plan-analysis-status::before{content:'';display:inline-block;width:6px;height:6px;margin:0 6px 1px 0;border-radius:50%;background:var(--accent);animation:plan-skeleton-pulse 1s ease-in-out infinite}
.plan-menu-live .plan-roll-cell{border-radius:4px;padding:0 2px}
.plan-menu-analysis .card-title{flex-wrap:wrap;margin-bottom:8px}.plan-menu-analysis h3{font-size:13px;margin:14px 0 8px}.plan-menu-analysis h3 small{display:inline;font-weight:400;margin-left:6px}
.plan-analysis-modes{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.plan-analysis-modes button{background:#fff;color:var(--muted);padding:6px 10px;font-size:12px}.plan-analysis-modes button[aria-pressed=true]{background:var(--green);color:#fff}
.plan-analysis-status{font-size:12px;color:var(--muted);margin:0}.plan-analysis-error{margin:10px 0}
/* Figures are right aligned under right-aligned headings in tabular figures, so digits and decimal points line up;
   names read from the left and 评价 is centred. */
.plan-menu-intake,.plan-menu-gram-table{width:100%;font-variant-numeric:tabular-nums}
.plan-menu-intake th,.plan-menu-intake td,.plan-menu-gram-table th,.plan-menu-gram-table td{padding:5px 8px;text-align:right}
.plan-menu-intake tbody th,.plan-menu-intake thead th:first-child,.plan-menu-gram-table tbody th,.plan-menu-gram-table thead th:first-child{text-align:left}
.plan-menu-intake tbody th,.plan-menu-gram-table tbody th{font-weight:500;color:var(--ink,#233c34)}
.plan-menu-intake td:last-child,.plan-menu-intake thead th:last-child{text-align:center}
.plan-unit{display:inline;margin-left:4px;font-size:10px;font-weight:400;color:var(--muted)}
.plan-menu-analysis .data-note{text-align:left}
/* Popovers beside their control (plan-editor.js anchoredPanel), as the original page's popovers and dropdowns. */
.plan-popover{position:fixed;z-index:60;top:0;left:0;max-width:calc(100vw - 16px);max-height:min(70vh,560px);overflow:auto;padding:12px 14px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 40px #0c312630}
/* The arrow: a square turned on its corner, centred on the panel's edge; its outer two sides carry the border and its
   face covers the panel's border where they meet. */
.plan-popover-arrow{position:fixed;z-index:61;box-sizing:border-box;width:12px;height:12px;margin:-6px 0 0 -6px;background:#fff;border:1px solid var(--line);transform:rotate(45deg);pointer-events:none}
.plan-popover-arrow[data-side=below]{border-right-color:transparent;border-bottom-color:transparent;box-shadow:-2px -2px 4px -1px #0c312624}
.plan-popover-arrow[data-side=above]{border-top-color:transparent;border-left-color:transparent;box-shadow:2px 2px 4px -1px #0c312624}
.plan-popover-arrow[data-side=left]{border-bottom-color:transparent;border-left-color:transparent;box-shadow:2px -2px 4px -1px #0c312624}
/* 保存为菜谱 (saveThisMenu): the recipe name and the foods as they go into the library. */
.plan-popover-recipe{width:320px}.plan-menu-actions [data-menu-save-recipe][hidden]{display:none}
.plan-recipe-name{display:grid;gap:4px;margin:2px 0 8px;font-size:12px}.plan-recipe-name input{margin:0}
.plan-recipe-foods{list-style:none;display:grid;gap:2px;margin:0 0 6px;padding:6px 10px;border-radius:8px;background:#f7f8f4;font-size:12px}
.plan-recipe-foods li{display:flex;justify-content:space-between;gap:12px}.plan-recipe-foods li span:last-child{font-variant-numeric:tabular-nums;color:var(--muted)}
/* 更改就餐人数 (modifyMealNum): the planned children of each checked day by grade, with the day's total. */
.plan-menu-facts-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px 12px}.plan-menu-numbers{flex:none}
.plan-popover-numbers{width:auto;min-width:300px}
.plan-numbers-wrap{margin:4px 0 2px}
.plan-numbers-table{width:auto;font-size:12px;font-variant-numeric:tabular-nums}
.plan-numbers-table th,.plan-numbers-table td{padding:4px 6px;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap;background:none}
.plan-numbers-table thead th{font-weight:500;color:var(--muted);text-align:center}.plan-numbers-table thead th small{display:block;font-size:11px}
.plan-numbers-table tbody th,.plan-numbers-table tfoot th{text-align:left;font-weight:500;color:var(--ink,#233c34)}
.plan-numbers-table input{width:58px;margin:0;padding:5px 6px;text-align:right}
.plan-numbers-table tfoot td{font-weight:600}
/* 食谱位置调整 (drag.jsp): each checked day with the menu it will hold, as a card to drag or move with ↑ ↓. */
.plan-popover-move{width:400px}
.plan-move-list{list-style:none;margin:4px 0 10px;padding:0;display:grid;gap:6px}
.plan-move-row{display:grid;grid-template-columns:52px minmax(0,1fr) auto;align-items:center;gap:8px}
.plan-move-day{display:grid;line-height:1.3}.plan-move-day strong{font-size:13px;font-weight:600}.plan-move-day small{font-size:11px;color:var(--muted)}
.plan-move-card{display:grid;gap:2px;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:grab;user-select:none}
.plan-move-card strong{font-size:13px;font-weight:600}.plan-move-card small{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.plan-move-row.moved .plan-move-card{border-color:#dcc28d;background:#fdf8ec}
.plan-move-card.dragging{opacity:.45;cursor:grabbing}.plan-move-card.over{border-color:var(--green);box-shadow:0 0 0 2px #2344382e}
.plan-move-buttons{display:flex;gap:2px}.plan-move-buttons .text-btn{padding:4px 9px;font-size:14px}
.plan-popover-info{width:250px}.plan-popover-rank{width:290px}.plan-popover-keep{width:280px}
.plan-popover-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}
.plan-popover-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.plan-popover-head h3{font-size:14px;margin:0;overflow-wrap:anywhere}.plan-popover-head small{color:var(--muted);white-space:nowrap}
.plan-popover-close{display:inline-grid;place-items:center;flex:none;width:26px;height:26px;border-radius:50%;background:#f1f4ed;color:var(--muted)}.plan-popover-close .cg-icon{width:15px;height:15px}
.plan-popover-note{font-size:12px;color:var(--muted);margin:0 0 8px;line-height:1.6}
.plan-popover-table{width:100%;font-variant-numeric:tabular-nums}.plan-popover-table th,.plan-popover-table td{padding:4px 8px;text-align:right}.plan-popover-table th{text-align:left;font-weight:500;color:var(--ink,#233c34);background:none}.plan-popover-table .plan-unit-cell{text-align:left;color:var(--muted);font-size:11px}
.plan-menu-savebar{position:sticky;bottom:0;z-index:2;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;margin-top:18px;padding:12px 16px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 -6px 24px #16392d14}
.plan-menu-savebar p{margin:0}.plan-menu-savebar .form-error{flex-basis:100%;order:3}.plan-menu-pending{font-size:13px}.plan-menu-buttons{display:flex;gap:10px;margin-left:auto}.plan-menu-buttons .btn{gap:6px}
.plan-menu-stale{margin-bottom:16px}
.plan-menu-live{display:none;font-size:12px;color:var(--green);font-weight:550}.plan-menu-live:empty{display:none!important}
/* 制定食谱 (recipeMealSelect.jsp): where the new plan is in its three steps, the setup, then the day editor above. */
.plan-new-steps{list-style:none;display:flex;flex-wrap:wrap;gap:6px 34px;margin:-10px 0 20px;padding:0;font-size:13px;color:var(--muted)}
.plan-new-steps li{position:relative;display:flex;align-items:center;gap:8px}.plan-new-steps li+li::before{content:'';position:absolute;left:-26px;top:50%;width:18px;border-top:1px solid #c9d1c6}
.plan-new-steps span{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:#e8ede4;color:#6f7f70;font-size:12px;font-weight:600}.plan-new-steps .cg-icon{width:13px;height:13px}
.plan-new-steps .current{color:var(--green);font-weight:600}.plan-new-steps .current span{background:var(--green);color:#fff}.plan-new-steps .done span{background:#dfeadf;color:var(--green)}
.plan-new-form{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:0 20px;align-items:start}.plan-new-form>.card{margin-bottom:20px}.plan-new-form h2{font-size:15px;margin-bottom:14px}
.plan-new-when,.plan-new-method-card,.plan-new-footer{grid-column:1/-1}
.plan-new-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px 28px;margin-bottom:12px}.plan-new-row label{margin:0}.plan-new-group{flex:0 1 360px;min-width:220px}
.plan-new-start{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px}.plan-new-start input{width:170px}
.plan-new-facts{margin:0 0 10px;font-size:12px;color:var(--muted)}
.plan-new-status{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:0 0 14px;padding:10px 14px;border-radius:9px;font-size:13px;line-height:1.7}.plan-new-status a{color:inherit;font-weight:600}
.plan-new-status.ok{display:block;background:#eef5ec;color:#2f6a48}.plan-new-status.ok .cg-icon{margin-right:6px}
.plan-new-status.taken{background:#fbf1e8;color:#8a4b2a;border:1px solid #efd9c6}.plan-new-status.taken strong{flex-basis:100%}.plan-new-status.taken span{flex:1 1 320px}
/* 食谱日期: the seven days as chips; a checked day is filled and ticked, a day that cannot be in the plan is hatched. */
.plan-new-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.plan-new-day{position:relative;display:grid;justify-items:center;gap:1px;margin:0;padding:10px 4px 9px;border:1.5px solid var(--line);border-radius:10px;background:#fff;cursor:pointer;text-align:center;font-weight:400;transition:border-color .15s,background-color .15s}
.plan-new-day input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:inherit}
.plan-new-day strong{font-size:14px;font-weight:600;color:#6f7f70}.plan-new-day span{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.plan-new-day small{font-size:11px;color:#9aa39b}
.plan-new-day:not(.off):hover{border-color:#94a690}.plan-new-day:has(input:focus-visible){outline:3px solid #c7ae75;outline-offset:2px}
.plan-new-day.checked{border-color:var(--green);background:#eef3ea}.plan-new-day.checked strong{color:var(--green)}.plan-new-day.checked small{color:#2f6a48;font-weight:550}
.plan-new-day.checked::after{content:'✓';position:absolute;top:5px;right:6px;display:grid;place-items:center;width:16px;height:16px;border-radius:50%;background:var(--green);color:#fff;font-size:10px;line-height:1}
.plan-new-day.off{cursor:not-allowed;border-style:dashed;background:repeating-linear-gradient(135deg,#f4f6f1 0 5px,#fbfbf9 5px 10px)}.plan-new-day.off strong,.plan-new-day.off span,.plan-new-day.off small{color:#a9b0aa}
.plan-new-note{margin:10px 0 0;text-align:left}
.plan-new-form .plan-new-hint{display:block;margin:4px 0 0;font-size:11px;font-weight:400;color:var(--muted)}.plan-new-form p.plan-new-hint{margin:-6px 0 12px}
.plan-new-enrolled{margin:0 0 8px;font-size:13px}.plan-new-enrolled strong{font-size:15px}
.plan-new-sync{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:12px;font-weight:400;color:#4d5f55}.plan-new-sync input{margin:0;accent-color:var(--green)}
.plan-new-grid td.plan-new-zero{color:#b24b42}
.plan-new-methods{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.plan-new-method{display:flex;align-items:flex-start;gap:10px;margin:0;padding:14px 16px;border:1.5px solid var(--line);border-radius:10px;cursor:pointer;font-weight:400}.plan-new-method:hover{border-color:#94a690}
.plan-new-method input{width:auto;margin:4px 0 0;accent-color:var(--green)}.plan-new-method strong{display:block;font-size:14px;font-weight:600;color:var(--ink,#233c34)}.plan-new-method small{display:block;margin:2px 0 0;font-size:12px;line-height:1.6}
.plan-new-method.checked{border-color:var(--green);background:#f3f7f0}
.plan-new-footer{position:sticky;bottom:0;z-index:2;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:10px 16px;padding:12px 16px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 -6px 24px #16392d14}
.plan-new-footer .form-error{flex:1 1 300px;margin:0}.plan-new-empty-action{margin:16px 0 0}
/* 复制历史食谱 (recipeMealCopy.jsp): the plans to choose from, then the day of it each new day copies. */
.plan-popover-copy{width:520px}.plan-popover-copy .plan-popover-actions{position:sticky;bottom:-12px;margin:4px -14px -12px;padding:10px 14px 12px;background:#fff;border-top:1px solid var(--line)}
.plan-copy-plans{list-style:none;display:grid;gap:6px;margin:0 0 8px;padding:0}
.plan-copy-plans button{display:grid;gap:2px;width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink,#233c34);text-align:left}
.plan-copy-plans button:hover,.plan-copy-plans button:focus-visible{border-color:var(--green);background:#f3f7f0}
.plan-copy-plans strong{font-size:13px;font-weight:600}.plan-copy-plans small{font-size:11px;color:var(--muted)}.plan-copy-plans span{overflow:hidden;font-size:11px;color:#6f7f70;text-overflow:ellipsis;white-space:nowrap}
.plan-copy-pages{display:flex;align-items:center;justify-content:flex-end;gap:4px;font-size:12px;color:var(--muted)}.plan-copy-pages span{margin-right:auto}
.plan-copy-back{margin:-4px 0 4px -8px;font-size:12px}
.plan-copy-source{display:grid;gap:2px;margin:0 0 8px;padding:8px 10px;border-radius:8px;background:#f7f8f4;line-height:1.5}.plan-copy-source strong{font-size:13px}.plan-copy-source small{font-size:11px}
.plan-copy-map{width:100%;margin:0 0 8px;font-size:12px}.plan-copy-map th,.plan-copy-map td{padding:6px 8px;vertical-align:top;background:none}.plan-copy-map thead th{font-weight:500;color:var(--muted)}
.plan-copy-map tbody th{white-space:nowrap;font-weight:600;color:var(--ink,#233c34)}.plan-copy-map tbody th small{display:block;font-size:11px;font-weight:400}
.plan-copy-map select{margin:0;padding:6px 8px;font-size:12px}.plan-copy-dishes{display:block;margin-top:4px;font-size:11px;line-height:1.5}
@media(max-width:1000px){.plan-new-form{grid-template-columns:minmax(0,1fr)}}
@media(max-width:760px){.plan-new-days{grid-template-columns:repeat(4,minmax(0,1fr))}.plan-new-group{flex-basis:100%}.plan-new-footer .btn{width:100%}
  .plan-new-start{display:grid;grid-template-columns:1fr 1fr;width:100%}.plan-new-start label{grid-column:1/-1;grid-row:1}.plan-new-start input{width:100%}}
@media(max-width:1180px){.plan-menu-layout{grid-template-columns:minmax(0,1fr)}.plan-menu-analysis{position:static;max-height:none}.plan-menu-live{display:block}}
@media(max-width:760px){.plan-menu-info .form-grid{grid-template-columns:1fr}.plan-menu-tab,.plan-menu-tab-off{padding:8px 10px}.plan-menu-day{padding:14px}.plan-menu-savebar{padding:10px 12px}.plan-menu-buttons{width:100%}.plan-menu-buttons .btn{flex:1}
  /* The menu table reads as blocks: meal, then each dish, then its foods beside their quantities. */
  .plan-menu-wrap{overflow:visible}.plan-menu-table{min-width:0;border:0;table-layout:auto}.plan-menu-table colgroup,.plan-menu-table thead{display:none}
  .plan-menu-table,.plan-menu-table tbody{display:block}.plan-menu-table tbody{border:1px solid var(--line);border-radius:10px;margin-bottom:12px;overflow:hidden}
  .plan-menu-table tr{display:grid;grid-template-columns:minmax(0,1fr) 104px}.plan-menu-table th,.plan-menu-table td{display:block;border:0;border-top:1px solid var(--line)}
  .plan-menu-table .plan-menu-meal{grid-column:1/-1;border-top:0}
  .plan-menu-table .plan-menu-dish,.plan-menu-table .plan-menu-empty,.plan-menu-table .plan-menu-first,.plan-menu-table .plan-menu-food-add,.plan-menu-table .plan-menu-add-row td{grid-column:1/-1}.plan-menu-dish{background:#fbfcf9}
  .plan-menu-grams{padding-left:0!important}}
@media(prefers-reduced-motion:reduce){.plan-menu-grams input{transition:none}}
@media print{.plan-popover-arrow,.plan-menu-tab-off,.plan-menu-savebar,.plan-menu-actions,.plan-menu-add-row,.plan-menu-tools,.plan-new-steps,.plan-menu-weeks,.plan-popover,.plan-menu-first-dish{display:none}.plan-menu-layout{display:block}.plan-menu-first::after{content:'尚未安排菜谱';color:var(--muted);font-size:12px}}
/* Loading skeletons of the pages under 膳食计划（餐前）: the whole page, or only the part a query change reloads. */
.content[data-plan-loading]>:not(.plan-skeleton){display:none}
[data-plan-loading-part]{position:relative}[data-plan-loading-part]>:not(.plan-skeleton){visibility:hidden}
[data-plan-loading-part]>.plan-skeleton{position:absolute;inset:0;overflow:hidden;padding:inherit}
.week-board[data-plan-loading-part]>.plan-skeleton>div{display:grid;grid-template-columns:repeat(7,minmax(170px,1fr));gap:12px}
.plan-menu-layout[data-plan-loading-part]>.plan-skeleton>div{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,400px);gap:20px;align-items:start}
@media(max-width:1180px){.plan-menu-layout[data-plan-loading-part]>.plan-skeleton>div{grid-template-columns:minmax(0,1fr)}}
.plan-skeleton-block{display:block;height:12px;max-width:100%;background:#e5eadf;border-radius:4px;animation:plan-skeleton-pulse 1.8s ease-in-out infinite}
.plan-skeleton-block+.plan-skeleton-block{margin-top:8px}
.plan-skeleton .page-heading{flex-wrap:wrap}.plan-skeleton .page-heading>div:first-child{flex:1 1 200px;min-width:0}.plan-skeleton .heading-actions{flex-wrap:wrap}
.plan-skeleton .page-heading>div:first-child>.plan-skeleton-block:first-child{height:24px}
.plan-skeleton .heading-actions .plan-skeleton-block,.plan-skeleton .filter .plan-skeleton-block,.plan-skeleton-filters .plan-skeleton-block{height:34px;border-radius:8px;margin-top:0}
.plan-skeleton-filters{margin-bottom:16px}
.plan-skeleton .plan-pagination{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px}.plan-skeleton .plan-pagination .plan-skeleton-block{margin-top:0}
.plan-skeleton-tabs{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px;padding:10px 0 12px;border-bottom:1px solid var(--line)}.plan-skeleton-tabs .plan-skeleton-block{margin-top:0}
.plan-skeleton-table{width:100%;min-width:560px;border-collapse:collapse}.plan-skeleton-table th,.plan-skeleton-table td{padding:10px 12px;border-bottom:1px solid var(--line)}
.plan-skeleton-title{display:flex;justify-content:center;margin:8px 0 14px}.plan-skeleton-title .plan-skeleton-block{height:18px}
.plan-skeleton-sheet-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px;margin-bottom:10px}.plan-skeleton-sheet-head .plan-skeleton-block{margin-top:0}
.plan-skeleton-day{display:grid;justify-items:center;gap:6px;padding:8px 0 17px}.plan-skeleton-day .plan-skeleton-block{margin-top:0}
.plan-skeleton-meal{margin-bottom:14px}.plan-skeleton-dish{background:var(--white);border-radius:10px;padding:10px;margin-top:8px}
.plan-skeleton-w50{width:50%}.plan-skeleton-w60{width:60%}.plan-skeleton-w65{width:65%}.plan-skeleton-w70{width:70%}.plan-skeleton-w75{width:75%}.plan-skeleton-w90{width:90%}.plan-skeleton-w100{width:100%}.plan-skeleton-w40px{width:40px}.plan-skeleton-w50px{width:50px}.plan-skeleton-w70px{width:70px}.plan-skeleton-w90px{width:90px}.plan-skeleton-w100px{width:100px}.plan-skeleton-w110px{width:110px}.plan-skeleton-w120px{width:120px}.plan-skeleton-w140px{width:140px}.plan-skeleton-w160px{width:160px}.plan-skeleton-w180px{width:180px}.plan-skeleton-w200px{width:200px}.plan-skeleton-w210px{width:210px}.plan-skeleton-w220px{width:220px}.plan-skeleton-w260px{width:260px}.plan-skeleton-w300px{width:300px}.plan-skeleton-w360px{width:360px}
@keyframes plan-skeleton-pulse{50%{opacity:.45}}
@media(prefers-reduced-motion:reduce){.plan-skeleton-block,.plan-menu-analysis[aria-busy=true] .plan-analysis-status::before{animation:none}}
/* 详情: the whole-plan delete in its own warning area. */
.plan-danger-zone{margin-top:28px;border-color:#e8c4be}.plan-danger-zone h2{margin:0 0 12px;font-size:16px;color:#9b3a30}
.plan-danger-warning{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;margin-bottom:14px;border:1px solid #f0cdc7;border-radius:10px;background:#fdf3f1;color:#7a2e26;line-height:1.7}.plan-danger-warning p{margin:2px 0 0}
.plan-danger-icon{flex:none;display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:#b8483c;color:#fff;font-weight:700;font-size:13px;line-height:1}
.plan-danger-actions{display:flex;justify-content:flex-end;margin-top:12px}
@media print{.plan-danger-zone{display:none}}

/* 添加菜谱 / 添加食材: a modal panel from the click point to the right edge (plan-editor.js sidePanel). The controls stay
   at the top and only the results scroll: one list a tab (本园菜谱 or 系统精选), the full height of the panel. */
dialog.plan-side-panel{position:fixed;inset:0 0 0 auto;left:var(--plan-side-left,40vw);width:auto;height:auto;max-width:none;max-height:none;margin:0;padding:0;border:0;border-left:1px solid var(--line);border-radius:16px 0 0 16px;background:#fff;color:inherit;box-shadow:-20px 0 56px #0c312629;overflow:hidden;transform:translateX(100%);transition:transform .22s cubic-bezier(.2,.8,.2,1)}
dialog.plan-side-panel[open]{display:flex;flex-direction:column}dialog.plan-side-panel.is-open{transform:none}
dialog.plan-side-panel::backdrop{background:#12342629;backdrop-filter:none}
.plan-side{container-type:inline-size;display:flex;flex-direction:column;flex:1;min-height:0}
.plan-side-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 20px 12px}
.plan-side-head h2{margin:0;font-size:18px;line-height:1.35}
.plan-side-target{margin:6px 0 0;font-size:12px;line-height:1.7;color:var(--muted)}.plan-side-target strong{display:inline-block;margin-right:8px;padding:0 9px;border-radius:999px;background:#eef4e9;color:var(--green);font-weight:600}
.plan-side-close{display:inline-grid;place-items:center;flex:none;width:32px;height:32px;border-radius:50%;background:#f1f4ed;color:var(--muted)}.plan-side-close:hover{background:#e6eee1;color:var(--green)}.plan-side-close .cg-icon{width:17px;height:17px}
.plan-side-tools{padding:0 20px 12px;border-bottom:1px solid var(--line)}
.plan-picker-filter{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}.plan-picker-filter>select{flex:0 1 190px;min-width:0;margin:0}
.plan-picker-search{position:relative;display:block;flex:1 1 320px;margin:0}.plan-picker-search .cg-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--muted)}.plan-picker-search input{margin:0;padding-left:32px}
.plan-picker-value{font-variant-numeric:tabular-nums;white-space:nowrap}
.plan-source-note{display:block;color:var(--muted,#6b7b73);font-size:11px;margin:4px 0 8px;line-height:1.5}
.plan-recipe-tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);margin:0 0 12px}.plan-recipe-tabs button{border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);padding:9px 14px;font:inherit;font-size:14px;cursor:pointer}.plan-recipe-tabs button[aria-selected=true]{border-bottom-color:var(--green,#326449);color:var(--green,#326449);font-weight:600}
.plan-recipe-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;border-bottom:1px solid var(--line);margin-bottom:12px;padding-bottom:4px}
.plan-recipe-toolbar .plan-recipe-tabs{flex:1;margin:0;border:0}.plan-recipe-new{flex:none;font-size:13px;padding:6px 10px}
.plan-pick-empty-actions{display:flex;flex-wrap:wrap;gap:8px 20px}.plan-pick-empty p{margin:0 0 10px}
/* Recipe names are entered and searched in the menu row, as in the original editor. */
.plan-menu-browse{font-size:12px;margin-left:10px}.plan-menu-first>.plan-menu-browse{margin:6px 0 0}
.plan-inline-name{display:block;font-size:12px;margin:0}.plan-inline-name input{width:100%;min-width:0;margin:5px 0 0}
.plan-inline-note{font-size:12px;line-height:1.6;color:var(--muted);margin:8px 0;overflow-wrap:anywhere}
.plan-menu-draft .form-error{font-size:12px;white-space:normal;overflow-wrap:anywhere}.plan-menu-draft .form-error:empty{display:none}
.plan-popover-recipe-search{width:440px;padding:10px;overflow:auto}
.plan-inline-tabs{margin-bottom:6px}.plan-inline-tabs button{font-size:13px;padding:7px 10px}
.plan-popover-recipe-search [role=option]{display:flex;flex-direction:column;gap:3px;width:100%;text-align:left;padding:9px 8px;background:none;color:var(--green);border-radius:6px}
.plan-popover-recipe-search [role=option]:is(:hover,:focus-visible){background:#edf3e9}.plan-popover-recipe-search [role=option]:disabled{color:var(--muted);cursor:default}
.plan-popover-recipe-search [role=option] strong{font-size:13px;overflow-wrap:anywhere}.plan-popover-recipe-search [role=option] small{font-size:12px;line-height:1.6;color:var(--muted);overflow-wrap:anywhere}
.plan-inline-search-actions{display:flex;flex-wrap:wrap;gap:6px 12px;border-top:1px solid var(--line);padding-top:8px;margin-top:6px}.plan-inline-search-actions button{font-size:12px}
@media(max-width:420px){.plan-recipe-toolbar{gap:4px}.plan-recipe-toolbar .plan-recipe-tabs{gap:0}.plan-recipe-tabs button{padding:9px 6px;font-size:13px}.plan-recipe-new{font-size:12px;padding:6px}}
/* 系统精选 filters: a row of chips each (shadcn's toggle group look, on native radios), so a choice is one click and the
   chosen one is filled. A 分类 chip counts the dishes it leaves for the search and is disabled at none; 清除筛选 shows
   only while something is chosen, right after the 营养 chips (they keep their width), not off at the far edge. */
.plan-filter-bar{flex:1 1 100%;display:grid;gap:8px;min-width:0}.plan-filter-bar[hidden]{display:none}
.plan-filter-row{display:flex;align-items:center;gap:10px;min-width:0}
.plan-filter-label{flex:none;min-width:2.5em;font-size:12px;color:var(--muted)}
.plan-chips{display:flex;flex-wrap:wrap;gap:6px;min-width:0}
label.plan-chip{position:relative;display:inline-flex;align-items:baseline;gap:5px;margin:0;padding:3px 10px;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--green);font-size:12.5px;font-weight:500;line-height:1.6;white-space:nowrap;cursor:pointer;transition:background-color .15s,border-color .15s}
.plan-chip input{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;opacity:0;cursor:inherit}
.plan-chip-count{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.plan-chip-count:empty{display:none}
.plan-chip:hover:not(:has(input:checked,input:disabled)){border-color:#b8ccb4;background:#f3f7ef}
.plan-chip:has(input:checked){border-color:var(--green);background:var(--green);color:#fff}.plan-chip:has(input:checked) .plan-chip-count{color:#cfe0d2}
.plan-chip:has(input:focus-visible){outline:3px solid #c7ae75;outline-offset:2px}
.plan-chip:has(input:disabled){border-style:dashed;color:#a9b0aa;cursor:default}.plan-chip:has(input:disabled) .plan-chip-count{color:inherit}
.plan-filter-clear{flex:none;font-size:12px}.plan-filter-clear[hidden]{display:none}
.plan-side-note{margin:10px 0 0;font-size:12px;line-height:1.6;color:var(--muted)}
.plan-side-status{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
/* Each list sits straight in its pane, without a box of its own: a heading, the rows (the only part that scrolls) and
   the page links at the bottom left. The rows share their list's columns through subgrid, so names, 配方 and 选择 line
   up from row to row; hairlines alone separate them. */
.plan-side-results{flex:1;min-height:0;display:grid;grid-template-rows:minmax(0,1fr)}
.plan-pick-section{container-type:inline-size;display:flex;flex-direction:column;min-height:0;padding:0 12px}.plan-pick-section[hidden]{display:none}
.plan-pick-section+.plan-pick-section{border-top:1px solid var(--line)}
.plan-pick-head{flex:none;display:flex;align-items:baseline;gap:10px;padding:14px 8px 4px}.plan-pick-head h3{margin:0;font-size:14px}.plan-pick-count{font-size:12px;color:var(--muted)}
.plan-pick-loading{display:inline-flex;align-items:center;gap:6px;margin-left:auto;font-size:12px;color:var(--muted)}.plan-pick-loading[hidden]{display:none}
.plan-pick-spinner{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:plan-pick-pulse .9s ease-in-out infinite alternate}@keyframes plan-pick-pulse{from{opacity:.25}to{opacity:1}}
.plan-pick-list{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;display:grid;grid-template-columns:fit-content(12em) minmax(0,1fr) auto;column-gap:18px;align-content:start}
.plan-pick-list[data-kind=food]{grid-template-columns:fit-content(14em) fit-content(9em) minmax(0,1fr) auto}
/* A recipe list: one line a dish, the eleven nutrients (with a 营养, also per 100 千卡) in right-aligned columns under
   sort buttons after the formula. 本园菜谱: 菜名 | 配方 | numbers. 系统精选: 类别 | 菜名 | 其他配方 (not inside one dish's
   其他配方) | 配方 | numbers. Only the formula gives way; where it would get too little room it goes under the name, and
   with less room still the numbers make a line of their own (the container queries below), so nothing runs off the side. */
.plan-pick-list:is([data-kind=recipe],[data-kind=system]){--nums:11;--num:minmax(2.3em,auto);column-gap:8px;grid-template-columns:var(--cols)}
.plan-pick-list[data-nums="12"]{--nums:12}
.plan-pick-list[data-kind=recipe]{--cols:fit-content(12em) minmax(0,1fr) repeat(var(--nums),var(--num))}
.plan-pick-list[data-kind=system]{--cols:auto fit-content(10em) auto minmax(0,1fr) repeat(var(--nums),var(--num))}
.plan-pick-list[data-kind=system][data-variants]{--cols:auto fit-content(10em) minmax(0,1fr) repeat(var(--nums),var(--num))}
.plan-pick-columns,.plan-pick-row{grid-column:1/-1;display:grid;grid-template-columns:11em minmax(0,1fr) 5em;grid-template-columns:subgrid}
.plan-pick-list[data-kind=food]>.plan-pick-columns,.plan-pick-list[data-kind=food]>.plan-pick-row{grid-template-columns:11em 7em minmax(0,1fr) 7em;grid-template-columns:subgrid}
.plan-pick-list:is([data-kind=recipe],[data-kind=system])>:is(.plan-pick-columns,.plan-pick-row){grid-template-columns:var(--cols);grid-template-columns:subgrid}
.plan-pick-kind,.plan-pick-more{justify-self:start;white-space:nowrap}
/* 本园有 (yellow) and 本餐次已有 (grey) follow the name as small marks instead of taking a column. */
.plan-pick-flag{padding:0 7px;border-radius:999px;background:#fbefcf;color:#6f5414;font-size:11px;font-style:normal;line-height:1.7;white-space:nowrap}
.plan-pick-columns{position:sticky;top:0;z-index:2;align-items:end;padding:6px 8px;background:#fff;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted)}.plan-pick-columns>span:last-child{text-align:right}
.plan-pick-columns>span>small{display:block;font-size:10.5px;color:#9aa39b}.plan-pick-columns .plan-pick-under{display:none}
/* The numbers read down right-aligned columns; the sorted one is bold, the chosen 营养 green. They are placed from the
   right edge, so they keep their columns whichever columns come before them. */
.plan-pick-nums{display:contents}
.plan-pick-num{justify-self:end;text-align:right;white-space:nowrap;font-size:12px;font-variant-numeric:tabular-nums;color:#5d6d64}
.plan-pick-num>b,.plan-pick-num>i{display:none}
.plan-pick-num.is-aim{color:var(--green)}.plan-pick-num.is-sorted{color:var(--green);font-weight:600}.plan-pick-row:has(.plan-pick-main:disabled) .plan-pick-num{color:var(--muted)}
/* Each number's heading is a button that sorts by it: its name over its unit, ↓ (高→低) or ↑ (低→高) before the sorted
   one's unit, within the column's least width, so sorting does not move the columns. */
.plan-pick-sort{display:flex;flex-direction:column;align-items:flex-end;margin:0;padding:0;border:0;border-radius:4px;background:none;color:var(--muted);font:inherit;font-size:12px;line-height:1.35;white-space:nowrap;cursor:pointer}
.plan-pick-sort small{font-size:10.5px;color:#9aa39b}
.plan-pick-sort:hover,.plan-pick-sort.is-aim{color:var(--green)}.plan-pick-sort.is-sorted{color:var(--green);font-weight:600}
.plan-pick-arrow{margin-right:1px;color:var(--green);font-weight:600}
.plan-pick-num:nth-last-child(1){grid-column-end:-1}.plan-pick-num:nth-last-child(2){grid-column-end:-2}.plan-pick-num:nth-last-child(3){grid-column-end:-3}
.plan-pick-num:nth-last-child(4){grid-column-end:-4}.plan-pick-num:nth-last-child(5){grid-column-end:-5}.plan-pick-num:nth-last-child(6){grid-column-end:-6}
.plan-pick-num:nth-last-child(7){grid-column-end:-7}.plan-pick-num:nth-last-child(8){grid-column-end:-8}.plan-pick-num:nth-last-child(9){grid-column-end:-9}
.plan-pick-num:nth-last-child(10){grid-column-end:-10}.plan-pick-num:nth-last-child(11){grid-column-end:-11}.plan-pick-num:nth-last-child(12){grid-column-end:-12}
.plan-pick-said{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.plan-pick-row{position:relative;align-items:baseline;padding:10px 8px;border-bottom:1px solid var(--line);background:#fff;color:var(--green);transition:background-color .8s ease-out}
.plan-pick-row:hover{background:#f3f7ef;transition:none}.plan-pick-row.plan-pick-returned{background:#fbefcf;transition:none}
.plan-pick-row:has(.plan-pick-main:disabled){background:#fafbf8;color:var(--muted)}
.plan-pick-name{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 6px;min-width:0}
.plan-pick-main{margin:0;padding:0;border:0;background:none;color:inherit;font:inherit;font-size:14px;font-weight:600;line-height:1.5;text-align:left;overflow-wrap:anywhere;cursor:pointer}
.plan-pick-main::after{content:"";position:absolute;inset:0;cursor:pointer}.plan-pick-main:focus-visible{outline:none}.plan-pick-main:focus-visible::after{outline:2px solid var(--green);outline-offset:-2px}
.plan-pick-main:disabled{opacity:1;color:inherit;cursor:default}.plan-pick-main:disabled::after{cursor:default}
.plan-pick-tag{padding:0 6px;border-radius:999px;background:#f1f4ed;color:var(--muted);font-size:11px;font-style:normal;line-height:1.6;white-space:nowrap}
.plan-pick-detail{min-width:0;font-size:12.5px;line-height:1.65;color:#5d6d64;overflow-wrap:anywhere}.plan-pick-row:has(.plan-pick-main:disabled) .plan-pick-detail{color:var(--muted)}
.plan-pick-code{font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.plan-pick-row .plan-picker-value{justify-self:end;font-size:12px;color:var(--muted)}.plan-pick-row:hover:not(:has(.plan-pick-main:disabled)) .plan-picker-value{color:var(--green);font-weight:600}
/* 其他配方 sits in its own column above the stretched name button, so it stays a separate control: the layers icon and
   how many more. */
.plan-pick-more{position:relative;z-index:1;justify-self:start}
.plan-variant-link{display:inline-flex;align-items:center;gap:3px;margin:0;padding:1px 7px;border:1px solid #b8ccb4;border-radius:999px;background:#fff;color:var(--green);font:inherit;font-size:12px;line-height:1.6;font-variant-numeric:tabular-nums;white-space:nowrap;cursor:pointer}.plan-variant-link .cg-icon{width:13px;height:13px}.plan-variant-link:hover{border-color:var(--green);background:#eef4e9}.plan-variant-link:disabled{opacity:.5;cursor:default}
.plan-pick-subhead{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:2px 0 8px;padding:8px 10px;border-radius:8px;background:#eef4e9;color:var(--green);font-size:13px}.plan-pick-subhead[hidden]{display:none}
.plan-pager-back{height:32px;margin:0;padding:0 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--green);font:inherit;font-size:12px;cursor:pointer}.plan-pager-back:hover{border-color:#b8ccb4;background:#f3f7ef}
.plan-pick-skeleton{grid-column:1/-1;display:block;height:40px;margin:8px;border-radius:8px;background:#eef2eb}
.plan-pick-empty{grid-column:1/-1;margin:14px 8px;font-size:13px;color:var(--muted)}.plan-pick-empty strong{display:block;margin-bottom:4px;color:var(--green)}
.plan-pager{flex:none;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:6px 14px;padding:10px 8px 14px;border-top:1px solid var(--line);font-size:12px;color:var(--muted)}.plan-pager:empty{display:none}
.plan-pager-pages{display:flex;flex-wrap:nowrap;align-items:center;gap:4px}.plan-pager-info{white-space:nowrap}.plan-pager-arrow{display:none;font-size:16px;line-height:1}
.plan-pager button{min-width:32px;height:32px;margin:0;padding:0 6px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--green);font:inherit;font-size:12px;font-variant-numeric:tabular-nums;cursor:pointer}.plan-pager .plan-pager-step,.plan-pager .plan-pager-back{padding:0 10px}
.plan-pager-gap{display:inline-grid;place-items:center;min-width:32px;height:32px}
.plan-pager button:hover:not([disabled]){border-color:#b8ccb4;background:#f3f7ef}.plan-pager button[aria-current=page]{border-color:var(--green);background:var(--green);color:#fff;font-weight:600}.plan-pager button[disabled]{opacity:.45;cursor:default}

/* The formula beside the name would get under about 200px: it goes under the name instead, across to the right edge,
   with its heading under 菜名; the numbers stay on the name's line. 系统精选 below 900px (960px with a 营养's per 100
   千卡 column), the campus list, with fewer columns, below 800px. */
@container (max-width:959px){
  .plan-pick-list[data-kind=system][data-nums="12"] .plan-pick-detail{grid-column:2/-1;grid-row:2}
  .plan-pick-list[data-kind=system][data-nums="12"] .plan-pick-detail-head{display:none}.plan-pick-list[data-kind=system][data-nums="12"] .plan-pick-under{display:block}
}
@container (max-width:899px){
  .plan-pick-list[data-kind=system] .plan-pick-detail{grid-column:2/-1;grid-row:2}
  .plan-pick-list[data-kind=system] .plan-pick-detail-head{display:none}.plan-pick-list[data-kind=system] .plan-pick-under{display:block}
}
@container (max-width:799px){
  .plan-pick-list[data-kind=recipe] .plan-pick-detail{grid-column:1/-1;grid-row:2}
  .plan-pick-list[data-kind=recipe] .plan-pick-detail-head{display:none}.plan-pick-list[data-kind=recipe] .plan-pick-under{display:block}
}
/* Less room: the numbers make a line of their own under the formula, in shared columns (each at least as wide as its
   heading, so 每100千卡 never runs into VitC) under the sort buttons; the headings 类别, 菜名 and 其他配方 go (the rows
   show what they are). 系统精选 does so below 700px, the campus list, with
   fewer columns before its numbers, below 560px. */
@container (max-width:699px){
  .plan-pick-list[data-kind=system]{--cols:repeat(var(--nums),1fr);column-gap:6px}
  .plan-pick-list[data-kind=system] .plan-pick-row>.plan-pick-name{grid-column:2/-2}.plan-pick-list[data-kind=system][data-variants] .plan-pick-row>.plan-pick-name{grid-column:2/-1}
  .plan-pick-list[data-kind=system] .plan-pick-row>.plan-pick-more{grid-column:-2/-1;justify-self:end}
  .plan-pick-list[data-kind=system] .plan-pick-row .plan-pick-num{grid-row:3}.plan-pick-list[data-kind=system]>.plan-pick-columns>span{display:none}
}
@container (max-width:559px){
  .plan-pick-list[data-kind=recipe]{--cols:repeat(var(--nums),1fr);column-gap:6px}
  .plan-pick-list[data-kind=recipe] .plan-pick-row>.plan-pick-name{grid-column:1/-1}
  .plan-pick-list[data-kind=recipe] .plan-pick-row .plan-pick-num{grid-row:3}.plan-pick-list[data-kind=recipe]>.plan-pick-columns>span{display:none}
}
@container (max-width:460px){
  .plan-pick-list{grid-template-columns:fit-content(7.5em) minmax(0,1fr) auto;column-gap:10px}.plan-pick-list[data-kind=food]{grid-template-columns:fit-content(8em) auto minmax(0,1fr) auto}
  /* A phone takes three lines a dish: 类别 | 菜名 (本园有) | 其他配方, the formula under the name, then the numbers,
     each with its name and unit, wrapping. The headings become a wrapped row of sort buttons (names only). */
  .plan-pick-list[data-kind=recipe]{--cols:minmax(0,1fr)}.plan-pick-list:is([data-kind=recipe],[data-kind=system]){column-gap:10px}
  .plan-pick-list[data-kind=system]{--cols:auto minmax(0,1fr) auto}.plan-pick-list[data-kind=system][data-variants]{--cols:auto minmax(0,1fr)}
  .plan-pick-list:is([data-kind=recipe],[data-kind=system]) .plan-pick-row>:is(.plan-pick-name,.plan-pick-more){grid-column:auto}
  .plan-pick-list:is([data-kind=recipe],[data-kind=system])>.plan-pick-columns{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 14px}
  .plan-pick-sort{flex-direction:row;align-items:baseline;gap:1px}.plan-pick-unit{display:none}
  .plan-pick-nums{display:flex;flex-wrap:wrap;gap:0 12px;grid-column:1/-1;grid-row:3;margin-top:2px}.plan-pick-list[data-kind=system] .plan-pick-nums{grid-column:2/-1}
  .plan-pick-num>b{display:inline;margin-right:3px;font-weight:400;color:var(--muted)}.plan-pick-num>i{display:inline;margin-left:1px;font-style:normal;font-size:11px;color:var(--muted)}
  .plan-pick-row,.plan-pick-columns,.plan-pick-head,.plan-pager{padding-left:6px;padding-right:6px}
  .plan-pick-detail{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
}
@container (max-width:400px){
  .plan-pager .plan-pager-step{padding:0}.plan-pager-word{display:none}.plan-pager-arrow{display:inline}
}
/* A narrow panel keeps each row of chips to one line that scrolls sideways, faded at the edge, so the list keeps its room. */
@container (max-width:520px){
  .plan-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:-5px 0;padding:5px 24px 5px 4px;mask-image:linear-gradient(to right,#000 calc(100% - 24px),transparent)}
  .plan-chips::-webkit-scrollbar{display:none}.plan-filter-label{min-width:2em}
}
@media(max-width:640px){dialog.plan-side-panel{border-left:0;border-radius:0}.plan-side-head{padding:14px 16px 10px}.plan-side-tools{padding:0 16px 10px}.plan-pick-section{padding:0 8px}}
@media(prefers-reduced-motion:reduce){dialog.plan-side-panel,.plan-pick-row{transition:none}.plan-pick-spinner{animation:none}}

/* Date presets: 营养分析报告's original 预设范围 (今日 / 本周 / 当前月) and 就餐人数's 今天. */
.legacy-presets{display:flex;gap:6px;align-items:center}
.nr-preset{font-size:12px;color:var(--green);text-decoration:none;padding:3px 10px;border-radius:999px;border:1px solid var(--line);background:#fff}.nr-preset.active{background:#eaf0e9;border-color:#c9d8c6;font-weight:600}
/* 就餐人数 (meal-counts.js): the list per date × 登记范围 and the one-date sheet of every class and meal. */
.mc-list-day{display:inline-flex;gap:6px;align-items:baseline;white-space:nowrap}
.mc-list .mc-staff{display:block;font-size:11px;color:var(--muted);white-space:nowrap}
.mc-empty-action{margin-top:14px}
.mc-empty-action a.btn,.page-heading a.btn,.mc-step{text-decoration:none}
.mc-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px 18px;margin-bottom:14px}
.mc-date{display:flex;align-items:center;gap:6px}
.mc-date-field{position:relative;margin:0}
.mc-date-field input{margin:0;width:auto;min-height:40px}
.mc-date .sr-only{position:absolute;left:0;top:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.mc-step{min-width:40px;padding:9px 12px;font-size:16px;line-height:1}
.mc-step[aria-disabled=true]{opacity:.45;cursor:not-allowed}
.mc-date .nr-preset{margin-left:4px}
.mc-week{display:flex;gap:4px}
.mc-day{display:flex;flex-direction:column;align-items:center;min-width:44px;padding:5px 6px 6px;border-radius:9px;border:1px solid var(--line);background:#fff;color:#5f6f63;text-decoration:none;font-size:11px;line-height:1.35}
.mc-day strong{font-size:15px;font-weight:600;color:#233c34}
a.mc-day:hover{border-color:#c9d8c6}
.mc-day.active{border-color:var(--green);box-shadow:inset 0 0 0 1px var(--green)}
.mc-day.future{opacity:.45}
.mc-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#dfe5dc;margin-top:3px}
.mc-day.done .mc-dot,.mc-dot.done{background:#228a5a}
.mc-day.partial .mc-dot,.mc-dot.partial{background:#c27d1c}
.mc-legend{display:flex;align-items:center;gap:6px;margin:0;font-size:11px;color:var(--muted)}
.mc-legend .mc-dot{margin:0 0 0 6px}
.mc-day.unplanned{border-style:dashed;background:#f7f8f4;color:#8a9485}
.mc-day.unplanned strong{color:#8a9485;font-weight:500}
.mc-legend-unplanned{display:inline-block;width:12px;height:10px;margin-left:6px;border:1px dashed #9aa597;border-radius:3px;background:#f7f8f4}
.mc-grid th .mc-unplanned-meal{display:block;font-size:10px;font-weight:400;color:#a54e43}
.mc-grid td.mc-none{color:#b9c4b5;text-align:center}
.mc-empty-action{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}
.mc-scopes{display:flex;flex-wrap:wrap;gap:4px;padding:3px;border-radius:10px;background:#eef1ea;margin-bottom:14px;width:fit-content;max-width:100%}
.mc-scope{display:flex;flex-direction:column;padding:7px 14px;border-radius:8px;color:#5f6f63;text-decoration:none;font-size:13px;line-height:1.35}
.mc-scope small{font-size:11px;color:var(--muted)}
.mc-scope.active{background:#fff;color:var(--green);font-weight:600;box-shadow:0 1px 2px #1d3b2f1f}
.mc-sheet{padding:0;overflow:visible}
.mc-sheet-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 20px;padding:16px 18px;border-bottom:1px solid var(--line)}
.mc-sheet-head h2{margin:0 0 2px;font-size:16px}
.mc-sheet-head p{margin:0;font-size:12px;color:var(--muted);line-height:1.6}
.mc-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;color:#5f6f63}
.mc-tools .btn{padding:7px 12px;font-size:12px}
.mc-grid{width:auto;min-width:100%;font-size:13px;font-variant-numeric:tabular-nums}
.mc-grid th,.mc-grid td{padding:7px 10px;border-bottom:1px solid var(--line);white-space:nowrap;vertical-align:middle}
.mc-grid thead th{font-size:12px}
.mc-grid .numeric{text-align:right}
.mc-grid tbody th,.mc-grid tfoot th{font-size:13px;font-weight:550;color:#233c34;background:#fff;text-align:left}
.mc-grid tbody th,.mc-grid tfoot th,.mc-grid thead th:first-child{position:sticky;left:0;z-index:1}
.mc-grid tbody tr:last-child th{border-bottom:0}
.mc-grid tfoot td,.mc-grid tfoot th{font-weight:600;background:#f8faf6;border-top:1px solid var(--line);border-bottom:0}
.mc-enrolled{color:var(--muted)}
.mc-cell{width:68px;margin:0 0 0 auto;padding:6px 8px;text-align:right;font-variant-numeric:tabular-nums}
.mc-cell.changed,.mc-note.changed{background:#fbf6e8;border-color:#d8c48f}
.mc-cell.over{color:#a54e43;font-weight:600}
.mc-cell[aria-invalid=true]{border-color:#b74e46;background:#fdf1ef}
.mc-cell[readonly],.mc-note[readonly]{background:#f7f8f4;color:#5f6f63}
.mc-note{min-width:160px;margin:0;padding:6px 8px}
.mc-savebar{position:sticky;bottom:0;z-index:2;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:10px;padding:12px 18px;background:#fff;border-top:1px solid var(--line);border-radius:0 0 12px 12px}
.mc-status{margin-right:auto;font-size:12px;color:var(--muted)}
.mc-status.dirty{color:#92702c}
.mc-status.error{color:#a54e43}
@media (max-width:760px){.mc-toolbar{flex-direction:column;align-items:stretch}.mc-week{justify-content:space-between}.mc-day{flex:1;min-width:0}.mc-scopes{width:auto}.mc-sheet-head{padding:14px}.mc-savebar{padding:10px 14px}.mc-savebar .btn{flex:1}.mc-status{flex-basis:100%}}

/* 记账膳调 (bookkeeping.js, plan-actions.js): the 记账法 steps, the 就餐人数 of a 就餐食谱's days and 食物用量统计. */
.bk-steps{list-style:none;margin:0 0 18px;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;counter-reset:bk}
.bk-steps li{counter-increment:bk;background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px 14px 48px;position:relative;line-height:1.6}
.bk-steps li::before{content:counter(bk);position:absolute;left:16px;top:15px;width:22px;height:22px;border-radius:50%;background:#eaf0e9;color:var(--green);font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center}
.bk-steps strong{display:block;font-size:13px;color:#233c34}.bk-steps span{font-size:12px;color:var(--muted)}
.bk-count{display:block;font-size:12px;font-weight:550;white-space:nowrap}.bk-count.bk-none{color:#a54e43}.bk-count.bk-partial{color:#9a6a1c}.bk-count.bk-done{color:#2f7a52}
.bk-chips{display:flex;gap:3px;margin-top:5px}.bk-chips i{width:12px;height:6px;border-radius:3px;background:#e4e9e1}.bk-chips i.on{background:#228a5a}
.bk-disabled{color:#a6b0a4;cursor:not-allowed}.bk-disabled:hover{background:none}
.bk-empty-action{margin:14px 0 0}
.bk-progress-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 16px;margin-bottom:12px}
.bk-progress-head h2{margin:0;font-size:15px}.bk-progress-head h2 small{font-weight:400;margin-left:6px}.bk-progress-head p{margin:0;font-size:12px;color:var(--muted)}
.bk-days{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
.bk-day{border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:grid;grid-template-columns:auto 1fr;grid-template-areas:"date status" "children children" "action action";gap:4px 10px;align-items:center}
.bk-day .bk-date{grid-area:date;display:flex;flex-direction:column;line-height:1.3}.bk-day .bk-date strong{font-size:13px}
.bk-day .bk-status{grid-area:status;justify-self:end;font-size:12px;font-weight:550;display:flex;flex-direction:column;align-items:end;line-height:1.3}
.bk-day .bk-children{grid-area:children;font-size:12px;color:#5f6f63;font-variant-numeric:tabular-nums}
.bk-day>a,.bk-day .bk-later{grid-area:action;justify-self:start;font-size:12px}.bk-later{color:var(--muted)}
.bk-day.bk-done{border-color:#cfe2d4;background:#f6faf6}.bk-day.bk-done .bk-status{color:#2f7a52}
.bk-day.bk-partial{border-color:#ecdfbb;background:#fcf9ef}.bk-day.bk-partial .bk-status{color:#9a6a1c}
.bk-day.bk-none .bk-status{color:#a54e43}
/* 称重膳调: a day's 称重记录 under its 就餐人数. */
.bk-day{grid-template-areas:"date status" "children children" "action action" "weigh weigh"}
.bk-day .bk-weigh{grid-area:weigh;display:flex;gap:8px;align-items:center;font-size:12px;color:#a54e43;border-top:1px dashed var(--line);padding-top:6px}.bk-day .bk-weigh.on{color:#2f7a52}
.bk-setup h2,.bk-preview h2{font-size:15px;margin:0 0 12px}.bk-preview h2 small{font-weight:400;margin-left:6px}
/* 制定就餐食谱: the 计划食谱 to choose from beside what it will copy, as 制定计划食谱 lays out its settings. */
.bk-new-layout{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:0 20px;align-items:start}.bk-new-layout.single{grid-template-columns:minmax(0,1fr)}
.bk-new-layout[data-plan-loading-part]>.plan-skeleton>div{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:0 20px;align-items:start}
.bk-new-main{min-width:0}
.bk-setup-date{max-width:220px}.bk-new-layout.single .bk-setup-group{max-width:420px}.bk-setup-date small{display:block;margin-top:4px;font-weight:400;color:var(--muted)}.bk-date-note,.bk-archived{margin:-4px 0 13px;font-size:12px}
.bk-sources{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;max-height:520px;overflow:auto}
.bk-source{border:1px solid var(--line);border-radius:10px;padding:10px 14px}.bk-source label{margin:0;cursor:pointer;display:flex;gap:10px;align-items:flex-start;font-weight:400}
.bk-source label input{width:14px;height:14px;flex:none;margin:5px 0 0}
.bk-source.selected{border-color:var(--green);box-shadow:inset 0 0 0 1px var(--green);background:#f6f9f5}
.bk-source.made{background:#fafbf8;color:#7e8b82}.bk-source.made label{cursor:default}.bk-source.made label,.bk-source.made .bk-source-made{padding-left:24px}
.bk-source-text{display:flex;flex-direction:column;gap:2px;min-width:0}
.bk-source-main{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-height:24px;font-size:13px}.bk-source-main strong{overflow-wrap:anywhere}
.bk-source-facts{display:flex;flex-wrap:wrap;gap:0 12px;font-size:12px;color:var(--muted)}
.bk-source-made{display:flex;flex-wrap:wrap;align-items:center;gap:0 6px;font-size:12px;margin-top:4px}
@media(max-width:1000px){.bk-new-layout,.bk-new-layout[data-plan-loading-part]>.plan-skeleton>div{grid-template-columns:minmax(0,1fr)}}
.bk-preview-days{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px}
.bk-preview-day{border:1px solid var(--line);border-radius:10px;padding:10px 12px}.bk-preview-day h3{font-size:13px;margin:0 0 6px}.bk-preview-day h3 small{margin-left:6px;font-weight:400}
.bk-preview-day ul{list-style:none;margin:0;padding:0;font-size:12px;line-height:1.7}.bk-preview-day li span{display:inline-block;min-width:3em;color:var(--muted);margin-right:4px}
.bk-next{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 18px}.bk-next p{margin:0;font-size:12px;color:var(--muted);flex:1 1 220px}.bk-next-actions{display:flex;flex-wrap:wrap;gap:10px}
/* 膳食调查报告（记账法）: a food group's subtotal closes it in red, as showFoodNutritionCountTable drew it. */
.legacy-table tr.legacy-type-total>*{border-bottom:2px solid #c0504e}.legacy-table td.legacy-left{text-align:left;white-space:normal;line-height:1.7}
.legacy-cost td:nth-child(2){min-width:90px;text-align:right}.legacy-cost td:last-child{text-align:left;color:var(--muted)}
.bk-usage td,.bk-usage th{text-align:center}.bk-usage tbody td:first-child{text-align:left}.bk-unregistered{color:#a54e43;font-size:11px}
/* 食物用量统计: a sticky header (separate borders, so the stuck cells keep theirs), under the top bar while the page
   scrolls; a table wider than the page scrolls in its own box, the header at its top. */
.bk-usage-card:has(.bk-fits){overflow:visible}
.bk-usage{border-collapse:separate;border-spacing:0;border-width:1px 0 0 1px}.bk-usage th,.bk-usage td{border-width:0 1px 1px 0}
.bk-usage thead{position:sticky;top:0;z-index:2}.bk-usage-wrap.bk-fits{overflow:visible}.bk-usage-wrap.bk-fits .bk-usage thead{top:var(--bk-sticky-top,0px)}
.bk-usage-wrap:not(.bk-fits){max-height:calc(100vh - 80px)}.bk-usage thead th{background:#f7f8f4}.bk-usage thead td{background:#fff}
@media print{.bk-usage thead{position:static}.bk-usage-wrap{max-height:none!important;overflow:visible!important}}
@media(max-width:760px){.bk-steps{grid-template-columns:1fr}.bk-days{grid-template-columns:1fr 1fr}.bk-next-actions{width:100%}.bk-next-actions .btn{flex:1}}
@media(max-width:420px){.bk-days{grid-template-columns:1fr}}
@media print{.bk-progress,.bk-steps{display:none}}
.bk-diff h2{font-size:15px;margin:0 0 6px}.bk-diff h2 small{font-weight:400;margin-left:6px}.bk-diff .helper{margin:0 0 10px}
.bk-diff ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;font-size:13px}
.bk-diff li{display:grid;grid-template-columns:minmax(180px,260px) 1fr;gap:4px 16px;padding:8px 12px;border-radius:8px;background:#fafbf8;border:1px solid var(--line)}
.bk-diff li>span:first-child{color:#5f6f63}.bk-diff-added{border-color:#cfe2d4!important}.bk-diff-removed{border-color:#ecd5cf!important;color:#a54e43}
@media(max-width:760px){.bk-diff li{grid-template-columns:1fr}}
@media print{.bk-diff{display:none}}

/* 采购用料管理 */
.purchase-filter{align-items:end}.purchase-filter label{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin:0}.purchase-search input{min-width:200px}
.purchase-toolbar{display:flex;justify-content:space-between;align-items:center;margin:0 0 10px;font-size:12px;color:var(--muted)}
.purchase-table td .numeric,.purchase-table th .numeric{display:block;text-align:right;font-variant-numeric:tabular-nums}.purchase-table td:last-child{text-align:right;white-space:nowrap}
.purchase-table td:first-child,.purchase-table th:first-child{width:36px}.purchase-table input[type=checkbox]{width:auto;margin:0}
.purchase-pagination{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:12px 0;font-size:12px;color:var(--muted)}.purchase-pagination select{display:inline-block;width:auto;margin:0 4px}
.purchase-legacy{font-size:12px}.purchase-legacy a{color:var(--green)}
.purchase-form{max-width:760px}.purchase-form-head{display:flex;flex-wrap:wrap;align-items:end;gap:12px 18px;margin-bottom:12px}.purchase-form-head label{margin:0;min-width:200px}
.purchase-rows{width:100%}.purchase-rows th{text-align:left}.purchase-rows th .helper{display:block;font-weight:400;white-space:normal}.purchase-rows td{padding:6px 8px}.purchase-rows input{margin:0}
.purchase-rows td:nth-child(2){width:220px}.purchase-rows td:last-child{width:70px;text-align:right}
.purchase-source{margin:0 0 12px}.purchase-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}
.purchase-confirm{max-width:460px}.purchase-dialog-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:16px}
@media(max-width:760px){.purchase-rows td:nth-child(2){width:120px}.purchase-search input{min-width:0}}
.purchase-rows .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.purchase-buttons{display:flex;flex-wrap:wrap;gap:8px}.purchase-toolbar{gap:12px;flex-wrap:wrap}
.purchase-filter select{width:auto;min-width:150px;margin:0}
.purchase-food{display:flex;align-items:center;gap:6px}.purchase-food input{flex:1;min-width:0}
.purchase-edit-rows td:first-child{width:170px}.purchase-edit-rows td:last-child{width:170px}
/* foodcheck.js: 按名称查找 / 按类型查找 */
.purchase-picker{width:min(720px,calc(100% - 32px));max-width:720px}.purchase-picker-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.purchase-picker-head h2{margin:0;font-size:16px}
.purchase-picker-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:12px}.purchase-picker-tabs button{background:none;padding:8px 14px;color:var(--muted);border-bottom:2px solid transparent}.purchase-picker-tabs button[aria-selected=true]{color:var(--green);border-color:var(--green);font-weight:600}
.purchase-picker-list{list-style:none;margin:10px 0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.purchase-picker li button{width:100%;text-align:left;background:#f6f8f4;border:1px solid var(--line);border-radius:7px;padding:7px 9px;font-size:12px;color:#263d32;display:flex;justify-content:space-between;gap:6px;overflow:hidden}
.purchase-picker li button small{color:var(--muted);white-space:nowrap}.purchase-picker li button:hover,.purchase-picker li button.on{border-color:var(--green);background:#eef3ec}
.purchase-picker-page{display:flex;align-items:center;justify-content:center;gap:10px;font-size:12px;color:var(--muted)}
.purchase-picker-types{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.purchase-picker-types>div{border:1px solid var(--line);border-radius:8px;padding:8px;max-height:340px;overflow:auto}
.purchase-picker-types p{margin:0 0 6px;font-size:12px;color:var(--muted)}.purchase-picker-types ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
@media(max-width:760px){.purchase-picker-list{grid-template-columns:repeat(2,minmax(0,1fr))}.purchase-picker-types{grid-template-columns:1fr}.purchase-edit-rows td:first-child,.purchase-edit-rows td:last-child{width:auto}}
.purchase-unit{display:flex;align-items:center;gap:12px;margin:0 0 12px;font-size:12px;color:var(--muted)}.purchase-unit label{display:flex;align-items:center;gap:4px;margin:0;font-weight:400;color:#263d32}.purchase-unit input{width:auto;margin:0}
.purchase-report .purchase-list{max-width:720px;margin:0 auto}.purchase-list th[scope=rowgroup]{background:#fafbf8;font-weight:500}.purchase-caption{text-align:center;font-size:12px;color:var(--muted);margin:0 0 10px}

/* Date fields: the calendar is date-picker.js (the original bootstrap-datepicker manner), not the browser's. */
html input[type=date]{padding-right:34px;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236d8274' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4.5' width='18' height='16.5' rx='2.5'/%3E%3Cpath d='M8 2.5v4M16 2.5v4M3 10h18'/%3E%3Cpath d='M8 14h.01M12 14h.01M16 14h.01M8 17.5h.01M12 17.5h.01' stroke-width='2.4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;background-size:16px 16px}
html input[type=date]::-webkit-calendar-picker-indicator{display:none}
html input[type=date][aria-expanded=true]{border-color:var(--green);box-shadow:0 0 0 3px #234c401f}
html input[type=date]:disabled{cursor:default;opacity:.6}
@supports(-moz-appearance:none){html input[type=date]{background-image:none;padding-right:11px}}
.dp{position:fixed;z-index:1000;width:296px;max-width:calc(100vw - 16px);box-sizing:border-box;padding:12px 12px 10px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 44px #0c31262e;color:#233c34;font-size:13px;line-height:1.4;user-select:none;-webkit-user-select:none;animation:dp-in .12s ease-out}
@keyframes dp-in{from{opacity:0}}
.dp button{font:inherit;border:0;cursor:pointer;color:inherit}.dp button:disabled{opacity:.35;cursor:default}
.dp button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.dp-arrow{position:absolute;box-sizing:border-box;width:12px;height:12px;margin-left:-6px;background:#fff;border:1px solid var(--line);transform:rotate(45deg);pointer-events:none}
.dp-arrow[data-side=below]{top:-7px;border-right-color:transparent;border-bottom-color:transparent;box-shadow:-2px -2px 4px -1px #0c312624}
.dp-arrow[data-side=above]{bottom:-7px;border-top-color:transparent;border-left-color:transparent;box-shadow:2px 2px 4px -1px #0c312624}
.dp-head{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:6px}
.dp-title{display:flex;align-items:center;gap:2px;font-weight:600;font-size:14px}
.dp-title button,.dp-title span{background:none;border-radius:7px;padding:5px 8px;font-weight:600}
.dp-title button:hover,.dp-nav:not(:disabled):hover{background:#edf2eb}
.dp .dp-nav{width:32px;height:32px;border-radius:8px;background:none;color:var(--green);font-size:20px;line-height:1}
.dp table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:13px}
.dp th{background:none;border:0;padding:6px 0 4px;text-align:center;font-size:11px;font-weight:500;color:#8a9485}.dp th.dp-weekend{color:#a3824a}
.dp td{padding:1px 0;border:0;text-align:center;line-height:1}
.dp-day{position:relative;display:block;width:100%;height:34px;border-radius:8px;background:none;font-variant-numeric:tabular-nums}
.dp-day:hover{background:#edf2eb}
.dp-day.other{color:#b2bcb3}
.dp-day.marked{background:#f6f0de;color:#7a5d22;font-weight:600}
.dp-day.marked::after{content:"";position:absolute;left:50%;bottom:4px;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--accent)}
.dp-day.marked.other{background:#faf7ee;color:#b9a77f}
.dp-day.in-range{background:#e9f0e7;border-radius:0}.dp-day.in-range.range-start{border-radius:8px 0 0 8px}.dp-day.in-range.range-end{border-radius:0 8px 8px 0}.dp-day.in-range.range-start.range-end{border-radius:8px}
.dp-day.today{box-shadow:inset 0 0 0 1.5px var(--accent);color:#8a6a2a;font-weight:600}
.dp-day.selected,.dp-day.selected:hover{background:var(--green);color:#fff;font-weight:600;box-shadow:none}
.dp-day.selected::after{background:#e8d9ae}
.dp-day[aria-disabled=true],.dp-day[aria-disabled=true]:hover{background:none;color:#cdd3cc;cursor:not-allowed;font-weight:400;box-shadow:none}
.dp-day.taken{text-decoration:line-through}
.dp-cells{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:6px 0 2px}
.dp-cell{height:46px;border-radius:9px;background:none}
.dp-cell:hover{background:#edf2eb}.dp-cell.other{color:#b2bcb3}.dp-cell.today{box-shadow:inset 0 0 0 1.5px var(--accent);color:#8a6a2a;font-weight:600}
.dp-cell.selected,.dp-cell.selected:hover{background:var(--green);color:#fff;font-weight:600}
.dp-cell[aria-disabled=true]{color:#cdd3cc;cursor:not-allowed;background:none}
.dp-foot{display:flex;align-items:center;gap:6px;border-top:1px solid var(--line);margin-top:8px;padding-top:9px}
.dp-legend{flex:1;display:flex;flex-wrap:wrap;gap:4px 10px;font-size:11px;color:var(--muted)}.dp-legend span{display:inline-flex;align-items:center;gap:5px}
.dp-legend i{display:inline-block;width:10px;height:10px;border-radius:3px}.dp-mark{background:#f6f0de;box-shadow:inset 0 0 0 1px #e3d3a6}.dp-taken{background:#f1f3f0;box-shadow:inset 0 0 0 1px #d9ddd7}
.dp-foot button{padding:6px 12px;border-radius:7px;background:#eaf0e9;color:var(--green);font-weight:550;font-size:12px}.dp-foot button:not(:disabled):hover{background:#dfe8dd}
.dp-foot .dp-clear{background:none;color:var(--muted)}.dp-foot .dp-clear:hover{background:#f1f4ef}
@media(pointer:coarse){.dp-day{height:38px}}
@media print{.dp{display:none!important}}
@media(prefers-reduced-motion:reduce){.dp{animation:none}}
/* 称重记录管理 (weightCreate.jsp): a 餐次 over its dishes, a dish over its foods, the weights in 斤 as text fields. */
.weighing-filter{align-items:end}.weighing-filter label{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin:0}
.weighing-weekday{color:var(--muted);font-size:12px;margin-left:2px}
.weighing-setup{display:flex;flex-wrap:wrap;gap:16px;align-items:end;margin:0 0 14px}.weighing-setup label{display:flex;flex-direction:column;gap:4px;margin:0}.weighing-setup select{min-width:240px}
.weighing-sheet{min-width:860px}.weighing-sheet th,.weighing-sheet td{vertical-align:middle}.weighing-sheet thead th{text-align:center}
.weighing-sheet .weighing-date{min-width:110px;line-height:1.5}.weighing-sheet .weighing-meal small{display:block;font-weight:400;color:var(--muted)}
.weighing-sheet td.numeric{text-align:right;font-variant-numeric:tabular-nums}.weighing-sheet .weighing-average{min-width:110px}
.weighing-input{width:100%;min-width:84px;max-width:130px;text-align:right;font-variant-numeric:tabular-nums;padding:5px 8px}
.weighing-input[aria-invalid=true]{border-color:#a94442;background:#fff7f6}
.weighing-counts{margin:0 0 12px}.weighing-form .data-note{margin:10px 0 0}
@media(max-width:640px){.weighing-setup select{min-width:0;width:100%}.weighing-setup label{flex:1 1 100%}}

