:root{--bg: #0b0e14;--bg-2: #0f131c;--panel: #151b27;--panel-2: #1b2230;--border: #232b3a;--text: #e6edf3;--muted: #8b97a8;--muted-2: #5d6b7e;--pos: #16c784;--neg: #ea3943;--flat: #b6c2d4;--accent: #5b8def;--accent-2: #2dd4bf;--warn: #f59e0b;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans Thai,sans-serif;color-scheme:dark}:root[data-theme=light]{--bg: #f6f8fb;--bg-2: #ffffff;--panel: #ffffff;--panel-2: #f1f4f8;--border: #e2e7ef;--text: #1a2233;--muted: #5d6b7e;--muted-2: #93a0b0;--pos: #0e9d63;--neg: #d32f3a;--flat: #5d6b7e;--accent: #2f6fd6;--accent-2: #0fa08b;--warn: #b3760a;color-scheme:light}*{box-sizing:border-box}body{margin:0;background:radial-gradient(1200px 600px at 80% -10%,#15233f 0%,var(--bg) 55%);color:var(--text);-webkit-font-smoothing:antialiased}:root[data-theme=light] body{background:var(--bg)}a{color:var(--accent)}.app{max-width:1280px;margin:0 auto;padding:20px 24px 64px}.admin{display:flex;min-height:100vh}.sidebar{width:232px;flex-shrink:0;box-sizing:border-box;background:var(--bg-2);border-right:1px solid var(--border);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.side-brand{display:flex;align-items:center;gap:10px;padding:18px 18px 14px}.side-brand .logo{color:var(--accent);font-size:18px}.side-name{font-size:16px;font-weight:600;letter-spacing:.2px}.side-sub{color:var(--muted);font-size:11px}.side-nav{display:flex;flex-direction:column;gap:3px;padding:8px 10px;flex:1}.side-link{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px;color:var(--muted);text-decoration:none;font-size:14px;transition:background .12s,color .12s}.side-link .ic{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex-shrink:0}.side-link:hover{background:var(--panel);color:var(--text)}.side-link.active{background:#5b8def24;color:var(--accent)}.side-foot{padding:14px 16px;border-top:1px solid var(--border);display:flex;flex-direction:column;align-items:flex-start;gap:6px}.side-acct{color:var(--muted);font-size:12px}.sidebar{transition:width .16s ease}.side-collapse{width:100%;margin-top:4px;border:none;background:none;font:inherit;text-align:left;cursor:pointer}.side-collapse .ic svg{transition:transform .16s ease}.admin.collapsed .sidebar{width:64px}.admin.collapsed .side-name,.admin.collapsed .side-sub,.admin.collapsed .side-foot,.admin.collapsed .side-link>span:not(.ic){display:none}.admin.collapsed .side-brand,.admin.collapsed .side-link{justify-content:center;padding-left:0;padding-right:0}.admin.collapsed .side-collapse .ic svg{transform:rotate(180deg)}.main-area{flex:1;min-width:0}.page-topbar{display:flex;align-items:center;justify-content:space-between;height:56px;padding:0 24px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg-2);z-index:5}.topbar-left{display:flex;align-items:center;gap:8px;min-width:0}.crumb{color:var(--muted);text-decoration:none;font-size:20px;line-height:1;padding:2px 7px;border-radius:6px}.crumb:hover{background:var(--panel);color:var(--text)}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:9px;border:1px solid var(--border);background:transparent;color:var(--muted);cursor:pointer;flex-shrink:0}.theme-toggle:hover{background:var(--panel);color:var(--text)}.page-title{font-size:17px;font-weight:600;margin:0;letter-spacing:.2px}.page-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px;margin-bottom:14px}@media (max-width: 860px){.admin{flex-direction:column}.sidebar{width:100%;height:auto;position:static;flex-direction:row;align-items:center;gap:4px;overflow-x:auto;border-right:none;border-bottom:1px solid var(--border)}.side-brand{padding:12px 14px;flex-shrink:0}.side-nav{flex-direction:row;flex:1;padding:8px;gap:4px}.side-link{padding:8px 11px;white-space:nowrap}.side-link span:not(.ic){display:none}.side-foot{display:none}.page-topbar{position:static}.side-collapse{display:none}}.topbar{display:flex;align-items:center;justify-content:space-between;padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--border)}.brand{display:flex;align-items:baseline;gap:10px}.brand h1{font-size:20px;margin:0;letter-spacing:.2px}.brand .tag{color:var(--muted);font-size:13px}.badges{display:flex;gap:8px;align-items:center}.badge{font-size:12px;padding:4px 10px;border-radius:999px;border:1px solid var(--border);background:var(--panel);color:var(--muted)}.badge.live{color:var(--pos);border-color:#16c78466}.badge.mock{color:var(--warn);border-color:#f59e0b59}.suggest-chip{font-size:12px;padding:2px 9px;margin:0 3px;border-radius:999px;border:1px solid var(--accent);background:transparent;color:var(--accent);cursor:pointer}.suggest-chip:hover{background:#5b8def24}.suggest-chip:disabled{opacity:.6;cursor:default}.grid{display:grid;gap:16px}.grid>*{min-width:0}.cards{grid-template-columns:repeat(4,1fr)}.two-col{grid-template-columns:1.6fr 1fr;align-items:start}.three-col{grid-template-columns:repeat(3,1fr)}@media (max-width: 980px){.cards{grid-template-columns:repeat(2,1fr)}.two-col,.three-col{grid-template-columns:1fr}}@media (max-width: 640px){.app{padding:16px 14px 48px}.panel{padding:14px}.field-grid{grid-template-columns:1fr}.card .value{font-size:21px}}@media (max-width: 420px){.cards{grid-template-columns:1fr}}.panel{background:linear-gradient(180deg,var(--panel) 0%,var(--bg-2) 100%);border:1px solid var(--border);border-radius:14px;padding:16px 18px}.panel h2{font-size:13px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin:0 0 14px;font-weight:600}.card .label{font-size:12px;color:var(--muted);margin-bottom:8px}.card .value{font-size:24px;font-weight:650;font-variant-numeric:tabular-nums}.card .sub{font-size:13px;margin-top:6px;color:var(--muted)}.pos{color:var(--pos)}.neg{color:var(--neg)}.flat{color:var(--flat)}.table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}th,td{text-align:right;padding:10px;font-size:13.5px;border-bottom:1px solid var(--border);white-space:nowrap}th{color:var(--muted);font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.4px}td.sym,th.sym{text-align:left}tbody tr:hover{background:#5b8def0f}th.txt,td.txt{text-align:left}td.note-cell{text-align:left;white-space:normal;min-width:240px;max-width:460px;line-height:1.5;font-size:13px;color:var(--muted)}td.date-cell{text-align:left;white-space:nowrap;color:var(--muted-2)}.edit-table th.num{text-align:right}.undo-toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);display:flex;align-items:center;gap:14px;padding:10px 16px;background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 24px #0006;font-size:14px;z-index:50}@media (max-width: 640px){.watch-table,.watch-table tbody{display:block}.watch-table thead{display:none}.watch-table tr{display:grid;grid-template-columns:1fr auto auto auto;grid-template-areas:"sym price chg rm" "sector sector date date" "note note note note";gap:2px 10px;align-items:baseline;padding:12px 2px;border-bottom:1px solid var(--border)}.watch-table tr:last-child{border-bottom:none}.watch-table td{display:block;padding:0;border:none;white-space:normal;text-align:left}.watch-table td.sym{grid-area:sym}.watch-table td.price-cell{grid-area:price;text-align:right}.watch-table td.chg-cell{grid-area:chg;text-align:right}.watch-table td.txt{grid-area:sector;font-size:12px;color:var(--muted-2)}.watch-table td.date-cell{grid-area:date;text-align:right;font-size:12px}.watch-table td.note-cell{grid-area:note;min-width:0;max-width:none;margin-top:2px}.watch-table td.rm-cell{grid-area:rm;text-align:right}}.sym-name{font-weight:600}.sym-sector{color:var(--muted-2);font-size:11.5px}.pill{display:inline-block;font-size:11px;padding:2px 8px;border-radius:6px;background:var(--panel-2);color:var(--muted)}.pill.buy{color:var(--accent-2)}.pill.sell{color:var(--neg)}.legend{list-style:none;padding:0;margin:14px 0 0}.legend li{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13.5px}.dot{width:10px;height:10px;border-radius:3px;flex:none}.legend .pctval{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--muted)}.bar-row{margin:12px 0}.bar-row .bar-top{display:flex;justify-content:space-between;font-size:13px;margin-bottom:6px}.bar-track{height:8px;border-radius:6px;background:var(--panel-2);overflow:hidden}.bar-fill{height:100%;border-radius:6px}.metric-row{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--border);font-size:13.5px}.metric-row:last-child{border-bottom:none}.metric-row .k{color:var(--muted)}.note{font-size:12px;color:var(--muted-2);margin-top:12px;line-height:1.5}.section-title{font-size:13px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin:26px 0 12px}.state{padding:40px;text-align:center;color:var(--muted)}.state.error{color:var(--neg)}.sym-link{display:flex;align-items:center;gap:8px;text-decoration:none;color:inherit}.sym-link:hover .sym-name{color:var(--accent)}.back-link{text-decoration:none;color:var(--muted);font-size:14px;padding:4px 8px;border-radius:8px;border:1px solid var(--border)}.back-link:hover{color:var(--text)}.signal-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.sig-badge{font-size:12px;font-weight:600;padding:3px 12px;border-radius:999px;border:1px solid var(--border)}.sig-badge.bullish{color:var(--pos);border-color:#16c78466;background:#16c78414}.sig-badge.bearish{color:var(--neg);border-color:#ea394366;background:#ea394314}.sig-badge.neutral{color:var(--flat);background:var(--panel-2)}.sig-note{color:var(--muted);font-size:12.5px;text-align:right}.snap-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}@media (max-width: 980px){.snap-grid{grid-template-columns:repeat(2,1fr)}}.snap-item{background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:10px 12px}.snap-label{font-size:11.5px;color:var(--muted);margin-bottom:4px}.snap-value{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}.btn{font-size:13.5px;font-weight:600;padding:9px 16px;border-radius:9px;border:1px solid var(--border);background:var(--panel-2);color:var(--text);cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:6px;transition:background .15s,border-color .15s}.btn:hover{border-color:var(--accent)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#06101f}.btn.primary:hover{background:#7aa4f5}.btn.ghost{background:transparent}.btn.sm{padding:4px 12px;font-size:12px}.btn-icon{background:transparent;border:none;color:var(--muted);cursor:pointer;font-size:14px;padding:4px 8px;border-radius:6px}.btn-icon:hover{color:var(--neg);background:#ea39431a}.row-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:12px}.paste-box{width:100%;min-height:90px;background:var(--bg-2);border:1px solid var(--border);border-radius:10px;color:var(--text);padding:10px 12px;font-family:inherit;font-size:13px;resize:vertical}.cell-input{width:100%;background:var(--bg-2);border:1px solid var(--border);border-radius:7px;color:var(--text);padding:7px 9px;font-size:13.5px;font-family:inherit}.cell-input.num{text-align:right;font-variant-numeric:tabular-nums}.cell-input:focus{outline:none;border-color:var(--accent)}.edit-table td{padding:6px 8px;border-bottom:none}.edit-table th{text-align:left;padding:6px 8px}.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,240px));gap:16px}.field-grid label{display:flex;flex-direction:column;gap:6px;font-size:12.5px;color:var(--muted)}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.login-card{width:100%;max-width:360px;display:flex;flex-direction:column;gap:14px}.login-title{font-size:22px;margin:0;letter-spacing:.2px}.login-sub{margin:0;color:var(--muted);font-size:13.5px}.login-field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}.obs-list{margin:12px 0 0;padding-left:18px;color:var(--muted);font-size:13.5px;line-height:1.7}.rec-card{display:flex;flex-direction:column;gap:8px}.rec-head{display:flex;align-items:center;justify-content:space-between}.rec-symbol{font-size:17px;font-weight:700;text-decoration:none;color:var(--text)}.rec-symbol:hover{color:var(--accent)}.rec-confidence{font-size:12px;color:var(--muted-2)}.rec-rationale{font-size:13.5px;color:var(--muted);line-height:1.6;margin:4px 0 0}.act-badge{font-size:13px;font-weight:700;padding:4px 14px;border-radius:999px;border:1px solid var(--border)}.act-badge.add{color:var(--pos);background:#16c7841f;border-color:#16c78466}.act-badge.hold{color:var(--accent);background:#5b8def1f;border-color:#5b8def66}.act-badge.trim{color:var(--warn);background:#f59e0b1f;border-color:#f59e0b66}.act-badge.sell{color:var(--neg);background:#ea39431f;border-color:#ea394366}.act-badge.watch{color:var(--flat);background:var(--panel-2)}.fund-name{font-size:14px;color:var(--text);margin:8px 0 0}.fund-flags{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.chart-legend{display:flex;gap:14px;font-size:12px;color:var(--muted)}.chart-legend span{display:flex;align-items:center;gap:5px}.chart-legend i{width:12px;height:3px;border-radius:2px;display:inline-block}
