/* ─── Card container ─────────────────────────────────────────────────────── */ .tool-card { border: 1px solid var(--gray-200); border-left: 3px solid var(--primary); border-radius: 10px; overflow: hidden; background: var(--gray-50); margin-top: 8px; } .tool-card.loading { border-left-color: var(--gray-400); } .tool-card.error { border-left-color: #ef4444; } /* ─── Header (collapsed row) ─────────────────────────────────────────────── */ .tool-card-header { width: 100%; display: flex; align-items: center; gap: 8px; padding: 10px 14px; background: transparent; border: none; cursor: pointer; text-align: left; transition: background 0.15s; } .tool-card-header:hover:not(:disabled) { background: var(--gray-100); } .tool-card-header:disabled { cursor: default; } .tool-icon { font-size: 1rem; flex-shrink: 0; } .tool-label { flex: 1; font-size: 0.875rem; font-weight: 500; color: var(--gray-700); text-transform: capitalize; } .tool-status { font-size: 0.8125rem; flex-shrink: 0; } .tool-status.done { color: var(--success, #22c55e); font-weight: 600; } .tool-status.calling { color: var(--gray-500); display: flex; align-items: center; gap: 5px; } .tool-status.error-text { color: #ef4444; } .tool-header-summary { font-size: 0.8125rem; color: var(--gray-500); font-weight: 400; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px; } .tool-chevron { font-size: 0.625rem; color: var(--gray-400); margin-left: 2px; flex-shrink: 0; } /* ─── Spinner ────────────────────────────────────────────────────────────── */ .spinner { display: inline-block; width: 12px; height: 12px; border: 2px solid var(--gray-300); border-top-color: var(--gray-600); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ─── Card body ──────────────────────────────────────────────────────────── */ .tool-card-body { padding: 14px; border-top: 1px solid var(--gray-200); background: white; } /* ─── analyze_image ──────────────────────────────────────────────────────── */ .analyze-result { display: flex; flex-direction: column; gap: 12px; } .analyze-top { display: flex; gap: 14px; align-items: flex-start; } .analyze-thumb { width: 72px; height: 72px; object-fit: cover; border-radius: 8px; border: 1px solid var(--gray-200); flex-shrink: 0; } .analyze-info { flex: 1; min-width: 0; } .diagnosis-name { font-size: 0.9375rem; font-weight: 600; color: var(--gray-900); margin: 0 0 4px; line-height: 1.3; } .confidence-label { font-size: 0.8125rem; font-weight: 500; margin: 0 0 6px; } .confidence-bar-track { height: 6px; background: var(--gray-200); border-radius: 999px; overflow: hidden; } .confidence-bar-fill { height: 100%; border-radius: 999px; transition: width 0.3s ease; } .analyze-summary { font-size: 0.875rem; color: var(--gray-700); line-height: 1.6; margin: 0; border-top: 1px solid var(--gray-100); padding-top: 10px; white-space: pre-wrap; } .other-predictions { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; border-top: 1px solid var(--gray-100); padding-top: 10px; } .prediction-row { display: flex; justify-content: space-between; font-size: 0.8125rem; } .pred-name { color: var(--gray-600); } .pred-pct { color: var(--gray-500); font-variant-numeric: tabular-nums; } /* ─── compare_images ─────────────────────────────────────────────────────── */ .compare-result { display: flex; flex-direction: column; gap: 12px; } .carousel { position: relative; display: flex; align-items: center; justify-content: center; gap: 8px; } .carousel-image-wrap { position: relative; display: inline-block; } .carousel-image { width: 200px; height: 160px; object-fit: cover; border-radius: 10px; border: 1px solid var(--gray-200); display: block; } .carousel-label { position: absolute; bottom: 8px; left: 50%; transform: translateX(-50%); background: rgba(0, 0, 0, 0.55); color: white; font-size: 0.75rem; font-weight: 600; padding: 3px 10px; border-radius: 999px; white-space: nowrap; } .carousel-btn { background: white; border: 1px solid var(--gray-300); border-radius: 6px; width: 28px; height: 28px; cursor: pointer; font-size: 0.75rem; color: var(--gray-600); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .carousel-btn:hover { background: var(--gray-100); } .carousel-dots { position: absolute; bottom: -18px; left: 50%; transform: translateX(-50%); display: flex; gap: 5px; } .carousel-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--gray-300); cursor: pointer; transition: background 0.15s; } .carousel-dot.active { background: var(--primary); } .compare-status { font-size: 0.9375rem; margin-top: 6px; } .feature-changes { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; } .feature-row { display: flex; justify-content: space-between; font-size: 0.8125rem; } .feature-name { color: var(--gray-600); text-transform: capitalize; } .feature-delta { font-variant-numeric: tabular-nums; font-weight: 500; } .compare-summary { font-size: 0.875rem; color: var(--gray-600); line-height: 1.5; margin: 0; border-top: 1px solid var(--gray-100); padding-top: 10px; } /* ─── Generic fallback ───────────────────────────────────────────────────── */ .generic-result { font-size: 0.75rem; background: var(--gray-50); border-radius: 6px; padding: 10px; overflow-x: auto; color: var(--gray-700); margin: 0; white-space: pre-wrap; word-break: break-all; }