/* ── 위젯 대시보드 ── */ .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 네이티브 위젯 창 — 전체 창 picker (AppPopup draggable 미사용) */ 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; } 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.35); color: var(--text2); font-size: 13px; } .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; }