가상 수정

This commit is contained in:
Macbook
2026-05-25 16:02:52 +09:00
parent 3102169541
commit 182b82e990
18 changed files with 747 additions and 105 deletions
+31 -2
View File
@@ -684,8 +684,37 @@
}
}
.ptd-order-card .top-submit--buy { background: #22c55e !important; border-color: #22c55e !important; }
.ptd-order-card .top-submit--sell { background: var(--accent) !important; border-color: var(--accent) !important; }
/* 매수·매도 제출 버튼: 실시간 차트 우측 패널(.top-submit--buy/sell)과 동일 */
.ptd-order-card .top-submit--buy {
background: #ef5350;
border-color: #ef5350;
}
.ptd-order-card .top-submit--buy:hover {
background: #e53935;
}
.ptd-order-card .top-submit--sell {
background: #2962ff;
border-color: #2962ff;
}
.ptd-order-card .top-submit--sell:hover {
background: #1e53e5;
}
/* 매수·매도 카드 헤더: 실시간 차트 .rsp-trade-card--buy/sell 과 동일 */
.ptd-split-panel--right .ptd-split-card--top {
border-color: rgba(255, 107, 107, 0.35);
background: linear-gradient(180deg, rgba(255, 107, 107, 0.08) 0%, var(--bg3) 48px);
}
.ptd-split-panel--right .ptd-split-card--bottom {
border-color: rgba(77, 171, 247, 0.35);
background: linear-gradient(180deg, rgba(77, 171, 247, 0.08) 0%, var(--bg3) 48px);
}
.ptd-split-panel--right .ptd-split-card--top .ptd-split-card-head {
color: var(--up);
}
.ptd-split-panel--right .ptd-split-card--bottom .ptd-split-card-head {
color: var(--down);
}
.ptd-ob {
background: var(--bg2);
+457 -20
View File
@@ -536,6 +536,18 @@
min-width: 0;
}
.vtd-focus-meta {
display: flex;
align-items: center;
flex-shrink: 0;
}
.vtd-focus-meta .vtd-target-quote--compact {
margin-top: 0;
padding: 0;
gap: 6px;
}
.vtd-focus-title {
display: flex;
flex-direction: column;
@@ -612,7 +624,12 @@
}
.vtd-focus-pane--signal .vtd-focus-pane-body {
overflow-y: auto;
overflow: hidden;
}
.vtd-focus-pane--signal .vtd-focus-pane-body > .vtd-sig-panel-wrap {
flex: 1;
min-height: 0;
}
.vtd-sig-panel-wrap {
@@ -623,6 +640,73 @@
min-height: 0;
}
.vtd-sig-panel-wrap .vtd-card-foot {
margin-top: auto;
flex-shrink: 0;
}
/* 상세표시 — 상단 고정 + 중간 테이블 스크롤 + 푸터는 wrap 하단(margin-top:auto) */
.vtd-sig-panel-wrap--detail {
gap: 10px;
flex: 1;
min-height: 0;
overflow: hidden;
}
.vtd-sig-panel-wrap--detail > .vtd-sig-panel--detail-top {
flex: 0 0 auto;
flex-grow: 0;
flex-shrink: 0;
min-height: 0;
overflow: hidden;
}
.vtd-sig-panel-wrap--detail .vtd-sig-panel--detail-top .vtd-sig-visual {
flex-shrink: 0;
}
.vtd-sig-panel-wrap--detail .vtd-sig-detail-table {
flex: 1 1 0;
min-height: 0;
overflow-x: auto;
overflow-y: auto;
}
.vtd-sig-panel-wrap--detail .vtd-sig-detail-table .vtd-sig-table-wrap {
margin: 0;
min-width: min(100%, 320px);
}
/* 전체보기(분할) 등 좁은 패널: 테이블만 내부 스크롤 */
.vtd-focus-pane--signal .vtd-sig-panel-wrap--detail .vtd-sig-detail-table {
flex: 1 1 0;
min-height: 100px;
overflow-x: hidden;
overflow-y: auto;
}
.vtd-card--detail .vtd-card-meta {
display: grid;
grid-template-columns: minmax(0, 1fr) auto auto;
align-items: center;
gap: 6px 10px;
}
.vtd-card--detail .vtd-card-meta .vtd-target-quote--compact {
grid-column: 1;
min-width: 0;
}
.vtd-card--detail .vtd-card-met-count {
grid-column: 2;
white-space: nowrap;
}
.vtd-card--detail .vtd-card-meta .vtd-live-badge {
grid-column: 3;
margin-left: 0;
}
.vtd-sig-panel-wrap--receiving .vtd-sig-panel {
box-shadow: inset 0 0 24px color-mix(in srgb, #b9f6ca 8%, transparent);
}
@@ -756,6 +840,7 @@
min-height: 0;
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
grid-auto-rows: minmax(520px, auto);
gap: 14px;
padding: 4px 4px 12px;
overflow-y: auto;
@@ -763,6 +848,7 @@
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
align-content: start;
align-items: stretch;
}
@media (max-width: 1280px) {
@@ -787,6 +873,46 @@
display: flex;
flex-direction: column;
gap: 10px;
height: 100%;
}
.vtd-card:not(.vtd-card--chart-mode):not(.vtd-card--detail) {
min-height: 360px;
}
.vtd-card > .vtd-sig-panel-wrap {
flex: 1;
min-height: 0;
}
/* 상세 카드 — 그리드 행 높이에 맞춰 동일 높이, 푸터는 카드 하단 고정 */
.vtd-card.vtd-card--detail {
height: 100%;
align-self: stretch;
overflow: hidden;
min-height: 520px;
}
.vtd-card.vtd-card--detail > .vtd-sig-panel-wrap--detail {
flex: 1;
min-height: 0;
overflow: hidden;
}
.vtd-card.vtd-card--detail .vtd-sig-panel.vtd-sig-panel--detail-top {
flex: 0 0 auto;
flex-grow: 0;
flex-shrink: 0;
}
.vtd-card.vtd-card--detail .vtd-sig-panel-wrap--detail .vtd-sig-panel--detail-top .vtd-heat-list {
max-height: 168px;
overflow-y: auto;
}
.vtd-card.vtd-card--detail .vtd-sig-panel-wrap .vtd-card-foot {
margin-top: auto;
flex-shrink: 0;
}
.vtd-card--signal {
@@ -898,6 +1024,14 @@
font-size: 11px;
}
.vtd-card-tf {
font-size: 10px;
font-weight: 600;
color: var(--se-text-muted);
white-space: nowrap;
flex-shrink: 0;
}
.vtd-card-head-actions {
display: flex;
align-items: center;
@@ -1064,6 +1198,29 @@
color: var(--se-text-muted);
}
.vtd-card-meta .vtd-target-quote--compact {
margin-top: 0;
padding: 0;
flex: 1;
min-width: 0;
gap: 6px;
}
.vtd-card-price-label {
font-size: 10px;
font-weight: 600;
color: var(--se-text-muted);
white-space: nowrap;
}
.vtd-card-meta .vtd-target-quote--compact .vtd-target-price {
font-size: 12px;
}
.vtd-card-meta .vtd-target-quote--compact .vtd-target-change {
font-size: 10px;
}
.vtd-card-empty {
min-height: 120px;
display: flex;
@@ -1155,36 +1312,53 @@
max-height: 160px;
}
.vtd-card--summary .vtd-card-foot {
margin-top: 2px;
}
.vtd-card-met-count {
color: color-mix(in srgb, #c9a227 80%, var(--se-text));
font-weight: 600;
}
.vtd-card--detail .vtd-card-met-count {
font-size: 13px;
font-weight: 800;
color: color-mix(in srgb, #f0c040 85%, #fff);
}
.vtd-card-foot {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 10px;
color: var(--se-text-muted);
padding-top: 4px;
padding-top: 8px;
margin-top: auto;
flex-shrink: 0;
border-top: 1px solid var(--se-border);
}
.vtd-card-match-summary {
font-weight: 700;
color: var(--accent, #3f7ef5);
}
/* 시그널 일치율 패널 — 카드 높이 고정·축소 방지, 전체 UI 항상 표시 */
/* 시그널 일치율 패널 — 요약: 스크롤 / 상세: 상단 고정 높이 */
.vtd-sig-panel {
display: flex;
flex-direction: column;
gap: 10px;
flex: 1;
min-height: 0;
}
.vtd-sig-panel--summary {
overflow-y: auto;
}
.vtd-sig-panel--detail-top {
flex: 0 0 auto;
flex-grow: 0;
flex-shrink: 0;
overflow: hidden;
}
.vtd-card-match-summary {
font-weight: 700;
color: var(--accent, #3f7ef5);
}
.vtd-sig-panel-title {
@@ -1283,7 +1457,184 @@
text-shadow: 0 0 8px color-mix(in srgb, #82b1ff 60%, transparent);
}
/* 조건 목록 (이퀄라이저 ↔ 신호등 사이) */
/* Proximity Heatmap Bar — 이퀄라이저 ↔ 신호등 사이 (Cybernetic Command Desk) */
.vtd-heat-list {
list-style: none;
margin: 0;
padding: 2px 0;
display: flex;
flex-direction: column;
gap: 8px;
max-height: 188px;
overflow-y: auto;
min-width: 0;
flex: 1;
}
.vtd-heat-list::-webkit-scrollbar {
width: 4px;
}
.vtd-heat-list::-webkit-scrollbar-thumb {
background: color-mix(in srgb, #c9a227 35%, var(--se-border));
border-radius: 2px;
}
.vtd-heat-row {
display: flex;
align-items: center;
gap: 6px;
min-width: 0;
}
.vtd-heat-track {
position: relative;
flex: 1;
min-width: 0;
height: 26px;
border-radius: 8px;
border: 1px solid color-mix(in srgb, var(--se-border) 70%, #3a4a6b);
background: color-mix(in srgb, #060a14 85%, #000);
overflow: hidden;
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.45);
}
.vtd-heat-label {
position: absolute;
left: 8px;
top: 50%;
transform: translateY(-50%);
z-index: 2;
max-width: calc(100% - 48px);
font-size: 9px;
font-weight: 600;
color: color-mix(in srgb, var(--se-text) 88%, #fff);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
pointer-events: none;
text-shadow: 0 0 6px rgba(0, 0, 0, 0.9), 0 1px 2px rgba(0, 0, 0, 0.8);
}
.vtd-heat-fill {
position: absolute;
left: 0;
top: 0;
bottom: 0;
min-width: 0;
border-radius: 7px 0 0 7px;
transition: width 0.35s ease, box-shadow 0.35s ease, background 0.35s ease;
}
.vtd-heat-pct {
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
z-index: 2;
font-size: 10px;
font-weight: 800;
font-variant-numeric: tabular-nums;
pointer-events: none;
text-shadow: 0 0 8px rgba(0, 0, 0, 0.85);
}
.vtd-heat-icon {
flex-shrink: 0;
width: 18px;
display: flex;
align-items: center;
justify-content: center;
}
.vtd-heat-icon-svg {
display: block;
filter: drop-shadow(0 0 4px currentColor);
}
/* Mismatch — 낮음 (빨강) */
.vtd-heat-row--nomatch .vtd-heat-track {
border-color: color-mix(in srgb, #ef5350 40%, var(--se-border));
box-shadow:
inset 0 1px 4px rgba(0, 0, 0, 0.45),
0 0 8px color-mix(in srgb, #ef5350 15%, transparent);
}
.vtd-heat-row--nomatch .vtd-heat-fill {
background: linear-gradient(90deg, #b71c1c 0%, #ef5350 55%, #ff8a80 100%);
box-shadow:
0 0 12px color-mix(in srgb, #ef5350 50%, transparent),
inset 0 0 8px color-mix(in srgb, #ffcdd2 20%, transparent);
}
.vtd-heat-row--nomatch .vtd-heat-pct {
color: #ff8a80;
}
.vtd-heat-row--nomatch .vtd-heat-icon {
color: #ef5350;
}
/* Pending — 중간 (오렌지) */
.vtd-heat-row--pending .vtd-heat-track {
border-color: color-mix(in srgb, #ffb300 45%, var(--se-border));
box-shadow:
inset 0 1px 4px rgba(0, 0, 0, 0.45),
0 0 10px color-mix(in srgb, #ffb300 18%, transparent);
}
.vtd-heat-row--pending .vtd-heat-fill {
background: linear-gradient(90deg, #e65100 0%, #ffb300 45%, #ffe082 100%);
box-shadow:
0 0 14px color-mix(in srgb, #ffb300 45%, transparent),
inset 0 0 10px color-mix(in srgb, #fff59d 18%, transparent);
}
.vtd-heat-row--pending .vtd-heat-pct {
color: #ffe082;
}
.vtd-heat-row--pending .vtd-heat-icon {
color: #ffb300;
}
/* Match — 높음 (푸른색) */
.vtd-heat-row--match .vtd-heat-track {
border-color: color-mix(in srgb, #3f7ef5 45%, var(--se-border));
box-shadow:
inset 0 1px 4px rgba(0, 0, 0, 0.45),
0 0 12px color-mix(in srgb, #3f7ef5 22%, transparent);
}
.vtd-heat-row--match .vtd-heat-fill {
background: linear-gradient(90deg, #1565c0 0%, #3f7ef5 45%, #82b1ff 100%);
box-shadow:
0 0 16px color-mix(in srgb, #3f7ef5 55%, transparent),
inset 0 0 12px color-mix(in srgb, #bbdefb 25%, transparent);
}
.vtd-heat-row--match .vtd-heat-pct {
color: #82b1ff;
}
.vtd-heat-row--match .vtd-heat-icon {
color: #3f7ef5;
filter: drop-shadow(0 0 5px #3f7ef5);
}
.vtd-heat-list-empty {
margin: 0;
padding: 8px;
font-size: 10px;
text-align: center;
align-self: center;
}
.vtd-sig-panel--summary .vtd-heat-list {
max-height: 160px;
}
/* legacy 조건 목록 (상세 테이블 STATUS 열) */
.vtd-cond-list {
list-style: none;
margin: 0;
@@ -1357,7 +1708,7 @@
}
.vtd-cond-signal--match {
color: var(--down, #ef5350);
color: #3f7ef5;
}
.vtd-cond-signal--pending {
@@ -1365,7 +1716,7 @@
}
.vtd-cond-signal--nomatch {
color: var(--up, #26a69a);
color: #ef5350;
}
.vtd-cond-signal--unknown {
@@ -1471,8 +1822,10 @@
.vtd-sig-table-wrap {
border: 1px solid color-mix(in srgb, #c9a227 35%, var(--se-border));
border-radius: 8px;
overflow: hidden;
overflow-x: auto;
overflow-y: visible;
background: color-mix(in srgb, #0d111f 50%, transparent);
-webkit-overflow-scrolling: touch;
}
.vtd-sig-table-head {
@@ -1487,23 +1840,37 @@
.vtd-sig-table {
width: 100%;
min-width: 100%;
border-collapse: collapse;
font-size: 10px;
table-layout: fixed;
}
.vtd-sig-col--ind { width: 30%; }
.vtd-sig-col--val { width: 14%; }
.vtd-sig-col--threshold { width: 22%; }
.vtd-sig-col--progress { width: 16%; }
.vtd-sig-col--status { width: 18%; min-width: 4.75rem; }
.vtd-sig-table th {
text-align: left;
padding: 6px 8px;
padding: 6px 6px;
font-size: 8px;
font-weight: 700;
letter-spacing: 0.04em;
letter-spacing: 0.02em;
color: color-mix(in srgb, #c9a227 80%, var(--se-text-muted));
border-bottom: 1px solid var(--se-border);
white-space: nowrap;
}
.vtd-sig-table th.vtd-sig-table-th--status,
.vtd-sig-table td.vtd-sig-table-status-cell {
padding-right: 10px;
text-align: right;
}
.vtd-sig-table td {
padding: 7px 8px;
padding: 7px 6px;
border-bottom: 1px solid color-mix(in srgb, var(--se-border) 60%, transparent);
vertical-align: middle;
}
@@ -1515,6 +1882,9 @@
.vtd-sig-table-ind {
font-weight: 600;
color: var(--se-text);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.vtd-sig-table-val {
@@ -1528,7 +1898,24 @@
}
.vtd-sig-table-progress {
min-width: 88px;
min-width: 0;
}
.vtd-sig-table-status-cell {
min-width: 4.75rem;
overflow: visible;
}
.vtd-sig-table-status-cell .vtd-cond-signal {
justify-content: flex-end;
max-width: none;
}
.vtd-sig-table-status-cell .vtd-cond-signal--compact .vtd-cond-signal-label {
font-size: 9px;
max-width: none;
overflow: visible;
text-overflow: clip;
}
.vtd-sig-row-bar {
@@ -1561,6 +1948,56 @@
background: var(--se-border);
}
.vtd-sig-row-bar-fill--cold {
background: linear-gradient(90deg, #b71c1c, #ef5350);
box-shadow: 0 0 6px color-mix(in srgb, #ef5350 40%, transparent);
}
.vtd-sig-row-bar-fill--warming {
background: linear-gradient(90deg, #e65100, #ffb300, #ffe082);
box-shadow: 0 0 6px color-mix(in srgb, #ffb300 40%, transparent);
}
.vtd-sig-row-bar-fill--hot {
background: linear-gradient(90deg, #1565c0, #3f7ef5, #82b1ff);
box-shadow: 0 0 8px color-mix(in srgb, #3f7ef5 50%, transparent);
}
.vtd-sig-row-bar-fill--nomatch {
background: linear-gradient(90deg, #b71c1c, #ef5350);
box-shadow: 0 0 6px color-mix(in srgb, #ef5350 40%, transparent);
}
.vtd-sig-row-bar-fill--pending {
background: linear-gradient(90deg, #e65100, #ffb300, #ffe082);
box-shadow: 0 0 6px color-mix(in srgb, #ffb300 40%, transparent);
}
.vtd-sig-row-bar-fill--match {
background: linear-gradient(90deg, #1565c0, #3f7ef5, #82b1ff);
box-shadow: 0 0 8px color-mix(in srgb, #3f7ef5 50%, transparent);
}
.vtd-sig-table-pct {
font-size: 9px;
color: var(--se-text-muted);
font-variant-numeric: tabular-nums;
}
.vtd-sig-table-status {
font-size: 10px;
font-weight: 800;
font-variant-numeric: tabular-nums;
}
.vtd-sig-table-status--cold { color: #ef5350; }
.vtd-sig-table-status--warming { color: #ffe082; }
.vtd-sig-table-status--hot { color: #82b1ff; }
.vtd-sig-table-status--nomatch { color: #ef5350; }
.vtd-sig-table-status--pending { color: #ffe082; }
.vtd-sig-table-status--match { color: #82b1ff; }
.vtd-sig-row-pct {
font-size: 9px;
color: var(--se-text-muted);