/*
 * 관리자 "교무실 자석 보드" 디자인 (2026-09-27 리디자인 1차)
 * 방향: .impeccable/surfaces/app-views-home-index-html-erb.md
 * 적용 범위: 사이드바(전체 공통), 대시보드(home), 학생 목록(students#index).
 * 색은 보드마카 4색만 쓴다. 상태 색(빨강/초록)은 점과 가장자리에만, 0은 회색.
 */
:root {
  --b-frame: #e6eaee;      /* 강철 프레임 */
  --b-frame-hover: #d9dfe5;
  --b-board: #fbfcfd;      /* 에나멜 보드 */
  --b-paper: #ffffff;
  --b-ink: #1d2733;        /* 본문 */
  --b-ink-2: #46525f;      /* 보조 (7:1) */
  --b-ink-3: #626d79;      /* 약한 글자 (4.9:1) */
  --b-ghost: #9aa4ae;      /* 글자 아닌 표시 전용 */
  --b-line: #d3d9df;
  --b-line-soft: #e8ecf0;
  --b-line-strong: #b9c1c9;
  --b-blue: #1f4fb8;
  --b-blue-hover: #1a44a0;
  --b-blue-wash: #eaf0fb;
  --b-red: #c8321f;
  --b-green: #1e7a4c;
  --b-r: 6px;
  --b-ease: cubic-bezier(.16, 1, .3, 1);
  --b-sans: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Hiragino Sans", "Noto Sans JP", sans-serif;

  /* 기존 사이드바 변수도 보드 세계로 */
  --sidebar-bg: var(--b-frame);
  --sidebar-fg: var(--b-ink);
  --sidebar-muted: var(--b-frame-hover);
  --sidebar-muted-fg: var(--b-ink-2);
  --sidebar-accent: var(--b-frame-hover);
  --sidebar-accent-fg: var(--b-ink);
  --sidebar-border: var(--b-line-strong);
  --sidebar-ring: var(--b-blue);
}
/* 교회 테마: 파랑 대신 인디고 (기존 church 테마 규칙과 같은 색) */
body.theme-church { --b-blue: #4338ca; --b-blue-hover: #3730a3; --b-blue-wash: #eef2ff; }

/* ================= 사이드바 ================= */
#sidebar nav, #mobile-menu nav { font-family: var(--b-sans); }
#sidebar > div { background: var(--b-frame); }
.sb-sec {
  margin: 0 0 4px; padding: 0 10px;
  font-size: 13px; font-weight: 600; line-height: 1.5; color: var(--b-ink-3);
}
.sb-link {
  display: flex; align-items: center; gap: 10px; width: 100%;
  min-height: 36px; padding: 0 10px; margin: 1px 0;
  font-size: 15px; line-height: 1.3; text-align: left; text-decoration: none;
  color: var(--b-ink-2); background: transparent; border: 0; border-radius: var(--b-r);
  transition: background .15s, color .15s; cursor: pointer;
}
.sb-link:hover { background: var(--b-frame-hover); color: var(--b-ink); }
.sb-link:focus-visible, .sb-sub:focus-visible { outline: 2px solid var(--b-blue); outline-offset: 1px; }
.sb-link svg { width: 18px; height: 18px; flex: none; stroke-width: 1.6; }
.sb-link .sb-caret { margin-left: auto; width: 16px; height: 16px; color: var(--b-ink-3); transition: transform .2s var(--b-ease); }
.sb-link.is-active {
  background: var(--b-paper); color: var(--b-ink); font-weight: 600;
  box-shadow: 0 0 0 1px var(--b-line-strong), 0 1px 2px rgba(40, 55, 70, .08);
}
.sb-link.is-active svg { color: var(--b-blue); }
.sb-subs { margin: 2px 0 4px 19px; padding-left: 12px; border-left: 1px solid var(--b-line-strong); }
.sb-sub {
  display: flex; align-items: center; gap: 6px; min-height: 32px; padding: 0 10px; margin: 1px 0;
  font-size: 15px; color: var(--b-ink-2); text-decoration: none; border-radius: var(--b-r);
  transition: background .15s, color .15s;
}
.sb-sub:hover { background: var(--b-frame-hover); color: var(--b-ink); }
.sb-sub.is-active { color: var(--b-ink); font-weight: 600; }
.sb-sub.is-active::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--b-blue); margin-left: -16px; margin-right: 4px; flex: none; }
.sb-sub.is-disabled { color: var(--b-ink-3); cursor: not-allowed; }
.sb-sub.is-disabled:hover { background: transparent; color: var(--b-ink-3); }
.sb-tag { margin-left: auto; font-size: 12px; font-weight: 500; color: var(--b-ink-3); border: 1px solid var(--b-line-strong); border-radius: 4px; padding: 0 5px; line-height: 18px; }
.sb-badge {
  margin-left: auto; min-width: 22px; padding: 0 6px; text-align: center;
  font-size: 13px; font-weight: 600; line-height: 20px; font-variant-numeric: tabular-nums;
  color: var(--b-ink); background: var(--b-paper); border-radius: 10px; box-shadow: 0 0 0 1px var(--b-line-strong);
}
#mobile-menu .sb-link.is-active { background: var(--b-frame); box-shadow: none; }

/* ================= 보드 공통 ================= */
.bd {
  font-family: var(--b-sans); font-size: 15px; line-height: 1.5; color: var(--b-ink);
  font-feature-settings: "tnum" 1;
}
.bd ::selection { background: #cddcf6; color: var(--b-ink); }
.bd :focus-visible { outline: 2px solid var(--b-blue); outline-offset: 2px; }
.bd .num { font-variant-numeric: tabular-nums; letter-spacing: -0.01em; }
.bd .sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.bd svg.i { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.bd-page { padding: 20px 24px 40px; }
.bd-head { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; margin: 2px 2px 14px; }
.bd-head h1 { font-size: 22px; line-height: 1.3; font-weight: 700; margin: 0; letter-spacing: -0.02em; color: var(--b-ink) !important; }
.bd-head p { margin: 0; color: var(--b-ink-3); font-size: 13px; }
.bd-head .right { margin-left: auto; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.bd-board {
  background: var(--b-board); border: 1px solid var(--b-line-strong); border-radius: var(--b-r);
  box-shadow: 0 2px 6px -2px rgba(40, 55, 70, .12);
}
.bd-board + .bd-board { margin-top: 16px; }
.bd .muted { color: var(--b-ink-3); }

.bd-btn {
  display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 12px;
  border: 1px solid var(--b-line-strong); background: var(--b-paper); border-radius: var(--b-r);
  font: inherit; font-size: 15px; font-weight: 500; color: var(--b-ink); white-space: nowrap; text-decoration: none; cursor: pointer;
  transition: background .15s, border-color .15s, color .15s;
}
.bd-btn:hover { border-color: var(--b-ink-3); }
.bd-btn:active { transform: translateY(1px); }
.bd-btn.primary { background: var(--b-blue); border-color: var(--b-blue); color: #fff; }
.bd-btn.primary:hover { background: var(--b-blue-hover); }
.bd-btn.quiet { border-color: transparent; background: transparent; color: var(--b-ink-2); }
.bd-btn.quiet:hover { background: #eef1f4; color: var(--b-ink); }
.bd-btn.danger { color: var(--b-red); border-color: #e2b6ae; background: transparent; }
.bd-btn.danger:hover, .bd-btn.danger:focus-visible { background: var(--b-red); color: #fff; border-color: var(--b-red); outline-color: var(--b-red); }
.bd-btn.sm { height: 32px; font-size: 13px; padding: 0 10px; }
.bd-iconbtn { width: 32px; height: 32px; display: inline-grid; place-items: center; border: 0; background: transparent; border-radius: var(--b-r); color: var(--b-ink-2); text-decoration: none; cursor: pointer; }
.bd-iconbtn:hover { background: #eef1f4; color: var(--b-ink); }
.bd-iconbtn.is-disabled { color: var(--b-ghost); cursor: not-allowed; background: transparent; }
.bd-kbd { font-size: 12px; padding: 0 5px; border: 1px solid var(--b-line-strong); border-radius: 4px; color: var(--b-ink-3); background: var(--b-paper); line-height: 18px; font-family: var(--b-sans); }

.bd-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; flex: none; background: var(--b-ghost); }
.bd-dot.red { background: var(--b-red); }
.bd-dot.green { background: var(--b-green); }

.bd-colhead { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 10px; padding: 12px 20px; border-bottom: 1px solid var(--b-line); min-height: 52px; }
.bd-colhead h2 { font-size: 18px; line-height: 1.3; margin: 0; font-weight: 700; letter-spacing: -0.01em; color: var(--b-ink) !important; }
.bd-colhead .meta { font-size: 13px; color: var(--b-ink-3); }
.bd-colhead .right { margin-left: auto; display: flex; align-items: center; gap: 4px; }

/* 안내 줄 (체험 학원 등) */
.bd-notice { display: flex; align-items: flex-start; gap: 10px; padding: 12px 16px; margin-bottom: 16px; background: var(--b-paper); border: 1px solid var(--b-line-strong); border-radius: var(--b-r); font-size: 15px; }

/* ================= 대시보드: 보드 머리 ================= */
.bd-head4 { display: grid; grid-template-columns: repeat(var(--cols, 4), 1fr); border-bottom: 1px solid var(--b-line-strong); }
.bd-head4 a { display: block; padding: 16px 20px 14px; text-decoration: none; color: inherit; border-left: 1px solid var(--b-line); transition: background .15s; }
.bd-head4 a:first-child { border-left: 0; }
.bd-head4 a:hover { background: #f2f5f8; }
.bd-head4 .lab { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--b-ink-2); font-weight: 500; }
.bd-head4 .big { font-size: 40px; font-weight: 700; line-height: 1.1; letter-spacing: -0.03em; margin-top: 4px; color: var(--b-ink); }
.bd-head4 .big small { font-size: 15px; font-weight: 500; color: var(--b-ink-3); margin-left: 4px; letter-spacing: 0; }
.bd-head4 .sub { font-size: 13px; color: var(--b-ink-3); margin-top: 2px; }
.bd-head4 .is-zero .big { color: var(--b-ink-3); }
.bd-updated { display: flex; justify-content: flex-end; padding: 6px 20px; font-size: 13px; color: var(--b-ink-3); border-bottom: 1px solid var(--b-line); }

/* ================= 대시보드: 몸통 ================= */
.bd-body { display: grid; grid-template-columns: minmax(0, 1fr) 300px; }
.bd-weekcol { min-width: 0; border-right: 1px solid var(--b-line-strong); }
.bd-weekscroll { overflow-x: auto; }
.bd-weeklabel { font-size: 15px; font-weight: 600; min-width: 170px; text-align: center; }

table.bd-wk { width: 100%; border-collapse: collapse; table-layout: fixed; min-width: 640px; }
table.bd-wk th, table.bd-wk td { padding: 0; }
table.bd-wk thead th { font-size: 13px; font-weight: 500; color: var(--b-ink-3); text-align: center; height: 36px; border-bottom: 1px solid var(--b-line); white-space: nowrap; }
table.bd-wk th.is-today { color: var(--b-blue); font-weight: 700; }
table.bd-wk col.c-name { width: 188px; }
table.bd-wk col.c-sum { width: 92px; }
table.bd-wk td.is-today { box-shadow: inset 1px 0 0 var(--b-blue), inset -1px 0 0 var(--b-blue); background-color: rgba(31, 79, 184, .03); }
.bd-clsrow td { height: 52px; border-bottom: 1px solid var(--b-line); }
.bd-clsbtn { display: flex; align-items: center; gap: 8px; width: 100%; height: 52px; padding: 0 8px 0 14px; border: 0; background: transparent; text-align: left; font: inherit; color: inherit; cursor: pointer; }
.bd-clsbtn:hover { background: #f2f5f8; }
.bd-clsbtn .chev { transition: transform .2s var(--b-ease); color: var(--b-ink-3); width: 16px; height: 16px; }
.bd-clsbtn[aria-expanded="true"] .chev { transform: rotate(90deg); }
.bd-clsbtn .nm { font-weight: 600; font-size: 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bd-clsbtn .ct { font-size: 13px; color: var(--b-ink-3); white-space: nowrap; }
.bd-rate { display: grid; gap: 5px; justify-items: center; padding: 0 8px; }
.bd-rate .t { font-size: 13px; color: var(--b-ink-2); }
.bd-rate .bar { width: 100%; max-width: 56px; height: 4px; background: #e7ebef; border-radius: 2px; overflow: hidden; }
.bd-rate .bar i { display: block; height: 100%; background: var(--b-ink-2); border-radius: 2px; }
.bd-future { color: var(--b-ghost); font-size: 13px; text-align: center; }
.bd-sum { text-align: center; font-weight: 700; font-size: 15px; }
.bd-sum small { display: block; font-weight: 400; font-size: 13px; color: var(--b-ink-3); }
.bd-strow td { height: 44px; border-bottom: 1px solid var(--b-line-soft); background: var(--b-paper); }
.bd-strow a.sn { display: block; padding: 0 12px 0 38px; font-size: 15px; color: var(--b-ink); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bd-strow a.sn:hover { color: var(--b-blue); text-decoration: underline; text-underline-offset: 3px; }
.bd-strow.is-idle a.sn::after { content: ""; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--b-red); margin-left: 6px; vertical-align: 2px; }
.bd-cell { display: grid; justify-items: center; gap: 1px; }
.bd-cell .sc { font-size: 13px; color: var(--b-ink-2); }
.bd-cell .none { width: 10px; height: 1px; background: var(--b-line-strong); margin: 5px 0; }
.bd-tally { display: inline-flex; gap: 2px; height: 11px; align-items: stretch; }
.bd-tally i { width: 2px; background: var(--b-ink-2); border-radius: 1px; }
.bd-legend { display: flex; flex-wrap: wrap; gap: 6px 18px; padding: 12px 20px; font-size: 13px; color: var(--b-ink-3); border-top: 1px solid var(--b-line); }
.bd-legend span { display: inline-flex; gap: 6px; align-items: center; }
.bd-empty { padding: 48px 24px; text-align: center; }
.bd-empty h3 { font-size: 18px; margin: 0 0 6px; color: var(--b-ink) !important; }
.bd-empty p { margin: 0 0 16px; color: var(--b-ink-3); }
.bd-empty .row { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; }

/* 자석 칸 */
.bd-magcol { background: #f6f8fa; min-width: 0; border-radius: 0 0 var(--b-r) 0; }
.bd-magsec { padding: 4px 16px 16px; }
.bd-magsec + .bd-magsec { border-top: 1px solid var(--b-line); }
.bd-magsec h3 { display: flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 700; margin: 14px 0 10px; color: var(--b-ink) !important; }
.bd-magsec h3 .n { margin-left: auto; font-size: 13px; font-weight: 500; color: var(--b-ink-3); }
.bd-mags { display: grid; gap: 6px; list-style: none; margin: 0; padding: 0; }
.bd-mag {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 8px;
  padding: 8px 10px; background: var(--b-paper); border: 1px solid var(--b-line); border-radius: var(--b-r);
  text-decoration: none; color: inherit; transition: border-color .15s, transform .15s var(--b-ease);
}
.bd-mag:hover { border-color: var(--b-ink-3); transform: translateX(-2px); }
.bd-mag .who b { display: block; font-size: 15px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bd-mag .who span { display: block; font-size: 13px; color: var(--b-ink-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bd-mag .d { font-size: 15px; font-weight: 700; white-space: nowrap; }
.bd-mag .d.warn { color: var(--b-red); }
.bd-calm { font-size: 13px; color: var(--b-ink-3); padding: 2px 0 4px; }
.bd-more { display: inline-block; margin-top: 8px; font-size: 13px; color: var(--b-blue); text-decoration: underline; text-underline-offset: 3px; }
@media (prefers-reduced-motion: no-preference) {
  .bd-mags .bd-mag { animation: bd-settle .5s var(--b-ease) both; animation-delay: calc(var(--k, 0) * 35ms); }
  @keyframes bd-settle { from { opacity: 0; transform: translateX(14px); } to { opacity: 1; transform: none; } }
}

/* 미션 */
.bd-mrow { display: grid; grid-template-columns: minmax(0, 1.4fr) 96px minmax(0, 1fr) auto; align-items: center; gap: 16px; padding: 12px 20px; border-top: 1px solid var(--b-line); }
.bd-mrow:first-child { border-top: 0; }
.bd-mrow .t b { display: block; font-size: 15px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bd-mrow .t span { font-size: 13px; color: var(--b-ink-3); }
.bd-mrow .dd { font-size: 13px; font-weight: 600; color: var(--b-ink-2); white-space: nowrap; }
.bd-mrow .dd.warn { color: var(--b-red); }
.bd-mrow .pr { display: flex; align-items: center; gap: 10px; }
.bd-mrow .pr .bar { flex: 1; height: 6px; background: #e7ebef; border-radius: 3px; overflow: hidden; }
.bd-mrow .pr .bar i { display: block; height: 100%; background: var(--b-green); }
.bd-mrow .pr span { font-size: 13px; color: var(--b-ink-2); white-space: nowrap; }
.bd-mrow .act { display: flex; gap: 6px; align-items: center; justify-content: flex-end; }
.bd-mrow .act form { margin: 0; }

/* ================= 학생 목록 ================= */
.bd-tools { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; padding: 14px 16px; border-bottom: 1px solid var(--b-line); }
.bd-search { position: relative; flex: 1 1 280px; max-width: 420px; margin: 0; }
.bd .bd-search input[type="search"] {
  width: 100%; height: 40px; padding: 0 40px 0 38px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r);
  background: var(--b-paper); font: inherit; font-size: 15px; color: var(--b-ink); box-shadow: none;
}
.bd .bd-search input::placeholder { color: var(--b-ink-3); }
.bd .bd-search input:focus { outline: 2px solid var(--b-blue); outline-offset: -1px; border-color: var(--b-blue); box-shadow: none; }
.bd-search .i { position: absolute; left: 11px; top: 11px; color: var(--b-ink-3); }
.bd-search .bd-kbd { position: absolute; right: 10px; top: 10px; }
.bd-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.bd-chip {
  height: 32px; padding: 0 12px; border: 1px solid var(--b-line-strong); border-radius: 16px; background: var(--b-paper);
  font: inherit; font-size: 13px; font-weight: 500; color: var(--b-ink-2); white-space: nowrap;
  display: inline-flex; align-items: center; gap: 6px; text-decoration: none; cursor: pointer;
}
.bd-chip:hover { border-color: var(--b-ink-3); }
.bd-chip[aria-pressed="true"], .bd-chip.is-on { background: var(--b-ink); border-color: var(--b-ink); color: #fff; }
.bd-chip.is-on .bd-dot, .bd-chip[aria-pressed="true"] .bd-dot { box-shadow: 0 0 0 2px #fff; }
.bd-count { font-size: 13px; color: var(--b-ink-3); margin-left: auto; white-space: nowrap; }
.bd-selbar { display: none; flex-wrap: wrap; align-items: center; gap: 10px; padding: 8px 16px; background: var(--b-blue-wash); border-bottom: 1px solid #c9d7f1; font-size: 15px; }
.bd-selbar.is-on { display: flex; }
.bd-selbar form { margin: 0; }
.bd-selbar .gap { flex: 1; }
/* 검색줄과 선택 바를 같은 칸에 겹쳐 둔다: 선택해도 아래 표가 밀리지 않는다 */
.bd-toolstack { display: grid; }
.bd-toolstack > .bd-tools, .bd-toolstack > .bd-selbar { grid-area: 1 / 1; }
.bd-toolstack > .bd-selbar { position: relative; z-index: 1; }
.bd-toolstack:has(> .bd-selbar.is-on) > .bd-tools { visibility: hidden; }

.bd-listwrap { display: grid; grid-template-columns: minmax(0, 1fr); }
.bd-listwrap.is-open { grid-template-columns: minmax(0, 1fr) 380px; }
.bd-tablescroll { min-width: 0; overflow-x: auto; }
table.bd-st { width: 100%; border-collapse: collapse; }
table.bd-st th {
  position: sticky; top: 0; z-index: 1; background: var(--b-board);
  font-size: 13px; font-weight: 500; color: var(--b-ink-3); text-align: left; height: 40px; padding: 0 12px;
  border-bottom: 1px solid var(--b-line-strong); white-space: nowrap;
}
table.bd-st td { height: 56px; padding: 0 12px; border-bottom: 1px solid var(--b-line-soft); font-size: 15px; background: var(--b-paper); color: var(--b-ink); }
table.bd-st tbody tr { cursor: pointer; }
table.bd-st tbody tr:hover td { background: #f5f7f9; }
table.bd-st tr.is-cur td { background: var(--b-blue-wash); }
table.bd-st tr.is-cur td:first-child { box-shadow: inset 2px 0 0 var(--b-blue); }
table.bd-st tr:focus-visible { outline: 2px solid var(--b-blue); outline-offset: -2px; }
table.bd-st td.cls { white-space: nowrap; }
.bd-ck { width: 18px; height: 18px; accent-color: var(--b-blue); cursor: pointer; }
.bd-nm b { display: block; font-weight: 600; }
.bd-nm span { display: block; font-size: 13px; color: var(--b-ink-3); }
.bd-nm .mcls { display: none; }
.bd-last { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.bd-last.warn, .bd-lic.warn { color: var(--b-red); font-weight: 600; }
.bd-lic { white-space: nowrap; }
.bd-wkcells { display: inline-grid; grid-template-columns: repeat(7, 12px); gap: 3px; vertical-align: middle; }
.bd-wkcells i { height: 12px; border-radius: 2px; background: #e5e9ed; }
.bd-wkcells i.on { background: var(--b-ink-2); }
.bd-wkcells i.fut { background: transparent; box-shadow: inset 0 0 0 1px #e5e9ed; }
.bd-wkcells i.td { outline: 1px solid var(--b-blue); outline-offset: 1px; }
.bd-listwrap.is-open .hidecol { display: none; }
.bd-pager { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; font-size: 13px; color: var(--b-ink-3); }

/* 오른쪽 학습 패널 (모달 아님) */
.bd-panel { border-left: 1px solid var(--b-line-strong); background: var(--b-paper); position: sticky; top: 0; align-self: start; max-height: calc(100vh - 56px); overflow-y: auto; }
.bd-listwrap:not(.is-open) .bd-panel { display: none; }
@media (prefers-reduced-motion: no-preference) {
  .bd-listwrap.is-open .bd-panel { animation: bd-slide .32s var(--b-ease); }
  @keyframes bd-slide { from { transform: translateX(16px); opacity: 0; } to { transform: none; opacity: 1; } }
}
.bd-ph { display: flex; align-items: flex-start; gap: 10px; padding: 16px 16px 12px; border-bottom: 1px solid var(--b-line); }
.bd-ph h2 { margin: 0; font-size: 20px; font-weight: 700; letter-spacing: -0.02em; color: var(--b-ink) !important; }
.bd-ph p { margin: 2px 0 0; font-size: 13px; color: var(--b-ink-3); word-break: break-all; }
.bd-ph .bd-iconbtn { margin-left: auto; flex: none; }
.bd-pfacts { display: grid; grid-template-columns: repeat(3, 1fr); margin: 0; border-bottom: 1px solid var(--b-line); }
.bd-pfacts div { padding: 12px 16px; border-left: 1px solid var(--b-line); min-width: 0; }
.bd-pfacts div:first-child { border-left: 0; }
.bd-pfacts dt { font-size: 13px; color: var(--b-ink-3); }
.bd-pfacts dd { margin: 2px 0 0; font-size: 20px; font-weight: 700; letter-spacing: -0.02em; white-space: nowrap; }
.bd-pfacts dd.warn { color: var(--b-red); }
.bd-psec { padding: 14px 16px; border-bottom: 1px solid var(--b-line); }
.bd-psec h3 { margin: 0 0 10px; font-size: 15px; font-weight: 700; color: var(--b-ink) !important; }
.bd-pweek { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.bd-pweek div { border: 1px solid var(--b-line); border-radius: 4px; padding: 6px 0; text-align: center; font-size: 13px; min-height: 58px; }
.bd-pweek div b { display: block; font-weight: 500; color: var(--b-ink-3); }
.bd-pweek div.on { border-color: var(--b-ink-3); }
.bd-pweek div.td { border-color: var(--b-blue); }
.bd-pweek div span { display: block; font-weight: 600; }
.bd-pweek .bd-tally { justify-content: center; margin-top: 4px; }
.bd-sess { list-style: none; margin: 0; padding: 0; }
.bd-sess li { display: grid; grid-template-columns: 72px minmax(0, 1fr) auto; gap: 8px; padding: 8px 0; border-top: 1px solid #eef1f4; font-size: 15px; }
.bd-sess li:first-child { border-top: 0; }
.bd-sess .when { font-size: 13px; color: var(--b-ink-3); }
.bd-sess .sc { font-weight: 600; }
.bd-pact { display: flex; flex-wrap: wrap; gap: 8px; padding: 14px 16px; }
.bd-kbhelp { font-size: 13px; color: var(--b-ink-3); margin: 10px 2px 0; display: flex; flex-wrap: wrap; gap: 4px 14px; }

/* ================= 좁은 화면 ================= */
@media (max-width: 1180px) {
  .bd-body { grid-template-columns: minmax(0, 1fr) 260px; }
  .bd-listwrap.is-open { grid-template-columns: minmax(0, 1fr) 340px; }
  table.bd-st .hidecol { display: none; }
}
@media (max-width: 900px) {
  .bd-page { padding: 12px 16px 32px; }
  .bd-head4 { grid-template-columns: repeat(2, 1fr); }
  .bd-head4 a:nth-child(3) { border-left: 0; }
  .bd-head4 a:nth-child(n+3) { border-top: 1px solid var(--b-line); }
  .bd-head4 .big { font-size: 32px; }
  .bd-body { grid-template-columns: 1fr; }
  .bd-magcol { order: -1; border-bottom: 1px solid var(--b-line-strong); border-radius: 0; }
  .bd-weekcol { border-right: 0; }
  .bd-mrow { grid-template-columns: minmax(0, 1fr) auto; }
  .bd-mrow .pr { grid-column: 1 / -1; }
  .bd-mrow .act { grid-column: 1 / -1; justify-content: flex-start; }
  .bd-listwrap.is-open { grid-template-columns: 1fr; }
  .bd-listwrap.is-open .bd-panel { position: fixed; inset: 56px 0 0 0; max-height: none; z-index: 30; }
  table.bd-st .m-hide { display: none; }
  .bd-nm .mcls { display: block; }
  .bd-nm .email { display: none; }
  .bd-head .right { margin-left: 0; width: 100%; }
}
.sb-badge.warn { color: var(--b-red); }

/* ================= 상단 헤더 (자리·문구 유지, 2026-09-27 2차) ================= */
.ah { background: var(--b-paper); border-bottom: 1px solid var(--b-line-strong); font-family: var(--b-sans); }
.ah-in { padding: 0 24px; }
.ah-row { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 12px; height: 56px; }
.ah-l, .ah-r { display: flex; align-items: center; gap: 8px; min-width: 0; position: relative; z-index: 1; }
.ah-l form { margin: 0; }
.ah-c { position: absolute; left: 50%; transform: translateX(-50%); display: flex; align-items: center; gap: 10px; max-width: 34%; }
.ah-logo { height: 28px; width: auto; flex: none; border-radius: 4px; }
.ah-name { font-size: 15px; font-weight: 700; color: var(--b-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ah-iconbtn { width: 36px; height: 36px; display: inline-grid; place-items: center; border: 0; background: transparent; border-radius: var(--b-r); color: var(--b-ink-2); cursor: pointer; text-decoration: none; }
.ah-iconbtn:hover { background: #eef1f4; color: var(--b-ink); }
.ah-iconbtn svg { width: 20px; height: 20px; }
.ah-logout svg { width: 18px; height: 18px; }
.ah-me { display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 8px 0 4px; border-radius: var(--b-r); color: var(--b-ink); text-decoration: none; min-width: 0; }
.ah-me:hover { background: #eef1f4; }
.ah-av { width: 32px; height: 32px; border-radius: 50%; background: var(--b-ink); color: #fff; display: grid; place-items: center; font-size: 13px; font-weight: 700; object-fit: cover; flex: none; }
.ah-who { line-height: 1.2; min-width: 0; }
.ah-who b { display: block; font-size: 15px; font-weight: 700; white-space: nowrap; }
.ah-who small { display: block; font-size: 12px; color: var(--b-ink-3); white-space: nowrap; }
.ah-search { display: inline-flex; align-items: center; gap: 8px; height: 36px; padding: 0 8px 0 10px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); background: var(--b-paper); color: var(--b-ink-3); font: inherit; font-size: 15px; cursor: pointer; }
.ah-search:hover { border-color: var(--b-ink-3); color: var(--b-ink-2); }
.ah-search svg { width: 18px; height: 18px; }
.ah-kbd { font-family: var(--b-sans); font-size: 12px; padding: 0 5px; border: 1px solid var(--b-line-strong); border-radius: 4px; line-height: 18px; color: var(--b-ink-3); }
.ah-plan { display: inline-flex; align-items: center; height: 32px; padding: 0 12px; border: 1px solid var(--b-line-strong); border-radius: 16px; font-size: 13px; font-weight: 700; color: var(--b-ink); text-decoration: none; white-space: nowrap; }
.ah-plan:hover { border-color: var(--b-ink-3); }
.ah-credit { display: inline-flex; align-items: center; gap: 8px; height: 36px; padding: 0 12px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); color: var(--b-ink); text-decoration: none; white-space: nowrap; }
.ah-credit:has(i) { padding-right: 4px; }
.ah-credit:hover { border-color: var(--b-ink-3); }
.ah-credit b { font-size: 17px; font-weight: 700; font-variant-numeric: tabular-nums; }
.ah-credit-lab { font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--b-ink-3); }
.ah-credit i { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 4px; background: var(--b-frame); color: var(--b-ink); }
.ah-credit i svg { width: 16px; height: 16px; }
.ah :focus-visible { outline: 2px solid var(--b-blue); outline-offset: 2px; }
@media (max-width: 1023px) {
  .ah-in { padding: 0 10px; }
  .ah-row { gap: 6px; }
  .ah-who, .ah-logout, .ah-search-t, .ah-kbd, .ah-plan, .ah-credit-lab, .ah-name { display: none; }
  .ah-search { width: 36px; padding: 0; justify-content: center; }
  .ah-c { max-width: none; }
  .ah-logo { height: 24px; }
}
@media (max-width: 380px) {
  .ah-c { display: none; }
}
/* 총판: 오른쪽 칸(크레딧·이용권 두 개)이 넓어 가운데 로고와 겹치므로 좁은 화면에서는 로고를 뺀다 */
@media (max-width: 560px) {
  .ah-row:has(.ah-credit ~ .ah-credit) .ah-c { display: none; }
}
@media (min-width: 1024px) { #mobile-menu-btn { display: none; } }

/* ================= 반 관리 / 공통 보조 (2차) ================= */
.bd-rate2 { display: flex; align-items: center; gap: 8px; min-width: 120px; }
.bd-rate2 .bar { flex: 1; height: 6px; background: #e7ebef; border-radius: 3px; overflow: hidden; }
.bd-rate2 .bar i { display: block; height: 100%; background: var(--b-ink-2); }
.bd-rate2 .num { font-size: 13px; color: var(--b-ink-2); min-width: 36px; text-align: right; }
.bd-strip { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding: 12px 20px; margin-bottom: 16px; }
.bd-strip-r { margin-left: auto; font-size: 15px; color: var(--b-ink-3); }
.bd-strip-r b { color: var(--b-ink); }
.bd-strip-r b.warn { color: var(--b-red); }
.bd-tag { display: inline-flex; align-items: center; height: 24px; padding: 0 8px; border: 1px solid var(--b-line); border-radius: 4px; font-size: 13px; color: var(--b-ink-2); background: var(--b-paper); white-space: nowrap; }
.bd-twocol { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.bd-twocol > .bd-board + .bd-board { margin-top: 0; }
.bd-addlist { max-height: 520px; overflow-y: auto; }
.bd-addrow { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 10px 16px; border-top: 1px solid var(--b-line-soft); background: var(--b-paper); cursor: pointer; }
.bd-addrow:first-child { border-top: 0; }
.bd-addrow:hover { background: #f5f7f9; }
.bd-addrow[hidden] { display: none; }
.bd-addrow b { display: block; font-weight: 600; }
.bd-addrow .m { display: block; font-size: 13px; color: var(--b-ink-3); }
.bd-addbar { display: flex; justify-content: space-between; align-items: center; padding: 10px 16px; border-top: 1px solid var(--b-line); background: var(--b-blue-wash); border-radius: 0 0 var(--b-r) var(--b-r); }
.bd-btn[disabled] { opacity: .45; cursor: not-allowed; }
@media (max-width: 900px) { .bd-twocol { grid-template-columns: 1fr; } .bd-strip-r { margin-left: 0; width: 100%; } }

/* ================= 리포트 목록 (2차) ================= */
.bd-seg { display: inline-flex; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); overflow: hidden; background: var(--b-paper); flex: none; }
.bd-seg > a, .bd-seg > button { display: inline-flex; align-items: center; font: inherit; font-size: 13px; font-weight: 500; height: 32px; padding: 0 12px; border: 0; border-left: 1px solid var(--b-line); background: transparent; color: var(--b-ink-2); cursor: pointer; white-space: nowrap; text-decoration: none; }
.bd-seg > :first-child { border-left: 0; }
.bd-seg > [aria-pressed="true"] { background: var(--b-ink); color: #fff; }
.bd-custom { display: none; flex-wrap: wrap; gap: 10px; align-items: flex-end; padding: 10px 16px; border-bottom: 1px solid var(--b-line); background: #f6f8fa; }
.bd-custom.is-on { display: flex; }
.bd-custom label { display: grid; gap: 4px; font-size: 13px; color: var(--b-ink-3); }
.bd .bd-custom input[type="date"] { height: 32px; padding: 0 8px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); font: inherit; font-size: 15px; }
.bd-inline-form { margin: 0; }
.bd .bd-select { height: 36px; padding: 0 32px 0 10px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); font: inherit; font-size: 15px; background-color: var(--b-paper); max-width: 360px; }

/* ================= 관리자 학생 리포트 (학부모 미리보기) ================= */
.bd-weekpick { display: inline-flex; align-items: center; gap: 2px; }
.bd-weekpick > span { font-size: 15px; font-weight: 600; min-width: 120px; text-align: center; }
.bd-prevgrid { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 16px; align-items: start; }
.bd-phonecap { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--b-ink-3); margin: 0 0 8px 2px; }
.bd-phone { background: var(--b-frame); border: 1px solid var(--b-line-strong); border-radius: 10px; padding: 16px 12px; max-height: calc(100vh - 170px); overflow: auto; }
.bd-phone .pr { font-size: 16px; }
.bd-stack > .bd-board + .bd-board { margin-top: 12px; }
.bd-sideh { display: flex; align-items: center; gap: 8px; margin: 0; padding: 12px 16px 10px; font-size: 15px; font-weight: 700; color: var(--b-ink) !important; border-bottom: 1px solid var(--b-line); }
.bd-sideh .right { margin-left: auto; }
.bd textarea.bd-note { display: block; width: calc(100% - 32px); margin: 12px 16px 8px; min-height: 150px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); padding: 10px 12px; font: inherit; font-size: 15px; line-height: 1.6; resize: vertical; background: var(--b-paper); color: var(--b-ink); box-shadow: none; }
.bd textarea.bd-note:focus { outline: 2px solid var(--b-blue); outline-offset: -1px; border-color: var(--b-blue); box-shadow: none; }
.bd-hint { font-size: 13px; color: var(--b-ink-3); margin: 0 16px 10px; }
.bd-sideact { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; padding: 0 16px 14px; }
.bd-sideact form { margin: 0; }
.bd-sideact-line { justify-content: flex-start; padding-top: 12px; border-top: 1px solid var(--b-line); }
.bd-facts { list-style: none; margin: 0; padding: 0; }
.bd-facts li { display: flex; justify-content: space-between; gap: 12px; padding: 10px 16px; border-top: 1px solid var(--b-line-soft); font-size: 15px; }
.bd-facts li:first-child { border-top: 0; }
.bd-facts li > span { color: var(--b-ink-2); flex: none; }
.bd-facts li > b { font-weight: 600; text-align: right; overflow-wrap: anywhere; }
.bd-link { color: var(--b-blue); text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 1180px) { .bd-prevgrid { grid-template-columns: minmax(0, 1fr) 320px; } }
@media (max-width: 900px) { .bd-prevgrid { grid-template-columns: 1fr; } .bd-phone { max-height: none; } }

/* ================= 공통 틀: 목록·입력 폼·상세 (4차, 2026-09-28) ================= */
/* 상태 표시: 점 + 글자, 채운 알약 대신 */
.bd-status { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; color: var(--b-ink-2); white-space: nowrap; }
.bd-status::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--b-ghost); }
.bd-status.ok::before { background: var(--b-green); }
.bd-status.warn { color: var(--b-red); } .bd-status.warn::before { background: var(--b-red); }
.bd-status.info::before { background: var(--b-blue); }

/* 폼: 왼쪽 설명 / 오른쪽 입력 */
.bd-form { max-width: 960px; }
.bd-fsec { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 24px; padding: 22px 24px; border-top: 1px solid var(--b-line); }
.bd-fsec:first-child { border-top: 0; }
.bd-fsec > header h2 { margin: 0 0 4px; font-size: 16px; font-weight: 700; color: var(--b-ink); }
.bd-fsec > header p { margin: 0; font-size: 13px; color: var(--b-ink-3); line-height: 1.55; }
.bd-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px 16px; }
.bd-fields .full { grid-column: 1 / -1; }
.bd-field { display: grid; gap: 6px; align-content: start; }
.bd-field label { font-size: 13px; font-weight: 600; color: var(--b-ink-2); }
.bd-field label .opt { font-weight: 400; color: var(--b-ink-3); margin-left: 4px; }
.bd .bd-field input:not([type=checkbox]):not([type=radio]):not([type=file]), .bd .bd-field select, .bd .bd-field textarea { height: 40px; padding: 0 12px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); font: inherit; font-size: 15px; color: var(--b-ink); background: var(--b-paper); width: 100%; }
.bd .bd-field textarea { height: auto; min-height: 96px; padding: 10px 12px; line-height: 1.6; resize: vertical; }
.bd-field input::placeholder { color: var(--b-ink-3); }
.bd .bd-field input:focus, .bd .bd-field select:focus, .bd .bd-field textarea:focus { box-shadow: none; outline: 2px solid var(--b-blue); outline-offset: -1px; border-color: var(--b-blue); }
.bd-field .help { font-size: 13px; color: var(--b-ink-3); }
.bd .bd-field.has-error input, .bd .bd-field.has-error select, .bd .bd-field.has-error textarea { border-color: var(--b-red); }
.bd-field.has-error .help { color: var(--b-red); }
.bd-guard { border: 1px solid var(--b-line); border-radius: var(--b-r); padding: 14px; display: grid; gap: 12px; background: var(--b-paper); }
.bd-guard h3 { margin: 0; font-size: 15px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.bd-check { display: inline-flex; align-items: center; gap: 8px; font-size: 15px; color: var(--b-ink); }
.bd-check input { width: 18px; height: 18px; accent-color: var(--b-blue); }
.bd-formbar { position: sticky; bottom: 0; display: flex; align-items: center; gap: 8px; padding: 12px 24px; border-top: 1px solid var(--b-line-strong); background: var(--b-paper); border-radius: 0 0 var(--b-r) var(--b-r); }
.bd-formbar .note { font-size: 13px; color: var(--b-ink-3); margin-right: auto; }
.bd-errsum { margin: 16px 24px 0; padding: 12px 14px; border: 1px solid #e2b6ae; border-left-width: 1px; border-radius: var(--b-r); background: #fdf3f1; font-size: 15px; color: var(--b-ink); }
.bd-errsum b { color: var(--b-red); }
.bd-errsum ul { margin: 6px 0 0; padding-left: 18px; }

/* 상세 */
.bd-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
.bd-summary > div { padding: 14px 20px; border-left: 1px solid var(--b-line); }
.bd-summary > div:first-child { border-left: 0; }
.bd-summary dt { font-size: 13px; color: var(--b-ink-3); }
.bd-summary dd { margin: 4px 0 0; font-size: 20px; font-weight: 700; letter-spacing: -0.02em; }
.bd-summary dd small { font-size: 13px; color: var(--b-ink-3); font-weight: 500; margin-left: 4px; }
.bd-dl { margin: 0; }
.bd-dl > div { display: grid; grid-template-columns: 140px minmax(0, 1fr); gap: 12px; padding: 11px 20px; border-top: 1px solid var(--b-line-soft); font-size: 15px; }
.bd-dl > div:first-child { border-top: 0; }
.bd-dl dt { color: var(--b-ink-3); }
.bd-dl dd { margin: 0; color: var(--b-ink); overflow-wrap: anywhere; }
.bd-toggles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; }
.bd-toggle { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 20px; border-top: 1px solid var(--b-line-soft); font-size: 15px; cursor: pointer; }
.bd-toggles .bd-toggle:nth-child(-n+2) { border-top: 0; }
.bd-toggles .bd-toggle:nth-child(odd) { border-right: 1px solid var(--b-line-soft); }
.bd-switch { position: relative; width: 36px; height: 20px; flex: none; }
.bd-switch input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.bd-switch i { position: absolute; inset: 0; border-radius: 10px; background: #c9d0d7; transition: background .15s; }
.bd-switch i::after { content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.2); transition: transform .2s var(--b-ease); }
.bd-switch input:checked + i { background: var(--b-blue); }
.bd-switch input:checked + i::after { transform: translateX(16px); }
.bd-switch input:focus-visible + i { outline: 2px solid var(--b-blue); outline-offset: 2px; }
.bd-grouphead { padding: 12px 20px 4px; font-size: 13px; font-weight: 600; color: var(--b-ink-3); border-top: 1px solid var(--b-line); }
.bd-timeline { list-style: none; margin: 0; padding: 0; }
.bd-timeline li { display: grid; grid-template-columns: 90px minmax(0, 1fr); gap: 10px; padding: 10px 20px; border-top: 1px solid var(--b-line-soft); font-size: 15px; }
.bd-timeline li:first-child { border-top: 0; }
.bd-timeline time { font-size: 13px; color: var(--b-ink-3); }
.bd-timeline span { font-size: 13px; color: var(--b-ink-3); display: block; }
.bd-danger { display: flex; align-items: center; gap: 16px; padding: 16px 20px; }
.bd-danger p { margin: 0; font-size: 13px; color: var(--b-ink-3); }
.bd-danger b { display: block; font-size: 15px; color: var(--b-ink); margin-bottom: 2px; }
.bd-danger .bd-btn { margin-left: auto; }
.bd-flash { display: flex; align-items: center; gap: 10px; padding: 10px 14px; margin-bottom: 14px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); background: var(--b-paper); font-size: 15px; }
.bd-flash .bd-dot { background: var(--b-green); }
.bd-flash button { margin-left: auto; }


.bd .bd-field input[type=file] { font: inherit; font-size: 15px; }
.bd-field .field_with_errors { display: contents; }
.bd-fields.one { grid-template-columns: minmax(0, 1fr); }
@media (max-width: 900px) {
  .bd-fsec { grid-template-columns: 1fr; gap: 12px; }
  .bd-fields { grid-template-columns: 1fr; }
  .bd-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bd-summary > div:nth-child(3) { border-left: 0; }
  .bd-summary > div:nth-child(n+3) { border-top: 1px solid var(--b-line); }
  .bd-toggles { grid-template-columns: 1fr; }
  .bd-toggles .bd-toggle { border-right: 0 !important; border-top: 1px solid var(--b-line-soft) !important; }
  .bd-dl > div { grid-template-columns: 110px minmax(0, 1fr); }
  .bd-formbar { padding: 12px 16px; }
}

/* ================= 선택 카드 · 바로가기 · 상품주문 (5차) ================= */
/* 선택 카드 (라디오) */
.bd-choice { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.bd-choice label { position: relative; display: block; padding: 14px 16px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); background: var(--b-paper); cursor: pointer; }
.bd-choice input { position: absolute; opacity: 0; }
.bd-choice b { display: block; font-size: 15px; }
.bd-choice span { display: block; font-size: 13px; color: var(--b-ink-3); margin-top: 2px; }
.bd-choice label:has(input:checked) { border-color: var(--b-blue); box-shadow: inset 0 0 0 1px var(--b-blue); background: var(--b-blue-wash); }
.bd-choice label:has(input:focus-visible) { outline: 2px solid var(--b-blue); outline-offset: 2px; }
.bd-choice label.is-disabled { color: var(--b-ink-3); cursor: not-allowed; background: #f6f8fa; }
.bd-altlink { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); background: var(--b-paper); text-decoration: none; color: inherit; margin-bottom: 16px; max-width: 960px; }
.bd-altlink b { font-size: 15px; } .bd-altlink span { font-size: 13px; color: var(--b-ink-3); display: block; }
.bd-altlink svg { margin-left: auto; }

/* 상품주문 */
.bd-shop-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; padding: 16px; }
.bd-shop-card { display: grid; grid-template-rows: auto 1fr auto; border: 1px solid var(--b-line); border-radius: var(--b-r); background: var(--b-paper); overflow: hidden; }
.bd-shop-img { aspect-ratio: 4/3; background: #f0f3f6; display: grid; place-items: center; color: var(--b-ghost); border-bottom: 1px solid var(--b-line-soft); }
.bd-shop-img img { width: 100%; height: 100%; object-fit: cover; }
.bd-shop-info { padding: 12px 14px 4px; }
.bd-shop-info .cat { font-size: 13px; font-weight: 600; color: var(--b-ink-3); }
.bd-shop-info b { display: block; font-size: 16px; margin: 2px 0; }
.bd-shop-info .sku { font-size: 13px; color: var(--b-ink-3); font-family: ui-monospace, Menlo, monospace; }
.bd-shop-info p { margin: 6px 0 0; font-size: 13px; color: var(--b-ink-2); }
.bd-shop-buy { display: flex; align-items: center; gap: 8px; padding: 12px 14px 14px; }
.bd-shop-buy .price { font-size: 18px; font-weight: 700; margin-right: auto; font-variant-numeric: tabular-nums; }
.bd-qty { display: inline-flex; align-items: center; border: 1px solid var(--b-line-strong); border-radius: var(--b-r); height: 32px; }
.bd-qty button { width: 28px; height: 30px; border: 0; background: none; font-size: 16px; cursor: pointer; color: var(--b-ink-2); }
.bd-qty span { min-width: 26px; text-align: center; font-size: 15px; font-variant-numeric: tabular-nums; }
.bd-cart-grid { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 16px; align-items: start; }
.bd-cart-sum { position: sticky; top: 60px; }
.bd-cart-sum .bd-facts li b { font-variant-numeric: tabular-nums; }
.bd-cart-total { display: flex; justify-content: space-between; align-items: baseline; padding: 14px 16px; border-top: 1px solid var(--b-line-strong); }
.bd-cart-total b { font-size: 24px; }
@media (max-width: 900px) {
  .bd-choice { grid-template-columns: 1fr; }
  .bd-cart-grid { grid-template-columns: 1fr; }
}

/* ================= AG Grid 표를 보드 색으로 (총판 포털, 6차) ================= */
/* 표 기능(정렬·필터·페이지)은 그대로 두고 색·글꼴만 맞춘다. 컨테이너에 .bd-aggrid 를 붙인다. */
.bd .bd-aggrid {
  --ag-font-family: var(--b-sans); --ag-font-size: 15px;
  --ag-foreground-color: var(--b-ink); --ag-text-color: var(--b-ink);
  --ag-background-color: var(--b-paper); --ag-odd-row-background-color: var(--b-paper);
  --ag-header-background-color: var(--b-board); --ag-header-text-color: var(--b-ink-3);
  --ag-header-font-size: 13px; --ag-header-font-weight: 600;
  --ag-border-color: var(--b-line); --ag-row-border-color: var(--b-line-soft);
  --ag-row-hover-color: #f3f6fa; --ag-selected-row-background-color: var(--b-blue-wash);
  --ag-accent-color: var(--b-blue); --ag-range-selection-border-color: var(--b-blue);
  --ag-wrapper-border-radius: 0; --ag-border-radius: var(--b-r);
  border: 0; border-top: 1px solid var(--b-line); border-radius: 0 0 var(--b-r) var(--b-r); overflow: hidden;
}
.bd .bd-aggrid .ag-root-wrapper { border: 0; border-radius: 0; }

/* ================= 대화창 (공통, 7차: 본사 화면부터 여기 정의를 쓴다) ================= */
/* 여는 쪽: <div class="bd-dialog" hidden><div class="scrim"></div><div class="panel"><h3/><p/><div class="body"/><div class="foot"/></div></div> */
.bd-dialog { position: fixed; inset: 0; z-index: 60; display: grid; place-items: center; padding: 16px; font-family: var(--b-sans); }
.bd-dialog[hidden] { display: none; }
.bd-dialog .scrim { position: absolute; inset: 0; background: rgba(29, 39, 51, .45); }
.bd-dialog .panel { position: relative; width: 100%; max-width: 440px; max-height: calc(100vh - 32px); overflow: auto; background: var(--b-paper); border: 1px solid var(--b-line-strong); border-radius: var(--b-r); box-shadow: 0 16px 40px -12px rgba(29, 39, 51, .35); }
.bd-dialog .panel.wide { max-width: 640px; }
.bd-dialog .panel > h3 { margin: 0; padding: 14px 16px 2px; font-size: 18px; font-weight: 700; color: var(--b-ink); }
.bd-dialog .panel > p { margin: 0; padding: 0 16px 10px; font-size: 13px; color: var(--b-ink-3); border-bottom: 1px solid var(--b-line); }
.bd-dialog .body { padding: 16px; }
.bd-dialog .foot { display: flex; gap: 8px; justify-content: flex-end; padding: 12px 16px; border-top: 1px solid var(--b-line-strong); }

/* ================= 교재 편집 (8차, 2026-09-28 목업 admin-round8-textbook) ================= */
.tb-cover { width: 36px; height: 48px; border-radius: 4px; flex: none; object-fit: cover; background: #eef1f4; border: 1px solid var(--b-line); display: inline-grid; place-items: center; color: var(--b-ghost); overflow: hidden; }
.tb-head { display: flex; align-items: center; gap: 14px; margin: 2px 2px 14px; font-family: var(--b-sans); }
.tb-head .tb-cover { width: 44px; height: 58px; }
.tb-head-t { min-width: 0; }
.tb-head h1 { margin: 0; font-size: 22px; line-height: 1.3; font-weight: 700; letter-spacing: -0.02em; color: var(--b-ink) !important; overflow-wrap: anywhere; }
.tb-head .sub { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin-top: 3px; font-size: 13px; color: var(--b-ink-3); }
.tb-head .right { margin-left: auto; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.tb-tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--b-line-strong); margin: 0 0 16px; overflow-x: auto; font-family: var(--b-sans); }
.tb-tabs a { position: relative; display: inline-flex; align-items: center; gap: 6px; height: 40px; padding: 0 14px; font-size: 15px; font-weight: 500; color: var(--b-ink-2); text-decoration: none; white-space: nowrap; }
.tb-tabs a:hover { color: var(--b-ink); }
.tb-tabs a[aria-current="page"] { color: var(--b-ink); font-weight: 700; }
.tb-tabs a[aria-current="page"]::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 2px; background: var(--b-blue); }
.tb-tabs a small { font-size: 13px; color: var(--b-ink-3); font-weight: 500; }
.bd-crumb { display: flex; flex-wrap: wrap; gap: 4px 6px; align-items: center; margin: 0 2px 6px; font-size: 13px; color: var(--b-ink-3); }
.bd-crumb a { color: var(--b-ink-3); text-decoration: none; }
.bd-crumb a:hover { color: var(--b-ink); text-decoration: underline; }
.bd-crumb .sep { color: var(--b-ghost); }
/* 학습 모듈 약어 버튼 (WM LS RD SB VC CW) */
.tb-mods { display: inline-flex; align-items: center; gap: 3px; vertical-align: middle; line-height: 1; }
.tb-mods button, .tb-mods span { line-height: 1; width: 30px; height: 26px; padding: 0; display: inline-grid; place-items: center; border: 1px solid var(--b-line-strong); border-radius: 4px; background: var(--b-paper); font: inherit; font-size: 12px; font-weight: 700; color: var(--b-ghost); letter-spacing: .02em; }
.tb-mods button { cursor: pointer; }
.tb-mods .on { color: var(--b-blue); border-color: #9fb4e6; background: var(--b-blue-wash); }
.tb-mods button:hover { border-color: var(--b-ink-3); }
.tb-mods button:disabled { cursor: not-allowed; }
.tb-modlegend { display: flex; flex-wrap: wrap; gap: 4px 14px; padding: 10px 20px; border-top: 1px solid var(--b-line); font-size: 13px; color: var(--b-ink-3); }
.tb-modlegend b { color: var(--b-blue); font-size: 12px; margin-right: 4px; }
/* 일괄 작업 줄 (어두운 띠) */
.bd-selbar-dark { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 16px; background: var(--b-ink); color: #fff; font-family: var(--b-sans); }
.bd-selbar-dark[hidden] { display: none; }
.bd-selbar-dark b { font-size: 15px; margin-right: 6px; font-variant-numeric: tabular-nums; }
.bd-selbar-dark .bd-btn { background: transparent; color: #fff; border-color: #4a5764; }
.bd-selbar-dark .bd-btn:hover { background: #2c3947; border-color: #6b7886; }
.bd-selbar-dark .bd-btn.primary { background: var(--b-blue); border-color: var(--b-blue); }
.bd-selbar-dark .gap { flex: 1; }
.bd-fsec > *, .bd-field { min-width: 0; }
.bd .bd-field input[type=file] { max-width: 100%; }
@media (max-width: 900px) {
  .tb-head { flex-wrap: wrap; }
  .tb-head .right { margin-left: 0; width: 100%; }
}

/* ================= 블록 표시 (10차, 2026-09-29) =================
 * 잉크 긴 칸 + 빨강 짧은 칸. 화면 제목 앞과 헤더 로고·학원명 사이에만 쓴다(교재 머리는 표지가 있어 뺀다).
 * 색은 지금 보드 색 그대로(잉크 #1d2733 + 빨강 #c8321f). 목업: .impeccable/mocks/admin-round10-navy.html */
.bd-head h1::before, .ah-name::before {
  content: ""; display: inline-block; flex: none; width: 16px; height: 9px; margin-right: 10px; vertical-align: 0.12em;
  background: linear-gradient(to right, var(--b-ink) 0 11px, var(--b-red) 11px 16px);
}
.ah-name::before { width: 14px; height: 8px; margin: 0 10px 0 2px; vertical-align: 0.08em; background: linear-gradient(to right, var(--b-ink) 0 10px, var(--b-red) 10px 14px); }
@media print { .bd-head h1::before { display: none; } }
