/**
 * v2ModelBuilder.css - V2 Model Library + Builder Overlay Styles
 *
 * Covers:
 *  - My Model Library page (AG Grid table, header, filter bar)
 *  - Full-viewport Builder/Sandbox overlay (stepper, workspace, action bar)
 *  - Holdings editor grid
 *  - Preview cards + chart
 *  - Validation panel
 */

/* ==========================================================================
   MY MODEL LIBRARY PAGE
   ========================================================================== */

/* Keep the native .v2-tool-pane.active display:grid but use a single 1fr
   row so the page element fills the full pane height with a definite size. */
#v2-model-library.v2-tool-pane.active {
  grid-template-rows: minmax(0, 1fr) !important;
  grid-template-columns: minmax(0, 1fr) !important;
  overflow: hidden !important;
}

.v2-model-library-page {
  display: grid;
  grid-template-rows: auto auto auto minmax(0, 1fr);
  height: 100%;
  min-height: 0;
  min-width: 0;
  overflow: hidden;
  background: var(--v2-bg-page);
}

.v2-model-library-page .v2-page-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px 24px 16px;
  min-width: 0;
  overflow: hidden;
}

.v2-model-library-page .v2-page-title {
  margin: 0 0 2px 0;
  font-size: 1.375rem;
  font-weight: 700;
  color: var(--v2-text-primary);
}

.v2-model-library-page .v2-page-subtitle {
  margin: 0;
  font-size: 0.875rem;
  color: var(--v2-text-secondary);
}

.v2-model-library-page .v2-page-actions {
  display: flex;
  gap: 8px;
  flex-shrink: 0;
}

/* Filter / search bar — grid ensures search and chips never overlap even
   when the main content area is narrow (e.g. sidebar expanded). */
.v2-model-library-filter-bar {
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr);
  column-gap: 16px;
  row-gap: 8px;
  align-items: center;
  padding: 0 24px 12px;
  min-width: 0;
}

.v2-model-library-filter-bar .v2-quick-search {
  position: relative;
  width: 100%;
  min-width: 0;
}

.v2-model-library-filter-bar .v2-quick-search input {
  box-sizing: border-box;
  width: 100%;
  padding: 8px 12px 8px 34px;
  border: 1px solid var(--v2-border-color);
  border-radius: 6px;
  background: var(--v2-bg-card);
  color: var(--v2-text-primary);
  font-size: 0.875rem;
  outline: none;
  transition: border-color 0.15s;
}

.v2-model-library-filter-bar .v2-quick-search input:focus {
  border-color: var(--v2-primary);
}

.v2-model-library-filter-bar .v2-quick-search i {
  position: absolute;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--v2-text-muted);
  font-size: 0.8125rem;
}

.v2-model-library-filter-bar .v2-filter-chips {
  display: flex;
  gap: 6px;
  min-width: 0;
  flex-wrap: wrap;
}

.v2-model-library-filter-bar .v2-filter-chip {
  padding: 5px 12px;
  border-radius: 16px;
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  color: var(--v2-text-secondary);
  font-size: 0.8125rem;
  cursor: pointer;
  transition: all 0.15s;
  white-space: nowrap;
}

.v2-model-library-filter-bar .v2-filter-chip:hover {
  border-color: var(--v2-primary);
  color: var(--v2-primary);
}

.v2-model-library-filter-bar .v2-filter-chip.active {
  background: var(--v2-accent-bg, rgba(59, 130, 246, 0.1));
  border-color: var(--v2-primary);
  color: var(--v2-primary);
  font-weight: 500;
}

/* Grid wrapper — fills the minmax(0,1fr) row, adds padding/margin, clips overflow.
   The inner ag-theme-balham div uses inline width:100%;height:100%. */
.v2-model-library-grid-wrap {
  position: relative;
  min-height: 0;
  min-width: 0;
  height: 100%;
  overflow: hidden;
  margin: 0 24px 16px;
  border-radius: var(--v2-border-radius);
  grid-row: 4;
}

/* Status pills */
.v2-status-pill {
  display: inline-flex;
  align-items: center;
  padding: 2px 10px;
  border-radius: 12px;
  font-size: 0.6875rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.3px;
}

.v2-status-pill.draft {
  background: rgba(245, 158, 11, 0.12);
  color: #D97706;
}

.v2-status-pill.published {
  background: rgba(16, 185, 129, 0.12);
  color: #059669;
}

/* Structure badge */
.v2-structure-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 0.8125rem;
  color: var(--v2-text-secondary);
}

.v2-structure-badge i {
  font-size: 0.75rem;
  color: var(--v2-text-muted);
}

/* Permission badge */
.v2-permission-badge {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  padding: 2px 8px;
  border-radius: 4px;
  background: rgba(107, 114, 128, 0.1);
  color: var(--v2-text-secondary);
}

.v2-permission-badge.owner {
  background: rgba(59, 130, 246, 0.1);
  color: #3B82F6;
}
.v2-permission-badge.admin {
  background: rgba(168, 85, 247, 0.1);
  color: #A855F7;
}
.v2-permission-badge.editor {
  background: rgba(34, 197, 94, 0.1);
  color: #22C55E;
}

/* Shared type pill */
.v2-shared-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 0.6875rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  padding: 3px 10px;
  border-radius: 10px;
}
.v2-shared-pill i { font-size: 0.625rem; }
.v2-shared-pill.private {
  background: rgba(107, 114, 128, 0.1);
  color: var(--v2-text-muted);
}
.v2-shared-pill.shared {
  background: rgba(59, 130, 246, 0.1);
  color: #3B82F6;
}
.v2-shared-pill.team {
  background: rgba(168, 85, 247, 0.1);
  color: #A855F7;
}
.v2-shared-pill.marketplace {
  background: rgba(245, 158, 11, 0.1);
  color: #F59E0B;
}

/* Favorite star */
.v2-favorite-star {
  cursor: pointer;
  color: var(--v2-text-muted);
  font-size: 0.875rem;
  transition: color 0.15s;
}

.v2-favorite-star:hover,
.v2-favorite-star.active {
  color: #F59E0B;
}

/* Row actions menu */
.v2-row-actions {
  display: flex;
  gap: 4px;
  align-items: center;
}

.v2-row-actions .v2-btn-icon {
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  background: transparent;
  color: var(--v2-text-muted);
  border-radius: 4px;
  cursor: pointer;
  font-size: 0.8125rem;
  transition: all 0.15s;
}

.v2-row-actions .v2-btn-icon:hover {
  background: var(--v2-bg-elevated);
  color: var(--v2-primary);
}

/* ==========================================================================
   BUILDER OVERLAY (FULL-VIEWPORT WORKSPACE)
   ========================================================================== */

.v2-builder-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 10000;
  display: flex;
  flex-direction: column;
  background: var(--v2-bg-page);
  font-size: 0.9375rem;
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.25s ease, visibility 0.25s ease;
}

.v2-builder-overlay.open {
  opacity: 1;
  visibility: visible;
}

/* Overlay header */
.v2-builder-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 12px 24px;
  border-bottom: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  flex-shrink: 0;
  min-height: 56px;
}

.v2-builder-header-left {
  display: flex;
  align-items: center;
  gap: 12px;
}

.v2-builder-header-left h2 {
  margin: 0;
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-builder-close {
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--v2-border-color);
  background: transparent;
  border-radius: 6px;
  cursor: pointer;
  color: var(--v2-text-secondary);
  font-size: 1rem;
  transition: all 0.15s;
}

.v2-builder-close:hover {
  background: var(--v2-bg-elevated);
  color: var(--v2-text-primary);
}

/* Body: stepper + workspace */
.v2-builder-body {
  display: flex;
  flex: 1;
  overflow: hidden;
}

/* Stepper rail (left) */
.v2-builder-stepper {
  width: 220px;
  flex-shrink: 0;
  border-right: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  padding: 20px 0;
  overflow-y: auto;
}

.v2-stepper-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 20px;
  cursor: pointer;
  border-left: 3px solid transparent;
  transition: all 0.15s;
}

.v2-stepper-item:hover {
  background: var(--v2-bg-elevated);
}

.v2-stepper-item.active {
  background: var(--v2-accent-bg, rgba(59, 130, 246, 0.08));
  border-left-color: var(--v2-primary);
}

.v2-stepper-item.completed {
  opacity: 1;
}

.v2-stepper-number {
  width: 28px;
  height: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: 2px solid var(--v2-border-color);
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--v2-text-muted);
  flex-shrink: 0;
  transition: all 0.15s;
}

.v2-stepper-item.active .v2-stepper-number {
  background: var(--v2-primary);
  border-color: var(--v2-primary);
  color: #fff;
}

.v2-stepper-item.completed .v2-stepper-number {
  background: #10B981;
  border-color: #10B981;
  color: #fff;
}

.v2-stepper-label {
  font-size: 0.9375rem;
  font-weight: 500;
  color: var(--v2-text-primary);
}

.v2-stepper-item.active .v2-stepper-label {
  color: var(--v2-primary);
  font-weight: 600;
}

.v2-stepper-sublabel {
  font-size: 0.8125rem;
  color: var(--v2-text-muted);
  margin-top: 2px;
}

/* Templates section in stepper */
.v2-stepper-divider {
  margin: 12px 20px;
  border-top: 1px solid var(--v2-border-color);
}

.v2-stepper-templates-title {
  padding: 8px 20px 4px;
  font-size: 0.6875rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--v2-text-muted);
}

/* Workspace area (right) */
.v2-builder-workspace {
  flex: 1;
  overflow-y: auto;
  padding: 24px;
  background: var(--v2-bg-page);
}

.v2-builder-workspace-section {
  max-width: 960px;
}

.v2-builder-workspace-section h3 {
  margin: 0 0 16px 0;
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-builder-workspace-section p.description {
  margin: 0 0 20px 0;
  font-size: 0.9375rem;
  color: var(--v2-text-secondary);
}

/* Form elements inside builder */
.v2-builder-form-group {
  margin-bottom: 20px;
}

.v2-builder-form-group > label {
  display: block;
  margin-bottom: 6px;
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--v2-text-secondary);
}

.v2-builder-form-group input[type="text"],
.v2-builder-form-group textarea,
.v2-builder-form-group select {
  width: 100%;
  max-width: 480px;
  padding: 9px 12px;
  border: 1px solid var(--v2-border-color);
  border-radius: 6px;
  background: var(--v2-bg-card);
  color: var(--v2-text-primary);
  font-size: 0.9375rem;
  outline: none;
  transition: border-color 0.15s;
}

.v2-builder-form-group input:focus,
.v2-builder-form-group textarea:focus,
.v2-builder-form-group select:focus {
  border-color: var(--v2-primary);
}

.v2-builder-form-group textarea {
  resize: vertical;
  min-height: 80px;
}

.v2-builder-form-group input[type="date"] {
  width: 100%;
  max-width: 480px;
  padding: 9px 12px;
  border: 1px solid var(--v2-border-color);
  border-radius: 6px;
  font-size: 0.875rem;
  background: var(--v2-bg-card);
  color: var(--v2-text-primary);
}
.v2-builder-form-group input[type="date"]:focus {
  border-color: var(--v2-primary);
}

/* Inline form row (rebalance + start date + frequency side-by-side) */
.v2-inputs-row {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  align-items: flex-start;
  margin-bottom: 16px;
}
.v2-fg-inline {
  flex: 1 1 180px;
  min-width: 140px;
  max-width: 260px;
}
.v2-fg-inline select,
.v2-fg-inline input[type="date"] {
  max-width: 100% !important;
}
.v2-fg-hidden {
  display: none !important;
}
.v2-fg-hint {
  display: block;
  font-size: 0.6875rem;
  color: var(--v2-text-muted);
  margin-top: 4px;
  line-height: 1.35;
}

/* Type selector cards */
.v2-type-cards {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

.v2-type-card {
  flex: 1;
  min-width: 200px;
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 2px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  cursor: pointer;
  transition: all 0.15s;
}

.v2-type-card:hover {
  border-color: var(--v2-primary);
}

.v2-type-card.selected {
  border-color: var(--v2-primary);
  background: var(--v2-accent-bg, rgba(59, 130, 246, 0.06));
}

.v2-type-card h4 {
  margin: 0 0 6px 0;
  font-size: 1rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-type-card p {
  margin: 0;
  font-size: 0.875rem;
  color: var(--v2-text-secondary);
}

.v2-type-card i {
  margin-bottom: 8px;
  font-size: 1.25rem;
  color: var(--v2-primary);
}

/* ==========================================================================
   HOLDINGS EDITOR
   ========================================================================== */

.v2-holdings-editor {
  margin-top: 16px;
}

.v2-holdings-editor-toolbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 12px;
}

.v2-holdings-editor-toolbar .actions {
  display: flex;
  gap: 8px;
}

.he-toolbar-right {
  display: flex;
  align-items: center;
  gap: 12px;
}

.he-input-mode-select {
  padding: 4px 8px;
  font-size: 0.8125rem;
  border: 1px solid var(--v2-border, #dee2e6);
  border-radius: 4px;
  background: var(--v2-surface, #fff);
  color: var(--v2-text, #212529);
  cursor: pointer;
  min-width: 130px;
}
.he-input-mode-select:focus {
  border-color: var(--v2-accent, #0d7cc4);
  outline: none;
  box-shadow: 0 0 0 2px rgba(13,124,196,0.15);
}
.dark-theme .he-input-mode-select {
  background: var(--v2-bg-surface, #1a1f2e);
  color: var(--v2-text, #e6e9f0);
  border-color: var(--v2-border, #2d3748);
}

/* Autocomplete popup inside AG Grid */
.he-ticker-autocomplete {
  min-width: 280px;
  background: var(--v2-surface, #fff);
  border-radius: 4px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.12);
  z-index: 100000;
}
.he-ticker-autocomplete .v2-auto-input {
  width: 100%;
  box-sizing: border-box;
}
.he-ticker-autocomplete .v2-autocomplete-items {
  max-height: 240px;
  border-top: 1px solid var(--v2-border, #dee2e6);
}
.dark-theme .he-ticker-autocomplete {
  background: var(--v2-bg-surface, #1a1f2e);
  box-shadow: 0 2px 8px rgba(0,0,0,0.3);
}

.v2-holdings-editor-grid {
  height: 360px;
  border-radius: var(--v2-border-radius);
  overflow: hidden;
}

/* Legacy weight summary (kept for backward compat) */
.v2-weight-summary {
  margin-top: 12px;
  padding: 12px 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-elevated);
}

.v2-weight-summary table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.875rem;
}

.v2-weight-summary th {
  text-align: left;
  padding: 4px 8px;
  font-weight: 600;
  color: var(--v2-text-secondary);
  border-bottom: 1px solid var(--v2-border-color);
}

.v2-weight-summary td {
  padding: 4px 8px;
  color: var(--v2-text-primary);
}

.v2-weight-summary .v2-weight-ok {
  color: #059669;
}

.v2-weight-summary .v2-weight-error {
  color: #DC2626;
  font-weight: 600;
}

/* ==========================================================================
   HOLDINGS EDITOR — CELL HIGHLIGHTING + VALIDATION PANEL
   ========================================================================== */

/* Per-cell error/warning via AG Grid cellClassRules */
.he-cell-error {
  background: rgba(220, 38, 38, 0.08) !important;
  border-left: 3px solid #DC2626 !important;
}
.he-cell-warning {
  background: rgba(245, 158, 11, 0.06) !important;
  border-left: 3px solid #F59E0B !important;
}

/* ----- Date-group banding (multi-date historical models) -----
   When holdings span multiple dates, alternate subtle background stripes
   per date group so users can visually scan where one group ends and the
   next begins. Rows whose date group's weights don't sum to 100 get a red
   left-edge stripe so the problem date is obvious at a glance. */
.v2-holdings-editor-grid .ag-row.he-date-group-a {
  background-color: var(--v2-bg-elevated, #F9FAFB);
}
.v2-holdings-editor-grid .ag-row.he-date-group-b {
  background-color: #FFFFFF;
}
.v2-holdings-editor-grid .ag-row.he-date-group-a.ag-row-hover,
.v2-holdings-editor-grid .ag-row.he-date-group-b.ag-row-hover {
  background-color: rgba(59, 130, 246, 0.06);
}
.v2-holdings-editor-grid .ag-row.he-date-group-invalid {
  box-shadow: inset 3px 0 0 0 #DC2626;
}
.v2-holdings-editor-grid .ag-row.he-date-group-invalid.he-date-group-a {
  background-color: rgba(220, 38, 38, 0.04);
}
.v2-holdings-editor-grid .ag-row.he-date-group-invalid.he-date-group-b {
  background-color: rgba(220, 38, 38, 0.02);
}

/* ----- Full-width group rows (AG Grid Enterprise row grouping) -----
   Shown when the user enables "Group by Date" (or auto-enabled for models
   with many distinct date groups). Each group row summarizes its date: the
   weight sum, OK/error status, holding count, and a Normalize quick-fix. */
.v2-holdings-editor-grid .ag-row-group {
  background: var(--v2-bg-elevated, #F9FAFB);
  border-top: 1px solid var(--v2-border-color, #E5E7EB);
  border-bottom: 1px solid var(--v2-border-color, #E5E7EB);
  font-weight: 500;
}
.v2-holdings-editor-grid .ag-row-group .ag-group-contracted,
.v2-holdings-editor-grid .ag-row-group .ag-group-expanded {
  margin-right: 6px;
}
.he-group-row-inner {
  display: inline-flex;
  align-items: center;
  gap: 16px;
  font-size: 0.875rem;
  width: 100%;
}
.he-group-row-inner .he-group-date {
  font-weight: 600;
  color: var(--v2-text-primary, #111827);
}
.he-group-row-inner .he-group-date i {
  color: var(--v2-primary, #3B82F6);
  margin-right: 6px;
  font-size: 0.8125rem;
}
.he-group-row-inner .he-group-sum {
  color: var(--v2-text-secondary, #4B5563);
}
.he-group-row-inner .he-group-count {
  color: var(--v2-text-muted, #9CA3AF);
  font-size: 0.8125rem;
}
.he-group-row-inner .he-group-status {
  font-size: 0.8125rem;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.he-group-row-inner .he-group-status-ok { color: #059669; }
.he-group-row-inner .he-group-status-error { color: #DC2626; }

/* Red left stripe on group rows whose weights don't sum to 100, so the
   problem date is obvious even when all groups are collapsed. */
.v2-holdings-editor-grid .ag-row-group:has(.he-group-status-error) {
  box-shadow: inset 3px 0 0 0 #DC2626;
  background: rgba(220, 38, 38, 0.04);
}

/* Ticker renderer */
.he-ticker {
  font-family: monospace;
  font-weight: 600;
  font-size: 0.875rem;
}
.he-ticker-error {
  font-family: monospace;
  font-weight: 600;
  font-size: 0.875rem;
  color: #DC2626;
}
.he-ticker-error em {
  font-style: italic;
  font-weight: 400;
  color: #DC2626;
  opacity: 0.7;
}
.he-ticker-warning {
  font-family: monospace;
  font-weight: 600;
  font-size: 0.875rem;
  color: #D97706;
}

/* Validation panel container */
.he-validation-panel {
  margin-top: 14px;
  border-radius: var(--v2-border-radius, 8px);
  border: 1px solid var(--v2-border-color, #E5E7EB);
  background: var(--v2-bg-elevated, #F9FAFB);
  overflow: hidden;
}

.he-vp-empty,
.he-vp-success,
.he-vp-info {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  font-size: 0.875rem;
}
.he-vp-empty {
  color: var(--v2-text-muted, #9CA3AF);
}
.he-vp-empty i { color: var(--v2-text-muted, #9CA3AF); }
.he-vp-success {
  color: #059669;
  background: rgba(5, 150, 105, 0.04);
  border-color: rgba(5, 150, 105, 0.2);
}
.he-vp-success i { font-size: 1rem; }
.he-vp-info {
  color: var(--v2-text-secondary, #475569);
  background: rgba(59, 130, 246, 0.04);
  border-color: rgba(59, 130, 246, 0.18);
}
.he-vp-info i { color: var(--v2-primary, #3B82F6); font-size: 0.9375rem; }

.he-vp-validating {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 18px;
  font-size: 0.8125rem;
  color: var(--v2-primary, #3B82F6);
  background: rgba(59, 130, 246, 0.05);
  border: 1px solid rgba(59, 130, 246, 0.15);
  border-radius: var(--v2-border-radius, 8px);
  margin-top: 14px;
  margin-bottom: 4px;
}
.he-vp-validating i {
  font-size: 0.875rem;
}

/* Sections inside panel */
.he-vp-section {
  padding: 14px 18px;
  border-bottom: 1px solid var(--v2-border-color, #E5E7EB);
}
.he-vp-section:last-child {
  border-bottom: none;
}
.he-vp-section-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}
.he-vp-section-title {
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--v2-text-primary, #111827);
  display: flex;
  align-items: center;
  gap: 6px;
}
.he-vp-section-title i {
  font-size: 0.8125rem;
  color: var(--v2-text-muted, #9CA3AF);
}

/* Weight sum table */
.he-vp-weight-table table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.875rem;
}
.he-vp-weight-table th {
  text-align: left;
  padding: 6px 10px;
  font-weight: 600;
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--v2-text-muted, #9CA3AF);
  border-bottom: 1px solid var(--v2-border-color, #E5E7EB);
}
.he-vp-weight-table td {
  padding: 7px 10px;
  color: var(--v2-text-primary, #111827);
}
.he-vp-weight-table tr.he-row-error {
  background: rgba(220, 38, 38, 0.05);
  border-left: 3px solid #DC2626;
}
.he-vp-weight-table tr.he-row-error td:first-child {
  position: relative;
}
.he-vp-weight-table tr:hover {
  background: rgba(59, 130, 246, 0.04);
}
.he-vp-weight-table tr.he-row-error:hover {
  background: rgba(220, 38, 38, 0.08);
}
.he-status-ok {
  color: #059669;
  font-weight: 500;
}
.he-status-ok i { margin-right: 4px; }
.he-status-error {
  color: #DC2626;
  font-weight: 600;
}
.he-status-error i { margin-right: 4px; }

/* Secondary hint inline in the Weight Sums Status cell
   (e.g. "+2 ticker issues") — readable in both sum-OK and sum-error states. */
.he-vp-issue-hint {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: 8px;
  padding: 2px 6px;
  border-radius: 4px;
  background: #FEF3C7;
  color: #92400E;
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
}
.he-vp-issue-hint i { font-size: 10px; }
.v2-dark .he-vp-issue-hint,
.dark-theme .he-vp-issue-hint {
  background: rgba(245, 158, 11, 0.15);
  color: #FBBF24;
}

/* Date-group-scoped hint in the Status cell (e.g. NON_TRADING_DATE info).
   These are informational — the backend auto-adjusts to the nearest
   trading day — so we style them neutrally, not as errors. */
.he-vp-date-hint {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: 8px;
  padding: 2px 6px;
  border-radius: 4px;
  background: #EFF6FF;
  color: #1D4ED8;
  font-size: 11px;
  font-weight: 500;
  white-space: nowrap;
  max-width: 320px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.he-vp-date-hint i { font-size: 10px; }
.v2-dark .he-vp-date-hint,
.dark-theme .he-vp-date-hint {
  background: rgba(59, 130, 246, 0.15);
  color: #93C5FD;
}

/* Issue list */
.he-vp-issue-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.he-vp-issue-item {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 12px;
  border-radius: 6px;
  font-size: 0.875rem;
  transition: background 0.1s;
}
.he-vp-issue-item:hover {
  background: rgba(0,0,0,0.02);
}
.he-vp-issue-error {
  background: rgba(220, 38, 38, 0.04);
  border-left: 3px solid #DC2626;
}
.he-vp-issue-warning {
  background: rgba(245, 158, 11, 0.04);
  border-left: 3px solid #F59E0B;
}
.he-vp-issue-icon {
  flex-shrink: 0;
  padding-top: 1px;
}
.he-vp-issue-error .he-vp-issue-icon i { color: #DC2626; }
.he-vp-issue-warning .he-vp-issue-icon i { color: #F59E0B; }
.he-vp-issue-body {
  flex: 1;
  min-width: 0;
}
.he-vp-issue-msg {
  font-size: 0.875rem;
  color: var(--v2-text-primary, #111827);
  line-height: 1.4;
}
.he-vp-issue-fix {
  font-size: 0.8125rem;
  color: var(--v2-text-muted, #9CA3AF);
  margin-top: 2px;
}
.he-vp-issue-item .he-fix-btn {
  flex-shrink: 0;
  align-self: center;
}

/* Fix buttons (v2-btn-xs) */
.he-fix-btn {
  padding: 4px 10px;
  font-size: 0.75rem;
  border-radius: 4px;
  cursor: pointer;
  white-space: nowrap;
}

/* Dark mode overrides */
.v2-dark .he-validation-panel,
.dark-theme .he-validation-panel {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}
.v2-dark .he-vp-section,
.dark-theme .he-vp-section {
  border-bottom-color: var(--v2-border, #1e2433);
}
.v2-dark .he-vp-weight-table th,
.dark-theme .he-vp-weight-table th {
  color: var(--v2-text-muted, #8b92a5);
  border-bottom-color: var(--v2-border, #1e2433);
}
.v2-dark .he-vp-weight-table td,
.dark-theme .he-vp-weight-table td {
  color: var(--v2-text-primary, #e6e9f0);
}
.v2-dark .he-vp-issue-item:hover,
.dark-theme .he-vp-issue-item:hover {
  background: rgba(255,255,255,0.02);
}

/* ==========================================================================
   PREVIEW / SANDBOX
   ========================================================================== */

.v2-preview-section {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.v2-preview-metrics {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
}

.v2-preview-metric-card {
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
}

.v2-preview-metric-card .label {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--v2-text-muted);
  margin-bottom: 6px;
}

.v2-preview-metric-card .value {
  font-size: 1.375rem;
  font-weight: 700;
  color: var(--v2-text-primary);
}

.v2-preview-metric-card .value.positive {
  color: #059669;
}

.v2-preview-metric-card .value.negative {
  color: #DC2626;
}

.v2-preview-chart-container {
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  min-height: 320px;
}

.v2-preview-chart-container h4 {
  margin: 0 0 12px 0;
  font-size: 1rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

/* Validation panel */
.v2-validation-panel {
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
}

.v2-validation-panel h4 {
  margin: 0 0 12px 0;
  font-size: 1rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-validation-item {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  padding: 8px 0;
  border-bottom: 1px solid var(--v2-border-color);
  font-size: 0.875rem;
}

.v2-validation-item:last-child {
  border-bottom: none;
}

.v2-validation-item i.error {
  color: #DC2626;
  margin-top: 2px;
}

.v2-validation-item i.warning {
  color: #D97706;
  margin-top: 2px;
}

.v2-validation-item .code {
  font-family: monospace;
  font-size: 0.75rem;
  color: var(--v2-text-muted);
  margin-right: 6px;
}

/* --- Error banner (preview failures) --- */
.v2-preview-error-banner {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 16px 20px;
  margin-bottom: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid #FCA5A5;
  background: #FEF2F2;
  color: #991B1B;
}
.v2-preview-error-banner i {
  font-size: 1.25rem;
  color: #DC2626;
  margin-top: 2px;
  flex-shrink: 0;
}
.v2-preview-error-banner strong {
  display: block;
  margin-bottom: 4px;
  font-size: 0.9375rem;
}
.v2-preview-error-banner p {
  margin: 0;
  font-size: 0.8125rem;
  color: #7F1D1D;
}

/* --- Enhanced validation groups --- */
.v2-validation-group {
  margin-bottom: 12px;
  border-radius: var(--v2-border-radius);
  overflow: hidden;
}
.v2-validation-group-header {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 12px;
  font-size: 0.8125rem;
}
.v2-validation-group-errors .v2-validation-group-header {
  background: #FEF2F2;
  color: #991B1B;
  border: 1px solid #FECACA;
  border-bottom: none;
  border-radius: var(--v2-border-radius) var(--v2-border-radius) 0 0;
}
.v2-validation-group-warnings .v2-validation-group-header {
  background: #FFFBEB;
  color: #92400E;
  border: 1px solid #FDE68A;
  border-bottom: none;
  border-radius: var(--v2-border-radius) var(--v2-border-radius) 0 0;
}
.v2-validation-group .v2-validation-item {
  padding: 10px 12px 10px 36px;
  flex-direction: column;
  gap: 4px;
}
.v2-validation-group-errors .v2-validation-item {
  border: 1px solid #FECACA;
  border-top: none;
  background: #FFF;
}
.v2-validation-group-warnings .v2-validation-item {
  border: 1px solid #FDE68A;
  border-top: none;
  background: #FFF;
}
.v2-validation-group .v2-validation-item:last-child {
  border-radius: 0 0 var(--v2-border-radius) var(--v2-border-radius);
}
.v2-validation-item-main {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.8125rem;
}
.v2-validation-item-resolution {
  font-size: 0.75rem;
  color: #6B7280;
  padding-left: 2px;
}
.v2-validation-item-resolution i {
  color: #D97706;
  margin-right: 4px;
  font-size: 0.6875rem;
}
.v2-validation-item-details {
  font-size: 0.6875rem;
  color: var(--v2-text-muted);
  padding-left: 2px;
}
.v2-validation-detail {
  margin-right: 12px;
}
.v2-validation-detail strong {
  font-weight: 600;
}
.v2-validation-success {
  padding: 12px;
}

/* --- Dark mode for error banner + validation groups --- */
.dark-theme .v2-preview-error-banner,
.v2-dark .v2-preview-error-banner {
  background: rgba(220, 38, 38, 0.1);
  border-color: rgba(220, 38, 38, 0.3);
  color: #FCA5A5;
}
.dark-theme .v2-preview-error-banner p,
.v2-dark .v2-preview-error-banner p {
  color: #FCA5A5;
}
.dark-theme .v2-validation-group-errors .v2-validation-group-header,
.v2-dark .v2-validation-group-errors .v2-validation-group-header {
  background: rgba(220, 38, 38, 0.1);
  border-color: rgba(220, 38, 38, 0.25);
  color: #FCA5A5;
}
.dark-theme .v2-validation-group-warnings .v2-validation-group-header,
.v2-dark .v2-validation-group-warnings .v2-validation-group-header {
  background: rgba(217, 119, 6, 0.1);
  border-color: rgba(217, 119, 6, 0.25);
  color: #FDE68A;
}
.dark-theme .v2-validation-group-errors .v2-validation-item,
.v2-dark .v2-validation-group-errors .v2-validation-item {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: rgba(220, 38, 38, 0.15);
}
.dark-theme .v2-validation-group-warnings .v2-validation-item,
.v2-dark .v2-validation-group-warnings .v2-validation-item {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: rgba(217, 119, 6, 0.15);
}
.dark-theme .v2-validation-item-resolution,
.v2-dark .v2-validation-item-resolution {
  color: var(--v2-text-muted, #6B7280);
}

/* ==========================================================================
   STICKY ACTION BAR (BOTTOM)
   ========================================================================== */

.v2-builder-action-bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 12px 24px;
  border-top: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  flex-shrink: 0;
}

.v2-builder-action-bar .left {
  display: flex;
  align-items: center;
  gap: 8px;
}

.v2-builder-action-bar .right {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ==========================================================================
   REVIEW STEP - DIFF
   ========================================================================== */

.v2-review-diff {
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
}

.v2-review-diff h4 {
  margin: 0 0 12px 0;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-diff-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 6px 8px;
  border-bottom: 1px solid var(--v2-border-color);
  font-size: 0.8125rem;
}

.v2-diff-row:last-child {
  border-bottom: none;
}

.v2-diff-row .ticker {
  font-weight: 600;
  color: var(--v2-text-primary);
  font-family: monospace;
}

.v2-diff-row .change {
  font-weight: 600;
}

.v2-diff-row .change.up {
  color: #059669;
}

.v2-diff-row .change.down {
  color: #DC2626;
}

/* Pro Forma stub tab */
.v2-proforma-stub {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 60px 24px;
  text-align: center;
  color: var(--v2-text-muted);
}

.v2-proforma-stub i {
  font-size: 2rem;
  margin-bottom: 16px;
  opacity: 0.5;
}

.v2-proforma-stub h3 {
  color: var(--v2-text-primary);
  margin: 0 0 8px;
}

.v2-proforma-stub p {
  max-width: 440px;
  font-size: 0.875rem;
}

.v2-proforma-banner {
  margin-top: 16px;
  padding: 12px 16px;
  border-radius: 6px;
  background: rgba(59, 130, 246, 0.08);
  border: 1px solid rgba(59, 130, 246, 0.2);
  font-size: 0.8125rem;
  color: var(--v2-primary);
}

.v2-proforma-banner i {
  font-size: 0.875rem;
  margin-right: 6px;
  opacity: 1;
}

/* ==========================================================================
   DATE NAVIGATOR
   ========================================================================== */

.v2-date-navigator {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  margin-bottom: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
}

.v2-date-navigator-label {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--v2-text-secondary);
  white-space: nowrap;
  flex-shrink: 0;
}

.v2-date-navigator-label i {
  margin-right: 6px;
  color: var(--v2-primary);
}

.v2-date-navigator-pills {
  display: flex;
  gap: 6px;
  overflow-x: auto;
  flex: 1;
  padding: 2px 0;
}

.v2-date-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 5px 12px;
  border-radius: 16px;
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-elevated, #f5f5f5);
  color: var(--v2-text-secondary);
  font-size: 0.8125rem;
  font-family: monospace;
  cursor: pointer;
  white-space: nowrap;
  transition: all 0.15s;
}

.v2-date-pill:hover {
  border-color: var(--v2-primary);
  color: var(--v2-primary);
}

.v2-date-pill.active {
  background: var(--v2-accent-bg, rgba(59, 130, 246, 0.1));
  border-color: var(--v2-primary);
  color: var(--v2-primary);
  font-weight: 600;
}

.v2-date-pill-badge {
  font-size: 0.625rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  padding: 1px 5px;
  border-radius: 4px;
  background: rgba(16, 185, 129, 0.15);
  color: #059669;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}

/* ==========================================================================
   NEW REBALANCE FORM
   ========================================================================== */

.v2-new-rebalance-form {
  margin-bottom: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-primary);
  background: var(--v2-bg-card);
  overflow: hidden;
}

.v2-new-rebal-header {
  padding: 10px 16px;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--v2-primary);
  background: var(--v2-accent-bg, rgba(59, 130, 246, 0.06));
  border-bottom: 1px solid var(--v2-border-color);
}

.v2-new-rebal-header i {
  margin-right: 6px;
}

.v2-new-rebal-body {
  padding: 16px;
}

/* ==========================================================================
   EDIT FULL HISTORY BANNER
   ========================================================================== */

.v2-edit-full-history-banner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 16px;
  margin-bottom: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid rgba(217, 119, 6, 0.3);
  background: rgba(245, 158, 11, 0.06);
}

.v2-edit-full-history-banner.active {
  border-color: rgba(16, 185, 129, 0.3);
  background: rgba(16, 185, 129, 0.06);
}

.v2-efh-info {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 0.875rem;
  color: var(--v2-text-primary);
}

.v2-efh-info i {
  font-size: 1rem;
  color: #D97706;
  flex-shrink: 0;
}

.v2-edit-full-history-banner.active .v2-efh-info i {
  color: #059669;
}

/* ==========================================================================
   CONFIRM DIALOG (MODAL)
   ========================================================================== */

.v2-confirm-dialog-overlay {
  position: fixed;
  inset: 0;
  z-index: 100010;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, 0.5);
}

.v2-confirm-dialog {
  width: 480px;
  max-width: 90vw;
  border-radius: 12px;
  background: var(--v2-bg-card);
  border: 1px solid var(--v2-border-color);
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.25);
  overflow: hidden;
}

.v2-confirm-dialog-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 16px 20px;
  border-bottom: 1px solid var(--v2-border-color);
}

.v2-confirm-dialog-header h4 {
  margin: 0;
  font-size: 1rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-confirm-dialog-body {
  padding: 20px;
}

.v2-confirm-dialog-body p {
  margin: 0 0 10px;
  font-size: 0.875rem;
  color: var(--v2-text-primary);
  line-height: 1.5;
}

.v2-confirm-dialog-body p:last-child {
  margin-bottom: 0;
}

.v2-confirm-dialog-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  padding: 16px 20px;
  border-top: 1px solid var(--v2-border-color);
  background: var(--v2-bg-elevated, #fafafa);
}

/* ==========================================================================
   FIND & REPLACE DIALOG
   ========================================================================== */

.v2-find-replace-dialog {
  margin-bottom: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-primary);
  background: var(--v2-bg-card);
  overflow: hidden;
}

.v2-fr-header {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--v2-primary);
  background: var(--v2-accent-bg, rgba(59, 130, 246, 0.06));
  border-bottom: 1px solid var(--v2-border-color);
}

.v2-fr-body {
  padding: 16px;
}

.v2-fr-row {
  display: flex;
  align-items: flex-end;
  gap: 12px;
}

.v2-fr-row .v2-builder-form-group input {
  max-width: 100% !important;
}

/* ==========================================================================
   HOLDINGS READONLY BANNER
   ========================================================================== */

.v2-holdings-readonly-banner {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  margin-bottom: 12px;
  border-radius: var(--v2-border-radius);
  border: 1px solid rgba(59, 130, 246, 0.2);
  background: rgba(59, 130, 246, 0.06);
  font-size: 0.8125rem;
  color: var(--v2-text-secondary);
}

.v2-holdings-readonly-banner i {
  color: var(--v2-primary);
  flex-shrink: 0;
}

/* ==========================================================================
   REBAL TO TARGET BUTTON
   ========================================================================== */

.v2-rebal-target-btn {
  border-color: #059669 !important;
  color: #059669 !important;
}

.v2-rebal-target-btn:hover {
  background: rgba(16, 185, 129, 0.08) !important;
}

.v2-rebal-target-btn i {
  color: #059669;
}

/* ==========================================================================
   DARK THEME OVERRIDES
   ========================================================================== */

.dark-theme .v2-builder-overlay {
  background: #0c111a;
}

/* The builder overlay is appended to document.body and some host pages
 * redefine --v2-text-primary / --v2-text-secondary locally, so bare
 * var(...) fallbacks resolve to near-black text. Force !important hex
 * values for the header, stepper label, review & build headings, diff
 * rows, and saved banner so the create-model flow is legible in dark
 * mode regardless of what the underlying page CSS does. */
.dark-theme .v2-builder-header {
  background: #111520 !important;
  border-bottom-color: #1e2433 !important;
}
.dark-theme .v2-builder-header-left h2 {
  color: #f1f3f7 !important;
}
.dark-theme .v2-header-step-label,
.dark-theme .v2-header-meta {
  color: #b0b7c5 !important;
}
.dark-theme .v2-builder-overlay h2,
.dark-theme .v2-builder-overlay h3,
.dark-theme .v2-builder-overlay h4 {
  color: #f1f3f7 !important;
}
.dark-theme .v2-builder-overlay .v2-builder-workspace-section p.description {
  color: #b0b7c5 !important;
}
.dark-theme .v2-builder-overlay .v2-review-diff {
  background: #111520 !important;
  border-color: #1e2433 !important;
}
.dark-theme .v2-builder-overlay .v2-diff-row {
  color: #e6e9f0 !important;
  border-bottom-color: #1e2433 !important;
}
.dark-theme .v2-builder-overlay .v2-diff-row > span:first-child {
  color: #b0b7c5 !important;
}
.dark-theme .v2-builder-overlay .v2-review-saved-banner {
  background: rgba(5, 150, 105, 0.12) !important;
  border-color: rgba(5, 150, 105, 0.35) !important;
  color: #e6e9f0 !important;
}

/* Build Model modal (created in createWizardOverlay.js openBuildModal) —
 * appended to document.body, so same !important treatment. */
.dark-theme #cw-build-modal-backdrop .v2-modal {
  background: #111520 !important;
  border-color: #1e2433 !important;
  color: #e6e9f0 !important;
}
.dark-theme #cw-build-modal-backdrop h3 {
  color: #f1f3f7 !important;
}
.dark-theme #cw-build-modal-backdrop .cw-bm-stage,
.dark-theme #cw-build-modal-backdrop #cw-build-pct {
  color: #b0b7c5 !important;
}
.dark-theme #cw-build-modal-backdrop #cw-build-close-btn,
.dark-theme #cw-build-modal-backdrop #cw-bm-open-settings {
  background: #161b26 !important;
  border-color: #252d3d !important;
  color: #e6e9f0 !important;
}
.dark-theme #cw-build-modal-backdrop #cw-build-close-btn:hover,
.dark-theme #cw-build-modal-backdrop #cw-bm-open-settings:hover {
  background: #1e2433 !important;
  border-color: #4db5e0 !important;
  color: #ffffff !important;
}

.dark-theme .v2-builder-stepper {
  background: var(--v2-bg-surface, #111520);
  border-right-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-stepper-item:hover {
  background: #161b26;
}

.dark-theme .v2-stepper-item.active {
  background: rgba(59, 130, 246, 0.12);
}

.dark-theme .v2-stepper-label {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-builder-workspace {
  background: #0c111a;
}

.dark-theme .v2-builder-workspace-section h3 {
  color: #e6e9f0;
}
.dark-theme .v2-builder-workspace-section p.description {
  color: #8b92a5;
}
.dark-theme .v2-builder-form-group > label {
  color: #c4c9d4;
}
.dark-theme .v2-builder-overlay .v2-btn-secondary {
  background: #161b26 !important;
  border-color: #252d3d !important;
  color: #c4c9d4 !important;
}
.dark-theme .v2-builder-overlay .v2-btn-secondary:hover {
  background: #1a2030 !important;
  border-color: var(--v2-accent, #0964A0) !important;
  color: #e6e9f0 !important;
}

.dark-theme .v2-builder-action-bar {
  background: var(--v2-bg-surface, #111520);
  border-top-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-type-card {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-type-card.selected {
  border-color: var(--v2-accent, #0d7cc4);
  background: rgba(59, 130, 246, 0.1);
}

.dark-theme .v2-type-card h4 {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-type-card p {
  color: var(--v2-text-muted, #8b92a5);
}

.dark-theme .v2-preview-metric-card {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-preview-metric-card .label {
  color: var(--v2-text-muted, #8b92a5);
}

.dark-theme .v2-preview-metric-card .value {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-preview-chart-container {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-preview-chart-container h4 {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-validation-panel {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-validation-panel h4 {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-validation-item {
  border-bottom-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-weight-summary {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-weight-summary th {
  color: var(--v2-text-muted, #8b92a5);
  border-bottom-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-weight-summary td {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-review-diff {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-review-diff h4 {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-diff-row {
  border-bottom-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-diff-row .ticker {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-model-library-filter-bar .v2-quick-search input {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-model-library-filter-bar .v2-filter-chip {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
  color: var(--v2-text-muted, #8b92a5);
}

.dark-theme .v2-model-library-filter-bar .v2-filter-chip.active {
  background: rgba(99,102,241,.15);
  border-color: #6366f1;
  color: #818cf8;
}
.dark-theme .v2-model-library-filter-bar .v2-filter-chip:hover {
  border-color: #6366f1;
  color: #818cf8;
}

/* Page background */
.dark-theme .v2-model-library-page {
  background: #0c111a !important;
}

/* Header */
.dark-theme .v2-model-library-page .v2-page-title {
  color: #e6e9f0 !important;
}
.dark-theme .v2-model-library-page .v2-page-subtitle {
  color: #8b92a5 !important;
}

/* Buttons */
.dark-theme .v2-model-library-page .v2-btn-secondary {
  background: #161b26 !important;
  border-color: #252d3d !important;
  color: #c4c9d4 !important;
}
.dark-theme .v2-model-library-page .v2-btn-secondary:hover {
  background: #1a2030 !important;
  border-color: #6366f1 !important;
  color: #818cf8 !important;
}
.dark-theme .v2-model-library-page .v2-btn-primary {
  background: #6366f1 !important;
  border-color: #6366f1 !important;
  color: #fff !important;
}
.dark-theme .v2-model-library-page .v2-btn-primary:hover {
  background: #4f46e5 !important;
}

/* Grid wrapper */
.dark-theme .v2-model-library-grid-wrap {
  background: #0c111a !important;
}

/* AG Grid */
.dark-theme #v2-model-library .ag-theme-balham {
  --ag-background-color: #111520 !important;
  --ag-header-background-color: #161b26 !important;
  --ag-odd-row-background-color: #0e1219 !important;
  --ag-row-hover-color: rgba(255,255,255,.06) !important;
  --ag-border-color: #1e2433 !important;
  --ag-header-foreground-color: #8b92a5 !important;
  --ag-foreground-color: #c4c9d4 !important;
  --ag-secondary-foreground-color: #8b92a5 !important;
  --ag-input-border-color: #252d3d !important;
  --ag-range-selection-background-color: rgba(99,102,241,.15) !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-root-wrapper {
  background-color: #111520 !important;
  border-color: #1e2433 !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-header,
.dark-theme #v2-model-library .ag-theme-balham .ag-header-viewport,
.dark-theme #v2-model-library .ag-theme-balham .ag-header-container,
.dark-theme #v2-model-library .ag-theme-balham .ag-header-row {
  background-color: #161b26 !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-header-cell,
.dark-theme #v2-model-library .ag-theme-balham .ag-header-group-cell {
  background-color: #161b26 !important;
  color: #8b92a5 !important;
  border-color: #1e2433 !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-row {
  background-color: #111520 !important;
  color: #c4c9d4 !important;
  border-color: #1e2433 !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-row-odd {
  background-color: #0e1219 !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-row:hover,
.dark-theme #v2-model-library .ag-theme-balham .ag-row-hover {
  background-color: rgba(255,255,255,.06) !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-cell {
  color: #c4c9d4 !important;
  border-color: #1e2433 !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-body-viewport {
  background-color: #111520 !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-paging-panel {
  background-color: #161b26 !important;
  color: #8b92a5 !important;
  border-color: #1e2433 !important;
}
.dark-theme #v2-model-library .ag-theme-balham .ag-icon {
  color: #8b92a5 !important;
}

/* Row action icon buttons */
.dark-theme #v2-model-library .v2-row-actions .v2-btn-icon {
  color: #6b7280 !important;
  border-color: transparent !important;
}
.dark-theme #v2-model-library .v2-row-actions .v2-btn-icon:hover {
  background: rgba(255,255,255,.06) !important;
  color: #818cf8 !important;
}

/* Status badges */
.dark-theme #v2-model-library .ag-theme-balham .ag-cell a {
  color: #818cf8 !important;
}

/* Star/favorite icon */
.dark-theme #v2-model-library .v2-star-icon {
  color: #6b7280 !important;
}
.dark-theme #v2-model-library .v2-star-icon.active {
  color: #f59e0b !important;
}

.dark-theme .v2-builder-form-group input[type="text"],
.dark-theme .v2-builder-form-group textarea,
.dark-theme .v2-builder-form-group select,
.dark-theme .v2-builder-form-group input[type="date"] {
  background: #0c111a;
  border-color: var(--v2-border, #1e2433);
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-builder-close {
  border-color: var(--v2-border, #1e2433);
  color: var(--v2-text-muted, #8b92a5);
}

.dark-theme .v2-builder-close:hover {
  background: #161b26;
  color: var(--v2-text-primary, #e6e9f0);
}

/* Date Navigator */
.dark-theme .v2-date-navigator {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-date-pill {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
  color: var(--v2-text-muted, #8b92a5);
}

.dark-theme .v2-date-pill.active {
  background: rgba(59, 130, 246, 0.15);
  border-color: var(--v2-accent, #0d7cc4);
  color: var(--v2-accent, #0d7cc4);
}

/* New Rebalance Form */
.dark-theme .v2-new-rebalance-form {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-accent, #0d7cc4);
}

.dark-theme .v2-new-rebal-header {
  background: rgba(59, 130, 246, 0.1);
  border-bottom-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-new-rebal-body {
  color: var(--v2-text-primary, #e6e9f0);
}

/* Edit Full History Banner */
.dark-theme .v2-edit-full-history-banner {
  background: rgba(245, 158, 11, 0.08);
  border-color: rgba(217, 119, 6, 0.3);
}

.dark-theme .v2-edit-full-history-banner.active {
  background: rgba(16, 185, 129, 0.08);
  border-color: rgba(16, 185, 129, 0.3);
}

.dark-theme .v2-efh-info {
  color: var(--v2-text-primary, #e6e9f0);
}

/* Confirm Dialog */
.dark-theme .v2-confirm-dialog {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-confirm-dialog-header {
  border-bottom-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-confirm-dialog-header h4 {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-confirm-dialog-body p {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-confirm-dialog-actions {
  background: #0c111a;
  border-top-color: var(--v2-border, #1e2433);
}

/* Find & Replace Dialog */
.dark-theme .v2-find-replace-dialog {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-accent, #0d7cc4);
}

.dark-theme .v2-fr-header {
  background: rgba(59, 130, 246, 0.1);
  border-bottom-color: var(--v2-border, #1e2433);
}

/* Holdings Readonly Banner */
.dark-theme .v2-holdings-readonly-banner {
  background: rgba(59, 130, 246, 0.08);
  border-color: rgba(59, 130, 246, 0.2);
  color: var(--v2-text-muted, #8b92a5);
}

/* Highcharts in builder */
.dark-theme .v2-preview-chart-container .highcharts-background {
  fill: transparent;
}

.dark-theme .v2-preview-chart-container .highcharts-axis-labels text,
.dark-theme .v2-preview-chart-container .highcharts-legend-item text {
  fill: var(--v2-text-muted, #8b92a5) !important;
}

.dark-theme .v2-preview-chart-container .highcharts-grid-line {
  stroke: var(--v2-border, #1e2433);
}

.dark-theme .v2-preview-chart-container .highcharts-tooltip-box {
  fill: var(--v2-bg-surface, #111520);
  stroke: var(--v2-border, #1e2433);
}

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

@media (max-width: 900px) {
  .v2-builder-stepper {
    width: 60px;
  }

  .v2-stepper-label,
  .v2-stepper-sublabel,
  .v2-stepper-templates-title {
    display: none;
  }

  .v2-model-library-filter-bar {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 600px) {
  .v2-model-library-page .v2-page-header {
    flex-direction: column;
    gap: 12px;
    align-items: flex-start;
  }

  .v2-preview-metrics {
    grid-template-columns: 1fr;
  }
}

/* ==========================================================================
   EDIT WORKSPACE — TABS
   ========================================================================== */

.v2-edit-tabs {
  display: flex;
  border-bottom: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  padding: 0 24px;
  flex-shrink: 0;
  overflow-x: auto;
}

.v2-edit-tab {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 12px 16px;
  border: none;
  background: none;
  cursor: pointer;
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--v2-text-secondary);
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  transition: all 0.15s;
  position: relative;
}

.v2-edit-tab:hover {
  color: var(--v2-text-primary);
}

.v2-edit-tab.active {
  color: var(--v2-primary);
  border-bottom-color: var(--v2-primary);
}

.v2-edit-tab i {
  font-size: 0.8125rem;
}

.v2-tab-dirty-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #F59E0B;
  position: absolute;
  top: 8px;
  right: 6px;
}

/* ==========================================================================
   EDIT WORKSPACE — CONTENT AREA
   ========================================================================== */

.v2-edit-workspace-content {
  flex: 1;
  overflow-y: auto;
  padding: 24px;
  background: var(--v2-bg-page);
}

.v2-edit-tab-content {
  max-width: 1060px;
}

.v2-edit-tab-content h3 {
  margin: 0 0 16px;
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

/* ==========================================================================
   EDIT WORKSPACE — HEADER EXTENSIONS
   ========================================================================== */

.v2-edit-header {
  flex-wrap: wrap;
  gap: 8px;
}

.v2-header-pills {
  display: flex;
  gap: 6px;
  align-items: center;
  margin-left: 12px;
}

.v2-header-meta {
  font-size: 0.8125rem;
  font-weight: 400;
  color: var(--v2-text-secondary);
  margin-left: 12px;
}

.v2-header-step-label {
  font-size: 0.8125rem;
  color: var(--v2-text-secondary);
  margin-left: 12px;
}

.v2-status-pill-preview {
  background: rgba(245, 158, 11, 0.12);
  color: #D97706;
}

/* ==========================================================================
   EDIT WORKSPACE — OVERVIEW TAB
   ========================================================================== */

.v2-overview-stat-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 12px;
  margin-bottom: 20px;
}

.v2-overview-stat-card {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
}

.v2-overview-stat-icon {
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 8px;
  background: var(--v2-accent-bg, rgba(59, 130, 246, 0.08));
  color: var(--v2-primary);
  font-size: 1rem;
  flex-shrink: 0;
}

.v2-overview-stat-label {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--v2-text-muted);
  margin-bottom: 2px;
}

.v2-overview-stat-value {
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--v2-text-primary);
}

.v2-overview-stat-value.positive { color: #059669; }
.v2-overview-stat-value.warning  { color: #D97706; }

.v2-overview-details-card {
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  margin-bottom: 20px;
}

.v2-overview-details-card h4 {
  margin: 0 0 12px;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-overview-draft-summary {
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid rgba(217, 119, 6, 0.3);
  background: rgba(245, 158, 11, 0.04);
  margin-bottom: 20px;
}

.v2-overview-draft-summary h4 {
  margin: 0 0 10px;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-draft-change-list {
  margin: 0;
  padding: 0 0 0 20px;
  font-size: 0.875rem;
  color: var(--v2-text-primary);
}

.v2-draft-change-list li {
  margin-bottom: 4px;
}

.v2-overview-no-draft-banner {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  border-radius: var(--v2-border-radius);
  border: 1px solid rgba(59, 130, 246, 0.2);
  background: rgba(59, 130, 246, 0.04);
  font-size: 0.875rem;
  color: var(--v2-text-primary);
  margin-bottom: 20px;
}

.v2-overview-no-draft-banner i {
  color: var(--v2-primary);
  flex-shrink: 0;
}

.v2-overview-exposure-card {
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
}

.v2-overview-exposure-card h4 {
  margin: 0 0 12px;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-exposure-placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 30px 20px;
  color: var(--v2-text-muted);
  text-align: center;
}

.v2-exposure-placeholder p {
  margin: 10px 0 0;
  font-size: 0.875rem;
}

/* ==========================================================================
   EDIT WORKSPACE — HOLDINGS TAB
   ========================================================================== */

.v2-holdings-create-draft-banner {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  border-radius: var(--v2-border-radius);
  border: 1px solid rgba(59, 130, 246, 0.2);
  background: rgba(59, 130, 246, 0.04);
  font-size: 0.875rem;
  color: var(--v2-text-primary);
  margin-bottom: 16px;
}

.v2-holdings-create-draft-banner i {
  color: var(--v2-primary);
  flex-shrink: 0;
}

/* ==========================================================================
   EDIT WORKSPACE — SANDBOX TAB
   ========================================================================== */

.v2-sandbox-tab-banner {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 14px 18px;
  border-radius: var(--v2-border-radius);
  border: 1px solid rgba(245, 158, 11, 0.3);
  background: rgba(245, 158, 11, 0.06);
  font-size: 0.875rem;
  color: var(--v2-text-primary);
  margin-bottom: 20px;
}

.v2-sandbox-tab-banner i {
  color: #D97706;
  margin-top: 2px;
  flex-shrink: 0;
}

/* ==========================================================================
   EDIT WORKSPACE — SHARING TAB
   ========================================================================== */

.v2-sharing-summary-cards {
  display: flex;
  gap: 12px;
  margin-bottom: 16px;
}

.v2-sharing-card {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  font-size: 0.875rem;
  color: var(--v2-text-primary);
}

.v2-sharing-card i {
  color: var(--v2-text-muted);
}

.v2-share-inline-list h4 {
  margin: 0 0 8px;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--v2-text-secondary);
}

/* ==========================================================================
   EDIT WORKSPACE — ACTION BAR
   ========================================================================== */

.v2-edit-action-bar {
  gap: 8px;
}

/* ==========================================================================
   PREVIEW PANEL — HEADER ROW
   ========================================================================== */

.v2-preview-header-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 16px;
}

.v2-preview-header-row h3 {
  margin: 0;
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-preview-actions {
  display: flex;
  gap: 8px;
  align-items: center;
}

/* ==========================================================================
   DRAFT DIFF PANEL
   ========================================================================== */

.v2-draft-diff-panel {
  padding: 16px;
  border-radius: var(--v2-border-radius);
  border: 1px solid var(--v2-border-color);
  background: var(--v2-bg-card);
  margin-top: 20px;
}

.v2-draft-diff-panel h4 {
  margin: 0 0 16px;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-draft-diff-panel h5 {
  margin: 12px 0 8px;
  font-size: 0.875rem;
  font-weight: 600;
}

.v2-draft-diff-panel h5 i {
  margin-right: 6px;
}

.v2-diff-section {
  margin-bottom: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--v2-border-color);
}

.v2-diff-section:last-child {
  border-bottom: none;
  padding-bottom: 0;
  margin-bottom: 0;
}

.v2-diff-old {
  text-decoration: line-through;
  color: #DC2626;
  font-size: 0.8125rem;
}

.v2-diff-new {
  font-weight: 600;
  color: #059669;
  font-size: 0.8125rem;
}

.v2-diff-row.v2-diff-added {
  background: rgba(5, 150, 105, 0.04);
}

.v2-diff-row.v2-diff-removed {
  background: rgba(220, 38, 38, 0.04);
}

.v2-diff-row.v2-diff-changed {
  background: rgba(59, 130, 246, 0.04);
}

/* ==========================================================================
   CREATE WIZARD — STEP PANEL
   ========================================================================== */

.v2-create-step-panel {
  max-width: 960px;
}

.v2-create-step-panel h3 {
  margin: 0 0 16px;
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-create-step-panel p.description {
  margin: 0 0 20px;
  font-size: 0.9375rem;
  color: var(--v2-text-secondary);
}

.dark-theme .v2-create-step-panel h3 { color: #e6e9f0; }
.dark-theme .v2-create-step-panel p.description { color: #8b92a5; }

/* ==========================================================================
   REVIEW — SAVED BANNER
   ========================================================================== */

.v2-review-saved-banner {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  border-radius: var(--v2-border-radius);
  border: 1px solid rgba(16, 185, 129, 0.3);
  background: rgba(16, 185, 129, 0.06);
  font-size: 0.875rem;
  color: #059669;
  font-weight: 500;
  margin-bottom: 20px;
}

/* ==========================================================================
   SANDBOX BANNER — ERROR VARIANT
   ========================================================================== */

.v2-mode-banner-error {
  background: linear-gradient(90deg, #EF4444 0%, #DC2626 100%);
}

/* ==========================================================================
   DARK THEME — EDIT WORKSPACE
   ========================================================================== */

.dark-theme .v2-edit-tabs {
  background: var(--v2-bg-surface, #111520);
  border-bottom-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-edit-tab {
  color: var(--v2-text-muted, #8b92a5);
}

.dark-theme .v2-edit-tab.active {
  color: var(--v2-accent, #0d7cc4);
  border-bottom-color: var(--v2-accent, #0d7cc4);
}

.dark-theme .v2-edit-workspace-content {
  background: #0c111a;
}

.dark-theme .v2-overview-stat-card {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-overview-stat-icon {
  background: rgba(59, 130, 246, 0.12);
}

.dark-theme .v2-overview-stat-value {
  color: var(--v2-text-primary, #e6e9f0);
}

.dark-theme .v2-overview-details-card {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-overview-draft-summary {
  background: rgba(245, 158, 11, 0.06);
  border-color: rgba(217, 119, 6, 0.25);
}

.dark-theme .v2-overview-exposure-card {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-draft-diff-panel {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-diff-section {
  border-bottom-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-sharing-card {
  background: var(--v2-bg-surface, #111520);
  border-color: var(--v2-border, #1e2433);
}

.dark-theme .v2-sandbox-tab-banner {
  background: rgba(245, 158, 11, 0.08);
  border-color: rgba(217, 119, 6, 0.25);
}

.dark-theme .v2-holdings-create-draft-banner {
  background: rgba(59, 130, 246, 0.08);
  border-color: rgba(59, 130, 246, 0.2);
}

.dark-theme .v2-overview-no-draft-banner {
  background: rgba(59, 130, 246, 0.08);
  border-color: rgba(59, 130, 246, 0.2);
}

.dark-theme .v2-review-saved-banner {
  background: rgba(16, 185, 129, 0.08);
  border-color: rgba(16, 185, 129, 0.25);
}

/* =========================================================================
   PRO FORMA OVERLAY
   ========================================================================= */

.v2-proforma-overlay {
  position: fixed;
  inset: 0;
  z-index: 100009;
  background: var(--v2-bg-page, #F8F9FB);
  display: none;
  flex-direction: column;
  overflow: hidden;
}
.v2-proforma-overlay.open {
  display: flex;
}

.v2-pf-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 24px;
  background: var(--v2-bg-card, #fff);
  border-bottom: 1px solid var(--v2-border, #E5E7EB);
  flex-shrink: 0;
}
.v2-pf-header-left {
  display: flex;
  align-items: center;
}
.v2-pf-header-left h2 {
  margin: 0;
  font-size: 1.125rem;
  font-weight: 700;
  color: var(--v2-text-primary, #111827);
}

.v2-pf-body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 20px 24px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.v2-pf-columns {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
  align-items: flex-start;
}

.v2-pf-column {
  background: var(--v2-bg-card, #fff);
  border: 1px solid var(--v2-border, #E5E7EB);
  border-radius: var(--v2-border-radius, 8px);
  padding: 16px;
  display: flex;
  flex-direction: column;
}

.v2-pf-column-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 12px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--v2-border, #E5E7EB);
}
.v2-pf-column-header h4 {
  margin: 0;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--v2-text-primary, #111827);
}
.v2-pf-count {
  font-size: 0.75rem;
  color: var(--v2-text-muted, #9CA3AF);
  background: var(--v2-bg-page, #F8F9FB);
  padding: 2px 8px;
  border-radius: 10px;
}

.v2-pf-current {
  background: var(--v2-bg-card, #fff);
}
.v2-pf-current .v2-pf-column-header h4 {
  color: var(--v2-text-secondary, #6B7280);
}

.v2-pf-proposed-toolbar {
  display: flex;
  gap: 6px;
  margin-bottom: 8px;
}

/* Current holdings readonly table */
.v2-pf-holdings-table {
  max-height: 380px;
  overflow-y: auto;
}
.v2-pf-holdings-table table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.8125rem;
}
.v2-pf-holdings-table th {
  text-align: left;
  padding: 6px 10px;
  font-weight: 600;
  color: var(--v2-text-muted, #9CA3AF);
  font-size: 0.6875rem;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  border-bottom: 1px solid var(--v2-border, #E5E7EB);
}
.v2-pf-holdings-table td {
  padding: 6px 10px;
  color: var(--v2-text-primary, #111827);
  border-bottom: 1px solid var(--v2-border-light, #F3F4F6);
}
.v2-pf-holdings-table td.ticker {
  font-family: monospace;
  font-weight: 600;
  color: var(--v2-primary, #4F46E5);
}
.v2-pf-holdings-table td.name {
  color: var(--v2-text-muted, #9CA3AF);
  font-size: 0.75rem;
}
.v2-pf-holdings-table tfoot td {
  font-weight: 600;
  border-top: 2px solid var(--v2-border, #E5E7EB);
  border-bottom: none;
}

/* Comparison results section */
.v2-pf-comparison-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 40px 20px;
  background: var(--v2-bg-card, #fff);
  border: 1px dashed var(--v2-border, #E5E7EB);
  border-radius: var(--v2-border-radius, 8px);
  text-align: center;
}
.v2-pf-comparison-empty p {
  margin: 0;
  color: var(--v2-text-muted, #9CA3AF);
  font-size: 0.875rem;
}

.v2-pf-comparison {
  background: var(--v2-bg-card, #fff);
  border: 1px solid var(--v2-border, #E5E7EB);
  border-radius: var(--v2-border-radius, 8px);
  padding: 20px;
}
.v2-pf-comparison h3 {
  margin: 0 0 16px 0;
  font-size: 1rem;
  font-weight: 700;
  color: var(--v2-text-primary, #111827);
}

.v2-pf-summary-badges {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 16px;
}
.v2-pf-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 10px;
  border-radius: 16px;
  font-size: 0.75rem;
  font-weight: 600;
}
.v2-pf-badge.added    { background: #D1FAE5; color: #065F46; }
.v2-pf-badge.removed  { background: #FEE2E2; color: #991B1B; }
.v2-pf-badge.changed  { background: #DBEAFE; color: #1E40AF; }
.v2-pf-badge.unchanged { background: #F3F4F6; color: #6B7280; }

/* Metrics comparison table */
.v2-pf-metrics-table {
  margin-bottom: 16px;
}
.v2-pf-metrics-table table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.8125rem;
}
.v2-pf-metrics-table th {
  text-align: left;
  padding: 8px 12px;
  font-weight: 600;
  color: var(--v2-text-muted, #9CA3AF);
  font-size: 0.6875rem;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  border-bottom: 2px solid var(--v2-border, #E5E7EB);
}
.v2-pf-metrics-table td {
  padding: 8px 12px;
  border-bottom: 1px solid var(--v2-border-light, #F3F4F6);
  color: var(--v2-text-primary, #111827);
}
.v2-pf-metrics-table td.metric-label {
  font-weight: 500;
  color: var(--v2-text-secondary, #6B7280);
}
.v2-pf-metrics-table td.positive { color: #059669; }
.v2-pf-metrics-table td.negative { color: #DC2626; }

/* Holdings diff table */
.v2-pf-diff-table {
  margin-top: 4px;
}
.v2-pf-diff-table h4 {
  margin: 0 0 10px 0;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--v2-text-secondary, #6B7280);
}
.v2-pf-diff-table table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.8125rem;
}
.v2-pf-diff-table th {
  text-align: left;
  padding: 6px 10px;
  font-weight: 600;
  color: var(--v2-text-muted, #9CA3AF);
  font-size: 0.6875rem;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  border-bottom: 2px solid var(--v2-border, #E5E7EB);
}
.v2-pf-diff-table td {
  padding: 6px 10px;
  border-bottom: 1px solid var(--v2-border-light, #F3F4F6);
}
.v2-pf-diff-table td.ticker {
  font-family: monospace;
  font-weight: 600;
}
.v2-pf-diff-table td.positive { color: #059669; }
.v2-pf-diff-table td.negative { color: #DC2626; }

.v2-pf-diff-row.added  { background: #F0FDF4; }
.v2-pf-diff-row.removed { background: #FEF2F2; }
.v2-pf-diff-row.changed { background: #EFF6FF; }

.v2-pf-status-tag {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 10px;
  font-size: 0.6875rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.3px;
}
.v2-pf-status-tag.added    { background: #D1FAE5; color: #065F46; }
.v2-pf-status-tag.removed  { background: #FEE2E2; color: #991B1B; }
.v2-pf-status-tag.changed  { background: #DBEAFE; color: #1E40AF; }
.v2-pf-status-tag.unchanged { background: #F3F4F6; color: #6B7280; }

/* Action bar */
.v2-pf-action-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 24px;
  background: var(--v2-bg-card, #fff);
  border-top: 1px solid var(--v2-border, #E5E7EB);
  flex-shrink: 0;
}
.v2-pf-action-bar .left,
.v2-pf-action-bar .right {
  display: flex;
  gap: 8px;
  align-items: center;
}

/* Dark theme overrides */
.v2-dark .v2-proforma-overlay {
  background: var(--v2-bg-page, #0F1117);
}
.v2-dark .v2-pf-header {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #2D3040);
}
.v2-dark .v2-pf-column {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #2D3040);
}
.v2-dark .v2-pf-comparison {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #2D3040);
}
.v2-dark .v2-pf-comparison-empty {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #2D3040);
}
.v2-dark .v2-pf-action-bar {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #2D3040);
}
.v2-dark .v2-pf-diff-row.added  { background: rgba(16, 185, 129, 0.08); }
.v2-dark .v2-pf-diff-row.removed { background: rgba(239, 68, 68, 0.08); }
.v2-dark .v2-pf-diff-row.changed { background: rgba(59, 130, 246, 0.08); }
.v2-dark .v2-pf-badge.added    { background: rgba(16, 185, 129, 0.15); color: #34D399; }
.v2-dark .v2-pf-badge.removed  { background: rgba(239, 68, 68, 0.15); color: #FCA5A5; }
.v2-dark .v2-pf-badge.changed  { background: rgba(59, 130, 246, 0.15); color: #93C5FD; }
.v2-dark .v2-pf-badge.unchanged { background: rgba(107, 114, 128, 0.15); color: #9CA3AF; }
.v2-dark .v2-pf-status-tag.added    { background: rgba(16, 185, 129, 0.2); color: #34D399; }
.v2-dark .v2-pf-status-tag.removed  { background: rgba(239, 68, 68, 0.2); color: #FCA5A5; }
.v2-dark .v2-pf-status-tag.changed  { background: rgba(59, 130, 246, 0.2); color: #93C5FD; }
.v2-dark .v2-pf-status-tag.unchanged { background: rgba(107, 114, 128, 0.2); color: #9CA3AF; }

@media (max-width: 900px) {
  .v2-pf-columns {
    grid-template-columns: 1fr;
  }
}

/* =========================================================================
   MODE BANNERS — Create Wizard vs Sandbox Preview
   ========================================================================= */

.v2-mode-banner {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 20px;
  font-size: 0.875rem;
  font-weight: 600;
  letter-spacing: 0.03em;
}

.v2-mode-banner-create {
  background: linear-gradient(90deg, #3B82F6 0%, #2563EB 100%);
  color: #fff;
}

.v2-mode-banner-sandbox {
  background: linear-gradient(90deg, #F59E0B 0%, #D97706 100%);
  color: #fff;
}

.v2-mode-banner-label {
  flex: 0 0 auto;
}

.v2-mode-banner-meta {
  flex: 1 1 auto;
  font-weight: 400;
  font-size: 0.75rem;
  opacity: 0.8;
}

.v2-mode-banner .v2-btn-xs {
  padding: 3px 10px;
  font-size: 0.75rem;
  border: 1px solid rgba(255,255,255,0.4);
  color: #fff;
  border-radius: 4px;
  background: transparent;
  cursor: pointer;
}
.v2-mode-banner .v2-btn-xs:hover {
  background: rgba(255,255,255,0.15);
}

/* =========================================================================
   TEMPLATE CARDS — Create Wizard Step 0
   ========================================================================= */

.v2-template-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 16px;
  margin: 16px 0;
}

.v2-template-card {
  background: var(--v2-bg-card, #fff);
  border: 1px solid var(--v2-border, #E5E7EB);
  border-radius: 8px;
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  transition: border-color 0.15s, box-shadow 0.15s;
  cursor: pointer;
}
.v2-template-card:hover {
  border-color: var(--v2-primary, #3B82F6);
  box-shadow: 0 2px 8px rgba(59, 130, 246, 0.12);
}

.v2-template-card-blank {
  border-style: dashed;
}

/* Featured (default) card — lifts the "Blank" starting point so it reads as
   the primary option without overwhelming the template grid. */
.v2-template-card-featured {
  border-style: solid;
  border-color: var(--v2-primary, #3B82F6);
  background: linear-gradient(180deg, rgba(59,130,246,0.04) 0%, rgba(59,130,246,0) 60%), var(--v2-bg-card, #fff);
  box-shadow: 0 1px 0 rgba(59,130,246,0.08);
}
.v2-template-card-featured:hover {
  box-shadow: 0 4px 14px rgba(59,130,246,0.15);
}
.v2-template-card-featured .v2-template-category {
  color: var(--v2-primary, #3B82F6);
}
.v2-dark .v2-template-card-featured,
.dark-theme .v2-template-card-featured {
  background: linear-gradient(180deg, rgba(9,100,160,0.10) 0%, rgba(9,100,160,0) 60%), var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-accent, #0964A0);
}

.v2-template-card-header {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.v2-template-card-header h4 {
  margin: 0;
  font-size: 1rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-template-category {
  font-size: 0.6875rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--v2-primary, #3B82F6);
}

.v2-template-desc {
  margin: 0;
  font-size: 0.875rem;
  color: var(--v2-text-secondary, #6B7280);
  line-height: 1.45;
  flex: 1;
}

.v2-template-meta {
  display: flex;
  gap: 12px;
  font-size: 0.75rem;
  color: var(--v2-text-muted, #9CA3AF);
}

.v2-template-select-btn {
  align-self: flex-start;
  margin-top: 4px;
}

/* Dark mode overrides */
.v2-dark .v2-template-card {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #2D3040);
}
.v2-dark .v2-template-card:hover {
  border-color: var(--v2-primary, #60A5FA);
}
.dark-theme .v2-template-card {
  background: #111520;
  border-color: #1e2433;
}
.dark-theme .v2-template-card:hover {
  border-color: var(--v2-accent, #0964A0);
  box-shadow: 0 2px 8px rgba(9,100,160,0.2);
}
.dark-theme .v2-template-card-header h4 { color: #e6e9f0; }
.dark-theme .v2-template-category { color: var(--v2-accent, #0964A0); }
.dark-theme .v2-template-desc { color: #8b92a5; }
.dark-theme .v2-template-meta { color: #64748b; }
.dark-theme .v2-template-select-btn {
  background: #161b26 !important;
  border-color: #1e2433 !important;
  color: #c4c9d4 !important;
}
.dark-theme .v2-template-select-btn:hover {
  background: #1a2030 !important;
  border-color: var(--v2-accent, #0964A0) !important;
  color: #e6e9f0 !important;
}

/* ==========================================================================
   SHARE MODAL
   ========================================================================== */

.v2-share-modal {
  display: none;
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  z-index: 100005;
  align-items: center;
  justify-content: center;
}
.v2-share-modal.open {
  display: flex;
}

.v2-share-backdrop {
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0, 0, 0, 0.4);
}

.v2-share-dialog {
  position: relative;
  width: 560px;
  max-width: 90vw;
  max-height: 80vh;
  display: flex;
  flex-direction: column;
  background: var(--v2-bg-card, #fff);
  border-radius: 12px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
  overflow: hidden;
}

.v2-share-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  padding: 20px 24px 12px;
  border-bottom: 1px solid var(--v2-border-color, #E5E7EB);
}
.v2-share-header h3 {
  margin: 0;
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}
.v2-share-model-name {
  margin: 4px 0 0;
  font-size: 0.875rem;
  color: var(--v2-text-muted);
}
.v2-share-close {
  background: none; border: none; cursor: pointer;
  font-size: 1.125rem; color: var(--v2-text-muted);
  padding: 4px;
}
.v2-share-close:hover { color: var(--v2-text-primary); }

.v2-share-role-banner {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 24px;
  background: var(--v2-bg-elevated, #F9FAFB);
  font-size: 0.8125rem;
  color: var(--v2-text-secondary);
}

.v2-share-hint {
  font-size: 0.8125rem;
  color: var(--v2-text-muted);
}

.v2-share-tabs {
  display: flex;
  border-bottom: 1px solid var(--v2-border-color, #E5E7EB);
  padding: 0 24px;
}

.v2-share-tab {
  background: none; border: none; cursor: pointer;
  padding: 10px 16px;
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--v2-text-secondary);
  border-bottom: 2px solid transparent;
  display: flex;
  align-items: center;
  gap: 6px;
  transition: all 0.15s;
}
.v2-share-tab:hover { color: var(--v2-text-primary); }
.v2-share-tab.active {
  color: var(--v2-primary);
  border-bottom-color: var(--v2-primary);
}
.v2-share-tab-count {
  background: var(--v2-bg-elevated, #F3F4F6);
  border-radius: 10px;
  padding: 1px 7px;
  font-size: 0.6875rem;
  font-weight: 600;
}

.v2-share-body {
  padding: 16px 24px 20px;
  overflow-y: auto;
  flex: 1;
  min-height: 200px;
}

.v2-share-add-section {
  margin-bottom: 16px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--v2-border-color, #E5E7EB);
}

.v2-share-search-row {
  display: flex;
  gap: 8px;
  align-items: center;
}

.v2-share-search-input-wrap {
  flex: 1;
  position: relative;
}
.v2-share-search-input-wrap i {
  position: absolute;
  left: 10px; top: 50%; transform: translateY(-50%);
  color: var(--v2-text-muted);
  font-size: 0.8125rem;
}
.v2-share-search-input-wrap input {
  width: 100%;
  padding: 8px 12px 8px 32px;
  border: 1px solid var(--v2-border-color);
  border-radius: 6px;
  font-size: 0.875rem;
  background: var(--v2-bg-card);
  color: var(--v2-text-primary);
  outline: none;
}
.v2-share-search-input-wrap input:focus {
  border-color: var(--v2-primary);
}

.v2-share-add-section select {
  padding: 8px 12px;
  border: 1px solid var(--v2-border-color);
  border-radius: 6px;
  font-size: 0.875rem;
  background: var(--v2-bg-card);
  color: var(--v2-text-primary);
  outline: none;
}

.v2-share-search-results {
  margin-top: 8px;
  max-height: 160px;
  overflow-y: auto;
}

.v2-share-search-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border-radius: 6px;
  cursor: default;
}
.v2-share-search-item:hover {
  background: var(--v2-bg-elevated, #F9FAFB);
}
.v2-share-search-name {
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--v2-text-primary);
}
.v2-share-search-email {
  font-size: 0.8125rem;
  color: var(--v2-text-muted);
  flex: 1;
}

.v2-share-grant-list {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.v2-share-grant-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 12px;
  border-radius: 6px;
  border: 1px solid var(--v2-border-color, #E5E7EB);
  background: var(--v2-bg-card, #fff);
}
.v2-share-grant-row:hover {
  background: var(--v2-bg-elevated, #F9FAFB);
}

.v2-share-grant-info {
  display: flex;
  align-items: center;
  gap: 8px;
}
.v2-share-grant-info i {
  color: var(--v2-text-muted);
  font-size: 1rem;
}
.v2-share-grant-name {
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--v2-text-primary);
}

.v2-share-grant-actions {
  display: flex;
  align-items: center;
  gap: 8px;
}

.v2-share-role-select {
  padding: 4px 8px;
  border: 1px solid var(--v2-border-color);
  border-radius: 4px;
  font-size: 0.8125rem;
  background: var(--v2-bg-card);
  color: var(--v2-text-primary);
}

.v2-share-role-badge {
  display: inline-block;
  padding: 3px 10px;
  border-radius: 10px;
  font-size: 0.6875rem;
  font-weight: 600;
  text-transform: uppercase;
  background: rgba(59, 130, 246, 0.1);
  color: var(--v2-primary, #3B82F6);
}

.v2-share-empty {
  text-align: center;
  color: var(--v2-text-muted);
  font-size: 0.875rem;
  padding: 24px 0;
}

/* Dark mode */
.v2-dark .v2-share-dialog,
.dark-theme .v2-share-dialog {
  background: var(--v2-bg-surface, #111520);
}
.v2-dark .v2-share-header,
.dark-theme .v2-share-header {
  border-bottom-color: var(--v2-border, #1e2433);
}
.v2-dark .v2-share-role-banner,
.dark-theme .v2-share-role-banner {
  background: var(--v2-bg-card, #1A1D2A);
}
.v2-dark .v2-share-grant-row,
.dark-theme .v2-share-grant-row {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #1e2433);
}

/* =========================================================================
   Preview Sub-Tabs (Performance | Composition | Fundamentals)
   ========================================================================= */

.v2-preview-subtabs {
  display: flex;
  gap: 0;
  border-bottom: 2px solid var(--v2-border, #e2e8f0);
  margin: 12px 0 16px;
}

.v2-preview-subtab {
  padding: 8px 20px;
  font-size: 0.8125rem;
  font-weight: 500;
  color: var(--v2-text-secondary, #64748b);
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  margin-bottom: -2px;
  cursor: pointer;
  transition: color 0.15s, border-color 0.15s;
}

.v2-preview-subtab:hover {
  color: var(--v2-text-primary, #1e293b);
}

.v2-preview-subtab.active {
  color: var(--v2-primary, #3B82F6);
  border-bottom-color: var(--v2-primary, #3B82F6);
}

.v2-preview-tab-content {
  min-height: 200px;
}

/* =========================================================================
   Composition Panel — 2x2 Chart Grid
   ========================================================================= */

.v2-comp-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
  padding: 4px 0;
}

.v2-comp-chart-wrap {
  background: var(--v2-bg-card, #fff);
  border: 1px solid var(--v2-border, #e2e8f0);
  border-radius: 8px;
  padding: 16px;
}

.v2-comp-chart-wrap h4 {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--v2-text-primary, #1e293b);
  margin: 0 0 8px;
}

.v2-comp-chart {
  min-height: 280px;
}

.v2-comp-empty {
  text-align: center;
  color: var(--v2-text-muted, #94a3b8);
  padding: 48px 16px;
  font-size: 0.875rem;
}

/* =========================================================================
   Fundamentals Panel
   ========================================================================= */

.v2-fund-layout {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 4px 0;
}

.v2-fund-section {
  background: var(--v2-bg-card, #fff);
  border: 1px solid var(--v2-border, #e2e8f0);
  border-radius: 8px;
  padding: 16px;
}

.v2-fund-section h4 {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--v2-text-primary, #1e293b);
  margin: 0 0 8px;
}

.v2-fund-chart {
  min-height: 280px;
}

.v2-fund-bottom-row {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 20px;
}

.v2-fund-metrics-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.8125rem;
}

.v2-fund-metrics-table th,
.v2-fund-metrics-table td {
  padding: 8px 12px;
  border-bottom: 1px solid var(--v2-border, #e2e8f0);
}

.v2-fund-metrics-table th {
  text-align: left;
  font-weight: 600;
  color: var(--v2-text-secondary, #64748b);
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.v2-fund-metrics-table td {
  color: var(--v2-text-primary, #1e293b);
}

.v2-text-right {
  text-align: right;
}

.v2-fund-stat-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 120px;
}

.v2-fund-stat-value {
  font-size: 2rem;
  font-weight: 700;
  color: var(--v2-text-primary, #1e293b);
}

.v2-fund-stat-value.positive {
  color: #059669;
}

.v2-fund-stat-label {
  font-size: 0.8125rem;
  color: var(--v2-text-muted, #94a3b8);
  margin-top: 4px;
}

.v2-fund-empty {
  text-align: center;
  color: var(--v2-text-muted, #94a3b8);
  padding: 48px 16px;
  font-size: 0.875rem;
}

/* Responsive: stack charts on small screens */
@media (max-width: 900px) {
  .v2-comp-grid { grid-template-columns: 1fr; }
  .v2-fund-bottom-row { grid-template-columns: 1fr; }
}

/* Dark mode overrides */
.v2-dark .v2-comp-chart-wrap,
.dark-theme .v2-comp-chart-wrap,
.v2-dark .v2-fund-section,
.dark-theme .v2-fund-section {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #1e2433);
}

.v2-dark .v2-preview-subtabs,
.dark-theme .v2-preview-subtabs {
  border-bottom-color: var(--v2-border, #1e2433);
}

.v2-dark .v2-preview-subtab,
.dark-theme .v2-preview-subtab {
  color: var(--v2-text-muted, #64748b);
}

.v2-dark .v2-preview-subtab.active,
.dark-theme .v2-preview-subtab.active {
  color: var(--v2-primary, #3B82F6);
  border-bottom-color: var(--v2-primary, #3B82F6);
}

/* ==========================================================================
   EDIT WORKSPACE — SETTINGS TAB
   ========================================================================== */

.v2-settings-form {
  max-width: 900px;
}

.v2-settings-section {
  margin-bottom: 28px;
  padding-bottom: 20px;
  border-bottom: 1px solid var(--v2-border-color, #e5e7eb);
}

.v2-settings-section:last-of-type {
  border-bottom: none;
}

.v2-settings-section h4 {
  margin: 0 0 14px;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-settings-tpm {
  background: var(--v2-accent-bg, rgba(59, 130, 246, 0.04));
  border: 1px solid var(--v2-primary, #3B82F6);
  border-radius: var(--v2-border-radius, 8px);
  padding: 20px;
}

.v2-settings-tpm h4 {
  color: var(--v2-primary, #3B82F6);
}

.v2-settings-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 14px 20px;
}

.v2-settings-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.v2-settings-field-wide {
  grid-column: 1 / -1;
}

.v2-settings-field label {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--v2-text-muted, #94a3b8);
}

.v2-settings-field input,
.v2-settings-field select,
.v2-settings-field textarea {
  padding: 8px 10px;
  font-size: 0.875rem;
  border: 1px solid var(--v2-border-color, #e5e7eb);
  border-radius: 6px;
  background: var(--v2-bg-card, #fff);
  color: var(--v2-text-primary, #1e293b);
  transition: border-color 0.15s;
}

.v2-settings-field input:focus,
.v2-settings-field select:focus,
.v2-settings-field textarea:focus {
  outline: none;
  border-color: var(--v2-primary, #3B82F6);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}

.v2-settings-field input:disabled,
.v2-settings-field select:disabled,
.v2-settings-field textarea:disabled {
  opacity: 0.6;
  cursor: not-allowed;
  background: var(--v2-bg-muted, #f1f5f9);
}

.v2-settings-field textarea {
  resize: vertical;
  min-height: 72px;
}

/* ==========================================================================
   EDIT WORKSPACE — PERFORMANCE TAB
   ========================================================================== */

.v2-perf-section {
  max-width: 900px;
}

.v2-perf-section h4 {
  margin: 0 0 8px;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--v2-text-primary);
}

.v2-perf-section h4 i {
  margin-right: 6px;
  color: var(--v2-primary, #3B82F6);
}

.v2-perf-table th {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--v2-text-muted, #94a3b8);
}

.v2-perf-table td {
  vertical-align: middle;
}

.v2-perf-input {
  padding: 4px 8px;
  font-size: 0.8125rem;
  border: 1px solid var(--v2-border-color, #e5e7eb);
  border-radius: 4px;
  background: var(--v2-bg-card, #fff);
  color: var(--v2-text-primary, #1e293b);
}

.v2-perf-input:focus {
  outline: none;
  border-color: var(--v2-primary, #3B82F6);
}

.v2-btn-icon {
  background: none;
  border: none;
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 4px;
  font-size: 0.875rem;
  transition: background 0.15s;
}

.v2-btn-icon:hover {
  background: var(--v2-bg-hover, rgba(0, 0, 0, 0.04));
}

/* Dark theme overrides */
.v2-dark .v2-settings-field input,
.dark-theme .v2-settings-field input,
.v2-dark .v2-settings-field select,
.dark-theme .v2-settings-field select,
.v2-dark .v2-settings-field textarea,
.dark-theme .v2-settings-field textarea {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #1e2433);
  color: var(--v2-text-primary, #e2e8f0);
}

.v2-dark .v2-perf-input,
.dark-theme .v2-perf-input {
  background: var(--v2-bg-card, #1A1D2A);
  border-color: var(--v2-border, #1e2433);
  color: var(--v2-text-primary, #e2e8f0);
}

.v2-dark .v2-settings-tpm,
.dark-theme .v2-settings-tpm {
  background: rgba(59, 130, 246, 0.06);
  border-color: rgba(59, 130, 246, 0.3);
}

.v2-dark .v2-settings-section,
.dark-theme .v2-settings-section {
  border-bottom-color: var(--v2-border, #1e2433);
}

/* Sub-tab bar for Holdings / Performance */
.v2-sub-tab-bar {
  border-bottom: 1px solid var(--v2-border, #334155);
  padding-bottom: 0;
}

.v2-sub-tab {
  padding: 6px 16px;
  font-size: 0.8125rem;
  font-weight: 500;
  cursor: pointer;
  border: none;
  background: none;
  color: var(--v2-text-muted, #6B7280);
  border-bottom: 2px solid transparent;
  transition: color 0.15s, border-color 0.15s;
}

.v2-sub-tab:hover {
  color: var(--v2-text-primary, #e2e8f0);
}

.v2-sub-tab.active {
  color: var(--v2-primary, #3B82F6);
  border-bottom-color: var(--v2-primary, #3B82F6);
}

.v2-upload-dropzone {
  border: 2px dashed var(--v2-border, #334155);
  border-radius: 12px;
  padding: 40px 20px;
  text-align: center;
  cursor: pointer;
  transition: border-color 0.2s, background 0.2s;
}

.v2-upload-dropzone:hover,
.v2-upload-dropzone.drag-over {
  border-color: var(--v2-primary, #3B82F6);
  background: rgba(59, 130, 246, 0.04);
}

.v2-weight-badge {
  padding: 4px 10px;
  border-radius: 12px;
  background: var(--v2-bg-elevated, #1E293B);
}

.v2-mini-table {
  border-collapse: collapse;
}
.v2-mini-table th,
.v2-mini-table td {
  padding: 6px 10px;
  border-bottom: 1px solid var(--v2-border, #334155);
  text-align: left;
}
.v2-mini-table th {
  font-weight: 600;
  color: var(--v2-text-secondary, #94A3B8);
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

/* ============================================================================
   HOLDINGS UPLOAD MODAL (HoldingsUploadModalV2)
   ============================================================================ */
.v2-holdings-upload-modal {
  max-width: 560px;
  width: 100%;
}

.v2-holdings-upload-modal .v2-modal-body {
  padding: 20px 24px 8px;
}

.v2-hu-help-group {
  display: flex;
  gap: 10px;
  justify-content: center;
  flex-wrap: wrap;
  margin-bottom: 18px;
}

.v2-hu-help-btn {
  flex: 1 1 auto;
  min-width: 180px;
  justify-content: center;
}

.v2-hu-help-btn i {
  margin-right: 6px;
}

.v2-hu-drop-zone {
  padding: 36px 20px;
  outline: none;
}

.v2-hu-drop-zone:focus-visible {
  border-color: var(--v2-primary, #3B82F6);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);
}

.v2-hu-drop-zone.has-file {
  border-style: solid;
  border-color: var(--v2-primary, #3B82F6);
  background: rgba(59, 130, 246, 0.04);
}

.v2-hu-drop-icon {
  display: block;
  font-size: 44px;
  color: var(--v2-primary, #3B82F6);
  margin-bottom: 10px;
}

.v2-hu-drop-prompt {
  font-size: 14px;
  color: var(--v2-text-primary, var(--text, #e6e9f0));
  margin-bottom: 4px;
}

.v2-hu-drop-sub {
  font-size: 12px;
  color: var(--v2-text-muted, var(--muted, #6B7280));
}

.v2-hu-file-info {
  margin-top: 14px;
  padding: 10px 12px;
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--v2-bg-elevated, rgba(59, 130, 246, 0.06));
  border: 1px solid var(--v2-border, #2a3142);
  border-radius: 6px;
  font-size: 13px;
  color: var(--v2-text-primary, var(--text, #e6e9f0));
}

.v2-hu-file-info i {
  color: var(--v2-primary, #3B82F6);
  font-size: 16px;
}

.v2-hu-file-name {
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 60%;
}

.v2-hu-file-size {
  color: var(--v2-text-muted, var(--muted, #6B7280));
  font-size: 12px;
}

.v2-hu-file-clear {
  margin-left: auto;
  background: none;
  border: none;
  color: var(--v2-text-muted, var(--muted, #6B7280));
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 4px;
  transition: background 0.15s ease, color 0.15s ease;
}

.v2-hu-file-clear:hover {
  background: rgba(148, 163, 184, 0.15);
  color: var(--v2-text-primary, var(--text, #e6e9f0));
}

.v2-hu-error {
  margin-top: 12px;
  padding: 10px 12px;
  background: rgba(220, 38, 38, 0.08);
  border: 1px solid rgba(220, 38, 38, 0.4);
  border-radius: 6px;
  color: #b91c1c;
  font-size: 13px;
}

.v2-hu-footer {
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}

.v2-hu-sample-btn {
  margin-right: auto;
}

.v2-hu-sample-btn i {
  margin-right: 6px;
}

.v2-hu-footer-actions {
  display: flex;
  gap: 10px;
  margin-left: auto;
}

@media (max-width: 520px) {
  .v2-hu-help-group { flex-direction: column; }
  .v2-hu-help-btn { min-width: 0; width: 100%; }
  .v2-hu-footer { flex-direction: column; align-items: stretch; }
  .v2-hu-sample-btn { margin-right: 0; text-align: center; }
  .v2-hu-footer-actions { margin-left: 0; justify-content: flex-end; }
}

/* ---------------------------------------------------------------------------
 * Bulk Position Upload (v2) — preview-stage issue + row styling
 * ------------------------------------------------------------------------- */
.v2-bu-stat {
  background: var(--v2-surface-alt, #F3F4F6);
  border-radius: 6px;
  padding: 8px 14px;
  font-size: 13px;
}
.v2-bu-stat strong { font-size: 16px; margin-right: 4px; }

.v2-bu-issue {
  padding: 10px 12px;
  border-radius: 6px;
  margin-bottom: 8px;
  font-size: 13px;
  line-height: 1.45;
}
.v2-bu-issue i { margin-right: 8px; }
.v2-bu-issue .v2-bu-issue-resolution {
  font-size: 12px;
  opacity: 0.75;
  margin-top: 4px;
}
.v2-bu-issue-error {
  background: #FEF2F2;
  border-left: 3px solid #DC2626;
  color: #7F1D1D;
}
.v2-bu-issue-warning {
  background: #FFFBEB;
  border-left: 3px solid #D97706;
  color: #78350F;
}

/* AG Grid row tinting for error / warning rows in the preview grid. */
.ag-theme-balham .ag-row.v2-bu-row-error   { background: #FEF2F2 !important; }
.ag-theme-balham .ag-row.v2-bu-row-warning { background: #FFFBEB !important; }
