Files
goldenChart/frontend/src/styles/widgetDashboard.css
T
Macbook a5e14ba676 fix(desktop): 위젯 picker를 웹 AppPopup(720×860)과 동일하게
현재 창 innerWidth로 크기를 제한하던 버그를 수정하고, nativeCompact
대신 서버와 같은 AppPopup UI를 macOS·Windows 공통 적용합니다.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-15 17:02:59 +09:00

1626 lines
32 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ── 위젯 대시보드 ── */
.bps-page--wd {
--wd-slot-border: color-mix(in srgb, var(--se-border, var(--border)) 85%, transparent);
--wd-slot-bg: color-mix(in srgb, var(--bg2, #12161c) 92%, transparent);
}
.wd-loading {
display: flex;
align-items: center;
justify-content: center;
flex: 1;
min-height: 200px;
color: var(--se-text-muted, var(--text2));
font-size: 0.85rem;
}
.wd-toolbar-btn {
padding: 5px 12px;
border-radius: 6px;
border: 1px solid color-mix(in srgb, var(--se-accent, #3f7ef5) 45%, var(--se-border));
background: color-mix(in srgb, var(--se-accent, #3f7ef5) 12%, transparent);
color: var(--se-text, var(--text));
font-size: 0.72rem;
font-weight: 700;
cursor: pointer;
}
.wd-toolbar-btn:hover {
background: color-mix(in srgb, var(--se-accent, #3f7ef5) 22%, transparent);
}
.wd-zone {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
height: 100%;
}
.wd-zone-slots {
flex: 1;
min-height: 0;
display: grid;
gap: 6px;
padding: 4px;
height: 100%;
width: 100%;
}
.wd-zone-slots > .wd-slot {
min-height: 0;
min-width: 0;
height: 100%;
width: 100%;
}
.wd-zone-slots--1 { grid-template-rows: 1fr; }
.wd-zone-slots--2 { grid-template-rows: 1fr 1fr; }
.wd-zone-slots--3 { grid-template-rows: 1fr 1fr 1fr; }
.wd-slot {
min-height: 0;
min-width: 0;
display: flex;
flex-direction: column;
border: 1px solid var(--wd-slot-border);
border-radius: 8px;
background: var(--wd-slot-bg);
overflow: hidden;
position: relative;
}
.wd-slot--filled {
border: none;
border-radius: 0;
background: transparent;
box-shadow: none;
}
.wd-slot--filled-center {
min-height: 0;
}
.wd-slot-body {
flex: 1;
min-height: 0;
min-width: 0;
position: relative;
display: flex;
flex-direction: column;
overflow: hidden;
}
.wd-widget-host {
flex: 1;
min-height: 0;
min-width: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
.wd-widget-host > *:only-child {
flex: 1;
min-height: 0;
min-width: 0;
}
.wd-widget-host--panel > .wd-panel-header,
.wd-widget-host--panel > .wd-panel-subline {
flex: 0 0 auto;
}
.wd-widget-host--panel > .wd-panel-body,
.wd-widget-host--panel > .wd-mini-chart-wrap {
flex: 1;
min-height: 0;
}
.wd-widget-host--market .market-panel {
position: relative !important;
width: 100% !important;
min-width: 0 !important;
max-width: none !important;
flex: 1;
transform: none !important;
height: 100% !important;
box-shadow: none;
border: none;
overflow: hidden;
}
.wd-widget-host--market .market-panel--open {
width: 100% !important;
}
.wd-widget-host--market .mp-body {
width: 100% !important;
min-width: 0 !important;
height: 100%;
flex: 1;
min-height: 0;
}
.wd-widget-host--market .mp-list {
flex: 1;
min-height: 0;
}
.wd-widget-host--trade,
.wd-widget-host--orderbook {
overflow: auto;
}
.wd-widget-host--trade > *,
.wd-widget-host--orderbook > * {
flex: 1 1 auto;
min-height: 0;
}
.wd-slot-overlay-clear {
position: absolute;
top: 6px;
right: 6px;
z-index: 3;
width: 22px;
height: 22px;
border: 1px solid var(--wd-slot-border);
border-radius: 4px;
background: color-mix(in srgb, var(--bg2) 88%, transparent);
color: var(--se-text-muted);
font-size: 0.65rem;
cursor: pointer;
opacity: 0.55;
}
.wd-slot-overlay-clear:hover {
opacity: 1;
color: var(--se-text);
}
.wd-zone--tabs {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
}
/* ── 좌·우 side 패널 카드 (전략 편집기 se-palette-panel 동일) ── */
.wd-side-panel {
flex: 1;
min-height: 0;
height: 100%;
display: flex;
flex-direction: column;
border-radius: 14px;
background: var(--se-panel-card-bg, var(--bg2));
border: 1px solid var(--se-panel-card-border, var(--border));
box-shadow:
var(--se-panel-card-shadow, 0 2px 12px rgba(0, 0, 0, 0.18)),
inset 0 1px 0 color-mix(in srgb, var(--se-text, #fff) 4%, transparent);
overflow: hidden;
}
.wd-side-panel-body {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
}
.bps-page--wd .wd-side-panel .se-right-tabs,
.bps-page--wd .wd-panel-tabs.se-right-tabs {
display: flex;
flex-shrink: 0;
border-bottom: 1px solid var(--se-border, var(--border));
}
.bps-page--wd .wd-side-panel .se-right-tab,
.bps-page--wd .wd-panel-tabs .se-right-tab {
flex: 1;
padding: 10px 8px;
border: none;
background: transparent;
color: var(--se-text-muted, var(--text2));
font-size: 0.76rem;
font-weight: 700;
cursor: pointer;
transition: color 0.15s, box-shadow 0.15s, background 0.15s;
}
.bps-page--wd .wd-side-panel .se-right-tab:hover:not(.se-right-tab--on),
.bps-page--wd .wd-panel-tabs .se-right-tab:hover:not(.se-right-tab--on) {
color: var(--se-text, var(--text));
background: color-mix(in srgb, var(--se-text, #fff) 4%, transparent);
}
.bps-page--wd .wd-side-panel .se-right-tab--on,
.bps-page--wd .wd-panel-tabs .se-right-tab--on {
color: var(--se-tab-active, #ffd54f);
box-shadow: inset 0 -2px 0 var(--se-tab-active, #ffd54f);
}
.bps-page--wd .bps-panel-body > .wd-zone {
padding: 4px;
flex: 1;
min-height: 0;
}
.bps-page--wd .wd-side-panel-body .wd-zone {
padding: 0;
}
.bps-page--wd .wd-side-panel-body .wd-zone-slots {
padding: 0;
gap: 0;
}
.bps-page--wd .wd-side-panel-body .wd-slot--filled {
border-radius: 0;
}
/* 중앙·하단 zone 탭 */
.wd-panel-tabs {
display: flex;
margin: 0;
padding: 0;
}
.wd-center-head-tabs {
flex: 1;
min-width: 0;
}
.wd-footer-zone {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
}
.wd-footer-zone--tabs .wd-zone {
flex: 1;
min-height: 0;
}
.bps-page--wd .bps-panel-body {
padding: 0;
gap: 0;
}
.bps-page--wd .bps-side-wrap--left .bps-left--collapsible .bps-panel {
padding: 0;
}
.bps-page--wd .bps-right-body {
padding: 0;
display: flex;
flex-direction: column;
min-height: 0;
}
.bps-page--wd .bps-right-body .wd-side-panel {
flex: 1;
min-height: 0;
}
.wd-zone-disabled {
display: none;
}
.wd-slot-head {
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 4px 8px;
border-bottom: 1px solid var(--wd-slot-border);
}
.wd-slot-title {
font-size: 0.65rem;
font-weight: 700;
color: var(--se-text-muted, var(--text2));
}
.wd-slot-action {
border: none;
background: transparent;
color: var(--se-text-muted, var(--text2));
cursor: pointer;
}
.wd-slot-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 8px;
height: 100%;
min-height: 80px;
}
.wd-slot-add {
width: 44px;
height: 44px;
border-radius: 50%;
border: 2px dashed color-mix(in srgb, var(--se-accent, var(--accent)) 55%, var(--se-border, var(--border)));
background: color-mix(in srgb, var(--se-accent, var(--accent)) 8%, transparent);
color: var(--se-accent, var(--accent));
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.wd-slot-add-icon {
font-size: 1.4rem;
font-weight: 300;
line-height: 1;
}
.wd-slot-empty-hint {
margin: 0;
font-size: 0.65rem;
color: var(--se-text-muted, var(--text2));
}
.wd-slot-change {
position: absolute;
right: 6px;
bottom: 6px;
width: 28px;
height: 28px;
border-radius: 50%;
border: 1px solid var(--wd-slot-border);
background: color-mix(in srgb, var(--bg2) 90%, transparent);
color: var(--se-accent, var(--accent));
font-size: 1rem;
cursor: pointer;
opacity: 0.75;
z-index: 2;
}
.wd-widget-host--chart {
display: flex;
flex-direction: column;
min-height: 0;
}
.wd-candle-chart {
display: flex;
flex-direction: column;
flex: 1;
min-height: 0;
overflow: hidden;
}
.wd-candle-chart-header {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
padding: 6px 8px;
border-bottom: 1px solid color-mix(in srgb, var(--se-border, var(--border)) 70%, transparent);
background: color-mix(in srgb, var(--bg2) 92%, transparent);
}
.wd-candle-chart-market-btn {
display: inline-flex;
align-items: center;
gap: 6px;
max-width: min(280px, 45%);
padding: 4px 10px;
border: 1px solid color-mix(in srgb, var(--se-border, var(--border)) 80%, transparent);
border-radius: 6px;
background: transparent;
color: var(--se-text, var(--text));
font-size: 0.72rem;
cursor: pointer;
text-align: left;
}
.wd-candle-chart-market-btn:hover {
border-color: var(--se-accent, var(--accent));
color: var(--se-accent, var(--accent));
}
.wd-candle-chart-market-ko {
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.wd-candle-chart-market-sym {
font-size: 0.64rem;
color: var(--se-text-muted, var(--text-muted));
white-space: nowrap;
}
.wd-candle-chart-tf-row {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.wd-candle-chart-tf {
padding: 3px 8px;
border: 1px solid transparent;
border-radius: 4px;
background: transparent;
color: var(--se-text-muted, var(--text-muted));
font-size: 0.64rem;
cursor: pointer;
}
.wd-candle-chart-tf--on {
border-color: color-mix(in srgb, var(--se-accent, var(--accent)) 50%, transparent);
color: var(--se-accent, var(--accent));
background: color-mix(in srgb, var(--se-accent, var(--accent)) 12%, transparent);
}
.wd-candle-chart-ind-btn {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 10px;
border: 1px solid color-mix(in srgb, var(--se-border, var(--border)) 80%, transparent);
border-radius: 6px;
background: transparent;
color: var(--se-text-muted, var(--text-muted));
font-size: 0.64rem;
cursor: pointer;
}
.wd-candle-chart-header-actions {
display: flex;
align-items: center;
gap: 6px;
margin-left: auto;
flex-shrink: 0;
}
.wd-candle-chart-toolbar-toggles {
display: inline-flex;
align-items: center;
gap: 2px;
padding: 2px;
border: 1px solid color-mix(in srgb, var(--se-border, var(--border)) 80%, transparent);
border-radius: 6px;
background: color-mix(in srgb, var(--bg3, var(--bg2)) 40%, transparent);
}
.wd-candle-chart-toolbar-toggle {
display: inline-flex;
align-items: center;
gap: 3px;
padding: 3px 7px;
border: none;
border-radius: 4px;
background: transparent;
color: var(--se-text-muted, var(--text2));
font-size: 0.6rem;
font-weight: 600;
cursor: pointer;
line-height: 1;
}
.wd-candle-chart-toolbar-toggle:hover {
color: var(--se-text, var(--text));
background: color-mix(in srgb, var(--se-accent, var(--accent)) 10%, transparent);
}
.wd-candle-chart-toolbar-toggle--on {
color: var(--se-accent, var(--accent));
background: color-mix(in srgb, var(--se-accent, var(--accent)) 14%, transparent);
}
.wd-candle-chart-ind-btn--on,
.wd-candle-chart-ind-btn:hover {
border-color: var(--se-accent, var(--accent));
color: var(--se-accent, var(--accent));
}
.wd-candle-chart-ind-badge {
min-width: 1rem;
padding: 0 4px;
border-radius: 8px;
background: color-mix(in srgb, var(--se-accent, var(--accent)) 18%, transparent);
color: var(--se-accent, var(--accent));
font-size: 0.58rem;
font-weight: 700;
text-align: center;
}
.wd-candle-chart-mode-btn {
margin-left: 0;
padding: 4px 10px;
border: 1px solid color-mix(in srgb, var(--se-border, var(--border)) 80%, transparent);
border-radius: 6px;
background: transparent;
color: var(--se-text-muted, var(--text-muted));
font-size: 0.64rem;
cursor: pointer;
}
.wd-candle-chart-mode-btn:hover {
border-color: var(--se-accent, var(--accent));
color: var(--se-accent, var(--accent));
}
.wd-candle-chart-main {
display: flex;
flex: 1;
min-height: 0;
overflow: hidden;
}
.wd-candle-chart-canvas {
flex: 1;
min-width: 0;
min-height: 0;
position: relative;
display: flex;
flex-direction: column;
overflow: hidden;
}
.wd-widget-empty {
margin: 0;
padding: 16px;
text-align: center;
font-size: 0.72rem;
color: var(--se-text-muted);
}
.wd-widget-empty-inline {
font-size: 0.62rem;
color: var(--se-text-muted);
}
.wd-up { color: #e74c3c; }
.wd-down { color: #3498db; }
.wd-muted { color: var(--se-text-muted, var(--text-muted)); }
.wd-widget-host--panel {
flex-direction: column;
overflow: hidden;
}
.wd-panel-header {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
flex-wrap: wrap;
padding: 6px 8px;
border-bottom: 1px solid color-mix(in srgb, var(--se-border, var(--border)) 65%, transparent);
background: color-mix(in srgb, var(--bg2) 90%, transparent);
}
.wd-panel-title {
font-size: 0.72rem;
font-weight: 700;
color: var(--se-text, var(--text));
}
.wd-panel-sub {
font-size: 0.62rem;
color: var(--se-text-muted);
}
.wd-panel-subline {
flex-shrink: 0;
padding: 2px 10px 4px;
font-size: 0.62rem;
color: var(--se-text-muted);
border-bottom: 1px solid color-mix(in srgb, var(--se-border, var(--border)) 50%, transparent);
}
.wd-panel-count,
.wd-panel-meta {
margin-left: auto;
font-size: 0.62rem;
color: var(--se-text-muted);
}
.wd-panel-header-right {
margin-left: auto;
}
.wd-panel-tabs {
display: flex;
gap: 4px;
flex-wrap: wrap;
}
.wd-panel-tab {
padding: 3px 8px;
border: 1px solid transparent;
border-radius: 4px;
background: transparent;
color: var(--se-text-muted);
font-size: 0.64rem;
cursor: pointer;
}
.wd-panel-tab--on {
border-color: color-mix(in srgb, var(--se-accent) 45%, transparent);
color: var(--se-accent);
background: color-mix(in srgb, var(--se-accent) 10%, transparent);
}
.wd-panel-body {
flex: 1;
min-height: 0;
overflow: auto;
}
.wd-symbol-list {
list-style: none;
margin: 0;
padding: 2px 0;
}
.wd-symbol-row {
display: grid;
grid-template-columns: auto 1fr auto auto auto;
align-items: center;
gap: 6px;
width: 100%;
padding: 5px 8px;
border: none;
border-bottom: 1px solid color-mix(in srgb, var(--se-border, var(--border)) 35%, transparent);
background: transparent;
text-align: left;
cursor: pointer;
color: inherit;
font-size: 0.68rem;
}
.wd-symbol-row-main {
display: contents;
border: none;
background: transparent;
color: inherit;
cursor: pointer;
font: inherit;
text-align: left;
}
.wd-symbol-row:hover,
.wd-symbol-row--on {
background: color-mix(in srgb, var(--se-accent) 8%, transparent);
}
.wd-symbol-rank {
width: 1.2rem;
font-size: 0.6rem;
color: var(--se-text-muted);
text-align: center;
}
.wd-symbol-name {
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.wd-symbol-code {
font-size: 0.6rem;
color: var(--se-text-muted);
}
.wd-symbol-price,
.wd-symbol-chg,
.wd-symbol-vol {
white-space: nowrap;
text-align: right;
}
.wd-symbol-vol {
font-size: 0.6rem;
color: var(--se-text-muted);
}
.wd-watch-star {
border: none;
background: transparent;
color: #f1c40f;
cursor: pointer;
font-size: 0.75rem;
padding: 0 2px;
}
.wd-tape-viewport {
flex: 1;
overflow: hidden;
display: flex;
align-items: center;
min-height: 36px;
}
.wd-tape-track {
display: flex;
gap: 16px;
white-space: nowrap;
will-change: transform;
}
.wd-tape-item {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 10px;
border: 1px solid color-mix(in srgb, var(--se-border) 50%, transparent);
border-radius: 4px;
background: color-mix(in srgb, var(--bg2) 80%, transparent);
cursor: pointer;
font-size: 0.64rem;
color: inherit;
}
.wd-tape-name { font-weight: 600; }
.wd-tape-chg { font-size: 0.62rem; }
.wd-widget-host--tape {
overflow: hidden;
padding: 4px 0;
}
.wd-heatmap-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(72px, 1fr));
gap: 4px;
padding: 6px;
}
.wd-heatmap-cell {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 52px;
padding: 4px;
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
color: var(--se-text, #eee);
font-size: 0.62rem;
}
.wd-heatmap-cell--on {
border-color: var(--se-accent);
box-shadow: 0 0 0 1px var(--se-accent);
}
.wd-heatmap-sym { font-weight: 700; }
.wd-heatmap-pct { opacity: 0.9; }
.wd-summary-stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 6px;
padding: 8px;
}
.wd-summary-stat {
display: flex;
flex-direction: column;
align-items: center;
padding: 6px 4px;
border-radius: 6px;
background: color-mix(in srgb, var(--bg2) 80%, transparent);
}
.wd-summary-stat-label {
font-size: 0.58rem;
color: var(--se-text-muted);
}
.wd-summary-stat-val {
font-size: 0.78rem;
font-weight: 700;
}
.wd-index-list {
list-style: none;
margin: 0;
padding: 0 4px 8px;
}
.wd-index-row {
display: grid;
grid-template-columns: 1fr auto auto;
gap: 8px;
width: 100%;
padding: 6px 8px;
border: none;
border-bottom: 1px solid color-mix(in srgb, var(--se-border) 35%, transparent);
background: transparent;
cursor: pointer;
font-size: 0.68rem;
color: inherit;
text-align: left;
}
.wd-quote-body {
padding: 8px 10px;
display: flex;
flex-direction: column;
gap: 10px;
}
.wd-quote-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
margin: 0;
}
.wd-quote-grid dt {
margin: 0;
font-size: 0.58rem;
color: var(--se-text-muted);
}
.wd-quote-grid dd {
margin: 2px 0 0;
font-size: 0.72rem;
font-weight: 600;
}
.wd-quote-link-btn {
align-self: flex-start;
padding: 4px 10px;
border: 1px solid color-mix(in srgb, var(--se-border) 70%, transparent);
border-radius: 4px;
background: transparent;
font-size: 0.62rem;
cursor: pointer;
color: var(--se-text-muted);
}
.wd-timesales-body {
padding: 0;
}
.wd-timesales-table {
width: 100%;
border-collapse: collapse;
font-size: 0.64rem;
}
.wd-timesales-table th {
position: sticky;
top: 0;
padding: 4px 6px;
background: color-mix(in srgb, var(--bg2) 95%, transparent);
color: var(--se-text-muted);
font-weight: 600;
text-align: right;
border-bottom: 1px solid color-mix(in srgb, var(--se-border) 50%, transparent);
}
.wd-timesales-table th:first-child { text-align: left; }
.wd-timesales-table td {
padding: 3px 6px;
text-align: right;
border-bottom: 1px solid color-mix(in srgb, var(--se-border) 25%, transparent);
}
.wd-timesales-table td:first-child { text-align: left; color: var(--se-text-muted); }
.wd-ts-buy td:nth-child(2) { color: #e74c3c; }
.wd-ts-sell td:nth-child(2) { color: #3498db; }
.wd-positions-list,
.wd-orders-list {
list-style: none;
margin: 0;
padding: 4px;
}
.wd-position-row,
.wd-order-main {
width: 100%;
padding: 8px;
border: none;
border-bottom: 1px solid color-mix(in srgb, var(--se-border) 35%, transparent);
background: transparent;
cursor: pointer;
text-align: left;
color: inherit;
font-size: 0.66rem;
}
.wd-position-top,
.wd-position-bottom {
display: flex;
justify-content: space-between;
gap: 8px;
}
.wd-position-bottom {
margin-top: 4px;
font-size: 0.6rem;
color: var(--se-text-muted);
}
.wd-order-item {
display: flex;
align-items: center;
gap: 4px;
border-bottom: 1px solid color-mix(in srgb, var(--se-border) 35%, transparent);
}
.wd-order-main {
flex: 1;
display: grid;
grid-template-columns: auto 1fr auto auto;
gap: 6px;
align-items: center;
}
.wd-order-cancel {
flex-shrink: 0;
padding: 4px 8px;
margin-right: 4px;
border: 1px solid color-mix(in srgb, var(--se-border) 60%, transparent);
border-radius: 4px;
background: transparent;
font-size: 0.58rem;
cursor: pointer;
color: var(--se-text-muted);
}
.wd-balance-grid {
display: flex;
flex-direction: column;
gap: 0;
margin: 0;
padding: 4px 8px;
}
.wd-balance-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 4px;
border-bottom: 1px solid color-mix(in srgb, var(--se-border) 30%, transparent);
}
.wd-balance-row dt {
margin: 0;
font-size: 0.66rem;
color: var(--se-text-muted);
}
.wd-balance-row dd {
margin: 0;
font-size: 0.74rem;
font-weight: 600;
}
.wd-balance-row--total dd,
.wd-balance-total {
font-size: 0.88rem;
color: var(--se-accent);
}
.wd-depth-body {
padding: 6px 8px;
display: flex;
flex-direction: column;
gap: 4px;
}
.wd-depth-side--ask { margin-bottom: 2px; }
.wd-depth-mid {
text-align: center;
font-size: 0.82rem;
font-weight: 700;
padding: 4px;
background: color-mix(in srgb, var(--bg2) 70%, transparent);
border-radius: 4px;
}
.wd-depth-row {
display: grid;
grid-template-columns: 72px 1fr 56px;
align-items: center;
gap: 4px;
font-size: 0.62rem;
margin-bottom: 2px;
}
.wd-depth-bar-wrap {
height: 10px;
background: color-mix(in srgb, var(--bg2) 80%, transparent);
border-radius: 2px;
overflow: hidden;
}
.wd-depth-bar {
height: 100%;
border-radius: 2px;
}
.wd-depth-bar--ask { background: color-mix(in srgb, #3498db 55%, transparent); }
.wd-depth-bar--bid { background: color-mix(in srgb, #e74c3c 55%, transparent); }
.wd-depth-price { text-align: right; }
.wd-depth-size { text-align: right; color: var(--se-text-muted); }
.wd-mini-chart-wrap {
flex: 1;
min-height: 160px;
padding: 4px;
}
.wd-widget-host--mini-chart .paper-mini-chart {
height: 100%;
}
.wd-picker-section {
margin: 0;
}
.wd-picker-section-title {
margin: 0 0 8px;
font-size: 0.72rem;
font-weight: 700;
color: var(--se-accent, var(--accent));
letter-spacing: 0.02em;
}
.wd-strategy-list {
display: flex;
flex-direction: column;
gap: 4px;
padding: 4px;
}
.wd-strategy-item {
display: flex;
flex-direction: column;
align-items: flex-start;
width: 100%;
padding: 8px 10px;
border: 1px solid transparent;
border-radius: 6px;
background: transparent;
text-align: left;
cursor: pointer;
color: var(--se-text, var(--text));
}
.wd-strategy-item--on {
border-color: color-mix(in srgb, var(--se-accent) 45%, transparent);
background: color-mix(in srgb, var(--se-accent) 12%, transparent);
}
/* ── 화면 구성 / 위젯 선택 팝업 (설정 화면 stg-* · AppPopup 연동) ── */
.wd-layout-popup-body,
.wd-picker-popup-body {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 16px 20px 20px;
display: flex;
flex-direction: column;
gap: 14px;
background: var(--bg, #16161e);
}
.wd-layout-intro {
margin: 0;
padding: 10px 14px;
border-radius: 8px;
font-size: 12px;
line-height: 1.55;
color: var(--text2, #9aa5ce);
background: color-mix(in srgb, var(--accent, #3f7ef5) 6%, var(--bg2));
border: 1px solid color-mix(in srgb, var(--accent) 18%, var(--border));
}
.wd-layout-section {
margin: 0;
}
.wd-layout-mode-row {
grid-template-columns: repeat(3, 1fr);
}
@media (max-width: 560px) {
.wd-layout-mode-row {
grid-template-columns: 1fr;
}
}
.wd-layout-tab-row {
padding-top: 10px;
padding-bottom: 10px;
}
.wd-layout-tab-fields {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
gap: 10px 14px;
width: 100%;
}
.wd-layout-tab-field {
display: flex;
flex-direction: column;
gap: 4px;
flex: 1;
min-width: 120px;
}
.wd-layout-tab-field-label {
font-size: 11px;
font-weight: 600;
color: var(--text3);
}
.wd-layout-tab-delete {
flex-shrink: 0;
align-self: flex-end;
padding: 6px 12px;
font-size: 12px;
}
.wd-layout-tab-add {
padding: 0 16px 12px;
}
.wd-layout-tab-add-btn {
padding: 7px 14px;
font-size: 12px;
border-radius: 6px;
}
.wd-picker-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 10px;
}
.wd-picker-item {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 6px;
padding: 12px 14px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg3);
cursor: pointer;
text-align: left;
color: var(--text);
transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
}
.wd-picker-item:hover {
border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
background: color-mix(in srgb, var(--bg3) 80%, var(--accent) 20%);
box-shadow: 0 2px 8px color-mix(in srgb, var(--accent) 12%, transparent);
}
.wd-picker-item-label {
font-size: 13px;
font-weight: 600;
color: var(--text);
line-height: 1.35;
}
.wd-picker-item-desc {
font-size: 11px;
color: var(--text3);
line-height: 1.45;
}
/* 위젯 선택 팝업 — 웹·대시보드 (서버와 동일한 넓은 목록) */
.app-popup-shell--widget-picker {
width: min(720px, 96vw) !important;
max-height: min(860px, 92vh);
}
.app-popup-shell--widget-picker .wd-picker-popup-body {
max-height: none;
}
/* Tauri 네이티브 위젯 창 — 서버와 동일 AppPopup (720×860 OS 창) */
html.fw-native-widget.fw-native-picker-mode,
html.fw-native-widget.fw-native-picker-mode body {
overflow: hidden;
}
html.fw-native-widget.fw-native-picker-mode .fw-widget-native-root .fw-window {
visibility: hidden;
pointer-events: none;
}
html.fw-native-widget.fw-native-picker-mode .app-popup-overlay {
position: fixed;
inset: 0;
z-index: 13200;
}
html.fw-native-widget.fw-native-picker-mode .app-popup-shell--widget-picker {
width: min(720px, calc(100vw - 16px)) !important;
max-height: min(860px, calc(100vh - 16px));
}
html.fw-native-widget.fw-native-picker-mode .app-popup-shell--widget-picker .wd-picker-popup-body {
max-height: min(760px, calc(100vh - 120px));
overflow-y: auto;
}
html.fw-native-widget .wd-picker-native-loading {
position: fixed;
inset: 0;
z-index: 13199;
display: flex;
align-items: center;
justify-content: center;
background: rgba(0, 0, 0, 0.45);
color: var(--text2);
font-size: 13px;
}
/* (legacy) Tauri 네이티브 compact picker — fallback */
html.fw-native-widget .wd-picker-native-overlay {
position: fixed;
inset: 0;
z-index: 13200;
display: flex;
flex-direction: column;
padding: 10px;
box-sizing: border-box;
background: rgba(0, 0, 0, 0.5);
}
html.fw-native-widget .wd-picker-native-shell {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
border-radius: 12px;
border: 1px solid color-mix(in srgb, var(--accent, #3f7ef5) 45%, var(--border));
background: var(--bg2, #1e222d);
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.55);
overflow: hidden;
}
html.fw-native-widget .wd-picker-native-header {
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding: 10px 14px;
border-bottom: 1px solid var(--border);
background: linear-gradient(
180deg,
color-mix(in srgb, var(--accent, #3f7ef5) 14%, var(--bg2)) 0%,
var(--bg2, #1e222d) 100%
);
}
html.fw-native-widget .wd-picker-native-title {
margin: 0;
font-size: 14px;
font-weight: 700;
color: var(--text);
}
html.fw-native-widget .wd-picker-native-title-ko {
font-size: 12px;
font-weight: 400;
color: var(--text2);
}
html.fw-native-widget .wd-picker-native-close {
flex-shrink: 0;
width: 28px;
height: 28px;
border: 1px solid var(--border);
border-radius: 6px;
background: var(--bg3);
color: var(--text2);
cursor: pointer;
font-size: 14px;
line-height: 1;
}
html.fw-native-widget .wd-picker-native-close:hover {
color: var(--text);
border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
}
html.fw-native-widget .wd-picker-native-body {
flex: 1;
min-height: 0;
overflow-y: auto;
}
/* 네이티브 위젯 창 — picker가 창 전체를 차지 (overlay/portal 미사용) */
html.fw-native-widget .fw-widget-native-root--picker {
overflow: hidden;
}
html.fw-native-widget .wd-picker-native-root {
flex: 1;
min-height: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
background: var(--bg, #1a1b26);
}
html.fw-native-widget .wd-picker-native-root .wd-picker-native-shell {
flex: 1;
min-height: 0;
border-radius: 0;
border: none;
box-shadow: none;
}
html.fw-native-widget .fw-widget-native-root--picker .wd-picker-popup-body {
padding: 14px 18px 20px;
}
html.fw-native-widget .fw-widget-native-root--picker .wd-layout-intro {
margin: 0 0 14px;
font-size: 13px;
line-height: 1.5;
}
html.fw-native-widget .fw-widget-native-root--picker .wd-picker-grid {
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 12px;
}
html.fw-native-widget .fw-widget-native-root--picker .wd-picker-item {
padding: 14px 16px;
}
html.fw-native-widget .fw-widget-native-root--picker .wd-picker-item-label {
font-size: 14px;
}
html.fw-native-widget .fw-widget-native-root--picker .wd-picker-item-desc {
font-size: 12px;
}
.bps-page--wd-no-left .bps-side-wrap--left,
.bps-page--wd-no-left .bps-side-wrap--left + .bps-splitter {
display: none !important;
}
.bps-page--wd-no-right .bps-side-wrap--right,
.bps-page--wd-no-right .bps-main-row > .bps-splitter--v:last-of-type {
display: none !important;
}
.bps-page--wd .bps-left-body,
.bps-page--wd .bps-right-body,
.bps-page--wd .bps-footer-body {
min-height: 0;
display: flex;
flex-direction: column;
}
/* ── 영역 fit: shell 여백·이중 스크롤 제거 ── */
.bps-page--wd .bps-main {
padding-bottom: 0;
}
.bps-page--wd .bps-center-content {
padding: 0;
overflow: hidden;
}
.bps-page--wd .bps-footer {
margin: 0;
border-radius: 0;
border-left: none;
border-right: none;
border-bottom: none;
min-height: 0;
}
.bps-page--wd .bps-footer-body {
padding: 0;
overflow: hidden;
}
.bps-page--wd .bps-left .bps-panel-head,
.bps-page--wd .bps-right .bps-panel-head {
display: none;
}
.bps-page--wd .bps-panel-body > .wd-zone,
.bps-page--wd .bps-center-content > .wd-zone {
padding: 0;
}
.bps-page--wd .wd-zone-slots {
padding: 0;
gap: 1px;
}
.bps-page--wd .wd-zone-slots--1 {
gap: 0;
}
/* 차트 캔버스 — 슬롯 높이에 맞춤 (고정 vh 제거) */
.bps-page--wd .wd-widget-host .vtd-card-chart-canvas,
.bps-page--wd .wd-widget-host .slot-chart-wrap {
flex: 1;
min-height: 0 !important;
height: auto !important;
max-height: none;
border-radius: 0;
border-left: none;
border-right: none;
}
.bps-page--wd .wd-widget-host .wd-candle-chart-canvas {
min-height: 0 !important;
}
.bps-page--wd .wd-candle-chart-main .tv-drawing-sidebar {
align-self: stretch;
max-height: none;
}
.bps-page--wd .wd-widget-host--chart .ptd-analysis-chart {
flex: 1;
min-height: 0;
height: 100%;
}
.bps-page--wd .wd-widget-host--chart .ptd-analysis-chart .ptd-chart-canvas {
max-height: none;
min-height: 0;
flex: 1;
}
/* 위젯 — 전략 분석 차트 하단 줌/패닝 툴바 숨김 */
.wd-widget-host--chart .ptd-analysis-chart .chart-hover-toolbar {
display: none !important;
}
/* 미니 차트 */
.bps-page--wd .wd-mini-chart-wrap {
min-height: 0;
flex: 1;
display: flex;
flex-direction: column;
padding: 0;
}
.bps-page--wd .wd-widget-host--mini-chart .ptd-chart-wrap {
flex: 1;
min-height: 0;
padding: 4px 8px 0;
display: flex;
flex-direction: column;
}
.bps-page--wd .wd-widget-host--mini-chart .ptd-chart-head,
.bps-page--wd .wd-widget-host--mini-chart .ptd-tf-row {
flex-shrink: 0;
}
.bps-page--wd .wd-widget-host--mini-chart .ptd-chart-canvas {
flex: 1;
min-height: 0 !important;
max-height: none !important;
}
/* 호가·매매 — 내부 스크롤만 */
.bps-page--wd .wd-widget-host--trade,
.bps-page--wd .wd-widget-host--orderbook {
overflow: hidden;
}
.bps-page--wd .wd-widget-host--trade > *,
.bps-page--wd .wd-widget-host--orderbook > * {
height: 100%;
overflow: auto;
flex: 1;
min-height: 0;
}
/* 리스트형 위젯 */
.bps-page--wd .wd-widget-host--history,
.bps-page--wd .wd-widget-host--kpi,
.bps-page--wd .wd-widget-host--notifications,
.bps-page--wd .wd-widget-host--strategy-list,
.bps-page--wd .wd-widget-host--backtest-list {
overflow: hidden;
}
.bps-page--wd .wd-widget-host--history .ptd-trade-history--fill {
padding: 0;
flex: 1;
}
.bps-page--wd .wd-widget-host--history .ptd-trade-history-scroll {
flex: 1;
min-height: 0;
}
.bps-page--wd .wd-widget-host--tape {
padding: 0;
min-height: 0;
}
/* 매매 시그널·분석 위젯 */
.wd-widget-host--analysis {
overflow: auto;
flex: 1;
min-height: 0;
padding: 8px 10px;
}
.wd-widget-host--signal-summary {
padding: 0;
}
.wd-widget-host--signal-summary .vtd-card {
border: none;
box-shadow: none;
}
.wd-widget-host--signal-match .seval-signal-split {
flex-direction: column;
gap: 10px;
}
.wd-widget-host--strategy-condition .scv-root {
min-height: 0;
}
.wd-widget-host--backtest-signals {
padding: 0;
}
.wd-widget-host--backtest-signals .wd-backtest-sig-table {
border: none;
box-shadow: none;
height: 100%;
}
.wd-widget-host--backtest-signals .brd-sig-scroll {
max-height: none;
}
.wd-widget-host--indicator-status .vtd-sig-panel-wrap--detail {
min-height: 0;
}
.bps-page--wd .wd-widget-host--analysis {
overflow: auto;
}
.wd-widget-empty--loading {
color: var(--text3, var(--se-text-muted, #6272a4));
font-style: italic;
}