Restructure into modules/ with single-process CTP and config/ layout.
Move business code under modules/, env template to config/, PM2 single qihuo process, and _legacy shims for old imports. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
.ai-page .card-body{display:flex;flex-direction:column;gap:0;min-height:0}
|
||||
.ai-usage{margin-bottom:.85rem;font-size:.84rem;color:var(--text-muted)}
|
||||
.ai-usage summary{cursor:pointer;color:var(--accent);font-weight:600;margin-bottom:.35rem}
|
||||
.ai-usage-body ul{margin:.25rem 0 0 1.1rem;padding:0;line-height:1.55}
|
||||
.ai-usage-body a{color:var(--accent)}
|
||||
.ai-section-label{font-size:.9rem;margin:0 0 .65rem;color:var(--text-title);font-weight:600}
|
||||
.ai-msg-list{max-height:min(70vh,720px);overflow:auto;padding-right:.25rem}
|
||||
.ai-msg{border:1px solid var(--border);border-radius:10px;padding:.85rem 1rem;margin-bottom:.75rem;background:rgba(255,255,255,.02)}
|
||||
.ai-msg-head{display:flex;justify-content:space-between;gap:.5rem;font-size:.75rem;color:var(--text-muted);margin-bottom:.35rem}
|
||||
.ai-msg-kind{text-transform:uppercase;letter-spacing:.04em;color:var(--accent)}
|
||||
.ai-msg-title{font-size:.95rem;margin:0 0 .5rem;color:var(--text-title)}
|
||||
.ai-msg-body{margin:0;white-space:pre-wrap;font-family:inherit;font-size:.84rem;line-height:1.55;color:var(--text-main)}
|
||||
@@ -0,0 +1,491 @@
|
||||
/* Copyright (c) 2025-2026 马建军. All rights reserved. */
|
||||
html{background:#050508;color-scheme:dark}
|
||||
html[data-theme="light"]{background:#e8eef8;color-scheme:light}
|
||||
html:not([data-theme="light"]){
|
||||
--bg-page:#050508;
|
||||
--bg-grid:rgba(76,194,255,.045);
|
||||
--border-header:rgba(76,194,255,.12);
|
||||
--header-bg:transparent;
|
||||
--text-primary:#e8eaf6;
|
||||
--text-title:#ffffff;
|
||||
--text-muted:#7a82a0;
|
||||
--text-label:#a8b4ff;
|
||||
--accent:#4cc2ff;
|
||||
--accent-2:#9d6bff;
|
||||
--ambient-glow:rgba(76,194,255,.14);
|
||||
--ambient-glow-2:rgba(123,66,255,.1);
|
||||
--scanline:rgba(76,194,255,.03);
|
||||
--title-glow:rgba(76,194,255,.35);
|
||||
--card-bg:rgba(10,12,22,.82);
|
||||
--card-border:rgba(76,194,255,.22);
|
||||
--card-border-hover:rgba(76,194,255,.45);
|
||||
--card-glow:rgba(76,194,255,.12);
|
||||
--card-inner:rgba(16,20,36,.9);
|
||||
--input-bg:rgba(12,14,26,.95);
|
||||
--input-border:rgba(76,194,255,.18);
|
||||
--nav-bg:rgba(14,16,28,.9);
|
||||
--nav-border:rgba(76,194,255,.15);
|
||||
--nav-hover:rgba(30,40,68,.85);
|
||||
--nav-hover-glow:rgba(76,194,255,.15);
|
||||
--nav-active:#2563eb;
|
||||
--nav-active-border:transparent;
|
||||
--nav-active-glow:rgba(76,194,255,.45);
|
||||
--focus-ring:rgba(76,194,255,.25);
|
||||
--focus-glow:rgba(76,194,255,.2);
|
||||
--btn-glow:rgba(76,194,255,.35);
|
||||
--btn-glow-strong:rgba(123,66,255,.4);
|
||||
--row-hover:rgba(76,194,255,.06);
|
||||
--list-item-bg:rgba(14,18,32,.8);
|
||||
--table-border:rgba(76,194,255,.1);
|
||||
--profit:#4cd97f;
|
||||
--profit-bg:rgba(76,217,127,.12);
|
||||
--loss:#ff6b7a;
|
||||
--loss-bg:rgba(255,107,122,.12);
|
||||
--dir-bg:rgba(30,45,80,.6);
|
||||
--planned-bg:rgba(234,193,71,.12);
|
||||
--planned-text:#eac147;
|
||||
--expired-bg:rgba(40,44,60,.8);
|
||||
--expired-text:#8a8a9e;
|
||||
--flash-bg:rgba(30,45,80,.7);
|
||||
--flash-text:#4cc2ff;
|
||||
--modal-mask:rgba(2,4,12,.82);
|
||||
--danger:#ff6b7a;
|
||||
--shadow-card:0 8px 32px rgba(0,0,0,.45),0 0 1px rgba(76,194,255,.3),inset 0 1px 0 rgba(255,255,255,.04);
|
||||
--shadow-card-hover:0 16px 48px rgba(0,0,0,.5),0 0 24px var(--card-glow);
|
||||
--calc-bg:rgba(20,24,42,.9);
|
||||
--toggle-bg:rgba(14,16,28,.9);
|
||||
--toggle-border:rgba(76,194,255,.2);
|
||||
}
|
||||
[data-theme="light"]{
|
||||
--bg-page:#e8eef8;
|
||||
--bg-grid:rgba(37,99,235,.07);
|
||||
--border-header:rgba(37,99,235,.12);
|
||||
--header-bg:transparent;
|
||||
--text-primary:#1a2233;
|
||||
--text-title:#0a1628;
|
||||
--text-muted:#5c6578;
|
||||
--text-label:#1d4ed8;
|
||||
--accent:#2563eb;
|
||||
--accent-2:#7c3aed;
|
||||
--ambient-glow:rgba(37,99,235,.12);
|
||||
--ambient-glow-2:rgba(124,58,237,.08);
|
||||
--scanline:rgba(37,99,235,.04);
|
||||
--title-glow:rgba(37,99,235,.2);
|
||||
--card-bg:rgba(255,255,255,.92);
|
||||
--card-border:rgba(37,99,235,.2);
|
||||
--card-border-hover:rgba(37,99,235,.4);
|
||||
--card-glow:rgba(37,99,235,.1);
|
||||
--card-inner:#f4f7fc;
|
||||
--input-bg:#ffffff;
|
||||
--input-border:#b8c5d6;
|
||||
--nav-bg:rgba(255,255,255,.95);
|
||||
--nav-border:rgba(37,99,235,.18);
|
||||
--nav-hover:#eef4ff;
|
||||
--nav-hover-glow:rgba(37,99,235,.12);
|
||||
--nav-active:#2563eb;
|
||||
--nav-active-border:transparent;
|
||||
--nav-active-glow:rgba(37,99,235,.35);
|
||||
--focus-ring:rgba(37,99,235,.2);
|
||||
--focus-glow:rgba(37,99,235,.15);
|
||||
--btn-glow:rgba(37,99,235,.25);
|
||||
--btn-glow-strong:rgba(37,99,235,.35);
|
||||
--row-hover:rgba(37,99,235,.05);
|
||||
--list-item-bg:#f1f5f9;
|
||||
--table-border:#e2e8f0;
|
||||
--profit:#15803d;
|
||||
--profit-bg:#dcfce7;
|
||||
--loss:#dc2626;
|
||||
--loss-bg:#fee2e2;
|
||||
--dir-bg:#dbeafe;
|
||||
--planned-bg:#fef9c3;
|
||||
--planned-text:#a16207;
|
||||
--expired-bg:#f1f5f9;
|
||||
--expired-text:#64748b;
|
||||
--flash-bg:#dbeafe;
|
||||
--flash-text:#1d4ed8;
|
||||
--modal-mask:rgba(15,23,42,.45);
|
||||
--danger:#dc2626;
|
||||
--shadow-card:0 8px 28px rgba(15,23,42,.08),0 0 1px rgba(37,99,235,.15),inset 0 1px 0 rgba(255,255,255,.95);
|
||||
--shadow-card-hover:0 16px 40px rgba(15,23,42,.12),0 0 20px var(--card-glow);
|
||||
--calc-bg:#eef2ff;
|
||||
--toggle-bg:#ffffff;
|
||||
--toggle-border:#c5d0dc;
|
||||
}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{
|
||||
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",sans-serif;
|
||||
background:var(--bg-page);
|
||||
color:var(--text-primary);
|
||||
min-height:100vh;
|
||||
}
|
||||
.page-wrap{max-width:1800px;margin:0 auto;min-height:100vh}
|
||||
.site-header{text-align:center;padding:1.5rem 1rem 1.25rem;border-bottom:1px solid var(--border-header);position:relative}
|
||||
.site-title{font-size:1.75rem;font-weight:700;color:var(--text-title);margin-bottom:1.65rem;line-height:1.3}
|
||||
.header-tools{position:absolute;top:1rem;left:1.5rem;display:flex;gap:.5rem;align-items:center;z-index:20}
|
||||
.theme-switch{
|
||||
display:inline-flex;align-items:center;
|
||||
border-radius:999px;border:1px solid var(--toggle-border);
|
||||
background:var(--toggle-bg);padding:3px;gap:2px;
|
||||
}
|
||||
.theme-switch-btn{
|
||||
padding:.38rem .75rem;border:none;border-radius:999px;
|
||||
background:transparent;color:var(--text-muted);
|
||||
font-size:.75rem;cursor:pointer;transition:.2s;
|
||||
white-space:nowrap;width:auto;flex-shrink:0;
|
||||
}
|
||||
.theme-switch-btn:hover{color:var(--text-primary)}
|
||||
.theme-switch-btn.active{
|
||||
background:linear-gradient(135deg,var(--accent),var(--accent-2));
|
||||
color:#fff;box-shadow:0 0 12px var(--btn-glow);
|
||||
}
|
||||
.site-nav{display:flex;justify-content:center;gap:.45rem;flex-wrap:wrap}
|
||||
.site-nav a{
|
||||
padding:.55rem 1.15rem;border-radius:8px;
|
||||
border:1px solid transparent;
|
||||
background:transparent;
|
||||
color:var(--text-primary);
|
||||
text-decoration:none;font-size:.88rem;
|
||||
transition:.2s;white-space:nowrap;
|
||||
}
|
||||
.site-nav a:hover{background:var(--nav-hover);border-color:var(--nav-border);color:var(--text-title)}
|
||||
.site-nav a.active{background:var(--nav-active);border-color:var(--nav-active-border);color:#fff}
|
||||
.user-bar{position:absolute;top:1rem;right:1.5rem;font-size:.8rem;color:var(--text-muted);white-space:nowrap}
|
||||
.user-bar a{color:var(--danger);text-decoration:none;margin-left:.5rem}
|
||||
.main{padding:1.5rem}
|
||||
.text-muted{color:var(--text-muted)}
|
||||
.text-label{color:var(--text-label)}
|
||||
.text-accent{color:var(--accent)}
|
||||
.text-profit{color:var(--profit)}
|
||||
.text-loss{color:var(--loss)}
|
||||
.section-label{font-size:.9rem;color:var(--text-label);margin:.75rem 0 .5rem}
|
||||
.empty-hint{color:var(--text-muted);padding:.75rem;font-size:.85rem}
|
||||
.flash{padding:1rem;background:var(--flash-bg);color:var(--flash-text);border-radius:10px;margin-bottom:1.5rem;text-align:center;border:1px solid var(--card-border)}
|
||||
.card{
|
||||
background:var(--card-bg);
|
||||
border-radius:16px;padding:1.5rem;
|
||||
border:1px solid var(--card-border);
|
||||
margin-bottom:1.5rem;
|
||||
position:relative;overflow:hidden;
|
||||
box-shadow:var(--shadow-card);
|
||||
backdrop-filter:blur(10px);
|
||||
transition:background .25s,border-color .25s,box-shadow .25s;
|
||||
}
|
||||
.card::before{
|
||||
content:"";position:absolute;inset:0;
|
||||
background:linear-gradient(135deg,var(--card-glow) 0%,transparent 55%);
|
||||
pointer-events:none;
|
||||
}
|
||||
.card::after{
|
||||
content:"";position:absolute;top:0;left:12%;right:12%;height:1px;
|
||||
background:linear-gradient(90deg,transparent,var(--accent),var(--accent-2),transparent);
|
||||
opacity:.55;pointer-events:none;
|
||||
}
|
||||
.card > *{position:relative;z-index:1}
|
||||
.card h2{
|
||||
font-size:1.15rem;margin-bottom:1rem;color:var(--text-label);
|
||||
display:flex;align-items:center;gap:.5rem;
|
||||
}
|
||||
.card h2:before{
|
||||
content:"";width:4px;height:16px;
|
||||
background:linear-gradient(180deg,var(--accent),var(--accent-2));
|
||||
border-radius:2px;box-shadow:0 0 8px var(--card-glow);
|
||||
}
|
||||
.form-row{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1rem;align-items:center}
|
||||
.form-compact{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}
|
||||
.form-compact .form-line{display:grid;gap:.5rem;align-items:center}
|
||||
.form-compact .line-2{grid-template-columns:repeat(2,1fr)}
|
||||
.form-compact .line-3{grid-template-columns:repeat(3,1fr)}
|
||||
.form-compact .line-4{grid-template-columns:repeat(4,1fr)}
|
||||
.form-compact .line-5{grid-template-columns:repeat(5,1fr)}
|
||||
.form-compact.line-tight{gap:.35rem;margin-bottom:.5rem}
|
||||
.form-compact .line-btn{display:flex;gap:.5rem;align-items:center}
|
||||
.form-compact input,.form-compact select{padding:.55rem .7rem;font-size:.85rem;border-radius:8px}
|
||||
.form-compact .symbol-wrap{display:flex;flex-direction:column;align-self:stretch}
|
||||
.form-compact .symbol-wrap>label.text-label,.form-compact .symbol-wrap>label.symbol-field-label{margin-bottom:.28rem}
|
||||
.form-compact .symbol-selected{font-size:.68rem;margin:0}
|
||||
.module-rules{margin-bottom:.75rem;font-size:.82rem;color:var(--text-muted)}
|
||||
.module-rules summary{cursor:pointer;color:var(--accent);font-weight:600;margin-bottom:0;list-style:none}
|
||||
.module-rules summary::-webkit-details-marker{display:none}
|
||||
.module-rules[open] summary{margin-bottom:.35rem}
|
||||
.module-rules-body{padding:.35rem 0 .15rem}
|
||||
.module-rules-body ul{margin:.25rem 0 .5rem 1.1rem;padding:0}
|
||||
.module-rules-body li{margin:.15rem 0}
|
||||
.module-rules-body p{margin:.35rem 0 .25rem}
|
||||
.form-compact button.btn-primary{padding:.55rem 1.5rem;font-size:.85rem;white-space:nowrap}
|
||||
.form-compact-review input.calc-readonly{color:var(--accent);background:var(--calc-bg);font-size:.82rem}
|
||||
.form-compact-review textarea{min-height:44px;font-size:.85rem;padding:.45rem .65rem}
|
||||
.form-compact-review .section-hint{font-size:.72rem;color:var(--text-muted);margin:.25rem 0 .15rem}
|
||||
.form-compact-review .tag-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.15rem .5rem;font-size:.75rem}
|
||||
.form-compact-review .tag-grid label{display:flex;align-items:center;gap:.3rem;cursor:pointer;color:var(--text-muted);white-space:nowrap}
|
||||
.form-compact-review .tag-grid input{width:auto;flex-shrink:0}
|
||||
.form-compact-review input[type="file"]{font-size:.72rem;padding:.4rem .5rem}
|
||||
.form-compact-review .mini-field span{font-size:.65rem;color:var(--text-muted);display:block;line-height:1;margin-bottom:2px}
|
||||
.form-compact-review .kline-row label{display:flex;align-items:center;gap:.35rem;color:var(--text-muted);white-space:nowrap}
|
||||
.form-compact-review .kline-row{display:grid;grid-template-columns:auto 1fr 1fr 1fr auto;gap:.5rem;align-items:end;font-size:.78rem}
|
||||
.split-grid.records-split .card{min-height:auto}
|
||||
.split-grid.records-split .card h2{font-size:1rem;margin-bottom:.5rem}
|
||||
.split-grid.records-split .card{padding:1rem 1.25rem}
|
||||
.page-title-sm{font-size:1.25rem;margin-bottom:.75rem}
|
||||
.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem;margin-bottom:1rem}
|
||||
.form-grid .full{grid-column:1/-1}
|
||||
.field label{display:block;font-size:.8rem;color:var(--text-label);margin-bottom:.35rem}
|
||||
input,select,textarea,button{
|
||||
padding:.7rem 1rem;border-radius:10px;
|
||||
border:1px solid var(--input-border);
|
||||
background:var(--input-bg);color:var(--text-primary);
|
||||
font-size:.9rem;outline:none;width:100%;
|
||||
transition:border-color .2s,background .2s;
|
||||
}
|
||||
textarea{min-height:80px;resize:vertical}
|
||||
input:focus,select:focus,textarea:focus{border-color:var(--accent)}
|
||||
button.btn-primary{background:linear-gradient(90deg,var(--accent),var(--accent-2));border:none;cursor:pointer;color:#fff;width:auto}
|
||||
button.btn-primary:hover{opacity:.9}
|
||||
.list{display:flex;flex-direction:column;gap:.75rem}
|
||||
.list-item{
|
||||
display:flex;justify-content:space-between;align-items:center;
|
||||
padding:1rem;background:var(--list-item-bg);
|
||||
border-radius:10px;gap:1rem;flex-wrap:wrap;
|
||||
border:1px solid var(--card-border);
|
||||
}
|
||||
.btn-del{padding:.4rem .8rem;background:var(--loss-bg);color:var(--loss);border-radius:8px;text-decoration:none;font-size:.85rem}
|
||||
table{width:100%;border-collapse:collapse}
|
||||
th,td{padding:.85rem;text-align:left;border-bottom:1px solid var(--table-border);font-size:.9rem;color:var(--text-primary)}
|
||||
th{color:var(--text-label);white-space:nowrap}
|
||||
.badge{padding:.25rem .5rem;border-radius:6px;font-size:.75rem}
|
||||
.badge.profit{background:var(--profit-bg);color:var(--profit)}
|
||||
.badge.loss{background:var(--loss-bg);color:var(--loss)}
|
||||
.badge.dir{background:var(--dir-bg);color:var(--accent)}
|
||||
.badge.planned{background:var(--planned-bg);color:var(--planned-text)}
|
||||
.badge.active{background:var(--profit-bg);color:var(--profit)}
|
||||
.badge.expired{background:var(--expired-bg);color:var(--expired-text)}
|
||||
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1rem;margin-bottom:1.5rem}
|
||||
.stat-item{
|
||||
background:var(--card-inner);padding:1rem;border-radius:12px;text-align:center;
|
||||
border:1px solid var(--card-border);position:relative;overflow:hidden;
|
||||
}
|
||||
.stat-item::before{
|
||||
content:"";position:absolute;top:0;left:0;right:0;height:2px;
|
||||
background:linear-gradient(90deg,var(--accent),var(--accent-2));opacity:.5;
|
||||
}
|
||||
.stat-item .label{font-size:.8rem;color:var(--text-muted)}
|
||||
.stat-item .value{font-size:1.4rem;font-weight:600;color:var(--text-title);margin-top:.25rem}
|
||||
.symbol-wrap{position:relative;z-index:1}
|
||||
.symbol-wrap:has(.symbol-dropdown.show){z-index:50}
|
||||
.symbol-dropdown{
|
||||
position:absolute;top:100%;left:0;right:0;
|
||||
background:var(--input-bg);border:1px solid var(--input-border);
|
||||
border-radius:10px;margin-top:4px;z-index:200;
|
||||
max-height:240px;overflow-y:auto;display:none;
|
||||
box-shadow:var(--shadow-card-hover);
|
||||
}
|
||||
.card:has(.symbol-dropdown.show){overflow:visible}
|
||||
.symbol-dropdown.show{display:block}
|
||||
.symbol-option{padding:.65rem 1rem;cursor:pointer;font-size:.85rem;border-bottom:1px solid var(--table-border)}
|
||||
.symbol-option:hover{background:var(--list-item-bg)}
|
||||
.symbol-option .sub{font-size:.75rem;color:var(--text-muted);margin-top:2px}
|
||||
.symbol-option.near-expiry{color:#ff6b7a}
|
||||
html[data-theme="light"] .symbol-option.near-expiry{color:#dc2626}
|
||||
.symbol-option.near-expiry .sub{color:inherit;opacity:.85}
|
||||
.near-expiry-tag{
|
||||
font-size:.68rem;padding:.1rem .35rem;border-radius:4px;
|
||||
background:rgba(255,107,122,.15);color:inherit;font-weight:600;
|
||||
}
|
||||
html[data-theme="light"] .near-expiry-tag{background:rgba(220,38,38,.12)}
|
||||
.night-session-tag{
|
||||
display:inline-block;margin-left:4px;padding:0 5px;border-radius:4px;font-size:.7rem;font-weight:600;
|
||||
color:#7dd3fc;background:rgba(56,189,248,.15);vertical-align:middle;line-height:1.3
|
||||
}
|
||||
html[data-theme="light"] .night-session-tag{color:#0369a1;background:rgba(14,165,233,.12)}
|
||||
.symbol-group-head{
|
||||
padding:.4rem .85rem;font-size:.72rem;font-weight:600;
|
||||
color:var(--text-muted);background:var(--card-inner);
|
||||
border-bottom:1px solid var(--table-border);position:sticky;top:0;
|
||||
}
|
||||
.symbol-wrap{display:flex;flex-direction:column;align-self:stretch}
|
||||
.symbol-wrap>label.text-label,.symbol-wrap>label.symbol-field-label{
|
||||
display:flex;align-items:baseline;flex-wrap:wrap;gap:.35rem;
|
||||
font-size:.72rem;color:var(--text-label);margin-bottom:.28rem;line-height:1.35
|
||||
}
|
||||
.symbol-wrap.trade-field>label.text-label,.symbol-wrap.key-field>label.text-label{margin-bottom:.28rem}
|
||||
.symbol-selected,.symbol-wrap label .symbol-selected{
|
||||
font-size:.68rem;color:var(--accent);font-weight:400;margin:0;line-height:1.35
|
||||
}
|
||||
.check-row{display:flex;flex-wrap:wrap;gap:1rem;margin:.75rem 0}
|
||||
.check-row label{display:flex;align-items:center;gap:.4rem;font-size:.85rem;color:var(--text-muted);cursor:pointer}
|
||||
.check-row input{width:auto}
|
||||
.hint{font-size:.78rem;color:var(--text-muted);line-height:1.5;margin-top:.5rem}
|
||||
.filter-row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:flex-end;margin-bottom:1rem}
|
||||
.filter-row .field{width:auto;min-width:140px}
|
||||
.filter-row button{width:auto}
|
||||
.split-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;align-items:stretch;margin-bottom:1.5rem}
|
||||
.split-grid .card{margin-bottom:0;height:100%;min-height:480px;display:flex;flex-direction:column}
|
||||
.split-grid .card-body{flex:1;overflow:auto}
|
||||
.card-scroll{max-height:420px;overflow-y:auto}
|
||||
.preset-tabs{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1rem}
|
||||
.preset-tabs a{
|
||||
padding:.45rem .85rem;border-radius:8px;
|
||||
border:1px solid var(--input-border);
|
||||
color:var(--text-muted);text-decoration:none;font-size:.85rem;
|
||||
}
|
||||
.preset-tabs a.active,.preset-tabs a:hover{background:var(--dir-bg);color:var(--accent);border-color:var(--accent)}
|
||||
.btn-link{color:var(--accent);cursor:pointer;font-size:.85rem;background:none;border:none;padding:0}
|
||||
.btn-link:hover{text-decoration:underline}
|
||||
.modal-mask{position:fixed;inset:0;background:var(--modal-mask);z-index:1000;display:none;align-items:center;justify-content:center;padding:1rem}
|
||||
.modal-mask.show{display:flex}
|
||||
.modal-box{
|
||||
background:var(--card-bg);border:1px solid var(--card-border);
|
||||
border-radius:16px;max-width:900px;width:100%;
|
||||
max-height:90vh;overflow:auto;padding:1.5rem;
|
||||
box-shadow:var(--shadow-card);
|
||||
}
|
||||
.modal-box h3{margin-bottom:1rem;color:var(--text-label)}
|
||||
.modal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.75rem;font-size:.9rem}
|
||||
.modal-grid .item label{color:var(--text-muted);font-size:.75rem;display:block}
|
||||
.modal-grid .item div{margin-top:.2rem;color:var(--text-primary)}
|
||||
.form-compact .line-plan-1{grid-template-columns:minmax(0,1fr) minmax(72px,0.45fr) minmax(0,1.6fr)}
|
||||
.form-compact .line-plan-2{grid-template-columns:repeat(4,minmax(0,1fr)) auto;align-items:center}
|
||||
.form-compact .field-short select{padding:.55rem .5rem}
|
||||
.badge.emotion{background:var(--loss-bg);color:var(--loss);font-weight:600;border:1px solid var(--loss)}
|
||||
tr.row-emotion td{color:var(--loss)}
|
||||
tr.row-emotion td .badge.emotion{background:var(--loss);color:#fff;border-color:var(--loss)}
|
||||
.modal-box.review-modal-wide{max-width:960px}
|
||||
.modal-box.review-modal-fullscreen{
|
||||
width:calc(100vw - 1.5rem);max-width:none;
|
||||
height:calc(100vh - 1.5rem);max-height:none;
|
||||
border-radius:12px;display:flex;flex-direction:column;
|
||||
}
|
||||
.modal-box.review-modal-fullscreen h3{flex-shrink:0}
|
||||
#review-modal-body.review-modal-body{flex:1;overflow:auto;min-height:0}
|
||||
.review-detail-table{margin-bottom:1rem;overflow-x:auto}
|
||||
.review-detail-headers,.review-detail-values{
|
||||
display:grid;
|
||||
grid-template-columns:repeat(16,minmax(52px,1fr));
|
||||
gap:.35rem .4rem;align-items:start;
|
||||
}
|
||||
.review-detail-headers span{
|
||||
font-size:.68rem;color:var(--text-muted);
|
||||
white-space:nowrap;line-height:1.3;
|
||||
}
|
||||
.review-detail-values span{
|
||||
font-size:.82rem;color:var(--text-primary);
|
||||
line-height:1.35;word-break:break-all;
|
||||
}
|
||||
.review-detail-values span.emotion-val{color:var(--loss);font-weight:600}
|
||||
.review-detail-fields{padding:.25rem 0}
|
||||
.review-detail-section{margin-bottom:.85rem}
|
||||
.review-detail-section h4{font-size:.78rem;color:var(--text-label);margin-bottom:.45rem;font-weight:600}
|
||||
.review-detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.45rem .65rem}
|
||||
.review-detail-item label{display:block;font-size:.7rem;color:var(--text-muted);margin-bottom:.15rem}
|
||||
.review-detail-item div{font-size:.85rem;color:var(--text-primary);line-height:1.35}
|
||||
.review-detail-item.wide{grid-column:span 2}
|
||||
.review-detail-item.full{grid-column:1/-1}
|
||||
.review-detail-item.emotion div{color:var(--loss);font-weight:600}
|
||||
.review-detail-image{flex-shrink:0;padding-top:.75rem;border-top:1px solid var(--table-border)}
|
||||
.review-detail-image img{width:100%;border-radius:10px;border:1px solid var(--card-border)}
|
||||
.review-detail-image .no-img{color:var(--text-muted);font-size:.85rem;padding:2rem;text-align:center;background:var(--card-inner);border-radius:10px}
|
||||
.key-live{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex:1;min-width:160px}
|
||||
.key-live .live-price-line{font-size:.85rem;font-weight:600;color:var(--accent);white-space:nowrap}
|
||||
.key-live .live-dist{font-size:.72rem;color:var(--text-muted);white-space:nowrap}
|
||||
.key-live .live-dist span{color:var(--text-primary)}
|
||||
.list-item.key-item{gap:.65rem}
|
||||
.pos-card{background:var(--card-inner);border:1px solid var(--card-border);border-radius:12px;padding:1rem;margin-bottom:.75rem}
|
||||
.pos-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem;margin-bottom:.65rem}
|
||||
.pos-card-head .title{font-size:1rem;font-weight:600;color:var(--text-title)}
|
||||
.pos-card-meta{font-size:.75rem;color:var(--text-muted);margin-bottom:.65rem}
|
||||
.pos-card-meta strong{color:var(--text-primary)}
|
||||
.pos-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem .65rem;margin-bottom:.65rem}
|
||||
.pos-metrics .cell label{display:block;font-size:.68rem;color:var(--text-muted);margin-bottom:.15rem}
|
||||
.pos-metrics .cell div{font-size:.88rem;color:var(--text-primary)}
|
||||
.pos-metrics .cell.pnl-pos div{color:var(--profit)}
|
||||
.pos-metrics .cell.pnl-neg div{color:var(--loss)}
|
||||
.pos-footer{font-size:.72rem;color:var(--text-muted);display:flex;flex-wrap:wrap;gap:.35rem 1rem;padding-top:.65rem;border-top:1px solid var(--table-border)}
|
||||
.pos-footer span{color:var(--text-primary)}
|
||||
.pos-del{font-size:.75rem;padding:.35rem .65rem}
|
||||
.trade-toolbar{display:flex;align-items:center;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}
|
||||
.trade-switch-label{
|
||||
display:flex;align-items:center;gap:.4rem;
|
||||
font-size:.78rem;color:var(--text-muted);
|
||||
white-space:normal;margin-bottom:.65rem;cursor:pointer;
|
||||
line-height:1.45;max-width:100%;
|
||||
}
|
||||
.trade-switch-label span{line-height:1.45;color:var(--text-muted)}
|
||||
.trade-switch-label input{flex-shrink:0;width:auto}
|
||||
.trade-table-wrap{
|
||||
overflow:auto;
|
||||
max-height:420px;
|
||||
width:100%;
|
||||
-webkit-overflow-scrolling:touch;
|
||||
border-radius:10px;
|
||||
border:1px solid var(--table-border);
|
||||
background:var(--card-inner);
|
||||
}
|
||||
.trade-table{font-size:.8rem;width:max-content;min-width:100%;table-layout:auto}
|
||||
.trade-table th{font-size:.75rem;padding:.55rem .45rem;white-space:nowrap;background:var(--card-inner)}
|
||||
.trade-table td{padding:.45rem .4rem;vertical-align:middle;white-space:nowrap;background:var(--card-inner)}
|
||||
.trade-table th:last-child,
|
||||
.trade-table td:last-child{
|
||||
position:sticky;right:0;z-index:3;
|
||||
box-shadow:-6px 0 10px rgba(0,0,0,.08);
|
||||
}
|
||||
.trade-table thead th:last-child{z-index:4}
|
||||
.trade-table input,.trade-table select{
|
||||
padding:.35rem .45rem;font-size:.78rem;border-radius:6px;width:100%;min-width:0;
|
||||
}
|
||||
.trade-table .cell-readonly{color:var(--text-primary)}
|
||||
.records-equity-card .card-body{padding-top:0;background:transparent}
|
||||
.records-equity-card #equity-curve-chart{background:transparent;border-radius:0}
|
||||
.records-trade-card{overflow:visible}
|
||||
.records-trade-card .card-body{overflow:visible;background:transparent}
|
||||
.records-trade-card .trade-table-wrap{
|
||||
--rec-row-h:2.35rem;
|
||||
--rec-head-h:2.1rem;
|
||||
overflow:auto;
|
||||
height:calc(var(--rec-row-h) * 10 + var(--rec-head-h));
|
||||
max-height:calc(var(--rec-row-h) * 10 + var(--rec-head-h));
|
||||
width:100%;
|
||||
-webkit-overflow-scrolling:touch;
|
||||
border:none;
|
||||
border-radius:0;
|
||||
background:transparent;
|
||||
}
|
||||
.records-trade-card .trade-table th,
|
||||
.records-trade-card .trade-table td{
|
||||
background:transparent;
|
||||
}
|
||||
.records-trade-card .trade-table thead th{
|
||||
position:sticky;
|
||||
top:0;
|
||||
z-index:2;
|
||||
background:transparent;
|
||||
backdrop-filter:blur(12px);
|
||||
-webkit-backdrop-filter:blur(12px);
|
||||
box-shadow:0 1px 0 var(--table-border);
|
||||
}
|
||||
.records-trade-card .trade-table th:last-child,
|
||||
.records-trade-card .trade-table td:last-child{
|
||||
box-shadow:none;
|
||||
background:transparent;
|
||||
}
|
||||
.records-trade-card .trade-table thead th:last-child{
|
||||
z-index:5;
|
||||
}
|
||||
.trade-actions{display:flex;gap:.35rem;flex-wrap:nowrap;align-items:center;min-width:230px;white-space:nowrap}
|
||||
.trade-actions a,.trade-actions button{flex-shrink:0;white-space:nowrap;font-size:.72rem;padding:.3rem .55rem;border-radius:6px;text-decoration:none;border:none;cursor:pointer;width:auto;min-width:0}
|
||||
.btn-fill{background:var(--dir-bg);color:var(--accent)}
|
||||
.btn-verify{background:var(--nav-active);color:#fff}
|
||||
.btn-verify:disabled{opacity:.45;cursor:not-allowed}
|
||||
.badge.result-manual{background:var(--dir-bg);color:var(--accent)}
|
||||
.badge.result-external{background:var(--expired-bg);color:var(--expired-text)}
|
||||
.profile-page .profile-head{display:flex;align-items:center;gap:.65rem;flex-wrap:wrap;margin:1rem 0 .75rem;font-size:.9rem}
|
||||
.profile-page .profile-source{font-size:.72rem;color:var(--text-muted)}
|
||||
.profile-spec{max-width:820px;border:1px solid var(--card-border);border-radius:10px;background:var(--card-inner);padding:.25rem .85rem}
|
||||
.profile-row{display:grid;grid-template-columns:minmax(120px,28%) 1fr;gap:.5rem 1rem;padding:.6rem 0;border-bottom:1px solid var(--table-border);align-items:start}
|
||||
.profile-row:last-child{border-bottom:none}
|
||||
.profile-label{color:var(--text-muted);font-size:.84rem;line-height:1.4}
|
||||
.profile-value{color:var(--text-primary);font-size:.86rem;line-height:1.5;word-break:break-word}
|
||||
.profile-hint{color:var(--planned-text);font-size:.74rem;margin-top:.25rem;line-height:1.35}
|
||||
.calc-readonly{background:var(--calc-bg);color:var(--accent)}
|
||||
@media(max-width:1100px){
|
||||
.split-grid{grid-template-columns:1fr}
|
||||
.split-grid .card{min-height:auto}
|
||||
}
|
||||
@@ -0,0 +1,471 @@
|
||||
/* Copyright (c) 2025-2026 马建军. All rights reserved. 详见 LICENSE.zh-CN.txt */
|
||||
|
||||
.dashboard-page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.dashboard-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.dashboard-top-left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.45rem;
|
||||
}
|
||||
|
||||
.dash-updated {
|
||||
font-size: 0.78rem;
|
||||
}
|
||||
|
||||
.dashboard-account-card {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.dashboard-account-grid {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.dashboard-account-grid .stat-item {
|
||||
min-width: 6.5rem;
|
||||
}
|
||||
|
||||
.dashboard-account-grid .stat-item .value {
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.dashboard-section h2 {
|
||||
margin-bottom: 0.65rem;
|
||||
}
|
||||
|
||||
.dashboard-risk-card h2 {
|
||||
margin-bottom: 0.45rem;
|
||||
}
|
||||
|
||||
.dashboard-risk-reason {
|
||||
margin: 0 0 0.65rem;
|
||||
font-size: 0.82rem;
|
||||
line-height: 1.5;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.dashboard-risk-reason.is-blocked {
|
||||
color: var(--loss);
|
||||
}
|
||||
|
||||
.dashboard-risk-reason.is-ok {
|
||||
color: var(--profit);
|
||||
}
|
||||
|
||||
.dashboard-risk-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: stretch;
|
||||
gap: 0;
|
||||
margin-bottom: 0;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.dashboard-risk-heading {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.35rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.dash-risk-doc-ref {
|
||||
font-size: 0.72rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.dash-risk-doc-link {
|
||||
font-size: 0.74rem;
|
||||
font-weight: 500;
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
margin-left: 0.15rem;
|
||||
}
|
||||
|
||||
.dash-risk-doc-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.dash-risk-doc-ref code {
|
||||
font-size: 0.68rem;
|
||||
}
|
||||
|
||||
.dashboard-risk-item {
|
||||
flex: 1 1 0;
|
||||
min-width: 6.4rem;
|
||||
padding: 0.5rem 0.6rem;
|
||||
text-align: center;
|
||||
border-right: 1px solid var(--table-border);
|
||||
}
|
||||
|
||||
.dashboard-risk-item:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.dashboard-risk-label {
|
||||
font-size: 0.74rem;
|
||||
line-height: 1.35;
|
||||
color: var(--text-muted);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.dashboard-risk-value {
|
||||
font-size: 0.92rem;
|
||||
font-weight: 600;
|
||||
color: var(--text-title);
|
||||
margin-top: 0.22rem;
|
||||
font-variant-numeric: tabular-nums;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.dashboard-risk-value.risk-switch-on {
|
||||
color: var(--profit);
|
||||
}
|
||||
|
||||
.dashboard-risk-value.risk-switch-off {
|
||||
color: var(--loss);
|
||||
}
|
||||
|
||||
.dashboard-risk-value.risk-cap-single {
|
||||
color: #5eb8ff;
|
||||
}
|
||||
|
||||
[data-theme="light"] .dashboard-risk-value.risk-cap-single {
|
||||
color: #1d4ed8;
|
||||
}
|
||||
|
||||
.dashboard-risk-value.risk-cap-roll {
|
||||
color: #c4a035;
|
||||
}
|
||||
|
||||
[data-theme="light"] .dashboard-risk-value.risk-cap-roll {
|
||||
color: #b45309;
|
||||
}
|
||||
|
||||
.dashboard-risk-value .risk-margin-safe {
|
||||
color: var(--profit);
|
||||
}
|
||||
|
||||
.dashboard-risk-value .risk-margin-warn {
|
||||
color: var(--planned-text);
|
||||
}
|
||||
|
||||
.dashboard-risk-value .risk-margin-over {
|
||||
color: var(--loss);
|
||||
}
|
||||
|
||||
.dashboard-risk-value .risk-margin-sep {
|
||||
color: var(--text-muted);
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.dashboard-risk-value .risk-margin-cap-inline {
|
||||
color: #c4a035;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
[data-theme="light"] .dashboard-risk-value .risk-margin-cap-inline {
|
||||
color: #b45309;
|
||||
}
|
||||
|
||||
.dashboard-risk-grid .stat-item {
|
||||
min-width: 5.5rem;
|
||||
}
|
||||
|
||||
.dashboard-risk-grid .stat-item .value {
|
||||
font-size: 0.82rem;
|
||||
}
|
||||
|
||||
.dash-symbol-cell {
|
||||
min-width: 7.5rem;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.dash-symbol-title {
|
||||
font-weight: 600;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.dash-symbol-ex {
|
||||
font-weight: 400;
|
||||
font-size: 0.78rem;
|
||||
}
|
||||
|
||||
.dash-main-badge {
|
||||
font-size: 0.68rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.dashboard-table .badge.dir-long,
|
||||
.dashboard-table .badge.dir-short {
|
||||
font-size: 0.72rem;
|
||||
}
|
||||
|
||||
.dashboard-table .badge.dir-long {
|
||||
background: var(--profit-bg);
|
||||
color: var(--profit);
|
||||
}
|
||||
|
||||
.dashboard-table .badge.dir-short {
|
||||
background: var(--loss-bg);
|
||||
color: var(--loss);
|
||||
}
|
||||
|
||||
.dashboard-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: 0.82rem;
|
||||
}
|
||||
|
||||
.dashboard-table th,
|
||||
.dashboard-table td {
|
||||
padding: 0.45rem 0.55rem;
|
||||
border-bottom: 1px solid var(--table-border);
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
.dashboard-table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.dashboard-table .pnl-pos {
|
||||
color: var(--profit);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.dashboard-table .pnl-neg {
|
||||
color: var(--loss);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.dashboard-table {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
.dashboard-table th,
|
||||
.dashboard-table td {
|
||||
padding: 0.35rem 0.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- 风控折叠 / 平板两行 ---- */
|
||||
.dash-section-toggle {
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.dash-section-toggle-label {
|
||||
margin-right: 0.15rem;
|
||||
}
|
||||
|
||||
.dash-toggle-icon {
|
||||
margin-left: auto;
|
||||
font-size: 0.68rem;
|
||||
color: var(--text-muted);
|
||||
transition: transform 0.2s ease;
|
||||
}
|
||||
|
||||
.dashboard-risk-card.is-expanded .dash-toggle-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
html:is([data-layout="phone"], [data-layout="tablet"], .layout-phone, .layout-tablet)
|
||||
.dashboard-risk-card:not(.is-expanded) .dash-risk-body {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"] .dashboard-risk-grid,
|
||||
html.layout-tablet .dashboard-risk-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(7, minmax(0, 1fr));
|
||||
overflow-x: visible;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"] .dashboard-risk-item,
|
||||
html.layout-tablet .dashboard-risk-item {
|
||||
flex: none;
|
||||
min-width: 0;
|
||||
border-right: 1px solid var(--table-border);
|
||||
border-bottom: 1px solid var(--table-border);
|
||||
}
|
||||
|
||||
html[data-layout="tablet"] .dashboard-risk-item:nth-child(7n),
|
||||
html.layout-tablet .dashboard-risk-item:nth-child(7n) {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"] .dashboard-risk-item:nth-last-child(-n+6),
|
||||
html.layout-tablet .dashboard-risk-item:nth-last-child(-n+6) {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
html:is([data-layout="phone"], .layout-phone) .dashboard-risk-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
overflow-x: visible;
|
||||
}
|
||||
|
||||
html:is([data-layout="phone"], .layout-phone) .dashboard-risk-item {
|
||||
flex: none;
|
||||
min-width: 0;
|
||||
border-right: 1px solid var(--table-border);
|
||||
border-bottom: 1px solid var(--table-border);
|
||||
}
|
||||
|
||||
html:is([data-layout="phone"], .layout-phone) .dashboard-risk-item:nth-child(2n) {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
html:is([data-layout="phone"], .layout-phone) .dashboard-risk-item:nth-last-child(-n+1) {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* ---- 持仓 / 关键位:桌面平板最多 3 行后滚动 ---- */
|
||||
html:not([data-layout="phone"]):not(.layout-phone) .dash-pos-table-wrap,
|
||||
html:not([data-layout="phone"]):not(.layout-phone) .dash-keys-table-wrap {
|
||||
max-height: 12rem;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
html:not([data-layout="phone"]):not(.layout-phone) .dash-pos-table-wrap thead th,
|
||||
html:not([data-layout="phone"]):not(.layout-phone) .dash-keys-table-wrap thead th {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
background: var(--card-inner);
|
||||
}
|
||||
|
||||
/* ---- 手机简要列表 ---- */
|
||||
.dash-mobile-list {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html:is([data-layout="phone"], .layout-phone) .dash-mobile-list {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html:is([data-layout="phone"], .layout-phone) .dash-pos-table-wrap,
|
||||
html:is([data-layout="phone"], .layout-phone) .dash-keys-table-wrap,
|
||||
html:is([data-layout="phone"], .layout-phone) .dash-closes-table-wrap {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dash-mobile-item {
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
border: 1px solid var(--table-border);
|
||||
border-radius: 10px;
|
||||
background: var(--card-inner);
|
||||
padding: 0.65rem 0.75rem;
|
||||
margin-bottom: 0.5rem;
|
||||
cursor: pointer;
|
||||
color: inherit;
|
||||
font: inherit;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
|
||||
.dash-mobile-item:hover,
|
||||
.dash-mobile-item:focus-visible {
|
||||
border-color: var(--accent);
|
||||
outline: none;
|
||||
box-shadow: 0 0 0 1px rgba(76, 194, 255, 0.15);
|
||||
}
|
||||
|
||||
.dash-mobile-item-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.45rem;
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.dash-mobile-item-title {
|
||||
min-width: 0;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.dash-mobile-item-meta {
|
||||
font-size: 0.74rem;
|
||||
color: var(--text-muted);
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.dash-mobile-item-foot {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.5rem;
|
||||
margin-top: 0.35rem;
|
||||
font-size: 0.78rem;
|
||||
}
|
||||
|
||||
.dash-mobile-item-summary {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
line-height: 1.45;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.dash-mobile-item-summary .pnl-pos {
|
||||
color: var(--profit);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.dash-mobile-item-summary .pnl-neg {
|
||||
color: var(--loss);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.dash-mobile-item-title .badge {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.dash-mobile-chevron {
|
||||
font-size: 0.72rem;
|
||||
color: var(--accent);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.dash-mobile-empty {
|
||||
padding: 0.85rem 0.35rem;
|
||||
text-align: center;
|
||||
color: var(--text-muted);
|
||||
font-size: 0.82rem;
|
||||
}
|
||||
|
||||
.dash-be-badge {
|
||||
font-size: 0.66rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.dash-detail-modal {
|
||||
max-width: 520px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.dash-detail-modal .modal-grid .item.wide {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.dash-detail-modal .modal-actions {
|
||||
margin-top: 1rem;
|
||||
text-align: right;
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
/* Copyright (c) 2025-2026 马建军. All rights reserved. 详见 LICENSE.zh-CN.txt */
|
||||
|
||||
.doc-page {
|
||||
max-width: 52rem;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.doc-content {
|
||||
font-size: 0.92rem;
|
||||
line-height: 1.65;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.doc-content h1 {
|
||||
font-size: 1.35rem;
|
||||
color: var(--text-title);
|
||||
margin-bottom: 0.75rem;
|
||||
padding-bottom: 0.45rem;
|
||||
border-bottom: 1px solid var(--table-border);
|
||||
}
|
||||
|
||||
.doc-content h2 {
|
||||
font-size: 1.05rem;
|
||||
color: var(--text-title);
|
||||
margin: 1.35rem 0 0.55rem;
|
||||
}
|
||||
|
||||
.doc-content h3 {
|
||||
font-size: 0.95rem;
|
||||
color: var(--text-title);
|
||||
margin: 1rem 0 0.45rem;
|
||||
}
|
||||
|
||||
.doc-content p {
|
||||
margin: 0.45rem 0;
|
||||
}
|
||||
|
||||
.doc-content hr {
|
||||
border: none;
|
||||
border-top: 1px solid var(--table-border);
|
||||
margin: 1.1rem 0;
|
||||
}
|
||||
|
||||
.doc-content ul,
|
||||
.doc-content ol {
|
||||
margin: 0.45rem 0 0.65rem 1.25rem;
|
||||
}
|
||||
|
||||
.doc-content li {
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
|
||||
.doc-content code {
|
||||
font-size: 0.84em;
|
||||
padding: 0.08rem 0.32rem;
|
||||
border-radius: 4px;
|
||||
background: var(--card-inner);
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.doc-content a {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.doc-content a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.doc-content .doc-xref {
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.doc-content .doc-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 0.65rem 0 0.85rem;
|
||||
font-size: 0.86rem;
|
||||
}
|
||||
|
||||
.doc-content .doc-table th,
|
||||
.doc-content .doc-table td {
|
||||
padding: 0.42rem 0.55rem;
|
||||
border: 1px solid var(--table-border);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.doc-content .doc-table th {
|
||||
background: var(--card-inner);
|
||||
color: var(--text-title);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.doc-content strong {
|
||||
color: var(--text-title);
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.doc-content {
|
||||
font-size: 0.86rem;
|
||||
}
|
||||
.doc-content .doc-table {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
.key-form-rows{display:flex;flex-direction:column;gap:.75rem;margin-bottom:.85rem}
|
||||
.key-form-line{display:grid;gap:.65rem;align-items:end}
|
||||
.key-form-line.line-3{grid-template-columns:1.4fr .85fr .85fr}
|
||||
.key-form-line.line-2{grid-template-columns:1fr 1fr}
|
||||
.key-field label{display:block;font-size:.72rem;margin-bottom:.28rem;color:var(--text-label)}
|
||||
.symbol-wrap.key-field>label.text-label{display:flex;align-items:baseline;flex-wrap:wrap;gap:.35rem}
|
||||
.key-field select,.key-field input{width:100%;box-sizing:border-box}
|
||||
.key-action-row{display:flex;flex-direction:column;gap:.35rem;margin-top:.15rem}
|
||||
.key-action-row .trailing-be-toggle{display:flex;align-items:center;gap:.4rem;font-size:.78rem;color:var(--text-label);margin:0;cursor:pointer;user-select:none}
|
||||
.key-action-row .trailing-be-toggle input{width:auto;margin:0;flex-shrink:0}
|
||||
.key-trailing-hint{font-size:.72rem;margin:0;color:var(--text-muted);line-height:1.45}
|
||||
.key-action-row .key-submit-btn{width:100%;padding:.65rem .75rem;font-size:.9rem;margin-top:.25rem}
|
||||
#key-row-auto.is-hidden,#key-rr-wrap.is-hidden,#key-trade-mode-wrap.is-hidden,#key-direction-wrap.is-hidden,#key-trailing-wrap.is-hidden,#key-trailing-hint.is-hidden{display:none!important}
|
||||
@media(max-width:720px){
|
||||
.key-form-line.line-3{grid-template-columns:1fr 1fr}
|
||||
.key-form-line.line-3 .key-field:first-child{grid-column:1/-1}
|
||||
.key-form-line.line-2{grid-template-columns:1fr}
|
||||
}
|
||||
@@ -0,0 +1,553 @@
|
||||
/* Copyright (c) 2025-2026 马建军. All rights reserved.
|
||||
* 手机端竖屏 UI
|
||||
*/
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) {
|
||||
-webkit-text-size-adjust: 100%;
|
||||
text-size-adjust: 100%;
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
max-width: 100vw;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) body {
|
||||
font-size: 15px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
width: 100%;
|
||||
max-width: 100vw;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .page-wrap {
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .tech-bg .tech-scanline {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ── 顶栏:菜单 | 标题 | 主题 ── */
|
||||
html:is([data-mobile="1"], .layout-phone) .site-header {
|
||||
display: grid;
|
||||
grid-template-columns: 40px minmax(0, 1fr) auto;
|
||||
grid-template-areas: "toggle title tools";
|
||||
align-items: center;
|
||||
column-gap: .45rem;
|
||||
padding: calc(var(--safe-top) + .4rem) .6rem .5rem;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid var(--border-header);
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 80;
|
||||
background: var(--card-bg);
|
||||
backdrop-filter: blur(10px);
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .header-bar {
|
||||
display: contents;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .nav-toggle {
|
||||
display: inline-flex !important;
|
||||
grid-area: toggle;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .header-tools {
|
||||
grid-area: tools;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
gap: .2rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .header-tools .pwa-install-btn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .theme-switch {
|
||||
padding: 2px;
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .theme-switch-btn {
|
||||
padding: .28rem .42rem;
|
||||
font-size: .66rem;
|
||||
min-height: 28px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .user-bar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .site-title {
|
||||
grid-area: title;
|
||||
font-size: .9rem;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
line-height: 1.2;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .site-title-mobile {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .site-title-desktop {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.site-title-mobile {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .site-title-sub {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .pwa-ios-hint {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .site-nav {
|
||||
position: fixed !important;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: min(88vw, 300px);
|
||||
height: 100dvh;
|
||||
margin: 0;
|
||||
padding: calc(var(--safe-top) + 3.25rem) .85rem 1.25rem;
|
||||
flex-direction: column !important;
|
||||
flex-wrap: nowrap !important;
|
||||
justify-content: flex-start !important;
|
||||
align-items: stretch !important;
|
||||
gap: .3rem;
|
||||
background: var(--card-bg);
|
||||
border-right: 1px solid var(--card-border);
|
||||
box-shadow: var(--shadow-card-hover);
|
||||
z-index: 100;
|
||||
transform: translateX(-105%);
|
||||
transition: transform .25s ease;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .site-nav.open {
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .site-nav a {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
padding: .7rem .85rem;
|
||||
font-size: .88rem;
|
||||
min-height: 44px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .main {
|
||||
padding: .65rem .6rem calc(1rem + var(--safe-bottom));
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .card {
|
||||
padding: .85rem;
|
||||
border-radius: 12px;
|
||||
margin-bottom: .75rem;
|
||||
overflow: visible;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .card h2 {
|
||||
font-size: .95rem;
|
||||
margin-bottom: .55rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .split-grid,
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-split,
|
||||
html:is([data-mobile="1"], .layout-phone) .strategy-page .split-grid {
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
gap: .75rem !important;
|
||||
grid-template-columns: 1fr !important;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .split-grid .card,
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-split .card,
|
||||
html:is([data-mobile="1"], .layout-phone) .strategy-page .split-grid .card {
|
||||
min-height: auto !important;
|
||||
height: auto !important;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/* ── 下单监控页 ── */
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-page {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-top-bar {
|
||||
flex-direction: column;
|
||||
gap: .55rem;
|
||||
padding: .65rem;
|
||||
border-radius: 12px;
|
||||
background: var(--card-inner);
|
||||
border: 1px solid var(--card-border);
|
||||
margin-bottom: .75rem;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-top-bar-main {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: .35rem;
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-top-bar-main .badge {
|
||||
font-size: .68rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-session-clock {
|
||||
display: block;
|
||||
font-size: .7rem;
|
||||
line-height: 1.45;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-top-bar-actions {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-top-bar-actions .btn-ctp-sm {
|
||||
width: 100%;
|
||||
min-height: 44px;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-top-hint {
|
||||
font-size: .65rem;
|
||||
line-height: 1.4;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-form-rows {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-form-line {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 品种独占一行;方向 + 手数并排 */
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-form-line.line-3 {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||
gap: .45rem !important;
|
||||
align-items: end;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-form-line.line-3 .trade-field:first-child {
|
||||
grid-column: 1 / -1 !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-form-line.line-2 {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||
gap: .45rem !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-field,
|
||||
html:is([data-mobile="1"], .layout-phone) .symbol-wrap {
|
||||
min-width: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-field label,
|
||||
html:is([data-mobile="1"], .layout-phone) .text-label {
|
||||
font-size: .68rem;
|
||||
margin-bottom: .18rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-field input,
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-field select {
|
||||
padding: .42rem .5rem;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .symbol-input {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .price-type-tabs {
|
||||
margin-bottom: .22rem;
|
||||
gap: .25rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .price-tab {
|
||||
padding: .2rem .3rem;
|
||||
font-size: .66rem;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .form-compact .line-trend-head {
|
||||
grid-template-columns: minmax(0, 1.4fr) minmax(0, 0.7fr) minmax(0, 0.75fr) !important;
|
||||
gap: .4rem .45rem !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .form-compact .line-2 {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||
gap: .4rem .45rem !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .form-compact .line-3 {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||
gap: .4rem .45rem !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) #roll-form .form-line.line-2 {
|
||||
grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr) !important;
|
||||
gap: .4rem .45rem !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .form-compact .form-line {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .form-compact input,
|
||||
html:is([data-mobile="1"], .layout-phone) .form-compact select {
|
||||
padding: .42rem .5rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-action-row {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-action-row .btn-open {
|
||||
width: 100%;
|
||||
min-height: 44px;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .pos-metrics {
|
||||
grid-template-columns: repeat(2, 1fr) !important;
|
||||
gap: .45rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .pos-card {
|
||||
padding: .75rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .pos-card-head {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: .45rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .pos-card-actions {
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .rec-sort-bar {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: .45rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .rec-sort-bar select {
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) #recommend .trade-table-wrap,
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-table-wrap {
|
||||
overflow-x: auto !important;
|
||||
overflow-y: auto;
|
||||
max-height: 55vh;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .trade-table {
|
||||
font-size: .72rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .strategy-page .split-grid .card {
|
||||
min-height: auto !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .strategy-preview-table {
|
||||
font-size: .66rem;
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .table-responsive {
|
||||
margin-bottom: .5rem;
|
||||
max-width: 100%;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .module-rules summary {
|
||||
font-size: .78rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) input,
|
||||
html:is([data-mobile="1"], .layout-phone) select,
|
||||
html:is([data-mobile="1"], .layout-phone) textarea,
|
||||
html:is([data-mobile="1"], .layout-phone) button {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .btn-primary {
|
||||
min-height: 44px;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .site-nav::after {
|
||||
content: attr(data-user-label);
|
||||
display: block;
|
||||
margin-top: auto;
|
||||
padding: .85rem .5rem 0;
|
||||
font-size: .72rem;
|
||||
color: var(--text-muted);
|
||||
border-top: 1px solid var(--table-border);
|
||||
}
|
||||
|
||||
/* 桌面端:标题仍居中,工具栏绝对定位 */
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .header-bar {
|
||||
display: block;
|
||||
position: relative;
|
||||
min-height: 2rem;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .nav-toggle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .site-title {
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin: 0 0 1.65rem;
|
||||
font-size: 1.75rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .site-title-mobile {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .site-title-desktop {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .header-tools {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 20;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .user-bar {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
/* 触控小屏兜底(JS 未执行时) */
|
||||
@media (pointer: coarse) and (max-width: 600px) {
|
||||
body {
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
max-width: 100vw;
|
||||
}
|
||||
|
||||
.site-header {
|
||||
display: grid !important;
|
||||
grid-template-columns: 40px minmax(0, 1fr) auto !important;
|
||||
grid-template-areas: "toggle title tools" !important;
|
||||
align-items: center;
|
||||
column-gap: .45rem;
|
||||
padding: calc(var(--safe-top) + .4rem) .6rem .5rem;
|
||||
text-align: left;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.header-bar {
|
||||
display: contents !important;
|
||||
}
|
||||
|
||||
.nav-toggle {
|
||||
display: inline-flex !important;
|
||||
grid-area: toggle;
|
||||
}
|
||||
|
||||
.header-tools {
|
||||
grid-area: tools;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.user-bar {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.site-title {
|
||||
grid-area: title;
|
||||
font-size: .9rem;
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.site-title-mobile {
|
||||
display: inline !important;
|
||||
}
|
||||
|
||||
.site-title-desktop {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.trade-form-line.line-3 {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||
gap: .45rem !important;
|
||||
}
|
||||
|
||||
.trade-form-line.line-3 .trade-field:first-child {
|
||||
grid-column: 1 / -1 !important;
|
||||
}
|
||||
|
||||
.card {
|
||||
overflow: visible;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,440 @@
|
||||
/* Copyright (c) 2025-2026 马建军. All rights reserved.
|
||||
* 交易记录与复盘 — 手机/平板简洁列表 + 详情弹窗
|
||||
*/
|
||||
|
||||
.records-page .records-mobile-list {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.records-page .records-desktop-only {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.records-mobile-item {
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
border: 1px solid var(--card-border);
|
||||
border-radius: 12px;
|
||||
background: var(--card-inner);
|
||||
padding: .75rem .85rem;
|
||||
margin-bottom: .55rem;
|
||||
cursor: pointer;
|
||||
color: inherit;
|
||||
font: inherit;
|
||||
transition: border-color .2s, box-shadow .2s;
|
||||
}
|
||||
|
||||
.records-mobile-item:hover,
|
||||
.records-mobile-item:focus-visible {
|
||||
border-color: var(--accent);
|
||||
box-shadow: 0 0 0 1px rgba(56, 189, 248, .2);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.records-mobile-item-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: .5rem;
|
||||
margin-bottom: .35rem;
|
||||
}
|
||||
|
||||
.records-mobile-symbol {
|
||||
font-size: .92rem;
|
||||
font-weight: 600;
|
||||
color: var(--text-title);
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.records-mobile-item-meta {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: .35rem .5rem;
|
||||
font-size: .72rem;
|
||||
color: var(--text-muted);
|
||||
margin-bottom: .3rem;
|
||||
}
|
||||
|
||||
.records-mobile-item-foot {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: .5rem;
|
||||
}
|
||||
|
||||
.records-mobile-pnl {
|
||||
font-size: .88rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.records-mobile-pnl.is-profit { color: var(--profit); }
|
||||
.records-mobile-pnl.is-loss { color: var(--loss); }
|
||||
.records-mobile-pnl.is-flat { color: var(--text-muted); }
|
||||
|
||||
.records-mobile-chevron {
|
||||
font-size: .72rem;
|
||||
color: var(--accent);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.records-mobile-empty {
|
||||
padding: 1.25rem .5rem;
|
||||
text-align: center;
|
||||
color: var(--text-muted);
|
||||
font-size: .85rem;
|
||||
}
|
||||
|
||||
.records-page .trade-switch-label.records-desktop-only {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.records-page .records-verify-toggle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: .45rem;
|
||||
margin-bottom: .75rem;
|
||||
font-size: .82rem;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.records-page .records-verify-toggle input {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.records-trade-card .records-src-badge {
|
||||
margin-left: .25rem;
|
||||
font-size: .65rem;
|
||||
}
|
||||
|
||||
.records-trade-card .records-verified-inline {
|
||||
margin-left: .25rem;
|
||||
}
|
||||
|
||||
.records-trade-card .btn-records-action,
|
||||
.records-trade-table-wrap .btn-records-action {
|
||||
background: #1f3a5a;
|
||||
color: #8fc8ff;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
padding: .3rem .55rem;
|
||||
font-size: .72rem;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.records-trade-card .btn-records-action:disabled,
|
||||
.records-trade-table-wrap .btn-records-action:disabled {
|
||||
opacity: .45;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.records-trade-card .btn-records-del,
|
||||
.records-trade-table-wrap .btn-records-del {
|
||||
background: rgba(239, 68, 68, .15);
|
||||
color: var(--loss);
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
padding: .3rem .55rem;
|
||||
font-size: .72rem;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.records-trade-card .records-trade-actions,
|
||||
.records-trade-table-wrap .records-trade-actions {
|
||||
min-width: 15.5rem;
|
||||
}
|
||||
|
||||
#trade-detail-modal .records-detail-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: .55rem .75rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
#trade-detail-modal .records-detail-item label {
|
||||
display: block;
|
||||
font-size: .68rem;
|
||||
color: var(--text-muted);
|
||||
margin-bottom: .12rem;
|
||||
}
|
||||
|
||||
#trade-detail-modal .records-detail-item div {
|
||||
font-size: .84rem;
|
||||
color: var(--text-primary);
|
||||
line-height: 1.35;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
#trade-detail-modal .records-detail-item.wide {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
#trade-detail-modal .records-detail-actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: .45rem;
|
||||
padding-top: .75rem;
|
||||
border-top: 1px solid var(--table-border);
|
||||
}
|
||||
|
||||
#trade-detail-modal .records-detail-actions a,
|
||||
#trade-detail-modal .records-detail-actions button {
|
||||
font-size: .78rem;
|
||||
padding: .45rem .7rem;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.records-review-mobile .records-mobile-item.is-emotion {
|
||||
border-color: rgba(239, 68, 68, .35);
|
||||
}
|
||||
|
||||
/* 交易记录简洁行(对齐数据看板平仓记录) */
|
||||
.records-trade-row {
|
||||
border: 1px solid var(--card-border);
|
||||
border-radius: 12px;
|
||||
background: var(--card-inner);
|
||||
padding: .75rem .85rem;
|
||||
margin-bottom: .55rem;
|
||||
color: inherit;
|
||||
transition: border-color .2s, box-shadow .2s;
|
||||
}
|
||||
|
||||
.records-trade-main {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.records-trade-head {
|
||||
margin-bottom: .3rem;
|
||||
}
|
||||
|
||||
.records-trade-title {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: .3rem .4rem;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.records-trade-code {
|
||||
font-size: .84rem;
|
||||
}
|
||||
|
||||
.records-verified-badge {
|
||||
font-size: .62rem;
|
||||
}
|
||||
|
||||
.records-trade-summary {
|
||||
font-size: .78rem;
|
||||
color: var(--text-muted);
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.records-trade-verify-form {
|
||||
display: inline-flex;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.records-trade-row-actions {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.records-trade-row-actions .btn-link {
|
||||
background: transparent;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.records-trade-phone-foot {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
margin-top: .35rem;
|
||||
}
|
||||
|
||||
.records-phone-only,
|
||||
.records-tablet-only {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* 平板交易记录表格(对齐数据看板平仓记录) */
|
||||
.records-trade-table-wrap {
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .dashboard-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: .82rem;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .dashboard-table th,
|
||||
.records-trade-table-wrap .dashboard-table td {
|
||||
padding: .45rem .55rem;
|
||||
border-bottom: 1px solid var(--table-border);
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
font-variant-numeric: tabular-nums;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .dashboard-table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .dash-symbol-ex {
|
||||
font-weight: 400;
|
||||
font-size: .78rem;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .dash-main-badge {
|
||||
font-size: .68rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .dashboard-table .badge.dir-long,
|
||||
.records-trade-table-wrap .dashboard-table .badge.dir-short {
|
||||
font-size: .72rem;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .dashboard-table .badge.dir-long {
|
||||
background: var(--profit-bg);
|
||||
color: var(--profit);
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .dashboard-table .badge.dir-short {
|
||||
background: var(--loss-bg);
|
||||
color: var(--loss);
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .pnl-pos {
|
||||
color: var(--profit);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .pnl-neg {
|
||||
color: var(--loss);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.records-trade-table-wrap .trade-actions {
|
||||
min-width: 17rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-trade-row,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-trade-row {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-trade-row:hover,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-trade-row:hover {
|
||||
border-color: var(--accent);
|
||||
box-shadow: 0 0 0 1px rgba(56, 189, 248, .2);
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-page .records-phone-only,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-page .records-phone-only,
|
||||
html:is([data-mobile="1"], .layout-phone) .records-page .records-review-mobile,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-page .records-review-mobile {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-page .records-tablet-only {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-page .records-review-mobile {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-page .records-desktop-only,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-page .records-desktop-only,
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-page .records-desktop-only {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-page .records-verify-toggle,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-page .records-verify-toggle {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-page .records-trade-card .card-body,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-page .records-trade-card .card-body {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-page .records-trade-card .card-body {
|
||||
padding: 0 .75rem .35rem;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-trade-table-wrap .dashboard-table {
|
||||
font-size: .78rem;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-trade-table-wrap .dashboard-table th,
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-trade-table-wrap .dashboard-table td {
|
||||
padding: .4rem .45rem;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-trade-table-wrap .trade-actions {
|
||||
min-width: 15.5rem;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-trade-table-wrap .trade-actions a,
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-trade-table-wrap .trade-actions button {
|
||||
font-size: .68rem;
|
||||
padding: .28rem .45rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-page .records-equity-card #equity-curve-chart,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-page .records-equity-card #equity-curve-chart {
|
||||
min-height: 180px;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-page .preset-tabs,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-page .preset-tabs {
|
||||
flex-wrap: wrap;
|
||||
gap: .35rem;
|
||||
}
|
||||
|
||||
html:is([data-mobile="1"], .layout-phone) .records-page .preset-tabs a,
|
||||
html:is([data-layout="phone"], .layout-phone) .records-page .preset-tabs a {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
min-width: 0;
|
||||
padding: .45rem .35rem;
|
||||
font-size: .75rem;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) .records-page .preset-tabs a {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
min-width: 0;
|
||||
padding: .45rem .35rem;
|
||||
font-size: .75rem;
|
||||
}
|
||||
|
||||
html:is([data-layout="tablet"], .layout-tablet) #review-modal .review-detail-headers,
|
||||
html:is([data-layout="tablet"], .layout-tablet) #review-modal .review-detail-values,
|
||||
html:is([data-mobile="1"], .layout-phone) #review-modal .review-detail-headers,
|
||||
html:is([data-mobile="1"], .layout-phone) #review-modal .review-detail-values,
|
||||
html:is([data-layout="phone"], .layout-phone) #review-modal .review-detail-headers,
|
||||
html:is([data-layout="phone"], .layout-phone) #review-modal .review-detail-values {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
@media (pointer: coarse) and (max-width: 600px) {
|
||||
.records-page .records-phone-only,
|
||||
.records-page .records-review-mobile { display: block; }
|
||||
.records-page .records-desktop-only { display: none !important; }
|
||||
}
|
||||
@@ -0,0 +1,811 @@
|
||||
/* Copyright (c) 2025-2026 马建军. All rights reserved. 专有软件,详见 LICENSE.zh-CN.txt */
|
||||
/* 响应式布局 — 电脑 / 平板 / 手机 + PWA 独立窗口 */
|
||||
|
||||
:root {
|
||||
--safe-top: env(safe-area-inset-top, 0px);
|
||||
--safe-right: env(safe-area-inset-right, 0px);
|
||||
--safe-bottom: env(safe-area-inset-bottom, 0px);
|
||||
--safe-left: env(safe-area-inset-left, 0px);
|
||||
--touch-min: 44px;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-text-size-adjust: 100%;
|
||||
text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
padding-left: var(--safe-left);
|
||||
padding-right: var(--safe-right);
|
||||
padding-bottom: var(--safe-bottom);
|
||||
}
|
||||
|
||||
.page-wrap {
|
||||
padding-top: var(--safe-top);
|
||||
}
|
||||
|
||||
.header-bar {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr auto;
|
||||
align-items: center;
|
||||
gap: .5rem .75rem;
|
||||
margin-bottom: .85rem;
|
||||
min-height: var(--touch-min);
|
||||
}
|
||||
|
||||
.nav-toggle {
|
||||
display: none;
|
||||
width: var(--touch-min);
|
||||
height: var(--touch-min);
|
||||
border: 1px solid var(--toggle-border);
|
||||
border-radius: 10px;
|
||||
background: var(--toggle-bg);
|
||||
cursor: pointer;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 5px;
|
||||
padding: 0;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.nav-toggle span {
|
||||
display: block;
|
||||
width: 18px;
|
||||
height: 2px;
|
||||
background: var(--text-primary);
|
||||
border-radius: 2px;
|
||||
transition: transform .2s, opacity .2s;
|
||||
}
|
||||
|
||||
.nav-toggle[aria-expanded="true"] span:nth-child(1) {
|
||||
transform: translateY(7px) rotate(45deg);
|
||||
}
|
||||
|
||||
.nav-toggle[aria-expanded="true"] span:nth-child(2) {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.nav-toggle[aria-expanded="true"] span:nth-child(3) {
|
||||
transform: translateY(-7px) rotate(-45deg);
|
||||
}
|
||||
|
||||
.header-tools {
|
||||
position: static;
|
||||
justify-content: flex-start;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.user-bar {
|
||||
position: static;
|
||||
text-align: right;
|
||||
justify-self: end;
|
||||
}
|
||||
|
||||
.pwa-install-btn {
|
||||
padding: .38rem .7rem;
|
||||
border-radius: 999px;
|
||||
border: 1px solid var(--accent);
|
||||
background: transparent;
|
||||
color: var(--accent);
|
||||
font-size: .72rem;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
width: auto;
|
||||
flex-shrink: 0;
|
||||
min-height: 32px;
|
||||
}
|
||||
|
||||
.pwa-install-btn:hover {
|
||||
background: var(--dir-bg);
|
||||
}
|
||||
|
||||
.pwa-ios-hint {
|
||||
display: none;
|
||||
font-size: .72rem;
|
||||
color: var(--text-muted);
|
||||
padding: .5rem .75rem;
|
||||
margin: 0 0 .75rem;
|
||||
border-radius: 10px;
|
||||
border: 1px dashed var(--card-border);
|
||||
background: var(--card-inner);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.pwa-ios-hint.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.nav-backdrop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: var(--modal-mask);
|
||||
z-index: 90;
|
||||
border: none;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.nav-backdrop.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media (min-width: 1025px) {
|
||||
.site-header {
|
||||
padding: 1.5rem 1.5rem 1.25rem;
|
||||
}
|
||||
|
||||
.site-nav {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.main {
|
||||
padding: 1.5rem 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) and (max-width: 1024px) {
|
||||
.site-header {
|
||||
padding: 1.25rem 1rem 1rem;
|
||||
}
|
||||
|
||||
.site-title {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.site-nav {
|
||||
gap: .4rem;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.site-nav a {
|
||||
padding: .5rem .85rem;
|
||||
font-size: .82rem;
|
||||
}
|
||||
|
||||
.main {
|
||||
padding: 1.25rem 1rem;
|
||||
}
|
||||
|
||||
.card {
|
||||
padding: 1.25rem;
|
||||
}
|
||||
|
||||
.split-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.trade-split .card {
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
.trade-form-line.line-3 {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.trade-form-line.line-3 .trade-field:first-child {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.form-compact .line-4,
|
||||
.form-compact .line-5 {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.form-compact .line-plan-2 {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.pos-metrics {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.review-detail-grid {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.stat-grid-summary {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
overflow-x: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .nav-toggle {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .header-bar {
|
||||
grid-template-columns: auto 1fr;
|
||||
grid-template-areas:
|
||||
"toggle tools"
|
||||
"user user";
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .nav-toggle { grid-area: toggle; }
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .header-tools { grid-area: tools; justify-content: flex-end; }
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .user-bar {
|
||||
grid-area: user;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .site-header {
|
||||
padding: .85rem .75rem .75rem;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .site-title {
|
||||
font-size: 1.15rem;
|
||||
margin-bottom: .65rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .site-title-sub {
|
||||
font-size: .58rem;
|
||||
letter-spacing: .1em;
|
||||
}
|
||||
|
||||
html:not([data-mobile="1"]):not(.layout-phone) .site-nav {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: min(86vw, 320px);
|
||||
height: 100dvh;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
justify-content: flex-start;
|
||||
gap: .35rem;
|
||||
padding: calc(var(--safe-top) + 3.5rem) 1rem 1.5rem;
|
||||
background: var(--card-bg);
|
||||
border-right: 1px solid var(--card-border);
|
||||
box-shadow: var(--shadow-card-hover);
|
||||
z-index: 100;
|
||||
transform: translateX(-105%);
|
||||
transition: transform .28s ease;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.site-nav.open {
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
.site-nav a {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
padding: .75rem 1rem;
|
||||
font-size: .9rem;
|
||||
min-height: var(--touch-min);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.main {
|
||||
padding: .85rem .75rem 1.25rem;
|
||||
}
|
||||
|
||||
.card {
|
||||
padding: 1rem;
|
||||
border-radius: 12px;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.card h2 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.form-compact .line-2,
|
||||
.form-compact .line-3,
|
||||
.form-compact .line-4,
|
||||
.form-compact .line-5,
|
||||
.form-compact .line-plan-1,
|
||||
.form-compact .line-plan-2 {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.form-compact-review .tag-grid {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.form-compact-review .kline-row {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.form-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.split-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.split-grid .card {
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
.trade-split .card {
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
.trade-top-bar {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.trade-top-bar-actions {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.trade-top-bar-actions .btn-ctp-sm {
|
||||
width: 100%;
|
||||
min-height: var(--touch-min);
|
||||
}
|
||||
|
||||
.pos-metrics {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.review-detail-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.review-detail-item.wide {
|
||||
grid-column: span 1;
|
||||
}
|
||||
|
||||
.stat-grid,
|
||||
.stat-grid:not(.stat-grid-summary) {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: .65rem;
|
||||
}
|
||||
|
||||
.stat-grid-summary {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.stat-grid-summary .stat-item {
|
||||
flex: 0 0 auto;
|
||||
min-width: 4.25rem;
|
||||
padding: .35rem .15rem;
|
||||
}
|
||||
|
||||
.stat-grid-summary .stat-item .label {
|
||||
font-size: .58rem;
|
||||
}
|
||||
|
||||
.stat-grid-summary .stat-item .value {
|
||||
font-size: .72rem;
|
||||
}
|
||||
|
||||
.stat-item {
|
||||
padding: .75rem .5rem;
|
||||
}
|
||||
|
||||
.stat-grid-summary .stat-item {
|
||||
padding: .35rem .15rem;
|
||||
}
|
||||
|
||||
.stat-item .value {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.filter-row .field {
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.trade-toolbar {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.profile-row {
|
||||
grid-template-columns: 1fr;
|
||||
gap: .25rem;
|
||||
}
|
||||
|
||||
.modal-box {
|
||||
padding: 1rem;
|
||||
border-radius: 12px;
|
||||
max-height: calc(100dvh - 1rem);
|
||||
}
|
||||
|
||||
.modal-box.review-modal-fullscreen {
|
||||
width: 100%;
|
||||
height: 100dvh;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: .55rem .45rem;
|
||||
font-size: .8rem;
|
||||
}
|
||||
|
||||
.card-scroll {
|
||||
max-height: none;
|
||||
}
|
||||
|
||||
.stats-card-head {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.stats-view-field {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
input, select, textarea, button {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.form-compact input,
|
||||
.form-compact select {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479px) {
|
||||
.stat-grid:not(.stat-grid-summary) {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.stat-grid-summary .stat-item {
|
||||
min-width: 3.75rem;
|
||||
}
|
||||
|
||||
.theme-switch-btn {
|
||||
padding: .35rem .55rem;
|
||||
font-size: .7rem;
|
||||
}
|
||||
|
||||
.pos-metrics {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (display-mode: standalone) {
|
||||
.site-header {
|
||||
padding-top: max(.75rem, var(--safe-top));
|
||||
}
|
||||
|
||||
.pwa-install-btn,
|
||||
.pwa-ios-hint {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) and (orientation: landscape) {
|
||||
.site-nav {
|
||||
width: min(50vw, 280px);
|
||||
padding-top: calc(var(--safe-top) + 2.5rem);
|
||||
}
|
||||
}
|
||||
|
||||
@media (hover: none) and (pointer: coarse) {
|
||||
.site-nav a,
|
||||
.btn-del,
|
||||
.trade-actions a,
|
||||
.trade-actions button,
|
||||
.preset-tabs a {
|
||||
min-height: var(--touch-min);
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.list-item:hover {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.stat-item:hover {
|
||||
transform: none;
|
||||
}
|
||||
}
|
||||
|
||||
.table-responsive {
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.table-responsive table {
|
||||
min-width: 560px;
|
||||
}
|
||||
|
||||
body.login-page {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 100vh;
|
||||
min-height: 100dvh;
|
||||
padding: 1rem;
|
||||
padding-top: max(1rem, var(--safe-top));
|
||||
padding-bottom: max(1rem, var(--safe-bottom));
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
body.login-page {
|
||||
align-items: flex-start;
|
||||
padding: .75rem;
|
||||
padding-top: max(.75rem, var(--safe-top));
|
||||
}
|
||||
|
||||
body.login-page .login-wrap {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
body.login-page .login-box {
|
||||
padding: 1.75rem 1.25rem 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* ── 设备布局:手机竖屏 / 平板横屏 ── */
|
||||
|
||||
.orientation-lock {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: 9999;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 1.5rem;
|
||||
background: var(--modal-mask);
|
||||
backdrop-filter: blur(6px);
|
||||
}
|
||||
|
||||
.orientation-lock[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.orientation-lock-box {
|
||||
max-width: 18rem;
|
||||
padding: 1.75rem 1.25rem;
|
||||
border-radius: 14px;
|
||||
border: 1px solid var(--card-border);
|
||||
background: var(--card-bg);
|
||||
text-align: center;
|
||||
box-shadow: var(--shadow-card-hover);
|
||||
}
|
||||
|
||||
.orientation-lock-icon {
|
||||
font-size: 2.5rem;
|
||||
line-height: 1;
|
||||
margin-bottom: .85rem;
|
||||
color: var(--accent);
|
||||
animation: orientation-spin 2.4s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.orientation-lock-box p {
|
||||
margin: 0;
|
||||
font-size: .95rem;
|
||||
line-height: 1.55;
|
||||
color: var(--text-title);
|
||||
}
|
||||
|
||||
@keyframes orientation-spin {
|
||||
0%, 100% { transform: rotate(0deg); }
|
||||
50% { transform: rotate(90deg); }
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .nav-toggle {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .header-bar {
|
||||
grid-template-columns: auto 1fr;
|
||||
grid-template-areas:
|
||||
"toggle tools"
|
||||
"user user";
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .nav-toggle { grid-area: toggle; }
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .header-tools { grid-area: tools; justify-content: flex-end; }
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .user-bar {
|
||||
grid-area: user;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .site-header {
|
||||
padding: .75rem .75rem .65rem;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .site-title {
|
||||
font-size: 1.05rem;
|
||||
margin-bottom: .5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .site-title-sub {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .site-nav {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: min(86vw, 320px);
|
||||
height: 100dvh;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
justify-content: flex-start;
|
||||
gap: .35rem;
|
||||
padding: calc(var(--safe-top) + 3.5rem) 1rem 1.5rem;
|
||||
background: var(--card-bg);
|
||||
border-right: 1px solid var(--card-border);
|
||||
box-shadow: var(--shadow-card-hover);
|
||||
z-index: 100;
|
||||
transform: translateX(-105%);
|
||||
transition: transform .28s ease;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .site-nav.open {
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
html[data-layout="phone"]:not([data-mobile="1"]):not(.layout-phone) .site-nav a {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
padding: .75rem 1rem;
|
||||
font-size: .9rem;
|
||||
min-height: var(--touch-min);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .main {
|
||||
padding: .75rem .65rem 1.1rem;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .split-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: .85rem;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .split-grid .card,
|
||||
html[data-layout="phone"] .trade-split .card {
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .trade-top-bar-main {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: .35rem;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .trade-session-clock {
|
||||
display: block;
|
||||
font-size: .72rem;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .session-clock-detail {
|
||||
display: block;
|
||||
margin-top: .15rem;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .trade-top-hint {
|
||||
font-size: .68rem;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .pos-metrics {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .pos-card-head {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .pos-card-actions {
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .rec-sort-bar {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .rec-sort-bar select {
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] #recommend .trade-table-wrap {
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
max-height: 52vh;
|
||||
}
|
||||
|
||||
html[data-layout="phone"] .strategy-preview-table {
|
||||
font-size: .68rem;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .site-header {
|
||||
padding: .85rem 1rem .75rem;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .site-title {
|
||||
font-size: 1.35rem;
|
||||
margin-bottom: .85rem;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .site-nav {
|
||||
flex-wrap: nowrap;
|
||||
overflow-x: auto;
|
||||
justify-content: flex-start;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
scrollbar-width: none;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .site-nav::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .site-nav a {
|
||||
flex-shrink: 0;
|
||||
padding: .48rem .75rem;
|
||||
font-size: .8rem;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .main {
|
||||
padding: 1rem .85rem;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .split-grid,
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .trade-split {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 1rem;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .split-grid .card,
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .trade-split .card {
|
||||
min-height: 380px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .trade-form-line.line-3 {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .trade-form-line.line-3 .trade-field:first-child {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .pos-metrics {
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .trade-top-bar {
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .trade-top-bar-actions {
|
||||
width: auto;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .strategy-page .split-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
html[data-layout="tablet"][data-orientation="landscape"] .strategy-page .split-grid .card {
|
||||
min-height: 420px;
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
/* Copyright (c) 2025-2026 马建军. All rights reserved. 专有软件,详见 LICENSE.zh-CN.txt */
|
||||
/* 科技感增强层 — 与 base.html 变量配合 */
|
||||
|
||||
.tech-bg{
|
||||
position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;
|
||||
}
|
||||
.tech-grid{
|
||||
position:absolute;inset:0;
|
||||
background-image:
|
||||
linear-gradient(var(--bg-grid) 1px,transparent 1px),
|
||||
linear-gradient(90deg,var(--bg-grid) 1px,transparent 1px);
|
||||
background-size:32px 32px;
|
||||
mask-image:radial-gradient(ellipse 85% 75% at 50% 35%,#000 20%,transparent 75%);
|
||||
}
|
||||
.tech-glow{
|
||||
position:absolute;width:70vmax;height:70vmax;
|
||||
top:-25%;left:50%;transform:translateX(-50%);
|
||||
background:radial-gradient(circle,var(--ambient-glow) 0%,transparent 65%);
|
||||
animation:tech-pulse 8s ease-in-out infinite;
|
||||
}
|
||||
.tech-glow-2{
|
||||
position:absolute;width:50vmax;height:50vmax;
|
||||
bottom:-20%;right:-10%;
|
||||
background:radial-gradient(circle,var(--ambient-glow-2) 0%,transparent 70%);
|
||||
animation:tech-pulse 10s ease-in-out infinite reverse;
|
||||
}
|
||||
.tech-scanline{
|
||||
position:absolute;inset:0;
|
||||
background:repeating-linear-gradient(
|
||||
0deg,
|
||||
transparent,
|
||||
transparent 2px,
|
||||
var(--scanline) 2px,
|
||||
var(--scanline) 3px
|
||||
);
|
||||
opacity:.35;
|
||||
animation:tech-scan 12s linear infinite;
|
||||
}
|
||||
@keyframes tech-pulse{
|
||||
0%,100%{opacity:.55;transform:translateX(-50%) scale(1)}
|
||||
50%{opacity:.85;transform:translateX(-50%) scale(1.05)}
|
||||
}
|
||||
@keyframes tech-scan{
|
||||
0%{transform:translateY(0)}
|
||||
100%{transform:translateY(32px)}
|
||||
}
|
||||
@keyframes tech-shine{
|
||||
0%,100%{opacity:.45}
|
||||
50%{opacity:.9}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce){
|
||||
.tech-glow,.tech-glow-2,.tech-scanline,.card::after,.site-header::after{animation:none}
|
||||
}
|
||||
|
||||
.main.nav-loading{opacity:.75;pointer-events:none;transition:opacity .12s}
|
||||
|
||||
.page-wrap{position:relative;z-index:1}
|
||||
|
||||
.site-header{
|
||||
border-bottom:1px solid var(--border-header);
|
||||
background:transparent;
|
||||
backdrop-filter:none;
|
||||
}
|
||||
.site-header::after{
|
||||
content:"";display:block;height:1px;margin-top:-1px;
|
||||
background:linear-gradient(90deg,transparent,var(--accent),var(--accent-2),transparent);
|
||||
opacity:.7;animation:tech-shine 4s ease-in-out infinite;
|
||||
}
|
||||
.site-title{
|
||||
letter-spacing:.04em;
|
||||
background:linear-gradient(135deg,var(--text-title) 0%,var(--accent) 45%,var(--accent-2) 100%);
|
||||
-webkit-background-clip:text;-webkit-text-fill-color:transparent;
|
||||
background-clip:text;
|
||||
filter:drop-shadow(0 0 24px var(--title-glow));
|
||||
}
|
||||
.site-title-sub{
|
||||
display:block;font-size:.72rem;font-weight:500;
|
||||
letter-spacing:.12em;text-transform:uppercase;
|
||||
color:var(--text-muted);margin-top:.4rem;
|
||||
-webkit-text-fill-color:var(--text-muted);
|
||||
filter:none;
|
||||
}
|
||||
|
||||
.site-nav a{
|
||||
border-radius:999px;
|
||||
letter-spacing:.02em;
|
||||
position:relative;overflow:hidden;
|
||||
transition:transform .2s,box-shadow .2s,border-color .2s,background .2s;
|
||||
}
|
||||
.site-nav a::before{
|
||||
content:"";position:absolute;inset:0;
|
||||
background:linear-gradient(120deg,transparent,rgba(255,255,255,.06),transparent);
|
||||
opacity:0;transition:opacity .25s;
|
||||
}
|
||||
.site-nav a:hover::before{opacity:1}
|
||||
.site-nav a:hover{
|
||||
transform:translateY(-1px);
|
||||
box-shadow:0 4px 20px var(--nav-hover-glow);
|
||||
}
|
||||
.site-nav a.active{
|
||||
background:linear-gradient(135deg,var(--nav-active),var(--accent-2));
|
||||
border-color:transparent;
|
||||
box-shadow:0 0 20px var(--nav-active-glow),inset 0 1px 0 rgba(255,255,255,.15);
|
||||
}
|
||||
|
||||
.theme-switch-btn:hover{
|
||||
color:var(--text-primary);
|
||||
}
|
||||
.theme-switch-btn.active{
|
||||
box-shadow:0 0 12px var(--btn-glow);
|
||||
}
|
||||
|
||||
.card{
|
||||
border-radius:14px;
|
||||
transition:transform .25s,box-shadow .25s,border-color .25s;
|
||||
}
|
||||
.card:hover{
|
||||
transform:translateY(-2px);
|
||||
border-color:var(--card-border-hover);
|
||||
box-shadow:var(--shadow-card-hover);
|
||||
}
|
||||
.card::after{
|
||||
animation:tech-shine 5s ease-in-out infinite;
|
||||
}
|
||||
.card h2{letter-spacing:.03em}
|
||||
.card h2:before{
|
||||
box-shadow:0 0 12px var(--accent),0 0 4px var(--accent-2);
|
||||
}
|
||||
|
||||
input:focus,select:focus,textarea:focus{
|
||||
box-shadow:0 0 0 3px var(--focus-ring),0 0 16px var(--focus-glow);
|
||||
}
|
||||
button.btn-primary{
|
||||
font-weight:600;letter-spacing:.04em;
|
||||
box-shadow:0 4px 20px var(--btn-glow);
|
||||
transition:transform .15s,box-shadow .2s,opacity .2s;
|
||||
}
|
||||
button.btn-primary:hover{
|
||||
transform:translateY(-1px);
|
||||
box-shadow:0 6px 28px var(--btn-glow-strong);
|
||||
opacity:1;
|
||||
}
|
||||
|
||||
.list-item{
|
||||
transition:border-color .2s,box-shadow .2s,transform .2s;
|
||||
}
|
||||
.list-item:hover{
|
||||
border-color:var(--card-border-hover);
|
||||
box-shadow:0 4px 16px var(--card-glow);
|
||||
}
|
||||
table tbody tr{transition:background .15s}
|
||||
table tbody tr:hover{background:var(--row-hover)}
|
||||
|
||||
.stat-item{
|
||||
backdrop-filter:blur(8px);
|
||||
transition:transform .2s,box-shadow .2s;
|
||||
}
|
||||
.stat-item:hover{
|
||||
transform:translateY(-2px);
|
||||
box-shadow:0 8px 24px var(--card-glow);
|
||||
}
|
||||
.stat-item .value{
|
||||
font-variant-numeric:tabular-nums;
|
||||
letter-spacing:.02em;
|
||||
}
|
||||
|
||||
.pos-card{
|
||||
position:relative;overflow:visible;
|
||||
transition:border-color .2s,box-shadow .2s;
|
||||
}
|
||||
.pos-card::before{
|
||||
content:"";position:absolute;top:0;left:0;right:0;height:2px;
|
||||
background:linear-gradient(90deg,var(--accent),var(--accent-2));
|
||||
opacity:.5;
|
||||
}
|
||||
.pos-card:hover{
|
||||
border-color:var(--card-border-hover);
|
||||
box-shadow:0 6px 24px var(--card-glow);
|
||||
}
|
||||
|
||||
.badge{letter-spacing:.02em;border:1px solid transparent}
|
||||
.badge.dir{border-color:rgba(76,194,255,.25)}
|
||||
.badge.profit{border-color:rgba(76,217,127,.3)}
|
||||
.badge.loss{border-color:rgba(255,102,102,.3)}
|
||||
|
||||
.modal-box{
|
||||
border:1px solid var(--card-border-hover);
|
||||
box-shadow:var(--shadow-card-hover),0 0 60px var(--card-glow);
|
||||
}
|
||||
|
||||
.flash{
|
||||
box-shadow:0 0 24px var(--focus-glow);
|
||||
letter-spacing:.02em;
|
||||
}
|
||||
|
||||
.profile-spec{
|
||||
border:1px solid var(--card-border-hover);
|
||||
box-shadow:inset 0 0 40px var(--card-glow);
|
||||
}
|
||||
|
||||
.key-live .live-price-line,.live-price{
|
||||
text-shadow:0 0 12px var(--focus-glow);
|
||||
}
|
||||
|
||||
.preset-tabs a.active{
|
||||
box-shadow:0 0 12px var(--focus-glow);
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
/* Copyright (c) 2025-2026 马建军. All rights reserved. 专有软件,详见 LICENSE.zh-CN.txt */
|
||||
/* 持仓监控页 — 与 split-grid(关键位监控)同宽,全端自适应 */
|
||||
.trade-page{width:100%}
|
||||
.trade-split{margin-bottom:1.25rem}
|
||||
.trade-split .card{min-height:360px}
|
||||
.trade-split .trade-card#order{margin-bottom:.75rem}
|
||||
.trading-live-body{gap:0}
|
||||
.trading-live-section{padding-bottom:.5rem}
|
||||
.trading-live-section.trading-live-positions{
|
||||
margin-top:.65rem;padding-top:.75rem;border-top:1px solid var(--card-border);
|
||||
}
|
||||
.trading-live-subtitle{
|
||||
font-size:.82rem;font-weight:600;color:var(--text-muted);
|
||||
margin:0 0 .45rem .15rem;letter-spacing:.02em;
|
||||
}
|
||||
.sync-badge{font-size:.72rem;font-weight:400;margin-left:.35rem}
|
||||
.trade-top-bar{
|
||||
display:flex;flex-wrap:wrap;gap:.65rem 1rem;
|
||||
align-items:center;justify-content:space-between;
|
||||
margin-bottom:1.25rem;
|
||||
}
|
||||
.trade-top-bar-main{display:flex;flex-wrap:wrap;gap:.5rem .65rem;align-items:center;flex:1;min-width:0}
|
||||
.trade-top-bar-actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
|
||||
.trade-top-hint{font-size:.72rem;white-space:nowrap}
|
||||
.trade-session-clock{font-size:.78rem;line-height:1.45}
|
||||
.session-clock-detail strong{color:var(--accent);font-weight:600}
|
||||
.btn-ctp-sm{padding:.4rem .9rem;font-size:.8rem;width:auto;white-space:nowrap}
|
||||
.trade-card{margin-bottom:0;height:100%;display:flex;flex-direction:column}
|
||||
.trade-card h2{margin-bottom:.35rem;flex-shrink:0}
|
||||
.trade-card .card-body{flex:1;min-height:0;display:flex;flex-direction:column}
|
||||
.trade-card-full{margin-bottom:1.5rem}
|
||||
.pos-hint{font-size:.75rem;margin:-.15rem 0 .5rem .25rem;color:var(--text-muted)}
|
||||
.trade-order-status{display:grid;gap:.55rem;margin:.5rem 0 .75rem;padding:.65rem .85rem;background:var(--card-inner);border:1px solid var(--card-border);border-radius:8px;font-size:.82rem}
|
||||
.trade-order-status-compact{margin-top:0}
|
||||
.trade-order-status .status-row{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .65rem}
|
||||
.trade-form-rows{display:flex;flex-direction:column;gap:.75rem;margin-bottom:.85rem}
|
||||
.trade-form-line{display:grid;gap:.65rem;align-items:end}
|
||||
.trade-form-line.line-3{grid-template-columns:1.4fr 0.8fr 0.8fr}
|
||||
.trade-field label{display:block;font-size:.72rem;margin-bottom:.28rem;color:var(--text-label)}
|
||||
.symbol-wrap.trade-field>label.text-label{display:flex;align-items:baseline;flex-wrap:wrap;gap:.35rem}
|
||||
.trade-field select,.trade-field input{width:100%;box-sizing:border-box}
|
||||
.trade-field .lots-auto{color:var(--accent);font-weight:600;background:var(--card-inner);cursor:default}
|
||||
.lots-warn{font-size:.7rem;margin-top:.25rem;margin-bottom:0}
|
||||
.price-type-tabs{display:flex;gap:.35rem;margin-bottom:.35rem}
|
||||
.price-tab{border:1px solid var(--card-border);background:var(--card-inner);color:var(--text-muted);padding:.28rem .7rem;border-radius:6px;font-size:.75rem;cursor:pointer;flex:1;text-align:center;width:auto}
|
||||
.price-tab.active{border-color:var(--accent);color:var(--accent);font-weight:600;background:rgba(56,189,248,.08)}
|
||||
.market-hint{font-size:.7rem;margin-top:.25rem}
|
||||
.trade-action-row{display:flex;flex-direction:column;gap:.45rem;margin:.85rem 0 .55rem}
|
||||
.trade-action-row .btn-open{padding:.65rem .75rem;font-size:.9rem;width:100%}
|
||||
.trade-action-row .btn-open:disabled{opacity:.45;cursor:not-allowed;filter:grayscale(.25)}
|
||||
.trade-action-row .btn-open.btn-session-off{background:var(--text-muted);border-color:var(--text-muted)}
|
||||
.trailing-be-toggle{display:flex;align-items:center;gap:.4rem;font-size:.78rem;color:var(--text-label);margin-bottom:.45rem;cursor:pointer;user-select:none}
|
||||
.trailing-be-toggle input{width:auto;margin:0}
|
||||
.trailing-be-hint{font-size:.72rem;margin:0;color:var(--text-muted)}
|
||||
.trade-form-line.line-3 #field-tp.is-hidden{display:none}
|
||||
.trade-rr-hint{font-size:.78rem;color:var(--text-accent);margin:0}
|
||||
.session-hint{font-size:.72rem;margin:.35rem 0 0;text-align:center}
|
||||
.trade-order-msg{font-size:.82rem;text-align:center;margin:0;padding:.35rem}
|
||||
.trade-order-msg.ok{color:var(--profit)}
|
||||
.trade-order-msg.err{color:var(--loss)}
|
||||
.trade-footer{background:var(--card-inner);border-radius:8px;padding:.65rem .85rem;font-size:.78rem;line-height:1.5;border:1px solid var(--card-border);margin-top:.5rem}
|
||||
.trade-footer strong{color:var(--accent)}
|
||||
.rec-blocked td{opacity:.55}
|
||||
.rec-ok td:first-child{font-weight:600}
|
||||
.rec-trend-break td:first-child .trend-name{font-weight:700}
|
||||
.trend-badge{font-size:.72rem;white-space:nowrap}
|
||||
.trend-badge.break{color:var(--accent);font-weight:700;border:1px solid var(--accent);background:rgba(56,189,248,.12)}
|
||||
.trend-hint{font-size:.72rem;color:var(--text-muted);margin:.35rem 0 .65rem;line-height:1.5}
|
||||
.rec-sort-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem .65rem;margin-bottom:.55rem;font-size:.78rem}
|
||||
.rec-sort-bar label{color:var(--text-muted);white-space:nowrap}
|
||||
.rec-sort-bar select{padding:.35rem .5rem;font-size:.78rem;min-width:7rem}
|
||||
.rec-stats{
|
||||
font-size:.78rem;color:var(--text-muted);margin-bottom:.45rem;line-height:1.5;
|
||||
}
|
||||
.rec-stats strong{color:var(--accent);font-weight:600}
|
||||
.rec-sort-dir-btn{
|
||||
border:1px solid var(--card-border);background:var(--card-inner);color:var(--text-muted);
|
||||
padding:.3rem .55rem;border-radius:6px;cursor:pointer;font-size:.78rem;min-width:2rem;
|
||||
}
|
||||
.rec-sort-dir-btn:hover{border-color:var(--accent);color:var(--accent)}
|
||||
.gap-badge{font-size:.72rem}
|
||||
.rec-market-link{color:inherit;text-decoration:none;display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:.2rem .35rem}
|
||||
.rec-market-link:hover strong,.rec-market-link:hover .text-accent{color:var(--accent);text-decoration:underline}
|
||||
.pos-market-link{color:inherit;text-decoration:none}
|
||||
.pos-market-link:hover{color:var(--accent)}
|
||||
.pos-market-link:hover .text-accent{text-decoration:underline}
|
||||
.pos-symbol-sub{font-size:.72rem;line-height:1.35}
|
||||
.pos-main-badge{font-size:.68rem;vertical-align:middle}
|
||||
.pos-change-up{color:var(--profit)}
|
||||
.rec-change-down{color:var(--loss)}
|
||||
#recommend .trade-table-wrap{max-height:none;overflow:visible}
|
||||
#recommend.card{height:auto}
|
||||
#recommend .card-body{display:flex;flex-direction:column}
|
||||
#recommend .trade-table-wrap{flex:0 0 auto}
|
||||
#trading-live.card,
|
||||
.trade-split .trade-card#trading-live {
|
||||
overflow: visible;
|
||||
}
|
||||
#position-live-list {
|
||||
overflow: visible;
|
||||
}
|
||||
#trading-live .trading-live-body.card-scroll {
|
||||
flex: 1;
|
||||
max-height: none;
|
||||
overflow-y: visible;
|
||||
}
|
||||
|
||||
/* 电脑端:右侧委托面板随内容增高;平板见下方等高规则 */
|
||||
@media (min-width: 768px) {
|
||||
html:not([data-layout="phone"]):not(.layout-phone):not([data-layout="tablet"]):not(.layout-tablet) .trade-split .card-body {
|
||||
overflow: visible;
|
||||
}
|
||||
html:not([data-layout="phone"]):not(.layout-phone):not([data-layout="tablet"]):not(.layout-tablet) .trade-split .trade-card#trading-live {
|
||||
height: auto;
|
||||
min-height: auto;
|
||||
align-self: start;
|
||||
}
|
||||
html:not([data-layout="phone"]):not(.layout-phone):not([data-layout="tablet"]):not(.layout-tablet) .trade-split .trade-card#trading-live .trading-live-body {
|
||||
overflow: visible;
|
||||
flex: none;
|
||||
}
|
||||
html:not([data-layout="phone"]):not(.layout-phone):not([data-layout="tablet"]):not(.layout-tablet) #position-live-list.pos-list-many {
|
||||
--pos-card-unit-h: 17.5rem;
|
||||
max-height: calc(var(--pos-card-unit-h) * 3 + 1.5rem);
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
padding-right: .15rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* 平板:期货下单与委托持仓两列卡片等高 */
|
||||
html[data-layout="tablet"] .trade-split,
|
||||
html.layout-tablet .trade-split {
|
||||
align-items: stretch;
|
||||
}
|
||||
html[data-layout="tablet"] .trade-split .trade-card#order,
|
||||
html[data-layout="tablet"] .trade-split .trade-card#trading-live,
|
||||
html.layout-tablet .trade-split .trade-card#order,
|
||||
html.layout-tablet .trade-split .trade-card#trading-live {
|
||||
height: 100%;
|
||||
min-height: 380px;
|
||||
align-self: stretch;
|
||||
}
|
||||
html[data-layout="tablet"] .trade-split .trade-card#order .card-body,
|
||||
html.layout-tablet .trade-split .trade-card#order .card-body {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
html[data-layout="tablet"] .trade-split .trade-card#trading-live .trading-live-body,
|
||||
html.layout-tablet .trade-split .trade-card#trading-live .trading-live-body {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
html[data-layout="tablet"] #position-live-list,
|
||||
html.layout-tablet #position-live-list {
|
||||
overflow: visible;
|
||||
}
|
||||
html[data-layout="tablet"] #position-live-list.pos-list-many,
|
||||
html.layout-tablet #position-live-list.pos-list-many {
|
||||
--pos-card-unit-h: 17.5rem;
|
||||
max-height: calc(var(--pos-card-unit-h) * 3 + 1.5rem);
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
padding-right: .15rem;
|
||||
}
|
||||
|
||||
.dash-be-badge,
|
||||
.pos-be-badge {
|
||||
font-size: .66rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.pos-pending-orders{margin-top:.55rem;padding-top:.55rem;border-top:1px dashed var(--table-border)}
|
||||
.pos-pending-orders .pending-title{font-size:.68rem;color:var(--text-muted);margin-bottom:.35rem}
|
||||
.pos-pending-item{display:flex;justify-content:space-between;align-items:center;gap:.5rem;font-size:.75rem;padding:.35rem .5rem;border-radius:6px;margin-bottom:.25rem;background:var(--list-item-bg)}
|
||||
.pos-pending-right{display:flex;align-items:center;gap:.45rem;flex-shrink:0}
|
||||
.pos-dismiss-btn{padding:.2rem .55rem;font-size:.68rem;border-radius:6px;border:1px solid var(--table-border);background:var(--card-inner);color:var(--text-muted);cursor:pointer;width:auto;min-height:auto;line-height:1.3}
|
||||
.pos-dismiss-btn:disabled{opacity:.55;cursor:wait}
|
||||
.pos-sl-btn{border-color:var(--accent);color:var(--accent)}
|
||||
.pos-pending-item.sl{border-left:3px solid var(--loss)}
|
||||
.pos-pending-item.tp{border-left:3px solid var(--profit)}
|
||||
.pos-pending-item.ctp{border-left:3px solid var(--accent)}
|
||||
.pos-card.is-pending{border:1px dashed var(--accent);opacity:.95}
|
||||
.pos-card.is-pending .badge.pending{background:rgba(56,189,248,.15);color:var(--accent)}
|
||||
.pos-card.is-pending .pos-metrics .cell.pnl-pending label{color:var(--accent)}
|
||||
.pos-close-btn{padding:.4rem .85rem;font-size:.78rem;border-radius:8px;border:1px solid var(--loss);background:var(--loss-bg);color:var(--loss);cursor:pointer;white-space:nowrap;width:auto;flex-shrink:0;min-height:36px}
|
||||
.pos-close-btn:disabled,.pos-close-btn.is-session-off{opacity:.45;cursor:not-allowed;border-color:var(--text-muted);background:var(--card-inner);color:var(--text-muted)}
|
||||
.pos-dismiss-btn:disabled,.pos-dismiss-btn.is-session-off{opacity:.45;cursor:not-allowed;color:var(--text-muted)}
|
||||
.pos-card-meta-line{font-size:.78rem;line-height:1.65;color:var(--text-muted);margin-bottom:.55rem}
|
||||
.pos-card-meta-line strong{color:var(--text)}
|
||||
.pos-card-actions{display:flex;gap:.35rem;flex-shrink:0;align-items:center}
|
||||
.pos-order-btn{padding:.4rem .85rem;font-size:.78rem;border-radius:8px;border:1px solid var(--accent);background:rgba(56,189,248,.1);color:var(--accent);cursor:pointer;white-space:nowrap;width:auto;flex-shrink:0;min-height:36px}
|
||||
.pos-order-btn:disabled,.pos-order-btn.pos-order-done{opacity:.55;cursor:default;border-color:var(--table-border);background:var(--card-inner);color:var(--text-muted)}
|
||||
.pos-order-btn:disabled:not(.pos-order-done){cursor:wait}
|
||||
|
||||
.sl-tp-modal{max-width:420px;width:100%}
|
||||
.sl-tp-modal-fields{display:flex;flex-direction:column;gap:.75rem;margin-bottom:1rem}
|
||||
.sl-tp-modal-fields .trade-field{margin:0}
|
||||
.sl-tp-modal-trailing{margin-top:.15rem}
|
||||
.sl-tp-modal-actions{display:flex;gap:.5rem;justify-content:flex-end}
|
||||
.sl-tp-modal-actions .btn-secondary,.sl-tp-modal-actions .btn-primary{width:auto;min-width:5rem;padding:.45rem 1rem;font-size:.85rem}
|
||||
|
||||
@media (min-width:768px) and (max-width:1100px){
|
||||
.trade-split .card{min-height:420px}
|
||||
.trade-form-line.line-3{grid-template-columns:1fr 1fr}
|
||||
.trade-form-line.line-3 .trade-field:first-child{grid-column:1/-1}
|
||||
}
|
||||
|
||||
@media (max-width:767px){
|
||||
.trade-top-bar{flex-direction:column;align-items:stretch}
|
||||
.trade-top-bar-actions{width:100%}
|
||||
.btn-ctp-sm{width:100%;min-height:44px}
|
||||
.trade-split .card{min-height:auto}
|
||||
html:not([data-mobile="1"]) .trade-form-line.line-3{grid-template-columns:1fr}
|
||||
.trade-card-full{margin-bottom:1rem}
|
||||
.trade-table-wrap{max-height:320px}
|
||||
}
|
||||
Reference in New Issue
Block a user