/* css/home.css — quality_dashboard.html <style> 에서 분리(2026-10-03). 링크 순서 2/7 */
  /* ── 대시보드 홈 상단 2카드 (dh-*) — design/대시보드홈_시안.html 과 동일 ── */
  .dh-card { margin-bottom: 12px; overflow: visible; }
  .dh-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
  .dh-title { font-size: 14px; font-weight: 600; margin: 0; display: flex; align-items: center; gap: 8px; letter-spacing: var(--ls-snug); }
  .dh-title small { font-size: 12px; font-weight: 500; color: var(--ink-3); }
  .dh-sub { font-size: 11px; color: var(--ink-3); margin-top: 3px; }
  .dh-link { background: none; border: 0; padding: 0; color: var(--brand-700); font-weight: 600; font-size: 12px; cursor: pointer; white-space: nowrap; }
  .dh-link:hover { text-decoration: underline; }
  .dh-loading { color: var(--ink-3); font-size: 12.5px; }
  .dh-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
  .dh-btn { display: inline-flex; align-items: center; gap: 6px; height: 34px; padding: 0 14px; border-radius: var(--r-md); font-size: 12px; font-weight: 600; border: 1px solid var(--border-strong); background: var(--surface); color: var(--ink-2); white-space: nowrap; cursor: pointer; transition: background .12s, color .12s; }
  .dh-btn:hover { background: var(--surface-2); color: var(--ink); }
  .dh-btn .ti { font-size: 14px; opacity: .85; }
  .dh-btn-dark { background: var(--gray-900); color: #fff; border-color: var(--gray-900); }
  .dh-btn-dark:hover { background: var(--gray-700); border-color: var(--gray-700); color: #fff; }
  .dh-btn:disabled { opacity: .45; cursor: default; }
  .dh-btn:disabled:hover { background: var(--surface); color: var(--ink-2); }
  /* 오늘 가제본 현황 */
  .dh-today { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(240px, 1.4fr); gap: 12px; margin-top: 14px; align-items: stretch; }
  /* 오늘 가제본 타일 — 형 확정본(시안 v1) 규격 그대로 */
  .dh-stat { border: 1px solid var(--border); border-radius: var(--r-md); padding: 12px 14px 11px; background: var(--surface); display: flex; flex-direction: column; gap: 4px; cursor: pointer; transition: box-shadow .12s, border-color .12s; min-width: 0; }
  .dh-stat:hover { box-shadow: var(--shadow-2); }
  .dh-stat.on { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-100); }
  .dh-stat-l { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--ink-2); }
  .dh-stat-l i { width: 8px; height: 8px; border-radius: 3px; display: inline-block; flex-shrink: 0; }
  .dh-stat-v { font-size: 28px; font-weight: 700; letter-spacing: var(--ls-tight); line-height: 1.05; color: var(--ink); }
  .dh-stat-v small { font-size: 12px; font-weight: 600; color: var(--ink-3); margin-left: 3px; }
  .dh-stat-s { font-size: 11px; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .dh-prog { border: 1px solid var(--border); border-radius: var(--r-md); padding: 12px 14px 11px; background: var(--surface-2); display: flex; flex-direction: column; justify-content: center; gap: 8px; min-width: 0; }
  .dh-prog-t { display: flex; justify-content: space-between; align-items: baseline; font-size: 12px; color: var(--ink-2); }
  .dh-prog-t b { font-size: 18px; letter-spacing: var(--ls-tight); color: var(--ink); }
  .dh-bar { display: flex; height: 10px; border-radius: 5px; overflow: hidden; gap: 2px; background: var(--surface); }
  .dh-bar > i { display: block; height: 100%; }
  .dh-legend { display: flex; gap: 14px; font-size: 11px; color: var(--ink-3); }
  .dh-legend i { display: inline-block; width: 8px; height: 8px; border-radius: 2px; margin-right: 5px; }
  /* 불량 위험 예보 요약 (#dh-risk-card · risk3d.js renderRiskBrief) — 위 '오늘 가제본 현황'과 같은 틀(.dh-today = 3타일 + 회색 상자 .dh-prog) */
  .dh-rk[hidden] { display: none !important; }
  .dh-rk .dh-stat { font: inherit; text-align: left; color: inherit; width: 100%; }
  .dh-rk .dh-stat:disabled, .dh-rk.loading .dh-stat { cursor: default; box-shadow: none; }
  .dh-rk .dh-stat-v { display: flex; align-items: baseline; min-width: 0; }
  .dh-rk .dh-stat-v small { white-space: nowrap; }
  .dh-rk .dh-stat-s { display: block; }   /* 홈 공통 규칙(좁은 화면 설명 숨김)보다 우선: '불량률 약 7%'가 등급의 뜻이라 휴대폰에도 보임 */
  .dh-rk.loading .dh-stat-l i { background: #C5CCD3; }
  .dh-rk.loading .dh-stat-v, .dh-rk.loading .dh-stat-s { color: var(--ink-3); }
  .dh-rk-mv { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .dh-rk-tiny { display: none; }
  .dh-rk .dh-stat:focus-visible, .dh-rk-job:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }
  .dh-rk-top { justify-content: flex-start; gap: 6px; }
  .dh-rk-top .dh-prog-t > span:first-child { font-weight: 600; color: var(--ink); }
  .dh-rk-hint { font-size: 11px; color: var(--ink-3); white-space: nowrap; }
  .dh-rk-jg { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
  .dh-rk-job { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 1px 8px; align-items: center; width: 100%; padding: 4px 6px; border: 0; border-radius: 8px; background: none; font: inherit; text-align: left; color: var(--ink); cursor: pointer; }
  .dh-rk-job:hover { background: var(--surface); box-shadow: var(--shadow-1); }
  .dh-rk-job b { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12.5px; font-weight: 600; }
  .dh-rk-job em { grid-column: 2; font-style: normal; font-size: 11px; color: var(--ink-3); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .dh-rk-job.sk { display: block; height: 32px; padding: 0; margin: 2px 0; background: var(--gray-100, #eef0f3); cursor: default; animation: dhRkPulse 1.4s ease-in-out infinite; }
  .dh-rk-job.sk:hover { box-shadow: none; }
  @keyframes dhRkPulse { 50% { opacity: .5; } }
  @media (prefers-reduced-motion: reduce) { .dh-rk-job.sk { animation: none; } }
  .dh-rk-jg > .dh-rk-job:nth-child(n+3) { display: none; }   /* 넓은 화면의 좁은 상자: 2줄(설비가 다른 작업 2개) — 전폭 상자(≤1100)에선 3줄 */
  .dh-rk-none { font-size: 12px; color: var(--ink-3); padding: 4px 0; }
  .dh-rk-gp { font-size: 11px; font-weight: 700; border-radius: 99px; padding: 2px 8px; white-space: nowrap; display: inline-flex; align-items: center; gap: 4px; }   /* = #tab-risk .rk-gp */
  .dh-rk-gp::before { content: ''; width: 6px; height: 6px; border-radius: 2px; background: currentColor; }
  .dh-rk-gp.hi { color: #B42318; background: #FDECEA; }
  .dh-rk-gp.mid { color: #8A5A00; background: #FFF5DB; }
  .dh-rk-gp.mid::before { background: #C2870A; }
  .dh-rk-gp.lo { color: #1F7A4D; background: #EAF6EE; }
  @media (max-width: 1100px) { .dh-rk-jg > .dh-rk-job:nth-child(n+3) { display: grid; } .dh-rk-jg > .dh-rk-job.sk:nth-child(n+3) { display: block; } }
  @media (max-width: 900px) { .dh-rk-job { min-height: 40px; } }   /* 터치 */
  @media (max-width: 720px) {
    .dh-rk .dh-head { flex-wrap: nowrap; }           /* '전체 보기'를 제목 줄에 */
    .dh-rk .dh-head > div { min-width: 0; }
    .dh-rk .dh-title, .dh-rk .dh-stat-l { white-space: nowrap; }
    .dh-rk-mv { font-size: 18px; }
    .dh-rk-mv:not(.dh-rk-tiny) { display: none; } .dh-rk-tiny { display: block; }   /* 좁은 칸: 3D 이름표와 같은 짧은 이름(중철3) */
    .dh-rk-dsk { display: none; }
  }
  /* 1100px 이하는 홈 공통 규칙(.dh-today 3칸 + .dh-prog 전폭)을 그대로 받음 → 상자가 타일 아래 한 줄로 */
  /* 가제본 만들 때 조심 줄 (작업지시서 대상 중 빨간 ⚠) — 카드 맨 아래 */
  #dh-risk-card { display: flex; flex-direction: column; }
  #dh-risk-card > .dh-rk-gaj { order: 3; }
  .dh-rk-gaj[hidden] { display: none !important; }
  .dh-rk-gaj { display: grid; grid-template-columns: 190px minmax(0, 1fr); gap: 10px; align-items: center; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border); }
  .dh-rk-jl { display: grid; gap: 1px; min-width: 0; }
  .dh-rk-jl b { font-size: 12.5px; color: var(--ink); white-space: nowrap; }
  .dh-rk-jl span { font-size: 11px; color: var(--ink-3); }
  .dh-rk-gn { color: #B42318; margin-left: 2px; }
  .dh-rk-gg { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) auto; gap: 8px; align-items: center; min-width: 0; }
  .dh-rk-gji { border: 1px solid var(--border); background: var(--surface); min-height: 44px; align-self: stretch; align-items: start; }
  .dh-rk-gji.strong { border-color: #F3C6C2; background: #FFFBFA; }
  .dh-rk-gji .dh-rk-what { color: var(--ink-2); }
  .dh-rk-gji:hover { border-color: var(--border-strong); }
  .dh-rk-wn { display: inline-flex; align-items: center; padding: 1px 7px; border-radius: 999px; background: #D0342A; color: #fff; font-size: 11px; font-weight: 700; white-space: nowrap; }
  .dh-rk-wn.weak { background: #FFF3F2; color: #8A2320; border: 1px solid #F3C6C2; }
  .dh-rk-gmore { padding: 0 4px; white-space: normal; max-width: 110px; text-align: left; line-height: 1.35; }
  .dh-seg .dh-seg-warn { color: #D0342A; font-size: 13px; }
  @media (max-width: 1100px) { .dh-rk-gaj { grid-template-columns: 1fr; } .dh-rk-gg { grid-template-columns: repeat(2, minmax(0, 1fr)); } .dh-rk-gmore { grid-column: 1 / -1; justify-self: start; } }
  @media (max-width: 720px) { .dh-rk-gg { grid-template-columns: 1fr; } .dh-rk-gg > .dh-rk-gji:nth-child(n+3) { display: none; } }
  /* 툴바 */
  .dh-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin: 12px 0 8px; }
  .dh-seg { display: inline-flex; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-md); padding: 3px; }
  .dh-seg button { border: 0; background: transparent; padding: 5px 11px; border-radius: 7px; font-size: 12px; font-weight: 500; color: var(--ink-3); display: inline-flex; gap: 6px; align-items: center; cursor: pointer; font-family: inherit; }
  .dh-seg button b { font-weight: 600; color: var(--ink-3); background: var(--gray-200); border-radius: 999px; padding: 0 6px; font-size: 11px; line-height: 16px; }
  .dh-seg button.on, .dh-seg button.active { background: var(--surface); color: var(--ink); font-weight: 600; box-shadow: var(--shadow-1); }
  .dh-seg button.on b, .dh-seg button.active b { background: var(--gray-900); color: #fff; }
  .dh-search { display: inline-flex; align-items: center; gap: 8px; height: 34px; padding: 0 12px; border: 1px solid var(--border-strong); border-radius: var(--r-md); background: var(--surface); width: 280px; max-width: 100%; color: var(--ink-3); }
  .dh-search input { border: 0 !important; outline: 0; font: inherit; width: 100%; background: transparent; color: var(--ink); padding: 0 !important; box-shadow: none !important; }
  .dh-search input::placeholder { color: var(--ink-3); }
  .dh-search:focus-within { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-100); }
  .dh-hint { font-size: 11px; color: var(--ink-3); display: flex; align-items: center; gap: 6px; margin-top: 10px; flex-wrap: wrap; }
  .dh-kbd { font: 600 10.5px/1 var(--font-mono); background: var(--surface-2); border: 1px solid var(--border); border-radius: 4px; padding: 3px 5px; color: var(--ink-2); }
  /* 표 */
  .dh-tbl-wrap { overflow-x: auto; margin: 0 -4px; }
  .dh-tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 12px; table-layout: fixed; }
  .dh-tbl th { position: sticky; top: 0; z-index: 2; text-align: left; font-weight: 600; color: var(--ink-3); font-size: 11px; padding: 8px 10px; background: var(--surface-2); border-bottom: 1px solid var(--border-strong); white-space: nowrap; letter-spacing: 0; }
  .dh-tbl td { padding: 8px 10px; border-bottom: 1px solid var(--border); vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--ink); }
  .dh-tbl td:last-child { overflow: visible; padding-left: 4px; padding-right: 4px; }
  .dh-tbl tbody tr:hover td { background: var(--surface-2); }
  .dh-tbl tr.sel td { background: var(--brand-50); }
  .dh-tbl tr.sel:hover td { background: var(--brand-100); }
  .dh-tbl td.name { font-weight: 600; }
  .dh-tbl td.dim { color: var(--ink-3); }
  .dh-tbl input[type=checkbox] { width: 15px; height: 15px; accent-color: var(--brand); cursor: pointer; vertical-align: -2px; margin: 0; }
  .dh-tbl tr.grp td { padding: 12px 10px 6px; background: var(--surface) !important; border-bottom: 0; font-size: 12px; font-weight: 700; color: var(--ink-2); white-space: normal; }
  .dh-tbl .g { display: inline-flex; align-items: center; gap: 8px; }
  .dh-tbl .g i { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
  .dh-tbl .g b { font-weight: 600; background: var(--gray-100); color: var(--ink-2); border-radius: 999px; padding: 0 7px; font-size: 11px; line-height: 17px; }
  .dh-tbl .g span.x { font-weight: 500; color: var(--ink-3); }
  .dh-tbl tr.grp.click .g { cursor: pointer; user-select: none; }
  .dh-tbl tr.grp.click .g:hover { color: var(--ink); }
  .dh-tbl .chev { display: inline-block; transition: transform .15s; color: var(--ink-3); font-size: 11px; }
  .dh-tbl tr.grp.open .chev { transform: rotate(90deg); }
  .dh-order { display: inline-flex; align-items: center; gap: 6px; padding: 2px 8px; border-radius: 6px; font-size: 11.5px; font-weight: 600; cursor: pointer; font-family: var(--font-mono); letter-spacing: 0; }
  .dh-order:hover { box-shadow: 0 0 0 2px var(--border-strong); }
  .dh-order .ti { font-size: 12px; opacity: .55; }  .dh-order:hover .ti { opacity: 1; }   /* 작업번호 = 작업지시서 보기 (2026-10-16) */
  .dh-order.done { background: var(--good-bg); color: var(--good); }
  .dh-order.prog { background: var(--warn-bg); color: var(--warn); }
  .dh-chip { display: inline-block; padding: 2px 8px; border-radius: var(--r-pill); background: var(--surface-2); color: var(--ink-2); font-size: 11px; font-weight: 600; max-width: 100%; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }
  .dh-who { color: var(--ink-2); } .dh-who small { color: var(--ink-3); margin-left: 4px; font-size: 11px; }
  .dh-rowcopy { opacity: 0; border: 0; background: transparent; color: var(--ink-3); padding: 2px 6px; border-radius: 4px; font-size: 13px; cursor: pointer; }
  .dh-tbl tr:hover .dh-rowcopy { opacity: 1; } .dh-rowcopy:hover { background: var(--gray-100); color: var(--ink); }
  /* 홈 작업지시서: 제품명을 누르면 가제본 완료, 완료된 건은 제품명 뒤 초록 표시 (2026-10-13) */
  .dh-tbl td.name.gj-click { cursor: pointer; }
  .dh-tbl td.name.gj-click:hover { color: var(--brand); text-decoration: underline; text-decoration-color: var(--brand); text-underline-offset: 3px; }
  .dh-tbl td.name.gdone { color: var(--ink-2); }
  .dh-gmark { display: inline-flex; align-items: center; gap: 3px; margin-left: 6px; padding: 1px 7px; border-radius: 999px; background: var(--good-bg); color: var(--good); font-size: 10.5px; font-weight: 600; vertical-align: middle; white-space: nowrap; }
  .dh-gmark.skip { background: var(--gray-100); color: var(--ink-3); }
  /* 홈 '팀 일정' 카드 (2026-10-13) */
  .dh-sched { margin-top: 4px; }
  .dh-sched-row { display: grid; grid-template-columns: 92px 72px minmax(0, 1fr) 72px; align-items: center; gap: 10px; padding: 7px 4px; border-top: 1px solid var(--border); font-size: 12.5px; cursor: pointer; }
  .dh-sched-row:first-child { border-top: 0; }
  .dh-sched-row:hover { background: var(--surface-2); }
  .dh-sched-row.hol .dh-st { color: var(--danger); }
  .dh-sd { display: flex; align-items: baseline; gap: 5px; font-variant-numeric: tabular-nums; }
  .dh-sd b { font-weight: 700; color: var(--ink); } .dh-sd small { color: var(--ink-3); font-size: 11px; }
  .dh-sd.today b { color: var(--brand-700); } .dh-sd.today small { color: var(--brand-700); font-weight: 600; }
  .dh-sc { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; color: var(--ink-2); white-space: nowrap; }
  .dh-sc i { width: 8px; height: 8px; border-radius: 50%; background: var(--c, var(--gray-400)); flex: none; }
  .dh-st { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink); font-weight: 500; }
  .dh-st small { color: var(--ink-3); font-weight: 400; margin-left: 4px; } .dh-st em { font-style: normal; color: var(--ink-3); font-weight: 400; margin-left: 6px; }
  .dh-sw { text-align: right; color: var(--ink-2); font-size: 12px; white-space: nowrap; }
  .dh-sched-more { padding: 8px 4px 2px; font-size: 12px; color: var(--brand-700); font-weight: 600; cursor: pointer; }
  .dh-sched-more:hover { text-decoration: underline; }
  @media (max-width: 640px) { .dh-sched-row { grid-template-columns: 84px minmax(0, 1fr); } .dh-sc, .dh-sw { display: none; } }
  .dh-selbar button.brand { background: var(--brand); color: #fff; }
  .dh-selbar button.brand:hover { filter: brightness(1.1); }
  .dh-tbl td.name .sub-client { display: none; }
  .dh-empty { padding: 28px; text-align: center; color: var(--ink-3); font-size: 12px; }
  /* 선택 액션바 · 하단 고정 */
  .dh-selbar { position: fixed; left: 50%; bottom: 24px; transform: translate(-50%, 20px); opacity: 0; pointer-events: none; transition: all .18s; background: var(--gray-900); color: #fff; border-radius: 12px; padding: 10px 12px 10px 16px; display: flex; align-items: center; gap: 10px; box-shadow: var(--shadow-3); font-size: 12px; z-index: 900; }
  .dh-selbar.show { transform: translate(-50%, 0); opacity: 1; pointer-events: auto; }
  .dh-selbar b { font-size: 13px; }
  .dh-selbar .dh-sep { width: 1px; height: 18px; background: rgba(255,255,255,.2); }
  .dh-selbar button { border: 0; background: rgba(255,255,255,.1); color: #fff; height: 30px; padding: 0 12px; border-radius: 8px; font-weight: 600; cursor: pointer; font-family: inherit; }
  .dh-selbar button:hover { background: rgba(255,255,255,.2); }
  .dh-selbar button.ghost { background: transparent; color: rgba(255,255,255,.7); }
  @media (max-width: 1280px) { .dh-tbl .col-eq { display: none; } }
  @media (max-width: 1100px) { .dh-today { grid-template-columns: repeat(3, minmax(0, 1fr)); } .dh-prog { grid-column: 1 / -1; } .dh-tbl .col-req { display: none; } }
  @media (max-width: 720px) {
    .dh-today { gap: 8px; } .dh-stat { padding: 10px 12px; } .dh-stat-v { font-size: 22px; } .dh-stat-s { display: none; }
    .dh-tbl .col-who, .dh-tbl .col-date, .dh-tbl .col-client, .dh-tbl .col-req, .dh-tbl .col-eq, .dh-tbl .col-copy { display: none; }
    .dh-tbl { table-layout: auto; }
    .dh-tbl td { padding: 8px 6px; }
    .dh-order { font-size: 11px; padding: 2px 6px; }
    .dh-tbl td.name { white-space: normal; line-height: 1.3; }
    .dh-tbl td.name .sub-client { display: block; font-weight: 500; color: var(--ink-3); font-size: 11px; margin-top: 2px; }
    .dh-search { width: 100%; } .dh-actions { width: 100%; justify-content: flex-end; }
    .dh-selbar { bottom: 12px; padding: 8px 10px 8px 12px; gap: 6px; max-width: calc(100vw - 16px); }
  }
  /* 대시보드 홈 하단: 2열 그리드 · 지금 인쇄 중 · 달력 · 최근 부적합 · 설비별 표 · 섹션 헤더 */
  .dh-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 12px; }
  .dh-grid2 > .dh-card { margin-bottom: 0; }
  @media (max-width: 1100px) { .dh-grid2 { grid-template-columns: 1fr; } }
  .dh-sechead { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; margin: 20px 0 10px; flex-wrap: wrap; }
  .dh-select { height: 30px; padding: 0 28px 0 10px; border: 1px solid var(--border-strong); border-radius: var(--r-md); background: var(--surface); color: var(--ink-2); font: inherit; font-size: 12px; font-weight: 500; }
  .dh-tag { display: inline-block; padding: 1px 8px; border-radius: var(--r-pill); background: var(--brand-100); color: var(--brand-700); font-size: 11px; font-weight: 600; white-space: nowrap; line-height: 1.5; }
  .dh-collapse { cursor: pointer; user-select: none; }
  .dh-caret { display: inline-block; font-size: 11px; color: var(--ink-3); transition: transform .15s; margin-right: 6px; }
  .dh-caret.open { transform: rotate(90deg); }
  /* 지금 인쇄 중 */
  .dh-wip { margin-top: 10px; }
  .dh-wip-row { display: grid; grid-template-columns: 110px minmax(0, 1fr) 120px 44px; align-items: center; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 12.5px; }
  .dh-wip-row:last-child { border-bottom: 0; }
  .dh-wip-m { justify-self: start; }
  .dh-wip-p { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-weight: 600; color: var(--ink); }
  .dh-wip-p small { font-weight: 500; color: var(--ink-3); margin-left: 6px; font-size: 11px; }
  .dh-wip-bar { height: 6px; border-radius: 3px; background: var(--gray-100); overflow: hidden; }
  .dh-wip-bar i { display: block; height: 100%; background: var(--brand); border-radius: 3px; }
  .dh-wip-pct { text-align: right; font-weight: 600; color: var(--ink-2); font-size: 12px; }
  @media (max-width: 640px) { .dh-wip-row { grid-template-columns: 90px minmax(0, 1fr) 40px; } .dh-wip-bar { grid-column: 1 / -1; } }
  /* 가제본 완료 달력 */
  .dh-calnav { display: inline-flex; align-items: center; gap: 2px; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-md); padding: 3px; }
  .dh-calnav button { border: 0; background: transparent; width: 28px; height: 26px; border-radius: 7px; font-size: 16px; line-height: 1; color: var(--ink-2); cursor: pointer; }
  .dh-calnav button:hover { background: var(--surface); color: var(--ink); box-shadow: var(--shadow-1); }
  .dh-calnav button.today { width: auto; padding: 0 10px; font-size: 12px; font-weight: 600; }
  .dh-calnav span { min-width: 92px; text-align: center; font-size: 13px; font-weight: 600; color: var(--ink); font-variant-numeric: tabular-nums; }
  .dh-cal { margin-top: 10px; }
  .dh-cal-tbl { width: 100%; table-layout: fixed; border-collapse: separate; border-spacing: 0; }
  .dh-cal-tbl th { padding: 6px 4px; font-size: 11px; font-weight: 600; color: var(--ink-3); text-align: center; background: transparent; border-bottom: 1px solid var(--border-strong); }
  .dh-cal-tbl th.sun { color: var(--danger); } .dh-cal-tbl th.sat { color: var(--brand-700); }
  .dh-cal-tbl td { height: 74px; vertical-align: top; padding: 4px 5px; border-bottom: 1px solid var(--border); border-right: 1px solid var(--border); font-size: 11px; background: var(--surface); overflow: hidden; }
  .dh-cal-tbl td:last-child { border-right: 0; }
  .dh-cal-tbl td.pad { background: var(--surface-2); }
  .dh-cal-tbl td.today { background: var(--brand-50); box-shadow: inset 0 0 0 1px var(--brand-100); }
  .dh-cal-tbl td.hol { background: var(--danger-bg); }
  .dh-cal-tbl tr:hover td { background: var(--surface-2); } .dh-cal-tbl tr:hover td.today { background: var(--brand-50); } .dh-cal-tbl tr:hover td.hol { background: var(--danger-bg); }
  .dh-cal-d { font-size: 11px; font-weight: 600; color: var(--ink-2); display: flex; align-items: center; gap: 4px; }
  .dh-cal-tbl td.sun .dh-cal-d, .dh-cal-tbl td.hol .dh-cal-d { color: var(--danger); } .dh-cal-tbl td.sat .dh-cal-d { color: var(--brand-700); }
  .dh-cal-tbl td.today .dh-cal-d { color: var(--brand-700); }
  .dh-cal-d em { font-style: normal; font-size: 10.5px; font-weight: 600; color: var(--brand-700); background: var(--brand-100); border-radius: 4px; padding: 0 4px; }
  .dh-cal-h { font-size: 10.5px; color: var(--danger); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .dh-cal-n { display: inline-block; font-size: 11px; font-weight: 700; color: var(--good); background: var(--good-bg); border-radius: 4px; padding: 0 5px; margin: 2px 0; }
  .dh-cal-i { font-size: 10.5px; color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.35; }
  .dh-cal-more { font-size: 10.5px; color: var(--brand-700); font-weight: 600; cursor: pointer; }
  /* 최근 부적합 */
  .dh-recent { margin-top: 8px; }
  .dh-recent-row { display: grid; grid-template-columns: 78px 120px minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 12.5px; }
  .dh-recent-row:last-child { border-bottom: 0; }
  .dh-recent-d { color: var(--ink-3); font-size: 12px; }
  .dh-recent-c { justify-self: start; max-width: 120px; }
  .dh-recent-p { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--ink); font-weight: 500; }
  @media (max-width: 640px) { .dh-recent-row { grid-template-columns: 70px minmax(0, 1fr); } .dh-recent-c, .dh-recent-row .dh-tag { display: none; } }
  /* 설비별 부적합 유형 현황 */
  .dh-eq { margin-top: 10px; }
  .dh-eq-tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 12.5px; table-layout: fixed; }
  .dh-eq-tbl th { text-align: left; padding: 8px 10px; font-size: 11px; font-weight: 600; color: var(--ink-3); background: var(--surface-2); border-bottom: 1px solid var(--border-strong); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .dh-eq-tbl th.c, .dh-eq-tbl td.c { text-align: center; }
  .dh-eq-dot { display: inline-block; width: 7px; height: 7px; border-radius: 2px; margin-right: 5px; vertical-align: 1px; }
  .dh-eq-tbl td { padding: 8px 10px; border-bottom: 1px solid var(--border); vertical-align: middle; }
  .dh-eq-row { cursor: pointer; }
  .dh-eq-row:hover td { background: var(--surface-2); }
  .dh-eq-row.open td { background: var(--brand-50); }
  .dh-eq-name { font-weight: 600; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .dh-eq-total { font-weight: 700; color: var(--ink); }
  .dh-eq-bar { height: 6px; border-radius: 3px; background: var(--gray-100); overflow: hidden; }
  .dh-eq-bar i { display: block; height: 100%; background: var(--brand); border-radius: 3px; }
  .dh-eq-n { display: inline-block; min-width: 22px; padding: 1px 7px; border-radius: var(--r-pill); font-size: 11.5px; font-weight: 600; font-variant-numeric: tabular-nums; }
  .dh-eq-none { color: var(--gray-300); }
  .dh-eq-detail td { background: var(--surface-2); padding: 0; }
  .dh-eq-detail-in { padding: 10px 14px 14px; }
  .dh-eq-detail-t { font-size: 11px; color: var(--ink-3); margin-bottom: 8px; } .dh-eq-detail-t b { color: var(--ink-2); }
  .dh-eq-sub { width: 100%; border-collapse: collapse; font-size: 11.5px; background: var(--surface); border-radius: var(--r-md); overflow: hidden; }
  .dh-eq-sub th { padding: 6px 8px; text-align: left; color: var(--ink-3); font-size: 11px; background: var(--surface-2); border-bottom: 1px solid var(--border-strong); }
  .dh-eq-sub td { padding: 6px 8px; border-bottom: 1px solid var(--border); }
  .dh-eq-sub .r { text-align: right; } .dh-eq-sub .nowrap { white-space: nowrap; } .dh-eq-sub .ell { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

