/* ========================================= PlusFit24 – Stylesheet ========================================= */ :root { --primary: #2d2dcc; --primary-dark: #1a1a9e; --accent: #5555ff; --text: #1a1a2e; --text-muted: #6b7280; --border: #e2e4ed; --bg: #f8f9ff; --white: #ffffff; --success: #16a34a; --error: #dc2626; --warning: #d97706; --radius: 12px; --shadow: 0 2px 16px rgba(45,45,204,0.08); } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Outfit', sans-serif; color: var(--text); background: var(--white); min-height: 100vh; display: flex; flex-direction: column; } /* Hintergrundbild auf öffentlichen Seiten */ body:not(.admin-body) { background-image: url('/bg_pf24.png'); background-size: cover; background-position: center top; background-attachment: fixed; background-repeat: no-repeat; } body:not(.admin-body)::before { content: ''; position: fixed; inset: 0; background: rgba(255, 255, 255, 0.82); z-index: 0; pointer-events: none; } body:not(.admin-body) > * { position: relative; z-index: 1; } /* ---- HEADER ---- */ .site-header { border-bottom: 1px solid var(--border); padding: 16px 0; background: var(--white); position: sticky; top: 0; z-index: 100; } .header-inner { max-width: 1100px; margin: 0 auto; padding: 0 24px; } .logo { font-size: 1.6rem; font-weight: 800; color: var(--text); letter-spacing: -0.5px; } .logo span { color: var(--primary); } /* ---- PROGRESS NAV ---- */ .progress-nav { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 20px 24px; border-bottom: 1px solid var(--border); flex-wrap: wrap; } .step { font-size: 0.75rem; font-weight: 600; letter-spacing: 1.5px; color: var(--text-muted); text-transform: uppercase; padding: 4px 0; position: relative; cursor: default; } .step.active { color: var(--primary); border-bottom: 2px solid var(--primary); } .step.done { color: var(--success); } .step-dot { width: 20px; height: 1px; background: var(--border); } /* ---- TARIF SECTION ---- */ .tarif-section { max-width: 1000px; margin: 0 auto; padding: 48px 24px; flex: 1; } .page-title { font-size: 2.5rem; font-weight: 800; text-align: center; margin-bottom: 40px; color: var(--text); } .page-title.italic { font-style: italic; font-weight: 400; font-size: 1.5rem; } .tarif-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 24px; } .tarif-card { border: 1.5px solid var(--border); border-radius: 20px; overflow: hidden; transition: box-shadow 0.2s, transform 0.2s; } .tarif-card:hover { box-shadow: var(--shadow); transform: translateY(-2px); } .tarif-card-inner { padding: 28px 24px; } .tarif-badge { display: flex; align-items: center; gap: 8px; font-size: 0.8rem; color: var(--text-muted); margin-bottom: 12px; } .tarif-icon { font-size: 1rem; } .tarif-name { font-size: 1.5rem; font-weight: 700; margin-bottom: 16px; line-height: 1.2; } .tarif-feature { display: flex; align-items: center; gap: 8px; font-size: 0.9rem; color: var(--text-muted); margin-bottom: 20px; } .tarif-price { display: flex; align-items: baseline; gap: 4px; margin-bottom: 24px; } .price-amount { font-size: 1.8rem; font-weight: 800; color: var(--primary); } .price-period { font-size: 0.9rem; color: var(--text-muted); } .no-tarifs { grid-column: 1/-1; text-align: center; color: var(--text-muted); padding: 60px 20px; } /* ---- BUTTONS ---- */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: 12px 24px; border-radius: 10px; font-family: 'Outfit', sans-serif; font-size: 0.95rem; font-weight: 600; cursor: pointer; border: 2px solid transparent; text-decoration: none; transition: all 0.2s; white-space: nowrap; } .btn-primary { background: var(--primary); color: var(--white); border-color: var(--primary); } .btn-primary:hover { background: var(--primary-dark); border-color: var(--primary-dark); } .btn-outline { background: transparent; color: var(--text); border-color: var(--border); } .btn-outline:hover { border-color: var(--primary); color: var(--primary); } .btn-full { width: 100%; } .btn-success { background: var(--success); color: white; border-color: var(--success); } .btn-warning { background: var(--warning); color: white; border-color: var(--warning); } .btn-danger { background: var(--error); color: white; border-color: var(--error); } .btn-sm { padding: 6px 12px; font-size: 0.82rem; border-radius: 7px; } .btn-submit { width: 100%; padding: 18px; background: var(--primary); color: white; border: none; border-radius: 12px; font-size: 1.1rem; font-weight: 700; cursor: pointer; transition: background 0.2s; } .btn-submit:hover { background: var(--primary-dark); } .btn-submit:disabled { opacity: 0.6; cursor: not-allowed; } /* ---- SIGNUP FORM ---- */ .signup-main { flex: 1; } .signup-container { max-width: 680px; margin: 0 auto; padding: 32px 24px 60px; } .form-step { display: none; } .form-step.active { display: block; } .step-title { font-size: 2rem; font-weight: 800; text-align: center; margin-bottom: 8px; } .step-title.italic { font-style: italic; font-weight: 400; font-size: 1.3rem; } .step-subtitle { text-align: center; color: var(--text-muted); margin-bottom: 32px; font-style: italic; } /* Anrede Buttons */ .salutation-group { display: flex; gap: 12px; margin-bottom: 28px; flex-wrap: wrap; } .sal-btn { flex: 1; min-width: 100px; padding: 12px; border: 1.5px solid var(--border); border-radius: 10px; background: white; font-family: 'Outfit', sans-serif; font-weight: 600; font-size: 0.9rem; cursor: pointer; transition: all 0.2s; } .sal-btn:hover { border-color: var(--primary); color: var(--primary); } .sal-btn.active { border-color: var(--primary); background: var(--primary); color: white; } /* Form Groups */ .form-group { margin-bottom: 16px; } .form-group label { display: block; font-size: 0.88rem; font-weight: 600; margin-bottom: 6px; color: var(--text); } .req { color: var(--error); } .input-wrap { display: flex; align-items: center; border: 1.5px solid var(--border); border-radius: 10px; padding: 0 14px; background: white; transition: border-color 0.2s; } .input-wrap:focus-within { border-color: var(--primary); } .input-icon { font-size: 0.9rem; margin-right: 10px; opacity: 0.5; flex-shrink: 0; } .input-wrap input, .input-wrap textarea, .input-wrap select { flex: 1; border: none; outline: none; padding: 13px 0; font-family: 'Outfit', sans-serif; font-size: 0.95rem; color: var(--text); background: transparent; } .input-wrap input::placeholder { color: #9ca3af; } .email-status { font-size: 1rem; margin-left: 8px; } .email-message { font-size: 0.8rem; margin-top: 4px; padding-left: 4px; } .email-message.error { color: var(--error); } /* Checkboxes */ .checkbox-label { display: flex; align-items: flex-start; gap: 12px; cursor: pointer; margin-bottom: 14px; line-height: 1.5; font-size: 0.9rem; } .checkbox-label input[type="checkbox"] { display: none; } .checkbox-custom { width: 22px; height: 22px; min-width: 22px; border: 2px solid var(--border); border-radius: 5px; display: flex; align-items: center; justify-content: center; transition: all 0.2s; margin-top: 2px; } .checkbox-label input:checked + .checkbox-custom { background: var(--primary); border-color: var(--primary); } .checkbox-label input:checked + .checkbox-custom::after { content: '✓'; color: white; font-size: 0.8rem; font-weight: 700; } /* SEPA Mandate */ .sepa-mandate { background: #f0f0ff; border: 1.5px solid var(--primary); border-radius: 10px; padding: 16px; margin-bottom: 24px; font-size: 0.85rem; line-height: 1.6; } .form-label-section { display: block; font-weight: 700; font-size: 0.9rem; margin-bottom: 12px; color: var(--text-muted); } /* Step Buttons */ .step-buttons { display: flex; justify-content: center; gap: 16px; margin-top: 32px; } .step-buttons .btn { min-width: 140px; } /* Alerts */ .alert { padding: 12px 16px; border-radius: 8px; margin-bottom: 16px; font-size: 0.9rem; } .alert-success { background: #dcfce7; color: var(--success); border: 1px solid #bbf7d0; } .alert-error { background: #fee2e2; color: var(--error); border: 1px solid #fecaca; } .hidden { display: none !important; } /* Warning Box */ .minor-warning { margin-top: 16px; } .warning-box { background: #fffbeb; border: 1.5px solid var(--warning); border-radius: 10px; padding: 16px; font-size: 0.9rem; } .warning-box strong { display: block; margin-bottom: 6px; } .minor-info-box { background: #fffbeb; border: 1.5px solid var(--warning); border-radius: 10px; padding: 16px; margin-bottom: 16px; font-size: 0.9rem; } .minor-info-box strong { display: block; margin-bottom: 8px; } .minor-info-box p { margin-bottom: 10px; } /* ---- ABSCHLUSS ---- */ .abschluss-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 32px; } @media (max-width: 640px) { .abschluss-grid { grid-template-columns: 1fr; } } .tarif-summary-card { border: 1.5px solid var(--border); border-radius: 16px; padding: 24px; } .summary-badge { font-size: 0.8rem; color: var(--text-muted); margin-bottom: 12px; } .tarif-summary-card h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 16px; } .summary-feature { display: flex; align-items: center; gap: 8px; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 8px; } .summary-price { display: flex; align-items: baseline; gap: 4px; margin-top: 16px; } .price-big { font-size: 2rem; font-weight: 800; color: var(--primary); } .final-checks { padding: 4px 0; } .final-checks h3 { font-size: 1.2rem; font-weight: 700; margin-bottom: 16px; } .doc-buttons { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; } .doc-btn { padding: 8px 14px; border: 1.5px solid var(--border); border-radius: 8px; font-size: 0.8rem; font-weight: 600; text-decoration: none; color: var(--text); transition: all 0.2s; display: inline-block; } .doc-btn:hover { border-color: var(--primary); color: var(--primary); } .submit-section { text-align: center; padding: 20px 0; } .submit-notice { font-size: 0.9rem; margin-bottom: 16px; } .ssl-notice { font-size: 0.8rem; color: var(--text-muted); margin-top: 12px; } /* ---- SUCCESS ---- */ .success-main { flex: 1; display: flex; align-items: center; justify-content: center; padding: 40px 24px; } .success-card { text-align: center; max-width: 480px; padding: 48px 32px; border: 1.5px solid var(--border); border-radius: 20px; } .success-icon { font-size: 3rem; margin-bottom: 16px; } .success-card h1 { font-size: 1.8rem; font-weight: 800; margin-bottom: 12px; } .success-card p { color: var(--text-muted); margin-bottom: 8px; } .success-sub { font-size: 0.9rem; margin-bottom: 24px !important; } /* ---- FOOTER ---- */ .site-footer { text-align: center; padding: 24px; border-top: 1px solid var(--border); font-size: 0.85rem; color: var(--text-muted); margin-top: auto; } .site-footer a { color: var(--primary); text-decoration: none; } /* ================================================ ADMIN STYLES ================================================ */ .admin-body { background: var(--bg); } /* Admin Login */ .admin-login-wrap { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 24px; } .admin-login-card { background: white; border-radius: 20px; padding: 48px 40px; width: 100%; max-width: 420px; box-shadow: var(--shadow); border: 1.5px solid var(--border); } .admin-logo { margin-bottom: 24px; } .admin-login-card h1 { font-size: 1.5rem; font-weight: 700; margin-bottom: 24px; } /* Admin Layout */ .admin-layout { display: flex; min-height: 100vh; } /* Sidebar */ .admin-sidebar { width: 240px; min-width: 240px; background: var(--text); color: white; display: flex; flex-direction: column; padding: 24px 0; position: sticky; top: 0; height: 100vh; overflow-y: auto; } .admin-sidebar .logo { padding: 0 24px 32px; color: white; } .admin-sidebar .logo span { color: #7c7cff; } .admin-nav { display: flex; flex-direction: column; gap: 4px; flex: 1; } .nav-link { display: block; padding: 12px 24px; color: rgba(255,255,255,0.7); text-decoration: none; font-size: 0.9rem; font-weight: 500; transition: all 0.2s; } .nav-link:hover, .nav-link.active { background: rgba(255,255,255,0.1); color: white; } .sidebar-footer { padding: 16px 24px; border-top: 1px solid rgba(255,255,255,0.15); font-size: 0.85rem; color: rgba(255,255,255,0.6); } .logout-link { display: block; color: #ff6b6b; text-decoration: none; margin-top: 8px; font-weight: 600; } /* Admin Main */ .admin-main { flex: 1; padding: 32px; overflow-y: auto; } .admin-header h1 { font-size: 2rem; font-weight: 800; margin-bottom: 24px; } /* Stats */ .stats-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 16px; margin-bottom: 32px; } .stat-card { background: white; border: 1.5px solid var(--border); border-radius: 14px; padding: 20px; text-align: center; } .stat-number { font-size: 2rem; font-weight: 800; color: var(--primary); } .stat-label { font-size: 0.8rem; color: var(--text-muted); margin-top: 4px; } /* Admin Section */ .admin-section { margin-bottom: 40px; } .section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; } .section-header h2 { font-size: 1.4rem; font-weight: 700; } /* Tariff Admin Cards */ .tariff-admin-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; } .tariff-admin-card { background: white; border: 1.5px solid var(--border); border-radius: 14px; padding: 20px; } .tariff-admin-card.inactive { opacity: 0.65; } .tariff-admin-header { margin-bottom: 10px; } .tariff-status-badge { font-size: 0.78rem; font-weight: 600; padding: 3px 10px; border-radius: 20px; } .tariff-status-badge.active { background: #dcfce7; color: var(--success); } .tariff-status-badge.inactive { background: #fee2e2; color: var(--error); } .tariff-admin-card h3 { font-size: 1.05rem; font-weight: 700; margin-bottom: 12px; } .tariff-admin-details { display: flex; flex-direction: column; gap: 4px; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 16px; } .tariff-admin-actions { display: flex; flex-wrap: wrap; gap: 8px; } /* Table */ .table-wrap { overflow-x: auto; background: white; border-radius: 14px; border: 1.5px solid var(--border); } .admin-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; } .admin-table th { padding: 12px 16px; text-align: left; background: var(--bg); font-weight: 700; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); border-bottom: 1.5px solid var(--border); } .admin-table td { padding: 12px 16px; border-bottom: 1px solid var(--border); vertical-align: middle; } .admin-table tr:last-child td { border-bottom: none; } .admin-table tr:hover td { background: var(--bg); } .iban-cell { font-family: monospace; font-size: 0.8rem; } .no-data { text-align: center; color: var(--text-muted); padding: 32px !important; } /* Search */ .search-input { padding: 8px 14px; border: 1.5px solid var(--border); border-radius: 8px; font-family: 'Outfit', sans-serif; font-size: 0.9rem; outline: none; width: 260px; } .search-input:focus { border-color: var(--primary); } /* Settings */ .settings-card { background: white; border: 1.5px solid var(--border); border-radius: 14px; padding: 28px; max-width: 480px; } /* Form Controls (Admin) */ .form-control { width: 100%; padding: 10px 14px; border: 1.5px solid var(--border); border-radius: 8px; font-family: 'Outfit', sans-serif; font-size: 0.92rem; outline: none; transition: border-color 0.2s; } .form-control:focus { border-color: var(--primary); } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } /* Modal */ .modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 16px; } .modal { background: white; border-radius: 16px; width: 100%; max-width: 520px; max-height: 90vh; overflow-y: auto; } .modal-header { display: flex; align-items: center; justify-content: space-between; padding: 20px 24px; border-bottom: 1.5px solid var(--border); } .modal-header h3 { font-size: 1.1rem; font-weight: 700; } .modal-close { background: none; border: none; font-size: 1.1rem; cursor: pointer; color: var(--text-muted); padding: 4px 8px; border-radius: 6px; } .modal-close:hover { background: var(--bg); } .modal form { padding: 24px; } .modal .form-group { margin-bottom: 16px; } .modal .form-group label { display: block; font-size: 0.88rem; font-weight: 600; margin-bottom: 6px; } .modal-footer { display: flex; justify-content: flex-end; gap: 12px; padding-top: 16px; border-top: 1.5px solid var(--border); margin-top: 8px; } /* Responsive */ @media (max-width: 768px) { .admin-layout { flex-direction: column; } .admin-sidebar { width: 100%; height: auto; position: relative; } .admin-nav { flex-direction: row; overflow-x: auto; } .page-title { font-size: 1.8rem; } .form-row { grid-template-columns: 1fr; } } /* ---- KATEGORIEN ---- */ .category-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; } .category-row { display: flex; align-items: center; justify-content: space-between; background: white; border: 1.5px solid var(--border); border-radius: 12px; padding: 14px 20px; gap: 16px; } .category-info { display: flex; align-items: center; gap: 16px; } .category-name { font-weight: 700; font-size: 1rem; } .category-meta { font-size: 0.8rem; color: var(--text-muted); background: var(--bg); padding: 3px 10px; border-radius: 20px; } .category-actions { display: flex; gap: 8px; flex-shrink: 0; } .category-pill { font-size: 0.75rem; font-weight: 600; background: #ede9fe; color: #5b21b6; padding: 3px 10px; border-radius: 20px; } .no-data-card { padding: 40px; text-align: center; color: var(--text-muted); background: white; border: 1.5px dashed var(--border); border-radius: 14px; } .info-box { background: #eff6ff; border: 1.5px solid #bfdbfe; border-radius: 10px; padding: 14px 18px; font-size: 0.88rem; color: #1e40af; } /* ================================================ MITGLIED DETAIL – KARTEIKARTE ================================================ */ .detail-header { display: flex; align-items: center; gap: 16px; margin-bottom: 24px; flex-wrap: wrap; } .detail-header-title { flex: 1; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .detail-header-title h1 { font-size: 1.6rem; font-weight: 800; margin: 0; } .member-id-badge { font-size: 0.78rem; font-weight: 700; background: var(--bg); border: 1.5px solid var(--border); color: var(--text-muted); padding: 3px 10px; border-radius: 20px; } .status-badge { font-size: 0.78rem; font-weight: 700; padding: 4px 12px; border-radius: 20px; } .status-badge.active { background: #dcfce7; color: var(--success); } .status-badge.inactive { background: #fee2e2; color: var(--error); } .status-badge.warning { background: #fffbeb; color: var(--warning); } .detail-header-actions { display: flex; gap: 10px; } /* Grid der Karten */ .karteikarte-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } @media (max-width: 900px) { .karteikarte-grid { grid-template-columns: 1fr; } } /* Einzelne Karte */ .karte { background: white; border: 1.5px solid var(--border); border-radius: 16px; overflow: hidden; transition: box-shadow 0.2s; } .karte.edit-mode { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(45,45,204,0.08); } .karte-full { grid-column: 1 / -1; } .karte-header { display: flex; align-items: center; gap: 10px; padding: 14px 20px; background: var(--bg); border-bottom: 1.5px solid var(--border); } .karte-header h3 { font-size: 0.95rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); margin: 0; } .karte-icon { font-size: 1.1rem; } .karte-body { padding: 20px; } /* Zeilen & Felder */ .karte-row { display: flex; gap: 16px; margin-bottom: 14px; } .karte-row:last-child { margin-bottom: 0; } .karte-field { flex: 1; display: flex; flex-direction: column; gap: 5px; } .karte-field-full { flex: 1 1 100%; } .karte-field label { font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); } .karte-field label small { font-size: 0.7rem; font-weight: 400; text-transform: none; letter-spacing: 0; } /* Input Felder im Readonly-Modus */ .karte-input { padding: 9px 12px; border: 1.5px solid transparent; border-radius: 8px; background: var(--bg); font-family: 'Outfit', sans-serif; font-size: 0.92rem; color: var(--text); width: 100%; transition: all 0.2s; outline: none; } .karte-input:disabled { background: var(--bg); color: var(--text); cursor: default; -webkit-text-fill-color: var(--text); opacity: 1; } /* Im Edit-Modus */ .karte-input:not(:disabled) { background: white; border-color: var(--border); } .karte-input:not(:disabled):focus { border-color: var(--primary); } /* Immer readonly (nie editierbar) */ .karte-readonly { background: #f8f8ff !important; color: var(--text-muted) !important; font-style: italic; } .karte-iban { font-family: monospace; letter-spacing: 1px; } .karte-empty { color: var(--text-muted); font-style: italic; text-align: center; padding: 20px 0; } /* Auszeit Tabelle */ .pause-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; } .pause-table th { text-align: left; padding: 8px 12px; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); border-bottom: 1.5px solid var(--border); background: var(--bg); } .pause-table td { padding: 10px 12px; border-bottom: 1px solid var(--border); } .pause-table tr:last-child td { border-bottom: none; } .pause-table tr:hover td { background: var(--bg); } /* Hover auf Mitglieder-Tabellenzeilen */ .member-row:hover td { background: #f0f0ff !important; } /* ---- IBAN Validierung ---- */ .iban-message { font-size: 0.8rem; margin-top: 4px; padding-left: 4px; min-height: 18px; } .iban-message.success { color: var(--success); } .iban-message.error { color: var(--error); } .input-wrap input.input-valid, .karte-input.input-valid { border-color: var(--success) !important; background: #f0fdf4 !important; } .input-wrap input.input-error, .karte-input.input-error { border-color: var(--error) !important; background: #fff5f5 !important; } /* ---- Auszeit-Bereich in Karte 3 ---- */ .auszeit-section { margin-top: 20px; border-top: 1.5px solid var(--border); padding-top: 16px; } .auszeit-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } .auszeit-title { font-size: 0.85rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); } .neue-auszeit { margin-top: 16px; background: #f8f8ff; border: 1.5px dashed var(--primary); border-radius: 10px; padding: 16px; } .neue-auszeit-title { font-size: 0.88rem; font-weight: 700; color: var(--primary); margin-bottom: 12px; } .auszeit-form-row { display: flex; gap: 12px; align-items: flex-start; flex-wrap: wrap; } .auszeit-form-row .karte-field { min-width: 130px; } /* ================================================ ABRECHNUNG / BILLING ================================================ */ .billing-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; flex-wrap: wrap; gap: 12px; } .billing-header h1 { font-size: 1.8rem; font-weight: 800; margin: 0; } .period-form { display: flex; gap: 8px; align-items: center; } .period-input { padding: 8px 12px; border: 1.5px solid var(--border); border-radius: 8px; font-family: 'Outfit', sans-serif; font-size: 0.92rem; outline: none; } .period-input:focus { border-color: var(--primary); } .billing-period-title { font-size: 1.3rem; font-weight: 700; color: var(--primary); margin-bottom: 20px; } .billing-actions { margin-bottom: 24px; } .billing-preview-box { display: flex; align-items: center; justify-content: space-between; background: #eff6ff; border: 1.5px solid #bfdbfe; border-radius: 14px; padding: 16px 24px; gap: 16px; flex-wrap: wrap; } .preview-info { display: flex; flex-direction: column; gap: 4px; } .preview-info strong { font-size: 1rem; } .preview-info span { font-size: 0.88rem; color: var(--text-muted); } .billing-run-done { display: flex; align-items: center; justify-content: flex-end; gap: 12px; } .billing-action-btns { display: flex; gap: 10px; flex-wrap: wrap; } .invoice-nr { font-family: monospace; font-size: 0.82rem; color: var(--text-muted); } .amount-cell { font-size: 1rem; } .text-muted { color: var(--text-muted); } .invoice-status { font-size: 0.82rem; font-weight: 700; padding: 3px 8px; border-radius: 12px; } .invoice-status.open { background: #fee2e2; color: var(--error); } .invoice-status.paid { background: #dcfce7; color: var(--success); } .invoice-status.cancelled { background: #f3f4f6; color: var(--text-muted); } .invoice-actions { display: flex; gap: 6px; align-items: center; } .preview-table-wrap { margin-bottom: 24px; } .preview-title { font-size: 1rem; font-weight: 700; color: var(--text-muted); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; } .runs-section { margin-top: 32px; } .runs-section h3 { font-size: 1rem; font-weight: 700; color: var(--text-muted); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; } .billing-past-info { background: #f9fafb; border: 1.5px solid var(--border); border-radius: 14px; padding: 14px 24px; font-size: 0.92rem; color: var(--text-muted); } /* Abrechnungsläufe scrollbar */ .runs-scroll-wrap { max-height: 370px; /* ca. 10 Zeilen */ overflow-y: auto; border-radius: 0 0 14px 14px; border: 1.5px solid var(--border); } .runs-scroll-wrap .admin-table { border: none; } .runs-scroll-wrap thead th { position: sticky; top: 0; z-index: 1; } /* ================================================ FINANZÜBERSICHT ================================================ */ .finance-title { font-size:1.8rem; font-weight:800; margin-bottom:20px; } .finance-kpi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px; margin-bottom: 28px; } .kpi-card { border-radius: 14px; padding: 18px 20px; border: 1.5px solid var(--border); background: white; } .kpi-label { font-size:0.75rem; font-weight:700; text-transform:uppercase; letter-spacing:0.5px; margin-bottom:8px; } .kpi-value { font-size:1.7rem; font-weight:800; margin-bottom:4px; } .kpi-sub { font-size:0.78rem; color:var(--text-muted); } .kpi-blue .kpi-value { color: var(--primary); } .kpi-red .kpi-value { color: var(--error); } .kpi-orange .kpi-value { color: var(--warning); } .kpi-purple .kpi-value { color: #7c3aed; } .kpi-green .kpi-value { color: var(--success); } .kpi-yellow .kpi-value { color: #b45309; } /* Tabs */ .finance-tabs { display: flex; gap: 4px; border-bottom: 2px solid var(--border); margin-bottom: 20px; flex-wrap: wrap; } .ftab { padding: 10px 16px; background: none; border: none; border-bottom: 2px solid transparent; margin-bottom: -2px; font-family: 'Outfit', sans-serif; font-size: 0.88rem; font-weight: 600; color: var(--text-muted); cursor: pointer; transition: all 0.15s; white-space: nowrap; } .ftab:hover { color: var(--text); } .ftab.active { color: var(--primary); border-bottom-color: var(--primary); } .ftab-content { display: none; } .ftab-content.active { display: block; } .finance-card { background: white; border: 1.5px solid var(--border); border-radius: 14px; padding: 24px; margin-bottom: 16px; } .finance-card h3 { font-size: 1rem; font-weight: 700; margin-bottom: 16px; } /* Auslaufende Verträge */ .expiry-badge { padding: 3px 10px; border-radius: 20px; font-size: 0.8rem; font-weight: 700; } .expiry-urgent { background:#fee2e2; color:var(--error); } .expiry-warning { background:#fffbeb; color:var(--warning); } .expiry-normal { background:#f0fdf4; color:var(--success); } /* ---- CSV File Upload ---- */ .file-upload-wrap { position: relative; } .file-upload-wrap input[type="file"] { position: absolute; width: 1px; height: 1px; opacity: 0; } .file-upload-label { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border: 1.5px dashed var(--border); border-radius: 8px; cursor: pointer; font-size: 0.9rem; color: var(--text-muted); transition: all 0.2s; background: var(--bg); } .file-upload-label:hover { border-color: var(--primary); color: var(--primary); background: #f0f0ff; } .file-upload-label::before { content: '📁'; font-size: 1.1rem; } .import-divider { display: flex; align-items: center; gap: 12px; margin: 16px 0; color: var(--text-muted); font-size: 0.85rem; } .import-divider::before, .import-divider::after { content: ''; flex: 1; height: 1px; background: var(--border); } /* Storno Button */ .btn-storno { background: #fff0f0; color: var(--error); border: 1.5px solid #fecaca; font-weight: 700; } .btn-storno:hover { background: #fee2e2; border-color: var(--error); } /* ---- Rechnungshistorie in Mitglied-Detail ---- */ .karte-header-sub { margin-left: auto; font-size: 0.78rem; font-weight: 600; color: var(--text-muted); background: var(--bg); padding: 2px 10px; border-radius: 20px; border: 1px solid var(--border); } .invoice-history-wrap { max-height: 272px; /* ca. 6 Zeilen */ overflow-y: auto; border-radius: 0 0 14px 14px; } .invoice-history-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; } .invoice-history-table thead th { position: sticky; top: 0; z-index: 1; padding: 10px 16px; background: var(--bg); font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); border-bottom: 1.5px solid var(--border); } .invoice-history-table td { padding: 10px 16px; border-bottom: 1px solid var(--border); vertical-align: middle; } .invoice-history-row:last-child td { border-bottom: none; } .invoice-history-row:hover td { background: #f8f8ff; cursor: default; } /* ---- NFC / Zugangskarte ---- */ .token-wrap { display: flex; align-items: center; gap: 10px; background: #f1f0ff; border: 1.5px solid #c4b5fd; border-radius: 8px; padding: 10px 14px; } .token-display { font-family: monospace; font-size: 0.88rem; letter-spacing: 1px; color: #4c1d95; flex: 1; word-break: break-all; } .token-regen-btn { flex-shrink: 0; } .nfc-info-box { margin-top: 14px; background: #f0fdf4; border: 1.5px solid #bbf7d0; border-radius: 8px; padding: 12px 16px; font-size: 0.82rem; color: #166534; line-height: 1.6; } .nfc-info-box strong { display: block; margin-bottom: 6px; } .nfc-info-box ol { padding-left: 18px; } /* ================================================ KOMPAKTE MITGLIEDS-KARTEIKARTE (nur member-detail) ================================================ */ .member-detail-page .karte-header { padding: 7px 14px; } .member-detail-page .karte-header h3 { font-size: 0.72rem; } .member-detail-page .karte-icon { font-size: 0.9rem; } .member-detail-page .karte-body { padding: 10px 14px; } .member-detail-page .karte-row { margin-bottom: 7px; gap: 8px; } .member-detail-page .karte-field label { font-size: 0.67rem; margin-bottom: 2px; } .member-detail-page .karte-input { padding: 5px 9px; font-size: 0.8rem; border-radius: 6px; } .member-detail-page .karteikarte-grid { gap: 10px; } .member-detail-page .detail-header { margin-bottom: 10px; } .member-detail-page .detail-header-title h1 { font-size: 1.15rem; } .member-detail-page .admin-main { padding: 16px 20px; } .member-detail-page .auszeit-section { margin-top: 8px; padding-top: 8px; } .member-detail-page .karte-empty { padding: 6px 0; font-size: 0.8rem; } .member-detail-page .pause-table th, .member-detail-page .pause-table td { padding: 5px 8px; font-size: 0.78rem; } .member-detail-page .invoice-history-wrap { max-height: 180px; } .member-detail-page .invoice-history-table thead th, .member-detail-page .invoice-history-table td { padding: 5px 10px; font-size: 0.78rem; } .member-detail-page .token-wrap { padding: 6px 10px; } .member-detail-page .token-display { font-size: 0.78rem; } .member-detail-page .nfc-info-box { padding: 7px 11px; font-size: 0.76rem; margin-top: 7px; } .member-detail-page .nfc-info-box strong { margin-bottom: 2px; } .member-detail-page .alert { padding: 7px 12px; font-size: 0.8rem; margin-bottom: 8px; } .member-detail-page .status-badge { font-size: 0.72rem; padding: 2px 8px; } .member-detail-page .btn-sm { padding: 4px 9px; font-size: 0.76rem; } .member-detail-page .neue-auszeit { padding: 10px 12px; } .member-detail-page .neue-auszeit-title { font-size: 0.8rem; margin-bottom: 8px; } /* Verträge Grid */ .contracts-grid { display: grid; grid-template-columns: 300px 1fr; gap: 16px; align-items: start; } @media (max-width: 900px) { .contracts-grid { grid-template-columns: 1fr; } } /* ---- Checkboxen besser sichtbar (Bestellformular) ---- */ .checkbox-label { background: #f8f8ff; border: 1.5px solid var(--border); border-radius: 10px; padding: 12px 14px; transition: border-color 0.2s, background 0.2s; } .checkbox-label:hover { border-color: var(--primary); background: #f0f0ff; } .checkbox-custom { width: 26px; height: 26px; min-width: 26px; border: 2.5px solid #9ca3af; border-radius: 6px; background: white; } .checkbox-label input:checked + .checkbox-custom { background: var(--primary); border-color: var(--primary); box-shadow: 0 0 0 3px rgba(45,45,204,0.15); } .checkbox-label input:checked + .checkbox-custom::after { font-size: 0.95rem; } /* Sepa Mandate Checkbox extra hervorheben */ .sepa-mandate .checkbox-label { background: #f0f0ff; border-color: var(--primary); } /* ================================================ MAILING ================================================ */ .mailing-layout { display: grid; grid-template-columns: 1fr 300px; gap: 16px; align-items: start; } @media (max-width: 900px) { .mailing-layout { grid-template-columns: 1fr; } } .mail-textarea { width: 100%; font-family: 'Outfit', sans-serif; font-size: 0.92rem; resize: vertical; min-height: 200px; } .mail-preview-hint { font-size: 0.8rem; color: var(--text-muted); margin-top: 6px; } .mail-recipients { max-height: 500px; overflow-y: auto; } .recipients-list { margin-top: 12px; } .recipient-row { display: flex; flex-direction: column; padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 0.85rem; } .recipient-row:last-child { border-bottom: none; } .recipient-name { font-weight: 600; } .recipient-email { color: var(--text-muted); font-size: 0.8rem; } .mail-type-badge { font-size: 0.78rem; font-weight: 600; padding: 2px 8px; border-radius: 10px; background: var(--bg); } .mail-type-bulk { background: #ede9fe; color: #5b21b6; } .mail-type-direct { background: #dbeafe; color: #1e40af; } .mail-type-renewal { background: #dcfce7; color: var(--success); } .mail-type-renewal_auto { background: #fef3c7; color: var(--warning); } /* ---- Pending Badge in Sidebar ---- */ .nav-badge { display: inline-block; background: var(--error); color: white; font-size: 0.7rem; font-weight: 700; padding: 1px 6px; border-radius: 10px; margin-left: 6px; vertical-align: middle; animation: pulse-badge 2s infinite; } @keyframes pulse-badge { 0%, 100% { opacity: 1; } 50% { opacity: 0.6; } } /* ---- Pending Stat Card ---- */ .stat-card-pending { border: 1.5px solid #fecaca !important; background: #fff5f5 !important; transition: box-shadow 0.2s; } .stat-card-pending:hover { box-shadow: 0 0 0 3px rgba(220,38,38,0.15); } /* ---- Pending Member Row ---- */ .member-row-pending td { background: #fffbeb !important; } .member-row-pending:hover td { background: #fef3c7 !important; } .member-row-pending::before { content: '⏳'; } /* ---- Neue Mitglieder Hervorhebung ---- */ .stat-card-new { border: 1.5px solid #bae6fd !important; background: #f0f9ff !important; cursor: pointer; transition: box-shadow 0.2s; } .stat-card-new:hover { box-shadow: 0 0 0 3px rgba(8,145,178,0.15); } .member-row-new td { background: #f0f9ff !important; } .member-row-new td:first-child::before { content: '🆕 '; } .member-row-new:hover td { background: #e0f2fe !important; }