kundenkarte/css/kundenkarte.css
data 16e51a799a feat(v8.6): Räumlichkeit, Verteilungs-Tabellen, Bundled-Terminals, PWA-Updates
- output_location (Räumlichkeit): Neues Textfeld am Abgang für Raum/Ort des
  Verbrauchers. DB-Migration, Backend (AJAX), Frontend (Website + PWA),
  Anzeige im Schaltplan (kursiv) und in PDF-Tabellen.
- Verteilungs-Tabellen: Kundenansicht (A4, Nr/Verbraucher/Räumlichkeit) und
  Technikeransicht (A4, R.Klem/FI/Nr/Verbraucher/Räumlichkeit/Typ) im
  Leitungslaufplan-PDF. Gruppiert nach Feld/Reihe mit automatischem Seitenumbruch.
- Bundled-Terminals Checkbox: Im Website-Abgang-Dialog (war vorher nur PWA).
- PWA: Diverse Verbesserungen, Service Worker v12.4, Connection-Modal erweitert.
- Typ-Flags: has_product auch für Gebäudetypen, Equipment-Typ Erweiterungen.
- CLAUDE.md + Doku aktualisiert.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 01:33:05 +01:00

2934 lines
76 KiB
CSS

/**
* KundenKarte Module Styles
* Dark Mode Theme
*/
/* ========================================
TREE STRUCTURE - Multiple parallel cable lines
======================================== */
.kundenkarte-tree {
font-family: inherit !important;
padding: 10px 0 !important;
}
/* Row container - holds cable lines + content */
.kundenkarte-tree-row {
display: flex !important;
align-items: stretch !important;
min-height: 36px !important;
}
/* Spacer row between cable groups */
.kundenkarte-tree-row.spacer-row {
min-height: 12px !important;
}
/* Cable line column - vertical line placeholder */
.cable-line {
width: 15px !important;
min-width: 15px !important;
position: relative !important;
flex-shrink: 0 !important;
}
/* Active vertical line (passes through this row to children below) */
.cable-line.active::before {
content: '' !important;
position: absolute !important;
left: 6px !important;
top: 0 !important;
width: 2px !important;
height: 100% !important;
background: #555 !important;
}
/* My cable line on connection row - vertical line + continues down */
.cable-line.my-line.conn-line::before {
content: '' !important;
position: absolute !important;
left: 6px !important;
top: 0 !important;
width: 2px !important;
height: 100% !important;
background: #8bc34a !important;
}
/* Horizontal connector from line - width set via CSS variable */
.cable-line.my-line.conn-line::after {
content: '' !important;
position: absolute !important;
left: 6px !important;
top: 50% !important;
width: var(--h-width, 8px) !important;
height: 2px !important;
background: #8bc34a !important;
z-index: 0 !important;
}
/* My cable line on node row - vertical line ends at center */
.cable-line.my-line.node-line::before {
content: '' !important;
position: absolute !important;
left: 6px !important;
top: 0 !important;
width: 2px !important;
height: 50% !important;
background: #8bc34a !important;
}
/* Horizontal connector to node - width set via CSS variable */
.cable-line.my-line.node-line::after {
content: '' !important;
position: absolute !important;
left: 6px !important;
top: 50% !important;
width: var(--h-width, 8px) !important;
height: 2px !important;
background: #8bc34a !important;
z-index: 0 !important;
}
/* Node content container - above horizontal lines */
.kundenkarte-tree-node-content {
flex: 1 !important;
position: relative !important;
z-index: 1 !important;
}
/* Connection content - above horizontal lines */
.kundenkarte-tree-conn-content {
position: relative !important;
z-index: 1 !important;
}
/* Legacy node styles (for root level) */
.kundenkarte-tree-node {
position: relative !important;
margin: 2px 0 !important;
padding-left: 30px !important;
}
/* Horizontaler Strich zum Element */
.kundenkarte-tree-node::after {
content: '' !important;
position: absolute !important;
left: 8px !important;
top: 18px !important;
width: 22px !important;
height: 2px !important;
background: #555 !important;
}
/* Senkrechter Strich (durchgehend für alle Geschwister) */
.kundenkarte-tree-node::before {
content: '' !important;
position: absolute !important;
left: 8px !important;
top: 0 !important;
width: 2px !important;
height: 100% !important;
background: #555 !important;
}
/* Letztes Kind: senkrechter Strich nur bis zur Mitte */
.kundenkarte-tree-node:last-child::before {
height: 20px !important;
}
/* Root-Ebene: keine Linien */
.kundenkarte-tree > .kundenkarte-tree-node::after,
.kundenkarte-tree > .kundenkarte-tree-node::before {
display: none !important;
}
.kundenkarte-tree > .kundenkarte-tree-node {
padding-left: 0 !important;
}
/* Abstand zwischen Root-Elementen (nicht beim ersten) */
.kundenkarte-tree > .kundenkarte-tree-node + .kundenkarte-tree-node {
margin-top: 12px !important;
}
/* Tree-row at root level - no lines */
.kundenkarte-tree > .kundenkarte-tree-row .cable-line {
display: none !important;
}
/* Durchgeschleifte Elemente (kein eigenes Kabel) - am gleichen senkrechten Strich */
.kundenkarte-tree-node.no-cable {
/* Kein eigener Strich - nutzt den vorherigen */
}
/* Elemente mit eigenem Kabel - eigener senkrechter Strich, eingerückt */
.kundenkarte-tree-node:not(.no-cable) {
/* Standard-Darstellung mit eigenem Strich */
}
.kundenkarte-tree-item {
display: flex !important;
align-items: center !important;
padding: 8px 12px !important;
border-radius: 4px !important;
background: #2d2d2d !important;
border: 1px solid #444 !important;
cursor: pointer !important;
color: #e0e0e0 !important;
position: relative !important;
z-index: 1 !important;
}
.kundenkarte-tree-item:hover {
background: #3a3a3a !important;
border-color: #555 !important;
}
.kundenkarte-tree-toggle {
width: 20px !important;
height: 20px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
margin-right: 5px !important;
cursor: pointer !important;
color: #aaa !important;
}
.kundenkarte-tree-toggle .fa-chevron-down {
transition: transform 0.2s ease !important;
}
.kundenkarte-tree-toggle.collapsed .fa-chevron-down {
transform: rotate(-90deg) !important;
}
.kundenkarte-tree-icon {
width: 24px !important;
height: 24px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
margin-right: 8px !important;
font-size: 14px !important;
color: #aaa !important;
}
.kundenkarte-tree-label {
flex: 1 !important;
font-weight: 500 !important;
color: #e0e0e0 !important;
}
.kundenkarte-tree-label-info {
font-weight: normal !important;
color: #888 !important;
font-size: 0.85em !important;
margin-left: 4px !important;
}
/* Spacer to push badges to the right */
.kundenkarte-tree-spacer {
flex: 1 !important;
min-width: 10px !important;
}
/* Tree info badges */
.kundenkarte-tree-badges {
display: inline-flex !important;
gap: 6px !important;
margin-left: 0 !important;
margin-right: 8px !important;
flex-wrap: wrap !important;
}
.kundenkarte-tree-badge {
display: inline-flex !important;
align-items: center !important;
vertical-align: middle !important;
gap: 4px !important;
padding: 2px 8px !important;
background: linear-gradient(135deg, #2a4a5e 0%, #1e3a4a 100%) !important;
border: 1px solid #3a6a8e !important;
border-radius: 12px !important;
font-size: 11px !important;
color: #8cc4e8 !important;
font-weight: 500 !important;
white-space: nowrap !important;
}
.kundenkarte-tree-badge i {
font-size: 10px !important;
color: #5aa8d4 !important;
}
.kundenkarte-tree-badge:hover {
background: linear-gradient(135deg, #3a5a6e 0%, #2a4a5a 100%) !important;
border-color: #4a7a9e !important;
}
.kundenkarte-tree-actions {
display: flex !important;
gap: 5px !important;
margin-left: 10px !important;
opacity: 0.6 !important;
transition: opacity 0.15s !important;
}
.kundenkarte-tree-item:hover .kundenkarte-tree-actions {
opacity: 1 !important;
}
.kundenkarte-tree-actions a {
padding: 2px 6px !important;
border-radius: 3px !important;
color: #ccc !important;
}
.kundenkarte-tree-actions a:hover {
background: #555 !important;
color: #fff !important;
}
.kundenkarte-tree-children {
position: relative !important;
margin-left: 20px !important;
padding-left: 0 !important;
}
.kundenkarte-tree-children.collapsed {
display: none !important;
}
/* Drag & Drop Sortierung */
.kundenkarte-dragging {
opacity: 0.4 !important;
}
.kundenkarte-dragging > .kundenkarte-tree-item {
border: 1px dashed #666 !important;
}
body.kundenkarte-drag-active {
cursor: grabbing !important;
user-select: none !important;
}
body.kundenkarte-drag-active * {
cursor: grabbing !important;
}
.kundenkarte-drag-above > .kundenkarte-tree-item {
border-top: 3px solid #4a9eff !important;
}
.kundenkarte-drag-below > .kundenkarte-tree-item {
border-bottom: 3px solid #4a9eff !important;
}
.kundenkarte-tree-type {
font-size: 0.75em !important;
padding: 2px 8px !important;
border-radius: 10px !important;
background: #444 !important;
color: #ccc !important;
margin-left: 8px !important;
font-weight: normal !important;
}
/* Tree - Typ-Kategorie Farben */
/* Gebäudeteile (Struktur): grüner Akzent links */
.node-structure > .kundenkarte-tree-item {
border-left: 3px solid #4caf50 !important;
}
.node-structure > .kundenkarte-tree-item .kundenkarte-tree-icon {
color: #4caf50 !important;
}
/* Geräte-Container (can_have_equipment): blauer Akzent links */
.node-equipment > .kundenkarte-tree-item {
border-left: 3px solid #2196f3 !important;
}
.node-equipment > .kundenkarte-tree-item .kundenkarte-tree-icon {
color: #2196f3 !important;
}
/* Endgeräte/Blätter: oranger Akzent links */
.node-leaf > .kundenkarte-tree-item {
border-left: 3px solid #ff9800 !important;
}
.node-leaf > .kundenkarte-tree-item .kundenkarte-tree-icon {
color: #ff9800 !important;
}
/* Tree - File Indicators */
.kundenkarte-tree-files {
display: inline-flex !important;
vertical-align: middle !important;
gap: 3px !important;
margin-left: 6px !important;
}
.kundenkarte-tree-file-badge {
font-size: 0.8em !important;
padding: 2px 6px !important;
border-radius: 4px !important;
display: inline-flex !important;
align-items: center !important;
vertical-align: middle !important;
gap: 3px !important;
text-decoration: none !important;
}
.kundenkarte-tree-file-images {
background: #2a5a8a !important;
color: #ddd !important;
}
.kundenkarte-tree-file-docs {
background: #8a5a2a !important;
color: #ddd !important;
}
.kundenkarte-tree-file-all {
background: #4a5a6a !important;
color: #ddd !important;
}
/* ========================================
TOOLTIP
======================================== */
.kundenkarte-tooltip {
position: absolute !important;
z-index: 1000 !important;
background: #1e1e1e !important;
border: 1px solid #555 !important;
border-radius: 6px !important;
box-shadow: 0 4px 12px rgba(0,0,0,0.5) !important;
padding: 15px !important;
min-width: 300px !important;
max-width: 450px !important;
display: none !important;
}
.kundenkarte-tooltip.visible {
display: block !important;
}
.kundenkarte-tooltip-header {
display: flex !important;
align-items: center !important;
margin-bottom: 10px !important;
padding-bottom: 10px !important;
border-bottom: 1px solid #444 !important;
}
.kundenkarte-tooltip-icon {
font-size: 24px !important;
margin-right: 12px !important;
color: #aaa !important;
}
.kundenkarte-tooltip-title {
font-weight: 600 !important;
font-size: 1.1em !important;
color: #e0e0e0 !important;
}
.kundenkarte-tooltip-type {
color: #999 !important;
font-size: 0.9em !important;
}
.kundenkarte-tooltip-fields {
display: grid !important;
grid-template-columns: auto 1fr !important;
gap: 6px 12px !important;
font-size: 0.95em !important;
}
.kundenkarte-tooltip-field-label {
color: #aaa !important;
font-weight: 500 !important;
}
.kundenkarte-tooltip-field-value {
color: #e0e0e0 !important;
}
.kundenkarte-tooltip-field-header {
grid-column: 1 / -1 !important;
font-weight: bold !important;
margin-top: 8px !important;
padding-top: 8px !important;
border-top: 1px solid #444 !important;
color: #aaa !important;
}
/* ========================================
FILE PREVIEW TOOLTIP
======================================== */
.kundenkarte-file-preview {
min-width: 280px !important;
max-width: 400px !important;
}
.kundenkarte-file-preview-section {
margin-bottom: 12px !important;
}
.kundenkarte-file-preview-section:last-child {
margin-bottom: 0 !important;
}
.kundenkarte-file-preview-title {
font-weight: bold !important;
color: #8cc4e8 !important;
margin-bottom: 8px !important;
font-size: 12px !important;
display: flex !important;
align-items: center !important;
gap: 6px !important;
}
.kundenkarte-file-preview-thumbs {
display: flex !important;
flex-wrap: wrap !important;
gap: 6px !important;
}
.kundenkarte-file-preview-thumb {
position: relative !important;
width: 60px !important;
height: 60px !important;
border-radius: 4px !important;
overflow: hidden !important;
border: 2px solid #444 !important;
transition: border-color 0.2s !important;
}
.kundenkarte-file-preview-thumb:hover {
border-color: #8cc4e8 !important;
}
.kundenkarte-file-preview-thumb.is-cover {
border-color: #f39c12 !important;
}
.kundenkarte-file-preview-thumb.is-pinned {
border-color: #27ae60 !important;
}
.kundenkarte-file-preview-thumb img {
width: 100% !important;
height: 100% !important;
object-fit: cover !important;
}
.kundenkarte-file-preview-pin {
position: absolute !important;
top: 2px !important;
right: 2px !important;
background: rgba(39, 174, 96, 0.9) !important;
color: #fff !important;
font-size: 9px !important;
padding: 2px 4px !important;
border-radius: 3px !important;
}
.kundenkarte-file-preview-more {
display: flex !important;
align-items: center !important;
justify-content: center !important;
width: 60px !important;
height: 60px !important;
background: #333 !important;
border-radius: 4px !important;
color: #888 !important;
font-size: 14px !important;
font-weight: bold !important;
}
.kundenkarte-file-preview-docs {
display: flex !important;
flex-direction: column !important;
gap: 4px !important;
}
.kundenkarte-file-preview-doc {
display: flex !important;
align-items: center !important;
gap: 8px !important;
padding: 6px 8px !important;
background: #2a2a2a !important;
border-radius: 4px !important;
text-decoration: none !important;
color: #ddd !important;
transition: background-color 0.2s !important;
}
.kundenkarte-file-preview-doc:hover {
background: #3a3a3a !important;
color: #fff !important;
}
.kundenkarte-file-preview-doc.is-pinned {
background: #2a3a2a !important;
}
.kundenkarte-file-preview-doc i:first-child {
font-size: 16px !important;
width: 20px !important;
text-align: center !important;
}
.kundenkarte-file-preview-doc-name {
flex: 1 !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
white-space: nowrap !important;
font-size: 12px !important;
}
.kundenkarte-file-preview-doc-pin {
color: #27ae60 !important;
font-size: 10px !important;
}
.kundenkarte-file-preview-more-docs {
padding: 4px 8px !important;
color: #888 !important;
font-size: 11px !important;
text-align: center !important;
}
/* ========================================
SYSTEM TABS
======================================== */
.kundenkarte-system-tabs-wrapper {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
margin-bottom: 15px !important;
padding-bottom: 10px !important;
border-bottom: 2px solid #444 !important;
flex-wrap: wrap !important;
gap: 10px !important;
}
.kundenkarte-system-tabs {
display: flex !important;
flex-wrap: wrap !important;
gap: 5px !important;
flex: 1 !important;
align-items: center !important;
}
.kundenkarte-tree-controls {
display: flex !important;
gap: 5px !important;
flex-shrink: 0 !important;
align-items: center !important;
}
/* Button in system tabs row */
.kundenkarte-system-tabs > button.button,
.kundenkarte-system-tabs > .button {
align-self: center !important;
margin-top: 0 !important;
margin-bottom: 0 !important;
vertical-align: middle !important;
}
/* System hinzufügen Button - kleiner, knapp über der Linie */
.kundenkarte-add-system-btn {
font-size: 11px !important;
padding: 4px 10px !important;
margin-left: auto !important;
align-self: flex-end !important;
margin-bottom: -1px !important;
height: auto !important;
line-height: 1.3 !important;
}
.kundenkarte-add-system-btn i {
font-size: 9px !important;
}
.kundenkarte-system-tab {
padding: 8px 16px !important;
border: 1px solid #555 !important;
border-radius: 4px 4px 0 0 !important;
background: #333 !important;
cursor: pointer !important;
display: flex !important;
align-items: center !important;
gap: 8px !important;
color: #ccc !important;
}
.kundenkarte-system-tab:hover {
background: #3a3a3a !important;
}
.kundenkarte-system-tab.active {
background: #2d2d2d !important;
border-bottom-color: #2d2d2d !important;
margin-bottom: -2px !important;
padding-bottom: 10px !important;
color: #fff !important;
}
.kundenkarte-system-tab-icon {
font-size: 14px !important;
}
/* ========================================
BUTTONS - Dark Mode style
======================================== */
.kundenkarte-tree-controls .button,
.kundenkarte-tree-controls .button.small,
.kundenkarte-tree-controls a.button,
.kundenkarte-system-tabs .button,
.kundenkarte-system-tabs .button.small,
.kundenkarte-system-tabs button.button,
.kundenkarte-add-system-form .button,
.kundenkarte-add-system-form .button.small,
.kundenkarte-add-system-form button.button {
background: #444 !important;
background-image: linear-gradient(to bottom, #555 0%, #333 100%) !important;
border: 1px solid #666 !important;
border-radius: 3px !important;
color: #e0e0e0 !important;
cursor: pointer !important;
padding: 6px 12px !important;
font-size: 0.85em !important;
text-decoration: none !important;
display: inline-flex !important;
align-items: center !important;
gap: 5px !important;
height: auto !important;
line-height: 1.4 !important;
box-sizing: border-box !important;
}
.kundenkarte-tree-controls .button:hover,
.kundenkarte-tree-controls a.button:hover,
.kundenkarte-system-tabs .button:hover,
.kundenkarte-system-tabs button.button:hover,
.kundenkarte-add-system-form .button:hover,
.kundenkarte-add-system-form button.button:hover {
background: #555 !important;
background-image: linear-gradient(to bottom, #666 0%, #444 100%) !important;
border-color: #777 !important;
}
/* Add system form */
.kundenkarte-add-system-form {
background: #2d2d2d !important;
border: 1px solid #444 !important;
padding: 12px 15px !important;
border-radius: 6px !important;
color: #e0e0e0 !important;
}
.kundenkarte-add-system-form select.flat {
background: #333 !important;
border: 1px solid #555 !important;
color: #e0e0e0 !important;
padding: 5px 10px !important;
border-radius: 3px !important;
}
/* ========================================
FAVORITES
======================================== */
.kundenkarte-favorites-add {
display: flex !important;
gap: 10px !important;
margin-bottom: 20px !important;
padding: 15px !important;
background: #2d2d2d !important;
border: 1px solid #444 !important;
border-radius: 6px !important;
}
.kundenkarte-favorites-table th {
text-align: left !important;
padding: 10px !important;
background: #333 !important;
color: #e0e0e0 !important;
border-bottom: 2px solid #555 !important;
}
.kundenkarte-favorites-table td {
padding: 10px !important;
border-bottom: 1px solid #444 !important;
vertical-align: middle !important;
}
.kundenkarte-favorites-actions {
margin-top: 20px !important;
padding-top: 15px !important;
border-top: 1px solid #444 !important;
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
}
.kundenkarte-favorites-add .button {
background: #444 !important;
background-image: linear-gradient(to bottom, #555 0%, #333 100%) !important;
border: 1px solid #666 !important;
border-radius: 3px !important;
color: #e0e0e0 !important;
padding: 6px 12px !important;
}
/* ========================================
FILE GALLERY
======================================== */
/* ========================================
FILE DROPZONE
======================================== */
.kundenkarte-dropzone {
border: 2px dashed #555 !important;
border-radius: 8px !important;
padding: 30px !important;
text-align: center !important;
background: #1e1e1e !important;
transition: all 0.3s ease !important;
cursor: pointer !important;
}
.kundenkarte-dropzone:hover,
.kundenkarte-dropzone.dragover {
border-color: #3498db !important;
background: #252530 !important;
}
.kundenkarte-dropzone.dragover {
transform: scale(1.02) !important;
}
.kundenkarte-dropzone-content {
pointer-events: none !important;
}
.kundenkarte-dropzone-files {
display: flex !important;
flex-wrap: wrap !important;
gap: 10px !important;
margin-top: 15px !important;
justify-content: center !important;
}
.kundenkarte-dropzone-file {
display: flex !important;
align-items: center !important;
gap: 8px !important;
padding: 8px 12px !important;
background: #333 !important;
border-radius: 4px !important;
font-size: 12px !important;
color: #e0e0e0 !important;
}
.kundenkarte-dropzone-file i {
color: #3498db !important;
}
.kundenkarte-dropzone-file .remove-file {
color: #e74c3c !important;
cursor: pointer !important;
margin-left: 5px !important;
}
.kundenkarte-dropzone-file .remove-file:hover {
color: #ff6b6b !important;
}
/* ========================================
FILE GRID - LARGER BOXES
======================================== */
.kundenkarte-files-grid {
display: grid !important;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)) !important;
gap: 20px !important;
margin-top: 15px !important;
}
.kundenkarte-file-item {
border: 1px solid #444 !important;
border-radius: 8px !important;
overflow: hidden !important;
background: #2d2d2d !important;
transition: transform 0.2s, box-shadow 0.2s !important;
position: relative !important;
}
.kundenkarte-file-item:hover {
transform: translateY(-3px) !important;
box-shadow: 0 6px 20px rgba(0,0,0,0.3) !important;
}
/* Pinned files */
.kundenkarte-file-pinned {
border-color: #e6a500 !important;
box-shadow: 0 0 0 1px #e6a500 inset !important;
}
.kundenkarte-pin-indicator {
position: absolute !important;
top: 8px !important;
right: 8px !important;
background: #e6a500 !important;
color: #000 !important;
width: 24px !important;
height: 24px !important;
border-radius: 50% !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
font-size: 12px !important;
z-index: 10 !important;
}
.kundenkarte-file-btn-pinned {
color: #e6a500 !important;
}
.kundenkarte-file-preview {
height: 180px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
background: #1e1e1e !important;
overflow: hidden !important;
cursor: pointer !important;
}
.kundenkarte-file-preview img {
max-width: 100% !important;
max-height: 100% !important;
object-fit: contain !important;
transition: transform 0.3s !important;
}
.kundenkarte-file-item:hover .kundenkarte-file-preview img {
transform: scale(1.05) !important;
}
.kundenkarte-file-info {
padding: 12px 15px !important;
font-size: 0.95em !important;
}
.kundenkarte-file-name {
font-weight: 500 !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
white-space: nowrap !important;
color: #e0e0e0 !important;
font-size: 13px !important;
margin-bottom: 4px !important;
}
.kundenkarte-file-size {
color: #888 !important;
font-size: 11px !important;
}
.kundenkarte-file-actions {
display: flex !important;
gap: 8px !important;
margin-top: 10px !important;
justify-content: center !important;
}
.kundenkarte-file-btn {
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
width: 32px !important;
height: 32px !important;
border-radius: 6px !important;
background: #444 !important;
color: #e0e0e0 !important;
text-decoration: none !important;
transition: all 0.2s !important;
}
.kundenkarte-file-btn:hover {
background: #555 !important;
color: #fff !important;
transform: scale(1.1) !important;
}
.kundenkarte-file-btn-delete:hover {
background: #c0392b !important;
}
/* ========================================
ICON PICKER MODAL
======================================== */
.kundenkarte-modal {
display: none !important;
position: fixed !important;
z-index: 10000 !important;
left: 0 !important;
top: 0 !important;
width: 100% !important;
height: 100% !important;
background-color: rgba(0,0,0,0.7) !important;
align-items: center !important;
justify-content: center !important;
}
.kundenkarte-modal.visible {
display: flex !important;
}
.kundenkarte-modal-content {
background-color: #1e1e1e !important;
border-radius: 8px !important;
box-shadow: 0 8px 32px rgba(0,0,0,0.5) !important;
max-width: 600px !important;
width: 90% !important;
max-height: 80vh !important;
display: flex !important;
flex-direction: column !important;
}
.kundenkarte-modal-header {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
padding: 15px 20px !important;
border-bottom: 2px solid #444 !important;
background: #2d2d2d !important;
}
.kundenkarte-modal-header h3 {
margin: 0 !important;
color: #e0e0e0 !important;
}
.kundenkarte-modal-close {
font-size: 28px !important;
color: #aaa !important;
cursor: pointer !important;
}
.kundenkarte-modal-body {
padding: 20px !important;
overflow-y: auto !important;
}
.kundenkarte-icon-grid {
display: grid !important;
grid-template-columns: repeat(auto-fill, minmax(50px, 1fr)) !important;
gap: 8px !important;
max-height: 400px !important;
overflow-y: auto !important;
}
.kundenkarte-icon-item {
width: 50px !important;
height: 50px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
border: 1px solid #444 !important;
border-radius: 6px !important;
cursor: pointer !important;
font-size: 20px !important;
color: #aaa !important;
background: #2d2d2d !important;
}
.kundenkarte-icon-item:hover {
background: #444 !important;
border-color: #666 !important;
color: #fff !important;
}
/* ========================================
PDF PREVIEW
======================================== */
.kundenkarte-pdf-preview-wrapper {
width: 100% !important;
height: 100% !important;
overflow: hidden !important;
position: relative !important;
}
.kundenkarte-pdf-preview-frame {
width: 200% !important;
height: 200% !important;
border: none !important;
transform: scale(0.5) !important;
transform-origin: top left !important;
pointer-events: none !important;
}
/* ========================================
IMAGES/DOCS POPUP
======================================== */
.kundenkarte-images-grid,
.kundenkarte-docs-grid {
display: grid !important;
grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)) !important;
gap: 8px !important;
max-width: 350px !important;
}
.kundenkarte-images-thumb {
display: block !important;
width: 80px !important;
height: 80px !important;
border-radius: 4px !important;
overflow: hidden !important;
border: 2px solid #444 !important;
}
.kundenkarte-images-thumb img {
width: 100% !important;
height: 100% !important;
object-fit: cover !important;
}
.kundenkarte-docs-card {
display: flex !important;
flex-direction: column !important;
align-items: center !important;
padding: 10px 5px !important;
border-radius: 6px !important;
border: 1px solid #444 !important;
background: #2d2d2d !important;
text-decoration: none !important;
width: 80px !important;
}
.kundenkarte-docs-card-icon {
font-size: 36px !important;
margin-bottom: 6px !important;
color: #aaa !important;
}
.kundenkarte-docs-card-name {
font-size: 0.75em !important;
color: #e0e0e0 !important;
text-align: center !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
white-space: nowrap !important;
max-width: 70px !important;
}
/* ========================================
EQUIPMENT / HUTSCHIENEN
======================================== */
.kundenkarte-equipment-container {
margin-top: 15px !important;
padding: 15px !important;
background: #252525 !important;
border: 1px solid #444 !important;
border-radius: 6px !important;
overflow: visible !important;
}
.kundenkarte-equipment-header {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
margin-bottom: 15px !important;
padding-bottom: 10px !important;
border-bottom: 1px solid #444 !important;
}
.kundenkarte-equipment-header h4 {
margin: 0 !important;
color: #e0e0e0 !important;
font-size: 1em !important;
}
.kundenkarte-add-carrier {
background: #2d6a4f !important;
color: #fff !important;
border: 1px solid #40916c !important;
padding: 6px 12px !important;
border-radius: 4px !important;
cursor: pointer !important;
font-size: 0.85em !important;
display: inline-flex !important;
align-items: center !important;
gap: 5px !important;
text-decoration: none !important;
}
.kundenkarte-add-carrier:hover {
background: #40916c !important;
}
/* Panels Container */
.kundenkarte-panels-container {
display: flex !important;
flex-direction: row !important;
flex-wrap: wrap !important;
gap: 20px !important;
padding: 10px 5px !important;
}
/* Individual Panel (Feld) */
.kundenkarte-panel {
flex: 0 0 auto !important;
background: #1e1e1e !important;
border: 2px solid #555 !important;
border-radius: 8px !important;
padding: 10px !important;
display: inline-block !important;
}
.kundenkarte-panel-direct {
border-style: dashed !important;
border-color: #666 !important;
}
/* Quick-add panel button (duplicate last panel) */
.kundenkarte-panel-quickadd {
flex: 0 0 auto !important;
min-width: 60px !important;
max-width: 80px !important;
background: transparent !important;
border: 2px dashed #555 !important;
border-radius: 8px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
min-height: 100px !important;
}
.kundenkarte-panel-quickadd:hover {
border-color: #27ae60 !important;
background: rgba(39, 174, 96, 0.1) !important;
}
.kundenkarte-panel-quickadd i {
font-size: 24px !important;
color: #555 !important;
transition: color 0.2s ease !important;
}
.kundenkarte-panel-quickadd:hover i {
color: #27ae60 !important;
}
/* Quick-add carrier button (duplicate last carrier) */
.kundenkarte-carrier-quickadd {
background: transparent !important;
border: 2px dashed #555 !important;
border-radius: 6px !important;
padding: 15px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
margin-top: 10px !important;
}
.kundenkarte-carrier-quickadd:hover {
border-color: #27ae60 !important;
background: rgba(39, 174, 96, 0.1) !important;
}
.kundenkarte-carrier-quickadd i {
font-size: 18px !important;
color: #555 !important;
transition: color 0.2s ease !important;
}
.kundenkarte-carrier-quickadd:hover i {
color: #27ae60 !important;
}
.kundenkarte-panel-header {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
padding: 8px 12px !important;
background: #333 !important;
border-radius: 4px !important;
margin-bottom: 10px !important;
}
.kundenkarte-panel-label {
font-weight: bold !important;
color: #e0e0e0 !important;
font-size: 0.95em !important;
}
.kundenkarte-panel-actions {
display: flex !important;
gap: 8px !important;
}
.kundenkarte-panel-actions a {
color: #aaa !important;
text-decoration: none !important;
padding: 4px !important;
}
.kundenkarte-panel-actions a:hover {
color: #fff !important;
}
/* Add Panel Button */
.kundenkarte-add-panel {
background: #1e5f74 !important;
color: #fff !important;
border: 1px solid #2c8ba0 !important;
padding: 6px 12px !important;
border-radius: 4px !important;
cursor: pointer !important;
font-size: 0.85em !important;
display: inline-flex !important;
align-items: center !important;
gap: 5px !important;
text-decoration: none !important;
}
.kundenkarte-add-panel:hover {
background: #2c8ba0 !important;
}
.kundenkarte-carriers-list {
display: flex !important;
flex-direction: column !important;
gap: 20px !important;
overflow: visible !important;
}
/* Individual Carrier (Hutschiene) */
.kundenkarte-carrier {
background: #2d2d2d !important;
border: 1px solid #444 !important;
border-radius: 6px !important;
overflow: visible !important;
display: block !important;
width: 100% !important;
max-width: 100% !important;
box-sizing: border-box !important;
}
.kundenkarte-carrier-header {
display: flex !important;
align-items: center !important;
padding: 10px 15px !important;
background: #333 !important;
border-bottom: 1px solid #444 !important;
}
.kundenkarte-carrier-label {
font-weight: 600 !important;
color: #e0e0e0 !important;
flex: 1 !important;
}
.kundenkarte-carrier-info {
color: #888 !important;
font-size: 0.85em !important;
margin-right: 15px !important;
}
.kundenkarte-carrier-actions {
display: flex !important;
gap: 8px !important;
}
.kundenkarte-carrier-actions a {
color: #888 !important;
padding: 4px 8px !important;
border-radius: 3px !important;
text-decoration: none !important;
}
.kundenkarte-carrier-actions a:hover {
background: #444 !important;
color: #fff !important;
}
.kundenkarte-carrier-add-equipment {
color: #27ae60 !important;
}
.kundenkarte-carrier-add-equipment:hover {
background: #27ae60 !important;
color: #fff !important;
}
/* SVG Container */
.kundenkarte-carrier-svg-container {
position: relative !important;
padding: 15px !important;
background: #1e1e1e !important;
overflow-x: auto !important;
overflow-y: visible !important;
border-radius: 0 0 6px 6px !important;
display: block !important;
width: 100% !important;
max-width: 100% !important;
box-sizing: border-box !important;
}
.kundenkarte-carrier-svg {
display: block !important;
background: linear-gradient(to bottom, #3a3a3a 0%, #2a2a2a 100%) !important;
border-radius: 4px !important;
border: 1px solid #555 !important;
min-width: max-content !important;
flex-shrink: 0 !important;
}
/* Clickable slot overlay */
.kundenkarte-carrier-slots {
position: absolute !important;
top: 15px !important;
left: 15px !important;
pointer-events: none !important;
}
.kundenkarte-slot-empty {
position: absolute !important;
top: 0 !important;
height: 100% !important;
pointer-events: all !important;
cursor: pointer !important;
opacity: 0 !important;
transition: opacity 0.15s, background 0.15s !important;
}
.kundenkarte-slot-empty:hover {
opacity: 1 !important;
background: rgba(39, 174, 96, 0.3) !important;
border: 1px dashed #27ae60 !important;
border-radius: 3px !important;
}
.kundenkarte-slot-drop-target {
opacity: 1 !important;
background: rgba(52, 152, 219, 0.4) !important;
border: 2px dashed #3498db !important;
border-radius: 3px !important;
}
/* Quick-add slot (duplicate last equipment) */
.kundenkarte-slot-quickadd {
position: absolute !important;
top: 2px !important;
height: calc(100% - 4px) !important;
pointer-events: all !important;
cursor: pointer !important;
background: rgba(39, 174, 96, 0.15) !important;
border: 2px dashed #27ae60 !important;
border-radius: 4px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
transition: all 0.2s ease !important;
}
.kundenkarte-slot-quickadd i {
color: #27ae60 !important;
font-size: 24px !important;
}
.kundenkarte-slot-quickadd:hover {
background: rgba(39, 174, 96, 0.4) !important;
border-color: #1e8449 !important;
}
.kundenkarte-slot-quickadd:hover i {
color: #fff !important;
}
/* Equipment Block (SVG elements styled via CSS) */
.kundenkarte-equipment-block {
cursor: pointer !important;
transition: filter 0.15s !important;
}
.kundenkarte-equipment-block:hover {
filter: brightness(1.15) !important;
}
.kundenkarte-equipment-block.dragging {
opacity: 0.5 !important;
}
/* Duplicate button on blocks */
.kundenkarte-equipment-duplicate {
cursor: pointer !important;
opacity: 0 !important;
transition: opacity 0.15s !important;
}
.kundenkarte-equipment-block:hover .kundenkarte-equipment-duplicate {
opacity: 1 !important;
}
/* Equipment Tooltip */
.kundenkarte-equipment-tooltip {
position: absolute !important;
z-index: 10001 !important;
background: #1e1e1e !important;
border: 1px solid #555 !important;
border-radius: 6px !important;
box-shadow: 0 4px 12px rgba(0,0,0,0.5) !important;
padding: 12px !important;
min-width: 180px !important;
max-width: 280px !important;
display: none !important;
pointer-events: none !important;
}
.kundenkarte-equipment-tooltip.visible {
display: block !important;
}
.kundenkarte-equipment-tooltip-header {
margin-bottom: 8px !important;
padding-bottom: 8px !important;
border-bottom: 1px solid #444 !important;
color: #e0e0e0 !important;
}
.kundenkarte-equipment-tooltip-fields {
font-size: 0.9em !important;
}
.kundenkarte-equipment-tooltip-fields .field-label {
color: #888 !important;
}
.kundenkarte-equipment-tooltip-fields .field-value {
color: #e0e0e0 !important;
}
/* Modal Footer */
.kundenkarte-modal-footer {
padding: 15px 20px !important;
border-top: 1px solid #444 !important;
background: #2d2d2d !important;
text-align: right !important;
border-radius: 0 0 8px 8px !important;
}
.kundenkarte-modal-footer .button {
margin-left: 10px !important;
}
/* Equipment color swatches in admin */
.kundenkarte-color-swatch {
display: inline-block !important;
width: 24px !important;
height: 24px !important;
border-radius: 4px !important;
border: 1px solid #666 !important;
vertical-align: middle !important;
margin-right: 8px !important;
}
/* Equipment Type Badge */
.kundenkarte-equipment-type-badge {
display: inline-flex !important;
align-items: center !important;
gap: 6px !important;
padding: 4px 10px !important;
border-radius: 4px !important;
font-size: 0.85em !important;
background: #333 !important;
border: 1px solid #444 !important;
color: #e0e0e0 !important;
}
.kundenkarte-equipment-type-badge .te-width {
color: #888 !important;
font-size: 0.9em !important;
}
/* Responsive: scroll on small screens */
@media (max-width: 768px) {
.kundenkarte-carrier-svg-container {
overflow-x: auto !important;
-webkit-overflow-scrolling: touch !important;
}
}
/* ========================================
CONNECTIONS (Stromverbindungen)
======================================== */
.kundenkarte-connections-container {
margin-top: 5px !important;
padding: 8px 15px !important;
background: #252525 !important;
border-top: 1px solid #333 !important;
}
.kundenkarte-connections-svg {
display: block !important;
width: 100% !important;
}
/* Connection lines */
.kundenkarte-connection-line {
fill: none !important;
stroke-width: 2 !important;
stroke-linecap: round !important;
}
.kundenkarte-connection-line.phase-L1 { stroke: #8B4513 !important; }
.kundenkarte-connection-line.phase-L2 { stroke: #000000 !important; }
.kundenkarte-connection-line.phase-L3 { stroke: #808080 !important; }
.kundenkarte-connection-line.phase-N { stroke: #0000FF !important; }
.kundenkarte-connection-line.phase-PE { stroke: #9ACD32 !important; }
.kundenkarte-connection-line.phase-L1N { stroke: #8B4513 !important; stroke-width: 3 !important; }
.kundenkarte-connection-line.phase-L1L2L3 { stroke: #8B4513 !important; stroke-width: 4 !important; }
.kundenkarte-connection-line.phase-L1L2L3N { stroke: #8B4513 !important; stroke-width: 5 !important; }
.kundenkarte-connection-line.phase-L1L2L3NPE { stroke: #8B4513 !important; stroke-width: 6 !important; }
/* Rail/Sammelschiene (generic for all systems) */
.kundenkarte-rail {
cursor: pointer !important;
transition: opacity 0.2s !important;
}
.kundenkarte-rail-line {
stroke-width: 4 !important;
stroke-linecap: round !important;
transition: stroke-width 0.2s, filter 0.2s !important;
}
.kundenkarte-rail:hover .kundenkarte-rail-line {
filter: brightness(1.3) drop-shadow(0 0 3px rgba(255,255,255,0.3)) !important;
stroke-width: 6 !important;
}
.kundenkarte-rail:hover text {
fill: #fff !important;
}
.kundenkarte-rail text {
font-weight: bold !important;
transition: fill 0.2s !important;
}
/* Consumer output (Abgang) */
.kundenkarte-output {
cursor: pointer !important;
transition: opacity 0.2s !important;
}
.kundenkarte-output-line {
fill: none !important;
stroke-width: 2 !important;
stroke-linecap: round !important;
stroke-dasharray: 5, 3 !important;
transition: stroke-width 0.2s !important;
}
.kundenkarte-output-label {
font-size: 10px !important;
fill: #aaa !important;
transition: fill 0.2s, font-weight 0.2s !important;
}
.kundenkarte-output:hover .kundenkarte-output-label {
fill: #fff !important;
font-weight: bold !important;
}
.kundenkarte-output:hover .kundenkarte-output-line {
stroke-width: 3 !important;
filter: drop-shadow(0 0 2px rgba(255,255,255,0.3)) !important;
}
/* Add connection button */
.kundenkarte-add-connection {
display: inline-flex !important;
align-items: center !important;
gap: 5px !important;
padding: 5px 10px !important;
margin-top: 8px !important;
background: #333 !important;
border: 1px dashed #555 !important;
border-radius: 4px !important;
color: #888 !important;
font-size: 0.8em !important;
cursor: pointer !important;
text-decoration: none !important;
}
.kundenkarte-add-connection:hover {
background: #444 !important;
border-color: #27ae60 !important;
color: #27ae60 !important;
}
/* Connection legend */
.kundenkarte-connection-legend {
display: flex !important;
flex-wrap: wrap !important;
gap: 10px !important;
margin-top: 8px !important;
padding-top: 8px !important;
border-top: 1px solid #333 !important;
font-size: 0.75em !important;
}
.kundenkarte-legend-item {
display: flex !important;
align-items: center !important;
gap: 4px !important;
color: #888 !important;
}
.kundenkarte-legend-color {
width: 20px !important;
height: 4px !important;
border-radius: 2px !important;
}
.kundenkarte-legend-color.phase-L1 { background: #8B4513 !important; }
.kundenkarte-legend-color.phase-L2 { background: #000000 !important; border: 1px solid #444 !important; }
.kundenkarte-legend-color.phase-L3 { background: #808080 !important; }
.kundenkarte-legend-color.phase-N { background: #0000FF !important; }
.kundenkarte-legend-color.phase-PE { background: #9ACD32 !important; }
/* Connection dialog form */
.kundenkarte-connection-form .form-row {
display: flex !important;
gap: 10px !important;
margin-bottom: 12px !important;
}
.kundenkarte-connection-form .form-group {
flex: 1 !important;
}
.kundenkarte-connection-form label {
display: block !important;
margin-bottom: 4px !important;
color: #aaa !important;
font-size: 0.85em !important;
}
.kundenkarte-connection-form select,
.kundenkarte-connection-form input {
width: 100% !important;
padding: 8px 10px !important;
background: #2d2d2d !important;
border: 1px solid #444 !important;
border-radius: 4px !important;
color: #e0e0e0 !important;
}
.kundenkarte-connection-form select:focus,
.kundenkarte-connection-form input:focus {
border-color: #3498db !important;
outline: none !important;
}
/* Phase selection buttons */
.kundenkarte-phase-buttons {
display: flex !important;
flex-wrap: wrap !important;
gap: 5px !important;
}
.kundenkarte-phase-btn {
padding: 6px 12px !important;
border: 1px solid #444 !important;
border-radius: 4px !important;
background: #2d2d2d !important;
color: #aaa !important;
cursor: pointer !important;
font-size: 0.85em !important;
}
.kundenkarte-phase-btn:hover {
border-color: #666 !important;
color: #fff !important;
}
.kundenkarte-phase-btn.active {
border-color: #3498db !important;
background: #3498db !important;
color: #fff !important;
}
.kundenkarte-phase-btn.phase-L1 { border-left: 3px solid #8B4513 !important; }
.kundenkarte-phase-btn.phase-L2 { border-left: 3px solid #333 !important; }
.kundenkarte-phase-btn.phase-L3 { border-left: 3px solid #808080 !important; }
.kundenkarte-phase-btn.phase-N { border-left: 3px solid #0000FF !important; }
.kundenkarte-phase-btn.phase-PE { border-left: 3px solid #9ACD32 !important; }
/* ========================================
jsPlumb Interactive Editor (Prototype)
======================================== */
.kundenkarte-jsplumb-prototype {
margin-top: 20px !important;
}
.kundenkarte-jsplumb-prototype .titre {
background: #2d2d2d !important;
padding: 10px 15px !important;
border-radius: 6px !important;
color: #ddd !important;
}
.kundenkarte-jsplumb-prototype .titre:hover {
background: #3d3d3d !important;
}
#jsplumb-canvas {
position: relative !important;
background: linear-gradient(135deg, #1a1a1a 0%, #252525 100%) !important;
}
.jsplumb-node {
transition: box-shadow 0.2s ease !important;
z-index: 10 !important;
}
.jsplumb-node:hover {
z-index: 20 !important;
transform: scale(1.02);
}
.jsplumb-node.jsplumb-external {
background: linear-gradient(135deg, #27ae60 0%, #1e8449 100%) !important;
}
/* jsPlumb endpoint styling */
.jtk-endpoint {
z-index: 30 !important;
}
.jtk-connector {
z-index: 5 !important;
}
/* Connection hover effect */
.jtk-connector:hover path {
stroke-width: 3px !important;
}
/* ========================================
CONNECTION EDITOR (Interactive SVG)
======================================== */
.kundenkarte-connection-editor-wrapper {
border-top: 1px solid #333 !important;
background: #1a1a1a !important;
}
.kundenkarte-connection-editor-header {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
padding: 8px 15px !important;
background: #252525 !important;
border-bottom: 1px solid #333 !important;
}
.kundenkarte-connection-editor-toggle {
display: inline-flex !important;
align-items: center !important;
gap: 8px !important;
color: #888 !important;
text-decoration: none !important;
font-size: 0.85em !important;
padding: 4px 8px !important;
border-radius: 4px !important;
transition: all 0.2s ease !important;
}
.kundenkarte-connection-editor-toggle:hover {
color: #fff !important;
background: #333 !important;
}
.kundenkarte-connection-editor-toggle i {
transition: transform 0.3s ease !important;
}
.kundenkarte-connection-editor-actions {
display: flex !important;
gap: 8px !important;
}
.kundenkarte-connection-editor-actions button {
display: inline-flex !important;
align-items: center !important;
gap: 5px !important;
padding: 5px 10px !important;
background: #333 !important;
border: 1px solid #444 !important;
border-radius: 4px !important;
color: #aaa !important;
font-size: 0.8em !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
}
.kundenkarte-connection-editor-actions button:hover {
background: #444 !important;
border-color: #555 !important;
color: #fff !important;
}
.kundenkarte-add-busbar-btn:hover {
border-color: #3498db !important;
color: #3498db !important;
}
.kundenkarte-add-conn-btn:hover {
border-color: #27ae60 !important;
color: #27ae60 !important;
}
.kundenkarte-connection-editor {
display: none !important;
padding: 15px !important;
background: linear-gradient(135deg, #1a1a1a 0%, #202020 100%) !important;
overflow-x: auto !important;
}
.kundenkarte-connection-editor.expanded {
display: block !important;
}
.kundenkarte-connection-svg {
display: block !important;
max-width: 100% !important;
border-radius: 4px !important;
}
/* Endpoints (connection points) */
.kundenkarte-endpoint {
cursor: crosshair !important;
transition: all 0.2s ease !important;
}
.kundenkarte-endpoint:hover,
.kundenkarte-endpoint.hover {
r: 8 !important;
filter: drop-shadow(0 0 4px rgba(52, 152, 219, 0.8)) !important;
}
.kundenkarte-endpoint.dragging {
fill: #3498db !important;
r: 10 !important;
filter: drop-shadow(0 0 6px rgba(52, 152, 219, 1)) !important;
}
/* Busbar elements */
.kundenkarte-busbar-element {
cursor: pointer !important;
}
.kundenkarte-busbar-element:hover .kundenkarte-busbar-line {
filter: brightness(1.2) !important;
}
.kundenkarte-busbar-line {
transition: filter 0.2s ease !important;
}
.kundenkarte-busbar-endpoint {
opacity: 0.6 !important;
transition: opacity 0.2s ease, r 0.2s ease !important;
}
.kundenkarte-busbar-element:hover .kundenkarte-busbar-endpoint,
.kundenkarte-busbar-endpoint:hover {
opacity: 1 !important;
}
/* Equipment endpoints in editor */
.kundenkarte-equipment-endpoints rect {
transition: filter 0.2s ease !important;
}
.kundenkarte-equipment-endpoints:hover rect {
filter: brightness(1.15) !important;
}
.kundenkarte-equipment-input,
.kundenkarte-equipment-output {
opacity: 0.7 !important;
transition: all 0.2s ease !important;
}
.kundenkarte-equipment-endpoints:hover .kundenkarte-equipment-input,
.kundenkarte-equipment-endpoints:hover .kundenkarte-equipment-output,
.kundenkarte-equipment-input:hover,
.kundenkarte-equipment-output:hover {
opacity: 1 !important;
}
/* Connection paths */
.kundenkarte-connection-path {
cursor: pointer !important;
transition: stroke-width 0.2s ease, filter 0.2s ease !important;
}
.kundenkarte-connection-path:hover {
stroke-width: 4 !important;
filter: drop-shadow(0 0 4px rgba(255, 255, 255, 0.5)) !important;
}
.kundenkarte-connection-path-shadow {
pointer-events: none !important;
}
.kundenkarte-connection-group text {
pointer-events: none !important;
transition: fill 0.2s ease !important;
}
.kundenkarte-connection-group:hover text {
fill: #fff !important;
}
/* Connection layer ordering - SVG elements rendered in order */
.kundenkarte-connections-layer {
pointer-events: auto !important;
}
.kundenkarte-equipment-layer {
pointer-events: auto !important;
}
/* Make connection paths clickable with wider hit area */
.kundenkarte-connection-group {
cursor: pointer !important;
}
.kundenkarte-connection-group:hover .kundenkarte-connection-path {
stroke-width: 4 !important;
}
.kundenkarte-connection-group:hover .kundenkarte-connection-path-shadow {
stroke-width: 7 !important;
}
/* Drag preview line */
.kundenkarte-drag-preview {
pointer-events: none !important;
animation: dashOffset 0.5s linear infinite !important;
}
@keyframes dashOffset {
0% { stroke-dashoffset: 0; }
100% { stroke-dashoffset: 10; }
}
/* Phase-specific colors for endpoints */
.kundenkarte-endpoint[data-phase="L1"] { stroke: #8B4513 !important; }
.kundenkarte-endpoint[data-phase="L2"] { stroke: #000000 !important; }
.kundenkarte-endpoint[data-phase="L3"] { stroke: #808080 !important; }
.kundenkarte-endpoint[data-phase="N"] { stroke: #0066cc !important; }
.kundenkarte-endpoint[data-phase="PE"] { stroke: #27ae60 !important; }
/* Busbar preset buttons */
.busbar-preset-btn {
transition: transform 0.15s ease, box-shadow 0.15s ease !important;
}
.busbar-preset-btn:hover {
transform: scale(1.05) !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
}
.busbar-preset-btn:active {
transform: scale(0.98) !important;
}
/* Connection editor scrollbar */
.kundenkarte-connection-editor::-webkit-scrollbar {
height: 8px !important;
}
.kundenkarte-connection-editor::-webkit-scrollbar-track {
background: #1a1a1a !important;
border-radius: 4px !important;
}
.kundenkarte-connection-editor::-webkit-scrollbar-thumb {
background: #444 !important;
border-radius: 4px !important;
}
.kundenkarte-connection-editor::-webkit-scrollbar-thumb:hover {
background: #555 !important;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.kundenkarte-connection-editor-header {
flex-direction: column !important;
gap: 10px !important;
align-items: flex-start !important;
}
.kundenkarte-connection-editor-actions {
flex-wrap: wrap !important;
}
.kundenkarte-connection-editor-actions button {
flex: 1 !important;
justify-content: center !important;
}
}
/* ========================================
SCHEMATIC EDITOR v2 (Interactive SVG)
======================================== */
.schematic-editor-wrapper {
margin-top: 20px !important;
max-width: 100% !important;
overflow-x: auto !important;
display: flex !important;
flex-direction: column !important;
}
/* Prevent gap between header and message */
.schematic-editor-wrapper > * {
flex-shrink: 0 !important;
}
/* Prevent Schematic Editor from breaking Dolibarr layout */
.kundenkarte-equipment-container {
max-width: 100% !important;
overflow-x: auto !important;
}
.schematic-editor-header {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
padding: 10px 15px !important;
background: #252525 !important;
border: 1px solid #333 !important;
border-radius: 4px 4px 0 0 !important;
margin: 0 !important;
box-sizing: border-box !important;
min-height: 50px !important;
flex-wrap: wrap !important;
}
.schematic-editor-actions {
display: flex !important;
flex-wrap: wrap !important;
gap: 5px !important;
align-items: center !important;
}
/* Einheitliche Größe für alle Toolbar-Buttons (button + a) */
.schematic-editor-actions > button,
.schematic-editor-actions > a {
padding: 5px 8px !important;
background: #333 !important;
border: 1px solid #555 !important;
border-radius: 3px !important;
cursor: pointer !important;
font-size: 12px !important;
line-height: 1.4 !important;
height: 30px !important;
box-sizing: border-box !important;
display: inline-flex !important;
align-items: center !important;
gap: 4px !important;
text-decoration: none !important;
white-space: nowrap !important;
font-family: inherit !important;
}
.schematic-editor-toggle {
color: #3498db !important;
text-decoration: none !important;
transition: color 0.2s ease !important;
}
.schematic-editor-toggle:hover {
color: #5dade2 !important;
}
.schematic-editor-toggle i {
transition: transform 0.3s ease !important;
margin-right: 8px !important;
}
.schematic-editor-canvas {
display: none !important;
background: #1a1a1a !important;
border: 1px solid #333 !important;
border-top: none !important;
border-radius: 0 0 4px 4px !important;
padding: 15px !important;
overflow: auto !important;
min-height: 300px !important;
max-width: 100% !important;
box-sizing: border-box !important;
margin: 0 !important;
}
.schematic-editor-canvas.expanded {
display: block !important;
}
/* SVG Canvas */
.schematic-svg {
background: #1e1e1e !important;
border-radius: 4px !important;
}
/* Rails (Hutschienen) */
.schematic-rail {
cursor: pointer !important;
transition: filter 0.2s ease !important;
}
.schematic-rail:hover {
filter: brightness(1.3) !important;
}
.schematic-rail.drop-target {
filter: brightness(1.5) !important;
stroke: #27ae60 !important;
stroke-width: 3px !important;
}
.schematic-rail-bg {
opacity: 0.8 !important;
}
/* Equipment Blocks */
.schematic-block {
cursor: grab !important;
transition: filter 0.2s ease !important;
}
.schematic-block:hover {
filter: brightness(1.1) !important;
}
.schematic-block.dragging {
cursor: grabbing !important;
filter: brightness(1.2) drop-shadow(0 0 8px rgba(52, 152, 219, 0.6)) !important;
}
.schematic-block-bg {
transition: filter 0.2s ease !important;
}
/* Terminals - hitarea captures all events */
.schematic-terminal {
pointer-events: none !important;
}
.schematic-terminal-hitarea {
cursor: crosshair !important;
pointer-events: all !important;
}
.schematic-terminal-circle {
transition: all 0.2s ease !important;
pointer-events: none !important;
}
.schematic-terminal:hover .schematic-terminal-circle {
r: 8 !important;
filter: drop-shadow(0 0 4px rgba(255, 255, 255, 0.5)) !important;
}
/* Connections */
.schematic-connection {
cursor: pointer !important;
transition: stroke-width 0.2s ease !important;
}
.schematic-connection:hover {
stroke-width: 4 !important;
filter: drop-shadow(0 0 3px rgba(255, 255, 255, 0.4)) !important;
}
.schematic-connection-shadow {
pointer-events: none !important;
}
.schematic-connection-group:hover .schematic-connection {
stroke-width: 4 !important;
}
.schematic-connection-group:hover .schematic-connection-shadow {
stroke-width: 7 !important;
}
/* Connection Preview */
.schematic-connection-preview {
pointer-events: none !important;
animation: dashOffset 0.5s linear infinite !important;
}
/* Messages - Fixed height status bar */
.schematic-message {
padding: 6px 15px !important;
margin: 0 !important;
border-radius: 0 !important;
font-size: 12px !important;
height: 28px !important;
min-height: 28px !important;
max-height: 28px !important;
line-height: 16px !important;
overflow: hidden !important;
box-sizing: border-box !important;
transition: none !important;
background: #2d4a5e !important;
color: #7ec8e3 !important;
border: 1px solid #3498db !important;
border-top: none !important;
border-bottom: none !important;
display: block !important;
}
.schematic-message.info {
background: #2d4a5e !important;
color: #7ec8e3 !important;
border-left: 1px solid #3498db !important;
border-right: 1px solid #3498db !important;
}
.schematic-message.success {
background: #2d5a3d !important;
color: #7ee8a0 !important;
border-left: 1px solid #27ae60 !important;
border-right: 1px solid #27ae60 !important;
}
.schematic-message.warning {
background: #5a5a2d !important;
color: #e8e87e !important;
border-left: 1px solid #f1c40f !important;
border-right: 1px solid #f1c40f !important;
}
.schematic-message.error {
background: #5a2d2d !important;
color: #e87e7e !important;
border-left: 1px solid #e74c3c !important;
border-right: 1px solid #e74c3c !important;
}
/* Terminal color by phase */
.schematic-terminal[data-phase="L1"] .schematic-terminal-circle,
.schematic-terminal-circle[data-phase="L1"] {
fill: #8B4513 !important;
}
.schematic-terminal[data-phase="L2"] .schematic-terminal-circle,
.schematic-terminal-circle[data-phase="L2"] {
fill: #1a1a1a !important;
stroke: #666 !important;
}
.schematic-terminal[data-phase="L3"] .schematic-terminal-circle,
.schematic-terminal-circle[data-phase="L3"] {
fill: #666666 !important;
}
.schematic-terminal[data-phase="N"] .schematic-terminal-circle,
.schematic-terminal-circle[data-phase="N"] {
fill: #0066cc !important;
}
.schematic-terminal[data-phase="PE"] .schematic-terminal-circle,
.schematic-terminal-circle[data-phase="PE"] {
fill: #27ae60 !important;
}
/* Scrollbar for canvas */
.schematic-editor-canvas::-webkit-scrollbar {
width: 10px !important;
height: 10px !important;
}
.schematic-editor-canvas::-webkit-scrollbar-track {
background: #1a1a1a !important;
border-radius: 5px !important;
}
.schematic-editor-canvas::-webkit-scrollbar-thumb {
background: #444 !important;
border-radius: 5px !important;
}
.schematic-editor-canvas::-webkit-scrollbar-thumb:hover {
background: #555 !important;
}
/* ========================================
ANLAGE CONNECTIONS IN TREE VIEW
Simple cable connection display
======================================== */
/* Cable connection content (link inside row) */
.kundenkarte-tree-conn-content {
display: flex !important;
align-items: center !important;
gap: 6px !important;
flex: 1 !important;
padding: 4px 12px !important;
background: rgba(139, 195, 74, 0.1) !important;
border: 1px dashed #555 !important;
border-radius: 4px !important;
font-size: 12px !important;
cursor: pointer !important;
transition: all 0.15s ease !important;
text-decoration: none !important;
}
.kundenkarte-tree-conn-content:hover {
background: rgba(85, 85, 85, 0.25) !important;
}
/* Legacy conn styles (for root level - used by printTree) */
.kundenkarte-tree-conn {
display: flex !important;
align-items: center !important;
gap: 6px !important;
padding: 4px 12px 4px 40px !important;
margin: 2px 0 !important;
background: rgba(139, 195, 74, 0.1) !important;
border: 1px dashed #555 !important;
border-radius: 4px !important;
font-size: 12px !important;
cursor: pointer !important;
transition: all 0.15s ease !important;
text-decoration: none !important;
position: relative !important;
}
/* Senkrechter Strich durch die Kabelzeile (links, durchgehend nach unten) */
.kundenkarte-tree-conn::before {
content: '' !important;
position: absolute !important;
left: 8px !important;
top: 0 !important;
width: 2px !important;
height: 100% !important;
background: #555 !important;
}
/* Horizontaler Strich zur Kabelzeile */
.kundenkarte-tree-conn::after {
content: '' !important;
position: absolute !important;
left: 8px !important;
top: 50% !important;
width: 24px !important;
height: 2px !important;
background: #555 !important;
}
.kundenkarte-tree-conn:hover {
background: rgba(85, 85, 85, 0.25) !important;
}
.kundenkarte-tree-conn .conn-icon,
.kundenkarte-tree-conn-content .conn-icon {
color: #888 !important;
font-size: 11px !important;
}
.kundenkarte-tree-conn .conn-main,
.kundenkarte-tree-conn-content .conn-main {
color: #e0e0e0 !important;
font-weight: 500 !important;
}
.kundenkarte-tree-conn .conn-label,
.kundenkarte-tree-conn-content .conn-label {
color: #8bc34a !important;
background: rgba(139, 195, 74, 0.15) !important;
padding: 2px 8px !important;
border-radius: 3px !important;
font-size: 11px !important;
margin-left: auto !important;
}
.kundenkarte-tree-conn:hover .conn-label,
.kundenkarte-tree-conn-content:hover .conn-label {
background: rgba(139, 195, 74, 0.25) !important;
}
/* Connection tooltip (shown on hover) */
.kundenkarte-conn-tooltip {
position: absolute !important;
z-index: 10000 !important;
background: #1e1e1e !important;
border: 1px solid #27ae60 !important;
border-radius: 6px !important;
box-shadow: 0 4px 16px rgba(0,0,0,0.5) !important;
padding: 12px 15px !important;
min-width: 220px !important;
max-width: 320px !important;
display: none !important;
pointer-events: none !important;
font-family: inherit !important;
font-size: 13px !important;
}
.kundenkarte-conn-tooltip.visible {
display: block !important;
}
.kundenkarte-conn-tooltip-header {
display: flex !important;
align-items: center !important;
gap: 8px !important;
margin-bottom: 10px !important;
padding-bottom: 8px !important;
border-bottom: 1px solid #333 !important;
}
.kundenkarte-conn-tooltip-header i {
color: #27ae60 !important;
font-size: 16px !important;
}
.kundenkarte-conn-tooltip-header .conn-route {
color: #e0e0e0 !important;
font-weight: 500 !important;
}
.kundenkarte-conn-tooltip-fields {
display: grid !important;
grid-template-columns: auto 1fr !important;
gap: 4px 10px !important;
}
.kundenkarte-conn-tooltip-fields .field-label {
color: #888 !important;
font-size: 0.9em !important;
}
.kundenkarte-conn-tooltip-fields .field-value {
color: #e0e0e0 !important;
}
.kundenkarte-conn-tooltip-hint {
margin-top: 10px !important;
padding-top: 8px !important;
border-top: 1px solid #333 !important;
color: #666 !important;
font-size: 0.85em !important;
text-align: center !important;
}
.kundenkarte-conn-tooltip-hint i {
margin-right: 5px !important;
}
/* ========================================
MOBILE / COMPACT VIEW
======================================== */
/* Mobile view toggle button */
.kundenkarte-view-toggle {
display: none !important;
}
@media (max-width: 768px) {
.kundenkarte-view-toggle {
display: inline-flex !important;
align-items: center !important;
gap: 5px !important;
padding: 6px 12px !important;
background: #333 !important;
border: 1px solid #555 !important;
border-radius: 4px !important;
color: #ddd !important;
cursor: pointer !important;
font-size: 12px !important;
}
.kundenkarte-view-toggle.active {
background: #2a4a5e !important;
border-color: #3a6a8e !important;
}
}
/* Compact mode styles */
.kundenkarte-tree.compact-mode .kundenkarte-tree-row {
min-height: 32px !important;
}
.kundenkarte-tree.compact-mode .kundenkarte-tree-item {
padding: 4px 8px !important;
font-size: 13px !important;
}
.kundenkarte-tree.compact-mode .kundenkarte-tree-badges,
.kundenkarte-tree.compact-mode .kundenkarte-tree-label-info,
.kundenkarte-tree.compact-mode .kundenkarte-tree-type {
display: none !important;
}
.kundenkarte-tree.compact-mode .kundenkarte-tree-actions {
opacity: 0 !important;
transition: opacity 0.2s !important;
}
.kundenkarte-tree.compact-mode .kundenkarte-tree-item:hover .kundenkarte-tree-actions,
.kundenkarte-tree.compact-mode .kundenkarte-tree-item.expanded .kundenkarte-tree-actions {
opacity: 1 !important;
}
.kundenkarte-tree.compact-mode .kundenkarte-tree-files {
margin-left: auto !important;
}
/* Mobile-specific overrides */
@media (max-width: 768px) {
/* Tree container */
.kundenkarte-tree {
padding: 5px 0 !important;
}
/* Tree row */
.kundenkarte-tree-row {
min-height: 40px !important;
}
/* Tree item - touch-friendly */
.kundenkarte-tree-item {
padding: 8px 10px !important;
font-size: 14px !important;
min-height: 40px !important;
}
/* Hide badges and extra info on mobile by default */
.kundenkarte-tree-badges,
.kundenkarte-tree-label-info {
display: none !important;
}
/* Smaller type badge */
.kundenkarte-tree-type {
font-size: 10px !important;
padding: 2px 4px !important;
}
/* Touch-friendly actions */
.kundenkarte-tree-actions {
gap: 12px !important;
}
.kundenkarte-tree-actions a {
padding: 8px !important;
}
/* Cable lines - thinner on mobile */
.cable-line {
width: 12px !important;
min-width: 12px !important;
}
/* File badge */
.kundenkarte-tree-file-badge {
padding: 4px 8px !important;
font-size: 12px !important;
}
/* System tabs - scrollable */
.kundenkarte-system-tabs-wrapper {
flex-direction: column !important;
align-items: stretch !important;
}
.kundenkarte-system-tabs {
overflow-x: auto !important;
-webkit-overflow-scrolling: touch !important;
padding-bottom: 5px !important;
}
.kundenkarte-system-tabs::-webkit-scrollbar {
height: 4px !important;
}
.kundenkarte-tree-controls {
justify-content: center !important;
margin-top: 8px !important;
flex-wrap: wrap !important;
gap: 8px !important;
}
/* Uniform button sizes on mobile */
.kundenkarte-tree-controls .button,
.kundenkarte-tree-controls .button.small,
.kundenkarte-tree-controls a.button,
.kundenkarte-tree-controls a.button.small,
.kundenkarte-tree-controls button.button,
.kundenkarte-view-toggle {
flex: 1 1 auto !important;
min-width: 80px !important;
max-width: 150px !important;
padding: 10px 8px !important;
font-size: 12px !important;
text-align: center !important;
justify-content: center !important;
white-space: nowrap !important;
}
/* Hide button text on very small screens, show only icons */
.kundenkarte-tree-controls .button span,
.kundenkarte-tree-controls a.button span {
display: inline !important;
}
.kundenkarte-tree-controls .button i,
.kundenkarte-tree-controls a.button i {
margin-right: 4px !important;
}
/* Compact toggle indicator */
.kundenkarte-tree-toggle {
padding: 10px !important;
}
/* Hide spacer on mobile */
.kundenkarte-tree-spacer {
display: none !important;
}
/* Tooltip adjustments for mobile */
.kundenkarte-tooltip {
max-width: 90vw !important;
min-width: 200px !important;
}
.kundenkarte-file-preview {
max-width: 85vw !important;
}
.kundenkarte-file-preview-thumbs {
justify-content: flex-start !important;
}
.kundenkarte-file-preview-thumb {
width: 50px !important;
height: 50px !important;
}
}
/* Very small screens */
@media (max-width: 480px) {
.kundenkarte-tree-item {
padding: 6px 8px !important;
}
.kundenkarte-tree-type {
display: none !important;
}
.kundenkarte-tree-actions a {
font-size: 14px !important;
}
/* Only show most important actions */
.kundenkarte-tree-actions a:not(:first-child):not(:nth-child(2)) {
display: none !important;
}
.cable-line {
width: 10px !important;
min-width: 10px !important;
}
/* Buttons on very small screens - 2x2 grid */
.kundenkarte-tree-controls {
display: grid !important;
grid-template-columns: 1fr 1fr !important;
gap: 6px !important;
width: 100% !important;
}
.kundenkarte-tree-controls .button,
.kundenkarte-tree-controls .button.small,
.kundenkarte-tree-controls a.button,
.kundenkarte-tree-controls a.button.small,
.kundenkarte-tree-controls button.button,
.kundenkarte-view-toggle {
min-width: unset !important;
max-width: unset !important;
width: 100% !important;
padding: 10px 6px !important;
font-size: 11px !important;
}
}
/* Expanded item in compact mode - show details */
.kundenkarte-tree.compact-mode .kundenkarte-tree-item.expanded {
background: #2a2a2a !important;
flex-wrap: wrap !important;
}
.kundenkarte-tree.compact-mode .kundenkarte-tree-item.expanded .kundenkarte-tree-badges,
.kundenkarte-tree.compact-mode .kundenkarte-tree-item.expanded .kundenkarte-tree-label-info {
display: flex !important;
width: 100% !important;
margin-top: 8px !important;
padding-top: 8px !important;
border-top: 1px solid #444 !important;
}
.kundenkarte-tree.compact-mode .kundenkarte-tree-item.expanded .kundenkarte-tree-badges {
flex-wrap: wrap !important;
gap: 6px !important;
}
/* ========================================
AUTOCOMPLETE (jQuery UI) - Dark Mode
======================================== */
/* Autocomplete dropdown container */
.kundenkarte-autocomplete.ui-autocomplete,
.schematic-dialog .ui-autocomplete,
.schematic-edit-dialog .ui-autocomplete {
background: #2d2d44 !important;
border: 1px solid #555 !important;
border-radius: 4px !important;
box-shadow: 0 4px 12px rgba(0,0,0,0.5) !important;
max-height: 250px !important;
overflow-y: auto !important;
overflow-x: hidden !important;
z-index: 100010 !important;
}
/* Autocomplete list items */
.kundenkarte-autocomplete.ui-autocomplete .ui-menu-item,
.schematic-dialog .ui-autocomplete .ui-menu-item,
.schematic-edit-dialog .ui-autocomplete .ui-menu-item {
padding: 0 !important;
margin: 0 !important;
border: none !important;
}
.kundenkarte-autocomplete.ui-autocomplete .ui-menu-item-wrapper,
.schematic-dialog .ui-autocomplete .ui-menu-item-wrapper,
.schematic-edit-dialog .ui-autocomplete .ui-menu-item-wrapper {
padding: 10px 12px !important;
color: #fff !important;
font-size: 13px !important;
border-bottom: 1px solid #444 !important;
cursor: pointer !important;
white-space: nowrap !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
}
.kundenkarte-autocomplete.ui-autocomplete .ui-menu-item:last-child .ui-menu-item-wrapper,
.schematic-dialog .ui-autocomplete .ui-menu-item:last-child .ui-menu-item-wrapper,
.schematic-edit-dialog .ui-autocomplete .ui-menu-item:last-child .ui-menu-item-wrapper {
border-bottom: none !important;
}
/* Hover and focus states */
.kundenkarte-autocomplete.ui-autocomplete .ui-menu-item-wrapper.ui-state-active,
.kundenkarte-autocomplete.ui-autocomplete .ui-menu-item-wrapper:hover,
.schematic-dialog .ui-autocomplete .ui-menu-item-wrapper.ui-state-active,
.schematic-dialog .ui-autocomplete .ui-menu-item-wrapper:hover,
.schematic-edit-dialog .ui-autocomplete .ui-menu-item-wrapper.ui-state-active,
.schematic-edit-dialog .ui-autocomplete .ui-menu-item-wrapper:hover {
background: #3498db !important;
color: #fff !important;
border-color: #3498db !important;
}
/* Clear button styling */
.dialog-product-clear,
.edit-product-clear {
font-size: 18px !important;
font-weight: bold !important;
line-height: 1 !important;
transition: color 0.2s !important;
}
.dialog-product-clear:hover,
.edit-product-clear:hover {
color: #e74c3c !important;
}
/* ========================================
AUSGEBAUTE ELEMENTE (Decommissioned)
======================================== */
/* Ausgebaute Elemente im Baum standardmäßig ausgeblendet */
/* Funktion 1: kundenkarte-tree-node, Funktion 2: kundenkarte-tree-row */
.kundenkarte-tree .decommissioned {
display: none !important;
}
/* Sichtbar wenn Toggle aktiv */
.kundenkarte-tree.show-decommissioned .decommissioned {
display: flex !important;
opacity: 0.4 !important;
}
/* Ausgegraut: Label durchgestrichen */
.kundenkarte-tree.show-decommissioned .decommissioned .tree-label,
.kundenkarte-tree.show-decommissioned .decommissioned .tree-item-label {
text-decoration: line-through !important;
}
/* Badge "Ausgebaut" mit Datum */
.badge-decommissioned {
display: inline-block !important;
margin-left: 8px !important;
padding: 1px 6px !important;
font-size: 10px !important;
background: #8b4513 !important;
color: #ddd !important;
border-radius: 3px !important;
vertical-align: middle !important;
}
/* Toggle-Button aktiver Zustand */
#btn-toggle-decommissioned.active {
background: rgba(139, 69, 19, 0.3) !important;
border-color: #8b4513 !important;
}