/* Chart builder — Phase 6 (aligned with Chart-Board tokens) */ :root { --cb-cb-surface: #f8fafc; --cb-cb-elevated: #ffffff; --cb-cb-muted: #64748b; --cb-cb-border: rgba(148, 163, 184, 0.35); --cb-cb-ink: #0f172a; --cb-cb-accent: #0f172a; } .cb-chart-builder { font-family: Inter, system-ui, sans-serif; color: var(--cb-cb-ink); } .cb-chart-builder details > summary { cursor: pointer; color: #334155; } .cb-cb-stepbar { display: flex; align-items: center; flex-wrap: wrap; gap: 0.5rem 0.25rem; padding: 0.75rem 0 1.25rem; border-bottom: 1px solid var(--cb-cb-border); margin-bottom: 1.5rem; } .cb-cb-pill { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.85rem; border-radius: 0.5rem; font-size: 0.8125rem; font-weight: 600; color: var(--cb-cb-muted); background: #f1f5f9; border: none; cursor: pointer; transition: background 0.15s, color 0.15s; } .cb-cb-pill:hover { color: var(--cb-cb-ink); background: #e2e8f0; } .cb-cb-pill.active { background: var(--cb-cb-ink); color: #fff; } .cb-cb-pill.done { background: #ecfdf5; color: #047857; } .cb-cb-pill-num { width: 1.35rem; height: 1.35rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 0.65rem; background: rgba(255, 255, 255, 0.25); } .cb-cb-pill:not(.active) .cb-cb-pill-num { background: #e2e8f0; color: #475569; } .cb-cb-pill.done .cb-cb-pill-num { background: #a7f3d0; color: #065f46; } .cb-cb-connector { width: 1.25rem; height: 2px; background: var(--cb-cb-border); flex-shrink: 0; } .cb-cb-card { background: var(--cb-cb-elevated); border-radius: 0.75rem; border: 1px solid var(--cb-cb-border); box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04); } .cb-cb-card-h { padding: 1rem 1.25rem; border-bottom: 1px solid var(--cb-cb-border); display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; } .cb-cb-card-b { padding: 1.25rem; } .cb-cb-type-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr)); gap: 0.5rem; } .cb-cb-type { display: flex; flex-direction: column; align-items: center; gap: 0.35rem; padding: 0.75rem 0.35rem; border-radius: 0.5rem; border: 2px solid transparent; background: #f8fafc; cursor: pointer; font-size: 0.65rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--cb-cb-muted); transition: border-color 0.15s, background 0.15s, color 0.15s; } .cb-cb-type:hover { background: #e0e7ff; color: #3730a3; } .cb-cb-type.selected { border-color: var(--cb-cb-accent); background: #0f172a; color: #fff; } .cb-cb-type--compact { width: auto; min-width: 90px; padding: 0.45rem 0.7rem; border-width: 1px; border-color: #dbe5f1; font-size: 0.72rem; } .cb-cb-type-ico { font-size: 1.25rem; line-height: 1; } .cb-cb-preview-host { min-height: 420px; background: linear-gradient(180deg, #f8fafc 0%, #fff 100%); border-radius: 0.5rem; border: 1px dashed var(--cb-cb-border); } .cb-cb-preview-card { position: sticky; top: calc(var(--topbar-height) + 14px); display: flex; flex-direction: column; } body.cb-cb-preview-fs-open { overflow: hidden; } .cb-cb-preview-card.cb-cb-preview-fullscreen { position: fixed !important; inset: 12px; z-index: 1300; top: 12px !important; width: auto !important; height: auto !important; max-height: none !important; background: #fff; box-shadow: 0 20px 60px rgba(15, 23, 42, 0.25); } .cb-cb-preview-card.cb-cb-preview-fullscreen .cb-cb-preview-host { min-height: calc(100vh - 150px); } .cb-cb-config-card { position: sticky; top: calc(var(--topbar-height) + 14px); display: flex; flex-direction: column; } .cb-cb-main-row > .col-lg-4, .cb-cb-main-row > .col-lg-8 { display: flex; } .cb-cb-main-row .cb-cb-config-card, .cb-cb-main-row .cb-cb-preview-card { width: 100%; height: calc(100vh - var(--topbar-height) - 90px); min-height: 680px; } .cb-cb-config-tabs { display: flex; gap: 6px; background: #fff; padding: 8px 10px 0; border-top-left-radius: 0.75rem; border-top-right-radius: 0.75rem; } .cb-cb-tab-btn { border: 1px solid transparent; border-bottom: 0; background: #f8fafc; color: #64748b; font-size: 12px; font-weight: 700; padding: 8px 14px; border-top-left-radius: 8px; border-top-right-radius: 8px; margin-bottom: -1px; } .cb-cb-tab-btn.active { color: #0f172a; background: #fff; border: 1px solid var(--cb-cb-border); border-bottom-color: #fff; box-shadow: inset 0 -1px 0 #fff; } .cb-cb-config-body { border-top: 1px solid var(--cb-cb-border); flex: 1 1 auto; min-height: 0; overflow: auto; } .cb-cb-preview-card .cb-cb-card-b { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; } .cb-cb-preview-card #cb-apex-preview { flex: 1 1 auto; min-height: 0; } .cb-cb-section { border: 1px solid #e7edf5; border-radius: 10px; padding: 12px; } .cb-cb-advanced-toggle { display: inline-flex; align-items: center; gap: 8px; border: 1px solid #d8e0eb; background: #f8fafc; color: #334155; border-radius: 8px; padding: 7px 12px; font-size: 12px; font-weight: 600; line-height: 1; } .cb-cb-advanced-toggle:hover { background: #eef2f7; border-color: #cbd5e1; } .cb-cb-advanced-toggle .material-symbols-outlined { font-size: 16px; } .cb-cb-query-compact { padding-top: 10px; padding-bottom: 10px; } .cb-cb-query-row { display: flex; gap: 12px; align-items: flex-end; } .cb-cb-query-main { flex: 1 1 auto; min-width: 240px; } .cb-cb-query-actions { display: inline-flex; align-items: center; gap: 10px; white-space: nowrap; } .cb-cb-var-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px; } .cb-cb-var-pill { display: flex; align-items: center; gap: 8px; min-height: 40px; padding: 4px 8px 4px 10px; border: 1px solid #dbe5f1; border-radius: 10px; background: #fff; transition: border-color 0.15s ease, box-shadow 0.15s ease; } .cb-cb-var-pill:focus-within { border-color: #93c5fd; box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15); } .cb-cb-var-key { flex: 0 0 auto; font-size: 12px; font-weight: 700; color: #334155; white-space: nowrap; max-width: 45%; overflow: hidden; text-overflow: ellipsis; } .cb-cb-var-input { flex: 1 1 auto; min-width: 60px; border: 0; outline: 0; background: transparent; font-size: 14px; color: #0f172a; padding: 0; } .cb-cb-var-input::placeholder { color: #94a3b8; } .cb-cb-var-pill.is-filled .cb-cb-var-input { color: #2563eb; font-weight: 600; } .cb-cb-var-clear { flex: 0 0 auto; width: 24px; height: 24px; border: 0; border-radius: 999px; background: transparent; color: #94a3b8; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; } .cb-cb-var-clear:hover { background: #eff6ff; color: #2563eb; } .cb-cb-var-clear .material-symbols-outlined { font-size: 16px; line-height: 1; } .cb-cb-hint { display: flex; gap: 0.75rem; padding: 0.9rem 1rem; border-radius: 0.5rem; background: #0f172a; color: #e2e8f0; font-size: 0.8125rem; line-height: 1.5; } .cb-cb-card .accordion-button { font-size: 0.86rem; font-weight: 600; } .cb-cb-card .accordion-button:not(.collapsed) { color: #0f172a; background: #f8fafc; } .cb-cb-card .accordion-item { border: 1px solid var(--cb-cb-border); border-radius: 0.6rem; overflow: hidden; } .cb-cb-fm-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); gap: 0.75rem; align-items: center; padding: 0.65rem 0; border-bottom: 1px solid #f1f5f9; } .cb-cb-fm-row:last-child { border-bottom: none; } .cb-cb-kpi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 1rem; } .cb-cb-kpi { text-align: center; padding: 1.25rem; background: #f8fafc; border-radius: 0.65rem; border: 1px solid var(--cb-cb-border); } .cb-cb-kpi-val { font-size: 1.65rem; font-weight: 800; letter-spacing: -0.02em; color: var(--cb-cb-ink); } .cb-cb-kpi-lbl { font-size: 0.7rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--cb-cb-muted); margin-top: 0.35rem; } .cb-cb-color-swatch { width: 100%; height: 2rem; padding: 0.12rem; border-radius: 999px; border: 1px solid #d6deea; cursor: pointer; background: #fff; } .cb-cb-color-swatch::-webkit-color-swatch-wrapper { padding: 0; border-radius: 999px; } .cb-cb-color-swatch::-webkit-color-swatch { border: none; border-radius: 999px; } .cb-cb-color-swatch::-moz-color-swatch { border: none; border-radius: 999px; } .cb-cb-swatch-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; } @media (max-width: 768px) { .cb-cb-fm-row { grid-template-columns: 1fr; } .cb-cb-preview-host { min-height: 320px; } .cb-cb-preview-card { position: static; top: auto; } .cb-cb-config-card { position: static; top: auto; } .cb-cb-main-row > .col-lg-5, .cb-cb-main-row > .col-lg-4, .cb-cb-main-row > .col-lg-8 { display: block; } .cb-cb-main-row .cb-cb-config-card, .cb-cb-main-row .cb-cb-preview-card { height: auto; } .cb-cb-config-body { max-height: none; overflow: visible; } .cb-cb-query-row { flex-wrap: wrap; align-items: stretch; } .cb-cb-query-actions { width: 100%; justify-content: flex-end; } } /* Ranked list (horizontal progress bars) */ .cb-ranked-progress { font-size: 13px; color: #0f172a; width: 100%; } .cb-ranked-progress--builder { padding: 4px 2px; } .cb-ranked-progress-title { font-weight: 700; font-size: 15px; margin-bottom: 4px; } .cb-ranked-progress-subtitle { margin-bottom: 12px; } .cb-ranked-row { display: grid; grid-template-columns: 10px minmax(72px, 1fr) minmax(80px, 3fr) auto; align-items: center; gap: 10px 12px; padding: 10px 0; border-bottom: 1px solid #e8ecf1; } .cb-ranked-row:last-of-type { border-bottom: none; } .cb-ranked-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; } .cb-ranked-label { font-weight: 600; color: #334155; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cb-ranked-bar-wrap { min-width: 0; } .cb-ranked-bar-track { height: 12px; border-radius: 999px; background: #e8ecf1; overflow: hidden; } .cb-ranked-bar-fill { height: 100%; border-radius: 999px; transition: width 0.25s ease; } .cb-ranked-val { font-variant-numeric: tabular-nums; font-weight: 700; color: #0f172a; text-align: right; min-width: 3ch; } .cb-ranked-footer { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; padding-top: 4px; } .cb-ranked-pill { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 999px; border: 1px solid #cbd5e1; background: #f8fafc; font-size: 12px; font-weight: 600; } .cb-ranked-pill-dot { width: 8px; height: 8px; border-radius: 50%; }