| 1 | :root { |
| 2 | color-scheme: light; |
| 3 | --font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; |
| 4 | --bg: #f5f7f9; |
| 5 | --bg-subtle: #edf1f4; |
| 6 | --surface: #ffffff; |
| 7 | --surface-raised: #ffffff; |
| 8 | --text: #111827; |
| 9 | --text-muted: #5f6f83; |
| 10 | --text-soft: #8390a3; |
| 11 | --line: #dce3ea; |
| 12 | --line-strong: #c4ced9; |
| 13 | --primary: #0f766e; |
| 14 | --primary-strong: #115e59; |
| 15 | --positive: #087443; |
| 16 | --negative: #b42318; |
| 17 | --warning: #a15c07; |
| 18 | --info: #2459a6; |
| 19 | --focus: #2563eb; |
| 20 | --research-option-bg: #f8fafc; |
| 21 | --research-option-hover: #e2e8f0; |
| 22 | --research-option-text: #18212f; |
| 23 | --research-option-muted: #526174; |
| 24 | --shadow: 0 16px 42px rgba(15, 23, 42, 0.08); |
| 25 | --space-1: 4px; |
| 26 | --space-2: 8px; |
| 27 | --space-3: 12px; |
| 28 | --space-4: 16px; |
| 29 | --space-5: 20px; |
| 30 | --space-6: 24px; |
| 31 | --space-8: 32px; |
| 32 | --radius: 8px; |
| 33 | } |
| 34 | |
| 35 | @media (prefers-color-scheme: dark) { |
| 36 | :root[data-theme="system"] { |
| 37 | color-scheme: dark; |
| 38 | --bg: #0e141b; |
| 39 | --bg-subtle: #151e28; |
| 40 | --surface: #141c26; |
| 41 | --surface-raised: #192330; |
| 42 | --text: #eef3f8; |
| 43 | --text-muted: #a9b6c5; |
| 44 | --text-soft: #7f8ea1; |
| 45 | --line: #263342; |
| 46 | --line-strong: #354457; |
| 47 | --primary: #2dd4bf; |
| 48 | --primary-strong: #5eead4; |
| 49 | --positive: #4ade80; |
| 50 | --negative: #fb7185; |
| 51 | --warning: #facc15; |
| 52 | --info: #93c5fd; |
| 53 | --research-option-bg: #1e2b3a; |
| 54 | --research-option-hover: #334457; |
| 55 | --research-option-text: #f1f5f9; |
| 56 | --research-option-muted: #94a3b8; |
| 57 | --shadow: 0 18px 48px rgba(0, 0, 0, 0.28); |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | :root[data-theme="dark"] { |
| 62 | color-scheme: dark; |
| 63 | --bg: #0e141b; |
| 64 | --bg-subtle: #151e28; |
| 65 | --surface: #141c26; |
| 66 | --surface-raised: #192330; |
| 67 | --text: #eef3f8; |
| 68 | --text-muted: #a9b6c5; |
| 69 | --text-soft: #7f8ea1; |
| 70 | --line: #263342; |
| 71 | --line-strong: #354457; |
| 72 | --primary: #2dd4bf; |
| 73 | --primary-strong: #5eead4; |
| 74 | --positive: #4ade80; |
| 75 | --negative: #fb7185; |
| 76 | --warning: #facc15; |
| 77 | --info: #93c5fd; |
| 78 | --research-option-bg: #1e2b3a; |
| 79 | --research-option-hover: #334457; |
| 80 | --research-option-text: #f1f5f9; |
| 81 | --research-option-muted: #94a3b8; |
| 82 | --shadow: 0 18px 48px rgba(0, 0, 0, 0.28); |
| 83 | } |
| 84 | |
| 85 | :root[data-theme="light"] { |
| 86 | color-scheme: light; |
| 87 | } |
| 88 | |
| 89 | * { |
| 90 | box-sizing: border-box; |
| 91 | } |
| 92 | |
| 93 | html { |
| 94 | min-width: 320px; |
| 95 | } |
| 96 | |
| 97 | body { |
| 98 | margin: 0; |
| 99 | background: var(--bg); |
| 100 | color: var(--text); |
| 101 | font-family: var(--font-sans); |
| 102 | font-size: 15px; |
| 103 | line-height: 1.5; |
| 104 | } |
| 105 | |
| 106 | button, |
| 107 | input, |
| 108 | select { |
| 109 | font: inherit; |
| 110 | } |
| 111 | |
| 112 | button, |
| 113 | select { |
| 114 | cursor: pointer; |
| 115 | } |
| 116 | |
| 117 | button:focus-visible, |
| 118 | input:focus-visible, |
| 119 | select:focus-visible { |
| 120 | outline: 3px solid color-mix(in srgb, var(--focus) 35%, transparent); |
| 121 | outline-offset: 2px; |
| 122 | } |
| 123 | |
| 124 | code, |
| 125 | kbd { |
| 126 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| 127 | } |
| 128 | |
| 129 | .sr-only { |
| 130 | position: absolute; |
| 131 | width: 1px; |
| 132 | height: 1px; |
| 133 | padding: 0; |
| 134 | margin: -1px; |
| 135 | overflow: hidden; |
| 136 | clip: rect(0, 0, 0, 0); |
| 137 | white-space: nowrap; |
| 138 | border: 0; |
| 139 | } |
| 140 | |
| 141 | .signin-shell { |
| 142 | min-height: 100vh; |
| 143 | display: grid; |
| 144 | place-items: center; |
| 145 | padding: var(--space-6); |
| 146 | background: var(--bg); |
| 147 | } |
| 148 | |
| 149 | .signin-panel { |
| 150 | width: min(440px, 100%); |
| 151 | display: grid; |
| 152 | gap: var(--space-5); |
| 153 | padding: var(--space-8); |
| 154 | border: 1px solid var(--line); |
| 155 | border-radius: var(--radius); |
| 156 | background: var(--surface); |
| 157 | box-shadow: var(--shadow); |
| 158 | } |
| 159 | |
| 160 | .signin-panel h1 { |
| 161 | margin: 0; |
| 162 | font-size: 1.8rem; |
| 163 | } |
| 164 | |
| 165 | .signin-panel p { |
| 166 | margin: 0; |
| 167 | color: var(--text-muted); |
| 168 | } |
| 169 | |
| 170 | .signin-actions { |
| 171 | display: grid; |
| 172 | gap: var(--space-3); |
| 173 | } |
| 174 | |
| 175 | .password-input { position: relative; display: block; } |
| 176 | .password-input input { width: 100%; padding-right: 3rem; } |
| 177 | .password-toggle { position: absolute; right: 0.35rem; top: 50%; width: 2.25rem; height: 2.25rem; transform: translateY(-50%); display: grid; place-items: center; padding: 0; border: 0; background: transparent; color: var(--text-muted); } |
| 178 | |
| 179 | .app-shell { |
| 180 | min-height: 100vh; |
| 181 | display: grid; |
| 182 | grid-template-columns: 248px minmax(0, 1fr); |
| 183 | } |
| 184 | |
| 185 | .sidebar { |
| 186 | position: sticky; |
| 187 | top: 0; |
| 188 | height: 100vh; |
| 189 | display: flex; |
| 190 | flex-direction: column; |
| 191 | gap: var(--space-6); |
| 192 | padding: var(--space-5); |
| 193 | border-right: 1px solid var(--line); |
| 194 | background: var(--surface); |
| 195 | } |
| 196 | |
| 197 | .brand-lockup { |
| 198 | display: flex; |
| 199 | align-items: center; |
| 200 | gap: var(--space-3); |
| 201 | min-height: 44px; |
| 202 | } |
| 203 | |
| 204 | .brand-mark { |
| 205 | width: 40px; |
| 206 | height: 40px; |
| 207 | display: grid; |
| 208 | place-items: center; |
| 209 | border: 1px solid var(--line-strong); |
| 210 | border-radius: var(--radius); |
| 211 | background: var(--bg-subtle); |
| 212 | color: var(--primary-strong); |
| 213 | font-weight: 800; |
| 214 | } |
| 215 | |
| 216 | .brand-lockup strong, |
| 217 | .brand-lockup span { |
| 218 | display: block; |
| 219 | } |
| 220 | |
| 221 | .brand-lockup span { |
| 222 | color: var(--text-muted); |
| 223 | font-size: 13px; |
| 224 | } |
| 225 | |
| 226 | .sidebar nav { |
| 227 | display: grid; |
| 228 | gap: var(--space-1); |
| 229 | } |
| 230 | |
| 231 | .nav-item { |
| 232 | width: 100%; |
| 233 | display: flex; |
| 234 | align-items: center; |
| 235 | gap: var(--space-3); |
| 236 | border: 0; |
| 237 | border-radius: var(--radius); |
| 238 | padding: 11px 12px; |
| 239 | background: transparent; |
| 240 | color: var(--text-muted); |
| 241 | text-align: left; |
| 242 | } |
| 243 | |
| 244 | .nav-item:hover, |
| 245 | .nav-item-active { |
| 246 | background: var(--bg-subtle); |
| 247 | color: var(--text); |
| 248 | } |
| 249 | |
| 250 | .nav-item-active { |
| 251 | box-shadow: inset 3px 0 0 var(--primary); |
| 252 | } |
| 253 | |
| 254 | .sidebar-panel { |
| 255 | margin-top: auto; |
| 256 | border: 1px solid var(--line); |
| 257 | border-radius: var(--radius); |
| 258 | padding: var(--space-4); |
| 259 | background: var(--bg-subtle); |
| 260 | } |
| 261 | |
| 262 | .sidebar-panel p { |
| 263 | margin: var(--space-3) 0 0; |
| 264 | color: var(--text-muted); |
| 265 | font-size: 13px; |
| 266 | } |
| 267 | |
| 268 | .workspace { |
| 269 | min-width: 0; |
| 270 | } |
| 271 | |
| 272 | .topbar { |
| 273 | position: sticky; |
| 274 | top: 0; |
| 275 | z-index: 20; |
| 276 | display: flex; |
| 277 | align-items: center; |
| 278 | gap: var(--space-4); |
| 279 | min-height: 72px; |
| 280 | padding: 0 var(--space-6); |
| 281 | border-bottom: 1px solid var(--line); |
| 282 | background: color-mix(in srgb, var(--surface) 92%, transparent); |
| 283 | backdrop-filter: blur(14px); |
| 284 | } |
| 285 | |
| 286 | .command-bar { |
| 287 | flex: 1; |
| 288 | min-width: 220px; |
| 289 | max-width: 680px; |
| 290 | display: flex; |
| 291 | align-items: center; |
| 292 | gap: var(--space-2); |
| 293 | border: 1px solid var(--line); |
| 294 | border-radius: var(--radius); |
| 295 | padding: 0 var(--space-3); |
| 296 | background: var(--surface-raised); |
| 297 | } |
| 298 | |
| 299 | .command-bar input, |
| 300 | .table-search input, |
| 301 | .research-search input, |
| 302 | .field input { |
| 303 | width: 100%; |
| 304 | min-width: 0; |
| 305 | border: 0; |
| 306 | background: transparent; |
| 307 | color: var(--text); |
| 308 | outline: 0; |
| 309 | } |
| 310 | |
| 311 | .command-bar input { |
| 312 | height: 42px; |
| 313 | } |
| 314 | |
| 315 | .command-bar kbd { |
| 316 | border: 1px solid var(--line); |
| 317 | border-radius: 6px; |
| 318 | padding: 1px 7px; |
| 319 | color: var(--text-soft); |
| 320 | font-size: 12px; |
| 321 | } |
| 322 | |
| 323 | .topbar-actions { |
| 324 | display: flex; |
| 325 | align-items: center; |
| 326 | gap: var(--space-2); |
| 327 | } |
| 328 | |
| 329 | .icon-button, |
| 330 | .account-button, |
| 331 | .mobile-menu { |
| 332 | border: 1px solid var(--line); |
| 333 | border-radius: var(--radius); |
| 334 | background: var(--surface-raised); |
| 335 | color: var(--text); |
| 336 | } |
| 337 | |
| 338 | .icon-button { |
| 339 | width: 40px; |
| 340 | height: 40px; |
| 341 | display: grid; |
| 342 | place-items: center; |
| 343 | } |
| 344 | |
| 345 | .account-button, |
| 346 | .theme-switch { |
| 347 | height: 40px; |
| 348 | display: inline-flex; |
| 349 | align-items: center; |
| 350 | gap: var(--space-2); |
| 351 | } |
| 352 | |
| 353 | .account-button { |
| 354 | padding: 0 var(--space-3); |
| 355 | } |
| 356 | |
| 357 | .theme-switch { |
| 358 | border: 1px solid var(--line); |
| 359 | border-radius: var(--radius); |
| 360 | padding: 0 var(--space-2); |
| 361 | background: var(--surface-raised); |
| 362 | color: var(--text-muted); |
| 363 | } |
| 364 | |
| 365 | .theme-switch select, |
| 366 | .portfolio-select select, |
| 367 | .sort-control select { |
| 368 | border: 0; |
| 369 | background: transparent; |
| 370 | color: var(--text); |
| 371 | outline: 0; |
| 372 | } |
| 373 | |
| 374 | .mobile-menu, |
| 375 | .sidebar-scrim { |
| 376 | display: none; |
| 377 | } |
| 378 | |
| 379 | .content { |
| 380 | width: min(100% - 48px, 1480px); |
| 381 | margin: 0 auto; |
| 382 | padding: var(--space-8) 0 56px; |
| 383 | } |
| 384 | |
| 385 | .page-header { |
| 386 | display: flex; |
| 387 | align-items: flex-end; |
| 388 | justify-content: space-between; |
| 389 | gap: var(--space-6); |
| 390 | margin-bottom: var(--space-6); |
| 391 | } |
| 392 | |
| 393 | .page-header h1 { |
| 394 | margin: 0; |
| 395 | font-size: 32px; |
| 396 | line-height: 1.15; |
| 397 | letter-spacing: 0; |
| 398 | } |
| 399 | |
| 400 | .page-header p, |
| 401 | .panel-header p, |
| 402 | .create-panel p, |
| 403 | .empty-state p, |
| 404 | .error-state p, |
| 405 | .settings-grid p { |
| 406 | margin: var(--space-1) 0 0; |
| 407 | color: var(--text-muted); |
| 408 | } |
| 409 | |
| 410 | .eyebrow { |
| 411 | margin: 0 0 var(--space-2); |
| 412 | color: var(--primary-strong); |
| 413 | font-size: 12px; |
| 414 | font-weight: 800; |
| 415 | letter-spacing: 0; |
| 416 | text-transform: uppercase; |
| 417 | } |
| 418 | |
| 419 | .portfolio-select, |
| 420 | .field { |
| 421 | display: grid; |
| 422 | gap: 6px; |
| 423 | } |
| 424 | |
| 425 | .portfolio-select span, |
| 426 | .field span { |
| 427 | color: var(--text-muted); |
| 428 | font-size: 12px; |
| 429 | font-weight: 700; |
| 430 | text-transform: uppercase; |
| 431 | } |
| 432 | |
| 433 | .portfolio-select select, |
| 434 | .field input { |
| 435 | height: 42px; |
| 436 | border: 1px solid var(--line); |
| 437 | border-radius: var(--radius); |
| 438 | padding: 0 var(--space-3); |
| 439 | background: var(--surface-raised); |
| 440 | } |
| 441 | |
| 442 | .field small { |
| 443 | color: var(--text-soft); |
| 444 | } |
| 445 | |
| 446 | .button { |
| 447 | min-height: 40px; |
| 448 | display: inline-flex; |
| 449 | align-items: center; |
| 450 | justify-content: center; |
| 451 | gap: var(--space-2); |
| 452 | border: 1px solid transparent; |
| 453 | border-radius: var(--radius); |
| 454 | padding: 0 var(--space-4); |
| 455 | font-weight: 700; |
| 456 | } |
| 457 | |
| 458 | .button:disabled { |
| 459 | cursor: not-allowed; |
| 460 | opacity: 0.62; |
| 461 | } |
| 462 | |
| 463 | .button-primary { |
| 464 | background: var(--primary); |
| 465 | color: #ffffff; |
| 466 | } |
| 467 | |
| 468 | .button-secondary { |
| 469 | border-color: var(--line); |
| 470 | background: var(--surface-raised); |
| 471 | color: var(--text); |
| 472 | } |
| 473 | |
| 474 | .button-ghost { |
| 475 | background: transparent; |
| 476 | color: var(--text); |
| 477 | } |
| 478 | |
| 479 | .button-danger { |
| 480 | background: var(--negative); |
| 481 | color: #ffffff; |
| 482 | } |
| 483 | |
| 484 | .badge { |
| 485 | display: inline-flex; |
| 486 | align-items: center; |
| 487 | width: max-content; |
| 488 | min-height: 24px; |
| 489 | border: 1px solid var(--line); |
| 490 | border-radius: 999px; |
| 491 | padding: 2px 9px; |
| 492 | font-size: 12px; |
| 493 | font-weight: 800; |
| 494 | line-height: 1.2; |
| 495 | } |
| 496 | |
| 497 | .badge-neutral { |
| 498 | color: var(--text-muted); |
| 499 | background: var(--bg-subtle); |
| 500 | } |
| 501 | |
| 502 | .badge-positive { |
| 503 | color: var(--positive); |
| 504 | background: color-mix(in srgb, var(--positive) 10%, transparent); |
| 505 | } |
| 506 | |
| 507 | .badge-negative { |
| 508 | color: var(--negative); |
| 509 | background: color-mix(in srgb, var(--negative) 10%, transparent); |
| 510 | } |
| 511 | |
| 512 | .badge-warning { |
| 513 | color: var(--warning); |
| 514 | background: color-mix(in srgb, var(--warning) 12%, transparent); |
| 515 | } |
| 516 | |
| 517 | .badge-info { |
| 518 | color: var(--info); |
| 519 | background: color-mix(in srgb, var(--info) 10%, transparent); |
| 520 | } |
| 521 | |
| 522 | .card { |
| 523 | border: 1px solid var(--line); |
| 524 | border-radius: var(--radius); |
| 525 | background: var(--surface); |
| 526 | box-shadow: var(--shadow); |
| 527 | } |
| 528 | |
| 529 | .metric-card { |
| 530 | min-height: 122px; |
| 531 | display: grid; |
| 532 | align-content: start; |
| 533 | gap: var(--space-2); |
| 534 | padding: var(--space-5); |
| 535 | } |
| 536 | |
| 537 | .metric-label, |
| 538 | .metric-meta { |
| 539 | color: var(--text-muted); |
| 540 | } |
| 541 | |
| 542 | .metric-label { |
| 543 | font-size: 13px; |
| 544 | font-weight: 700; |
| 545 | } |
| 546 | |
| 547 | .metric-value { |
| 548 | font-size: 25px; |
| 549 | line-height: 1.15; |
| 550 | letter-spacing: 0; |
| 551 | } |
| 552 | |
| 553 | .metric-positive, |
| 554 | .positive-text { |
| 555 | color: var(--positive); |
| 556 | } |
| 557 | |
| 558 | .metric-negative, |
| 559 | .negative-text { |
| 560 | color: var(--negative); |
| 561 | } |
| 562 | |
| 563 | .metric-warning { |
| 564 | color: var(--warning); |
| 565 | } |
| 566 | |
| 567 | .dashboard-grid, |
| 568 | .portfolio-layout, |
| 569 | .broker-grid { |
| 570 | display: grid; |
| 571 | grid-template-columns: repeat(2, minmax(0, 1fr)); |
| 572 | gap: var(--space-5); |
| 573 | } |
| 574 | |
| 575 | .broker-inline-error { |
| 576 | margin-bottom: 1rem; |
| 577 | padding: .75rem 1rem; |
| 578 | border: 1px solid var(--color-warning, #b7791f); |
| 579 | border-radius: .75rem; |
| 580 | overflow-wrap: anywhere; |
| 581 | } |
| 582 | |
| 583 | .broker-credential-card { |
| 584 | margin-bottom: 1rem; |
| 585 | max-width: 36rem; |
| 586 | } |
| 587 | |
| 588 | .broker-credential-card label { |
| 589 | display: grid; |
| 590 | gap: .35rem; |
| 591 | margin: .75rem 0; |
| 592 | } |
| 593 | |
| 594 | .broker-card-content, |
| 595 | .broker-message, |
| 596 | .broker-actions { |
| 597 | min-width: 0; |
| 598 | overflow-wrap: break-word; |
| 599 | word-break: normal; |
| 600 | } |
| 601 | |
| 602 | .import-modal-backdrop { |
| 603 | position: fixed; |
| 604 | inset: 0; |
| 605 | z-index: 100; |
| 606 | display: grid; |
| 607 | place-items: center; |
| 608 | padding: var(--space-4); |
| 609 | background: rgba(8, 15, 25, .62); |
| 610 | backdrop-filter: blur(3px); |
| 611 | } |
| 612 | |
| 613 | .import-modal { |
| 614 | width: min(920px, 100%); |
| 615 | max-height: min(820px, calc(100vh - 32px)); |
| 616 | overflow: auto; |
| 617 | padding: var(--space-6); |
| 618 | border: 1px solid var(--line); |
| 619 | border-radius: calc(var(--radius) * 2); |
| 620 | background: var(--surface-raised); |
| 621 | box-shadow: var(--shadow); |
| 622 | } |
| 623 | |
| 624 | .import-modal-header { |
| 625 | display: flex; |
| 626 | justify-content: space-between; |
| 627 | gap: var(--space-4); |
| 628 | margin-bottom: var(--space-5); |
| 629 | } |
| 630 | |
| 631 | .import-modal-header span, |
| 632 | .import-section-label { color: var(--text-muted); font-size: 13px; font-weight: 700; } |
| 633 | .import-modal-header h2 { margin: 4px 0 0; font-size: 21px; } |
| 634 | .icon-button { border: 0; background: transparent; color: var(--text); cursor: pointer; } |
| 635 | |
| 636 | .import-dropzone { |
| 637 | display: grid; |
| 638 | justify-items: center; |
| 639 | gap: var(--space-2); |
| 640 | padding: var(--space-8); |
| 641 | border: 1.5px dashed var(--line-strong); |
| 642 | border-radius: calc(var(--radius) * 1.5); |
| 643 | background: var(--bg-subtle); |
| 644 | color: var(--text-muted); |
| 645 | text-align: center; |
| 646 | cursor: pointer; |
| 647 | } |
| 648 | .import-dropzone strong { color: var(--text); } |
| 649 | .import-dropzone input { position: absolute; width: 1px; height: 1px; opacity: 0; } |
| 650 | .import-file { display: flex; align-items: center; gap: var(--space-2); color: var(--positive); overflow-wrap: anywhere; } |
| 651 | .import-error { padding: var(--space-3); border-left: 3px solid var(--negative); border-radius: var(--radius); background: color-mix(in srgb, var(--negative) 8%, transparent); color: var(--negative); } |
| 652 | .import-preview { display: grid; gap: var(--space-3); } |
| 653 | .import-table-frame { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); } |
| 654 | .import-table { min-width: 780px; font-size: 13px; } |
| 655 | .import-table th, .import-table td { padding: 10px 12px; } |
| 656 | .success-toast { position: fixed; right: var(--space-5); bottom: var(--space-5); z-index: 110; display: flex; align-items: center; gap: var(--space-2); padding: 12px 16px; border-radius: var(--radius); background: var(--positive); color: white; box-shadow: var(--shadow); } |
| 657 | .research-refresh-notice { margin: 0 var(--space-5) var(--space-3); color: var(--text-muted); font-size: 0.875rem; } |
| 658 | |
| 659 | @media (max-width: 640px) { |
| 660 | .import-modal-backdrop { padding: 0; align-items: end; } |
| 661 | .import-modal { max-height: 92vh; border-radius: calc(var(--radius) * 2) calc(var(--radius) * 2) 0 0; padding: var(--space-5); } |
| 662 | } |
| 663 | |
| 664 | .metrics-grid { |
| 665 | grid-column: 1 / -1; |
| 666 | display: grid; |
| 667 | grid-template-columns: repeat(6, minmax(0, 1fr)); |
| 668 | gap: var(--space-4); |
| 669 | } |
| 670 | |
| 671 | .wide-panel, |
| 672 | .create-panel { |
| 673 | grid-column: 1 / -1; |
| 674 | padding: var(--space-5); |
| 675 | } |
| 676 | |
| 677 | .create-panel { |
| 678 | display: grid; |
| 679 | gap: var(--space-5); |
| 680 | max-width: 720px; |
| 681 | } |
| 682 | |
| 683 | .form-grid { |
| 684 | display: grid; |
| 685 | grid-template-columns: 1fr 160px; |
| 686 | gap: var(--space-4); |
| 687 | } |
| 688 | |
| 689 | .panel-header { |
| 690 | display: flex; |
| 691 | align-items: flex-start; |
| 692 | justify-content: space-between; |
| 693 | gap: var(--space-4); |
| 694 | margin-bottom: var(--space-5); |
| 695 | } |
| 696 | |
| 697 | .panel-header.compact { |
| 698 | align-items: center; |
| 699 | margin-bottom: var(--space-3); |
| 700 | } |
| 701 | |
| 702 | .panel-header h2, |
| 703 | .allocation-group h3, |
| 704 | .empty-state h3, |
| 705 | .error-state h3, |
| 706 | .settings-grid h3 { |
| 707 | margin: 0; |
| 708 | letter-spacing: 0; |
| 709 | } |
| 710 | |
| 711 | .panel-header h2 { |
| 712 | font-size: 18px; |
| 713 | } |
| 714 | |
| 715 | .movement-list { |
| 716 | display: grid; |
| 717 | gap: var(--space-3); |
| 718 | } |
| 719 | |
| 720 | .movement-list div { |
| 721 | display: flex; |
| 722 | justify-content: space-between; |
| 723 | gap: var(--space-3); |
| 724 | padding-top: var(--space-3); |
| 725 | border-top: 1px solid var(--line); |
| 726 | } |
| 727 | |
| 728 | .allocation-grid { |
| 729 | display: grid; |
| 730 | grid-template-columns: repeat(5, minmax(180px, 1fr)); |
| 731 | gap: var(--space-4); |
| 732 | overflow-x: auto; |
| 733 | padding-bottom: 2px; |
| 734 | } |
| 735 | |
| 736 | .allocation-group { |
| 737 | display: grid; |
| 738 | gap: var(--space-3); |
| 739 | min-width: 0; |
| 740 | border: 1px solid var(--line); |
| 741 | border-radius: var(--radius); |
| 742 | padding: var(--space-4); |
| 743 | background: var(--bg-subtle); |
| 744 | } |
| 745 | |
| 746 | .allocation-group h3 { |
| 747 | font-size: 14px; |
| 748 | } |
| 749 | |
| 750 | .allocation-row { |
| 751 | display: grid; |
| 752 | gap: 6px; |
| 753 | } |
| 754 | |
| 755 | .allocation-row div:first-child { |
| 756 | display: flex; |
| 757 | justify-content: space-between; |
| 758 | gap: var(--space-3); |
| 759 | color: var(--text-muted); |
| 760 | font-size: 13px; |
| 761 | } |
| 762 | |
| 763 | .bar-track { |
| 764 | height: 8px; |
| 765 | overflow: hidden; |
| 766 | border-radius: 999px; |
| 767 | background: color-mix(in srgb, var(--line) 70%, transparent); |
| 768 | } |
| 769 | |
| 770 | .bar-track span { |
| 771 | display: block; |
| 772 | height: 100%; |
| 773 | border-radius: inherit; |
| 774 | background: var(--primary); |
| 775 | } |
| 776 | |
| 777 | .table-toolbar { |
| 778 | display: flex; |
| 779 | align-items: center; |
| 780 | justify-content: space-between; |
| 781 | gap: var(--space-4); |
| 782 | margin-bottom: var(--space-4); |
| 783 | } |
| 784 | |
| 785 | .table-search, |
| 786 | .research-search, |
| 787 | .sort-control { |
| 788 | min-height: 42px; |
| 789 | display: flex; |
| 790 | align-items: center; |
| 791 | gap: var(--space-2); |
| 792 | border: 1px solid var(--line); |
| 793 | border-radius: var(--radius); |
| 794 | padding: 0 var(--space-3); |
| 795 | background: var(--surface-raised); |
| 796 | } |
| 797 | |
| 798 | .table-search { |
| 799 | flex: 1; |
| 800 | max-width: 480px; |
| 801 | } |
| 802 | |
| 803 | .sort-control { |
| 804 | color: var(--text-muted); |
| 805 | } |
| 806 | |
| 807 | .table-frame { |
| 808 | overflow-x: auto; |
| 809 | border: 1px solid var(--line); |
| 810 | border-radius: var(--radius); |
| 811 | } |
| 812 | |
| 813 | table { |
| 814 | width: 100%; |
| 815 | min-width: 1560px; |
| 816 | border-collapse: collapse; |
| 817 | } |
| 818 | |
| 819 | th, |
| 820 | td { |
| 821 | padding: 13px 14px; |
| 822 | border-bottom: 1px solid var(--line); |
| 823 | text-align: left; |
| 824 | vertical-align: middle; |
| 825 | white-space: nowrap; |
| 826 | } |
| 827 | |
| 828 | th { |
| 829 | background: var(--bg-subtle); |
| 830 | color: var(--text-muted); |
| 831 | font-size: 12px; |
| 832 | font-weight: 800; |
| 833 | text-transform: uppercase; |
| 834 | } |
| 835 | |
| 836 | tbody tr:hover { |
| 837 | background: color-mix(in srgb, var(--primary) 5%, transparent); |
| 838 | } |
| 839 | |
| 840 | tbody tr:last-child td { |
| 841 | border-bottom: 0; |
| 842 | } |
| 843 | |
| 844 | tbody tr[class*="valuation-"] { cursor: pointer; } |
| 845 | tbody tr.valuation-cheap td:first-child { box-shadow: inset 4px 0 #3182f6; } |
| 846 | tbody tr.valuation-fair td:first-child { box-shadow: inset 4px 0 #2ea66f; } |
| 847 | tbody tr.valuation-expensive td:first-child { box-shadow: inset 4px 0 #d94a54; } |
| 848 | tbody tr.valuation-unknown td:first-child { box-shadow: inset 4px 0 #8993a4; } |
| 849 | |
| 850 | tbody tr[class*="ownership-"] td { |
| 851 | border-top: 2px dotted var(--ownership-a); |
| 852 | border-bottom: 2px dotted var(--ownership-b, var(--ownership-a)); |
| 853 | background-image: linear-gradient(90deg, transparent 0 45%, color-mix(in srgb, var(--ownership-c, var(--ownership-a)) 8%, transparent) 50%, transparent 55%); |
| 854 | background-size: 180% 100%; |
| 855 | animation: ownership-dots 8s linear infinite; |
| 856 | } |
| 857 | .ownership-promoter { --ownership-a: #2ea66f; } |
| 858 | .ownership-fii { --ownership-a: #3182f6; } |
| 859 | .ownership-dii { --ownership-a: #df68ae; } |
| 860 | .ownership-promoter-dii { --ownership-a: #2ea66f; --ownership-b: #df68ae; } |
| 861 | .ownership-promoter-fii { --ownership-a: #2ea66f; --ownership-b: #3182f6; } |
| 862 | .ownership-fii-dii { --ownership-a: #3182f6; --ownership-b: #df68ae; } |
| 863 | .ownership-promoter-fii-dii { --ownership-a: #2ea66f; --ownership-b: #3182f6; --ownership-c: #df68ae; } |
| 864 | |
| 865 | @keyframes ownership-dots { to { background-position: -180% 0; } } |
| 866 | |
| 867 | .research-drawer-backdrop { |
| 868 | position: fixed; |
| 869 | inset: 0; |
| 870 | z-index: 80; |
| 871 | display: flex; |
| 872 | justify-content: flex-end; |
| 873 | background: rgba(10, 18, 32, 0.55); |
| 874 | } |
| 875 | |
| 876 | .research-drawer { |
| 877 | width: min(680px, 100%); |
| 878 | height: 100%; |
| 879 | overflow-y: auto; |
| 880 | padding: var(--space-6); |
| 881 | background: var(--surface); |
| 882 | box-shadow: -16px 0 48px rgba(0, 0, 0, 0.24); |
| 883 | } |
| 884 | |
| 885 | .research-drawer section { padding: var(--space-4) 0; border-top: 1px solid var(--line); } |
| 886 | .research-drawer article { padding: var(--space-3) 0; } |
| 887 | .research-metric-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(145px, 1fr)); gap: var(--space-3); } |
| 888 | .research-metric { display: grid; gap: 0.2rem; padding: var(--space-3); border: 1px solid var(--line); border-radius: var(--radius); } |
| 889 | .research-metric span, .research-metric small { color: var(--text-muted); font-size: 0.75rem; } |
| 890 | |
| 891 | .shareholding-table-frame { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); } |
| 892 | .shareholding-table { width: 100%; min-width: 560px; border-collapse: collapse; font-variant-numeric: tabular-nums; } |
| 893 | .shareholding-table th, .shareholding-table td { padding: 0.55rem 0.65rem; border-bottom: 1px solid var(--line); white-space: nowrap; } |
| 894 | .shareholding-table thead th { background: var(--bg-subtle); color: var(--text-muted); font-size: 0.72rem; text-transform: none; text-align: right; } |
| 895 | .shareholding-table th:first-child { position: sticky; left: 0; z-index: 1; min-width: 130px; text-align: left; background: var(--surface); } |
| 896 | .shareholding-table thead th:first-child { z-index: 2; background: var(--bg-subtle); } |
| 897 | .shareholding-table td { text-align: right; } |
| 898 | .shareholding-table tbody tr:last-child th, .shareholding-table tbody tr:last-child td { border-bottom: 0; } |
| 899 | .shareholding-note, .shareholding-source { margin: var(--space-2) 0 0; color: var(--text-muted); font-size: 0.78rem; } |
| 900 | |
| 901 | .security-button { |
| 902 | display: grid; |
| 903 | gap: 2px; |
| 904 | border: 0; |
| 905 | padding: 0; |
| 906 | background: transparent; |
| 907 | color: var(--text); |
| 908 | text-align: left; |
| 909 | } |
| 910 | |
| 911 | .security-button span { |
| 912 | color: var(--text-muted); |
| 913 | font-size: 12px; |
| 914 | } |
| 915 | |
| 916 | .market-performance-row { |
| 917 | display: grid; |
| 918 | grid-template-columns: minmax(0, 1fr) auto; |
| 919 | gap: 0.2rem var(--space-3); |
| 920 | width: 100%; |
| 921 | min-height: 88px; |
| 922 | padding: var(--space-3) var(--space-4); |
| 923 | border: 1px solid var(--line); |
| 924 | border-inline-start-width: 4px; |
| 925 | border-radius: var(--radius); |
| 926 | background: var(--surface); |
| 927 | color: var(--text); |
| 928 | text-align: left; |
| 929 | transition: background-color 120ms ease, border-color 120ms ease, box-shadow 120ms ease; |
| 930 | } |
| 931 | |
| 932 | .market-performance-row-positive { |
| 933 | border-color: color-mix(in srgb, var(--positive) 55%, var(--line)); |
| 934 | background: color-mix(in srgb, var(--positive) 10%, var(--surface)); |
| 935 | } |
| 936 | |
| 937 | .market-performance-row-negative { |
| 938 | border-color: color-mix(in srgb, var(--negative) 55%, var(--line)); |
| 939 | background: color-mix(in srgb, var(--negative) 10%, var(--surface)); |
| 940 | } |
| 941 | |
| 942 | .market-performance-row-neutral { |
| 943 | border-color: var(--line-strong); |
| 944 | background: var(--surface); |
| 945 | } |
| 946 | |
| 947 | .market-performance-row:hover { |
| 948 | border-color: var(--primary); |
| 949 | background: color-mix(in srgb, var(--primary) 9%, var(--surface)); |
| 950 | box-shadow: 0 8px 22px color-mix(in srgb, var(--primary) 15%, transparent); |
| 951 | } |
| 952 | |
| 953 | .market-performance-row[aria-current="true"] { |
| 954 | border-color: var(--primary); |
| 955 | box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary) 32%, transparent); |
| 956 | } |
| 957 | |
| 958 | .market-performance-row:focus-visible { |
| 959 | outline: 3px solid color-mix(in srgb, var(--focus) 45%, transparent); |
| 960 | outline-offset: 3px; |
| 961 | } |
| 962 | |
| 963 | .market-performance-identity { |
| 964 | color: var(--text-muted); |
| 965 | font-size: 12px; |
| 966 | } |
| 967 | |
| 968 | .market-performance-return { |
| 969 | grid-column: 2; |
| 970 | grid-row: 1 / span 2; |
| 971 | align-self: center; |
| 972 | font-weight: 750; |
| 973 | font-variant-numeric: tabular-nums; |
| 974 | } |
| 975 | |
| 976 | .market-performance-row-positive .market-performance-return { color: var(--positive); } |
| 977 | .market-performance-row-negative .market-performance-return { color: var(--negative); } |
| 978 | .market-performance-row-neutral .market-performance-return { color: var(--text-muted); } |
| 979 | |
| 980 | .broker-card { |
| 981 | display: grid; |
| 982 | grid-template-columns: 52px minmax(0, 1fr); |
| 983 | gap: var(--space-4); |
| 984 | padding: var(--space-5); |
| 985 | } |
| 986 | |
| 987 | .broker-icon { |
| 988 | width: 48px; |
| 989 | height: 48px; |
| 990 | display: grid; |
| 991 | place-items: center; |
| 992 | border: 1px solid var(--line); |
| 993 | border-radius: var(--radius); |
| 994 | background: var(--bg-subtle); |
| 995 | color: var(--primary-strong); |
| 996 | } |
| 997 | |
| 998 | .broker-card-content { |
| 999 | min-width: 0; |
| 1000 | } |
| 1001 | |
| 1002 | .broker-card .panel-header { |
| 1003 | flex-wrap: wrap; |
| 1004 | justify-content: flex-start; |
| 1005 | } |
| 1006 | |
| 1007 | .broker-card .panel-header h2 { |
| 1008 | margin-right: auto; |
| 1009 | } |
| 1010 | |
| 1011 | .broker-card .badge, |
| 1012 | .broker-actions .button { |
| 1013 | white-space: nowrap; |
| 1014 | overflow-wrap: normal; |
| 1015 | word-break: normal; |
| 1016 | } |
| 1017 | |
| 1018 | .broker-message, |
| 1019 | .broker-linked-portfolio { |
| 1020 | color: var(--text-muted); |
| 1021 | line-height: 1.5; |
| 1022 | } |
| 1023 | |
| 1024 | .broker-actions { |
| 1025 | display: flex; |
| 1026 | flex-wrap: wrap; |
| 1027 | gap: var(--space-3); |
| 1028 | margin-top: var(--space-4); |
| 1029 | } |
| 1030 | |
| 1031 | .broker-facts { |
| 1032 | display: grid; |
| 1033 | gap: var(--space-3); |
| 1034 | margin: 0 0 var(--space-5); |
| 1035 | } |
| 1036 | |
| 1037 | .broker-facts div { |
| 1038 | display: flex; |
| 1039 | justify-content: space-between; |
| 1040 | gap: var(--space-3); |
| 1041 | border-top: 1px solid var(--line); |
| 1042 | padding-top: var(--space-3); |
| 1043 | } |
| 1044 | |
| 1045 | .broker-facts dt { |
| 1046 | color: var(--text-muted); |
| 1047 | } |
| 1048 | |
| 1049 | .broker-facts dd { |
| 1050 | margin: 0; |
| 1051 | font-weight: 700; |
| 1052 | overflow-wrap: anywhere; |
| 1053 | text-align: right; |
| 1054 | } |
| 1055 | |
| 1056 | .broker-note { |
| 1057 | color: var(--warning); |
| 1058 | font-size: 0.88rem; |
| 1059 | font-weight: 650; |
| 1060 | margin: 0 0 var(--space-4); |
| 1061 | } |
| 1062 | |
| 1063 | .research-search { |
| 1064 | max-width: 680px; |
| 1065 | margin-bottom: var(--space-5); |
| 1066 | } |
| 1067 | |
| 1068 | .research-layout { |
| 1069 | display: grid; |
| 1070 | gap: var(--space-4); |
| 1071 | } |
| 1072 | |
| 1073 | .research-sticky-panel { |
| 1074 | position: sticky; |
| 1075 | top: 88px; |
| 1076 | z-index: 10; |
| 1077 | } |
| 1078 | |
| 1079 | .research-actions, |
| 1080 | .research-controls { |
| 1081 | display: flex; |
| 1082 | align-items: center; |
| 1083 | gap: var(--space-3); |
| 1084 | flex-wrap: wrap; |
| 1085 | } |
| 1086 | |
| 1087 | .research-controls { |
| 1088 | justify-content: space-between; |
| 1089 | } |
| 1090 | |
| 1091 | .research-controls .sort-control { |
| 1092 | flex: 1; |
| 1093 | min-width: 220px; |
| 1094 | } |
| 1095 | |
| 1096 | .research-controls .research-company-control { |
| 1097 | flex: 2; |
| 1098 | min-width: min(100%, 380px); |
| 1099 | min-height: 56px; |
| 1100 | display: grid; |
| 1101 | grid-template-columns: auto auto minmax(220px, 1fr); |
| 1102 | grid-template-rows: auto auto; |
| 1103 | column-gap: var(--space-2); |
| 1104 | align-content: center; |
| 1105 | } |
| 1106 | |
| 1107 | .research-company-control > svg { |
| 1108 | grid-row: 1 / 3; |
| 1109 | } |
| 1110 | |
| 1111 | .research-company-select { |
| 1112 | min-width: 0; |
| 1113 | max-width: 100%; |
| 1114 | overflow: hidden; |
| 1115 | text-overflow: ellipsis; |
| 1116 | white-space: nowrap; |
| 1117 | font-weight: 700; |
| 1118 | } |
| 1119 | |
| 1120 | .research-company-select option { |
| 1121 | background: var(--research-option-bg); |
| 1122 | color: var(--research-option-text); |
| 1123 | font-weight: 600; |
| 1124 | } |
| 1125 | |
| 1126 | .research-company-select option:hover, |
| 1127 | .research-company-select option:checked { |
| 1128 | background: var(--research-option-hover); |
| 1129 | color: var(--research-option-text); |
| 1130 | font-weight: 700; |
| 1131 | } |
| 1132 | |
| 1133 | .research-company-select:focus-visible { |
| 1134 | outline: 3px solid color-mix(in srgb, var(--focus) 40%, transparent); |
| 1135 | outline-offset: 3px; |
| 1136 | } |
| 1137 | |
| 1138 | .research-company-meta { |
| 1139 | grid-column: 3; |
| 1140 | color: var(--text-muted); |
| 1141 | overflow: hidden; |
| 1142 | text-overflow: ellipsis; |
| 1143 | white-space: nowrap; |
| 1144 | font-size: 12px; |
| 1145 | } |
| 1146 | |
| 1147 | .research-layout .metrics-grid { |
| 1148 | gap: var(--space-3); |
| 1149 | } |
| 1150 | |
| 1151 | .research-layout .metric-card { |
| 1152 | min-height: 88px; |
| 1153 | padding: var(--space-4); |
| 1154 | } |
| 1155 | |
| 1156 | .research-layout .metric-value { |
| 1157 | font-size: 21px; |
| 1158 | } |
| 1159 | |
| 1160 | .research-accordion { |
| 1161 | display: grid; |
| 1162 | gap: var(--space-2); |
| 1163 | } |
| 1164 | |
| 1165 | .research-accordion-item, |
| 1166 | .research-event-row { |
| 1167 | overflow: hidden; |
| 1168 | border: 1px solid var(--line); |
| 1169 | border-radius: var(--radius); |
| 1170 | background: var(--surface-raised); |
| 1171 | } |
| 1172 | |
| 1173 | .research-accordion-item h3, |
| 1174 | .research-event-row h4 { |
| 1175 | margin: 0; |
| 1176 | } |
| 1177 | |
| 1178 | .research-accordion-button, |
| 1179 | .research-event-row-button { |
| 1180 | width: 100%; |
| 1181 | min-height: 48px; |
| 1182 | display: grid; |
| 1183 | grid-template-columns: minmax(0, 1fr) auto auto; |
| 1184 | align-items: center; |
| 1185 | gap: var(--space-3); |
| 1186 | border: 0; |
| 1187 | padding: 0 var(--space-4); |
| 1188 | background: transparent; |
| 1189 | color: var(--text); |
| 1190 | text-align: left; |
| 1191 | } |
| 1192 | |
| 1193 | .research-accordion-button:hover, |
| 1194 | .research-event-row-button:hover { |
| 1195 | background: color-mix(in srgb, var(--primary) 5%, transparent); |
| 1196 | } |
| 1197 | |
| 1198 | .research-section-meta, |
| 1199 | .research-event-row-button > span:last-of-type { |
| 1200 | color: var(--text-muted); |
| 1201 | font-size: 13px; |
| 1202 | font-weight: 800; |
| 1203 | white-space: nowrap; |
| 1204 | } |
| 1205 | |
| 1206 | .accordion-chevron { |
| 1207 | color: var(--text-muted); |
| 1208 | transition: transform 160ms ease; |
| 1209 | } |
| 1210 | |
| 1211 | .research-accordion-button[aria-expanded="true"] .accordion-chevron, |
| 1212 | .research-event-row-button[aria-expanded="true"] .accordion-chevron { |
| 1213 | transform: rotate(180deg); |
| 1214 | } |
| 1215 | |
| 1216 | .research-accordion-panel { |
| 1217 | border-top: 1px solid var(--line); |
| 1218 | padding: var(--space-4); |
| 1219 | background: var(--surface); |
| 1220 | } |
| 1221 | |
| 1222 | .research-overview-grid, |
| 1223 | .research-detail-list, |
| 1224 | .research-event-rows { |
| 1225 | display: grid; |
| 1226 | gap: var(--space-3); |
| 1227 | } |
| 1228 | |
| 1229 | .research-overview-grid { |
| 1230 | grid-template-columns: repeat(5, minmax(140px, 1fr)); |
| 1231 | } |
| 1232 | |
| 1233 | .research-summary-note { |
| 1234 | grid-column: 1 / -1; |
| 1235 | display: flex; |
| 1236 | justify-content: space-between; |
| 1237 | gap: var(--space-3); |
| 1238 | border: 1px solid var(--line); |
| 1239 | border-radius: var(--radius); |
| 1240 | padding: var(--space-3) var(--space-4); |
| 1241 | background: var(--bg-subtle); |
| 1242 | color: var(--text-muted); |
| 1243 | } |
| 1244 | |
| 1245 | .research-summary-note strong { |
| 1246 | color: var(--text); |
| 1247 | } |
| 1248 | |
| 1249 | .research-event-row-button > span:first-child { |
| 1250 | min-width: 0; |
| 1251 | display: flex; |
| 1252 | align-items: center; |
| 1253 | gap: var(--space-3); |
| 1254 | } |
| 1255 | |
| 1256 | .research-event-row-button strong { |
| 1257 | overflow: hidden; |
| 1258 | text-overflow: ellipsis; |
| 1259 | white-space: nowrap; |
| 1260 | } |
| 1261 | |
| 1262 | .score-grid { |
| 1263 | display: grid; |
| 1264 | grid-template-columns: repeat(5, minmax(160px, 1fr)); |
| 1265 | gap: var(--space-4); |
| 1266 | } |
| 1267 | |
| 1268 | .score-row { |
| 1269 | display: grid; |
| 1270 | gap: var(--space-2); |
| 1271 | border: 1px solid var(--line); |
| 1272 | border-radius: var(--radius); |
| 1273 | padding: var(--space-4); |
| 1274 | background: var(--bg-subtle); |
| 1275 | } |
| 1276 | |
| 1277 | .score-row span { |
| 1278 | color: var(--text-muted); |
| 1279 | font-size: 13px; |
| 1280 | } |
| 1281 | |
| 1282 | .score-row strong { |
| 1283 | font-size: 24px; |
| 1284 | } |
| 1285 | |
| 1286 | .score-row.compact { |
| 1287 | padding: var(--space-3); |
| 1288 | } |
| 1289 | |
| 1290 | .score-row.compact strong { |
| 1291 | font-size: 20px; |
| 1292 | } |
| 1293 | |
| 1294 | .research-event-detail { |
| 1295 | display: grid; |
| 1296 | gap: var(--space-3); |
| 1297 | padding: var(--space-4); |
| 1298 | } |
| 1299 | |
| 1300 | .research-event-detail h4 { |
| 1301 | margin: var(--space-2) 0 0; |
| 1302 | font-size: 16px; |
| 1303 | } |
| 1304 | |
| 1305 | .research-event-detail p, |
| 1306 | .research-event-detail blockquote { |
| 1307 | margin: 0; |
| 1308 | color: var(--text-muted); |
| 1309 | } |
| 1310 | |
| 1311 | .research-event-detail blockquote { |
| 1312 | border-left: 3px solid var(--line-strong); |
| 1313 | padding-left: var(--space-3); |
| 1314 | font-size: 13px; |
| 1315 | } |
| 1316 | |
| 1317 | .event-value-line { |
| 1318 | display: flex; |
| 1319 | align-items: baseline; |
| 1320 | justify-content: space-between; |
| 1321 | gap: var(--space-3); |
| 1322 | border-top: 1px solid var(--line); |
| 1323 | padding-top: var(--space-3); |
| 1324 | } |
| 1325 | |
| 1326 | .event-value-line strong { |
| 1327 | font-size: 20px; |
| 1328 | } |
| 1329 | |
| 1330 | .event-value-line span { |
| 1331 | color: var(--text-muted); |
| 1332 | } |
| 1333 | |
| 1334 | .event-facts { |
| 1335 | display: grid; |
| 1336 | grid-template-columns: repeat(5, minmax(0, 1fr)); |
| 1337 | gap: var(--space-3); |
| 1338 | margin: 0; |
| 1339 | } |
| 1340 | |
| 1341 | .event-facts div { |
| 1342 | border: 1px solid var(--line); |
| 1343 | border-radius: var(--radius); |
| 1344 | padding: var(--space-3); |
| 1345 | background: var(--bg-subtle); |
| 1346 | } |
| 1347 | |
| 1348 | .event-facts dt { |
| 1349 | color: var(--text-muted); |
| 1350 | font-size: 12px; |
| 1351 | font-weight: 800; |
| 1352 | text-transform: uppercase; |
| 1353 | } |
| 1354 | |
| 1355 | .event-facts dd { |
| 1356 | margin: 4px 0 0; |
| 1357 | font-weight: 700; |
| 1358 | } |
| 1359 | |
| 1360 | .source-link, |
| 1361 | .source-list a { |
| 1362 | color: var(--primary-strong); |
| 1363 | font-weight: 800; |
| 1364 | text-decoration: none; |
| 1365 | } |
| 1366 | |
| 1367 | .supporting-sources { |
| 1368 | display: grid; |
| 1369 | gap: var(--space-2); |
| 1370 | } |
| 1371 | |
| 1372 | .supporting-sources .source-link { |
| 1373 | display: grid; |
| 1374 | gap: 2px; |
| 1375 | border: 1px solid var(--line); |
| 1376 | border-radius: var(--radius); |
| 1377 | padding: var(--space-3); |
| 1378 | background: var(--bg-subtle); |
| 1379 | overflow-wrap: anywhere; |
| 1380 | } |
| 1381 | |
| 1382 | .supporting-sources small { |
| 1383 | color: var(--text-soft); |
| 1384 | font-weight: 600; |
| 1385 | } |
| 1386 | |
| 1387 | .source-list { |
| 1388 | display: grid; |
| 1389 | gap: var(--space-3); |
| 1390 | } |
| 1391 | |
| 1392 | .source-list a { |
| 1393 | display: grid; |
| 1394 | gap: 3px; |
| 1395 | border: 1px solid var(--line); |
| 1396 | border-radius: var(--radius); |
| 1397 | padding: var(--space-4); |
| 1398 | background: var(--bg-subtle); |
| 1399 | } |
| 1400 | |
| 1401 | .source-list span { |
| 1402 | color: var(--text-muted); |
| 1403 | font-weight: 500; |
| 1404 | } |
| 1405 | |
| 1406 | .source-list small { |
| 1407 | color: var(--text-soft); |
| 1408 | font-weight: 600; |
| 1409 | overflow-wrap: anywhere; |
| 1410 | } |
| 1411 | |
| 1412 | .range-control { |
| 1413 | display: flex; |
| 1414 | flex-wrap: wrap; |
| 1415 | gap: var(--space-1); |
| 1416 | } |
| 1417 | |
| 1418 | .range-control button { |
| 1419 | min-width: 42px; |
| 1420 | border: 1px solid var(--line); |
| 1421 | border-radius: 6px; |
| 1422 | background: var(--bg-panel); |
| 1423 | color: var(--text-muted); |
| 1424 | font-weight: 800; |
| 1425 | padding: 7px 9px; |
| 1426 | cursor: pointer; |
| 1427 | } |
| 1428 | |
| 1429 | .range-control button:hover, |
| 1430 | .range-control .range-active { |
| 1431 | border-color: var(--primary); |
| 1432 | color: var(--primary-strong); |
| 1433 | background: var(--bg-subtle); |
| 1434 | } |
| 1435 | |
| 1436 | .history-metrics { |
| 1437 | display: grid; |
| 1438 | grid-template-columns: repeat(4, minmax(140px, 1fr)); |
| 1439 | gap: var(--space-3); |
| 1440 | margin: var(--space-4) 0; |
| 1441 | } |
| 1442 | |
| 1443 | .history-chart { |
| 1444 | width: 100%; |
| 1445 | overflow: hidden; |
| 1446 | border: 1px solid var(--line); |
| 1447 | border-radius: var(--radius); |
| 1448 | background: var(--bg-subtle); |
| 1449 | } |
| 1450 | |
| 1451 | .history-chart svg { |
| 1452 | display: block; |
| 1453 | width: 100%; |
| 1454 | min-height: 260px; |
| 1455 | } |
| 1456 | |
| 1457 | .history-chart line { |
| 1458 | stroke: var(--line-strong); |
| 1459 | } |
| 1460 | |
| 1461 | .history-chart text { |
| 1462 | fill: var(--text-muted); |
| 1463 | font-size: 12px; |
| 1464 | font-weight: 700; |
| 1465 | } |
| 1466 | |
| 1467 | .history-chart path { |
| 1468 | fill: none; |
| 1469 | stroke-width: 3; |
| 1470 | stroke-linecap: round; |
| 1471 | stroke-linejoin: round; |
| 1472 | } |
| 1473 | |
| 1474 | .history-chart .market-line { |
| 1475 | stroke: var(--primary); |
| 1476 | } |
| 1477 | |
| 1478 | .history-chart .invested-line { |
| 1479 | stroke: var(--warning); |
| 1480 | stroke-dasharray: 8 6; |
| 1481 | } |
| 1482 | |
| 1483 | .history-chart .market-point { |
| 1484 | fill: var(--primary); |
| 1485 | stroke: var(--bg-panel); |
| 1486 | stroke-width: 2; |
| 1487 | } |
| 1488 | |
| 1489 | .history-note { |
| 1490 | margin: var(--space-3) 0 0; |
| 1491 | color: var(--text-muted); |
| 1492 | font-size: 13px; |
| 1493 | font-weight: 700; |
| 1494 | } |
| 1495 | |
| 1496 | .portfolio-research-table { |
| 1497 | display: grid; |
| 1498 | gap: var(--space-2); |
| 1499 | margin-top: var(--space-4); |
| 1500 | max-height: 70vh; |
| 1501 | overflow: auto; |
| 1502 | } |
| 1503 | |
| 1504 | .portfolio-research-row { |
| 1505 | display: grid; |
| 1506 | grid-template-columns: minmax(190px, 1.5fr) repeat(6, minmax(105px, 1fr)) minmax(180px, 1.2fr); |
| 1507 | gap: var(--space-3); |
| 1508 | align-items: center; |
| 1509 | padding: var(--space-3); |
| 1510 | border: 1px solid var(--line); |
| 1511 | border-radius: var(--radius); |
| 1512 | background: var(--bg-panel); |
| 1513 | color: var(--text); |
| 1514 | text-align: left; |
| 1515 | } |
| 1516 | |
| 1517 | .portfolio-research-head { |
| 1518 | position: sticky; |
| 1519 | top: 0; |
| 1520 | z-index: 2; |
| 1521 | background: var(--bg-subtle); |
| 1522 | color: var(--text-muted); |
| 1523 | font-size: 12px; |
| 1524 | font-weight: 800; |
| 1525 | text-transform: uppercase; |
| 1526 | } |
| 1527 | |
| 1528 | .portfolio-research-company { |
| 1529 | width: 100%; |
| 1530 | cursor: pointer; |
| 1531 | } |
| 1532 | |
| 1533 | .portfolio-research-company:hover { |
| 1534 | border-color: var(--primary); |
| 1535 | } |
| 1536 | |
| 1537 | .market-intelligence-research-row-positive { |
| 1538 | border-color: color-mix(in srgb, var(--positive) 55%, var(--line)); |
| 1539 | background: color-mix(in srgb, var(--positive) 10%, var(--bg-panel)); |
| 1540 | } |
| 1541 | |
| 1542 | .market-intelligence-research-row-negative { |
| 1543 | border-color: color-mix(in srgb, var(--negative) 55%, var(--line)); |
| 1544 | background: color-mix(in srgb, var(--negative) 10%, var(--bg-panel)); |
| 1545 | } |
| 1546 | |
| 1547 | .market-intelligence-research-row-neutral { |
| 1548 | border-color: var(--line-strong); |
| 1549 | background: var(--bg-panel); |
| 1550 | } |
| 1551 | |
| 1552 | .market-intelligence-research-row:hover { |
| 1553 | border-color: var(--primary); |
| 1554 | background: color-mix(in srgb, var(--primary) 9%, var(--bg-panel)); |
| 1555 | } |
| 1556 | |
| 1557 | .market-intelligence-research-row[aria-current="true"] { |
| 1558 | border-color: var(--primary); |
| 1559 | box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary) 32%, transparent); |
| 1560 | } |
| 1561 | |
| 1562 | .market-intelligence-table-return { |
| 1563 | margin-top: var(--space-2); |
| 1564 | font-variant-numeric: tabular-nums; |
| 1565 | } |
| 1566 | |
| 1567 | .market-intelligence-table-return.neutral-text { |
| 1568 | color: var(--text-muted); |
| 1569 | } |
| 1570 | |
| 1571 | .research-status-dot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-left: 4px; } |
| 1572 | .research-status-positive { background: #2ea66f; }.research-status-warning { background: #d99527; }.research-status-info { background: #3182f6; }.research-status-negative { background: #d94a54; }.research-status-neutral { background: #8993a4; } |
| 1573 | |
| 1574 | .readiness-popup-backdrop { |
| 1575 | position: fixed; |
| 1576 | inset: 0; |
| 1577 | z-index: 1000; |
| 1578 | display: grid; |
| 1579 | place-items: center; |
| 1580 | padding: var(--space-4); |
| 1581 | overflow: hidden; |
| 1582 | background: rgb(8 15 25 / 68%); |
| 1583 | backdrop-filter: blur(3px); |
| 1584 | } |
| 1585 | |
| 1586 | .readiness-popup { |
| 1587 | width: min(960px, 100%); |
| 1588 | max-height: min(920px, calc(100vh - 2 * var(--space-4))); |
| 1589 | max-height: min(920px, calc(100dvh - 2 * var(--space-4))); |
| 1590 | display: grid; |
| 1591 | grid-template-rows: auto minmax(0, 1fr); |
| 1592 | overflow: hidden; |
| 1593 | border: 1px solid var(--line); |
| 1594 | border-radius: calc(var(--radius) + 4px); |
| 1595 | background: var(--surface-raised); |
| 1596 | color: var(--text); |
| 1597 | box-shadow: 0 24px 70px rgb(0 0 0 / 38%); |
| 1598 | isolation: isolate; |
| 1599 | } |
| 1600 | |
| 1601 | .readiness-popup-header, |
| 1602 | .readiness-requirement-heading, |
| 1603 | .readiness-actions { |
| 1604 | display: flex; |
| 1605 | align-items: center; |
| 1606 | justify-content: space-between; |
| 1607 | gap: var(--space-3); |
| 1608 | } |
| 1609 | |
| 1610 | .readiness-popup-header { |
| 1611 | min-width: 0; |
| 1612 | padding: var(--space-4) var(--space-5); |
| 1613 | border-bottom: 1px solid var(--line); |
| 1614 | background: var(--surface-raised); |
| 1615 | } |
| 1616 | |
| 1617 | .readiness-popup-header > div { |
| 1618 | min-width: 0; |
| 1619 | } |
| 1620 | |
| 1621 | .readiness-popup-header h2 { |
| 1622 | margin: 0; |
| 1623 | overflow-wrap: anywhere; |
| 1624 | } |
| 1625 | |
| 1626 | .readiness-popup-header .icon-button { |
| 1627 | flex: 0 0 auto; |
| 1628 | } |
| 1629 | |
| 1630 | .readiness-popup-body { |
| 1631 | min-height: 0; |
| 1632 | overflow-y: auto; |
| 1633 | overscroll-behavior: contain; |
| 1634 | padding: var(--space-5); |
| 1635 | scrollbar-gutter: stable; |
| 1636 | } |
| 1637 | |
| 1638 | .readiness-summary { |
| 1639 | display: grid; |
| 1640 | grid-template-columns: repeat(4, minmax(130px, 1fr)); |
| 1641 | gap: var(--space-3); |
| 1642 | margin: var(--space-4) 0; |
| 1643 | } |
| 1644 | |
| 1645 | .readiness-summary > div { |
| 1646 | min-width: 0; |
| 1647 | display: grid; |
| 1648 | gap: .25rem; |
| 1649 | padding: var(--space-3); |
| 1650 | border: 1px solid var(--line); |
| 1651 | border-radius: var(--radius); |
| 1652 | background: var(--surface); |
| 1653 | } |
| 1654 | |
| 1655 | .readiness-summary strong { |
| 1656 | overflow-wrap: anywhere; |
| 1657 | } |
| 1658 | |
| 1659 | .readiness-summary span, |
| 1660 | .readiness-requirement small, |
| 1661 | .readiness-requirement p { |
| 1662 | color: var(--text-muted); |
| 1663 | } |
| 1664 | |
| 1665 | .readiness-requirements { |
| 1666 | display: grid; |
| 1667 | gap: var(--space-3); |
| 1668 | margin-top: var(--space-4); |
| 1669 | } |
| 1670 | |
| 1671 | .readiness-requirement { |
| 1672 | min-width: 0; |
| 1673 | padding: var(--space-4); |
| 1674 | border: 1px solid var(--line); |
| 1675 | border-left-width: 5px; |
| 1676 | border-radius: var(--radius); |
| 1677 | background: var(--surface); |
| 1678 | } |
| 1679 | |
| 1680 | .readiness-requirement-ready { border-left-color: #2ea66f; } |
| 1681 | .readiness-requirement-warning { border-left-color: #d99527; } |
| 1682 | .readiness-requirement-danger { border-left-color: #d94a54; } |
| 1683 | .readiness-requirement-neutral { border-left-color: #8993a4; } |
| 1684 | |
| 1685 | .readiness-requirement-heading > div { |
| 1686 | display: grid; |
| 1687 | gap: .2rem; |
| 1688 | } |
| 1689 | |
| 1690 | .readiness-status { |
| 1691 | flex: 0 0 auto; |
| 1692 | padding: .25rem .55rem; |
| 1693 | border-radius: 999px; |
| 1694 | font-size: .72rem; |
| 1695 | font-weight: 700; |
| 1696 | line-height: 1.35; |
| 1697 | text-align: center; |
| 1698 | white-space: nowrap; |
| 1699 | } |
| 1700 | |
| 1701 | .readiness-status-ready { color: #16764c; background: rgb(46 166 111 / 15%); } |
| 1702 | .readiness-status-warning { color: #9a5d08; background: rgb(217 149 39 / 16%); } |
| 1703 | .readiness-status-danger { color: #ad2632; background: rgb(217 74 84 / 14%); } |
| 1704 | .readiness-status-neutral { color: var(--text-muted); background: var(--bg-subtle); } |
| 1705 | |
| 1706 | .readiness-primary-actions { |
| 1707 | display: flex; |
| 1708 | align-items: center; |
| 1709 | flex-wrap: wrap; |
| 1710 | gap: var(--space-3); |
| 1711 | margin: var(--space-4) 0; |
| 1712 | padding: var(--space-3) 0; |
| 1713 | border-block: 1px solid var(--line); |
| 1714 | } |
| 1715 | |
| 1716 | .readiness-actions { |
| 1717 | justify-content: flex-start; |
| 1718 | flex-wrap: wrap; |
| 1719 | margin-top: var(--space-3); |
| 1720 | } |
| 1721 | |
| 1722 | .readiness-reason, |
| 1723 | .readiness-popup-error { color: var(--negative); } |
| 1724 | .readiness-refresh-state { color: var(--text-muted); } |
| 1725 | |
| 1726 | .readiness-analysis-actions { |
| 1727 | display: flex; |
| 1728 | align-items: center; |
| 1729 | gap: var(--space-3); |
| 1730 | margin: 0; |
| 1731 | } |
| 1732 | |
| 1733 | .rule-engine-result { |
| 1734 | margin-top: var(--space-4); |
| 1735 | padding: var(--space-4); |
| 1736 | border: 1px solid var(--line); |
| 1737 | border-left: 5px solid #8993a4; |
| 1738 | border-radius: var(--radius); |
| 1739 | background: color-mix(in srgb, var(--surface-raised) 92%, var(--bg-subtle)); |
| 1740 | } |
| 1741 | |
| 1742 | .rule-engine-result-ready { border-left-color: #2ea66f; } |
| 1743 | .rule-engine-result-danger { border-left-color: #d94a54; } |
| 1744 | |
| 1745 | .rule-engine-result > header { |
| 1746 | display: flex; |
| 1747 | align-items: center; |
| 1748 | justify-content: space-between; |
| 1749 | gap: var(--space-3); |
| 1750 | } |
| 1751 | |
| 1752 | .rule-engine-score-grid { |
| 1753 | display: grid; |
| 1754 | grid-template-columns: repeat(4, minmax(120px, 1fr)); |
| 1755 | gap: var(--space-3); |
| 1756 | margin: var(--space-3) 0; |
| 1757 | } |
| 1758 | |
| 1759 | .rule-engine-score-grid > div { |
| 1760 | display: grid; |
| 1761 | gap: .2rem; |
| 1762 | padding: var(--space-3); |
| 1763 | border: 1px solid var(--line); |
| 1764 | border-radius: var(--radius); |
| 1765 | } |
| 1766 | |
| 1767 | .rule-engine-score-grid span, |
| 1768 | .rule-engine-meta, |
| 1769 | .rule-engine-area-detail p { |
| 1770 | color: var(--text-muted); |
| 1771 | } |
| 1772 | |
| 1773 | .rule-engine-overrides { |
| 1774 | margin: var(--space-3) 0; |
| 1775 | padding: var(--space-3); |
| 1776 | border: 1px solid rgb(217 74 84 / 45%); |
| 1777 | border-radius: var(--radius); |
| 1778 | color: var(--negative); |
| 1779 | background: rgb(217 74 84 / 8%); |
| 1780 | } |
| 1781 | |
| 1782 | .rule-engine-area-table { |
| 1783 | display: grid; |
| 1784 | gap: .35rem; |
| 1785 | margin-top: var(--space-3); |
| 1786 | } |
| 1787 | |
| 1788 | .rule-engine-area-row > summary, |
| 1789 | .rule-engine-area-header { |
| 1790 | display: grid; |
| 1791 | grid-template-columns: minmax(220px, 2fr) repeat(4, minmax(88px, 1fr)); |
| 1792 | gap: var(--space-2); |
| 1793 | align-items: center; |
| 1794 | padding: var(--space-2) var(--space-3); |
| 1795 | } |
| 1796 | |
| 1797 | .rule-engine-area-row > summary { |
| 1798 | cursor: pointer; |
| 1799 | border: 1px solid var(--line); |
| 1800 | border-radius: var(--radius); |
| 1801 | font-variant-numeric: tabular-nums; |
| 1802 | } |
| 1803 | |
| 1804 | .rule-engine-area-header { |
| 1805 | color: var(--text-muted); |
| 1806 | font-size: .78rem; |
| 1807 | font-weight: 700; |
| 1808 | text-transform: uppercase; |
| 1809 | } |
| 1810 | |
| 1811 | .rule-engine-area-detail { |
| 1812 | padding: var(--space-3); |
| 1813 | border: 1px solid var(--line); |
| 1814 | border-top: 0; |
| 1815 | border-radius: 0 0 var(--radius) var(--radius); |
| 1816 | } |
| 1817 | |
| 1818 | .rule-engine-metrics { |
| 1819 | display: grid; |
| 1820 | gap: var(--space-2); |
| 1821 | } |
| 1822 | |
| 1823 | .rule-engine-metrics article { |
| 1824 | padding: var(--space-2); |
| 1825 | border-left: 3px solid var(--line-strong); |
| 1826 | } |
| 1827 | |
| 1828 | @media (max-width: 720px) { |
| 1829 | .readiness-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); } |
| 1830 | .rule-engine-score-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } |
| 1831 | .rule-engine-area-header { display: none; } |
| 1832 | .rule-engine-area-row > summary { grid-template-columns: minmax(150px, 2fr) repeat(2, 1fr); } |
| 1833 | .rule-engine-area-row > summary span:nth-child(4), |
| 1834 | .rule-engine-area-row > summary span:nth-child(5) { display: none; } |
| 1835 | .readiness-popup-backdrop { padding: var(--space-2); } |
| 1836 | .readiness-popup { |
| 1837 | max-height: calc(100vh - 2 * var(--space-2)); |
| 1838 | max-height: calc(100dvh - 2 * var(--space-2)); |
| 1839 | } |
| 1840 | .readiness-popup-header, |
| 1841 | .readiness-popup-body { padding: var(--space-4); } |
| 1842 | .readiness-requirement-heading { align-items: flex-start; } |
| 1843 | } |
| 1844 | |
| 1845 | .portfolio-research-row strong, |
| 1846 | .portfolio-research-row small { |
| 1847 | display: block; |
| 1848 | } |
| 1849 | |
| 1850 | .portfolio-research-row small { |
| 1851 | color: var(--text-soft); |
| 1852 | margin-top: 3px; |
| 1853 | } |
| 1854 | |
| 1855 | .settings-grid { |
| 1856 | display: grid; |
| 1857 | grid-template-columns: repeat(2, minmax(0, 1fr)); |
| 1858 | gap: var(--space-4); |
| 1859 | } |
| 1860 | |
| 1861 | .settings-grid div { |
| 1862 | border: 1px solid var(--line); |
| 1863 | border-radius: var(--radius); |
| 1864 | padding: var(--space-4); |
| 1865 | background: var(--bg-subtle); |
| 1866 | } |
| 1867 | |
| 1868 | .empty-state, |
| 1869 | .error-state { |
| 1870 | display: grid; |
| 1871 | gap: var(--space-3); |
| 1872 | place-items: start; |
| 1873 | border: 1px dashed var(--line-strong); |
| 1874 | border-radius: var(--radius); |
| 1875 | padding: var(--space-6); |
| 1876 | background: var(--surface); |
| 1877 | } |
| 1878 | |
| 1879 | .error-state { |
| 1880 | margin-bottom: var(--space-5); |
| 1881 | border-color: color-mix(in srgb, var(--negative) 45%, var(--line)); |
| 1882 | } |
| 1883 | |
| 1884 | .error-state small { |
| 1885 | color: var(--text-muted); |
| 1886 | } |
| 1887 | |
| 1888 | .loading-grid { |
| 1889 | display: grid; |
| 1890 | gap: var(--space-4); |
| 1891 | } |
| 1892 | |
| 1893 | .skeleton-stack { |
| 1894 | display: grid; |
| 1895 | gap: var(--space-3); |
| 1896 | border: 1px solid var(--line); |
| 1897 | border-radius: var(--radius); |
| 1898 | padding: var(--space-5); |
| 1899 | background: var(--surface); |
| 1900 | } |
| 1901 | |
| 1902 | .skeleton-line { |
| 1903 | height: 18px; |
| 1904 | border-radius: 999px; |
| 1905 | background: linear-gradient(90deg, var(--bg-subtle), var(--line), var(--bg-subtle)); |
| 1906 | background-size: 200% 100%; |
| 1907 | animation: skeleton-pulse 1.4s ease-in-out infinite; |
| 1908 | } |
| 1909 | |
| 1910 | .skeleton-line:nth-child(2n) { |
| 1911 | width: 76%; |
| 1912 | } |
| 1913 | |
| 1914 | .skeleton-line:nth-child(3n) { |
| 1915 | width: 54%; |
| 1916 | } |
| 1917 | |
| 1918 | @keyframes skeleton-pulse { |
| 1919 | 0% { |
| 1920 | background-position: 100% 0; |
| 1921 | } |
| 1922 | 100% { |
| 1923 | background-position: -100% 0; |
| 1924 | } |
| 1925 | } |
| 1926 | |
| 1927 | @media (prefers-reduced-motion: reduce) { |
| 1928 | .skeleton-line { |
| 1929 | animation: none; |
| 1930 | } |
| 1931 | tbody tr[class*="ownership-"] td { animation: none; } |
| 1932 | .portfolio-research-company[class*="ownership-"] { animation: none; } |
| 1933 | } |
| 1934 | |
| 1935 | @media (max-width: 1180px) { |
| 1936 | .metrics-grid { |
| 1937 | grid-template-columns: repeat(3, minmax(0, 1fr)); |
| 1938 | } |
| 1939 | |
| 1940 | .dashboard-grid, |
| 1941 | .broker-grid { |
| 1942 | grid-template-columns: 1fr; |
| 1943 | } |
| 1944 | |
| 1945 | .score-grid { |
| 1946 | grid-template-columns: repeat(2, minmax(0, 1fr)); |
| 1947 | } |
| 1948 | |
| 1949 | .research-overview-grid { |
| 1950 | grid-template-columns: repeat(3, minmax(0, 1fr)); |
| 1951 | } |
| 1952 | |
| 1953 | .event-facts { |
| 1954 | grid-template-columns: repeat(3, minmax(0, 1fr)); |
| 1955 | } |
| 1956 | } |
| 1957 | |
| 1958 | @media (max-width: 860px) { |
| 1959 | .app-shell { |
| 1960 | grid-template-columns: 1fr; |
| 1961 | } |
| 1962 | |
| 1963 | .sidebar { |
| 1964 | position: fixed; |
| 1965 | z-index: 40; |
| 1966 | left: 0; |
| 1967 | transform: translateX(-100%); |
| 1968 | width: min(82vw, 300px); |
| 1969 | transition: transform 160ms ease; |
| 1970 | } |
| 1971 | |
| 1972 | .sidebar-open { |
| 1973 | transform: translateX(0); |
| 1974 | } |
| 1975 | |
| 1976 | .mobile-menu { |
| 1977 | display: inline-flex; |
| 1978 | width: 40px; |
| 1979 | height: 40px; |
| 1980 | align-items: center; |
| 1981 | justify-content: center; |
| 1982 | } |
| 1983 | |
| 1984 | .sidebar-scrim { |
| 1985 | position: fixed; |
| 1986 | z-index: 35; |
| 1987 | inset: 0; |
| 1988 | display: flex; |
| 1989 | justify-content: flex-end; |
| 1990 | padding: var(--space-5); |
| 1991 | border: 0; |
| 1992 | background: rgba(15, 23, 42, 0.52); |
| 1993 | color: #ffffff; |
| 1994 | } |
| 1995 | |
| 1996 | .topbar { |
| 1997 | padding: 0 var(--space-4); |
| 1998 | } |
| 1999 | |
| 2000 | .topbar-actions .badge, |
| 2001 | .command-bar kbd { |
| 2002 | display: none; |
| 2003 | } |
| 2004 | |
| 2005 | .content { |
| 2006 | width: min(100% - 32px, 1480px); |
| 2007 | padding-top: var(--space-6); |
| 2008 | } |
| 2009 | |
| 2010 | .page-header, |
| 2011 | .table-toolbar { |
| 2012 | align-items: stretch; |
| 2013 | flex-direction: column; |
| 2014 | } |
| 2015 | |
| 2016 | .portfolio-select, |
| 2017 | .table-search { |
| 2018 | max-width: none; |
| 2019 | } |
| 2020 | |
| 2021 | .metrics-grid { |
| 2022 | grid-template-columns: repeat(2, minmax(0, 1fr)); |
| 2023 | } |
| 2024 | |
| 2025 | .form-grid, |
| 2026 | .settings-grid, |
| 2027 | .event-facts { |
| 2028 | grid-template-columns: 1fr; |
| 2029 | } |
| 2030 | |
| 2031 | .research-sticky-panel { |
| 2032 | position: static; |
| 2033 | } |
| 2034 | |
| 2035 | .research-overview-grid { |
| 2036 | grid-template-columns: repeat(2, minmax(0, 1fr)); |
| 2037 | } |
| 2038 | |
| 2039 | .portfolio-research-row { |
| 2040 | grid-template-columns: 1fr 1fr; |
| 2041 | } |
| 2042 | |
| 2043 | .portfolio-research-head { |
| 2044 | display: none; |
| 2045 | } |
| 2046 | |
| 2047 | .research-summary-note, |
| 2048 | .research-event-row-button > span:first-child { |
| 2049 | align-items: flex-start; |
| 2050 | flex-direction: column; |
| 2051 | } |
| 2052 | } |
| 2053 | |
| 2054 | @media (max-width: 620px) { |
| 2055 | .topbar { |
| 2056 | flex-wrap: wrap; |
| 2057 | min-height: 112px; |
| 2058 | align-content: center; |
| 2059 | } |
| 2060 | |
| 2061 | .command-bar { |
| 2062 | order: 3; |
| 2063 | flex-basis: 100%; |
| 2064 | max-width: none; |
| 2065 | } |
| 2066 | |
| 2067 | .topbar-actions { |
| 2068 | margin-left: auto; |
| 2069 | } |
| 2070 | |
| 2071 | .theme-switch { |
| 2072 | display: none; |
| 2073 | } |
| 2074 | |
| 2075 | .page-header h1 { |
| 2076 | font-size: 26px; |
| 2077 | } |
| 2078 | |
| 2079 | .metrics-grid { |
| 2080 | grid-template-columns: 1fr; |
| 2081 | } |
| 2082 | |
| 2083 | .metric-card { |
| 2084 | min-height: 104px; |
| 2085 | } |
| 2086 | |
| 2087 | .panel-header { |
| 2088 | flex-direction: column; |
| 2089 | } |
| 2090 | |
| 2091 | .score-grid { |
| 2092 | grid-template-columns: 1fr; |
| 2093 | } |
| 2094 | |
| 2095 | .research-overview-grid, |
| 2096 | .research-accordion-button, |
| 2097 | .research-event-row-button { |
| 2098 | grid-template-columns: 1fr auto; |
| 2099 | } |
| 2100 | |
| 2101 | .research-accordion-button > span:first-child, |
| 2102 | .research-event-row-button > span:first-child { |
| 2103 | grid-column: 1; |
| 2104 | } |
| 2105 | |
| 2106 | .research-accordion-button .accordion-chevron, |
| 2107 | .research-event-row-button .accordion-chevron { |
| 2108 | grid-column: 2; |
| 2109 | grid-row: 1; |
| 2110 | justify-self: end; |
| 2111 | } |
| 2112 | |
| 2113 | .research-section-meta, |
| 2114 | .research-event-row-button > span:last-of-type { |
| 2115 | grid-column: 1 / -1; |
| 2116 | grid-row: 2; |
| 2117 | } |
| 2118 | } |
| 2119 | .portfolio-tabs { |
| 2120 | display: flex; |
| 2121 | gap: 0.5rem; |
| 2122 | overflow-x: auto; |
| 2123 | padding-bottom: 0.75rem; |
| 2124 | } |
| 2125 | |
| 2126 | .portfolio-tabs button { |
| 2127 | border: 1px solid var(--line); |
| 2128 | background: var(--surface); |
| 2129 | color: var(--text-muted); |
| 2130 | border-radius: 999px; |
| 2131 | padding: 0.55rem 0.9rem; |
| 2132 | white-space: nowrap; |
| 2133 | cursor: pointer; |
| 2134 | } |
| 2135 | |
| 2136 | .portfolio-tabs button.active { |
| 2137 | color: var(--text); |
| 2138 | border-color: var(--primary); |
| 2139 | background: var(--bg-subtle); |
| 2140 | } |
| 2141 | |
| 2142 | .currency-total-grid, |
| 2143 | .portfolio-card-grid { |
| 2144 | display: grid; |
| 2145 | grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); |
| 2146 | gap: 1rem; |
| 2147 | } |
| 2148 | |
| 2149 | .portfolio-card-grid { |
| 2150 | grid-column: 1 / -1; |
| 2151 | } |
| 2152 | |
| 2153 | .holding-name-editor { |
| 2154 | display: flex; |
| 2155 | flex-wrap: wrap; |
| 2156 | align-items: end; |
| 2157 | gap: 0.45rem; |
| 2158 | min-width: 280px; |
| 2159 | } |
| 2160 | |
| 2161 | .holding-name-editor label { |
| 2162 | display: grid; |
| 2163 | gap: 0.25rem; |
| 2164 | color: var(--text-muted); |
| 2165 | font-size: 0.75rem; |
| 2166 | } |
| 2167 | |
| 2168 | .holding-name-editor input { |
| 2169 | min-width: 220px; |
| 2170 | } |
| 2171 | |
| 2172 | .holding-name-editor small { |
| 2173 | flex-basis: 100%; |
| 2174 | color: var(--negative); |
| 2175 | } |
| 2176 | |
| 2177 | .text-action { |
| 2178 | border: 0; |
| 2179 | background: transparent; |
| 2180 | color: var(--primary); |
| 2181 | cursor: pointer; |
| 2182 | padding: 0.25rem 0; |
| 2183 | } |
| 2184 | |
| 2185 | @media (max-width: 640px) { |
| 2186 | .currency-total-grid, |
| 2187 | .portfolio-card-grid { |
| 2188 | grid-template-columns: 1fr; |
| 2189 | } |
| 2190 | } |
| 2191 | .ownership-increase { border-left: 4px solid var(--border); padding-left: .75rem; } |
| 2192 | .ownership-promoter { border-left-color: #22c55e; } |
| 2193 | .ownership-fii_fpi { border-left-color: #3b82f6; } |
| 2194 | .ownership-dii { border-left-color: #ec4899; } |
| 2195 | |
| 2196 | /* Research discovery is independent of the saved-list/company controls. */ |
| 2197 | .research-discovery { display: grid; gap: 20px; } |
| 2198 | .research-search-control { position: relative; display: grid; width: 100%; gap: 12px; } |
| 2199 | .research-region-control { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } |
| 2200 | .research-region-control button { padding: 10px 18px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-raised); color: inherit; cursor: pointer; } |
| 2201 | .research-region-control button.active { outline: 2px solid var(--primary); } |
| 2202 | .research-search-input { width: 100%; min-height: 52px; padding: 14px 16px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface-raised); color: inherit; font: inherit; } |
| 2203 | .research-search-listbox { top: 100%; left: 0; right: 0; margin: 4px 0 0; padding: 6px; list-style: none; } |
| 2204 | .research-search-listbox li { display: grid; gap: 4px; padding: 12px; border-radius: 6px; cursor: pointer; background: var(--research-option-bg); color: var(--research-option-text); } |
| 2205 | .research-search-listbox li strong { color: inherit; } |
| 2206 | .research-search-listbox li small { color: var(--research-option-muted); } |
| 2207 | .research-search-listbox li:hover { background: var(--research-option-hover); color: var(--research-option-text); } |
| 2208 | .research-search-listbox li.highlighted, |
| 2209 | .research-search-listbox li[aria-selected="true"], |
| 2210 | .research-search-listbox li:focus-visible { background: var(--research-option-hover); color: var(--research-option-text); outline: 2px solid var(--primary-strong); outline-offset: -2px; } |
| 2211 | .research-search-listbox li.selected { background: var(--research-option-bg); color: var(--research-option-text); outline: 2px solid var(--primary); } |
| 2212 | |
| 2213 | .research-saved-lists { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; padding: 16px 20px; } |
| 2214 | .research-saved-lists h3 { margin: 0; } |
| 2215 | .research-saved-lists .research-context-select { margin-left: auto; } |
| 2216 | /* Persisted global recommendations */ |
| 2217 | .opportunity-radar { padding: 24px; margin-bottom: 24px; border: 1px solid var(--border, #657080); border-radius: 16px; } |
| 2218 | .opportunity-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; } |
| 2219 | .opportunity-card { padding: 18px; border: 1px solid var(--border, #657080); border-radius: 12px; } |
| 2220 | .opportunity-card dl { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; } |
| 2221 | .opportunity-card dd { margin: 0; } |
| 2222 | .opportunity-card p, .opportunity-card li { overflow-wrap: anywhere; } |
| 2223 | .opportunity-radar table { width: 100%; text-align: left; border-spacing: 12px; } |