:root{--bg-0: #080b12;--bg-1: #0c111c;--bg-2: #111a2b;--glass: rgba(148, 178, 220, .06);--glass-2: rgba(148, 178, 220, .035);--glass-line: rgba(159, 191, 233, .12);--glass-line-strong: rgba(159, 191, 233, .22);--text: #e9f0fb;--text-soft: #9eb1cc;--text-faint: #5d6f8c;--cyan: #2ee6cf;--cyan-soft: rgba(46, 230, 207, .14);--cyan-glow: rgba(46, 230, 207, .45);--blue: #4d8dff;--good: #34e29b;--good-glow: rgba(52, 226, 155, .4);--danger: #ff5d6c;--danger-glow: rgba(255, 93, 108, .4);--warn: #ffb44d;--warn-glow: rgba(255, 180, 77, .35);--radius: 18px;--radius-sm: 12px;--space: clamp(14px, 4.2vw, 20px);--mono: ui-monospace, "SF Mono", "JetBrains Mono", "Roboto Mono", Menlo, monospace;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,system-ui,sans-serif;color:var(--text);-webkit-font-smoothing:antialiased}*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}body{background:var(--bg-0);min-height:100dvh;color:var(--text)}body:before{content:"";position:fixed;inset:0;z-index:-2;background:radial-gradient(120% 60% at 80% -10%,rgba(46,230,207,.1),transparent 55%),radial-gradient(90% 50% at 0% 0%,rgba(77,141,255,.12),transparent 50%),linear-gradient(180deg,#0d1426 0%,var(--bg-0) 48%)}body:after{content:"";position:fixed;inset:0;z-index:-1;opacity:.4;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E")}#root{max-width:520px;margin:0 auto;min-height:100dvh;display:flex;flex-direction:column}.appbar{padding:calc(env(safe-area-inset-top) + 20px) var(--space) 16px;position:relative}.appbar:after{content:"";position:absolute;left:var(--space);right:var(--space);bottom:0;height:1px;background:linear-gradient(90deg,transparent,var(--glass-line-strong),transparent)}.appbar h1{font-size:20px;font-weight:700;letter-spacing:.5px;display:flex;align-items:center;gap:9px}.appbar h1 .logo{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:15px;background:linear-gradient(140deg,#1b2942,#0e1626);border:1px solid var(--glass-line-strong);box-shadow:0 0 14px #2ee6cf2e,inset 0 1px #ffffff14}.appbar .sub{font-size:12px;color:var(--text-faint);margin-top:6px;letter-spacing:1.5px;text-transform:uppercase}.screen{flex:1;padding:18px var(--space) 100px}.card{background:linear-gradient(180deg,var(--glass),var(--glass-2));border:1px solid var(--glass-line);border-radius:var(--radius);padding:18px;margin-bottom:14px;backdrop-filter:blur(14px);box-shadow:0 10px 30px #00000059,inset 0 1px #ffffff0d;animation:rise .5s cubic-bezier(.16,1,.3,1) both}.card h2{font-size:12px;color:var(--text-faint);font-weight:600;margin-bottom:16px;letter-spacing:1.5px;text-transform:uppercase;display:flex;align-items:center;gap:8px}.card h2:before{content:"";width:3px;height:12px;border-radius:2px;background:var(--cyan);box-shadow:0 0 8px var(--cyan-glow)}.hero{display:grid;grid-template-columns:1fr 1fr;gap:14px}.hero .metric{background:linear-gradient(180deg,rgba(255,255,255,.03),transparent);border:1px solid var(--glass-line);border-radius:var(--radius-sm);padding:16px;position:relative;overflow:hidden}.hero .metric .label{font-size:11px;color:var(--text-faint);letter-spacing:1px;text-transform:uppercase}.hero .metric .value{font-family:var(--mono);font-size:30px;font-weight:700;margin-top:8px;font-variant-numeric:tabular-nums;letter-spacing:-1px;line-height:1}.hero .metric .unit{font-size:14px;font-weight:600;color:var(--text-faint);margin-left:4px;font-family:inherit}.metal{background:linear-gradient(180deg,#f2f7ff,#b9cae3 45%,#8fa6c6 55%,#eaf2fd);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 1px 6px rgba(159,191,233,.25))}.glow-good{color:var(--good);text-shadow:0 0 16px var(--good-glow)}.glow-bad{color:var(--danger);text-shadow:0 0 16px var(--danger-glow)}.pos{color:var(--good)}.neg{color:var(--danger)}.stat-row{display:flex;justify-content:space-between;align-items:baseline;padding:11px 0;border-bottom:1px solid var(--glass-line)}.stat-row:last-child{border-bottom:none}.stat-row .k{font-size:13px;color:var(--text-soft)}.stat-row .v{font-size:15px;font-weight:650;font-family:var(--mono);font-variant-numeric:tabular-nums}.spark-wrap{margin-top:4px}.spark-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}.spark-head .now{font-family:var(--mono);font-size:22px;font-weight:700}.spark-empty{font-size:12px;color:var(--text-faint);padding:20px 0;text-align:center}.alert{display:flex;gap:11px;align-items:flex-start;padding:13px 15px;border-radius:var(--radius-sm);font-size:13px;line-height:1.55;margin-bottom:14px;border:1px solid;backdrop-filter:blur(10px);animation:rise .5s cubic-bezier(.16,1,.3,1) both}.alert.danger{background:#ff5d6c1a;border-color:#ff5d6c4d;color:#ffc4ca}.alert.warn{background:#ffb44d17;border-color:#ffb44d47;color:#ffe0b0}.alert.ok{background:#34e29b14;border-color:#34e29b40;color:#b6f2d8}.alert .dot{width:9px;height:9px;border-radius:50%;margin-top:5px;flex:none}.alert.danger .dot{background:var(--danger);box-shadow:0 0 0 4px #ff5d6c2e;animation:pulse 1.6s infinite}.alert.warn .dot{background:var(--warn);box-shadow:0 0 10px var(--warn-glow)}.alert.ok .dot{background:var(--good);box-shadow:0 0 10px var(--good-glow)}.field{margin-bottom:14px}.field label{display:block;font-size:11px;color:var(--text-faint);margin-bottom:7px;font-weight:600;letter-spacing:.5px;text-transform:uppercase}.field input,.field textarea{width:100%;border:1px solid var(--glass-line);border-radius:var(--radius-sm);padding:13px 15px;font-size:16px;color:var(--text);background:#00000040;font-family:inherit;transition:border-color .15s,box-shadow .15s}.field input::placeholder,.field textarea::placeholder{color:var(--text-faint)}.field input:focus,.field textarea:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 0 3px var(--cyan-soft)}.field.need input{border-color:var(--warn);background:#ffb44d0f}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}textarea.voice{min-height:96px;resize:vertical;line-height:1.6;font-size:16px}.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;border:1px solid transparent;border-radius:var(--radius-sm);padding:15px;font-size:16px;font-weight:650;font-family:inherit;cursor:pointer;transition:transform .08s,box-shadow .2s,opacity .15s}.btn:active{transform:scale(.98)}.btn.primary{background:linear-gradient(135deg,var(--cyan),#19b9c9);color:#04201d;box-shadow:0 8px 24px #2ee6cf4d,inset 0 1px #ffffff4d}.btn.ghost{background:var(--glass);color:var(--text-soft);border-color:var(--glass-line)}.btn.mic{background:linear-gradient(135deg,#2b3d63,#16203a);color:var(--text);border-color:var(--glass-line-strong)}.btn:disabled{opacity:.4}.btn-row{display:grid;grid-template-columns:1fr 1.3fr;gap:12px}.hint{font-size:12px;color:var(--text-faint);line-height:1.6;margin-top:10px}.tag{display:inline-block;font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;vertical-align:middle;letter-spacing:.4px;margin-left:6px}.tag.ai{background:var(--cyan-soft);color:var(--cyan);border:1px solid rgba(46,230,207,.32);box-shadow:0 0 12px #2ee6cf33}.tag.local{background:#ffb44d1a;color:var(--warn);border:1px solid rgba(255,180,77,.32)}.quote-bar{display:flex;align-items:center;justify-content:space-between;gap:10px}.btn.sm{padding:7px 14px;font-size:13px;width:auto;flex:0 0 auto}.pick-list{display:grid;gap:8px;margin-bottom:14px}.pick{display:flex;align-items:center;gap:10px;padding:11px 13px;border:1px solid var(--glass-line);border-radius:var(--radius-sm);background:var(--glass-2);font-size:13px;cursor:pointer}.pick.on{border-color:var(--cyan);background:var(--cyan-soft)}.pick input{accent-color:var(--cyan)}.restock-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 0;border-bottom:1px solid var(--glass-line);font-size:13px;color:var(--text-soft)}.restock-row:last-child{border-bottom:none}.restock-row b{color:var(--text);font-family:var(--mono)}.link-danger{background:none;border:none;color:var(--danger);font-size:12px;cursor:pointer;padding:4px 6px}.login{min-height:100vh;display:grid;place-items:center;padding:var(--space)}.login-card{width:100%;max-width:320px;background:var(--glass);border:1px solid var(--glass-line);border-radius:var(--radius);padding:34px 26px;text-align:center;backdrop-filter:blur(12px)}.login-card h1{font-size:20px;margin:14px 0 4px}.login-logo{width:52px;height:52px;margin:0 auto;border-radius:14px;display:grid;place-items:center;font-family:var(--mono);font-weight:700;font-size:20px;color:#04201d;background:linear-gradient(135deg,var(--cyan),#19b9c9);box-shadow:0 0 24px var(--cyan-glow)}.login-card input{width:100%;margin:16px 0 12px;padding:13px 15px;border-radius:var(--radius-sm);border:1px solid var(--glass-line);background:var(--glass-2);color:var(--text);font-size:16px;text-align:center;letter-spacing:2px}.login-card input:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 0 3px var(--cyan-soft)}.points{margin:4px 0 0;padding-left:18px}.points li{margin:7px 0;font-size:14px;line-height:1.6;color:var(--text)}.points li::marker{color:var(--cyan)}.article-row{display:flex;flex-direction:column;gap:3px;padding:10px 0;border-bottom:1px solid var(--glass-line);text-decoration:none}.article-row:last-child{border-bottom:none}.a-title{font-size:13px;color:var(--text);line-height:1.5}.a-meta{font-size:11px;color:var(--text-faint)}.impact-box{margin-top:14px;padding:13px 15px;border-radius:var(--radius-sm);background:var(--cyan-soft);border:1px solid rgba(46,230,207,.25)}.impact-head{font-size:13px;font-weight:700;color:var(--cyan);display:flex;align-items:center;gap:8px;margin-bottom:7px}.impact-tag{font-size:10px;font-weight:600;color:var(--warn);border:1px solid rgba(255,180,77,.4);border-radius:999px;padding:1px 7px}.impact-box p{font-size:14px;line-height:1.7;color:var(--text)}.plain-box{margin-top:12px;padding:14px 16px;border-radius:var(--radius-sm);background:#ffb44d1a;border:1px solid rgba(255,180,77,.35);border-left:3px solid var(--warn)}.plain-head{font-size:13px;font-weight:800;color:var(--warn);margin-bottom:7px;letter-spacing:.01em}.plain-box p{font-size:15px;line-height:1.8;color:var(--text)}.recompute{background:var(--cyan-soft);border:1px solid rgba(46,230,207,.25);color:#aef6ec;border-radius:var(--radius-sm);padding:12px 15px;font-size:14px;font-weight:600;margin:4px 0 16px;line-height:1.5}.recompute b{color:#fff;font-family:var(--mono)}.opinions{display:flex;flex-direction:column;gap:12px}.opinion{border:1px solid var(--glass-line);border-radius:var(--radius-sm);padding:12px 14px;background:var(--glass-2)}.op-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}.op-name{font-weight:700;font-size:14px;color:var(--text)}.op-tilt{font-weight:700;font-size:14px}.op-conf{font-size:11px;color:var(--text-faint);margin-left:auto}.op-line{font-size:13px;color:var(--text);font-weight:600;margin:2px 0 6px}.op-points li{font-size:12.5px;margin:4px 0}.op-action{font-size:12.5px;color:var(--cyan);margin-top:8px;line-height:1.6}.wx-gate{border:1px solid rgba(255,180,77,.4);background:#ffb44d0f}.wx-gate-head{font-size:15px;font-weight:700;color:var(--warn);margin-bottom:6px}.wx-qr{display:flex;flex-direction:column;align-items:center;gap:10px;padding:8px 0}.wx-qr img{border-radius:10px;background:#fff;padding:8px;image-rendering:pixelated}.spot-all{margin-top:12px;border-top:1px solid var(--glass-line);padding-top:10px}.spot-all>summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--cyan);list-style:none}.spot-all>summary::-webkit-details-marker{display:none}.spot-all>summary:before{content:"▸ ";color:var(--text-faint)}.spot-all[open]>summary:before{content:"▾ "}.spot-group{margin-top:12px}.spot-group-head{font-size:12px;font-weight:700;color:var(--text-soft);letter-spacing:.02em;padding:4px 0;border-bottom:1px solid var(--glass-line)}.spot-list{list-style:none;margin:6px 0 4px;padding:0}.spot-list li{display:flex;align-items:baseline;gap:10px;padding:7px 0;border-bottom:1px solid var(--glass-line);font-size:13px}.spot-list li:last-child{border-bottom:none}.spot-list .s-name{flex:1;color:var(--text)}.spot-list .s-avg{font-family:var(--mono);font-weight:700}.spot-list .s-range{font-size:11px;color:var(--text-faint);font-family:var(--mono)}.deal{background:linear-gradient(180deg,var(--glass),var(--glass-2));border:1px solid var(--glass-line);border-radius:var(--radius);padding:16px;margin-bottom:13px;position:relative;overflow:hidden;backdrop-filter:blur(14px);box-shadow:0 10px 26px #0000004d;animation:rise .5s cubic-bezier(.16,1,.3,1) both}.deal:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--cyan);box-shadow:0 0 14px var(--cyan-glow)}.deal.closed:before{background:var(--text-faint);box-shadow:none}.deal.closed{opacity:.72}.deal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.deal-head .contract{font-weight:700;font-size:16px;font-family:var(--mono);letter-spacing:.5px}.badge{font-size:10px;font-weight:700;padding:4px 10px;border-radius:999px;letter-spacing:.5px}.badge.open{background:var(--cyan-soft);color:var(--cyan);border:1px solid rgba(46,230,207,.3)}.badge.closed{background:#ffffff0d;color:var(--text-faint)}.deal-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}.deal-grid .cell .k{color:var(--text-faint);font-size:10px;letter-spacing:.5px;text-transform:uppercase;margin-bottom:3px}.deal-grid .cell .v{font-weight:650;font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:14px}.deal-actions{display:flex;gap:9px;margin-top:16px}.deal-actions button{flex:1;padding:10px;font-size:13px;border-radius:9px;border:1px solid var(--glass-line);background:#0003;color:var(--text-soft);font-weight:600;font-family:inherit}.deal-actions button.danger{color:var(--danger);border-color:#ff5d6c40}.empty{text-align:center;color:var(--text-faint);padding:70px 24px;font-size:14px;line-height:1.9}.empty b{color:var(--text-soft);font-weight:600}.tabbar{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:520px;display:grid;grid-template-columns:repeat(6,1fr);background:#0a0e16d1;backdrop-filter:blur(20px);border-top:1px solid var(--glass-line);padding-bottom:env(safe-area-inset-bottom)}.tab{display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px 0 10px;font-size:11px;color:var(--text-faint);border:none;background:none;cursor:pointer;font-family:inherit;font-weight:600;position:relative;transition:color .2s}.tab.active{color:var(--cyan)}.tab.active:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:26px;height:2px;border-radius:2px;background:var(--cyan);box-shadow:0 0 10px var(--cyan-glow)}.tab .ico{font-size:20px;line-height:1;filter:grayscale(.2)}.mkt-table{width:100%;border-collapse:collapse;font-size:13px}.mkt-table th{text-align:left;font-size:11px;font-weight:600;color:var(--text-faint);padding:4px 8px;border-bottom:1px solid var(--glass-line)}.mkt-table th.num,.mkt-table td.num{text-align:right;font-family:var(--mono)}.mkt-table td{padding:8px;border-bottom:1px solid var(--glass-line);color:var(--text)}.mkt-table tr:last-child td{border-bottom:none}.mkt-table td.strong{font-weight:700}.mkt-table td.range{font-size:11px;color:var(--text-faint)}.mkt-table.snap td{padding:7px 8px}.mkt-table.snap td:nth-child(odd){color:var(--text-faint);font-size:12px;width:18%}.mkt-summary{cursor:pointer;list-style:none;display:flex;align-items:baseline;gap:8px}.mkt-summary::-webkit-details-marker{display:none}.mkt-summary:before{content:"▸";color:var(--text-faint);font-size:12px}details[open]>.mkt-summary:before{content:"▾"}.mkt-cat{font-size:15px;font-weight:700;color:var(--text)}.mkt-count{font-size:11px;font-family:var(--mono);color:var(--cyan)}.mkt-hint{font-size:11px;color:var(--text-faint);margin-left:auto}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes pulse{0%,to{box-shadow:0 0 #ff5d6c59}50%{box-shadow:0 0 0 6px #ff5d6c00}}.card:nth-child(2){animation-delay:.05s}.card:nth-child(3){animation-delay:.1s}.card:nth-child(4){animation-delay:.15s}@media (prefers-reduced-motion: reduce){*{animation:none!important}}
