:root{
  --bg:#f7f8fb;
  --surface:#ffffff;
  --surface-soft:#fafbfc;
  --surface-tint:#f3f5f8;
  --text:#111827;
  --text-2:#344054;
  --muted:#475467;
  --muted-2:#667085;
  --line:#e6e9ef;
  --line-strong:#d8dde6;
  --primary:#2f5bea;
  --primary-strong:#2347c7;
  --primary-soft:#eef3ff;
  --good:#168a55;
  --good-soft:#edf8f2;
  --good-line:#cfeadd;
  --warn:#c77716;
  --warn-soft:#fff7e8;
  --warn-line:#f3dfb8;
  --danger:#c94747;
  --danger-soft:#fff1f1;
  --danger-line:#f1d1d1;
  --shadow:0 12px 36px rgba(16,24,40,.055);
  --shadow-lg:0 28px 80px rgba(16,24,40,.16);
  --radius-sm:10px;
  --radius:14px;
  --radius-lg:20px;
}

*{box-sizing:border-box}
html{min-height:100%}
body{margin:0;min-height:100vh;overflow-x:hidden;background:var(--bg);color:var(--text);font-family:Inter,"PingFang SC","Microsoft YaHei",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
button,input,select{font:inherit}
button{color:inherit}
button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid rgba(47,91,234,.14);outline-offset:2px}
svg{display:block;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.hidden{display:none!important}.muted{color:var(--muted)}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.code{margin-top:4px;color:var(--muted-2);font-size:12px;letter-spacing:.035em;font-variant-numeric:tabular-nums}


/* 浏览器自动填充不应改变输入框配色 */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active{
  -webkit-text-fill-color:#1d2939!important;
  -webkit-box-shadow:0 0 0 1000px #fff inset!important;
  box-shadow:0 0 0 1000px #fff inset!important;
  caret-color:#1d2939;
  transition:background-color 9999s ease-out 0s;
}
.password-control{position:relative;display:flex;align-items:center}
.password-control>input{padding-right:58px!important}
.password-visibility{flex:0 0 auto;height:28px;min-width:46px;padding:0 8px;border:0;border-radius:7px;background:transparent;color:#667085;font-size:10px;font-weight:700;cursor:pointer}
.password-visibility:hover,.password-visibility.revealing{background:#f3f5f7;color:#344054}.password-visibility{user-select:none;-webkit-user-select:none;touch-action:manipulation}
.input-shell .password-visibility{margin-left:auto}

/* ---------- top bar ---------- */
.topbar{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.94);backdrop-filter:saturate(180%) blur(16px);border-bottom:1px solid rgba(230,233,239,.92)}
.topbar-inner{width:min(1240px,calc(100% - 40px));height:68px;margin:0 auto;display:flex;align-items:center;gap:30px}
.brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--text);flex:0 0 auto}
.brand-mark{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:#111827;color:white;box-shadow:0 5px 14px rgba(17,24,39,.12)}
.brand-mark svg{width:20px;height:20px;stroke-width:2}
.brand-text{display:flex;flex-direction:column;line-height:1.08}.brand-text strong{font-size:15px;letter-spacing:.01em}.brand-text small{margin-top:4px;font-size:9px;color:var(--muted-2);text-transform:uppercase;letter-spacing:.12em;font-weight:700}
.top-nav{display:flex;align-self:stretch;align-items:center;gap:4px;margin-right:auto}
.nav-btn{height:36px;padding:0 13px;border:0;border-radius:9px;background:transparent;color:#667085;font-size:13px;font-weight:650;cursor:pointer;transition:.16s ease}
.nav-btn:hover{background:#f5f6f8;color:#1f2937}.nav-btn.active{background:#f0f3f8;color:#111827}
.top-actions{display:flex;align-items:center;gap:12px}
.market-live{display:flex;align-items:center;gap:7px;padding:7px 10px;border-radius:999px;background:#f6faf8;color:#4b6e5c;font-size:11px;font-weight:650;border:1px solid #e3eee8}
.live-dot{width:7px;height:7px;border-radius:50%;background:#23a566;box-shadow:0 0 0 4px rgba(35,165,102,.09)}
.user-card{position:relative}.user-trigger{display:flex;align-items:center;gap:9px;border:0;background:transparent;border-radius:11px;padding:5px 7px;cursor:pointer}.user-trigger:hover{background:#f6f7f9}
.avatar{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:#eef1f6;color:#27364c;font-size:12px;font-weight:800;text-transform:uppercase}
.user-meta{display:flex;flex-direction:column;align-items:flex-start;line-height:1.1}.user-meta strong{font-size:12px;max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-meta small{margin-top:4px;color:var(--muted-2);font-size:9px;text-transform:uppercase;letter-spacing:.08em}
.chevron{width:15px;height:15px;color:var(--muted-2)}
.account-menu{position:absolute;right:0;top:44px;width:148px;padding:6px;background:white;border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 40px rgba(16,24,40,.12)}
.account-menu button{width:100%;border:0;background:transparent;border-radius:8px;padding:9px 10px;text-align:left;font-size:12px;cursor:pointer}.account-menu button:hover{background:#f7f8fa}.danger-text{color:var(--danger)!important}

/* ---------- page ---------- */
.page-shell{width:min(1240px,calc(100% - 40px));margin:0 auto;padding:34px 0 60px}
.page-heading-row{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:22px}
.page-kicker,.section-eyebrow,.form-eyebrow,.login-eyebrow{font-size:10px;font-weight:800;letter-spacing:.14em;color:var(--muted-2);text-transform:uppercase}
.page-heading-row h1{margin:7px 0 0;font-size:27px;line-height:1.2;letter-spacing:-.025em}
.page-time{text-align:right;display:flex;flex-direction:column;gap:4px}.page-time span{font-size:10px;color:var(--muted-2)}.page-time strong{font-size:11px;color:var(--muted);font-weight:600;font-variant-numeric:tabular-nums}
.view{display:none}.view.active{display:block;animation:fadeIn .18s ease}@keyframes fadeIn{from{opacity:.45;transform:translateY(3px)}to{opacity:1;transform:none}}

/* ---------- discipline ---------- */
.discipline-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:24px;padding:18px 20px;background:linear-gradient(100deg,#fbfdfc 0%,#f8fbfa 100%);border:1px solid #dfeae4;border-radius:16px;margin-bottom:16px}
.discipline-main{display:flex;align-items:center;gap:13px;min-width:185px}.discipline-icon{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:var(--good-soft);color:var(--good)}.discipline-icon svg{width:21px;height:21px}
.discipline-label{font-size:11px;color:#6b7e73}.discipline-value{margin-top:2px;font-size:24px;font-weight:800;letter-spacing:-.03em;color:#126b45;font-variant-numeric:tabular-nums}
.discipline-card p{margin:0;color:#6d7c73;font-size:12px;line-height:1.65}

/* ---------- buttons ---------- */
.button{border:0;border-radius:10px;height:38px;padding:0 14px;display:inline-flex;align-items:center;justify-content:center;gap:7px;font-size:12px;font-weight:700;cursor:pointer;transition:.16s ease;white-space:nowrap}
.button svg{width:16px;height:16px}.button:disabled{opacity:.55;cursor:not-allowed}.primary-button{background:#111827;color:#fff}.primary-button:hover{background:#202938;transform:translateY(-1px)}
.secondary-button{background:#f4f6f8;color:#344054;border:1px solid var(--line)}.secondary-button:hover{background:#edf0f4}
.ghost-button{background:#fff;color:#475467;border:1px solid #dde5e0;box-shadow:0 1px 2px rgba(16,24,40,.02)}.ghost-button:hover{border-color:#ccd8d1;background:#fbfcfb}
.refresh-button{overflow:visible}.refresh-button .refresh-icon{width:18px;height:18px;flex:0 0 18px;stroke-width:2;overflow:visible}
.danger-button{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger-line)}
.small{height:30px;padding:0 10px;border:1px solid var(--line);background:#fff;border-radius:8px;font-size:11px;font-weight:650;cursor:pointer}.small:hover{background:#f8f9fb}.small.primary{border-color:#dbe2f6;background:#f4f6fc;color:#314fb7}.small.danger{border-color:var(--danger-line);background:var(--danger-soft);color:var(--danger)}

/* ---------- overview stats ---------- */
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);background:var(--surface);border:1px solid var(--line);border-radius:16px;margin-bottom:16px;overflow:hidden}
.stat-card{position:relative;padding:18px 20px;min-height:102px}.stat-card:not(:last-child){border-right:1px solid var(--line)}.stat-card span{display:block;color:var(--muted);font-size:11px}.stat-card strong{display:block;margin-top:7px;font-size:27px;line-height:1;font-weight:760;letter-spacing:-.03em;font-variant-numeric:tabular-nums}.stat-card small{display:block;margin-top:9px;color:var(--muted-2);font-size:10px}.stat-card.highlight strong{color:var(--good)}.stat-card.highlight:after{content:"";position:absolute;top:18px;right:18px;width:7px;height:7px;border-radius:50%;background:#38a873}

/* ---------- market card ---------- */
.market-card,.panel{background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:0 2px 10px rgba(16,24,40,.018);overflow:hidden}
.market-card-head{padding:19px 20px 15px;display:flex;align-items:center;justify-content:space-between;gap:20px}.market-card-head h2,.section-heading h2{margin:0;font-size:17px;letter-spacing:-.015em}.market-card-head p,.section-heading p{margin:5px 0 0;color:var(--muted);font-size:11px;line-height:1.55}
.compact-check{display:flex;align-items:center;gap:8px;font-size:11px;color:#536070;font-weight:650;cursor:pointer;user-select:none}.compact-check input{position:absolute;opacity:0}.check-ui{width:30px;height:17px;border-radius:999px;background:#e7eaf0;position:relative;transition:.18s ease}.check-ui:after{content:"";position:absolute;top:3px;left:3px;width:11px;height:11px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(16,24,40,.16);transition:.18s ease}.compact-check input:checked+.check-ui{background:#72b991}.compact-check input:checked+.check-ui:after{transform:translateX(13px)}
.filter-area{padding:12px 20px 14px;border-top:1px solid #f0f2f5;display:flex;align-items:center;gap:18px;justify-content:space-between}.index-filter-row{display:flex;align-items:center;gap:4px;min-width:0;overflow-x:auto;scrollbar-width:none}.index-filter-row::-webkit-scrollbar{display:none}.index-filter-btn{flex:0 0 auto;height:30px;padding:0 10px;border:0;border-radius:8px;background:transparent;color:#667085;font-size:11px;font-weight:600;cursor:pointer}.index-filter-btn:hover{background:#f5f6f8;color:#344054}.index-filter-btn.active{background:var(--primary);color:#fff;font-weight:760;box-shadow:0 2px 7px rgba(47,91,234,.20)}.index-filter-btn.active:hover{background:var(--primary-strong);color:#fff}
.search-box{height:34px;width:230px;flex:0 0 230px;border:1px solid var(--line);border-radius:9px;background:#fafbfc;display:flex;align-items:center;gap:8px;padding:0 10px}.search-box:focus-within{border-color:#bdc9eb;box-shadow:0 0 0 3px rgba(47,91,234,.07);background:white}.search-box svg{width:14px;height:14px;color:#98a2b3}.search-box input{width:100%;border:0;background:transparent;outline:0;color:#344054;font-size:11px}.search-box input::placeholder{color:#a7aebb}

/* ---------- table ---------- */
.table-wrap{overflow:auto}.table-wrap table{width:100%;border-collapse:collapse;min-width:940px}.table-wrap th{height:40px;padding:0 14px;background:#fafbfc;border-top:1px solid #f0f2f5;border-bottom:1px solid var(--line);text-align:left;color:#7a8494;font-size:10px;font-weight:700;white-space:nowrap}.table-wrap td{padding:12px 14px;border-bottom:1px solid #f0f2f5;color:#344054;font-size:11px;vertical-align:middle}.table-wrap tbody tr:last-child td{border-bottom:0}.table-wrap tbody tr:hover td{background:#fcfcfd}.numeric{text-align:right!important;font-variant-numeric:tabular-nums}.price-value{font-weight:720;color:#1d2939!important}
.etf-cell{display:flex;align-items:center;gap:10px;min-width:175px}.etf-symbol{width:34px;height:34px;border-radius:10px;background:#f0f2f5;color:#4b5565;display:grid;place-items:center;font-size:10px;font-weight:800;letter-spacing:.02em;flex:0 0 auto}.etf-name{font-size:12px;font-weight:700;color:#1d2939;white-space:nowrap}.star{border:0;background:transparent;font-size:19px;line-height:1;color:#cbd0d9;cursor:pointer;padding:2px 4px}.star:hover{color:#dfad43}.star.on{color:#dfa72c}
.index-tag{display:inline-flex;align-items:center;height:24px;padding:0 8px;border-radius:7px;background:#f4f5f7;color:#5f6978;font-size:10px;font-weight:650;white-space:nowrap}
.premium-pill,.premium{font-variant-numeric:tabular-nums;font-weight:760}.premium-pill{display:inline-flex;align-items:center;justify-content:center;min-width:63px;height:27px;padding:0 9px;border-radius:8px;border:1px solid transparent;font-size:11px}.premium-pill.low,.premium.low{color:var(--good)}.premium-pill.low{background:var(--good-soft);border-color:var(--good-line)}.premium-pill.watch,.premium.watch{color:var(--warn)}.premium-pill.watch{background:var(--warn-soft);border-color:var(--warn-line)}.premium-pill.high,.premium.high{color:var(--danger)}.premium-pill.high{background:var(--danger-soft);border-color:var(--danger-line)}
.alert-inline{display:flex;flex-direction:column;gap:3px}.alert-inline strong{color:#344054;font-size:10px;font-variant-numeric:tabular-nums}.alert-inline span{color:#98a2b3;font-size:9px}.row-action{text-align:right;white-space:nowrap}

/* ---------- section pages ---------- */
.section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:22px;margin:6px 0 16px}.section-heading h2{margin-top:6px;font-size:22px}.count-chip{display:inline-flex;align-items:center;height:30px;padding:0 10px;border:1px solid var(--line);border-radius:999px;background:white;color:#667085;font-size:10px;font-weight:650}

/* ---------- alert cards ---------- */
.alert-list{display:grid;gap:10px}.alert-card{display:grid;grid-template-columns:minmax(220px,1.4fr) repeat(3,minmax(105px,.75fr)) auto;align-items:center;gap:18px;padding:16px 18px;background:white;border:1px solid var(--line);border-radius:14px}.alert-card:hover{border-color:#d9dee7;box-shadow:0 4px 18px rgba(16,24,40,.035)}.alert-main{display:flex;align-items:center;gap:10px}.alert-metric{display:flex;flex-direction:column;gap:5px}.alert-metric label{font-size:9px;color:#98a2b3}.alert-metric strong{font-size:13px;font-variant-numeric:tabular-nums}.threshold-distance.reached{color:var(--good)}.threshold-distance.positive{color:#667085}.actions{display:flex;align-items:center;gap:7px;justify-content:flex-end;flex-wrap:wrap}
.badge{display:inline-flex;align-items:center;justify-content:center;min-height:23px;padding:0 8px;border-radius:7px;background:#f2f4f7;color:#667085;font-size:9px;font-weight:700;white-space:nowrap}.badge.on{background:var(--good-soft);color:var(--good)}.badge.admin{background:var(--primary-soft);color:#4260bd}

/* ---------- admin ---------- */
.admin-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}.mini-stat{padding:14px 16px;background:white;border:1px solid var(--line);border-radius:12px;display:flex;align-items:center;justify-content:space-between}.mini-stat span{font-size:10px;color:#7a8494}.mini-stat strong{font-size:18px;font-variant-numeric:tabular-nums}
.admin-detail{margin-top:16px;padding:20px;background:#fff;border:1px solid var(--line);border-radius:16px}.admin-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.admin-head-info{display:flex;align-items:center;gap:11px}.admin-avatar{width:40px;height:40px;border-radius:12px;background:#eef1f5;display:grid;place-items:center;font-weight:800;color:#475467}.admin-head h2{margin:0;font-size:16px}.admin-head-actions{display:flex;align-items:center;gap:9px}.admin-detail-close{height:31px;padding:0 10px;border:1px solid var(--line);border-radius:8px;background:#f8f9fb;color:#667085;display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:700;cursor:pointer}.admin-detail-close:hover{background:#eef1f4;color:#344054}.admin-detail-close svg{width:14px;height:14px}
.tabs{display:flex;gap:4px;padding:4px;background:#f5f6f8;border-radius:10px;width:max-content;max-width:100%;margin-bottom:16px}.tabs button{border:0;background:transparent;color:#667085;border-radius:7px;padding:7px 11px;font-size:10px;font-weight:650;cursor:pointer}.tabs button.active{background:white;color:#1d2939;box-shadow:0 1px 3px rgba(16,24,40,.08)}.admin-toolbar{display:flex;justify-content:flex-end;margin-bottom:10px}
.device-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.device-card{padding:14px;border:1px solid var(--line);border-radius:12px;background:#fff;display:flex;align-items:center;justify-content:space-between;gap:14px}.device-main{display:flex;align-items:center;gap:10px;min-width:0}.device-icon{width:35px;height:35px;border-radius:10px;background:#f3f5f7;color:#667085;display:grid;place-items:center}.device-icon svg{width:18px;height:18px}.device-info{min-width:0}.device-info b{display:block;font-size:11px}.device-key{margin-top:4px;color:#98a2b3;font-size:9px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}

/* ---------- modal ---------- */
.modal{position:fixed;inset:0;z-index:100;background:rgba(17,24,39,.40);backdrop-filter:blur(5px);display:grid;place-items:center;padding:20px}.modal-card{position:relative;display:flex;flex-direction:column;width:min(480px,100%);max-height:min(86vh,760px);overflow:hidden;background:white;border:1px solid rgba(255,255,255,.9);border-radius:18px;box-shadow:var(--shadow-lg);padding:24px}.modal-card.wide{width:min(820px,100%)}.modal-card.mode-compact{width:min(420px,100%)}#modalBody{min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scrollbar-gutter:stable}.modal-x{position:absolute;z-index:8;top:15px;right:15px;width:31px;height:31px;border:0;border-radius:9px;background:#f5f6f8;color:#667085;display:grid;place-items:center;cursor:pointer}.modal-x:hover{background:#eceff2}.modal-x svg{width:16px;height:16px}.modal-title-row{padding-right:34px;margin-bottom:20px}.modal-title-row h2{margin:0;font-size:18px;letter-spacing:-.02em}.modal-title-row p{margin:7px 0 0;color:var(--muted);font-size:10px;line-height:1.6}.modal-open{overflow:hidden!important}
.field{margin-bottom:14px}.field label,.form-field>span{display:block;margin-bottom:7px;color:#475467;font-size:10px;font-weight:700}.form-note{margin-top:-3px;padding:9px 11px;border-radius:9px;background:#f7f8fa;color:#667085;font-size:9px;line-height:1.55}.field input,.field select{width:100%;height:39px;padding:0 11px;border:1px solid var(--line-strong);border-radius:9px;background:#fff;color:#1d2939;outline:0;font-size:11px}.field input:focus,.field select:focus{border-color:#b7c5ed;box-shadow:0 0 0 3px rgba(47,91,234,.07)}.check{display:flex;align-items:center;gap:8px;color:#475467;font-size:10px;cursor:pointer}.check input{accent-color:#475467}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.modal-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:22px}.modal-actions .danger-button:first-child{margin-right:auto}
.detail-header{display:flex;align-items:center;gap:12px;padding-right:38px}.detail-header h2{margin:0;font-size:18px}.detail-header>div>strong{font-size:14px}.detail-symbol{width:46px;height:46px;border-radius:13px;background:#f0f2f5;color:#344054;display:grid;place-items:center;font-weight:800;font-size:12px}.detail-meta{margin-top:5px;display:flex;align-items:center;gap:8px}.detail-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:16px 0}.metric{min-width:0;padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:#fafbfc}.metric span{display:block;color:#98a2b3;font-size:9px;white-space:nowrap}.metric b{display:block;margin-top:5px;font-size:16px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chart-panel{border:1px solid var(--line);border-radius:12px;padding:14px}.chart-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.chart-head strong{font-size:11px}.chart-head span{font-size:9px;color:#98a2b3}.chart-title-group{display:flex;align-items:center;gap:7px;min-width:0}.chart-range-badge{display:inline-flex;align-items:center;justify-content:center;height:22px;min-width:40px;padding:0 7px;border:1px solid #dbe2ef;border-radius:999px;background:#f4f7fb;color:#53657a!important;font-size:9px!important;font-weight:750;font-variant-numeric:tabular-nums;white-space:nowrap}.chart-interactive{position:relative;min-width:0}.chart{width:100%;height:230px;display:block;touch-action:pan-y;cursor:crosshair}.chart-tooltip{position:absolute;z-index:3;min-width:176px;max-width:210px;padding:9px 10px;border:1px solid rgba(208,213,221,.92);border-radius:9px;background:rgba(255,255,255,.96);box-shadow:0 8px 22px rgba(16,24,40,.12);pointer-events:none;backdrop-filter:blur(5px)}.chart-tooltip-time{color:#667085;font-size:9px;font-weight:650;white-space:nowrap}.chart-tooltip-values{display:grid;grid-template-columns:1fr;gap:4px;margin-top:6px}.chart-tooltip-values span{display:flex;align-items:center;justify-content:space-between;gap:12px;color:#98a2b3;font-size:9px;white-space:nowrap}.chart-tooltip-values b{color:#344054;font-size:10px;font-variant-numeric:tabular-nums}.chart-tooltip-values b.premium.low{color:var(--good)}.chart-tooltip-values b.premium.watch{color:var(--warn)}.chart-tooltip-values b.premium.high{color:var(--danger)}.chart-hint{margin-top:7px;color:#98a2b3;font-size:9px;text-align:center}
.empty{padding:48px 20px;text-align:center;background:white;border:1px solid var(--line);border-radius:14px}.empty-icon{width:38px;height:38px;border-radius:11px;background:#f3f5f7;color:#98a2b3;display:grid;place-items:center;margin:0 auto 11px}.empty-icon svg{width:19px;height:19px}.empty strong{display:block;font-size:12px}.empty span{display:block;margin-top:6px;color:#98a2b3;font-size:10px}.toast{position:fixed;z-index:120;left:50%;bottom:28px;transform:translateX(-50%);padding:10px 14px;border-radius:10px;background:#111827;color:#fff;font-size:11px;box-shadow:0 12px 28px rgba(17,24,39,.2)}

/* ---------- login ---------- */
.login-page{min-height:100vh;background:linear-gradient(135deg,#f8f9fb 0%,#f4f6f8 100%);display:flex;flex-direction:column}
.login-top-brand{width:min(1120px,calc(100% - 40px));height:74px;margin:0 auto;display:flex;align-items:center;gap:11px}
.login-shell{width:min(1120px,calc(100% - 40px));margin:auto;display:grid;grid-template-columns:minmax(0,1.05fr) 410px;gap:72px;align-items:center;padding:24px 0 90px}
.login-story{padding:20px 0}.login-story h1{margin:14px 0 18px;font-size:46px;line-height:1.12;letter-spacing:-.045em;font-weight:760}.login-story h1 em{font-style:normal;color:#168a55}.login-story>p{max-width:540px;margin:0;color:#667085;font-size:13px;line-height:1.8}
.legend-card{margin-top:34px;display:grid;grid-template-columns:repeat(3,1fr);max-width:540px;background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden}.legend-card>div{padding:16px 17px}.legend-card>div:not(:last-child){border-right:1px solid var(--line)}.legend-dot{display:block;width:7px;height:7px;border-radius:50%;margin-bottom:12px}.legend-dot.good{background:var(--good)}.legend-dot.warn{background:var(--warn)}.legend-dot.danger{background:var(--danger)}.legend-card strong{display:block;font-size:14px}.legend-card small{display:block;margin-top:5px;color:#98a2b3;font-size:9px}
.login-card{padding:30px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}.login-card-head h2{margin:7px 0 0;font-size:23px;letter-spacing:-.025em}.login-card-head p{margin:7px 0 0;color:#7a8494;font-size:10px;line-height:1.6}.login-form{margin-top:24px}.form-field{display:block;margin-bottom:14px}.input-shell{height:42px;border:1px solid var(--line-strong);border-radius:10px;display:flex;align-items:center;gap:9px;padding:0 11px;background:#fff}.input-shell:focus-within{border-color:#b7c5ed;box-shadow:0 0 0 3px rgba(47,91,234,.07)}.input-shell svg{width:15px;height:15px;color:#98a2b3}.input-shell input{min-width:0;flex:1;width:100%;border:0;outline:0;background:transparent;font-size:11px;color:#1d2939}.input-shell input::placeholder{color:#aab1bd}.login-submit{width:100%;height:42px;margin-top:5px}.message{min-height:18px;margin-top:10px;color:var(--danger);font-size:10px;line-height:1.5}.login-footnote{margin-top:18px;padding-top:16px;border-top:1px solid #f0f2f5;display:flex;align-items:center;gap:7px;color:#98a2b3;font-size:9px}.lock-dot{width:7px;height:7px;border-radius:50%;background:#7cad91}

/* ---------- responsive ---------- */
@media (max-width:980px){
  .topbar-inner{width:min(100% - 28px,1240px);gap:18px}.brand-text small{display:none}.top-nav{gap:1px}.nav-btn{padding:0 9px}.market-live{display:none}.user-meta{display:none}
  .page-shell{width:calc(100% - 28px);padding-top:26px}.discipline-card{grid-template-columns:auto 1fr}.discipline-card .ghost-button{grid-column:1/-1;width:max-content}.stats-grid{grid-template-columns:repeat(2,1fr)}.stat-card:nth-child(2){border-right:0}.stat-card:nth-child(-n+2){border-bottom:1px solid var(--line)}
  .filter-area{align-items:flex-start;flex-direction:column}.search-box{width:100%;flex-basis:auto}.index-filter-row{width:100%}.alert-card{grid-template-columns:1fr 1fr 1fr}.alert-main{grid-column:1/-1}.alert-card .actions{grid-column:1/-1;justify-content:flex-start}.device-grid{grid-template-columns:1fr}
  .login-shell{grid-template-columns:1fr;max-width:520px;gap:26px;padding-bottom:50px}.login-story{text-align:center}.login-story>p,.legend-card{margin-left:auto;margin-right:auto}.login-story h1{font-size:38px}.login-top-brand{justify-content:center}
}
@media (max-width:680px){
  .topbar{position:relative}.topbar-inner{height:auto;min-height:64px;padding:10px 0;display:grid;grid-template-columns:1fr auto;gap:8px}.brand{grid-column:1}.top-actions{grid-column:2;grid-row:1}.top-nav{grid-column:1/-1;grid-row:2;width:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(72px,1fr));gap:4px;padding-top:3px}.nav-btn{width:100%;height:33px;padding:0 6px}
  .page-shell{width:calc(100% - 20px);padding:20px 0 40px}.page-heading-row{align-items:flex-start}.page-heading-row h1{font-size:23px}.page-time{display:none}
  .discipline-card{grid-template-columns:1fr;padding:16px;gap:13px}.discipline-card p{font-size:11px}.discipline-card .ghost-button{grid-column:auto}
  .stats-grid{grid-template-columns:1fr 1fr}.stat-card{padding:15px}.stat-card strong{font-size:23px}.stat-card small{font-size:9px}
  .market-card-head{padding:16px;align-items:flex-start;flex-wrap:wrap}.filter-area{padding:10px 12px 12px}.index-filter-row{margin:0 -2px;display:flex;flex-wrap:wrap;overflow:visible}.index-filter-btn{flex:0 0 auto}.market-card{border-radius:14px}.table-wrap th,.table-wrap td{padding-left:10px;padding-right:10px}
  .section-heading{align-items:flex-start}.section-heading h2{font-size:20px}.section-heading p{max-width:280px}.alert-card{grid-template-columns:1fr 1fr;gap:13px}.alert-main{grid-column:1/-1}.alert-metric:nth-of-type(3){grid-column:1/-1}.admin-stats{grid-template-columns:1fr 1fr}.admin-detail{padding:14px}.admin-head{align-items:flex-start}.admin-head-actions{flex-direction:column;align-items:flex-end}.admin-detail-close{height:30px}.device-card{align-items:flex-start;flex-direction:column}.device-card .actions{width:100%;justify-content:flex-start}
  .modal{padding:max(8px,env(safe-area-inset-top)) 8px max(8px,env(safe-area-inset-bottom));place-items:center}.modal-card,.modal-card.wide{width:100%;max-width:none;border-radius:18px;padding:18px}.modal-card.mode-editor,.modal-card.mode-detail{height:calc(100dvh - 16px - env(safe-area-inset-top) - env(safe-area-inset-bottom));max-height:none}.modal-card.mode-compact{width:min(420px,100%);height:auto;max-height:calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom));border-radius:18px}.modal-card.mode-editor .modal-x,.modal-card.mode-detail .modal-x{top:12px;right:12px;width:44px;height:44px;border-radius:12px}.modal-card.mode-editor .modal-x svg,.modal-card.mode-detail .modal-x svg{width:18px;height:18px}.modal-card.mode-editor .modal-title-row{position:sticky;z-index:5;top:0;margin:-18px -18px 18px;padding:19px 54px 15px 18px;background:rgba(255,255,255,.97);border-bottom:1px solid var(--line);backdrop-filter:blur(10px)}.modal-card.mode-detail .detail-header{position:sticky;z-index:5;top:0;margin:-18px -18px 18px;padding:18px 56px 15px 18px;background:rgba(255,255,255,.97);border-bottom:1px solid var(--line);backdrop-filter:blur(10px)}.modal-card.mode-editor .modal-actions{position:sticky;z-index:5;bottom:0;margin:22px -18px -18px;padding:12px 18px calc(12px + env(safe-area-inset-bottom));background:rgba(255,255,255,.98);border-top:1px solid var(--line);backdrop-filter:blur(10px)}.modal-card.mode-compact .modal-actions{position:static;margin-top:20px;padding:0;background:transparent}.grid2{grid-template-columns:1fr}.field input,.field select,.password-control input{font-size:16px}.field input,.field select{height:44px}.check{min-height:44px;font-size:12px}.detail-metrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.metric{padding:10px 8px;text-align:center}.metric span{font-size:8px}.metric b{font-size:14px}.chart-head{align-items:flex-start;flex-direction:column}.modal-actions{gap:10px}.modal-actions .button{flex:1;min-height:44px}
  .chart{touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
  .chart-interactive{overscroll-behavior:contain}
  .login-top-brand{height:64px}.login-shell{width:calc(100% - 20px);padding:10px 0 32px}.login-story{padding:8px 4px}.login-story h1{font-size:32px}.login-story>p{font-size:11px}.legend-card{margin-top:22px}.legend-card>div{padding:13px 10px}.legend-card strong{font-size:11px}.login-card{padding:22px 18px}.brand-text strong{font-size:14px}
}


/* ---------- mobile data cards ---------- */
.mobile-etf-list,.admin-user-mobile-list,.admin-favorite-mobile-list{display:none}
.mobile-etf-card{min-width:0;padding:10px 11px;background:#fff;border:1px solid #d9dee7;border-radius:11px;box-shadow:0 1px 5px rgba(16,24,40,.035);overflow:hidden}
.mobile-etf-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.mobile-etf-identity{min-width:0;flex:1;display:flex;align-items:center;gap:8px;padding:0;border:0;background:transparent;text-align:left;cursor:pointer}
.mobile-etf-title{min-width:0;display:flex;flex-direction:column;gap:2px}.mobile-etf-title strong{font-size:13px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-etf-title small{color:var(--muted);font-size:9.5px;font-weight:600}
.mobile-head-actions{display:flex;align-items:center;gap:5px;flex:0 0 auto}.mobile-premium-compact{display:flex;align-items:center;gap:5px;white-space:nowrap}.mobile-premium-compact>span{color:var(--muted);font-size:9px;font-weight:650}.mobile-premium-compact .premium-pill{font-size:13px;font-weight:800;padding:4px 7px}
.mobile-metrics{display:grid;grid-template-columns:1fr 1fr;gap:0;margin-top:7px;border-top:1px solid #edf0f3;border-bottom:1px solid #edf0f3}.mobile-metrics>div{display:flex;align-items:baseline;justify-content:space-between;gap:7px;min-width:0;padding:7px 8px}.mobile-metrics>div+div{border-left:1px solid #edf0f3}.mobile-metrics span,.mobile-alert-info>span{color:var(--muted);font-size:9px;font-weight:650}.mobile-metrics strong{font-size:12.5px;font-weight:750;font-variant-numeric:tabular-nums}
.mobile-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:7px;min-height:30px}.mobile-alert-info{min-width:0;display:flex;align-items:center;gap:7px}.mobile-alert-info>div{display:flex;align-items:center;gap:5px;min-width:0}.mobile-alert-rule{font-size:10.5px;font-weight:800}.mobile-alert-info small,.mobile-alert-empty{color:var(--muted);font-size:9px;font-weight:600}.mobile-card-foot .small{height:28px;padding:0 9px;font-size:10px}
.mobile-quote-time{margin-top:5px;padding-top:5px;border-top:1px dashed #edf0f3;color:var(--muted);font-size:8.5px;font-weight:600;line-height:1.25}
.admin-user-mobile-card{padding:14px;background:#fff;border-bottom:1px solid var(--line)}.admin-user-mobile-card:last-child{border-bottom:0}.admin-user-mobile-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.admin-user-mobile-stats{display:grid;grid-template-columns:repeat(3,1fr);margin-top:12px;border:1px solid #edf0f3;border-radius:10px;overflow:hidden}.admin-user-mobile-stats>div{padding:9px;text-align:center}.admin-user-mobile-stats>div+div{border-left:1px solid #edf0f3}.admin-user-mobile-stats span{display:block;color:var(--muted-2);font-size:9px}.admin-user-mobile-stats strong{display:block;margin-top:4px;font-size:14px}.admin-user-mobile-meta{display:flex;justify-content:space-between;gap:8px;margin:10px 0;color:var(--muted-2);font-size:9px}.status-enabled{color:var(--good)}
.admin-favorite-mobile-card{padding:13px 0;border-bottom:1px solid #edf0f3}.admin-favorite-mobile-card:last-child{border-bottom:0}.admin-favorite-mobile-info{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:10px;padding-left:45px}

@media (max-width:760px){
  .mobile-etf-title small,.mobile-metrics span,.mobile-alert-info>span,.mobile-alert-info small,.mobile-alert-empty,.mobile-quote-time{color:#536070}
  .desktop-etf-table,.admin-users-desktop,.admin-favorites-desktop{display:none!important}
  .mobile-etf-list{display:grid;gap:8px;padding:8px;background:#f6f7f9}
  .admin-user-mobile-list,.admin-favorite-mobile-list{display:block}
  .responsive-panel{overflow:hidden}
  .market-card>#marketTable>.mobile-etf-list{border-top:1px solid var(--line)}
}

/* password field wrapper: button stays inside the same visual input */
.field .password-control{width:100%;height:39px;border:1px solid var(--line-strong);border-radius:9px;background:#fff;display:flex;align-items:center;padding-right:5px;overflow:hidden}
.field .password-control:focus-within{border-color:#b7c5ed;box-shadow:0 0 0 3px rgba(47,91,234,.07)}
.field .password-control>input{min-width:0;flex:1;width:auto;height:100%;padding:0 8px 0 11px!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;outline:0!important}
.field .password-control>.password-visibility{margin-left:2px}

@media (max-width:380px){.detail-metrics{gap:4px}.metric{padding:9px 5px}.metric span{font-size:7.5px}.metric b{font-size:12px}.chart-tooltip{min-width:164px;padding:8px 9px}}


/* ---------- v1.3.0 data freshness ---------- */
.quote-time-cell{display:flex;flex-direction:column;align-items:flex-start;gap:5px;min-width:112px}
.freshness-badge{display:inline-flex;align-items:center;gap:5px;width:max-content;max-width:100%;padding:3px 7px;border-radius:999px;border:1px solid #e5e7eb;background:#f8fafc;color:#667085;font-size:8.5px;font-weight:700;line-height:1.2;white-space:nowrap}
.freshness-badge i{width:6px;height:6px;border-radius:50%;background:#98a2b3;flex:0 0 auto}
.freshness-badge.fresh{border-color:#cce8d9;background:#f1faf5;color:#24764c}.freshness-badge.fresh i{background:#2f9d68}
.freshness-badge.acceptable{border-color:#d8e5d0;background:#f7fbf3;color:#5a7b45}.freshness-badge.acceptable i{background:#7da45c}
.freshness-badge.delayed{border-color:#f0dfb3;background:#fff9e9;color:#9a6a12}.freshness-badge.delayed i{background:#d79b2b}
.freshness-badge.stale,.freshness-badge.invalid{border-color:#efc9c9;background:#fff4f4;color:#b24848}.freshness-badge.stale i,.freshness-badge.invalid i{background:#d85b5b}
.freshness-badge.closed{border-color:#e2e7ee;background:#f6f8fa;color:#7b8492}.freshness-badge.closed i{background:#98a2b3}
.detail-freshness{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;color:var(--muted-2);font-size:9px}
.alert-metric .freshness-badge{margin-top:6px}
.mobile-quote-time{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
@media (max-width:680px){.detail-freshness{align-items:flex-start;justify-content:flex-start;flex-direction:column;gap:5px}.freshness-badge{padding:2px 6px;font-size:8px}}

/* ---------- v1.5.0 personal threshold + denser mobile UX ---------- */
.nav-count{display:none}
.discipline-value-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.threshold-edit{border:0;background:transparent;color:var(--accent);font-size:10px;font-weight:750;padding:3px 4px;cursor:pointer}
.threshold-edit:hover{text-decoration:underline}
.discipline-summary{min-width:0;display:flex;align-items:center;gap:12px}
.discipline-summary p{flex:1}
.threshold-note{padding:10px 12px;border-radius:10px;background:#f7f8fa;color:#526071;font-size:11px;line-height:1.55}
.threshold-mode-group{display:grid;gap:8px;margin-bottom:12px}
.threshold-choice{display:flex;align-items:flex-start;gap:10px;padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:#fff;cursor:pointer}
.threshold-choice:has(input:checked){border-color:#b8c6ec;background:#f7f9ff}
.threshold-choice input{margin-top:3px;flex:0 0 auto}
.threshold-choice span{display:flex;flex-direction:column;gap:3px;min-width:0}
.threshold-choice strong{font-size:12px;color:#273142}
.threshold-choice small{font-size:10px;color:#5f6b7a;line-height:1.45}
.field-disabled{opacity:.58}
.threshold-source{display:block;margin-top:2px;color:#667085;font-size:9px;font-weight:650}
.alert-mobile-summary,.alert-mobile-freshness{display:none}
.small.secondary:disabled{cursor:not-allowed;opacity:.58}

@media (max-width:760px){
  .nav-btn{display:flex;align-items:center;justify-content:center;gap:5px;font-size:13px;font-weight:720}
  .nav-count{display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:19px;padding:0 5px;border-radius:999px;background:#e7ebf2;color:#3f4b5d;font-size:10px;font-weight:800;font-variant-numeric:tabular-nums}
  .nav-btn.active .nav-count{background:#dce4f7;color:#27468e}

  .discipline-card{grid-template-columns:minmax(0,1fr) auto!important;gap:5px 10px!important;padding:10px 11px!important;margin-bottom:9px!important;border-radius:12px!important}
  .discipline-main{grid-column:1;min-width:0!important;gap:8px!important}
  .discipline-icon{width:32px!important;height:32px!important;border-radius:9px!important}.discipline-icon svg{width:17px!important;height:17px!important}
  .discipline-label{font-size:10.5px!important;font-weight:700;color:#526659!important}
  .discipline-value{font-size:19px!important;margin-top:0!important}
  .threshold-edit{font-size:10.5px;padding:2px 3px}
  .discipline-summary{grid-column:1;min-width:0}
  .discipline-summary p{display:none}
  .discipline-card .refresh-button{grid-column:2!important;grid-row:1/3;width:42px!important;min-width:42px;height:42px;padding:0!important;align-self:center;border-radius:10px;overflow:visible}
  .discipline-card .refresh-button .refresh-label{display:none}
  .discipline-card .refresh-button .refresh-icon{width:20px;height:20px;flex-basis:20px;stroke-width:2.15;margin:0;overflow:visible}
  .stats-grid{display:none!important}

  .market-card-head{padding:11px 12px 9px!important;gap:9px}.market-card-head h2{font-size:17px}.market-card-head p{font-size:10.5px;margin-top:3px}
  .compact-check{font-size:11px}
  .filter-area{padding:7px 8px 9px!important;gap:7px}.index-filter-btn{font-size:11px;padding-left:9px;padding-right:9px}.search-box input{font-size:16px}
  .section-heading{margin:4px 0 9px!important}.section-heading h2{font-size:20px!important}.section-heading p{font-size:10.5px!important;line-height:1.45;margin-top:3px!important}.section-eyebrow{font-size:8.5px}.count-chip{display:none}

  .mobile-etf-list{gap:6px!important;padding:6px!important}
  .mobile-etf-card{padding:9px 10px!important;border-radius:10px!important}
  .mobile-etf-title{gap:1px!important}.mobile-etf-title strong{font-size:14px!important;line-height:1.22!important}.mobile-etf-title small{font-size:10.5px!important;color:#455365!important}
  .mobile-premium-compact>span{font-size:10px!important;color:#4d5b6c!important}.mobile-premium-compact .premium-pill{font-size:13.5px!important;padding:3px 6px!important}
  .mobile-metrics{margin-top:5px!important}.mobile-metrics>div{padding:5px 7px!important}.mobile-metrics span,.mobile-alert-info>span{font-size:10.5px!important;color:#49576a!important}.mobile-metrics strong{font-size:13.5px!important}
  .mobile-card-foot{margin-top:5px!important;min-height:28px!important}.mobile-alert-info{gap:6px!important}.mobile-alert-info>div{gap:5px!important}.mobile-alert-rule{font-size:11.5px!important}.mobile-alert-info small,.mobile-alert-empty{font-size:10px!important;color:#536070!important}.mobile-card-foot .small{height:29px!important;font-size:10.5px!important}
  .mobile-quote-time{margin-top:4px!important;padding-top:4px!important;font-size:9.5px!important;color:#526071!important}.freshness-badge{font-size:8.8px!important}

  #alertsTable .alert-list{gap:6px}
  #alertsTable .alert-card{grid-template-columns:minmax(0,1fr) auto!important;gap:6px 8px!important;padding:9px 10px!important;border-radius:10px!important}
  #alertsTable .alert-main{grid-column:1!important;min-width:0;gap:8px}
  #alertsTable .alert-main .etf-symbol{width:34px;height:34px;font-size:10px}
  #alertsTable .alert-main .etf-name{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:190px}
  #alertsTable .alert-main .code{font-size:10px;margin-top:1px}
  #alertsTable .alert-metric{display:none}
  #alertsTable .actions{grid-column:2!important;grid-row:1!important;justify-content:flex-end!important;align-self:center;gap:5px}
  #alertsTable .actions .badge{font-size:9px;padding:3px 6px}
  #alertsTable .actions .small{height:29px;padding:0 9px;font-size:10.5px}
  .alert-mobile-summary{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:1px solid #edf0f3;border-bottom:1px solid #edf0f3}
  .alert-mobile-summary>span{min-width:0;padding:6px 7px;display:flex;align-items:baseline;gap:4px;flex-wrap:wrap}
  .alert-mobile-summary>span+span{border-left:1px solid #edf0f3}
  .alert-mobile-summary small{font-size:9.5px;color:#5b6879;font-weight:650}
  .alert-mobile-summary strong{font-size:12.5px;font-weight:800;font-variant-numeric:tabular-nums}
  .alert-mobile-summary em{font-style:normal;font-size:8.5px;color:#667085;font-weight:700}
  .alert-mobile-freshness{grid-column:1/-1;display:flex;align-items:center;min-height:20px}
  .alert-mobile-freshness .freshness-badge{padding:2px 6px!important}

  .threshold-choice{padding:10px 11px}.threshold-choice strong{font-size:13px}.threshold-choice small{font-size:10.5px}.threshold-note{font-size:10.5px}
}


/* v1.5.2 Admin 自有 Bark 设备入口 */
.nav-short{display:none}
#barkView .device-grid{margin-top:0}
#barkView .bark-toolbar{margin-bottom:12px}
@media (max-width:680px){
  .top-nav{grid-template-columns:repeat(5,minmax(0,1fr));gap:3px}
  .nav-btn{min-width:0;padding:0 3px;gap:3px;font-size:12.5px}
  .nav-long{display:none}
  .nav-short{display:inline}
  .nav-count{min-width:18px;height:18px;padding:0 4px;font-size:9.5px}
  #barkView .section-heading{gap:8px}
  #barkView .section-heading p{max-width:none}
  #barkView .admin-toolbar{justify-content:stretch}
  #barkView .admin-toolbar .button{width:100%;justify-content:center}
}


/* ---------- v1.5.3 UI cleanup + local Font Awesome SVG icons ---------- */
.fa-icon{display:inline-block;width:1em;height:1em;flex:0 0 auto;background:currentColor;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}
.fa-arrows-rotate{-webkit-mask-image:url('/vendor/fontawesome/solid/arrows-rotate.svg?v=6.7.2');mask-image:url('/vendor/fontawesome/solid/arrows-rotate.svg?v=6.7.2')}
.fa-eye{-webkit-mask-image:url('/vendor/fontawesome/solid/eye.svg?v=6.7.2');mask-image:url('/vendor/fontawesome/solid/eye.svg?v=6.7.2')}
.fa-eye-slash{-webkit-mask-image:url('/vendor/fontawesome/solid/eye-slash.svg?v=6.7.2');mask-image:url('/vendor/fontawesome/solid/eye-slash.svg?v=6.7.2')}
.password-visibility{width:34px;min-width:34px;height:34px;padding:0;display:grid;place-items:center;border-radius:8px;color:#596579}
.password-visibility .password-icon{width:16px;height:16px}
.password-visibility:hover,.password-visibility.revealing{color:#27364c;background:#f3f5f7}
.input-shell .password-visibility{margin-left:2px;margin-right:-4px}
.field .password-control>.password-visibility{margin-left:2px}
.refresh-button .refresh-icon{width:17px;height:17px;flex-basis:17px;stroke-width:0}
.refresh-button.is-loading .refresh-icon{animation:refreshSpin .75s linear infinite}
@keyframes refreshSpin{to{transform:rotate(360deg)}}
.section-heading-compact{align-items:center;margin-top:0}
.section-heading-compact>p{margin:0;max-width:760px}
.section-actions{display:flex;align-items:center;gap:9px;flex:0 0 auto}
.section-refresh-button{height:34px;padding:0 11px}
.etf-cell-no-symbol{gap:0}

@media (max-width:760px){
  .section-heading-compact{min-height:42px;margin:0 0 7px!important;justify-content:flex-end}
  .section-heading-compact>p{display:none}
  .section-heading-compact.no-mobile-actions{display:none}
  .section-heading-compact .count-chip{display:none}
  .section-actions{width:100%;justify-content:flex-end}
  .section-refresh-button{width:42px;min-width:42px;height:42px;padding:0;border-radius:10px}
  .section-refresh-button .refresh-label{display:none}
  .section-refresh-button .refresh-icon{width:19px;height:19px}
  .mobile-etf-identity{gap:0}
  .mobile-etf-title strong{max-width:100%}
  .page-heading-row{margin-bottom:12px}
}


/* ---------- v1.5.5 denser market list + heading refresh + request throttle UX ---------- */
.page-heading-tools{display:flex;align-items:flex-end;justify-content:flex-end;gap:12px}
.heading-refresh-button{height:36px;padding:0 11px}
.detail-header-no-symbol{gap:0}
.manual-refresh-button:disabled{opacity:.58;cursor:wait}

@media (max-width:760px){
  .page-heading-row{align-items:center!important;gap:10px}
  .page-heading-copy{min-width:0;flex:1}
  .page-heading-tools{align-items:center;gap:8px;flex:0 0 auto}
  .heading-refresh-button{width:42px;min-width:42px;height:42px;padding:0;border-radius:10px}
  .heading-refresh-button .refresh-label{display:none}
  .heading-refresh-button .refresh-icon{width:19px;height:19px}
  .page-time{display:none}

  /* 行情总览移除提醒行后，把空间还给真正的行情数据。关注页复用同一字号体系。 */
  .mobile-etf-title strong{font-size:15px!important;line-height:1.24!important}
  .mobile-etf-title small{font-size:11px!important}
  .mobile-premium-compact>span{font-size:10.5px!important}
  .mobile-premium-compact .premium-pill{font-size:14.5px!important;padding:4px 7px!important}
  .mobile-metrics span,.mobile-alert-info>span{font-size:11px!important}
  .mobile-metrics strong{font-size:14px!important}
  .mobile-metrics>div{padding:6px 7px!important}
  .mobile-alert-rule{font-size:12px!important}
  .mobile-alert-info small,.mobile-alert-empty{font-size:10.5px!important}
  .mobile-card-foot .small{font-size:11px!important}
  .mobile-quote-time{font-size:10px!important;line-height:1.35!important}
  .freshness-badge{font-size:9.2px!important}
}

/* ---------- v1.5.6 unified confirmation dialog ---------- */
.confirm-modal{z-index:140}.confirm-modal .modal-card{width:min(420px,100%)}
.confirm-modal .modal-title-row{margin-bottom:0}.confirm-modal .modal-title-row p{font-size:11px;line-height:1.7}
@media(max-width:760px){.confirm-modal .modal-card{width:min(420px,100%);height:auto;max-height:calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom));border-radius:18px}.confirm-modal .modal-actions{position:static;margin-top:20px;padding:0;background:transparent}.confirm-modal .modal-actions .button{flex:1;min-height:44px}}

/* ---------- v1.5.12 compact single sorting + right-aligned market tip ---------- */
.discipline-filter-toggle{padding:5px 8px;border:1px solid #dfe7e2;border-radius:999px;background:#fff;color:#53685a;white-space:nowrap}
.discipline-filter-toggle .check-ui{width:28px;height:16px}.discipline-filter-toggle .check-ui:after{top:3px;left:3px;width:10px;height:10px}.discipline-filter-toggle input:checked+.check-ui:after{transform:translateX(12px)}

.market-card-head{position:relative;overflow:visible}
.market-title-row{display:flex;align-items:center;gap:7px;min-width:0;width:100%}
.market-title-info{position:relative;display:inline-flex;align-items:center;margin-left:auto}
.info-tip-button{width:21px;height:21px;padding:0;border:1px solid #d8dee8;border-radius:50%;background:#fff;color:#667085;display:grid;place-items:center;font-family:Georgia,serif;font-size:12px;font-weight:700;line-height:1;cursor:pointer;transition:.15s ease}
.info-tip-button:hover,.info-tip-button[aria-expanded="true"]{border-color:#bfc9d6;background:#f3f5f8;color:#344054}
.market-info-tip{position:absolute;z-index:25;top:29px;right:0;width:330px;padding:11px 12px;border:1px solid #d9dee7;border-radius:10px;background:rgba(255,255,255,.98);box-shadow:0 10px 26px rgba(16,24,40,.14);backdrop-filter:blur(7px)}
.market-info-tip:before{content:"";position:absolute;top:-5px;right:7px;width:9px;height:9px;background:#fff;border-left:1px solid #d9dee7;border-top:1px solid #d9dee7;transform:rotate(45deg)}
.market-info-tip p{position:relative;margin:0!important;color:#596579!important;font-size:10.5px!important;line-height:1.65!important}

.market-filter-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;min-width:0;flex:0 1 auto}
.market-filter-actions .search-box{width:210px;flex:0 0 210px}
.quick-sort-row{display:flex;align-items:center;gap:5px;min-width:0}
.quick-sort-btn,.quick-sort-clear{height:34px;padding:0 10px;border:1px solid #dce1e8;border-radius:9px;background:#fff;color:#667085;font-size:10.5px;font-weight:700;white-space:nowrap;cursor:pointer;transition:.14s ease;font-variant-numeric:tabular-nums}
.quick-sort-btn:hover,.quick-sort-clear:hover{background:#f7f8fa;border-color:#cbd3de;color:#344054}
.quick-sort-btn.active{border-color:#b9c6d5;background:#f0f3f7;color:#24364d;font-weight:800}
.quick-sort-btn.active.asc,.quick-sort-btn.active.desc{box-shadow:inset 0 0 0 1px rgba(71,84,103,.02)}
.quick-sort-clear{background:#fafafa;color:#7a8492}
.favorites-sort-toolbar{display:flex;align-items:center;justify-content:flex-end;margin:-2px 0 9px}

@media(max-width:1080px){
  .filter-area{align-items:flex-start;flex-direction:column}
  .index-filter-row{width:100%}
  .market-filter-actions{width:100%;justify-content:flex-start}
  .market-filter-actions .search-box{flex:1 1 230px;max-width:360px}
}

@media(max-width:760px){
  .discipline-summary{align-items:flex-start!important}
  .discipline-filter-toggle{height:27px;padding:0 7px;font-size:10.5px!important;gap:6px}
  .discipline-filter-toggle .check-ui{flex:0 0 28px}

  .market-card-head{padding:10px 12px 8px!important}
  .market-title-row{gap:6px}.market-card-head h2{font-size:16.5px!important}
  .info-tip-button{width:22px;height:22px;font-size:12px}
  .market-info-tip{position:absolute;top:29px;right:0;width:min(292px,calc(100vw - 30px));padding:10px 11px}
  .market-info-tip:before{right:7px}
  .market-info-tip p{font-size:10.5px!important;line-height:1.6!important}

  .filter-area{gap:7px!important}
  .market-filter-actions{display:grid!important;grid-template-columns:1fr!important;gap:6px!important;width:100%;align-items:stretch}
  .market-filter-actions .search-box{width:100%!important;max-width:none!important;height:40px;flex-basis:auto!important}
  .quick-sort-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;width:100%}
  .quick-sort-btn,.quick-sort-clear{width:100%;height:36px;padding:0 4px;font-size:10.5px;border-radius:8px}
  .favorites-sort-toolbar{margin:0 0 7px;width:100%}
  .favorites-sort-toolbar .quick-sort-row{width:100%}
}

@media(max-width:380px){
  .quick-sort-btn,.quick-sort-clear{font-size:10px;padding:0 2px}
}


/* ---------- v1.5.10 single sort + compact discipline actions ---------- */
.discipline-card{grid-template-columns:auto minmax(0,1fr)}
.discipline-text{flex:1;min-width:0}
.discipline-value-row{width:100%;flex-wrap:nowrap;gap:7px}
.discipline-filter-toggle{margin-left:auto}

@media(max-width:760px){
  .discipline-card{grid-template-columns:1fr!important}
  .discipline-main{grid-column:1!important}
  .discipline-summary{display:none!important}
  .discipline-value-row{flex-wrap:nowrap;gap:6px}
  .discipline-filter-toggle{height:27px;padding:0 7px;font-size:10.5px!important;gap:6px;margin-left:auto}
}

@media(max-width:390px){
  .discipline-value-row{gap:4px}
  .discipline-value{font-size:18px!important}
  .threshold-edit{padding-left:1px;padding-right:1px}
  .discipline-filter-toggle{font-size:9.7px!important;padding:0 5px;gap:4px}
}


/* ---------- v1.5.13 readability: slightly larger control typography without adding visual bulk ---------- */
/* Keep control heights/paddings compact; enlarge only the text that users tap frequently. */
.nav-btn{font-size:13.5px}
.index-filter-btn{font-size:12px;font-weight:650}
.quick-sort-btn,.quick-sort-clear{font-size:11.5px}
.button{font-size:12.5px}
.small{font-size:11.5px}
.tabs button{font-size:11px}
.account-menu button{font-size:12.5px}
.threshold-edit{font-size:11px}
.discipline-filter-toggle{font-size:11px}

@media(max-width:760px){
  .nav-btn{font-size:13.5px}
  .index-filter-btn{font-size:12px;padding-left:9px;padding-right:9px}
  .quick-sort-btn,.quick-sort-clear{font-size:11.5px}
  .button{font-size:13px}
  .small{font-size:11.5px}
  .threshold-edit{font-size:11.2px}
  .discipline-filter-toggle{font-size:11px!important}
}

@media(max-width:390px){
  /* Very narrow phones: retain the readability gain while avoiding crowding. */
  .nav-btn{font-size:13px}
  .quick-sort-btn,.quick-sort-clear{font-size:11px;padding-left:2px;padding-right:2px}
  .discipline-filter-toggle{font-size:10.2px!important}
}

/* ---------- v1.5.14 detail cleanup + one-screen mobile login ---------- */
@media (max-width:680px){
  /* 商品详情标题与三项核心指标之间不再使用横向分隔线。 */
  .modal-card.mode-detail .detail-header{border-bottom:0}

  /* 手机登录页：保持所有主要信息与登录控件在常见手机的一屏可视区域内。 */
  .login-page{min-height:100dvh}
  .login-top-brand{height:52px;flex:0 0 52px}
  .login-top-brand .brand-mark{width:34px;height:34px;border-radius:10px}
  .login-top-brand .brand-mark svg{width:18px;height:18px}
  .login-top-brand .brand-text strong{font-size:13.5px}

  .login-shell{
    width:calc(100% - 20px);
    max-width:520px;
    margin:0 auto;
    padding:4px 0 10px;
    gap:10px;
    align-content:start;
  }
  .login-story{padding:0 3px;text-align:center}
  .login-eyebrow{font-size:8.5px;letter-spacing:.13em}
  .login-story h1{margin:5px 0 7px;font-size:26px;line-height:1.07;letter-spacing:-.04em}
  .login-story>p{max-width:390px;font-size:10px;line-height:1.45}

  .legend-card{margin-top:10px;border-radius:11px}
  .legend-card>div{padding:8px 6px}
  .legend-dot{width:6px;height:6px;margin-bottom:5px}
  .legend-card strong{font-size:10.5px;line-height:1.25}
  .legend-card small{margin-top:3px;font-size:8.5px;line-height:1.3}

  .login-card{padding:14px 14px 12px;border-radius:15px}
  .login-card-head .form-eyebrow{font-size:8.5px}
  .login-card-head h2{margin-top:4px;font-size:19px}
  .login-card-head p{margin-top:4px;font-size:9.5px;line-height:1.4}
  .login-form{margin-top:12px}
  .form-field{margin-bottom:9px}
  .form-field>span{margin-bottom:5px;font-size:10px}
  .login-page .input-shell{height:42px;border-radius:10px}
  .login-page .input-shell input{font-size:16px}
  .login-submit{height:42px;margin-top:2px}
  .message{min-height:14px;margin-top:5px;font-size:9.5px;line-height:1.35}
  .login-footnote{margin-top:8px;padding-top:8px;font-size:8.5px}
}

/* 对高度更紧张的手机再做轻量压缩，但不隐藏登录所需内容。 */
@media (max-width:680px) and (max-height:700px){
  .login-top-brand{height:46px;flex-basis:46px}
  .login-shell{gap:7px;padding-top:2px;padding-bottom:6px}
  .login-story h1{font-size:23px;margin:3px 0 5px}
  .login-story>p{font-size:9.5px;line-height:1.35}
  .legend-card{margin-top:7px}
  .legend-card>div{padding:6px 5px}
  .login-card{padding:11px 13px 10px}
  .login-card-head p{display:none}
  .login-form{margin-top:8px}
  .form-field{margin-bottom:7px}
  .login-footnote{margin-top:5px;padding-top:6px}
}

/* ---------- v1.5.15 mobile hierarchy + modal cleanup + 30-day chart UX ---------- */
.login-title-mobile,.login-story-copy-mobile{display:none}

/* 手机端所有编辑类弹窗标题只靠留白区分，不再使用标题下横线。 */
@media (max-width:680px){
  .modal-card.mode-editor .modal-title-row,
  .modal-card.mode-detail .detail-header{border-bottom:0!important}

  /* 首页介绍做减法：一行主标题 + 一行短说明，避免窄屏堆叠。 */
  .login-title-desktop,.login-story-copy-desktop{display:none!important}
  .login-title-mobile,.login-story-copy-mobile{display:block}
  .login-story h1{margin:4px 0 5px!important;font-size:23px!important;line-height:1.12!important;white-space:normal}
  .login-story-copy-mobile{margin:0!important;font-size:10px!important;line-height:1.35!important;color:#667085}
  .login-eyebrow{margin-bottom:0}
  .legend-card{margin-top:8px!important}

  /* 行情操作区使用浅色背景和圆角，与下面白色 ETF 商品卡片形成明确层级。 */
  #marketView .discipline-card{
    background:#f2f7f4!important;
    border-color:#d8e6de!important;
    box-shadow:0 1px 3px rgba(16,24,40,.025)
  }
  #marketView .filter-area{
    margin:0 10px 12px!important;
    padding:10px!important;
    border:1px solid #e1e6ed!important;
    border-radius:12px!important;
    background:#f5f7fa!important;
  }
  #marketView .market-card-head{padding-bottom:9px!important}
  #marketView #marketTable{padding:0 10px 10px}
  #marketView #marketTable>.mobile-etf-list{
    padding:0!important;
    background:transparent!important;
    border-top:0!important;
  }
}

@media (max-width:680px) and (max-height:700px){
  .login-story h1{font-size:21px!important;margin:2px 0 4px!important}
  .login-story-copy-mobile{font-size:9.5px!important}
  .legend-card{margin-top:6px!important}
}




/* ---------- v1.5.18 graphite filters + sequential mobile filters + chart ranges ---------- */
.index-filter-btn.active,
.index-filter-btn.active:hover{
  background:#344054!important;
  color:#fff!important;
  box-shadow:0 2px 7px rgba(16,24,40,.16)!important;
}

.chart-title-group{display:flex;align-items:center;gap:8px;min-width:0}
.chart-range-switch{display:flex;align-items:center;gap:4px;margin-left:auto}
.chart-range-btn{
  height:25px;
  min-width:38px;
  padding:0 8px;
  border:1px solid #d9dee7;
  border-radius:7px;
  background:#fff;
  color:#667085;
  font-size:10px;
  font-weight:700;
  cursor:pointer;
  transition:background .15s ease,color .15s ease,border-color .15s ease;
}
.chart-range-btn:hover{background:#f5f6f8;color:#344054}
.chart-range-btn.active{
  border-color:#344054;
  background:#344054;
  color:#fff;
}

@media (max-width:680px){
  /* 按业务频率连续排列：全部 → 道琼斯 → 美国50 → 纳指100 → 标普500 → 其他。 */
  #marketView .index-filter-row{
    display:flex!important;
    flex-wrap:wrap!important;
    justify-content:flex-start!important;
    align-items:center!important;
    gap:6px 4px!important;
    width:100%;
    overflow:visible!important;
  }
  #marketView .index-filter-btn{margin:0!important;flex:0 0 auto!important}
  .chart-title-group{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px}
  .chart-range-switch{margin-left:0;justify-self:end}
  .chart-range-btn{height:27px;min-width:40px;font-size:10.5px}
}

@media (max-width:360px){
  #marketView .index-filter-row{gap:5px 3px!important}
  #marketView .index-filter-btn{padding-left:7px!important;padding-right:7px!important;font-size:11px!important}
  .chart-range-switch{gap:3px}
  .chart-range-btn{min-width:37px;padding:0 6px;font-size:10px}
}

/* ---------- v1.5.20 mobile filter spacing + chart range order ---------- */
.index-filter-primary,.index-filter-secondary{display:contents}

@media (max-width:680px){
  #marketView .index-filter-row{
    display:flex!important;
    flex-direction:column!important;
    flex-wrap:nowrap!important;
    gap:6px!important;
    width:100%;
  }
  #marketView .index-filter-primary{
    display:flex!important;
    width:100%;
    align-items:center;
    justify-content:space-between;
    gap:0;
  }
  #marketView .index-filter-secondary{
    display:flex!important;
    width:100%;
    align-items:center;
    flex-wrap:wrap;
    justify-content:flex-start;
    gap:6px 8px;
  }
  #marketView .index-filter-primary .index-filter-btn{
    padding-left:7px!important;
    padding-right:7px!important;
  }
}

@media (max-width:360px){
  #marketView .index-filter-primary .index-filter-btn{
    padding-left:5px!important;
    padding-right:5px!important;
    font-size:10.7px!important;
  }
}


/* ---------- v1.5.20 ICP filing + production deployment hardening ---------- */
.site-icp-footer{width:100%;padding:12px 20px 16px;text-align:center;color:#98a2b3;font-size:10px;line-height:1.4}
.site-icp-footer a{color:inherit;text-decoration:none;transition:color .15s ease}
.site-icp-footer a:hover{color:#667085;text-decoration:underline}
.app-icp-footer{margin-top:18px}
.login-icp-footer{position:fixed;z-index:2;left:0;right:0;bottom:max(6px,env(safe-area-inset-bottom));padding:4px 12px;font-size:9.5px;pointer-events:none}
.login-icp-footer a{pointer-events:auto}
@media (max-width:680px){
  .site-icp-footer{font-size:9.5px;padding:10px 12px 12px}
  .login-icp-footer{bottom:max(3px,env(safe-area-inset-bottom));padding:2px 10px;font-size:9px}
  .login-shell{padding-bottom:22px}
}
@media (max-width:680px) and (max-height:700px){
  .login-icp-footer{font-size:8.5px}
  .login-shell{padding-bottom:18px}
}
