:root{color:#333;font-synthesis:none;background:#fff;font-family:Arial,Microsoft YaHei,PingFang SC,sans-serif;font-size:13px}*{box-sizing:border-box}body{margin:0}a{color:#29649f;text-decoration:none}a:hover{color:#164b83;text-decoration:underline}button,input,select{font:inherit}button{cursor:pointer;white-space:nowrap}button:disabled{opacity:.46;cursor:default}button:focus-visible,a:focus-visible{outline-offset:3px;outline:2px solid #518bcb}input,select{color:#333;background:#fff;border:1px solid #d6d9de;border-radius:3px;min-width:0;height:34px;padding:7px 9px}input:focus,select:focus{border-color:#5386bf;outline:0;box-shadow:0 0 0 2px #5386bf18}input[type=checkbox]{accent-color:#337ab7;vertical-align:middle;width:14px;height:14px;margin:0}h1,h2,h3,p{margin-top:0}h1{margin-bottom:22px;font-size:23px;font-weight:400}h2{margin-bottom:20px;font-size:18px;font-weight:400}h3{font-size:15px;font-weight:400}button.primary,.small-primary{color:#fff;background:#337ab7;border:1px solid #2e6da4;border-radius:3px;min-height:34px;padding:7px 14px}button.primary:hover:not(:disabled),.small-primary:hover{background:#286090}.quiet{color:#444;background:#fff;border:1px solid #d1d4da;border-radius:3px;justify-content:center;align-items:center;min-height:32px;padding:6px 11px;text-decoration:none;display:inline-flex}.quiet:hover:not(:disabled){color:#333;background:#f2f4f6;text-decoration:none}.text-button,.count-link{color:#29649f;background:0 0;border:0;padding:0}.text-button:hover,.count-link:hover{text-decoration:underline}.tool-button{color:#555;background:0 0;border:0;min-width:28px;padding:0 3px;font-size:21px}.tool-button:hover{color:#286090}.danger-text{color:#bc4242;background:0 0;border:0}.full{width:100%}.muted{color:#888;line-height:1.7}.mono{overflow-wrap:anywhere;font-family:Consolas,Menlo,monospace}.positive{color:#c74943}.negative{color:#289365}.center{text-align:center}.empty{text-align:center;color:#999;padding:60px 20px;line-height:1.7}.global-nav{color:#dbe0ef;background:#25345f;align-items:center;gap:48px;height:52px;padding:0 32px;display:flex}.site-brand{color:#fff;letter-spacing:1px;flex-shrink:0;align-items:center;gap:10px;font-size:22px;display:flex}.site-brand:hover{color:#fff;text-decoration:none}.brand-mark{border:1px solid #a9badc;border-radius:5px;place-items:center;width:27px;height:27px;font:italic 700 22px Georgia,serif;display:inline-grid}.global-nav nav{gap:32px;height:100%;display:flex}.global-nav nav a{color:#cbd2e5;align-items:center;gap:6px;display:inline-flex;position:relative}.global-nav nav a.active,.global-nav nav a:hover{color:#fff;text-decoration:none}.global-nav nav a.active:after{content:"";background:#77a3d8;height:3px;position:absolute;bottom:0;left:0;right:0}.nav-count{background:#4c638c;border-radius:8px;padding:1px 5px;font-size:10px}.nav-user{color:#fff;align-items:center;gap:20px;margin-left:auto;display:flex}.nav-user button{color:#bfc9e3;background:0 0;border:0;padding:0}.notice{z-index:100;border:1px solid;border-radius:4px;max-width:min(680px,90vw);padding:12px 16px;line-height:1.7;position:fixed;top:64px;right:24px;box-shadow:0 3px 12px #0001}.notice.error{color:#9e332c;background:#fff2f1;border-color:#eab4b0}.notice.success{color:#33714a;background:#eff8f1;border-color:#bedcc5}.notice button{color:inherit;background:0 0;border:0;margin-left:20px;font-size:18px}.strategy-header{background:#fff;border-bottom:1px solid #ddd;justify-content:space-between;align-items:center;gap:24px;height:58px;padding:0 24px;display:flex}.strategy-title{flex:1;align-items:center;gap:15px;min-width:0;display:flex}.strategy-title>a{color:#555;font-size:17px}.strategy-title input{background:0 0;border-color:#0000;width:100%;max-width:520px;padding:5px 4px;font-size:18px}.strategy-title input:hover{border-color:#ddd}.strategy-title h1{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:18px;overflow:hidden}.strategy-header nav{flex-shrink:0;align-self:stretch;gap:26px;display:flex}.strategy-header nav button{color:#444;background:0 0;border:0;border-bottom:3px solid #0000;padding:3px 2px 0}.strategy-header nav button.active{color:#337ab7;border-bottom-color:#337ab7}.file-page{max-width:1290px;margin:54px auto 80px;padding:0 24px}.file-heading{justify-content:space-between;align-items:center;gap:24px;margin-bottom:28px;display:flex}.file-heading h1{margin:0}.file-search{position:relative}.file-search input{width:245px;padding-right:30px}.file-search>span{color:#888;font-size:22px;position:absolute;top:4px;right:9px}.file-actions{align-items:center;gap:12px;margin-bottom:24px;display:flex}.file-capability{color:#999;margin-left:auto;font-size:12px}.file-location{color:#777;border-bottom:1px solid #ddd;padding:12px 0}.file-location span{color:#aaa}.table-scroll{width:100%;overflow-x:auto}table{border-collapse:collapse;text-align:left;white-space:nowrap;width:100%;font-size:12px}th{color:#666;background:#f9f9fa;border-bottom:1px solid #ddd;padding:13px 14px;font-weight:400}td{border-bottom:1px solid #ebebeb;padding:15px 14px;line-height:1.7}tbody tr:hover{background:#f7faff}.strategy-table{font-size:13px}.strategy-table th{background:#f5f6f8;padding-top:15px;padding-bottom:15px}.strategy-table td{height:62px}.strategy-table .check-cell{width:35px;padding-left:12px;padding-right:6px}.strategy-table .file-name{width:40%;min-width:200px}.file-name a{align-items:center;gap:12px;width:fit-content;display:flex}.file-icon{stroke:#4888c1;fill:none;stroke-width:1.4px;flex-shrink:0;width:20px;height:24px}.code-label{color:#fff;background:#3582bd;border-radius:2px;padding:2px 7px;font-size:11px}.strategy-table tr.checked{background:#f0f6fd}.row-actions{text-align:right}.row-actions>*{margin-left:14px}.file-pagination,.pagination{color:#888;justify-content:flex-end;align-items:center;gap:12px;padding-top:22px;display:flex}.file-pagination select{height:30px;font-size:12px}.editor-workspace{grid-template-columns:46.5% 53.5%;height:calc(100dvh - 110px);min-height:530px;display:grid}.code-pane{border-right:1px solid #bcc1c9;flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.code-toolbar{background:#f3f4f6;border-bottom:1px solid #ddd;flex-shrink:0;align-items:center;gap:8px;height:46px;padding:7px 12px;display:flex}.code-toolbar .quiet{min-height:29px;padding:4px 11px;font-size:12px}.code-toolbar .save-button{min-width:62px}.toolbar-spacer{flex:1}.shortcut-help{color:#657087;background:#f2f6fb;padding:10px;font-size:11px;line-height:1.8}.python-editor{flex:1;height:100%;min-height:0;overflow:hidden}.python-editor .cm-editor{height:100%}.preview-pane{flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.run-toolbar{background:#f3f4f6;border-bottom:1px solid #ddd;flex-shrink:0;justify-content:space-between;align-items:center;gap:6px;min-height:46px;padding:8px 10px;font-size:12px;display:flex}.run-toolbar>input[type=date]{width:117px;height:29px;padding:4px 3px;font-size:11px}.run-toolbar select{height:29px;padding:3px 2px;font-size:11px}.run-toolbar .primary{min-height:29px;padding:5px 9px;font-size:12px}.run-toolbar .tool-button{min-width:23px;font-size:18px}.cash-input{align-items:center;gap:1px;display:flex}.cash-input input{width:85px;height:29px;padding:4px 3px;font-size:11px}.run-settings{color:#777;background:#f9fbfe;border-bottom:1px solid #ddd;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 12px;font-size:11px;display:flex}.run-settings label{align-items:center;gap:10px;display:flex}.run-settings select{height:30px;font-size:11px}.preview-metrics{grid-template-columns:repeat(6,1fr);gap:4px;padding:17px 14px 14px;display:grid}.preview-metrics>div{flex-direction:column;gap:9px;display:flex}.preview-metrics span{color:#777;font-size:11px}.preview-metrics b{font-size:15px;font-weight:400}.preview-state{color:#777;flex-wrap:wrap;align-items:center;padding:0 14px 10px;font-size:11px;line-height:1.7;display:flex}.preview-state .text-button{margin-left:auto;font-size:11px}.preview-chart{flex:1;min-height:170px}.result-chart{width:100%;height:360px}.preview-chart .result-chart{height:100%}.preview-placeholder{text-align:center;color:#aaa;place-items:center;height:100%;padding:20px;font-size:12px;display:grid}.run-progress{background:#dfe7ef;height:3px;overflow:hidden}.run-progress>span{background:#5089bc;height:100%;transition:width .3s;display:block}.editor-console{border-top:1px solid #d6d6d6;flex-direction:column;flex-shrink:0;height:31%;min-height:145px;display:flex}.console-tabs{background:#f4f5f7;border-bottom:1px solid #d9d9d9;flex-shrink:0;align-items:stretch;height:36px;display:flex}.console-tabs button{color:#777;background:0 0;border:0;border-right:1px solid #ddd;padding:0 22px;font-size:12px}.console-tabs button.active{color:#286090;background:#fff;border-top:2px solid #337ab7}.console-tabs>span{color:#999;white-space:nowrap;margin-left:auto;padding:11px 14px 0 6px;font-size:10px}.error-count{color:#fff;background:#c64f45;border-radius:8px;margin-left:4px;padding:1px 5px}.log-content{color:#d5d5d5;white-space:pre-wrap;overflow-wrap:anywhere;background:#050505;flex:1;min-height:0;margin:0;padding:12px 14px;font:11px/1.7 Consolas,Menlo,monospace;overflow:auto}.console-check{padding:12px;overflow:auto}.compatibility{color:#666;font-size:12px;line-height:1.6}.compatibility.blocked>b{color:#ae4139}.compatibility.review>b{color:#376c9a}.compatibility p{margin:8px 0}.compatibility ul{padding:0;list-style:none}.compatibility li{border-top:1px solid #eee;flex-wrap:wrap;align-items:baseline;gap:8px;padding:8px 0;display:flex}.compatibility li>span:last-child{flex:250px}.badge{color:#777;background:#f0f0f0;border-radius:2px;padding:2px 6px;font-size:10px;display:inline-block}.badge.ready{color:#35714c;background:#eaf5ee}.badge.failed{color:#a63a30;background:#fcedea}.badge.queued{color:#8b6b25;background:#fcf5df}.history-page{max-width:1550px}.history-tools{align-items:center;gap:12px;margin-bottom:20px;display:flex}.history-mode{margin-right:auto;display:flex}.history-mode button{color:#666;background:#fff;border:1px solid #ddd;padding:8px 14px}.history-mode button+button{border-left:0}.history-mode button.active{color:#fff;background:#337ab7;border-color:#337ab7}.history-tools select{max-width:280px}.history-table th,.history-table td{padding-left:10px;padding-right:10px}.state-dot{vertical-align:middle;background:#aaa;border-radius:50%;flex-shrink:0;width:6px;height:6px;margin-right:7px;display:inline-block}.state-dot.succeeded{background:#479b6e}.state-dot.running{background:#4188bc}.state-dot.queued,.state-dot.cancel_requested{background:#c6a14d}.state-dot.failed{background:#c46a64}.detail-page{background:#eaedf3;min-height:100dvh}.backtest-settings{background:#fff;border-bottom:1px solid #d8dce4;flex-direction:column;justify-content:center;gap:10px;min-height:78px;padding:18px 28px;font-size:12px;display:flex;position:relative}.settings-state{color:#888;align-items:center;gap:4px;display:flex}.settings-state .state-dot{margin-left:3px;margin-right:1px}.python-label{color:#aaa;padding-left:16px}.settings-actions{gap:12px;display:flex;position:absolute;top:22px;right:28px}.export-control{position:relative}.export-menu{z-index:20;background:#fff;border:1px solid #ddd;min-width:140px;padding:5px 0;position:absolute;top:37px;right:0;box-shadow:0 4px 12px #0002}.export-menu button{text-align:left;color:#555;background:0 0;border:0;width:100%;padding:9px 18px;display:block}.export-menu button:hover{background:#f1f5fb}.detail-progress{color:#577396;background:#f6f9fd;align-items:center;gap:10px;padding:14px 28px 17px;font-size:12px;display:flex;position:relative}.detail-progress>span:nth-last-child(2){margin-left:auto}.detail-progress .run-progress{width:100%;position:absolute;bottom:0;left:0}.spinner{border:2px solid #d0ddeb;border-top-color:#337ab7;border-radius:50%;width:12px;height:12px;animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.backtest-layout{grid-template-columns:195px minmax(0,1fr);align-items:start;gap:20px;max-width:1650px;margin:0 auto;padding:24px;display:grid}.report-nav{background:#f8f9fb;border:1px solid #d9dde5;padding:10px 0}.report-nav button{text-align:left;color:#555;background:0 0;border:0;align-items:center;gap:12px;width:100%;padding:16px 17px;font-size:13px;display:flex}.report-nav button>span{color:#77839a;text-align:center;width:20px;font-size:16px}.report-nav button.active{color:#fff;background:#32649d}.report-nav button.active>span{color:#fff}.report-nav button:hover:not(:disabled):not(.active){background:#e9eef6}.report-info{color:#9ca4b2;border-top:1px solid #e3e5eb;margin-top:10px;padding:20px 20px 0;font-size:11px}.report-info p{margin:0 0 10px}.report-content{background:#fff;border:1px solid #d9dde5;min-width:0;min-height:620px}.report-heading{border-bottom:1px solid #e6e6e6;justify-content:space-between;align-items:center;height:54px;margin:0;padding:0 24px;font-size:18px;font-weight:400;display:flex}.report-heading h2{margin:0;font-size:18px}.report-heading .text-button{font-size:12px}.report-metrics{grid-template-columns:repeat(8,minmax(0,1fr));row-gap:24px;padding:24px;display:grid}.report-metrics>div{flex-direction:column;gap:11px;min-width:0;display:flex}.report-metrics small{color:#888;font-size:11px}.report-metrics strong{font-size:17px;font-weight:400}.report-metrics .drawdown-period{grid-column:span 3}.report-metrics .drawdown-period strong{font-size:14px}.chart-tools{color:#888;align-items:center;gap:5px;padding:5px 24px 16px;font-size:11px;display:flex}.chart-tools button{color:#777;background:#fff;border:1px solid #ddd;border-radius:2px;padding:4px 7px}.chart-tools button.active{color:#337ab7;background:#eaf0f7;border-color:#9eb8d2}.chart-asof{margin-left:auto}.report-section>.result-chart{width:calc(100% - 24px);margin:0 auto}.metric-note{color:#8c98a7;margin:5px 24px 20px;font-size:11px}.custom-overview{border-top:1px solid #e5e5e5;margin:22px 24px;padding-top:20px}.custom-overview h3{margin-bottom:15px}.result-chart.records{height:250px}.calculation-details{color:#999;border-top:1px solid #e6e6e6;margin:24px;padding:16px;font-size:11px;line-height:1.7}.calculation-details summary{cursor:pointer;color:#888}.calculation-details dl{grid-template-columns:80px 1fr;gap:8px;margin-top:20px;display:grid}.calculation-details dd{margin:0}.calculation-details p{margin-bottom:0}.execution-error{color:#a4483d;background:#fff3f1;padding:16px 24px;font-size:12px}.execution-error pre{white-space:pre-wrap;overflow-wrap:anywhere;margin-bottom:0;line-height:1.6}.subtabs{color:#888;border-bottom:1px solid #e3e3e3;gap:30px;padding:15px 24px 0;font-size:12px;display:flex}.subtabs>span{padding:0 4px 12px}.subtabs>span.active{color:#337ab7;border-bottom:2px solid #337ab7}.report-section .pagination{padding:20px 24px}.report-log{color:#555;white-space:pre-wrap;overflow-wrap:anywhere;max-height:65dvh;margin:20px 24px;font:12px/1.8 Consolas,Menlo,monospace;overflow:auto}.source-caption{color:#999;margin:16px 24px;font-size:11px}.historical-code{height:65dvh;min-height:400px}.holdings-controls{color:#888;align-items:center;gap:30px;padding:18px 24px;font-size:12px;display:flex}.holdings-controls label{align-items:center;gap:10px;display:flex}.account-table{margin-bottom:24px}.utility-page{max-width:1200px;margin:50px auto;padding:0 24px}.eyebrow{color:#7b8aa0;letter-spacing:1px;margin-bottom:8px;font-size:11px}.page-heading h1{margin-bottom:12px}.panel{background:#fff;border:1px solid #dce0e6;margin:24px 0;padding:24px}.panel-heading{justify-content:space-between;align-items:center;gap:24px;display:flex}.panel-heading h2{margin-bottom:0}.data-stats{grid-template-columns:2fr 1fr 1fr 1fr;gap:20px;padding:25px 0;display:grid}.data-stats>div{flex-direction:column;gap:10px;display:flex}.data-stats small{color:#888}.data-stats b{font-weight:400}.fingerprint{color:#999;padding-top:10px;font-size:11px}.settings-panel .inline-form{margin:22px 0}.inline-form{flex-wrap:wrap;align-items:flex-end;gap:18px;display:flex}.inline-form label,.login-card label{flex-direction:column;gap:9px;display:flex}.inline-form input{min-width:230px}.token-result{background:#f7faff;border:1px solid #c6d7eb;margin-bottom:20px;padding:20px;line-height:1.7}.token-result>code{overflow-wrap:anywhere;margin:16px 0;display:block}.token-result button{margin-right:12px}.token-result p{color:#888;margin:15px 0 0;font-size:11px}footer{text-align:center;color:#aaa;border-top:1px solid #eee;padding:30px;font-size:11px}.login-page{background:#f5f6f8;min-height:100dvh}.login-card{background:#fff;border:1px solid #e1e4e9;border-radius:4px;width:min(420px,90vw);margin:110px auto;padding:36px}.login-card h1{margin-bottom:30px;font-size:21px}.login-card label{margin-bottom:22px}.login-card input{height:40px}.login-card .muted{margin:22px 0 0;font-size:11px}.form-error{color:#a84238;line-height:1.7}@media (width<=1250px){.run-toolbar{flex-wrap:wrap;justify-content:flex-start;gap:4px;padding:8px 6px}.run-toolbar>.primary{margin-left:auto}.run-toolbar>input[type=date]{width:112px}.cash-input input{width:78px}.global-nav{gap:30px;padding:0 24px}.global-nav nav{gap:22px}.report-metrics{grid-template-columns:repeat(4,minmax(0,1fr))}.report-metrics .drawdown-period{grid-column:span 2}}@media (width<=850px){.global-nav{gap:24px;padding:0 16px}.global-nav nav{gap:18px;font-size:11px}.site-brand{gap:7px;font-size:18px}.nav-user{gap:10px;font-size:11px}.strategy-header{gap:15px;padding:0 14px}.strategy-header nav{gap:14px;font-size:11px}.strategy-title input{font-size:15px}.editor-workspace{grid-template-columns:43% 57%}.code-toolbar{flex-wrap:wrap;gap:5px;height:auto;padding:7px}.code-toolbar .quiet{padding:4px 7px}.code-toolbar .toolbar-spacer{display:none}.preview-metrics{padding:16px 9px}.preview-metrics b{font-size:13px}.console-tabs button{padding:0 12px}.console-tabs>span{display:none}.backtest-layout{grid-template-columns:145px minmax(0,1fr);gap:12px;padding:16px}.report-nav button{gap:7px;padding:14px 10px;font-size:12px}.backtest-settings{padding:16px 180px 16px 16px}.settings-actions{right:16px}.report-metrics{padding:20px 16px}.report-metrics strong{font-size:15px}}@media (width<=600px){.global-nav{flex-wrap:wrap;gap:18px;height:auto;min-height:52px;padding:12px 16px 0}.global-nav nav{order:3;gap:24px;width:100%;height:40px}.site-brand{font-size:19px}.nav-user{margin-left:auto}.strategy-header{flex-direction:column;align-items:stretch;gap:12px;height:auto;padding:12px 14px 0}.strategy-header nav{justify-content:space-between;gap:10px;height:36px}.file-page{margin-top:30px;padding:0 16px}.file-heading{gap:16px}.file-heading h1{font-size:21px}.file-search input{width:155px}.file-capability{display:none}.file-pagination{flex-wrap:wrap}.editor-workspace{flex-direction:column;height:auto;min-height:0;display:flex}.code-pane{border-right:0;flex-shrink:0;height:480px}.preview-pane{min-height:590px;overflow:visible}.preview-chart{min-height:260px}.preview-chart .result-chart{height:280px}.editor-console{height:220px}.history-tools{flex-wrap:wrap}.history-mode{width:100%}.history-tools select{max-width:calc(100% - 65px)}.backtest-layout{padding:12px;display:block}.report-nav{flex-wrap:wrap;margin-bottom:12px;padding:5px;display:flex}.report-nav button{width:auto;padding:9px;font-size:11px}.report-info{display:none}.backtest-settings{gap:12px;padding:16px}.settings-actions{position:static}.report-metrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:22px 10px}.report-metrics .drawdown-period{grid-column:span 2}.chart-tools{flex-wrap:wrap;padding:8px 16px}.chart-asof{width:100%;margin-top:6px;margin-left:0}.holdings-controls{gap:20px;padding:16px}.panel{padding:20px 16px}.data-stats{grid-template-columns:repeat(2,1fr)}.inline-form{flex-direction:column;align-items:stretch}.inline-form input{width:100%;min-width:0}.panel-heading{flex-wrap:wrap}.result-chart{height:320px}}
