/* AegisSight Studio - NotebookLM-artiges 3-Spalten-Layout Nutzt ausschliesslich die Design-Tokens aus style.css (Navy/Gold). */ .studio { display: flex; flex-direction: column; height: 100vh; background: var(--bg-primary); color: var(--text-primary); } /* === Kopfzeile === */ .studio-top { display: flex; align-items: center; gap: var(--sp-lg); padding: var(--sp-md) var(--sp-xl); background: var(--bg-topbar); border-bottom: 1px solid var(--border); flex-shrink: 0; min-height: 52px; } .studio-brand { font-family: var(--font-title); font-weight: 700; font-size: 16px; letter-spacing: 0.5px; white-space: nowrap; } .studio-brand span { color: var(--accent); } /* Kopfzeile: Knopf zum Anlegen (an der Stelle des frueheren Dropdowns) + Titel des Falls */ .studio-new-btn { flex-shrink: 0; } .studio-incident-title { font-family: var(--font-title); font-weight: 600; font-size: 14px; color: var(--text-primary); max-width: 460px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .studio-type-badge { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 3px 8px; border-radius: var(--radius); background: var(--tint-accent); color: var(--accent); white-space: nowrap; } .studio-type-badge.type-research { background: var(--tint-info); color: var(--info); } .studio-btn { background: var(--accent); color: #fff; border: none; border-radius: var(--radius); padding: 7px 14px; font-family: var(--font-body); font-size: 13px; font-weight: 600; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; transition: background 0.15s; } .studio-btn:hover { background: var(--accent-hover); } .studio-btn:disabled { opacity: 0.5; cursor: not-allowed; } .studio-btn-ghost { background: transparent; color: var(--text-secondary); border: 1px solid var(--border); } .studio-btn-ghost:hover { background: var(--bg-hover); color: var(--text-primary); } /* Pipeline-Statusstreifen */ .studio-status { display: none; align-items: center; gap: 8px; font-size: 12px; color: var(--text-secondary); background: var(--tint-accent-subtle); border: 1px solid var(--tint-accent); border-radius: var(--radius); padding: 4px 10px; max-width: 360px; overflow: hidden; } .studio-status.active { display: flex; } .studio-status .mini-spinner { width: 12px; height: 12px; border: 2px solid var(--tint-accent); border-top-color: var(--accent); border-radius: 50%; animation: studio-spin 0.8s linear infinite; flex-shrink: 0; } .studio-status-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .studio-status-timer { font-family: var(--font-mono); font-size: 11px; color: var(--text-disabled); } @keyframes studio-spin { to { transform: rotate(360deg); } } .studio-top-right { margin-left: auto; display: flex; align-items: center; gap: var(--sp-md); } /* Reine Textlinks in der Kopfzeile. Links, die als Knopf auftreten (.btn), bleiben ausgenommen, sonst ueberschreibt die Farbe hier die Knopf-Optik. */ .studio-top-right a:not(.btn) { color: var(--text-secondary); font-size: 12px; text-decoration: none; } .studio-top-right a:not(.btn):hover { color: var(--accent); } /* === 3 Spalten === */ .studio-cols { position: relative; /* Bezug fuer die Hinweis-Auflage (.studio-empty) */ flex: 1; display: grid; grid-template-columns: 300px 1fr 320px; gap: 1px; background: var(--border); min-height: 0; } .studio-col { background: var(--bg-primary); display: flex; flex-direction: column; min-height: 0; overflow: hidden; } .studio-col-artifacts { background: var(--bg-secondary); } .studio-col-center { position: relative; } /* Bezug fuer das Startpanel (.start-panel) */ /* === Linke Spalte: Reiter "Fälle" / "Quellen" === */ .left-tabs { display: flex; flex-shrink: 0; border-bottom: 1px solid var(--border); } .left-tab { flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px; white-space: nowrap; padding: var(--sp-lg) var(--sp-md); background: none; border: none; border-bottom: 2px solid transparent; cursor: pointer; font-family: var(--font-title); font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: 0.8px; color: var(--text-secondary); transition: color .15s, border-color .15s, background .15s; } .left-tab:hover { background: var(--bg-hover); color: var(--text-primary); } .left-tab.active { color: var(--accent); border-bottom-color: var(--accent); } .left-tab .lt-count { font-family: var(--font-body); font-weight: 500; font-size: 11px; text-transform: none; letter-spacing: 0; color: var(--text-disabled); } .left-pane { display: flex; flex-direction: column; min-height: 0; flex: 1; overflow: hidden; } .left-pane[hidden] { display: none; } /* "Alle" / "Eigene" ueber der Fall-Liste. Nutzt die Knopf-Optik der klassischen Seitenleiste (.sidebar-filter-btn aus style.css), braucht hier aber den Innenabstand der Studio-Spalte statt des Seitenleisten-Abstands. */ .case-scope { padding: var(--sp-md) var(--sp-xl) 0; margin-bottom: 0; flex-shrink: 0; } /* Fall-Liste (ersetzt das Dropdown in der Kopfzeile) */ .case-group { display: flex; align-items: center; gap: 6px; width: 100%; padding: var(--sp-lg) var(--sp-md) var(--sp-sm); background: none; border: none; font-size: 10px; text-transform: uppercase; letter-spacing: .06em; color: var(--text-disabled); text-align: left; } .case-group span { color: var(--text-disabled); opacity: .8; } .case-group-toggle { cursor: pointer; } .case-group-toggle:hover { color: var(--text-secondary); } .case-group-toggle svg { transition: transform .15s; } .case-group-toggle.open svg { transform: rotate(90deg); } .case-item { display: flex; align-items: stretch; border: 1px solid var(--border); border-radius: var(--radius-md, 6px); background: var(--bg-card); margin-bottom: 4px; overflow: hidden; transition: border-color .15s, background .15s; } .case-item:hover { border-color: var(--accent); } .case-item.active { border-color: var(--accent); background: var(--tint-accent-faint); } .case-open { flex: 1; min-width: 0; display: flex; align-items: center; gap: 8px; padding: 8px 10px; background: none; border: none; cursor: pointer; text-align: left; color: var(--text-primary); font-family: var(--font-body); font-size: 12.5px; } .case-item.active .case-open { color: var(--accent); font-weight: 600; } .case-title { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .case-count { flex-shrink: 0; font-size: 10.5px; color: var(--text-disabled); } /* === Startpanel: frisch angelegter Fall, der Nutzer entscheidet aktiv === */ .start-panel { position: absolute; inset: 0; z-index: 6; display: flex; align-items: center; justify-content: center; padding: var(--sp-xl); background: var(--bg-primary); overflow-y: auto; } .start-panel[hidden] { display: none; } .sp-inner { width: 100%; max-width: 560px; } .sp-head { margin-bottom: var(--sp-xl); text-align: center; } .sp-title { font-family: var(--font-title); font-weight: 700; font-size: 19px; color: var(--text-primary); } .sp-sub { margin-top: 4px; font-size: 13px; color: var(--text-secondary); } .sp-warn { display: flex; align-items: flex-start; gap: var(--sp-md); padding: var(--sp-md) var(--sp-lg); margin-bottom: var(--sp-lg); border: 1px solid var(--warning); border-radius: var(--radius-md, 6px); background: var(--tint-warning); color: var(--warning); font-size: 12px; line-height: 1.45; } .sp-warn[hidden] { display: none; } .sp-warn svg { flex-shrink: 0; margin-top: 1px; } .sp-options { display: flex; flex-direction: column; gap: var(--sp-md); } .sp-opt { display: flex; align-items: flex-start; gap: var(--sp-lg); width: 100%; padding: var(--sp-lg); background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; cursor: pointer; text-align: left; color: var(--text-primary); font-family: var(--font-body); transition: border-color .15s, background .15s, transform .08s; } .sp-opt:hover { border-color: var(--accent); background: var(--bg-hover); } .sp-opt:active { transform: translateY(1px); } .sp-opt:disabled { opacity: .45; cursor: not-allowed; } .sp-ico { flex-shrink: 0; display: inline-flex; color: var(--accent); margin-top: 2px; } .sp-text { min-width: 0; } .sp-name { display: block; font-family: var(--font-title); font-weight: 600; font-size: 13.5px; margin-bottom: 3px; } .sp-desc { display: block; font-size: 12px; color: var(--text-secondary); line-height: 1.45; } /* Rueckfrage-Dialog (ersetzt das Browser-confirm) */ .modal.modal-confirm { max-width: 460px; } .confirm-list { list-style: none; margin: 0 0 var(--sp-lg); padding: var(--sp-md) var(--sp-lg); background: var(--bg-elevated); border: 1px solid var(--border); border-radius: var(--radius-md, 6px); max-height: 190px; overflow-y: auto; } .confirm-list li { font-size: 12.5px; color: var(--text-primary); padding: 3px 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .confirm-list li.cd-more { color: var(--text-disabled); font-style: italic; } .confirm-warn { font-size: 13px; color: var(--text-primary); margin-bottom: var(--sp-md); } .confirm-warn strong { color: var(--danger, #EF4444); } .confirm-hint { font-size: 12px; color: var(--text-disabled); } /* Mehrfachauswahl. Achtung: .col-actions setzt display:flex und wuerde das hidden-Attribut ueberstimmen - deshalb hier explizit ausblenden. */ #case-select-row[hidden] { display: none; } .case-check { flex-shrink: 0; display: flex; align-items: center; padding: 0 2px 0 8px; cursor: pointer; } .case-check input { cursor: pointer; accent-color: var(--accent); } .case-item.picked { border-color: var(--accent); background: var(--tint-accent); } .case-sel-hint { font-size: 11px; color: var(--accent); } .bulk-bar { flex-shrink: 0; display: flex; flex-direction: column; gap: var(--sp-md); padding: var(--sp-lg); border-top: 1px solid var(--border); background: var(--bg-secondary); } .bulk-bar[hidden] { display: none; } .bulk-count { font-family: var(--font-title); font-weight: 600; font-size: 12px; color: var(--text-primary); } .bulk-actions { display: flex; flex-wrap: wrap; gap: var(--sp-sm); } .btn-bulk { flex: 1; min-width: 84px; padding: 6px 10px; border-radius: var(--radius-md, 6px); border: 1px solid var(--border); background: var(--bg-card); color: var(--text-primary); font-family: var(--font-body); font-size: 11.5px; font-weight: 600; cursor: pointer; transition: border-color .15s, background .15s, color .15s; } .btn-bulk:hover { border-color: var(--accent); color: var(--accent); } .btn-bulk[hidden] { display: none; } .btn-bulk.danger { color: var(--danger, #EF4444); } .btn-bulk.danger:hover { border-color: var(--danger, #EF4444); background: var(--tint-error, rgba(239,68,68,.12)); } .btn-bulk.ghost { color: var(--text-disabled); font-weight: 500; } .btn-bulk.ghost:hover { color: var(--text-primary); border-color: var(--border); } .case-menu-btn { flex-shrink: 0; width: 28px; display: flex; align-items: center; justify-content: center; background: none; border: none; border-left: 1px solid var(--border); color: var(--text-disabled); cursor: pointer; } .case-menu-btn:hover { color: var(--accent); background: var(--bg-hover); } .case-menu { position: fixed; z-index: 300; min-width: 170px; padding: 4px; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg, 8px); box-shadow: 0 8px 28px rgba(0,0,0,.28); } .case-menu button { display: block; width: 100%; padding: 7px 10px; background: none; border: none; border-radius: var(--radius-md, 6px); text-align: left; cursor: pointer; font-family: var(--font-body); font-size: 12.5px; color: var(--text-primary); } .case-menu button:hover { background: var(--bg-hover); } .case-menu button.danger { color: var(--danger, #EF4444); } .case-menu button.danger:hover { background: var(--tint-error, rgba(239,68,68,.12)); } .col-head { display: flex; align-items: center; gap: 8px; padding: var(--sp-lg) var(--sp-xl); font-family: var(--font-title); font-weight: 600; font-size: 13px; text-transform: uppercase; letter-spacing: 0.8px; color: var(--text-secondary); border-bottom: 1px solid var(--border); flex-shrink: 0; } .col-head .col-count { margin-left: auto; font-size: 11px; font-weight: 500; letter-spacing: 0; text-transform: none; color: var(--text-disabled); } .col-body { flex: 1; overflow-y: auto; padding: var(--sp-lg) var(--sp-xl); min-height: 0; } /* === Spalte 1: Quellen === */ .col-actions { display: flex; align-items: center; gap: 8px; padding: var(--sp-md) var(--sp-xl); border-bottom: 1px solid var(--border); flex-shrink: 0; } .col-actions label { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-secondary); cursor: pointer; } .col-actions input[type="checkbox"] { accent-color: var(--accent); cursor: pointer; } .col-actions .spacer { margin-left: auto; } .ingest-add-btn { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; padding: 4px 10px; } /* --- Quellen-Ingest: Dropzone + Job-Liste --- */ .ingest-panel { padding: var(--sp-md) var(--sp-xl); border-bottom: 1px solid var(--border); flex-shrink: 0; } .dropzone { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; text-align: center; padding: 16px 12px; border: 1.5px dashed var(--border); border-radius: 10px; color: var(--text-secondary); cursor: pointer; transition: border-color .15s, background .15s; } .dropzone:hover, .dropzone.drag { border-color: var(--accent); background: var(--bg-hover); } .dropzone .dz-icon { color: var(--accent); } .dropzone .dz-hint { font-size: 12.5px; color: var(--text-primary); } .dropzone .dz-sub { font-size: 11px; color: var(--text-disabled); } .ingest-url { display: flex; gap: 6px; margin-top: 8px; } .ingest-url input { flex: 1; min-width: 0; font-size: 12px; padding: 6px 10px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg-card); color: var(--text-primary); } .ingest-url input:focus { outline: none; border-color: var(--accent); } .ingest-jobs { flex-shrink: 0; overflow-y: auto; max-height: 40%; padding: 0 var(--sp-xl); } .ingest-jobs:not(:empty) { padding-top: var(--sp-sm); padding-bottom: var(--sp-sm); border-bottom: 1px solid var(--border); } .ju-group { margin-bottom: 8px; } .ju-group-head { display: flex; align-items: center; gap: 6px; font-size: 11px; font-weight: 600; letter-spacing: .02em; color: var(--text-secondary); text-transform: uppercase; margin: 4px 0; } .ju-group-head .ju-count { margin-left: auto; background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 0 6px; font-weight: 500; text-transform: none; } .ju-item { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 7px 9px; margin-bottom: 5px; } .ju-item.error { border-color: var(--danger, #d9534f); } .ju-row { display: flex; align-items: center; gap: 6px; } .ju-name { flex: 1; min-width: 0; font-size: 12.5px; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .ju-del { background: none; border: none; color: var(--text-disabled); font-size: 16px; line-height: 1; cursor: pointer; padding: 0 2px; } .ju-del:hover { color: var(--danger, #d9534f); } .ju-bar { height: 4px; background: var(--bg-hover); border-radius: 3px; overflow: hidden; margin-top: 6px; } .ju-bar span { display: block; height: 100%; background: var(--accent); transition: width .4s ease; } .ju-stage { font-size: 10.5px; color: var(--text-disabled); margin-top: 3px; } .ju-err { font-size: 11px; color: var(--danger, #d9534f); margin-top: 4px; } .ju-actions { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; } .ju-btn { font-size: 11px; padding: 3px 9px; border-radius: 12px; border: 1px solid var(--border); background: var(--bg-elevated, var(--bg-card)); color: var(--text-secondary); cursor: pointer; text-decoration: none; } .ju-btn:hover { border-color: var(--accent); color: var(--accent); } .ju-media:not(:empty) { margin-top: 6px; } .ju-text { font-size: 12px; line-height: 1.5; color: var(--text-secondary); background: var(--bg-hover); border-radius: 8px; padding: 8px 10px; max-height: 220px; overflow-y: auto; white-space: normal; } /* Kategorie-Gliederung der regulären Quellenliste (Webseiten/Dokumente/…) */ .src-cat { margin-bottom: 2px; } .src-cat-head { display: flex; align-items: center; gap: 6px; padding: 10px var(--sp-xl) 4px; font-size: 11px; font-weight: 600; letter-spacing: .03em; text-transform: uppercase; color: var(--text-secondary); cursor: pointer; user-select: none; } .src-cat-head:hover { color: var(--text-primary); } .src-cat-head svg.src-cat-icon, .src-cat-head > svg:not(.src-cat-chevron) { color: var(--accent); } .src-cat-head .src-cat-count { margin-left: auto; color: var(--text-disabled); font-weight: 500; } .src-cat-chevron { color: var(--text-disabled); transition: transform .15s ease; flex-shrink: 0; } .src-cat.collapsed .src-cat-chevron { transform: rotate(-90deg); } .src-cat.collapsed .src-item { display: none; } .src-upload { display: flex; flex-direction: column; gap: 4px; } .src-upload .ju-actions { margin-top: 2px; } .ju-btn-del { color: var(--text-disabled); } .ju-btn-del:hover { border-color: var(--danger, #d9534f); color: var(--danger, #d9534f); } /* Historie (frühere Lageberichte / Faktencheck-Läufe, aufklappbar) */ .hist-item { border: 1px solid var(--border); border-radius: 8px; margin-bottom: 6px; background: var(--bg-card); } .hist-item > summary { list-style: none; cursor: pointer; padding: 8px 10px; display: flex; align-items: center; gap: 10px; font-size: 12.5px; } .hist-item > summary::-webkit-details-marker { display: none; } .hist-item > summary::before { content: "\25B8"; color: var(--text-disabled); transition: transform .15s; font-size: 11px; } .hist-item[open] > summary::before { transform: rotate(90deg); } .hist-time { color: var(--text-primary); font-weight: 600; } .hist-meta { color: var(--text-disabled); margin-left: auto; } .hist-body { padding: 4px 12px 12px; } .hist-prev { font-size: 12px; color: var(--text-secondary); line-height: 1.5; } .fc-history { margin-top: 14px; border-top: 1px solid var(--border); padding-top: 10px; } .fc-history > summary { cursor: pointer; font-size: 12px; font-weight: 600; color: var(--text-secondary); list-style: none; padding: 2px 0; } .fc-history > summary::-webkit-details-marker { display: none; } .fc-history > summary::before { content: "\25B8 "; color: var(--text-disabled); } .fc-history[open] > summary::before { content: "\25BE "; } .fc-history-body { margin-top: 8px; } /* Quellen-Suchfeld (oberster Punkt der Quellen-Spalte) */ .src-search { display: flex; align-items: center; gap: 8px; padding: var(--sp-md) var(--sp-xl); border-bottom: 1px solid var(--border); flex-shrink: 0; } .src-search-icon { display: inline-flex; align-items: center; color: var(--text-disabled); flex-shrink: 0; } .src-search input { flex: 1; min-width: 0; background: var(--input-bg); border: 1px solid var(--input-border); border-radius: var(--radius); color: var(--text-primary); font-family: var(--font-body); font-size: 13px; padding: 7px 10px; } .src-search input:focus { outline: none; border-color: var(--accent); } .src-item.filtered-out { display: none; } .src-item { border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 6px; background: var(--bg-card); overflow: hidden; } .src-item.deselected { opacity: 0.45; } .src-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; cursor: pointer; } .src-head:hover { background: var(--bg-hover); } .src-check { accent-color: var(--accent); cursor: pointer; flex-shrink: 0; } .src-name { font-size: 13px; font-weight: 500; color: var(--text-primary); flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .src-count { font-size: 11px; color: var(--text-disabled); background: var(--bg-elevated); border-radius: 10px; padding: 1px 7px; flex-shrink: 0; } .src-badges { display: flex; align-items: center; gap: 4px; flex-shrink: 0; } .src-lang { font-size: 10px; color: var(--text-disabled); flex-shrink: 0; } .src-articles { display: none; border-top: 1px solid var(--border); padding: 4px 10px 8px; } .src-item.open .src-articles { display: block; } .src-article { display: block; font-size: 12px; color: var(--text-secondary); padding: 4px 0; text-decoration: none; border-bottom: 1px solid var(--tint-hover-subtle); line-height: 1.4; } .src-article:last-child { border-bottom: none; } .src-article:hover { color: var(--accent); } .src-article .src-article-date { color: var(--text-disabled); font-size: 10px; margin-right: 6px; } /* Quelle beim Zitat-Klick hervorheben */ .src-item.cite-flash { animation: cite-flash 1.6s ease; border-color: var(--accent); } @keyframes cite-flash { 0%, 30% { box-shadow: 0 0 0 2px var(--accent), var(--glow-accent); } 100% { box-shadow: none; } } /* Reliability-/Bias-Badges (Wiederverwendung der style.css-Klassen, hier nur Ausrichtung) */ .src-badges .source-reliability-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; } .src-badges .source-political-badge, .src-badges .source-ifcn-badge, .src-badges .source-eu-disinfo-badge, .src-badges .source-state-badge, .src-badges .source-alignment-chip-badge { font-size: 9px; } /* === Spalte 2: Konversation === */ .chat-messages { flex: 1; overflow-y: auto; padding: var(--sp-lg) var(--sp-xl); display: flex; flex-direction: column; gap: var(--sp-lg); min-height: 0; } .chat-msg { max-width: 92%; } .chat-msg-user { align-self: flex-end; background: var(--accent); color: #fff; border-radius: 12px 12px 2px 12px; padding: 8px 12px; font-size: 13px; line-height: 1.5; } .chat-msg-assistant { align-self: flex-start; background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px 12px 12px 2px; padding: 10px 14px; font-size: 13px; line-height: 1.6; color: var(--text-primary); } .chat-msg-assistant.pinned { border-color: var(--tint-accent); background: var(--tint-accent-faint); max-width: 100%; align-self: stretch; } .chat-msg-assistant .briefing-content { font-size: 13px; } .chat-pin-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.6px; color: var(--accent); font-weight: 600; margin-bottom: 6px; } .chat-cite { display: inline-block; color: var(--accent); font-weight: 600; cursor: pointer; font-size: 11px; vertical-align: super; padding: 0 1px; } .chat-cite:hover { text-decoration: underline; } .chat-thinking { color: var(--text-disabled); font-style: italic; font-size: 12px; } .chat-suggestions { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 var(--sp-xl) var(--sp-md); flex-shrink: 0; } .chat-chip { background: var(--bg-card); border: 1px solid var(--border); color: var(--text-secondary); border-radius: 14px; padding: 5px 12px; font-size: 12px; cursor: pointer; white-space: nowrap; } .chat-chip:hover { border-color: var(--accent); color: var(--accent); } .chat-scope { display: flex; align-items: center; gap: 6px; padding: 0 var(--sp-xl) var(--sp-sm); font-size: 12px; color: var(--text-disabled); cursor: pointer; user-select: none; flex-shrink: 0; } .chat-scope input { accent-color: var(--accent); cursor: pointer; margin: 0; } .chat-scope:hover { color: var(--text-secondary); } .chat-scope.on { color: var(--accent); } .chat-input-row { display: flex; gap: 8px; padding: var(--sp-md) var(--sp-xl) var(--sp-lg); border-top: 1px solid var(--border); flex-shrink: 0; } .chat-input-row textarea { flex: 1; resize: none; background: var(--input-bg); border: 1px solid var(--input-border); border-radius: var(--radius-lg); color: var(--text-primary); font-family: var(--font-body); font-size: 13px; padding: 10px 12px; max-height: 120px; line-height: 1.5; } .chat-input-row textarea:focus { outline: none; border-color: var(--accent); } .chat-send { align-self: flex-end; background: var(--accent); color: #fff; border: none; border-radius: var(--radius-lg); width: 40px; height: 40px; font-size: 16px; cursor: pointer; flex-shrink: 0; } .chat-send:hover { background: var(--accent-hover); } .chat-send:disabled { opacity: 0.5; cursor: not-allowed; } /* === Spalte 2: Mitte = Tab-Panel (oben) + Konversation (unten) === */ .studio-col-center { min-height: 0; } /* Tab-Panel: nur sichtbar, wenn mindestens ein Studio-Teil geoeffnet ist */ .center-tabs { display: none; flex-direction: column; min-height: 0; } .studio-col-center.has-tabs .center-tabs { display: flex; flex: 1 1 auto; min-height: 120px; } .center-tabbar { display: flex; align-items: flex-end; gap: 4px; padding: 6px 8px 0; overflow-x: auto; flex-shrink: 0; background: var(--bg-topbar); border-bottom: 1px solid var(--border); box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.35); position: relative; z-index: 1; } .center-tab { display: inline-flex; align-items: center; gap: 8px; padding: 7px 8px 7px 12px; border: 1px solid var(--border); border-top: 2px solid transparent; border-bottom: none; border-radius: var(--radius) var(--radius) 0 0; background: var(--bg-secondary); color: var(--text-secondary); font-family: var(--font-title); font-size: 12px; font-weight: 600; white-space: nowrap; cursor: pointer; max-width: 210px; margin-bottom: 0; transition: background 0.15s, color 0.15s; } .center-tab:hover { background: var(--bg-hover); color: var(--text-primary); } .center-tab .ct-icon { display: inline-flex; align-items: center; color: var(--accent); flex-shrink: 0; } .center-tab .ct-icon svg { width: 14px; height: 14px; } .center-tab .ct-title { overflow: hidden; text-overflow: ellipsis; } .center-tab.active { color: var(--text-primary); background: var(--bg-primary); border-color: var(--border); border-top: 2px solid var(--accent); margin-bottom: -1px; /* verbindet den aktiven Tab mit dem Inhalt darunter */ } /* Drag&Drop-Umsortierung */ .center-tab.dragging-tab { opacity: 0.45; } .center-tab.drop-before { box-shadow: inset 2px 0 0 var(--accent); } .center-tab.drop-after { box-shadow: inset -2px 0 0 var(--accent); } .center-tab-close { display: inline-flex; align-items: center; justify-content: center; width: 17px; height: 17px; border-radius: 4px; color: var(--text-disabled); flex-shrink: 0; } .center-tab-close:hover { background: var(--bg-hover); color: var(--text-primary); } .center-tab-content { flex: 1; min-height: 0; display: flex; background: var(--bg-primary); } .tab-panel { display: none; flex: 1; min-height: 0; overflow-y: auto; padding: var(--sp-xl); font-size: 13px; line-height: 1.7; } .tab-panel.active { display: block; } .tab-panel[data-art="map"] { padding: 0; } /* Grosszuegigere Abstaende, damit Bericht/Zusammenfassung nicht gequetscht wirken */ .tab-panel h3, .tab-panel .briefing-heading { margin: 18px 0 8px; font-size: 14px; } .tab-panel > *:first-child, .tab-panel .briefing-content > *:first-child { margin-top: 0; } .tab-panel ul { margin: 10px 0 14px 20px; } .tab-panel li { margin-bottom: 7px; } .tab-panel p { margin: 10px 0; } /* Verschiebbare Trennung zwischen Tab-Panel und Konversation */ .center-divider { display: none; flex: 0 0 12px; height: 12px; align-items: center; justify-content: center; cursor: row-resize; background: var(--bg-secondary); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); touch-action: none; flex-shrink: 0; } .studio-col-center.has-tabs .center-divider { display: flex; } .center-divider::before { content: ""; width: 44px; height: 3px; border-radius: 3px; background: var(--text-disabled); opacity: 0.55; transition: background 0.15s, opacity 0.15s; } .center-divider:hover::before, .center-divider.dragging::before { background: var(--accent); opacity: 1; } /* Konversation unten (immer sichtbar) */ .chat-region { display: flex; flex-direction: column; min-height: 0; flex: 1 1 auto; } .studio-col-center.has-tabs .chat-region { flex: 0 0 var(--chat-h, 42%); min-height: 150px; } /* === Spalte 3: Studio-Menue (oeffnet Tabs in der Mitte) === */ .studio-menu { padding: var(--sp-md); } .studio-menu-item { display: flex; align-items: center; gap: 10px; width: 100%; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 10px 12px; margin-bottom: 8px; cursor: pointer; text-align: left; color: var(--text-primary); font-family: var(--font-body); transition: background 0.15s, border-color 0.15s; } .studio-menu-item:hover { background: var(--bg-hover); border-color: var(--accent); } .studio-menu-item.open { border-color: var(--tint-accent); } .studio-menu-item.active { border-color: var(--accent); background: var(--tint-accent-faint); } .studio-menu-item .mi-icon { flex-shrink: 0; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center; color: var(--accent); } .studio-menu-item .mi-title { flex: 1; min-width: 0; font-family: var(--font-title); font-weight: 600; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .studio-menu-item .mi-meta { font-size: 11px; color: var(--text-disabled); flex-shrink: 0; } /* === Spalte 3: Artefakt-Karten (Ergebnis UND Erzeuger in einem Element) === Klick auf den Kopf oeffnet das Ergebnis in der Mitte, das Symbol rechts rechnet es neu, die Zeile darunter meldet den Datenstand (aktuell / veraltet / laeuft). */ @keyframes st-spin { to { transform: rotate(360deg); } } /* Kompletter Lauf: orchestriert alles, daher als Primaerknopf ueber den Karten */ .run-all { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; padding: 9px 12px; margin-bottom: 12px; border-radius: var(--radius-md, 6px); border: 1px solid var(--accent); background: var(--accent); color: #fff; font-family: var(--font-title); font-weight: 600; font-size: 12.5px; cursor: pointer; transition: background .15s, opacity .15s; } .run-all:hover:not(:disabled) { background: var(--accent-hover); } .run-all:disabled { opacity: .45; cursor: not-allowed; } /* display:flex wuerde das hidden-Attribut ueberstimmen - explizit ausblenden */ .run-all[hidden] { display: none; } .run-all .ra-icon { display: inline-flex; } .run-all .ra-state { display: none; } .run-all.running .ra-icon { display: none; } .run-all.running .ra-state { display: inline-flex; align-items: center; gap: 6px; font-weight: 400; font-size: 11.5px; } .run-all.running .ra-state::before { content: ''; width: 11px; height: 11px; flex-shrink: 0; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: st-spin .8s linear infinite; } /* Die Karte selbst */ .art-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; margin-bottom: 8px; overflow: hidden; transition: border-color .15s; } .art-card:hover { border-color: var(--accent); } .art-card:has(.studio-menu-item.active) { border-color: var(--accent); } .art-card.busy { border-color: var(--accent); } .art-card-soon { opacity: .6; } .art-row { display: flex; align-items: stretch; } /* Kartenkopf: uebernimmt die Rolle des alten Menue-Eintrags, aber ohne eigenen Rahmen */ .studio-menu .art-head { flex: 1; min-width: 0; display: flex; align-items: center; gap: 10px; padding: 10px var(--sp-lg); margin: 0; background: none; border: none; border-radius: 0; text-align: left; cursor: pointer; color: var(--text-primary); font-family: var(--font-body); } .studio-menu .art-head:hover { background: var(--bg-hover); } .studio-menu .art-head.active { background: var(--tint-accent-faint); } .studio-menu .art-head-static { cursor: default; } .studio-menu .art-head-static:hover { background: none; } .art-head .mi-icon { flex-shrink: 0; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center; color: var(--accent); } .art-head .mi-text { flex: 1; min-width: 0; } .art-head .mi-title { display: block; font-family: var(--font-title); font-weight: 600; font-size: 13px; line-height: 1.25; white-space: normal; overflow: visible; text-overflow: clip; } .art-head .mi-meta { display: block; margin-top: 1px; font-size: 10.5px; color: var(--text-disabled); } /* Erzeuger-Aktion (rechnet das Ergebnis neu) */ .art-run { flex-shrink: 0; width: 36px; display: flex; align-items: center; justify-content: center; background: none; border: none; border-left: 1px solid var(--border); color: var(--text-disabled); cursor: pointer; transition: color .15s, background .15s; } .art-run:hover:not(:disabled) { color: var(--accent); background: var(--bg-hover); } .art-run:disabled { opacity: .35; cursor: not-allowed; } /* Datenstand-Zeile */ .art-note { display: none; align-items: center; gap: var(--sp-md); padding: 7px var(--sp-lg); border-top: 1px solid var(--border); font-size: 11px; line-height: 1.35; } .art-note.show { display: flex; } .art-note.fresh { background: var(--tint-success); color: var(--success); } .art-note.stale { background: var(--tint-warning); color: var(--warning); } .art-note.blocked { background: var(--bg-elevated); color: var(--text-disabled); } .art-note.running { background: var(--tint-accent); color: var(--accent); } .art-note .an-spin { width: 11px; height: 11px; flex-shrink: 0; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: st-spin .8s linear infinite; } .art-note button { margin-left: auto; white-space: nowrap; padding: 3px 9px; font-size: 10.5px; font-weight: 600; border-radius: var(--radius-md, 6px); border: 1px solid currentColor; background: transparent; color: inherit; cursor: pointer; font-family: var(--font-body); } .art-note button:hover { background: var(--tint-hover-subtle); } /* Unter-Ansichten: gehoeren zum selben Erzeuger (Analyse) */ .art-subs { border-top: 1px solid var(--border); } .studio-menu .art-sub { display: flex; align-items: center; gap: 8px; width: 100%; padding: 6px var(--sp-lg); margin: 0; background: none; border: none; border-radius: 0; cursor: pointer; text-align: left; color: var(--text-secondary); font-family: var(--font-body); font-size: 11.5px; } .studio-menu .art-sub:hover { background: var(--bg-hover); color: var(--text-primary); } .studio-menu .art-sub.active { background: var(--tint-accent-faint); color: var(--accent); } .art-sub .mi-icon { flex-shrink: 0; color: var(--text-disabled); display: inline-flex; } .art-sub.active .mi-icon { color: var(--accent); } .art-sub .mi-title { flex: 1; min-width: 0; font-family: var(--font-body); font-weight: 500; font-size: 11.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .art-sub .mi-meta { flex-shrink: 0; font-size: 10px; color: var(--text-disabled); } /* Export: Ausgabe-Aktion, kein Artefakt -> Fusszeile */ .art-foot { margin-top: var(--sp-lg); padding-top: var(--sp-lg); border-top: 1px solid var(--border); } .studio-menu .art-export { justify-content: center; gap: 8px; margin-bottom: 0; padding: 8px; font-size: 12px; } .art-export .mi-title { font-family: var(--font-body); font-weight: 600; font-size: 12px; flex: 0 0 auto; } .art-export .mi-icon { color: var(--accent); display: inline-flex; } /* "Sammeln" in der Quellenspalte (sein Ergebnis landet dort) */ .collect-btn:disabled { opacity: .45; cursor: not-allowed; } .collect-btn.running .cb-label { display: none; } .collect-btn.running::after { content: 'Sammelt …'; display: inline-flex; align-items: center; } /* Karten-Container fuellt den Karte-Tab */ #map-container { width: 100%; height: 100%; min-height: 320px; overflow: hidden; } #map-empty { display: none; align-items: center; justify-content: center; height: 120px; color: var(--text-disabled); font-size: 13px; } /* Timeline (schlank) */ .tl-item { padding: 6px 0; border-bottom: 1px solid var(--tint-hover-subtle); font-size: 12px; } .tl-item:last-child { border-bottom: none; } .tl-time { color: var(--text-disabled); font-size: 11px; margin-right: 8px; font-family: var(--font-mono); } .tl-item a { color: var(--text-secondary); text-decoration: none; } .tl-item a:hover { color: var(--accent); } /* Aktivitaets-/Ereignis-Timeline (in Untersektionen gegliedert) */ .ev-section { border-bottom: 1px solid var(--border); } .ev-section:last-child { border-bottom: none; } .ev-section-head { display: flex; align-items: center; gap: 8px; padding: 10px 2px; cursor: pointer; user-select: none; list-style: none; } .ev-section-head::-webkit-details-marker { display: none; } .ev-section-head:hover .ev-section-title { color: var(--accent); } .ev-section-icon { display: inline-flex; align-items: center; color: var(--accent); flex-shrink: 0; } .ev-section-icon svg { width: 16px; height: 16px; } .ev-section-title { flex: 1; font-family: var(--font-title); font-weight: 600; font-size: 13px; color: var(--text-primary); } .ev-section-count { font-size: 11px; color: var(--text-disabled); background: var(--bg-elevated); border-radius: 10px; padding: 1px 8px; flex-shrink: 0; } .ev-section-head::after { content: "\25B8"; display: inline-block; color: var(--text-secondary); font-size: 10px; transition: transform 0.15s; } .ev-section[open] .ev-section-head::after { transform: rotate(90deg); } .ev-section-body { padding: 2px 0 10px 6px; } /* Sektions-Akzente (Icon-Farbe je Typ) */ .sec-refresh .ev-section-icon { color: var(--info); } .sec-source_change .ev-section-icon { color: var(--success); } .sec-article_ingest .ev-section-icon { color: var(--text-secondary); } /* Einzel-Ereignis (kompakt: Zeit links, Inhalt rechts) */ .ev-item { display: flex; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--tint-hover-subtle); } .ev-item:last-child { border-bottom: none; } .ev-time { font-size: 11px; color: var(--text-disabled); font-family: var(--font-mono); flex-shrink: 0; min-width: 78px; padding-top: 1px; } .ev-main { flex: 1; min-width: 0; } .ev-title { font-size: 12px; line-height: 1.5; color: var(--text-primary); word-break: break-word; } .ev-title a { color: var(--text-secondary); text-decoration: none; } .ev-title a:hover { color: var(--accent); text-decoration: underline; } .ev-src { font-size: 11px; color: var(--text-disabled); margin-top: 2px; } /* Q&A: ausklappbare Antwort */ .ev-answer { margin-top: 6px; } .ev-answer summary { cursor: pointer; font-size: 12px; color: var(--accent); list-style: none; user-select: none; } .ev-answer summary::-webkit-details-marker { display: none; } .ev-answer summary::before { content: "\25B8 "; } .ev-answer[open] summary::before { content: "\25BE "; } .ev-answer-body { margin-top: 6px; padding: 8px 10px; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); font-size: 12px; line-height: 1.6; color: var(--text-secondary); } /* Faktencheck im Tab */ .tab-panel .factcheck-item { padding: 8px 0; border-bottom: 1px solid var(--tint-hover-subtle); } .tab-panel .factcheck-item:last-child { border-bottom: none; } /* Export-Karte */ .export-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; } .export-row select { background: var(--input-bg); color: var(--text-primary); border: 1px solid var(--input-border); border-radius: var(--radius); padding: 6px 10px; font-size: 12px; } /* Empty / Leerzustaende */ /* Ohne offenen Fall: Mitte + rechte Spalte bleiben SICHTBAR, nur ausgegraut und nicht bedienbar. Der Hinweis liegt als Auflage darueber (Spalte 1 bleibt aktiv). */ .studio-cols.idle .studio-col-center, .studio-cols.idle .studio-col-artifacts { opacity: .32; filter: grayscale(.55); pointer-events: none; user-select: none; } .studio-empty { position: absolute; top: 0; bottom: 0; left: 301px; /* rechts neben der Fall-Liste (300px + 1px Fuge) */ right: 321px; /* und links neben der Bausteine-Spalte (320px + 1px Fuge), sonst sitzt der Hinweis sichtbar zu weit rechts */ z-index: 5; display: flex; align-items: center; justify-content: center; padding: var(--sp-xl); pointer-events: none; /* nur Hinweis, faengt keine Klicks ab */ } .se-box { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 22px 28px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 12px 34px rgba(0, 0, 0, .28); color: var(--text-secondary); font-size: 14px; text-align: center; max-width: 340px; } .se-box svg { color: var(--accent); } .tab-panel .empty-hint { color: var(--text-disabled); font-size: 12px; } /* === Responsiv === */ @media (max-width: 1100px) { .studio-cols { grid-template-columns: 1fr; grid-auto-rows: minmax(0, 1fr); } .studio-col { max-height: 60vh; } /* Gestapelte Spalten: der Hinweis nimmt die volle Breite */ .studio-empty { left: 0; right: 0; } } /* Fall-Chat: Recherche-Angebot des Analysten (Phase 3) */ .chat-offer{margin-top:10px;padding:12px 14px;border:1px solid var(--studio-border,#8aa0c022);border-radius:10px;background:var(--studio-panel-2,rgba(120,140,180,.08));font-size:13px;} .chat-offer-title{font-weight:600;margin-bottom:4px;} .chat-offer-text{opacity:.85;margin-bottom:8px;line-height:1.45;} .chat-offer-label{display:block;font-size:12px;opacity:.7;margin-bottom:4px;} .chat-offer-add{width:100%;box-sizing:border-box;resize:vertical;font:inherit;padding:6px 8px;border:1px solid var(--studio-border,#8aa0c033);border-radius:8px;background:rgba(127,127,127,.06);color:inherit;margin-bottom:6px;} .chat-offer-focus{font-size:12px;opacity:.7;margin-bottom:8px;} .chat-offer-btn{cursor:pointer;} .chat-offer-btn:disabled{opacity:.6;cursor:default;}