body[data-ui-generation="2"].member-authed {
  background: var(--dv-bg-page);
  color: var(--dv-text);
  font-family: var(--dv-font-ui);
}

/*
 * The authenticated app shell must not depend on the legacy stylesheet to
 * remove the public-site header. Keep the individual controls hidden as well
 * because shell integrity checks inspect their computed display state.
 */
body[data-ui-generation="2"].member-authed .topbar,
body[data-ui-generation="2"].member-authed .topbar :is(
  .brand,
  .main-nav,
  .nav-links,
  .top-actions,
  .auth-slot,
  .mobile-toggle
),
body[data-ui-generation="2"].member-authed .mobile-menu {
  display: none !important;
}

body[data-ui-generation="2"].member-authed main,
body[data-ui-generation="2"].member-authed > main {
  width: calc(100% - var(--dv-sidebar-width));
  margin-left: var(--dv-sidebar-width);
  transition: none;
}

body[data-ui-generation="2"].member-authed.app-collapsed main,
body[data-ui-generation="2"].member-authed.app-collapsed > main {
  width: calc(100% - var(--dv-sidebar-collapsed));
  margin-left: var(--dv-sidebar-collapsed);
}

body[data-ui-generation="2"].member-authed main.member-main {
  padding: 28px 32px 64px;
}

body[data-ui-generation="2"] .app-sidebar {
  width: var(--dv-sidebar-width);
  gap: 0;
  padding: 16px 14px 12px;
  border-right: 1px solid var(--dv-border);
  background: var(--dv-bg-subtle);
  box-shadow: none;
  transition: transform var(--dv-duration) var(--dv-ease-out);
}

body[data-ui-generation="2"].app-collapsed .app-sidebar {
  width: var(--dv-sidebar-collapsed);
}

body[data-ui-generation="2"] .app-sidebar .app-brand {
  min-height: 52px;
  height: auto;
  margin: 0 0 12px;
  padding: 4px 8px;
  gap: 10px;
}

body[data-ui-generation="2"] .app-sidebar .app-brand .mark {
  width: 36px;
  height: 36px;
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface) url("images/the-dream-ventures-mark.svg") center / cover no-repeat;
  color: transparent;
  font-size: 0;
  box-shadow: none;
}

body[data-ui-generation="2"] .app-sidebar .app-brand .word {
  gap: 1px;
}

body[data-ui-generation="2"] .app-sidebar .app-brand .word strong {
  font-size: 14px;
  font-weight: 750;
  letter-spacing: -0.015em;
}

body[data-ui-generation="2"] .app-sidebar .app-brand .word small {
  font-size: 12px;
  font-weight: 550;
}

/* 정체성 박스(.app-identity)는 2026-08-20 대표 지시로 사이드바에서 사라졌다.
   그 카드 표면을 자료실(.is-vault-item)이 물려받았다가 2026-08-29 에 되돌렸다 —
   한 메뉴만 늘 테두리를 두르고 있으면 다른 화면을 보는 중에도 선택된 칸으로 읽힌다. */

body[data-ui-generation="2"] .app-navgroup {
  gap: 2px;
  padding: 8px 0 4px;
}

body[data-ui-generation="2"] .app-navgroup + .app-navgroup {
  margin-top: 4px;
  border-top: 1px solid var(--dv-border);
}

body[data-ui-generation="2"] .app-navgroup > .grp-label {
  padding: 7px 10px 4px;
  color: var(--dv-text-muted);
  font-size: 12px;
  font-weight: 650;
  letter-spacing: 0;
  text-transform: none;
}

body[data-ui-generation="2"] .app-navgroup .grp-hint {
  margin: -2px 10px 4px;
  color: var(--dv-text-muted);
  font-size: 12px;
  font-weight: 500;
}

body[data-ui-generation="2"] .app-navgroup.is-network-group,
body[data-ui-generation="2"] .app-navgroup + .app-navgroup.is-network-group {
  margin-top: 4px;
  padding: 6px 0 4px;
  border: 0;
  border-top: 1px solid var(--dv-border);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

body[data-ui-generation="2"] .app-navitem,
body[data-ui-generation="2"] .app-navgroup.is-exec-group .app-navitem,
body[data-ui-generation="2"] .app-navgroup.is-management-group .app-navitem,
body[data-ui-generation="2"] .app-navitem.is-network-item {
  min-height: 44px;
  height: 44px;
  gap: 11px;
  padding: 0 11px;
  border-radius: var(--dv-radius);
  color: var(--dv-text);
  font-size: 13.5px;
  font-weight: 600;
  transition: background-color var(--dv-duration-fast) var(--dv-ease-out), color var(--dv-duration-fast) var(--dv-ease-out);
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .app-navitem:hover, body[data-ui-generation="2"] .app-navitem.is-network-item:hover {
  background: color-mix(in srgb, var(--dv-bg-surface, #ffffff) 72%, transparent);
  color: var(--dv-text-strong);
} }

body[data-ui-generation="2"] .app-navitem.active,
body[data-ui-generation="2"] .app-navitem.is-home,
body[data-ui-generation="2"] .app-navitem.is-home.active,
body[data-ui-generation="2"] .app-navitem.is-network-item.active {
  background: var(--dv-bg-selected);
  color: var(--dv-primary);
  box-shadow: none;
}

body[data-ui-generation="2"] .app-navitem.active::before,
body[data-ui-generation="2"] .app-navitem.is-home.active::before,
body[data-ui-generation="2"] .app-navitem.is-network-item.active::before {
  left: 0;
  top: 11px;
  bottom: 11px;
  width: 2px;
  border-radius: 2px;
  background: var(--dv-primary);
}

body[data-ui-generation="2"] .app-navitem svg {
  width: 18px;
  height: 18px;
  stroke-width: 2;
}

/* 자료실은 다른 메뉴와 같은 기본 상태를 쓴다.
   2026-08-20 에 사라진 정체성 박스의 카드 표면(1px 경계 + 면)을 이 항목이 물려받았는데,
   그 결과 자료실만 늘 테두리 박스로 서 있어 "지금 여기"로 읽혔다 — 다른 화면을 보는
   중에도 선택된 것처럼 보인다는 대표 지적(2026-08-29). 선택 표시는 .active 하나뿐이다.
   여백만 조금 남겨 묶음 안에서 성격을 구분한다. */
body[data-ui-generation="2"] .app-navitem.is-vault-item {
  box-sizing: border-box;
  margin: 2px 0 3px;
}



body[data-ui-generation="2"] .app-nav-more summary {
  min-height: 44px;
  border-radius: var(--dv-radius);
  font-size: 13px;
  font-weight: 600;
}

body[data-ui-generation="2"] .app-sidebar .app-bottom {
  gap: 6px;
  padding-top: 10px;
  border-top: 1px solid var(--dv-border);
}

body[data-ui-generation="2"] .app-account {
  min-height: 64px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
}

body[data-ui-generation="2"] .app-account.is-logged-in {
  border-color: color-mix(in srgb, var(--dv-primary) 30%, var(--dv-border));
  background: var(--dv-bg-surface);
}

body[data-ui-generation="2"] .app-account .av {
  border-radius: var(--dv-radius);
  box-shadow: none;
}

/* 로그인한 회사의 첫 글자 칸 — 주 버튼과 같은 흑옥 유리 면(2026-09-28, 보라색 Google 글자 그림 대신). */
body[data-ui-generation="2"] .app-account.is-logged-in .av {
  border-radius: var(--dv-radius);
  color: var(--dv-on-action);
  background: var(--dv-action-face);
  box-shadow: var(--dv-droplet-inset);
}

body[data-ui-generation="2"] .app-toggle {
  top: 14px;
  left: calc(var(--app-sidebar-w) - 52px);
  width: 44px;
  height: 44px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
  transition: none;
}

body[data-ui-generation="2"].app-collapsed .app-toggle {
  left: calc(var(--app-sidebar-collapsed) - 52px);
}

body[data-ui-generation="2"] .member-dash {
  width: 100%;
  max-width: var(--app-content-max, min(max(1760px, 78vw), 2400px));
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 28px;
}

body[data-ui-generation="2"] .member-dash > * {
  order: 0 !important;
}

/* 지금 할 일과 진행 업무는 회원에게 한 가지다 — 지금 해야 할 일. 제목을 둘로 나눠 두 단으로
   세우면 할 일이 두 곳에 있는 것처럼 보인다(2026-08-29 대표 지적). 사이를 좁혀 한 덩어리로 읽게 한다. */
body[data-ui-generation="2"] .member-dash #savedWork[data-dv-joined-with-focus] {
  margin-top: -16px;
}

/* 기준 문서 상세는 케이스 카드 "안"에 있다. 테두리를 이어 붙이는 것으로는 한 장이 되지 않았다 —
   바깥 상자 > 카드 > 상세로 상자가 세 겹 겹쳐 보였을 뿐이다(2026-08-29 대표: "개 쒜따빡한 화면").
   카드 안에서는 껍데기를 벗고 선 하나로 나뉜다. */
/* 진행 업무 카드도 "지금 할 일"과 같은 격이다 — 회원에게는 둘 다 지금 해야 할 일이다.
   작은 글씨에 흰 버튼만 있어 눈에 들어오지 않았고, 색이 없어 어디를 봐야 할지 알 수 없었다
   (2026-08-29 대표: "눈에 들어오지가 않는다", "색상도 단조로워서 하품이 날 지경"). */
body[data-ui-generation="2"] #caseInbox .case-inbox-item {
  padding: 18px 20px;
  border-radius: 16px;
  border-color: color-mix(in srgb, var(--dv-border-strong) 30%, var(--dv-border));
}

/* 제목은 그 카드가 무슨 일인지 한눈에 말해야 한다. */
body[data-ui-generation="2"] #caseInbox .case-inbox-item-main > strong {
  font-size: 18px;
  font-weight: 800;
  line-height: 1.34;
  color: var(--dv-text-strong, #0e1914);
}

body[data-ui-generation="2"] #caseInbox .case-inbox-item-main > small {
  font-size: 13px;
  line-height: 1.55;
}

/* 진행 중인 일은 코발트로 표시한다 — 색이 상태를 말한다. 완료는 초록, 닫을 수 있는 것도 초록. */
body[data-ui-generation="2"] #caseInbox .case-inbox-item .case-inbox-item-dot {
  background: var(--dv-primary);
}

body[data-ui-generation="2"] #caseInbox .case-inbox-item.is-done .case-inbox-item-dot,
body[data-ui-generation="2"] #caseInbox .case-inbox-item.is-ready .case-inbox-item-dot {
  background: var(--dv-success, #0d3021);
}

/* 이 카드에서 지금 누를 것 하나는 채운다. 흰 버튼만 늘어놓으면 어디를 눌러야 할지 모른다. */
body[data-ui-generation="2"] #caseInbox .case-inbox-item:not(.is-done) .case-inbox-item-actions > .btn:first-child {
  border-color: var(--dv-action-deep);
  background-color: var(--dv-action); background-image: var(--dv-action-face);
  color: var(--dv-on-action);
  /* 물방울 안쪽 반사선만 준다 — 카드마다 하나씩 반복되는 버튼이라 바깥 번짐은 두지 않는다. */
  box-shadow: var(--dv-droplet-inset);
  font-weight: 700;
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] #caseInbox .case-inbox-item:not(.is-done) .case-inbox-item-actions > .btn:first-child:hover {
  opacity: .92;
} }

/* 닫을 수 있는 일은 초록으로 — 미루던 것을 끝내는 자리라 다른 색이어야 눈에 걸린다. */
body[data-ui-generation="2"] #caseInbox .case-inbox-item.is-ready .case-inbox-badge {
  border-color: color-mix(in srgb, var(--dv-success, #0d3021) 40%, transparent);
  background: var(--dv-success-soft, #e4e9e6);
  color: var(--dv-success, #0d3021);
}

/* 섹션 제목도 지금 할 일과 같은 무게로 세운다. */
body[data-ui-generation="2"] #caseInbox .case-inbox-head h3 {
  font-size: 18px;
  font-weight: 800;
}

/* 회사 기준정보는 목록의 첫 카드다.
 *
 * 2026-08-29 에는 마지막 카드 *안에* 밀어 넣었기 때문에 제 테두리와 여백을 지워야 했다.
 * 이제 목록 맨 앞에 제 카드로 서므로 다시 카드가 된다(대표: "심여 마진도 없이 되어서
 * 잘못되어 있다"). 한 줄을 통째로 써서 아래 진행 카드들과 역할이 다르다는 것이 보이게 한다. */
body[data-ui-generation="2"] #companyPlanWorkspace[data-dv-inside-case-inbox] {
  grid-column: 1 / -1;
  margin: 0 0 4px;
  padding: 16px 18px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
}

/* 반영이 밀린 상태는 눈에 먼저 들어와야 한다. 회사 정보가 바뀌면 그 뒤에 만드는 문서가
   전부 옛 정보를 쓴다 — 아래 진행 카드보다 앞선 일이다. */
body[data-ui-generation="2"] #companyPlanWorkspace[data-dv-inside-case-inbox][data-stale="true"] {
  /* 틴트와 보이는 경계 한 쌍으로 구분한다. 한쪽에 두꺼운 색 띠를 두르는 방식은 쓰지
     않는다 — 구형 모니터에서 옅은 틴트가 뭉개지는 것을 막으려면 경계가 필요하고, 띠는
     그 일을 대신하지 못한 채 눈에만 띈다. */
  border-color: color-mix(in srgb, var(--dv-warning-accent) 62%, var(--dv-border));
  background: color-mix(in srgb, var(--dv-warning-accent) 9%, var(--dv-bg-surface));
}

body[data-ui-generation="2"] #companyPlanWorkspace[data-dv-inside-case-inbox] > .dash-focus-card {
  display: grid;
  gap: 8px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
}

/* 주 행동은 카드 위쪽 "초안 이어가기"다. 상세의 두 버튼은 그다음 손이라 조용히 둔다. */
body[data-ui-generation="2"] #companyPlanWorkspace[data-dv-inside-case-inbox] .focus-actions {
  gap: 8px;
  margin-top: 2px;
}

body[data-ui-generation="2"] #companyPlanWorkspace[data-dv-inside-case-inbox] .focus-actions .btn {
  min-height: 36px;
  padding: 8px 12px;
  font-size: 12.5px;
}

body[data-ui-generation="2"] .dv-page-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 24px;
  padding: 2px 0 0;
}

body[data-ui-generation="2"] .dv-page-header-copy {
  min-width: 0;
}

body[data-ui-generation="2"] .dv-page-header h1 {
  margin: 0;
  color: var(--dv-text-strong);
  font-size: 28px;
  font-weight: 750;
  line-height: 1.3;
  letter-spacing: -0.025em;
}

body[data-ui-generation="2"] .dv-page-header p {
  max-width: 68ch;
  margin: 5px 0 0;
  color: var(--dv-text-muted);
  font-size: 14px;
}

body[data-ui-generation="2"] .dv-new-work {
  position: relative;
  flex: 0 0 auto;
}

body[data-ui-generation="2"] .dv-new-work > summary {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  color: var(--dv-primary);
  font-size: 14px;
  font-weight: 700;
  cursor: pointer;
  list-style: none;
}

body[data-ui-generation="2"] .dv-new-work > summary::-webkit-details-marker {
  display: none;
}

body[data-ui-generation="2"] .dv-new-work-menu {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  z-index: var(--dv-z-overlay);
  width: min(320px, calc(100vw - 32px));
  padding: 8px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: var(--dv-shadow-overlay);
}

body[data-ui-generation="2"] .dv-new-work-menu a {
  display: grid;
  gap: 1px;
  min-height: 48px;
  padding: 9px 10px;
  border-radius: 6px;
  color: var(--dv-text);
  text-decoration: none;
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .dv-new-work-menu a:hover {
  background: var(--dv-bg-subtle);
} }

body[data-ui-generation="2"] .dv-new-work-menu strong {
  font-size: 14px;
}

body[data-ui-generation="2"] .dv-new-work-menu small {
  color: var(--dv-text-muted);
  font-size: 12px;
}

body[data-ui-generation="2"] .member-dash > .dash-hero,
body[data-ui-generation="2"] .member-dash > .dash-page-head {
  display: none !important;
}

body[data-ui-generation="2"] .member-dash .label,
body[data-ui-generation="2"] .member-dash .focus-label,
body[data-ui-generation="2"] .member-dash .hero-eyebrow {
  display: none;
}

body[data-ui-generation="2"] #todayFocus {
  margin: 0;
}

/* "지금 할 일" 라벨은 보인다 — 카드가 무엇인지 말하는 유일한 표식이다(2026-08-28). */
body[data-ui-generation="2"] #todayFocus .focus-label {
  display: inline-block;
  margin-bottom: 8px;
  color: var(--dv-text-muted);
  font-size: var(--dv-text-xs, 12px);
  font-weight: 650;
}

body[data-ui-generation="2"] [data-v2-action-suppressed] {
  display: none !important;
}

body[data-ui-generation="2"] #todayFocus .dash-focus-card {
  border: 1px solid color-mix(in srgb, var(--dv-border-strong) 35%, var(--dv-border));
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
}

body[data-ui-generation="2"] #todayFocus .dash-focus-card {
  padding: 24px;
}

body[data-ui-generation="2"] #todayFocus .dash-path-strip {
  display: none;
}

body[data-ui-generation="2"] #todayFocus h2 {
  max-width: 28ch;
  margin: 0 0 6px;
  font-size: 24px;
  font-weight: 750;
  line-height: 1.35;
  letter-spacing: -0.02em;
}

body[data-ui-generation="2"] #todayFocus p {
  max-width: 68ch;
  margin: 0;
  color: var(--dv-text-muted);
  font-size: 15px;
}

body[data-ui-generation="2"] #todayFocus .focus-actions {
  margin-top: 20px;
}

/* "지금 이어갈 한 가지" 큐는 해체됐다(2026-08-12) — 카운터·완료 기록·완료 취소는
   케이스 인박스로 이관. 피드백 배너(.growth-action-feedback)의 스타일은 gen1 셸이 담당. */

body[data-ui-generation="2"] #savedWork {
  scroll-margin-top: 72px;
  display: grid;
  gap: 16px;
}

body[data-ui-generation="2"] #savedWork > .dash-secthead {
  align-items: end;
  padding: 0;
}

body[data-ui-generation="2"] #savedWork > .dash-secthead h2 {
  font-size: 19px;
  font-weight: 750;
}

body[data-ui-generation="2"] #savedWork > .dash-secthead .sub {
  max-width: 52ch;
  color: var(--dv-text-muted);
  font-size: 13px;
  text-align: right;
}

body[data-ui-generation="2"] .case-inbox {
  padding: 0;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
}

body[data-ui-generation="2"] .case-inbox-head {
  padding: 18px 20px;
  border-bottom: 1px solid var(--dv-border);
}

body[data-ui-generation="2"] .case-inbox-head h3 {
  margin: 0 0 3px;
  font-size: 18px;
  font-weight: 750;
}

body[data-ui-generation="2"] .case-inbox-head p {
  margin: 0;
  color: var(--dv-text-muted);
  font-size: 13px;
}

/* 진행 업무는 전폭 행이 아니라 카드 그리드로 — 한 줄에 한 건씩 늘어놓으면 화면 절반이
   공백으로 남는다(2026-08-09 대표 지적). 정보 3계층: 꼭 봐야(막힌 사유·완료 가능 액센트) /
   보여줄(제목·서비스·단계) / 단순(메타 소형). 렌더러 DOM·클릭 계약은 그대로 두고 CSS만 바꾼다. */
body[data-ui-generation="2"] .case-inbox-list {
  margin: 0;
  padding: 4px 20px 20px;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 12px;
}

/* 헤더와 카드만 갖고 있던 패널 안쪽 여백을 막힘 요약에도 동일하게 적용한다. */
body[data-ui-generation="2"] .case-inbox-blockers {
  width: min(560px, calc(100% - 40px));
  margin-inline: 20px;
}

body[data-ui-generation="2"] .case-inbox-item,
body[data-ui-generation="2"] .case-inbox-list > li {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-rows: minmax(0, 1fr) auto;
  align-items: start;
  gap: 8px 12px;
  padding: 14px 16px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
}

body[data-ui-generation="2"] .case-inbox-item-dot { display: none; }

body[data-ui-generation="2"] .case-inbox-item-main {
  grid-column: 1 / -1;
  grid-row: 1;
  align-content: start;
}

/* 상태 배지와 다음 행동은 카드 하단에 함께 둔다 — 우상단에 떨어져 있으면 "얼마나
   남았는지"와 "그래서 뭘 누르는지"를 눈이 두 번 왕복해야 한다.
   state 래퍼를 투명화해 그리드에 직접 배치한다.
   2026-08-22: 배지가 "남은 것 2 · 50%"(짧음)에서 "산출물 없음 · 실행 전"(김)으로 바뀌자
   같은 줄에서 버튼과 31px 겹쳤다(실렌더 실측). 한 줄에 억지로 붙이지 말고 배지를 그 아래
   줄로 내린다 — 눈의 왕복은 여전히 짧고(바로 아래), 겹침은 사라진다. */
body[data-ui-generation="2"] .case-inbox-item-state { display: contents; }

body[data-ui-generation="2"] .case-inbox-item .case-inbox-badge {
  /* 버튼 줄 아래 제 줄에 선다(겹침 방지). 왼쪽 정렬이라 카드의 다른 글과 시선이 맞는다. */
  grid-column: 1 / -1;
  grid-row: 3;
  justify-self: start;
  align-self: center;
  min-width: 0;
  max-width: 100%;
}

body[data-ui-generation="2"] .case-inbox-item .case-inbox-item-actions {
  grid-column: 1;
  grid-row: 2;
  justify-content: flex-start;
  padding-top: 2px;
  /* 버튼 줄이 먼저 제 폭을 갖고, 배지는 남는 자리를 쓴다. 반대로 두면 긴 배지가
     "완료 기록"·"보관" 을 밀어 찌그러뜨린다(2026-08-22 실렌더 실측). */
  min-width: max-content;
}

body[data-ui-generation="2"] .case-inbox-item.is-ready {
  border-color: color-mix(in srgb, var(--dv-warning-accent) 55%, var(--dv-border));
  background: var(--dv-warning-surface);
}

body[data-ui-generation="2"] .case-inbox-item.is-done {
  border-color: color-mix(in srgb, var(--dv-primary) 30%, var(--dv-border));
  background: var(--dv-success-surface);
}

/* 꼭 봐야 할 정보(막힌 사유)는 카드 안에서 가장 진하게 읽힌다. */
body[data-ui-generation="2"] .case-inbox-item-note {
  font-size: 12.5px;
  color: var(--dv-warning-text);
}

body[data-ui-generation="2"] .case-inbox-item-note.is-done { color: var(--dv-success-text); }

body[data-ui-generation="2"] .saved-history-details,
body[data-ui-generation="2"] .company-memory-details,
body[data-ui-generation="2"] .dash-section-details {
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
}

body[data-ui-generation="2"] :where(.saved-history-summary, .company-memory-details-summary, .dash-section-summary) {
  min-height: 58px;
  padding: 12px 16px;
  border-radius: var(--dv-radius);
}

/* 레이아웃 감사 L7(2026-08-09): 경로 스트립을 우측 세로 컬럼이 아니라 카드 아래
   가로 3분할 밴드로 — 본문 카드가 전폭을 쓰고, 경로는 보조 정보 계층으로 내려간다. */
body[data-ui-generation="2"] #companyPlanWorkspace {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 0;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  overflow: hidden;
}

body[data-ui-generation="2"] #companyPlanWorkspace .dash-focus-card {
  padding: 22px;
  border: 0;
  border-bottom: 1px solid var(--dv-border);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

body[data-ui-generation="2"] #companyPlanWorkspace .dash-focus-card h2 {
  margin: 8px 0 5px;
  font-size: 19px;
  font-weight: 750;
}

body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  border: 0;
  border-radius: 0;
  background: var(--dv-bg-subtle);
}

body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip a {
  min-height: 64px;
  border: 0;
  border-right: 1px solid var(--dv-border);
  background: transparent;
}

body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip a:last-child {
  border-right: 0;
}

body[data-ui-generation="2"] .dash-stats {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 0;
  border-top: 1px solid var(--dv-border);
  border-bottom: 1px solid var(--dv-border);
}

body[data-ui-generation="2"] .dash-stat,
body[data-ui-generation="2"] .dash-stat.green,
body[data-ui-generation="2"] .dash-stat.amber,
body[data-ui-generation="2"] .dash-stat.coral,
body[data-ui-generation="2"] .dash-stat.navy {
  min-height: 94px;
  padding: 16px;
  border: 0;
  border-right: 1px solid var(--dv-border);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

body[data-ui-generation="2"] .dash-stat:last-child {
  border-right: 0;
}

body[data-ui-generation="2"] .dash-stat .stat-ic {
  display: none;
}

body[data-ui-generation="2"] .dash-stat .stat-num {
  color: var(--dv-text-strong);
  font-size: 24px;
  font-variant-numeric: tabular-nums;
}

body[data-ui-generation="2"] .dash-cols,
body[data-ui-generation="2"] .dash-prog-grid {
  gap: 16px;
}

body[data-ui-generation="2"] .dash-card,
body[data-ui-generation="2"] .prog-card,
body[data-ui-generation="2"] .quick-card {
  border-color: var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
  transform: none;
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .quick-card:hover, body[data-ui-generation="2"] .prog-card:hover {
  border-color: color-mix(in srgb, var(--dv-primary) 30%, var(--dv-border));
  box-shadow: none;
  transform: none;
} }

/* 로그인 게이트 — 시스템 대화상자가 아니라 업무 공간의 문이다.
   왼쪽은 레일과 같은 네이비 브랜드 면(이 제품의 고유 어휘), 오른쪽은 행동면.
   Google 로그인은 우리 코발트가 아니라 구글 관례(흰 바탕 + 공식 G 마크)를 따른다 —
   연합 로그인 버튼은 구글을 대표하는 것이지 우리 주 행동이 아니다(2026-08-11 대표 지적). */
body[data-ui-generation="2"] .app-login-gate {
  width: min(720px, calc(100% - 32px));
  margin: 0 auto;
  padding: 0;
  display: grid;
  grid-template-columns: 248px minmax(0, 1fr);
  gap: 0;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
  overflow: hidden;
}

body[data-ui-generation="2"] .app-login-gate-brand {
  grid-row: 1 / span 3;
  display: grid;
  gap: 6px;
  align-content: start;
  padding: 28px 24px;
  background: var(--dv-rail-bg, #04160d);
  color: var(--dv-rail-ink);
}

body[data-ui-generation="2"] .app-login-gate-brand-mark {
  width: 40px;
  height: 40px;
  margin-bottom: 10px;
  border-radius: var(--dv-radius);
  background: url("images/the-dream-ventures-mark.svg") center / cover no-repeat;
}

body[data-ui-generation="2"] .app-login-gate-brand strong {
  color: #ffffff;
  font-size: 15px;
  font-weight: 750;
  letter-spacing: -0.01em;
}

body[data-ui-generation="2"] .app-login-gate-brand-sub {
  padding-bottom: 14px;
  border-bottom: 1px solid color-mix(in srgb, var(--dv-rail-accent) 42%, transparent);
  color: var(--dv-rail-muted);
  font-size: 12px;
  font-weight: 650;
}

body[data-ui-generation="2"] .app-login-gate-brand p {
  margin: 12px 0 0;
  color: var(--dv-rail-muted);
  font-size: 12px;
  line-height: 1.65;
  word-break: keep-all;
}

body[data-ui-generation="2"] .app-login-gate-copy {
  gap: 8px;
  padding: 28px 28px 0;
}

body[data-ui-generation="2"] .app-login-gate-copy strong {
  font-size: 24px;
  line-height: 1.4;
  letter-spacing: -0.02em;
}

body[data-ui-generation="2"] .app-login-gate-copy h1 {
  margin: 0;
  color: var(--dv-text-strong);
  font-size: 24px;
  font-weight: 750;
  line-height: 1.4;
  letter-spacing: -0.02em;
}

body[data-ui-generation="2"] .app-login-gate-copy span {
  max-width: 44ch;
  color: var(--dv-text-muted);
  line-height: 1.65;
  word-break: keep-all;
}

body[data-ui-generation="2"] .app-login-gate > .app-login-gate-button {
  margin: 18px 28px 0;
}

body[data-ui-generation="2"] .app-login-gate-secondary {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: 0 28px 24px;
  padding: 9px 6px;
  border: 0;
  border-radius: var(--dv-radius);
  background: transparent;
  color: var(--dv-text-muted);
  font-size: 15px;
  font-weight: 700;
  text-decoration: none;
  text-underline-offset: 3px;
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .app-login-gate-secondary:hover {
  color: var(--dv-text-strong);
  text-decoration: underline;
} }

/* 로딩·오류 상태는 버튼이 없거나 재시도 하나뿐이라 아랫여백을 copy 가 감당한다. */
body[data-ui-generation="2"] .app-login-gate-copy:last-child {
  padding-bottom: 28px;
}

@media (max-width: 720px) {
  body[data-ui-generation="2"] .app-login-gate {
    grid-template-columns: minmax(0, 1fr);
  }

  body[data-ui-generation="2"] .app-login-gate-brand {
    grid-row: auto;
    grid-template-columns: 36px minmax(0, 1fr);
    gap: 2px 12px;
    align-items: center;
    padding: 18px 20px;
  }

  body[data-ui-generation="2"] .app-login-gate-brand-mark {
    grid-row: 1 / span 2;
    width: 36px;
    height: 36px;
    margin: 0;
  }

  body[data-ui-generation="2"] .app-login-gate-brand-sub {
    padding-bottom: 0;
    border-bottom: 0;
  }

  body[data-ui-generation="2"] .app-login-gate-brand p {
    display: none;
  }

  body[data-ui-generation="2"] .app-login-gate-copy {
    padding: 22px 20px 0;
  }

  body[data-ui-generation="2"] .app-login-gate > .app-login-gate-button {
    /* gen1 모바일 규칙이 버튼을 width:100% 로 만든다 — margin 과 겹치면 카드를 넘친다(실측 19px). */
    width: auto;
    margin: 18px 20px 0;
  }

  body[data-ui-generation="2"] .app-login-gate-secondary {
    margin: 0 20px 20px;
  }
}

body[data-ui-generation="2"].app-auth-required main,
body[data-ui-generation="2"].app-auth-loading main,
body[data-ui-generation="2"].app-auth-error main {
  width: 100% !important;
  min-height: 100dvh;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  justify-content: center;
  margin-left: 0 !important;
  padding: 24px 16px !important;
}

body[data-ui-generation="2"].app-auth-required .app-sidebar,
body[data-ui-generation="2"].app-auth-required .app-toggle,
body[data-ui-generation="2"].app-auth-required .app-scrim,
body[data-ui-generation="2"].app-auth-loading .app-sidebar,
body[data-ui-generation="2"].app-auth-loading .app-toggle,
body[data-ui-generation="2"].app-auth-loading .app-scrim,
body[data-ui-generation="2"].app-auth-error .app-sidebar,
body[data-ui-generation="2"].app-auth-error .app-toggle,
body[data-ui-generation="2"].app-auth-error .app-scrim {
  display: none !important;
}

body[data-ui-generation="2"]:is(.app-auth-required, .app-auth-loading, .app-auth-error) .topbar :is(.main-nav, .nav-links, .top-actions, .auth-slot, .mobile-toggle),
body[data-ui-generation="2"]:is(.app-auth-required, .app-auth-loading, .app-auth-error) .mobile-menu,
body[data-ui-generation="2"]:is(.app-auth-required, .app-auth-loading, .app-auth-error) .dream-channel-widget {
  display: none !important;
}

/* 로그인이 필요하면 로그인만 받는다 — 게이트 아래로 작업 화면이 그대로 보이면
   눌러도 안 되는 것들이 사용자를 헷갈리게 한다(2026-08-11 대표 지적).
   게이트는 main 의 첫 자식으로 삽입되므로 나머지 형제를 전부 감춘다. */
body[data-ui-generation="2"]:is(.app-auth-required, .app-auth-loading, .app-auth-error) main > :not(#appLoginGate, #appAuthPending) {
  display: none !important;
}

/* 인증 확정 전 중립 상태(2026-08-20): 확인 중에는 게이트도 본화면도 그리지 않고
   이 조용한 로딩만 남긴다. 확정된 뒤 게이트든 본화면이든 한 번만 그린다. */
body[data-ui-generation="2"] .app-auth-pending {
  min-height: 46vh;
  color: var(--dv-text-muted);
  font-size: 15px;
}

body[data-ui-generation="2"].app-auth-required .topbar,
body[data-ui-generation="2"].app-auth-error .topbar,
body[data-ui-generation="2"].app-auth-loading .topbar,
body[data-ui-generation="2"].app-auth-loading .mobile-menu {
  display: none !important;
}

body[data-ui-generation="2"] .app-auth-pending-spinner {
  width: 18px;
  height: 18px;
  border-color: var(--dv-border);
  border-top-color: var(--dv-text-muted);
}

body[data-ui-generation="2"]:is(.app-auth-required, .app-auth-loading, .app-auth-error) .topbar-inner {
  justify-content: flex-start;
}

@media (max-width: 1180px) {
  body[data-ui-generation="2"].member-authed main.member-main {
    padding: 24px 24px 56px;
  }

  body[data-ui-generation="2"] .member-dash {
    gap: 24px;
  }

  /* The legacy stylesheet preserves the base information order. Generation 2
     keeps the active ResumeWorkPanel first at every responsive breakpoint. */
  body[data-ui-generation="2"] .member-dash #todayFocus { order: 1; }
  body[data-ui-generation="2"] .member-dash #savedWork { order: 2; }
  /* 기준 문서는 진행 업무 카드 아래로 들어갔고 성장 기록은 홈에서 내렸다 — 이 자리에서
     자리를 다툴 것은 지금 할 일과 진행 업무 둘뿐이다(2026-08-29). */

  body[data-ui-generation="2"] #companyPlanWorkspace {
    grid-template-columns: 1fr;
  }

  body[data-ui-generation="2"] #companyPlanWorkspace .dash-focus-card {
    border-right: 0;
    border-bottom: 1px solid var(--dv-border);
  }

  body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip a {
    border-right: 1px solid var(--dv-border);
    border-bottom: 0;
  }
}

@media (max-width: 1024px) {
  body[data-ui-generation="2"].member-authed main,
  body[data-ui-generation="2"].member-authed > main,
  body[data-ui-generation="2"].member-authed.app-collapsed main,
  body[data-ui-generation="2"].member-authed.app-collapsed > main {
    box-sizing: border-box;
    width: 100% !important;
    margin-left: 0 !important;
  }

  body[data-ui-generation="2"].member-authed main.member-main {
    padding: 72px 20px 52px;
  }

  /* 제목 칸은 글자만 얹는다. 상단 바의 면과 아래 선은 화면 전체 폭의 body.member-authed::before
     (dream-app-shell.css) 한 장이 그린다 — 제목 칸이 자기 면·아래 선을 따로 칠하면 390 폭에서 제목 칸
     (왼쪽 62px ~ 오른쪽 96px)만 1px 낮은 흰 띠가 x≈278 에서 끊겨 보였다(2026-09-28 대표 크롬 실측). */
  body[data-ui-generation="2"] .app-mobile-title {
    height: 56px;
    display: flex;
    align-items: center;
    color: var(--dv-text-strong);
    font-family: var(--dv-font-ui);
    font-size: 15px;
    font-weight: 700;
  }

  body[data-ui-generation="2"] .app-toggle {
    top: 8px;
    left: 12px !important;
    width: 44px;
    height: 44px;
  }

  body[data-ui-generation="2"] .app-sidebar {
    box-shadow: var(--dv-shadow-overlay);
  }
}

@media (max-width: 780px) {
  body[data-ui-generation="2"].member-authed main.member-main {
    padding: 68px 16px 44px;
  }

  body[data-ui-generation="2"] .member-dash {
    gap: 20px;
  }

  body[data-ui-generation="2"] .dv-page-header {
    align-items: center;
    justify-content: flex-end;
    gap: 12px;
  }

  body[data-ui-generation="2"] .dv-page-header-copy {
    display: none;
  }

  body[data-ui-generation="2"] .dv-new-work > summary {
    min-height: 44px;
  }

  body[data-ui-generation="2"] #todayFocus .dash-focus-card {
    padding: 20px;
  }

  body[data-ui-generation="2"] #todayFocus h2 {
    font-size: 22px;
  }

  body[data-ui-generation="2"] #savedWork > .dash-secthead {
    display: block;
  }

  body[data-ui-generation="2"] #savedWork > .dash-secthead .sub {
    display: block;
    margin-top: 4px;
    text-align: left;
  }

  body[data-ui-generation="2"] .case-inbox-head {
    display: grid;
    gap: 12px;
  }

  body[data-ui-generation="2"] .case-inbox-list {
    padding: 4px 16px 16px;
    grid-template-columns: minmax(0, 1fr);
  }

  body[data-ui-generation="2"] .case-inbox-blockers {
    width: calc(100% - 32px);
    margin-inline: 16px;
  }

  body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip {
    display: grid;
    grid-template-columns: 1fr;
  }

  body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip a {
    border-right: 0;
    border-bottom: 1px solid var(--dv-border);
  }

  body[data-ui-generation="2"] .dash-stats {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    overflow: visible;
  }

  body[data-ui-generation="2"] .dash-cols {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 360px) {
  body[data-ui-generation="2"] .dv-new-work > summary span {
    display: none;
  }

  body[data-ui-generation="2"] .dv-new-work > summary {
    width: 44px;
    justify-content: center;
    padding: 0;
  }

  body[data-ui-generation="2"] .dash-stats {
    grid-template-columns: 1fr;
  }
}

body[data-ui-generation="2"] .company-agent-work-status {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 15px 24px;
  padding: 20px 22px;
  border: 1px solid var(--dv-border-strong, #708079);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface, #ffffff);
  box-shadow: none;
}

body[data-ui-generation="2"] .company-agent-work-status[hidden] {
  display: none;
}

body[data-ui-generation="2"] .company-agent-work-copy {
  min-width: 0;
}

body[data-ui-generation="2"] .company-agent-work-state {
  display: inline-flex;
  min-height: 24px;
  align-items: center;
  padding: 0 8px;
  border-radius: 999px;
  background: var(--dv-bg-selected, #e4e9e6);
  color: var(--dv-primary, #0d3021);
  font-size: 12px;
  font-weight: 800;
}

body[data-ui-generation="2"] .company-agent-work-copy h2 {
  margin: 9px 0 3px;
  color: var(--dv-trust, #051b11);
  font-size: 18px;
  line-height: 1.35;
  letter-spacing: -.018em;
}

body[data-ui-generation="2"] .company-agent-work-copy p {
  margin: 0;
  color: var(--dv-text-muted, #50605a);
  font-size: 13px;
  line-height: 1.5;
}

body[data-ui-generation="2"] .company-agent-work-progress {
  grid-column: 1 / -1;
  height: 5px;
  overflow: hidden;
  border-radius: 4px;
  background: var(--dv-bg-subtle, #eaf3ef);
}

body[data-ui-generation="2"] .company-agent-work-progress > span {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  background: var(--dv-primary, #0d3021);
  /* 진행 채움은 width가 아니라 transform으로 움직인다 — 레이아웃 재계산 없이 합성만 일어난다.
     진행률이 폴링마다 실시간 갱신되기 시작해(2026-08-09) 이 전환 비용이 실제로 의미가 생겼다. */
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .45s cubic-bezier(.16, 1, .3, 1);
}

body[data-ui-generation="2"] .company-agent-work-facts {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  margin: 0;
  padding: 0;
}

body[data-ui-generation="2"] .company-agent-work-facts > div {
  min-width: 0;
  display: grid;
  gap: 4px;
  padding-right: 16px;
}

body[data-ui-generation="2"] .company-agent-work-facts > div + div {
  padding-left: 16px;
  border-left: 1px solid var(--dv-border, #b2c2bb);
}

body[data-ui-generation="2"] .company-agent-work-facts dt {
  color: var(--dv-text-muted, #50605a);
  font-size: 12px;
  font-weight: 750;
}

body[data-ui-generation="2"] .company-agent-work-facts dd {
  margin: 0;
  color: var(--dv-text, #283530);
  font-size: 12px;
  line-height: 1.5;
  overflow-wrap: anywhere;
}

body[data-ui-generation="2"] .company-agent-work-actions {
  grid-column: 2;
  grid-row: 1;
  display: grid;
  justify-items: end;
  align-content: center;
  gap: 7px;
}

body[data-ui-generation="2"] .company-agent-work-actions > span {
  color: var(--dv-primary, #0d3021);
  font-size: 12px;
  font-weight: 850;
  font-variant-numeric: tabular-nums;
}

body[data-ui-generation="2"] .company-agent-work-actions .btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  min-height: 44px;
  white-space: nowrap;
}

body[data-ui-generation="2"] .company-agent-work-actions .btn.primary {
  border-color: var(--dv-action-deep);
  background-color: var(--dv-action); background-image: var(--dv-action-face);
  color: var(--dv-on-action);
}

@container member-dashboard (max-width: 760px) {
  body[data-ui-generation="2"] .company-agent-work-status {
    grid-template-columns: minmax(0, 1fr);
    padding: 18px;
  }

  body[data-ui-generation="2"] .company-agent-work-actions {
    grid-column: 1;
    grid-row: auto;
    justify-items: stretch;
  }

  body[data-ui-generation="2"] .company-agent-work-actions .btn {
    justify-content: center;
    white-space: normal;
    text-align: center;
  }

  body[data-ui-generation="2"] .company-agent-work-facts {
    grid-template-columns: minmax(0, 1fr);
    gap: 10px;
  }

  body[data-ui-generation="2"] .company-agent-work-facts > div,
  body[data-ui-generation="2"] .company-agent-work-facts > div + div {
    padding: 0;
    border-left: 0;
  }
}

@container member-dashboard (min-width: 781px) and (max-width: 1049px) {
  body[data-ui-generation="2"] .dash-stats {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (prefers-reduced-motion: reduce) {
  body[data-ui-generation="2"] .company-agent-work-progress > span {
    transition: none;
  }
}

/* ─────────────────────────────────────────────────────────────────────────
   업무현황 판독성 (gen2)
   고친 것: (1) 빈 화면이 "0"을 열 번 넘게 반복, (2) 카드 안의 카드가 4겹,
   (3) 모든 블록이 같은 흰 배경 + 같은 1px 테두리라 시선이 갈 곳이 없음,
   (4) 반복되는 테두리가 화면을 격자로 만듦, (5) 상태를 색으로 읽을 수 없음.
   원칙: 지금 할 하나 > 진행 중 > 참고 의 3단 위계, 카드 평탄화, 여백 분할,
   상태색은 라벨 문구와 함께만 쓴다.
   ───────────────────────────────────────────────────────────────────────── */

/* 1) 위계 1단 — 지금 해야 할 한 가지만 카드로 떠 있는다.
   큐 해체(2026-08-12) 후 이어갈 업무의 액션 표면은 케이스 인박스가 승계한다. */
body[data-ui-generation="2"] #caseInbox[data-action-owner],
body[data-ui-generation="2"] #todayFocus[data-action-owner] .dash-focus-card {
  border-color: color-mix(in srgb, var(--dv-primary) 34%, var(--dv-border));
  border-top: 3px solid var(--dv-primary);
}

/* 2026-10-01 대표 #35 오로라 강조 — 업무현황에서 회원이 지금 할 한 가지(지금 할 일 카드)의 윗선만 초록 대신 오로라 한 줄로
   바꾸고, 같은 빛이 카드 위쪽 64px 안에서만 옅게 내려앉는다. 윗변 테두리를 투명하게 두고 그 자리에 배경으로 그려 선이 둥근
   모서리를 따라 휜다. 빛은 흰 면에 22% 이하로만 섞여 '지금 할 일' 라벨(보조 잉크)이 그 자리에서도 6:1 이상이다. */
body[data-ui-generation="2"] #todayFocus[data-action-owner] .dash-focus-card {
  border-top-color: transparent;
  background:
    var(--dv-aurora-line) top / 100% 3px no-repeat border-box,
    radial-gradient(30% 64px at 4% 0, color-mix(in srgb, var(--dv-aurora-jade) 22%, transparent), transparent) padding-box,
    radial-gradient(28% 56px at 28% 0, color-mix(in srgb, var(--dv-aurora-sky) 16%, transparent), transparent) padding-box,
    radial-gradient(28% 56px at 52% 0, color-mix(in srgb, var(--dv-aurora-lavender) 16%, transparent), transparent) padding-box,
    radial-gradient(28% 56px at 76% 0, color-mix(in srgb, var(--dv-aurora-coral) 16%, transparent), transparent) padding-box,
    radial-gradient(30% 64px at 97% 0, color-mix(in srgb, var(--dv-aurora-amber) 22%, transparent), transparent) padding-box,
    var(--dv-bg-surface) padding-box;
}

body[data-ui-generation="2"] #caseInbox[data-action-owner] .case-inbox-head h3 {
  color: var(--dv-primary);
}

/* 2) 위계 2·3단 — 회사 메모리는 카드가 아니라 여백과 제목으로 나뉜 섹션이다. */
body[data-ui-generation="2"] .company-memory-panel {
  margin: 0;
  padding: 0;
  gap: 18px;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

body[data-ui-generation="2"] .company-memory-head {
  align-items: end;
  gap: 16px 24px;
  padding-top: 4px;
}

body[data-ui-generation="2"] .company-memory-head h3 {
  margin: 0;
  font-size: 16px;
  font-weight: 700;
  letter-spacing: -0.015em;
}

body[data-ui-generation="2"] .company-memory-head p {
  max-width: 68ch;
  margin: 4px 0 0;
  color: var(--dv-text-muted);
  font-size: 13px;
}

/* 3) 선 줄이기 — 지표 타일의 개별 테두리를 없애고 세로 구분선 하나로 묶는다. */
body[data-ui-generation="2"] .company-memory-metrics {
  display: flex;
  gap: 0;
  min-width: 0;
  justify-self: end;
}

body[data-ui-generation="2"] .company-memory-metrics span {
  min-width: 84px;
  padding: 2px 14px;
  border: 0;
  border-left: 1px solid var(--dv-border);
  border-radius: 0;
  background: transparent;
  text-align: right;
}

body[data-ui-generation="2"] .company-memory-metrics span:first-child {
  border-left: 0;
}

body[data-ui-generation="2"] .company-memory-metrics b {
  font-size: 20px;
  font-variant-numeric: tabular-nums;
}

/* 4) 상태 분포 타일(.memory-pulse-item)은 케이스 인박스와 중복이라 제거됐다(2026-08-17). */

/* 실행 경로 3단은 번호를 왼쪽에 붙인 목록이다 (칸 안이 비어 보이지 않게). */
body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip a {
  grid-template-columns: 25px minmax(0, 1fr);
  align-content: center;
  align-items: center;
  gap: 2px 12px;
  padding: 14px 18px;
}

body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip a > span {
  grid-row: span 2;
}

@media (min-width: 1181px) {
  /* L7(2026-08-09): 우측 세로 컬럼 시절의 1열 강제였다 — 카드 아래 가로 밴드로
     바뀌면서 데스크톱도 3분할을 유지한다. */
  body[data-ui-generation="2"] #companyPlanWorkspace .dash-path-strip {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    align-content: start;
  }
}

/* 5) 회사 전담 AI 카드 평탄화 — 그라디언트와 중첩 카드를 없애고 두 면으로 나눈다. */
body[data-ui-generation="2"] .company-agent-card {
  gap: 0;
  overflow: hidden;
  padding: 0;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
}

body[data-ui-generation="2"] .company-agent-main {
  gap: 10px;
  padding: 20px 22px;
}

body[data-ui-generation="2"] .company-agent-main strong {
  font-size: 17px;
  font-weight: 750;
  letter-spacing: -0.015em;
}

body[data-ui-generation="2"] .company-agent-main p {
  max-width: 62ch;
  font-size: 13px;
}

body[data-ui-generation="2"] .company-agent-plan {
  padding: 20px 22px;
  border: 0;
  border-left: 1px solid var(--dv-border);
  border-radius: 0;
  background: var(--dv-bg-subtle);
}

/* 케이스 요약은 도넛·칩이 아니라 문장 한 줄이다(2026-08-28, 퍼센트·진행바 금지). */
body[data-ui-generation="2"] .case-inbox-summary-line {
  display: inline-block;
  color: var(--dv-text-muted);
  font-size: var(--dv-text-sm, 13px);
  line-height: 1.6;
}

body[data-ui-generation="2"] .case-inbox-summary-line b {
  color: var(--dv-text-strong);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

body[data-ui-generation="2"] .case-inbox-summary-line .is-urgent {
  color: var(--dv-danger);
  font-style: normal;
  font-weight: 650;
}

body[data-ui-generation="2"] .case-inbox-blocker-row {
  grid-template-columns: minmax(0, 1fr) auto;
}

/* 추천 실행 순서의 단계는 카드 안의 카드가 아니라 구분선으로 나뉜 행이다(2026-08-28, 카드 안 카드 금지). */
body[data-ui-generation="2"] .company-agent-steps {
  gap: 0;
}

body[data-ui-generation="2"] .company-agent-step {
  padding: 10px 0;
  border: 0;
  border-top: 1px solid var(--dv-border);
  border-radius: 0;
  background: transparent;
}

body[data-ui-generation="2"] .company-agent-step:first-child {
  border-top: 0;
  padding-top: 0;
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .company-agent-step:hover {
  border-color: var(--dv-border);
  background: transparent;
} }

body[data-ui-generation="2"] .company-agent-step:hover strong {
  color: var(--dv-primary);
}

/* 근거 3칸은 상자가 아니라 구분선으로 나뉜 한 줄이다. */
body[data-ui-generation="2"] .company-agent-evidence {
  gap: 0;
  margin-top: 6px;
}

body[data-ui-generation="2"] .agent-evidence {
  padding: 0 14px;
  border: 0;
  border-left: 1px solid var(--dv-border);
  border-radius: 0;
  background: transparent;
}

body[data-ui-generation="2"] .agent-evidence:first-child {
  padding-left: 0;
  border-left: 0;
}

body[data-ui-generation="2"] .agent-evidence.missing strong {
  color: var(--dv-warning-text);
}

body[data-ui-generation="2"] .agent-evidence.ready strong,
body[data-ui-generation="2"] .agent-evidence.active strong {
  color: var(--dv-success-text);
}

/* 6) 참고 단계 — 접힌 기록은 상자가 아니라 조용한 한 줄이다. */
body[data-ui-generation="2"] .saved-history-details,
body[data-ui-generation="2"] .company-memory-details {
  border: 0;
  border-top: 1px solid var(--dv-border);
  border-radius: 0;
  background: transparent;
}

body[data-ui-generation="2"] :where(.saved-history-summary, .company-memory-details-summary) {
  min-height: 52px;
  padding: 12px 2px;
  border-radius: 0;
  color: var(--dv-text-muted);
}

body[data-ui-generation="2"] :where(.saved-history-summary, .company-memory-details-summary) strong {
  color: var(--dv-text);
  font-size: 14px;
  font-weight: 650;
}

/* 7) 요약 통계는 참고 단계 — 위계를 낮춘다. */
body[data-ui-generation="2"] .dash-stat .stat-label {
  color: var(--dv-text-muted);
  font-size: 12px;
  font-weight: 650;
}

body[data-ui-generation="2"] .dash-stat .stat-sub {
  color: var(--dv-text-muted);
  font-size: 12px;
}

/* 9) 0인 지표는 뒤로 물러난다 — 상태 색은 실제로 그 상태에 무언가 있을 때만 켜지고,
      0은 보조 잉크로 낮춰 숫자가 있는 칸이 먼저 읽히게 한다. */
body[data-ui-generation="2"] .company-memory-metrics span[data-dv-zero] b,
body[data-ui-generation="2"] .case-inbox-metric[data-dv-zero] b,
body[data-ui-generation="2"] .dash-stat[data-dv-zero] .stat-num {
  color: var(--dv-text-muted);
  font-weight: 600;
}

/* ── 빈 상태: 0을 세지 않고 한 번만 말한다 ───────────────────────────────
   실제 업무량이 0인 동안에만 켜지고, 데이터가 생기면 자동으로 꺼진다. */
body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .company-memory-metrics,
body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .case-inbox-metrics,
body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .company-agent-evidence,
body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .saved-history-summary em,
body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] #companyMemoryDetailsCount,
body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .dash-stat[data-dv-zero],
body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .chip-row > .tag[data-dv-zero] {
  display: none;
}

/* 보조 피드가 실제로 비었을 때만 섹션의 제목·테두리·빈 카드까지 함께 접는다. 핵심 업무,
   로딩 상태, 한 건이라도 있는 피드는 이 규칙의 대상이 아니다. */
body[data-ui-generation="2"] .member-dash > [data-dv-empty-secondary] {
  display: none;
}

body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .company-agent-card {
  grid-template-columns: minmax(0, 1fr);
}

body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .company-agent-plan {
  border-left: 0;
  border-top: 1px solid var(--dv-border);
}

body[data-ui-generation="2"] .member-dash[data-dv-workload="idle"] .dash-stats {
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
}

@media (max-width: 1180px) {
  body[data-ui-generation="2"] .company-agent-card {
    grid-template-columns: minmax(0, 1fr);
  }

  body[data-ui-generation="2"] .company-agent-plan {
    border-left: 0;
    border-top: 1px solid var(--dv-border);
  }
}

@media (max-width: 780px) {
  body[data-ui-generation="2"] .company-memory-head {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
  }

  body[data-ui-generation="2"] .company-memory-metrics {
    justify-self: start;
    min-width: 0;
  }

  body[data-ui-generation="2"] .company-memory-metrics span {
    min-width: 0;
    padding: 2px 12px;
    text-align: left;
  }

  body[data-ui-generation="2"] .company-memory-metrics span:first-child {
    padding-left: 0;
  }

  body[data-ui-generation="2"] .company-memory-pulse {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  body[data-ui-generation="2"] .memory-pulse-item:nth-child(-n + 2) {
    border-bottom: 1px solid var(--dv-border);
  }

  body[data-ui-generation="2"] .memory-pulse-item:nth-child(odd) {
    border-left: 0;
  }

  body[data-ui-generation="2"] .company-agent-main,
  body[data-ui-generation="2"] .company-agent-plan {
    padding: 18px 16px;
  }

  body[data-ui-generation="2"] .company-agent-evidence {
    grid-template-columns: minmax(0, 1fr);
  }

  body[data-ui-generation="2"] .agent-evidence {
    padding: 8px 0;
    border-left: 0;
    border-top: 1px solid var(--dv-border);
  }

  body[data-ui-generation="2"] .agent-evidence:first-child {
    border-top: 0;
  }
}

/* ─────────────────────────────────────────────────────────────────────────
   회원 홈 하단부 (gen2) — 상단만 V2로 바뀌고 케어 알림·브리핑·지원사업·실행
   메뉴는 레거시 문법(16px 라운드, 부양 그림자, 무지개 칩, 그라디언트 바)이
   남아 화면이 반쪽짜리였다. 원칙: 8px + 1px 경계의 평평한 카드, 카테고리 칩은
   조용한 중립 하나, 상태색은 실제 상태(긴급·권장)에만, 빈 상태는 허공 텍스트가
   아니라 면 위에 앉힌다.
   ───────────────────────────────────────────────────────────────────────── */

body[data-ui-generation="2"] .member-dash .dash-secthead {
  align-items: end;
  padding: 0;
}

body[data-ui-generation="2"] .member-dash .dash-secthead h2 {
  color: var(--dv-text-strong);
  font-size: 19px;
  font-weight: 750;
  letter-spacing: -0.02em;
}

body[data-ui-generation="2"] .member-dash .dash-secthead .sub {
  color: var(--dv-text-muted);
  font-size: 13px;
}

body[data-ui-generation="2"] .member-dash .dash-secthead .head-link,
body[data-ui-generation="2"] .dash-card > .card-head .head-link {
  min-height: 40px;
  padding: 8px 14px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  color: var(--dv-primary);
  font-size: 13px;
  font-weight: 700;
  transition: background-color var(--dv-duration-fast) var(--dv-ease-out), border-color var(--dv-duration-fast) var(--dv-ease-out);
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .member-dash .dash-secthead .head-link:hover, body[data-ui-generation="2"] .dash-card > .card-head .head-link:hover {
  border-color: color-mix(in srgb, var(--dv-primary) 30%, var(--dv-border));
  background: var(--dv-bg-selected);
  text-decoration: none;
} }

/* 빈 상태: 허공에 뜬 한 줄이 아니라 면 위에 앉은 안내다. */
body[data-ui-generation="2"] .member-dash .dash-empty {
  grid-column: 1 / -1;
  padding: 22px 20px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-subtle);
  color: var(--dv-text);
  font-size: 13px;
  line-height: 1.6;
  text-align: left;
}

/* 케어 알림: 상태색은 긴급·권장에만, 행동 버튼은 하나만 채운다. */
body[data-ui-generation="2"] .care-card {
  gap: 8px;
  padding: 16px 18px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
}

body[data-ui-generation="2"] .care-card .cc-sev {
  padding: 3px 9px;
  background: var(--dv-bg-subtle);
  color: var(--dv-text);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0;
}

body[data-ui-generation="2"] .care-card[data-sev="high"] .cc-sev {
  background: var(--dv-danger-surface);
  color: var(--dv-danger);
}

body[data-ui-generation="2"] .care-card[data-sev="medium"] .cc-sev {
  background: var(--dv-warning-surface);
  color: var(--dv-warning-text);
}

body[data-ui-generation="2"] .care-card .cc-title {
  color: var(--dv-text-strong);
  font-size: 14px;
  font-weight: 700;
}

body[data-ui-generation="2"] .care-card .cc-body {
  color: var(--dv-text-muted);
  font-size: 12.5px;
}

body[data-ui-generation="2"] .care-card .cc-actions a,
body[data-ui-generation="2"] .care-card .cc-actions button {
  min-height: 36px;
  border-radius: var(--dv-radius);
  font-weight: 700;
}

body[data-ui-generation="2"] .care-card .cc-go {
  background: var(--dv-primary);
  color: var(--dv-on-primary);
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .care-card .cc-go:hover {
  background: var(--dv-primary-hover);
} }

body[data-ui-generation="2"] .care-card .cc-seen {
  border-color: var(--dv-border);
  background: var(--dv-bg-surface);
  color: var(--dv-text);
}

/* 브리핑·인사이트: 카드 그림자를 걷고, 항목은 헤어라인 행으로 나눈다. */
body[data-ui-generation="2"] .dash-card {
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
}

body[data-ui-generation="2"] .dash-card > .card-head {
  padding: 18px 20px 6px;
}

body[data-ui-generation="2"] .dash-card > .card-head h2 {
  color: var(--dv-text-strong);
  font-size: 16px;
  font-weight: 750;
  letter-spacing: -0.015em;
}

body[data-ui-generation="2"] .dash-card .card-body {
  padding: 4px 20px 16px;
  gap: 0;
}

body[data-ui-generation="2"] .feed-item {
  gap: 3px;
  padding: 12px 0;
  border-radius: 0;
}

body[data-ui-generation="2"] .feed-item + .feed-item {
  border-top: 1px solid var(--dv-border);
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .feed-item:hover {
  background: transparent;
} }

body[data-ui-generation="2"] .feed-item.linked:hover .fi-title,
body[data-ui-generation="2"] a.feed-item:hover .fi-title {
  color: var(--dv-primary);
}

body[data-ui-generation="2"] .feed-item .fi-title {
  color: var(--dv-text-strong);
  font-size: 14px;
  font-weight: 650;
  line-height: 1.45;
}

body[data-ui-generation="2"] .feed-item .fi-sum {
  color: var(--dv-text-muted);
  font-size: 12.5px;
  line-height: 1.5;
}

/* 카테고리 칩은 상태가 아니다 — 무지개 대신 조용한 중립 하나. */
body[data-ui-generation="2"] .feed-item .fi-pill,
body[data-ui-generation="2"] .fi-pill.gold,
body[data-ui-generation="2"] .fi-pill.blue,
body[data-ui-generation="2"] .fi-pill.violet,
body[data-ui-generation="2"] .fi-pill.red {
  padding: 3px 8px;
  background: var(--dv-bg-subtle);
  color: var(--dv-text);
  font-size: 12px;
  font-weight: 650;
  letter-spacing: 0;
  text-transform: none;
}

/* 추천 지원사업: 평평한 카드, 매칭 바는 단색 실행 그린. */
body[data-ui-generation="2"] .prog-card {
  gap: 8px;
  padding: 16px 18px;
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
  transform: none;
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .prog-card:hover {
  border-color: color-mix(in srgb, var(--dv-primary) 30%, var(--dv-border));
  box-shadow: none;
  transform: none;
} }

body[data-ui-generation="2"] .prog-card .pc-cat {
  padding: 3px 8px;
  background: var(--dv-bg-subtle);
  color: var(--dv-text);
  font-size: 12px;
  font-weight: 650;
  letter-spacing: 0;
}

body[data-ui-generation="2"] .prog-card .pc-title {
  color: var(--dv-text-strong);
  font-size: 14px;
  font-weight: 650;
}

body[data-ui-generation="2"] .prog-card .pc-score {
  color: var(--dv-text-strong);
  font-weight: 700;
}

body[data-ui-generation="2"] .prog-card .pc-score .dot {
  background: var(--dv-primary);
}

body[data-ui-generation="2"] .prog-card .pc-score.pending .dot {
  background: var(--dv-warning-accent);
}

body[data-ui-generation="2"] .prog-card .pc-bar {
  height: 4px;
  background: var(--dv-bg-subtle);
}

body[data-ui-generation="2"] .prog-card .pc-bar > span {
  background: var(--dv-primary);
}

/* 실행 메뉴·작업 도구 장부 행: 토큰 색으로 정렬한다. */
body[data-ui-generation="2"] .dash-section-summary strong {
  color: var(--dv-text-strong);
  font-size: 15px;
  font-weight: 700;
}

body[data-ui-generation="2"] .dash-section-summary small {
  color: var(--dv-text-muted);
  font-size: 12.5px;
}

body[data-ui-generation="2"] .dash-section-summary em {
  border-radius: 999px;
  background: var(--dv-bg-subtle);
  color: var(--dv-text);
  font-size: 12px;
  font-weight: 700;
  font-style: normal;
}

body[data-ui-generation="2"] .quick-card .qc-title {
  color: var(--dv-text-strong);
  font-weight: 700;
}

body[data-ui-generation="2"] .quick-card .qc-sub {
  color: var(--dv-text-muted);
  /* 1440 4열에서 설명이 "파|악", "분|석"처럼 낱말 가운데서 끊겼다(2026-09-28 관측) — 띄어쓰기에서만 줄을 바꾼다. */
  word-break: keep-all;
  overflow-wrap: break-word;
}

body[data-ui-generation="2"] .quick-card .qc-ic {
  color: var(--dv-primary);
}

body[data-ui-generation="2"] .quick-card .qc-where {
  color: var(--dv-primary);
}

/* 요약 지표: 떠 있는 숫자가 아니라 한 컨테이너에 앉은 밴드다. */
body[data-ui-generation="2"] .dash-stats {
  border: 1px solid var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  overflow: hidden;
}

body[data-ui-generation="2"] .dash-stat,
body[data-ui-generation="2"] .dash-stat:last-child {
  border: 0;
  box-shadow: -1px -1px 0 0 var(--dv-border);
}

/* 히어로 빈 상태: 주 행동은 실행 그린, 세로 중심을 맞춘다. */
body[data-ui-generation="2"] .growth-action-primary.is-empty {
  align-items: center;
  padding: 22px 0 8px;
}

body[data-ui-generation="2"] .growth-action-primary.is-empty .growth-action-copy > strong {
  margin-top: 0;
}

body[data-ui-generation="2"] .growth-action-primary.is-empty .growth-action-copy > p {
  margin-bottom: 0;
}

body[data-ui-generation="2"] .growth-action-actions .btn.primary {
  background-color: var(--dv-action); background-image: var(--dv-action-face);
  border-color: var(--dv-action-deep);
  color: var(--dv-on-action);
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .growth-action-actions .btn.primary:hover {
  background-color: var(--dv-action); background-image: var(--dv-action-face-hover);
  border-color: var(--dv-action-deep);
} }

/* 기준정보 마스터 본문: 설명은 보조 잉크, 칩은 조용한 중립 + 실제 상태만 골드. */
body[data-ui-generation="2"] #companyPlanWorkspace .dash-focus-card p {
  max-width: 68ch;
  color: var(--dv-text-muted);
  font-size: 13px;
}

body[data-ui-generation="2"] #companyPlanWorkspace .chip-row > .tag {
  border: 1px solid var(--dv-border);
  border-radius: 999px;
  background: var(--dv-bg-surface);
  color: var(--dv-text);
  font-weight: 650;
  letter-spacing: 0;
}

@media (max-width: 780px) {
  body[data-ui-generation="2"] .dash-card > .card-head {
    padding: 16px 16px 4px;
  }

  body[data-ui-generation="2"] .dash-card .card-body {
    padding: 4px 16px 14px;
  }

  body[data-ui-generation="2"] .care-card {
    padding: 14px 16px;
  }
}

/* ─────────────────────────────────────────────────────────────────────────
   앱 스타일 월드 전환 — H2 (2026-08-10 대표 승인)
   네이비 레일 + 골드 위치 포인트 + 코발트 주 행동 + 웜 페이퍼 캔버스.
   인증 후 앱(gen2)에만 적용한다. 공개 랜딩은 기존 그린 월드와 --public-* 계약을
   별도 승인 전까지 유지하므로 canonical 토큰 파일은 건드리지 않고 여기서
   스코프 재정의한다. 상태색(warning·danger·success)은 기존 값 그대로다.
   ───────────────────────────────────────────────────────────────────────── */

/* 토큰 값은 canonical(dream-tokens.css)이 소유한다 — 2026-08-10 H2 승격으로
   스코프 재정의를 걷어냈다. 아래는 레일 컴포넌트 규칙만 남는다. */

/* 레일: 밝은 보조 표면에서 짙은 네이비 캔버스로. 잉크는 2단, 현재 위치는 골드. */
body[data-ui-generation="2"] .app-sidebar {
  background: var(--dv-rail-bg, #04160d);
  border-right-color: var(--dv-rail-bg, #04160d);
}

body[data-ui-generation="2"] .app-sidebar .app-brand .word strong {
  color: var(--dv-rail-ink-strong);
}

body[data-ui-generation="2"] .app-sidebar .app-brand .word small {
  color: var(--dv-rail-muted);
}

/* 레일에서도 자료실은 다른 메뉴와 같다. 면과 경계선은 선택된 칸의 표시이지
   특정 메뉴의 장식이 아니다(2026-08-29 대표 지적). 호버·선택은 일반 규칙이 맡는다. */

body[data-ui-generation="2"] .app-navgroup + .app-navgroup,
body[data-ui-generation="2"] .app-navgroup.is-network-group,
body[data-ui-generation="2"] .app-navgroup + .app-navgroup.is-network-group {
  border-top-color: var(--dv-rail-line);
}

body[data-ui-generation="2"] .app-navgroup > .grp-label,
body[data-ui-generation="2"] .app-navgroup .grp-hint {
  color: var(--dv-rail-muted);
}

body[data-ui-generation="2"] .app-navitem,
body[data-ui-generation="2"] .app-navgroup.is-exec-group .app-navitem,
body[data-ui-generation="2"] .app-navgroup.is-management-group .app-navitem,
body[data-ui-generation="2"] .app-navitem.is-network-item,
body[data-ui-generation="2"] .app-nav-more summary {
  color: var(--dv-rail-ink);
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .app-navitem:hover, body[data-ui-generation="2"] .app-navitem.is-network-item:hover, body[data-ui-generation="2"] .app-nav-more summary:hover {
  background: var(--dv-rail-hover);
  color: var(--dv-rail-ink-strong);
} }

body[data-ui-generation="2"] .app-navitem.active,
body[data-ui-generation="2"] .app-navitem.is-home,
body[data-ui-generation="2"] .app-navitem.is-home.active,
body[data-ui-generation="2"] .app-navitem.is-network-item.active {
  background: var(--dv-rail-selected);
  color: var(--dv-rail-ink-strong);
}

body[data-ui-generation="2"] .app-navitem.active::before,
body[data-ui-generation="2"] .app-navitem.is-home.active::before,
body[data-ui-generation="2"] .app-navitem.is-network-item.active::before {
  background: var(--dv-rail-accent);
}

body[data-ui-generation="2"] .app-sidebar .app-bottom {
  border-top-color: var(--dv-rail-line);
}

body[data-ui-generation="2"] .app-account {
  border-color: var(--dv-rail-line);
  background: rgba(255, 255, 255, .06);
}

body[data-ui-generation="2"] .app-account.is-logged-in {
  border-color: color-mix(in srgb, var(--dv-rail-accent) 40%, var(--dv-rail-line));
  background: rgba(255, 255, 255, .06);
}

body[data-ui-generation="2"] .app-account strong {
  color: var(--dv-rail-ink-strong);
}

/* 겸업 전환 버튼 — 레일 위에서는 계정 카드와 같은 반투명 면에 레일 잉크. */
body[data-ui-generation="2"] .app-role-switch {
  border-color: var(--dv-rail-line);
  background: rgba(255, 255, 255, .06);
  color: var(--dv-rail-ink-strong);
}

body[data-ui-generation="2"] .app-role-switch svg {
  color: var(--dv-rail-accent);
}

body[data-ui-generation="2"] .app-role-switch small {
  color: var(--dv-rail-muted);
}

body[data-ui-generation="2"] .app-role-switch strong {
  color: var(--dv-rail-ink-strong);
}

@media (hover: hover) and (pointer: fine) {
  body[data-ui-generation="2"] .app-role-switch:hover {
    border-color: color-mix(in srgb, var(--dv-rail-accent) 40%, var(--dv-rail-line));
    background: var(--dv-rail-hover, rgba(255, 255, 255, .1));
  }
}

body[data-ui-generation="2"] .app-account small,
body[data-ui-generation="2"] .app-account span {
  color: var(--dv-rail-muted);
}

/* 레일 위 접이식 그룹(전문 업무 더보기 등)도 같은 잉크 문법을 따른다. */
body[data-ui-generation="2"] .app-sidebar .app-navgroup.is-exec-group > .grp-label,
body[data-ui-generation="2"] .app-sidebar summary,
body[data-ui-generation="2"] .app-sidebar details {
  color: var(--dv-rail-ink);
}

/* 세로로 쌓인 2열 밴드의 중앙 경계를 한 축으로 맞춘다(2026-08-10 대표 지적).
   브리핑/인사이트 1.05fr 비대칭, 케어 minmax(280)+gap12, 지원사업 minmax(244)+gap14가
   단마다 다른 중앙값을 만들었다 — 전부 같은 gap과 같은 최소폭의 균등 분할로 통일. */
body[data-ui-generation="2"] .dash-cols {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}

body[data-ui-generation="2"] .dash-care-grid,
body[data-ui-generation="2"] .dash-prog-grid {
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 16px;
}

/* 레일 스크롤바: OS 기본(흰 트랙+화살표)이 다크 레일 위에 흰 띠를 만들었다
   (2026-08-10 대표 지적) — 트랙·버튼을 없애고 반투명 막대만 남긴다. 그때 표준 속성(scrollbar-width·scrollbar-color)을 함께
   걸어 둔 탓에 Chrome 121+ 가 의사요소를 버리고 화살표를 다시 그렸다(2026-10-01 대표 #33). 모양은 dream-app-shell.css 스크롤바
   절 하나가 맡고, 레일은 어두운 면 막대 색만 고른다. */
body[data-ui-generation="2"] .app-nav-scroll {
  --dv-scrollbar-thumb: var(--dv-scrollbar-thumb-on-dark);
  --dv-scrollbar-thumb-hover: var(--dv-scrollbar-thumb-on-dark-hover);
}

/* 섹션 액션 문법 통일(2026-08-10 대표 지적: "지금 스캔·지원사업 실행 버튼 위치가
   제각각"). 페이지 섹션과 카드가 서로 다른 테두리 버튼을 쓰던 것을, 제목 행 오른쪽의
   조용한 텍스트 액션 하나로 합친다 — 제목 기준선에 붙어 어디서나 같은 자리로 읽힌다. */
body[data-ui-generation="2"] .member-dash .dash-secthead {
  align-items: center;
}

body[data-ui-generation="2"] .member-dash .dash-secthead .head-link,
body[data-ui-generation="2"] .dash-card > .card-head .head-link {
  min-height: 44px;
  padding: 10px 4px;
  border: 0;
  background: transparent;
  color: var(--dv-primary);
  font-size: 13px;
  font-weight: 700;
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"] .member-dash .dash-secthead .head-link:hover, body[data-ui-generation="2"] .dash-card > .card-head .head-link:hover {
  border: 0;
  background: transparent;
  color: var(--dv-primary-hover);
  text-decoration: underline;
  text-underline-offset: 4px;
} }

/* 섹션 제목과 내용 사이 간격을 카드 헤더와 같은 리듬으로 묶는다. */
body[data-ui-generation="2"] .dash-care-section,
body[data-ui-generation="2"] .dash-program-section {
  display: grid;
  gap: 10px;
}

/* 회원 홈은 boot에서 섹션 순서를 재배치한다(dream-member-home-v2.js). 재배치 전 화면을
   먼저 그리면 본문이 한 번 밀렸다가 자리를 찾는 것처럼 보인다(2026-08-10 실측: 재배치
   구간에서만 CLS 0.21). 재배치가 끝날 때까지 본문을 감춰 최종 위치에서 한 번에 나오게 한다.
   스크립트가 실패해도 화면이 비지 않도록 1.2초 뒤 강제로 드러내는 안전장치를 함께 둔다.

   🔴 대상은 `.member-dash` 가 아니라 `[data-member-home]` 이다. 회계센터도 레이아웃을
   재사용하려고 `.member-dash` 를 쓰는데, 그 화면에는 순서를 되돌릴 boot 스크립트가
   실리지 않는다(work 자산 묶음에 dream-member-home-v2.js 가 없다). 클래스로 잡았더니
   회계센터가 매번 1.2초 동안 빈 화면이 됐다 — 감추는 규칙은 그것을 드러낼 스크립트가
   확실히 도는 화면에만 건다. */
@keyframes dv-dash-failsafe-reveal { to { visibility: visible; } }

body[data-ui-generation="2"] .member-dash[data-member-home]:not([data-member-home-generation="2"]) {
  visibility: hidden;
  animation: dv-dash-failsafe-reveal 0s linear 1200ms forwards;
}

@media (prefers-reduced-motion: reduce) {
  body[data-ui-generation="2"] .member-dash[data-member-home]:not([data-member-home-generation="2"]) {
    animation-delay: 600ms;
  }
}

/* 다크 레일 위 계정 상태 배지. 라이트 표면 기준 색이 그대로 얹혀 2.41:1 이었다
   (2026-08-10 실측). 레일 잉크 계열로 되돌린다. */
body[data-ui-generation="2"] .app-account .app-auth-state {
  color: var(--dv-rail-muted);
}

body[data-ui-generation="2"] .app-account.is-logged-in .app-auth-state {
  color: var(--dv-rail-success);
}

body[data-ui-generation="2"] .app-account.is-logged-in .app-auth-state > span {
  background: var(--dv-rail-success);
  box-shadow: none;
}

body[data-ui-generation="2"] .app-account.is-auth-error .app-auth-state {
  color: var(--dv-rail-danger);
}

/* 레거시 대시보드 팔레트 승계(2026-08-10 대표 지적 "AI 상담쪽 디자인 안 맞췄다").
   dream-open.css 의 body.styled-dashboard-page 가 --green/--navy/--blue 를 자체 값으로
   재정의해 :root 의 H2 토큰을 이긴다 — 그래서 이 영역만 구 그린 버튼·무지개 칩으로 남았다.
   같은 스코프에서 H2 토큰으로 다시 연결한다. */
body[data-ui-generation="2"].styled-dashboard-page {
  --green: var(--dv-primary);
  --green-dark: var(--dv-primary-hover);
  --green-soft: var(--dv-bg-selected);
  --navy: var(--dv-trust);
  --navy-2: var(--dv-trust);
  --blue: var(--dv-trust);
  --blue-soft: var(--dv-trust-soft);
  --violet: var(--dv-trust);
  --violet-soft: var(--dv-trust-soft);
  --ink: var(--dv-text-strong);
  --ink-soft: var(--dv-text);
  --muted: var(--dv-text-muted);
  --line: var(--dv-border);
  --line-strong: var(--dv-border-strong);
}

/* 카테고리 칩은 상태가 아니다 — 상담 카드의 무지개 태그를 조용한 중립 하나로. */
body[data-ui-generation="2"] .consultation-support-card :where(.tag, .tag.blue, .tag.violet, .tag.gold, .tag.red) {
  background: var(--dv-bg-subtle);
  color: var(--dv-text);
  font-size: 12px;
  font-weight: 650;
  letter-spacing: 0;
}

/* 카드 안 보조 행동은 모두 같은 조용한 문법으로, 카드 높이는 그리드로 맞춘다. */
body[data-ui-generation="2"] .consultation-support-grid {
  align-items: stretch;
}

body[data-ui-generation="2"] .consultation-support-card {
  display: flex;
  flex-direction: column;
  gap: 8px;
  border-color: var(--dv-border);
  border-radius: var(--dv-radius);
  background: var(--dv-bg-surface);
  box-shadow: none;
}

body[data-ui-generation="2"] .consultation-support-card :where(.btn, a.btn, button.btn) {
  margin-top: auto;
  align-self: flex-start;
  min-height: 40px;
}

/* 레거시 대시보드는 주 행동을 그라디언트 버튼으로 그린다(H2 는 단색 코발트).
   앞선 :where 안전망은 특정도가 낮아 .tag.gold 같은 2단 선택자에 졌다 — 명시적으로 이긴다. */
body[data-ui-generation="2"].styled-dashboard-page .btn.primary {
  border-color: var(--dv-action-deep);
  background-color: var(--dv-action); background-image: var(--dv-action-face);
  color: var(--dv-on-action);
  box-shadow: var(--dv-droplet-inset);
}

@media (hover: hover) and (pointer: fine) { body[data-ui-generation="2"].styled-dashboard-page .btn.primary:hover {
  border-color: var(--dv-action-deep);
  background-color: var(--dv-action); background-image: var(--dv-action-face-hover);
  box-shadow: var(--dv-droplet-inset);
} }

body[data-ui-generation="2"].styled-dashboard-page .btn.subtle {
  border-color: var(--dv-border);
  background: var(--dv-bg-surface);
  color: var(--dv-text);
}

body[data-ui-generation="2"] .consultation-support-card .tag,
body[data-ui-generation="2"] .consultation-support-card .tag.blue,
body[data-ui-generation="2"] .consultation-support-card .tag.violet,
body[data-ui-generation="2"] .consultation-support-card .tag.gold,
body[data-ui-generation="2"] .consultation-support-card .tag.red {
  background: var(--dv-bg-subtle);
  color: var(--dv-text);
  font-size: 12px;
  font-weight: 650;
  letter-spacing: 0;
}

/* ?≪뀡 移대뱶 ?먮━ ?덉빟 ???먭? ?꾩갑?섍린 ?꾧퉴吏留? ?대갚(218px)???ㅼ젣 移대뱶(365px)濡?   諛붾뚮ŉ ?꾨옒 蹂몃Ц??147px ?대젮?됰뜕 寃껋쓣 以꾩씤??2026-08-10 ?ㅼ륫). ?먭? ??踰덉씠?쇰룄
   洹몃젮吏硫?dream-member-home-v2.js 媛 ???띿꽦???쇰?濡?鍮?移대뱶媛 ?⑥? ?딅뒗?? */
body[data-ui-generation="2"] #todayFocus[data-queue-pending] .dash-focus-card {
  min-height: 340px;
  align-content: start;
}

/* 비활성 주 행동에는 물방울을 주지 않는다(2026-09-27 대표 2차 물방울 지시의 경계).
   위 화면별 채운 버튼 규칙은 foundation 의 .btn.primary:disabled 보다 늦게 실리거나 명시도가 높아,
   비활성이어도 렌즈 하이라이트 면과 안쪽 반사선이 그대로 남았다. 같은 선택자에 :is(:disabled, …) 를
   붙여 한 단계 높은 명시도로 하이라이트와 반사선만 걷는다 — 면 색·흐림(opacity)은 각 규칙과 foundation 몫이다. */
body[data-ui-generation="2"] #caseInbox .case-inbox-item:not(.is-done) .case-inbox-item-actions > .btn:first-child:is(:disabled, [aria-disabled="true"]),
body[data-ui-generation="2"] .company-agent-work-actions .btn.primary:is(:disabled, [aria-disabled="true"]),
body[data-ui-generation="2"] .growth-action-actions .btn.primary:is(:disabled, [aria-disabled="true"]),
body[data-ui-generation="2"].styled-dashboard-page .btn.primary:is(:disabled, [aria-disabled="true"]) {
  background-image: none;
  box-shadow: none;
  /* 면 색·글자도 foundation 의 비활성 주 버튼과 같게 — 명시도가 높은 화면별 채운 규칙 때문에 비활성이어도 짙은 면이 남았다(2026-09-28). */
  border-color: color-mix(in srgb, var(--dv-action-deep) 26%, var(--dv-border));
  background-color: color-mix(in srgb, var(--dv-action-deep) 7%, var(--dv-bg-subtle));
  color: var(--dv-text-muted);
  text-shadow: none;
  cursor: not-allowed;
}

/* 화면별로 채운 버튼의 hover·누름 되찾기(2026-09-29 emil 점검) — 아래 규칙이 공용 hover 와 같은 특정도로 늦게 면을 정해 올려도
   눌러도 그대로였다. 공용 모양과 같은 면을 다시 준다. */
@media (hover: hover) and (pointer: fine) {
  body[data-ui-generation="2"] .company-agent-work-actions .btn.primary:not(:disabled, [aria-disabled="true"]):hover {
    background-image: var(--dv-action-face-hover);
    box-shadow: var(--dv-droplet-inset), 0 6px 20px var(--dv-action-glow-strong);
  }
  body[data-ui-generation="2"].styled-dashboard-page .btn.subtle:not(:disabled, [aria-disabled="true"]):hover {
    border-color: var(--dv-text);
    background: var(--dv-bg-subtle);
    color: var(--dv-text-strong);
  }
}
body[data-ui-generation="2"] .company-agent-work-actions .btn.primary:not(:disabled, [aria-disabled="true"]):active {
  background-image: var(--dv-action-face-pressed);
  box-shadow: var(--dv-droplet-inset), 0 1px 4px var(--dv-action-glow);
}
