:root{font-family:Inter,SF Pro Display,PingFang SC,Microsoft YaHei,Arial,sans-serif;color:#17202a;background:#f5f7fa;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{min-height:100vh;padding:14px;background:linear-gradient(180deg,#ffffffeb,#f5f7faf5),#f5f7fa}.topbar{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:0 0 12px;border-bottom:1px solid #dfe4eb}.app-nav{display:flex;align-items:center;gap:6px;min-height:46px;padding:8px 0 0;overflow-x:auto}.app-nav button{min-width:78px;height:34px;padding:0 14px;border:1px solid transparent;border-radius:6px 6px 0 0;background:transparent;color:#5d6876;font-size:13px;font-weight:720}.app-nav button:hover{background:#eef3f9;color:#26313f}.app-nav button.active{border-color:#dfe4eb;border-bottom-color:#fff;background:#fff;color:#2f6fea}.eyebrow{color:#6b7684;font-size:13px;line-height:1.3}h1,h2,h3,p{margin:0}h1{margin-top:4px;font-size:20px;font-weight:760;letter-spacing:0}.top-actions,.panel-actions,.chart-toggles,.stepper,.tab-tools{display:flex;align-items:center;gap:8px}.icon-button,.square-button,.ghost-small,.primary-small,.stepper button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:32px;border:1px solid #d8dee8;border-radius:6px;background:#fff;color:#26313f;font-size:13px;line-height:1;white-space:nowrap}.icon-button{padding:0 12px}.square-button{width:34px;padding:0}.ghost-small{min-height:30px;padding:0 10px}.primary-small{min-height:30px;padding:0 11px;border-color:#2c6be0;background:#2f6fea;color:#fff}.icon-button:hover,.square-button:hover,.ghost-small:hover,.stepper button:hover{background:#f4f7fb;border-color:#c6d1df}button:disabled{cursor:not-allowed;opacity:.55}.summary-strip{display:grid;grid-template-columns:1.6fr repeat(5,1fr);border:1px solid #dfe4eb;border-radius:8px;background:#fff;margin:10px 0;overflow:hidden}.page-grid{display:grid;gap:10px;margin-top:10px}.dashboard-grid{grid-template-columns:minmax(360px,1fr) minmax(360px,1fr)}.strategy-layout{grid-template-columns:minmax(560px,1.4fr) minmax(340px,.8fr)}.strategy-studio{grid-template-columns:minmax(360px,.36fr) minmax(720px,1fr)}.backtest-layout{grid-template-columns:minmax(360px,.42fr) minmax(620px,1fr)}.paper-layout{grid-template-columns:minmax(420px,1fr) minmax(520px,1.25fr)}.paper-layout .wide,.validation-layout .wide{grid-column:1 / -1}.page-panel{min-height:190px}.overview-grid{display:grid;grid-template-columns:repeat(4,minmax(160px,1fr))}.overview-grid .metric{border-bottom:0}.activity-list{display:grid;padding:6px 12px 12px}.activity-row{display:grid;grid-template-columns:74px minmax(100px,180px) 1fr;align-items:center;gap:10px;min-height:38px;border-bottom:1px solid #edf1f5;color:#34404e;font-size:12px}.activity-row span{color:#6f7a88}.activity-row small{overflow:hidden;color:#5d6876;text-overflow:ellipsis;white-space:nowrap}.data-table{width:100%;overflow:auto}.table-head,.table-row{display:grid;align-items:center;gap:10px;min-width:900px}.table-head{min-height:36px;padding:0 12px;border-bottom:1px solid #e8edf3;color:#667280;font-size:12px;font-weight:760}.table-row{min-height:42px;padding:0 12px;border-bottom:1px solid #edf1f5;color:#34404e;font-size:12px}.table-row strong,.table-row code,.table-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-row code{color:#405169;font-family:SFMono-Regular,Roboto Mono,Consolas,monospace}.strategy-table .table-head,.strategy-table .table-row{grid-template-columns:52px minmax(92px,1fr) 178px;min-width:0}.strategy-table .ghost-small,.strategy-table .primary-small{min-height:28px;padding:0 8px}.paper-strategy-table .table-head,.paper-strategy-table .table-row{grid-template-columns:70px minmax(150px,1fr) 86px 80px;min-width:520px}.paper-instance-table .table-head,.paper-instance-table .table-row{grid-template-columns:70px minmax(160px,1fr) 150px 120px 82px 136px;min-width:900px}.backtest-table .table-head,.backtest-table .table-row{grid-template-columns:150px minmax(150px,1fr) 88px 170px 110px 110px 90px}.position-table .table-head,.position-table .table-row{grid-template-columns:90px minmax(120px,1fr) 90px 80px 80px 110px 90px}.trade-table .table-head,.trade-table .table-row{grid-template-columns:110px 58px 90px minmax(110px,1fr) 72px 72px 104px minmax(160px,1fr)}.message-table .table-head,.message-table .table-row{grid-template-columns:110px 70px 82px minmax(140px,.8fr) minmax(260px,1.6fr)}.validation-check-table .table-head,.validation-check-table .table-row{grid-template-columns:64px minmax(120px,.8fr) 120px 120px 120px minmax(260px,1.6fr);min-width:980px}.validation-run-table .table-head,.validation-run-table .table-row{grid-template-columns:150px 72px 80px 72px 150px 120px;min-width:720px}.status-on,.status-off{font-weight:760}.status-on{color:#158554}.status-off{color:#7a8592}.row-actions{display:flex;align-items:center;gap:6px}.danger-action{color:#c83f3f}.form-grid{display:grid;gap:12px;padding:14px}.form-grid label{display:grid;gap:6px;color:#596575;font-size:12px;font-weight:700}.form-grid input,.form-grid textarea{width:100%;min-height:34px;padding:8px 10px;border:1px solid #dce3ec;border-radius:6px;outline:0;color:#17202a;background:#fff;font-size:13px;font-weight:400}.form-grid textarea{min-height:74px;resize:vertical}.form-grid .check-line{display:flex;grid-template-columns:none;align-items:center;gap:8px;color:#34404e}.form-grid .check-line input{width:auto;min-height:auto}.strategy-editor{min-height:640px}.strategy-meta-form{display:grid;grid-template-columns:minmax(150px,.7fr) minmax(240px,1fr);gap:10px;padding:12px;border-bottom:1px solid #e8edf3}.strategy-meta-form label,.strategy-bottom-form label{display:grid;gap:6px;color:#596575;font-size:12px;font-weight:700}.strategy-meta-form input,.strategy-bottom-form textarea{width:100%;min-height:34px;padding:8px 10px;border:1px solid #dce3ec;border-radius:6px;outline:0;color:#17202a;background:#fff;font-size:13px;font-weight:400}.code-editor-shell{display:grid;grid-template-rows:36px minmax(420px,1fr);border-bottom:1px solid #e8edf3;background:#fbfcfe}.code-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 12px;border-bottom:1px solid #e8edf3;background:#f3f6fa;color:#5d6876;font-size:12px}.code-toolbar span:first-child{color:#2f6fea;font-weight:780}.strategy-code-editor{width:100%;min-height:420px;padding:14px 16px;border:0;outline:0;resize:vertical;background:#fbfcfe;color:#17202a;font-family:SFMono-Regular,Roboto Mono,Consolas,monospace;font-size:13px;line-height:1.62;-moz-tab-size:4;tab-size:4}.strategy-bottom-form{display:grid;grid-template-columns:1fr auto;align-items:end;gap:12px;padding:12px}.strategy-bottom-form textarea{min-height:58px;resize:vertical}.strategy-bottom-form .check-line{display:flex;align-items:center;gap:8px;min-width:150px;color:#34404e}.run-form{grid-template-columns:repeat(2,minmax(180px,1fr))}.run-form label:first-child{grid-column:1 / -1}.run-form label:last-child{grid-column:1 / -1}.run-form select{width:100%;max-width:none}.paper-add-form{grid-template-columns:repeat(2,minmax(180px,1fr))}.paper-add-form select{width:100%;max-width:none}.radio-row{display:flex;grid-column:1 / -1;align-items:center;gap:18px;min-height:34px;color:#34404e;font-size:13px}.radio-row label{display:inline-flex;align-items:center;gap:7px;font-weight:600}.form-hint{grid-column:1 / -1;color:#6f7a88;font-size:12px}.metric{min-height:84px;padding:15px 18px;border-right:1px solid #e3e8ef}.metric:last-child{border-right:0}.metric span{display:block;color:#6f7a88;font-size:12px;line-height:1.2}.metric strong{display:block;margin-top:8px;font-size:23px;font-weight:780;letter-spacing:0}.metric small{display:block;margin-top:7px;color:#6f7a88;font-size:12px}.positive{color:#148554!important}.negative,.profit{color:#d13f3f!important}.loss{color:#148554!important}.warning-text{color:#b66a00!important;font-weight:760}.validation-groups{display:grid;gap:10px;padding:10px}.validation-group{border:1px solid #e3e8ef;border-radius:8px;overflow:hidden;background:#fff}.validation-group h3{min-height:36px;padding:10px 12px 0;color:#26313f;font-size:13px;font-weight:780}.workbench{display:grid;grid-template-columns:minmax(320px,30%) minmax(500px,1fr) minmax(320px,27%);gap:10px;align-items:stretch}.panel{border:1px solid #dfe4eb;border-radius:8px;background:#fff;overflow:hidden}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;padding:10px 12px;border-bottom:1px solid #e6ebf1}.panel-header h2{font-size:15px;font-weight:760}.control-row,.table-controls,.chart-toolbar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid #e8edf3}.searchbox{display:flex;align-items:center;gap:8px;flex:1;min-width:0;height:34px;padding:0 10px;border:1px solid #dce3ec;border-radius:6px;background:#fff;color:#7a8592}.searchbox.compact{max-width:260px}.searchbox input{width:100%;min-width:0;border:0;outline:0;color:#17202a;background:transparent;font-size:13px}select{height:34px;max-width:190px;padding:0 30px 0 10px;border:1px solid #dce3ec;border-radius:6px;background:#fff;color:#26313f;font-size:13px}.log-panel{min-height:650px}.raw-list{height:536px;overflow:auto}.log-row{display:grid;grid-template-columns:42px 104px 72px minmax(128px,1fr) 82px;align-items:center;width:100%;gap:8px;min-height:32px;padding:0 8px;border:0;border-bottom:1px solid #edf1f5;background:transparent;color:#25303d;text-align:left}.log-row:hover,.event-row:hover{background:#f7faff}.log-row.active,.event-row.active{background:#edf4ff;box-shadow:inset 3px 0 #2f6fea}.line-no{color:#7a8592;font-variant-numeric:tabular-nums;font-size:12px}.line-time,.line-message,.entity,.code-cell,.reason-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.line-time{color:#5d6876;font-size:12px;font-variant-numeric:tabular-nums}.line-message{font-size:12px}.entity{justify-self:end;max-width:82px;padding:2px 6px;border-radius:5px;background:#edf4ff;color:#2f6fea;font-size:11px;font-weight:700}.panel-foot{height:40px;padding:12px;border-top:1px solid #e8edf3;color:#6f7a88;font-size:12px}.center-column{display:grid;grid-template-rows:minmax(342px,auto) minmax(298px,auto);gap:10px}.event-table{height:238px;overflow:auto}.event-head,.event-row{display:grid;grid-template-columns:90px 76px 82px 58px minmax(120px,1fr) 64px;align-items:center;gap:8px}.event-head{height:32px;padding:0 12px;border-bottom:1px solid #e8edf3;color:#667280;font-size:12px;font-weight:700}.event-row{width:100%;min-height:34px;padding:0 12px;border:0;border-bottom:1px solid #edf1f5;background:transparent;color:#26313f;text-align:left;font-size:12px}.result{justify-self:start;font-weight:700}.result.buy{color:#148554}.result.sell{color:#d13f3f}.result.order{color:#33835f}.badge{display:inline-flex;align-items:center;justify-content:center;min-width:48px;height:22px;padding:0 8px;border-radius:5px;font-size:12px;font-weight:740;line-height:1}.badge.buy{background:#e6f6ee;color:#148554}.badge.sell{background:#fdecec;color:#c83f3f}.badge.order{background:#e8f6ef;color:#287a55}.badge.neutral{background:#eef2f6;color:#5d6876}.chart-panel{min-height:298px}.chart-toolbar{justify-content:flex-start;color:#6f7a88;font-size:12px}.legend{display:inline-flex;align-items:center;gap:6px}.legend:before{content:"";width:12px;height:2px;border-radius:2px;background:currentColor}.legend.ma5{color:#d89931}.legend.ma60{color:#3867d6}.legend.buy{color:#1f9d62}.legend.sell{color:#db4b4b}.chart-grid{padding:4px 12px 8px}.chart-toggles label,.tab-tools label{display:inline-flex;align-items:center;gap:5px;color:#5f6a78;font-size:12px;white-space:nowrap}.chart-tooltip{display:grid;gap:5px;padding:8px 10px;border:1px solid #d8dee8;border-radius:6px;background:#fff;color:#26313f;font-size:12px;box-shadow:0 8px 24px #1623341f}.diagnostic-panel{min-height:650px}.stepper button{min-height:28px;padding:0 8px;font-size:12px}.selected-meta{display:grid;grid-template-columns:70px 1fr 86px;align-items:center;gap:8px;padding:12px;border-bottom:1px solid #e8edf3;font-size:12px}.selected-meta strong{justify-self:end;padding:3px 7px;border-radius:5px;background:#edf4ff;color:#2f6fea}.diagnostic-group,.holding-state,.generated-reason{padding:12px;border-bottom:1px solid #e8edf3}.diagnostic-group h3,.holding-state h3,.generated-reason h3{margin-bottom:10px;color:#2b3542;font-size:13px;font-weight:760}.diagnostic-row{display:grid;grid-template-columns:minmax(110px,1fr) minmax(82px,1fr) 72px;align-items:center;gap:8px;min-height:31px;border-bottom:1px solid #edf1f5;color:#34404e;font-size:12px}.diagnostic-row:last-child{border-bottom:0}.diagnostic-row strong{overflow:hidden;color:#26313f;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.diagnostic-row em{display:inline-flex;align-items:center;justify-content:flex-end;gap:4px;font-style:normal;font-weight:740}.diagnostic-row em.ok{color:#158554}.diagnostic-row em.danger{color:#d13f3f}.state-table{display:grid;grid-template-columns:1fr 1fr;border:1px solid #e4eaf1;border-radius:6px;overflow:hidden;font-size:12px}.state-table span{min-height:31px;padding:8px 9px;border-right:1px solid #edf1f5;border-bottom:1px solid #edf1f5}.state-table span:nth-child(2n){border-right:0;font-weight:700}.state-table span:nth-last-child(-n+2){border-bottom:0}.generated-reason p{color:#485462;font-size:13px;line-height:1.6}.bottom-panel{margin-top:10px;min-height:238px}.tabs{display:flex;align-items:center;min-height:42px;border-bottom:1px solid #e6ebf1}.tabs button{height:42px;padding:0 18px;border:0;border-right:1px solid #edf1f5;background:transparent;color:#5d6876;font-size:13px;font-weight:650}.tabs button.active{color:#2f6fea;box-shadow:inset 0 -2px #2f6fea}.tab-tools{margin-left:auto;padding-right:14px}.raw-editor,.code-block{width:100%;height:196px;margin:0;padding:14px 16px;border:0;outline:0;resize:none;background:#fbfcfe;color:#1d2733;font-family:SFMono-Regular,Roboto Mono,Consolas,monospace;font-size:12px;line-height:1.55;overflow:auto}.code-block{white-space:pre-wrap}.holdings-grid,.warnings{display:grid;gap:0;height:196px;padding:10px 12px;overflow:auto;background:#fbfcfe}.holding-row,.warning-row{display:grid;grid-template-columns:110px repeat(4,minmax(100px,1fr));align-items:center;gap:10px;min-height:34px;border-bottom:1px solid #e8edf3;color:#34404e;font-size:12px}.warning-row{grid-template-columns:24px 80px 160px 1fr}.warning-row code{overflow:hidden;color:#6f7a88;text-overflow:ellipsis;white-space:nowrap}.empty-state{display:flex;align-items:center;justify-content:center;min-height:120px;color:#74808f;font-size:13px}@media(max-width:1180px){.summary-strip{grid-template-columns:repeat(3,1fr)}.metric{border-bottom:1px solid #e3e8ef}.workbench,.dashboard-grid,.strategy-layout,.strategy-studio,.backtest-layout,.paper-layout,.validation-layout{grid-template-columns:1fr}.paper-layout .wide,.validation-layout .wide{grid-column:auto}.overview-grid{grid-template-columns:repeat(2,1fr)}.raw-list,.event-table,.log-panel,.diagnostic-panel{height:auto;min-height:0;max-height:none}}@media(max-width:760px){.app-shell{padding:10px}.topbar,.top-actions,.panel-header,.control-row,.table-controls{align-items:stretch;flex-direction:column}.app-nav{padding-bottom:2px}.top-actions,.panel-actions{flex-wrap:wrap}.summary-strip,.overview-grid,.strategy-meta-form,.strategy-bottom-form{grid-template-columns:1fr}.activity-row{grid-template-columns:1fr;padding:8px 0}.metric{border-right:0}.log-row{grid-template-columns:36px 82px 64px 1fr}.entity{display:none}.event-head,.event-row{grid-template-columns:90px 76px 82px 1fr}.event-head span:nth-child(4),.event-head span:nth-child(6),.event-row span:nth-child(4),.event-row span:nth-child(6){display:none}.diagnostic-row,.holding-row,.warning-row{grid-template-columns:1fr;padding:8px 0}.tabs{overflow-x:auto}}.auth-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px;background:linear-gradient(180deg,#ffffffeb,#f5f7faf5),#f5f7fa}.auth-card{width:100%;max-width:380px;padding:0;overflow:hidden;box-shadow:0 12px 40px #1623341a}.auth-brand{padding:22px 24px 14px;border-bottom:1px solid #e8edf3}.auth-brand .eyebrow{color:#2f6fea;font-weight:760}.auth-brand h1{margin-top:4px;font-size:19px;font-weight:760}.auth-back{display:inline-flex;align-items:center;gap:4px;padding:4px 0;border:0;background:transparent;color:#2f6fea;font-size:13px;font-weight:700}.auth-back:hover{color:#2a63d8;text-decoration:underline}.auth-title{font-size:16px;font-weight:760;color:#26313f}.auth-links{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:4px}.auth-link{flex:1;padding:0;border:0;background:transparent;color:#2f6fea;font-size:13px;font-weight:700}.auth-links .auth-link:first-child{text-align:left}.auth-links .auth-link:last-child{text-align:right}.auth-link:hover{color:#2a63d8;text-decoration:underline}.auth-body{display:grid;gap:14px;padding:20px 24px 24px}.auth-field{display:grid;gap:6px}.auth-field>span{color:#596575;font-size:12px;font-weight:700}.auth-field input{width:100%;height:36px;padding:8px 11px;border:1px solid #dce3ec;border-radius:6px;outline:0;color:#17202a;background:#fff;font-size:13px}.auth-field input:focus{border-color:#2f6fea}.auth-code-row{display:flex;gap:8px}.auth-code-row input{flex:1}.auth-code-row .ghost-small{min-width:96px;height:36px}.auth-submit{width:100%;height:38px;margin-top:4px;border:0;border-radius:6px;background:#2f6fea;color:#fff;font-size:14px;font-weight:700}.auth-submit:hover{background:#2a63d8}.auth-submit:disabled{opacity:.55;cursor:not-allowed}.auth-error{padding:8px 10px;border-radius:6px;background:#fdecec;color:#c83f3f;font-size:12px}.auth-info{padding:8px 10px;border-radius:6px;background:#e6f6ee;color:#158554;font-size:12px}.user-chip{display:inline-flex;align-items:center;gap:8px;height:34px;padding:0 12px 0 6px;border:1px solid #d8dee8;border-radius:17px;background:#fff}.user-avatar{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:#2f6fea;color:#fff;font-size:12px;font-weight:760}.user-name{color:#34404e;font-size:13px;font-weight:700}@media(max-width:760px){.auth-card{max-width:100%}}
