:root{color-scheme:dark;--bg:#0c1117;--panel:#111821;--panel-2:#0f151d;--line:#223044;--line-soft:#1a2533;--text:#e6edf6;--muted:#7f8ea3;--green:#22c55e;--red:#f05252;--amber:#f59e0b;--blue:#60a5fa}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;margin:0}button,input{font:inherit}.terminalShell{margin:0 auto;max-width:1560px;padding:18px}.appHeader{align-items:center;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;margin-bottom:14px;padding-bottom:14px}.product,h1,h2,p{margin:0}.product{color:var(--muted);font-size:12px;font-weight:800;text-transform:uppercase}h1{font-size:24px;letter-spacing:0;line-height:1.2;margin-top:4px}h2{font-size:14px}.headerMeta{align-items:center;color:var(--muted);display:flex;font-size:13px;gap:10px}.headerMeta a{border:1px solid var(--line);border-radius:6px;color:var(--text);font-size:12px;font-weight:800;padding:5px 8px;text-decoration:none}.headerMeta strong{background:rgba(96,165,250,.14);border:1px solid rgba(96,165,250,.28);border-radius:6px;color:#bfdbfe;padding:5px 8px}.loginShell{align-items:center;display:grid;min-height:100vh;padding:18px;place-items:center}.loginPanel{background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid var(--line);border-radius:8px;box-shadow:0 18px 60px rgba(0,0,0,.28);display:grid;grid-gap:14px;gap:14px;max-width:380px;padding:28px;width:min(100%,380px)}.loginPanel input{width:100%}.loginPanel button,.logoutButton{background:var(--blue);border:0;border-radius:6px;color:#06111f;cursor:pointer;font-size:13px;font-weight:900}.loginPanel button{min-height:42px}.loginPanel button:disabled{cursor:not-allowed;opacity:.5}.loginError{color:#fecaca;font-size:13px}.logoutButton{padding:7px 10px;position:fixed;right:18px;top:18px;z-index:20}.statusDot{background:var(--red);border-radius:999px;display:inline-block;height:8px;width:8px}.statusDot.active{background:var(--green);box-shadow:0 0 0 4px rgba(34,197,94,.12)}.toolbar{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-bottom:12px}.exchangeTabs{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;display:flex;padding:3px}.exchangeTabs button{background:transparent;border:0;border-radius:6px;color:var(--muted);cursor:pointer;font-size:13px;font-weight:800;padding:8px 12px}.exchangeTabs button.selected{background:#1e293b;color:var(--text)}input{background:var(--panel);border:1px solid var(--line);border-radius:8px;color:var(--text);min-width:220px;outline:none;padding:9px 11px}input:focus{border-color:var(--blue)}.summaryGrid{display:grid;grid-gap:10px;gap:10px;margin-bottom:12px}.listingsSummary,.summaryGrid{grid-template-columns:repeat(5,minmax(0,1fr))}.summary{align-items:center;background:var(--panel);border:1px solid var(--line-soft);border-radius:8px;display:grid;grid-gap:2px 10px;gap:2px 10px;grid-template-columns:auto 1fr;min-height:70px;padding:12px}.summary>span{color:var(--muted);font-size:12px;font-weight:800}.summary strong{font-size:22px;grid-column:2;line-height:1}.summary small{color:var(--muted);font-size:12px;grid-column:2}.summary.accent{border-color:rgba(34,197,94,.32)}.marketGrid{display:grid;grid-gap:12px;gap:12px;grid-template-columns:minmax(0,1fr) 360px;margin-bottom:12px}.bottomGrid{display:grid;grid-gap:12px;gap:12px;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr)}.tradeSection{margin-top:12px}.sideStack{display:grid;grid-gap:12px;gap:12px}.panel{background:var(--panel);border:1px solid var(--line-soft);border-radius:8px;min-width:0}.panelTitle{align-items:center;border-bottom:1px solid var(--line-soft);display:flex;justify-content:space-between;padding:11px 12px}.panelTitle span{color:var(--muted);font-size:12px;font-weight:800}.tableScroller{overflow-x:auto}.signalTable{border-collapse:collapse;width:100%}.signalTable td,.signalTable th{border-bottom:1px solid var(--line-soft);font-size:13px;padding:10px 12px;text-align:left;white-space:nowrap}.signalTable tbody tr{cursor:pointer}.signalTable tbody tr.selectedRow,.signalTable tbody tr:hover{background:rgba(96,165,250,.08)}.signalTable th{color:var(--muted);font-size:11px;font-weight:900;text-transform:uppercase}.signalTable td small{color:var(--muted);display:block;font-size:11px;margin-top:2px}.candidateRow,.coinCell,.positionRow,.tradeRow{align-items:center;display:flex;gap:10px;min-width:0}.candidateRow small,.candidateRow span,.coinCell span,.positionRow span,.tradeRow small{color:var(--muted);display:block;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.coinIcon{align-items:center;background:#1b2533;border:1px solid #2b3a50;border-radius:999px;color:var(--muted);display:inline-flex;flex:0 0 auto;font-size:10px;font-weight:900;height:30px;justify-content:center;overflow:hidden;width:30px}.coinIcon img{height:100%;object-fit:cover;width:100%}.coinIcon>span{display:none}.coinIcon.fallback>span{display:inline}.exchangeMark{align-items:center;border-radius:999px;color:#fff;display:inline-flex;flex:0 0 auto;font-size:11px;font-weight:900;height:24px;justify-content:center;width:24px}.exchangeMark.upbit{background:#2563eb}.exchangeMark.bithumb{background:#d97706}.exchangeMark.binance{background:#18181b;color:#f3ba2f}.exchangeMark.binance-alpha{background:#6d28d9}.exchangePill{align-items:center;color:var(--muted);display:inline-flex;font-size:12px;font-weight:800;gap:6px}.exchangePill .exchangeMark{height:20px;width:20px}.gain{color:var(--green)}.loss{color:var(--red)}.candidateList,.positionList,.ruleList,.tradeList{display:grid;grid-gap:0;gap:0;padding:6px}.chartPanel{padding:12px}.chartHeader{align-items:center;display:flex;justify-content:space-between;margin-bottom:10px}.chartHeader strong{display:block;font-size:18px}.chartHeader span{color:var(--muted);display:block;font-size:12px;margin-top:2px}.lineChart{background:linear-gradient(var(--line-soft) 1px,transparent 1px),linear-gradient(90deg,var(--line-soft) 1px,transparent 1px);background-size:100% 33.3%,25% 100%;border:1px solid var(--line-soft);border-radius:8px;height:220px;width:100%}.lineChart polyline{fill:none;stroke:var(--green);stroke-linecap:round;stroke-linejoin:round;stroke-width:2.2;vector-effect:non-scaling-stroke}.chartStats{display:grid;grid-gap:8px;gap:8px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:10px}.chartStats span{background:var(--panel-2);border:1px solid var(--line-soft);border-radius:6px;color:var(--muted);font-size:12px;font-weight:800;padding:8px}.candidateRow,.positionRow,.ruleRow,.tradeRow{border-radius:6px;padding:9px 8px}.candidateRow,.positionRow,.ruleRow{border-bottom:1px solid var(--line-soft)}.ruleRow{align-items:center;display:flex;justify-content:space-between}.ruleRow span{color:var(--muted);font-size:12px}.ruleRow strong{font-size:13px}.positionRow b,.tradeRow b{margin-left:auto}.tradeRow{border-bottom:1px solid var(--line-soft);display:grid;grid-template-columns:42px 30px minmax(0,1fr) minmax(96px,128px) 78px 74px}.tradeRow>span{border-radius:999px;font-size:11px;font-weight:900;padding:4px 7px;text-align:center}.tradeRow.buy>span{background:rgba(34,197,94,.12);color:var(--green)}.tradeRow.sell>span{background:rgba(240,82,82,.12);color:var(--red)}.tradePrice span{color:var(--muted);display:block;font-size:11px;font-weight:800;margin-bottom:2px}.tradePrice strong{display:block;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tradeRow time{color:var(--muted);font-size:12px;white-space:nowrap}.candidateRow{display:grid;grid-template-columns:30px 64px minmax(0,1fr) minmax(0,1fr)}.pillRow{display:flex;flex-wrap:wrap;gap:8px}.missingPills .exchangePill{color:#fecaca}.candidateScore{background:rgba(96,165,250,.12);border:1px solid rgba(96,165,250,.24);border-radius:999px;color:#bfdbfe;display:inline-block;font-size:12px;font-weight:900;padding:5px 8px}.empty{color:var(--muted);font-size:13px;padding:24px 12px}@media (max-width:1100px){.summaryGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.bottomGrid,.marketGrid{grid-template-columns:1fr}}@media (max-width:640px){.terminalShell{padding:12px}.appHeader,.toolbar{align-items:stretch;flex-direction:column}.exchangeTabs{overflow-x:auto}input{min-width:0;width:100%}.summaryGrid{grid-template-columns:1fr}}