.user-avatar-menu{position:relative;display:inline-flex;align-items:center;flex-shrink:0}.user-avatar-menu__trigger{display:inline-flex;align-items:center;justify-content:center;padding:0;border:none;background:transparent;cursor:pointer;line-height:0}.user-avatar-menu__avatar{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:999px;background:var(--surface-3);color:var(--text);font-size:12px;font-weight:600;border:1px solid var(--border-strong)}.user-avatar-menu__dropdown{position:absolute;top:calc(100% + 8px);right:0;min-width:160px;padding:6px;border-radius:var(--radius-sm);border:1px solid rgba(15,23,42,.1);background:var(--surface);box-shadow:0 2px 8px #0f172a0f,0 12px 32px #0f172a1f;z-index:50}.user-avatar-menu__dropdown-label{padding:8px 10px;font-size:.86rem;font-weight:500;color:var(--muted);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-avatar-menu__action{display:block;width:100%;text-align:left;padding:8px 10px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text);font:inherit;font-size:.86rem;cursor:pointer;text-decoration:none}.user-avatar-menu__action:hover{background:var(--accent-weak);color:var(--accent);text-decoration:none}.chart-notify-notice.ant-notification-notice,.fixed-time-notify-notice.ant-notification-notice{position:absolute;width:min(360px,calc(100vw - 32px))!important;min-height:92px;margin:0!important;padding:0!important;border-radius:12px;border:none!important;outline:none!important;box-shadow:none!important;backdrop-filter:blur(14px);overflow:visible;animation:fixed-time-notify-enter .36s cubic-bezier(.22,1,.36,1)}.chart-notify-notice.ant-notification-notice .ant-notification-notice-icon,.fixed-time-notify-notice.ant-notification-notice .ant-notification-notice-icon,.chart-notify-notice.ant-notification-notice .ant-notification-notice-description,.fixed-time-notify-notice.ant-notification-notice .ant-notification-notice-description{display:none!important}.chart-notify-notice.ant-notification-notice .ant-notification-notice-message,.fixed-time-notify-notice.ant-notification-notice .ant-notification-notice-message,.chart-notify-notice.ant-notification-notice .ant-notification-notice-title,.fixed-time-notify-notice.ant-notification-notice .ant-notification-notice-title{margin:0!important;margin-inline-start:0!important;padding:0!important;max-width:none!important;font-size:inherit;line-height:inherit;color:inherit}.chart-notify-notice.ant-notification-notice .ant-notification-notice-content,.fixed-time-notify-notice.ant-notification-notice .ant-notification-notice-content{margin:0!important;padding:0!important;border:none!important;background:transparent!important;box-shadow:none!important}.chart-notify-notice.ant-notification-notice .ant-notification-notice-close,.fixed-time-notify-notice.ant-notification-notice .ant-notification-notice-close{top:8px!important;inset-inline-end:8px!important;z-index:5;display:inline-flex!important;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:1px solid rgba(148,163,184,.28);background:#ffffff0a;color:#94a3b8f2!important;pointer-events:auto!important;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}.chart-notify-notice.ant-notification-notice.chart-notify-notice--regular,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--regular{background:linear-gradient(165deg,#243042f5,#121a28f7)}.chart-notify-notice.ant-notification-notice.chart-notify-notice--regular .fixed-time-notify-card__title,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--regular .fixed-time-notify-card__title{color:#fb923c}.chart-notify-notice.ant-notification-notice.chart-notify-notice--regular .fixed-time-notify-card__time,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--regular .fixed-time-notify-card__time{color:#fb923cb8}.chart-notify-notice.ant-notification-notice.chart-notify-notice--regular .ant-notification-notice-close,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--regular .ant-notification-notice-close{border-color:#94a3b847}.chart-notify-notice.ant-notification-notice.chart-notify-notice--regular .ant-notification-notice-close:hover,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--regular .ant-notification-notice-close:hover{background:#7dd3fc1f;border-color:#7dd3fc73;color:#7dd3fc!important}.chart-notify-notice.ant-notification-notice.chart-notify-notice--price-alert,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--price-alert{background:linear-gradient(165deg,#341c24f5,#1e0e16f7)}.chart-notify-notice.ant-notification-notice.chart-notify-notice--price-alert .fixed-time-notify-card__title,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--price-alert .fixed-time-notify-card__title{color:#fb7185}.chart-notify-notice.ant-notification-notice.chart-notify-notice--price-alert .fixed-time-notify-card__time,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--price-alert .fixed-time-notify-card__time{color:#fb7185bf}.chart-notify-notice.ant-notification-notice.chart-notify-notice--price-alert .ant-notification-notice-close,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--price-alert .ant-notification-notice-close{border-color:#fb718547}.chart-notify-notice.ant-notification-notice.chart-notify-notice--price-alert .ant-notification-notice-close:hover,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--price-alert .ant-notification-notice-close:hover{background:#fda4af1f;border-color:#fda4af73;color:#fda4af!important}.chart-notify-notice.ant-notification-notice.chart-notify-notice--schedule,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--schedule{background:linear-gradient(165deg,#221e3af5,#121024f7)}.chart-notify-notice.ant-notification-notice.chart-notify-notice--schedule .fixed-time-notify-card__title,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--schedule .fixed-time-notify-card__title{color:#a78bfa}.chart-notify-notice.ant-notification-notice.chart-notify-notice--schedule .fixed-time-notify-card__time,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--schedule .fixed-time-notify-card__time{color:#a78bfabf}.chart-notify-notice.ant-notification-notice.chart-notify-notice--schedule .ant-notification-notice-close,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--schedule .ant-notification-notice-close{border-color:#a78bfa47}.chart-notify-notice.ant-notification-notice.chart-notify-notice--schedule .ant-notification-notice-close:hover,.fixed-time-notify-notice.ant-notification-notice.chart-notify-notice--schedule .ant-notification-notice-close:hover{background:#c4b5fd1f;border-color:#c4b5fd73;color:#c4b5fd!important}@keyframes fixed-time-notify-enter{0%{opacity:0;transform:translate3d(10px,-8px,0) scale(.98)}to{opacity:1;transform:translateZ(0) scale(1)}}.fixed-time-notify-card{display:flex;flex-direction:column;justify-content:center;min-height:92px;padding:14px 44px 14px 14px}.fixed-time-notify-card__title{margin:0;font-size:13px;line-height:1.35;font-weight:650;letter-spacing:.01em}.fixed-time-notify-card__time{margin:3px 0 0;font-size:11px;line-height:1.35;font-weight:500;font-variant-numeric:tabular-nums;letter-spacing:.01em}.notification-bell-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:8px;background:transparent;color:var(--text);cursor:pointer;padding:0}.notification-bell-btn:hover{background:var(--surface-2)}.notification-list{list-style:none;margin:0;padding:0;max-height:calc(100vh - 220px);overflow:auto}.notification-list__toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;padding:0 2px;font-size:12px}.notification-list__row{display:flex;align-items:stretch;gap:8px;margin-bottom:8px}.notification-list__check{flex-shrink:0;align-self:center}.notification-list__item{flex:1;min-width:0;text-align:left;border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:10px 12px;cursor:pointer}.notification-list__item:hover{border-color:var(--border-strong)}.notification-list__item.is-unread{background:var(--accent-weak);border-color:#2563eb40}.notification-list__row-title{display:flex;align-items:center;gap:8px}.notification-list__title{flex:1;font-weight:600;color:var(--text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification-list__dot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex-shrink:0}.notification-list__meta{display:flex;justify-content:space-between;gap:8px;margin-top:4px;font-size:12px;color:var(--muted)}.notification-list__snippet{margin-top:6px;font-size:12px;color:var(--muted);line-height:1.4}.notification-list__delete{flex-shrink:0;align-self:center;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:8px;background:transparent;color:var(--muted);cursor:pointer;transition:color .15s ease,background .15s ease}.notification-list__delete:hover{color:#ff4d4f;background:#ff4d4f14}.notification-detail__toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px}.notification-detail__meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px}.notification-detail__body{white-space:pre-wrap;word-break:break-word;background:var(--surface-2);border-radius:8px;padding:12px;font-size:13px;line-height:1.55;font-family:var(--font-sans);margin:0;max-height:calc(100vh - 220px);overflow:auto}:root{--bg: #f4f6fa;--surface: #ffffff;--surface-2: #f1f4f9;--surface-3: #e6eaf1;--border: #e2e6ee;--border-strong: #cdd4e0;--text: #1c2230;--text-strong: #0d1220;--muted: #5c6577;--faint: #98a1b3;--accent: #2563eb;--accent-weak: rgba(37, 99, 235, .1);--success: #12905a;--success-weak: rgba(18, 144, 90, .12);--danger: #d1332e;--danger-weak: rgba(209, 51, 46, .1);--warning: #b7791f;--warning-weak: rgba(183, 121, 31, .12);--info: #1d74c9;--pos: #12905a;--neg: #d1332e;--radius-sm: 6px;--radius: 10px;--radius-lg: 16px;--shadow: 0 1px 2px rgba(16, 24, 40, .06), 0 8px 24px rgba(16, 24, 40, .08);--shadow-sm: 0 1px 2px rgba(16, 24, 40, .08);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--space-7: 48px;--font-sans: -apple-system, "PingFang SC", "Microsoft YaHei", system-ui, "Segoe UI", Roboto, sans-serif;--font-mono: ui-monospace, "SF Mono", "Menlo", "Cascadia Code", "Roboto Mono", monospace;--header-nav-bg: #151c28;--header-nav-bg-top: #1a2334;--header-nav-border: rgba(255, 255, 255, .08);--header-text: rgba(226, 232, 240, .72);--header-text-hover: rgba(255, 255, 255, .94);--header-text-strong: #f1f5f9;--header-hover: rgba(255, 255, 255, .07);--header-active-bg: rgba(96, 165, 250, .16);--header-active-text: #93c5fd;--header-action-bg: rgba(255, 255, 255, .1);--header-action-border: rgba(255, 255, 255, .22);--header-action-text: #f1f5f9;--header-action-text-hover: #ffffff;--sidebar-w: 232px;--sidebar-w-collapsed: 64px;--topbar-h: 56px;--app-nav-row-h: 52px;--app-crumb-row-h: 44px;--app-header-h: calc(var(--app-nav-row-h) + var(--app-crumb-row-h));--app-header-effective-h: var(--app-nav-row-h);color-scheme:light}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4{margin:0;color:var(--text-strong);font-weight:650;line-height:1.25}h1{font-size:1.25rem}h2{font-size:1.05rem}h3{font-size:1rem}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}code,kbd,pre{font-family:var(--font-mono)}::selection{background:var(--accent-weak)}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:8px;border:2px solid transparent;background-clip:padding-box}.app-shell{display:flex;flex-direction:column;min-height:100vh}.app-shell--topnav{--app-header-effective-h: var(--app-nav-row-h);height:100dvh;max-height:100dvh;overflow:hidden}.app-shell--topnav.app-shell--with-crumbs{--app-header-effective-h: var(--app-header-h)}.app-shell--topnav .main-content{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:auto;background:var(--surface)}.app-shell--topnav .main-content:has(>.contract-trend-chart-page),.app-shell--topnav .main-content:has(>.btc-replay-page){padding:0;overflow:hidden}.app-header{position:sticky;top:0;z-index:100;flex-shrink:0;overflow:visible;background:#fff;border-bottom:none}.ant-notification.ant-notification-topRight{--notification-top: calc(var(--app-header-effective-h, var(--app-nav-row-h)) + var(--chart-toolbar-effective-h, 0px) + 8px);top:calc(var(--notification-top) - var(--notification-margin-edge, 0px))!important;right:16px!important;left:auto!important;bottom:auto!important;transform:none!important;z-index:1200!important;pointer-events:none;align-items:flex-end!important}.ant-notification.ant-notification-topRight .ant-notification-notice,.ant-notification-topRight .ant-notification-notice{pointer-events:auto}.app-header__nav-row{display:flex;align-items:center;gap:var(--space-3);min-height:var(--app-nav-row-h);padding:0 var(--space-4);overflow:visible;color:var(--header-text);background:linear-gradient(180deg,var(--header-nav-bg-top) 0%,var(--header-nav-bg) 100%)}.app-shell--topnav:not(.app-shell--with-crumbs) .app-header__nav-row{border-bottom:1px solid var(--header-nav-border)}.app-header__brand{display:inline-flex;align-items:center;gap:var(--space-2);flex-shrink:0;min-width:0;padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-weight:700;font-size:1rem;color:var(--header-text-strong);text-decoration:none;letter-spacing:.01em}.app-header__brand:hover{text-decoration:none;background:var(--header-hover);color:#fff}.app-header__brand .logo-dot{width:10px;height:10px;border-radius:3px;background:#60a5fa;box-shadow:0 0 14px #60a5faa6;flex:none}.app-header__brand .nav-label{white-space:nowrap}.app-header__nav{display:flex;flex:1;justify-content:flex-start;align-items:center;gap:var(--space-2);min-width:0;overflow:visible;padding:2px 0}.app-header__nav>.nav-item,.app-header__nav .nav-group--horizontal>.nav-group-head{padding:6px 14px;font-size:13px;color:var(--header-text);font-weight:500}.app-header__nav>.nav-item:hover,.app-header__nav .nav-group--horizontal>.nav-group-head:hover{background:var(--header-hover);color:var(--header-text-hover)}.app-header__nav>.nav-item.active{background:var(--header-active-bg);color:var(--header-active-text)}.app-header__nav .nav-group-head.group-active{color:var(--header-text-hover)}.app-header__actions{display:flex;align-items:center;gap:var(--space-3);margin-left:auto;flex-shrink:0;min-width:0}.app-header__crumb-row{display:flex;align-items:center;min-height:var(--app-crumb-row-h);padding:0 var(--space-5);background:#fff;border:none}.app-header__crumb-row .breadcrumbs{min-width:0;flex:1}.app-header .notification-bell-btn{width:32px;height:32px;border-radius:6px;color:var(--header-action-text);background:transparent;border:none}.app-header .notification-bell-btn:hover{background:var(--header-hover);color:var(--header-action-text-hover)}.app-header .notification-bell-btn svg{color:currentColor}.app-header .notification-bell-btn .ant-badge{color:inherit}.app-header .user-avatar-menu__avatar{background:#ffffffeb;border-color:#ffffff61;color:#141b28;font-weight:700;box-shadow:0 1px 4px #0000002e}.app-header .user-avatar-menu__trigger:hover .user-avatar-menu__avatar{background:#fff;border-color:#fff;color:#0d1220}.nav-item{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);color:var(--muted);font-weight:500;cursor:pointer;transition:background .12s,color .12s;white-space:nowrap}.nav-item:hover{background:var(--surface-2);color:var(--text);text-decoration:none}.nav-item.active{background:var(--accent-weak);color:var(--accent)}.nav-item svg{width:18px;height:18px;flex:none}.nav-group{display:flex;flex-direction:column;gap:2px}.nav-group--horizontal{position:relative;flex-direction:row}.nav-group-head{width:100%;background:none;border:0;font:inherit;text-align:left}.nav-group--horizontal .nav-group-head{width:auto}.nav-group-head.group-active{color:var(--text)}.nav-group-head svg.nav-chevron{margin-left:auto;width:14px;height:14px;color:var(--faint);transition:transform .15s}.nav-group-head svg.nav-chevron.open{transform:rotate(90deg)}.nav-children{display:flex;flex-direction:column;gap:2px;margin:2px 0 4px 15px;padding-left:8px;border-left:1px solid var(--border)}.nav-item--child{font-size:.88rem;padding-top:6px;padding-bottom:6px}.nav-item--child svg{width:15px;height:15px}.nav-flyout{display:none}.nav-flyout--down{position:absolute;top:100%;left:0;z-index:3;display:none;flex-direction:column;align-items:stretch;overflow:visible;padding:0;margin:0;background:transparent;border:none;box-shadow:none}.nav-group--horizontal.is-flyout-open .nav-flyout--down{display:flex}.nav-group--horizontal.is-flyout-open{z-index:4}.nav-flyout-bridge{flex:none;width:100%;height:10px}.nav-flyout-panel{display:flex;flex-direction:column;gap:2px;min-width:176px;max-height:min(70vh,420px);overflow-x:hidden;overflow-y:auto;padding:var(--space-2);background:var(--surface);border:1px solid rgba(15,23,42,.1);border-radius:var(--radius);box-shadow:0 2px 8px #0f172a0f,0 12px 32px #0f172a1f}.nav-flyout .nav-item{justify-content:flex-start;gap:var(--space-3);padding:var(--space-2) var(--space-3)}.nav-flyout .nav-label{display:inline}.main{display:flex;flex-direction:column;min-width:0}.topbar{position:sticky;top:0;z-index:20;height:var(--topbar-h);display:flex;align-items:center;gap:var(--space-4);padding:0 var(--space-5);background:color-mix(in srgb,var(--bg) 78%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--border)}.breadcrumbs{display:flex;align-items:center;gap:var(--space-2);font-size:.95rem;color:var(--muted);min-width:0}.breadcrumbs .crumb-current{color:var(--text-strong);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.breadcrumbs .crumb-rich{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:400;color:#00000073;line-height:1.5}.breadcrumbs .crumb-rich__symbol,.breadcrumbs .crumb-rich__price{font-weight:700;color:var(--text-strong);font-variant-numeric:tabular-nums;letter-spacing:.02em}.breadcrumbs .crumb-rich__lead{font-weight:700;color:var(--text-strong)}.breadcrumbs .crumb-rich__side--long{color:#ff7875;font-weight:700}.breadcrumbs .crumb-rich__side--short{color:#95de64;font-weight:700}.breadcrumbs .sep{color:var(--faint)}.topbar-page-actions{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0;margin-left:var(--space-3);min-width:0}.topbar-page-actions__tools{display:flex;align-items:center;gap:var(--space-2);flex-shrink:1;min-width:0}.topbar-tf-tag{display:inline-flex;align-items:center;height:28px;padding:0 var(--space-3);border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text);font-size:.8rem;font-weight:550;white-space:nowrap}.topbar-tf-select.ant-select,.topbar-indicator-select.ant-select{font-size:.8rem}.topbar-indicator-select.ant-select{max-width:min(220px,28vw)}.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:var(--space-3)}.main-content{padding:var(--space-5);flex:1;min-width:0;max-width:100%;overflow-x:hidden;background:var(--surface)}.page-table-scroll{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.page-table-scroll .ant-table-thead>tr>th,.page-table-scroll .ant-table-tbody>tr>td{white-space:nowrap}.ant-card,.ant-card-body{min-width:0;max-width:100%}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-5);flex-wrap:wrap}.page-header .subtitle{color:var(--muted);margin:var(--space-1) 0 0}.health-dot{display:inline-flex;align-items:center;gap:var(--space-2);font-size:.8rem;color:var(--muted)}.health-dot .dot{width:9px;height:9px;border-radius:50%;background:var(--faint)}.health-dot.ok .dot{background:var(--success);box-shadow:0 0 8px var(--success)}.health-dot.warn .dot{background:var(--warning);box-shadow:0 0 8px var(--warning)}.health-dot.down .dot{background:var(--danger);box-shadow:0 0 8px var(--danger)}.grid{display:grid;gap:var(--space-4)}.grid.cols-auto{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.grid.cols-2{grid-template-columns:repeat(2,1fr)}.grid.cols-3{grid-template-columns:repeat(3,1fr)}.grid.cols-4{grid-template-columns:repeat(4,1fr)}.stack{display:flex;flex-direction:column;gap:var(--space-4)}.row{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}.spacer{flex:1}.muted{color:var(--muted)}.mono{font-family:var(--font-mono)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card-head{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-4) 0}.card-title{font-size:.95rem;font-weight:600;color:var(--text-strong)}.card-head .card-actions{margin-left:auto;display:flex;gap:var(--space-2)}.card-body{padding:var(--space-4)}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.stat-card .stat-label{color:var(--muted);font-size:.78rem;letter-spacing:.02em}.stat-card .stat-value{font-family:var(--font-mono);font-size:1.55rem;font-weight:620;color:var(--text-strong);font-variant-numeric:tabular-nums;line-height:1.1}.stat-card .stat-delta{font-size:.8rem;font-family:var(--font-mono);color:var(--muted)}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}table.data-table{width:100%;border-collapse:collapse;font-size:.86rem}.data-table thead th{position:sticky;top:0;z-index:1;background:var(--surface-2);color:var(--muted);font-weight:600;text-align:left;padding:var(--space-3) var(--space-4);white-space:nowrap;border-bottom:1px solid var(--border)}.data-table th.sortable{cursor:pointer;user-select:none}.data-table th.sortable:hover{color:var(--text)}.data-table th .sort-ind{color:var(--accent);margin-left:4px}.data-table tbody td{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);white-space:nowrap}.data-table tbody tr:nth-child(2n) td{background:color-mix(in srgb,var(--surface-2) 45%,transparent)}.data-table tbody tr:hover td{background:var(--accent-weak)}.data-table tbody tr:last-child td{border-bottom:none}.data-table td.num,.data-table th.num{text-align:right;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.data-table td.center,.data-table th.center{text-align:center}.data-table tr.clickable{cursor:pointer}.num-pos{color:var(--pos)}.num-neg{color:var(--neg)}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:999px;font-size:.74rem;font-weight:600;line-height:1.6;white-space:nowrap;border:1px solid transparent}.badge--neutral{background:var(--surface-3);color:var(--muted)}.badge--success{background:var(--success-weak);color:var(--success)}.badge--danger{background:var(--danger-weak);color:var(--danger)}.badge--warning{background:var(--warning-weak);color:var(--warning)}.badge--accent{background:var(--accent-weak);color:var(--accent)}.badge--muted{background:transparent;color:var(--muted);border-color:var(--border-strong)}.badge .badge-dot{width:6px;height:6px;border-radius:50%;background:currentColor}.badge.pulse .badge-dot{animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:0 var(--space-4);height:34px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text);font-family:inherit;font-size:.86rem;font-weight:550;cursor:pointer;transition:background .12s,border-color .12s,opacity .12s;white-space:nowrap}.btn:hover:not(:disabled){background:var(--surface-3);border-color:var(--border-strong)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn--primary:hover:not(:disabled){background:color-mix(in srgb,var(--accent) 88%,#000)}.btn--danger{background:transparent;border-color:var(--danger);color:var(--danger)}.btn--danger:hover:not(:disabled){background:var(--danger-weak)}.btn--ghost{background:transparent;border-color:transparent;color:var(--muted)}.btn--ghost:hover:not(:disabled){background:var(--surface-2);color:var(--text)}.btn--sm{height:28px;padding:0 var(--space-3);font-size:.8rem}.btn svg{width:15px;height:15px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface-2);color:var(--text);cursor:pointer;transition:background .12s}.icon-btn:hover{background:var(--surface-3)}.icon-btn svg{width:17px;height:17px}.field{display:flex;flex-direction:column;gap:5px;min-width:0}.field>label{font-size:.78rem;color:var(--muted);font-weight:500}.input,.select{height:34px;padding:0 var(--space-3);border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text);font-family:inherit;font-size:.86rem}.input:focus,.select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}.checkbox{display:inline-flex;align-items:center;gap:var(--space-2);cursor:pointer;user-select:none;font-size:.85rem}.checkbox input{accent-color:var(--accent);width:15px;height:15px}.switch{position:relative;display:inline-block;width:38px;height:22px;flex:none}.switch input{opacity:0;width:0;height:0}.switch .track{position:absolute;inset:0;background:var(--surface-3);border:1px solid var(--border-strong);border-radius:999px;transition:background .15s}.switch .track:before{content:"";position:absolute;width:16px;height:16px;left:2px;top:2px;border-radius:50%;background:var(--muted);transition:transform .15s,background .15s}.switch input:checked+.track{background:var(--accent-weak);border-color:var(--accent)}.switch input:checked+.track:before{transform:translate(16px);background:var(--accent)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:var(--space-4);overflow-x:auto}.tab{padding:var(--space-3) var(--space-4);color:var(--muted);font-weight:550;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;background:none;border-top:none;border-left:none;border-right:none;font-family:inherit;font-size:.9rem}.tab:hover{color:var(--text)}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.tabs.inset{padding-inline:var(--space-4)}.spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.center-load{display:flex;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-7);color:var(--muted)}.skeleton{background:linear-gradient(90deg,var(--surface-2) 25%,var(--surface-3) 37%,var(--surface-2) 63%);background-size:400% 100%;animation:shimmer 1.3s ease infinite;border-radius:var(--radius-sm)}@keyframes shimmer{0%{background-position:100% 0}to{background-position:0 0}}.empty-state,.error-state{display:flex;flex-direction:column;align-items:center;gap:var(--space-3);text-align:center;padding:var(--space-7) var(--space-4);color:var(--muted)}.empty-state .es-icon,.error-state .es-icon{font-size:2rem;opacity:.7}.empty-state .es-title,.error-state .es-title{color:var(--text-strong);font-weight:600;font-size:1rem}.error-state{color:var(--danger)}.error-state .es-detail{color:var(--muted);font-family:var(--font-mono);font-size:.8rem;max-width:640px;word-break:break-word}.toast-viewport{position:fixed;right:var(--space-5);bottom:var(--space-5);z-index:1000;display:flex;flex-direction:column;gap:var(--space-2);max-width:min(380px,calc(100vw - 32px))}.toast{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-radius:var(--radius);background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow);animation:toast-in .18s ease;border-left-width:3px}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}.toast--success{border-left-color:var(--success)}.toast--error{border-left-color:var(--danger)}.toast--info{border-left-color:var(--accent)}.toast .toast-msg{flex:1;font-size:.86rem;color:var(--text);word-break:break-word}.toast .toast-close{background:none;border:none;color:var(--faint);cursor:pointer;font-size:1rem;line-height:1}.md{color:var(--text);font-size:.9rem;line-height:1.6}.md h1,.md h2,.md h3{margin:1.2em 0 .5em}.md p{margin:.5em 0}.md ul,.md ol{padding-left:1.4em;margin:.5em 0}.md code{background:var(--surface-2);padding:1px 5px;border-radius:4px;font-size:.85em}.md pre{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-3);overflow-x:auto}.md pre code{background:none;padding:0}.md blockquote{margin:.7em 0;padding:.2em 1em;border-left:3px solid var(--border-strong);color:var(--muted)}.md table{border-collapse:collapse;width:100%;margin:.8em 0;font-size:.85rem;display:block;overflow-x:auto}.md th,.md td{border:1px solid var(--border);padding:6px 10px;text-align:left}.md th{background:var(--surface-2)}.md a{color:var(--accent)}.md strong{color:var(--text-strong)}.json-view{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-3) var(--space-4);overflow-x:auto;font-family:var(--font-mono);font-size:.8rem;line-height:1.55;max-height:520px;overflow-y:auto}.json-view .jk{color:var(--accent)}.json-view .js{color:var(--success)}.json-view .jn{color:var(--warning)}.json-view .jb{color:var(--info)}.json-view .jnull{color:var(--faint)}.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--space-4)}.gallery-item{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-2);cursor:zoom-in;box-shadow:var(--shadow-sm);transition:transform .12s}.gallery-item:hover{transform:translateY(-2px)}.gallery-item img{width:100%;height:auto;display:block;border-radius:var(--radius-sm)}.gallery-item .cap{padding:var(--space-2);font-size:.78rem;color:#444;font-family:var(--font-mono);word-break:break-all}.lightbox{position:fixed;inset:0;z-index:1100;background:#000000d1;display:flex;align-items:center;justify-content:center;padding:var(--space-5);cursor:zoom-out}.lightbox img{max-width:96vw;max-height:92vh;background:#fff;border-radius:var(--radius);padding:var(--space-3)}.chart-box{width:100%}.chart-head{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-2)}.chart-head .spacer{flex:1}.heatmap-wrap{overflow-x:auto}.heatmap{display:grid;gap:3px;font-size:.78rem}.heatmap-cell{min-width:58px;height:46px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:#10151f;font-weight:600;cursor:default;position:relative}.heatmap-cell.empty{background:var(--surface-2);color:var(--faint)}.heatmap-axis-x,.heatmap-axis-y{display:flex;align-items:center;justify-content:center;color:var(--muted);font-family:var(--font-mono);font-size:.75rem;padding:2px 4px}.heatmap-axis-y{justify-content:flex-end;white-space:nowrap}.heatmap-corner{color:var(--faint);font-size:.72rem;display:flex;align-items:flex-end;justify-content:flex-end;padding:4px}.modal-scrim{position:fixed;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:var(--space-5);background:#0000008c;backdrop-filter:blur(2px)}.modal{display:flex;flex-direction:column;width:min(600px,100%);max-height:88vh;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.modal-head{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border)}.modal-body{display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-4) var(--space-5);overflow-y:auto}.modal-foot{display:flex;justify-content:flex-end;gap:var(--space-3);padding:var(--space-3) var(--space-5);background:var(--surface-2);border-top:1px solid var(--border);border-radius:0 0 var(--radius-lg) var(--radius-lg)}.danger-banner{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--danger);border-radius:var(--radius-sm);background:var(--danger-weak);color:var(--danger);font-weight:650}.kv{display:grid;grid-template-columns:auto 1fr;gap:6px var(--space-4);margin:0;font-size:.85rem}.kv dt{color:var(--muted);white-space:nowrap}.kv dd{margin:0;color:var(--text-strong);font-family:var(--font-mono);overflow-wrap:anywhere}.check-row{display:flex;align-items:flex-start;gap:var(--space-2);padding:4px 0;font-size:.82rem}.check-row .check-mark{flex:none;font-weight:700}.check-row.ok .check-mark{color:var(--success)}.check-row.bad .check-mark{color:var(--danger)}@media (max-width: 1279px){.grid.cols-4,.grid.cols-3{grid-template-columns:repeat(2,1fr)}}.signal-backtest-table .signal-month-divider-row>td{border-top:1px solid var(--border)!important}
