kintex/src/frontend/src/screens/auction/auction.css
zio 55e27b3309 fix(theme): white text on colored buttons/badges in dark mode (--color-on-accent)
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>
2026-07-12 20:34:30 +09:00

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);
}