.app-area-graph { overflow: hidden; } .obsidian-graph { box-sizing: border-box; position: relative; width: 100%; height: 100%; min-width: 0; min-height: 0; padding: var(--panel-inset); color: var(--text-primary); background: transparent; overflow: hidden; } .obsidian-graph-surface { display: block; width: 100%; height: 100%; min-height: 0; touch-action: none; cursor: grab; user-select: none; } .obsidian-graph-surface:active { cursor: grabbing; } .obsidian-graph-edges line { stroke: var(--graph-edge); stroke-width: 1; vector-effect: non-scaling-stroke; transition: stroke .12s ease, stroke-width .12s ease; } .obsidian-node { color: var(--graph-technique); cursor: pointer; outline: none; } .obsidian-node-selection-ring { fill: none; stroke: var(--graph-selected); stroke-width: 3; opacity: 1; vector-effect: non-scaling-stroke; pointer-events: none; filter: none; } .obsidian-node-branch-ring { fill: none; stroke: var(--graph-selected); stroke-width: 2; opacity: .82; vector-effect: non-scaling-stroke; pointer-events: none; } .obsidian-node.is-branch-muted { opacity: .42; } .obsidian-graph-edges line.is-branch-path { stroke: var(--graph-selected); stroke-width: 2; opacity: 1; } .obsidian-graph-edges line.is-branch-muted { opacity: .2; } .obsidian-node.is-selection-muted { opacity: .48; transition: opacity .14s ease; } .obsidian-node.is-selection-muted:hover, .obsidian-node.is-selection-muted:focus-visible { opacity: 1; } .obsidian-graph-edges line.is-selection-muted { opacity: .24; } .obsidian-node-role-ring { fill: none; stroke: currentColor; stroke-width: 1.5; opacity: .72; vector-effect: non-scaling-stroke; pointer-events: none; } .obsidian-node-core { fill: currentColor; stroke: var(--surface-app); stroke-width: 1.5; vector-effect: non-scaling-stroke; transition: filter .12s ease, stroke .12s ease; } .obsidian-node-finding { color: var(--graph-finding); } .obsidian-node-finding.severity-critical { color: var(--critical); } .obsidian-node-finding.severity-high { color: var(--high); } .obsidian-node-finding.severity-medium { color: var(--medium); } .obsidian-node-finding.severity-low { color: var(--low); } .obsidian-node-finding.severity-info { color: var(--info); } .obsidian-node-finding.severity-unknown { color: var(--graph-unknown); } .obsidian-node-category, .obsidian-node-defense, .obsidian-node-target, .obsidian-node-technique, .obsidian-node-tactic { color: var(--graph-relation); } .obsidian-node:hover .obsidian-node-core, .obsidian-node:focus-visible .obsidian-node-core { filter: brightness(1.25); stroke: var(--graph-selected); } .obsidian-node:hover .obsidian-node-role-ring, .obsidian-node:focus-visible .obsidian-node-role-ring { opacity: 1; stroke-width: 2; } .obsidian-node.is-selected .obsidian-node-core { stroke: var(--graph-selected); stroke-width: 2.5; } .obsidian-node.is-selected .obsidian-node-role-ring { opacity: 1; stroke: var(--graph-selected); stroke-width: 2; } .obsidian-graph-card-connectors { pointer-events: none; } .obsidian-graph-card-connectors line { vector-effect: non-scaling-stroke; } .obsidian-card-connector-backdrop { stroke: color-mix(in srgb, var(--surface-app) 88%, var(--pathfinder-micro-connector-backdrop-mix)); stroke-width: 5; opacity: .9; } .obsidian-card-connector { stroke: var(--graph-selected); stroke-width: 2; } .obsidian-card-connector-anchor { fill: var(--graph-selected); stroke: color-mix(in srgb, var(--surface-app) 88%, var(--pathfinder-micro-connector-backdrop-mix)); stroke-width: 1.5; vector-effect: non-scaling-stroke; } .obsidian-node-inline-label { fill: var(--text-secondary); stroke: var(--surface-app); stroke-width: 3px; paint-order: stroke fill; font-size: var(--fs-lg); font-weight: var(--fw-medium); letter-spacing: .01em; pointer-events: none; } .obsidian-node-category .obsidian-node-inline-label, .obsidian-node-defense .obsidian-node-inline-label, .obsidian-node-target .obsidian-node-inline-label, .obsidian-node-tactic .obsidian-node-inline-label { fill: var(--text-primary); font-weight: var(--fw-semibold); } .obsidian-node-card-wrap { overflow: visible; pointer-events: auto; cursor: grab; touch-action: none; } .obsidian-node-card-wrap:active { cursor: grabbing; } .obsidian-node-matrix-card-wrap { overflow: visible; } .obsidian-node-matrix-card { width: 100%; height: 100%; } .obsidian-node-matrix-card .data-tile-content { display: grid; grid-template-rows: auto minmax(0, 1fr); min-height: 0; overflow: hidden; } .obsidian-node-matrix-card .data-tile { box-sizing: border-box; width: 100%; height: 100%; min-height: 0; grid-template-columns: 18px minmax(0, 1fr) 18px; gap: var(--space-2); padding: var(--space-3); overflow: hidden; } .obsidian-node-matrix-card .data-tile-hex { width: 18px; height: 20px; } .obsidian-node-matrix-card .data-tile-content h3 { display: -webkit-box; overflow: hidden; font-size: var(--pathfinder-micro-title-size); line-height: 1.2; -webkit-box-orient: vertical; -webkit-line-clamp: 5; } .obsidian-node-matrix-card .data-tile-badges { flex-wrap: wrap; gap: var(--space-1); margin-top: var(--space-1); min-height: 0; max-height: none; align-content: start; overflow: hidden; } .obsidian-node-matrix-card .data-tile-badges > * { flex: 0 1 auto; min-width: 0; max-width: 100%; height: auto; min-height: 20px; padding: 0 3px; overflow: visible; font-size: var(--pathfinder-micro-badge-size); line-height: 1.1; overflow-wrap: anywhere; white-space: normal; } .obsidian-node-matrix-card .tile-badge-overflow { justify-content: center; } .obsidian-node-matrix-card .data-tile-actions { align-self: start; gap: 2px; } .obsidian-node-matrix-card .tile-bookmark-btn, .obsidian-node-matrix-card .tile-results-btn { width: 18px; height: 18px; } .obsidian-node-card.data-tile { box-sizing: border-box; width: 100%; height: 100%; min-height: 0; grid-template-columns: 26px minmax(0, 1fr); gap: var(--legacy-space-3); padding: var(--legacy-space-3); overflow: hidden; cursor: pointer; } .obsidian-node-card-technique .data-tile-hex, .obsidian-node-card-category .data-tile-hex, .obsidian-node-card-defense .data-tile-hex, .obsidian-node-card-target .data-tile-hex, .obsidian-node-card-tactic .data-tile-hex { background: var(--graph-relation); } .obsidian-node-card .data-tile-content h3 { display: -webkit-box; overflow: hidden; font-size: var(--pathfinder-micro-title-size); line-height: 1.3; overflow-wrap: normal; word-break: normal; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .obsidian-node-card-technique .data-tile-content h3, .obsidian-node-card-tactic .data-tile-content h3 { -webkit-line-clamp: 3; } .obsidian-node-card .data-tile-badges { gap: var(--legacy-space-1) var(--legacy-space-2); margin-top: var(--legacy-space-2); } .obsidian-node-card .reader-severity { min-height: 20px; padding: 2px var(--legacy-space-1); font-size: var(--pathfinder-micro-relation-badge-size); } .obsidian-node-card .outcome-mark { flex-basis: 100%; } .obsidian-node.is-selected .obsidian-node-card { border-color: var(--graph-selected); outline: var(--bw-emphasis) solid var(--graph-selected); outline-offset: -2px; } .obsidian-graph-card.is-selected .obsidian-node-card, .obsidian-graph-card.is-selected .obsidian-node-matrix-card .data-tile { border-color: var(--graph-selected); outline: 3px solid var(--graph-selected); outline-offset: -3px; } .obsidian-graph-toolbar, .obsidian-graph-filters, .obsidian-graph-inspector, .obsidian-graph-zoom { position: absolute; z-index: 5; border: var(--bw-hairline) solid var(--border-default); border-radius: var(--radius-md); color: var(--text-primary); background: color-mix(in srgb, var(--surface-panel-raised) 94%, transparent); backdrop-filter: blur(var(--space-2)); } .obsidian-graph-toolbar { top: var(--space-4); left: 50%; display: flex; align-items: end; gap: var(--space-2); max-width: calc(100% - var(--space-8) * 2); padding: var(--space-2); transform: translateX(-50%); } .obsidian-graph-search { display: grid; gap: var(--space-1); min-width: calc(var(--space-8) * 8); color: var(--text-secondary); font-size: var(--fs-sm); } .obsidian-graph-search input { min-height: var(--control-h); padding: 0 var(--space-2); border: var(--bw-hairline) solid var(--border-strong); border-radius: var(--radius-sm); color: var(--text-primary); background: var(--surface-input); font-size: var(--fs-base); } .obsidian-graph-count { align-self: center; min-width: max-content; padding-inline: var(--space-2); color: var(--text-secondary); font-size: var(--fs-sm); font-variant-numeric: tabular-nums; } .obsidian-graph-branch-actions { display: flex; align-items: center; gap: var(--space-2); min-width: min(360px, 32vw); padding-left: var(--space-3); border-left: var(--bw-hairline) solid var(--border-default); } .obsidian-graph-branch-actions > span { color: var(--text-secondary); font-size: var(--fs-sm); font-weight: var(--fw-semibold); letter-spacing: var(--ls-caps); text-transform: uppercase; } .obsidian-graph-branch-actions .btn { min-width: 84px; } .obsidian-graph-reset-view { position: relative; display: inline-flex; align-items: center; gap: 6px; border-color: var(--border-strong); border-radius: 999px; color: var(--text-primary); background: var(--surface-input); overflow: hidden; } .obsidian-graph-reset-view:hover, .obsidian-graph-reset-view:focus-visible { border-color: var(--text-secondary); color: var(--text-primary); background: var(--surface-hover); } .obsidian-graph-reset-view span { font-size: 11px; line-height: 1; } .obsidian-graph-filters { top: calc(var(--space-8) * 2.7); left: 50%; display: grid; grid-template-columns: repeat(3, minmax(calc(var(--space-8) * 5), 1fr)); gap: var(--space-3); width: min(calc(var(--space-8) * 20), calc(100% - var(--space-8) * 2)); padding: var(--space-3); transform: translateX(-50%); } .obsidian-graph-filters label { display: grid; gap: var(--space-1); color: var(--text-secondary); font-size: var(--fs-sm); } .obsidian-graph-filters select { min-height: var(--control-h); padding-inline: var(--space-2); border: var(--bw-hairline) solid var(--border-strong); border-radius: var(--radius-sm); color: var(--text-primary); background: var(--surface-input); font-size: var(--fs-base); } .obsidian-graph-zoom { top: var(--space-4); right: var(--space-4); display: grid; overflow: hidden; } .obsidian-graph-zoom button { display: grid; place-items: center; width: var(--space-8); height: var(--space-8); padding: 0; border: 0; border-bottom: var(--bw-hairline) solid var(--border-default); color: var(--text-primary); background: transparent; font-size: var(--fs-lg); cursor: pointer; } .obsidian-graph-zoom button:last-child { border-bottom: 0; } .obsidian-graph-zoom button:hover { background: var(--surface-hover); } .obsidian-graph-inspector { right: var(--space-4); bottom: var(--space-4); display: grid; gap: var(--space-2); width: min(calc(var(--space-8) * 12), calc(100% - var(--space-8))); padding: var(--space-4); } .obsidian-graph-inspector > small { color: var(--text-secondary); font-size: var(--fs-sm); font-weight: var(--fw-semibold); letter-spacing: var(--ls-caps); text-transform: uppercase; } .obsidian-graph-inspector > strong { padding-right: var(--space-6); color: var(--text-primary); font-size: var(--fs-lg); line-height: var(--lh-prose); overflow-wrap: anywhere; } .obsidian-graph-inspector > span { color: var(--text-secondary); font-size: var(--fs-lg); } .obsidian-graph-inspector dl { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-2); margin: var(--space-2) 0 0; } .obsidian-graph-inspector dl div { display: grid; gap: var(--space-1); padding: var(--space-2); border: var(--bw-hairline) solid var(--border-subtle); background: var(--surface-panel); } .obsidian-graph-inspector dt { color: var(--text-secondary); font-size: var(--fs-sm); } .obsidian-graph-inspector dd { margin: 0; color: var(--text-primary); font-size: var(--fs-lg); font-weight: var(--fw-semibold); } .obsidian-graph-inspector-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-2); } .obsidian-inspector-close { position: absolute; top: var(--space-2); right: var(--space-2); display: grid; place-items: center; width: var(--control-h); height: var(--control-h); padding: 0; border: 0; color: var(--text-secondary); background: transparent; font-size: var(--fs-lg); cursor: pointer; } .obsidian-graph-empty { position: absolute; inset: 0; display: grid; place-content: center; gap: var(--space-2); color: var(--text-secondary); text-align: center; pointer-events: none; } .obsidian-graph-empty strong, .obsidian-graph-empty span { font-size: var(--fs-lg); } .obsidian-graph-card-zoom-hint { position: absolute; left: 50%; bottom: var(--space-4); z-index: 7; min-height: var(--control-h); padding: 0 var(--space-4); border: var(--bw-hairline) solid var(--border-strong); border-radius: var(--radius-sm); color: var(--text-primary); background: color-mix(in srgb, var(--surface-panel-raised) 94%, transparent); font-size: var(--fs-sm); cursor: pointer; transform: translateX(-50%); } .obsidian-graph-card-zoom-hint:hover, .obsidian-graph-card-zoom-hint:focus-visible { background: var(--surface-hover); outline: none; } @media (max-width: 900px) { .obsidian-graph-toolbar { left: var(--space-3); right: calc(var(--space-8) + var(--space-5)); flex-wrap: wrap; max-width: none; transform: none; } .obsidian-graph-branch-actions { flex: 1 1 100%; min-width: 0; padding-top: var(--space-2); padding-left: 0; border-top: var(--bw-hairline) solid var(--border-default); border-left: 0; } .obsidian-graph-search { flex: 1 1 100%; min-width: 0; } .obsidian-graph-filters { top: calc(var(--space-8) * 3.5); grid-template-columns: 1fr; } .obsidian-graph-inspector { left: var(--space-3); right: var(--space-3); width: auto; } } @media (prefers-reduced-motion: reduce) { .obsidian-node circle { transition: none; } } /* Dreigeteilte Graph-Arbeitsansicht nach der verbindlichen Referenz: gemeinsame Filter links, ruhiges Netzwerk in der Mitte, Details rechts. */ .obsidian-graph { background: var(--surface-app); } .obsidian-graph-layout { display: grid; grid-template-columns: clamp(220px, 17vw, 280px) minmax(0, 1fr) clamp(270px, 21vw, 340px); width: 100%; height: 100%; min-width: 0; min-height: 0; } .obsidian-graph-filter-panel, .obsidian-graph-inspector { position: static; display: flex; flex-direction: column; width: auto; min-width: 0; min-height: 0; padding: 0; border-radius: 0; background: color-mix(in srgb, var(--surface-panel) 96%, var(--surface-app)); backdrop-filter: none; } .obsidian-graph-filter-panel { border: 0; border-right: var(--bw-hairline) solid var(--border-default); } .obsidian-graph-inspector { border: 0; border-left: var(--bw-hairline) solid var(--border-default); } .obsidian-graph-filter-panel > header, .obsidian-graph-inspector > header { display: flex; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: var(--space-3); min-height: calc(var(--row-h) + var(--space-3)); padding: 0 var(--space-4); border-bottom: var(--bw-hairline) solid var(--border-default); } .obsidian-graph-filter-panel > header strong, .obsidian-graph-inspector > header strong { color: var(--text-primary); font-size: var(--fs-md); font-weight: var(--fw-semibold); letter-spacing: var(--ls-caps); text-transform: uppercase; } .obsidian-graph-filter-panel > header span { color: var(--text-secondary); font-size: var(--fs-sm); font-variant-numeric: tabular-nums; } .obsidian-graph-filter-scroll { display: grid; align-content: start; gap: var(--space-4); min-height: 0; padding: var(--space-4); overflow-y: auto; scrollbar-color: var(--border-strong) var(--surface-panel); scrollbar-width: thin; } .obsidian-graph-filter-section { display: grid; gap: var(--space-2); } .obsidian-panel-label { color: var(--text-secondary); font-size: var(--fs-sm); font-weight: var(--fw-semibold); letter-spacing: var(--ls-caps); text-transform: uppercase; } .obsidian-graph-filter-panel .search-text-group, .obsidian-graph-filter-panel .search-input-wrap, .obsidian-graph-filter-panel .search-input, .obsidian-graph-filter-panel .sheet-select { width: 100%; min-width: 0; } .obsidian-graph-filter-panel .search-tools, .obsidian-graph-filter-panel .primary-filter-group { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-2); min-width: 0; margin: 0; padding: 0; } .obsidian-graph-filter-panel .primary-filter-group { display: contents; } .obsidian-graph-filter-panel .standard-filter-btn, .obsidian-graph-filter-panel .dynamic-facet-select, .obsidian-graph-filter-panel .dynamic-range-filter { width: 100%; min-width: 0; margin: 0; } .obsidian-graph-filter-panel .standard-filter-btn { order: -1; } .obsidian-graph-filter-panel .dynamic-range-filter { grid-template-columns: minmax(0, 1fr) minmax(0, .8fr) minmax(0, .8fr); } .obsidian-graph-workspace-tools { display: grid; gap: var(--space-3); min-width: 0; padding-top: var(--space-4); border-top: var(--bw-hairline) solid var(--border-default); } .obsidian-graph-workspace-check { display: flex; align-items: center; gap: var(--space-2); min-height: var(--control-h); color: var(--text-primary); font-size: var(--ui-label-size); cursor: pointer; } .obsidian-graph-workspace-check input { width: 14px; height: 14px; margin: 0; accent-color: var(--accent); } .obsidian-graph-workspace-check:has(input:disabled) { color: var(--text-muted); cursor: not-allowed; } .obsidian-graph-workspace-tools .view-bookmark-bar, .obsidian-graph-workspace-tools .view-bookmark-list { align-items: stretch; flex-direction: column; width: 100%; } .obsidian-graph-workspace-tools .view-bookmark-create, .obsidian-graph-workspace-tools .view-bookmark-item, .obsidian-graph-workspace-tools .view-bookmark-entry { width: 100%; } .obsidian-graph-workspace-tools .view-bookmark-item { display: flex; } .obsidian-graph-workspace-tools .view-bookmark-entry { flex: 1 1 auto; } .obsidian-graph-stage { position: relative; min-width: 0; min-height: 0; overflow: hidden; background: color-mix(in srgb, var(--surface-app) 95%, var(--surface-panel)); } .obsidian-graph-stage .obsidian-graph-surface { width: 100%; height: 100%; } .obsidian-graph-edges line { stroke: var(--graph-edge); stroke-width: 1; } .obsidian-graph-edges .obsidian-edge-category { stroke: color-mix(in srgb, var(--graph-edge) 58%, var(--text-muted)); stroke-width: .8; } .obsidian-graph-edges .obsidian-edge-defense { stroke: color-mix(in srgb, var(--graph-edge) 68%, var(--graph-defense)); stroke-width: .9; } .obsidian-graph-edges .obsidian-edge-technique { stroke-width: 1.15; } .obsidian-graph-edges line.is-direct-path { stroke: var(--graph-alert); stroke-width: 2; } .obsidian-node-core { fill: color-mix(in srgb, currentColor 88%, var(--surface-app)); } .obsidian-node-card.data-tile { grid-template-columns: 18px minmax(0, 1fr); gap: var(--space-1); padding: var(--space-1); } .obsidian-node-card .data-tile-hex { width: 18px; height: 20px; } .obsidian-node-card .data-tile-content h3 { font-size: 16px; line-height: 1.25; } .obsidian-node-card .data-tile-badges { flex-wrap: nowrap; gap: var(--space-1); max-height: 18px; margin-top: var(--space-1); overflow: hidden; } .obsidian-node-card .reader-severity, .obsidian-node-card .outcome-mark { min-height: 18px; padding: 1px var(--space-1); font-size: var(--fs-sm); white-space: nowrap; } .obsidian-node.is-selected .obsidian-node-card { outline-width: var(--bw-hairline); outline-offset: -1px; } .obsidian-graph-stage .obsidian-graph-toolbar { top: var(--space-3); left: var(--space-3); align-items: center; max-width: none; padding: var(--space-1); transform: none; } .obsidian-graph-stage .obsidian-graph-zoom { top: var(--space-3); right: var(--space-3); } .obsidian-graph-inspector-content, .obsidian-graph-inspector-empty { display: grid; align-content: start; gap: var(--space-3); min-height: 0; padding: var(--space-4); overflow-y: auto; } .obsidian-graph-inspector-content > small { color: var(--text-secondary); font-size: var(--fs-sm); font-weight: var(--fw-semibold); letter-spacing: var(--ls-caps); text-transform: uppercase; } .obsidian-graph-inspector-content > strong { padding-right: var(--space-6); color: var(--text-primary); font-size: var(--fs-lg); line-height: var(--lh-prose); overflow-wrap: anywhere; } .obsidian-graph-inspector-content > span, .obsidian-graph-inspector-empty span { color: var(--text-secondary); font-size: var(--fs-lg); line-height: var(--lh-prose); } .obsidian-graph-inspector-empty strong { color: var(--text-primary); font-size: var(--fs-lg); } .obsidian-graph-inspector dl { display: grid; grid-template-columns: 1fr; gap: 0; margin: var(--space-2) 0 0; } .obsidian-graph-inspector dl div { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--space-3); padding: var(--space-3) 0; border: 0; border-bottom: var(--bw-hairline) solid var(--border-subtle); background: transparent; } .obsidian-graph-inspector dt { font-size: var(--fs-md); } .obsidian-graph-inspector-actions { display: grid; gap: var(--space-2); margin-top: var(--space-3); } .obsidian-graph-inspector-actions .btn { width: 100%; } .obsidian-inspector-close { position: static; flex: 0 0 auto; } @media (max-width: 1100px) { .obsidian-graph-layout { grid-template-columns: 220px minmax(0, 1fr) 270px; } } @media (max-width: 850px) { .obsidian-graph-layout { grid-template-columns: 210px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) 210px; } .obsidian-graph-inspector { grid-column: 1 / -1; border-top: var(--bw-hairline) solid var(--border-default); border-left: 0; } .obsidian-graph-inspector-content { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } } @media (max-width: 650px) { .obsidian-graph-layout { grid-template-columns: 1fr; grid-template-rows: 220px minmax(360px, 1fr) 220px; overflow-y: auto; } .obsidian-graph-filter-panel { border-right: 0; border-bottom: var(--bw-hairline) solid var(--border-default); } .obsidian-graph-inspector { grid-column: 1; } }