/* 家庭奖励积分 · 家长维护页样式（独立于孩子页面，手机优先） */
:root {
  --fr-ink: #20304a;
  --fr-muted: #6b7a90;
  --fr-line: #e3e6ec;
  --fr-paper: #ffffff;
  --fr-bg: #f3f5f8;
  --fr-accent: #3f5a7a;
  --fr-accent-dark: #2d4460;
  --fr-plus: #2f7d5b;
  --fr-minus: #b4553c;
  --fr-warn: #9a6a12;
  --fr-radius: 18px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  color: var(--fr-ink);
  background: var(--fr-bg);
  font-family: "PingFang SC", "Microsoft YaHei", "Nunito", system-ui, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}
button, input, select { font: inherit; color: inherit; }
button { cursor: pointer; }
a { color: inherit; text-decoration: none; }
.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; }
.skip-link { position: fixed; z-index: 100; top: 10px; left: 10px; padding: 10px 14px; border-radius: 10px; background: #fff; transform: translateY(-150%); }
.skip-link:focus { transform: translateY(0); }

.fr-header {
  position: relative;
  z-index: 10;
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 16px;
  background: rgba(255, 255, 255, .94);
  border-bottom: 1px solid var(--fr-line);
  backdrop-filter: blur(10px);
}
.fr-back { flex: none; padding: 8px 12px; border: 1px solid var(--fr-line); border-radius: 10px; font-size: 14px; font-weight: 700; color: var(--fr-accent); background: #fff; }
.fr-brand { display: flex; flex-direction: column; min-width: 0; }
.fr-brand b { font-size: 16px; }
.fr-brand small { color: var(--fr-muted); font-size: 12px; }

.fr-shell { max-width: 880px; margin: 0 auto; padding: 18px 14px 60px; display: flex; flex-direction: column; gap: 16px; }
.fr-kicker { display: block; color: var(--fr-accent); font-size: 12px; font-weight: 800; letter-spacing: .08em; }
.fr-card { padding: 20px; border: 1px solid var(--fr-line); border-radius: var(--fr-radius); background: var(--fr-paper); box-shadow: 0 6px 20px rgba(38, 50, 70, .05); }
.fr-card h1, .fr-card h2 { margin: 2px 0 0; font-size: 20px; line-height: 1.3; }
.fr-card-heading { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 10px 16px; }
.fr-card-heading > div { min-width: 0; }

.fr-save-error { min-height: 22px; margin: 8px 0 4px; color: var(--fr-minus); font-size: 14px; font-weight: 700; }

.fr-primary, .fr-secondary { min-height: 46px; padding: 0 18px; border-radius: 12px; font-weight: 800; }
.fr-primary { border: 0; color: #fff; background: var(--fr-accent); }
.fr-primary:hover { background: var(--fr-accent-dark); }
.fr-primary:disabled { color: #8792a3; background: #e6e9ee; cursor: not-allowed; }
.fr-secondary { border: 1px solid var(--fr-line); color: var(--fr-accent); background: #fff; }
.fr-chip { min-height: 38px; padding: 0 12px; border: 1px solid var(--fr-line); border-radius: 999px; font-size: 14px; font-weight: 700; color: var(--fr-accent); background: #fff; }
.fr-chip[aria-pressed="true"] { color: #fff; border-color: var(--fr-accent); background: var(--fr-accent); }
.fr-link { padding: 0; border: 0; background: transparent; color: var(--fr-accent); font-weight: 700; text-decoration: underline dotted; }

.fr-learner-select { display: flex; align-items: center; gap: 8px; font-size: 14px; }
.fr-learner-select select { min-height: 40px; padding: 0 10px; border: 1px solid var(--fr-line); border-radius: 10px; background: #fff; }
.fr-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-top: 16px; }
.fr-summary article { display: flex; flex-direction: column; align-items: center; padding: 12px 6px; border: 1px solid var(--fr-line); border-radius: 14px; background: #f8fafc; }
.fr-summary strong { font-size: 22px; line-height: 1.1; font-variant-numeric: tabular-nums; }
.fr-summary span { margin-top: 4px; color: var(--fr-muted); font-size: 12.5px; }
.fr-summary-main { border-color: #c8d7e6 !important; background: linear-gradient(140deg, #eaf2fb, #f6f9fd) !important; }
.fr-summary-main strong { color: var(--fr-accent-dark); font-size: 30px; }
.fr-summary-note { margin: 12px 0 0; color: var(--fr-muted); font-size: 13px; }

.fr-date-picker { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.fr-date-picker input[type="date"] { min-height: 38px; padding: 0 10px; border: 1px solid var(--fr-line); border-radius: 10px; background: #fff; font-size: 14px; }
.fr-day-lead { margin: 12px 0 0; color: var(--fr-muted); font-size: 13.5px; }
.fr-day-result { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.fr-result-chip { display: inline-flex; flex-direction: column; padding: 8px 12px; border: 1px solid var(--fr-line); border-radius: 12px; background: #f8fafc; font-size: 13px; }
.fr-result-chip b { font-weight: 800; }
.fr-result-chip i { font-style: normal; color: var(--fr-muted); font-variant-numeric: tabular-nums; }
.fr-result-chip.is-capped { border-color: #ead9a8; background: #fff8e6; }
.fr-result-chip.is-capped i { color: var(--fr-warn); }
.fr-result-total { display: inline-flex; align-items: baseline; gap: 8px; padding: 8px 14px; border-radius: 12px; color: #fff; background: var(--fr-accent); font-size: 13px; }
.fr-result-total strong { font-size: 18px; font-variant-numeric: tabular-nums; }
.fr-result-total i { font-style: normal; opacity: .85; }

.fr-categories { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 16px; }
.fr-category { margin: 0; padding: 10px 12px 6px; border: 1px solid var(--fr-line); border-radius: 14px; }
.fr-category legend { display: flex; align-items: baseline; gap: 8px; padding: 0 6px; font-weight: 800; }
.fr-category legend small { color: var(--fr-muted); font-size: 12px; font-weight: 600; }
.fr-item { display: grid; grid-template-columns: 26px minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 52px; padding: 6px 2px; border-top: 1px dashed var(--fr-line); cursor: pointer; }
.fr-item:first-of-type { border-top: 0; }
.fr-item input { width: 22px; height: 22px; margin: 0; accent-color: var(--fr-accent); }
.fr-item-copy { display: flex; flex-direction: column; min-width: 0; }
.fr-item-copy b { font-size: 15px; }
.fr-item-copy small { color: var(--fr-muted); font-size: 12px; line-height: 1.35; }
.fr-item em { font-style: normal; font-weight: 800; color: var(--fr-plus); font-variant-numeric: tabular-nums; }
.fr-item:has(input:checked) { background: #f1f7f3; border-radius: 10px; }

.fr-note-field, .fr-inline-form label { display: flex; flex-direction: column; gap: 6px; font-size: 14px; font-weight: 700; }
.fr-note-field { margin-top: 14px; }
.fr-note-field input, .fr-inline-form input, .fr-inline-form select { min-height: 44px; padding: 0 12px; border: 1px solid var(--fr-line); border-radius: 12px; background: #fff; font-weight: 500; }
.fr-inline-form { display: flex; flex-direction: column; gap: 12px; margin-top: 14px; }
.fr-inline-form .fr-primary { align-self: flex-start; }
.fr-custom-redeem { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 12px; }
.fr-hint { margin: 0; color: var(--fr-muted); font-size: 13px; }
.fr-status { margin: 12px 0 0; min-height: 20px; color: var(--fr-plus); font-size: 13.5px; font-weight: 700; }
.fr-status.is-flash { animation: fr-flash .9s ease; }
@keyframes fr-flash { from { background: #e6f4ec; } to { background: transparent; } }
.fr-button-row { display: flex; flex-wrap: wrap; gap: 8px; }

.fr-entry-list { display: flex; flex-direction: column; gap: 8px; margin-top: 14px; }
.fr-entry { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--fr-line); border-radius: 12px; background: #fafbfc; }
.fr-entry-copy { display: flex; flex-direction: column; min-width: 0; }
.fr-entry-copy b { font-size: 15px; }
.fr-entry-copy small { color: var(--fr-muted); font-size: 12.5px; }
.fr-entry strong { font-variant-numeric: tabular-nums; }
.fr-entry strong.is-plus { color: var(--fr-plus); }
.fr-entry strong.is-minus { color: var(--fr-minus); }
.fr-remove { min-height: 34px; padding: 0 10px; border: 1px solid var(--fr-line); border-radius: 9px; background: #fff; color: var(--fr-muted); font-size: 13px; }
.fr-remove:hover { color: var(--fr-minus); border-color: #e4c5bd; }
.fr-empty { margin: 12px 0 0; color: var(--fr-muted); font-size: 13.5px; }

.fr-table-wrap { overflow-x: auto; margin-top: 12px; }
.fr-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.fr-table th, .fr-table td { padding: 8px 8px; border-bottom: 1px solid var(--fr-line); text-align: left; vertical-align: top; }
.fr-table th { color: var(--fr-muted); font-size: 12px; font-weight: 700; white-space: nowrap; }
.fr-table td.fr-num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.fr-table td.fr-balance { font-weight: 800; }
.fr-table tr.is-selected td { background: #eef3f9; }
.fr-history-items { min-width: 200px; color: #3b4a60; }
.fr-subtitle { margin: 22px 0 0; font-size: 15px; }

.fr-settings-form { padding-top: 14px; border-top: 1px dashed var(--fr-line); }
.fr-settings-form input { max-width: 260px; }

.fr-rules-card summary { display: flex; flex-direction: column; cursor: pointer; list-style: none; }
.fr-rules-card summary::-webkit-details-marker { display: none; }
.fr-rules-card summary h2::after { content: " ▾"; color: var(--fr-muted); font-size: 14px; }
.fr-rules-card[open] summary h2::after { content: " ▴"; }
.fr-rule-group { margin-top: 16px; }
.fr-rule-group h3 { margin: 0 0 8px; font-size: 14.5px; color: var(--fr-accent-dark); }
.fr-rule { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px 12px; margin: 0; padding: 8px 0; border-top: 1px dashed var(--fr-line); font-size: 13.5px; }
.fr-rule b { font-weight: 800; }
.fr-rule em { font-style: normal; color: var(--fr-plus); font-weight: 800; white-space: nowrap; }
.fr-rule span { grid-column: 1 / -1; color: var(--fr-muted); font-size: 12.5px; }
.fr-footnote { margin: 4px 4px 0; color: var(--fr-muted); font-size: 12.5px; text-align: center; }

@media (max-width: 640px) {
  .fr-shell { padding: 12px 10px 48px; }
  .fr-card { padding: 16px 14px; }
  .fr-summary { grid-template-columns: 1.15fr repeat(3, minmax(0, 1fr)); gap: 5px; margin-top: 12px; }
  .fr-summary article { padding: 10px 3px; border-radius: 10px; }
  .fr-summary strong { font-size: 19px; }
  .fr-summary-main strong { font-size: 24px; }
  .fr-summary span { font-size: 11.5px; }
  .fr-learner-card h2 { font-size: 18px; }
  .fr-learner-select { font-size: 12px; }
  .fr-learner-select select { min-height: 36px; }
  .fr-categories { grid-template-columns: minmax(0, 1fr); }
  .fr-custom-redeem { grid-template-columns: minmax(0, 1fr); }
  .fr-brand small { display: none; }
}

/* 分区标签：登记 / 兑换 / 汇总分析 / 设置 */
.fr-tabs { position: sticky; top: 0; z-index: 5; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; padding: 6px; border: 1px solid var(--fr-line); border-radius: 16px; background: rgba(255,255,255,.96); backdrop-filter: blur(6px); box-shadow: 0 6px 18px rgba(38,50,70,.06); }
.fr-tabs button { display: grid; grid-template-columns: 26px minmax(0, 1fr); grid-template-rows: auto auto; column-gap: 8px; align-items: center; min-height: 56px; padding: 6px 10px; border: 0; border-radius: 12px; background: transparent; color: var(--fr-accent); text-align: left; cursor: pointer; }
.fr-tabs button > span { grid-row: 1 / span 2; font-size: 20px; text-align: center; }
.fr-tabs button b { font-size: 14px; font-weight: 800; }
.fr-tabs button small { color: var(--fr-muted); font-size: 11px; }
.fr-tabs button[aria-selected="true"] { color: #fff; background: var(--fr-accent); }
.fr-tabs button[aria-selected="true"] small { color: rgba(255,255,255,.85); }
.fr-tabs button:focus-visible { outline: 3px solid #9fb6cf; outline-offset: 2px; }
.fr-panel { display: grid; gap: 16px; }
.fr-panel[hidden] { display: none; }

/* 兑换档位 */
.fr-tier-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; margin-bottom: 14px; }
.fr-tier { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 10px 12px; border: 1px solid var(--fr-line); border-radius: 14px; background: #f8fafc; color: var(--fr-ink); text-align: left; cursor: pointer; }
.fr-tier i { font-style: normal; font-size: 20px; }
.fr-tier b { font-size: 14px; }
.fr-tier em { font-style: normal; color: var(--fr-muted); font-size: 12px; }
.fr-tier small { margin-top: 4px; color: var(--fr-minus); font-size: 12px; font-weight: 700; }
.fr-tier.is-ready { background: #edf8f1; border-color: #bcdac9; }
.fr-tier.is-ready small { color: var(--fr-plus); }
.fr-tier.is-selected { outline: 2px solid var(--fr-accent); outline-offset: 1px; }

/* 汇总分析 */
.fr-trend { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 6px; height: 170px; align-items: end; }
.fr-trend-week { display: grid; grid-template-rows: auto 1fr auto; align-items: end; height: 100%; text-align: center; }
.fr-trend-week strong { color: var(--fr-plus); font-size: 12px; font-variant-numeric: tabular-nums; }
.fr-trend-bars { display: flex; align-items: flex-end; justify-content: center; gap: 3px; height: 100%; padding: 4px 0; }
.fr-trend-bars i { display: block; width: 14px; height: var(--fr-bar, 0%); min-height: 2px; border-radius: 4px 4px 0 0; }
.fr-trend-earned { background: linear-gradient(180deg, #6fb59a, #3f8f74); }
.fr-trend-redeemed { background: #f1cfc3; }
.fr-trend-week small { color: var(--fr-muted); font-size: 11px; }
.fr-trend-week.is-current small { color: var(--fr-accent); font-weight: 800; }
.fr-window-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-bottom: 14px; }
.fr-window-metrics span { display: flex; flex-direction: column; align-items: center; padding: 10px 6px; border: 1px solid var(--fr-line); border-radius: 12px; background: #f8fafc; }
.fr-window-metrics strong { font-size: 18px; font-variant-numeric: tabular-nums; }
.fr-window-metrics small { color: var(--fr-muted); font-size: 12px; }
.fr-category-bars, .fr-item-freq { display: grid; gap: 8px; }
.fr-category-bar, .fr-item-row { display: grid; grid-template-columns: 120px minmax(0, 1fr) auto; grid-template-areas: "name track num" "name note note"; column-gap: 10px; align-items: center; }
.fr-item-row { grid-template-areas: "name track num"; }
.fr-category-bar b, .fr-item-row b { grid-area: name; font-size: 13.5px; }
.fr-category-track { grid-area: track; height: 12px; border-radius: 999px; background: #e9edf2; overflow: hidden; }
.fr-category-track i { display: block; width: var(--fr-bar, 0%); height: 100%; border-radius: 999px; background: #8fa7c2; transition: width .4s ease; }
.is-sport .fr-category-track i { background: #5aa886; }
.is-chore .fr-category-track i { background: #d9a06a; }
.is-study .fr-category-track i { background: #6d8cc7; }
.is-self .fr-category-track i { background: #a583c6; }
.fr-category-bar em, .fr-item-row em { grid-area: num; font-style: normal; font-size: 12.5px; font-weight: 800; font-variant-numeric: tabular-nums; }
.fr-category-bar small { grid-area: note; color: var(--fr-muted); font-size: 12px; }
.fr-item-row.is-zero { opacity: .6; }
.fr-stat-columns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.fr-stat-columns .fr-subtitle { margin-top: 0; }
.fr-stat-list { display: grid; gap: 6px; }
.fr-stat-row { display: flex; justify-content: space-between; gap: 10px; padding: 7px 10px; border: 1px solid var(--fr-line); border-radius: 10px; font-size: 13px; }
.fr-stat-row em { font-style: normal; font-weight: 800; white-space: nowrap; }
.fr-stat-row.is-zero { opacity: .55; }

@media (max-width: 640px) {
  .fr-tabs { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px; padding: 4px; border-radius: 14px; }
  .fr-tabs button { grid-template-columns: 1fr; grid-template-rows: auto auto; justify-items: center; min-height: 54px; padding: 6px 4px; text-align: center; }
  .fr-tabs button > span { grid-row: 1; font-size: 18px; }
  .fr-tabs button small { display: none; }
  .fr-trend { height: 140px; }
  .fr-trend-bars i { width: 10px; }
  .fr-window-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fr-category-bar, .fr-item-row { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name num" "track track" "note note"; row-gap: 4px; }
  .fr-item-row { grid-template-areas: "name num" "track track"; }
  .fr-stat-columns { grid-template-columns: 1fr; }
}

/* ---------- 孩子登记 → 家长确认 ---------- */
.fr-tab-badge { display: inline-grid; place-items: center; min-width: 18px; height: 18px; margin-left: 4px; padding: 0 5px; border-radius: 999px; background: #e0993a; color: #fff; font-size: 11px; font-style: normal; font-weight: 800; line-height: 1; vertical-align: 2px; }
.fr-tabs button[aria-selected="true"] .fr-tab-badge { background: #fff; color: var(--fr-accent); }
.fr-review-card { border-color: #f0d9a8; background: linear-gradient(180deg, #fffaf0, #fff); }
.fr-review-days { display: flex; flex-direction: column; gap: 12px; margin-top: 12px; }
.fr-review-day { padding: 10px 12px; border: 1px solid #f0e2c4; border-radius: 14px; background: #fff; }
.fr-review-head { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px; padding-bottom: 6px; }
.fr-review-head b { font-size: 15px; }
.fr-review-head small { color: var(--fr-muted); font-size: 12px; }
.fr-review-item { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto; align-items: center; gap: 8px; min-height: 52px; padding: 6px 0; border-top: 1px dashed var(--fr-line); }
.fr-review-copy { display: flex; flex-direction: column; min-width: 0; }
.fr-review-copy b { font-size: 15px; }
.fr-review-copy small { color: var(--fr-muted); font-size: 12px; line-height: 1.35; }
.fr-review-item em { font-style: normal; font-weight: 800; color: var(--fr-plus); font-variant-numeric: tabular-nums; }
.fr-review-approve, .fr-review-reject { min-height: 40px; padding: 0 14px; border-radius: 10px; font-size: 14px; font-weight: 800; cursor: pointer; }
.fr-review-approve { border: 0; color: #fff; background: var(--fr-plus); }
.fr-review-approve:hover { background: #276a4d; }
.fr-review-reject { border: 1px solid #e4c5bd; color: var(--fr-minus); background: #fff; }
.fr-review-reject:hover { background: #fbf1ee; }
.fr-item.is-pending { background: #fff8e6; border-radius: 10px; }
.fr-item.is-pending:has(input:checked) { background: #f1f7f3; }
.fr-item-tag { display: inline-block; width: fit-content; margin-top: 3px; padding: 1px 8px; border-radius: 999px; background: #ffe9ad; color: #7a5600; font-size: 11px; font-weight: 800; }
.fr-item-tag.is-rejected { background: #fbe4e4; color: #a14343; }
@media (max-width: 640px) {
  .fr-review-head { grid-template-columns: minmax(0, 1fr) auto; }
  .fr-review-head small { grid-column: 1 / -1; }
  .fr-review-item { grid-template-columns: minmax(0, 1fr) auto; }
  .fr-review-item em { grid-column: 2; grid-row: 1; }
  .fr-review-approve, .fr-review-reject { grid-row: 2; }
  .fr-review-approve { grid-column: 1; justify-self: start; min-width: 120px; }
  .fr-review-reject { grid-column: 2; }
}

/* 跨设备连接：一名孩子一份共享账本。 */
.fr-sync-description { margin: 12px 0 8px; font-size: 14px; }
.fr-sync-card .fr-primary { margin-top: 14px; }
.fr-sync-code-label { display: block; margin: 12px 0 6px; font-size: 14px; font-weight: 700; }
.fr-sync-code-row { display: flex; gap: 8px; margin-bottom: 10px; }
.fr-sync-code-row input { flex: 1; width: 0; min-width: 0; min-height: 46px; padding: 10px 12px; border: 1px solid var(--fr-line); border-radius: 12px; background: #f8fafc; font-family: ui-monospace, monospace; font-size: 16px; }
.fr-sync-code-row button { flex: none; }
.fr-sync-status { overflow-wrap: anywhere; }
.fr-sync-status.is-error { color: var(--fr-minus); }

/* 常用确认优先，补记和其他家长管理分开。 */
.fr-review-empty { display: flex; flex-direction: column; gap: 5px; margin: 18px 0 6px; padding: 20px 16px; border: 1px dashed #d8e5da; border-radius: 14px; background: #f6faf6; }
.fr-review-empty[hidden] { display: none; }
.fr-review-empty b { color: var(--fr-plus); font-size: 18px; }
.fr-review-empty span { color: var(--fr-muted); font-size: 14px; }
.fr-role-note { margin: 0; padding: 12px 16px; border: 1px solid #ead9a8; border-radius: 12px; background: #fff8e6; color: #775817; font-size: 14px; }
.fr-manual-entry { border: 1px solid var(--fr-line); border-radius: var(--fr-radius); background: #fff; }
.fr-manual-entry > summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 14px; padding: 16px 20px; cursor: pointer; list-style: none; }
.fr-manual-entry > summary::-webkit-details-marker { display: none; }
.fr-manual-entry > summary b::before { content: '▸ '; color: var(--fr-muted); }
.fr-manual-entry[open] > summary b::before { content: '▾ '; }
.fr-manual-entry > summary span { color: var(--fr-muted); font-size: 13px; }
.fr-manual-entry > summary:focus-visible { outline: 3px solid #9fb6cf; outline-offset: -3px; border-radius: var(--fr-radius); }
.fr-manual-content { display: grid; gap: 12px; padding: 0 10px 10px; }
.fr-manual-content .fr-card { box-shadow: none; }
.fr-family-card .fr-status.is-error { color: var(--fr-minus); }
.fr-family-card .fr-hint + .fr-hint { margin-top: 6px; }
#frParentJoinCode { min-width: 0; width: 100%; }
#frReadOnlyNote[hidden] { display: none; }

.fr-learner-select[hidden] { display: none; }

#frDayTitle { scroll-margin-top: 84px; }

/* Editable family reward offers. */
.fr-catalog-editor { margin: 16px 0 20px; padding: 14px; border: 1px solid var(--fr-line); border-radius: 14px; background: #f8fafc; }
.fr-catalog-editor > summary { cursor: pointer; color: var(--fr-accent); font-size: 16px; font-weight: 800; }
.fr-catalog-list { display: grid; gap: 12px; margin: 16px 0; }
.fr-catalog-row { display: grid; grid-template-columns: minmax(0, 1fr) 120px auto; gap: 10px; align-items: end; }
.fr-catalog-row label { display: grid; gap: 5px; min-width: 0; color: var(--fr-muted); font-size: 14px; }
.fr-catalog-row input { width: 100%; min-width: 0; min-height: 46px; padding: 10px; border: 1px solid var(--fr-line); border-radius: 10px; color: var(--fr-ink); background: #fff; font: inherit; font-size: 16px; }
.fr-catalog-actions { display: flex; flex-wrap: wrap; gap: 8px; }
@media (max-width: 520px) {
  .fr-catalog-row { grid-template-columns: minmax(0, 1fr) 105px; padding-bottom: 12px; border-bottom: 1px solid var(--fr-line); }
  .fr-catalog-remove { grid-column: 2; }
}

/* 扣分内容可以较长，手机上仍完整换行。 */
.fr-deduction-fields { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.fr-deduction-fields input { width:100%; min-width:0; }
.fr-deduction-entry b { overflow-wrap:anywhere; }
@media (max-width:380px) { .fr-deduction-fields { grid-template-columns:1fr; } }

/* 家长积分设置与补课 */
.fr-tabs { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.fr-learning-fields { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.fr-learning-fields label, .fr-point-rule-row label { display:grid; gap:6px; min-width:0; }
.fr-learning-fields input, .fr-learning-fields select, .fr-point-rule-row input, .fr-point-rule-row textarea, .fr-point-rule-row select, #frTutorContent { width:100%; min-width:0; font:inherit; padding:10px 12px; border:1px solid #d4dce6; border-radius:10px; background:#fff; color:#26384e; box-sizing:border-box; }
.fr-point-rule-row { border:1px solid #dce3eb; border-radius:12px; padding:14px; margin:12px 0; display:grid; grid-template-columns:minmax(0,2fr) minmax(90px,1fr); gap:12px; }
.fr-point-rule-row .fr-rule-wide { grid-column:1/-1; }
.fr-point-rule-row legend { padding:0 5px; font-size:.9rem; color:#425975; }
.fr-rule-editor-group, .fr-tutor-add { margin:16px 0; }
.fr-rule-editor-group summary, .fr-tutor-add summary { cursor:pointer; font-weight:700; padding:12px 0; }
.fr-course-cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:12px; }
.fr-course-card { background:#f3f7fc; border:1px solid #dce6f1; border-radius:14px; padding:16px; }
.fr-course-card h3 { margin:0 0 8px; overflow-wrap:anywhere; }
.fr-course-metrics { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin:16px 0 0; }
.fr-course-metrics dt { font-size:.8rem; color:#5f7085; }
.fr-course-metrics dd { margin:5px 0 0; font-size:1.6rem; font-weight:750; }
.fr-course-metrics div:last-child dd { color:#266c56; }
.fr-tutor-filters { margin-bottom:12px; }
.fr-tutor-table { min-width:650px; }
.fr-tutor-table td:nth-child(5) { min-width:170px; white-space:normal; overflow-wrap:anywhere; }
.fr-tutor-table tr.is-void { color:#737e8c; background:#f7f8fa; }
@media(max-width:560px) {
  .fr-tabs { grid-template-columns:repeat(5,minmax(0,1fr)); gap:4px; }
  .fr-tabs button { min-width:0; padding:10px 2px; }
  .fr-tabs small { display:none; }
  .fr-tabs b { font-size:.8rem; }
  .fr-course-cards { grid-template-columns:1fr; }
}

/* 家庭积分和补课是并列的独立页面。 */
.fr-section-tabs { display:flex; gap:6px; padding:5px; margin-bottom:16px; border:1px solid var(--fr-line); border-radius:14px; background:#edf2f8; }
.fr-section-tabs a { flex:1; padding:12px 16px; text-align:center; color:var(--fr-accent); border-radius:10px; font-weight:750; text-decoration:none; }
.fr-section-tabs a[aria-current="page"] { background:#fff; box-shadow:0 2px 8px #26324612; }
body[data-page="family-rewards"] .fr-tabs { grid-template-columns:repeat(4,minmax(0,1fr)); }
.tutor-tabs.fr-tabs { grid-template-columns:repeat(3,minmax(0,1fr)); }
.tutor-checklist { display:grid; gap:12px; margin:18px 0; }
.tutor-check-row { display:flex; align-items:center; gap:16px; padding:18px; border:1px solid #d4dfeb; border-radius:14px; background:#fff; cursor:pointer; }
.tutor-check-row.is-done { border-color:#87b6a4; background:#f0faf5; }
.tutor-check-row input[type="checkbox"] { width:26px; height:26px; flex-shrink:0; accent-color:#347e61; cursor:pointer; }
.tutor-check-copy { display:grid; gap:6px; overflow-wrap:anywhere; }
.tutor-check-copy > span, .tutor-check-copy small { color:var(--fr-muted); }
.tutor-check-copy > b { font-size:1.05rem; }
#tutorContent { width:100%; padding:10px 12px; border:1px solid #d4dce6; border-radius:10px; font:inherit; box-sizing:border-box; }
.fr-course-card > button { margin-top:14px; }
@media(max-width:560px) { .tutor-check-row { padding:14px; gap:12px; } .fr-section-tabs a { padding:11px 8px; } }

/* 课程表：直接录入，操作随课程放置。 */
body[data-page="family-tutoring"] .fr-shell { max-width:1200px; }
.tutor-course-table { min-width:1060px; table-layout:fixed; }
.tutor-course-table th:nth-child(1) { width:150px; }
.tutor-course-table th:nth-child(2) { width:130px; }
.tutor-course-table th:nth-child(3) { width:230px; }
.tutor-course-table th:nth-child(4) { width:88px; }
.tutor-course-table th:nth-child(5), .tutor-course-table th:nth-child(6), .tutor-course-table th:nth-child(7) { width:78px; }
.tutor-course-table th:nth-child(8) { width:170px; }
.tutor-course-table td, .tutor-course-table tbody th { padding:14px 10px; vertical-align:middle; overflow-wrap:anywhere; white-space:normal; }
.tutor-course-table tbody th { color:var(--fr-ink); font-size:14px; }
.tutor-course-table thead th { padding:12px 10px; background:#f1f5fa; }
.tutor-course-table tr > :first-child { position:sticky; left:0; z-index:1; background:#fff; box-shadow:1px 0 0 var(--fr-line); }
.tutor-course-table thead tr > :first-child { background:#f1f5fa; }
.tutor-course-table tr.tutor-course-editor > * { background:#f2f7ff; vertical-align:top; }
.tutor-course-table input, .tutor-course-table textarea { width:100%; min-width:0; min-height:44px; border:1px solid #bdcde0; border-radius:8px; background:#fff; color:var(--fr-ink); padding:9px; font:inherit; font-size:16px; box-sizing:border-box; }
.tutor-course-table textarea { resize:vertical; }
.tutor-course-table .tutor-number { text-align:center; font-variant-numeric:tabular-nums; }
.tutor-row-actions { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.tutor-row-actions button { padding:9px 10px; min-height:40px; font-size:13px; white-space:nowrap; }
.tutor-low-label { display:block; margin-top:4px; font-size:11px; color:#8c5722; }
.tutor-course-table .is-low td:nth-child(7) strong { color:#8c5722; }
.tutor-course-table .tutor-course-empty { padding:30px 16px; color:var(--fr-muted); }
.tutor-course-table-wrap:focus-visible { outline:3px solid #9fb6cf; outline-offset:3px; border-radius:8px; }
.tutor-purchase-card[hidden] { display:none; }
.tutor-table-scroll-hint { display:none; }
.tutor-course-card, .tutor-purchase-card { scroll-margin-top:86px; }
@media(max-width:1120px) { .tutor-table-scroll-hint { display:block; } }
@media(max-width:560px) {
  .tutor-course-card.fr-card { padding:16px 10px; }
  .tutor-course-table th:nth-child(1) { width:135px; }
  .tutor-course-table td, .tutor-course-table tbody th { padding:12px 8px; }
}

/* 手机录入使用独立纵向表单；电脑保留逐行编辑。 */
.tutor-mobile-editor[hidden] { display:none; }
.tutor-editor-label, .tutor-mobile-meta, .tutor-mobile-course-detail { display:none; }
.tutor-mobile-editor { scroll-margin-top:88px; }
@media(max-width:680px) {
  body[data-page="family-tutoring"] .fr-shell { min-width:0; }
  body[data-page="family-tutoring"] .fr-panel, .tutor-course-card { min-width:0; }
  .tutor-table-scroll-hint { display:none; }
  .tutor-course-table-wrap { overflow:visible; }
  .tutor-course-table { min-width:0; width:100%; table-layout:fixed; }
  .tutor-course-table tr > :nth-child(2), .tutor-course-table tr > :nth-child(3), .tutor-course-table tr > :nth-child(4), .tutor-course-table tr > :nth-child(5), .tutor-course-table tr > :nth-child(6) { display:none; }
  .tutor-course-table th:nth-child(1) { width:auto; }
  .tutor-course-table th:nth-child(7) { width:50px; }
  .tutor-course-table th:nth-child(8) { width:105px; }
  .tutor-course-table tr > :first-child { position:static; box-shadow:none; }
  .tutor-course-table td, .tutor-course-table tbody th { padding:12px 4px; }
  .tutor-course-table thead th { padding:12px 4px; font-size:12px; }
  .tutor-course-table .tutor-row-actions { display:grid; grid-template-columns:1fr 1fr; gap:5px; }
  .tutor-course-table .tutor-row-actions button { min-height:44px; padding:8px 4px; font-size:13px; }
  .tutor-course-table .tutor-row-actions button:last-child { grid-column:1/-1; }
  .tutor-mobile-meta { display:block; margin-top:7px; font-size:11px; line-height:1.7; font-weight:400; color:var(--fr-muted); }
  .tutor-mobile-course-detail { display:block; margin-top:8px; font-size:12px; font-weight:400; }
  .tutor-mobile-course-detail summary { min-height:30px; cursor:pointer; color:var(--fr-accent); }
  .tutor-mobile-course-detail p { margin:5px 0; line-height:1.6; white-space:normal; }
  .tutor-mobile-editor { padding:18px 14px; border-color:#adc4df; }
  .tutor-mobile-editor table, .tutor-mobile-editor tbody, .tutor-mobile-editor tr { display:block; width:100%; }
  .tutor-mobile-editor td { display:block; padding:0; margin:16px 0; border:0; }
  .tutor-mobile-editor .tutor-editor-metric { display:none; }
  .tutor-mobile-editor .tutor-editor-label { display:block; margin-bottom:7px; color:var(--fr-ink); font-weight:650; font-size:14px; }
  .tutor-mobile-editor input, .tutor-mobile-editor textarea { width:100%; box-sizing:border-box; min-height:48px; border:1px solid #bdcde0; border-radius:10px; padding:12px; background:#fff; color:var(--fr-ink); font:inherit; font-size:16px; }
  .tutor-mobile-editor textarea { min-height:100px; resize:vertical; }
  .tutor-mobile-editor .tutor-row-actions { display:grid; grid-template-columns:2fr 1fr; gap:10px; }
  .tutor-mobile-editor .tutor-row-actions button { min-height:48px; font-size:16px; }
  .tutor-purchase-card .fr-learning-fields { grid-template-columns:1fr; }
  .tutor-purchase-card input, .tutor-purchase-card select, .tutor-purchase-card button { min-height:48px; font-size:16px; }
  body[data-page="family-tutoring"] input:focus-visible, body[data-page="family-tutoring"] textarea:focus-visible { outline:3px solid #a8c7e8; outline-offset:2px; }
}

.tutor-schedule-editor { min-width:0; border:0; padding:12px 0 0; margin:0; }
.tutor-schedule-editor legend { font-size:13px; font-weight:700; padding-top:12px; }
.tutor-weekdays { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px; }
.tutor-weekdays label { display:flex; align-items:center; gap:4px; min-height:38px; padding:4px 6px; border:1px solid #bdcde0; border-radius:8px; background:#fff; cursor:pointer; font-size:13px; }
.tutor-schedule-editor .tutor-weekdays input { width:18px; min-width:18px; height:18px; min-height:18px; margin:0; padding:0; accent-color:#347e61; }
.tutor-schedule-times { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:10px; }
.tutor-schedule-times label { display:grid; gap:6px; min-width:0; font-size:12px; }
.tutor-schedule-times input { min-width:0; }
.tutor-course-schedule { display:block; margin-top:8px; font-size:12px; color:var(--fr-accent); }
.tutor-lesson-time { color:var(--fr-accent); font-size:1.1rem; }
@media(max-width:680px) {
  .tutor-weekdays label { min-height:44px; padding:6px 9px; font-size:14px; }
  .tutor-schedule-times label { font-size:14px; }
  .tutor-schedule-editor .tutor-weekdays input { width:20px; min-width:20px; height:20px; min-height:20px; }
}

.fr-rule-remove { justify-self:start; min-height:44px; color:#a43b36; }
.fr-rule-editor-group > button { margin:8px 0 12px; min-height:44px; }
