/* ========================================================================== Clinical Guideline Knowledge Graph Explorer - Modern Dark Theme ========================================================================== */ :root { --bg-dark: #070b14; --bg-surface: #0f172a; --bg-surface-elevated: #162036; --bg-card: rgba(22, 32, 54, 0.85); --border-subtle: #1e293b; --border-strong: #334155; --border-focus: #6366f1; --text-main: #f8fafc; --text-muted: #94a3b8; --text-faint: #64748b; --accent-primary: #6366f1; --accent-primary-hover: #4f46e5; --accent-emerald: #10b981; --accent-rose: #f43f5e; --accent-red: #ef4444; --accent-amber: #f59e0b; --accent-cyan: #06b6d4; --accent-purple: #a855f7; --radius-sm: 6px; --radius-md: 10px; --radius-lg: 14px; --radius-full: 9999px; --shadow-subtle: 0 4px 12px rgba(0, 0, 0, 0.35); --shadow-glow-red: 0 0 15px rgba(239, 68, 68, 0.35); --shadow-glow-indigo: 0 0 15px rgba(99, 102, 241, 0.35); --font-sans: 'Inter', system-ui, -apple-system, sans-serif; --font-display: 'Outfit', sans-serif; --font-mono: 'JetBrains Mono', monospace; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: var(--font-sans); background-color: var(--bg-dark); color: var(--text-main); line-height: 1.5; overflow-x: hidden; } /* Custom Scrollbars */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--bg-surface); } ::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: var(--radius-full); } ::-webkit-scrollbar-thumb:hover { background: var(--accent-primary); } /* App Container */ .app-container { display: flex; flex-direction: column; height: 100vh; overflow: hidden; } /* -------------------------------------------------------------------------- Header -------------------------------------------------------------------------- */ .app-header { display: flex; justify-content: space-between; align-items: center; padding: 0.75rem 1.5rem; background-color: rgba(15, 23, 42, 0.9); backdrop-filter: blur(12px); border-bottom: 1px solid var(--border-subtle); z-index: 20; } .brand-section { display: flex; align-items: center; gap: 0.85rem; } .logo-badge { position: relative; width: 44px; height: 44px; border-radius: var(--radius-md); background: linear-gradient(135deg, #1e1b4b, #312e81); border: 1px solid rgba(99, 102, 241, 0.4); display: flex; align-items: center; justify-content: center; font-size: 1.35rem; box-shadow: var(--shadow-glow-indigo); } .pulse-dot { position: absolute; top: 4px; right: 4px; width: 8px; height: 8px; background-color: var(--accent-emerald); border-radius: 50%; animation: pulse 2s infinite; } @keyframes pulse { 0% { transform: scale(0.9); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7); } 70% { transform: scale(1.1); box-shadow: 0 0 0 6px rgba(16, 185, 129, 0); } 100% { transform: scale(0.9); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); } } .brand-text h1 { font-family: var(--font-display); font-size: 1.25rem; font-weight: 700; letter-spacing: -0.02em; } .gradient-text { background: linear-gradient(135deg, #818cf8 0%, #38bdf8 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .brand-sub { font-size: 0.75rem; color: var(--text-muted); } .guideline-selector-wrapper { display: flex; align-items: flex-end; gap: 0.65rem; flex-wrap: wrap; } .selector-field { display: flex; flex-direction: column; gap: 0.25rem; } .selector-label-row { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; } .selector-label { font-size: 0.72rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); } .filtered-badge { font-size: 0.68rem; font-weight: 600; color: #38bdf8; background: rgba(56, 189, 248, 0.12); border: 1px solid rgba(56, 189, 248, 0.3); padding: 0.1rem 0.45rem; border-radius: var(--radius-full); } .select-dropdown-container { position: relative; } .source-container { min-width: 135px; } .speciality-container { min-width: 220px; } .guideline-container { min-width: 380px; } .filter-select, .guideline-select { width: 100%; padding: 0.52rem 1.8rem 0.52rem 0.75rem; background-color: var(--bg-surface-elevated); color: var(--text-main); border: 1px solid var(--border-strong); border-radius: var(--radius-md); font-size: 0.82rem; font-weight: 600; appearance: none; cursor: pointer; transition: all 0.2s ease; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .filter-select:hover, .guideline-select:hover { border-color: var(--accent-primary); background-color: rgba(30, 41, 59, 0.9); } .filter-select:focus, .guideline-select:focus { outline: none; border-color: var(--accent-primary); box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.25); } .filter-select option, .guideline-select option { background-color: #0f172a; color: #f1f5f9; padding: 8px 12px; } .select-chevron { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); pointer-events: none; color: var(--text-faint); font-size: 0.7rem; } /* -------------------------------------------------------------------------- KPI Metric Banner -------------------------------------------------------------------------- */ .kpi-banner { display: grid; grid-template-columns: repeat(5, 1fr); gap: 1rem; padding: 0.75rem 1.5rem; background-color: var(--bg-surface); border-bottom: 1px solid var(--border-subtle); } .kpi-card { display: flex; align-items: center; gap: 0.75rem; padding: 0.6rem 1rem; background-color: var(--bg-card); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); transition: transform 0.2s ease, border-color 0.2s ease; } .kpi-card:hover { transform: translateY(-1px); border-color: var(--border-strong); } .kpi-icon { font-size: 1.4rem; line-height: 1; } .kpi-info { display: flex; flex-direction: column; } .kpi-value { font-family: var(--font-display); font-size: 1.15rem; font-weight: 700; color: var(--text-main); } .kpi-label { font-size: 0.7rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; } .alert-card { border-color: rgba(239, 68, 68, 0.4); background: linear-gradient(135deg, rgba(30, 20, 30, 0.6), rgba(60, 20, 20, 0.6)); } .alert-card .kpi-value { color: #fca5a5; } .success-card .kpi-value { color: #86efac; } /* -------------------------------------------------------------------------- Main Workspace Layout -------------------------------------------------------------------------- */ .main-workspace { display: flex; flex: 1; overflow: hidden; position: relative; } /* Left Control Panel */ .control-panel { width: 320px; background-color: var(--bg-surface); border-right: 1px solid var(--border-subtle); display: flex; flex-direction: column; padding: 1rem; gap: 1rem; overflow-y: auto; z-index: 10; } /* View Switcher */ .view-switcher { display: flex; background-color: var(--bg-surface-elevated); border-radius: var(--radius-md); padding: 0.25rem; gap: 0.25rem; } .view-btn { flex: 1; padding: 0.45rem 0.5rem; border: none; background: transparent; color: var(--text-muted); font-size: 0.75rem; font-weight: 600; border-radius: var(--radius-sm); cursor: pointer; transition: all 0.2s ease; } .view-btn:hover { color: var(--text-main); } .view-btn.active { background-color: var(--accent-primary); color: #ffffff; box-shadow: 0 2px 8px rgba(99, 102, 241, 0.4); } /* Filter Section */ .filter-section { display: flex; flex-direction: column; gap: 0.6rem; background-color: var(--bg-card); padding: 0.75rem; border-radius: var(--radius-md); border: 1px solid var(--border-subtle); } .filter-header { display: flex; justify-content: space-between; align-items: center; } .section-title { font-size: 0.75rem; font-weight: 700; text-transform: uppercase; color: var(--text-muted); letter-spacing: 0.05em; } .reset-filter-btn { background: transparent; border: none; color: var(--accent-primary); font-size: 0.7rem; font-weight: 600; cursor: pointer; } .reset-filter-btn:hover { text-decoration: underline; } .dimension-tabs { display: flex; gap: 0.25rem; overflow-x: auto; } .dim-tab { padding: 0.3rem 0.6rem; background: transparent; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); color: var(--text-muted); font-size: 0.7rem; cursor: pointer; white-space: nowrap; } .dim-tab.active { border-color: var(--accent-primary); background-color: rgba(99, 102, 241, 0.15); color: #ffffff; } .filter-chips-container { display: flex; flex-wrap: wrap; gap: 0.35rem; max-height: 140px; overflow-y: auto; padding-right: 0.25rem; } .filter-chip { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.25rem 0.55rem; background-color: var(--bg-surface-elevated); border: 1px solid var(--border-subtle); border-radius: var(--radius-full); font-size: 0.7rem; color: var(--text-muted); cursor: pointer; transition: all 0.15s ease; } .filter-chip:hover { border-color: var(--border-strong); color: var(--text-main); } .filter-chip.active { background-color: rgba(99, 102, 241, 0.25); border-color: var(--accent-primary); color: #ffffff; font-weight: 600; } /* Search Bar */ .search-input-wrapper { position: relative; display: flex; align-items: center; } .search-icon { position: absolute; left: 10px; font-size: 0.8rem; color: var(--text-faint); } .search-input-wrapper input { width: 100%; padding: 0.5rem 2rem 0.5rem 2rem; background-color: var(--bg-surface-elevated); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); color: var(--text-main); font-size: 0.8rem; } .search-input-wrapper input:focus { outline: none; border-color: var(--accent-primary); } .clear-btn { position: absolute; right: 10px; background: transparent; border: none; color: var(--text-faint); font-size: 1rem; cursor: pointer; display: none; } /* Graph Toolbar */ .graph-toolbar { display: flex; flex-direction: column; gap: 0.4rem; } .tool-btn { padding: 0.45rem; background-color: var(--bg-surface-elevated); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); color: var(--text-main); font-size: 0.75rem; font-weight: 600; cursor: pointer; transition: all 0.2s ease; text-align: left; } .tool-btn:hover { border-color: var(--accent-primary); background-color: rgba(99, 102, 241, 0.1); } /* Legend */ .legend-container { margin-top: auto; padding: 0.75rem; background-color: var(--bg-card); border-radius: var(--radius-md); border: 1px solid var(--border-subtle); } .legend-title { display: block; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; color: var(--text-faint); margin-bottom: 0.5rem; } .legend-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem; font-size: 0.7rem; color: var(--text-muted); } .legend-item { display: flex; align-items: center; gap: 0.35rem; } .legend-color { width: 10px; height: 10px; border-radius: 2px; flex-shrink: 0; } /* -------------------------------------------------------------------------- Center Viewport & Canvas -------------------------------------------------------------------------- */ .viewport-container { flex: 1; position: relative; background-color: var(--bg-dark); overflow: hidden; } .view-panel { display: none; width: 100%; height: 100%; position: absolute; top: 0; left: 0; } .view-panel.active { display: block; } .network-canvas { width: 100%; height: 100%; } .graph-loading-overlay { position: absolute; inset: 0; background-color: rgba(7, 11, 20, 0.85); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1rem; z-index: 15; transition: opacity 0.3s ease; } .spinner { width: 36px; height: 36px; border: 3px solid var(--border-strong); border-top-color: var(--accent-primary); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* -------------------------------------------------------------------------- Table View Container -------------------------------------------------------------------------- */ #table-view { padding: 1.5rem; overflow-y: auto; } .table-header-bar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; } .table-title h3 { font-family: var(--font-display); font-size: 1.2rem; } .table-subtitle { font-size: 0.75rem; color: var(--text-muted); } .table-actions { display: flex; gap: 0.75rem; } .table-search { padding: 0.45rem 0.8rem; background-color: var(--bg-surface); border: 1px solid var(--border-strong); border-radius: var(--radius-md); color: var(--text-main); font-size: 0.8rem; min-width: 240px; } .export-btn { padding: 0.45rem 0.9rem; background-color: var(--accent-primary); color: #ffffff; border: none; border-radius: var(--radius-md); font-size: 0.8rem; font-weight: 600; cursor: pointer; transition: background 0.2s ease; } .export-btn:hover { background-color: var(--accent-primary-hover); } .table-responsive { overflow-x: auto; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background-color: var(--bg-surface); } .clinical-table { width: 100%; border-collapse: collapse; text-align: left; font-size: 0.8rem; } .clinical-table th, .clinical-table td { padding: 0.75rem 1rem; border-bottom: 1px solid var(--border-subtle); } .clinical-table th { background-color: var(--bg-surface-elevated); color: var(--text-muted); font-weight: 600; text-transform: uppercase; font-size: 0.7rem; letter-spacing: 0.05em; } .clinical-table tbody tr:hover { background-color: rgba(99, 102, 241, 0.08); } /* Badges */ .badge-modality { display: inline-block; padding: 0.2rem 0.5rem; border-radius: var(--radius-full); font-weight: 700; font-size: 0.65rem; text-transform: uppercase; } .badge-modality.RECOMMENDED { background-color: rgba(16, 185, 129, 0.2); color: #6ee7b7; border: 1px solid rgba(16, 185, 129, 0.4); } .badge-modality.CONTRAINDICATED { background-color: rgba(239, 68, 68, 0.2); color: #fca5a5; border: 1px solid rgba(239, 68, 68, 0.5); box-shadow: 0 0 8px rgba(239, 68, 68, 0.3); } .badge-modality.CONSIDER { background-color: rgba(99, 102, 241, 0.2); color: #a5b4fc; border: 1px solid rgba(99, 102, 241, 0.4); } .badge-modality.CAUTION { background-color: rgba(245, 158, 11, 0.2); color: #fcd34d; border: 1px solid rgba(245, 158, 11, 0.4); } .badge-grade { display: inline-block; padding: 0.15rem 0.45rem; border-radius: var(--radius-sm); background-color: var(--bg-surface-elevated); border: 1px solid var(--border-strong); font-weight: 600; font-size: 0.7rem; } .badge-code { font-family: var(--font-mono); font-size: 0.7rem; background-color: rgba(15, 23, 42, 0.8); padding: 0.1rem 0.35rem; border-radius: 3px; border: 1px solid var(--border-subtle); color: #38bdf8; display: inline-block; margin-top: 0.15rem; } .badge-code.verified { background: rgba(16, 185, 129, 0.15); border-color: rgba(16, 185, 129, 0.4); color: #34d399; } .badge-code.invalid { background: rgba(239, 68, 68, 0.15); border-color: rgba(239, 68, 68, 0.4); color: #f87171; } /* -------------------------------------------------------------------------- Analytics View -------------------------------------------------------------------------- */ #analytics-view { padding: 1.5rem; overflow-y: auto; } .analytics-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; } .analytics-card { background-color: var(--bg-surface); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 1.25rem; } .analytics-card h4 { font-family: var(--font-display); font-size: 0.95rem; margin-bottom: 1rem; color: var(--text-main); border-bottom: 1px solid var(--border-subtle); padding-bottom: 0.5rem; } .bar-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.6rem; font-size: 0.75rem; } .bar-label { width: 130px; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .bar-track { flex: 1; height: 10px; background-color: var(--bg-surface-elevated); border-radius: var(--radius-full); overflow: hidden; } .bar-fill { height: 100%; border-radius: var(--radius-full); transition: width 0.5s ease; } .bar-count { width: 40px; text-align: right; font-family: var(--font-mono); font-weight: 600; color: var(--text-main); } /* -------------------------------------------------------------------------- Right Slide-Over Inspector Drawer (Deep Clinical Provenance) -------------------------------------------------------------------------- */ .inspector-drawer { width: 420px; background-color: rgba(15, 23, 42, 0.95); backdrop-filter: blur(16px); border-left: 1px solid var(--border-subtle); display: flex; flex-direction: column; position: absolute; right: 0; top: 0; bottom: 0; z-index: 30; transform: translateX(100%); transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1); box-shadow: -8px 0 24px rgba(0, 0, 0, 0.5); } .inspector-drawer.open { transform: translateX(0); } .drawer-header { display: flex; justify-content: space-between; align-items: flex-start; padding: 1.25rem; border-bottom: 1px solid var(--border-subtle); } .drawer-title-group { display: flex; flex-direction: column; gap: 0.35rem; max-width: 85%; } .drawer-title-group h3 { font-family: var(--font-display); font-size: 1.1rem; line-height: 1.3; } .badge { display: inline-block; padding: 0.15rem 0.5rem; border-radius: var(--radius-full); font-size: 0.65rem; font-weight: 700; text-transform: uppercase; background-color: var(--accent-primary); color: #ffffff; width: fit-content; } .close-drawer-btn { background: transparent; border: none; color: var(--text-faint); font-size: 1.5rem; line-height: 1; cursor: pointer; transition: color 0.15s ease; } .close-drawer-btn:hover { color: var(--text-main); } .drawer-tabs { display: flex; background-color: var(--bg-surface-elevated); border-bottom: 1px solid var(--border-subtle); } .drawer-tab { flex: 1; padding: 0.6rem 0.5rem; background: transparent; border: none; color: var(--text-muted); font-size: 0.75rem; font-weight: 600; cursor: pointer; border-bottom: 2px solid transparent; transition: all 0.2s ease; } .drawer-tab.active { color: #ffffff; border-bottom-color: var(--accent-primary); } .drawer-body { flex: 1; padding: 1.25rem; overflow-y: auto; } .drawer-tab-content { display: none; } .drawer-tab-content.active { display: block; } .detail-block { margin-bottom: 1rem; } .detail-block label { display: block; font-size: 0.7rem; font-weight: 600; text-transform: uppercase; color: var(--text-faint); margin-bottom: 0.35rem; } .clinical-q-box { font-weight: 600; font-size: 0.85rem; color: #e2e8f0; background-color: var(--bg-surface-elevated); padding: 0.6rem 0.8rem; border-radius: var(--radius-md); border-left: 3px solid var(--accent-primary); } .verbatim-quote-box { font-size: 0.825rem; color: #f1f5f9; background-color: rgba(30, 41, 59, 0.5); padding: 0.75rem; border-radius: var(--radius-md); border: 1px solid var(--border-subtle); line-height: 1.6; } .meta-row { display: flex; gap: 1.5rem; margin-bottom: 1rem; } .meta-item label { display: block; font-size: 0.7rem; color: var(--text-faint); margin-bottom: 0.25rem; } .grade-pill, .modality-pill { display: inline-block; padding: 0.2rem 0.6rem; border-radius: var(--radius-sm); font-weight: 700; font-size: 0.75rem; background-color: var(--bg-surface-elevated); border: 1px solid var(--border-strong); } .entity-list { display: flex; flex-direction: column; gap: 0.5rem; } .entity-card-item { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0.75rem; background-color: var(--bg-surface-elevated); border-radius: var(--radius-md); border: 1px solid var(--border-subtle); font-size: 0.8rem; } .ontology-card, .provenance-trail-card { background-color: var(--bg-surface-elevated); border-radius: var(--radius-md); border: 1px solid var(--border-subtle); padding: 0.75rem; display: flex; flex-direction: column; gap: 0.6rem; } .ontology-row, .prov-row { display: flex; justify-content: space-between; align-items: center; font-size: 0.75rem; } .onto-label, .prov-label { color: var(--text-faint); } .onto-val, .prov-val { color: var(--text-main); text-align: right; } .bold { font-weight: 600; } .code-val { font-family: var(--font-mono); background-color: rgba(0, 0, 0, 0.3); padding: 0.1rem 0.4rem; border-radius: 3px; color: #38bdf8; } .truncate { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .badge-vocab { font-weight: 700; padding: 0.15rem 0.45rem; border-radius: var(--radius-sm); background-color: rgba(99, 102, 241, 0.2); color: #818cf8; } .badge-page { font-weight: 700; padding: 0.1rem 0.45rem; border-radius: var(--radius-sm); background-color: rgba(16, 185, 129, 0.2); color: #6ee7b7; } .ocr-snippet-box { font-family: var(--font-mono); font-size: 0.75rem; line-height: 1.5; background-color: rgba(0, 0, 0, 0.4); padding: 0.75rem; border-radius: var(--radius-md); border: 1px dashed var(--border-strong); color: #cbd5e1; } /* -------------------------------------------------------------------------- Active Learning & Self-Healing Hub in Header -------------------------------------------------------------------------- */ .header-actions { display: flex; align-items: center; gap: 1.25rem; } .active-learning-hub { display: flex; align-items: center; gap: 0.75rem; background-color: rgba(15, 23, 42, 0.65); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 0.35rem 0.65rem 0.35rem 0.85rem; backdrop-filter: blur(10px); } .al-badge { display: flex; align-items: center; gap: 0.5rem; font-size: 0.78rem; color: var(--text-muted); } .al-badge .pulse-dot { position: static; display: inline-block; flex-shrink: 0; width: 8px; height: 8px; } .al-badge strong { color: #38bdf8; font-family: var(--font-mono); } .pulse-dot.green { background-color: #10b981; box-shadow: 0 0 10px #10b981; } .pulse-dot.amber { background-color: #f59e0b; box-shadow: 0 0 10px #f59e0b; animation: pulse-amber 2s infinite; } @keyframes pulse-amber { 0% { transform: scale(0.9); box-shadow: 0 0 0 0 rgba(245, 158, 11, 0.7); } 70% { transform: scale(1.1); box-shadow: 0 0 0 6px rgba(245, 158, 11, 0); } 100% { transform: scale(0.9); box-shadow: 0 0 0 0 rgba(245, 158, 11, 0); } } .btn-retrain { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.4rem 0.75rem; background: linear-gradient(135deg, rgba(99, 102, 241, 0.25), rgba(168, 85, 247, 0.25)); border: 1px solid rgba(139, 92, 246, 0.4); border-radius: var(--radius-md); color: #c084fc; font-family: var(--font-body); font-size: 0.78rem; font-weight: 600; cursor: pointer; transition: all var(--transition-fast); } .btn-retrain:hover { background: linear-gradient(135deg, rgba(99, 102, 241, 0.4), rgba(168, 85, 247, 0.4)); border-color: #a855f7; color: #ffffff; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(168, 85, 247, 0.25); } .btn-retrain.up-to-date { background: linear-gradient(135deg, rgba(16, 185, 129, 0.15), rgba(5, 150, 105, 0.18)); border-color: rgba(16, 185, 129, 0.45); color: #34d399; } .btn-retrain.up-to-date:hover { background: linear-gradient(135deg, rgba(16, 185, 129, 0.25), rgba(5, 150, 105, 0.3)); border-color: #10b981; color: #ffffff; box-shadow: 0 4px 12px rgba(16, 185, 129, 0.25); } .btn-heal-concept { display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; width: 100%; padding: 0.65rem 1rem; background: linear-gradient(135deg, rgba(56, 189, 248, 0.15), rgba(99, 102, 241, 0.2)); border: 1px solid rgba(56, 189, 248, 0.35); border-radius: var(--radius-md); color: #38bdf8; font-family: var(--font-body); font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: all var(--transition-fast); } .btn-heal-concept:hover { background: linear-gradient(135deg, rgba(56, 189, 248, 0.3), rgba(99, 102, 241, 0.35)); border-color: #38bdf8; color: #ffffff; box-shadow: 0 4px 14px rgba(56, 189, 248, 0.25); } /* -------------------------------------------------------------------------- Live Online API Verification Card -------------------------------------------------------------------------- */ .online-verification-card { margin-top: 1.25rem; background: rgba(15, 23, 42, 0.75); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 0.9rem; backdrop-filter: blur(8px); } .verify-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.65rem; border-bottom: 1px solid rgba(255, 255, 255, 0.06); padding-bottom: 0.45rem; } .verify-title { font-size: 0.8rem; font-weight: 700; color: var(--text-primary); display: flex; align-items: center; gap: 0.35rem; } .verify-status-badge { font-size: 0.72rem; font-weight: 600; padding: 0.18rem 0.5rem; border-radius: 9999px; background: rgba(100, 116, 139, 0.2); color: var(--text-muted); transition: all var(--transition-fast); } .verify-status-badge.green { background: rgba(16, 185, 129, 0.18); border: 1px solid rgba(16, 185, 129, 0.4); color: #34d399; } .verify-status-badge.red { background: rgba(239, 68, 68, 0.18); border: 1px solid rgba(239, 68, 68, 0.4); color: #f87171; } .verify-status-badge.amber { background: rgba(245, 158, 11, 0.18); border: 1px solid rgba(245, 158, 11, 0.4); color: #fbbf24; } .verify-status-badge.loading { background: rgba(56, 189, 248, 0.18); border: 1px solid rgba(56, 189, 248, 0.4); color: #38bdf8; animation: pulse-amber 1.5s infinite; } .verify-detail-row { display: flex; justify-content: space-between; font-size: 0.76rem; margin-bottom: 0.35rem; gap: 0.5rem; } .verify-k { color: var(--text-muted); flex-shrink: 0; } .verify-v { color: var(--text-primary); text-align: right; word-break: break-word; font-family: var(--font-body); } .verify-v.highlight { color: #38bdf8; font-weight: 600; } .verify-actions { display: flex; align-items: center; justify-content: space-between; margin-top: 0.65rem; padding-top: 0.45rem; border-top: 1px solid rgba(255, 255, 255, 0.06); } .btn-reverify { padding: 0.25rem 0.6rem; font-size: 0.72rem; font-weight: 600; background: rgba(56, 189, 248, 0.12); border: 1px solid rgba(56, 189, 248, 0.3); border-radius: var(--radius-sm); color: #38bdf8; cursor: pointer; transition: all var(--transition-fast); } .btn-reverify:hover { background: rgba(56, 189, 248, 0.25); border-color: #38bdf8; color: #ffffff; } /* -------------------------------------------------------------------------- Modal Dialog & Concept Healing Form -------------------------------------------------------------------------- */ .modal-overlay { position: fixed; inset: 0; background-color: rgba(3, 7, 18, 0.82); backdrop-filter: blur(8px); display: flex; align-items: center; justify-content: center; z-index: 1000; transition: opacity 0.2s ease; } .modal-overlay.hidden { opacity: 0; pointer-events: none; } .modal-dialog { width: 90%; max-width: 580px; background: linear-gradient(165deg, #111827, #0b0f19); border: 1px solid var(--border-strong); border-radius: var(--radius-xl); box-shadow: 0 25px 60px -15px rgba(0, 0, 0, 0.8), 0 0 30px rgba(56, 189, 248, 0.15); display: flex; flex-direction: column; overflow: hidden; animation: modalEnter 0.25s cubic-bezier(0.16, 1, 0.3, 1); } @keyframes modalEnter { from { opacity: 0; transform: scale(0.95) translateY(10px); } to { opacity: 1; transform: scale(1) translateY(0); } } .modal-header { padding: 1.25rem 1.5rem; display: flex; justify-content: space-between; align-items: flex-start; border-bottom: 1px solid var(--border-subtle); background-color: rgba(15, 23, 42, 0.4); } .modal-title-wrap { display: flex; gap: 0.75rem; align-items: center; } .modal-icon { font-size: 1.6rem; } .modal-header h3 { font-family: var(--font-display); font-size: 1.15rem; color: var(--text-main); } .modal-sub { font-size: 0.75rem; color: var(--text-faint); margin-top: 0.15rem; } .btn-modal-close { background: none; border: none; color: var(--text-muted); font-size: 1.4rem; line-height: 1; cursor: pointer; padding: 0.2rem 0.4rem; border-radius: 4px; } .btn-modal-close:hover { color: var(--text-main); background-color: rgba(255, 255, 255, 0.08); } .modal-body { padding: 1.5rem; display: flex; flex-direction: column; gap: 1.15rem; max-height: 70vh; overflow-y: auto; } .heal-current-box { background-color: rgba(15, 23, 42, 0.5); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 0.75rem 1rem; display: flex; flex-direction: column; gap: 0.4rem; font-size: 0.8rem; } .heal-row { display: flex; justify-content: space-between; align-items: center; } .heal-label { color: var(--text-faint); } .heal-mention { color: #38bdf8; font-size: 0.88rem; } .search-input-wrap { position: relative; } .form-group { display: flex; flex-direction: column; gap: 0.4rem; } .form-group label { font-size: 0.75rem; font-weight: 500; color: var(--text-muted); } .form-group input, .form-group select { padding: 0.55rem 0.85rem; background-color: rgba(15, 23, 42, 0.7); border: 1px solid var(--border-strong); border-radius: var(--radius-md); color: var(--text-main); font-family: var(--font-body); font-size: 0.82rem; transition: border-color var(--transition-fast); } .form-group input:focus, .form-group select:focus { outline: none; border-color: var(--accent-primary); box-shadow: 0 0 0 2px rgba(56, 189, 248, 0.2); } .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } .suggestions-list { max-height: 140px; overflow-y: auto; background-color: rgba(10, 15, 26, 0.95); border: 1px solid var(--border-strong); border-radius: var(--radius-md); margin-top: 0.35rem; display: none; } .suggestions-list.active { display: block; } .suggestion-item { padding: 0.5rem 0.75rem; font-size: 0.78rem; border-bottom: 1px solid rgba(255, 255, 255, 0.05); cursor: pointer; display: flex; justify-content: space-between; align-items: center; transition: background-color var(--transition-fast); } .suggestion-item:hover { background-color: rgba(56, 189, 248, 0.15); } .sugg-term { color: var(--text-main); font-weight: 500; } .sugg-code { font-family: var(--font-mono); color: #38bdf8; font-size: 0.72rem; } .modal-footer { padding: 1rem 1.5rem; border-top: 1px solid var(--border-subtle); background-color: rgba(15, 23, 42, 0.3); display: flex; justify-content: flex-end; gap: 0.75rem; } .btn-primary { padding: 0.55rem 1.25rem; background: linear-gradient(135deg, #0284c7, #2563eb); color: #ffffff; border: none; border-radius: var(--radius-md); font-weight: 600; font-size: 0.82rem; cursor: pointer; transition: all var(--transition-fast); } .btn-primary:hover { background: linear-gradient(135deg, #0369a1, #1d4ed8); box-shadow: 0 4px 14px rgba(37, 99, 235, 0.35); transform: translateY(-1px); } .btn-secondary { padding: 0.55rem 1rem; background-color: rgba(255, 255, 255, 0.06); color: var(--text-muted); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); font-size: 0.82rem; cursor: pointer; transition: background-color var(--transition-fast); } .btn-secondary:hover { background-color: rgba(255, 255, 255, 0.12); color: var(--text-main); }