2084 lines
41 KiB
CSS
2084 lines
41 KiB
CSS
/* 백테스팅 대시보드 (btd-*) — 앱 테마(se-page) 연동 */
|
|
|
|
.bps-page,
|
|
.se-page {
|
|
--btd-gold: var(--se-gold, #e6c200);
|
|
--btd-gold-light: #ffe566;
|
|
--btd-gold-dark: #c9a227;
|
|
--btd-gold-border: color-mix(in srgb, var(--se-gold, #e6c200) 22%, transparent);
|
|
--btd-gold-border-strong: color-mix(in srgb, var(--se-gold, #e6c200) 42%, transparent);
|
|
--btd-gold-bg: color-mix(in srgb, var(--se-gold, #e6c200) 10%, transparent);
|
|
--btd-gold-bg-hover: color-mix(in srgb, var(--se-gold, #e6c200) 16%, transparent);
|
|
--btd-surface: var(--se-bg-elevated, var(--bg2));
|
|
--btd-bg: var(--se-bg, var(--bg));
|
|
--btd-divider: var(--se-border, var(--border));
|
|
--btd-bull: var(--se-success, var(--up));
|
|
--btd-bear: var(--se-danger, var(--down));
|
|
}
|
|
|
|
.se-page--light {
|
|
--btd-gold-border: color-mix(in srgb, var(--se-gold) 28%, transparent);
|
|
--btd-gold-border-strong: color-mix(in srgb, var(--se-gold) 45%, transparent);
|
|
--btd-gold-bg: color-mix(in srgb, var(--se-gold) 12%, transparent);
|
|
--btd-gold-bg-hover: color-mix(in srgb, var(--se-gold) 18%, transparent);
|
|
}
|
|
|
|
.bps-center-content .btd-empty span { font-size: 48px; opacity: 0.35; }
|
|
.btd-sidebar-hint { font-size: 0.72rem; opacity: 0.75; line-height: 1.6; }
|
|
|
|
.bps-panel-body .btd-timeline {
|
|
position: relative;
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding: 4px 2px 8px 14px;
|
|
min-height: 120px;
|
|
}
|
|
|
|
.bps-panel-body .btd-sidebar-empty {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 24px 12px;
|
|
text-align: center;
|
|
color: var(--se-text-dim);
|
|
font-size: 0.78rem;
|
|
gap: 8px;
|
|
}
|
|
|
|
.bps-center-content .btd-dashboard {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
padding: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.bps-center-content .btd-empty {
|
|
flex: 1;
|
|
min-height: 240px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 10px;
|
|
color: var(--se-text-dim);
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
.btd-meta {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-meta-value {
|
|
font-size: 0.82rem;
|
|
font-weight: 700;
|
|
color: var(--se-text);
|
|
}
|
|
|
|
.btd-footer-stats {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 10px;
|
|
}
|
|
|
|
.btd-footer-stat {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
padding: 8px 10px;
|
|
border-radius: 8px;
|
|
border: 1px solid var(--se-border);
|
|
background: color-mix(in srgb, var(--se-bg-elevated) 88%, transparent);
|
|
}
|
|
|
|
.btd-footer-stat-label {
|
|
font-size: 0.68rem;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-footer-stat-value {
|
|
font-size: 1rem;
|
|
font-weight: 800;
|
|
color: var(--se-text);
|
|
}
|
|
|
|
.btd-footer-stat-value.up { color: var(--se-up); }
|
|
.btd-footer-stat-value.down { color: var(--se-down); }
|
|
|
|
@media (max-width: 1200px) {
|
|
.btd-footer-stats { grid-template-columns: repeat(2, 1fr); }
|
|
}
|
|
|
|
/* legacy page layout removed — shell handles structure */
|
|
|
|
.btd-timeline-line {
|
|
position: absolute;
|
|
left: 28px;
|
|
top: 16px;
|
|
bottom: 16px;
|
|
width: 2px;
|
|
background: linear-gradient(180deg, rgba(201, 162, 39, 0.5), rgba(201, 162, 39, 0.08));
|
|
border-radius: 1px;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.btd-timeline-item {
|
|
position: relative;
|
|
display: block;
|
|
width: 100%;
|
|
margin: 0 0 8px;
|
|
padding: 0 0 0 16px;
|
|
border: none;
|
|
background: transparent;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.btd-timeline-node {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 18px;
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: 50%;
|
|
background: var(--bg3);
|
|
border: 2px solid rgba(201, 162, 39, 0.45);
|
|
z-index: 1;
|
|
}
|
|
|
|
.btd-timeline-item--active .btd-timeline-node {
|
|
background: var(--btd-gold);
|
|
border-color: var(--btd-gold-light);
|
|
box-shadow: 0 0 8px rgba(201, 162, 39, 0.5);
|
|
}
|
|
|
|
.btd-timeline-card {
|
|
background: var(--bg3);
|
|
border: 1px solid var(--btd-gold-border);
|
|
border-radius: 8px;
|
|
padding: 8px 10px;
|
|
transition: border-color 0.15s, box-shadow 0.15s;
|
|
}
|
|
|
|
.btd-timeline-item:hover .btd-timeline-card {
|
|
border-color: var(--btd-gold-border-strong);
|
|
}
|
|
|
|
.btd-timeline-item--active .btd-timeline-card {
|
|
border-color: rgba(201, 162, 39, 0.65);
|
|
box-shadow: 0 0 0 1px rgba(201, 162, 39, 0.2), 0 4px 16px rgba(0, 0, 0, 0.15);
|
|
}
|
|
|
|
.btd-timeline-top {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.btd-timeline-name {
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
color: var(--text);
|
|
line-height: 1.3;
|
|
}
|
|
|
|
.btd-sparkline { flex-shrink: 0; opacity: 0.9; }
|
|
|
|
.btd-timeline-date {
|
|
display: block;
|
|
font-size: 10px;
|
|
color: var(--text3);
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.btd-timeline-roi {
|
|
display: inline-block;
|
|
padding: 3px 8px;
|
|
border-radius: 20px;
|
|
font-size: 10px;
|
|
font-weight: 800;
|
|
}
|
|
.btd-timeline-roi.up {
|
|
background: rgba(34, 197, 94, 0.12);
|
|
color: #22c55e;
|
|
border: 1px solid rgba(34, 197, 94, 0.25);
|
|
}
|
|
.btd-timeline-roi.down {
|
|
background: rgba(239, 68, 68, 0.12);
|
|
color: #ef4444;
|
|
border: 1px solid rgba(239, 68, 68, 0.25);
|
|
}
|
|
|
|
/* ── 섹션 헤더 (금색 바) ── */
|
|
.btd-section-head {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-bottom: 8px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-section-bar {
|
|
width: 4px;
|
|
height: 16px;
|
|
border-radius: 2px;
|
|
background: linear-gradient(180deg, var(--btd-gold-light), var(--btd-gold-dark));
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-section-title {
|
|
margin: 0;
|
|
font-size: 13px;
|
|
font-weight: 800;
|
|
color: var(--text);
|
|
letter-spacing: -0.2px;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.btd-section-sub {
|
|
margin: 1px 0 0;
|
|
font-size: 9px;
|
|
color: var(--text3);
|
|
font-weight: 500;
|
|
}
|
|
|
|
.btd-section--kpi {
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
.btd-section--chart {
|
|
flex: 1.45;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-section--table {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* ── KPI 카드 4열 ── */
|
|
.btd-kpi-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-kpi-card {
|
|
background: var(--bg2);
|
|
border: 1px solid var(--btd-gold-border);
|
|
border-radius: 10px;
|
|
padding: 10px 14px;
|
|
min-height: 0;
|
|
}
|
|
|
|
.btd-kpi-label {
|
|
font-size: 10px;
|
|
color: var(--text2);
|
|
margin-bottom: 4px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.btd-kpi-value {
|
|
font-size: 24px;
|
|
font-weight: 900;
|
|
color: var(--text);
|
|
line-height: 1;
|
|
letter-spacing: -0.5px;
|
|
}
|
|
.btd-kpi-value.up { color: #22c55e; }
|
|
.btd-kpi-value.down { color: #ef4444; }
|
|
.btd-kpi-value.gold { color: var(--btd-gold); }
|
|
.btd-kpi-value.neutral { color: var(--text2); }
|
|
|
|
.btd-kpi-desc {
|
|
margin: 6px 0 0;
|
|
font-size: 9px;
|
|
color: var(--text3);
|
|
line-height: 1.3;
|
|
}
|
|
|
|
.btd-kpi-row {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-kpi-icon {
|
|
font-size: 20px;
|
|
opacity: 0.6;
|
|
color: var(--btd-gold);
|
|
}
|
|
|
|
.btd-kpi-dual {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 16px;
|
|
padding-top: 2px;
|
|
}
|
|
|
|
.btd-kpi-card--dual .btd-kpi-label {
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.btd-kpi-card--dual .btd-kpi-value {
|
|
font-size: 22px;
|
|
}
|
|
|
|
/* ── 자산 곡선 차트 ── */
|
|
.btd-chart-card {
|
|
flex: 1;
|
|
min-height: 0;
|
|
background: var(--bg2);
|
|
border: 1px solid var(--btd-gold-border);
|
|
border-radius: 10px;
|
|
padding: 4px 8px 2px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-chart-wrap {
|
|
flex: 1;
|
|
min-height: 0;
|
|
width: 100%;
|
|
}
|
|
|
|
.btd-chart-svg {
|
|
width: 100%;
|
|
height: 100%;
|
|
display: block;
|
|
}
|
|
|
|
.btd-chart-grid {
|
|
stroke: var(--sep);
|
|
stroke-width: 1;
|
|
}
|
|
|
|
.btd-chart-label {
|
|
fill: var(--text3);
|
|
}
|
|
|
|
.btd-chart-line-up { stroke: #22c55e; }
|
|
.btd-chart-line-down { stroke: #ef4444; }
|
|
|
|
/* ── 거래 내역 테이블 ── */
|
|
.btd-table-card {
|
|
flex: 1;
|
|
min-height: 0;
|
|
background: var(--bg2);
|
|
border: 1px solid var(--btd-gold-border);
|
|
border-radius: 10px;
|
|
overflow: hidden;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.btd-table-scroll {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow-y: auto;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.btd-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.btd-table thead {
|
|
background: var(--btd-gold-bg);
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 1;
|
|
}
|
|
|
|
.btd-table th {
|
|
padding: 8px 12px;
|
|
text-align: left;
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
color: var(--btd-gold);
|
|
border-bottom: 1px solid var(--btd-gold-border);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.btd-th-sort {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 3px;
|
|
padding: 0;
|
|
margin: 0;
|
|
border: none;
|
|
background: transparent;
|
|
font: inherit;
|
|
font-weight: inherit;
|
|
color: inherit;
|
|
cursor: pointer;
|
|
white-space: nowrap;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.btd-th-sort:hover {
|
|
color: var(--text);
|
|
}
|
|
|
|
.btd-th-sort--active {
|
|
color: var(--text);
|
|
}
|
|
|
|
.btd-th-sort-icon {
|
|
font-size: 0.85em;
|
|
opacity: 0.85;
|
|
}
|
|
|
|
.btd-table td {
|
|
padding: 7px 12px;
|
|
border-bottom: 1px solid var(--sep);
|
|
color: var(--text);
|
|
}
|
|
|
|
.btd-table tbody tr:hover td {
|
|
background: var(--btd-gold-bg);
|
|
}
|
|
|
|
.btd-table tbody tr:last-child td {
|
|
border-bottom: none;
|
|
}
|
|
|
|
.btd-td-time {
|
|
color: var(--text3);
|
|
font-variant-numeric: tabular-nums;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.btd-table td.buy { color: var(--gc-trade-buy); font-weight: 700; }
|
|
.btd-table td.sell { color: var(--gc-trade-sell); font-weight: 700; }
|
|
.btd-table td.up { color: #22c55e; font-weight: 700; }
|
|
.btd-table td.down { color: #ef4444; font-weight: 700; }
|
|
|
|
.btd-table-empty {
|
|
text-align: center;
|
|
color: var(--text3);
|
|
padding: 24px !important;
|
|
}
|
|
|
|
@media (max-width: 1100px) {
|
|
.btd-kpi-grid { grid-template-columns: repeat(2, 1fr); }
|
|
}
|
|
|
|
@media (max-width: 860px) {
|
|
.btd-page { flex-direction: column; height: auto; overflow: auto; }
|
|
.btd-sidebar {
|
|
width: 100%;
|
|
max-height: 240px;
|
|
border-right: none;
|
|
border-bottom: 1px solid var(--btd-gold-border);
|
|
}
|
|
.btd-kpi-grid { grid-template-columns: 1fr 1fr; }
|
|
}
|
|
|
|
/* ── Golden Analysis Command Center ── */
|
|
|
|
.bps-center-content .btd-center-stack {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-center-title {
|
|
color: var(--btd-gold);
|
|
font-weight: 700;
|
|
}
|
|
|
|
.btd-exec-list {
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 0;
|
|
height: 100%;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-exec-tabs {
|
|
display: flex;
|
|
gap: 4px;
|
|
padding: 0 2px 6px;
|
|
border-bottom: 1px solid var(--btd-divider);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-exec-tab {
|
|
flex: 1;
|
|
padding: 8px 6px;
|
|
border: none;
|
|
border-radius: 6px 6px 0 0;
|
|
background: transparent;
|
|
color: var(--se-text-muted);
|
|
font-size: 0.72rem;
|
|
font-weight: 700;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.btd-exec-tab--on {
|
|
color: var(--btd-gold);
|
|
background: var(--btd-gold-bg);
|
|
box-shadow: inset 0 -2px 0 var(--btd-gold);
|
|
}
|
|
|
|
.btd-exec-scroll {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow-y: auto;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
padding: 4px 2px 8px;
|
|
}
|
|
|
|
.btd-exec-scroll.vl-scroll .vl-scroll-row {
|
|
padding-bottom: 8px;
|
|
}
|
|
|
|
.btd-exec-item {
|
|
width: 100%;
|
|
text-align: left;
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 8px;
|
|
background: var(--btd-surface);
|
|
padding: 10px;
|
|
cursor: pointer;
|
|
transition: border-color 0.15s, box-shadow 0.15s;
|
|
}
|
|
|
|
.btd-exec-item:hover {
|
|
border-color: var(--btd-gold-border-strong);
|
|
}
|
|
|
|
.btd-exec-item--active {
|
|
border-color: var(--btd-gold);
|
|
box-shadow: 0 0 0 1px rgba(255, 215, 0, 0.25), 0 4px 16px rgba(0, 0, 0, 0.25);
|
|
}
|
|
|
|
.btd-exec-item-top {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.btd-exec-date {
|
|
font-size: 0.62rem;
|
|
color: var(--se-text-muted);
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.btd-exec-strategy {
|
|
display: block;
|
|
font-size: 0.78rem;
|
|
font-weight: 700;
|
|
color: var(--se-text);
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
.btd-exec-meta {
|
|
display: block;
|
|
font-size: 0.68rem;
|
|
color: var(--se-text-dim);
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.btd-exec-stats {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-exec-stat {
|
|
font-size: 0.65rem;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-exec-roi {
|
|
font-size: 0.82rem;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.btd-exec-roi.up { color: var(--btd-bull); }
|
|
.btd-exec-roi.down { color: var(--btd-bear); }
|
|
|
|
.btd-analysis-chart {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 8px;
|
|
background: var(--btd-surface);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-analysis-toolbar {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--btd-divider);
|
|
flex-shrink: 0;
|
|
background: color-mix(in srgb, var(--btd-bg) 60%, var(--btd-surface));
|
|
}
|
|
|
|
.btd-analysis-symbol {
|
|
font-weight: 800;
|
|
color: var(--btd-gold);
|
|
font-size: 0.82rem;
|
|
}
|
|
|
|
.btd-analysis-tf,
|
|
.btd-analysis-type,
|
|
.btd-analysis-count {
|
|
font-size: 0.68rem;
|
|
color: var(--se-text-muted);
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
border: 1px solid var(--btd-divider);
|
|
}
|
|
|
|
.btd-analysis-canvas-wrap {
|
|
flex: 1;
|
|
min-height: 360px;
|
|
position: relative;
|
|
}
|
|
|
|
.btd-analysis-canvas-wrap > .chart-wrap,
|
|
.btd-analysis-canvas-wrap > div {
|
|
height: 100%;
|
|
min-height: 360px;
|
|
}
|
|
|
|
.btd-analysis-loading,
|
|
.btd-analysis-error {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 0.82rem;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-analysis-error { color: var(--btd-bear); }
|
|
|
|
.btd-kpi-panel {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
min-height: 0;
|
|
}
|
|
|
|
.btd-kpi-panel--empty {
|
|
padding: 24px 12px;
|
|
text-align: center;
|
|
color: var(--se-text-dim);
|
|
font-size: 0.78rem;
|
|
}
|
|
|
|
.btd-kpi-block {
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 8px;
|
|
background: var(--btd-surface);
|
|
padding: 12px;
|
|
}
|
|
|
|
.btd-kpi-block-head {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
.btd-kpi-block-title {
|
|
margin: 0;
|
|
font-size: 0.72rem;
|
|
font-weight: 800;
|
|
color: var(--btd-gold);
|
|
letter-spacing: 0.02em;
|
|
}
|
|
|
|
.btd-kpi-block-sub {
|
|
font-size: 0.62rem;
|
|
color: var(--se-text-dim);
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.btd-kpi-hero {
|
|
font-size: 1.5rem;
|
|
font-weight: 800;
|
|
line-height: 1.1;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.btd-kpi-hero.up { color: var(--btd-bull); }
|
|
.btd-kpi-hero.down { color: var(--btd-bear); }
|
|
|
|
.btd-kpi-dl {
|
|
margin: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.btd-kpi-dl--grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-kpi-dl div {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
}
|
|
|
|
.btd-kpi-dl dt {
|
|
font-size: 0.62rem;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-kpi-dl dd {
|
|
margin: 0;
|
|
font-size: 0.82rem;
|
|
font-weight: 700;
|
|
color: var(--se-text);
|
|
}
|
|
|
|
.btd-kpi-dl dd.up { color: var(--btd-bull); }
|
|
.btd-kpi-dl dd.down { color: var(--btd-bear); }
|
|
.btd-kpi-dl dd.gold { color: var(--btd-gold); }
|
|
|
|
.btd-table-card--footer {
|
|
border: none;
|
|
background: transparent;
|
|
box-shadow: none;
|
|
padding: 0;
|
|
height: 100%;
|
|
}
|
|
|
|
.btd-table-card--footer .btd-table-scroll {
|
|
max-height: 100%;
|
|
}
|
|
|
|
/* ══ Golden Analysis — 전용 페이지 레이아웃 ══ */
|
|
|
|
.btd-page {
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex: 1;
|
|
height: calc(100vh - var(--tmb-h, 44px));
|
|
min-height: 0;
|
|
background: var(--se-bg, var(--bg));
|
|
color: var(--se-text, var(--text));
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 10px 18px;
|
|
border-bottom: 1px solid var(--se-header-border, var(--se-border));
|
|
background: var(--se-header-bg, var(--se-bg-elevated));
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-header-brand {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 12px;
|
|
}
|
|
|
|
.btd-header-title {
|
|
margin: 0;
|
|
font-size: 1.05rem;
|
|
font-weight: 800;
|
|
background: var(--se-title-gradient, linear-gradient(90deg, var(--se-gold), #ffe566));
|
|
-webkit-background-clip: text;
|
|
background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
color: transparent;
|
|
}
|
|
|
|
.btd-header-sub {
|
|
font-size: 0.72rem;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-header-actions {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
/* ── 빠른 백테스팅 실행 툴바 ────────────────────────────────────────────── */
|
|
.btd-header-run {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
flex: 1;
|
|
justify-content: center;
|
|
min-width: 0;
|
|
}
|
|
|
|
/* 종목 검색 버튼 (MarketSearchPanel 드롭다운 트리거) */
|
|
.btd-run-market-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
background: var(--se-bg-elevated, var(--bg2));
|
|
border: 1px solid var(--se-border);
|
|
color: var(--se-text);
|
|
border-radius: 7px;
|
|
padding: 0 8px;
|
|
font-size: 0.76rem;
|
|
cursor: pointer;
|
|
height: 30px;
|
|
outline: none;
|
|
transition: border-color 0.15s, background 0.15s;
|
|
white-space: nowrap;
|
|
min-width: 90px;
|
|
max-width: 140px;
|
|
}
|
|
.btd-run-market-btn:hover:not(:disabled) {
|
|
border-color: var(--se-accent, #3d9be9);
|
|
background: color-mix(in srgb, var(--se-accent, #3d9be9) 8%, var(--se-bg-elevated, var(--bg2)));
|
|
}
|
|
.btd-run-market-btn:disabled {
|
|
opacity: 0.45;
|
|
cursor: not-allowed;
|
|
}
|
|
.btd-run-market-ko {
|
|
font-weight: 600;
|
|
font-size: 0.76rem;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
min-width: 0;
|
|
}
|
|
.btd-run-market-sym {
|
|
font-size: 0.68rem;
|
|
color: var(--se-text-muted, #888);
|
|
flex-shrink: 0;
|
|
}
|
|
.btd-run-market-caret {
|
|
flex-shrink: 0;
|
|
opacity: 0.55;
|
|
margin-left: 2px;
|
|
}
|
|
|
|
.btd-run-select {
|
|
background: var(--se-bg-elevated, var(--bg2));
|
|
border: 1px solid var(--se-border);
|
|
color: var(--se-text);
|
|
border-radius: 7px;
|
|
padding: 5px 8px;
|
|
font-size: 0.76rem;
|
|
cursor: pointer;
|
|
height: 30px;
|
|
outline: none;
|
|
transition: border-color 0.15s;
|
|
min-width: 0;
|
|
}
|
|
.btd-run-select:focus {
|
|
border-color: var(--se-accent, #3d9be9);
|
|
}
|
|
.btd-run-select:disabled {
|
|
opacity: 0.45;
|
|
cursor: not-allowed;
|
|
}
|
|
.btd-run-select--strategy {
|
|
flex: 1;
|
|
max-width: 180px;
|
|
}
|
|
|
|
.btd-run-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 30px;
|
|
height: 30px;
|
|
border-radius: 50%;
|
|
border: 1px solid var(--se-accent, #3d9be9);
|
|
background: color-mix(in srgb, var(--se-accent, #3d9be9) 18%, transparent);
|
|
color: var(--se-accent, #3d9be9);
|
|
cursor: pointer;
|
|
transition: background 0.15s, border-color 0.15s, transform 0.1s;
|
|
flex-shrink: 0;
|
|
}
|
|
.btd-run-btn:hover:not(:disabled) {
|
|
background: color-mix(in srgb, var(--se-accent, #3d9be9) 32%, transparent);
|
|
transform: scale(1.08);
|
|
}
|
|
.btd-run-btn:active:not(:disabled) {
|
|
transform: scale(0.95);
|
|
}
|
|
.btd-run-btn:disabled {
|
|
opacity: 0.35;
|
|
cursor: not-allowed;
|
|
}
|
|
.btd-run-btn--loading {
|
|
border-color: var(--se-text-muted);
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-run-spinner {
|
|
display: inline-block;
|
|
width: 12px;
|
|
height: 12px;
|
|
border: 2px solid currentColor;
|
|
border-top-color: transparent;
|
|
border-radius: 50%;
|
|
animation: btd-spin 0.7s linear infinite;
|
|
}
|
|
@keyframes btd-spin {
|
|
to { transform: rotate(360deg); }
|
|
}
|
|
|
|
.btd-run-error {
|
|
font-size: 0.71rem;
|
|
color: var(--se-sell, #f23645);
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
max-width: 200px;
|
|
}
|
|
|
|
.btd-btn {
|
|
border: 1px solid var(--se-border);
|
|
background: var(--se-bg-elevated, var(--bg2));
|
|
color: var(--se-text);
|
|
border-radius: 8px;
|
|
padding: 7px 14px;
|
|
font-size: 0.78rem;
|
|
cursor: pointer;
|
|
transition: background 0.15s, border-color 0.15s;
|
|
}
|
|
|
|
.btd-btn:hover:not(:disabled) {
|
|
background: var(--se-item-hover-bg);
|
|
border-color: color-mix(in srgb, var(--se-accent) 35%, var(--se-border));
|
|
}
|
|
|
|
.btd-btn--ghost { background: transparent; }
|
|
.btd-btn--danger { border-color: color-mix(in srgb, var(--se-sell) 45%, transparent); color: var(--se-sell); }
|
|
.btd-btn--gold {
|
|
background: var(--se-btn-gold-bg, rgba(255,215,0,0.15));
|
|
border-color: var(--se-btn-gold-border, rgba(255,215,0,0.45));
|
|
color: var(--se-gold, #ffd700);
|
|
}
|
|
.btd-btn--gold:hover:not(:disabled) {
|
|
background: rgba(255,215,0,0.25);
|
|
border-color: rgba(255,215,0,0.65);
|
|
}
|
|
.btd-btn:disabled { opacity: 0.35; cursor: not-allowed; }
|
|
|
|
.btd-loading {
|
|
flex: 1;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-body {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
align-items: stretch;
|
|
}
|
|
|
|
.btd-sidebar,
|
|
.btd-right {
|
|
flex-shrink: 0;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
display: flex;
|
|
flex-direction: column;
|
|
background: var(--se-panel-shell-bg, var(--se-bg));
|
|
border-color: var(--se-border);
|
|
}
|
|
|
|
.btd-sidebar {
|
|
border-right: 1px solid var(--btd-divider);
|
|
padding: 10px 8px;
|
|
}
|
|
|
|
.btd-right {
|
|
border-left: 1px solid var(--btd-divider);
|
|
padding: 10px 8px;
|
|
overflow: hidden;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 0;
|
|
}
|
|
|
|
.btd-right-stack {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-right-section {
|
|
flex: 1 1 0;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-right-section--solo {
|
|
flex: 1 1 auto;
|
|
}
|
|
|
|
.btd-right-section--kpi {
|
|
overflow-y: auto;
|
|
padding: 4px 2px;
|
|
gap: 0;
|
|
}
|
|
|
|
.btd-right-section--trades {
|
|
padding: 0;
|
|
}
|
|
|
|
.btd-right-section--trades .btd-trades-card {
|
|
flex: 1;
|
|
min-height: 0;
|
|
height: 100%;
|
|
}
|
|
|
|
.btd-trades-card {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 8px;
|
|
background: var(--btd-surface);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-trades-card-head {
|
|
flex-shrink: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
padding: 10px 12px;
|
|
border-bottom: 1px solid var(--btd-divider);
|
|
background: color-mix(in srgb, var(--btd-gold-bg) 60%, var(--btd-surface));
|
|
}
|
|
|
|
.btd-trades-card-head .btd-kpi-card-title {
|
|
margin: 0;
|
|
font-size: 0.78rem;
|
|
}
|
|
|
|
.btd-trades-count {
|
|
font-size: 0.62rem;
|
|
color: var(--se-text-muted);
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.btd-trades-scroll {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: auto;
|
|
}
|
|
|
|
.btd-trades-empty {
|
|
margin: 0;
|
|
padding: 20px 12px;
|
|
text-align: center;
|
|
color: var(--se-text-dim);
|
|
font-size: 0.72rem;
|
|
}
|
|
|
|
.btd-table--compact th,
|
|
.btd-table--compact td {
|
|
padding: 6px 8px;
|
|
font-size: 0.65rem;
|
|
}
|
|
|
|
.btd-table--compact th {
|
|
font-size: 0.58rem;
|
|
}
|
|
|
|
.btd-main {
|
|
flex: 1;
|
|
min-width: 0;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
background: var(--se-center-bg, var(--se-bg));
|
|
}
|
|
|
|
.btd-main-head {
|
|
flex-shrink: 0;
|
|
padding: 8px 12px 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
}
|
|
|
|
.btd-main-ko {
|
|
margin: 0;
|
|
font-size: 0.92rem;
|
|
font-weight: 700;
|
|
color: var(--se-text);
|
|
line-height: 1.25;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.btd-main-strategy {
|
|
margin: 0;
|
|
font-size: 0.75rem;
|
|
font-weight: 600;
|
|
color: var(--se-text-muted);
|
|
line-height: 1.3;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.btd-main-meta {
|
|
font-weight: 500;
|
|
color: var(--se-text-dim);
|
|
}
|
|
|
|
.btd-main-content {
|
|
flex: 1;
|
|
min-height: 0;
|
|
padding: 8px 10px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.btd-main .btd-empty {
|
|
flex: 1;
|
|
min-height: 280px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 10px;
|
|
color: var(--se-text-dim);
|
|
font-size: 0.85rem;
|
|
border: 1px dashed var(--btd-divider);
|
|
border-radius: 8px;
|
|
background: color-mix(in srgb, var(--btd-surface) 50%, transparent);
|
|
}
|
|
|
|
.btd-main .btd-empty span { font-size: 48px; opacity: 0.35; }
|
|
|
|
.btd-sidebar .btd-sidebar-empty {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 24px 12px;
|
|
text-align: center;
|
|
color: var(--se-text-dim);
|
|
font-size: 0.78rem;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-splitter {
|
|
flex-shrink: 0;
|
|
background: var(--btd-divider);
|
|
transition: background 0.12s;
|
|
touch-action: none;
|
|
z-index: 6;
|
|
}
|
|
|
|
.btd-splitter:hover,
|
|
.btd-splitter.btd-splitter--active {
|
|
background: color-mix(in srgb, var(--btd-gold) 35%, var(--btd-divider));
|
|
}
|
|
|
|
.btd-splitter--v { width: 4px; cursor: col-resize; }
|
|
.btd-splitter--h { height: 4px; cursor: row-resize; margin: 0 8px; }
|
|
|
|
.btd-footer {
|
|
flex-shrink: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 88px;
|
|
border-top: 1px solid var(--btd-divider);
|
|
background: var(--btd-surface);
|
|
margin: 0 8px 8px;
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-footer .btd-table-scroll {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: auto;
|
|
}
|
|
|
|
.btd-footer-label {
|
|
flex-shrink: 0;
|
|
padding: 6px 12px;
|
|
font-size: 0.62rem;
|
|
font-weight: 800;
|
|
letter-spacing: 0.12em;
|
|
color: var(--btd-gold);
|
|
border-bottom: 1px solid var(--btd-divider);
|
|
}
|
|
|
|
/* ── 목록 카드 (참조 UI) ── */
|
|
|
|
/* ── 검색 입력창 ──────────────────────────────────────────────────── */
|
|
.btd-exec-search {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 8px 10px;
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 7px;
|
|
background: var(--btd-surface);
|
|
flex-shrink: 0;
|
|
transition: border-color 0.15s;
|
|
}
|
|
|
|
.btd-exec-search:focus-within {
|
|
border-color: color-mix(in srgb, var(--btd-gold) 55%, var(--btd-divider));
|
|
box-shadow: 0 0 0 1px color-mix(in srgb, var(--btd-gold) 20%, transparent);
|
|
}
|
|
|
|
.btd-exec-search-icon {
|
|
font-size: 0.65rem;
|
|
opacity: 0.6;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-exec-search-input {
|
|
flex: 1;
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--se-text, var(--text));
|
|
font-size: 0.78rem;
|
|
outline: none;
|
|
min-width: 0;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.btd-exec-search-input::placeholder {
|
|
color: var(--se-text-muted, var(--text2));
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.btd-exec-search-clear {
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--se-text-muted, var(--text2));
|
|
font-size: 0.65rem;
|
|
cursor: pointer;
|
|
padding: 1px 3px;
|
|
border-radius: 4px;
|
|
line-height: 1;
|
|
flex-shrink: 0;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.btd-exec-search-clear:hover {
|
|
opacity: 1;
|
|
background: var(--btd-gold-bg);
|
|
color: var(--btd-gold);
|
|
}
|
|
|
|
.btd-exec-search-count {
|
|
font-size: 0.62rem;
|
|
color: var(--se-text-muted, var(--text2));
|
|
padding: 0 2px 4px;
|
|
flex-shrink: 0;
|
|
text-align: right;
|
|
}
|
|
|
|
.btd-exec-filters {
|
|
display: flex;
|
|
gap: 4px;
|
|
padding: 4px 0 8px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-exec-filter {
|
|
flex: 1;
|
|
padding: 5px 4px;
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 6px;
|
|
background: transparent;
|
|
color: var(--se-text-muted);
|
|
font-size: 0.62rem;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.btd-exec-filter--on {
|
|
color: var(--btd-gold);
|
|
border-color: color-mix(in srgb, var(--btd-gold) 45%, var(--btd-divider));
|
|
background: var(--btd-gold-bg);
|
|
}
|
|
|
|
.btd-history-card {
|
|
display: flex;
|
|
align-items: stretch;
|
|
gap: 2px;
|
|
width: 100%;
|
|
text-align: left;
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 8px;
|
|
background: var(--btd-surface);
|
|
padding: 0;
|
|
transition: border-color 0.15s, box-shadow 0.15s;
|
|
}
|
|
|
|
.btd-history-card-body {
|
|
flex: 1;
|
|
min-width: 0;
|
|
border: none;
|
|
background: transparent;
|
|
padding: 10px;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
color: inherit;
|
|
font: inherit;
|
|
}
|
|
|
|
.btd-history-card-delete {
|
|
flex-shrink: 0;
|
|
align-self: center;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 28px;
|
|
height: 28px;
|
|
margin-right: 6px;
|
|
padding: 0;
|
|
border: none;
|
|
border-radius: 6px;
|
|
background: transparent;
|
|
color: var(--btd-text-muted, #787b86);
|
|
cursor: pointer;
|
|
opacity: 0.72;
|
|
transition: color 0.15s, background 0.15s, opacity 0.15s;
|
|
}
|
|
|
|
.btd-history-card:hover .btd-history-card-delete,
|
|
.btd-history-card--active .btd-history-card-delete {
|
|
opacity: 1;
|
|
}
|
|
|
|
.btd-history-card-delete:hover {
|
|
color: var(--btd-bear, #ef5350);
|
|
background: color-mix(in srgb, var(--btd-bear, #ef5350) 14%, transparent);
|
|
}
|
|
|
|
.btd-history-card:hover {
|
|
border-color: color-mix(in srgb, var(--btd-gold) 35%, var(--btd-divider));
|
|
}
|
|
|
|
.btd-history-card--active {
|
|
border-color: var(--se-item-selected-border, var(--btd-gold-border-strong));
|
|
background: var(--se-item-selected-bg, var(--btd-gold-bg));
|
|
box-shadow: var(--se-strat-item-shadow, 0 1px 3px rgba(0, 0, 0, 0.22));
|
|
}
|
|
|
|
.btd-history-card-row {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-history-card-main {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.btd-history-ko {
|
|
display: block;
|
|
font-size: 0.8rem;
|
|
font-weight: 700;
|
|
color: var(--se-text);
|
|
line-height: 1.3;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.btd-history-strategy {
|
|
display: block;
|
|
font-size: 0.68rem;
|
|
font-weight: 600;
|
|
color: var(--se-text-muted);
|
|
line-height: 1.35;
|
|
margin-bottom: 3px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.btd-history-date {
|
|
display: block;
|
|
font-size: 0.62rem;
|
|
color: var(--se-text-dim);
|
|
}
|
|
|
|
.btd-history-card-side {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
gap: 3px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-history-win {
|
|
font-size: 0.62rem;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-history-roi {
|
|
font-size: 0.78rem;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.btd-history-roi.up { color: var(--btd-bull); }
|
|
.btd-history-roi.down { color: var(--btd-bear); }
|
|
|
|
/* ── 차트 영역 ── */
|
|
|
|
.btd-analysis-chart {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 8px;
|
|
background: var(--btd-surface);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-analysis-toolbar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 10px;
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--btd-divider);
|
|
flex-shrink: 0;
|
|
background: color-mix(in srgb, var(--btd-bg) 50%, var(--btd-surface));
|
|
}
|
|
|
|
.btd-analysis-toolbar-left,
|
|
.btd-analysis-toolbar-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.btd-analysis-toolbar-right {
|
|
flex-shrink: 1;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.btd-analysis-select--static {
|
|
font-size: 0.72rem;
|
|
font-weight: 600;
|
|
color: var(--se-text);
|
|
padding: 4px 10px;
|
|
border-radius: 6px;
|
|
border: 1px solid var(--btd-divider);
|
|
background: color-mix(in srgb, var(--btd-bg) 60%, transparent);
|
|
}
|
|
|
|
.btd-analysis-tf-row {
|
|
flex: 1;
|
|
min-width: 0;
|
|
flex-wrap: nowrap;
|
|
overflow-x: auto;
|
|
scrollbar-width: thin;
|
|
}
|
|
|
|
.btd-analysis-tool {
|
|
width: 28px;
|
|
height: 28px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border-radius: 6px;
|
|
border: 1px solid var(--btd-divider);
|
|
color: var(--se-text-muted);
|
|
font-size: 0.82rem;
|
|
cursor: default;
|
|
background: transparent;
|
|
padding: 0;
|
|
}
|
|
|
|
.btd-analysis-main {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-analysis-canvas-wrap {
|
|
flex: 1;
|
|
min-height: 0;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-analysis-canvas-wrap--live {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.btd-analysis-canvas-wrap--live .tv-chart-wrap {
|
|
flex: 1;
|
|
min-height: 0;
|
|
}
|
|
|
|
.btd-analysis-canvas-wrap .tv-chart-wrap {
|
|
height: 100% !important;
|
|
min-height: 0 !important;
|
|
}
|
|
|
|
.btd-analysis-canvas-wrap .chart-container {
|
|
min-height: 0 !important;
|
|
}
|
|
|
|
/* ── 보조지표 pane ── */
|
|
|
|
.btd-osc-stack {
|
|
flex-shrink: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
border-top: 1px solid var(--btd-divider);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-osc-stack--fill {
|
|
flex-shrink: 1;
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.btd-osc-pane {
|
|
padding: 6px 10px 4px;
|
|
border-bottom: 1px solid color-mix(in srgb, var(--btd-divider) 70%, transparent);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-osc-pane--fill {
|
|
flex: 1 1 0;
|
|
min-height: 52px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btd-osc-pane--fill .btd-osc-svg {
|
|
flex: 1 1 auto;
|
|
min-height: 36px;
|
|
height: auto;
|
|
}
|
|
|
|
.btd-osc-pane:last-child { border-bottom: none; }
|
|
|
|
.btd-osc-head {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
.btd-osc-label {
|
|
font-size: 0.62rem;
|
|
font-weight: 700;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-osc-val {
|
|
font-size: 0.62rem;
|
|
color: var(--btd-gold);
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.btd-osc-svg {
|
|
width: 100%;
|
|
height: 52px;
|
|
display: block;
|
|
}
|
|
|
|
.btd-osc-ref {
|
|
stroke: color-mix(in srgb, var(--se-text-muted) 35%, transparent);
|
|
stroke-width: 0.5;
|
|
stroke-dasharray: 3 3;
|
|
}
|
|
|
|
.btd-osc-ref--hi { stroke: color-mix(in srgb, var(--btd-bear) 40%, transparent); }
|
|
.btd-osc-ref--lo { stroke: color-mix(in srgb, var(--btd-bull) 40%, transparent); }
|
|
|
|
.btd-osc-line--rsi { stroke: #7e57c2; stroke-width: 1.5; }
|
|
.btd-osc-line--macd { stroke: #2962ff; stroke-width: 1.5; }
|
|
|
|
/* ── KPI 카드 (참조 UI) ── */
|
|
|
|
.btd-kpi-card {
|
|
border: 1px solid var(--btd-divider);
|
|
border-radius: 8px;
|
|
background: var(--btd-surface);
|
|
padding: 12px;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.btd-right-kpi .btd-kpi-card:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.btd-kpi-card-head {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.btd-kpi-card-title {
|
|
margin: 0;
|
|
font-size: 0.78rem;
|
|
font-weight: 800;
|
|
color: var(--btd-gold);
|
|
}
|
|
|
|
.btd-kpi-card-sub {
|
|
margin: 2px 0 0;
|
|
font-size: 0.58rem;
|
|
color: var(--se-text-dim);
|
|
}
|
|
|
|
.btd-kpi-mega {
|
|
font-size: 1.75rem;
|
|
font-weight: 800;
|
|
line-height: 1.1;
|
|
}
|
|
|
|
.btd-kpi-mega.up { color: var(--btd-bull); }
|
|
.btd-kpi-mega.down { color: var(--btd-bear); }
|
|
|
|
.btd-kpi-mega-label {
|
|
margin: 0 0 10px;
|
|
font-size: 0.62rem;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-kpi-metrics {
|
|
margin: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-kpi-metrics div {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: baseline;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-kpi-metrics dt {
|
|
font-size: 0.68rem;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-kpi-metrics dd {
|
|
margin: 0;
|
|
font-size: 0.78rem;
|
|
font-weight: 700;
|
|
color: var(--se-text);
|
|
text-align: right;
|
|
}
|
|
|
|
.btd-kpi-metrics dd.up { color: var(--btd-bull); }
|
|
.btd-kpi-metrics dd.down { color: var(--btd-bear); }
|
|
.btd-kpi-metrics dd.gold { color: var(--btd-gold); }
|
|
|
|
.btd-kpi-metric--mdd dd {
|
|
font-size: 1rem;
|
|
font-weight: 800;
|
|
}
|
|
|
|
/* ── 분석 결과 카드 (실시간 차트 rsp-trade-card 연동) ── */
|
|
|
|
.btd-kpi-stack.rsp-trade-stack {
|
|
padding: 0;
|
|
gap: 8px;
|
|
height: auto;
|
|
min-height: min-content;
|
|
}
|
|
|
|
.btd-kpi-stack .btd-result-card {
|
|
flex: 0 0 auto;
|
|
min-height: 0;
|
|
}
|
|
|
|
.btd-kpi-stack .rsp-trade-card-body .top-panel {
|
|
padding: 8px 10px 8px;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-kpi-stack .btd-metric-field {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.btd-kpi-stack .top-label {
|
|
font-size: 10px;
|
|
color: var(--se-text-muted, var(--text2));
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.btd-kpi-stack .btd-metric-value {
|
|
font-weight: 700;
|
|
font-size: 12px;
|
|
text-align: right;
|
|
color: var(--se-text, var(--text));
|
|
}
|
|
|
|
.btd-kpi-stack .btd-metric-value--hero {
|
|
font-size: 1.35rem;
|
|
font-weight: 800;
|
|
text-align: center;
|
|
padding: 10px 8px;
|
|
}
|
|
|
|
.btd-kpi-stack .btd-metric-value--up { color: var(--up); }
|
|
.btd-kpi-stack .btd-metric-value--down { color: var(--down); }
|
|
.btd-kpi-stack .btd-metric-value--gold { color: var(--se-gold); }
|
|
|
|
.btd-result-hero-row {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-metric-field--hero {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.btd-metric-grid {
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-metric-grid--2 {
|
|
grid-template-columns: 1fr 1fr;
|
|
}
|
|
|
|
.btd-result-card--stats {
|
|
border-color: var(--border);
|
|
background: var(--bg3);
|
|
}
|
|
|
|
.btd-result-card--stats .rsp-trade-card-title {
|
|
color: var(--se-text, var(--text));
|
|
}
|
|
|
|
.btd-result-card--trades {
|
|
border-color: color-mix(in srgb, var(--se-gold) 32%, var(--border));
|
|
background: linear-gradient(180deg, color-mix(in srgb, var(--se-gold) 8%, transparent) 0%, var(--bg3) 48px);
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.btd-result-card--trades .rsp-trade-card-title {
|
|
color: var(--se-gold);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-result-footnote {
|
|
margin: 4px 0 0;
|
|
font-size: 10px;
|
|
color: var(--se-text-dim, var(--text3));
|
|
text-align: center;
|
|
}
|
|
|
|
.btd-trades-count {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--se-text-muted);
|
|
}
|
|
|
|
.btd-trades-scroll {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: auto;
|
|
}
|
|
|
|
.btd-kpi-panel--empty {
|
|
padding: 24px 12px;
|
|
text-align: center;
|
|
color: var(--se-text-dim);
|
|
font-size: 0.78rem;
|
|
border: 1px dashed var(--se-border);
|
|
border-radius: 10px;
|
|
background: var(--se-bg-muted, var(--bg3));
|
|
}
|
|
|
|
.btd-exec-tab--on {
|
|
color: var(--se-gold);
|
|
background: var(--btd-gold-bg);
|
|
box-shadow: inset 0 -2px 0 var(--se-gold);
|
|
}
|
|
|
|
.btd-exec-filter--on {
|
|
color: var(--se-gold);
|
|
border-color: var(--se-item-selected-border);
|
|
background: var(--se-item-selected-bg);
|
|
}
|
|
|
|
.btd-analysis-chart {
|
|
border-color: var(--se-border);
|
|
background: var(--se-bg-elevated, var(--bg2));
|
|
}
|
|
|
|
.btd-splitter {
|
|
background: var(--se-border);
|
|
}
|
|
|
|
.btd-splitter:hover,
|
|
.btd-splitter.btd-splitter--active {
|
|
background: color-mix(in srgb, var(--se-gold) 35%, var(--se-border));
|
|
}
|
|
|
|
/* ── 투자 분석 KPI (우측 상단) ── */
|
|
|
|
.btd-analysis-empty {
|
|
padding: 24px 12px;
|
|
text-align: center;
|
|
color: var(--se-text-dim);
|
|
font-size: 0.78rem;
|
|
border: 1px dashed var(--se-border);
|
|
border-radius: 10px;
|
|
background: var(--se-bg-muted, var(--bg3));
|
|
}
|
|
|
|
.btd-analysis-stack {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
flex: 0 0 auto;
|
|
min-height: min-content;
|
|
width: 100%;
|
|
}
|
|
|
|
.btd-analysis-card {
|
|
flex: 0 0 auto;
|
|
border-radius: 10px;
|
|
border: 1px solid var(--se-border, var(--border));
|
|
background: var(--se-bg-elevated, var(--bg3));
|
|
overflow: visible;
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12);
|
|
}
|
|
|
|
.btd-analysis-card--profit {
|
|
border-color: rgba(255, 107, 107, 0.38);
|
|
background: linear-gradient(180deg, rgba(255, 107, 107, 0.08) 0%, var(--se-bg-elevated, var(--bg3)) 52px);
|
|
}
|
|
|
|
.btd-analysis-card--risk {
|
|
border-color: rgba(77, 171, 247, 0.38);
|
|
background: linear-gradient(180deg, rgba(77, 171, 247, 0.08) 0%, var(--se-bg-elevated, var(--bg3)) 52px);
|
|
}
|
|
|
|
.btd-analysis-card--stats {
|
|
border-color: color-mix(in srgb, var(--se-text-muted, var(--text2)) 28%, var(--se-border, var(--border)));
|
|
background: linear-gradient(180deg, color-mix(in srgb, var(--se-text-muted) 6%, transparent) 0%, var(--se-bg-elevated, var(--bg3)) 52px);
|
|
}
|
|
|
|
.btd-analysis-card-head {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
padding: 8px 12px 6px;
|
|
border-bottom: 1px solid var(--se-border, var(--border));
|
|
}
|
|
|
|
.btd-analysis-card--profit .btd-analysis-card-title { color: var(--se-up, var(--up)); }
|
|
.btd-analysis-card--risk .btd-analysis-card-title { color: var(--se-info, #4dabf7); }
|
|
.btd-analysis-card--stats .btd-analysis-card-title { color: var(--se-text, var(--text)); }
|
|
|
|
.btd-analysis-card-title {
|
|
margin: 0;
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.btd-analysis-card-tag {
|
|
font-size: 9px;
|
|
font-weight: 600;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
color: var(--se-text-muted, var(--text2));
|
|
opacity: 0.85;
|
|
}
|
|
|
|
.btd-analysis-card-body {
|
|
padding: 8px 10px 10px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btd-analysis-hero {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
gap: 10px;
|
|
padding: 6px 8px;
|
|
border-radius: 8px;
|
|
border: 1px solid var(--se-border, var(--border));
|
|
background: color-mix(in srgb, var(--se-bg, var(--bg)) 55%, transparent);
|
|
}
|
|
|
|
.btd-analysis-hero--compact {
|
|
align-items: center;
|
|
}
|
|
|
|
.btd-analysis-hero-main {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.btd-analysis-hero-label {
|
|
font-size: 10px;
|
|
color: var(--se-text-muted, var(--text2));
|
|
}
|
|
|
|
.btd-analysis-hero-value {
|
|
font-size: 1.35rem;
|
|
font-weight: 800;
|
|
line-height: 1.1;
|
|
color: var(--se-text, var(--text));
|
|
}
|
|
|
|
.btd-analysis-hero-value.up { color: var(--se-up, var(--up)); }
|
|
.btd-analysis-hero-value.down { color: var(--se-down, var(--down)); }
|
|
|
|
.btd-analysis-hero-side {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
gap: 2px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.btd-analysis-side-label {
|
|
font-size: 9px;
|
|
color: var(--se-text-muted, var(--text2));
|
|
}
|
|
|
|
.btd-analysis-side-value {
|
|
font-size: 0.95rem;
|
|
font-weight: 700;
|
|
color: var(--se-text, var(--text));
|
|
}
|
|
|
|
.btd-analysis-side-value.up { color: var(--se-up, var(--up)); }
|
|
|
|
.btd-analysis-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 6px;
|
|
}
|
|
|
|
.btd-analysis-metric {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 3px;
|
|
padding: 6px 8px;
|
|
border-radius: 6px;
|
|
border: 1px solid var(--se-border, var(--border));
|
|
background: color-mix(in srgb, var(--se-bg, var(--bg)) 40%, transparent);
|
|
min-width: 0;
|
|
}
|
|
|
|
.btd-analysis-metric-label {
|
|
font-size: 9px;
|
|
color: var(--se-text-muted, var(--text2));
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.btd-analysis-metric-value {
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
color: var(--se-text, var(--text));
|
|
text-align: right;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.btd-analysis-metric-value--up { color: var(--se-up, var(--up)); }
|
|
.btd-analysis-metric-value--down { color: var(--se-down, var(--down)); }
|
|
.btd-analysis-metric-value--gold { color: var(--se-gold, var(--btd-gold)); }
|
|
.btd-analysis-metric-value--neutral { color: var(--se-text-muted, var(--text2)); }
|
|
|
|
.btd-analysis-footnote {
|
|
margin: 0;
|
|
padding-top: 2px;
|
|
font-size: 9px;
|
|
color: var(--se-text-dim, var(--text3));
|
|
text-align: center;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.btd-right-section--kpi .btd-analysis-stack {
|
|
padding-bottom: 4px;
|
|
}
|