:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0a0e14;--bg-elevated:#10161f;--panel:#131b26;--panel-soft:#172231;--border:#223044;--border-strong:#2d3f57;--text:#e6edf3;--text-dim:#9fb0c3;--text-faint:#6b7d92;--green:#22c55e;--green-soft:#22c55e24;--amber:#f0b429;--amber-soft:#f0b42924;--red:#f05252;--red-soft:#f0525224;--blue:#3b82f6;--blue-soft:#3b82f624;--purple:#a855f7;--purple-soft:#a855f724;--slate-soft:#9fb0c31f;--accent:#38bdf8;--radius:12px;--radius-sm:8px;--gap:14px;--gutter:clamp(14px, 3vw, 28px);--gutter-left:calc(var(--gutter) + env(safe-area-inset-left,0px));--gutter-right:calc(var(--gutter) + env(safe-area-inset-right,0px));--font-sans:"Pretendard", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans KR", "Malgun Gothic", Helvetica, Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", "Cascadia Mono", Consolas, "D2Coding", "Courier New", monospace}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f4f6fa;--bg-elevated:#fff;--panel:#fff;--panel-soft:#f6f8fc;--border:#dde3ec;--border-strong:#c6d0de;--text:#16202e;--text-dim:#52627a;--text-faint:#78889d;--green:#15803d;--green-soft:#15803d1a;--amber:#b45309;--amber-soft:#b453091a;--red:#c81e1e;--red-soft:#c81e1e1a;--blue:#1d4ed8;--blue-soft:#1d4ed81a;--purple:#7e22ce;--purple-soft:#7e22ce1a;--slate-soft:#52627a1a;--accent:#0369a1}*{box-sizing:border-box}html,body,#root{min-height:100%}body{font-family:var(--font-sans);background:var(--bg);color:var(--text);word-break:keep-all;-webkit-font-smoothing:antialiased;margin:0;font-size:14px;line-height:1.55}h1,h2,h3,h4{word-break:keep-all;line-height:1.35}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.app-header{padding:calc(14px + env(safe-area-inset-top,0px)) var(--gutter-right) 14px var(--gutter-left);background:linear-gradient(180deg, var(--bg-elevated), var(--panel));border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:12px;display:flex}.brand{align-items:center;gap:10px;min-width:0;display:flex}.brand-mark{background:linear-gradient(135deg, var(--accent), var(--purple));border-radius:10px;flex:none;place-items:center;width:38px;height:38px;font-size:19px;display:grid}.brand-text{min-width:0}.brand-title{letter-spacing:-.01em;flex-wrap:wrap;align-items:center;gap:8px;margin:0;font-size:17px;font-weight:800;display:flex}.brand-sub{color:var(--text-faint);margin:1px 0 0;font-size:12px}.header-right{flex-wrap:wrap;align-items:center;gap:10px;margin-left:auto;display:flex}.account-chip{min-width:0;max-width:240px;color:var(--text-dim);align-items:center;gap:6px;font-size:12px;display:inline-flex}.account-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.status-pill{background:var(--panel-soft);border:1px solid var(--border);color:var(--text-dim);border-radius:999px;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:inline-flex}.status-dot{background:var(--text-faint);border-radius:50%;flex:none;width:8px;height:8px}.status-dot.ok{background:var(--green);box-shadow:0 0 0 3px var(--green-soft)}.status-dot.warn{background:var(--amber);box-shadow:0 0 0 3px var(--amber-soft)}.status-dot.bad{background:var(--red);box-shadow:0 0 0 3px var(--red-soft)}.header-alert{padding:10px var(--gutter-right) 10px var(--gutter-left);background:var(--red-soft);color:var(--red);word-break:keep-all;border-bottom:1px solid #f0525259;align-items:flex-start;gap:9px;font-size:13px;line-height:1.55;display:flex}.tabs{padding:10px var(--gutter-right) 10px var(--gutter-left);border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-wrap:wrap;gap:6px;display:flex}.tab{color:var(--text-dim);border:1px solid #0000;border-radius:999px;padding:8px 16px;font-size:13.5px;font-weight:600;text-decoration:none}.tab:hover{color:var(--text);background:var(--panel-soft)}.tab.active{color:var(--text);background:var(--panel-soft);border-color:var(--border-strong)}.header-menu{position:relative}button.menu-btn{place-items:center;min-width:40px;padding-inline:10px;display:inline-grid;position:relative}.menu-glyph{display:block}.menu-badge{background:var(--amber);color:#1a1203;text-align:center;border-radius:999px;min-width:18px;height:18px;padding:0 5px;font-size:12px;font-weight:700;line-height:18px;position:absolute;top:-6px;right:-6px}.menu-panel{z-index:45;width:max-content;min-width:210px;max-width:min(300px, calc(100vw - 2 * var(--gutter)));background:var(--bg-elevated);border:1px solid var(--border-strong);border-radius:12px;flex-direction:column;padding:6px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 14px 34px #00000059}button.menu-item{text-align:left;width:100%;min-height:44px;color:var(--text);background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;padding:8px 12px;font-size:14px;display:flex}button.menu-item:hover:not(:disabled),button.menu-item:focus-visible{background:var(--panel-soft)}button.menu-item.danger{color:var(--red)}.menu-head{border-bottom:1px solid var(--border);margin-bottom:4px;padding:8px 12px 10px}.menu-account{flex-direction:column;gap:2px;min-width:0;display:flex}.menu-account .account-name{white-space:normal;overflow-wrap:anywhere;font-weight:700}.menu-email{color:var(--text-faint);overflow-wrap:anywhere;font-size:12px}.menu-account-badges{gap:6px;margin-top:4px;display:flex}.menu-foot{border-top:1px solid var(--border);color:var(--text-faint);margin-top:4px;padding:8px 12px 4px;font-size:12px}.app-header.narrow{padding-top:calc(8px + env(safe-area-inset-top,0px));flex-wrap:nowrap;gap:8px;padding-bottom:8px}.app-header.narrow .brand{flex:none;gap:8px}.app-header.narrow .brand-mark{border-radius:9px;width:32px;height:32px;font-size:17px}.app-header.narrow .brand-title{white-space:nowrap}.app-header.narrow .header-right{flex-wrap:nowrap;gap:8px;min-width:0;margin-left:auto}.app-header.narrow button{min-width:44px;min-height:44px}.status-pill.compact{gap:6px;min-width:0;padding:4px 10px}button.icon-action{place-items:center;padding:0;display:inline-grid}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.bottom-tabs{z-index:40;padding:4px env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px);background:var(--bg-elevated);border-top:1px solid var(--border);grid-template-columns:repeat(5,minmax(0,1fr));display:grid;position:fixed;bottom:0;left:0;right:0}body:has(input:focus,textarea:focus) .bottom-tabs{display:none}.bottom-tab,button.bottom-tab{width:100%;min-width:0;min-height:52px;color:var(--text-faint);background:0 0;border:0;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:4px 2px;font-size:12px;font-weight:600;text-decoration:none;display:flex}button.bottom-tab:hover:not(:disabled){background:0 0}.bottom-tab.active,button.bottom-tab.active{color:var(--accent)}.bottom-tab-label{text-align:center;overflow-wrap:anywhere;max-width:100%;line-height:1.2}.bottom-more{min-width:0;display:flex;position:relative}.more-sheet{background:var(--bg-elevated);border:1px solid var(--border-strong);border-radius:12px;flex-direction:column;min-width:170px;padding:6px;display:flex;position:absolute;bottom:calc(100% + 8px);right:6px;box-shadow:0 -10px 30px #0000004d}.more-sheet .tab{border-radius:8px;align-items:center;min-height:44px;padding:8px 14px;font-size:14px;display:flex}.page{max-width:1440px;padding:22px var(--gutter-right) calc(72px + env(safe-area-inset-bottom,0px)) var(--gutter-left);margin:0 auto}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;margin-bottom:16px;display:flex}.page-head h2{margin:0;font-size:19px}.page-head .hint{margin:4px 0 0}.page-actions{flex-wrap:wrap;gap:8px;display:flex}.section{margin-top:26px}.section-head{flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:10px;display:flex}.section-head h3{margin:0;font-size:15px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);min-width:0;padding:16px}.kpi-grid{gap:var(--gap);grid-template-columns:repeat(auto-fit,minmax(250px,1fr));margin-bottom:18px;display:grid}.kpi{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:10px;min-width:0;padding:14px 16px;display:flex}.kpi-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.kpi-title{color:var(--text-dim);letter-spacing:.01em;font-size:12.5px;font-weight:700}.kpi-foot{color:var(--text-faint);margin:0;font-size:11.5px}.kpi-counts{flex-wrap:wrap;gap:8px;display:flex}.count-chip{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel-soft);text-align:center;flex:auto;min-width:78px;padding:8px 10px}.count-chip .num{font-family:var(--font-mono);font-size:20px;font-weight:700;line-height:1.2;display:block}.count-chip .lbl{color:var(--text-dim);margin-top:2px;font-size:11px;display:block}.count-chip.green{background:var(--green-soft);border-color:#22c55e66}.count-chip.green .num{color:var(--green)}.count-chip.amber{background:var(--amber-soft);border-color:#f0b42966}.count-chip.amber .num{color:var(--amber)}.count-chip.red{background:var(--red-soft);border-color:#f0525266}.count-chip.red .num{color:var(--red)}.count-chip.blue{background:var(--blue-soft);border-color:#3b82f666}.count-chip.blue .num{color:var(--blue)}.kpi-figure{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.kpi-figure .big{font-family:var(--font-mono);font-size:26px;font-weight:700;line-height:1.15}.weight-bar{background:var(--panel-soft);border:1px solid var(--border);border-radius:999px;width:100%;height:10px;display:flex;overflow:hidden}.weight-bar span{height:100%;display:block}.weight-legend{color:var(--text-dim);flex-wrap:wrap;gap:4px 12px;font-size:11.5px;display:flex}.weight-legend>span{align-items:center;gap:5px;display:inline-flex}.legend-dot{border-radius:2px;flex:none;width:8px;height:8px}.cash-slice{background:repeating-linear-gradient(135deg, var(--text-faint) 0 2px, transparent 2px 4px)}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.toolbar-label{color:var(--text-faint);font-size:12.5px;font-weight:600}.chip-row{flex-wrap:wrap;gap:6px;min-width:0;display:flex}.chip{border:1px solid var(--border);background:var(--panel);color:var(--text-dim);cursor:pointer;white-space:normal;word-break:keep-all;border-radius:999px;padding:6px 13px;font-size:12.5px;font-weight:600}.chip:hover{color:var(--text);border-color:var(--border-strong)}.chip.active{color:var(--text);background:var(--panel-soft);border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.spacer{margin-left:auto}.traffic{border:1px solid var(--border);background:var(--panel-soft);white-space:normal;word-break:keep-all;border-radius:999px;align-self:flex-start;align-items:center;gap:8px;max-width:100%;padding:5px 12px;font-size:12px;font-weight:700;display:inline-flex}.traffic-lamp{flex:none;gap:3px;display:inline-flex}.traffic-lamp i{background:var(--slate-soft);border-radius:50%;width:7px;height:7px}.traffic.green{background:var(--green-soft);color:var(--green);border-color:#22c55e73}.traffic.green .traffic-lamp i:first-child,.traffic.green .traffic-lamp i:nth-child(2){background:var(--green)}.traffic.amber{background:var(--amber-soft);color:var(--amber);border-color:#f0b42973}.traffic.amber .traffic-lamp i:first-child,.traffic.amber .traffic-lamp i:nth-child(2){background:var(--amber)}.traffic.red{background:var(--red-soft);color:var(--red);border-color:#f0525273}.traffic.red .traffic-lamp i:first-child{background:var(--red)}.traffic.grey{color:var(--text-faint)}.cond{border:1px solid var(--border);background:var(--slate-soft);color:var(--text-faint);white-space:normal;word-break:keep-all;border-radius:5px;align-items:center;gap:4px;max-width:100%;padding:2px 7px;font-size:11px;font-weight:600;line-height:1.45;display:inline-flex}.metric .cond,.stat-box .cond{align-self:flex-start}.cond.met{color:var(--green);background:var(--green-soft);border-color:#22c55e59}.badge-row{flex-wrap:wrap;gap:5px;display:flex}.badge{white-space:normal;word-break:keep-all;border:1px solid #0000;border-radius:6px;align-items:center;gap:5px;max-width:100%;padding:3px 9px;font-size:11.5px;font-weight:700;line-height:1.45;display:inline-flex}.badge-green{color:var(--green);background:var(--green-soft);border-color:#22c55e59}.badge-amber{color:var(--amber);background:var(--amber-soft);border-color:#f0b42959}.badge-red{color:var(--red);background:var(--red-soft);border-color:#f0525259}.badge-blue{color:var(--blue);background:var(--blue-soft);border-color:#3b82f659}.badge-purple{color:var(--purple);background:var(--purple-soft);border-color:#a855f759}.badge-grey{color:var(--text-dim);background:var(--slate-soft);border-color:var(--border)}.cat-tag{background:var(--slate-soft);color:var(--text-dim);border:1px solid var(--border);white-space:normal;word-break:keep-all;border-radius:5px;padding:2px 7px;font-size:11px;font-weight:700;display:inline-block}.table-scroll{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);width:100%;overflow-x:auto}table.data-table{border-collapse:collapse;width:100%;font-size:13px}table.data-table th{text-align:left;background:var(--panel-soft);border-bottom:1px solid var(--border-strong);color:var(--text-dim);letter-spacing:.02em;white-space:normal;word-break:keep-all;vertical-align:bottom;padding:11px 12px;font-size:11.5px;font-weight:700;position:sticky;top:0}table.data-table td{border-bottom:1px solid var(--border);vertical-align:middle;white-space:normal;padding:11px 12px}table.data-table tbody tr:last-child td{border-bottom:none}table.data-table tbody tr:hover td{background:var(--panel-soft)}table.data-table tr.inactive{opacity:.45}table.data-table tfoot td{border-top:1px solid var(--border-strong);background:var(--panel-soft);padding:11px 12px;font-weight:700}.num-cell{font-family:var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}.metric{flex-direction:column;gap:3px;min-width:0;display:flex}.metric-value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}.metric-note{color:var(--text-faint);word-break:keep-all;font-size:11px}.metric-chip{font-family:var(--font-mono);border:1px solid var(--border);background:var(--slate-soft);white-space:nowrap;border-radius:6px;align-self:flex-start;padding:2px 8px;font-size:12px;font-weight:700}.metric-chip.green{color:var(--green);background:var(--green-soft);border-color:#22c55e59}.metric-chip.amber{color:var(--amber);background:var(--amber-soft);border-color:#f0b42959}.metric-chip.red{color:var(--red);background:var(--red-soft);border-color:#f0525259}.metric-chip.blue{color:var(--blue);background:var(--blue-soft);border-color:#3b82f659}.ticker-cell{flex-direction:column;gap:3px;min-width:0;display:flex}.ticker-name{word-break:keep-all;font-size:14px;font-weight:700}.name-input{border-radius:var(--radius-sm);width:100%;min-width:90px;color:var(--text);background:0 0;border:1px solid #0000;padding:2px 4px;font-size:14px;font-weight:700}.name-input:hover{border-color:var(--border)}.name-input:focus{background:var(--panel-soft);border-color:var(--border-strong);outline:none}.name-input::placeholder{color:var(--text-faint);font-weight:400}.ticker-sub{font-family:var(--font-mono);color:var(--text-faint);font-size:11.5px}.up{color:var(--green)}.down{color:var(--red)}.card-grid{gap:var(--gap);grid-template-columns:repeat(auto-fill,minmax(290px,1fr));display:grid}.stock-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:11px;min-width:0;padding:15px;display:flex}.stock-card-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.stock-card-price{text-align:right;flex-direction:column;align-items:flex-end;min-width:0;display:flex}.stock-card-price .big{font-family:var(--font-mono);font-size:21px;font-weight:700;line-height:1.2}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;display:grid}.stat-box{background:var(--panel-soft);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:0;padding:8px 10px}.stat-box .k{color:var(--text-faint);word-break:keep-all;font-size:11px;display:block}.stat-box .v{font-family:var(--font-mono);margin-top:2px;font-size:14px;font-weight:600;display:block}.card-actions{border-top:1px solid var(--border);flex-direction:column;gap:8px;padding-top:11px;display:flex}.callout{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel-soft);word-break:keep-all;align-items:flex-start;gap:10px;padding:11px 14px;font-size:13px;display:flex}.callout .ico{flex:none;line-height:1.5}.callout.amber{background:var(--amber-soft);color:var(--amber);border-color:#f0b42966}.callout.red{background:var(--red-soft);color:var(--red);border-color:#f0525266}.callout.green{background:var(--green-soft);color:var(--green);border-color:#22c55e66}.callout.blue{background:var(--blue-soft);color:var(--blue);border-color:#3b82f666}.empty-state{text-align:center;border:1px dashed var(--border-strong);border-radius:var(--radius);background:var(--panel);color:var(--text-dim);padding:54px 20px}.empty-state h3{color:var(--text);margin:0 0 6px;font-size:16px}.empty-state p{max-width:460px;margin:0 auto;font-size:13px}.login-prompt{flex-direction:column;align-items:center;gap:14px;padding:40px 20px;display:flex}.login-prompt h3{overflow-wrap:anywhere;margin:0}.guest-features{text-align:left;max-width:460px;margin:0;padding-left:18px;font-size:13px;line-height:1.6}.guest-features b{color:var(--text)}.header-alert>button{flex-shrink:0;margin-left:auto}.form-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));align-items:end;gap:12px;display:grid}.field{flex-direction:column;gap:5px;min-width:0;display:flex}.field>label{color:var(--text-dim);word-break:keep-all;font-size:11.5px;font-weight:600}.field-wide{grid-column:span 2;min-width:240px}.symbol-search{min-width:0;position:relative}.symbol-search>input{width:100%}.symbol-options{z-index:30;background:var(--bg-elevated);border:1px solid var(--border-strong);border-radius:var(--radius-sm);max-height:300px;margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 14px 34px #00000059}.symbol-option{text-align:left;cursor:pointer;white-space:normal;word-break:keep-all;background:0 0;border:0;border-radius:6px;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:7px 9px;display:flex}.symbol-option.active,.symbol-option:hover{background:var(--panel-soft)}.symbol-option-name{color:var(--text);font-size:13px;font-weight:600;line-height:1.35}.symbol-option-meta{color:var(--text-dim);font-size:11.5px}.symbol-search-status{color:var(--text-dim);word-break:keep-all;margin:5px 0 0;font-size:11.5px;line-height:1.45}.symbol-picked{border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--blue-soft);justify-content:space-between;align-items:center;gap:10px;min-height:38px;padding:7px 9px;display:flex}.symbol-picked-text{flex-direction:column;gap:1px;min-width:0;display:flex}.symbol-picked-name{word-break:keep-all;font-size:13px;font-weight:600}.symbol-picked-meta{color:var(--text-dim);font-size:11.5px}input,select,button,textarea{color:var(--text);font-family:inherit;font-size:13px}input[type=number],input[type=text],input[type=password],input[type=date],select{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);width:100%;min-width:0;color:var(--text);padding:8px 10px}.num-input{font-family:var(--font-mono);font-variant-numeric:tabular-nums;text-align:right}input:focus,select:focus,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input::placeholder{color:var(--text-faint)}button{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel-soft);color:var(--text);cursor:pointer;white-space:normal;word-break:keep-all;padding:8px 14px;font-weight:600}button:hover:not(:disabled){border-color:var(--border-strong);background:var(--panel)}button.primary{background:var(--accent);border-color:var(--accent);color:#05202b}button.primary:hover:not(:disabled){filter:brightness(1.08);background:var(--accent)}button.success{background:var(--green-soft);color:var(--green);border-color:#22c55e73}button.ghost{background:0 0}button.sm{padding:5px 10px;font-size:12px}button:disabled{opacity:.5;cursor:not-allowed}.btn-group{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.btn-group.tight{flex-wrap:nowrap}.btn-group.tight button{white-space:nowrap}.input-with-button{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.input-with-button input{flex:0 108px;width:108px}.input-with-button .unit{color:var(--text-faint);white-space:nowrap;font-size:12px}.input-with-button.tight{flex-wrap:nowrap}.input-with-button.tight input{flex:auto;width:auto;min-width:64px}.input-with-button.tight select{flex:none;width:auto}.hint{color:var(--text-faint);word-break:keep-all;font-size:12px}.error-text{color:var(--red);background:var(--red-soft);border-radius:var(--radius-sm);word-break:keep-all;border:1px solid #f0525259;margin:0 0 14px;padding:11px 14px;font-size:13px}.error-head{align-items:flex-start;gap:9px;line-height:1.55;display:flex}.error-dismiss{color:var(--red);border-color:#f0525259;flex:none;margin-left:auto}.error-detail{border-top:1px solid #f0525240;margin-top:9px;padding-top:8px}.error-detail summary{cursor:pointer;opacity:.85;font-size:12px;font-weight:600}.error-detail p{font-family:var(--font-mono);overflow-wrap:break-word;color:var(--text-dim);margin:8px 0 0;font-size:11.5px;line-height:1.6}.chart-shell{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:10px}.legend-row{color:var(--text-dim);flex-wrap:wrap;gap:6px 16px;margin-top:12px;font-size:12px;display:flex}.legend-row>span{align-items:center;gap:6px;display:inline-flex}@media (width<=720px){:root{--gutter:14px}.app-header{padding-top:calc(12px + env(safe-area-inset-top,0px));padding-bottom:12px}.page{padding-top:18px;padding-bottom:calc(56px + env(safe-area-inset-bottom,0px))}.kpi-figure .big{font-size:22px}}.modal-backdrop{z-index:50;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#04080ea8;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);width:min(1040px,100%);max-height:calc(100vh - 40px);padding:18px;overflow-y:auto;box-shadow:0 18px 48px #00000073}.modal-head{flex-wrap:wrap;align-items:center;gap:10px 14px;margin-bottom:14px;display:flex}.modal-title{flex:auto;align-items:baseline;gap:8px;min-width:0;display:flex}.modal-title h3{margin:0;font-size:16px}.modal-head .icon-btn{order:99;margin-left:auto}.icon-btn{width:30px;height:30px;color:var(--text-dim);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;padding:0;font-size:14px;display:inline-flex}.icon-btn:hover{color:var(--text);border-color:var(--border-strong)}.confirm-modal{width:min(460px,100%)}.confirm-body{color:var(--text);word-break:keep-all;font-size:13px;line-height:1.65}.confirm-body p{margin:0 0 8px}.confirm-body p:last-child{margin-bottom:0}.confirm-actions{justify-content:flex-end;margin-top:16px}.install-hint{width:min(440px,100%)}.install-hint-body{color:var(--text);word-break:keep-all;font-size:13px;line-height:1.7}.install-hint-body p{margin:0 0 10px}.install-hint-body ol{margin:0 0 10px;padding-left:20px}.install-hint-body li{margin-bottom:6px}.install-hint-body .hint-note{color:var(--text-dim);margin-bottom:0}.install-hint .btn-group{justify-content:flex-end;margin-top:16px}@media (width<=640px){.modal-backdrop{align-items:stretch;padding:0}.modal{border:none;border-radius:0;max-height:100vh}.confirm-modal,.install-hint{border:1px solid var(--border);border-radius:var(--radius);align-self:center;height:fit-content;margin:16px}}table.data-table.fixed{table-layout:fixed}button.danger{color:var(--red);background:var(--red-soft);border:1px solid #f0525266}button.danger:hover:not(:disabled){background:#f0525233}.stock-line{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.stock-name{word-break:keep-all;color:var(--text);font-size:14px;font-weight:700}button.stock-name{text-align:left;cursor:pointer;text-decoration:underline;-webkit-text-decoration-color:var(--border-strong);text-decoration-color:var(--border-strong);text-underline-offset:3px;background:0 0;border:none;padding:0;font-family:inherit}button.stock-name:hover{color:var(--blue);-webkit-text-decoration-color:var(--blue);text-decoration-color:var(--blue)}.drag-handle{width:26px;height:26px;color:var(--text-faint);cursor:grab;-webkit-user-select:none;user-select:none;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;font-size:15px;line-height:1;display:inline-flex}.drag-handle:hover,.drag-handle:focus-visible{color:var(--text);border-color:var(--border-strong);background:var(--slate-soft)}.drag-handle:active{cursor:grabbing}tr.dragging,.stock-card.dragging{opacity:.6}tr.dragging td{background:var(--blue-soft)}.stock-card.dragging{border-color:var(--blue)}.edit-bar{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel-soft);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;padding:10px 12px;display:flex}table.data-table tr.dirty td,table.data-table tr.dirty:hover td{background:var(--amber-soft)}.metric-line{white-space:nowrap;align-items:center;gap:6px;min-width:0;display:flex}.metric-line .metric-note{font-size:11.5px}.cond-mark{width:18px;height:18px;color:var(--text-faint);background:var(--slate-soft);border:1px solid var(--border);cursor:help;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:700;line-height:1;display:inline-flex}.cond-mark.met{color:var(--green);background:var(--green-soft);border-color:#22c55e73}.th-sub{color:var(--text-faint);font-weight:600}.th-cond{color:var(--text-faint);font-size:10.5px;font-weight:600;font-family:var(--font-mono);white-space:normal;word-break:keep-all;margin-top:3px;display:block}.chart-coverage{margin-top:6px}.link-btn{font:inherit;color:var(--blue);cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.link-btn:disabled{color:var(--text-faint);cursor:default}.diag-modal{width:min(900px,100%)}.diag-body{flex-direction:column;gap:2px;max-height:min(60vh,520px);padding:4px 2px;display:flex;overflow-y:auto}.diag-row{border-bottom:1px solid var(--border);align-items:flex-start;gap:10px;padding:8px 6px;display:flex}.diag-row:last-child{border-bottom:none}.diag-time{flex:none;padding-top:2px;font-size:11.5px}.diag-text{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.diag-text .hint{font-size:11px}.diag-text pre{font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word;color:var(--text);margin:0;font-size:12px;line-height:1.5}.users-modal{width:min(720px,100%)}.users-intro{margin:0 0 10px}.users-list{flex-direction:column;display:flex}.user-row{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:10px 14px;padding:10px 4px;display:flex}.user-row:last-child{border-bottom:none}.user-who{flex-direction:column;flex:260px;gap:3px;min-width:0;display:flex}.user-name{overflow-wrap:anywhere;flex-wrap:wrap;align-items:center;gap:6px;display:flex}.user-email,.user-meta{overflow-wrap:anywhere;font-size:12px}.user-actions{flex:none;gap:6px;margin-left:auto;display:flex}.push-modal{width:min(560px,100%)}.push-device,.push-kinds{border-bottom:1px solid var(--border);flex-direction:column;gap:10px;padding:12px 0;display:flex}.push-device p,.push-kinds h4{overflow-wrap:anywhere;margin:0}.push-actions{flex-wrap:wrap;gap:8px;display:flex}.push-blocked{border-radius:var(--radius-sm);background:var(--amber-soft);padding:10px 12px;line-height:1.55}.push-notice{color:var(--green)}.push-kind{cursor:pointer;overflow-wrap:anywhere;align-items:flex-start;gap:10px;line-height:1.45;display:flex}.push-kind input{flex:none;width:18px;height:18px;margin-top:2px}.push-foot{margin:12px 0 0;line-height:1.55}.count-badge{justify-content:center;min-width:18px;margin-left:6px;padding:0 6px}.diag-foot{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-top:12px;padding-top:12px;display:flex}.diag-foot .hint{overflow-wrap:anywhere;min-width:0}.diag-download{color:var(--text-dim);border:1px solid var(--border);background:0 0;border-radius:8px;flex:none;padding:6px 12px;font-size:12.5px;text-decoration:none}.diag-download:hover{color:var(--text);border-color:var(--border-strong)}@media (width<=640px){.diag-row{flex-wrap:wrap}}.login-shell{justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.login-panel{flex-direction:column;gap:14px;width:100%;max-width:340px;display:flex}.login-brand{align-items:center;gap:10px;display:flex}.login-brand span{font-size:26px}.login-brand h1{letter-spacing:-.01em;margin:0;font-size:20px}.login-panel .hint{margin:0}.login-panel button{width:100%}@media (pointer:coarse){input,select,textarea{font-size:16px}button,.tab{min-height:40px}.icon-btn{width:38px;height:38px}button,.tab{-webkit-user-select:none;user-select:none}}.login-shell{min-height:100dvh}@media (width<=640px){.modal{max-height:100dvh;padding-bottom:calc(18px + env(safe-area-inset-bottom,0px));overscroll-behavior:contain}}.macro-card{gap:9px}.macro-card-name{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.macro-title{text-align:left;color:var(--text);white-space:normal;word-break:keep-all;-webkit-text-decoration-color:var(--border-strong);text-decoration-color:var(--border-strong);text-underline-offset:3px;font-size:15px;font-weight:650}.macro-title:hover{color:var(--blue);-webkit-text-decoration-color:var(--blue);text-decoration-color:var(--blue)}.macro-figure{flex-wrap:wrap;align-items:baseline;gap:9px;display:flex}.macro-figure .big{font-size:24px;font-weight:700;line-height:1.15}.macro-change{color:var(--text-dim);font-size:13px}.macro-foot{margin:0;line-height:1.55}.regime-row{margin-bottom:var(--gap);flex-wrap:wrap;gap:8px;display:flex}.regime-badge{flex-direction:column;align-items:flex-start;gap:2px;padding:7px 11px;font-size:13px}.regime-detail{font-family:var(--font-mono);opacity:.85;font-size:11.5px;font-weight:500}.regime-quiet{margin:0 0 var(--gap)}.pin-btn{min-width:0;color:var(--text-faint);cursor:pointer;background:0 0;border:none;flex:none;padding:2px 4px;font-size:17px;line-height:1}.pin-btn:hover,.pin-btn.on{color:var(--amber)}.macro-zone{border:1px solid #0000;border-radius:6px;flex-wrap:wrap;align-self:flex-start;align-items:baseline;gap:6px;margin:0;padding:4px 10px;font-size:13px;font-weight:700;display:inline-flex}.macro-zone-range{font-family:var(--font-mono);opacity:.8;font-size:11.5px;font-weight:500}.macro-forecast{color:var(--text-dim);margin:0;font-size:12.5px;line-height:1.55}.macro-surprise{color:var(--text);margin-left:8px}.forecast-open{align-self:flex-start;font-size:12.5px}.forecast-form{border:1px solid var(--border);background:var(--panel-soft);border-radius:8px;flex-wrap:wrap;align-items:flex-end;gap:8px;padding:10px;display:flex}.forecast-form label{flex-direction:column;flex:110px;gap:3px;min-width:0;display:flex}.forecast-form input{width:100%;min-width:0}.forecast-actions{flex-wrap:wrap;flex:auto;gap:6px;display:flex}.forecast-actions button{flex:none;padding:6px 12px;font-size:12.5px}.macro-strip{margin-bottom:var(--gap);scrollbar-width:thin;gap:8px;padding-bottom:4px;display:flex;overflow-x:auto}.macro-chip{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);color:inherit;flex-direction:column;flex:none;gap:3px;padding:8px 12px;text-decoration:none;display:flex}.macro-chip:hover{border-color:var(--border-strong)}.macro-chip-name{color:var(--text-dim);white-space:nowrap;font-size:11.5px}.macro-chip-value{white-space:nowrap;align-items:baseline;gap:6px;font-size:15px;font-weight:700;display:flex}.macro-chip-change{color:var(--text-dim);font-size:11.5px;font-weight:500}.macro-chip-zone{white-space:nowrap;padding:0;font-size:11.5px;font-weight:700;background:0 0!important;border:none!important}.macro-home{margin-bottom:var(--gap)}.macro-home .regime-row,.macro-home .macro-strip{margin-bottom:8px}.macro-home>:last-child{margin-bottom:0}.callout .pin-btn{align-self:flex-start;margin-left:auto}.review-panel{margin-bottom:var(--gap)}.review-panel.due{border-color:var(--purple);box-shadow:inset 3px 0 0 var(--purple)}.review-head{flex-wrap:wrap;justify-content:space-between;gap:12px 24px;display:flex}.review-controls{flex-wrap:wrap;align-items:flex-end;gap:10px 16px;display:flex}.review-controls .field>span{color:var(--text-dim);font-size:12px}.review-due-text{color:var(--text);margin:10px 0 0}.record-row{margin-top:12px}.record-row input{flex:auto;min-width:0}.new-money{flex-wrap:wrap;align-items:center;gap:6px 12px;margin-bottom:10px;display:flex}.new-money>label{color:var(--text-dim);font-size:12.5px}.new-money .input-with-button{width:200px;max-width:100%}.new-money .hint{flex:260px}.data-table tr.cash-row td,.trade-row td{background:var(--panel-soft)}.trade-form{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.trade-form .input-with-button{width:150px}.trade-title{font-weight:600}.trade-form .hint{flex:220px}.snapshot-list{flex-direction:column;gap:8px;display:flex}.snapshot{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--panel);padding:10px 12px}.snapshot>summary{cursor:pointer;flex-wrap:wrap;align-items:baseline;gap:4px 12px;display:flex}.snapshot[open]>summary{margin-bottom:10px}.snapshot-total{font-family:var(--font-mono);font-weight:600}.snapshot-note{color:var(--text-dim);overflow-wrap:anywhere}.snapshot-foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;display:flex}.card-actions>.k{color:var(--text-faint);font-size:11.5px}.first-steps{flex-direction:column;align-items:center;gap:14px;padding:36px 20px;display:flex}.first-steps ol{text-align:left;overflow-wrap:anywhere;max-width:520px;margin:0;padding-left:20px;font-size:13px;line-height:1.7}.first-steps b{color:var(--text)}.link-button{border-radius:var(--radius-sm);border:1px solid var(--accent);background:var(--accent);color:#05202b;word-break:keep-all;padding:8px 14px;font-weight:600;text-decoration:none;display:inline-block}.link-button:hover{filter:brightness(1.08)}.policy{overflow-wrap:anywhere;max-width:760px;margin:0 auto;font-size:14px;line-height:1.75}.policy h2{margin:8px 0 4px;font-size:20px}.policy h2+.hint{margin-top:0}.policy h3{margin:22px 0 6px;font-size:15px}.policy ul{padding-left:20px}.policy li+li{margin-top:4px}.contact-line{overflow-wrap:anywhere}.consent-line{max-width:460px;margin:0;font-size:12px}.site-footer{color:var(--text-dim);text-align:center;flex-wrap:wrap;justify-content:center;gap:4px 14px;padding:18px 16px 28px;font-size:12px;display:flex}.site-footer a{color:var(--text-dim)}@media (width<=720px){.site-footer{padding-bottom:calc(84px + env(safe-area-inset-bottom,0px))}}.fund-panel{flex-direction:column;gap:16px;display:flex}.fund-panel .hint,.fund-empty{overflow-wrap:anywhere}.fund-groups{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px;display:grid}.fund-group h4{color:var(--text-dim);margin:0 0 8px;font-size:13px;font-weight:600}.fund-panel .nobr{white-space:nowrap}.fund-group .stat-box .v{overflow-wrap:anywhere}.per-range{height:18px;margin:6px 8px 0;position:relative}.per-track{background:var(--panel-soft);border:1px solid var(--border);border-radius:2px;height:4px;position:absolute;top:7px;left:0;right:0}.per-median{background:var(--text-faint);width:2px;height:12px;margin-left:-1px;position:absolute;top:3px}.per-now{background:var(--accent);border:2px solid var(--panel);border-radius:50%;width:14px;height:14px;margin-left:-7px;position:absolute;top:2px}.per-scale{font-family:var(--font-mono);color:var(--text-faint);flex-wrap:wrap;justify-content:space-between;gap:4px 12px;margin:4px 0 6px;font-size:11px;display:flex}.per-chart-head{flex-wrap:wrap;gap:8px 12px}.per-key{flex-wrap:wrap;gap:4px 16px;margin:0 0 8px;display:flex}.per-key-item{align-items:center;gap:6px;display:inline-flex}.per-key-dot{background:var(--accent);border-radius:50%;width:10px;height:10px}.per-key-median{background:var(--text-faint);width:2px;height:12px}.per-key-track{background:var(--border-strong,var(--border));border-radius:2px;width:22px;height:4px}.per-rows{margin:0;padding:0;list-style:none}.per-row,.per-axis{grid-template-columns:minmax(96px,10rem) minmax(0,1fr) minmax(120px,12rem);align-items:center;gap:12px;width:100%;display:grid}.per-row{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;padding:6px 8px;position:relative}.per-row:hover,.per-row:focus-visible{background:var(--panel-soft)}.per-row-name{overflow-wrap:anywhere;font-weight:600}.per-row-value{overflow-wrap:anywhere;font-size:13px}.per-row-plot{height:18px;margin:0 8px;position:relative}.per-grid{background:var(--border);opacity:.6;width:1px;position:absolute;top:0;bottom:0}.per-bar{background:var(--border-strong,var(--border));border-radius:2px;min-width:4px;height:4px;position:absolute;top:7px}.per-tip{z-index:5;border:1px solid var(--border);background:var(--panel);color:var(--text);pointer-events:none;border-radius:8px;padding:6px 10px;font-size:12px;display:none;position:absolute;top:calc(100% + 2px);left:8px;right:8px;box-shadow:0 6px 18px #00000040}.per-row:hover .per-tip,.per-row:focus-visible .per-tip{display:block}.per-axis{padding:0 8px}.per-axis-ticks{height:16px;font-family:var(--font-mono);color:var(--text-faint);margin:0 8px;font-size:11px;position:relative}.per-axis-ticks span{white-space:nowrap;position:absolute;transform:translate(-50%)}@media (width<=640px){.per-row,.per-axis{grid-template-columns:minmax(0,1fr) auto;gap:4px 8px}.per-row-plot,.per-axis-ticks{grid-area:2/1/auto/-1}.per-row-value{text-align:right}.per-axis .per-row-name,.per-axis .per-row-value{display:none}}.fund-table{border-collapse:collapse;width:100%;font-size:12px}.fund-table th,.fund-table td{text-align:right;border-bottom:1px solid var(--border);vertical-align:top;padding:6px 8px}.fund-table thead th{color:var(--text-faint);word-break:keep-all;font-size:11px;font-weight:500}.fund-table th[scope=row],.fund-table thead th:first-child{text-align:left}.fund-table th[scope=row]{font-weight:600}.fund-table th[scope=row] .hint{font-size:11px;font-weight:400;display:block}.fund-list{min-width:1080px}.fund-list td,.fund-list thead th{text-align:right;white-space:nowrap}.fund-list thead th:first-child,.fund-list th[scope=row]{text-align:left}.fund-list thead th{word-break:keep-all}.fund-list th[scope=row]{white-space:normal;min-width:120px}.fund-list th[scope=row] .hint{font-size:11px;font-weight:400;display:block}.fund-foot{overflow-wrap:anywhere;margin-top:10px}.fund-hidden{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.fund-hidden li{overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:2px 10px;display:flex}@media (width<=640px){.fund-table thead{display:none}.fund-table,.fund-table tbody,.fund-table tr{display:block}.fund-table tr{border-bottom:1px solid var(--border);grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 12px;padding:8px 0;display:grid}.fund-table th,.fund-table td{overflow-wrap:anywhere;border:none;justify-content:space-between;gap:8px;padding:2px 0;display:flex}.fund-table th[scope=row]{flex-wrap:wrap;grid-column:1/-1;align-items:baseline;gap:2px 8px;display:flex}.fund-table td:before{content:attr(data-label);color:var(--text-faint);font-family:var(--font-sans)}.fund-list{min-width:0}.fund-list thead{display:none}.fund-list,.fund-list tbody{display:block}.fund-list tr{border-bottom:1px solid var(--border);grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 14px;padding:10px 12px;display:grid}.fund-list th,.fund-list td{white-space:normal;overflow-wrap:anywhere;border:none;justify-content:space-between;gap:8px;padding:2px 0;display:flex}.fund-list th[scope=row]{flex-wrap:wrap;grid-column:1/-1;justify-content:flex-start;align-items:baseline;gap:2px 10px;padding-bottom:4px}.fund-list th[scope=row] .hint{display:inline}.fund-list td:before{content:attr(data-label);color:var(--text-faint);font-family:var(--font-sans)}}.ai-key-modal{width:min(600px,100%)}.ai-summary-modal{width:min(820px,100%)}.ai-key-form{flex-direction:column;gap:12px;display:flex}.ai-key-grid label,.ai-model-pick,.ai-model-pick label{flex-direction:column;gap:5px;min-width:0;display:flex}.ai-key-grid label>span,.ai-model-pick label>span{color:var(--text-dim);word-break:keep-all;font-size:11.5px;font-weight:600}.ai-key-actions{flex-wrap:wrap;align-items:flex-end;gap:8px 12px;display:flex}.ai-key-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.ai-model-pick{flex:100%}.ai-model-id{overflow-wrap:anywhere}.ai-saved,.ai-intro,.ai-using,.ai-meta{overflow-wrap:anywhere;margin:0;line-height:1.55}.ai-key-notes{margin:0;padding-left:18px;line-height:1.55}.ai-key-notes li+li{margin-top:4px}.check-line{cursor:pointer;overflow-wrap:anywhere;align-items:flex-start;gap:8px;line-height:1.45;display:flex}.check-line input{flex:none;width:16px;height:16px;margin-top:2px}.ok-text{color:var(--green);margin:0}.ai-panel{flex-direction:column;gap:12px;display:flex}.ai-key-box{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);flex-direction:column;gap:10px;padding:14px;display:flex}.ai-key-box h4,.ai-key-box>p{margin:0}.ai-run{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.ai-result{border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px 16px}.ai-text{overflow-wrap:anywhere;word-break:keep-all;line-height:1.7}.ai-text h4{margin:16px 0 6px;font-size:14px}.ai-text h4:first-child{margin-top:8px}.ai-text p{margin:6px 0}.ai-text ul,.ai-text ol{margin:4px 0;padding-left:20px}.ai-text li+li{margin-top:3px}.ai-disclaimer{border-top:1px solid var(--border);color:var(--text-faint);word-break:keep-all;margin:14px 0 0;padding-top:10px;font-size:12px;line-height:1.55}.ai-context summary{cursor:pointer;color:var(--text-dim);font-size:12.5px}.ai-context h5{color:var(--text-dim);margin:10px 0 4px;font-size:12px}.ai-context pre{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--bg-elevated);border-radius:var(--radius-sm);max-height:320px;margin:0;padding:10px 12px;font-size:12px;line-height:1.5;overflow-y:auto}.ai-question{flex-direction:column;gap:6px;display:flex}.ai-question>label{color:var(--text-dim);word-break:keep-all;font-size:12.5px;font-weight:600}.ai-question>label .hint{font-weight:400}.ai-question textarea{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);width:100%;min-width:0;color:var(--text);resize:vertical;padding:8px 10px;line-height:1.5}.ai-question>p{margin:0;line-height:1.55}.ai-question-foot{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:6px 12px;display:flex}.ai-examples{flex-wrap:wrap;flex:260px}.ai-examples .chip{white-space:normal;text-align:left;overflow-wrap:anywhere}.error-inline{color:var(--red)}.ai-asked{border-left:3px solid var(--border);overflow-wrap:anywhere;margin:4px 0 8px;padding:8px 10px;line-height:1.55}.ai-open{white-space:nowrap}.card-actions .ai-open{align-self:flex-start}.ai-writing{color:var(--accent,var(--fg));animation:1.2s ease-in-out infinite ai-writing}@keyframes ai-writing{50%{opacity:.45}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.page-skeleton{gap:var(--gap);flex-direction:column;display:flex}.skeleton-cards{gap:var(--gap);grid-template-columns:repeat(auto-fit,minmax(220px,1fr));display:grid}.skeleton-rows{flex-direction:column;gap:8px;display:flex}.skeleton{background:linear-gradient(90deg, var(--panel) 0%, var(--panel-soft) 50%, var(--panel) 100%);border:1px solid var(--border);border-radius:var(--radius);background-size:200% 100%;animation:1.4s ease-in-out infinite skeleton-shimmer}.skeleton-card{height:120px}.skeleton-row{border-radius:var(--radius-sm);height:44px}.skeleton-chart{height:min(52vh,420px);margin:12px 0}@keyframes skeleton-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){.ai-writing,.skeleton,.spin{animation:none}}.view-head{justify-content:flex-start;margin-bottom:14px;display:flex}.view-switch{border:1px solid var(--border);background:var(--panel);border-radius:999px;padding:3px;display:inline-flex}.view-switch button{min-width:96px;min-height:38px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:999px;padding:0 16px;font-size:13.5px;font-weight:700}.view-switch button[aria-pressed=true]{background:var(--panel-soft);color:var(--text);box-shadow:inset 0 0 0 1px var(--accent)}.money-line{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);flex-wrap:wrap;align-items:flex-end;gap:14px 28px;padding:16px 18px;display:flex}.money-total{flex-direction:column;gap:4px;min-width:0;display:flex}.money-big{font-variant-numeric:tabular-nums;letter-spacing:-.01em;overflow-wrap:anywhere;font-size:26px;font-weight:800}.money-facts{flex-wrap:wrap;gap:10px 26px;min-width:0;margin:0;display:flex}.money-facts div{flex-direction:column;gap:3px;min-width:0;display:flex}.money-facts dt{color:var(--text-faint);font-size:12px}.money-facts dd{overflow-wrap:anywhere;margin:0;font-size:15px;font-weight:700}.money-note{flex-basis:100%;margin:0}.portfolio-sub{margin-top:12px}.review-line{color:var(--text-dim);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 14px;margin:8px 2px 0;font-size:13px;display:flex}.review-line.due b{color:var(--amber)}.sort-pick{color:var(--text-dim);align-items:center;gap:8px;margin-left:auto;font-size:12.5px;display:inline-flex}.sort-pick select{min-height:44px}.empty-state.compact{padding:22px 16px}.holdings-table{width:100%;min-width:860px}.holdings-table .num-head,.holdings-table .num-cell{text-align:right}.holdings-table .signal-head,.holdings-table .signal-cell{text-align:center;width:56px;padding-left:4px;padding-right:4px}.stock-line .hint.mono{font-size:12px}.price-change{white-space:nowrap}.return-cell{flex-direction:column;align-items:flex-end;gap:2px;display:inline-flex}.fx-missing{border:1px solid var(--border-strong);font-size:11px;font-family:var(--font-sans,inherit);color:var(--text-faint);white-space:nowrap;border-radius:999px;margin-left:6px;padding:1px 6px;display:inline-block}.link-like{min-height:44px;color:var(--blue);font:inherit;text-underline-offset:3px;cursor:pointer;text-align:left;white-space:normal;word-break:keep-all;background:0 0;border:none;padding:0;font-size:13px;text-decoration:underline}.cost-entry{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;display:inline-flex}.cost-entry input{width:110px}.signal-slot{flex:0 0 44px;justify-content:center;align-items:center;width:44px;height:44px;display:inline-flex}.signal-dot-btn{cursor:pointer;background:0 0;border:none;border-radius:50%;padding:0}.signal-dot-btn:hover,.signal-dot-btn:focus-visible{background:var(--panel-soft)}.signal-dot{border-radius:50%;width:11px;height:11px}.signal-dot.buy{background:var(--green);box-shadow:0 0 0 3px var(--green-soft)}.signal-dot.sell{background:var(--red);box-shadow:0 0 0 3px var(--red-soft)}.signal-dot.over,.signal-dot.under{background:var(--purple);box-shadow:0 0 0 3px var(--purple-soft)}.watch-list{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);margin:0;padding:0 4px 0 14px;list-style:none}.watch-list li{border-bottom:1px solid var(--border);align-items:center;gap:12px;min-height:48px;display:flex}.watch-list li:last-child{border-bottom:none}.watch-list .stock-name{flex:auto;min-width:0}.holding-list{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);margin:0;padding:0;list-style:none}.holding-item{border-bottom:1px solid var(--border)}.holding-item:last-child{border-bottom:none}.holding-main{align-items:center;display:flex}.holding-toggle{min-width:0;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;flex-direction:column;flex:auto;gap:4px;padding:10px 0 10px 12px;display:flex}.holding-top,.holding-bottom{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 12px;display:flex}.holding-name{word-break:keep-all;min-width:0;font-size:14.5px;font-weight:700}.holding-value{font-size:14.5px;font-weight:700}.holding-bottom{color:var(--text-dim);font-size:12.5px}.holding-detail{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:10px;padding:0 12px 12px;display:flex}.holding-detail dl{flex:220px;grid-template-columns:max-content 1fr;gap:6px 14px;min-width:0;margin:0;display:grid}.holding-detail dl div{display:contents}.holding-detail dt{color:var(--text-faint);font-size:12px}.holding-detail dd{overflow-wrap:anywhere;margin:0;font-size:13px}.holding-detail .sm{min-width:64px;min-height:44px}.flash,.flash td{animation:2s ease-out flash-row}@keyframes flash-row{0%{background-color:var(--purple-soft);box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:none;background-color:#0000}}@media (width<=720px){.money-line{gap:10px 20px;padding:14px}.money-big{font-size:24px}.money-facts{grid-template-columns:1fr 1fr;width:100%;display:grid}.view-switch{width:100%}.view-switch button{flex:1 1 0;min-height:40px}}@media (prefers-reduced-motion:reduce){.flash,.flash td{outline:2px solid var(--accent);animation:none}}.move-buttons{gap:4px;display:inline-flex}.move-buttons button{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--panel-soft);width:44px;height:44px;color:var(--text);cursor:pointer;padding:0;font-size:14px}.move-buttons button:disabled{opacity:.35;cursor:default}.dirty-mark{color:var(--amber);vertical-align:middle;margin-left:6px;font-size:10px}tr.dirty td{background:var(--amber-soft,#f0b42914)}.save-bar{z-index:5;background:var(--bg-elevated);border:1px solid var(--amber);border-radius:var(--radius);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 14px;margin-top:10px;padding:10px 14px;font-size:13px;display:flex;position:sticky;bottom:12px;box-shadow:0 6px 18px #00000040}.save-bar span{overflow-wrap:anywhere;min-width:0}.settings-fold>summary{cursor:pointer;flex-wrap:wrap;align-items:baseline;gap:10px;min-height:44px;padding:6px 0;list-style:none;display:flex}.settings-fold>summary::-webkit-details-marker{display:none}.settings-fold>summary h3{margin:0;font-size:15px}.settings-fold>summary h3:before{content:"▸ ";color:var(--text-faint)}.settings-fold[open]>summary h3:before{content:"▾ "}.settings-fold .kpi-grid{margin-top:8px}.toggle-line{cursor:pointer;align-items:center;gap:10px;min-height:44px;font-size:13.5px;font-weight:600;display:flex}.toggle-line input{width:20px;height:20px}.toggle-line.disabled{opacity:.5;cursor:default}.order-cards,.holding-edit-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.order-card{background:var(--panel);border:1px solid var(--border);border-left:3px solid var(--border-strong);border-radius:var(--radius-sm);padding:12px 14px}.order-card.buy{border-left-color:var(--green)}.order-card.sell{border-left-color:var(--red)}.order-card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 12px;display:flex}.order-card-head b{word-break:keep-all;font-size:14.5px}.order-card-line{color:var(--text-dim);overflow-wrap:anywhere;margin:4px 0 6px;font-size:12.5px}.order-card.cash .order-card-line{margin-bottom:0}.holding-edit{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px}.holding-edit.dirty{border-color:var(--amber)}.holding-edit-head{flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-bottom:10px;display:flex}.holding-edit-pnl{text-align:right;margin-left:auto}.holding-edit-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;display:grid}.holding-edit-grid label{min-width:0;color:var(--text-faint);flex-direction:column;gap:4px;font-size:12px;display:flex}.holding-edit-grid input{width:100%;min-width:0;min-height:40px}.holding-edit .trade-toggle{min-height:44px;margin-top:10px}.holding-edit .trade-form{margin-top:10px}@media (width<=720px){.view-switch button{min-height:44px}.review-line a{align-items:center;min-height:44px;display:inline-flex}.watch-list .stock-name,.record-row button{min-height:44px}}
