/* ═══════════════════════════════════════════════════════════════
   AI Link v3 — bids-v3.css
   입찰공고 모듈 전용 스타일
   
   Step 1: 골격 (사이드바, 페이지 헤더, 빈 상태, 카드 기본)
   Step 2: 사전공고 전용 ★
   - 데이터 소스 바
   - 통계 카드 (6개)
   - 하이라이트 섹션 (놓치면 안 될 / 맞춤)
   - 결과 헤더 (검색 태그, 필터 태그, 정렬 select)
   - 카드 배지 (NEW/⭐/🎯/🔗)
   
   원칙:
   - AL2 디자인 토큰만 사용 (--al2-* 변수)
   - 클래스 prefix: al2-bids-*
   - DS에 이미 있는 클래스 (.al2-page, .al2-sidebar, .al2-sb-*)는 재정의 금지
   ═══════════════════════════════════════════════════════════════ */


/* ─────────────────────────────────────────────
   1. 사이드바 보강
   ───────────────────────────────────────────── */

.al2-bids-kw-chips {
  display: flex; gap: 4px; flex-wrap: wrap;
  padding: 4px 16px 8px;
}
.al2-bids-kw-chip {
  font-size: .65rem; font-weight: 600;
  padding: 2px 7px;
  border-radius: var(--al2-radius-full);
  background: var(--al2-brand-dim);
  color: var(--al2-brand);
  cursor: pointer;
  transition: background .12s;
}
.al2-bids-kw-chip:hover { background: var(--al2-brand-light); }
.al2-bids-kw-chip-more {
  font-size: .65rem; padding: 2px 7px;
  border-radius: var(--al2-radius-full);
  background: var(--al2-g100);
  color: var(--al2-g500);
}
.al2-bids-kw-loading {
  font-size: .65rem; color: var(--al2-g400);
}

/* v3 식별 태그 (검증 끝나면 제거) */
.al2-bids-v3-tag {
  margin: 8px 16px; padding: 8px 10px;
  font-size: .62rem; font-weight: 600;
  color: var(--al2-brand);
  background: var(--al2-brand-dim);
  border: 1px dashed var(--al2-brand);
  border-radius: var(--al2-radius-sm);
  text-align: center; line-height: 1.6;
}
.al2-bids-v3-tag i { margin-right: 4px; }
.al2-bids-v3-link {
  display: block; margin-top: 4px;
  font-size: .6rem; color: var(--al2-g500); font-weight: 500;
}
.al2-bids-v3-link:hover { color: var(--al2-brand-dark); }


/* ─────────────────────────────────────────────
   2. 페이지 헤더
   ───────────────────────────────────────────── */

.al2-page-header {
  display: flex; align-items: flex-start; justify-content: space-between;
  margin-bottom: 16px; padding-bottom: 14px;
  border-bottom: 1px solid var(--al2-g100);
}
.al2-page-header-title {
  font-size: 1.4rem; font-weight: 700;
  color: var(--al2-g900); line-height: 1.3;
}
.al2-page-header-count {
  display: inline-block;
  margin-left: 8px;
  font-size: .8rem;
  font-weight: 600;
  color: var(--al2-brand);
  background: var(--al2-g100);
  padding: 2px 10px;
  border-radius: var(--al2-radius-full);
  vertical-align: middle;
}
.al2-page-header-coverage {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: 6px;
  font-size: .72rem;
  font-weight: 500;
  color: var(--al2-g500);
  background: transparent;
  border: 1px dashed var(--al2-g300);
  padding: 2px 8px;
  border-radius: var(--al2-radius-full);
  vertical-align: middle;
  cursor: help;
}
.al2-page-header-coverage:hover {
  color: var(--al2-brand);
  border-color: var(--al2-brand);
  background: var(--al2-g100);
}
.al2-bids-empty-fallback {
  margin-top: 20px;
  padding-top: 20px;
  border-top: 1px dashed var(--al2-g300);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  max-width: 520px;
}
.al2-bids-empty-fallback-note {
  font-size: .78rem;
  color: var(--al2-g600);
  line-height: 1.5;
  text-align: center;
}
.al2-bids-empty-fallback-note i {
  color: var(--al2-brand);
  margin-right: 4px;
}
.al2-page-header-desc {
  font-size: .76rem; color: var(--al2-g500); margin-top: 4px;
}
.al2-page-header-actions {
  display: flex; gap: 8px; align-items: center;
}


/* ─────────────────────────────────────────────
   3. 버튼 (al2-bids-btn)
   ───────────────────────────────────────────── */

.al2-bids-btn {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: .76rem; font-weight: 600;
  font-family: var(--al2-font-sans);
  padding: 8px 14px;
  border-radius: var(--al2-radius-md);
  border: 1px solid var(--al2-g200);
  background: var(--al2-white);
  color: var(--al2-g700);
  cursor: pointer;
  text-decoration: none;
  transition: all .12s;
  white-space: nowrap;
}
.al2-bids-btn:hover {
  border-color: var(--al2-brand);
  color: var(--al2-brand);
}
.al2-bids-btn.primary {
  background: var(--al2-brand);
  border-color: var(--al2-brand);
  color: #fff;
}
.al2-bids-btn.primary:hover {
  background: var(--al2-brand-dark);
  border-color: var(--al2-brand-dark);
  color: #fff;
}
.al2-bids-btn.outline { background: var(--al2-white); }


/* ─────────────────────────────────────────────
   4. 데이터 소스 바
   ───────────────────────────────────────────── */

.al2-bids-source-bar {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 14px;
  background: var(--al2-g50);
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-md);
  margin-bottom: 14px;
  font-size: .72rem; color: var(--al2-g500);
  flex-wrap: wrap;
}
.al2-bids-source-dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--al2-green);
  box-shadow: 0 0 0 3px rgba(5, 150, 105, .15);
}
.al2-bids-source-time {
  font-family: var(--al2-font-mono);
  font-weight: 600; color: var(--al2-g600);
}
.al2-bids-source-sep { color: var(--al2-g300); }
.al2-bids-source-count strong {
  color: var(--al2-brand);
  font-family: var(--al2-font-mono);
}
.al2-bids-source-link {
  margin-left: auto;
  font-weight: 600; color: var(--al2-brand);
  text-decoration: none;
  white-space: nowrap;
}
.al2-bids-source-link:hover { color: var(--al2-brand-dark); }

/* 커버리지 주의 안내 — 검색 누락 이중 확인 권장 */
.al2-coverage-notice {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 12px 16px;
  margin-bottom: 16px;
  background: #fffbeb;
  border: 1px solid #fde68a;
  border-left: 3px solid #f59e0b;
  border-radius: var(--al2-radius-md, 8px);
  font-size: .78rem; line-height: 1.55;
  color: #78350f;
}
.al2-coverage-notice > i.fas {
  color: #f59e0b;
  font-size: .95rem;
  flex-shrink: 0;
  margin-top: 2px;
}
.al2-coverage-notice-body { flex: 1; min-width: 0; }
.al2-coverage-notice-body strong { color: #7c2d12; font-weight: 700; }
.al2-coverage-notice-link {
  flex-shrink: 0;
  align-self: center;
  padding: 6px 12px;
  background: #fff;
  border: 1px solid #fcd34d;
  border-radius: var(--al2-radius-full, 20px);
  font-size: .72rem; font-weight: 700;
  color: #92400e;
  text-decoration: none;
  white-space: nowrap;
  transition: all .15s;
}
.al2-coverage-notice-link:hover {
  background: #fef3c7;
  border-color: #f59e0b;
  color: #78350f;
}
.al2-coverage-notice-link i { margin-left: 4px; font-size: .65rem; }
.al2-coverage-notice-compact {
  padding: 10px 14px;
  font-size: .74rem;
}
@media (max-width: 640px) {
  .al2-coverage-notice { flex-direction: column; gap: 8px; }
  .al2-coverage-notice-link { align-self: flex-start; }
}


/* ─────────────────────────────────────────────
   5. 툴바 (검색 + 필터)
   ───────────────────────────────────────────── */

.al2-bids-toolbar {
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 16px; flex-wrap: wrap;
}
/* 검색창 — 필터바에 인라인 통합 (Linear/Jira 패턴) */
.al2-bids-search-inline {
  flex: 0 1 220px;
  min-width: 160px;
}
.al2-bids-search-inline input {
  padding: 6px 10px 6px 30px;
  font-size: .78rem;
}
.al2-bids-search-inline i {
  font-size: .72rem;
  left: 10px;
}
.al2-bids-search-btn {
  position: absolute;
  right: 2px; top: 50%; transform: translateY(-50%);
  width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
  border: none; border-radius: var(--al2-radius-sm);
  background: var(--al2-brand);
  color: #fff;
  font-size: .7rem;
  cursor: pointer;
  transition: background .15s;
}
.al2-bids-search-btn:hover { background: var(--al2-brand-dark); }
.al2-bids-search-inline input { padding-right: 34px; }
.al2-bids-search {
  flex: 1; min-width: 240px;
  position: relative;
}
/* 검색 로딩 상태 — 돋보기 아이콘 자리에 스피너 표시
   (글로벌 표준: Algolia/GitHub/Linear 동일 패턴) */
.al2-bids-search.is-loading i.fa-search { visibility: hidden; }
.al2-bids-search.is-loading::after {
  content: '';
  position: absolute;
  left: 12px; top: 50%;
  width: 14px; height: 14px;
  margin-top: -7px;
  border: 2px solid var(--al2-g200);
  border-top-color: var(--al2-brand);
  border-radius: 50%;
  animation: al2-search-spin 0.7s linear infinite;
}
@keyframes al2-search-spin { to { transform: rotate(360deg); } }
/* 로딩 중 검색 버튼 disabled 표시 */
.al2-bids-toolbar-sticky.is-searching .al2-bids-btn.primary {
  opacity: .6;
  pointer-events: none;
  cursor: wait;
}
/* 리스트 stale-while-revalidate — 이전 결과 흐리게 유지 */
.al2-bids-pane.is-searching .al2-bids-card,
.al2-bids-pane.is-searching .al2-bids-list { opacity: .45; transition: opacity .15s; }
.al2-bids-search input {
  width: 100%;
  padding: 9px 12px 9px 36px;
  font-size: .8rem; font-family: var(--al2-font-sans);
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  outline: none;
  transition: border-color .15s;
}
.al2-bids-search input:focus { border-color: var(--al2-brand); }
.al2-bids-search i {
  position: absolute;
  left: 12px; top: 50%; transform: translateY(-50%);
  color: var(--al2-g400); font-size: .8rem;
}


/* ─────────────────────────────────────────────
   6. 섹션 (놓치면 안 될 + 맞춤 + 전체)
   ───────────────────────────────────────────── */

.al2-bids-section {
  margin-bottom: 28px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.al2-bids-section-head {
  display: flex; align-items: center; gap: 10px;
  padding-bottom: 10px;
  border-bottom: 2px solid var(--al2-g100);
}

.al2-bids-section-title {
  font-size: 1rem; font-weight: 800;
  color: var(--al2-g900);
  display: inline-flex; align-items: center; gap: 6px;
}
.al2-bids-section-title.urgent { color: var(--al2-red); }
.al2-bids-section-title.match  { color: var(--al2-brand); }
.al2-bids-section-title i { font-size: .85rem; }

.al2-bids-section-count {
  font-family: var(--al2-font-mono);
  font-size: .68rem; font-weight: 600;
  padding: 2px 8px;
  border-radius: var(--al2-radius-full);
  background: var(--al2-g100);
  color: var(--al2-g500);
}
.al2-bids-section-count.urgent {
  background: var(--al2-red-light);
  color: var(--al2-red);
}
.al2-bids-section-count.match {
  background: var(--al2-brand-dim);
  color: var(--al2-brand);
}

.al2-bids-section-desc {
  font-size: .68rem; color: var(--al2-g400);
  margin-left: 4px;
}

/* 하이라이트 섹션 (배경 + 좌측 강조 바) */
.al2-bids-highlight {
  padding: 16px 18px 18px;
  background: linear-gradient(180deg, var(--al2-g50) 0%, transparent 100%);
  border-left: 3px solid var(--al2-g200);
  border-radius: 0 var(--al2-radius-md) var(--al2-radius-md) 0;
}
.al2-bids-highlight:has(.al2-bids-section-title.urgent) {
  border-left-color: var(--al2-red);
  background: linear-gradient(180deg, rgba(220, 38, 38, .04) 0%, transparent 100%);
}
.al2-bids-highlight:has(.al2-bids-section-title.match) {
  border-left-color: var(--al2-brand);
  background: linear-gradient(180deg, var(--al2-brand-dim) 0%, transparent 100%);
}


/* ─────────────────────────────────────────────
   7. 통계 카드 (6개 가로 배치)
   ───────────────────────────────────────────── */

.al2-bids-stats-wrap {
  padding: 14px;
  background: linear-gradient(135deg, #faf5ff 0%, #f0f4ff 100%);
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-md,8px);
}
.al2-bids-stats-wrap-label {
  font-size: .72rem; font-weight: 700;
  color: var(--al2-g400,#9ca3af);
  text-transform: uppercase;
  letter-spacing: .3px;
  margin-bottom: 10px;
}
.al2-bids-stats-cards {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 10px;
  margin-bottom: 0;
}

.al2-bids-stat-card {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 14px;
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  cursor: pointer;
  transition: all .15s;
}
.al2-bids-stat-card:hover {
  border-color: var(--al2-brand);
  transform: translateY(-1px);
  box-shadow: var(--al2-shadow);
}
.al2-bids-stat-card.on {
  border-color: var(--al2-brand);
  background: var(--al2-brand-dim);
}

.al2-bids-stat-icon {
  font-size: 1.2rem;
  flex-shrink: 0;
}
.al2-bids-stat-body {
  flex: 1; min-width: 0;
}
.al2-bids-stat-num {
  font-family: var(--al2-font-mono);
  font-size: 1.1rem; font-weight: 700;
  color: var(--al2-g900);
  line-height: 1.1;
}
.al2-bids-stat-label {
  font-size: .68rem; font-weight: 600;
  color: var(--al2-g700);
  margin-top: 2px;
}
.al2-bids-stat-sub {
  font-size: .58rem; color: var(--al2-g400);
  margin-top: 1px;
}

/* 색상 변형 */
.al2-bids-stat-card.urgent .al2-bids-stat-num     { color: var(--al2-red); }
.al2-bids-stat-card.new .al2-bids-stat-num        { color: var(--al2-blue); }
.al2-bids-stat-card.matched .al2-bids-stat-num    { color: var(--al2-brand); }
.al2-bids-stat-card.favoriteOrg .al2-bids-stat-num{ color: var(--al2-amber); }
.al2-bids-stat-card.highValue .al2-bids-stat-num  { color: var(--al2-green); }


/* ─────────────────────────────────────────────
   8. 결과 헤더 (검색 태그 + 필터 태그 + 정렬)
   ───────────────────────────────────────────── */

.al2-bids-results-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 14px;
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  flex-wrap: wrap; gap: 10px;
}

.al2-bids-results-info {
  display: flex; align-items: center; gap: 8px;
  flex-wrap: wrap;
  font-size: .76rem; color: var(--al2-g600);
}

.al2-bids-search-tag {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: .68rem; font-weight: 600;
  padding: 3px 8px;
  background: var(--al2-blue-light);
  color: var(--al2-blue);
  border-radius: var(--al2-radius-full);
}

.al2-bids-filter-tag {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: .68rem; font-weight: 600;
  padding: 3px 8px;
  background: var(--al2-brand-dim);
  color: var(--al2-brand);
  border-radius: var(--al2-radius-full);
}
.al2-bids-filter-tag button {
  background: none; border: none;
  color: var(--al2-brand);
  cursor: pointer;
  font-size: .7rem; line-height: 1;
  padding: 0 0 0 4px;
}

.al2-bids-results-count {
  margin-left: 4px;
  color: var(--al2-g500);
}
.al2-bids-results-count strong {
  color: var(--al2-g900);
  font-family: var(--al2-font-mono);
  font-size: .85rem;
}

.al2-bids-controls {
  display: flex; align-items: center; gap: 8px;
}

.al2-bids-sort {
  font-size: .72rem; font-weight: 600;
  font-family: var(--al2-font-sans);
  padding: 6px 10px;
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-sm);
  color: var(--al2-g700);
  cursor: pointer;
  outline: none;
}
.al2-bids-sort:hover { border-color: var(--al2-brand); }

/* View 토글 (카드/테이블) */
.al2-bids-view-toggle {
  display: inline-flex;
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-sm);
  overflow: hidden;
  background: var(--al2-white);
}
.al2-bids-view-btn {
  background: none;
  border: none;
  padding: 6px 10px;
  font-size: .8rem;
  color: var(--al2-g400);
  cursor: pointer;
  transition: all .12s;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.al2-bids-view-btn + .al2-bids-view-btn {
  border-left: 1px solid var(--al2-g200);
}
.al2-bids-view-btn:hover { color: var(--al2-brand); }
.al2-bids-view-btn.on {
  background: var(--al2-brand);
  color: #fff;
}
/* 라벨 표시 버전 — 더 명확한 "카드 / 리스트" 구분 */
.al2-bids-view-labeled .al2-bids-view-btn {
  padding: 7px 14px;
  font-size: .78rem;
  font-weight: 700;
}
.al2-bids-view-labeled .al2-bids-view-btn i { font-size: .75rem; }
@media (max-width: 540px) {
  .al2-bids-view-labeled .al2-bids-view-btn span { display: none; }
  .al2-bids-view-labeled .al2-bids-view-btn { padding: 7px 10px; }
}


/* ─────────────────────────────────────────────
   9. 카드 컴포넌트 + 그리드
   ───────────────────────────────────────────── */

.al2-bids-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 14px;
}

.al2-bids-card {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  padding: 14px 16px;
  transition: border-color .15s, box-shadow .15s, transform .15s;
  cursor: pointer;
  display: flex; flex-direction: column;
}
.al2-bids-card:hover {
  border-color: var(--al2-brand);
  box-shadow: var(--al2-shadow);
  transform: translateY(-1px);
}

.al2-bids-card-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 10px;
}

.al2-bids-card-tag {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: .62rem; font-weight: 700;
  padding: 2px 8px;
  border-radius: var(--al2-radius-full);
  background: var(--al2-brand-dim);
  color: var(--al2-brand);
}
.al2-bids-card-tag i { font-size: .58rem; }

.al2-bids-card-dday {
  font-family: var(--al2-font-mono);
  font-size: .72rem; font-weight: 700;
  color: var(--al2-g600);
  background: var(--al2-g100);
  padding: 2px 8px;
  border-radius: 10px;
  white-space: nowrap;
}
.al2-bids-card-dday.urgent {
  color: #fff;
  background: var(--al2-red, #dc2626);
}
.al2-bids-card-dday.warning {
  color: #92400e;
  background: #fef3c7;
  border: 1px solid #fde68a;
}
.al2-bids-card-dday.expired {
  color: var(--al2-g400);
  background: var(--al2-g50, #f9fafb);
  text-decoration: line-through;
}

.al2-bids-card-badges {
  display: flex; gap: 4px; margin-bottom: 8px;
  flex-wrap: wrap;
}
.al2-bids-badge {
  font-size: .58rem; font-weight: 700;
  padding: 1px 6px;
  border-radius: 3px;
  line-height: 1.4;
}
.al2-bids-badge.new   { background: var(--al2-blue-light); color: var(--al2-blue); }
.al2-bids-badge.fav   { background: var(--al2-amber-light); color: var(--al2-amber); }
.al2-bids-badge.match { background: var(--al2-brand-dim); color: var(--al2-brand); }
.al2-bids-badge.link  { background: var(--al2-g100); color: var(--al2-g500); }

.al2-bids-card-title {
  font-size: .85rem; font-weight: 600;
  color: var(--al2-g900);
  line-height: 1.45;
  margin-bottom: 10px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  flex: 1;
}

.al2-bids-card-org {
  display: flex; align-items: center; gap: 6px;
  font-size: .7rem; color: var(--al2-g500);
  margin-bottom: 10px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.al2-bids-card-org i { font-size: .65rem; color: var(--al2-g400); flex-shrink: 0; }

.al2-bids-card-foot {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: auto; padding-top: 10px;
  border-top: 1px solid var(--al2-g100);
}

.al2-bids-card-amount {
  font-family: var(--al2-font-mono);
  font-size: .9rem; font-weight: 700;
  color: var(--al2-brand);
}

.al2-bids-card-bookmark {
  background: none; border: none;
  color: var(--al2-g300);
  cursor: pointer;
  font-size: 1rem;
  padding: 4px 6px;
  transition: color .15s, transform .15s;
}
.al2-bids-card-bookmark:hover {
  color: var(--al2-amber);
  transform: scale(1.1);
}
/* v3.7.24 (2026-04-30): bookmark on state — 검토함 사이드바 색상 톤 (brown/amber) 통일 */
.al2-bids-card-bookmark.on { color: #92400e; }
.al2-bids-card-bookmark.on i { color: #92400e; }


/* ─────────────────────────────────────────────
   10. 빈 상태
   ───────────────────────────────────────────── */

.al2-bids-empty {
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 80px 24px;
  background: var(--al2-g50);
  border: 1px dashed var(--al2-g200);
  border-radius: var(--al2-radius-lg);
  text-align: center;
}
.al2-bids-empty i {
  font-size: 2.4rem;
  color: var(--al2-g300);
  margin-bottom: 16px;
}
.al2-bids-empty p {
  font-size: .9rem; font-weight: 600;
  color: var(--al2-g700); margin: 0 0 6px;
}
.al2-bids-empty span {
  font-size: .72rem; color: var(--al2-g500);
  font-family: var(--al2-font-mono);
}


/* ─────────────────────────────────────────────
   11. 반응형
   ───────────────────────────────────────────── */

@media (max-width: 1200px) {
  .al2-bids-stats-cards {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 900px) {
  .al2-bids-grid {
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  }
  .al2-page-header-title { font-size: 1.2rem; }
  .al2-bids-stats-cards {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 600px) {
  .al2-bids-toolbar {
    flex-direction: column;
    align-items: stretch;
  }
  .al2-bids-search { min-width: auto; }
  .al2-bids-empty { padding: 48px 16px; }
  .al2-bids-stats-cards {
    grid-template-columns: 1fr;
  }
  .al2-bids-results-head {
    flex-direction: column;
    align-items: stretch;
  }
}


/* ─────────────────────────────────────────────
   11.5 테이블 뷰
   ───────────────────────────────────────────── */

.al2-bids-table-wrap {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  overflow-x: auto;
}

.al2-bids-table {
  width: 100%;
  border-collapse: collapse;
  font-size: .74rem;
  table-layout: auto;
}

.al2-bids-table thead th {
  background: var(--al2-g50);
  font-size: .68rem;
  font-weight: 700;
  color: var(--al2-g500);
  text-align: left;
  padding: 11px 12px;
  border-bottom: 1px solid var(--al2-g200);
  white-space: nowrap;
  position: sticky;
  top: 0;
  z-index: 1;
}
.al2-bids-table thead .col-num    { width: 40px;  text-align: center; }
.al2-bids-table thead .col-type   { width: 56px;  text-align: center; }
.al2-bids-table thead .col-regno  { width: 130px; }
.al2-bids-table thead .col-cat    { width: 90px;  text-align: center; }
.al2-bids-table thead .col-org    { width: 140px; }
.al2-bids-table thead .col-price  { width: 130px; text-align: right; }
.al2-bids-table thead .col-title  { min-width: 280px; }
.al2-bids-table thead .col-mgr    { width: 140px; }
.al2-bids-table thead .col-date   { width: 76px;  text-align: center; white-space: nowrap; }
.al2-bids-table thead .col-status { width: 60px;  text-align: center; }
.al2-bids-table thead .col-fav    { width: 80px;  text-align: center; }

.al2-bids-table tbody tr {
  border-bottom: 1px solid var(--al2-g100);
  cursor: pointer;
  transition: background .1s;
  position: relative;
}
.al2-bids-table tbody tr:hover {
  background: var(--al2-g50);
}
.al2-bids-table tbody tr:last-child { border-bottom: none; }

/* 행 좌측 강조 바 (긴급도) */
.al2-bids-row {
  border-left: 3px solid transparent;
}
.al2-bids-row.row-today,
.al2-bids-row.row-critical {
  border-left-color: var(--al2-red);
}
.al2-bids-row.row-warning {
  border-left-color: var(--al2-amber);
}
.al2-bids-row.row-expired {
  border-left-color: var(--al2-g300);
  opacity: .65;
}

.al2-bids-table tbody td {
  padding: 12px;
  vertical-align: middle;
  color: var(--al2-g800);
  word-break: keep-all;
}

.al2-bids-table .col-num {
  text-align: center;
  font-family: var(--al2-font-mono);
  color: var(--al2-g400);
  font-weight: 600;
}
.al2-bids-table .col-type    { text-align: center; }
.al2-bids-table .col-cat     { text-align: center; }
.al2-bids-table .col-price   { text-align: right; }
.al2-bids-table .col-date    { text-align: center; font-family: var(--al2-font-mono); color: var(--al2-g600); font-size: .72rem; white-space: nowrap; }
.al2-bids-table .col-status  { text-align: center; }
.al2-bids-table .col-fav     { text-align: center; }

/* Phase 3: 컬럼 정렬·필터 아이콘 */
.al2-bids-table thead th.sortable { cursor: pointer; user-select: none; }
.al2-bids-table thead th.sortable:hover { background: var(--al2-g100); }
.al2-bids-sort {
  font-size: .65rem;
  color: var(--al2-g400);
  margin-left: 2px;
}
.al2-bids-sort.active { color: var(--al2-brand); }
.al2-bids-filter {
  font-size: .65rem;
  color: var(--al2-g400);
  margin-left: 4px;
  cursor: pointer;
  padding: 2px 4px;
  border-radius: 3px;
}
.al2-bids-filter:hover { background: var(--al2-g200); color: var(--al2-g700); }
.al2-bids-filter.active { color: var(--al2-brand); }

/* 필터 팝업 */
.al2-bids-colfilter-pop {
  position: absolute;
  z-index: 9999;
  min-width: 180px;
  max-width: 260px;
  max-height: 360px;
  background: #fff;
  border: 1px solid var(--al2-g300);
  border-radius: 6px;
  box-shadow: 0 6px 20px rgba(0,0,0,.12);
  overflow: hidden;
  font-size: .78rem;
}
.al2-bids-colfilter-pop .hd {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px;
  background: var(--al2-g50);
  border-bottom: 1px solid var(--al2-g200);
  font-weight: 700;
  color: var(--al2-g800);
}
.al2-bids-colfilter-pop .hd .clear {
  background: transparent;
  border: 0;
  color: var(--al2-brand);
  cursor: pointer;
  font-size: .72rem;
}
.al2-bids-colfilter-pop .bd {
  max-height: 280px;
  overflow-y: auto;
  padding: 6px 0;
}
.al2-bids-colfilter-pop label {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  cursor: pointer;
}
.al2-bids-colfilter-pop label:hover { background: var(--al2-g50); }
.al2-bids-colfilter-pop label .cnt { color: var(--al2-g500); font-size: .7rem; margin-left: auto; }
.al2-bids-colfilter-pop .empty { padding: 12px; color: var(--al2-g500); text-align: center; }

/* Phase 2c 툴바 — 일괄 액션 + CSV */
.al2-bids-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px;
  background: var(--al2-g50);
  border-bottom: 1px solid var(--al2-g200);
  gap: 8px;
}
.al2-bids-toolbar-left, .al2-bids-toolbar-right { display: flex; align-items: center; gap: 8px; }
.al2-bids-toolbar-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  background: var(--al2-brand);
  color: #fff;
  border: 0;
  border-radius: 6px;
  font-size: .78rem;
  font-weight: 600;
  cursor: pointer;
  transition: background .15s;
}
.al2-bids-toolbar-btn:hover:not(:disabled) { background: var(--al2-brand-dark); }
.al2-bids-toolbar-btn:disabled { background: var(--al2-g300); cursor: not-allowed; opacity: .7; }
.al2-bids-toolbar-btn.ghost { background: transparent; color: var(--al2-g700); border: 1px solid var(--al2-g300); }
.al2-bids-toolbar-btn.ghost:hover { background: var(--al2-g100); }
.al2-bids-toolbar-btn .cnt {
  display: inline-block;
  min-width: 16px;
  padding: 0 5px;
  background: rgba(255,255,255,.25);
  border-radius: 8px;
  font-size: .7rem;
  text-align: center;
}
.al2-bids-toolbar-btn:disabled .cnt { background: rgba(0,0,0,.08); }

/* Phase 2c: 체크박스 컬럼 */
.al2-bids-table thead .col-check { width: 36px; text-align: center; }
.al2-bids-table .col-check { text-align: center; }
.al2-bids-row-check, .al2-bids-check-all { cursor: pointer; }

/* Phase 2 신규 컬럼 — 폭/정렬 (기존 col-* 셀렉터는 deprecated, 무해하게 잔존) */
.al2-bids-table thead .col-dday    { width: 64px;  text-align: center; }
.al2-bids-table thead .col-prespec { width: 130px; text-align: center; }
.al2-bids-table thead .col-rgn     { width: 60px;  text-align: center; }
.al2-bids-table .col-dday    { text-align: center; }
.al2-bids-table .col-prespec { text-align: center; font-family: var(--al2-font-mono); color: var(--al2-g600); font-size: .72rem; white-space: nowrap; }
.al2-bids-prespec-link { color: var(--al2-brand); text-decoration: none; }
.al2-bids-prespec-link:hover { text-decoration: underline; }
.al2-bids-table .col-rgn     { text-align: center; color: var(--al2-g700); font-size: .78rem; }

/* Phase 2: 예산 보라색 강조 */
.al2-bids-table .col-price .al2-bids-row-price-text {
  color: var(--al2-brand);
  font-weight: 700;
  font-size: .82rem;
}

/* 본 적 있는 행 — 연한 노랑 배경 (BidBowl 스타일) */
.al2-bids-table tbody tr.al2-bids-row.row-viewed {
  background: #fff8e1;
}
.al2-bids-table tbody tr.al2-bids-row.row-viewed:hover {
  background: #fff1c4;
}

/* 계약방식 배지 (일반/제한/수의/지명) — BidBowl 패리티 */
.al2-bids-method-tag {
  display: inline-block;
  padding: 1px 6px;
  border-radius: 4px;
  font-size: .65rem;
  font-weight: 700;
  letter-spacing: .02em;
  white-space: nowrap;
}
.al2-bids-method-tag.method-general    { background: #e5f1ff; color: #1e5fa8; }
.al2-bids-method-tag.method-restricted { background: #fff3cd; color: #856404; }
.al2-bids-method-tag.method-private    { background: #f5e1ff; color: #6c3ae0; }
.al2-bids-method-tag.method-designated { background: #fde2e1; color: #c0392b; }
.al2-bids-method-tag.method-other      { background: var(--al2-g100); color: var(--al2-g600); }
.al2-bids-method-tag.method-negotiate     { background: #ede5ff; color: #5a2bb8; }
.al2-bids-method-tag.method-qualify       { background: #e0f2e9; color: #1e7a4d; }
.al2-bids-method-tag.method-comprehensive { background: #ffe5d6; color: #b25a1f; }
.al2-bids-method-tag.method-lowest        { background: #d1f0e0; color: #0f5d3a; }

/* 상태성 배지 (재공고/긴급/신규) — Phase 3.5 */
.al2-bids-status-pill {
  display: inline-block;
  padding: 1px 6px;
  border-radius: 8px;
  font-size: .62rem;
  font-weight: 700;
  letter-spacing: .02em;
  white-space: nowrap;
}
.al2-bids-status-pill.renotice { background: #fde2e1; color: #c0392b; }

/* v3.1: 영업 빠른 필터 칩 — 재공고 기회/D여유 강조 */
.al2-bids-range-tab.chip-opp  { border-color:#f59e0b; color:#b45309; }
.al2-bids-range-tab.chip-opp.active { background:#fef3c7; border-color:#b45309; color:#7c2d12; font-weight:700; }
.al2-bids-range-tab.chip-cool { border-color:#0ea5e9; color:#0369a1; }
.al2-bids-range-tab.chip-cool.active { background:#e0f2fe; border-color:#0369a1; color:#0c4a6e; font-weight:700; }
.al2-bids-status-pill.urgent   { background: #ffe5cc; color: #d35400; }
.al2-bids-status-pill.new      { background: #d6eaff; color: #1e5fa8; }

/* Phase 2: 통합 사업명 셀 — 상단 메타(유형배지+공고번호) */
.al2-bids-row-title-meta {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 2px;
}
.al2-bids-row-title-meta .al2-bids-row-regno {
  font-size: .68rem;
  color: var(--al2-g500);
  font-family: var(--al2-font-mono);
}

/* 유형 태그 */
.al2-bids-type-tag {
  display: inline-block;
  font-size: .65rem;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: var(--al2-radius-sm);
  white-space: nowrap;
}
.al2-bids-type-tag.service { background: var(--al2-blue-light); color: var(--al2-blue); }
.al2-bids-type-tag.goods   { background: var(--al2-green-light); color: var(--al2-green); }
.al2-bids-type-tag.etc     { background: var(--al2-g100);        color: var(--al2-g500); }

/* 등록번호 (보라색 링크 스타일) */
.al2-bids-row-regno {
  font-family: var(--al2-font-mono);
  font-size: .72rem;
  font-weight: 600;
  color: var(--al2-brand);
}
.al2-bids-row:hover .al2-bids-row-regno { text-decoration: underline; }

/* 예산 + 배지 */
.al2-bids-row-price-badge {
  display: flex;
  justify-content: flex-end;
  margin-bottom: 2px;
}
.al2-bids-price-badge {
  display: inline-block;
  font-size: .58rem;
  font-weight: 700;
  padding: 1px 6px;
  border-radius: 3px;
  white-space: nowrap;
}
.al2-bids-price-badge.diamond { background: #FCE7F3; color: #BE185D; }
.al2-bids-price-badge.gold    { background: var(--al2-amber-light); color: var(--al2-amber); }
.al2-bids-price-badge.silver  { background: var(--al2-g100);        color: var(--al2-g600); }

.al2-bids-row-price-text {
  font-family: var(--al2-font-mono);
  font-size: .76rem;
  font-weight: 600;
  color: var(--al2-g800);
}

/* 사업명 (아이콘 + 텍스트) */
.al2-bids-row-title-wrap {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.al2-bids-row-icon {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: .65rem;
  background: var(--al2-g100);
}
.al2-bids-row-icon.dot {
  background: var(--al2-green);
  width: 8px; height: 8px;
}
.al2-bids-row-icon.match { background: var(--al2-brand-dim); }
.al2-bids-row-icon.fav   { background: var(--al2-amber-light); }
.al2-bids-row-icon.new   { background: var(--al2-blue-light); }

.al2-bids-row-title {
  font-size: .76rem;
  font-weight: 600;
  color: var(--al2-g800);
  line-height: 1.4;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* 담당자 */
.al2-bids-row-mgr {
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-size: .72rem;
}
.al2-bids-row-mgr .name {
  color: var(--al2-g800);
  font-weight: 600;
}
.al2-bids-row-mgr .tel {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: var(--al2-brand);
  font-family: var(--al2-font-mono);
  font-size: .68rem;
  text-decoration: none;
}
.al2-bids-row-mgr .tel:hover { text-decoration: underline; }
.al2-bids-row-mgr .tel i     { font-size: .55rem; }
.al2-bids-row-empty { color: var(--al2-g300); }

/* 상태 태그 */
.al2-bids-status-tag {
  display: inline-block;
  font-size: .62rem;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: var(--al2-radius-sm);
  white-space: nowrap;
  background: var(--al2-g100);
  color: var(--al2-g600);
}
.al2-bids-status-tag.today,
.al2-bids-status-tag.critical {
  background: var(--al2-amber-light);
  color: var(--al2-amber);
}
.al2-bids-status-tag.warning {
  background: var(--al2-amber-light);
  color: var(--al2-amber);
}
.al2-bids-status-tag.expired {
  background: var(--al2-g100);
  color: var(--al2-g400);
}
/* v2.3 (2026-04-13) — BidBowl 패리티: 진행중 / 입찰마감 / 개찰완료 */
.al2-bids-status-tag.active {
  background: rgba(34, 197, 94, .12);
  color: #16a34a;
}
.al2-bids-status-tag.closed {
  background: rgba(249, 115, 22, .12);
  color: #ea580c;
}
.al2-bids-status-tag.completed {
  background: var(--al2-g100);
  color: var(--al2-g500);
}
/* 마감 공고 행 — 회색조로 시각 구분 (신규 공고와 자연스럽게 분리) */
.al2-bids-row.row-closed {
  opacity: .68;
}
.al2-bids-row.row-closed:hover {
  opacity: 1;
}
.al2-bids-row.row-closed .al2-bids-row-title {
  color: var(--al2-g500);
}

/* 즐겨찾기 / 관심기관 행 액션 영역 (영업대표 직관: 두 액션 나란히) */
.al2-bids-row-actions {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  justify-content: center;
}

/* 즐겨찾기 버튼 (★ 공고 단위) */
.al2-bids-row-bookmark {
  background: none;
  border: none;
  color: var(--al2-g300);
  cursor: pointer;
  font-size: .9rem;
  padding: 4px 6px;
  transition: color .15s, transform .15s;
}
.al2-bids-row-bookmark:hover {
  color: var(--al2-amber);
  transform: scale(1.15);
}
.al2-bids-row-bookmark.on { color: #92400e; }
.al2-bids-row-bookmark.on i { color: #92400e; }

/* 관심기관 버튼 (🏛️ 발주기관 단위) — ★과 시각적으로 구분 (파란색) */
.al2-bids-row-favorg {
  background: none;
  border: none;
  color: var(--al2-g300);
  cursor: pointer;
  font-size: .82rem;
  padding: 4px 6px;
  transition: color .15s, transform .15s;
}
.al2-bids-row-favorg:hover {
  color: var(--al2-brand, #4f46e5);
  transform: scale(1.15);
}
.al2-bids-row-favorg.on { color: var(--al2-brand, #4f46e5); }


/* ─────────────────────────────────────────────
   13. 낙찰분석 모듈 (bids-v3-analysis.js 의존)
   ───────────────────────────────────────────── */

/* 서브탭 바 */
.al2-anlz-subtabs {
  display: flex;
  gap: 4px;
  margin-bottom: 18px;
  border-bottom: 1px solid var(--al2-g100);
}
.al2-anlz-subtab {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 10px 16px;
  font-size: .8rem;
  font-weight: 600;
  font-family: var(--al2-font-sans);
  background: none;
  border: none;
  color: var(--al2-g500);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  transition: all .12s;
}
.al2-anlz-subtab:hover { color: var(--al2-g800); }
.al2-anlz-subtab.on {
  color: var(--al2-brand);
  border-bottom-color: var(--al2-brand);
}
.al2-anlz-subtab i { font-size: .85rem; }

.al2-anlz-body { min-height: 400px; }

/* 검색 바 */
.al2-anlz-search {
  display: flex;
  gap: 10px;
  margin-bottom: 14px;
}
.al2-anlz-search .al2-bids-search { flex: 1; }

/* 기간 선택 */
.al2-anlz-period {
  display: flex;
  gap: 6px;
  margin-bottom: 18px;
}
.al2-anlz-period-btn {
  padding: 6px 14px;
  font-size: .72rem;
  font-weight: 600;
  font-family: var(--al2-font-sans);
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-full);
  color: var(--al2-g600);
  cursor: pointer;
  transition: all .12s;
}
.al2-anlz-period-btn:hover { border-color: var(--al2-brand); color: var(--al2-brand); }
.al2-anlz-period-btn.on {
  background: var(--al2-brand);
  border-color: var(--al2-brand);
  color: #fff;
}

/* 검색 안내 */
.al2-anlz-guide {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 60px 24px;
  background: var(--al2-g50);
  border: 1px dashed var(--al2-g200);
  border-radius: var(--al2-radius-lg);
  text-align: center;
}
.al2-anlz-guide i {
  font-size: 2.2rem;
  color: var(--al2-g300);
  margin-bottom: 14px;
}
.al2-anlz-guide p {
  font-size: .85rem;
  font-weight: 600;
  color: var(--al2-g700);
  margin: 0 0 14px;
}
.al2-anlz-guide-examples {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: .68rem;
  color: var(--al2-g500);
  flex-wrap: wrap;
  justify-content: center;
}
.al2-anlz-guide-examples span {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  padding: 3px 9px;
  border-radius: var(--al2-radius-full);
  color: var(--al2-g700);
  font-weight: 600;
}

/* 검색 결과 리스트 */
.al2-anlz-results-list {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  overflow: hidden;
}
.al2-anlz-results-head {
  padding: 10px 14px;
  background: var(--al2-g50);
  border-bottom: 1px solid var(--al2-g100);
  font-size: .72rem;
  color: var(--al2-g500);
  font-weight: 600;
}
.al2-anlz-result-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--al2-g100);
  cursor: pointer;
  transition: background .1s;
}
.al2-anlz-result-item:last-child { border-bottom: none; }
.al2-anlz-result-item:hover { background: var(--al2-g50); }
.al2-anlz-result-main { flex: 1; min-width: 0; }
.al2-anlz-result-name {
  font-size: .88rem;
  font-weight: 600;
  color: var(--al2-g900);
  margin-bottom: 4px;
}
.al2-anlz-result-meta {
  display: flex;
  gap: 12px;
  font-size: .7rem;
  color: var(--al2-g500);
}
.al2-anlz-result-meta i { font-size: .65rem; margin-right: 3px; }
.al2-anlz-result-stats {
  text-align: right;
  flex-shrink: 0;
}
.al2-anlz-result-count {
  font-family: var(--al2-font-mono);
  font-size: .72rem;
  font-weight: 600;
  color: var(--al2-g500);
}
.al2-anlz-result-amount {
  font-family: var(--al2-font-mono);
  font-size: .95rem;
  font-weight: 700;
  color: var(--al2-brand);
  margin-top: 2px;
}

/* 상세 분석 */
.al2-anlz-detail { margin-top: 4px; }
.al2-anlz-detail-head {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 18px;
}
.al2-anlz-back {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 12px;
  font-size: .72rem;
  font-weight: 600;
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  color: var(--al2-g600);
  cursor: pointer;
  transition: all .12s;
}
.al2-anlz-back:hover { border-color: var(--al2-brand); color: var(--al2-brand); }
.al2-anlz-detail-title {
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--al2-g900);
  display: flex;
  align-items: center;
  gap: 8px;
}
.al2-anlz-detail-title i { color: var(--al2-brand); }
.al2-anlz-detail-region {
  font-size: .68rem;
  font-weight: 600;
  padding: 2px 8px;
  border-radius: var(--al2-radius-full);
  background: var(--al2-g100);
  color: var(--al2-g500);
  margin-left: 4px;
}

/* KPI 카드 */
.al2-anlz-kpi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
  margin-bottom: 20px;
}
.al2-anlz-kpi-card {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 16px 18px;
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  transition: all .15s;
}
.al2-anlz-kpi-card:hover {
  border-color: var(--al2-brand);
  box-shadow: var(--al2-shadow);
  transform: translateY(-1px);
}
.al2-anlz-kpi-icon { font-size: 1.8rem; flex-shrink: 0; }
.al2-anlz-kpi-body { flex: 1; min-width: 0; }
.al2-anlz-kpi-value {
  font-family: var(--al2-font-mono);
  font-size: 1.3rem;
  font-weight: 700;
  color: var(--al2-g900);
  line-height: 1.1;
}
.al2-anlz-kpi-label {
  font-size: .68rem;
  color: var(--al2-g500);
  margin-top: 4px;
}

/* 차트 그리드 */
.al2-anlz-charts-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-bottom: 20px;
}
.al2-anlz-chart-card {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  padding: 16px;
}
.al2-anlz-chart-title {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: .82rem;
  font-weight: 700;
  color: var(--al2-g700);
  margin-bottom: 14px;
}
.al2-anlz-chart-title i { color: var(--al2-brand); }
.al2-anlz-chart-wrap {
  position: relative;
  height: 280px;
}
.al2-anlz-chart-wrap.large { height: 340px; }

.al2-anlz-empty-mini {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  min-height: 120px;
  color: var(--al2-g400);
  font-size: .78rem;
  font-style: italic;
}

/* 섹션 */
.al2-anlz-section {
  margin-top: 22px;
  margin-bottom: 22px;
}
.al2-anlz-section-title {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: .92rem;
  font-weight: 700;
  color: var(--al2-g800);
  margin-bottom: 14px;
}
.al2-anlz-section-title i { color: var(--al2-brand); }

/* Top 10 리스트 */
.al2-anlz-top10-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-height: 380px;
  overflow-y: auto;
}
.al2-anlz-top10-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  background: var(--al2-g50);
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-sm);
  cursor: pointer;
  transition: all .1s;
}
.al2-anlz-top10-item:hover {
  background: var(--al2-white);
  border-color: var(--al2-brand);
}
.al2-anlz-top10-item .al2-anlz-top10-actions {
  display: flex; gap: 4px; opacity: 0;
  transition: opacity .12s;
}
.al2-anlz-top10-item:hover .al2-anlz-top10-actions { opacity: 1; }
.al2-anlz-top10-act {
  width: 28px; height: 28px; border-radius: 50%;
  background: var(--al2-brand-dim); color: var(--al2-brand);
  border: 0; cursor: pointer; font-size: .75rem;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background .12s, color .12s;
}
.al2-anlz-top10-act:hover { background: var(--al2-brand); color: #fff; }
.al2-anlz-top10-chev {
  color: var(--al2-g300); font-size: .75rem; transition: color .12s, transform .12s;
}
.al2-anlz-top10-item:hover .al2-anlz-top10-chev { color: var(--al2-brand); transform: translateX(2px); }
.al2-anlz-top10-rank {
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--al2-font-mono);
  font-size: .72rem;
  font-weight: 700;
  background: var(--al2-g200);
  color: var(--al2-g600);
}
.al2-anlz-top10-rank.medal {
  background: var(--al2-brand);
  color: #fff;
}
.al2-anlz-top10-info { flex: 1; min-width: 0; }
.al2-anlz-top10-name {
  font-size: .78rem;
  font-weight: 600;
  color: var(--al2-g900);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.al2-anlz-top10-meta {
  font-size: .65rem;
  color: var(--al2-g500);
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.al2-anlz-top10-amount {
  font-family: var(--al2-font-mono);
  font-size: .82rem;
  font-weight: 700;
  color: var(--al2-brand);
  flex-shrink: 0;
}

/* 카테고리 다중 필터 (통합 분석) */
.al2-anlz-cat-filter {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  padding: 14px 16px;
  margin: 16px 0 20px;
}
.al2-anlz-cat-filter-label {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: .72rem;
  font-weight: 700;
  color: var(--al2-g600);
  margin-bottom: 10px;
}
.al2-anlz-cat-filter-label i {
  color: var(--al2-brand);
  font-size: .75rem;
}
.al2-anlz-cat-filter-chips {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.al2-anlz-cat-chip {
  font-size: .7rem;
  font-weight: 600;
  font-family: var(--al2-font-sans);
  padding: 5px 12px;
  background: var(--al2-g50);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-full);
  color: var(--al2-g600);
  cursor: pointer;
  transition: all .12s;
  white-space: nowrap;
}
.al2-anlz-cat-chip:hover {
  border-color: var(--al2-brand);
  color: var(--al2-brand);
}
.al2-anlz-cat-chip.on {
  background: var(--al2-brand);
  border-color: var(--al2-brand);
  color: #fff;
}

/* 반응형 */
@media (max-width: 1100px) {
  .al2-anlz-charts-grid {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 600px) {
  .al2-anlz-subtab {
    padding: 8px 10px;
    font-size: .72rem;
  }
  .al2-anlz-subtab span { display: none; }
  .al2-anlz-search { flex-direction: column; }
  .al2-anlz-result-item { flex-direction: column; align-items: flex-start; gap: 8px; }
  .al2-anlz-result-stats { text-align: left; }
}


/* ─────────────────────────────────────────────
   13.7 모니터링 (영업대표 일일 점검)
   ───────────────────────────────────────────── */

.al2-anlz-alerts {
  background: linear-gradient(135deg, var(--al2-brand-dim) 0%, transparent 100%);
  border: 1px solid var(--al2-g100);
  border-left: 4px solid var(--al2-brand);
  border-radius: var(--al2-radius-md);
  padding: 14px 18px;
  margin-bottom: 22px;
}
.al2-anlz-alerts-head {
  display: flex; align-items: center; gap: 6px;
  font-size: .82rem; font-weight: 700;
  color: var(--al2-brand); margin-bottom: 10px;
}
.al2-anlz-alerts-list { display: flex; flex-direction: column; gap: 8px; }
.al2-anlz-alert {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 12px;
  background: var(--al2-white);
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-sm);
  font-size: .78rem; color: var(--al2-g700);
}
.al2-anlz-alert i { flex-shrink: 0; font-size: .9rem; }
.al2-anlz-alert.red   i { color: var(--al2-red); }
.al2-anlz-alert.blue  i { color: var(--al2-blue); }
.al2-anlz-alert.amber i { color: var(--al2-amber); }
.al2-anlz-alert.green i { color: var(--al2-green); }
.al2-anlz-alert strong { color: var(--al2-g900); font-weight: 700; }

.al2-anlz-section-head-row {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; margin-bottom: 14px;
}
.al2-anlz-section-head-row .al2-anlz-section-title { margin-bottom: 0; }

.al2-anlz-fav-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 12px;
}
.al2-anlz-fav-card {
  position: relative;
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  padding: 16px 14px 14px;
  display: flex; flex-direction: column; align-items: center;
  text-align: center;
  transition: all .15s;
}
.al2-anlz-fav-card:hover {
  border-color: var(--al2-brand);
  transform: translateY(-2px);
  box-shadow: var(--al2-shadow);
}
.al2-anlz-fav-card.org { border-top: 3px solid var(--al2-brand); }
.al2-anlz-fav-card.biz.rel-competitor { border-top: 3px solid var(--al2-red); }
.al2-anlz-fav-card.biz.rel-partner    { border-top: 3px solid var(--al2-green); }
.al2-anlz-fav-card.biz.rel-reference  { border-top: 3px solid var(--al2-blue); }
.al2-anlz-fav-card.biz.rel-none       { border-top: 3px solid var(--al2-g300); }

.al2-anlz-fav-card-remove {
  position: absolute; top: 6px; right: 6px;
  background: none; border: none;
  width: 22px; height: 22px;
  border-radius: 50%;
  color: var(--al2-g300);
  cursor: pointer; font-size: .7rem;
  transition: all .12s;
}
.al2-anlz-fav-card-remove:hover { background: var(--al2-g100); color: var(--al2-red); }

.al2-anlz-fav-card-icon { font-size: 1.5rem; color: var(--al2-brand); margin-bottom: 8px; }
.al2-anlz-fav-card.biz.rel-competitor .al2-anlz-fav-card-icon { color: var(--al2-red); }
.al2-anlz-fav-card.biz.rel-partner    .al2-anlz-fav-card-icon { color: var(--al2-green); }
.al2-anlz-fav-card.biz.rel-reference  .al2-anlz-fav-card-icon { color: var(--al2-blue); }
.al2-anlz-fav-card.biz.rel-none       .al2-anlz-fav-card-icon { color: var(--al2-g500); }

.al2-anlz-fav-card-name {
  font-size: .82rem; font-weight: 700;
  color: var(--al2-g900);
  line-height: 1.35; margin-bottom: 4px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden; word-break: keep-all;
}
.al2-anlz-fav-card-meta { font-size: .65rem; color: var(--al2-g500); margin-bottom: 10px; }
.al2-anlz-fav-card-rel { margin-bottom: 8px; }
.al2-anlz-fav-card-note {
  font-size: .65rem; color: var(--al2-g500);
  background: var(--al2-g50);
  padding: 4px 8px; border-radius: var(--al2-radius-sm);
  margin-bottom: 10px;
  font-style: italic;
  width: 100%; word-break: keep-all;
}
.al2-anlz-fav-card-action {
  width: 100%;
  display: inline-flex; align-items: center; justify-content: center; gap: 5px;
  padding: 7px 10px;
  font-size: .68rem; font-weight: 600;
  background: var(--al2-g50);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-sm);
  color: var(--al2-g700);
  cursor: pointer;
  transition: all .12s;
  margin-top: auto;
}
.al2-anlz-fav-card-action:hover {
  background: var(--al2-brand);
  border-color: var(--al2-brand);
  color: #fff;
}

/* 관계 태그 */
.al2-anlz-rel-tag {
  display: inline-block;
  font-size: .62rem; font-weight: 700;
  padding: 3px 9px;
  border-radius: var(--al2-radius-full);
  white-space: nowrap;
}
.al2-anlz-rel-tag.rel-competitor { background: #FEE2E2; color: var(--al2-red); }
.al2-anlz-rel-tag.rel-partner    { background: #D1FAE5; color: var(--al2-green); }
.al2-anlz-rel-tag.rel-reference  { background: #DBEAFE; color: var(--al2-blue); }
.al2-anlz-rel-tag.rel-none       { background: var(--al2-g100); color: var(--al2-g500); }

.al2-anlz-fav-empty {
  display: flex; flex-direction: column; align-items: center;
  padding: 40px 24px;
  background: var(--al2-g50);
  border: 1px dashed var(--al2-g200);
  border-radius: var(--al2-radius-md);
  text-align: center;
}
.al2-anlz-fav-empty i { font-size: 1.8rem; color: var(--al2-g300); margin-bottom: 10px; }
.al2-anlz-fav-empty p { font-size: .82rem; font-weight: 600; color: var(--al2-g700); margin: 0 0 6px; }
.al2-anlz-fav-empty span { font-size: .68rem; color: var(--al2-g500); }

/* 검색 모달 */
.al2-anlz-fav-search-results { max-height: 400px; overflow-y: auto; }
.al2-anlz-fav-search-item {
  padding: 12px 14px;
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-sm);
  margin-bottom: 6px;
  cursor: pointer;
  transition: all .12s;
}
.al2-anlz-fav-search-item:hover {
  border-color: var(--al2-brand);
  background: var(--al2-g50);
}
.al2-anlz-fav-search-name { font-size: .82rem; font-weight: 600; color: var(--al2-g900); margin-bottom: 4px; }
.al2-anlz-fav-search-meta { font-size: .68rem; color: var(--al2-g500); }

/* 관계 선택 picker */
.al2-anlz-rel-picker {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}
.al2-anlz-rel-pick {
  display: flex; flex-direction: column; align-items: flex-start; gap: 4px;
  padding: 12px 14px;
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  cursor: pointer;
  text-align: left;
  transition: all .12s;
}
.al2-anlz-rel-pick:hover {
  border-color: var(--al2-brand);
  background: var(--al2-brand-dim);
}
.al2-anlz-rel-pick .rel-desc { font-size: .65rem; color: var(--al2-g500); font-weight: 500; }


/* ─────────────────────────────────────────────
   13.8 토스트 알림
   ───────────────────────────────────────────── */
.al2-bids-toast {
  position: fixed;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%) translateY(20px);
  z-index: 10000;
  padding: 12px 20px;
  background: var(--al2-g900);
  color: #fff;
  font-size: .82rem;
  font-weight: 600;
  border-radius: var(--al2-radius-md);
  box-shadow: 0 8px 24px rgba(15, 23, 42, .25);
  opacity: 0;
  transition: all .25s ease;
  max-width: 90%;
  text-align: center;
}
.al2-bids-toast.on {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}
.al2-bids-toast.success { background: var(--al2-green); }
.al2-bids-toast.error   { background: var(--al2-red); }
.al2-bids-toast.info    { background: var(--al2-blue); }


/* ─────────────────────────────────────────────
   13.9 키워드 편집 UI
   ───────────────────────────────────────────── */

.al2-sb-section-label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.al2-sb-section-action {
  background: none; border: none;
  width: 22px; height: 22px;
  border-radius: 4px;
  color: var(--al2-g400);
  cursor: pointer;
  font-size: .65rem;
  display: inline-flex; align-items: center; justify-content: center;
  transition: all .12s;
}
.al2-sb-section-action:hover {
  background: var(--al2-g100);
  color: var(--al2-brand);
}

.al2-kw-edit-input-row { display: flex; gap: 8px; }
.al2-kw-edit-input-row input,
.al2-kw-edit-input-row textarea {
  flex: 1;
  padding: 9px 12px;
  font-size: .8rem;
  font-family: var(--al2-font-sans);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  outline: none;
  transition: border-color .12s;
  line-height: 1.5;
}
.al2-kw-edit-input-row input:focus,
.al2-kw-edit-input-row textarea:focus { border-color: var(--al2-brand); }

.al2-kw-edit-chips {
  display: flex; flex-wrap: wrap; gap: 6px;
  min-height: 48px;
  padding: 12px;
  background: var(--al2-g50);
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-md);
  max-height: 280px;
  overflow-y: auto;
}
.al2-kw-edit-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 6px 5px 10px;
  font-size: .72rem; font-weight: 600;
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-full);
  color: var(--al2-g700);
}
.al2-kw-edit-chip-x {
  background: none; border: none;
  width: 18px; height: 18px;
  border-radius: 50%;
  color: var(--al2-g400);
  cursor: pointer;
  font-size: .9rem;
  display: inline-flex; align-items: center; justify-content: center;
  transition: all .12s;
  padding: 0;
  line-height: 1;
}
.al2-kw-edit-chip-x:hover {
  background: var(--al2-red);
  color: #fff;
}
.al2-kw-edit-empty {
  width: 100%;
  text-align: center;
  font-size: .72rem;
  color: var(--al2-g400);
  font-style: italic;
  padding: 10px 0;
}


/* ─────────────────────────────────────────────
   13.10 낙찰현황 (Sucbid)
   ───────────────────────────────────────────── */
.al2-anlz-sucbid-toolbar {
  margin-bottom: 16px;
}
.al2-anlz-sucbid-row {
  display: flex;
  align-items: center;
  gap: 10px;
}
.al2-anlz-sucbid-row .al2-bids-sort {
  flex-shrink: 0;
  min-width: 100px;
}

/* 낙찰자 행 강조 */
.al2-anlz-sucbid-winner {
  background: linear-gradient(90deg, #FEF3C7 0%, transparent 100%);
}
.al2-anlz-sucbid-winner td {
  font-weight: 700;
}

/* 낙찰현황 행 hover (클릭 가능 표시)
   — 주의: .al2-anlz-sucbid-row 는 툴바용 flex 컨테이너 클래스와 겹치므로
   테이블 행에는 .al2-anlz-sucbid-item 을 사용 (2026-04 충돌 해결) */
.al2-anlz-sucbid-item.al2-bids-row {
  cursor: pointer;
}


/* ─────────────────────────────────────────────
   13.5 영업관리 칸반 보드
   ───────────────────────────────────────────── */

/* 통계 카드의 파이프라인 색상 */
.al2-bids-stat-card.pl-g .al2-bids-stat-num     { color: var(--al2-g600); }
.al2-bids-stat-card.pl-g .al2-bids-stat-icon i  { color: var(--al2-g500); }
.al2-bids-stat-card.pl-b .al2-bids-stat-num     { color: var(--al2-blue); }
.al2-bids-stat-card.pl-b .al2-bids-stat-icon i  { color: var(--al2-blue); }
.al2-bids-stat-card.pl-p .al2-bids-stat-num     { color: var(--al2-brand); }
.al2-bids-stat-card.pl-p .al2-bids-stat-icon i  { color: var(--al2-brand); }
.al2-bids-stat-card.pl-green .al2-bids-stat-num    { color: var(--al2-green); }
.al2-bids-stat-card.pl-green .al2-bids-stat-icon i { color: var(--al2-green); }

/* 칸반 보드 */
.al2-bids-kanban {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  margin-top: 18px;
  align-items: start;
}

.al2-bids-kanban-col {
  background: var(--al2-g50);
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-md);
  display: flex;
  flex-direction: column;
  min-height: 300px;
  overflow: hidden;
}

.al2-bids-kanban-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 14px;
  background: var(--al2-white);
  border-bottom: 1px solid var(--al2-g100);
  border-top: 3px solid var(--al2-g300);
}
.al2-bids-kanban-head.pl-g     { border-top-color: var(--al2-g500); }
.al2-bids-kanban-head.pl-b     { border-top-color: var(--al2-blue); }
.al2-bids-kanban-head.pl-p     { border-top-color: var(--al2-brand); }
.al2-bids-kanban-head.pl-green { border-top-color: var(--al2-green); }

.al2-bids-kanban-title {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: .82rem;
  font-weight: 700;
  color: var(--al2-g800);
}
.al2-bids-kanban-title i { font-size: .85rem; }
.al2-bids-kanban-head.pl-g .al2-bids-kanban-title i     { color: var(--al2-g500); }
.al2-bids-kanban-head.pl-b .al2-bids-kanban-title i     { color: var(--al2-blue); }
.al2-bids-kanban-head.pl-p .al2-bids-kanban-title i     { color: var(--al2-brand); }
.al2-bids-kanban-head.pl-green .al2-bids-kanban-title i { color: var(--al2-green); }

.al2-bids-kanban-count {
  font-family: var(--al2-font-mono);
  font-size: .72rem;
  font-weight: 700;
  padding: 3px 9px;
  border-radius: var(--al2-radius-full);
  background: var(--al2-g100);
  color: var(--al2-g600);
}

.al2-bids-kanban-body {
  flex: 1;
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-height: 200px;
  transition: background .15s;
}
.al2-bids-kanban-body.drop-target {
  background: var(--al2-brand-dim);
  outline: 2px dashed var(--al2-brand);
  outline-offset: -4px;
}

.al2-bids-kanban-empty {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px 12px;
  color: var(--al2-g400);
  font-size: .72rem;
  font-style: italic;
  border: 1px dashed var(--al2-g200);
  border-radius: var(--al2-radius-sm);
}

/* 칸반 카드 */
.al2-bids-kanban-card {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  padding: 10px 12px;
  cursor: grab;
  transition: all .12s;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.al2-bids-kanban-card:hover {
  border-color: var(--al2-brand);
  box-shadow: var(--al2-shadow);
  transform: translateY(-1px);
}
.al2-bids-kanban-card.dragging {
  opacity: .5;
  cursor: grabbing;
  transform: rotate(2deg);
}

.al2-bids-kanban-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 18px;
}

.al2-bids-kanban-dday {
  font-family: var(--al2-font-mono);
  font-size: .62rem;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: var(--al2-radius-sm);
  background: var(--al2-g100);
  color: var(--al2-g600);
}
.al2-bids-kanban-dday.urgent {
  background: var(--al2-red);
  color: #fff;
}
.al2-bids-kanban-dday.warning {
  background: var(--al2-amber);
  color: #fff;
}
.al2-bids-kanban-dday.expired {
  background: var(--al2-g200);
  color: var(--al2-g500);
  text-decoration: line-through;
}

.al2-bids-kanban-detail {
  background: none;
  border: none;
  color: var(--al2-g300);
  cursor: pointer;
  font-size: .68rem;
  padding: 2px 4px;
  border-radius: 3px;
  transition: all .12s;
}
.al2-bids-kanban-detail:hover {
  color: var(--al2-brand);
  background: var(--al2-brand-dim);
}

.al2-bids-kanban-card-title {
  font-size: .76rem;
  font-weight: 600;
  color: var(--al2-g900);
  line-height: 1.4;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.al2-bids-kanban-card-org {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: .65rem;
  color: var(--al2-g500);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.al2-bids-kanban-card-org i {
  font-size: .6rem;
  color: var(--al2-g400);
  flex-shrink: 0;
}

.al2-bids-kanban-card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 4px;
  padding-top: 8px;
  border-top: 1px solid var(--al2-g100);
}

.al2-bids-kanban-card-price {
  font-family: var(--al2-font-mono);
  font-size: .78rem;
  font-weight: 700;
  color: var(--al2-brand);
}

.al2-bids-kanban-card-actions {
  display: flex;
  gap: 2px;
}

.al2-bids-kanban-move {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  color: var(--al2-g500);
  cursor: pointer;
  width: 22px;
  height: 22px;
  border-radius: 4px;
  font-size: .58rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: all .12s;
}
.al2-bids-kanban-move:hover:not(.disabled) {
  border-color: var(--al2-brand);
  color: var(--al2-brand);
  background: var(--al2-brand-dim);
}
.al2-bids-kanban-move.disabled {
  opacity: .35;
  cursor: not-allowed;
}

/* 반응형 */
@media (max-width: 1100px) {
  .al2-bids-kanban {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 600px) {
  .al2-bids-kanban {
    grid-template-columns: 1fr;
  }
  .al2-bids-kanban-col {
    min-height: auto;
  }
}


/* ─────────────────────────────────────────────
   14. 상세 모달 (v2 호환)
   ───────────────────────────────────────────── */

.al2-bids-modal-overlay {
  display: none;
  position: fixed; inset: 0;
  z-index: 9999;
  background: rgba(15, 23, 42, .45);
  align-items: center; justify-content: center;
  padding: 24px;
  animation: al2-bids-modal-fade .15s ease;
}
.al2-bids-modal-overlay.on { display: flex; }

@keyframes al2-bids-modal-fade {
  from { opacity: 0; }
  to { opacity: 1; }
}

.al2-bids-modal {
  width: 100%;
  max-width: 560px;
  max-height: 90vh;
  background: var(--al2-white);
  border-radius: var(--al2-radius-lg);
  box-shadow: 0 20px 60px rgba(15, 23, 42, .25);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  animation: al2-bids-modal-slide .2s ease;
}

@keyframes al2-bids-modal-slide {
  from { opacity: 0; transform: translateY(-12px) scale(.98); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

.al2-bids-modal-body {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
}

/* ── Modal Head ── */
.al2-bids-modal-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 20px;
  border-bottom: 1px solid var(--al2-g100);
  flex-shrink: 0;
}
.al2-bids-modal-tags {
  display: flex; gap: 6px; align-items: center;
}
.al2-bids-modal-tag {
  font-size: .68rem; font-weight: 700;
  padding: 3px 9px;
  border-radius: var(--al2-radius-sm);
  white-space: nowrap;
}
.al2-bids-modal-tag.type {
  background: var(--al2-blue-light);
  color: var(--al2-blue);
}
.al2-bids-modal-tag.pre {
  background: var(--al2-brand-dim);
  color: var(--al2-brand);
}
.al2-bids-modal-tag.bid {
  background: var(--al2-cyan-light);
  color: var(--al2-cyan);
}
.al2-bids-modal-tag.dday {
  font-family: var(--al2-font-mono);
  background: var(--al2-g100);
  color: var(--al2-g600);
}
.al2-bids-modal-tag.dday.urgent {
  background: var(--al2-red);
  color: #fff;
}
.al2-bids-modal-tag.dday.warning {
  background: var(--al2-amber);
  color: #fff;
}
.al2-bids-modal-tag.dday.expired {
  background: var(--al2-g300);
  color: var(--al2-g600);
}
.al2-bids-modal-close {
  background: none; border: none;
  color: var(--al2-g400);
  cursor: pointer;
  font-size: 1.1rem;
  padding: 4px 8px;
  border-radius: var(--al2-radius-sm);
  transition: all .12s;
}
.al2-bids-modal-close:hover {
  background: var(--al2-g100);
  color: var(--al2-g700);
}

/* ── Modal Content (스크롤) ── */
.al2-bids-modal-content {
  flex: 1;
  overflow-y: auto;
  padding: 18px 20px;
}
.al2-bids-modal-content::-webkit-scrollbar { width: 6px; }
.al2-bids-modal-content::-webkit-scrollbar-thumb {
  background: var(--al2-g200);
  border-radius: 3px;
}

.al2-bids-modal-title {
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--al2-g900);
  line-height: 1.45;
  margin: 0 0 16px;
}

/* 기관 박스 */
.al2-bids-modal-org {
  background: var(--al2-g50);
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-md);
  padding: 12px 14px;
  margin-bottom: 14px;
}
.al2-bids-modal-org-row {
  display: flex; align-items: center; gap: 10px;
  font-size: .78rem;
  padding: 4px 0;
}
.al2-bids-modal-org-row i {
  color: var(--al2-g400);
  font-size: .8rem;
  width: 16px;
  text-align: center;
}
.al2-bids-modal-org-label {
  color: var(--al2-g500);
  font-weight: 600;
  min-width: 56px;
}
.al2-bids-modal-org-value {
  color: var(--al2-g900);
  font-weight: 600;
  flex: 1;
  word-break: keep-all;
}

/* 2x2 정보 그리드 */
.al2-bids-modal-info-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-bottom: 16px;
}
.al2-bids-modal-info-cell {
  background: var(--al2-white);
  border: 1px solid var(--al2-g200);
  border-radius: var(--al2-radius-md);
  padding: 12px 14px;
}
.al2-bids-modal-info-cell.highlight {
  background: var(--al2-amber-light);
  border-color: var(--al2-amber);
}
.al2-bids-modal-info-label {
  display: flex; align-items: center; gap: 6px;
  font-size: .68rem; font-weight: 600;
  color: var(--al2-g500);
  margin-bottom: 6px;
}
.al2-bids-modal-info-label i {
  font-size: .7rem;
  color: var(--al2-g400);
}
.al2-bids-modal-info-cell.highlight .al2-bids-modal-info-label,
.al2-bids-modal-info-cell.highlight .al2-bids-modal-info-label i {
  color: var(--al2-amber);
}
.al2-bids-modal-info-value {
  font-size: .85rem;
  font-weight: 700;
  color: var(--al2-g900);
  line-height: 1.3;
}
.al2-bids-modal-info-value.big {
  font-size: 1.3rem;
  font-family: var(--al2-font-mono);
  color: var(--al2-g900);
}
.al2-bids-modal-info-value.mono {
  font-family: var(--al2-font-mono);
  font-size: .8rem;
}
.al2-bids-modal-info-sub {
  font-family: var(--al2-font-mono);
  font-size: .65rem;
  color: var(--al2-g500);
  margin-top: 2px;
}
.al2-bids-modal-cat {
  display: inline-block;
  font-size: .68rem; font-weight: 700;
  padding: 2px 8px;
  border-radius: var(--al2-radius-full);
  background: var(--al2-g100);
  color: var(--al2-g600);
}
.al2-bids-modal-cat.maintenance { background: var(--al2-brand-dim);  color: var(--al2-brand); }
.al2-bids-modal-cat.data        { background: var(--al2-blue-light); color: var(--al2-blue); }
.al2-bids-modal-cat.system      { background: var(--al2-green-light);color: var(--al2-green); }
.al2-bids-modal-cat.etc         { background: var(--al2-g100);       color: var(--al2-g500); }

/* 상세 정보 섹션 */
.al2-bids-modal-section {
  margin-top: 16px;
}
.al2-bids-modal-section-title {
  display: flex; align-items: center; gap: 6px;
  font-size: .78rem; font-weight: 700;
  color: var(--al2-g700);
  margin-bottom: 10px;
}
.al2-bids-modal-section-title i {
  color: var(--al2-brand);
  font-size: .8rem;
}
.al2-bids-modal-table {
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-md);
  overflow: hidden;
}
.al2-bids-modal-table-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
}
.al2-bids-modal-table-row + .al2-bids-modal-table-row {
  border-top: 1px solid var(--al2-g100);
}
.al2-bids-modal-table-cell {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 14px;
  font-size: .76rem;
}
.al2-bids-modal-table-cell + .al2-bids-modal-table-cell {
  border-left: 1px solid var(--al2-g100);
}
.al2-bids-modal-table-cell .lbl {
  color: var(--al2-g500);
  font-weight: 600;
  min-width: 56px;
}
.al2-bids-modal-table-cell .val {
  color: var(--al2-g900);
  font-weight: 500;
  word-break: keep-all;
}
.al2-bids-modal-table-cell .val.tel {
  color: var(--al2-brand);
  font-family: var(--al2-font-mono);
  text-decoration: none;
}
.al2-bids-modal-table-cell .val.tel:hover { text-decoration: underline; }

/* ── Modal Foot ── */
.al2-bids-modal-foot {
  display: flex; gap: 6px; flex-wrap: wrap;
  padding: 12px 16px;
  border-top: 1px solid var(--al2-g100);
  background: var(--al2-g50);
  flex-shrink: 0;
}
.al2-bids-modal-btn {
  flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  font-size: .78rem; font-weight: 600;
  font-family: var(--al2-font-sans);
  padding: 9px 12px;
  border-radius: var(--al2-radius-md);
  border: 1px solid var(--al2-g200);
  background: var(--al2-white);
  color: var(--al2-g700);
  cursor: pointer;
  transition: all .12s;
  white-space: nowrap;
}
/* 보조 액션: 라벨 숨기고 아이콘만 (관심기관·캘린더·과거낙찰·제안) */
.al2-bids-modal-foot .al2-bids-modal-favorg span,
.al2-bids-modal-foot .al2-bids-modal-mx-cal span,
.al2-bids-modal-foot .al2-bids-modal-mx-hist span,
.al2-bids-modal-foot .al2-bids-modal-mx-propose span {
  display: none;
}
.al2-bids-modal-foot .al2-bids-modal-favorg,
.al2-bids-modal-foot .al2-bids-modal-mx-cal,
.al2-bids-modal-foot .al2-bids-modal-mx-hist,
.al2-bids-modal-foot .al2-bids-modal-mx-propose {
  min-width: 38px; padding: 9px 10px;
}
/* 주요 액션: 확장 (저장 + 나라장터) */
.al2-bids-modal-foot .al2-bids-modal-save,
.al2-bids-modal-foot .al2-bids-modal-open {
  flex: 1 1 auto; min-width: 100px;
}
.al2-bids-modal-foot .al2-bids-modal-btn-close { padding: 9px 14px; }
.al2-bids-modal-btn:hover {
  border-color: var(--al2-brand);
  color: var(--al2-brand);
}
.al2-bids-modal-btn.primary {
  background: var(--al2-green);
  border-color: var(--al2-green);
  color: #fff;
}
.al2-bids-modal-btn.primary:hover {
  background: #047857;
  border-color: #047857;
  color: #fff;
}
.al2-bids-modal-save.on {
  background: var(--al2-amber-light);
  border-color: var(--al2-amber);
  color: var(--al2-amber);
}
.al2-bids-modal-save.on i { color: var(--al2-amber); }
.al2-bids-modal-favorg.on {
  background: #dcfce7;
  border-color: #22c55e;
  color: #15803d;
}
.al2-bids-modal-favorg.on i { color: #15803d; }

/* ════════════════════════════════════════════════
   Modal-Intel / Pipeline / Competitor (Sprint Modal-A+B+C)
   ════════════════════════════════════════════════ */
.al2-mx-section{
  margin-top:20px;padding:14px 16px;
  background:#fff;border:1px solid var(--al2-g150);border-radius:10px;
}
.al2-mx-section-title{
  font-size:13px;font-weight:700;color:var(--al2-g800);
  margin-bottom:10px;display:flex;align-items:center;gap:6px;
}
.al2-mx-section-title i{ color:var(--al2-brand); }
.al2-mx-section-more{
  margin-left:auto;font-size:11px;color:var(--al2-brand);text-decoration:none;font-weight:600;
}
.al2-mx-section-more:hover{ text-decoration:underline; }

/* 파이프라인 단계 배지 (헤더) */
.al2-mx-stage-wrap{ position:relative;display:inline-block; }
.al2-mx-stage-badge{
  display:inline-flex;align-items:center;gap:4px;padding:3px 10px;
  font-size:12px;font-weight:700;border-radius:999px;cursor:pointer;
  background:var(--al2-g100);color:var(--al2-g600);
}
.al2-mx-stage-badge.none{ background:#f3f4f6;color:#9ca3af;cursor:default; }
.al2-mx-stage-badge.stage-discovered{ background:#e0e7ff;color:#4338ca; }
.al2-mx-stage-badge.stage-reviewing{ background:#fef3c7;color:#b45309; }
.al2-mx-stage-badge.stage-proposing{ background:#ddd6fe;color:#6c3ae0; }
.al2-mx-stage-badge.stage-submitted{ background:#dcfce7;color:#15803d; }
.al2-mx-stage-badge.stage-dropped{ background:#fee2e2;color:#b91c1c; }
.al2-mx-stage-menu{
  display:none;position:absolute;top:100%;left:0;margin-top:4px;z-index:10;
  background:#fff;border:1px solid var(--al2-g200);border-radius:8px;
  box-shadow:0 4px 12px rgba(0,0,0,.08);padding:4px;min-width:140px;
}
.al2-mx-stage-wrap.open .al2-mx-stage-menu{ display:block; }
.al2-mx-stage-opt{
  display:block;width:100%;padding:6px 10px;text-align:left;font-size:12px;
  background:transparent;border:0;border-radius:4px;cursor:pointer;color:var(--al2-g800);
}
.al2-mx-stage-opt:hover{ background:var(--al2-g50); }
.al2-mx-stage-opt.current{ background:#ede9fe;color:#6c3ae0;font-weight:700; }

/* 타임라인 바 */
.al2-mx-timeline .al2-mx-slack{
  margin-left:auto;font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;
}
.al2-mx-slack.ok{ background:#dcfce7;color:#15803d; }
.al2-mx-slack.warn{ background:#fef3c7;color:#b45309; }
.al2-mx-slack.danger{ background:#fee2e2;color:#b91c1c; }
.al2-mx-tl-bar{
  position:relative;height:8px;background:var(--al2-g100);border-radius:4px;margin:10px 0 8px;
}
.al2-mx-tl-fill{
  height:100%;background:linear-gradient(90deg,#6c3ae0,#f59e0b);border-radius:4px;
}
.al2-mx-tl-now{
  position:absolute;top:-4px;width:3px;height:16px;background:#dc2626;border-radius:2px;
  box-shadow:0 0 0 2px #fff;
}
.al2-mx-tl-labels{
  display:flex;justify-content:space-between;font-size:11px;color:var(--al2-g600);
}
.al2-mx-tl-labels .now{ color:#dc2626;font-weight:700; }

/* 기관 인텔 KPI */
.al2-mx-intel-loading, .al2-mx-intel-empty{
  padding:12px;text-align:center;color:var(--al2-g500);font-size:12px;
}
.al2-mx-intel-kpis{
  display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px;
}
.al2-mx-intel-kpis .k{
  padding:10px 12px;background:#fafafb;border-radius:8px;border:1px solid var(--al2-g100);
}
.al2-mx-intel-kpis .l{ font-size:10px;color:var(--al2-g500);font-weight:600;margin-bottom:4px; }
.al2-mx-intel-kpis .v{ font-size:18px;font-weight:800;color:var(--al2-g900);font-family:'JetBrains Mono',monospace; }
.al2-mx-intel-kpis .u{ font-size:11px;font-weight:700;color:var(--al2-g500);margin-left:2px; }
.al2-mx-intel-winners .ttl{
  font-size:11px;font-weight:700;color:var(--al2-g600);margin-bottom:6px;
}
.al2-mx-intel-winners .row{
  display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;
}
.al2-mx-intel-winners .row:hover{ background:var(--al2-g50); }
.al2-mx-intel-winners .rank{
  width:18px;height:18px;border-radius:50%;background:var(--al2-brand);color:#fff;
  font-size:10px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;
}
.al2-mx-intel-winners .nm{ flex:1;font-size:12px;color:var(--al2-g800);font-weight:600; }
.al2-mx-intel-winners .cnt{ font-size:11px;color:var(--al2-g500); }
.al2-mx-intel-winners .amt{ font-size:11px;font-weight:700;color:var(--al2-g800);font-family:'JetBrains Mono',monospace; }

/* 메모 */
.al2-mx-note{
  width:100%;min-height:70px;padding:8px 10px;
  border:1px solid var(--al2-g200);border-radius:6px;font-size:12px;
  font-family:inherit;resize:vertical;
}
.al2-mx-note:focus{ outline:none;border-color:var(--al2-brand);box-shadow:0 0 0 2px rgba(108,58,224,.1); }

/* 할일 */
.al2-mx-tasks{ margin-bottom:8px; }
.al2-mx-tasks-empty{ font-size:11px;color:var(--al2-g500);padding:8px; }
.al2-mx-task{
  display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;
  font-size:12px;color:var(--al2-g800);
}
.al2-mx-task:hover{ background:var(--al2-g50); }
.al2-mx-task.done .txt{ text-decoration:line-through;color:var(--al2-g500); }
.al2-mx-task .txt{ flex:1; }
.al2-mx-task .due{ font-size:10px;color:var(--al2-g500);font-family:'JetBrains Mono',monospace; }
.al2-mx-task .del{
  width:20px;height:20px;border:0;background:transparent;color:var(--al2-g400);
  cursor:pointer;border-radius:4px;font-size:10px;
}
.al2-mx-task .del:hover{ background:#fee2e2;color:#dc2626; }
.al2-mx-task-add{ display:flex;gap:6px;margin-top:6px; }
.al2-mx-task-input{
  flex:1;padding:6px 10px;font-size:12px;border:1px solid var(--al2-g200);border-radius:6px;
}
.al2-mx-task-due{ padding:6px;font-size:11px;border:1px solid var(--al2-g200);border-radius:6px; }
.al2-mx-task-add-btn{
  padding:6px 14px;background:var(--al2-brand);color:#fff;border:0;border-radius:6px;
  font-size:12px;font-weight:700;cursor:pointer;
}
.al2-mx-task-add-btn:hover{ background:var(--al2-brand-dark); }

/* 활동 로그 */
.al2-mx-activity{ display:flex;flex-direction:column;gap:4px; }
.al2-mx-act-row{
  display:flex;align-items:center;gap:8px;padding:4px 6px;font-size:11px;color:var(--al2-g700);
}
.al2-mx-act-row i{ color:var(--al2-brand);width:12px; }
.al2-mx-act-row .txt{ flex:1; }
.al2-mx-act-row .t{ font-size:10px;color:var(--al2-g500); }

/* 관련 공고 */
.al2-mx-rel-ttl{
  font-size:11px;font-weight:700;color:var(--al2-g500);
  margin:8px 0 4px;text-transform:uppercase;letter-spacing:0.3px;
}
.al2-mx-rel-row{
  display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:6px;
  cursor:pointer;background:#fafafb;margin-bottom:4px;
}
.al2-mx-rel-row:hover{ background:#ede9fe; }
.al2-mx-rel-row .tp{
  font-size:10px;font-weight:800;padding:2px 6px;border-radius:4px;
  background:var(--al2-brand);color:#fff;
}
.al2-mx-rel-row .ttl{ flex:1;font-size:12px;color:var(--al2-g800);font-weight:600; }
.al2-mx-rel-row .org{ font-size:11px;color:var(--al2-g500); }
.al2-mx-rel-row .amt{ font-size:11px;font-weight:700;color:var(--al2-g800);font-family:'JetBrains Mono',monospace; }

/* 이메일 초안 링크 */
.al2-bids-modal-table-cell .val.mail{
  display:inline-block;margin-left:8px;padding:2px 8px;font-size:11px;
  background:#ede9fe;color:#6c3ae0;border-radius:4px;text-decoration:none;
}
.al2-bids-modal-table-cell .val.mail:hover{ background:#6c3ae0;color:#fff; }

/* 모달 반응형 */
@media (max-width: 600px) {
  .al2-bids-modal-overlay { padding: 0; }
  .al2-bids-modal {
    max-width: 100%;
    max-height: 100vh;
    border-radius: 0;
  }
  .al2-bids-modal-info-grid {
    grid-template-columns: 1fr;
  }
  .al2-bids-modal-table-row {
    grid-template-columns: 1fr;
  }
  .al2-bids-modal-table-cell + .al2-bids-modal-table-cell {
    border-left: none;
    border-top: 1px solid var(--al2-g100);
  }
  .al2-bids-modal-foot {
    flex-wrap: wrap;
  }
  .al2-bids-modal-btn {
    flex: 1 1 calc(50% - 4px);
  }
  .al2-bids-modal-btn.primary {
    flex: 1 1 100%;
    order: -1;
  }
}
/* ══════════════════════════════════════════
   P0 패치: 매칭 키워드 칩 + 반복 발주 배지
   bids-v3.css 맨 아래에 이 내용을 붙여넣으세요
   ══════════════════════════════════════════ */

/* 매칭 키워드 칩 — 카드 내 org 아래 위치 */
.al2-bids-card-kwchips {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 4px 0 2px;
}

.al2-bids-kwchip {
  display: inline-block;
  font-size: 12px;
  line-height: 1;
  padding: 4px 9px;
  border-radius: 3px;
  background: var(--al2-brand-bg, #eef2ff);
  color: var(--al2-brand, #6366f1);
  font-weight: 600;
  white-space: nowrap;
}

/* 반복 발주 배지 */
.al2-bids-badge.recur {
  background: var(--al2-amber-bg, #fffbeb);
  color: var(--al2-amber, #d97706);
  border: 1px solid var(--al2-amber-border, #fde68a);
  font-size: 11px;
  padding: 2px 6px;
  border-radius: 3px;
}

/* 통계 카드 — 골든타임 강조 (첫 번째 카드) */
.al2-bids-stat-card.goldenTime {
  border-left: 3px solid var(--al2-red, #ef4444);
}
.al2-bids-stat-card.goldenTime.on {
  background: linear-gradient(135deg, #fef2f2, #fff7ed);
  border-color: var(--al2-red, #ef4444);
}

/* P1-B: Today's Focus Hero (2023 Inbox Zero) */
.al2-focus-hero{background:linear-gradient(135deg,#fef3c7 0%,#fff 60%);border:1px solid #fcd34d;border-radius:12px;padding:20px 24px;margin-bottom:24px;box-shadow:0 2px 8px rgba(245,158,11,.08)}
.al2-focus-head{margin-bottom:16px}
.al2-focus-date{font-size:18px;font-weight:700;color:#78350f;margin-bottom:4px}
.al2-focus-sub{font-size:13px;color:#92400e;opacity:.8}
.al2-focus-list{display:flex;flex-direction:column;gap:10px}
.al2-focus-row{display:flex;gap:14px;background:#fff;border:1px solid #fde68a;border-radius:10px;padding:14px 16px;cursor:pointer;transition:all .15s}
.al2-focus-row:hover{border-color:#f59e0b;transform:translateX(2px);box-shadow:0 4px 12px rgba(245,158,11,.12)}
.al2-focus-num{flex:0 0 32px;height:32px;border-radius:50%;background:#f59e0b;color:#fff;font-weight:700;font-size:15px;display:flex;align-items:center;justify-content:center}
.al2-focus-body{flex:1;min-width:0}
.al2-focus-title{font-size:14px;font-weight:600;color:var(--al2-g800,#1f2937);margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.al2-focus-meta{font-size:12px;color:var(--al2-g600,#4b5563);margin-bottom:4px}
.al2-focus-price{color:var(--al2-brand,#6366f1);font-weight:600}
.al2-focus-dday{color:#dc2626;font-weight:600}
.al2-focus-reason{font-size:11px;font-weight:600;color:#92400e}
.al2-focus-more{margin-top:14px}
.al2-focus-more summary{cursor:pointer;font-size:12px;color:#92400e;padding:6px 0;list-style:none}
.al2-focus-more summary:hover{text-decoration:underline}

/* ── BID-P1-B: 제안서 작성 여유 배지 (slack) ────────────────────────── */
.al2-bids-slack {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 2px 7px;
  margin-left: 6px;
  font-size: 11px;
  font-weight: 700;
  border-radius: 10px;
  white-space: nowrap;
  vertical-align: middle;
  line-height: 1.4;
}
.al2-bids-slack.danger {
  background: #fef2f2;
  color: #b91c1c;
  border: 1px solid #fecaca;
}
.al2-bids-slack.warn {
  background: #fffbeb;
  color: #b45309;
  border: 1px solid #fde68a;
}
.al2-bids-row-title-wrap .al2-bids-slack { font-size: 10px; padding: 1px 6px; }

/* ── BID-P2-C: Win Room 위젯 ──────────────────────────────────────── */
.al2-bids-winroom {
  margin: 0 0 28px 0;
  padding: 20px 22px 8px;
  background: linear-gradient(135deg, #faf5ff 0%, #f0f9ff 100%);
  border: 1px solid #e9d5ff;
  border-radius: 14px;
  box-shadow: 0 1px 3px rgba(139, 92, 246, 0.06);
}
.al2-bids-winroom-header {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin-bottom: 18px;
  padding-bottom: 12px;
  border-bottom: 1px solid rgba(139, 92, 246, 0.15);
}
.al2-bids-winroom-header h2 {
  margin: 0;
  font-size: 18px;
  font-weight: 800;
  color: #6b21a8;
  display: flex;
  align-items: center;
  gap: 8px;
}
.al2-bids-winroom-header h2 .fa-trophy { color: #f59e0b; }
.al2-bids-winroom-sub { font-size: 12px; color: #7c3aed; font-weight: 600; }
.al2-bids-winroom-section { margin-bottom: 20px; }
.al2-bids-winroom-section:last-child { margin-bottom: 4px; }
.al2-bids-winroom-head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
  padding: 6px 12px;
  background: #ffffff;
  border-radius: 8px;
  border-left: 3px solid #8b5cf6;
}
.al2-bids-winroom-section.proposing .al2-bids-winroom-head { border-left-color: #dc2626; }
.al2-bids-winroom-section.deciding  .al2-bids-winroom-head { border-left-color: #f59e0b; }
.al2-bids-winroom-section.newhigh   .al2-bids-winroom-head { border-left-color: #10b981; }
.al2-bids-winroom-icon { font-size: 16px; }
.al2-bids-winroom-title { font-size: 14px; font-weight: 800; color: #111827; }
.al2-bids-winroom-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 22px;
  height: 20px;
  padding: 0 7px;
  background: #ede9fe;
  color: #6b21a8;
  font-size: 11px;
  font-weight: 800;
  border-radius: 10px;
}
.al2-bids-winroom-desc { font-size: 12px; color: #6b7280; font-weight: 500; margin-left: auto; }
.al2-bids-highlight.secondary { opacity: 0.92; }

/* ═════════════════════════════════════════════════════════
   검색 input × Clear 버튼 (2026 글로벌 B2B SaaS 표준)
   - Algolia / Linear / Notion 공통 패턴
   - value 있을 때만 display:flex (JS에서 토글)
   ═════════════════════════════════════════════════════════ */
.al2-bids-search.has-clear input { padding-right: 36px; }
.al2-bids-search-clear {
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 24px;
  height: 24px;
  border: none;
  background: transparent;
  color: var(--al2-text-3, #94a3b8);
  border-radius: 50%;
  cursor: pointer;
  display: none;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  transition: all 0.15s ease;
  padding: 0;
  z-index: 2;
}
.al2-bids-search-clear:hover {
  background: var(--al2-bg-2, #f1f5f9);
  color: var(--al2-text-1, #0f172a);
}
.al2-bids-search-clear:focus-visible {
  outline: 2px solid var(--al2-primary, #7c3aed);
  outline-offset: 2px;
}

/* category chips */
.al2-bids-cat-row{display:flex;flex-wrap:wrap;gap:6px;padding:10px 14px;background:var(--al2-g50,#f9fafb);border-radius:var(--al2-radius-md,8px);align-items:center;}
.al2-bids-cat-row-label{font-size:.72rem;font-weight:700;color:var(--al2-g400,#9ca3af);text-transform:uppercase;letter-spacing:.3px;margin-right:8px;flex-shrink:0;}
.al2-bids-cat-chip{display:inline-flex;align-items:center;height:28px;padding:0 12px;font-size:12px;font-weight:500;color:var(--al2-text-secondary,#6b7280);background:var(--al2-bg-subtle,#f9fafb);border:1px solid var(--al2-border,#e5e7eb);border-radius:14px;cursor:pointer;transition:all .15s;white-space:nowrap;}
.al2-bids-cat-chip:hover{background:#f3f4f6;border-color:#d1d5db;}
.al2-bids-cat-chip.active{color:#fff;background:var(--al2-primary,#6366f1);border-color:var(--al2-primary,#6366f1);font-weight:600;}
@media(max-width:640px){.al2-bids-cat-row{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:8px;}.al2-bids-cat-row::-webkit-scrollbar{display:none;}.al2-bids-cat-chip{flex-shrink:0;}}

/* sales filter bar */
.al2-bids-sales-filter-bar {
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  padding: 12px 14px;
  background: var(--al2-g50, #f9fafb);
  border: 1px solid var(--al2-g100);
  border-radius: var(--al2-radius-md, 8px);
}
.al2-bids-sales-filter-label {
  font-size: .72rem; font-weight: 700;
  color: var(--al2-g400, #9ca3af);
  text-transform: uppercase;
  letter-spacing: .3px;
  width: 100%;
  margin-bottom: 2px;
  display: flex; align-items: center; gap: 8px;
}
.al2-bids-filter-reset {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 10px;
  font-size: .68rem; font-weight: 600;
  color: var(--al2-red, #dc2626);
  background: var(--al2-red-light, #fef2f2);
  border: 1px solid rgba(220, 38, 38, .2);
  border-radius: var(--al2-radius-full, 20px);
  cursor: pointer;
  transition: all .15s;
  text-transform: none;
  letter-spacing: 0;
}
.al2-bids-filter-reset:hover {
  background: #fde8e8;
  border-color: rgba(220, 38, 38, .4);
}
.al2-bids-filter-reset i { font-size: .6rem; }

/* ═════════════════════════════════════════════════════════════════════════
   v2.4 (2026-04-13) — 낙찰 데이터 통합 UI
   - 기간 필터 segmented control (검색바 옆)
   - 낙찰완료 상태 배지 (AL2 브랜드 보라)
   - 사업명 옆 낙찰자 인라인 표기
   ───────────────────────────────────────────────────────────────────────
   회귀 보존: 어제 추가한 .al2-bids-status-tag.active/closed/completed,
              .al2-bids-row.row-closed 는 한 줄도 건드리지 않음.
   ═════════════════════════════════════════════════════════════════════════ */

/* 기간 필터 segmented control ─────────────────────────────────────────── */
.al2-bids-range-tabs {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 3px;
  background: var(--al2-g50, #f3f4f6);
  border: 1px solid var(--al2-g200, #e5e7eb);
  border-radius: 8px;
  margin-left: 8px;
  flex-shrink: 0;
}

.al2-bids-range-tab {
  appearance: none;
  border: 0;
  background: transparent;
  color: var(--al2-g600, #4b5563);
  font-size: 12px;
  font-weight: 500;
  padding: 6px 12px;
  border-radius: 6px;
  cursor: pointer;
  transition: background .15s ease, color .15s ease;
  white-space: nowrap;
  line-height: 1;
}

.al2-bids-range-tab:hover {
  background: rgba(108, 58, 224, .08);
  color: var(--al2-brand, #6C3AE0);
}

.al2-bids-range-tab.active {
  background: var(--al2-brand, #6C3AE0);
  color: #fff;
  font-weight: 600;
  box-shadow: 0 1px 2px rgba(74, 31, 184, .25);
}

.al2-bids-range-tab.active:hover {
  background: var(--al2-brand-dark, #4A1FB8);
  color: #fff;
}

@media (max-width: 768px) {
  .al2-bids-range-tabs {
    margin-left: 0;
    margin-top: 6px;
    width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  .al2-bids-range-tabs::-webkit-scrollbar { display: none; }
  .al2-bids-range-tab { flex-shrink: 0; padding: 5px 10px; font-size: 11px; }
}

/* 낙찰완료 상태 배지 ─────────────────────────────────────────────────────
   AL2 브랜드 보라색 시그니처. .row-closed의 회색조 위에 자연스럽게 얹힘. */
.al2-bids-status-tag.awarded {
  background: rgba(108, 58, 224, .12);
  color: var(--al2-brand, #6C3AE0);
  border: 1px solid rgba(108, 58, 224, .25);
  font-weight: 600;
  letter-spacing: -.2px;
}

/* 사업명 옆 낙찰자 인라인 ─────────────────────────────────────────────── */
.al2-bids-winner {
  display: inline-block;
  font-size: 11.5px;
  font-weight: 500;
  color: var(--al2-g500, #6b7280);
  margin-left: 6px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 180px;
  vertical-align: middle;
}

.al2-bids-row.row-closed .al2-bids-winner {
  color: var(--al2-g400, #9ca3af);
}

/* 사업명 앞 🏆 아이콘 (낙찰자 행 전용) ──────────────────────────────── */
.al2-bids-row-icon.awarded {
  opacity: .85;
  font-size: 13px;
}

/* ═══════════════════════════════════════════════════════════════
   v3 기관별/사업자별 분석 — Phase B + D (UX 개선)
   ═══════════════════════════════════════════════════════════════ */

/* Phase D-1: KPI 카드 위계 — primary 폭 1.5배, hover lift */
.al2-anlz-org-kpi {
  display: grid;
  grid-template-columns: 1.5fr 1fr 1fr 1fr;
  gap: 12px;
  margin-bottom: 18px;
}
.al2-anlz-org-kpi-card {
  background: #fff;
  border: 1px solid var(--al2-g200);
  border-radius: 10px;
  padding: 18px 20px;
  transition: transform .15s ease, box-shadow .15s ease;
  position: relative;
  overflow: hidden;
}
.al2-anlz-org-kpi-card:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(0,0,0,.06);
}
.al2-anlz-org-kpi-card.primary {
  background: linear-gradient(135deg, var(--al2-brand-dim), #fff);
  border-color: var(--al2-brand);
}
.al2-anlz-org-kpi-card.primary::before {
  content: '';
  position: absolute;
  top: 0; left: 0; bottom: 0;
  width: 4px;
  background: var(--al2-brand);
}
.al2-anlz-org-kpi-card .num {
  font-size: 1.75rem;
  font-weight: 800;
  color: var(--al2-g900);
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
}
.al2-anlz-org-kpi-card.primary .num { color: var(--al2-brand-dark); font-size: 2rem; }
.al2-anlz-org-kpi-card .lbl {
  font-size: .78rem;
  color: var(--al2-g600);
  margin-top: 4px;
  font-weight: 500;
}
/* Phase D-2: 빈값/집계대기 표시 */
.al2-anlz-org-kpi-card .num.pending {
  color: var(--al2-g300);
  font-size: 1rem;
  font-weight: 500;
}
.al2-anlz-org-kpi-card .num.pending::after {
  content: ' ⏳';
  font-size: .8rem;
}

.al2-anlz-org-toolbar {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 12px;
  flex-wrap: wrap;
}
.al2-anlz-org-toolbar .al2-anlz-search { flex: 1; min-width: 280px; }

.al2-anlz-org-pane {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: 16px;
  align-items: start;
}
@media (max-width: 1100px) {
  .al2-anlz-org-pane { grid-template-columns: 1fr; }
  .al2-anlz-org-kpi  { grid-template-columns: repeat(2, 1fr); }
}

.al2-anlz-org-list-wrap {
  background: #fff;
  border: 1px solid var(--al2-g200);
  border-radius: 8px;
  overflow: hidden;
}
/* Phase F: 최근 낙찰 5건 압축 + 더보기 */
.al2-anlz-recent-wrap.collapsed table tbody tr:nth-child(n+6) { display: none; }

/* 최근 낙찰/수주 내역 — table-layout: fixed로 행 수 무관하게 일관 폭 */
.al2-anlz-recent-wrap table { table-layout: fixed; width: 100%; }
.al2-anlz-recent-wrap th,
.al2-anlz-recent-wrap td { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
/* 사업명 — 남은 공간 전부 (auto fill) */
.al2-anlz-recent-wrap thead th:nth-child(2),
.al2-anlz-recent-wrap tbody td:nth-child(2) {
  width: auto;
}
.al2-anlz-recent-wrap thead th:nth-child(2) .al2-bids-row-title,
.al2-anlz-recent-wrap tbody td:nth-child(2) .al2-bids-row-title {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* 기타 컬럼 — 고정 폭 (더보기 후에도 일관) */
.al2-anlz-recent-wrap .col-num    { width: 28px;  text-align: center; padding: 0 2px; font-size: .7rem; }
.al2-anlz-recent-wrap .col-cat    { width: 56px;  text-align: center; padding: 0 2px; font-size: .68rem; }
.al2-anlz-recent-wrap .col-price  { width: 76px;  text-align: right;  padding: 0 6px; }
.al2-anlz-recent-wrap .col-date   { width: 64px;  text-align: center; padding: 0 2px; font-size: .7rem; }
.al2-anlz-recent-wrap .col-action { width: 32px;  text-align: center; padding: 0; }
.al2-anlz-recent-wrap td, .al2-anlz-recent-wrap th { padding: 6px 4px; }
.al2-anlz-recent-wrap thead th:nth-child(2),
.al2-anlz-recent-wrap tbody td:nth-child(2) { padding-left: 6px; padding-right: 6px; }
.al2-anlz-recent-toggle {
  display: block;
  width: 100%;
  padding: 10px;
  background: var(--al2-g50);
  border: 0;
  border-top: 1px solid var(--al2-g200);
  color: var(--al2-brand);
  font-size: .82rem;
  font-weight: 600;
  cursor: pointer;
  transition: background .12s;
}
.al2-anlz-recent-toggle:hover { background: var(--al2-g100); }

/* 알림 리스트 — N2 in-app bell */
.al2-alert-item {
  display: flex; gap: 10px; padding: 12px 14px;
  border-bottom: 1px solid var(--al2-g100);
  cursor: pointer; transition: background .12s;
}
.al2-alert-item:hover { background: var(--al2-g50); }
.al2-alert-item.unread { background: rgba(108,58,224,.04); border-left: 3px solid var(--al2-brand); padding-left: 11px; }
.al2-alert-item .al2-alert-icon { flex: 0 0 auto; font-size: 1.1rem; line-height: 1.2; }
.al2-alert-item .al2-alert-body { flex: 1; min-width: 0; }
.al2-alert-item .al2-alert-title { font-size: .85rem; font-weight: 600; color: var(--al2-g900); margin-bottom: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.al2-alert-item.unread .al2-alert-title { color: var(--al2-brand-dark); }
.al2-alert-item .al2-alert-msg { font-size: .72rem; color: var(--al2-g600); margin-bottom: 4px; }
.al2-alert-item .al2-alert-meta { display: flex; gap: 8px; font-size: .66rem; color: var(--al2-g500); }
.al2-alert-item .al2-alert-meta .type { background: var(--al2-g100); padding: 1px 6px; border-radius: 4px; }

/* 개찰결과상세 모달 — Phase 1 (영업대표용 액션 강화) */
.al2-sucbid-timeline { margin: 14px 0; padding: 12px 14px; background: var(--al2-g50); border-radius: 8px; }
.al2-sucbid-timeline-head { font-size: .68rem; font-weight: 700; color: var(--al2-g500); letter-spacing: .5px; margin-bottom: 10px; }
.al2-sucbid-timeline-track { display: flex; align-items: center; gap: 6px; }
.al2-sucbid-step { display: flex; flex-direction: column; align-items: center; gap: 2px; flex: 0 0 auto; }
.al2-sucbid-step .dot { width: 10px; height: 10px; border-radius: 50%; background: var(--al2-g300); }
.al2-sucbid-step.done .dot { background: var(--al2-brand); }
.al2-sucbid-step .lbl { font-size: .7rem; font-weight: 600; color: var(--al2-g800); }
.al2-sucbid-step.pending .lbl { color: var(--al2-g500); }
.al2-sucbid-step .dt { font-size: .65rem; color: var(--al2-g600); font-family: var(--al2-font-mono, monospace); }
.al2-sucbid-step .dt.hint { font-style: italic; }
.al2-sucbid-line { flex: 1; height: 2px; background: var(--al2-g300); }
.al2-sucbid-line.done { background: var(--al2-brand); }
.al2-sucbid-line.pending { background: repeating-linear-gradient(90deg, var(--al2-g300) 0 4px, transparent 4px 8px); }

.al2-sucbid-section { margin: 14px 0; }
.al2-sucbid-section-head { font-size: .72rem; font-weight: 700; color: var(--al2-g700); margin-bottom: 8px; }
.al2-sucbid-section-body { font-size: .75rem; color: var(--al2-g700); }
.al2-sucbid-empty { padding: 10px; background: var(--al2-g50); border-radius: 6px; color: var(--al2-g500); text-align: center; font-size: .72rem; }

.al2-sucbid-similar-item {
  display: block; padding: 8px 10px; margin-bottom: 4px;
  background: var(--al2-g50); border-radius: 6px; text-decoration: none; color: inherit;
  transition: background .12s;
}
.al2-sucbid-similar-item:hover { background: var(--al2-brand-dim); }
.al2-sucbid-similar-item .ti { font-size: .78rem; font-weight: 600; color: var(--al2-g900); margin-bottom: 4px; }
.al2-sucbid-similar-item .mt { display: flex; gap: 10px; font-size: .68rem; color: var(--al2-g600); }
.al2-sucbid-similar-item .mt .pr { font-weight: 700; color: var(--al2-brand); }
.al2-sucbid-similar-item .mt .dd { color: var(--al2-amber); font-weight: 600; }

.al2-sucbid-profile-grid {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px;
}
.al2-sucbid-profile-grid > div { padding: 10px; background: var(--al2-g50); border-radius: 6px; }
.al2-sucbid-profile-grid .k { font-size: .66rem; color: var(--al2-g500); margin-bottom: 3px; }
.al2-sucbid-profile-grid .v { font-size: .92rem; font-weight: 700; color: var(--al2-g900); }
.al2-sucbid-profile-grid .v.small { font-size: .82rem; }

.al2-sucbid-note {
  margin: 10px 0; padding: 8px 10px;
  background: var(--al2-g50); border-left: 3px solid var(--al2-g300);
  font-size: .68rem; color: var(--al2-g500); border-radius: 4px;
}
.al2-sucbid-note i { margin-right: 4px; }

.al2-sucbid-actions {
  position: sticky; bottom: 0; left: 0; right: 0;
  display: flex; gap: 6px; padding: 12px 0 4px;
  margin-top: 16px; background: linear-gradient(to top, #fff 70%, rgba(255,255,255,0));
  flex-wrap: wrap;
}
.al2-sucbid-action {
  flex: 1; min-width: 0;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 10px 12px; background: var(--al2-brand); color: #fff;
  border: 0; border-radius: 6px; font-size: .75rem; font-weight: 600;
  cursor: pointer; transition: background .12s;
  white-space: nowrap;
}
.al2-sucbid-action:hover { background: var(--al2-brand-dark); }
.al2-sucbid-action.ghost { background: transparent; color: var(--al2-g700); border: 1px solid var(--al2-g300); }
.al2-sucbid-action.ghost:hover { background: var(--al2-g100); }

/* 관심기관 진행중 공고 모달 */
.al2-orgmod-section { margin-bottom: 18px; }
.al2-orgmod-section-head {
  display: flex; align-items: center; gap: 8px;
  font-size: .82rem; font-weight: 700; color: var(--al2-g800);
  padding: 8px 12px; background: var(--al2-g50); border-radius: 6px;
  margin-bottom: 8px;
}
.al2-orgmod-section-head .cnt {
  background: var(--al2-brand-dim); color: var(--al2-brand-dark);
  padding: 1px 8px; border-radius: 10px; font-size: .7rem;
}
.al2-orgmod-item {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px; border-bottom: 1px solid var(--al2-g100);
  text-decoration: none; color: inherit; transition: background .12s;
  cursor: pointer;
}
.al2-orgmod-item:hover { background: rgba(108,58,224,.04); }
.al2-orgmod-ext {
  color: var(--al2-g400); font-size: .75rem;
  flex: 0 0 auto;
  transition: color .12s;
}
.al2-orgmod-item:hover .al2-orgmod-ext { color: var(--al2-brand); }
.al2-orgmod-main { flex: 1; min-width: 0; }
.al2-orgmod-title {
  font-size: .82rem; font-weight: 600; color: var(--al2-g900);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.al2-orgmod-meta {
  display: flex; gap: 12px; font-size: .68rem; color: var(--al2-g600); margin-top: 3px;
}
.al2-orgmod-meta .no { font-family: var(--al2-font-mono, monospace); }
.al2-orgmod-meta .amt { color: var(--al2-brand); font-weight: 700; }
.al2-orgmod-dday {
  flex: 0 0 auto; padding: 4px 10px; border-radius: 12px;
  background: var(--al2-g100); color: var(--al2-g700);
  font-size: .7rem; font-weight: 700; font-variant-numeric: tabular-nums;
}
.al2-orgmod-dday.urgent  { background: #fde2e1; color: #c0392b; }
.al2-orgmod-dday.warning { background: #fff3cd; color: #856404; }

/* Sprint B1 — 관심공고 (북마크) 필터·테이블 */
.al2-bmk-pipeline-link {
  margin-left: 12px; font-size: .72rem; color: var(--al2-brand);
  text-decoration: none; font-weight: 600;
}
.al2-bmk-pipeline-link:hover { text-decoration: underline; }

.al2-bmk-filters {
  display: flex; gap: 12px; align-items: center; flex-wrap: wrap;
  margin: 12px 0; padding: 10px; background: var(--al2-g50); border-radius: 8px;
}
.al2-bmk-stages { display: flex; gap: 4px; flex-wrap: wrap; }
.al2-bmk-chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 5px 12px; background: #fff; color: var(--al2-g700);
  border: 1px solid var(--al2-g300); border-radius: 14px;
  font-size: .74rem; font-weight: 600; cursor: pointer; transition: all .12s;
}
.al2-bmk-chip:hover { border-color: var(--al2-brand); color: var(--al2-brand); }
.al2-bmk-chip.on { background: var(--al2-brand); color: #fff; border-color: var(--al2-brand); }
.al2-bmk-chip .cnt {
  background: rgba(0,0,0,.08); padding: 0 5px; border-radius: 8px;
  font-size: .65rem;
}
.al2-bmk-chip.on .cnt { background: rgba(255,255,255,.25); }

.al2-bmk-controls { display: flex; gap: 8px; align-items: center; flex: 1; min-width: 280px; }
.al2-bmk-dday {
  padding: 5px 10px; border: 1px solid var(--al2-g300); border-radius: 6px;
  font-size: .76rem; background: #fff; cursor: pointer;
}

/* 단계 배지 */
.al2-bmk-stage-tag {
  display: inline-block; padding: 2px 8px; border-radius: 10px;
  font-size: .68rem; font-weight: 700; white-space: nowrap;
}
.al2-bmk-stage-tag.stage-d { background: var(--al2-g200); color: var(--al2-g700); }
.al2-bmk-stage-tag.stage-r { background: #e5f1ff; color: #1e5fa8; }
.al2-bmk-stage-tag.stage-p { background: var(--al2-brand-dim); color: var(--al2-brand-dark); }
.al2-bmk-stage-tag.stage-s { background: #d4edda; color: #155724; }

/* 북마크 테이블 */
.al2-bmk-table table { table-layout: fixed; width: 100%; }
.al2-bmk-table th, .al2-bmk-table td { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 8px 6px; }
.al2-bmk-table .bmk-stage { width: 58px; text-align: center; }
.al2-bmk-table .bmk-cat   { width: 90px; text-align: center; }
.al2-bmk-table .bmk-title { width: auto; }
.al2-bmk-table .bmk-org   { width: 160px; }
.al2-bmk-table .bmk-amt   { width: 88px; text-align: right; }
.al2-bmk-table .bmk-date  { width: 76px; text-align: center; font-size: .7rem; color: var(--al2-g600); }
.al2-bmk-table .bmk-dday  { width: 64px; text-align: center; }
.al2-bmk-table .bmk-act   { width: 130px; text-align: right; }

.al2-bmk-table tbody tr.bmk-closed { opacity: .55; background: var(--al2-g50); }

.al2-bmk-actions { display: flex; gap: 2px; justify-content: flex-end; opacity: 0; transition: opacity .12s; }
.al2-bmk-table tbody tr:hover .al2-bmk-actions { opacity: 1; }
.al2-bmk-ibtn {
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--al2-brand-dim); color: var(--al2-brand);
  border: 0; cursor: pointer; font-size: .7rem;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background .12s, color .12s;
}
.al2-bmk-ibtn:hover { background: var(--al2-brand); color: #fff; }
.al2-bmk-ibtn.danger { background: #fde2e1; color: #c0392b; }
.al2-bmk-ibtn.danger:hover { background: #c0392b; color: #fff; }

/* Phase M1 — 영업관리 이동 CTA + 영업관리 필터바 */
.al2-bmk-pipeline-cta {
  display: flex; align-items: center; gap: 14px;
  margin-top: 16px; padding: 14px 18px;
  background: linear-gradient(135deg, var(--al2-brand-dim), #fff);
  border: 1px solid var(--al2-brand);
  border-radius: 10px;
  text-decoration: none; color: inherit;
  transition: transform .12s, box-shadow .12s;
}
.al2-bmk-pipeline-cta:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(108,58,224,.12);
}
.al2-bmk-pipeline-cta .cta-icon {
  width: 44px; height: 44px; border-radius: 50%;
  background: var(--al2-brand); color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 1.1rem; flex: 0 0 auto;
}
.al2-bmk-pipeline-cta .cta-body { flex: 1; min-width: 0; }
.al2-bmk-pipeline-cta .cta-title {
  font-size: .95rem; font-weight: 700; color: var(--al2-brand-dark); margin-bottom: 3px;
}
.al2-bmk-pipeline-cta .cta-desc { font-size: .75rem; color: var(--al2-g700); }
.al2-bmk-pipeline-cta .cta-arrow { color: var(--al2-brand); font-size: .9rem; transition: transform .12s; }
.al2-bmk-pipeline-cta:hover .cta-arrow { transform: translateX(4px); }

.al2-bmk-sec-desc { font-size: .7rem; color: var(--al2-g500); font-weight: 400; margin-left: 8px; }

/* 영업관리 필터바 */
.al2-sales-filterbar {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  margin: 12px 0; padding: 10px 12px;
  background: var(--al2-g50); border-radius: 8px;
}
.al2-sales-dday {
  padding: 6px 10px; border: 1px solid var(--al2-g300); border-radius: 6px;
  font-size: .76rem; background: #fff; cursor: pointer;
}

/* Sprint B2 — 뷰 토글 + 칸반 */
.al2-bmk-view-toggle { display: inline-flex; gap: 2px; background: var(--al2-g100); border-radius: 8px; padding: 3px; }
.al2-bmk-view-btn {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 5px 12px; background: transparent; border: 0; cursor: pointer;
  color: var(--al2-g600); font-size: .74rem; font-weight: 600;
  border-radius: 6px; transition: all .12s;
}
.al2-bmk-view-btn:hover { color: var(--al2-brand); }
.al2-bmk-view-btn.on { background: #fff; color: var(--al2-brand-dark); box-shadow: 0 1px 3px rgba(0,0,0,.08); }

.al2-bmk-kanban {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
  margin-top: 10px;
}
@media (max-width: 1200px) { .al2-bmk-kanban { grid-template-columns: repeat(2, 1fr); } }
.al2-bmk-kan-col {
  background: var(--al2-g50); border-radius: 8px; padding: 10px;
  min-height: 240px; border-top: 3px solid var(--al2-g300);
}
.al2-bmk-kan-col.stage-d { border-top-color: var(--al2-g500); }
.al2-bmk-kan-col.stage-r { border-top-color: #1e5fa8; }
.al2-bmk-kan-col.stage-p { border-top-color: var(--al2-brand); }
.al2-bmk-kan-col.stage-s { border-top-color: #1e7a4d; }

.al2-bmk-kan-head {
  display: flex; align-items: center; justify-content: space-between;
  font-size: .82rem; font-weight: 700; color: var(--al2-g900);
}
.al2-bmk-kan-head .cnt {
  background: rgba(0,0,0,.08); padding: 1px 8px; border-radius: 10px;
  font-size: .7rem; font-weight: 600;
}
.al2-bmk-kan-desc { font-size: .66rem; color: var(--al2-g500); margin: 2px 0 10px; }
.al2-bmk-kan-list { display: flex; flex-direction: column; gap: 8px; }
.al2-bmk-kan-empty {
  padding: 20px 0; text-align: center; color: var(--al2-g400);
  font-size: .72rem; border: 1px dashed var(--al2-g300); border-radius: 6px;
}

.al2-bmk-kan-card {
  background: #fff; border: 1px solid var(--al2-g200); border-radius: 8px;
  padding: 10px 12px; cursor: pointer; transition: transform .12s, box-shadow .12s;
  position: relative;
}
.al2-bmk-kan-card:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(0,0,0,.08);
  border-color: var(--al2-brand);
}
.al2-bmk-kan-card.closed { opacity: .5; }
.al2-bmk-kan-title {
  font-size: .82rem; font-weight: 600; color: var(--al2-g900); line-height: 1.35;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.al2-bmk-kan-org { font-size: .68rem; color: var(--al2-g600); margin: 4px 0; }
.al2-bmk-kan-foot {
  display: flex; justify-content: space-between; align-items: center;
  font-size: .7rem;
}
.al2-bmk-kan-foot .amt { font-weight: 700; color: var(--al2-brand); }
.al2-bmk-kan-foot .amt.dim { color: var(--al2-g400); }
.al2-bmk-kan-actions {
  display: flex; gap: 2px; margin-top: 6px;
  opacity: 0; transition: opacity .12s;
}
.al2-bmk-kan-card:hover .al2-bmk-kan-actions { opacity: 1; }

/* Sprint F2 — 다음 액션 + 메모 */
.al2-next-list { border: 1px solid var(--al2-g200); border-radius: 8px; background: #fff; overflow: hidden; }
.al2-next-item {
  display: flex; align-items: center; gap: 12px; padding: 10px 14px;
  border-bottom: 1px solid var(--al2-g100); cursor: pointer; transition: background .12s;
}
.al2-next-item:last-child { border-bottom: 0; }
.al2-next-item:hover { background: var(--al2-g50); }
.al2-next-item.org-opportunity { background: rgba(108,58,224,.04); }
.al2-next-dday {
  flex: 0 0 auto; width: 52px; text-align: center;
  padding: 6px 0; border-radius: 6px;
  font-size: .72rem; font-weight: 700; font-variant-numeric: tabular-nums;
}
.al2-next-dday.urgent  { background: #fde2e1; color: #c0392b; }
.al2-next-dday.warning { background: #fff3cd; color: #856404; }
.al2-next-dday.active  { background: var(--al2-brand-dim); color: var(--al2-brand-dark); }
.al2-next-main { flex: 1; min-width: 0; }
.al2-next-title {
  font-size: .85rem; font-weight: 600; color: var(--al2-g900);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.al2-next-meta {
  display: flex; gap: 10px; font-size: .7rem; color: var(--al2-g600); margin-top: 3px;
}
.al2-next-meta .hint { color: var(--al2-brand-dark); font-weight: 600; }
.al2-next-go {
  color: var(--al2-g300); font-size: .8rem;
  transition: color .12s, transform .12s;
  cursor: pointer;
}
.al2-next-item:hover .al2-next-go { color: var(--al2-brand); }

.al2-next-actions {
  display: flex; gap: 2px; opacity: 0;
  transition: opacity .12s;
}
.al2-next-item:hover .al2-next-actions { opacity: 1; }
.al2-next-act {
  width: 26px; height: 26px; border-radius: 50%;
  background: rgba(108,58,224,.08); color: var(--al2-brand);
  border: 0; cursor: pointer; font-size: .7rem;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background .12s, color .12s;
}
.al2-next-act:hover { background: var(--al2-brand); color: #fff; }
.al2-next-act.primary { background: var(--al2-brand); color: #fff; }
.al2-next-act.primary:hover { background: var(--al2-brand-dark); }

.al2-fav-memo {
  display: flex; align-items: center; gap: 6px;
  padding: 6px 10px; margin: 6px 0 0;
  background: #fffbeb; border: 1px solid #fde68a; border-radius: 6px;
  color: #92400e; font-size: .72rem;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.al2-fav-memo i { color: #d97706; flex: 0 0 auto; }

/* Sprint F1 — 내 관심목록 고도화 */
.al2-fav-sec-stats { display: inline-flex; gap: 6px; margin-left: 10px; vertical-align: middle; }
.al2-fav-sec-stat {
  display: inline-block; padding: 2px 8px; border-radius: 8px;
  background: var(--al2-g100); color: var(--al2-g700);
  font-size: .7rem; font-weight: 600;
}
.al2-fav-sec-stat.active { background: var(--al2-brand-dim); color: var(--al2-brand-dark); }
.al2-fav-sec-stat.rel-competitor { background: #fde2e1; color: #c0392b; }
.al2-fav-sec-stat.rel-partner    { background: #e0f2e9; color: #1e7a4d; }
.al2-fav-sec-stat.rel-reference  { background: #fff3cd; color: #856404; }

.al2-fav-controls { display: flex; gap: 8px; align-items: center; }
.al2-fav-sort, .al2-fav-group {
  padding: 5px 10px; border: 1px solid var(--al2-g300); border-radius: 6px;
  font-size: .76rem; background: #fff; cursor: pointer;
}

.al2-fav-group-block { margin-bottom: 18px; }
.al2-fav-group-head {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 12px; border-radius: 14px;
  font-size: .78rem; font-weight: 700;
  margin: 8px 0;
}
.al2-fav-group-head .cnt {
  background: rgba(255,255,255,.3); padding: 0 8px;
  border-radius: 10px; font-size: .68rem;
}
.al2-fav-group-head.competitor { background: #fde2e1; color: #c0392b; }
.al2-fav-group-head.partner    { background: #e0f2e9; color: #1e7a4d; }
.al2-fav-group-head.reference  { background: #fff3cd; color: #856404; }
.al2-fav-group-head.none       { background: var(--al2-g100); color: var(--al2-g700); }

.al2-fav-card-sub {
  font-size: .7rem; color: var(--al2-g500); margin: 2px 0 8px;
}
.al2-fav-card-metrics {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px;
  padding: 8px; background: var(--al2-g50); border-radius: 6px; margin: 8px 0;
}
.al2-fav-card-metrics > div {
  text-align: center; min-width: 0;
}
.al2-fav-card-metrics .n {
  display: block; font-size: .8rem; font-weight: 700;
  color: var(--al2-g900); font-variant-numeric: tabular-nums;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.al2-fav-card-metrics .l {
  display: block; font-size: .62rem; color: var(--al2-g500);
  margin-top: 2px;
}
.al2-fav-card-metrics.dim {
  padding: 10px; text-align: center;
  font-size: .7rem; color: var(--al2-g400); font-style: italic;
  grid-template-columns: 1fr;
}

.al2-fav-active-pill {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 8px; margin: 4px 0;
  background: var(--al2-brand-dim); color: var(--al2-brand-dark);
  border-radius: 10px; font-size: .68rem; font-weight: 700;
}
.al2-fav-active-pill.urgent { background: #fde2e1; color: #c0392b; }

.al2-fav-card-actions {
  display: flex; gap: 4px; justify-content: flex-end; margin-top: 6px;
  opacity: 0; transition: opacity .12s;
}
.al2-anlz-fav-card:hover .al2-fav-card-actions { opacity: 1; }
.al2-fav-ibtn {
  width: 28px; height: 28px; border-radius: 50%;
  background: var(--al2-brand-dim); color: var(--al2-brand);
  border: 0; cursor: pointer; font-size: .75rem;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background .12s, color .12s;
}
.al2-fav-ibtn:hover { background: var(--al2-brand); color: #fff; }

/* Sprint S1 — 낙찰현황 개인화·이상치 필터 */
.al2-anlz-sucbid-filters {
  display: flex; gap: 8px; align-items: center; margin-top: 10px; flex-wrap: wrap;
}
.al2-anlz-sucbid-toggle {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 6px 12px; background: #fff; color: var(--al2-g700);
  border: 1px solid var(--al2-g300); border-radius: 16px;
  font-size: .76rem; font-weight: 600; cursor: pointer; transition: all .12s;
}
.al2-anlz-sucbid-toggle:hover { border-color: var(--al2-brand); color: var(--al2-brand); }
.al2-anlz-sucbid-toggle.on {
  background: var(--al2-brand); color: #fff; border-color: var(--al2-brand);
}
.al2-anlz-sucbid-amount {
  padding: 6px 10px; border: 1px solid var(--al2-g300); border-radius: 8px;
  font-size: .76rem; background: #fff; cursor: pointer;
}

/* 이상치 배지 (사업명 셀 내부) */
/* v3.8 (2026-04-28) 영업대표 추천: 카테고리/지역 chip rail */
.al2-anlz-chip-rail{
  display: flex; align-items: center; flex-wrap: wrap; gap: 4px;
  font-size: .72rem;
}
.al2-anlz-chip-label{
  color: var(--al2-g500); font-weight: 600; margin-right: 4px;
  font-size: .68rem;
}
.al2-anlz-chip-mini{
  padding: 3px 10px; border: 1px solid var(--al2-g200); border-radius: 999px;
  background: #fff; color: var(--al2-g600); font-size: .7rem; font-weight: 500;
  cursor: pointer; transition: all .12s;
  white-space: nowrap;
}
.al2-anlz-chip-mini:hover{
  border-color: var(--al2-brand); color: var(--al2-brand);
}
.al2-anlz-chip-mini.on{
  background: var(--al2-brand); color: #fff; border-color: var(--al2-brand);
}

/* v3.8: 예산 → 낙찰 + 절감액 한 칸 표시 */
.al2-sucbid-price-cell{
  display: flex; flex-direction: column; gap: 1px; line-height: 1.2; min-width: 100px;
}
.al2-sucbid-price-cell .al2-sucbid-price-est{
  font-size: .65rem; color: var(--al2-g500);
}
.al2-sucbid-price-cell .al2-sucbid-price-won{
  font-size: .82rem; font-weight: 700; color: var(--al2-g900);
}
.al2-sucbid-price-cell .al2-sucbid-price-diff{
  font-size: .65rem; font-weight: 600;
}
.al2-sucbid-price-cell .al2-sucbid-price-diff.save{ color: #16a34a; }
.al2-sucbid-price-cell .al2-sucbid-price-diff.over{ color: #dc2626; }

/* v3.8: 행동 컬럼 — 유사 공고 링크 */
.al2-bids-table .col-action{ text-align: center; width: 70px; white-space: nowrap; }
.al2-sucbid-action-link{
  display: inline-flex; align-items: center; gap: 3px;
  padding: 3px 8px; background: #f3f4f6; color: #4b5563;
  font-size: .7rem; font-weight: 600; text-decoration: none;
  border-radius: 6px; transition: all .12s;
}
.al2-sucbid-action-link:hover{
  background: var(--al2-brand-dim); color: var(--al2-brand);
}
.al2-sucbid-action-link i{ font-size: .65rem; }

/* v3.8: 카르텔/신규진입 칩 */
.al2-sucbid-anom.cartel{ background: #fee2e2; color: #991b1b; }
.al2-sucbid-anom.newent{ background: #d1fae5; color: #065f46; }

/* v3.8: 상단 시각화 — 일별 추이 + 카테고리 도넛 + Top 5 업체 */
.al2-sucbid-viz-grid{
  display: grid; grid-template-columns: 1.3fr 1fr 1fr; gap: 12px;
  margin-top: 14px;
}
@media (max-width: 1024px){ .al2-sucbid-viz-grid{ grid-template-columns: 1fr; } }
.al2-sucbid-viz-card{
  background: #fff; border: 1px solid var(--al2-g100); border-radius: 10px;
  padding: 12px; min-height: 180px;
}
.al2-sucbid-viz-title{
  font-size: .76rem; font-weight: 700; color: var(--al2-g700); margin-bottom: 8px;
}
.al2-sucbid-viz-wrap{
  position: relative; height: 150px;
}
.al2-sucbid-top-list{ display: flex; flex-direction: column; gap: 6px; }
.al2-sucbid-top-row{
  display: flex; align-items: center; gap: 8px;
  font-size: .72rem; padding: 4px 0;
  border-bottom: 1px dashed var(--al2-g100);
}
.al2-sucbid-top-row:last-child{ border-bottom: none; }
.al2-sucbid-top-rank{
  display: inline-flex; align-items: center; justify-content: center;
  width: 18px; height: 18px; border-radius: 50%;
  background: var(--al2-brand-dim); color: var(--al2-brand);
  font-size: .65rem; font-weight: 700;
}
.al2-sucbid-top-name{
  flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; color: var(--al2-g800); font-weight: 600;
}
.al2-sucbid-top-meta{ color: var(--al2-g500); font-size: .68rem; white-space: nowrap; }
.al2-sucbid-top-empty{ color: var(--al2-g400); font-size: .72rem; text-align: center; padding: 30px 0; }

/* v3.8: 낙찰업체 클릭 trigger + 미니 프로필 popover */
.al2-sucbid-winner-trigger{ cursor: pointer; border-bottom: 1px dotted var(--al2-g300); }
.al2-sucbid-winner-trigger:hover{ color: var(--al2-brand); border-bottom-color: var(--al2-brand); }
.al2-sucbid-winner-popover{
  position: fixed; z-index: 9999;
  background: #fff; border: 1px solid var(--al2-g200);
  border-radius: 10px; box-shadow: 0 12px 30px rgba(0,0,0,0.16);
  padding: 12px; width: 280px;
  font-size: .72rem;
  /* v3.9 (2026-04-28): 작은 뷰포트(노트북·작업표시줄)에서 본문 보장 */
  max-height: calc(100vh - 16px);
  overflow-y: auto;
}
.al2-sucbid-pop-head{ display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--al2-g100); }
.al2-sucbid-pop-head strong{ font-size: .82rem; color: var(--al2-g900); }
.al2-sucbid-pop-close{
  background: transparent; border: none; cursor: pointer;
  font-size: 1rem; color: var(--al2-g400); padding: 0 4px;
}
.al2-sucbid-pop-close:hover{ color: var(--al2-g700); }
.al2-sucbid-pop-stats{
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px;
  margin-bottom: 10px;
}
.al2-sucbid-pop-stats > div{
  display: flex; flex-direction: column; gap: 2px; align-items: center;
  padding: 6px 4px; background: #f9fafb; border-radius: 6px;
}
.al2-sucbid-pop-stats .lbl{ font-size: .62rem; color: var(--al2-g500); }
.al2-sucbid-pop-stats .val{ font-size: .76rem; font-weight: 700; color: var(--al2-g900); }
.al2-sucbid-pop-section{ margin-top: 8px; }
.al2-sucbid-pop-section-title{
  font-size: .65rem; font-weight: 700; color: var(--al2-g500);
  text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 4px;
}
.al2-sucbid-pop-item{
  display: flex; justify-content: space-between; padding: 3px 0;
  color: var(--al2-g700);
}
.al2-sucbid-pop-item span{ color: var(--al2-g500); font-size: .68rem; }

/* v3.8 (2026-04-28) Tier 1: 검색 UX 글로벌 표준화 (Linear/Stripe/GitHub 패턴) */

/* A. 활성 필터 pill */
.al2-sucbid-active-pills{
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  margin-top: 8px; min-height: 0;
}
.al2-sucbid-active-pills:empty{ display: none; }
.al2-sucbid-pill{
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 8px 4px 10px;
  background: #ede9fe; color: #5b21b6;
  border: 1px solid #ddd6fe;
  border-radius: 999px;
  font-size: .7rem; font-weight: 600;
  white-space: nowrap;
}
.al2-sucbid-pill-x{
  background: transparent; border: none; cursor: pointer;
  color: #7c3aed; font-size: 1rem; line-height: 1;
  padding: 0 2px 0 4px;
  border-radius: 50%;
}
.al2-sucbid-pill-x:hover{ background: #c4b5fd; color: #4c1d95; }
.al2-sucbid-pill-clear-all{
  background: transparent; border: none; cursor: pointer;
  color: #6b7280; font-size: .7rem; font-weight: 600;
  text-decoration: underline;
  padding: 4px 6px;
}
.al2-sucbid-pill-clear-all:hover{ color: #dc2626; }

/* B. Instant search input — 단축키 hint kbd */
.al2-sucbid-search-wrap{ position: relative; }
.al2-sucbid-kbd{
  position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
  background: #f3f4f6; color: #6b7280;
  border: 1px solid #d1d5db; border-radius: 4px;
  font-size: .65rem; font-weight: 600; font-family: var(--al2-font-mono);
  padding: 1px 6px; line-height: 1.4;
  pointer-events: none;
  box-shadow: 0 1px 0 #d1d5db;
}
.al2-sucbid-search-wrap input:focus ~ .al2-sucbid-kbd{ display: none; }

/* C. 최근 검색 dropdown */
.al2-sucbid-recent{
  position: absolute; top: calc(100% + 4px); left: 0; right: 0;
  background: #fff; border: 1px solid var(--al2-g200);
  border-radius: 8px; box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
  z-index: 100; max-height: 320px; overflow-y: auto;
  padding: 4px 0;
}
.al2-sucbid-recent[hidden]{ display: none; }
.al2-sucbid-recent-head{
  padding: 6px 12px; font-size: .65rem; font-weight: 700;
  color: var(--al2-g500); text-transform: uppercase; letter-spacing: 0.04em;
}
.al2-sucbid-recent-item{
  display: flex; align-items: center; gap: 8px;
  padding: 6px 12px; cursor: pointer;
  font-size: .76rem; color: var(--al2-g700);
}
.al2-sucbid-recent-item:hover{ background: #f3f4f6; }
.al2-sucbid-recent-item i{ color: var(--al2-g400); font-size: .7rem; }
.al2-sucbid-recent-item span{ flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.al2-sucbid-recent-clear{
  padding: 6px 12px; font-size: .68rem; color: #dc2626;
  cursor: pointer; border-top: 1px solid var(--al2-g100);
  margin-top: 4px; text-align: center; font-weight: 600;
}
.al2-sucbid-recent-clear:hover{ background: #fef2f2; }


/* v3.8 (2026-04-28): 입찰공고 검색 input 폭 2배 (220→440px / min 320px) — 위치 그대로 */
.al2-bids-search-inline.al2-bn-search-2x{
  flex: 0 1 440px;
  min-width: 320px;
}

/* v3.8 (2026-04-28) D: Floating 검색 버튼 — 결과 멀리 스크롤 시 등장 */
.al2-bn-floating-search{
  position: fixed;
  right: 24px;
  bottom: 24px;
  width: 48px; height: 48px;
  border-radius: 50%;
  border: none;
  background: var(--al2-brand);
  color: #fff;
  font-size: 1.1rem;
  cursor: pointer;
  box-shadow: 0 6px 20px rgba(108, 58, 224, 0.35);
  display: flex; align-items: center; justify-content: center;
  z-index: 9990;
  transition: transform .15s ease, box-shadow .15s ease;
  animation: al2BnFabIn .25s ease-out;
}
.al2-bn-floating-search:hover{
  transform: scale(1.06);
  box-shadow: 0 8px 24px rgba(108, 58, 224, 0.45);
}
@keyframes al2BnFabIn {
  from { transform: scale(0.7); opacity: 0; }
  to   { transform: scale(1);   opacity: 1; }
}

/* Tier 1.D: 사업자번호 자동 인식 hint */
.al2-anlz-bizno-hint{
  position: absolute; top: calc(100% + 4px); left: 0; right: 0;
  background: #fef3c7; color: #92400e;
  border: 1px solid #fcd34d; border-radius: 6px;
  padding: 6px 12px; font-size: .72rem;
  font-weight: 600;
  display: flex; align-items: center; gap: 6px;
  z-index: 99;
}
.al2-anlz-bizno-hint[hidden]{ display: none; }
.al2-anlz-bizno-hint i{ color: #d97706; font-size: .8rem; }
.al2-anlz-bizno-hint strong{ color: #78350f; }
/* recent dropdown과 bizno-hint 동시 표시 시 hint를 위로 */
.al2-anlz-search-wrap .al2-sucbid-recent:not([hidden]) ~ .al2-anlz-bizno-hint{
  top: auto; bottom: calc(100% + 4px);
}

/* v3.8 (2026-04-28): Slide-over 미리보기 패널 — Linear/Stripe 패턴 */
.al2-similar-backdrop{
  position: fixed; inset: 0; background: rgba(15, 23, 42, 0.35);
  z-index: 9998; opacity: 0; transition: opacity .2s;
}
.al2-similar-backdrop.on{ opacity: 1; }
.al2-similar-panel{
  position: fixed; top: 0; right: 0; bottom: 0; width: 460px;
  max-width: 90vw; background: #fff; z-index: 9999;
  box-shadow: -8px 0 30px rgba(0, 0, 0, 0.18);
  display: flex; flex-direction: column;
  transform: translateX(100%); transition: transform .25s ease-out;
}
.al2-similar-panel.on{ transform: translateX(0); }
.al2-similar-head{
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 18px; border-bottom: 1px solid var(--al2-g100);
}
.al2-similar-title{
  font-size: .82rem; font-weight: 700; color: var(--al2-g900);
  display: flex; align-items: center; gap: 6px;
}
.al2-similar-title i{ color: var(--al2-brand); font-size: .76rem; }
.al2-similar-close{
  background: transparent; border: none; cursor: pointer;
  font-size: 1.4rem; color: var(--al2-g400); padding: 0 6px; line-height: 1;
}
.al2-similar-close:hover{ color: var(--al2-g700); }
.al2-similar-body{
  flex: 1; overflow-y: auto; padding: 12px 16px;
}
.al2-similar-loading, .al2-similar-empty{
  text-align: center; padding: 60px 20px; color: var(--al2-g500);
  font-size: .8rem;
}
.al2-similar-loading i{ margin-right: 6px; color: var(--al2-brand); }
.al2-similar-section{ margin-bottom: 18px; }
.al2-similar-section-head{
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 6px; padding-bottom: 4px; border-bottom: 1px solid var(--al2-g100);
}
.al2-similar-section-label{
  font-size: .68rem; font-weight: 700; padding: 2px 8px; border-radius: 999px;
  letter-spacing: 0.02em;
}
.al2-similar-section-label.pre{ background: #dbeafe; color: #1d4ed8; }
.al2-similar-section-label.bid{ background: #ede9fe; color: #6c3ae0; }
.al2-similar-section-count{ font-size: .68rem; color: var(--al2-g500); font-weight: 600; }
.al2-similar-row{
  display: block; padding: 10px 12px; margin-bottom: 6px;
  background: #f9fafb; border: 1px solid var(--al2-g100);
  border-radius: 8px; text-decoration: none;
  transition: all .12s;
}
.al2-similar-row:hover{
  background: #fff; border-color: var(--al2-brand);
  transform: translateX(-2px);
  box-shadow: 0 4px 12px rgba(108, 58, 224, 0.08);
}
.al2-similar-name{
  font-size: .76rem; font-weight: 600; color: var(--al2-g900);
  margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap;
}
.al2-similar-meta{
  font-size: .68rem; color: var(--al2-g500);
}
.al2-similar-foot{
  padding: 12px 18px; border-top: 1px solid var(--al2-g100);
  background: #fafafb;
}
.al2-similar-jump{
  display: block; text-align: center; padding: 10px;
  background: var(--al2-brand); color: #fff;
  font-size: .76rem; font-weight: 600;
  border-radius: 8px; text-decoration: none;
  transition: background .12s;
}
.al2-similar-jump:hover{ background: var(--al2-brand-dark, #5b2cc4); }

/* 모바일 */
@media (max-width: 640px){
  .al2-similar-panel{ width: 100%; }
}

/* 낙찰현황 — 사업명/발주기관/낙찰업체 셀 모두 nowrap.
   한국어는 글자 사이 어디든 break되므로 셀 단위 nowrap 필수. 컬럼 너비는 table auto가 결정.
   max-width/flex 제거 → 컬럼 자연스러운 width, 칩이 텍스트 바로 옆에 붙음. */
.al2-anlz-sucbid-item > .col-title,
.al2-anlz-sucbid-item > .col-org{
  white-space: nowrap;
}

.al2-sucbid-anom {
  display: inline-block; padding: 1px 6px; margin-left: 4px;
  border-radius: 8px; font-size: .62rem; font-weight: 700;
  vertical-align: middle;
}
.al2-sucbid-anom.solo { background: #fde2e1; color: #c0392b; }
.al2-sucbid-anom.dump { background: #ffe5cc; color: #d35400; }
.al2-sucbid-anom.hot  { background: #e5ecff; color: #1a40a8; }

/* 내 영역 태그 */
.al2-sucbid-scope-tag {
  display: inline-block; padding: 1px 6px; margin-left: 4px;
  background: var(--al2-brand-dim); color: var(--al2-brand-dark);
  border-radius: 8px; font-size: .62rem; font-weight: 700;
}

/* 행 하이라이트 */
.al2-anlz-sucbid-item.scope-org td.col-org:nth-of-type(3) {
  border-left: 3px solid var(--al2-brand);
}
.al2-anlz-sucbid-item.scope-biz td.col-org:nth-of-type(4) {
  background: var(--al2-brand-dim);
}
.al2-anlz-sucbid-item.scope-kw td.col-title {
  box-shadow: inset 3px 0 0 var(--al2-amber, #f39c12);
}

/* Sprint 1 — 통합 분석 개인화 섹션 */
.al2-int-hero {
  display: flex; align-items: center; gap: 14px;
  padding: 16px 20px; margin-bottom: 14px;
  background: linear-gradient(135deg, var(--al2-brand-dim), #fff);
  border: 1px solid var(--al2-brand);
  border-radius: 10px;
}
.al2-int-hero-ico { font-size: 1.8rem; flex: 0 0 auto; }
.al2-int-hero-label {
  font-size: .68rem; font-weight: 700; color: var(--al2-brand-dark);
  letter-spacing: .5px; text-transform: uppercase; margin-bottom: 4px;
}
.al2-int-hero-msg { font-size: .9rem; color: var(--al2-g900); line-height: 1.5; }
.al2-int-hero-msg strong { color: var(--al2-brand-dark); }
.al2-int-hero-share { color: var(--al2-brand); font-weight: 800; }

.al2-int-splitkpi {
  display: grid; grid-template-columns: 2fr 3fr; gap: 14px; margin-bottom: 12px;
}
@media (max-width: 1100px) { .al2-int-splitkpi { grid-template-columns: 1fr; } }
.al2-int-mypane, .al2-int-allpane {
  background: #fff; border: 1px solid var(--al2-g200); border-radius: 10px; padding: 14px;
}
.al2-int-mypane { border-color: var(--al2-brand); box-shadow: 0 0 0 2px rgba(108,58,224,.06); }
.al2-int-pane-head {
  font-size: .75rem; font-weight: 700; color: var(--al2-g700);
  margin-bottom: 10px; display: flex; align-items: center; gap: 6px;
}
.al2-int-mypane .al2-int-pane-head { color: var(--al2-brand-dark); }

.al2-int-section { margin: 18px 0; }
.al2-int-section-head {
  display: flex; align-items: center; gap: 8px;
  font-size: .88rem; font-weight: 700; color: var(--al2-g800);
  margin-bottom: 10px;
}
.al2-int-section-head .cnt {
  background: var(--al2-brand-dim); color: var(--al2-brand-dark);
  padding: 1px 8px; border-radius: 10px; font-size: .72rem;
}
.al2-int-section-head .desc {
  font-size: .7rem; color: var(--al2-g500); font-weight: 400; margin-left: auto;
}

/* 놓친 기회 */
.al2-int-section.missed .al2-int-section-head i { color: var(--al2-red, #d9534f); }
.al2-int-missed-list { border: 1px solid var(--al2-g200); border-radius: 8px; background: #fff; overflow: hidden; }
.al2-int-missed-item {
  display: flex; align-items: center; gap: 12px; padding: 10px 14px;
  border-bottom: 1px solid var(--al2-g100); cursor: pointer; transition: background .12s;
}
.al2-int-missed-item:last-child { border-bottom: 0; }
.al2-int-missed-item:hover { background: var(--al2-g50); }
.al2-int-missed-main { flex: 1; min-width: 0; }
.al2-int-missed-title {
  font-size: .85rem; font-weight: 600; color: var(--al2-g900);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.al2-int-missed-meta {
  display: flex; gap: 10px; font-size: .7rem; color: var(--al2-g600); margin-top: 3px;
}
.al2-int-missed-meta .cat { background: var(--al2-g100); padding: 1px 6px; border-radius: 4px; }
.al2-int-missed-amt { font-size: .9rem; font-weight: 700; color: var(--al2-brand); font-variant-numeric: tabular-nums; }

/* 기회 추천 */
.al2-int-reco-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 10px; }
.al2-int-reco-item {
  display: block; text-decoration: none; color: inherit;
  padding: 12px 14px; background: #fff; border: 1px solid var(--al2-g200);
  border-radius: 8px; transition: transform .12s, border-color .12s, box-shadow .12s;
}
.al2-int-reco-item:hover {
  transform: translateY(-1px); border-color: var(--al2-brand);
  box-shadow: 0 4px 12px rgba(108,58,224,.08);
}
.al2-int-reco-title {
  font-size: .82rem; font-weight: 600; color: var(--al2-g900); line-height: 1.4;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.al2-int-reco-meta {
  display: flex; justify-content: space-between; margin-top: 6px;
  font-size: .7rem; color: var(--al2-g600);
}
.al2-int-reco-meta .amt { font-weight: 700; color: var(--al2-brand); }
.al2-int-reco-reasons { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 4px; }
.al2-int-reco-reasons .tag {
  background: var(--al2-brand-dim); color: var(--al2-brand-dark);
  padding: 2px 7px; border-radius: 10px; font-size: .66rem; font-weight: 600;
}

/* 빈 상태 CTA */
.al2-int-empty-cta {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 32px 20px; text-align: center; color: var(--al2-g500);
}
.al2-int-empty-cta i { font-size: 1.6rem; color: var(--al2-g300); margin-bottom: 10px; }
.al2-int-empty-cta p { font-size: .85rem; font-weight: 600; margin: 0 0 4px; color: var(--al2-g700); }
.al2-int-empty-cta span, .al2-int-empty-cta a { font-size: .72rem; color: var(--al2-g500); }
.al2-int-empty-cta a { color: var(--al2-brand); text-decoration: none; font-weight: 600; }

/* 목록 더보기 버튼 (페이지네이션) */
.al2-anlz-list-more {
  display: block; width: 100%; padding: 10px;
  background: var(--al2-g50); border: 0;
  border-top: 1px solid var(--al2-g200);
  color: var(--al2-brand); font-size: .8rem; font-weight: 600;
  cursor: pointer; transition: background .12s;
}
.al2-anlz-list-more:hover { background: var(--al2-brand-dim); }
.al2-anlz-org-list-head .hint {
  font-size: .68rem; color: var(--al2-g500); font-weight: 400; margin-left: 6px;
}

/* H2: 일괄 액션 툴바 (분석 페이지) */
.al2-anlz-list-toolbar {
  display: flex;
  gap: 8px;
  padding: 8px 12px;
  background: #fff;
  border-bottom: 1px solid var(--al2-g200);
}
.al2-anlz-tb-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  background: var(--al2-brand);
  color: #fff;
  border: 0;
  border-radius: 6px;
  font-size: .76rem;
  font-weight: 600;
  cursor: pointer;
  transition: background .12s;
}
.al2-anlz-tb-btn:hover:not(:disabled) { background: var(--al2-brand-dark); }
.al2-anlz-tb-btn:disabled { background: var(--al2-g300); cursor: not-allowed; opacity: .7; }
.al2-anlz-tb-btn.ghost { background: transparent; color: var(--al2-g700); border: 1px solid var(--al2-g300); }
.al2-anlz-tb-btn.ghost:hover { background: var(--al2-g100); }
.al2-anlz-tb-btn .cnt {
  display: inline-block;
  min-width: 16px;
  padding: 0 5px;
  background: rgba(255,255,255,.25);
  border-radius: 8px;
  font-size: .68rem;
  text-align: center;
}
.al2-anlz-tb-btn:disabled .cnt { background: rgba(0,0,0,.08); }

/* H1+H2: 체크박스 컬럼 */
.al2-anlz-org-table thead .t-chk { text-align: center; padding: 8px 4px; }
.al2-anlz-org-table tbody td.t-chk { text-align: center; }
.al2-anlz-chk, .al2-anlz-chk-all { cursor: pointer; }

/* Phase E: 빠른 필터 chips */
.al2-anlz-quickfilters {
  display: flex;
  gap: 6px;
  padding: 10px 12px;
  background: var(--al2-g50);
  border-bottom: 1px solid var(--al2-g200);
}
.al2-anlz-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 12px;
  background: #fff;
  color: var(--al2-g700);
  border: 1px solid var(--al2-g200);
  border-radius: 16px;
  font-size: .76rem;
  font-weight: 600;
  cursor: pointer;
  transition: all .12s;
}
.al2-anlz-chip:hover { border-color: var(--al2-brand); color: var(--al2-brand); }
.al2-anlz-chip.on {
  background: var(--al2-brand);
  color: #fff;
  border-color: var(--al2-brand);
}
.al2-anlz-chip .cnt {
  display: inline-block;
  min-width: 18px;
  padding: 0 5px;
  background: rgba(0,0,0,.08);
  border-radius: 8px;
  font-size: .68rem;
  font-variant-numeric: tabular-nums;
  text-align: center;
}
.al2-anlz-chip.on .cnt { background: rgba(255,255,255,.25); }

.al2-anlz-org-list-head {
  padding: 10px 14px;
  font-weight: 700;
  font-size: .88rem;
  border-bottom: 1px solid var(--al2-g200);
  background: var(--al2-g50);
}
.al2-anlz-org-list-head .cnt {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 7px;
  background: var(--al2-brand-dim);
  color: var(--al2-brand-dark);
  border-radius: 8px;
  font-size: .72rem;
}
.al2-anlz-org-table-wrap {
  max-height: 640px;
  overflow-y: auto;
}
.al2-anlz-org-table {
  width: 100%;
  border-collapse: collapse;
  font-size: .82rem;
}
.al2-anlz-org-table thead th {
  position: sticky;
  top: 0;
  background: var(--al2-g50);
  border-bottom: 1px solid var(--al2-g200);
  padding: 8px 10px;
  font-weight: 700;
  font-size: .76rem;
  color: var(--al2-g700);
  text-align: left;
  white-space: nowrap;
}
.al2-anlz-org-table thead th.t-num { text-align: right; }
.al2-anlz-org-table thead th.t-pin { padding: 8px 4px; }
/* Phase D-3: 정렬 affordance 강화 */
.al2-anlz-org-table thead th.sortable {
  cursor: pointer;
  user-select: none;
  transition: background .12s, color .12s;
}
.al2-anlz-org-table thead th.sortable:hover {
  background: var(--al2-g100);
  color: var(--al2-brand);
}
.al2-anlz-org-table thead th.sortable .fa-sort { transition: opacity .12s; }
.al2-anlz-org-table thead th.sortable:hover .fa-sort { opacity: .9; }
.al2-anlz-org-table thead .fa-sort { font-size: .65rem; }
.al2-anlz-org-table thead .fa-sort.dim { opacity: .35; }
.al2-anlz-org-table thead .active { color: var(--al2-brand); }
.al2-anlz-org-table thead th.sortable:has(.active) { color: var(--al2-brand); background: #efe8ff; }

/* Phase D-4: 행 hover/selected — left bar 슬라이드 */
.al2-anlz-org-table tbody tr {
  border-bottom: 1px solid var(--al2-g100);
  cursor: pointer;
  transition: background .12s, box-shadow .15s ease;
}
/* hover/selected 좌측 보라 바 — position:relative 회피 (tr에 적용 시 table-row 레이아웃 깨짐).
   box-shadow inset 사용 → 컬럼 폭 분배에 영향 없음 */
.al2-anlz-org-table tbody tr:hover { background: var(--al2-g50); box-shadow: inset 3px 0 0 var(--al2-brand); }
.al2-anlz-org-table tbody tr.selected { background: var(--al2-brand-dim); box-shadow: inset 3px 0 0 var(--al2-brand-dark); }
.al2-anlz-org-table tbody tr.fav td.t-pin .fa-thumbtack { color: var(--al2-brand); }
.al2-anlz-org-table tbody td {
  padding: 8px 10px;
  vertical-align: middle;
}
.al2-anlz-org-table tbody td.t-pin { color: var(--al2-g300); text-align: center; }
/* Phase D-5: 숫자 컬럼 tabular-nums (정렬 보장) */
.al2-anlz-org-table tbody td.t-num { text-align: right; font-variant-numeric: tabular-nums; }
.al2-anlz-org-table tbody td.t-num.dim { color: var(--al2-g400); font-style: italic; }
.al2-anlz-org-table tbody .dim-inline { color: var(--al2-g400); font-style: italic; }
/* table-layout fixed + 백분율 colgroup → 헤더-행 폭 강제 동기화 (시각적 밀림 차단) */
.al2-anlz-org-table { width: 100%; table-layout: fixed; }
.al2-anlz-org-table th,
.al2-anlz-org-table td { overflow: hidden; }
.al2-anlz-org-table .t-name-wrap { display: inline-flex; align-items: center; gap: 4px; max-width: 100%; }
.al2-anlz-org-table .t-name-text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.al2-anlz-org-table tbody td.t-num.strong { color: var(--al2-brand); font-weight: 700; }
.al2-anlz-org-table tbody td.t-name { font-weight: 600; color: var(--al2-g800); }
/* 핀 + 배지 + 기관명을 한 셀에 통합 (Phase D 정렬 수정) */
.al2-anlz-org-table .t-name-wrap {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.al2-anlz-org-table .t-pin-icon {
  font-size: .8rem;
  color: var(--al2-g300);
  flex-shrink: 0;
}
.al2-anlz-org-table tbody tr.fav .t-pin-icon { color: var(--al2-brand); }
.al2-anlz-org-table .t-name-text { font-weight: 600; color: var(--al2-g800); }

.al2-anlz-badge {
  display: inline-block;
  padding: 1px 6px;
  margin-right: 6px;
  border-radius: 4px;
  font-size: .62rem;
  font-weight: 700;
  vertical-align: middle;
}
.al2-anlz-badge.fav { background: #fff3cd; color: #856404; }

.al2-anlz-org-detail-wrap {
  background: #fff;
  border: 1px solid var(--al2-g200);
  border-radius: 8px;
  min-height: 400px;
}
.al2-anlz-org-detail-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 60px 20px;
  color: var(--al2-g500);
  text-align: center;
}
.al2-anlz-org-detail-empty i {
  font-size: 2.4rem;
  color: var(--al2-g300);
  margin-bottom: 14px;
}
.al2-anlz-org-detail-empty p {
  font-size: .95rem;
  font-weight: 600;
  margin: 0 0 6px;
}
.al2-anlz-org-detail-empty span { font-size: .8rem; color: var(--al2-g500); }

/* Sprint Q1 — 빠른 필터 변화량 + 도움말 */
.al2-sb-qf { position: relative; }
.al2-sb-delta {
  display: inline-block; margin-left: 4px;
  font-size: .65rem; font-weight: 700; font-variant-numeric: tabular-nums;
}
.al2-sb-delta.up   { color: #c0392b; }
.al2-sb-delta.down { color: #1e7a4d; }
.al2-sb-help {
  margin-left: 4px; padding: 2px;
  background: transparent; border: 0; cursor: pointer;
  color: var(--al2-g400); font-size: .72rem;
  opacity: 0; transition: opacity .12s, color .12s;
}
.al2-sb-qf:hover .al2-sb-help { opacity: 1; }
.al2-sb-help:hover { color: var(--al2-brand); }

.al2-sb-help-pop {
  position: fixed; z-index: 9999;
  min-width: 280px; max-width: 340px;
  background: #fff; border: 1px solid var(--al2-g200); border-radius: 8px;
  box-shadow: 0 6px 24px rgba(0,0,0,.12);
  font-size: .75rem;
}
.al2-sb-help-pop .hd {
  padding: 10px 14px; background: var(--al2-brand-dim);
  color: var(--al2-brand-dark); font-weight: 700;
  border-radius: 8px 8px 0 0; border-bottom: 1px solid var(--al2-g200);
}
.al2-sb-help-pop .bd { padding: 12px 14px; }
.al2-sb-help-pop .row { display: flex; gap: 10px; margin-bottom: 8px; }
.al2-sb-help-pop .row .k { flex: 0 0 40px; color: var(--al2-g500); font-weight: 600; }
.al2-sb-help-pop .row .v { flex: 1; color: var(--al2-g800); line-height: 1.45; }
.al2-sb-help-pop .empty {
  margin-top: 8px; padding: 10px 12px;
  background: #fffbeb; border: 1px solid #fde68a; border-radius: 6px;
  color: #92400e; font-size: .72rem; line-height: 1.4;
}

/* Sprint K1 — 내 키워드 고도화 */
.al2-bids-kw-chip .kw-cnt {
  display: inline-block; margin-left: 4px; padding: 0 5px;
  background: rgba(108,58,224,.15); color: var(--al2-brand-dark);
  border-radius: 8px; font-size: .62rem; font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.al2-kw-edit-chip .kw-match-cnt {
  display: inline-block; margin-left: 4px; padding: 0 6px;
  background: var(--al2-brand-dim); color: var(--al2-brand-dark);
  border-radius: 8px; font-size: .65rem; font-weight: 700;
}
.al2-kw-edit-info {
  display: flex; gap: 8px; padding: 10px 14px; margin-bottom: 14px;
  background: rgba(108,58,224,.06); border-left: 3px solid var(--al2-brand);
  border-radius: 4px; font-size: .74rem; color: var(--al2-g700); line-height: 1.5;
}
.al2-kw-edit-info i { color: var(--al2-brand); flex: 0 0 auto; margin-top: 2px; }
.al2-kw-edit-sec-head {
  font-size: .74rem; font-weight: 700; color: var(--al2-g600);
  margin: 14px 0 8px;
}
.al2-kw-edit-sec-head .hint { font-weight: 400; color: var(--al2-g500); font-size: .68rem; margin-left: 6px; }

/* 미리보기 */
.al2-kw-edit-preview {
  margin: 10px 0;
  padding: 10px 12px;
  background: #f8f7ff;
  border: 1px solid var(--al2-brand-dim);
  border-radius: 6px;
}
.al2-kw-edit-preview-head {
  font-size: .74rem; color: var(--al2-brand-dark); margin-bottom: 6px;
}
.al2-kw-edit-preview .sample {
  font-size: .72rem; color: var(--al2-g700);
  padding: 4px 0; border-top: 1px dashed var(--al2-g200);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* 추천 chip */
.al2-kw-rec-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.al2-kw-rec-chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 5px 10px;
  background: #fff; color: var(--al2-brand);
  border: 1px dashed var(--al2-brand); border-radius: 14px;
  font-size: .74rem; font-weight: 600; cursor: pointer;
  transition: all .12s;
}
.al2-kw-rec-chip:hover {
  background: var(--al2-brand); color: #fff; border-style: solid;
}
.al2-kw-rec-chip .cnt {
  background: rgba(0,0,0,.08); padding: 0 5px; border-radius: 8px;
  font-size: .65rem; font-weight: 700;
}
.al2-kw-rec-chip:hover .cnt { background: rgba(255,255,255,.25); }

/* 온보딩 */
.al2-kw-onboard {
  margin-top: 16px; padding: 14px;
  background: linear-gradient(135deg, #fffbeb, #fff);
  border: 1px solid #fde68a; border-radius: 8px;
}
.al2-kw-onboard-title {
  font-size: .82rem; font-weight: 700; color: #92400e; margin-bottom: 10px;
}
.al2-kw-onboard-presets { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 8px; }
.al2-kw-preset {
  padding: 10px 12px; background: #fff;
  border: 1px solid var(--al2-g200); border-radius: 6px;
  text-align: left; cursor: pointer; transition: all .12s;
}
.al2-kw-preset:hover { border-color: var(--al2-brand); transform: translateY(-1px); box-shadow: 0 2px 6px rgba(108,58,224,.1); }
.al2-kw-preset .name { font-size: .8rem; font-weight: 700; color: var(--al2-g900); margin-bottom: 4px; }
.al2-kw-preset .kws { font-size: .68rem; color: var(--al2-g600); line-height: 1.4; }

/* ════════════════════════════════════════════════
   v6.31 — 사이드바 키워드 hub (수요예보와 디자인 통일)
   ════════════════════════════════════════════════ */
.al2-bids-kw-hub {
  margin: 6px 12px;
  border-radius: 12px;
  padding: 12px;
  position: relative;
}
.al2-bids-kw-hub.empty {
  background: linear-gradient(135deg, #fef3c7 0%, #fef9c3 100%);
  border: 1px solid #fde68a;
}
.al2-bids-kw-hub.filled {
  background: rgba(108, 58, 224, .04);
  border: 1px solid var(--al2-brand-dim, #ddd6fe);
}
.al2-bids-kw-hub .kw-hub-head {
  display: flex; align-items: center; gap: 6px;
  margin-bottom: 8px;
}
.al2-bids-kw-hub .kw-hub-title {
  font-size: .8rem;
  font-weight: 800;
  color: var(--al2-g900);
}
.al2-bids-kw-hub .kw-hub-pill {
  margin-left: auto;
  padding: 1px 8px;
  font-size: .58rem;
  font-weight: 800;
  border-radius: 10px;
  background: #f59e0b;
  color: #fff;
  letter-spacing: .03em;
  animation: al2-bids-kw-pulse 2.5s infinite;
}
@keyframes al2-bids-kw-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: .7; }
}
.al2-bids-kw-hub .kw-hub-count {
  margin-left: auto;
  font-size: .66rem;
  font-weight: 800;
  color: var(--al2-brand);
  background: var(--al2-brand-dim, rgba(108, 58, 224, .1));
  padding: 1px 8px;
  border-radius: 10px;
}
.al2-bids-kw-hub #sb-kw-edit { margin-left: 4px; }
.al2-bids-kw-hub.empty .kw-hub-empty-msg {
  font-size: .72rem;
  color: var(--al2-g700);
  line-height: 1.5;
  margin-bottom: 10px;
}
.al2-bids-kw-hub.empty .kw-hub-empty-msg b {
  color: #92400e;
  font-weight: 800;
}
.al2-bids-kw-hub .kw-hub-cta {
  width: 100%;
  padding: 8px 12px;
  border: 0;
  border-radius: 8px;
  background: linear-gradient(135deg, var(--al2-brand), #8b5cf6);
  color: #fff;
  font-size: .76rem;
  font-weight: 700;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  box-shadow: 0 2px 8px rgba(108, 58, 224, .3);
  transition: all .15s;
}
.al2-bids-kw-hub .kw-hub-cta:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(108, 58, 224, .4);
}
.al2-bids-kw-hub.filled .kw-hub-match {
  font-size: .72rem;
  color: var(--al2-g600);
  margin-bottom: 8px;
}
.al2-bids-kw-hub.filled .kw-hub-match i {
  color: var(--al2-brand);
  margin-right: 4px;
}
.al2-bids-kw-hub.filled .kw-hub-match b {
  color: var(--al2-brand);
  font-weight: 800;
  font-family: var(--al2-font-mono, 'JetBrains Mono', monospace);
}
.al2-bids-kw-hub.filled .kw-hub-chips {
  display: flex; flex-wrap: wrap; gap: 4px;
  max-height: 80px;
  overflow: hidden;
  margin-bottom: 6px;
}
.al2-bids-kw-hub.filled .kw-hub-health {
  font-size: .64rem;
  font-weight: 600;
  padding: 3px 8px;
  border-radius: 8px;
  display: inline-block;
}
.al2-bids-kw-hub .kw-hub-health.none { background: #fee2e2; color: #dc2626; }
.al2-bids-kw-hub .kw-hub-health.low  { background: #fef3c7; color: #b45309; }
.al2-bids-kw-hub .kw-hub-health.good { background: #dcfce7; color: #15803d; }
.al2-bids-kw-hub .kw-hub-health.rich { background: #ede9fe; color: #6d28d9; }

/* 키워드 모달 헤더 — 수요예보 modal-header 스타일 정렬 */
.al2-bids-modal-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 18px 24px; border-bottom: 1px solid var(--al2-g100);
  flex-shrink: 0;
}
.al2-bids-modal-header h3 {
  margin: 0; font-size: 1.05rem; font-weight: 800;
  color: var(--al2-g900);
  display: flex; align-items: center; gap: 8px;
}
.al2-bids-modal-header h3 i { color: var(--al2-brand); }
.al2-bids-kw-modal-header { /* alias hook */ }

/* ════════════════════════════════════════════════
   v6.30 — 키워드 모달 Phase 1+2+3 (페르소나/Sync/고급/히스토리)
   ════════════════════════════════════════════════ */

/* 수요예보 sync 카드 */
.al2-kw-sync-card {
  display: flex; align-items: center; gap: 12px;
  margin: 0 0 14px;
  padding: 12px 14px;
  background: linear-gradient(135deg, #ecfdf5, #fff);
  border: 1px solid #6ee7b7; border-radius: 8px;
}
.al2-kw-sync-icon {
  width: 38px; height: 38px; flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  background: #10b981; color: #fff;
  border-radius: 50%; font-size: .95rem;
}
.al2-kw-sync-body { flex: 1; min-width: 0; }
.al2-kw-sync-title { font-size: .82rem; font-weight: 700; color: #065f46; margin-bottom: 2px; }
.al2-kw-sync-desc { font-size: .7rem; color: #047857; line-height: 1.4; }
.al2-kw-sync-btn {
  flex: 0 0 auto;
  padding: 8px 14px; background: #10b981; color: #fff;
  border: 0; border-radius: 6px; font-size: .76rem; font-weight: 700;
  cursor: pointer; transition: all .12s;
  display: inline-flex; align-items: center; gap: 5px;
}
.al2-kw-sync-btn:hover { background: #059669; transform: translateY(-1px); box-shadow: 0 2px 6px rgba(16,185,129,.3); }
.al2-kw-sync-btn:disabled { background: #9ca3af; cursor: default; transform: none; box-shadow: none; }

/* 페르소나 그리드 (10 카테고리) */
.al2-kw-personas {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 6px; margin-top: 6px;
}
.al2-kw-persona-chip {
  --p-color: #6366f1;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 8px 10px;
  background: #fff;
  color: var(--al2-g700);
  border: 1px solid var(--al2-g200);
  border-left: 3px solid var(--p-color);
  border-radius: 6px;
  font-size: .76rem; font-weight: 600; text-align: left;
  cursor: pointer; transition: all .12s;
}
.al2-kw-persona-chip i { color: var(--p-color); flex: 0 0 auto; }
.al2-kw-persona-chip span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.al2-kw-persona-chip .cnt {
  flex: 0 0 auto;
  background: var(--al2-g100); color: var(--al2-g600);
  padding: 1px 6px; border-radius: 8px;
  font-size: .62rem; font-weight: 700;
}
.al2-kw-persona-chip:hover {
  border-color: var(--p-color);
  background: color-mix(in srgb, var(--p-color) 6%, #fff);
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(0,0,0,.06);
}
.al2-kw-persona-chip.on {
  background: var(--p-color);
  color: #fff;
  border-color: var(--p-color);
}
.al2-kw-persona-chip.on i { color: #fff; }
.al2-kw-persona-chip.on .cnt { background: rgba(255,255,255,.25); color: #fff; }

/* 인기 키워드 chip variant */
.al2-kw-rec-chip.popular {
  background: linear-gradient(135deg, #fff7ed, #fff);
  color: #c2410c;
  border: 1px dashed #f59e0b;
}
.al2-kw-rec-chip.popular:hover {
  background: #f59e0b; color: #fff; border-style: solid; border-color: #f59e0b;
}
.al2-kw-rec-chip.popular .cnt { background: rgba(245,158,11,.15); color: #c2410c; }
.al2-kw-rec-chip.popular:hover .cnt { background: rgba(255,255,255,.25); color: #fff; }
.al2-kw-rec-chip.on {
  opacity: .45; pointer-events: none;
  background: var(--al2-g50); color: var(--al2-g500); border-color: var(--al2-g200);
}
.al2-kw-rec-chip.on i::before { content: '\f00c'; }

/* 고급 옵션 — details/summary */
.al2-kw-adv {
  border: 1px solid var(--al2-g200);
  border-radius: 8px;
  background: #fafafb;
  overflow: hidden;
}
.al2-kw-adv > summary {
  list-style: none; cursor: pointer;
  padding: 10px 14px;
  font-size: .78rem; font-weight: 700; color: var(--al2-g800);
  display: flex; align-items: center; gap: 8px;
  transition: background .12s;
}
.al2-kw-adv > summary::-webkit-details-marker { display: none; }
.al2-kw-adv > summary::after {
  content: '\f078'; font-family: 'Font Awesome 6 Free'; font-weight: 900;
  margin-left: auto; font-size: .7rem; color: var(--al2-g500);
  transition: transform .15s;
}
.al2-kw-adv[open] > summary::after { transform: rotate(180deg); }
.al2-kw-adv > summary:hover { background: var(--al2-g50); }
.al2-kw-adv > summary i { color: var(--al2-brand); }
.al2-kw-adv > summary .hint { font-weight: 400; color: var(--al2-g500); font-size: .7rem; }
.al2-kw-adv-body {
  padding: 4px 14px 14px;
  background: #fff;
  border-top: 1px solid var(--al2-g100);
}

/* 매칭 규칙 토글 */
.al2-kw-rule-toggle {
  display: inline-flex;
  background: var(--al2-g100);
  border-radius: 8px;
  padding: 3px;
  gap: 2px;
}
.al2-kw-rule {
  padding: 6px 12px;
  background: transparent;
  border: 0; border-radius: 6px;
  font-size: .74rem; font-weight: 600;
  color: var(--al2-g600);
  cursor: pointer;
  transition: all .12s;
}
.al2-kw-rule:hover { color: var(--al2-g900); }
.al2-kw-rule.on {
  background: #fff; color: var(--al2-brand);
  box-shadow: 0 1px 3px rgba(0,0,0,.08);
}

/* 제외 키워드 chips */
.al2-kw-exclude {
  display: flex; flex-wrap: wrap; gap: 6px;
  min-height: 36px;
  padding: 8px;
  background: #fef2f2;
  border: 1px dashed #fca5a5;
  border-radius: 6px;
}
.al2-kw-exclude:empty::before {
  content: '제외할 키워드가 없습니다';
  color: #b91c1c; font-size: .72rem; font-style: italic;
}
.al2-kw-exclude-chip {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 4px 4px 4px 10px;
  background: #fff; color: #b91c1c;
  border: 1px solid #fca5a5; border-radius: 14px;
  font-size: .72rem; font-weight: 600;
}
.al2-kw-exclude-chip .x {
  width: 18px; height: 18px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; background: transparent; border-radius: 50%;
  color: #b91c1c; cursor: pointer; font-size: .7rem; padding: 0;
}
.al2-kw-exclude-chip .x:hover { background: #fee2e2; }

/* 히스토리 */
.al2-kw-history {
  display: flex; flex-direction: column; gap: 4px;
  margin-top: 4px;
}
.al2-kw-history-row {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px;
  background: #fff;
  border: 1px solid var(--al2-g200); border-radius: 6px;
  cursor: pointer; text-align: left;
  font-size: .74rem; transition: all .12s;
}
.al2-kw-history-row:hover {
  border-color: var(--al2-brand);
  background: #faf8ff;
  transform: translateX(2px);
}
.al2-kw-history-row .t {
  flex: 0 0 70px;
  color: var(--al2-g500); font-size: .7rem; font-weight: 600;
}
.al2-kw-history-row .cnt {
  flex: 0 0 auto;
  background: var(--al2-brand-dim); color: var(--al2-brand-dark);
  padding: 1px 7px; border-radius: 8px;
  font-size: .65rem; font-weight: 700;
}
.al2-kw-history-row .preview {
  flex: 1; min-width: 0;
  color: var(--al2-g700);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* Sprint P1 — 사전공고 전략 가이드 + 힌트 */
.al2-pre-guide {
  margin: 10px 0 14px;
  background: linear-gradient(135deg, #f5f0ff, #fff);
  border: 1px solid var(--al2-brand);
  border-radius: 10px;
  overflow: hidden;
}
.al2-pre-guide-head {
  display: flex; justify-content: space-between; align-items: center;
  padding: 10px 14px; background: var(--al2-brand-dim);
  border-bottom: 1px solid var(--al2-brand);
}
.al2-pre-guide-head .title {
  font-size: .85rem; font-weight: 700; color: var(--al2-brand-dark);
}
.al2-pre-guide-hide {
  background: transparent; border: 0; cursor: pointer;
  color: var(--al2-g500); font-size: 1rem;
  width: 24px; height: 24px; border-radius: 50%;
}
.al2-pre-guide-hide:hover { background: var(--al2-g100); color: var(--al2-g800); }
.al2-pre-guide-tips {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 10px; padding: 14px;
}
.al2-pre-guide-tips .tip {
  display: flex; gap: 10px; align-items: flex-start;
}
.al2-pre-guide-tips .ico {
  font-size: 1.3rem; flex: 0 0 auto;
}
.al2-pre-guide-tips .t {
  font-size: .82rem; font-weight: 700; color: var(--al2-g900); margin-bottom: 2px;
}
.al2-pre-guide-tips .d {
  font-size: .7rem; color: var(--al2-g600); line-height: 1.4;
}
.al2-pre-guide-mini {
  display: flex; justify-content: space-between; align-items: center;
  padding: 8px 14px; margin: 10px 0 14px;
  background: #f8f7ff; border: 1px solid var(--al2-brand-dim); border-radius: 6px;
  font-size: .76rem; color: var(--al2-g700);
}
.al2-pre-guide-show {
  padding: 3px 10px; background: var(--al2-brand); color: #fff;
  border: 0; border-radius: 4px; font-size: .7rem; cursor: pointer;
}

/* 카드 힌트 (예상 본공고 + 과거 낙찰) */
.al2-pre-hint {
  display: flex; justify-content: space-between; align-items: center; gap: 8px;
  margin: 6px 0; padding: 6px 10px;
  background: #f8f7ff; border-radius: 6px;
  font-size: .68rem;
}
.al2-pre-est {
  color: var(--al2-brand-dark); font-weight: 600;
}
.al2-pre-est i { margin-right: 3px; }
.al2-pre-histlink {
  color: var(--al2-g600); text-decoration: none;
  transition: color .12s;
}
.al2-pre-histlink:hover { color: var(--al2-brand); }
.al2-pre-histlink i { margin-right: 3px; }

/* Sprint P1-focus — 포커스 행 클릭 + 인라인 액션 */
.al2-focus-row { position: relative; cursor: pointer; transition: background .12s; }
.al2-focus-row:hover { background: rgba(108,58,224,.04); }
.al2-focus-actions {
  display: flex; gap: 4px; opacity: 0;
  transition: opacity .12s;
  position: absolute; top: 50%; right: 14px; transform: translateY(-50%);
}
.al2-focus-row:hover .al2-focus-actions,
.al2-focus-row:focus-within .al2-focus-actions { opacity: 1; }
.al2-focus-act {
  width: 28px; height: 28px; border-radius: 50%;
  background: rgba(255,255,255,.9); color: var(--al2-brand);
  border: 1px solid var(--al2-brand-dim);
  cursor: pointer; font-size: .72rem;
  display: inline-flex; align-items: center; justify-content: center;
  transition: all .12s;
}
.al2-focus-act:hover { background: var(--al2-brand); color: #fff; border-color: var(--al2-brand); }
.al2-focus-act.on { background: var(--al2-amber, #f59e0b); color: #fff; border-color: transparent; }
.al2-focus-act.danger { color: #c0392b; border-color: #fde2e1; }
.al2-focus-act.danger:hover { background: #c0392b; color: #fff; border-color: #c0392b; }

/* 일괄 액션 툴바 hint */
.al2-bids-toolbar-hint {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: .76rem; color: var(--al2-g500);
  margin-right: 6px;
}
.al2-bids-toolbar-hint i { color: var(--al2-g400); }
.al2-bids-toolbar-hint.sel { color: var(--al2-brand-dark); }
.al2-bids-toolbar-hint.sel strong { color: var(--al2-brand); }

/* ════════════════════════════════════════════════
   Linear-style Filter Chip Bar
   ════════════════════════════════════════════════ */
.al2-bids-filter-chipbar{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px;
  padding:8px 12px;border-bottom:1px solid var(--al2-g100);
  background:#fafafb;
}
.al2-bids-flt-chip{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 4px 4px 10px;background:#fff;border:1px solid var(--al2-g200);
  border-radius:999px;font-size:12px;cursor:pointer;
  transition:border-color .15s,box-shadow .15s;
}
.al2-bids-flt-chip:hover{ border-color:var(--al2-brand);box-shadow:0 0 0 2px rgba(108,58,224,.08); }
.al2-bids-flt-chip .k{ color:var(--al2-g500);font-weight:500; }
.al2-bids-flt-chip .v{ color:var(--al2-g800);font-weight:600; }
.al2-bids-flt-chip .x{
  display:inline-flex;align-items:center;justify-content:center;
  width:18px;height:18px;border:0;background:transparent;border-radius:50%;
  color:var(--al2-g500);cursor:pointer;font-size:11px;padding:0;
}
.al2-bids-flt-chip .x:hover{ background:var(--al2-g100);color:var(--al2-g800); }
.al2-bids-flt-add{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 10px;background:transparent;border:1px dashed var(--al2-g300);
  border-radius:999px;font-size:12px;color:var(--al2-g600);cursor:pointer;
  transition:border-color .15s,color .15s,background .15s;
}
.al2-bids-flt-add:hover{ border-color:var(--al2-brand);color:var(--al2-brand);background:#fff; }
.al2-bids-flt-add i{ font-size:10px; }
.al2-bids-flt-clearall{
  margin-left:auto;padding:4px 8px;background:transparent;border:0;
  font-size:11px;color:var(--al2-g500);cursor:pointer;
}
.al2-bids-flt-clearall:hover{ color:var(--al2-red); }

/* 필터 추가 picker */
.al2-bids-flt-picker .bd{ padding:4px; }
.al2-bids-flt-picker .pick{
  display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;
  background:transparent;border:0;border-radius:6px;text-align:left;
  font-size:13px;color:var(--al2-g800);cursor:pointer;
}
.al2-bids-flt-picker .pick:hover{ background:var(--al2-g50); }
.al2-bids-flt-picker .pick i{ color:var(--al2-g500);width:14px; }
.al2-bids-flt-picker .pick .dot{
  margin-left:auto;width:6px;height:6px;border-radius:50%;background:var(--al2-brand);
}

/* 정렬 아이콘: 활성만 표시, inactive 컬럼은 hover 시 힌트 */
.al2-bids-table th.sortable{ cursor:pointer;user-select:none; }
.al2-bids-table th.sortable:hover{ color:var(--al2-brand); }
.al2-bids-sort.active{ color:var(--al2-brand); }

/* ════════════════════════════════════════════════
   Win Room — 3 KPI Focus Bar (Sprint B-Win1)
   ════════════════════════════════════════════════ */
.al2-bids-winroom-kpis{
  display:grid;grid-template-columns:repeat(3,1fr);gap:12px;
  margin:12px 0 20px;
}
.al2-bids-winroom-kpis .kpi{
  padding:16px 18px;background:#fff;border:1px solid var(--al2-g150);
  border-radius:12px;position:relative;overflow:hidden;
}
.al2-bids-winroom-kpis .kpi::before{
  content:'';position:absolute;left:0;top:0;bottom:0;width:4px;
}
.al2-bids-winroom-kpis .kpi.proposing::before{ background:#6c3ae0; }
.al2-bids-winroom-kpis .kpi.deciding::before{ background:#f59e0b; }
.al2-bids-winroom-kpis .kpi.newhigh::before{ background:#10b981; }
.al2-bids-winroom-kpis .k-label{
  font-size:12px;color:var(--al2-g600);font-weight:600;margin-bottom:6px;
  display:flex;align-items:center;gap:6px;
}
.al2-bids-winroom-kpis .k-val{
  font-size:26px;font-weight:800;color:var(--al2-g900);
  letter-spacing:-0.5px;line-height:1.1;
  font-family:'JetBrains Mono', monospace;
}
.al2-bids-winroom-kpis .k-val .u{
  font-size:14px;font-weight:700;color:var(--al2-g500);margin-left:2px;
}
.al2-bids-winroom-kpis .k-sub{
  margin-top:4px;font-size:11px;color:var(--al2-g500);font-weight:500;
}

/* Win Room 카드 wrap + 인라인 액션 바 */
.al2-bids-winroom-card-wrap{ position:relative; display:flex; flex-direction:column; }
.al2-bids-winroom-actions{
  display:flex;gap:4px;padding:6px;border-top:1px solid var(--al2-g100);
  background:#fafafb;border-radius:0 0 10px 10px;
  margin-top:-8px;
}
.al2-bids-winroom-actions .wr-act{
  flex:1;display:inline-flex;align-items:center;justify-content:center;gap:4px;
  padding:6px 8px;font-size:11px;font-weight:600;
  background:#fff;border:1px solid var(--al2-g200);border-radius:6px;
  color:var(--al2-g700);cursor:pointer;transition:all .15s;
}
.al2-bids-winroom-actions .wr-act:hover{ border-color:var(--al2-brand);color:var(--al2-brand); }
.al2-bids-winroom-actions .wr-act.propose{ border-color:#ddd6fe;color:#6c3ae0; }
.al2-bids-winroom-actions .wr-act.propose:hover{ background:#6c3ae0;color:#fff; }
.al2-bids-winroom-actions .wr-act.drop{ color:var(--al2-g500); }
.al2-bids-winroom-actions .wr-act.drop:hover{ border-color:#fca5a5;color:#dc2626; }
.al2-bids-winroom-actions .wr-act i{ font-size:10px; }

/* "전체 공고"에서 Win Room에 이미 노출된 행 dedup 표식 */
.al2-bids-table tbody tr.row-winroom td{ opacity:0.55; }
.al2-bids-table tbody tr.row-winroom:hover td{ opacity:1; }
.al2-bids-table tbody tr.row-winroom td.col-check::before{
  content:'★';position:absolute;left:-14px;top:50%;transform:translateY(-50%);
  color:#f59e0b;font-size:10px;
}
.al2-bids-table tbody tr.row-winroom td.col-check{ position:relative; }

/* ════════════════════════════════════════════════
   카드 공통 액션 바 (Sprint Card-A)
   ════════════════════════════════════════════════ */
.al2-bids-card{ position:relative; border-left:3px solid transparent; }
.al2-bids-card.is-pre{ border-left-color:#3b82f6; }
.al2-bids-card.is-bid{ border-left-color:#6c3ae0; }

.al2-bids-card-actions{
  display:flex;flex-wrap:wrap;gap:4px;padding:8px;border-top:1px solid var(--al2-g100);
  background:#fafafb;border-radius:0 0 10px 10px;margin-top:2px;
}
.al2-bids-card-actions .ca-btn{
  flex:1;display:inline-flex;align-items:center;justify-content:center;
  height:30px;min-width:30px;padding:0 6px;
  background:#fff;border:1px solid var(--al2-g200);border-radius:6px;
  color:var(--al2-g600);cursor:pointer;text-decoration:none;
  font-size:12px;transition:all .15s;
}
.al2-bids-card-actions .ca-btn:hover{
  border-color:var(--al2-brand);color:var(--al2-brand);
  background:#fff;
}
.al2-bids-card-actions .ca-btn.bm.on{ background:#fef3c7;border-color:#fbbf24;color:#b45309; }
.al2-bids-card-actions .ca-btn.favorg.on{ background:#dcfce7;border-color:#22c55e;color:#15803d; }
.al2-bids-card-actions .ca-btn.prewatch.on{ background:#dbeafe;border-color:#3b82f6;color:#1d4ed8; }
.al2-bids-card-actions .ca-btn.propose{ border-color:#ddd6fe;color:#6c3ae0; }
.al2-bids-card-actions .ca-btn.propose:hover{ background:#6c3ae0;color:#fff;border-color:#6c3ae0; }
.al2-bids-card-actions .ca-btn.drop{ color:var(--al2-g500); }
.al2-bids-card-actions .ca-btn.drop:hover{ border-color:#fca5a5;color:#dc2626;background:#fff; }

/* 2026-05-01 — forward 버튼 (P0 발견성 개선)
   - 보라 강조 색상 + hover 시 라벨 노출
   - 첫 사용 전 spotlight ring (al2_seen_forward localStorage flag로 학습 후 제거) */
.al2-bids-card-actions .ca-btn.forward{
  border-color: #ddd6fe; color: #8b5cf6;
  position: relative;
}
.al2-bids-card-actions .ca-btn.forward:hover{
  background: #8b5cf6; color: #fff; border-color: #8b5cf6;
}
.al2-bids-card-actions .ca-btn.forward:hover::after{
  content: '동료에게 추천';
  position: absolute; bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%);
  background: #0f172a; color: #fff;
  padding: 4px 10px; border-radius: 6px;
  font-size: .68rem; font-weight: 700; white-space: nowrap;
  pointer-events: none; z-index: 100;
  box-shadow: 0 4px 12px rgba(0,0,0,.15);
}
.al2-bids-card-actions .ca-btn.forward:hover::before{
  content: ''; position: absolute; bottom: calc(100% + 1px); left: 50%; transform: translateX(-50%);
  border: 4px solid transparent; border-top-color: #0f172a;
  pointer-events: none; z-index: 100;
}
.al2-bids-card-actions .ca-btn.forward.spotlight{
  animation: al2-forward-pulse 2s ease-in-out infinite;
  background: #ede9fe; border-color: #8b5cf6;
}
@keyframes al2-forward-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(139, 92, 246, .5); }
  50% { box-shadow: 0 0 0 6px rgba(139, 92, 246, 0); }
}

/* 딥링크 강조 v5 (2026-04-28) — 빨간 점선 테두리만 (라벨 제거: <tr>에 ::before가 들어가면
   첫 cell에 inline 영향이 생겨 컬럼이 한 칸 밀리는 문제). 클릭하면 row-viewed 노란 배경으로 인계. */
.al2-bids-card-highlight{
  outline: 3px dashed #dc2626 !important;
  outline-offset: -2px !important;
  box-shadow: 0 0 0 1px rgba(220,38,38,0.4), 0 8px 20px rgba(220,38,38,0.18) !important;
}
/* 행 td도 모두 표시 적용 */
.al2-bids-table tbody tr.al2-bids-row.al2-bids-card-highlight td{
  background: #fff5f5 !important;  /* 매우 옅은 빨강 — 점선 강조 보조 */
}
@media (prefers-color-scheme: dark){
  .al2-bids-table tbody tr.al2-bids-row.al2-bids-card-highlight td{
    background: #450a0a !important;
  }
}

/* 딥링크 폴백 토스트 — 공고 못 찾을 때 */
.al2-bids-deeplink-toast{
  position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%);
  background: #1e293b; color: #f1f5f9; padding: 12px 18px; border-radius: 10px;
  box-shadow: 0 12px 32px rgba(0,0,0,0.25); z-index: 9999;
  font-size: .86rem; max-width: 90vw;
  display: flex; align-items: center; gap: 12px;
  animation: al2BidsToastIn .25s ease-out;
}
.al2-bids-deeplink-toast a{ color: #818cf8; font-weight: 700; text-decoration: underline; }
.al2-bids-deeplink-toast button{
  background: transparent; border: 0; color: #94a3b8; font-size: 1.2rem; cursor: pointer; padding: 0 4px;
}
.al2-bids-deeplink-toast button:hover{ color: #f1f5f9; }
@keyframes al2BidsToastIn{
  from { opacity: 0; transform: translate(-50%, 16px); }
  to   { opacity: 1; transform: translate(-50%, 0); }
}

/* ════════════════════════════════════════════════════════════════════════
 * v4 (2026-04-29) — 영업관리 → 내 검토함 (cases inbox) 카드 그리드
 * ════════════════════════════════════════════════════════════════════════ */
.cases-kpi { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin:0 0 14px; padding:0 4px; }
.cases-kpi-card { background:#fff; border:1px solid var(--al2-g200); border-radius:10px; padding:14px 16px; }
.cases-kpi-label { font-size:.72rem; color:var(--al2-g500); font-weight:600; }
.cases-kpi-value { font-size:1.5rem; font-weight:800; color:var(--al2-g900); margin-top:4px; font-family:var(--al2-font-mono); }
.cases-kpi-value.warn { color:#dc2626; }
.cases-kpi-value.ok   { color:#10b981; }

.cases-filter-bar { display:flex; gap:6px; flex-wrap:wrap; align-items:center; padding:12px 4px; border-bottom:1px solid var(--al2-g100); margin-bottom:14px; }
.cases-chip { padding:6px 12px; border:1px solid var(--al2-g200); border-radius:999px; background:#fff; cursor:pointer; font-size:.78rem; color:var(--al2-g700); white-space:nowrap; transition:all .15s; }
.cases-chip:hover { border-color:var(--al2-brand); color:var(--al2-brand); }
.cases-chip.on    { background:var(--al2-brand); color:#fff; border-color:var(--al2-brand); }
.cases-chip .cnt  { font-size:.68rem; opacity:.8; margin-left:4px; font-family:var(--al2-font-mono); }
.cases-sep        { width:1px; height:18px; background:var(--al2-g200); margin:0 4px; }
.cases-select     { padding:6px 10px; border:1px solid var(--al2-g200); border-radius:8px; font-size:.78rem; background:#fff; color:var(--al2-g700); cursor:pointer; }

.cases-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:14px; padding:0 4px; }
.cases-card { background:#fff; border:1px solid var(--al2-g200); border-radius:12px; padding:14px 16px; cursor:pointer; transition:all .15s; display:flex; flex-direction:column; gap:8px; }
.cases-card:hover { border-color:var(--al2-brand); box-shadow:0 4px 14px rgba(108,58,224,.1); transform:translateY(-1px); }
.cases-card-head  { display:flex; align-items:flex-start; justify-content:space-between; gap:8px; }
.cases-stage-pill { font-size:.65rem; font-weight:700; padding:2px 8px; border-radius:999px; flex-shrink:0; white-space:nowrap; }
.cases-stage-pill.s-discovered  { background:#f1f5f9; color:#64748b; }
.cases-stage-pill.s-reviewing   { background:#fef3c7; color:#92400e; }
.cases-stage-pill.s-qualified   { background:#dcfce7; color:#14532d; }
.cases-stage-pill.s-unqualified { background:#fee2e2; color:#991b1b; }
.cases-stage-pill.s-go          { background:#dbeafe; color:#1e40af; }
.cases-stage-pill.s-nogo        { background:#e5e7eb; color:#374151; }
.cases-stage-pill.s-archived    { background:#f3f4f6; color:#9ca3af; }
.cases-dday        { font-size:.7rem; font-weight:700; padding:2px 7px; border-radius:6px; font-family:var(--al2-font-mono); }
.cases-dday.urgent { background:#fee2e2; color:#dc2626; }
.cases-dday.warn   { background:#fef3c7; color:#92400e; }
.cases-dday.normal { background:#f3f4f6; color:#6b7280; }
.cases-dday.expired{ background:#e5e7eb; color:#9ca3af; }

.cases-name { font-size:.86rem; font-weight:700; color:var(--al2-g900); line-height:1.4; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.cases-org  { font-size:.72rem; color:var(--al2-g500); display:flex; align-items:center; gap:4px; }
.cases-meta { display:flex; align-items:center; gap:8px; font-size:.72rem; color:var(--al2-g600); flex-wrap:wrap; }
.cases-pp   { display:inline-flex; align-items:center; gap:3px; padding:2px 7px; background:var(--al2-brand-light); color:var(--al2-brand); border-radius:6px; font-weight:600; font-size:.66rem; }
.cases-pp.warn { background:#fef3c7; color:#92400e; }
.cases-amt  { font-family:var(--al2-font-mono); font-weight:700; color:var(--al2-g800); }

.cases-progress       { height:5px; background:var(--al2-g100); border-radius:99px; overflow:hidden; margin-top:4px; }
.cases-progress > .bar{ height:100%; background:linear-gradient(90deg,var(--al2-brand),#a78bfa); border-radius:99px; transition:width .3s; }
.cases-progress-label { font-size:.68rem; color:var(--al2-g500); font-family:var(--al2-font-mono); display:flex; justify-content:space-between; }

.cases-actions         { display:flex; gap:6px; margin-top:6px; }
.cases-actions button  { flex:1; font-size:.7rem; padding:5px 8px; border:1px solid var(--al2-g200); border-radius:6px; background:#fff; color:var(--al2-g700); cursor:pointer; }
.cases-actions button:hover { border-color:var(--al2-brand); color:var(--al2-brand); }
.cases-actions button.primary { background:var(--al2-brand); color:#fff; border-color:var(--al2-brand); }
.cases-actions button.primary:hover { background:#5a2dc7; }

.cases-empty   { text-align:center; padding:60px 20px; color:var(--al2-g500); }
.cases-empty i { font-size:2.5rem; color:var(--al2-g300); margin-bottom:14px; display:block; }
.cases-empty h3{ font-size:1rem; color:var(--al2-g700); margin:0 0 8px; }
.cases-empty p { font-size:.82rem; margin:0; }

@media (max-width:720px) {
  .cases-kpi  { grid-template-columns:repeat(2,1fr); }
  .cases-grid { grid-template-columns:1fr; }
}

/* ════════════════════════════════════════════════════════════════════════
 * v5 (2026-04-29) — Workbench Slide-over
 * Stripe Dashboard / Vercel / Linear 패턴.
 * ════════════════════════════════════════════════════════════════════════ */
.cs-backdrop {
  position: fixed; inset: 0; background: rgba(15,23,42,.5);
  z-index: 9990; opacity: 0; transition: opacity .2s ease;
  backdrop-filter: blur(2px);
}
.cs-backdrop.on { opacity: 1; }

.cs-panel {
  /* v6.11 (2026-04-29): 80vw → 70vw (Stripe/HubSpot 표준 — 그리드 컨텍스트 보존) */
  position: fixed; top: 0; right: 0; bottom: 0;
  width: 70vw; max-width: 1280px; min-width: 720px;
  background: #f8fafc; z-index: 9991;
  box-shadow: -8px 0 32px rgba(0,0,0,.18);
  transform: translateX(100%); transition: transform .25s cubic-bezier(.16,1,.3,1);
  display: flex; flex-direction: column;
}
.cs-panel.on { transform: translateX(0); }

.cs-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; padding: 10px 18px;
  background: #fff; border-bottom: 1px solid var(--al2-g200);
  flex-shrink: 0;
}
.cs-title {
  display: flex; align-items: center; gap: 10px;
  flex: 1; min-width: 0;
}
.cs-title i { font-size: 1rem; flex-shrink: 0; }
.cs-title-text-wrap {
  flex: 1; min-width: 0;
  display: flex; flex-direction: column; gap: 1px;
}
.cs-title-text-wrap > span:first-child {
  font-size: .9rem; font-weight: 700; color: var(--al2-g900);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.cs-mode-hint {
  font-size: .68rem; font-weight: 500; color: var(--al2-g500);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.cs-actions { display: flex; gap: 6px; align-items: center; }
.cs-btn {
  padding: 7px 12px; border: 1px solid var(--al2-g200); border-radius: 8px;
  background: #fff; color: var(--al2-g700); font-size: .78rem; font-weight: 600;
  cursor: pointer; text-decoration: none;
  display: inline-flex; align-items: center; gap: 5px;
  transition: all .15s; font-family: inherit;
}
.cs-btn:hover { border-color: var(--al2-brand); color: var(--al2-brand); }
.cs-btn.cs-btn-primary {
  background: var(--al2-brand); color: #fff; border-color: var(--al2-brand);
}
.cs-btn.cs-btn-primary:hover {
  background: #5a2dc7; border-color: #5a2dc7; color: #fff;
}
.cs-btn.cs-close {
  width: 34px; height: 34px; padding: 0; justify-content: center;
}
.cs-kbd {
  margin-left: 6px; padding: 1px 5px; font-size: .68rem;
  background: rgba(255,255,255,.2); border-radius: 4px;
  font-family: var(--al2-font-mono); border: 1px solid rgba(255,255,255,.25);
}

.cs-frame {
  flex: 1; width: 100%; border: 0; background: #f8fafc;
}

/* 모바일 — 풀스크린 + 풀페이지 버튼 hide (의미 없음) */
@media (max-width: 900px) {
  .cs-panel {
    width: 100vw; max-width: none; min-width: 0;
  }
  .cs-backdrop { backdrop-filter: none; }
  /* v6.11: 모바일은 슬라이드=풀스크린이라 풀페이지 버튼 의미 없음 */
  #cs-fullpage { display: none !important; }
  .cs-mode-hint { display: none; }   /* 좁은 화면에서 hint 생략 */
}

/* 작은 데스크톱 — 80vw */
@media (max-width: 1280px) and (min-width: 901px) {
  .cs-panel {
    width: 80vw; min-width: 720px;
  }
}

/* 검토함 active 필터 pill (스마트 필터 표시) */
.cases-active-pill {
  display: inline-flex; align-items: center; gap: 6px;
  margin-left: 10px; padding: 3px 10px;
  background: var(--al2-brand-light); color: var(--al2-brand);
  border-radius: 999px; font-size: .72rem; font-weight: 600;
  vertical-align: middle;
}
.cases-pill-clear {
  background: transparent; border: 0; color: var(--al2-brand);
  cursor: pointer; padding: 0 2px; font-size: 1rem; line-height: 1;
  opacity: .7; transition: opacity .15s;
}
.cases-pill-clear:hover { opacity: 1; }

/* P1-4: 카드 키보드 포커스 */
.cases-card-focus {
  border-color: var(--al2-brand) !important;
  box-shadow: 0 0 0 2px rgba(108,58,224,.25), 0 6px 20px rgba(108,58,224,.18) !important;
}
.cases-kb-help {
  position: fixed; bottom: 24px; right: 24px;
  background: #1e293b; color: #f1f5f9;
  padding: 14px 18px; border-radius: 10px;
  font-size: .82rem; line-height: 1.7;
  box-shadow: 0 12px 32px rgba(0,0,0,0.25);
  z-index: 9998;
  animation: cases-kb-in .25s ease-out;
}
.cases-kb-help kbd {
  display: inline-block; padding: 1px 6px;
  background: #334155; border-radius: 4px;
  font-family: var(--al2-font-mono); font-size: .76rem;
  border: 1px solid #475569;
  margin: 0 2px;
}
.cases-kb-help-out { animation: cases-kb-out .3s ease forwards; }
@keyframes cases-kb-in { from { opacity:0; transform: translateY(8px); } to { opacity:1; transform: translateY(0); } }
@keyframes cases-kb-out { to { opacity:0; transform: translateY(8px); } }

/* 사이드바 최근 항목 */
.al2-sb-recent .lbl {
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  font-size: .78rem;
}

/* P2-6: 핀 고정 */
.cases-card { position: relative; }
.cases-card.pinned {
  background: linear-gradient(180deg, #fef3c7 0%, #fff 30%);
  border-color: #f59e0b;
}
.cases-pin {
  position: absolute; top: 8px; right: 8px;
  width: 28px; height: 28px; padding: 0;
  background: transparent; border: 0; border-radius: 6px;
  color: #cbd5e1; cursor: pointer; opacity: 0;
  transition: all .15s; font-size: .82rem;
}
.cases-card:hover .cases-pin { opacity: 1; }
.cases-pin:hover { background: rgba(0,0,0,.05); color: #f59e0b; }
.cases-pin.on {
  opacity: 1; color: #f59e0b;
  transform: rotate(-45deg);
}

/* P2-5: 저장된 view 삭제 버튼 */
.al2-sb-view {
  position: relative;
}
.al2-sb-view-del {
  position: absolute; right: 6px; top: 50%; transform: translateY(-50%);
  background: transparent; border: 0; color: #cbd5e1;
  width: 22px; height: 22px; padding: 0; border-radius: 4px;
  cursor: pointer; opacity: 0; transition: all .15s;
  font-size: .76rem;
}
.al2-sb-view:hover .al2-sb-view-del { opacity: 1; }
.al2-sb-view-del:hover { background: #fee2e2; color: #dc2626; }

.al2-sb-section-action {
  background: transparent; border: 0; color: #94a3b8;
  cursor: pointer; padding: 0 4px; margin-left: auto;
  font-size: .76rem;
}
.al2-sb-section-action:hover { color: #6c3ae0; }

/* ════════════════════════════════════════════════════════════════════════
 * v6 (2026-04-29) — 사이드바 IA 통합 (Linear "My Work" / Asana 패턴)
 * "내 검토함" 단일 섹션 + 들여쓰기 children + mini section header + collapse.
 * v6.1 (2026-04-29): button reset · box-sizing · 점 인디케이터 정렬 · 들여쓰기 통일.
 * ════════════════════════════════════════════════════════════════════════ */

/* 루트 헤더 */
.al2-sb-cases-root { font-weight: 700; }
.al2-sb-cases-root.al2-sb-parent-active {
  color: var(--al2-brand);
}
.al2-sb-cases-root.al2-sb-parent-active i.icon {
  color: var(--al2-brand);
}

/* mini section header — div와 button 둘 다 동일 모양 */
.al2-sb-mini-header {
  display: flex;
  align-items: center;
  gap: 6px;
  width: 100%;
  margin: 0;
  padding: 12px 16px 6px;
  box-sizing: border-box;

  font-family: inherit;        /* button 기본 폰트 reset */
  font-size: .64rem;
  font-weight: 700;
  line-height: 1;
  color: #94a3b8;
  text-transform: uppercase;
  letter-spacing: .06em;

  background: transparent;
  border: 0;
  text-align: left;
  cursor: default;
  user-select: none;
  -webkit-appearance: none;     /* Safari button reset */
}

/* collapse toggle (button) */
.al2-sb-mini-header.al2-sb-collapse-toggle {
  cursor: pointer;
  transition: color .15s, background .15s;
  border-radius: 4px;
}
.al2-sb-mini-header.al2-sb-collapse-toggle:hover {
  color: #475569;
  background: var(--al2-g50);
}
.al2-sb-mini-header.al2-sb-collapse-toggle:focus-visible {
  outline: 2px solid var(--al2-brand);
  outline-offset: -2px;
}

.al2-sb-chevron {
  width: 9px;
  flex-shrink: 0;
  font-size: .55rem;
  color: #cbd5e1;
  transition: transform .2s ease;
  text-align: center;
}
.al2-sb-collapse-toggle[aria-expanded="true"] .al2-sb-chevron {
  transform: rotate(90deg);
  color: #94a3b8;
}

/* children container */
.al2-sb-children { padding: 0; }

/* child item — 들여쓰기 32px, 점 인디케이터 left:22px */
.al2-sb-children .al2-sb-item.al2-sb-child {
  padding-left: 32px !important;
  position: relative;
  font-size: .78rem;
}
.al2-sb-children .al2-sb-item.al2-sb-child::before {
  content: '';
  position: absolute;
  left: 22px;
  top: 50%;
  width: 3px; height: 3px;
  background: #cbd5e1;
  border-radius: 50%;
  transform: translateY(-50%);
  transition: background .15s, width .15s, height .15s;
}
.al2-sb-children .al2-sb-item.al2-sb-child:hover::before {
  background: #94a3b8;
}
.al2-sb-children .al2-sb-item.al2-sb-child.on::before {
  background: var(--al2-brand);
  width: 4px; height: 4px;
}

/* 카운트 0 dim — 액션 가능한 항목만 강조 */
.al2-sb-item.al2-sb-child.al2-sb-empty {
  opacity: .42;
}
.al2-sb-item.al2-sb-child.al2-sb-empty:hover { opacity: 1; }
.al2-sb-item.al2-sb-child.al2-sb-empty.on { opacity: 1; }

/* collapse 영역 */
.al2-sb-collapsible {
  overflow: hidden;
}

/* 레거시 호환 — 아래 v5 시점 빈 블록 무시 */
.al2-sb-cases-root.al2-sb-parent-active .icon {
  color: var(--al2-brand);
}

/* ════════════════════════════════════════════════════════════════════════
 * v6.2 (2026-04-29) — 검토함 카드 type 구분 (사전/입찰) + 본공고 발행 배지
 * ════════════════════════════════════════════════════════════════════════ */
.cases-type-pill {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: .64rem; font-weight: 700;
  padding: 2px 8px; border-radius: 999px;
  flex-shrink: 0; white-space: nowrap;
  letter-spacing: .02em;
}
.cases-type-pill.is-pre {
  background: #ede9fe; color: #6d28d9;
}
.cases-type-pill.is-bid {
  background: #dbeafe; color: #1e40af;
}
.cases-type-pill i { font-size: .68rem; }

/* 사전공고 카드 좌측 보더 — 시각적 구분 보강 */
.cases-card.is-pre {
  border-left: 3px solid #8b5cf6;
}
.cases-card.is-bid {
  border-left: 3px solid #3b82f6;
}
.cases-card.pinned.is-pre,
.cases-card.pinned.is-bid {
  /* 핀이 우선 */
  border-left-color: #f59e0b;
}

/* 본공고 발행 배지 — 시각 강조 */
.cases-main-pub-badge {
  display: block;
  margin-top: -4px; margin-bottom: 4px;
  padding: 6px 10px;
  background: linear-gradient(135deg, #fef3c7, #fde68a);
  color: #92400e;
  font-size: .72rem; font-weight: 700;
  border-radius: 8px; border: 1px solid #fcd34d;
  text-decoration: none;
  text-align: center;
  cursor: pointer;
  transition: all .15s;
  animation: cases-main-pub-pulse 2.5s ease-in-out 0s 2;
}
.cases-main-pub-badge:hover {
  background: linear-gradient(135deg, #fde68a, #fcd34d);
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(245,158,11,.25);
}
@keyframes cases-main-pub-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(245,158,11,.5); }
  50% { box-shadow: 0 0 0 6px rgba(245,158,11,0); }
}
.cases-card.has-main-pub {
  background: linear-gradient(180deg, #fffbeb 0%, #fff 60%);
}

/* ════════════════════════════════════════════════════════════════════════
 * v6.3 (2026-04-29) — 검토함 카드 ⋮ 메뉴 + 삭제 모달 + Undo 토스트
 * ════════════════════════════════════════════════════════════════════════ */
.cases-card-tools {
  position: absolute; top: 8px; right: 8px;
  display: flex; gap: 2px; align-items: center;
  z-index: 2;
}
.cases-menu-btn {
  width: 28px; height: 28px; padding: 0;
  background: transparent; border: 0; border-radius: 6px;
  color: #94a3b8; cursor: pointer; opacity: 0;
  transition: all .15s; font-size: .82rem;
}
.cases-card:hover .cases-menu-btn,
.cases-card .cases-menu-btn:focus-visible { opacity: 1; }
.cases-menu-btn:hover { background: rgba(0,0,0,.05); color: #475569; }

/* 핀 버튼이 cases-card-tools 안으로 이동 — 절대좌표 제거 */
.cases-card-tools .cases-pin {
  position: static;
  opacity: 0;
}
.cases-card:hover .cases-card-tools .cases-pin,
.cases-card-tools .cases-pin.on { opacity: 1; }

/* ⋮ 드롭다운 메뉴 */
.cases-card-menu {
  position: fixed; z-index: 10000;
  background: #fff; border: 1px solid var(--al2-g200);
  border-radius: 10px; padding: 4px;
  box-shadow: 0 12px 32px rgba(0,0,0,.15);
  min-width: 200px;
  opacity: 0; transform: translateY(-4px);
  transition: opacity .15s, transform .15s;
  font-family: inherit;
}
.cases-card-menu.on { opacity: 1; transform: translateY(0); }
.cases-card-menu button {
  display: flex; align-items: center; gap: 8px;
  width: 100%; padding: 8px 12px;
  background: transparent; border: 0; border-radius: 6px;
  font-size: .82rem; color: var(--al2-g700);
  cursor: pointer; text-align: left;
  font-family: inherit;
  transition: background .12s;
}
.cases-card-menu button:hover { background: var(--al2-g50); }
.cases-card-menu button.danger { color: #dc2626; }
.cases-card-menu button.danger:hover { background: #fee2e2; }
.cases-card-menu button i { width: 14px; text-align: center; font-size: .82rem; }
.cases-menu-sep {
  height: 1px; background: var(--al2-g100);
  margin: 4px 6px;
}

/* 삭제 확인 모달 */
.cases-modal-bg {
  position: fixed; inset: 0;
  background: rgba(15,23,42,.5);
  display: flex; align-items: center; justify-content: center;
  z-index: 10001; padding: 20px;
  animation: cases-modal-bg-in .2s ease-out;
}
@keyframes cases-modal-bg-in { from { opacity: 0; } to { opacity: 1; } }
.cases-modal {
  background: #fff; border-radius: 14px;
  padding: 24px 26px; max-width: 480px; width: 100%;
  box-shadow: 0 24px 56px rgba(0,0,0,.25);
  animation: cases-modal-in .2s ease-out;
}
@keyframes cases-modal-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.cases-modal h3 {
  margin: 0 0 12px; font-size: 1.05rem; font-weight: 700; color: var(--al2-g900);
  display: flex; align-items: center; gap: 8px;
}
.cases-modal ul { line-height: 1.6; }

/* 모달 버튼 */
.cases-btn-ghost, .cases-btn-primary, .cases-btn-danger {
  padding: 9px 16px; border-radius: 8px;
  font-size: .82rem; font-weight: 600;
  cursor: pointer; font-family: inherit;
  display: inline-flex; align-items: center; gap: 5px;
  transition: all .12s;
}
.cases-btn-ghost {
  background: #fff; color: var(--al2-g700);
  border: 1px solid var(--al2-g300);
}
.cases-btn-ghost:hover { background: var(--al2-g50); }
.cases-btn-primary {
  background: var(--al2-brand); color: #fff; border: 0;
}
.cases-btn-primary:hover { background: #5a2dc7; }
.cases-btn-danger {
  background: #dc2626; color: #fff; border: 0;
}
.cases-btn-danger:hover { background: #b91c1c; }

/* Undo 토스트 (Gmail 패턴) */
.cases-undo-toast {
  position: fixed; bottom: 24px; left: 50%;
  transform: translate(-50%, 16px);
  background: #1e293b; color: #f1f5f9;
  padding: 10px 16px;
  border-radius: 10px;
  font-size: .82rem;
  display: flex; align-items: center; gap: 12px;
  box-shadow: 0 12px 28px rgba(0,0,0,.25);
  z-index: 10002;
  opacity: 0;
  transition: opacity .2s, transform .25s cubic-bezier(.16,1,.3,1);
  max-width: 90vw;
}
.cases-undo-toast.on {
  opacity: 1;
  transform: translate(-50%, 0);
}
.cases-undo-toast i { color: #94a3b8; }
.cases-undo-toast b { color: #fff; }
.cases-undo-toast button {
  background: transparent; border: 0;
  color: #818cf8; font-weight: 700;
  cursor: pointer; padding: 4px 10px;
  border-radius: 6px;
  font-family: inherit;
  display: inline-flex; align-items: center; gap: 5px;
  transition: background .12s;
}
.cases-undo-toast button:hover { background: rgba(129,140,248,.15); }

.cases-undo-bar {
  display: inline-block; width: 60px; height: 3px;
  background: #334155; border-radius: 99px;
  overflow: hidden;
}
.cases-undo-bar > .bar {
  display: block; height: 100%; width: 100%;
  background: #818cf8;
  animation: cases-undo-shrink 5s linear forwards;
}
@keyframes cases-undo-shrink { from { width: 100%; } to { width: 0%; } }

/* v6.8 (2026-04-29): 내 자산 버튼 + 통계 카드 */
.cases-stats-btn {
  padding: 8px 14px; background: #fff;
  border: 1px solid var(--al2-g200); border-radius: 8px;
  font-size: .8rem; font-weight: 600; color: var(--al2-g700);
  cursor: pointer; font-family: inherit;
  display: inline-flex; align-items: center; gap: 6px;
  transition: all .15s;
}
.cases-stats-btn:hover { border-color: var(--al2-brand); color: var(--al2-brand); }
.cases-stat-card {
  background: #f8fafc; border: 1px solid #e2e8f0;
  border-radius: 10px; padding: 14px 16px;
}
.cases-stat-label { font-size: .72rem; color: #64748b; font-weight: 600; }
.cases-stat-value {
  font-size: 1.6rem; font-weight: 800; color: #0f172a;
  font-family: var(--al2-font-mono); margin-top: 4px;
  line-height: 1;
}
.cases-stat-value span {
  font-size: .8rem; font-weight: 600; color: #94a3b8; margin-left: 4px;
}
.cases-stats-policy {
  background: #f8fafc; border: 1px solid #e2e8f0;
  border-radius: 8px; padding: 12px 14px;
}

/* ═══════════════════════════════════════════════
   v3.7.18 (2026-04-30): 검토함 활성 필터 요약 행
   ═══════════════════════════════════════════════ */
.cases-active-summary {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  padding: 10px 14px;
  margin-bottom: 14px;
  background: linear-gradient(135deg, #fff7ed 0%, #fffbeb 100%);
  border: 1px solid #fde68a;
  border-radius: 10px;
  font-size: .8rem;
}
.cases-as-label {
  display: inline-flex; align-items: center;
  font-size: .72rem;
  font-weight: 800;
  color: #92400e;
  white-space: nowrap;
}
.cases-as-chips {
  display: inline-flex;
  gap: 5px;
  flex-wrap: wrap;
}
.cases-as-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 6px 3px 10px;
  border: 1px solid;
  border-radius: 16px;
  font-size: .76rem;
  font-weight: 700;
}
.cases-as-chip-x {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px; height: 18px;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, .6);
  color: inherit;
  font-size: .82rem;
  cursor: pointer;
  font-weight: 800;
  line-height: 1;
  padding: 0;
  transition: all .12s;
}
.cases-as-chip-x:hover {
  background: rgba(0, 0, 0, .15);
  transform: rotate(90deg);
}
.cases-as-arrow {
  color: var(--al2-g400);
  font-size: .82rem;
  font-weight: 700;
}
.cases-as-count {
  font-family: var(--al2-font-mono, 'JetBrains Mono', monospace);
  font-size: .82rem;
  font-weight: 800;
  color: var(--al2-g900);
}
.cases-as-clear-all {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 12px;
  border: 1px solid #dc2626;
  background: #fff;
  color: #dc2626;
  border-radius: 8px;
  font-size: .76rem;
  font-weight: 700;
  cursor: pointer;
  transition: all .15s;
  white-space: nowrap;
}
.cases-as-clear-all:hover {
  background: #dc2626;
  color: #fff;
  transform: translateY(-1px);
  box-shadow: 0 2px 8px rgba(220, 38, 38, .25);
}
.cases-as-clear-all i { font-size: .78rem; }

/* v6.29 (2026-04-30): 검토함 스켈레톤 — 로딩 중 명확한 시각 신호 */
.cases-card.cases-skel {
  pointer-events: none;
  background: #fff;
  border: 1px solid var(--al2-g100);
  border-radius: 12px;
  padding: 14px 16px;
}
.cases-card.cases-skel > * + * { margin-top: 8px; }
.cases-skel-line {
  height: 12px;
  border-radius: 6px;
  background: linear-gradient(90deg, var(--al2-g100) 0%, #f8fafc 50%, var(--al2-g100) 100%);
  background-size: 200% 100%;
  animation: cases-skel-shimmer 1.4s ease-in-out infinite;
}
.cases-skel-line.w50 { width: 50%; }
.cases-skel-line.w70 { width: 70%; }
.cases-skel-line.w90 { width: 90%; }
.cases-skel-meta {
  display: flex; gap: 6px;
  margin: 8px 0;
}
.cases-skel-pill {
  width: 64px; height: 18px;
  border-radius: 9px;
  background: linear-gradient(90deg, var(--al2-g100) 0%, #f8fafc 50%, var(--al2-g100) 100%);
  background-size: 200% 100%;
  animation: cases-skel-shimmer 1.4s ease-in-out infinite;
}
.cases-skel-bar {
  height: 6px;
  border-radius: 3px;
  background: linear-gradient(90deg, var(--al2-g100) 0%, #f8fafc 50%, var(--al2-g100) 100%);
  background-size: 200% 100%;
  animation: cases-skel-shimmer 1.4s ease-in-out infinite;
}
@keyframes cases-skel-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ═══════════════════════════════════════════════
   v3.7.23 (2026-04-30): 검토함 / 관심분석 명확화 — Phase 1-3
   ═══════════════════════════════════════════════ */

/* Phase 1.1 — Toast with action button */
.al2-bids-toast.al2-bids-toast-action {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px 12px 16px;
  min-width: 320px;
  max-width: 480px;
  border-radius: 10px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, .15);
}
.al2-bids-toast.al2-bids-toast-action.success {
  background: #ecfdf5;
  border: 1px solid #a7f3d0;
  color: #065f46;
}
.al2-bids-toast.al2-bids-toast-action .toast-msg {
  flex: 1;
  font-size: .82rem;
  line-height: 1.45;
}
.al2-bids-toast.al2-bids-toast-action .toast-msg b { font-weight: 800; }
.al2-bids-toast.al2-bids-toast-action .toast-action-btn {
  padding: 6px 12px;
  border: 0;
  border-radius: 8px;
  background: linear-gradient(135deg, #6366f1, #8b5cf6);
  color: #fff;
  font-size: .76rem;
  font-weight: 700;
  cursor: pointer;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  transition: all .15s;
}
.al2-bids-toast.al2-bids-toast-action .toast-action-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(99, 102, 241, .35);
}
.al2-bids-toast.al2-bids-toast-action .toast-close {
  width: 24px; height: 24px;
  border: 0;
  background: transparent;
  border-radius: 50%;
  color: var(--al2-g500);
  cursor: pointer;
  font-size: .72rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.al2-bids-toast.al2-bids-toast-action .toast-close:hover {
  background: rgba(0, 0, 0, .06);
  color: var(--al2-g900);
}

/* Phase 1.2 — 첫 북마크 가이드 모달 */
.al2-first-bm-modal .first-bm-modal-content {
  max-width: 520px;
  padding: 28px 32px;
}
.al2-first-bm-modal .first-bm-head {
  text-align: center;
  margin-bottom: 22px;
}
.al2-first-bm-modal .first-bm-icon {
  font-size: 3rem;
  margin-bottom: 10px;
  filter: drop-shadow(0 4px 12px rgba(0, 0, 0, .1));
}
.al2-first-bm-modal h2 {
  font-size: 1.08rem;
  font-weight: 800;
  color: var(--al2-g900);
  margin: 0 0 6px;
  line-height: 1.4;
}
.al2-first-bm-modal .first-bm-bid {
  font-size: .82rem;
  color: var(--al2-g600);
  background: var(--al2-g50);
  padding: 6px 12px;
  border-radius: 16px;
  display: inline-block;
  margin: 0;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.al2-first-bm-modal .first-bm-features {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-bottom: 18px;
}
.al2-first-bm-modal .first-bm-feat {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px;
  background: #fafbfc;
  border: 1px solid var(--al2-g100);
  border-radius: 10px;
}
.al2-first-bm-modal .first-bm-feat i {
  font-size: 1.1rem;
  margin-top: 2px;
  flex-shrink: 0;
}
.al2-first-bm-modal .first-bm-feat b {
  display: block;
  font-size: .82rem;
  font-weight: 700;
  color: var(--al2-g900);
  line-height: 1.3;
}
.al2-first-bm-modal .first-bm-feat small {
  font-size: .68rem;
  color: var(--al2-g500);
  line-height: 1.3;
}
.al2-first-bm-modal .first-bm-tip {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: #fffbeb;
  border: 1px solid #fde68a;
  border-radius: 8px;
  font-size: .78rem;
  color: #92400e;
  margin-bottom: 18px;
}
.al2-first-bm-modal .first-bm-tip i { color: #f59e0b; }
.al2-first-bm-modal .first-bm-actions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
}
.al2-first-bm-modal .al2-btn-outline {
  padding: 9px 16px;
  border: 1px solid var(--al2-g200);
  background: #fff;
  border-radius: 8px;
  font-size: .82rem;
  font-weight: 600;
  color: var(--al2-g700);
  cursor: pointer;
  transition: all .15s;
}
.al2-first-bm-modal .al2-btn-outline:hover {
  border-color: var(--al2-g300);
  background: var(--al2-g50);
}
.al2-first-bm-modal .al2-btn-primary {
  padding: 9px 18px;
  border: 0;
  background: linear-gradient(135deg, #6366f1, #8b5cf6);
  color: #fff;
  border-radius: 8px;
  font-size: .82rem;
  font-weight: 700;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  box-shadow: 0 2px 8px rgba(99, 102, 241, .3);
  transition: all .15s;
}
.al2-first-bm-modal .al2-btn-primary:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 14px rgba(99, 102, 241, .45);
}
@media (max-width: 600px) {
  .al2-first-bm-modal .first-bm-features { grid-template-columns: 1fr; }
}

/* Phase 2.2 — 낙찰분석 관심분석 hint banner */
.al2-anlz-fav-hint {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 16px;
  margin: 0 0 16px;
  background: linear-gradient(135deg, #eff6ff 0%, #faf5ff 100%);
  border: 1px solid #bfdbfe;
  border-radius: 10px;
  transition: all .3s ease-out;
  overflow: hidden;
}
.al2-anlz-fav-hint .hint-icon { font-size: 1.6rem; }
.al2-anlz-fav-hint .hint-body { flex: 1; }
.al2-anlz-fav-hint .hint-title {
  font-size: .82rem;
  color: var(--al2-g800);
  margin-bottom: 2px;
}
.al2-anlz-fav-hint .hint-title b { color: var(--al2-brand, #6366f1); font-weight: 800; }
.al2-anlz-fav-hint .hint-sub {
  font-size: .72rem;
  color: var(--al2-g600);
}
.al2-anlz-fav-hint .hint-link {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 10px;
  background: #fff;
  border: 1px solid var(--al2-brand, #6366f1);
  color: var(--al2-brand, #6366f1);
  border-radius: 14px;
  font-weight: 700;
  text-decoration: none;
  margin-left: 4px;
  transition: all .15s;
}
.al2-anlz-fav-hint .hint-link:hover {
  background: var(--al2-brand, #6366f1);
  color: #fff;
}
.al2-anlz-fav-hint .hint-close {
  width: 26px; height: 26px;
  border: 0;
  background: transparent;
  border-radius: 50%;
  color: var(--al2-g500);
  cursor: pointer;
}
.al2-anlz-fav-hint .hint-close:hover { background: rgba(0, 0, 0, .05); }

/* Phase 3 — 사이드바 검토함 부제 */
.al2-sb-cases-sub {
  padding: 0 16px 6px 38px;
  font-size: .62rem;
  color: var(--al2-g400);
  font-style: italic;
}
