Root cause: dark theme remaps --color-white to --dk-surface (a dark color), so every 'color: var(--color-white)' on a colored background (primary/error/ success buttons, badges, chips, hero CTAs) rendered dark/invisible text in dark mode (e.g. '등록 신청' blue button showed navy text). Add always-white --color-on-accent token and repoint 77 text-color usages across 28 files to it. Background/border usages of --color-white untouched (they legitimately flip to dark surface). Full-CSS audit applied. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1096 lines
23 KiB
CSS
1096 lines
23 KiB
CSS
/*
|
|
* M15 공사/장치 옥션 화면(SCR-26/27/29) 공통 스타일.
|
|
* 토큰은 styles/tokens.css(§1)만 참조 — 하드코딩 색 금지. shared.css 프리미티브 선반영.
|
|
*/
|
|
@import '../shared.css';
|
|
|
|
/* ── 페이지 헤드(제목 + 샘플 배지) ── */
|
|
.kx-auc__head {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: var(--space-4);
|
|
flex-wrap: wrap;
|
|
}
|
|
.kx-auc__title {
|
|
font-size: var(--fs-h1);
|
|
line-height: var(--lh-h1);
|
|
color: var(--color-neutral-900);
|
|
font-weight: 700;
|
|
}
|
|
.kx-auc__subtitle {
|
|
font-size: var(--fs-body);
|
|
color: var(--color-neutral-500);
|
|
margin-top: 2px;
|
|
}
|
|
.kx-auc__head-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
/* 샘플 데이터 배지 */
|
|
.kx-auc__sample {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--color-warning);
|
|
background: #fff4e5;
|
|
padding: 3px 10px;
|
|
border-radius: var(--radius-pill);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* 등록업체 게이트 고지 배너 */
|
|
.kx-auc__gate {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-primary-700);
|
|
background: var(--color-primary-050);
|
|
border: 1px solid var(--color-primary-100);
|
|
border-radius: var(--radius-sm);
|
|
padding: 8px 12px;
|
|
}
|
|
.kx-auc__gate--seal {
|
|
color: var(--color-neutral-700);
|
|
background: var(--color-neutral-050);
|
|
border-color: var(--color-neutral-200);
|
|
}
|
|
|
|
/* ── SCR-26 목록 레이아웃(좌 목록 + 우 개설 패널) ── */
|
|
.kx-auc__split {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 2fr) minmax(320px, 1fr);
|
|
gap: var(--space-5);
|
|
align-items: start;
|
|
}
|
|
@media (max-width: 1080px) {
|
|
.kx-auc__split {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
|
|
.kx-auc__list {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-4);
|
|
}
|
|
|
|
/* 옥션 카드 */
|
|
.kx-auc-card {
|
|
border: var(--border-card);
|
|
border-left: 4px solid var(--color-primary-600);
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-white);
|
|
padding: var(--space-4);
|
|
transition: box-shadow 0.15s ease, transform 0.15s ease;
|
|
}
|
|
.kx-auc-card:hover {
|
|
box-shadow: var(--shadow-level2);
|
|
transform: translateY(-1px);
|
|
}
|
|
.kx-auc-card--secondary {
|
|
border-left-color: var(--color-ai-accent);
|
|
}
|
|
.kx-auc-card--tertiary {
|
|
border-left-color: var(--color-success);
|
|
}
|
|
.kx-auc-card--closed {
|
|
opacity: 0.85;
|
|
}
|
|
.kx-auc-card__top {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: var(--space-3);
|
|
margin-bottom: var(--space-3);
|
|
}
|
|
.kx-auc-card__tags {
|
|
display: flex;
|
|
gap: 6px;
|
|
flex-wrap: wrap;
|
|
margin-bottom: 6px;
|
|
}
|
|
.kx-auc-card__name {
|
|
font-size: var(--fs-h3);
|
|
line-height: var(--lh-h3);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-900);
|
|
}
|
|
.kx-auc-card__status {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
gap: 6px;
|
|
}
|
|
.kx-auc-card__metrics {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: var(--space-4);
|
|
padding: var(--space-3) 0;
|
|
border-top: 1px dashed var(--color-neutral-200);
|
|
border-bottom: 1px dashed var(--color-neutral-200);
|
|
margin-bottom: var(--space-3);
|
|
}
|
|
.kx-auc-card__metric {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
}
|
|
.kx-auc-card__metric--end {
|
|
align-items: flex-end;
|
|
text-align: right;
|
|
}
|
|
.kx-auc-card__metric-label {
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-neutral-500);
|
|
}
|
|
.kx-auc-card__metric-value {
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-900);
|
|
}
|
|
.kx-auc-card__metric-value--price {
|
|
color: var(--color-primary-700);
|
|
}
|
|
.kx-auc-card__foot {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--space-3);
|
|
flex-wrap: wrap;
|
|
}
|
|
.kx-auc-card__mats {
|
|
display: flex;
|
|
gap: var(--space-3);
|
|
flex-wrap: wrap;
|
|
}
|
|
.kx-auc-card__mat {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-ai-accent);
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* 카테고리·유형 태그 */
|
|
.kx-tag {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
padding: 2px 10px;
|
|
border-radius: var(--radius-pill);
|
|
font-size: var(--fs-caption);
|
|
font-weight: 600;
|
|
background: var(--color-primary-100);
|
|
color: var(--color-primary-700);
|
|
}
|
|
.kx-tag--type {
|
|
background: var(--color-ai-surface);
|
|
color: var(--color-ai-accent);
|
|
}
|
|
.kx-tag--muted {
|
|
background: var(--color-neutral-100);
|
|
color: var(--color-neutral-700);
|
|
}
|
|
|
|
/* 옥션 상태 pill */
|
|
.kx-auc-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
padding: 2px 10px;
|
|
border-radius: var(--radius-sm);
|
|
font-size: var(--fs-caption);
|
|
font-weight: 700;
|
|
}
|
|
.kx-auc-pill--live {
|
|
background: #e6f4ee;
|
|
color: var(--color-success);
|
|
}
|
|
.kx-auc-pill--closed {
|
|
background: var(--color-neutral-100);
|
|
color: var(--color-neutral-700);
|
|
}
|
|
.kx-auc-pill--settle {
|
|
background: var(--color-primary-050);
|
|
color: var(--color-primary-700);
|
|
}
|
|
|
|
/* ── 개설 패널 ── */
|
|
.kx-auc-open {
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-white);
|
|
overflow: hidden;
|
|
position: sticky;
|
|
top: var(--space-4);
|
|
}
|
|
.kx-auc-open__head {
|
|
background: var(--color-primary-700);
|
|
color: var(--color-on-accent);
|
|
padding: var(--space-4);
|
|
}
|
|
.kx-auc-open__head h2 {
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
.kx-auc-open__head p {
|
|
font-size: var(--fs-caption);
|
|
opacity: 0.9;
|
|
margin-top: 4px;
|
|
}
|
|
.kx-auc-open__body {
|
|
padding: var(--space-4);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-4);
|
|
max-height: 720px;
|
|
overflow-y: auto;
|
|
}
|
|
/* ★ 폼 유틸(kx-field*/kx-input/kx-grid-2)은 .kx-auc 로 스코프 격리(QA: 전역 재정의 방지).
|
|
옥션/낙찰 화면 루트에 .kx-auc 를 부여하므로 타 화면의 동명 클래스에 영향을 주지 않는다. */
|
|
.kx-auc .kx-field {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
.kx-auc .kx-field__label {
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-neutral-700);
|
|
font-weight: 600;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
.kx-auc .kx-field__label-note {
|
|
font-size: 11px;
|
|
color: var(--color-error);
|
|
font-weight: 500;
|
|
}
|
|
.kx-auc .kx-input {
|
|
height: 36px;
|
|
padding: 0 var(--space-3);
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-sm);
|
|
background: var(--color-white);
|
|
font-size: var(--fs-body);
|
|
color: var(--color-neutral-900);
|
|
width: 100%;
|
|
}
|
|
.kx-auc .kx-grid-2 {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: var(--space-3);
|
|
}
|
|
/* 비교표 컬럼 선택 버튼(낙찰 대상 선택) — 헤더 텍스트 스택을 버튼으로 감싼다. */
|
|
.kx-compare__co-select {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 2px;
|
|
width: 100%;
|
|
border: 0;
|
|
background: transparent;
|
|
cursor: pointer;
|
|
padding: 0;
|
|
}
|
|
.kx-compare__co-select[aria-pressed='true'] .kx-compare__co-name {
|
|
color: var(--color-primary, var(--color-ai-accent));
|
|
}
|
|
|
|
/* 가중치 슬라이더 카드 */
|
|
.kx-weights {
|
|
padding: var(--space-3);
|
|
background: var(--color-ai-surface);
|
|
border: 1px solid var(--color-ai-accent);
|
|
border-radius: var(--radius-lg);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-3);
|
|
}
|
|
.kx-weight__top {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-ai-accent);
|
|
font-weight: 600;
|
|
margin-bottom: 4px;
|
|
}
|
|
.kx-weight input[type='range'] {
|
|
width: 100%;
|
|
accent-color: var(--color-ai-accent);
|
|
cursor: pointer;
|
|
}
|
|
|
|
/* AI 자료 첨부 dropzone */
|
|
.kx-auc-attach {
|
|
width: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: var(--space-5);
|
|
border: 2px dashed var(--color-ai-accent);
|
|
background: var(--color-ai-surface);
|
|
border-radius: var(--radius-lg);
|
|
color: var(--color-ai-accent);
|
|
cursor: pointer;
|
|
font-weight: 600;
|
|
}
|
|
.kx-auc-attach small {
|
|
color: var(--color-neutral-500);
|
|
font-weight: 400;
|
|
font-size: 11px;
|
|
}
|
|
|
|
/* 초대 업체 리스트 */
|
|
.kx-invite {
|
|
max-height: 160px;
|
|
overflow-y: auto;
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-sm);
|
|
}
|
|
.kx-invite__row {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--space-2);
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--color-neutral-100);
|
|
font-size: var(--fs-body);
|
|
}
|
|
.kx-invite__row:last-child {
|
|
border-bottom: none;
|
|
}
|
|
.kx-invite__row--blocked {
|
|
color: var(--color-neutral-500);
|
|
}
|
|
.kx-invite__blocked-tag {
|
|
font-size: 11px;
|
|
color: var(--color-error);
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* ── SCR-27 상세 레이아웃 ── */
|
|
.kx-aucd__bar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--space-4);
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-white);
|
|
padding: var(--space-3) var(--space-4);
|
|
flex-wrap: wrap;
|
|
}
|
|
.kx-aucd__bar-left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-3);
|
|
flex-wrap: wrap;
|
|
}
|
|
.kx-live {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
background: #fef3f2;
|
|
color: var(--color-error);
|
|
font-size: var(--fs-caption);
|
|
font-weight: 700;
|
|
padding: 3px 10px;
|
|
border-radius: var(--radius-sm);
|
|
}
|
|
.kx-live__dot {
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
background: var(--color-error);
|
|
animation: kx-pulse 1.4s ease-in-out infinite;
|
|
}
|
|
@keyframes kx-pulse {
|
|
0%,
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.3;
|
|
}
|
|
}
|
|
.kx-aucd__bar-metrics {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-4);
|
|
}
|
|
.kx-aucd__metric {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
}
|
|
.kx-aucd__metric-label {
|
|
font-size: 11px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.04em;
|
|
color: var(--color-neutral-500);
|
|
}
|
|
.kx-aucd__metric-value {
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
color: var(--color-primary-700);
|
|
}
|
|
.kx-aucd__metric-value--ok {
|
|
color: var(--color-success);
|
|
}
|
|
|
|
.kx-aucd__grid {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 2fr) minmax(320px, 1fr);
|
|
gap: var(--space-5);
|
|
align-items: start;
|
|
}
|
|
@media (max-width: 1080px) {
|
|
.kx-aucd__grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
|
|
/* 자료 뷰어 */
|
|
.kx-viewer {
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-white);
|
|
overflow: hidden;
|
|
}
|
|
.kx-viewer__tabs {
|
|
display: flex;
|
|
gap: var(--space-4);
|
|
padding: 0 var(--space-4);
|
|
border-bottom: var(--border-card);
|
|
background: var(--color-neutral-050);
|
|
}
|
|
.kx-viewer__tab {
|
|
position: relative;
|
|
height: 44px;
|
|
border: none;
|
|
background: transparent;
|
|
font-size: var(--fs-body);
|
|
font-weight: 600;
|
|
color: var(--color-neutral-500);
|
|
cursor: pointer;
|
|
}
|
|
.kx-viewer__tab.is-active {
|
|
color: var(--color-primary-700);
|
|
}
|
|
.kx-viewer__tab.is-active::after {
|
|
content: '';
|
|
position: absolute;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: -1px;
|
|
height: 2px;
|
|
background: var(--color-primary-700);
|
|
}
|
|
.kx-viewer__stage {
|
|
position: relative;
|
|
aspect-ratio: 16 / 10;
|
|
background: var(--color-canvas-bg);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
color: rgba(255, 255, 255, 0.5);
|
|
overflow: hidden;
|
|
}
|
|
.kx-viewer__placeholder {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
text-align: center;
|
|
padding: var(--space-5);
|
|
}
|
|
.kx-viewer__placeholder-title {
|
|
font-size: var(--fs-h3);
|
|
color: rgba(255, 255, 255, 0.85);
|
|
font-weight: 600;
|
|
}
|
|
.kx-viewer__placeholder-desc {
|
|
font-size: var(--fs-caption);
|
|
color: rgba(255, 255, 255, 0.55);
|
|
max-width: 380px;
|
|
}
|
|
.kx-viewer__watermark {
|
|
position: absolute;
|
|
right: 16px;
|
|
bottom: 12px;
|
|
font-size: 11px;
|
|
font-style: italic;
|
|
color: rgba(255, 255, 255, 0.4);
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* 실시간 순위 패널 */
|
|
.kx-rank {
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-white);
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
.kx-rank__head {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: var(--space-4);
|
|
border-bottom: var(--border-card);
|
|
}
|
|
.kx-rank__head h2 {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-900);
|
|
}
|
|
.kx-toggle {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-neutral-500);
|
|
background: none;
|
|
border: none;
|
|
cursor: pointer;
|
|
}
|
|
.kx-toggle__track {
|
|
width: 38px;
|
|
height: 20px;
|
|
border-radius: var(--radius-pill);
|
|
background: var(--color-neutral-200);
|
|
position: relative;
|
|
transition: background 0.15s ease;
|
|
}
|
|
.kx-toggle__track.is-on {
|
|
background: var(--color-primary-600);
|
|
}
|
|
.kx-toggle__knob {
|
|
position: absolute;
|
|
top: 2px;
|
|
left: 2px;
|
|
width: 16px;
|
|
height: 16px;
|
|
border-radius: 50%;
|
|
background: var(--color-white);
|
|
transition: transform 0.15s ease;
|
|
}
|
|
.kx-toggle__track.is-on .kx-toggle__knob {
|
|
transform: translateX(18px);
|
|
}
|
|
|
|
.kx-rank__list {
|
|
padding: var(--space-4);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-3);
|
|
overflow-y: auto;
|
|
}
|
|
.kx-rank__row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-3);
|
|
padding: var(--space-3);
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-white);
|
|
}
|
|
.kx-rank__row--lowest {
|
|
border-left: 4px solid var(--color-primary-600);
|
|
}
|
|
.kx-rank__row--me {
|
|
background: var(--color-ai-surface);
|
|
border: 2px solid var(--color-ai-accent);
|
|
}
|
|
.kx-rank__badge {
|
|
width: 34px;
|
|
height: 34px;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-weight: 700;
|
|
background: var(--color-primary-100);
|
|
color: var(--color-primary-700);
|
|
flex-shrink: 0;
|
|
}
|
|
.kx-rank__row--me .kx-rank__badge {
|
|
background: var(--color-ai-accent);
|
|
color: var(--color-on-accent);
|
|
}
|
|
.kx-rank__main {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.kx-rank__alias {
|
|
font-size: var(--fs-body);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-900);
|
|
}
|
|
.kx-rank__row--me .kx-rank__alias {
|
|
color: var(--color-ai-accent);
|
|
}
|
|
.kx-rank__price {
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
color: var(--color-primary-700);
|
|
}
|
|
.kx-rank__price--masked {
|
|
font-size: var(--fs-body);
|
|
color: var(--color-neutral-500);
|
|
font-weight: 600;
|
|
}
|
|
.kx-rank__tag {
|
|
font-size: 11px;
|
|
padding: 1px 8px;
|
|
border-radius: var(--radius-pill);
|
|
background: #e6f4ee;
|
|
color: var(--color-success);
|
|
font-weight: 600;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.kx-rank__foot {
|
|
border-top: var(--border-card);
|
|
padding: var(--space-4);
|
|
background: var(--color-neutral-050);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-3);
|
|
}
|
|
.kx-countdown {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
padding: var(--space-3);
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-white);
|
|
}
|
|
.kx-countdown__label {
|
|
font-size: 11px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.16em;
|
|
color: var(--color-neutral-500);
|
|
font-weight: 700;
|
|
}
|
|
.kx-countdown__value {
|
|
font-size: var(--fs-display);
|
|
line-height: var(--lh-display);
|
|
font-weight: 700;
|
|
color: var(--color-primary-700);
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
.kx-rank__note {
|
|
font-size: 11px;
|
|
color: var(--color-neutral-500);
|
|
text-align: center;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
/* ── SCR-29 낙찰 비교 ── */
|
|
.kx-award__summary {
|
|
display: flex;
|
|
gap: var(--space-3);
|
|
flex-wrap: wrap;
|
|
}
|
|
.kx-award__chip {
|
|
padding: 8px 14px;
|
|
background: var(--color-white);
|
|
border: var(--border-card);
|
|
border-left: 4px solid var(--color-primary-600);
|
|
border-radius: var(--radius-sm);
|
|
}
|
|
.kx-award__chip:nth-child(2) {
|
|
border-left-color: var(--color-ai-accent);
|
|
}
|
|
.kx-award__chip:nth-child(3) {
|
|
border-left-color: var(--color-success);
|
|
}
|
|
.kx-award__chip-label {
|
|
font-size: 11px;
|
|
color: var(--color-neutral-500);
|
|
}
|
|
.kx-award__chip-value {
|
|
font-size: var(--fs-body);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-900);
|
|
}
|
|
|
|
.kx-award__grid {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) minmax(340px, 380px);
|
|
gap: var(--space-5);
|
|
align-items: start;
|
|
}
|
|
@media (max-width: 1200px) {
|
|
.kx-award__grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
.kx-award__main {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-5);
|
|
min-width: 0;
|
|
}
|
|
|
|
/* 비교 매트릭스 */
|
|
.kx-compare {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: var(--fs-body);
|
|
}
|
|
.kx-compare th,
|
|
.kx-compare td {
|
|
padding: var(--space-4);
|
|
border-bottom: var(--border-card);
|
|
text-align: center;
|
|
}
|
|
.kx-compare thead th {
|
|
background: var(--color-neutral-050);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-900);
|
|
}
|
|
.kx-compare thead th.kx-compare__metric-col,
|
|
.kx-compare td.kx-compare__metric-col {
|
|
text-align: left;
|
|
width: 22%;
|
|
font-weight: 600;
|
|
color: var(--color-neutral-700);
|
|
}
|
|
.kx-compare__co {
|
|
position: relative;
|
|
}
|
|
.kx-compare__co-name {
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-900);
|
|
}
|
|
.kx-compare__co--rec .kx-compare__co-name {
|
|
color: var(--color-primary-700);
|
|
}
|
|
.kx-compare__co-sub {
|
|
display: block;
|
|
font-size: 11px;
|
|
font-weight: 400;
|
|
color: var(--color-neutral-500);
|
|
margin-top: 2px;
|
|
}
|
|
.kx-compare__rec-tag {
|
|
display: inline-block;
|
|
margin-bottom: 6px;
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
color: var(--color-on-accent);
|
|
background: var(--color-primary-700);
|
|
padding: 2px 8px;
|
|
border-radius: var(--radius-pill);
|
|
}
|
|
.kx-compare__best {
|
|
background: #f0fbf6;
|
|
color: var(--color-success);
|
|
font-weight: 700;
|
|
}
|
|
.kx-compare__val-strong {
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
}
|
|
.kx-compare__note {
|
|
display: block;
|
|
font-size: 11px;
|
|
color: var(--color-neutral-500);
|
|
margin-top: 2px;
|
|
}
|
|
.kx-compare__note--best {
|
|
color: var(--color-success);
|
|
}
|
|
.kx-compare__score {
|
|
background: var(--color-ai-surface);
|
|
}
|
|
.kx-compare__score-val {
|
|
font-size: var(--fs-display);
|
|
font-weight: 700;
|
|
color: var(--color-ai-accent);
|
|
}
|
|
.kx-compare__star {
|
|
color: var(--color-warning);
|
|
}
|
|
|
|
/* 리스크 카드 */
|
|
.kx-risk {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
|
|
gap: var(--space-4);
|
|
align-items: center;
|
|
}
|
|
@media (max-width: 720px) {
|
|
.kx-risk {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
.kx-risk__grade {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 2px;
|
|
padding: var(--space-4);
|
|
background: var(--color-ai-surface);
|
|
border: 1px solid var(--color-ai-accent);
|
|
border-radius: var(--radius-lg);
|
|
}
|
|
.kx-risk__grade-value {
|
|
font-size: 40px;
|
|
font-weight: 700;
|
|
color: var(--color-ai-accent);
|
|
line-height: 1.1;
|
|
}
|
|
.kx-barlist__fill--success {
|
|
background: var(--color-success);
|
|
}
|
|
.kx-barlist__fill--ai {
|
|
background: var(--color-ai-accent);
|
|
}
|
|
|
|
/* 낙찰 선정 패널 */
|
|
.kx-award__panel {
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-white);
|
|
padding: var(--space-4);
|
|
position: sticky;
|
|
top: var(--space-4);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-4);
|
|
}
|
|
.kx-award__panel h2 {
|
|
font-size: var(--fs-h2);
|
|
font-weight: 700;
|
|
color: var(--color-primary-700);
|
|
}
|
|
.kx-award__rec {
|
|
border: 1px solid var(--color-primary-600);
|
|
border-radius: var(--radius-lg);
|
|
padding: var(--space-4);
|
|
position: relative;
|
|
}
|
|
.kx-award__rec-top {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-3);
|
|
margin-bottom: var(--space-3);
|
|
}
|
|
.kx-award__rec-avatar {
|
|
width: 44px;
|
|
height: 44px;
|
|
border-radius: var(--radius-lg);
|
|
background: var(--color-primary-700);
|
|
color: var(--color-on-accent);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: var(--fs-h2);
|
|
font-weight: 700;
|
|
}
|
|
.kx-award__rec-name {
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
}
|
|
.kx-award__rec-ai {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-ai-accent);
|
|
}
|
|
.kx-award__rec-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: var(--space-3);
|
|
padding-top: var(--space-3);
|
|
border-top: var(--border-card);
|
|
}
|
|
.kx-award__rec-cell span {
|
|
display: block;
|
|
}
|
|
.kx-award__rec-cell-label {
|
|
font-size: 11px;
|
|
color: var(--color-neutral-500);
|
|
}
|
|
.kx-award__rec-cell-value {
|
|
font-size: var(--fs-body);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-900);
|
|
}
|
|
.kx-award__textarea {
|
|
width: 100%;
|
|
min-height: 110px;
|
|
padding: var(--space-3);
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
font-size: var(--fs-body);
|
|
font-family: var(--font-sans);
|
|
resize: vertical;
|
|
}
|
|
.kx-award__warn {
|
|
display: flex;
|
|
gap: var(--space-2);
|
|
padding: var(--space-3);
|
|
background: #fef3f2;
|
|
border-radius: var(--radius-sm);
|
|
font-size: 11px;
|
|
line-height: 1.5;
|
|
color: var(--color-error);
|
|
}
|
|
.kx-award__steps {
|
|
border-top: var(--border-card);
|
|
padding-top: var(--space-4);
|
|
}
|
|
.kx-award__steps-title {
|
|
font-size: var(--fs-caption);
|
|
font-weight: 700;
|
|
color: var(--color-neutral-700);
|
|
margin-bottom: var(--space-3);
|
|
}
|
|
.kx-award__steps ol {
|
|
list-style: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-3);
|
|
}
|
|
.kx-award__steps li {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-3);
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-neutral-700);
|
|
}
|
|
.kx-award__steps li span {
|
|
width: 22px;
|
|
height: 22px;
|
|
border-radius: 50%;
|
|
background: var(--color-neutral-100);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
/* 토스트 */
|
|
.kx-auc__toast {
|
|
position: fixed;
|
|
bottom: var(--space-5);
|
|
right: var(--space-5);
|
|
z-index: 100;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
padding: 12px 16px;
|
|
background: var(--color-neutral-900);
|
|
color: var(--color-on-accent);
|
|
border-radius: var(--radius-lg);
|
|
font-size: var(--fs-body);
|
|
box-shadow: var(--shadow-level2);
|
|
}
|
|
|
|
/* F035 물량서(BOQ) 패널 — 자료 뷰어 스테이지 내부(밝은 카드·내부 스크롤) */
|
|
.kx-boq {
|
|
position: absolute;
|
|
inset: 0;
|
|
background: var(--color-white);
|
|
color: var(--color-text-strong);
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: var(--space-4);
|
|
gap: var(--space-3);
|
|
overflow: auto;
|
|
text-align: left;
|
|
}
|
|
.kx-boq__head {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: baseline;
|
|
justify-content: space-between;
|
|
gap: var(--space-2);
|
|
}
|
|
.kx-boq__title {
|
|
font-size: var(--fs-h3);
|
|
font-weight: 700;
|
|
color: var(--color-text-strong);
|
|
}
|
|
.kx-boq__scope {
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-text-muted);
|
|
}
|
|
.kx-boq__scroll {
|
|
overflow: auto;
|
|
border: var(--border-card);
|
|
border-radius: var(--radius-lg);
|
|
}
|
|
.kx-boq__table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: var(--fs-body);
|
|
color: var(--color-neutral-700);
|
|
}
|
|
.kx-boq__table th,
|
|
.kx-boq__table td {
|
|
padding: 10px 12px;
|
|
border-bottom: 1px solid var(--color-neutral-200);
|
|
text-align: left;
|
|
vertical-align: top;
|
|
}
|
|
.kx-boq__table thead th {
|
|
background: var(--color-neutral-050);
|
|
font-size: var(--fs-caption);
|
|
font-weight: 600;
|
|
letter-spacing: 0.02em;
|
|
color: var(--color-neutral-500);
|
|
border-bottom: 2px solid var(--color-neutral-200);
|
|
white-space: nowrap;
|
|
vertical-align: bottom;
|
|
position: sticky;
|
|
top: 0;
|
|
}
|
|
.kx-boq__num {
|
|
text-align: right;
|
|
}
|
|
.kx-boq__trade {
|
|
display: inline-block;
|
|
padding: 2px 8px;
|
|
border-radius: 999px;
|
|
background: var(--color-primary-surface, #eef2ff);
|
|
color: var(--color-primary-600, #2f42fc);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
}
|
|
.kx-boq__basis {
|
|
color: var(--color-text-muted);
|
|
font-size: 11px;
|
|
}
|
|
.kx-boq__note {
|
|
font-size: var(--fs-caption);
|
|
color: var(--color-text-muted);
|
|
}
|