:root{color:#17202f;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#eef3f8;font-family:Inter,Microsoft YaHei,PingFang SC,system-ui,sans-serif}*{box-sizing:border-box}body{background:linear-gradient(135deg,#e1eeffdb,#f8fcfaeb 42%,#fff1eeb3),#eef3f8;min-width:320px;margin:0}#root{min-height:100vh}:root{--bg-soft:#eef3f8;--panel:#ffffffbd;--panel-strong:#ffffffe6;--panel-subtle:#f8fbffb8;--line:#90a1b842;--line-strong:#70849e57;--text:#17202f;--muted:#667789;--subtle:#8a99aa;--red:#d64235;--red-soft:#fff0ed;--blue:#2f77c8;--blue-soft:#eaf3ff;--green:#15855a;--green-soft:#e9f7ef;--amber:#a76514;--amber-soft:#fff4de;--shadow:0 18px 48px #2a3d521f;--shadow-soft:0 10px 28px #2a3d5214;--radius-lg:22px;--radius-md:16px;--radius-sm:12px}.dashboard-shell{min-height:100vh;color:var(--text);background:radial-gradient(circle at 12% 2%,#4a90e22e,#0000 30%),radial-gradient(circle at 88% 0,#ff756629,#0000 27%),linear-gradient(135deg,#eef4fb 0%,#f8fbff 46%,#fff6f4 100%);padding:28px;position:relative}.topbar,.status-row,.data-state,.loading-state,.empty-state,.sync-progress-panel,.stock-grid{max-width:1540px;margin-left:auto;margin-right:auto}.topbar{grid-template-columns:minmax(260px,.45fr) minmax(960px,1.55fr);align-items:end;gap:22px;margin-bottom:18px;display:grid}.eyebrow{color:var(--red);background:#ffffff94;border:1px solid #d6423529;border-radius:999px;align-items:center;margin-bottom:9px;padding:6px 10px;font-size:12px;font-weight:800;display:inline-flex;box-shadow:0 8px 22px #d6423512}h1{color:#101827;letter-spacing:0;margin:0;font-size:32px;font-weight:850;line-height:1.14}.subtitle{color:var(--muted);margin:9px 0 0;font-size:14px}.toolbar{grid-template-columns:minmax(0,1fr) minmax(450px,.52fr);justify-content:flex-end;align-items:stretch;gap:12px;display:grid}.filter-strip,.action-cluster,.metric-card,.data-state,.loading-state,.sync-progress-panel,.empty-state,.stock-card{border:1px solid var(--line);background:var(--panel);box-shadow:var(--shadow-soft);-webkit-backdrop-filter:blur(18px)}.filter-strip,.action-cluster{border-radius:var(--radius-lg);align-items:stretch;gap:10px;display:grid}.filter-strip{background:linear-gradient(135deg,#ffffffd6,#f7fbffa3);grid-template-columns:minmax(150px,.86fr) minmax(240px,1.24fr) minmax(176px,.9fr);padding:8px}.action-cluster{background:#ffffff94;grid-template-columns:repeat(3,minmax(136px,1fr));align-items:center;padding:8px}.filter-group{border-radius:var(--radius-md);background:#ffffff8f;border:1px solid #90a1b833;flex-direction:column;justify-content:center;gap:8px;min-height:70px;padding:10px 12px;display:flex}.filter-caption{color:var(--subtle);align-items:center;gap:6px;font-size:11px;font-weight:800;line-height:1;display:inline-flex}.mode-toggle,.board-options{align-items:center;gap:6px;display:inline-flex}.mode-option,.board-option,.action-button,.date-button{color:#233044;background:linear-gradient(#fffffff0,#f8fbffd1);border:1px solid #8497b047;border-radius:999px;transition:transform .16s,border-color .16s,background .16s,box-shadow .16s;box-shadow:0 8px 18px #2a3d5212}.mode-option,.board-option,.action-button{cursor:pointer;justify-content:center;align-items:center;gap:7px;height:36px;padding:0 13px;font-size:13px;font-weight:800;display:inline-flex}.mode-option{min-width:84px}.board-option{min-width:48px}.mode-option:hover:not(:disabled),.board-option:hover:not(:disabled),.action-button:hover:not(:disabled){background:#fffffff5;border-color:#2f77c857;transform:translateY(-1px);box-shadow:0 12px 24px #2a3d521c}.mode-option.is-active,.board-option.is-active{color:var(--red);background:linear-gradient(135deg,#fff4f2f5,#ffffffe0);border-color:#d642355c;box-shadow:0 10px 22px #d642351f}.date-filter{min-width:188px;position:relative}.date-button{width:100%;height:36px;font:inherit;cursor:pointer;outline:none;justify-content:space-between;align-items:center;gap:8px;padding:0 13px;font-size:13px;font-weight:800;display:inline-flex}.date-button:hover,.date-button[aria-expanded=true]{background:#fffffff5;border-color:#2f77c861;box-shadow:0 12px 24px #2a3d521c}.date-button:focus-visible,.mode-option:focus-visible,.board-option:focus-visible,.action-button:focus-visible{border-color:#2f77c8b8;box-shadow:0 0 0 4px #2f77c824}.calendar-popover{z-index:20;-webkit-backdrop-filter:blur(18px);background:linear-gradient(145deg,#fffffff5,#f5faffe6),#fff;border:1px solid #8497b042;border-radius:20px;width:304px;padding:12px;position:absolute;top:calc(100% + 10px);right:0;box-shadow:0 24px 52px #2a3d522e}.calendar-head,.calendar-weekdays,.calendar-grid{grid-template-columns:repeat(7,minmax(0,1fr));display:grid}.calendar-head{grid-template-columns:34px 1fr 34px;align-items:center;margin-bottom:10px}.calendar-head strong{color:#162235;text-align:center;font-size:14px}.calendar-nav,.calendar-day{color:#314258;cursor:pointer;background:0 0;border:0}.calendar-nav{border-radius:12px;justify-content:center;align-items:center;width:34px;height:34px;display:inline-flex}.calendar-nav:hover{background:var(--blue-soft);color:var(--blue)}.calendar-weekdays{margin-bottom:6px}.calendar-weekdays span{color:var(--subtle);text-align:center;font-size:11px;font-weight:800}.calendar-grid{gap:4px}.calendar-day{border-radius:12px;height:34px;font-size:13px;font-weight:800;transition:background .16s,color .16s,box-shadow .16s;position:relative}.calendar-day:hover{color:var(--blue);background:#2f77c81a}.calendar-day.is-muted{color:#b2bdc9}.calendar-day.is-today:after{background:var(--blue);content:"";border-radius:50%;width:4px;height:4px;position:absolute;bottom:4px;left:50%;transform:translate(-50%)}.calendar-day.is-selected{color:#fff;background:linear-gradient(135deg,#e35649,#c93429);box-shadow:0 10px 20px #d6423538}.calendar-day.is-selected:after{background:#fff}.action-button{white-space:nowrap;min-width:0;height:38px;padding:0 14px;font-size:14px}.action-button.primary{color:#fff;background:linear-gradient(135deg,#e35649,#c93429);border-color:#d642355c;box-shadow:0 14px 30px #d642353d}.action-button.accent{color:#fff;background:linear-gradient(135deg,#4b94dd,#266ab8);border-color:#2f77c857;box-shadow:0 14px 30px #2f77c833}.action-button.primary:hover:not(:disabled),.action-button.accent:hover:not(:disabled){color:#fff;filter:saturate(1.05)}.action-button.primary:hover:not(:disabled){background:linear-gradient(135deg,#f0675a,#d64235);border-color:#d6423570;box-shadow:0 16px 34px #d6423547}.action-button.accent:hover:not(:disabled){background:linear-gradient(135deg,#5aa4ec,#2f77c8);border-color:#2f77c870;box-shadow:0 16px 34px #2f77c83d}.mode-option:disabled,.board-option:disabled,.action-button:disabled{cursor:wait;opacity:.62;transform:none}.status-row{grid-template-columns:repeat(6,minmax(0,1fr));gap:14px;margin-bottom:14px;display:grid}.metric-card{border-radius:var(--radius-lg);background:linear-gradient(145deg,#ffffffd6,#f7fbff94);min-width:0;padding:17px 18px;position:relative;overflow:hidden}.metric-card:before{content:"";opacity:.72;background:linear-gradient(#d64235cc,#2f77c88c);width:4px;position:absolute;inset:0 auto 0 0}.metric-card span,.quote-grid span{color:var(--muted);font-size:12px;display:block}.metric-card strong{color:#101827;overflow-wrap:anywhere;margin-top:9px;font-size:22px;line-height:1.18;display:block}.data-state,.loading-state{border-radius:var(--radius-md);min-height:44px;color:var(--muted);background:#ffffff9e;align-items:center;gap:9px;margin-bottom:14px;padding:0 14px;font-size:13px;display:flex}.data-state svg,.loading-state svg,.card-foot svg{color:var(--blue)}.data-state.is-warning{color:var(--amber);background:#fffaf2c2}.sync-progress-panel{border-radius:var(--radius-lg);background:linear-gradient(135deg,#ffffffd1,#eff7ff8f);margin-bottom:14px;padding:16px}.sync-progress-head,.sync-day-item{justify-content:space-between;align-items:center;gap:12px;display:flex}.sync-progress-head strong,.sync-day-item strong{color:#101827;font-size:14px;display:block}.sync-progress-head span,.sync-day-item span{color:var(--muted);margin-top:5px;font-size:12px;display:block}.sync-progress-track{background:#dbe5f0d1;border-radius:999px;height:9px;margin:14px 0;overflow:hidden}.sync-progress-fill{border-radius:inherit;background:linear-gradient(90deg,#4b94dd,#d64235);height:100%;transition:width .22s}.sync-day-list{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.sync-day-item{border-radius:var(--radius-md);background:#ffffff8f;border:1px solid #90a1b83d;min-width:0;padding:12px}.sync-day-item>div{min-width:0}.sync-day-item span:not(.sync-status-pill){white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.sync-task-badge,.sync-status-pill{border-radius:999px;flex:none;justify-content:center;align-items:center;height:28px;padding:0 11px;font-size:12px;font-weight:800;display:inline-flex}.sync-task-badge.status-pending,.sync-status-pill.status-pending{color:#52616f;background:#e8eef5db}.sync-task-badge.status-running,.sync-status-pill.status-running{background:var(--blue-soft);color:var(--blue)}.sync-task-badge.status-success,.sync-status-pill.status-success{background:var(--green-soft);color:var(--green)}.sync-task-badge.status-failed,.sync-status-pill.status-failed{background:var(--red-soft);color:var(--red)}.loading-state svg,.action-button.accent:disabled svg{animation:1s linear infinite spin}.empty-state{border-radius:var(--radius-lg);min-height:230px;color:var(--muted);text-align:center;background:#fff9;border-style:dashed;flex-direction:column;justify-content:center;align-items:center;gap:9px;margin-bottom:14px;display:flex}.empty-state strong{color:#101827;font-size:16px}.stock-grid{grid-template-columns:repeat(auto-fill,minmax(430px,1fr));gap:16px;display:grid}.stock-card{border-radius:var(--radius-lg);background:linear-gradient(145deg,#ffffffd6,#f7fbff9e);min-width:0;padding:16px;transition:transform .16s,box-shadow .16s,border-color .16s;overflow:hidden}.stock-card:hover{box-shadow:var(--shadow);border-color:#2f77c847;transform:translateY(-2px)}.stock-head,.card-foot{justify-content:space-between;align-items:center;gap:12px;display:flex}.stock-title-block{min-width:0}.stock-name-row{align-items:baseline;gap:8px;min-width:0;display:flex}.stock-name{color:#101827;white-space:nowrap;text-overflow:ellipsis;font-size:18px;font-weight:850;overflow:hidden}.stock-code{color:var(--subtle);font-variant-numeric:tabular-nums;font-size:12px}.stock-meta,.card-foot{color:var(--muted);font-size:12px}.stock-meta{margin-top:4px}.board-badge{color:#fff;background:linear-gradient(135deg,#f0675a,#d64235);border:1px solid #d6423538;border-radius:999px;flex:none;justify-content:center;align-items:center;min-width:56px;height:34px;font-weight:850;display:inline-flex;box-shadow:0 10px 22px #d6423533}.kline-chart{border-radius:var(--radius-md);background:#ffffff80;border:1px solid #90a1b82e;width:100%;height:220px;margin:14px 0 10px}.kline-empty{color:var(--muted);border-style:dashed;justify-content:center;align-items:center;font-size:13px;display:flex}.quote-grid{border-top:1px solid #90a1b82e;border-bottom:1px solid #90a1b82e;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;padding:11px 0;display:grid}.quote-grid>div{border-radius:var(--radius-sm);background:#ffffff75;min-width:0;padding:9px 10px}.quote-grid strong{color:#17202f;white-space:nowrap;margin-top:5px;font-size:14px;display:block}.quote-grid .up{color:var(--red)}.card-foot{padding-top:11px}.card-foot span{align-items:center;gap:6px;display:inline-flex}@keyframes spin{to{transform:rotate(360deg)}}@media (width<=1180px){.topbar{grid-template-columns:1fr;align-items:start}.toolbar{justify-content:flex-start;width:100%}.filter-strip{width:100%}.action-cluster{grid-template-columns:repeat(3,minmax(0,1fr));width:100%}.filter-group{min-width:0}}@media (width<=980px){.status-row{grid-template-columns:repeat(2,minmax(0,1fr))}.sync-day-list{grid-template-columns:1fr}}@media (width<=760px){.dashboard-shell{padding:16px}h1{font-size:26px}.filter-strip{grid-template-columns:1fr;padding:6px}.filter-group{width:auto}.mode-toggle,.board-options{display:grid}.mode-toggle{grid-template-columns:repeat(2,minmax(0,1fr))}.board-options{grid-template-columns:repeat(4,minmax(0,1fr))}.mode-option,.board-option,.date-button{width:100%}.action-button{justify-content:center}.status-row,.stock-grid{grid-template-columns:1fr}.stock-grid{gap:13px}.stock-card,.metric-card,.sync-progress-panel{border-radius:18px}.quote-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=480px){.dashboard-shell{padding:12px}.action-button{min-width:0}.action-cluster{grid-template-columns:1fr}.board-options{grid-template-columns:repeat(2,minmax(0,1fr))}}
