/* 통합 대시보드(신대리 전용 시험 단계). 색·글꼴은 styles.css 변수만 쓴다. */
/* 폭 제한 없음: 기존 스케줄·캘린더 화면처럼 본문 폭을 꽉 채운다.
   position: relative — 화면 읽기용 숨김 글자 등 absolute 요소가 스크롤 영역 밖(문서 기준)에 놓여
   페이지 아래에 빈 스크롤이 생기지 않게 대시보드 안을 기준으로 삼는다 */
.home-page { position: relative; }
.home-block { margin-bottom: 16px; padding: 16px; border: 1px solid var(--border-color); border-radius: var(--radius-lg); background: var(--bg-card); box-shadow: var(--shadow-sm); }
.home-block-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.home-block-head h3 { display: flex; align-items: center; gap: 8px; font-size: 16px; }
.home-block-head h3 .assignee-badge { padding: 2px 10px; }
.home-empty { padding: 18px 12px; border: 1px dashed var(--border-color); border-radius: var(--radius-md); color: var(--text-muted); font-size: 13px; text-align: center; }

/* ① 직원 진행 예정 업무 */
.home-team-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.home-person { display: flex; flex-direction: column; gap: 6px; min-width: 0; padding: 12px; border: 1px solid var(--border-color); border-left: 4px solid var(--color-rank-unassigned); border-radius: var(--radius-md); background: var(--bg-card); color: inherit; font: inherit; text-align: left; cursor: pointer; transition: box-shadow 0.2s ease, transform 0.2s ease; }
@media (hover: hover) { .home-person:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); } }
.home-person.rank-president { border-left-color: var(--color-rank-president); }
.home-person.rank-manager { border-left-color: var(--color-rank-manager); }
.home-person.rank-shin { border-left-color: var(--color-rank-shin); }
.home-person.rank-staff { border-left-color: var(--color-rank-staff); }
.home-person-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 6px; }
.home-person-name { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 4px; }
.home-person-head .assignee-badge { min-width: 0; padding: 3px 10px; }
.home-person-title { display: -webkit-box; overflow: hidden; color: var(--text-main); font-size: 14px; font-weight: 700; line-height: 1.35; word-break: break-all; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
.home-person-title.is-urgent { color: #c2410c; }
.home-person-title.is-important { color: var(--color-danger); }
.home-person-empty { color: var(--text-muted); font-size: 13px; font-weight: 600; }
.home-person-empty.is-done { color: var(--color-success); }
.home-progress { height: 4px; margin-top: 2px; overflow: hidden; border-radius: 99px; background: #f1f5f9; }
.home-progress > span { display: block; height: 100%; border-radius: inherit; background: var(--color-success); }

/* 긴급·중요 띠 — 항목이 없으면 hidden으로 통째로 숨긴다 */
.home-alert-strip { margin-top: 12px; padding: 10px 12px; border: 1px solid #fed7aa; border-radius: var(--radius-md); background: #fffbeb; }
.home-alert-strip[hidden] { display: none; }
.home-alert-list { display: flex; flex-direction: column; gap: 6px; list-style: none; }
.home-alert-item { display: flex; align-items: center; gap: 6px; width: 100%; min-width: 0; padding: 8px 10px; border: 1px solid #fde68a; border-radius: 8px; background: var(--bg-card); color: inherit; font: inherit; text-align: left; cursor: pointer; }
.home-alert-item .assignee-badge, .home-alert-item .urgent-badge, .home-alert-item .status-badge { flex-shrink: 0; min-width: 0; padding: 2px 7px; font-size: 11px; }
.home-alert-title { flex: 1; min-width: 0; overflow: hidden; color: var(--text-main); font-size: 13px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.home-alert-go { color: var(--text-light); font-size: 12px; }

/* ② 내 업무 — 대시보드에서는 일괄 선택을 쓰지 않는다(날짜 상세 화면 전용) */
#home-section .checkbox-custom-container { display: none; }
.home-expand { display: flex; align-items: center; justify-content: center; gap: 6px; width: 100%; margin-top: 12px; padding: 10px 12px; border: 1px solid var(--border-color); border-radius: var(--radius-md); background: #f8fafc; color: var(--text-main); font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; }
.home-expand i { transition: transform 0.2s ease; }
.home-expand[aria-expanded="true"] i { transform: rotate(180deg); }
.home-expand-count { color: var(--text-muted); font-weight: 600; }
.home-others { display: flex; flex-direction: column; gap: 16px; margin-top: 14px; }
.home-others[hidden] { display: none; }
.home-group-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; color: var(--text-muted); font-size: 12px; font-weight: 700; }
.home-group-head .assignee-badge { padding: 2px 10px; }
.home-group-head .lv-reorder { margin-left: auto; }
.home-role-group { scroll-margin-top: 12px; }

@media (max-width: 768px) {
  .home-block { margin-bottom: 10px; padding: 12px 10px; border-radius: var(--radius-md); }
  .home-block-head h3 { font-size: 15px; }
  .home-team-grid { gap: 8px; }
  .home-person { gap: 5px; padding: 10px 9px; }
  .home-person-head .assignee-badge { padding: 2px 8px; font-size: 11px; }
  .home-person-title { font-size: 13px; }
}

/* 관리자가 숨긴 메뉴(hidden)는 .nav-item의 display:flex가 덮지 않게 한다. */
.sidebar-nav .nav-item[hidden] { display: none !important; }

/* 제목 글자 대신 아이콘만 보이는 구역(화면 읽기 프로그램에는 제목을 읽어 준다) */
.home-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; }

/* 1차 피드백 2 — 날짜 제목, 칸 나눈 막대, 완료 접기, 카드 담당자 배지 숨김 */
.home-date { font-size: 18px; }
.home-segments { display: flex; gap: 3px; margin-top: 2px; }
.home-segment { flex: 1; height: 5px; border-radius: 99px; background: #e2e8f0; }
.home-segment.is-done { background: var(--color-success); }
.home-done-toggle { display: flex; align-items: center; gap: 6px; width: 100%; margin-top: 10px; padding: 8px 12px; border: 0; border-radius: var(--radius-md); background: transparent; color: var(--text-muted); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.home-done-toggle[hidden] { display: none; }
.home-done-toggle .fa-circle-check { color: var(--color-success); }
.home-done-chevron { margin-left: auto; transition: transform 0.2s ease; }
.home-done-toggle[aria-expanded="true"] .home-done-chevron { transform: rotate(180deg); }
.home-done-list { margin-top: 8px; }
.home-done-list[hidden] { display: none; }

/* 3차 — 긴급·중요는 상자 없이 색 글자, ② 카드는 동그라미 체크 */
.home-flag { flex-shrink: 0; margin-right: 6px; font-size: 12px; font-weight: 800; }
.home-flag.is-urgent { color: #c2410c; }
.home-flag.is-important { color: var(--color-danger); }
.home-flag.is-attendance { color: #dc2626; font-weight: 700; }
.home-card { display: flex; align-items: flex-start; gap: 10px; padding: 12px; border: 1px solid var(--border-color); border-left: 4px solid var(--color-rank-unassigned); border-radius: var(--radius-md); background: var(--bg-card); box-shadow: var(--shadow-sm); }
.home-card.rank-president { border-left-color: var(--color-rank-president); }
.home-card.rank-manager { border-left-color: var(--color-rank-manager); }
.home-card.rank-shin { border-left-color: var(--color-rank-shin); }
.home-card.rank-staff { border-left-color: var(--color-rank-staff); }
.home-card.rank-it_solution { border-left-color: var(--color-rank-it_solution); }
.home-card.is-done { opacity: 0.6; }
.home-card.is-done .home-card-title span:last-of-type { color: var(--text-muted); text-decoration: line-through; }
.home-card .home-check.status-toggle-btn { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 28px; height: 28px; margin-top: -3px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--text-light); font-size: 22px; cursor: pointer; }
.home-card .home-check.status-toggle-btn.completed { color: var(--color-success); }
@media (hover: hover) { .home-card .home-check.status-toggle-btn:hover { background: transparent; color: var(--color-success); } }
.home-card-body { flex: 1; min-width: 0; }
.home-card-title { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0; color: var(--text-main); font-size: 14px; font-weight: 600; line-height: 1.4; word-break: break-all; }
.home-fixed { margin-left: 6px; color: var(--text-light); font-size: 11px; }
.home-card-memo { margin-top: 4px; color: var(--text-muted); font-size: 12px; line-height: 1.45; word-break: break-all; }
.home-edit { flex-shrink: 0; width: 28px; height: 28px; border: 0; border-radius: 50%; background: transparent; color: var(--text-light); cursor: pointer; }
@media (hover: hover) { .home-edit:hover { background: #f1f5f9; color: var(--text-main); } }
.home-alert-item .home-flag { margin-right: 2px; }

/* 4차 — 제목 없는 ① 머리 여백 제거, 카드 가운데 정렬·크기 축소 */
.home-block-head.is-hidden-heading { margin: 0; }
.home-card { align-items: center; gap: 8px; padding: 8px 10px; }
.home-card .home-check.status-toggle-btn { width: 26px; height: 26px; margin-top: 0; font-size: 20px; }
.home-card-title { align-items: center; font-size: 13.5px; line-height: 1.35; }
.home-card-memo { margin-top: 2px; }
.home-edit { width: 26px; height: 26px; font-size: 13px; }

/* 대시보드 하위 일정도 같은 크기의 카드로 표시한다. 완료 버튼 자리에는 연결 화살표만 둔다. */
#home-section .home-child-arrow { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 26px; width: 26px; height: 26px; color: var(--text-light); font-size: 20px; }

/* 5차 — ① 라벨 없이 선으로 구분·한 줄 제목, 순서 미정은 이름 옆, 3초 되돌리기 */
.home-order-flag { color: #b45309; font-size: 11px; font-weight: 800; }
.home-person-title.is-current, .home-person-title.is-next { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; -webkit-line-clamp: unset; }
.home-person-title.is-current { color: var(--text-main); font-size: 14px; font-weight: 700; }
.home-person-title.is-current.is-urgent { color: #c2410c; }
.home-person-title.is-current.is-important { color: var(--color-danger); }
.home-person-title.is-next { color: var(--text-muted); font-size: 12.5px; font-weight: 500; }
.home-person-divider { display: block; height: 1px; margin: 1px 0; background: var(--border-color); }
.home-card-title { flex-wrap: nowrap; min-width: 0; }
.home-card-title > span:not(.home-flag) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.home-card-memo { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 긴 일정 글씨만 기본 가로 스크롤. 카드 높이·버튼·PC 표시에는 영향을 주지 않는다. */
@media (max-width: 768px) {
  #home-section [data-home-scroll-text].is-scrollable-text {
    text-overflow: clip;
    overflow-x: auto;
    overflow-y: hidden;
    touch-action: pan-x pan-y pinch-zoom;
    overscroll-behavior-x: contain;
    scrollbar-width: none;
  }
  #home-section [data-home-scroll-text].is-scrollable-text::-webkit-scrollbar { display: none; }
}
.home-undo { position: fixed; left: 50%; bottom: 96px; z-index: 1500; display: flex; align-items: center; gap: 16px; padding: 10px 12px 10px 18px; border-radius: 999px; background: rgba(15, 23, 42, 0.94); box-shadow: var(--shadow-lg); color: var(--text-white); font-size: 14px; font-weight: 600; white-space: nowrap; transform: translateX(-50%); }
.home-undo[hidden] { display: none; }
.home-undo button { padding: 6px 12px; border: 0; border-radius: 999px; background: rgba(255, 255, 255, 0.14); color: #93c5fd; font: inherit; font-weight: 800; cursor: pointer; }
@media (max-width: 768px) { .home-person-title.is-current { font-size: 13px; } .home-person-title.is-next { font-size: 12px; } }

/* ③ 캘린더 — 기존 캘린더 모양 그대로. PC는 ◀ ▶, 휴대폰(터치)은 좌우 밀기 */
.home-calendar { margin-bottom: 16px; }
.home-cal-title { font-size: 20px; user-select: none; }
.home-cal-viewport { overflow: hidden; border-radius: var(--radius-md); }
/* 세로 스크롤은 브라우저, 가로는 앱. 칸처럼 안쪽 스크롤 영역에는 조상 값이 이어지지 않아 자손까지 지정한다 */
.home-cal-viewport, .home-cal-viewport * { touch-action: pan-y pinch-zoom; }
.home-cal-grid { will-change: transform; }
.home-cal-grid.is-settling { transition: transform 0.22s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.22s ease-out; }
/* '오늘'은 제목 아래가 아니라 오른쪽에 둔다(세로 공간 절약) */
.home-calendar .calendar-header-center { flex-direction: row; gap: 8px; }
.home-calendar .calendar-cell { height: 110px; }
.home-cal-hint { margin-top: 8px; color: var(--text-light); font-size: 12px; text-align: center; }
@media (hover: none) and (pointer: coarse) { .home-cal-arrow { visibility: hidden; } }
@media (max-width: 768px) {
  .home-cal-title { font-size: 14px; }
  .home-calendar .calendar-cell { height: 88px; }
}
/* 대시보드 사용자 달력의 오늘: 숫자 동그라미(좁은 칸에서 잘림) 대신 칸 전체를 분홍 네모로 */
.calendar-cell.today-cell { background-color: #fdf2f8; box-shadow: inset 0 0 0 2px #ec4899; }
.calendar-cell.today-cell .calendar-date-num { background: none !important; box-shadow: none !important; color: #db2777 !important; font-weight: 800; }

/* 대시보드 사용자 달력의 완료 일정: 담당자 색(신대리=초록) 대신 회색 */
.calendar-mini-event.completed-task { background-color: #f1f5f9 !important; color: #94a3b8 !important; border-color: #e2e8f0 !important; opacity: 1; }


/* ④ 간단 메모 */
.home-link { display: inline-flex; align-items: center; gap: 4px; padding: 4px 2px; border: 0; background: none; color: var(--text-muted); font: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer; }
.home-link:hover { color: var(--color-primary); }
.home-link i { font-size: 10px; }
.home-memo-form { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
/* 16px: iPhone은 이보다 작은 입력칸을 누르면 화면을 확대한다 */
.home-memo-input { width: 100%; min-height: 52px; padding: 10px 12px; border: 1px solid var(--border-color); border-radius: var(--radius-md); background: var(--bg-card); color: var(--text-main); font: inherit; font-size: 16px; line-height: 1.45; resize: vertical; }
.home-memo-input:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12); }
.home-memo-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
/* 마감일 칸(마감을 고르면 보임): 칩과 같은 높이 */
.home-memo-date { height: 32px; padding: 0 10px; border: 1px solid var(--border-color); border-radius: 999px; background: var(--bg-card); color: var(--text-main); font: inherit; font-size: 13px; }
.home-memo-date[hidden] { display: none; }
/* 휴대폰은 입력칸 글자가 16px(확대 방지)이라 날짜 칸이 넓어져 [저장]이 다음 줄로 밀린다: 너비를 날짜 글자에 맞춰 고정 */
@media (max-width: 768px) { .home-memo-date { width: 132px; min-width: 0; padding: 0 8px; } }
.home-memo-chip { position: relative; display: inline-flex; align-items: center; gap: 4px; min-height: 32px; padding: 0 12px; border: 1px solid var(--border-color); border-radius: 999px; background: var(--bg-card); color: var(--text-muted); font-size: 12.5px; font-weight: 700; cursor: pointer; user-select: none; }
/* 숨긴 체크박스는 칩 안에 둔다(기준 부모가 없으면 문서 기준으로 놓여 페이지 아래에 빈 스크롤이 생긴다) */
.home-memo-chip input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; pointer-events: none; }
/* .is-on: :has()를 못 쓰는 브라우저에서도 고른 칩이 보이게(setHomeMemoKind) */
.home-memo-chip:has(input:checked),
.home-memo-chip.is-on { border-color: var(--color-primary); background: var(--color-primary-light); color: var(--color-primary); }
.home-memo-chip:has(input:focus-visible) { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.home-memo-save { margin-left: auto; min-height: 34px; padding: 0 18px; border: 0; border-radius: 999px; background: var(--color-primary); color: var(--text-white); font: inherit; font-size: 13.5px; font-weight: 800; cursor: pointer; }
.home-memo-save:disabled { opacity: 0.55; cursor: default; }
.home-memo-tag { flex: 0 0 auto; margin-right: 6px; font-size: 12px; font-weight: 800; }
.home-memo-tag.is-danger { color: var(--color-danger); }
.home-memo-tag.is-warning { color: #c2410c; }
.home-memo-tag.is-primary { color: var(--color-primary); }
.home-memo-tag.is-muted { color: var(--text-muted); font-weight: 700; }
/* 메모는 담당자가 없으므로 담당자 색(미배정=보라) 대신 중립 회색 선 */
.home-memo-card { border-left-color: #cbd5e1; }

/* Phase 4 뒤로가기: 하위 화면 '뒤로' 버튼은 PC(마우스)에서만(9장 결정 7) */
.app-back-btn { display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 0 14px; border: 1px solid var(--border-color); border-radius: 999px; background: var(--bg-card); color: var(--text-main); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.app-back-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.app-back-btn[hidden] { display: none; }
@media not all and (hover: hover) and (pointer: fine) { .app-back-btn { display: none !important; } }
/* 아이폰 홈 화면 앱 끝 밀기: 화면 끝에서 미는 만큼 화살표가 나오고, 기준을 넘으면 파랗게 */
.app-edge-hint { position: fixed; top: 50%; z-index: 2000; display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; margin-top: -20px; border-radius: 50%; background: rgba(15, 23, 42, 0.78); color: #fff; font-size: 16px; opacity: calc(0.35 + var(--edge-progress, 0) * 0.65); pointer-events: none; }
.app-edge-hint[hidden] { display: none; }
.app-edge-hint[data-side="left"] { left: 0; transform: translateX(calc(-44px + var(--edge-progress, 0) * 56px)); }
.app-edge-hint[data-side="right"] { right: 0; transform: translateX(calc(44px - var(--edge-progress, 0) * 56px)) scaleX(-1); }
.app-edge-hint.is-ready { background: var(--color-primary); }

/* Phase 6 하단 메뉴·'전체' 시트(신대리 전용, 휴대폰만) */
.app-tabbar { display: none; }
.app-more-sheet { display: none; }
.schedule-calendar { margin-bottom: 12px; }
#go-to-calendar-btn.is-active { background: var(--color-primary-light); color: var(--color-primary); border-color: var(--color-primary); }
/* 방문현황 바로가기는 홈 카드·'전체'에서 들어가므로 대시보드 사용자에게는 숨긴다(업무순서 버튼은 기능이라 유지) */
.workflow-shortcuts [data-workflow-target="protected-visit-section"] { display: none !important; }
@media (max-width: 768px) {
  .has-app-tabbar .app-tabbar:not([hidden]) { position: fixed; left: 0; right: 0; bottom: 0; z-index: 900; display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); padding: 6px 4px calc(6px + env(safe-area-inset-bottom) + var(--tabbar-extra, 0px)); border-top: 1px solid var(--border-color); background: var(--bg-card); transition: transform 220ms ease; }
  .has-app-tabbar .app-tabbar.is-scroll-hidden { transform: translateY(calc(100% + 2px)); }
  .app-tab { display: flex; flex-direction: column; align-items: center; gap: 3px; min-height: 48px; padding: 4px 0; border: 0; background: none; color: var(--text-muted); font: inherit; font-size: 11px; font-weight: 700; cursor: pointer; -webkit-tap-highlight-color: transparent; }
  .app-tab i { font-size: 19px; }
  .app-tab.active { color: var(--color-primary); }
  .app-tab[hidden] { display: none; }
  /* 하단 메뉴 높이만큼 위로: 본문 끝, + 버튼, 되돌리기 알림 */
  .has-app-tabbar .main-content { padding-bottom: calc(76px + env(safe-area-inset-bottom) + var(--tabbar-extra, 0px)); }
  .has-app-tabbar #add-schedule-btn { bottom: calc(76px + env(safe-area-inset-bottom) + var(--tabbar-extra, 0px)); transition: transform 220ms ease; }
  .has-app-tabbar:has(.app-tabbar.is-scroll-hidden) #add-schedule-btn { transform: translateY(calc(56px + var(--tabbar-extra, 0px))); }
  .has-app-tabbar .home-undo { bottom: calc(144px + env(safe-area-inset-bottom) + var(--tabbar-extra, 0px)); }
  /* 아이폰 홈 화면 앱: 이 앱은 viewport-fit=cover가 아니라 안전 여백(env)이 0으로 온다.
     하단 홈 표시줄에 메뉴가 걸리지 않게 조금 띄운다(다른 기기·직원에게는 영향 없음) */
  .is-ios-app { --tabbar-extra: 14px; }
  /* 메뉴 서랍 대신 하단 메뉴를 쓴다 */
  .has-app-tabbar #mobile-menu-btn { visibility: hidden; transition: none; }
  /* 글자를 입력하는 동안에는 키보드 위로 올라오지 않게 숨긴다 */
  .has-app-tabbar:has(input:is(:not([type]), [type="text"], [type="search"], [type="email"], [type="password"], [type="tel"], [type="url"], [type="number"]):focus, textarea:focus) .app-tabbar { display: none; }
  /* 열 때 아래에서 올라오고, 닫을 때(is-closing, app.js closeAppMoreSheet) 다시 내려간다. 창·서랍과 같은 곡선(styles.css --motion-*) */
  .app-more-sheet.active, .app-more-sheet.is-closing { position: fixed; inset: 0; z-index: 1600; display: flex; align-items: flex-end; background: rgba(15, 23, 42, 0.45); animation: app-sheet-dim var(--motion-fade) var(--motion-ease); }
  .app-more-sheet.is-closing { pointer-events: none; animation: app-sheet-undim var(--motion-sheet) var(--motion-ease) forwards; }
  .app-more-panel { width: 100%; max-height: 85vh; overflow-y: auto; padding: 16px 16px calc(16px + env(safe-area-inset-bottom) + var(--tabbar-extra, 0px)); border-radius: 18px 18px 0 0; background: var(--bg-card); animation: app-sheet-up var(--motion-sheet) var(--motion-ease); }
  .app-more-sheet.is-closing .app-more-panel { animation: app-sheet-down var(--motion-sheet) var(--motion-ease) forwards; }
  @keyframes app-sheet-up { from { transform: translateY(100%); } to { transform: none; } }
  @keyframes app-sheet-down { from { transform: none; } to { transform: translateY(100%); } }
  @keyframes app-sheet-dim { from { background-color: rgba(15, 23, 42, 0); } }
  @keyframes app-sheet-undim { to { background-color: rgba(15, 23, 42, 0); } }
  .app-more-profile { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
  .app-more-avatar { flex: 0 0 auto; width: 44px; height: 44px; font-size: 17px; -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
  .app-more-who { display: flex; flex-direction: column; min-width: 0; }
  .app-more-who strong { font-size: 15px; }
  .app-more-who span { color: var(--text-muted); font-size: 12px; }
  /* Google 로그인 상태는 버튼이 아니라 이름 아래 조용한 한 줄(연결된 기기). 긴 메일은 …로 줄인다 */
  .app-more-who .app-more-account { margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .app-more-who .app-more-account[hidden] { display: none; }
  .app-more-close { margin-left: auto; width: 36px; height: 36px; border: 0; border-radius: 50%; background: var(--bg-app); color: var(--text-muted); font-size: 16px; }
  .app-more-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
  .app-more-item { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 14px 4px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--bg-card); color: var(--text-main); font: inherit; font-size: 12.5px; font-weight: 700; }
  .app-more-item i { color: var(--color-primary); font-size: 20px; }
  .app-more-admin { margin-top: 14px; padding: 12px; border: 1px dashed #f59e0b; border-radius: 12px; background: #fffbeb; }
  .app-more-admin[hidden] { display: none; }
  .app-more-admin-title { margin: 0 0 10px; color: #b45309; font-size: 12.5px; font-weight: 800; }
  .app-more-admin-title span { margin-left: 4px; color: #d97706; font-weight: 600; }
  .app-more-admin .app-more-item i { color: #d97706; }
  .app-more-footer { display: flex; gap: 8px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--border-color); }
  .app-more-footer button { flex: 1; min-height: 40px; border: 1px solid var(--border-color); border-radius: 10px; background: var(--bg-card); color: var(--text-muted); font: inherit; font-size: 12.5px; font-weight: 700; }
  .app-more-footer button[hidden] { display: none; }
  .app-more-footer .is-danger { color: var(--color-danger); border-color: rgba(220, 38, 38, 0.35); }
}

/* ===== 새 색상 테마 B: 인디고(2026-09-26 사용자 선택) =====
   색 변수는 styles.css :root에 바로 들어 있다. 여기서는 어두운 배경을 전제로 한 사이드바·휴대폰 머리글만 밝게 고친다.
   담당자 색과 긴급(주황)·중요(빨강)는 의미가 있어 그대로 둔다. */
.sidebar { color: var(--text-main); border-right: 1px solid var(--border-color); }
.sidebar-brand,
.sidebar-footer { border-color: var(--border-color); }
.sidebar-brand h1,
.user-name { color: var(--text-main); }
.nav-item { color: var(--text-muted); }
.nav-item:hover { color: var(--text-main); background-color: var(--color-primary-light); }
.nav-item.active { color: #ffffff; background-color: var(--color-primary); }
.capture-mask-toggle { border-color: rgba(217, 119, 6, 0.35); background: #fffbeb; color: #92400e; }
.home-memo-input:focus { box-shadow: 0 0 0 3px rgba(91, 91, 214, 0.14); }
.home-undo button { color: #c7c7ff; }
@media (max-width: 768px) {
  .mobile-header { background-color: #ffffff; color: var(--text-main); border-bottom: 1px solid var(--border-color); }
}
/* 파랑으로 박혀 있던 그림자·포커스 빛도 인디고로 */
.nav-item.active { box-shadow: 0 4px 14px 0 rgba(91, 91, 214, 0.35); }
.primary-btn { box-shadow: 0 4px 10px rgba(91, 91, 214, 0.2); }
.primary-btn-circle { box-shadow: 0 4px 14px rgba(91, 91, 214, 0.4); }
.primary-btn-circle:hover { box-shadow: 0 6px 20px rgba(91, 91, 214, 0.5); }
.form-control:focus { box-shadow: 0 0 0 3px rgba(91, 91, 214, 0.12); }

/* ===== 잡스식 정비 1: 스케줄 화면(대시보드 사용자 전용) ===== */
.schedule-filter-btn { display: none; }
.schedule-filter-btn { display: inline-flex; position: relative; }
.schedule-filter-btn.is-active { background: var(--color-primary-light); color: var(--color-primary); border-color: var(--color-primary); }
.schedule-filter-btn.has-filter::after { content: ''; position: absolute; top: 3px; right: 3px; width: 7px; height: 7px; border-radius: 50%; background: var(--color-danger); }
/* 정렬·직급 필터 상자는 접어 두고 아이콘으로 편다 */
#dashboard-section:not(.show-filters) #schedule-filter-bar { display: none; }
/* 날짜 줄 한 줄: ◀ 오늘 · 9월 26일 (토) ▾ ▶ [오늘] [필터] [순서]. 날짜 글자가 캘린더를 편다 */
#dashboard-section .list-date-navigation-wrapper { display: flex; align-items: center; gap: 6px; }
#dashboard-section .list-date-header-row,
#dashboard-section .date-nav-buttons,
#dashboard-section .schedule-view-shortcuts,
#dashboard-section .workflow-shortcuts { display: contents; }
#dashboard-prev-day-btn { order: 1; }
#today-list-header { order: 2; flex: 1; min-width: 0; margin: 0; overflow: hidden; text-align: center; text-overflow: ellipsis; white-space: nowrap; font-size: 15px; cursor: pointer; user-select: none; }
#today-list-header::after { content: '\f107'; margin-left: 6px; color: var(--text-light); font-family: 'Font Awesome 6 Free'; font-size: 12px; font-weight: 900; }
#dashboard-next-day-btn { order: 3; }
#dashboard-today-btn { order: 4; }
#schedule-filter-btn { order: 5; }
#dashboard-section .workflow-shortcuts > * { order: 6; }
#go-to-calendar-btn { display: none; }
/* 새 카드의 담당자 배지(누르면 담당 변경) */
.home-assignee { flex: 0 0 auto; max-width: 76px; padding: 3px 8px; border: 0; border-radius: 999px; font: inherit; font-size: 11.5px; font-weight: 700; text-align: center; cursor: pointer; appearance: none; -webkit-appearance: none; }
.home-assignee:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
/* 선택 모드: 동그라미 대신 네모 체크, 고른 카드는 강조 */
.home-select { position: relative; display: inline-flex; flex: 0 0 auto; align-items: center; justify-content: center; width: 26px; height: 26px; cursor: pointer; }
.home-select input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer; }
.home-select span { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border: 2px solid var(--text-light); border-radius: 6px; color: transparent; font-size: 12px; }
.home-select input:checked + span { border-color: var(--color-primary); background: var(--color-primary); color: #ffffff; }
.home-card.is-selected { border-color: var(--color-primary); background: var(--color-primary-light); }
#dashboard-section .home-card { -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
/* 날짜 줄은 기존 휴대폰 규칙(세로 배치)을 덮어 한 줄로, 담당자 배지는 입력칸 16px 규칙을 덮어 작게 */
#dashboard-section .list-date-navigation-wrapper { flex-direction: row; flex-wrap: nowrap; }
.home-assignee { font-size: 12px !important; line-height: 1.4; min-width: 0; }
#dashboard-today-btn[hidden] { display: none; }

/* 선택 모드 일괄 작업 바: 1줄 = 전체 선택·n건·취소, 2줄 = 담당자 칩(한 번 누르면 배정).
   일괄 완료·삭제는 거의 쓰지 않고 잘못 누르기 쉬워 없앴다(2026-09-27) */
#batch-action-bar[style*="flex"] { display: grid !important; grid-template-columns: 1fr auto; align-items: center; gap: 10px; }
#batch-action-bar .batch-actions-group { display: contents; }
#batch-action-bar .clear-btn { grid-column: 2; grid-row: 1; }
.batch-assign-chips { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 6px; }
.batch-assign-chips[hidden] { display: none; }
.batch-assign-chip { min-width: 0; min-height: 38px; padding: 0 10px; border-radius: 999px; font: inherit; font-size: 14px; font-weight: 800; cursor: pointer; }
.home-booting .sections-container { visibility: hidden; }

/* ===== 잡스식 정비 2: 방문현황(대시보드 사용자 모양) ===== */
.lv-dayline { display: flex; align-items: center; gap: 6px; margin-bottom: 12px; padding: 8px 10px; border: 1px solid var(--border-color); border-radius: var(--radius-lg); background: var(--bg-card); }
.lv-daylabel { position: relative; flex: 1; min-width: 0; overflow: hidden; font-size: 15px; font-weight: 800; text-align: center; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.lv-daylabel::after { content: '\f107'; margin-left: 6px; color: var(--text-light); font-family: 'Font Awesome 6 Free'; font-size: 12px; font-weight: 900; }
.lv-daylabel input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; }
.lv-cards { display: flex; flex-direction: column; gap: 12px; }
.lv-card { padding: 12px 14px; border: 1px solid var(--border-color); border-left: 4px solid var(--color-rank-unassigned); border-radius: var(--radius-lg); background: var(--bg-card); box-shadow: var(--shadow-sm); scroll-margin-top: 12px; transition: box-shadow 0.3s ease; }
.lv-card.rank-president { border-left-color: var(--color-rank-president); }
.lv-card.rank-manager { border-left-color: var(--color-rank-manager); }
.lv-card.rank-shin { border-left-color: var(--color-rank-shin); }
.lv-card.rank-staff { border-left-color: var(--color-rank-staff); }
.lv-card.rank-it_solution { border-left-color: var(--color-rank-it_solution); }
.lv-card.is-focus { box-shadow: 0 0 0 3px var(--color-primary-light), var(--shadow-sm); }
.lv-card-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.lv-card-state { font-size: 12px; font-weight: 800; }
.lv-card-state.is-unconfirmed { color: #b45309; }
.lv-card-state.is-done { color: var(--color-success); }
.lv-card-count { margin-left: auto; color: var(--text-light); font-size: 12px; font-weight: 700; }
.lv-list { margin: 0; padding: 0; list-style: none; }
.lv-item { display: flex; align-items: center; gap: 10px; min-height: 40px; padding: 4px 6px; border-radius: 10px; }
.lv-item + .lv-item { border-top: 1px solid var(--border-color); border-radius: 0; }
.lv-item.is-next { border-radius: 10px; background: var(--color-primary-light); }
.lv-item.is-next + .lv-item { border-top-color: transparent; }
.lv-item-title { display: flex; flex: 1; align-items: baseline; gap: 6px; min-width: 0; font-size: 14px; }
.lv-item-title > span:not(.home-flag) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.lv-item.is-next .lv-item-title { font-weight: 800; }
.lv-item.is-complete .lv-item-title { color: var(--text-muted); text-decoration: line-through; }
.lv-range { flex: 0 0 auto; color: var(--text-light); font-size: 11px; }
.lv-dot { flex: 0 0 auto; width: 22px; height: 22px; border: 2px solid var(--text-light); border-radius: 50%; transform: scale(0.8); }
.lv-item.is-next .lv-dot { border-color: var(--color-primary); background: var(--color-primary); box-shadow: inset 0 0 0 3px #ffffff; }
.lv-done-icon { flex: 0 0 auto; width: 22px; color: var(--color-success); font-size: 20px; text-align: center; }
.lv-check.status-toggle-btn { display: inline-flex; flex: 0 0 auto; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--color-primary); font-size: 22px; cursor: pointer; }
.lv-card .lv-empty, .lv-card .lv-note { margin: 4px 0 0; color: var(--text-muted); font-size: 12.5px; }

/* 순서는 방문현황에서만 바꾼다(방문현황을 볼 수 있는 사람에게는 스케줄 날짜 줄의 순서 버튼을 숨김) */
.home-visit-reorder .workflow-shortcuts [data-workflow-target="protected-order-section"] { display: none !important; }
.lv-reorder { flex: 0 0 auto; min-height: 28px; padding: 0 12px; border: 1px solid var(--border-color); border-radius: 999px; background: var(--bg-card); color: var(--color-primary); font: inherit; font-size: 12px; font-weight: 800; cursor: pointer; }
.lv-card-count + .lv-reorder { margin-left: 4px; }
#visit-order-root:not([hidden]), #home-order-root:not([hidden]) { padding-bottom: 12px; }

/* ===== 잡스식 정비 3: 개인 메모 · 나머지 화면(대시보드 사용자 전용) ===== */
.memo-group { margin-bottom: 14px; }
.memo-group-title { display: flex; align-items: center; gap: 6px; margin: 0 4px 8px; color: var(--text-muted); font-size: 13px; font-weight: 800; }
.memo-group-title span { color: var(--text-light); font-weight: 700; }
.memo-done-toggle { margin-top: 4px; }
.memo-delete-btn { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px; padding: 8px 12px; border: 1px solid rgba(220, 38, 38, 0.3); border-radius: 10px; background: #fef2f2; color: var(--color-danger); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.memo-delete-btn[hidden] { display: none; }
/* 설명문·안내 상자는 빼고 제목만(무엇을 하는 화면인지는 제목과 내용이 말한다) */
#memo-section .section-title-wrapper > p,
#attendance-section .section-title-wrapper > p,
#attendance-section > .alert { display: none !important; }

/* ===== 잡스식 정비 4: 알림 · 큰 캘린더(대시보드 사용자 전용) ===== */
/* 알림은 실시간이라 새로고침이 필요 없고, '최근 100개' 안내는 뺀다. 공지 작성만 오른쪽에 */
[data-notice-action="refresh"],
#legacy-announcements-root .notice-list + .notice-meta { display: none !important; }
#legacy-announcements-root .notice-header-actions { justify-content: flex-end; padding: 0; border: 0; background: none; box-shadow: none; }
/* 큰 캘린더: '오늘'은 제목 오른쪽, 휴대폰은 좌우 밀기(◀ ▶ 숨김), 오늘 칸에 선택 테두리 겹침 제거 */
#calendar-section .calendar-header-center { flex-direction: row; gap: 8px; }
#calendar-section .calendar-cell.today-cell.selected-cell { border: 0 !important; }
#calendar-section .calendar-grid,
#calendar-section .calendar-grid * { touch-action: pan-y pinch-zoom; }
#calendar-section .calendar-grid { will-change: transform; }
#calendar-section .calendar-grid.is-settling { transition: transform 0.22s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.22s ease-out; }
@media (hover: none) and (pointer: coarse) {
  #prev-month-btn, #next-month-btn { visibility: hidden; }
}

/* ===== 잡스식 정비 5: 일정 추가·수정 창(대시보드 사용자 전용) =====
   순서: 제목 → 칩(담당자·표시·분류) → 근태 유형(근태일 때) → 기간 → 반복(2026-10-08 기간 밑으로) → 메모.
   칩이 대신하는 목록 상자·체크박스는 숨긴다(값은 그대로 저장에 쓰인다) */
#schedule-form { display: flex; flex-direction: column; }
#schedule-form > * { order: 5; }
#schedule-form > #form-detach-child-group { order: 0; }
#schedule-form > .form-group:has(> #form-title) { order: 1; }
#schedule-form > #sf-quick { order: 2; }
#schedule-form > #form-attendance-type-wrapper { order: 3; }
#schedule-form > .form-group:has(> #form-category),
#schedule-form > .form-row:has(#form-assignee),
#schedule-form > .checkbox-wrapper:has(#form-is-fixed),
#schedule-form > .checkbox-wrapper:has(#form-is-urgent) { display: none !important; }
#form-title { font-size: 17px; font-weight: 700; }
/* 제목·메모 칸도 담당자 칩처럼 둥글게(2026-10-08) */
#schedule-form #form-title { height: 44px; min-height: 44px; max-height: 92px; padding: 9px 18px; border-radius: 22px; line-height: 24px; resize: none; overflow-y: hidden; overflow-wrap: anywhere; transition: border-color 0.2s ease, box-shadow 0.2s ease; }
#schedule-form #form-memo { padding: 12px 16px; border-radius: 18px; }
/* 메모: 평소엔 [＋ 메모·세부 지시사항] 버튼만(접기는 버튼이 연결된 뒤 .can-fold일 때만) */
.sf-memo-add { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; min-height: 34px; padding: 0 14px; border: 1px dashed var(--border-color); border-radius: 999px; background: none; color: var(--text-muted); font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.sf-memo-add[hidden] { display: none; }
/* 창 맨 아래 여백 1cm 더(2026-10-08) — 메모 묶음이 창의 마지막 칸이다 */
#schedule-form .sf-memo-group { padding-bottom: 1cm; }
@media (hover: hover) { .sf-memo-add:hover { border-color: var(--color-primary); color: var(--color-primary); } }
.sf-memo-group.can-fold:not(.is-open) > label,
.sf-memo-group.can-fold:not(.is-open) > textarea { display: none; }
.sf-quick { display: flex; flex-direction: column; gap: 10px; margin-bottom: 16px; }
.sf-quick[hidden] { display: none; }
.sf-row { display: flex; flex-wrap: wrap; gap: 6px; }
.sf-chip { display: inline-flex; align-items: center; gap: 5px; min-height: 36px; padding: 0 12px; border: 1px solid var(--border-color); border-radius: 999px; background: var(--bg-card); color: var(--text-muted); font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.sf-chip.is-on { border-color: var(--color-primary); background: var(--color-primary-light); color: var(--color-primary); }
.sf-chip.is-urgent.is-on { border-color: #f59e0b; background: #fff7ed; color: #c2410c; }
.sf-chip.is-important.is-on { border-color: rgba(220, 38, 38, 0.4); background: #fef2f2; color: var(--color-danger); }
.sf-chip.is-done.is-on { border-color: var(--color-success); background: var(--color-success-light); color: #047857; }
/* 담당자 칩: 담당자 색을 쓰되, 고르지 않은 칩은 흐리게 */
.sf-chip.assignee-badge { min-width: 0; opacity: 0.45; }
.sf-chip.assignee-badge.is-on { opacity: 1; box-shadow: 0 0 0 2px var(--bg-card), 0 0 0 4px currentColor; }
/* 담당자 선택은 색상과 진한 테두리로 구분한다. */
#sf-assignee .sf-chip.is-on,
.batch-assign-chip.is-on { border-color: currentColor; font-weight: 900; }
.batch-assign-chip.is-on { box-shadow: 0 0 0 2px currentColor; }
.batch-assign-chips[aria-busy="true"] .batch-assign-chip:not(.is-on) { opacity: 0.4; }
#sf-assignee .sf-chip:focus-visible,
.batch-assign-chip:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 4px; }
.sf-seg { gap: 0; padding: 3px; border-radius: 999px; background: var(--bg-app); align-self: flex-start; }
.sf-seg .sf-chip { min-height: 32px; border: 0; background: transparent; }
.sf-seg .sf-chip.is-on { background: var(--bg-card); box-shadow: var(--shadow-sm); }

/* ===== 잡스식 정비 6: 검색 · 알림(대시보드 사용자 전용) ===== */
/* 검색: 입력칸·결과를 감싸던 흰 상자를 걷고, 입력칸은 둥근 검색 줄로. 결과는 새 카드만 */
#search-section > .card { margin-bottom: 12px; padding: 0; border: 0; background: none; box-shadow: none; }
#global-calendar-search { height: 46px !important; border-radius: 999px !important; background: var(--bg-card); }
.search-empty { margin: 16px 0; color: var(--text-muted); font-size: 13.5px; text-align: center; }
/* 알림: 공지 한 줄 카드. '읽음/안 읽음' 글자 대신 안 읽은 공지에만 점, 빈 상태는 상자 없이 한 줄 */
#legacy-announcements-root .notice-row { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 2px 8px; padding: 12px 14px; border-radius: var(--radius-lg); text-align: left; }
#legacy-announcements-root .notice-row-title { overflow: hidden; font-size: 14.5px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
#legacy-announcements-root .notice-row .notice-meta { grid-column: 1; color: var(--text-muted); font-size: 12px; }
#legacy-announcements-root .notice-badge { grid-column: 2; grid-row: 1 / span 2; width: 9px; height: 9px; padding: 0; overflow: hidden; border: 0; border-radius: 50%; background: transparent; color: transparent; font-size: 0; }
#legacy-announcements-root .notice-badge.unread { background: var(--color-danger); }
#legacy-announcements-root .notice-empty { padding: 16px 0; border: 0; background: none; box-shadow: none; color: var(--text-muted); text-align: center; }

/* 일정 창 2차: 시작·종료를 각각 한 줄로, 날짜칸은 창 폭 안에(아이폰 날짜칸은 기본 폭이 넓어 창 밖으로 삐져나간다).
   창은 위아래로만 움직인다(가로 넘침·가로 밀림 차단) */
/* 시작 [날짜]  종료 [날짜] 한 줄(2026-10-08). 휴대폰도 한 줄 — 날짜 칸이 남는 폭을 나눠 쓴다 */
#schedule-form .schedule-date-row { display: flex; flex-direction: row; flex-wrap: nowrap; align-items: center; gap: 12px; }
#schedule-form .schedule-date-separator { display: none; }
#schedule-form .schedule-date-row .form-group { display: flex; flex: 1 1 0; align-items: center; gap: 6px; min-width: 0; margin: 0; }
#schedule-form .schedule-date-row .form-group label { flex: 0 0 auto; margin: 0; color: var(--text-muted); font-size: 13px; font-weight: 700; }
/* 날짜칸은 글자 크기에 맞게(2026-10-08: 창 폭 가득·44px가 커 보였다) — 칩과 같은 높이·둥근 모양.
   한 줄에 둘이라 남는 폭을 나눠 쓰되 최대 170px(아이폰은 기본 폭이 넓어 막는다 — 창 밖으로 나가지 않게) */
#schedule-form input[type="date"] { display: block; flex: 1 1 0; width: auto; min-width: 0; max-width: 170px; height: 34px; padding: 0 10px; border-radius: 999px; box-sizing: border-box; -webkit-appearance: none; appearance: none; }
/* 날짜 글자는 칸 가운데(2026-10-08: 아이폰에서 왼쪽 위에 붙어 보였다) — 일정 창·메모 창·간단 메모 날짜 칸 모두 */
#schedule-form input[type="date"], input[type="date"].chip-control, .home-memo-date { text-align: center; line-height: 32px; }
#schedule-form input[type="date"]::-webkit-date-and-time-value,
input[type="date"].chip-control::-webkit-date-and-time-value,
.home-memo-date::-webkit-date-and-time-value { margin: 0; text-align: center; }
/* 휴대폰 일정 창은 메모 창처럼 아래 시트(입력칸을 누르면 키보드와 함께 위로 밀린다). 10/8에 잠깐 위쪽으로 옮겼다가
   사용자 결정으로 되돌렸다 — 칩이 가려진 원인은 위치가 아니라 열자마자 키보드가 뜬 것(휴대폰 자동 커서는 bindScheduleFormChips에서 끔) */
#schedule-modal .modal-card,
#schedule-form { max-width: 100%; overflow-x: hidden; }
#schedule-form { touch-action: pan-y; overscroll-behavior-x: none; }
#schedule-form .schedule-date-row { margin-bottom: 16px; }
/* 메뉴 서랍 버튼(☰)은 하단 메뉴가 준비되기 전(첫 화면)에도 숨긴다(안 그러면 ☰가 잠깐 보였다 사라진다) */
@media (max-width: 768px) {
  #mobile-menu-btn { visibility: hidden; transition: none; }
}
/* 알림: 공지 작성은 오른쪽 아래 + 버튼으로(일정 추가와 같게). 머리 버튼 줄은 숨긴다 */
#legacy-announcements-root .notice-header-actions { display: none !important; }
/* ① 직원 카드 네 장을 같은 높이로(업무 1건·일정 없음·반차 배지로 줄 수가 달라도 윗줄·아랫줄이 같게),
   진행 막대는 카드 맨 아래에 붙인다 */
.home-team-grid { grid-auto-rows: 1fr; }
.home-person .home-segments, .home-person .home-progress { margin-top: auto; }
.home-check.is-disabled { opacity: 0.35; cursor: default; }

/* ===== 잡스식 정비 5: 순서 바꾸기(방문현황 [순서] → nt-compact, 대시보드 사용자 전용) =====
   [취소] 제목 [저장] 한 줄, 딱지(담당자·진행중) 대신 순서 번호, 손잡이는 테두리 없는 ≡.
   잡고 옮기는 카드(nt-compact-ghost)는 body에 붙으므로 같은 모양을 따로 준다. */
.nt-compact { color: var(--text-main); }
.nt-compact .nt-toolbar { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 8px; min-height: 52px; padding: 6px 0; background: var(--bg-app); }
.nt-compact .nt-toolbar h2 { order: 1; width: auto; font-size: 16px; font-weight: 800; text-align: center; white-space: nowrap; }
.nt-compact .nt-actions { display: contents; }
.nt-compact .nt-actions .wm-button { flex: none; order: 0; justify-self: start; min-height: 36px; padding: 0 16px; border-radius: 999px; font-size: 14px; }
.nt-compact .nt-actions .wm-button:not(.is-primary) { padding-left: 4px; border-color: transparent; background: transparent; color: var(--text-muted); }
.nt-compact .nt-actions .wm-button.is-primary,
.nt-compact:not(.nt-editing) .nt-actions .wm-button + .wm-button { order: 2; justify-self: end; }
.nt-compact .nt-actions .wm-button.is-primary { border-color: var(--color-primary); background: var(--color-primary); color: #ffffff; }
.nt-compact .nt-actions .wm-button.is-primary:disabled { border-color: transparent; background: var(--border-color); color: var(--text-light); opacity: 1; }
/* 안내 한 줄: 옮기는 동안 글자가 바뀌어도 목록이 밀리지 않게 높이를 고정한다 */
.nt-compact .nt-live { height: 32px; margin: 0 0 8px; padding: 0 2px; overflow: hidden; color: var(--text-light); font-size: 12.5px; line-height: 32px; text-overflow: ellipsis; white-space: nowrap; }
.nt-compact .nt-live.nt-save-error { height: auto; min-height: 32px; line-height: 1.45; white-space: normal; }
.nt-compact .nt-status-line { display: flex; align-items: center; gap: 8px; margin: 0 0 8px; }
.nt-compact .nt-status-line .nt-live { flex: 1; margin: 0; }
.nt-compact .wm-button.nt-undo { flex: none; min-height: 30px; padding: 0 12px; border: 0; border-radius: 999px; background: var(--color-primary-light); color: var(--color-primary); font-size: 12.5px; font-weight: 800; }
.nt-compact .wm-button.nt-undo[hidden] { display: none; }
.nt-compact .nt-group, .nt-group.nt-compact-ghost { padding: 2px 4px 2px 12px; border: 1px solid var(--border-color); border-left: 4px solid var(--nt-accent, var(--color-primary)); border-radius: var(--radius-lg); background: var(--bg-card); box-shadow: var(--shadow-sm); }
.nt-group.nt-compact-ghost, .nt-row.nt-compact-ghost { outline: 2px solid var(--color-primary); border-radius: var(--radius-lg); }
.nt-row.nt-compact-ghost { padding: 0 4px 0 12px; }
:is(.nt-compact, .nt-compact-ghost) .nt-row, .nt-row.nt-compact-ghost { gap: 12px; min-height: 52px; }
:is(.nt-compact, .nt-compact-ghost) .nt-num { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--color-primary-light); color: var(--color-primary); font-size: 12px; font-weight: 800; }
:is(.nt-compact, .nt-compact-ghost) .nt-copy { gap: 2px; }
:is(.nt-compact, .nt-compact-ghost) .nt-copy .card-title-text { color: var(--text-main); font-size: 14.5px; font-weight: 700; line-height: 1.4; }
:is(.nt-compact, .nt-compact-ghost) .nt-copy .card-memo-box { display: -webkit-box; overflow: hidden; padding: 0; border: 0; background: none; color: var(--text-muted); font-size: 12.5px; white-space: normal; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
:is(.nt-compact, .nt-compact-ghost) .nt-row.is-done .card-title-text, .nt-row.nt-compact-ghost.is-done .card-title-text { color: var(--text-light); text-decoration: line-through; }
:is(.nt-compact, .nt-compact-ghost) .nt-row.is-done .nt-num { background: var(--bg-app); color: var(--text-light); }
:is(.nt-compact, .nt-compact-ghost) .wm-button.nt-handle { width: 40px; min-height: 40px; border: 0; border-radius: 10px; background: transparent; color: var(--text-light); font-size: 16px; }
.nt-compact .wm-button.nt-handle:active, .nt-compact .wm-button.nt-handle[aria-pressed="true"] { background: var(--color-primary-light); color: var(--color-primary); }
:is(.nt-compact, .nt-compact-ghost) .nt-children { margin: 0 0 6px 36px; padding-left: 10px; border-left: 2px solid var(--border-color); }
:is(.nt-compact, .nt-compact-ghost) .nt-child-row { min-height: 44px; padding: 2px 0; border-bottom: 0; }
:is(.nt-compact, .nt-compact-ghost) .nt-child-row ~ .nt-child-row { border-top: 1px solid var(--border-color); }
:is(.nt-compact, .nt-compact-ghost) .nt-child-row .card-title-text { font-size: 13.5px; font-weight: 500; }
.nt-compact .nt-gap { height: 10px; }
.nt-compact .nt-gap:first-child { height: 0; }
.nt-compact .nt-gap.nt-drop-active::before, .nt-compact .nt-child-gap.nt-drop-active::before { background: var(--color-primary); }
.nt-compact .nt-order-slot { border-color: var(--color-primary); border-radius: var(--radius-lg); background: var(--color-primary-light); }
.nt-compact .nt-empty { padding: 24px 8px; border: 1px dashed var(--border-color); border-radius: var(--radius-lg); color: var(--text-muted); text-align: center; }
/* 오른쪽으로 밀어 넣기: 빈칸이 들여쓰기되고 잡은 카드도 같이 밀린다('○○ 안에'는 위 안내 줄이 말한다.
   빈칸 안 글자는 잡은 카드에 가려 지저분해서 넣지 않는다) */
.nt-compact .nt-order-slot { transition: left 0.15s ease-out; }
.nt-compact .nt-order-slot.is-indent { left: 36px; border-style: solid; }
.nt-compact-ghost { transition: margin-left 0.15s ease-out; }
.nt-compact-ghost.is-indent { max-width: calc(100vw - 52px); margin-left: 36px; } /* 밀려도 화면 밖으로 나가지 않게 */
@media (prefers-reduced-motion: reduce) { .nt-compact .nt-order-slot, .nt-compact-ghost { transition: none; } }
/* 손잡이는 카드 왼쪽: 오른쪽 끝에 두면 화면 끝까지 30px도 안 남아 오른쪽으로 밀기를 할 수 없다.
   왼쪽 끝 24px(아이폰 뒤로가기 밀기 구역)과는 겹치지 않게 조금 안쪽에 둔다 */
:is(.nt-compact, .nt-compact-ghost) .nt-row > .nt-handle, .nt-row.nt-compact-ghost > .nt-handle { order: -1; margin-left: 4px; margin-right: -6px; }
.nt-compact .nt-group, .nt-group.nt-compact-ghost { padding-right: 12px; }

/* ===== 잡스식 정비 6: 관리자 메뉴(사람 중심) ===== */
/* 시스템 설정은 탭 대신 관리자 메뉴 항목마다 한 화면: 탭 줄은 숨기고, 백업 안내 배너는 '데이터'에서만 */
#admin-settings-section[data-mode]:not([data-mode="data"]) #admin-reminders { display: none; }
.adm-page { display: flex; flex-direction: column; gap: 0; max-width: 720px; }
.adm-caption { margin: 22px 4px 8px; color: var(--text-muted); font-size: 13px; font-weight: 800; }
.adm-caption:first-child { margin-top: 4px; }
.adm-note { margin: -4px 4px 8px; color: var(--text-light); font-size: 12.5px; line-height: 1.5; }
.adm-group { overflow: hidden; border: 1px solid var(--border-color); border-radius: var(--radius-lg); background: var(--bg-card); }
.adm-row { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 52px; padding: 8px 14px; border: 0; background: transparent; color: var(--text-main); font: inherit; text-align: left; }
.adm-row + .adm-row { border-top: 1px solid var(--border-color); }
button.adm-row { cursor: pointer; }
button.adm-row:active { background: var(--color-primary-light); }
.adm-row-title { flex: 1; min-width: 0; font-size: 14.5px; font-weight: 700; }
.adm-row-sub { flex: 1; min-width: 0; color: var(--text-muted); font-size: 12.5px; }
.adm-person-row .assignee-badge { flex: none; }
.adm-chevron { flex: none; color: var(--text-light); font-size: 13px; }
.adm-rank { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--color-primary-light); color: var(--color-primary); font-size: 12px; font-weight: 800; }
.adm-move { display: flex; gap: 6px; }
.adm-icon-btn { width: 36px; height: 36px; border: 1px solid var(--border-color); border-radius: 10px; background: var(--bg-card); color: var(--text-muted); cursor: pointer; }
.adm-icon-btn:disabled { opacity: 0.35; cursor: default; }
/* 스위치 */
.adm-switch { position: relative; flex: none; width: 48px; height: 28px; padding: 0; border: 0; border-radius: 999px; background: var(--border-color); cursor: pointer; transition: background 0.15s ease; }
.adm-switch span { position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: #ffffff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); transition: transform 0.15s ease; }
.adm-switch.is-on { background: var(--color-primary); }
.adm-switch.is-on span { transform: translateX(20px); }
.adm-switch:disabled { opacity: 0.5; cursor: default; }
/* 범위 3칸 */
.adm-scope-row { flex-wrap: wrap; }
.adm-seg { display: inline-flex; flex: none; padding: 3px; border-radius: 10px; background: var(--bg-app); }
.adm-seg button { min-width: 64px; min-height: 32px; padding: 0 10px; border: 0; border-radius: 8px; background: transparent; color: var(--text-muted); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.adm-seg button.is-on { background: var(--bg-card); color: var(--color-primary); box-shadow: 0 1px 3px rgba(28, 28, 40, 0.12); }
.adm-seg button:disabled { opacity: 0.5; cursor: default; }
/* 예외 칩 */
.adm-chip-row { flex-wrap: wrap; }
.adm-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.adm-chip { min-height: 32px; padding: 0 12px; border: 1px solid var(--border-color); border-radius: 999px; background: var(--bg-card); color: var(--text-muted); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.adm-chip.is-on { border-color: var(--color-primary); background: var(--color-primary-light); color: var(--color-primary); }
.adm-chip.is-included { border-style: dashed; cursor: default; opacity: 0.85; }
/* 로그인 */
.adm-account-row .adm-account-input { flex: 1; min-width: 0; }
.adm-btn.adm-btn-quiet { background: transparent; color: var(--text-muted); border: 1px solid var(--border-color); font-weight: 600; }
.adm-btn { flex: none; min-height: 40px; padding: 0 16px; border: 0; border-radius: 10px; background: var(--color-primary); color: #ffffff; font: inherit; font-weight: 800; cursor: pointer; }
.adm-danger-row { justify-content: center; color: var(--color-danger); font-weight: 800; }
.adm-status:empty { display: none; }
.adm-empty { padding: 20px; color: var(--text-muted); text-align: center; }
/* 화면 보호 카드(기존 스위치를 그대로 옮김) */
.adm-protect-card { margin: 0; padding: 4px 14px; border-radius: var(--radius-lg); }
.adm-protect-card .toggle-wrapper { margin: 0; padding: 10px 0; }
.adm-protect-card .toggle-wrapper + .toggle-wrapper { border-top: 1px solid var(--border-color); }
/* 데이터: 고급(접힘)·위험 구역·이동 버튼 */
.adm-advanced { margin-top: 16px; border: 1px solid var(--border-color); border-radius: var(--radius-lg); background: var(--bg-card); }
.adm-advanced > summary { display: flex; align-items: center; gap: 8px; padding: 14px 16px; color: var(--text-muted); font-size: 14px; font-weight: 800; cursor: pointer; list-style: none; }
.adm-advanced > summary::-webkit-details-marker { display: none; }
.adm-advanced > summary::after { content: '\f107'; margin-left: auto; font-family: 'Font Awesome 6 Free'; font-weight: 900; }
.adm-advanced[open] > summary::after { content: '\f106'; }
.adm-advanced > .card { margin: 0 12px 12px !important; }
.adm-advanced.adm-inline { margin: 4px 0 12px; }
.adm-advanced.adm-inline > .form-group { padding: 0 16px; }
.adm-link-btn { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 14px; border: 1px solid var(--border-color); border-radius: 10px; background: var(--bg-card); color: var(--color-primary); font: inherit; font-weight: 800; cursor: pointer; }
.adm-danger-zone { margin-top: 24px; border: 1px solid rgba(220, 38, 38, 0.3) !important; background: #fff7f7 !important; }
.adm-danger-zone h3 { color: var(--color-danger); }
.adm-danger-actions { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.adm-danger-actions .warning-btn { border-color: rgba(220, 38, 38, 0.25) !important; background: #ffffff !important; color: var(--color-danger) !important; }

/* ===== PC 새로고침 깜빡임(2026-09-27) =====
   1) 날짜 줄은 세로 배치에서 눌릴 수 있어(flex-shrink 1) 내용이 채워지는 순간 70px→24px로 줄며 화면이 들썩였다. 높이를 고정한다.
   2) 첫 화면이 정해질 때까지(대시보드 기기) 가리는 곳을 넓힌다. HTML 기본값(캘린더 선택·'대시보드' 숨김·
      자리표시 날짜 2026-06-23·+ 버튼·빈 프로필)이 잠깐 비치던 곳이다. app.js finishHomeBoot()가 걷는다. */
.desktop-header { flex-shrink: 0; height: 48px; }
.home-booting .sidebar-nav,
.home-booting .sidebar-footer,
.home-booting #today-date-string,
.home-booting #add-schedule-btn { visibility: hidden; }
.home-booting .sidebar .nav-item,
.home-boot-settling .sidebar .nav-item { transition: none !important; }

/* ===== 근태 화면 위 직원 카드(2026-09-27, 잡스식): 큰 숫자 하나 + 막대 하나 + 조용한 두 줄 ===== */
.attendance-summary { margin-bottom: 16px; }
.attendance-summary:empty { display: none; }
.att-sum-caption { margin: 0 0 8px; font-size: 13px; font-weight: 600; color: var(--text-muted); cursor: help; }
.att-sum-status { margin: -4px 0 8px; font-size: 12px; color: var(--text-muted); }
.att-sum-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.att-sum-card { --att-color: var(--color-rank-unassigned); display: flex; flex-direction: column; gap: 8px; min-width: 0; padding: 14px; border: 1px solid var(--border-color); border-radius: var(--radius-md); background: var(--bg-card); }
.att-sum-card.rank-president { --att-color: var(--color-rank-president); }
.att-sum-card.rank-manager { --att-color: var(--color-rank-manager); }
.att-sum-card.rank-shin { --att-color: var(--color-rank-shin); }
.att-sum-card.rank-staff { --att-color: var(--color-rank-staff); }
.att-name { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; color: var(--text-main); }
.att-name::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--att-color); }
.att-hero { display: flex; align-items: baseline; gap: 3px; margin: 0; color: var(--text-main); white-space: nowrap; }
.att-hero strong { font-size: 30px; font-weight: 700; line-height: 1; letter-spacing: -0.5px; }
.att-hero span { font-size: 13px; color: var(--text-muted); }
.att-sum-card.is-over .att-bar-used, .att-sum-card.is-over .att-bar-planned { background: var(--color-danger); }
.att-sum-card.is-over .att-hero strong, .att-sum-card.is-over .att-hero span { color: var(--color-danger); }
.att-bar { display: flex; height: 4px; overflow: hidden; border-radius: 2px; background: var(--border-color); }
.att-bar-used { background: var(--att-color); }
.att-bar-planned { background: var(--att-color); opacity: 0.35; }
.att-bar.is-none { visibility: hidden; }
.att-lines { display: flex; flex-direction: column; gap: 2px; font-size: 12px; color: var(--text-muted); }
@media (max-width: 768px) {
  .att-sum-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .att-sum-card { gap: 7px; padding: 12px 10px; }
  .att-hero strong { font-size: 26px; }
  .att-lines { font-size: 11px; }
}

/* ===== Google 계정 로그인: 잠금 화면 버튼·안내 ===== */
.lock-account { margin-top: 20px; }
.lock-account[hidden] { display: none; }
.lock-google-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; width: 100%; padding: 12px 16px; border: 1px solid rgba(255, 255, 255, 0.25); border-radius: 12px; background: #ffffff; color: #1f2937; font: inherit; font-weight: 600; cursor: pointer; }
.lock-google-btn:disabled { opacity: 0.6; cursor: wait; }
.lock-account-status { margin: 12px 0 0; font-size: 12px; line-height: 1.5; color: #fde68a; }

/* ===== 방문 순서 정하기 안내(2026-09-29): 긴급·중요 띠와 같은 모양, 9시가 지나면 빨강 ===== */
.home-order-nudge-root { margin-bottom: 12px; }
.home-order-nudge-root[hidden] { display: none; }
.home-order-nudge { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border: 1px solid #fdba74; border-left: 4px solid #f97316; border-radius: var(--radius-md); background: #fff7ed; box-shadow: var(--shadow-sm); }
.home-order-nudge-icon { flex: none; color: #ea580c; font-size: 18px; }
.home-order-nudge-text { display: flex; flex: 1; flex-direction: column; gap: 2px; min-width: 0; }
.home-order-nudge-text strong { color: #9a3412; font-size: 14px; font-weight: 800; line-height: 1.35; }
.home-order-nudge-text span { color: #9a3412; font-size: 12px; opacity: 0.85; }
.home-order-nudge-btn { flex: none; min-height: 36px; padding: 0 14px; border: 0; border-radius: 10px; background: #ea580c; color: #ffffff; font: inherit; font-size: 13px; font-weight: 800; cursor: pointer; }
.home-order-nudge.is-late { border-color: #fca5a5; border-left-color: var(--color-danger); background: #fef2f2; }
.home-order-nudge.is-late .home-order-nudge-icon { color: var(--color-danger); animation: home-order-nudge-blink 1.4s ease-in-out infinite; }
.home-order-nudge.is-late .home-order-nudge-text strong, .home-order-nudge.is-late .home-order-nudge-text span { color: #991b1b; }
.home-order-nudge.is-late .home-order-nudge-btn { background: var(--color-danger); }
@keyframes home-order-nudge-blink { 50% { opacity: 0.35; } }
@media (prefers-reduced-motion: reduce) { .home-order-nudge.is-late .home-order-nudge-icon { animation: none; } }
.order-nudge-card { width: 400px; }
.order-nudge-body { margin: 0; padding: 22px 24px; color: var(--text-main); font-size: 14px; line-height: 1.65; }
.order-nudge-body strong { color: #c2410c; }

/* ===== 내 업무의 미배정 구분(2026-09-28): 얇은 선 + 작은 글씨 한 줄만 ===== */
.home-mine-divider { display: flex; align-items: center; gap: 8px; margin: 4px 2px 0; font-size: 11px; font-weight: 600; color: var(--text-light); }
.home-mine-divider::before, .home-mine-divider::after { content: ''; flex: 1; height: 1px; background: var(--border-color); }

/* ===== PC 왼쪽 메뉴(2026-09-28): 휴대폰과 같은 순서로 묶고, 묶음 사이만 얇은 선. 한 화면에 다 보이게 촘촘하게 ===== */
.sidebar-nav { gap: 0; }
.sidebar-nav .nav-group { display: flex; flex-direction: column; gap: 2px; }
.sidebar-nav .nav-group + .nav-group,
.sidebar-nav .nav-group + .admin-only-nav-group { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border-color); }
.sidebar-nav .admin-only-nav-group { display: flex; flex-direction: column; gap: 2px; }
.sidebar-nav .admin-only-nav-group[hidden] { display: none !important; }
.sidebar-nav .nav-section-title { margin: 2px 0 4px 14px; font-size: 11px; letter-spacing: 0.5px; }
.sidebar-nav .nav-item { gap: 11px; padding: 9px 14px; font-size: 14px; }
.sidebar-nav .nav-item i { font-size: 16px; }
/* 관리자가 메뉴를 모두 숨긴 묶음은 제목·선까지 숨긴다 */
.sidebar-nav .nav-group:not(:has(.nav-item:not([hidden]))) { display: none; }
/* 소개용 마스킹(신대리 전용)은 작게 */
.sidebar-footer .capture-mask-toggle { min-height: 32px; margin-bottom: 10px; padding: 6px 10px; font-size: 12px; }

/* ===== 순서 편집 카드를 대시보드 카드(.home-card)와 같은 크기로 (2026-10-03) =====
   대시보드 '내 업무' [순서]·방문현황 [순서] 공용. 글씨 13.5px 한 줄(말줄임), 칸 여백 8px 10px, 손잡이는 ○ 자리 크기. */
:is(.nt-compact, .nt-compact-ghost) .nt-group, .nt-group.nt-compact-ghost { padding: 0 6px 0 4px; border-radius: var(--radius-md); }
:is(.nt-compact, .nt-compact-ghost) .nt-row, .nt-row.nt-compact-ghost { gap: 8px; min-height: 0; padding: 8px 0; }
:is(.nt-compact, .nt-compact-ghost) .nt-num { width: auto; min-width: 16px; height: auto; background: none; font-size: 12px; }
:is(.nt-compact, .nt-compact-ghost) .nt-copy { gap: 2px; }
:is(.nt-compact, .nt-compact-ghost) .nt-copy .card-title-text { overflow: hidden; font-size: 13.5px; font-weight: 600; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
:is(.nt-compact, .nt-compact-ghost) .nt-copy .card-memo-box { display: block; overflow: hidden; font-size: 12px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; }
/* 손잡이는 기본 버튼 여백(위아래 8px)을 빼야 ○ 자리 크기(28px)가 된다 — 안 빼면 줄마다 39px로 카드가 커진다 */
:is(.nt-compact, .nt-compact-ghost) .wm-button.nt-handle { width: 28px; height: 28px; min-height: 28px; margin: 0; padding: 0; font-size: 15px; }
:is(.nt-compact, .nt-compact-ghost) .nt-children { margin: 0 0 4px 30px; }
:is(.nt-compact, .nt-compact-ghost) .nt-child-row { min-height: 0; padding: 4px 0; }
:is(.nt-compact, .nt-compact-ghost) .nt-child-row .card-title-text { font-size: 12.5px; }
.nt-compact .nt-gap { height: 8px; }
.nt-compact .nt-toolbar { min-height: 40px; padding: 0 0 4px; background: transparent; }
.nt-compact .nt-toolbar h2 { font-size: 14px; }
.nt-compact .nt-actions .wm-button { min-height: 32px; padding: 0 14px; font-size: 13px; }
.nt-compact .nt-live { height: 24px; margin: 0 0 6px; font-size: 12px; line-height: 24px; }

/* 대시보드 순서 편집: 취소·저장을 '내 업무' 칸 머리 오른쪽에([순서] 자리), 제목 줄·끌기 안내는 없다 (2026-10-03) */
.home-order-actions { display: inline-flex; align-items: center; gap: 4px; margin-left: auto; }
.home-order-actions[hidden] { display: none; }
.home-order-actions .nt-actions { display: inline-flex; align-items: center; gap: 4px; }
.home-order-actions .nt-actions .wm-button { height: 28px; min-height: 28px; padding: 0 12px; white-space: nowrap; border: 1px solid transparent; border-radius: 999px; background: transparent; color: var(--text-muted); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.home-order-actions .nt-actions .wm-button.is-primary { padding: 0 16px; border-color: var(--color-primary); background: var(--color-primary); color: #ffffff; }
.home-order-actions .nt-actions .wm-button.is-primary:disabled { border-color: transparent; background: var(--border-color); color: var(--text-light); opacity: 1; cursor: default; }
.home-order-actions .nt-actions .wm-button.nt-undo { padding: 0 12px; background: var(--color-primary-light); color: var(--color-primary); }
.home-order-actions .nt-actions .wm-button.nt-undo[hidden] { display: none; }

/* 방문현황 일정의 하위 일정: 제목 아래 한 줄(대시보드 카드 .home-card-memo와 같은 글씨) (2026-10-03) */
.lv-item-body { display: flex; flex: 1; flex-direction: column; gap: 2px; min-width: 0; }
.lv-item-sub { overflow: hidden; color: var(--text-muted); font-size: 12px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; }
.lv-item.is-complete .lv-item-sub { color: var(--text-light); }

/* 개인 일정 메모 한 줄(대시보드 '내 업무'·스케줄 목록 맨 위, 2026-10-03): 일정 카드와 같은 모양, 왼쪽 띠·딱지는 보라 */
.personal-memo-lines[hidden] { display: none; }
.personal-memo-lines:not([hidden]) { margin-bottom: 14px; }
.home-card.personal-memo-card { border-left-color: #8b5cf6; }
.home-card .personal-memo-check { display: inline-flex; flex-shrink: 0; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--text-light); font-size: 20px; cursor: pointer; }
.home-card.personal-memo-card.is-done .personal-memo-check { color: var(--color-success); }
.home-flag.is-private { color: #6d28d9; }
.home-flag.is-deadline.overdue, .home-flag.is-deadline.due-today { color: var(--color-danger); }
.home-flag.is-deadline.upcoming { color: #b45309; }
/* 개인 메모는 두 줄: 위 딱지([개인]·마감), 아래 내용(일정 제목과 같은 글씨) */
.personal-memo-tags { display: flex; align-items: center; gap: 6px; margin-bottom: 2px; font-size: 12px; line-height: 1.3; }
.personal-memo-tags .home-flag { margin-right: 0; }
.home-card.personal-memo-card.is-done .home-card-title span { color: var(--text-muted); text-decoration: line-through; }

/* 대시보드 선택 모드(꾹 눌러 담당자 배정): 일괄 막대를 화면 위에 붙여 둔다 (2026-10-03) */
/* 높이 0인 칸에 막대를 띄워 둔다: 들어와도 아래 카드가 밀리지 않고(누르려던 카드가 손가락 아래에서 비켜 가지 않게),
   스케줄 머리처럼 PC 머리줄(z-index 90) 위에 올라온다 */
.home-batch-slot { position: sticky; top: 0; z-index: 100; height: 0; }
.home-batch-slot:empty { display: none; }
.home-batch-slot #batch-action-bar { position: absolute; top: 0; right: 0; left: 0; margin: 0; border-radius: var(--radius-md); box-shadow: 0 4px 12px rgba(15, 23, 42, 0.18); }
/* 꾹 누를 때 글자 선택·복사 메뉴 대신 선택 모드 — 일정 카드에만(메모는 글자를 복사할 수 있게 둔다) */
#home-section .home-card[data-card-id] { -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }

/* 알림 종(2026-10-07): 메뉴 대신 로고 줄 맨 오른쪽(휴대폰 머리글·PC 사이드바). 안 읽은 공지가 있으면 빨갛게 좌우로 흔들린다 */
.notice-bell { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 40px; height: 40px; margin-left: auto; padding: 0; border: 0; border-radius: 50%; background: none; color: var(--text-muted); font-size: 20px; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.notice-bell[hidden] { display: none; }
@media (hover: hover) { .notice-bell:hover { background: var(--color-primary-light); color: var(--text-main); } }
.notice-bell.is-current { background: var(--color-primary-light); color: var(--color-primary); }
.notice-bell.has-unread { color: var(--color-danger); }
.notice-bell.has-unread i { transform-origin: 50% 8%; animation: notice-bell-ring 2.4s ease-in-out infinite; }
/* 0.8초 흔들고 잠깐 쉬기를 되풀이한다(계속 흔들면 눈이 피곤하다). Windows 애니메이션 효과가 꺼진 PC(동작 줄이기)에서도
   흔든다 — 사용자 PC가 그 설정이라 예외를 두면 빨갛게만 보였다(2026-10-07) */
@keyframes notice-bell-ring {
  0%, 34%, 100% { transform: rotate(0); }
  4% { transform: rotate(16deg); } 9% { transform: rotate(-14deg); } 14% { transform: rotate(11deg); }
  19% { transform: rotate(-8deg); } 24% { transform: rotate(5deg); } 29% { transform: rotate(-3deg); }
}
/* 휴대폰은 머리글의 종만 쓴다(사이드바 서랍에는 두지 않는다) */
@media (max-width: 768px) { .sidebar-brand .notice-bell { display: none; } }

/* 개인 메모 창 '언제 볼까요?'(2026-10-07): 큰 버튼 4개 + 날짜 빠른 선택 + 반복 종류. 버튼 모양은 일정 창 칩(.sf-chip)과 같다 */
.memo-when, .memo-quick-dates { display: flex; flex-wrap: wrap; gap: 8px; }
.memo-when .sf-chip { flex: 1 1 0; justify-content: center; min-width: 64px; }
.memo-when-date, .memo-when-repeat { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 10px; }
.memo-when-date[hidden], .memo-when-repeat[hidden] { display: none; }
.memo-quick-dates .sf-chip { min-height: 32px; font-size: 13px; }
/* 칩 옆 입력칸(.chip-control): 칩과 같은 높이로 — 글자 크기에 맞춘다(10/8: 44px 칸이 칩 옆에서 커 보였다).
   메모 창 날짜·반복 칸과 일정 창 반복 칸이 같이 쓴다. 휴대폰 입력칸 글자 16px(확대 방지, styles.css)은 그대로 둔다 */
.chip-control { width: auto; height: 34px; padding: 0 12px; border-radius: 999px; font-size: 13.5px; }
select.chip-control { padding-right: 32px; background-position: right 10px center; background-size: 14px; }
.memo-when-help { display: block; margin-top: 8px; }
.memo-to-schedule-btn { display: inline-flex; align-items: center; gap: 6px; margin: 8px 8px 0 0; padding: 8px 12px; border: 1px solid var(--color-primary); border-radius: 10px; background: var(--color-primary-light); color: var(--color-primary); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.memo-to-schedule-btn[hidden] { display: none; }
/* 놓친 예정일·반복 회차를 이어서 보일 때 '어제 못 함 / n일 전 못 함' */
.home-flag.is-carry { color: #b45309; }

/* 일정 창 반복(2026-10-08): 일정 기간 밑, 메모 창과 같은 칩. 매주는 요일 칩, 매월은 종류 고르기 */
.sf-recur-group > label { display: block; margin-bottom: 8px; }
.sf-recur { display: flex; flex-wrap: wrap; gap: 8px; }
.sf-recur .sf-chip { flex: 1 1 0; justify-content: center; min-width: 56px; }
.sf-recur .sf-chip:disabled { opacity: 0.5; cursor: default; }
.sf-recur-sub[hidden] { display: none; }
#sf-recur-monthly { margin-top: 10px; }
#schedule-form .sf-recur-sub > label { margin-bottom: 8px; color: var(--text-muted); font-size: 12.5px; }
.sf-recur-help { display: block; margin-top: 8px; color: var(--text-muted); font-size: 12px; }
#schedule-form .recurrence-days-grid { display: flex; flex-wrap: wrap; gap: 6px; }
#schedule-form .day-checkbox-label { position: relative; display: inline-flex; align-items: center; justify-content: center; min-width: 40px; min-height: 32px; margin: 0; padding: 0 10px; border: 1px solid var(--border-color); border-radius: 999px; background: var(--bg-card); color: var(--text-muted); font-size: 13px; font-weight: 700; cursor: pointer; user-select: none; }
#schedule-form .day-checkbox-label input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
#schedule-form .day-checkbox-label:has(input:checked),
#schedule-form .day-checkbox-label.is-on { border-color: var(--color-primary); background: var(--color-primary-light); color: var(--color-primary); }
#schedule-form .day-checkbox-label:has(input:disabled) { opacity: 0.5; cursor: default; }
#schedule-form .day-checkbox-label:has(input:focus-visible) { outline: 2px solid var(--color-primary); outline-offset: 2px; }

/* 개인 메모 창(2026-10-08): 입력칸도 칩처럼 둥글게, 주요·상단 고정은 일정 창 칩처럼 눌러서 켜고 끈다.
   .form-group label 기본 모양(블록·작은 회색 글자)을 이기도록 .form-group을 붙인다 */
#memo-form #memo-input { padding: 12px 16px; border-radius: 18px; }
.memo-flags { display: flex; flex-wrap: wrap; gap: 8px; }
.form-group .sf-chip.memo-flag { position: relative; display: inline-flex; align-items: center; gap: 5px; margin: 0; color: var(--text-muted); font-size: 13.5px; font-weight: 700; cursor: pointer; user-select: none; }
.memo-flag input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.form-group .sf-chip.memo-flag:has(input:checked),
.form-group .sf-chip.memo-flag.is-on { border-color: var(--color-primary); background: var(--color-primary-light); color: var(--color-primary); }
.form-group .sf-chip.memo-flag.is-important:has(input:checked),
.form-group .sf-chip.memo-flag.is-important.is-on { border-color: rgba(220, 38, 38, 0.4); background: #fef2f2; color: var(--color-danger); }
.memo-flag:has(input:focus-visible) { outline: 2px solid var(--color-primary); outline-offset: 2px; }
