:root {
  --bg:#0b0f19;
  --sf:rgba(17,24,39,0.92);
  --sf2:rgba(22,30,50,0.95);
  --bd:rgba(255,255,255,0.06);
  --tx:#f0f2f5;
  --tx2:#6b7694;
  --tx3:#4a5068;
  --ac:#5eead4;
  --ac2:rgba(94,234,212,0.08);
  --gn:#22c55e;
  --gn2:rgba(34,197,94,0.08);
  --rd:#ef4444;
  --rd2:rgba(239,68,68,0.07);
  --am:#f59e0b;
  --am2:rgba(245,158,11,0.08);
  --r:16px;
  --rs:12px;
  --f:"DM Sans","PingFang SC","Hiragino Sans GB",sans-serif;
  --fb:"Noto Serif SC",serif;
  --fm:"JetBrains Mono",monospace;
  --st:env(safe-area-inset-top,0px);
  --sb:env(safe-area-inset-bottom,0px);
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{background:var(--bg);color:var(--tx);font-family:var(--f);font-size:15px;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}
body{min-height:100dvh;background:var(--bg)}
[hidden]{display:none!important}
.view{min-height:100dvh}

/* ===== LOGIN ===== */
.login-view{display:flex;align-items:center;justify-content:center;padding:24px;position:relative;overflow:hidden}
.login-view::before{content:"";position:absolute;top:-100px;left:50%;transform:translateX(-50%);width:400px;height:400px;background:radial-gradient(circle,rgba(94,234,212,.04),transparent 70%);pointer-events:none}
.login-center{width:100%;max-width:340px;text-align:center;position:relative;z-index:1}
.login-icon{width:80px;height:80px;margin:0 auto;filter:drop-shadow(0 8px 24px rgba(52,211,153,.2))}
.login-icon img{width:100%;height:100%}
.login-title{font-family:var(--fb);font-size:28px;font-weight:600;margin-top:18px;letter-spacing:.12em;background:linear-gradient(135deg,#e0e0e0,#a0a0a0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.login-sub{color:var(--tx3);font-size:13px;margin-top:6px;letter-spacing:.15em}
.login-form{text-align:left;margin-top:48px}
.login-form label{display:block;color:var(--tx2);font-size:12px;margin-bottom:8px;font-weight:500;letter-spacing:.05em}
.login-form input{width:100%;padding:14px 16px;border:1px solid rgba(255,255,255,.06);border-radius:var(--rs);background:rgba(255,255,255,.03);color:var(--tx);font:inherit;font-size:16px;outline:none;transition:border-color .3s,box-shadow .3s}
.login-form input:focus{border-color:rgba(94,234,212,.3);box-shadow:0 0 0 3px rgba(94,234,212,.06)}
.login-form input::placeholder{color:rgba(255,255,255,.12)}
.login-err{margin-top:14px;padding:10px 14px;border-radius:var(--rs);background:var(--rd2);color:var(--rd);font-size:13px;line-height:1.5;text-align:left}
.login-hint{color:var(--tx3);font-size:11px;margin-top:32px}

/* ===== BUTTONS ===== */
.btn-brand{display:block;width:100%;margin-top:16px;padding:15px;border:none;border-radius:var(--rs);background:linear-gradient(135deg,#16a34a,#22c55e);color:#fff;font:inherit;font-weight:600;letter-spacing:.03em;cursor:pointer;box-shadow:0 4px 24px rgba(52,211,153,.2);transition:transform .15s,box-shadow .15s,opacity .15s}
.btn-brand:hover{transform:translateY(-1px);box-shadow:0 6px 32px rgba(52,211,153,.25)}
.btn-brand:active{transform:scale(.98)}
.btn-brand:disabled{opacity:.4;cursor:not-allowed;transform:none}
.btn-ghost{display:block;width:100%;margin-top:10px;padding:12px;border:1px solid var(--bd);border-radius:var(--rs);background:transparent;color:var(--tx2);font:inherit;cursor:pointer;transition:background .2s}
.btn-ghost:hover{background:rgba(255,255,255,.04)}
.btn-danger{display:block;width:100%;margin-top:28px;padding:14px;border:1px solid rgba(239,68,68,.12);border-radius:var(--rs);background:var(--rd2);color:var(--rd);font:inherit;font-weight:500;cursor:pointer;transition:background .2s}
.btn-danger:hover{background:rgba(239,68,68,.12)}
.ibtn{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.06);border-radius:10px;background:rgba(255,255,255,.02);color:var(--tx2);cursor:pointer;transition:all .2s}
.ibtn:hover{background:rgba(255,255,255,.06);color:var(--tx)}
.ibtn svg{width:16px;height:16px}
.spinning svg{animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ===== TOPBAR ===== */
.topbar{display:flex;justify-content:space-between;align-items:center;padding:calc(var(--st) + 12px) 20px 14px;position:sticky;top:0;z-index:50;background:rgba(11,15,25,.88);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid rgba(255,255,255,.03)}
.topbar-brand{display:flex;align-items:center;gap:10px}
.topbar-logo{width:28px;height:28px}
.topbar-logo img{width:100%;height:100%}
.topbar-name{font-family:var(--fb);font-size:17px;font-weight:600;letter-spacing:.08em;color:#d0d0d8}

/* ===== PAGE HEADER ===== */
.page-header{display:flex;justify-content:space-between;align-items:center;padding:calc(var(--st) + 12px) 18px 14px;position:sticky;top:0;z-index:50;background:rgba(11,15,25,.88);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid rgba(255,255,255,.03);font-weight:600;font-size:15px}
.page-header-title{padding-left:4px}

/* ===== PORTFOLIO ===== */
.port{padding:28px 20px 20px;position:relative}
.port::after{content:"";position:absolute;bottom:0;left:20px;right:20px;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.06),transparent)}
.port-label{color:var(--tx3);font-size:12px;letter-spacing:.08em;font-weight:500}
.port-val{font-family:var(--fm);font-size:36px;font-weight:600;margin-top:6px;letter-spacing:-.03em;background:linear-gradient(180deg,#ffffff,#a0a8b8);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.port-u{font-size:14px;font-weight:400;-webkit-text-fill-color:var(--tx3);margin-left:6px}
.port-row{display:flex;gap:24px;margin-top:16px;align-items:center}
.sep{width:1px;height:20px;background:rgba(255,255,255,.06)}
.ps span{color:var(--tx3);font-size:11px;font-weight:500;letter-spacing:.04em}
.ps strong{display:block;font-family:var(--fm);font-size:15px;font-weight:600;margin-top:2px}

/* ===== CARDS ===== */
.cards{padding:20px 14px 100px;display:flex;flex-direction:column;gap:12px}
.card{position:relative;padding:18px;border-radius:var(--r);background:var(--sf);border:1px solid var(--bd);backdrop-filter:blur(10px);transition:all .25s;overflow:hidden;cursor:pointer}
.card::before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),transparent)}
.card:hover{background:var(--sf2);border-color:rgba(255,255,255,.1);transform:translateY(-1px);box-shadow:0 8px 32px rgba(0,0,0,.2)}
@keyframes cardIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.card{animation:cardIn .35s ease both}
.c-head{display:flex;justify-content:space-between;align-items:flex-start}
.c-tag{font-size:10px;color:var(--tx3);letter-spacing:.1em;text-transform:uppercase;font-weight:600}
.c-name{font-size:16px;font-weight:600;margin-top:3px}
.pill{padding:4px 10px;border-radius:20px;font-size:11px;font-weight:600;letter-spacing:.02em}
.pill-ok{background:var(--gn2);color:var(--gn)}.pill-warn{background:var(--am2);color:var(--am)}.pill-err{background:var(--rd2);color:var(--rd)}.pill-off{background:rgba(255,255,255,.04);color:var(--tx3)}
.c-eq{display:flex;margin-top:16px;padding-bottom:14px;border-bottom:1px solid rgba(255,255,255,.04)}
.c-eq>div{flex:1}
.c-eq span{color:var(--tx3);font-size:11px;font-weight:500}
.c-eq .big{display:block;font-family:var(--fm);font-size:22px;font-weight:600;margin-top:3px;letter-spacing:-.02em}
.c-eq .sm{display:block;font-family:var(--fm);font-size:14px;font-weight:600;margin-top:5px}
.c-row{display:flex;justify-content:space-between;padding:10px 0 0}
.c-row span{color:var(--tx3);font-size:12px;font-weight:500}
.c-row strong{font-size:12px;font-weight:600;color:var(--tx2)}
.c-pos{margin-top:10px;padding:10px 14px;border-radius:var(--rs);background:rgba(255,255,255,.02);border:1px solid transparent;display:flex;justify-content:space-between;align-items:center;transition:all .2s}
.c-pos span{color:var(--tx3);font-size:12px;font-weight:500}
.c-pos strong{font-size:12px;font-weight:600;color:var(--tx3)}
.c-pos.active{background:var(--ac2);border-color:rgba(94,234,212,.12)}
.c-pos.active strong{color:var(--ac)}

/* ===== DETAIL ===== */
.detail-body{padding:18px 16px 100px}
.d-section{margin-bottom:22px}
.d-section-title{font-size:11px;color:var(--tx3);letter-spacing:.12em;text-transform:uppercase;font-weight:600;margin-bottom:10px;padding-left:2px}
.d-kv{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--sf);border:1px solid var(--bd);border-radius:var(--rs);margin-bottom:6px;transition:background .2s}
.d-kv:hover{background:var(--sf2)}
.d-kv span{color:var(--tx2);font-size:13px;font-weight:500}
.d-kv strong{font-size:13px;font-weight:600;font-family:var(--fm)}
.d-kv.hl{background:var(--ac2);border-color:rgba(94,234,212,.1)}
.d-kv.hl strong{color:var(--ac)}
.d-trade{padding:14px 16px;background:var(--sf);border:1px solid var(--bd);border-radius:var(--rs);margin-bottom:6px}
.d-trade-head{display:flex;justify-content:space-between;font-size:13px;font-weight:500}
.d-trade-head span{color:var(--tx2)}
.d-trade-detail{font-size:11px;color:var(--tx3);margin-top:5px;line-height:1.5}
.d-actions{display:flex;gap:10px;margin-top:18px}
.d-actions button{flex:1;padding:13px;border:1px solid var(--bd);border-radius:var(--rs);background:var(--sf);color:var(--tx);font:inherit;font-weight:600;font-size:14px;cursor:pointer;transition:all .2s}
.d-actions button:hover{background:var(--sf2);transform:translateY(-1px)}
.d-actions .btn-stop{color:var(--rd);border-color:rgba(239,68,68,.12);background:var(--rd2)}

/* ===== LOGS ===== */
.log-select{padding:8px 12px;border:1px solid var(--bd);border-radius:var(--rs);background:rgba(17,24,39,.9);color:var(--tx);font:inherit;font-size:13px;outline:none;min-width:140px}
.log-box{margin:12px;padding:16px;min-height:calc(100dvh - 180px);border-radius:var(--r);background:#060a12;border:1px solid var(--bd);font-family:var(--fm);font-size:12px;line-height:1.7;color:var(--tx2);white-space:pre-wrap;word-break:break-all;overflow:auto}

/* ===== SETTINGS ===== */
.settings-list{padding:8px 16px 100px}
.s-item{display:flex;justify-content:space-between;align-items:center;padding:16px 0;border-bottom:1px solid rgba(255,255,255,.03)}
.s-item span{color:var(--tx2);font-size:14px}
.s-item strong{font-size:14px;font-weight:500}
.toggle{position:relative;display:inline-block;width:44px;height:24px}
.toggle input{opacity:0;width:0;height:0}
.toggle-t{position:absolute;inset:0;border-radius:12px;background:rgba(255,255,255,.1);cursor:pointer;transition:background .3s}
.toggle-t::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:var(--tx);transition:transform .3s}
.toggle input:checked+.toggle-t{background:var(--gn)}
.toggle input:checked+.toggle-t::after{transform:translateX(20px)}

/* ===== TAB BAR ===== */
.tabbar{position:fixed;bottom:0;left:0;right:0;z-index:90;display:flex;justify-content:space-around;align-items:center;padding:8px 16px calc(var(--sb) + 8px);background:rgba(11,15,25,.92);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-top:1px solid rgba(255,255,255,.03)}
.tab{display:flex;flex-direction:column;align-items:center;gap:4px;padding:6px 14px;border:none;background:none;color:var(--tx3);font:inherit;font-size:10px;font-weight:500;letter-spacing:.03em;cursor:pointer;transition:color .2s;position:relative;border-radius:12px}
.tab svg{width:20px;height:20px;transition:all .2s}
.tab.active{color:var(--ac)}
.tab.active svg{stroke:var(--ac)}
.tab.active::before{content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);width:4px;height:4px;border-radius:50%;background:var(--ac)}

/* ===== MODAL ===== */
.modal-mask{position:fixed;inset:0;z-index:200;background:rgba(0,0,0,.55);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;padding:24px;animation:fadeIn .2s}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal-card{width:100%;max-width:320px;background:rgba(17,24,39,.98);border:1px solid rgba(255,255,255,.08);border-radius:var(--r);padding:22px}
.modal-card h3{font-size:16px;margin-bottom:8px}
.modal-card p{color:var(--tx2);font-size:14px;line-height:1.5}
.modal-btns{display:flex;gap:10px;margin-top:18px}
.modal-btns .btn-ghost,.modal-btns .btn-brand{flex:1;margin-top:0;padding:12px;font-size:14px}

/* ===== TOAST ===== */
.toast{position:fixed;bottom:calc(var(--sb) + 70px);left:50%;transform:translateX(-50%);padding:10px 18px;border-radius:var(--rs);background:rgba(17,24,39,.95);border:1px solid var(--bd);color:var(--tx);font-size:14px;z-index:300;animation:toastIn .25s ease;white-space:nowrap}
@keyframes toastIn{from{opacity:0;transform:translateX(-50%) translateY(8px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
.toast-ok{border-color:rgba(34,197,94,.25);color:var(--gn)}
.toast-err{border-color:rgba(239,68,68,.25);color:var(--rd)}

.cg{color:var(--gn)!important}.cr{color:var(--rd)!important}

/* ===== DESKTOP ===== */
@media(min-width:768px){
  .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px}
  .port-val{font-size:42px}
}
